Skip to content

Commit 3b4b7ba

Browse files
committed
add middlewares for mutation builder
1 parent b7b6764 commit 3b4b7ba

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

src/builder/HttpMutationBuilder.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ import { WithOptional } from '../types/utils';
33
import { HttpQueryBuilder } from './HttpQueryBuilder';
44
import { MutationBuilder, MutationBuilderConfig } from './MutationBuilder';
55
import { QueryBuilder } from './QueryBuilder';
6+
import { MiddlewareFn } from './middlewares';
67
import {
78
HttpBaseHeaders,
89
HttpBaseParams,
910
HttpBaseSearch,
1011
HttpBuilderTypeTemplate,
12+
SetAllTypes,
1113
SetDataType,
1214
SetErrorType,
1315
} from './types';
@@ -75,6 +77,11 @@ export class HttpMutationBuilder<
7577
vars?: TVars,
7678
reset?: TReset,
7779
) => HttpMutationBuilder<AppendVarsType<T, Partial<TVars>, TReset>>;
80+
81+
declare withMiddleware: <TVars = T['vars'], TData = T['data'], TError = T['error']>(
82+
middleware: MiddlewareFn<TVars, TData, TError, T>,
83+
) => HttpMutationBuilder<SetAllTypes<T, TData, TError, TVars, true>>;
84+
7885
declare asQueryBuilder: () => HttpQueryBuilder<T>;
7986
protected override QueryBuilderConstructor: typeof QueryBuilder = HttpQueryBuilder as typeof QueryBuilder;
8087
}

src/builder/HttpQueryBuilder.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,11 @@ export class HttpQueryBuilder<T extends HttpBuilderTypeTemplate = HttpBuilderTyp
6767
vars?: TVars,
6868
reset?: TReset,
6969
) => HttpQueryBuilder<AppendVarsType<T, Partial<TVars>, TReset>>;
70-
declare asMutationBuilder: () => HttpMutationBuilder<T>;
70+
7171
declare withMiddleware: <TVars = T['vars'], TData = T['data'], TError = T['error']>(
7272
middleware: MiddlewareFn<TVars, TData, TError, T>,
7373
) => HttpQueryBuilder<SetAllTypes<T, TData, TError, TVars, true>>;
74+
75+
declare asMutationBuilder: () => HttpMutationBuilder<T>;
7476
protected override MutationBuilderConstructor: typeof MutationBuilder = HttpMutationBuilder as typeof MutationBuilder;
7577
}

src/builder/MutationBuilder.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ import {
1515
import { mergeTagOptions } from '../tags/mergeTagOptions';
1616
import { QueryInvalidatesMetadata } from '../tags/types';
1717
import { QueryBuilder } from './QueryBuilder';
18-
import { BuilderMergeVarsFn, BuilderQueryFn, SetDataType, SetErrorType } from './types';
18+
import { MiddlewareFn, applyMiddleware } from './middlewares';
19+
import { BuilderMergeVarsFn, BuilderQueryFn, SetAllTypes, SetDataType, SetErrorType } from './types';
1920
import { AppendVarsType, BuilderTypeTemplate } from './types';
2021
import { areKeysEqual, mergeMutationOptions, mergeVars } from './utils';
2122

@@ -180,6 +181,14 @@ export class MutationBuilder<T extends BuilderTypeTemplate = BuilderTypeTemplate
180181
return new ctor<T>(newConfig) as this;
181182
}
182183

184+
withMiddleware<TVars = T['vars'], TData = T['data'], TError = T['error']>(
185+
middleware: MiddlewareFn<TVars, TData, TError, T>,
186+
): MutationBuilder<SetAllTypes<T, TData, TError, TVars, true>> {
187+
const newBuilder = this as unknown as MutationBuilder<SetAllTypes<T, TData, TError, TVars, true>>;
188+
189+
return newBuilder.withConfig({ queryFn: applyMiddleware(this.config.queryFn, middleware) });
190+
}
191+
183192
freeze(): MutationBuilderFrozen<T> {
184193
return this;
185194
}

0 commit comments

Comments
 (0)