mobx-tanstack-query-api 0.34.1 → 0.35.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.cjs +15 -6
- package/index.cjs.map +1 -1
- package/index.js +15 -6
- package/index.js.map +1 -1
- package/package.json +2 -2
package/index.cjs
CHANGED
|
@@ -19,6 +19,7 @@ class EndpointQuery extends mobxTanstackQuery.Query {
|
|
|
19
19
|
uniqKey,
|
|
20
20
|
transform: transformResponse,
|
|
21
21
|
params,
|
|
22
|
+
onDone: onDoneInput,
|
|
22
23
|
queryClient: overridedQueryClient,
|
|
23
24
|
...queryOptions
|
|
24
25
|
} = unpackedQueryOptionsInput;
|
|
@@ -42,8 +43,12 @@ class EndpointQuery extends mobxTanstackQuery.Query {
|
|
|
42
43
|
response: mobx.observable.ref,
|
|
43
44
|
dynamicOptions: mobx.observable
|
|
44
45
|
});
|
|
46
|
+
const onDone = onDoneInput && ((...args) => {
|
|
47
|
+
onDoneInput(...args);
|
|
48
|
+
});
|
|
45
49
|
super({
|
|
46
50
|
...queryOptions,
|
|
51
|
+
onDone,
|
|
47
52
|
queryClient,
|
|
48
53
|
meta: endpoint.toQueryMeta(queryOptions.meta),
|
|
49
54
|
options: () => {
|
|
@@ -106,7 +111,7 @@ class EndpointQuery extends mobxTanstackQuery.Query {
|
|
|
106
111
|
params: params2,
|
|
107
112
|
abortSignal,
|
|
108
113
|
select,
|
|
109
|
-
onDone,
|
|
114
|
+
onDone: onDone2,
|
|
110
115
|
onError,
|
|
111
116
|
onInit,
|
|
112
117
|
enableOnDemand,
|
|
@@ -429,9 +434,9 @@ class HttpResponse {
|
|
|
429
434
|
this.originalResponse = originalResponse;
|
|
430
435
|
this.request = request;
|
|
431
436
|
this.headers = originalResponse.headers;
|
|
432
|
-
this.ok = originalResponse.ok;
|
|
433
|
-
this.body = originalResponse.body;
|
|
434
|
-
this.redirected = originalResponse.redirected;
|
|
437
|
+
this.ok = originalResponse.ok ?? false;
|
|
438
|
+
this.body = originalResponse.body ?? null;
|
|
439
|
+
this.redirected = originalResponse.redirected ?? false;
|
|
435
440
|
this.status = originalResponse.status;
|
|
436
441
|
this.statusText = originalResponse.statusText;
|
|
437
442
|
this.type = originalResponse.type;
|
|
@@ -456,7 +461,7 @@ class HttpResponse {
|
|
|
456
461
|
if (emptyStatusCodesSet.has(this.status)) {
|
|
457
462
|
return true;
|
|
458
463
|
}
|
|
459
|
-
const contentLength = this.headers
|
|
464
|
+
const contentLength = this.headers?.get("content-length");
|
|
460
465
|
if (contentLength !== null && contentLength === "0") {
|
|
461
466
|
return true;
|
|
462
467
|
}
|
|
@@ -845,7 +850,11 @@ class HttpClient {
|
|
|
845
850
|
try {
|
|
846
851
|
response = await this.fetch(fetchUrl, fetchParams);
|
|
847
852
|
} catch (error) {
|
|
848
|
-
|
|
853
|
+
if (error instanceof Response) {
|
|
854
|
+
response = error;
|
|
855
|
+
} else {
|
|
856
|
+
throw error;
|
|
857
|
+
}
|
|
849
858
|
}
|
|
850
859
|
const httpResponse = await this.createResponse(
|
|
851
860
|
responseFormat,
|
package/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/runtime/endpoint-query.ts","../src/runtime/endpoint-infinite-query.ts","../src/runtime/endpoint-mutation.ts","../src/runtime/http-response.ts","../src/runtime/endpoint.ts","../src/runtime/endpoint-query-client.ts","../src/runtime/http-client.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/noUnusedVariables: generic type imports are intentional */\nimport type {\n DefaultError,\n QueryFunctionContext,\n QueryObserverResult,\n RefetchOptions,\n} from '@tanstack/query-core';\nimport {\n comparer,\n computed,\n makeObservable,\n observable,\n reaction,\n runInAction,\n} from 'mobx';\nimport { Query, type QueryUpdateOptionsAllVariants } from 'mobx-tanstack-query';\nimport { callFunction } from 'yummies/common';\nimport { getMobxAdministration, lazyObserve } from 'yummies/mobx';\nimport type { AnyObject, Maybe, MaybeFalsy, MaybeFn } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport type {\n EndpointQueryFlattenOptions,\n EndpointQueryOptions,\n EndpointQueryUniqKey,\n ExcludedQueryKeys,\n} from './endpoint-query.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { RequestParams } from './http-client.js';\n\ninterface InternalObservableData<TEndpoint extends AnyEndpoint> {\n params: MaybeFalsy<TEndpoint['__params']>;\n uniqKey?: EndpointQueryUniqKey;\n initialized?: boolean;\n dynamicOptions?: any;\n response: TEndpoint['__response'] | null;\n}\n\n/**\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/)\n */\nexport class EndpointQuery<\n TEndpoint extends AnyEndpoint,\n TQueryFnData = TEndpoint['__response']['data'],\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n> extends Query<TQueryFnData, TError, TData, TQueryData> {\n private _observableData: InternalObservableData<TEndpoint>;\n\n /**\n * Creates `EndpointQuery` instance.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#constructor)\n */\n constructor(\n private endpoint: AnyEndpoint,\n inputQueryClient: EndpointQueryClient,\n queryOptionsInput:\n | EndpointQueryOptions<TEndpoint, TQueryFnData, TError, TData, TQueryData>\n | (() => EndpointQueryFlattenOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TData,\n TQueryData\n >),\n ) {\n const isQueryOptionsInputFn = typeof queryOptionsInput === 'function';\n const unpackedQueryOptionsInput = isQueryOptionsInputFn\n ? queryOptionsInput()\n : queryOptionsInput;\n\n const {\n uniqKey,\n transform: transformResponse,\n params,\n queryClient: overridedQueryClient,\n ...queryOptions\n } = unpackedQueryOptionsInput;\n\n const queryClient = overridedQueryClient ?? inputQueryClient;\n\n const _observableData: InternalObservableData<TEndpoint> = {\n params: null,\n dynamicOptions: undefined,\n response: null,\n uniqKey: unpackedQueryOptionsInput.uniqKey,\n };\n\n if (!isQueryOptionsInputFn && typeof params !== 'function') {\n if ('params' in unpackedQueryOptionsInput) {\n _observableData.params = params;\n } else {\n _observableData.params = {};\n }\n _observableData.initialized = true;\n }\n\n makeObservable(_observableData, {\n params: observable.ref,\n response: observable.ref,\n dynamicOptions: observable,\n });\n\n super({\n ...queryOptions,\n queryClient,\n meta: endpoint.toQueryMeta(queryOptions.meta),\n options: (): any => {\n const builtOptions = buildOptionsFromParams(\n endpoint,\n _observableData.params,\n _observableData.uniqKey,\n );\n\n let isEnabled = !!_observableData.initialized && builtOptions.enabled;\n\n if (\n typeof queryOptionsInput !== 'function' &&\n queryOptionsInput.enabled === false\n ) {\n isEnabled = false;\n }\n\n return {\n ...builtOptions,\n enabled: isEnabled,\n ..._observableData.dynamicOptions,\n };\n },\n queryFn: async (ctx): Promise<any> => {\n const params = endpoint.getParamsFromContext(ctx);\n\n runInAction(() => {\n _observableData.response = null;\n if (!comparer.structural(params, _observableData.params)) {\n _observableData.params = params;\n }\n });\n\n let requestParams = params.requestParams as Maybe<RequestParams>;\n\n if (requestParams) {\n if (!requestParams.signal) {\n requestParams.signal = ctx.signal;\n }\n } else {\n requestParams = { signal: ctx.signal };\n }\n\n const fixedInput = {\n ...params,\n requestParams,\n };\n\n const response = await endpoint.request(fixedInput);\n\n runInAction(() => {\n _observableData.response = response as TEndpoint['__response'];\n });\n\n return (await transformResponse?.(response)) ?? response.data;\n },\n });\n\n const parentAtom = getMobxAdministration(this);\n\n computed.struct(this, 'params');\n computed.struct(this, 'response');\n makeObservable(this);\n\n if (isQueryOptionsInputFn || typeof params === 'function') {\n const createParamsReaction = () =>\n reaction(\n (): Partial<InternalObservableData<TEndpoint>> => {\n let outDynamicOptions: InternalObservableData<TEndpoint>['dynamicOptions'];\n let outParams: MaybeFn<MaybeFalsy<TEndpoint['__params']>>;\n let uniqKey: Maybe<EndpointQueryUniqKey>;\n\n if (isQueryOptionsInputFn) {\n const result = queryOptionsInput();\n const {\n params,\n abortSignal,\n select,\n onDone,\n onError,\n onInit,\n enableOnDemand,\n uniqKey: _uniqKey,\n ...dynamicOptions\n } = result;\n\n uniqKey = _uniqKey;\n\n if ('params' in result) {\n outParams = result.params;\n } else {\n outParams = {};\n }\n\n outDynamicOptions =\n Object.keys(dynamicOptions).length > 0\n ? dynamicOptions\n : undefined;\n } else if ('params' in unpackedQueryOptionsInput) {\n outParams = unpackedQueryOptionsInput.params;\n uniqKey = unpackedQueryOptionsInput.uniqKey;\n } else {\n outParams = {};\n uniqKey = unpackedQueryOptionsInput.uniqKey;\n }\n\n return {\n params: callFunction(outParams),\n dynamicOptions: outDynamicOptions,\n uniqKey,\n };\n },\n ({ params, dynamicOptions, uniqKey }) => {\n runInAction(() => {\n _observableData.initialized = true;\n _observableData.params = params;\n _observableData.dynamicOptions = dynamicOptions;\n _observableData.uniqKey = uniqKey;\n });\n },\n {\n fireImmediately: true,\n },\n );\n\n if (this.features.lazy) {\n lazyObserve({\n property: parentAtom.values_.get('_result'),\n onStart: createParamsReaction,\n onEnd: (disposeFn) => disposeFn(),\n });\n } else {\n this.abortController.signal.addEventListener(\n 'abort',\n createParamsReaction(),\n );\n }\n }\n\n this._observableData = _observableData;\n }\n\n /**\n * Current endpoint params used by this query.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#params)\n */\n get params() {\n return this._observableData.params;\n }\n\n /**\n * Last raw HTTP response returned by endpoint.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#response)\n */\n get response() {\n return this._observableData.response;\n }\n\n /**\n * Updates query options and optionally params.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#update)\n */\n update(\n updateParams: Omit<\n QueryUpdateOptionsAllVariants<TQueryFnData, TError, TData, TQueryData>,\n ExcludedQueryKeys\n > & {\n params?: MaybeFalsy<TEndpoint['__params']>;\n },\n ) {\n if ('params' in updateParams) {\n const { params, ...options } = updateParams;\n runInAction(() => {\n this._observableData.params = params;\n });\n return super.update({\n ...buildOptionsFromParams(\n this.endpoint,\n params,\n this._observableData.uniqKey,\n ),\n ...options,\n });\n } else if (this._observableData) {\n return super.update({\n ...buildOptionsFromParams(\n this.endpoint,\n this._observableData.params,\n this._observableData.uniqKey,\n ),\n ...updateParams,\n });\n } else {\n return super.update(updateParams);\n }\n }\n\n /**\n * Refetches query when params are initialized.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#refetch)\n */\n refetch(\n options?: RefetchOptions,\n ): Promise<QueryObserverResult<TData, TError>> {\n if (this.params) {\n return super.refetch(options);\n }\n return Promise.resolve(this.queryObserver.getCurrentResult());\n }\n\n /**\n * Sets params and starts query execution.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#start)\n */\n async start(\n params: MaybeFalsy<TEndpoint['__params']>,\n ): Promise<QueryObserverResult<TData, TError>> {\n runInAction(() => {\n this._observableData.params = params;\n });\n return await super.start(\n buildOptionsFromParams(\n this.endpoint,\n params,\n this._observableData.uniqKey,\n ),\n );\n }\n\n protected handleDestroy(): void {\n super.handleDestroy();\n runInAction(() => {\n this._observableData.params = undefined;\n this._observableData.dynamicOptions = undefined;\n });\n }\n}\n\nexport const getParamsFromContext = (ctx: QueryFunctionContext<any, any>) => {\n return (ctx.queryKey.at(-2) || {}) as AnyEndpoint['__params'];\n};\n\nexport const buildOptionsFromParams = (\n endpoint: AnyEndpoint,\n params: MaybeFalsy<AnyObject>,\n uniqKey: Maybe<EndpointQueryUniqKey>,\n): { enabled: boolean; queryKey: any[] } => {\n const { requiredParams } = endpoint.configuration;\n let hasRequiredParams = false;\n\n if (requiredParams.length > 0) {\n hasRequiredParams =\n !!params && requiredParams.every((param) => param in params);\n } else {\n hasRequiredParams = !!params;\n }\n\n return {\n enabled: hasRequiredParams,\n queryKey: endpoint.toQueryKey(params || {}, uniqKey),\n };\n};\n","import type {\n DefaultError,\n InfiniteData,\n QueryObserverResult,\n} from '@tanstack/query-core';\nimport { makeObservable, observable, runInAction } from 'mobx';\nimport { InfiniteQuery } from 'mobx-tanstack-query';\nimport type { Maybe, MaybeFalsy } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport type {\n EndpointInfiniteQueryFlattenOptions,\n EndpointInfiniteQueryOptions,\n EndpointInfiniteQueryUpdateOptionsAllVariants,\n} from './endpoint-infinite-query.types.js';\nimport { buildOptionsFromParams } from './endpoint-query.js';\nimport type { EndpointQueryUniqKey } from './endpoint-query.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { RequestParams } from './http-client.js';\n\nexport class EndpointInfiniteQuery<\n TEndpoint extends AnyEndpoint,\n TQueryFnData = TEndpoint['__response']['data'],\n TError = DefaultError,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n> extends InfiniteQuery<TQueryFnData, TError, TPageParam, TData, any[]> {\n response: TEndpoint['__response'] | null = null;\n params: TEndpoint['__params'] | null = null;\n\n private uniqKey?: EndpointQueryUniqKey;\n\n private paramsFn: EndpointInfiniteQueryFlattenOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >['params'];\n\n constructor(\n private endpoint: AnyEndpoint,\n queryClient: EndpointQueryClient,\n\n queryOptionsInput:\n | EndpointInfiniteQueryOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >\n | (() => EndpointInfiniteQueryFlattenOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >),\n ) {\n const {\n uniqKey,\n transform: transformResponse,\n params: paramsFn,\n ...queryOptions\n } = typeof queryOptionsInput === 'function'\n ? queryOptionsInput()\n : queryOptionsInput;\n\n super({\n ...queryOptions,\n queryClient,\n meta: endpoint.toQueryMeta(queryOptions.meta),\n options: (query): any => {\n const extraOptions: any = {};\n let willEnableManually: boolean;\n let params: any;\n\n const pageParam = query.options.initialPageParam;\n\n if (typeof queryOptionsInput === 'function') {\n Object.assign(extraOptions, queryOptionsInput());\n params = paramsFn(pageParam);\n willEnableManually = false;\n } else {\n willEnableManually = queryOptionsInput.enabled === false;\n params = paramsFn(pageParam);\n }\n\n const builtOptions = buildOptionsFromParams(endpoint, params, uniqKey);\n // const dynamicOuterOptions = getDynamicOptions?.(query);\n\n let isEnabled = false;\n\n if (willEnableManually) {\n // if (dynamicOuterOptions?.enabled != null) {\n // isEnabled = dynamicOuterOptions.enabled;\n // }\n } else {\n // const outerDynamicEnabled =\n // dynamicOuterOptions?.enabled == null ||\n // !!dynamicOuterOptions.enabled;\n\n // isEnabled = builtOptions.enabled && outerDynamicEnabled;\n isEnabled = builtOptions.enabled;\n }\n\n return {\n ...query.options,\n ...builtOptions,\n // ...dynamicOuterOptions,\n enabled: isEnabled,\n ...extraOptions,\n } as any;\n },\n queryFn: async (ctx): Promise<any> => {\n const params = paramsFn(\n (ctx.pageParam as any) ?? queryOptions.initialPageParam,\n ) as TEndpoint['__params'];\n\n runInAction(() => {\n this.response = null;\n this.params = params;\n });\n\n let requestParams = params.request as Maybe<RequestParams>;\n\n if (requestParams) {\n if (!requestParams.signal) {\n requestParams.signal = ctx.signal;\n }\n } else {\n requestParams = { signal: ctx.signal };\n }\n\n const fixedInput = {\n ...params,\n request: requestParams,\n };\n\n const response = await endpoint.request(fixedInput);\n\n runInAction(() => {\n this.response = response as TEndpoint['__response'];\n });\n\n return (await transformResponse?.(response)) ?? response.data;\n },\n });\n\n this.paramsFn = paramsFn;\n this.uniqKey = uniqKey;\n\n observable.ref(this, 'response');\n observable.ref(this, 'params');\n makeObservable(this);\n }\n\n update({\n params,\n ...options\n }: EndpointInfiniteQueryUpdateOptionsAllVariants<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >) {\n return super.update({\n ...buildOptionsFromParams(this.endpoint, params, this.uniqKey),\n ...options,\n });\n }\n\n async start(\n params: MaybeFalsy<TEndpoint['__params']>,\n ): Promise<QueryObserverResult<TData, TError>> {\n return await super.start(\n buildOptionsFromParams(this.endpoint, params, this.uniqKey),\n );\n }\n}\n","import { Mutation } from 'mobx-tanstack-query';\nimport type { AnyObject, Maybe } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport type {\n EndpointMutationOptions,\n EndpointMutationParams,\n} from './endpoint-mutation.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { InvalidateEndpointsFilters } from './endpoint-query-client.types.js';\nimport type { RequestParams } from './http-client.js';\n\n/**\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-mutations/)\n */\nexport class EndpointMutation<\n TEndpoint extends AnyEndpoint,\n TData = unknown,\n TParams extends AnyObject = AnyObject,\n TMutationMeta extends AnyObject | void = void,\n TOnMutateResult = unknown,\n> extends Mutation<\n TData,\n EndpointMutationParams<TParams, TMutationMeta>,\n TEndpoint['__response']['error'],\n TOnMutateResult\n> {\n /**\n * Creates `EndpointMutation` instance.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-mutations/#constructor)\n */\n constructor(\n endpoint: AnyEndpoint,\n inputQueryClient: EndpointQueryClient,\n {\n transform: transformResponse,\n invalidateEndpoints,\n queryClient: overridedQueryClient,\n ...mutationOptions\n }: EndpointMutationOptions<\n TEndpoint,\n TData,\n TParams,\n TMutationMeta,\n TOnMutateResult\n >,\n ) {\n const queryClient = overridedQueryClient ?? inputQueryClient;\n super({\n ...mutationOptions,\n queryClient,\n onSuccess: (data, variables, onMutateResult, context) => {\n mutationOptions.onSuccess?.(data, variables, onMutateResult, context);\n if (invalidateEndpoints) {\n if (typeof invalidateEndpoints === 'object') {\n queryClient.invalidateEndpoints(invalidateEndpoints);\n } else {\n let filters: Maybe<InvalidateEndpointsFilters>;\n switch (`${invalidateEndpoints}`) {\n case 'true': {\n filters = endpoint.group\n ? {\n group: endpoint.group,\n }\n : {\n tag: endpoint.tags,\n };\n\n break;\n }\n case 'by-group': {\n filters = {\n group: endpoint.group,\n };\n\n break;\n }\n case 'by-tag': {\n filters = {\n tag: endpoint.tags,\n };\n\n break;\n }\n }\n\n if (filters) {\n queryClient.invalidateEndpoints(filters);\n }\n }\n }\n },\n mutationFn: async (input, context) => {\n let requestParams = input?.requestParams as Maybe<RequestParams>;\n\n if (requestParams) {\n if (!requestParams.signal) {\n requestParams.signal = context.signal;\n }\n } else {\n requestParams = { signal: context.signal };\n }\n\n const fixedInput = {\n ...input,\n requestParams,\n };\n\n const response = await endpoint.request(fixedInput);\n return (await transformResponse?.(response)) ?? response.data;\n },\n });\n }\n}\n","import type {\n HttpStatusCode,\n HttpSuccessStatusCode,\n} from 'http-status-code-types';\nimport type { ValueOf } from 'yummies/types';\n\nexport const emptyStatusCodesSet = new Set([204, 205, 304]);\n\nexport interface RequestInfo {\n url: string;\n params: globalThis.RequestInit;\n}\n\ntype ResponsesByStatusMap = {\n [K in HttpStatusCode]?: any;\n};\n\nexport type HttpMultistatusResponse<\n TResponsesByStatusMap extends ResponsesByStatusMap,\n TDefaultOkResponse,\n TDefaultBadResponse = unknown,\n> =\n | ValueOf<{\n [K in keyof TResponsesByStatusMap]-?: HttpResponse<\n K extends HttpSuccessStatusCode\n ? TResponsesByStatusMap[K]\n : TDefaultOkResponse,\n K extends HttpSuccessStatusCode\n ? TDefaultBadResponse\n : TResponsesByStatusMap[K],\n number & K\n >;\n }>\n | HttpResponse<\n TDefaultOkResponse,\n TDefaultBadResponse,\n Exclude<HttpStatusCode, keyof TResponsesByStatusMap>\n >;\n\nexport type GetHttpResponse<T> = T extends (...args: any[]) => infer R\n ? R extends Promise<HttpResponse<any, any>>\n ? Awaited<R>\n : R extends Promise<HttpMultistatusResponse<any, any, any>>\n ? Awaited<R>\n : HttpResponse<any, any>\n : HttpResponse<any, any>;\n\nexport type HttpBadResponse<T = any> = HttpResponse<null, T>;\n\nexport type AnyHttpResponse = HttpResponse<any, any>;\n\nexport type AnyHttpMultistatusResponse = HttpMultistatusResponse<\n ResponsesByStatusMap,\n any,\n any\n>;\n\nexport type AnyResponse = AnyHttpResponse | AnyHttpMultistatusResponse;\n\nexport type ResponseFormat = ValueOf<{\n [K in keyof Body]: Body[K] extends Function ? K : never;\n}>;\n\nexport class HttpResponse<\n TData,\n TError = null,\n TStatus extends number = number,\n> {\n headers;\n ok;\n redirected;\n statusText;\n type;\n url;\n body;\n\n data: TData;\n error: TError;\n status: TStatus;\n\n constructor(\n public originalResponse: Response,\n public request: RequestInfo,\n ) {\n this.headers = originalResponse.headers;\n this.ok = originalResponse.ok;\n this.body = originalResponse.body;\n this.redirected = originalResponse.redirected;\n this.status = originalResponse.status as TStatus;\n this.statusText = originalResponse.statusText;\n this.type = originalResponse.type;\n this.url = originalResponse.url;\n this.data = null as any;\n this.error = null as any;\n }\n\n clone(): HttpResponse<TData, TError, TStatus> {\n return new HttpResponse(this.originalResponse.clone(), this.request);\n }\n\n isEmpty() {\n if (emptyStatusCodesSet.has(this.status)) {\n return true;\n }\n\n const contentLength = this.headers.get('content-length');\n\n if (contentLength !== null && contentLength === '0') {\n return true;\n }\n\n if (this.body === null) {\n return true;\n }\n\n return false;\n }\n\n async resolveBody(responseFormat: ResponseFormat) {\n try {\n const formatted = await this.originalResponse[responseFormat]();\n if (this.ok) {\n this.data = formatted;\n } else {\n this.error = formatted;\n }\n } catch (error) {\n this.error = error as TError;\n }\n }\n}\n\nexport const isHttpResponse = (\n response: unknown,\n status?: number,\n): response is AnyHttpResponse =>\n typeof response === 'object' &&\n response instanceof HttpResponse &&\n 'data' in response &&\n (!status || response.status === status);\n\nexport const isHttpBadResponse = (\n response: unknown,\n): response is HttpResponse<null, any> => {\n return isHttpResponse(response) && (!response.ok || !!response.error);\n};\n","/** biome-ignore-all lint/style/useShorthandFunctionType: this is special trick to add typings for callable class instance */\nimport type {\n DefaultError,\n InvalidateOptions,\n InvalidateQueryFilters,\n QueryFunctionContext,\n QueryKey,\n} from '@tanstack/query-core';\nimport type { HttpStatusCode } from 'http-status-code-types';\nimport type { IQueryClientCore } from 'mobx-tanstack-query';\nimport { callFunction } from 'yummies/common';\nimport type { AnyObject, Defined, IsPartial, Maybe } from 'yummies/types';\nimport type {\n EndpointConfiguration,\n EndpointMutationPresets,\n} from './endpoint.types.js';\nimport { EndpointInfiniteQuery } from './endpoint-infinite-query.js';\nimport type {\n EndpointInfiniteQueryFlattenOptions,\n EndpointInfiniteQueryOptions,\n} from './endpoint-infinite-query.types.js';\nimport { EndpointMutation } from './endpoint-mutation.js';\nimport type { EndpointMutationOptions } from './endpoint-mutation.types.js';\nimport { EndpointQuery } from './endpoint-query.js';\nimport type {\n EndpointQueryFlattenOptions,\n EndpointQueryMeta,\n EndpointQueryOptions,\n EndpointQueryUniqKey,\n} from './endpoint-query.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { HttpClient } from './http-client.js';\nimport { type AnyResponse, isHttpResponse } from './http-response.js';\n\nexport interface Endpoint<\n TResponse extends AnyResponse,\n TParams extends AnyObject,\n TMetaData extends AnyObject = AnyObject,\n> {\n (\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ): ReturnType<Endpoint<TResponse, TParams, TMetaData>['request']>;\n}\n\n/**\n * This class is a wrapper for your http request.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoints/)\n */\nexport class Endpoint<\n TResponse extends AnyResponse,\n TParams extends AnyObject,\n TMetaData extends AnyObject = AnyObject,\n> {\n endpointId: string;\n\n presets: {\n mutations: EndpointMutationPresets;\n } = {\n mutations: {},\n };\n\n __params!: TParams;\n __response!: TResponse;\n\n meta!: TMetaData;\n\n constructor(\n public configuration: EndpointConfiguration<NoInfer<TParams>, TMetaData>,\n public queryClient: EndpointQueryClient,\n public httpClient: HttpClient,\n ) {\n this.endpointId = globalThis.crypto.randomUUID();\n this.meta = configuration.meta ?? ({} as TMetaData);\n // Сохраняем оригинальный инстанс\n const instance = this;\n\n // Создаем функцию-обертку\n const callable = function (\n this: any,\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ) {\n return instance.request.apply(instance, args);\n } as unknown as Endpoint<TResponse, TParams, TMetaData>;\n\n // Копируем прототип\n Object.setPrototypeOf(callable, new.target.prototype);\n\n // Копируем методы из оригинального инстанса\n Object.getOwnPropertyNames(instance)\n .concat(Object.getOwnPropertyNames(new.target.prototype))\n .forEach((key) => {\n if (key === 'constructor') return;\n const desc =\n Object.getOwnPropertyDescriptor(instance, key) ||\n Object.getOwnPropertyDescriptor(new.target.prototype, key);\n if (desc) Object.defineProperty(callable, key, desc);\n });\n\n // biome-ignore lint/correctness/noConstructorReturn: this is special trick to add typings for callable class instance\n return callable;\n }\n\n getFullUrl(\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ): string {\n const params = this.configuration.params(args[0] ?? ({} as TParams));\n return this.httpClient.buildUrl(params);\n }\n\n getPath(\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ): string {\n const params = this.configuration.params(args[0] ?? ({} as TParams));\n return params.path;\n }\n\n getParamsFromContext<\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n ctx: Omit<QueryFunctionContext<TQueryKey, TPageParam>, 'client'> & {\n client: IQueryClientCore;\n },\n ): TParams {\n return (ctx.queryKey.at(-2) || {}) as TParams;\n }\n\n get tags() {\n return this.configuration.tags;\n }\n\n get path() {\n return this.configuration.path;\n }\n\n get pathDeclaration() {\n return this.path.join('/');\n }\n\n get operationId() {\n return this.configuration.operationId;\n }\n\n get group() {\n return this.configuration.group;\n }\n\n get namespace() {\n return this.configuration.namespace;\n }\n\n checkResponse<TStatus extends HttpStatusCode>(\n response: unknown,\n status: TStatus,\n ): response is Extract<TResponse, { status: TStatus }>;\n checkResponse(response: unknown): response is TResponse;\n checkResponse(response: unknown, status?: HttpStatusCode) {\n return isHttpResponse(response, status);\n }\n\n request(\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ) {\n return this.httpClient.request<TResponse>(\n this.configuration.params(args[0] ?? ({} as TParams)),\n this,\n );\n }\n\n toQueryMeta = (meta?: AnyObject) =>\n ({\n ...meta,\n tags: this.tags,\n operationId: this.operationId,\n path: this.path,\n pathDeclaration: this.pathDeclaration,\n endpointId: this.endpointId,\n endpointQuery: true,\n }) satisfies EndpointQueryMeta;\n\n toQueryKey(params?: Maybe<TParams>, uniqKey?: EndpointQueryUniqKey): any {\n return [\n ...this.configuration.path,\n this.configuration.operationId,\n params ?? {},\n callFunction(uniqKey),\n ];\n }\n\n toInfiniteQueryKey(\n params?: Maybe<TParams>,\n uniqKey?: EndpointQueryUniqKey,\n ): any {\n return [\n { infiniteQuery: true },\n ...this.configuration.path,\n this.configuration.operationId,\n params ?? {},\n callFunction(uniqKey),\n ];\n }\n\n invalidateQuery(\n ...args: IsPartial<TParams> extends true\n ? [\n params?: Maybe<TParams>,\n filters?: InvalidateQueryFilters & { uniqKey?: EndpointQueryUniqKey },\n options?: InvalidateOptions,\n ]\n : [\n params: TParams,\n filters?: InvalidateQueryFilters & { uniqKey?: EndpointQueryUniqKey },\n options?: InvalidateOptions,\n ]\n ) {\n this.queryClient.invalidateQueries(\n {\n queryKey: this.toQueryKey(args[0], args[1]?.uniqKey),\n exact: true,\n ...(args[1] as any),\n },\n args[2],\n );\n }\n\n toMutation<\n TData = TResponse['data'],\n TMutationMeta extends AnyObject | void = void,\n TContext = unknown,\n >(\n options: EndpointMutationOptions<\n this,\n TData,\n TParams,\n TMutationMeta,\n TContext\n >,\n ) {\n return new EndpointMutation<this, TData, TParams, TMutationMeta, TContext>(\n this,\n this.queryClient,\n {\n ...options,\n invalidateEndpoints:\n options.invalidateEndpoints ??\n this.presets.mutations?.invalidateQueries,\n },\n );\n }\n\n toQuery<\n TQueryFnData = TResponse['data'],\n TError = DefaultError | Defined<TResponse['error']>,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n >(\n options:\n | EndpointQueryOptions<this, TQueryFnData, TError, TData, TQueryData>\n | (() => EndpointQueryFlattenOptions<\n this,\n TQueryFnData,\n TError,\n TData,\n TQueryData\n >),\n ) {\n return new EndpointQuery<this, TQueryFnData, TError, TData, TQueryData>(\n this,\n this.queryClient,\n options,\n );\n }\n\n toInfiniteQuery<\n TData = TResponse['data'],\n TError = DefaultError,\n TPageParam = unknown,\n >(\n options:\n | EndpointInfiniteQueryOptions<this, TData, TError, TPageParam>\n | (() => EndpointInfiniteQueryFlattenOptions<\n this,\n TData,\n TError,\n TPageParam\n >),\n ) {\n return new EndpointInfiniteQuery<this, TData, TError, TPageParam>(\n this,\n this.queryClient,\n options,\n );\n }\n}\n","import { hashKey, type InvalidateOptions } from '@tanstack/query-core';\nimport { QueryClient, type QueryClientConfig } from 'mobx-tanstack-query';\nimport type { Maybe } from 'yummies/types';\nimport type { EndpointQueryMeta } from './endpoint-query.types.js';\nimport type {\n EndpointStringFilter,\n InvalidateEndpointsFilters,\n} from './endpoint-query-client.types.js';\n\n/**\n * Class that extends `QueryClient` and gives a bit more control over endpoint queries and mutations.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-query-client/)\n */\nexport class EndpointQueryClient extends QueryClient {\n /**\n * Creates `EndpointQueryClient` instance.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-query-client/#constructor)\n */\n constructor(config?: QueryClientConfig) {\n super({\n ...config,\n defaultOptions: {\n ...config?.defaultOptions,\n queries: {\n ...config?.defaultOptions?.queries,\n queryKeyHashFn:\n config?.defaultOptions?.queries?.queryKeyHashFn ?? hashKey,\n },\n },\n });\n }\n\n /**\n * Invalidates endpoint queries by endpoint metadata filters.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-query-client/#invalidateendpoints)\n */\n invalidateEndpoints(\n {\n group,\n namespace,\n operationId,\n tag,\n predicate,\n endpoint,\n exclude,\n ...queryFilters\n }: InvalidateEndpointsFilters,\n options?: InvalidateOptions,\n ) {\n const endpointIdsToExclude = new Set<string>(\n exclude?.endpoints?.map((it) => it.endpointId),\n );\n const endpointTagsToExclude = new Set<string>(exclude?.tags ?? []);\n\n let endpointIdsToFilter: Maybe<Set<string>>;\n\n if (Array.isArray(endpoint)) {\n endpointIdsToFilter = new Set(endpoint.map((it) => it.endpointId));\n } else if (endpoint) {\n endpointIdsToFilter = new Set([endpoint.endpointId]);\n }\n\n return this.invalidateQueries(\n {\n ...queryFilters,\n predicate: (query) => {\n if (!query.meta?.endpointQuery) {\n return false;\n }\n\n const meta = query.meta as unknown as EndpointQueryMeta;\n\n if (\n endpointIdsToExclude.has(meta.endpointId) ||\n (endpointTagsToExclude.size &&\n meta.tags.some((tag) => endpointTagsToExclude.has(tag)))\n ) {\n return false;\n }\n\n if (\n endpointIdsToFilter &&\n !endpointIdsToFilter.has(meta.endpointId)\n ) {\n return false;\n }\n\n if (\n namespace &&\n meta.namespace &&\n !applyStringFilter(namespace, meta.namespace)\n ) {\n return false;\n }\n\n if (group && meta.group && !applyStringFilter(group, meta.group)) {\n return false;\n }\n\n if (tag && meta.tags && !applyStringFilter(tag, meta.tags)) {\n return false;\n }\n\n if (tag && meta.tags && !applyStringFilter(tag, meta.tags)) {\n return false;\n }\n\n if (\n operationId &&\n !applyStringFilter(operationId, meta.operationId)\n ) {\n return false;\n }\n\n if (predicate && !predicate(meta, query as any)) {\n return false;\n }\n\n return true;\n },\n },\n options,\n );\n }\n}\n\nconst applyStringFilter = (\n filter: EndpointStringFilter,\n value: string | string[],\n): boolean => {\n const values = Array.isArray(value) ? value : [value];\n\n if (filter instanceof RegExp) {\n return values.some((value) => filter.test(value));\n }\n\n if (Array.isArray(filter)) {\n return filter.some((filter) => values.includes(filter));\n }\n\n return values.includes(filter);\n};\n","import { action, makeObservable, observable } from 'mobx';\nimport { type BooleanOptional, type IStringifyOptions, stringify } from 'qs';\nimport type { AnyObject, Defined, Maybe } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport {\n type AnyHttpResponse,\n type AnyResponse,\n HttpResponse,\n type ResponseFormat,\n} from './http-response.js';\n\nexport type QueryParamsType = Record<string | number, any>;\n\nexport interface FullRequestParams extends Omit<RequestInit, 'body'> {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n contentType?: string;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** meta data */\n meta?: Record<string, any>;\n}\n\nexport const ContentType = {\n Json: 'application/json',\n FormData: 'multipart/form-data',\n UrlEncoded: 'application/x-www-form-urlencoded',\n Text: 'text/plain',\n Binary: 'application/octet-stream',\n} as const;\n\nexport type RequestParams = Omit<\n FullRequestParams,\n 'body' | 'method' | 'query' | 'path' | 'serviceName'\n>;\n\nexport interface HttpClientConfig<TMeta = unknown> {\n baseUrl?: string;\n meta?: TMeta;\n fetch?: typeof globalThis.fetch;\n baseApiParams?: Omit<RequestParams, 'baseUrl' | 'cancelToken' | 'signal'>;\n contentFormatters?: Record<string, (input: any) => any>;\n queryStringifyOptions?: IStringifyOptions<BooleanOptional>;\n toQueryString?: (query?: AnyObject) => string;\n buildUrl?: (\n fullParams: FullRequestParams,\n formattedParts: { baseUrl: string; path: string; query: string },\n metadata: TMeta | null,\n ) => string;\n interceptor?: (\n requestParams: RequestParams,\n metadata: TMeta | null,\n endpoint?: Maybe<AnyEndpoint>,\n ) => Promise<RequestParams | void> | RequestParams | void;\n}\n\nexport class HttpClient<TMeta = unknown> {\n private config: HttpClientConfig<TMeta>;\n private fetch: Required<HttpClientConfig<TMeta>>['fetch'];\n\n public meta: TMeta | null;\n public baseApiParams: RequestParams;\n\n badResponse: unknown;\n\n protected toQueryString: Defined<HttpClientConfig<TMeta>['toQueryString']>;\n\n constructor(config?: HttpClientConfig<TMeta>) {\n this.config = config ?? {};\n this.badResponse = null;\n this.meta = config?.meta ?? null;\n this.fetch =\n config?.fetch ??\n ((...fetchParams: Parameters<typeof globalThis.fetch>) =>\n globalThis.fetch(...fetchParams));\n this.toQueryString =\n config?.toQueryString ??\n ((query) => stringify(query, config?.queryStringifyOptions));\n\n this.baseApiParams = {\n credentials: 'same-origin',\n headers: {},\n redirect: 'follow',\n referrerPolicy: 'no-referrer',\n };\n\n this.updateConfig(this.config);\n\n observable.ref(this, 'badResponse');\n observable.ref(this, 'meta');\n\n action(this, 'setMeta');\n action(this, 'setBadResponse');\n\n makeObservable(this);\n }\n\n get baseUrl() {\n return this.config.baseUrl ?? '';\n }\n\n public updateConfig(update: Partial<HttpClientConfig<TMeta>>) {\n Object.assign(this.config, update);\n\n if (update.baseApiParams) {\n Object.assign(this.baseApiParams, update.baseApiParams);\n }\n\n if (update.contentFormatters) {\n Object.assign(this.contentFormatters, update.contentFormatters);\n }\n\n if (update.fetch) {\n this.fetch = update.fetch;\n }\n }\n\n public setMeta = (data: TMeta | null) => {\n this.meta = data;\n };\n\n public setBadResponse = (response: unknown) => {\n this.badResponse = response;\n };\n\n private contentFormatters: Record<string, (input: any) => any> = {\n 'application/json': (input: any) =>\n input !== null && (typeof input === 'object' || typeof input === 'string')\n ? JSON.stringify(input)\n : input,\n 'text/plain': (input: any) =>\n input !== null && typeof input !== 'string'\n ? JSON.stringify(input)\n : input,\n 'multipart/form-data': (input: any) =>\n Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n\n if (property instanceof Blob) {\n formData.append(key, property);\n } else if (typeof property === 'object' && property !== null) {\n formData.append(key, JSON.stringify(property));\n } else {\n formData.append(key, `${property}`);\n }\n\n return formData;\n }, new FormData()),\n 'application/x-www-form-urlencoded': (input: any) =>\n this.toQueryString(input),\n 'application/octet-stream': (input: any) => input,\n };\n\n protected mergeRequestParams(\n params1: RequestParams,\n params2?: RequestParams,\n ): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...params2,\n headers: {\n ...this.baseApiParams.headers,\n ...params1.headers,\n ...params2?.headers,\n },\n };\n }\n\n protected async createResponse(\n responseFormat: FullRequestParams['format'] = 'json',\n raw: Response,\n url: string,\n params: RequestInit,\n ): Promise<AnyHttpResponse> {\n const response = new HttpResponse<any, any>(raw, { url, params });\n\n if (response.isEmpty()) {\n return response;\n }\n\n await response.resolveBody(responseFormat);\n\n if (!response.ok || response.error) {\n this.setBadResponse(response);\n }\n\n return response;\n }\n\n public buildUrl = (params: FullRequestParams) => {\n const baseUrl = params.baseUrl ?? this.baseUrl ?? '';\n\n const path = params.path;\n\n const queryString = params.query && this.toQueryString(params.query);\n\n const query = queryString ? `?${queryString}` : '';\n\n if (this.config.buildUrl) {\n return this.config.buildUrl(params, { baseUrl, path, query }, this.meta);\n }\n\n const url = baseUrl + path + query;\n\n return url;\n };\n\n public request<T, E>(\n fullParams: FullRequestParams,\n endpoint?: Maybe<AnyEndpoint>,\n ): Promise<HttpResponse<T, E>>;\n public request<THttpResponse extends AnyResponse>(\n fullParams: FullRequestParams,\n endpoint?: Maybe<AnyEndpoint>,\n ): Promise<THttpResponse>;\n\n public async request(\n fullParams: FullRequestParams,\n endpoint?: Maybe<AnyEndpoint>,\n ): Promise<any> {\n this.setBadResponse(null);\n\n const { body, contentType, format, ...params } = fullParams;\n\n let requestParams = this.mergeRequestParams(params);\n\n if (this.config.interceptor) {\n requestParams =\n (await this.config.interceptor(requestParams, this.meta, endpoint)) ??\n requestParams;\n }\n\n const responseFormat = format || requestParams.format;\n\n const url = this.buildUrl(fullParams);\n\n let headers: Headers;\n\n if (requestParams.headers instanceof Headers) {\n headers = requestParams.headers;\n } else if (Array.isArray(requestParams.headers)) {\n headers = new Headers(requestParams.headers);\n } else {\n headers = new Headers(requestParams.headers);\n }\n\n let bodyToSend: Maybe<BodyInit>;\n\n if (contentType) {\n if (\n contentType !== ContentType.FormData &&\n !headers.has('Content-Type')\n ) {\n headers.set('Content-Type', contentType);\n }\n\n const payloadFormatter = this.contentFormatters[contentType];\n\n if (body == null) {\n bodyToSend = null;\n } else if (payloadFormatter) {\n bodyToSend = payloadFormatter(body);\n } else {\n bodyToSend = body as any;\n }\n }\n\n const fetchUrl: string = url;\n const fetchParams: RequestInit = {\n ...requestParams,\n headers,\n body: bodyToSend,\n };\n\n let response: Response | undefined;\n\n try {\n response = await this.fetch(fetchUrl, fetchParams);\n } catch (error) {\n response = error as Response;\n }\n\n const httpResponse = await this.createResponse(\n responseFormat,\n response,\n fetchUrl,\n fetchParams,\n );\n\n if (!httpResponse.ok || httpResponse.error) {\n throw httpResponse;\n }\n\n return httpResponse;\n }\n}\n"],"names":["Query","makeObservable","observable","params","runInAction","comparer","getMobxAdministration","computed","reaction","uniqKey","callFunction","lazyObserve","InfiniteQuery","Mutation","QueryClient","hashKey","tag","value","filter","stringify","action"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/runtime/endpoint-query.ts","../src/runtime/endpoint-infinite-query.ts","../src/runtime/endpoint-mutation.ts","../src/runtime/http-response.ts","../src/runtime/endpoint.ts","../src/runtime/endpoint-query-client.ts","../src/runtime/http-client.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/noUnusedVariables: generic type imports are intentional */\nimport type {\n DefaultError,\n QueryFunctionContext,\n QueryObserverResult,\n RefetchOptions,\n} from '@tanstack/query-core';\nimport {\n comparer,\n computed,\n makeObservable,\n observable,\n reaction,\n runInAction,\n} from 'mobx';\nimport { Query, type QueryUpdateOptionsAllVariants } from 'mobx-tanstack-query';\nimport { callFunction } from 'yummies/common';\nimport { getMobxAdministration, lazyObserve } from 'yummies/mobx';\nimport type { AnyObject, Maybe, MaybeFalsy, MaybeFn } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport type {\n EndpointQueryFlattenOptions,\n EndpointQueryOptions,\n EndpointQueryUniqKey,\n ExcludedQueryKeys,\n} from './endpoint-query.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { RequestParams } from './http-client.js';\n\ninterface InternalObservableData<TEndpoint extends AnyEndpoint> {\n params: MaybeFalsy<TEndpoint['__params']>;\n uniqKey?: EndpointQueryUniqKey;\n initialized?: boolean;\n dynamicOptions?: any;\n response: TEndpoint['__response'] | null;\n}\n\n/**\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/)\n */\nexport class EndpointQuery<\n TEndpoint extends AnyEndpoint,\n TQueryFnData = TEndpoint['__response']['data'],\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n> extends Query<TQueryFnData, TError, TData, TQueryData> {\n private _observableData: InternalObservableData<TEndpoint>;\n\n /**\n * Creates `EndpointQuery` instance.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#constructor)\n */\n constructor(\n private endpoint: AnyEndpoint,\n inputQueryClient: EndpointQueryClient,\n queryOptionsInput:\n | EndpointQueryOptions<TEndpoint, TQueryFnData, TError, TData, TQueryData>\n | (() => EndpointQueryFlattenOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TData,\n TQueryData\n >),\n ) {\n const isQueryOptionsInputFn = typeof queryOptionsInput === 'function';\n const unpackedQueryOptionsInput = isQueryOptionsInputFn\n ? queryOptionsInput()\n : queryOptionsInput;\n\n const {\n uniqKey,\n transform: transformResponse,\n params,\n onDone: onDoneInput,\n queryClient: overridedQueryClient,\n ...queryOptions\n } = unpackedQueryOptionsInput;\n\n const queryClient = overridedQueryClient ?? inputQueryClient;\n\n const _observableData: InternalObservableData<TEndpoint> = {\n params: null,\n dynamicOptions: undefined,\n response: null,\n uniqKey: unpackedQueryOptionsInput.uniqKey,\n };\n\n if (!isQueryOptionsInputFn && typeof params !== 'function') {\n if ('params' in unpackedQueryOptionsInput) {\n _observableData.params = params;\n } else {\n _observableData.params = {};\n }\n _observableData.initialized = true;\n }\n\n makeObservable(_observableData, {\n params: observable.ref,\n response: observable.ref,\n dynamicOptions: observable,\n });\n\n const lastHandledDataUpdatedAt = -1;\n const onDone =\n onDoneInput &&\n ((...args: Parameters<NonNullable<typeof onDoneInput>>) => {\n // const currentDataUpdatedAt = this.dataUpdatedAt ?? 0;\n // if (currentDataUpdatedAt === lastHandledDataUpdatedAt) {\n // return;\n // }\n // lastHandledDataUpdatedAt = currentDataUpdatedAt;\n onDoneInput(...args);\n });\n\n super({\n ...queryOptions,\n onDone,\n queryClient,\n meta: endpoint.toQueryMeta(queryOptions.meta),\n options: (): any => {\n const builtOptions = buildOptionsFromParams(\n endpoint,\n _observableData.params,\n _observableData.uniqKey,\n );\n\n let isEnabled = !!_observableData.initialized && builtOptions.enabled;\n\n if (\n typeof queryOptionsInput !== 'function' &&\n queryOptionsInput.enabled === false\n ) {\n isEnabled = false;\n }\n\n return {\n ...builtOptions,\n enabled: isEnabled,\n ..._observableData.dynamicOptions,\n };\n },\n queryFn: async (ctx): Promise<any> => {\n const params = endpoint.getParamsFromContext(ctx);\n\n runInAction(() => {\n _observableData.response = null;\n if (!comparer.structural(params, _observableData.params)) {\n _observableData.params = params;\n }\n });\n\n let requestParams = params.requestParams as Maybe<RequestParams>;\n\n if (requestParams) {\n if (!requestParams.signal) {\n requestParams.signal = ctx.signal;\n }\n } else {\n requestParams = { signal: ctx.signal };\n }\n\n const fixedInput = {\n ...params,\n requestParams,\n };\n\n const response = await endpoint.request(fixedInput);\n\n runInAction(() => {\n _observableData.response = response as TEndpoint['__response'];\n });\n\n return (await transformResponse?.(response)) ?? response.data;\n },\n });\n\n const parentAtom = getMobxAdministration(this);\n\n computed.struct(this, 'params');\n computed.struct(this, 'response');\n makeObservable(this);\n\n if (isQueryOptionsInputFn || typeof params === 'function') {\n const createParamsReaction = () =>\n reaction(\n (): Partial<InternalObservableData<TEndpoint>> => {\n let outDynamicOptions: InternalObservableData<TEndpoint>['dynamicOptions'];\n let outParams: MaybeFn<MaybeFalsy<TEndpoint['__params']>>;\n let uniqKey: Maybe<EndpointQueryUniqKey>;\n\n if (isQueryOptionsInputFn) {\n const result = queryOptionsInput();\n const {\n params,\n abortSignal,\n select,\n onDone,\n onError,\n onInit,\n enableOnDemand,\n uniqKey: _uniqKey,\n ...dynamicOptions\n } = result;\n\n uniqKey = _uniqKey;\n\n if ('params' in result) {\n outParams = result.params;\n } else {\n outParams = {};\n }\n\n outDynamicOptions =\n Object.keys(dynamicOptions).length > 0\n ? dynamicOptions\n : undefined;\n } else if ('params' in unpackedQueryOptionsInput) {\n outParams = unpackedQueryOptionsInput.params;\n uniqKey = unpackedQueryOptionsInput.uniqKey;\n } else {\n outParams = {};\n uniqKey = unpackedQueryOptionsInput.uniqKey;\n }\n\n return {\n params: callFunction(outParams),\n dynamicOptions: outDynamicOptions,\n uniqKey,\n };\n },\n ({ params, dynamicOptions, uniqKey }) => {\n runInAction(() => {\n _observableData.initialized = true;\n _observableData.params = params;\n _observableData.dynamicOptions = dynamicOptions;\n _observableData.uniqKey = uniqKey;\n });\n },\n {\n fireImmediately: true,\n },\n );\n\n if (this.features.lazy) {\n lazyObserve({\n property: parentAtom.values_.get('_result'),\n onStart: createParamsReaction,\n onEnd: (disposeFn) => disposeFn(),\n });\n } else {\n this.abortController.signal.addEventListener(\n 'abort',\n createParamsReaction(),\n );\n }\n }\n\n this._observableData = _observableData;\n }\n\n /**\n * Current endpoint params used by this query.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#params)\n */\n get params() {\n return this._observableData.params;\n }\n\n /**\n * Last raw HTTP response returned by endpoint.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#response)\n */\n get response() {\n return this._observableData.response;\n }\n\n /**\n * Updates query options and optionally params.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#update)\n */\n update(\n updateParams: Omit<\n QueryUpdateOptionsAllVariants<TQueryFnData, TError, TData, TQueryData>,\n ExcludedQueryKeys\n > & {\n params?: MaybeFalsy<TEndpoint['__params']>;\n },\n ) {\n if ('params' in updateParams) {\n const { params, ...options } = updateParams;\n runInAction(() => {\n this._observableData.params = params;\n });\n return super.update({\n ...buildOptionsFromParams(\n this.endpoint,\n params,\n this._observableData.uniqKey,\n ),\n ...options,\n });\n } else if (this._observableData) {\n return super.update({\n ...buildOptionsFromParams(\n this.endpoint,\n this._observableData.params,\n this._observableData.uniqKey,\n ),\n ...updateParams,\n });\n } else {\n return super.update(updateParams);\n }\n }\n\n /**\n * Refetches query when params are initialized.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#refetch)\n */\n refetch(\n options?: RefetchOptions,\n ): Promise<QueryObserverResult<TData, TError>> {\n if (this.params) {\n return super.refetch(options);\n }\n return Promise.resolve(this.queryObserver.getCurrentResult());\n }\n\n /**\n * Sets params and starts query execution.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#start)\n */\n async start(\n params: MaybeFalsy<TEndpoint['__params']>,\n ): Promise<QueryObserverResult<TData, TError>> {\n runInAction(() => {\n this._observableData.params = params;\n });\n return await super.start(\n buildOptionsFromParams(\n this.endpoint,\n params,\n this._observableData.uniqKey,\n ),\n );\n }\n\n protected handleDestroy(): void {\n super.handleDestroy();\n runInAction(() => {\n this._observableData.params = undefined;\n this._observableData.dynamicOptions = undefined;\n });\n }\n}\n\nexport const getParamsFromContext = (ctx: QueryFunctionContext<any, any>) => {\n return (ctx.queryKey.at(-2) || {}) as AnyEndpoint['__params'];\n};\n\nexport const buildOptionsFromParams = (\n endpoint: AnyEndpoint,\n params: MaybeFalsy<AnyObject>,\n uniqKey: Maybe<EndpointQueryUniqKey>,\n): { enabled: boolean; queryKey: any[] } => {\n const { requiredParams } = endpoint.configuration;\n let hasRequiredParams = false;\n\n if (requiredParams.length > 0) {\n hasRequiredParams =\n !!params && requiredParams.every((param) => param in params);\n } else {\n hasRequiredParams = !!params;\n }\n\n return {\n enabled: hasRequiredParams,\n queryKey: endpoint.toQueryKey(params || {}, uniqKey),\n };\n};\n","import type {\n DefaultError,\n InfiniteData,\n QueryObserverResult,\n} from '@tanstack/query-core';\nimport { makeObservable, observable, runInAction } from 'mobx';\nimport { InfiniteQuery } from 'mobx-tanstack-query';\nimport type { Maybe, MaybeFalsy } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport type {\n EndpointInfiniteQueryFlattenOptions,\n EndpointInfiniteQueryOptions,\n EndpointInfiniteQueryUpdateOptionsAllVariants,\n} from './endpoint-infinite-query.types.js';\nimport { buildOptionsFromParams } from './endpoint-query.js';\nimport type { EndpointQueryUniqKey } from './endpoint-query.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { RequestParams } from './http-client.js';\n\nexport class EndpointInfiniteQuery<\n TEndpoint extends AnyEndpoint,\n TQueryFnData = TEndpoint['__response']['data'],\n TError = DefaultError,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n> extends InfiniteQuery<TQueryFnData, TError, TPageParam, TData, any[]> {\n response: TEndpoint['__response'] | null = null;\n params: TEndpoint['__params'] | null = null;\n\n private uniqKey?: EndpointQueryUniqKey;\n\n private paramsFn: EndpointInfiniteQueryFlattenOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >['params'];\n\n constructor(\n private endpoint: AnyEndpoint,\n queryClient: EndpointQueryClient,\n\n queryOptionsInput:\n | EndpointInfiniteQueryOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >\n | (() => EndpointInfiniteQueryFlattenOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >),\n ) {\n const {\n uniqKey,\n transform: transformResponse,\n params: paramsFn,\n ...queryOptions\n } = typeof queryOptionsInput === 'function'\n ? queryOptionsInput()\n : queryOptionsInput;\n\n super({\n ...queryOptions,\n queryClient,\n meta: endpoint.toQueryMeta(queryOptions.meta),\n options: (query): any => {\n const extraOptions: any = {};\n let willEnableManually: boolean;\n let params: any;\n\n const pageParam = query.options.initialPageParam;\n\n if (typeof queryOptionsInput === 'function') {\n Object.assign(extraOptions, queryOptionsInput());\n params = paramsFn(pageParam);\n willEnableManually = false;\n } else {\n willEnableManually = queryOptionsInput.enabled === false;\n params = paramsFn(pageParam);\n }\n\n const builtOptions = buildOptionsFromParams(endpoint, params, uniqKey);\n // const dynamicOuterOptions = getDynamicOptions?.(query);\n\n let isEnabled = false;\n\n if (willEnableManually) {\n // if (dynamicOuterOptions?.enabled != null) {\n // isEnabled = dynamicOuterOptions.enabled;\n // }\n } else {\n // const outerDynamicEnabled =\n // dynamicOuterOptions?.enabled == null ||\n // !!dynamicOuterOptions.enabled;\n\n // isEnabled = builtOptions.enabled && outerDynamicEnabled;\n isEnabled = builtOptions.enabled;\n }\n\n return {\n ...query.options,\n ...builtOptions,\n // ...dynamicOuterOptions,\n enabled: isEnabled,\n ...extraOptions,\n } as any;\n },\n queryFn: async (ctx): Promise<any> => {\n const params = paramsFn(\n (ctx.pageParam as any) ?? queryOptions.initialPageParam,\n ) as TEndpoint['__params'];\n\n runInAction(() => {\n this.response = null;\n this.params = params;\n });\n\n let requestParams = params.request as Maybe<RequestParams>;\n\n if (requestParams) {\n if (!requestParams.signal) {\n requestParams.signal = ctx.signal;\n }\n } else {\n requestParams = { signal: ctx.signal };\n }\n\n const fixedInput = {\n ...params,\n request: requestParams,\n };\n\n const response = await endpoint.request(fixedInput);\n\n runInAction(() => {\n this.response = response as TEndpoint['__response'];\n });\n\n return (await transformResponse?.(response)) ?? response.data;\n },\n });\n\n this.paramsFn = paramsFn;\n this.uniqKey = uniqKey;\n\n observable.ref(this, 'response');\n observable.ref(this, 'params');\n makeObservable(this);\n }\n\n update({\n params,\n ...options\n }: EndpointInfiniteQueryUpdateOptionsAllVariants<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >) {\n return super.update({\n ...buildOptionsFromParams(this.endpoint, params, this.uniqKey),\n ...options,\n });\n }\n\n async start(\n params: MaybeFalsy<TEndpoint['__params']>,\n ): Promise<QueryObserverResult<TData, TError>> {\n return await super.start(\n buildOptionsFromParams(this.endpoint, params, this.uniqKey),\n );\n }\n}\n","import { Mutation } from 'mobx-tanstack-query';\nimport type { AnyObject, Maybe } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport type {\n EndpointMutationOptions,\n EndpointMutationParams,\n} from './endpoint-mutation.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { InvalidateEndpointsFilters } from './endpoint-query-client.types.js';\nimport type { RequestParams } from './http-client.js';\n\n/**\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-mutations/)\n */\nexport class EndpointMutation<\n TEndpoint extends AnyEndpoint,\n TData = unknown,\n TParams extends AnyObject = AnyObject,\n TMutationMeta extends AnyObject | void = void,\n TOnMutateResult = unknown,\n> extends Mutation<\n TData,\n EndpointMutationParams<TParams, TMutationMeta>,\n TEndpoint['__response']['error'],\n TOnMutateResult\n> {\n /**\n * Creates `EndpointMutation` instance.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-mutations/#constructor)\n */\n constructor(\n endpoint: AnyEndpoint,\n inputQueryClient: EndpointQueryClient,\n {\n transform: transformResponse,\n invalidateEndpoints,\n queryClient: overridedQueryClient,\n ...mutationOptions\n }: EndpointMutationOptions<\n TEndpoint,\n TData,\n TParams,\n TMutationMeta,\n TOnMutateResult\n >,\n ) {\n const queryClient = overridedQueryClient ?? inputQueryClient;\n super({\n ...mutationOptions,\n queryClient,\n onSuccess: (data, variables, onMutateResult, context) => {\n mutationOptions.onSuccess?.(data, variables, onMutateResult, context);\n if (invalidateEndpoints) {\n if (typeof invalidateEndpoints === 'object') {\n queryClient.invalidateEndpoints(invalidateEndpoints);\n } else {\n let filters: Maybe<InvalidateEndpointsFilters>;\n switch (`${invalidateEndpoints}`) {\n case 'true': {\n filters = endpoint.group\n ? {\n group: endpoint.group,\n }\n : {\n tag: endpoint.tags,\n };\n\n break;\n }\n case 'by-group': {\n filters = {\n group: endpoint.group,\n };\n\n break;\n }\n case 'by-tag': {\n filters = {\n tag: endpoint.tags,\n };\n\n break;\n }\n }\n\n if (filters) {\n queryClient.invalidateEndpoints(filters);\n }\n }\n }\n },\n mutationFn: async (input, context) => {\n let requestParams = input?.requestParams as Maybe<RequestParams>;\n\n if (requestParams) {\n if (!requestParams.signal) {\n requestParams.signal = context.signal;\n }\n } else {\n requestParams = { signal: context.signal };\n }\n\n const fixedInput = {\n ...input,\n requestParams,\n };\n\n const response = await endpoint.request(fixedInput);\n return (await transformResponse?.(response)) ?? response.data;\n },\n });\n }\n}\n","import type {\n HttpStatusCode,\n HttpSuccessStatusCode,\n} from 'http-status-code-types';\nimport type { ValueOf } from 'yummies/types';\n\nexport const emptyStatusCodesSet = new Set([204, 205, 304]);\n\nexport interface RequestInfo {\n url: string;\n params: globalThis.RequestInit;\n}\n\ntype ResponsesByStatusMap = {\n [K in HttpStatusCode]?: any;\n};\n\nexport type HttpMultistatusResponse<\n TResponsesByStatusMap extends ResponsesByStatusMap,\n TDefaultOkResponse,\n TDefaultBadResponse = unknown,\n> =\n | ValueOf<{\n [K in keyof TResponsesByStatusMap]-?: HttpResponse<\n K extends HttpSuccessStatusCode\n ? TResponsesByStatusMap[K]\n : TDefaultOkResponse,\n K extends HttpSuccessStatusCode\n ? TDefaultBadResponse\n : TResponsesByStatusMap[K],\n number & K\n >;\n }>\n | HttpResponse<\n TDefaultOkResponse,\n TDefaultBadResponse,\n Exclude<HttpStatusCode, keyof TResponsesByStatusMap>\n >;\n\nexport type GetHttpResponse<T> = T extends (...args: any[]) => infer R\n ? R extends Promise<HttpResponse<any, any>>\n ? Awaited<R>\n : R extends Promise<HttpMultistatusResponse<any, any, any>>\n ? Awaited<R>\n : HttpResponse<any, any>\n : HttpResponse<any, any>;\n\nexport type HttpBadResponse<T = any> = HttpResponse<null, T>;\n\nexport type AnyHttpResponse = HttpResponse<any, any>;\n\nexport type AnyHttpMultistatusResponse = HttpMultistatusResponse<\n ResponsesByStatusMap,\n any,\n any\n>;\n\nexport type AnyResponse = AnyHttpResponse | AnyHttpMultistatusResponse;\n\nexport type ResponseFormat = ValueOf<{\n [K in keyof Body]: Body[K] extends Function ? K : never;\n}>;\n\nexport class HttpResponse<\n TData,\n TError = null,\n TStatus extends number = number,\n> {\n headers;\n ok;\n redirected;\n statusText;\n type;\n url;\n body;\n\n data: TData;\n error: TError;\n status: TStatus;\n\n constructor(\n public originalResponse: Response,\n public request: RequestInfo,\n ) {\n this.headers = originalResponse.headers;\n this.ok = originalResponse.ok ?? false;\n this.body = originalResponse.body ?? null;\n this.redirected = originalResponse.redirected ?? false;\n this.status = originalResponse.status as TStatus;\n this.statusText = originalResponse.statusText;\n this.type = originalResponse.type;\n this.url = originalResponse.url;\n this.data = null as any;\n this.error = null as any;\n }\n\n clone(): HttpResponse<TData, TError, TStatus> {\n return new HttpResponse(this.originalResponse.clone(), this.request);\n }\n\n isEmpty() {\n if (emptyStatusCodesSet.has(this.status)) {\n return true;\n }\n\n const contentLength = this.headers?.get('content-length');\n\n if (contentLength !== null && contentLength === '0') {\n return true;\n }\n\n if (this.body === null) {\n return true;\n }\n\n return false;\n }\n\n async resolveBody(responseFormat: ResponseFormat) {\n try {\n const formatted = await this.originalResponse[responseFormat]();\n if (this.ok) {\n this.data = formatted;\n } else {\n this.error = formatted;\n }\n } catch (error) {\n this.error = error as TError;\n }\n }\n}\n\nexport const isHttpResponse = (\n response: unknown,\n status?: number,\n): response is AnyHttpResponse =>\n typeof response === 'object' &&\n response instanceof HttpResponse &&\n 'data' in response &&\n (!status || response.status === status);\n\nexport const isHttpBadResponse = (\n response: unknown,\n): response is HttpResponse<null, any> => {\n return isHttpResponse(response) && (!response.ok || !!response.error);\n};\n","/** biome-ignore-all lint/style/useShorthandFunctionType: this is special trick to add typings for callable class instance */\nimport type {\n DefaultError,\n InvalidateOptions,\n InvalidateQueryFilters,\n QueryFunctionContext,\n QueryKey,\n} from '@tanstack/query-core';\nimport type { HttpStatusCode } from 'http-status-code-types';\nimport type { IQueryClientCore } from 'mobx-tanstack-query';\nimport { callFunction } from 'yummies/common';\nimport type { AnyObject, Defined, IsPartial, Maybe } from 'yummies/types';\nimport type {\n EndpointConfiguration,\n EndpointMutationPresets,\n} from './endpoint.types.js';\nimport { EndpointInfiniteQuery } from './endpoint-infinite-query.js';\nimport type {\n EndpointInfiniteQueryFlattenOptions,\n EndpointInfiniteQueryOptions,\n} from './endpoint-infinite-query.types.js';\nimport { EndpointMutation } from './endpoint-mutation.js';\nimport type { EndpointMutationOptions } from './endpoint-mutation.types.js';\nimport { EndpointQuery } from './endpoint-query.js';\nimport type {\n EndpointQueryFlattenOptions,\n EndpointQueryMeta,\n EndpointQueryOptions,\n EndpointQueryUniqKey,\n} from './endpoint-query.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { HttpClient } from './http-client.js';\nimport { type AnyResponse, isHttpResponse } from './http-response.js';\n\nexport interface Endpoint<\n TResponse extends AnyResponse,\n TParams extends AnyObject,\n TMetaData extends AnyObject = AnyObject,\n> {\n (\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ): ReturnType<Endpoint<TResponse, TParams, TMetaData>['request']>;\n}\n\n/**\n * This class is a wrapper for your http request.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoints/)\n */\nexport class Endpoint<\n TResponse extends AnyResponse,\n TParams extends AnyObject,\n TMetaData extends AnyObject = AnyObject,\n> {\n endpointId: string;\n\n presets: {\n mutations: EndpointMutationPresets;\n } = {\n mutations: {},\n };\n\n __params!: TParams;\n __response!: TResponse;\n\n meta!: TMetaData;\n\n constructor(\n public configuration: EndpointConfiguration<NoInfer<TParams>, TMetaData>,\n public queryClient: EndpointQueryClient,\n public httpClient: HttpClient,\n ) {\n this.endpointId = globalThis.crypto.randomUUID();\n this.meta = configuration.meta ?? ({} as TMetaData);\n // Сохраняем оригинальный инстанс\n const instance = this;\n\n // Создаем функцию-обертку\n const callable = function (\n this: any,\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ) {\n return instance.request.apply(instance, args);\n } as unknown as Endpoint<TResponse, TParams, TMetaData>;\n\n // Копируем прототип\n Object.setPrototypeOf(callable, new.target.prototype);\n\n // Копируем методы из оригинального инстанса\n Object.getOwnPropertyNames(instance)\n .concat(Object.getOwnPropertyNames(new.target.prototype))\n .forEach((key) => {\n if (key === 'constructor') return;\n const desc =\n Object.getOwnPropertyDescriptor(instance, key) ||\n Object.getOwnPropertyDescriptor(new.target.prototype, key);\n if (desc) Object.defineProperty(callable, key, desc);\n });\n\n // biome-ignore lint/correctness/noConstructorReturn: this is special trick to add typings for callable class instance\n return callable;\n }\n\n getFullUrl(\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ): string {\n const params = this.configuration.params(args[0] ?? ({} as TParams));\n return this.httpClient.buildUrl(params);\n }\n\n getPath(\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ): string {\n const params = this.configuration.params(args[0] ?? ({} as TParams));\n return params.path;\n }\n\n getParamsFromContext<\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n ctx: Omit<QueryFunctionContext<TQueryKey, TPageParam>, 'client'> & {\n client: IQueryClientCore;\n },\n ): TParams {\n return (ctx.queryKey.at(-2) || {}) as TParams;\n }\n\n get tags() {\n return this.configuration.tags;\n }\n\n get path() {\n return this.configuration.path;\n }\n\n get pathDeclaration() {\n return this.path.join('/');\n }\n\n get operationId() {\n return this.configuration.operationId;\n }\n\n get group() {\n return this.configuration.group;\n }\n\n get namespace() {\n return this.configuration.namespace;\n }\n\n checkResponse<TStatus extends HttpStatusCode>(\n response: unknown,\n status: TStatus,\n ): response is Extract<TResponse, { status: TStatus }>;\n checkResponse(response: unknown): response is TResponse;\n checkResponse(response: unknown, status?: HttpStatusCode) {\n return isHttpResponse(response, status);\n }\n\n request(\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ) {\n return this.httpClient.request<TResponse>(\n this.configuration.params(args[0] ?? ({} as TParams)),\n this,\n );\n }\n\n toQueryMeta = (meta?: AnyObject) =>\n ({\n ...meta,\n tags: this.tags,\n operationId: this.operationId,\n path: this.path,\n pathDeclaration: this.pathDeclaration,\n endpointId: this.endpointId,\n endpointQuery: true,\n }) satisfies EndpointQueryMeta;\n\n toQueryKey(params?: Maybe<TParams>, uniqKey?: EndpointQueryUniqKey): any {\n return [\n ...this.configuration.path,\n this.configuration.operationId,\n params ?? {},\n callFunction(uniqKey),\n ];\n }\n\n toInfiniteQueryKey(\n params?: Maybe<TParams>,\n uniqKey?: EndpointQueryUniqKey,\n ): any {\n return [\n { infiniteQuery: true },\n ...this.configuration.path,\n this.configuration.operationId,\n params ?? {},\n callFunction(uniqKey),\n ];\n }\n\n invalidateQuery(\n ...args: IsPartial<TParams> extends true\n ? [\n params?: Maybe<TParams>,\n filters?: InvalidateQueryFilters & { uniqKey?: EndpointQueryUniqKey },\n options?: InvalidateOptions,\n ]\n : [\n params: TParams,\n filters?: InvalidateQueryFilters & { uniqKey?: EndpointQueryUniqKey },\n options?: InvalidateOptions,\n ]\n ) {\n this.queryClient.invalidateQueries(\n {\n queryKey: this.toQueryKey(args[0], args[1]?.uniqKey),\n exact: true,\n ...(args[1] as any),\n },\n args[2],\n );\n }\n\n toMutation<\n TData = TResponse['data'],\n TMutationMeta extends AnyObject | void = void,\n TContext = unknown,\n >(\n options: EndpointMutationOptions<\n this,\n TData,\n TParams,\n TMutationMeta,\n TContext\n >,\n ) {\n return new EndpointMutation<this, TData, TParams, TMutationMeta, TContext>(\n this,\n this.queryClient,\n {\n ...options,\n invalidateEndpoints:\n options.invalidateEndpoints ??\n this.presets.mutations?.invalidateQueries,\n },\n );\n }\n\n toQuery<\n TQueryFnData = TResponse['data'],\n TError = DefaultError | Defined<TResponse['error']>,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n >(\n options:\n | EndpointQueryOptions<this, TQueryFnData, TError, TData, TQueryData>\n | (() => EndpointQueryFlattenOptions<\n this,\n TQueryFnData,\n TError,\n TData,\n TQueryData\n >),\n ) {\n return new EndpointQuery<this, TQueryFnData, TError, TData, TQueryData>(\n this,\n this.queryClient,\n options,\n );\n }\n\n toInfiniteQuery<\n TData = TResponse['data'],\n TError = DefaultError,\n TPageParam = unknown,\n >(\n options:\n | EndpointInfiniteQueryOptions<this, TData, TError, TPageParam>\n | (() => EndpointInfiniteQueryFlattenOptions<\n this,\n TData,\n TError,\n TPageParam\n >),\n ) {\n return new EndpointInfiniteQuery<this, TData, TError, TPageParam>(\n this,\n this.queryClient,\n options,\n );\n }\n}\n","import { hashKey, type InvalidateOptions } from '@tanstack/query-core';\nimport { QueryClient, type QueryClientConfig } from 'mobx-tanstack-query';\nimport type { Maybe } from 'yummies/types';\nimport type { EndpointQueryMeta } from './endpoint-query.types.js';\nimport type {\n EndpointStringFilter,\n InvalidateEndpointsFilters,\n} from './endpoint-query-client.types.js';\n\n/**\n * Class that extends `QueryClient` and gives a bit more control over endpoint queries and mutations.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-query-client/)\n */\nexport class EndpointQueryClient extends QueryClient {\n /**\n * Creates `EndpointQueryClient` instance.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-query-client/#constructor)\n */\n constructor(config?: QueryClientConfig) {\n super({\n ...config,\n defaultOptions: {\n ...config?.defaultOptions,\n queries: {\n ...config?.defaultOptions?.queries,\n queryKeyHashFn:\n config?.defaultOptions?.queries?.queryKeyHashFn ?? hashKey,\n },\n },\n });\n }\n\n /**\n * Invalidates endpoint queries by endpoint metadata filters.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-query-client/#invalidateendpoints)\n */\n invalidateEndpoints(\n {\n group,\n namespace,\n operationId,\n tag,\n predicate,\n endpoint,\n exclude,\n ...queryFilters\n }: InvalidateEndpointsFilters,\n options?: InvalidateOptions,\n ) {\n const endpointIdsToExclude = new Set<string>(\n exclude?.endpoints?.map((it) => it.endpointId),\n );\n const endpointTagsToExclude = new Set<string>(exclude?.tags ?? []);\n\n let endpointIdsToFilter: Maybe<Set<string>>;\n\n if (Array.isArray(endpoint)) {\n endpointIdsToFilter = new Set(endpoint.map((it) => it.endpointId));\n } else if (endpoint) {\n endpointIdsToFilter = new Set([endpoint.endpointId]);\n }\n\n return this.invalidateQueries(\n {\n ...queryFilters,\n predicate: (query) => {\n if (!query.meta?.endpointQuery) {\n return false;\n }\n\n const meta = query.meta as unknown as EndpointQueryMeta;\n\n if (\n endpointIdsToExclude.has(meta.endpointId) ||\n (endpointTagsToExclude.size &&\n meta.tags.some((tag) => endpointTagsToExclude.has(tag)))\n ) {\n return false;\n }\n\n if (\n endpointIdsToFilter &&\n !endpointIdsToFilter.has(meta.endpointId)\n ) {\n return false;\n }\n\n if (\n namespace &&\n meta.namespace &&\n !applyStringFilter(namespace, meta.namespace)\n ) {\n return false;\n }\n\n if (group && meta.group && !applyStringFilter(group, meta.group)) {\n return false;\n }\n\n if (tag && meta.tags && !applyStringFilter(tag, meta.tags)) {\n return false;\n }\n\n if (tag && meta.tags && !applyStringFilter(tag, meta.tags)) {\n return false;\n }\n\n if (\n operationId &&\n !applyStringFilter(operationId, meta.operationId)\n ) {\n return false;\n }\n\n if (predicate && !predicate(meta, query as any)) {\n return false;\n }\n\n return true;\n },\n },\n options,\n );\n }\n}\n\nconst applyStringFilter = (\n filter: EndpointStringFilter,\n value: string | string[],\n): boolean => {\n const values = Array.isArray(value) ? value : [value];\n\n if (filter instanceof RegExp) {\n return values.some((value) => filter.test(value));\n }\n\n if (Array.isArray(filter)) {\n return filter.some((filter) => values.includes(filter));\n }\n\n return values.includes(filter);\n};\n","import { action, makeObservable, observable } from 'mobx';\nimport { type BooleanOptional, type IStringifyOptions, stringify } from 'qs';\nimport type { AnyObject, Defined, Maybe } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport {\n type AnyHttpResponse,\n type AnyResponse,\n HttpResponse,\n type ResponseFormat,\n} from './http-response.js';\n\nexport type QueryParamsType = Record<string | number, any>;\n\nexport interface FullRequestParams extends Omit<RequestInit, 'body'> {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n contentType?: string;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** meta data */\n meta?: Record<string, any>;\n}\n\nexport const ContentType = {\n Json: 'application/json',\n FormData: 'multipart/form-data',\n UrlEncoded: 'application/x-www-form-urlencoded',\n Text: 'text/plain',\n Binary: 'application/octet-stream',\n} as const;\n\nexport type RequestParams = Omit<\n FullRequestParams,\n 'body' | 'method' | 'query' | 'path' | 'serviceName'\n>;\n\nexport interface HttpClientConfig<TMeta = unknown> {\n baseUrl?: string;\n meta?: TMeta;\n fetch?: typeof globalThis.fetch;\n baseApiParams?: Omit<RequestParams, 'baseUrl' | 'cancelToken' | 'signal'>;\n contentFormatters?: Record<string, (input: any) => any>;\n queryStringifyOptions?: IStringifyOptions<BooleanOptional>;\n toQueryString?: (query?: AnyObject) => string;\n buildUrl?: (\n fullParams: FullRequestParams,\n formattedParts: { baseUrl: string; path: string; query: string },\n metadata: TMeta | null,\n ) => string;\n interceptor?: (\n requestParams: RequestParams,\n metadata: TMeta | null,\n endpoint?: Maybe<AnyEndpoint>,\n ) => Promise<RequestParams | void> | RequestParams | void;\n}\n\nexport class HttpClient<TMeta = unknown> {\n private config: HttpClientConfig<TMeta>;\n private fetch: Required<HttpClientConfig<TMeta>>['fetch'];\n\n public meta: TMeta | null;\n public baseApiParams: RequestParams;\n\n badResponse: unknown;\n\n protected toQueryString: Defined<HttpClientConfig<TMeta>['toQueryString']>;\n\n constructor(config?: HttpClientConfig<TMeta>) {\n this.config = config ?? {};\n this.badResponse = null;\n this.meta = config?.meta ?? null;\n this.fetch =\n config?.fetch ??\n ((...fetchParams: Parameters<typeof globalThis.fetch>) =>\n globalThis.fetch(...fetchParams));\n this.toQueryString =\n config?.toQueryString ??\n ((query) => stringify(query, config?.queryStringifyOptions));\n\n this.baseApiParams = {\n credentials: 'same-origin',\n headers: {},\n redirect: 'follow',\n referrerPolicy: 'no-referrer',\n };\n\n this.updateConfig(this.config);\n\n observable.ref(this, 'badResponse');\n observable.ref(this, 'meta');\n\n action(this, 'setMeta');\n action(this, 'setBadResponse');\n\n makeObservable(this);\n }\n\n get baseUrl() {\n return this.config.baseUrl ?? '';\n }\n\n public updateConfig(update: Partial<HttpClientConfig<TMeta>>) {\n Object.assign(this.config, update);\n\n if (update.baseApiParams) {\n Object.assign(this.baseApiParams, update.baseApiParams);\n }\n\n if (update.contentFormatters) {\n Object.assign(this.contentFormatters, update.contentFormatters);\n }\n\n if (update.fetch) {\n this.fetch = update.fetch;\n }\n }\n\n public setMeta = (data: TMeta | null) => {\n this.meta = data;\n };\n\n public setBadResponse = (response: unknown) => {\n this.badResponse = response;\n };\n\n private contentFormatters: Record<string, (input: any) => any> = {\n 'application/json': (input: any) =>\n input !== null && (typeof input === 'object' || typeof input === 'string')\n ? JSON.stringify(input)\n : input,\n 'text/plain': (input: any) =>\n input !== null && typeof input !== 'string'\n ? JSON.stringify(input)\n : input,\n 'multipart/form-data': (input: any) =>\n Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n\n if (property instanceof Blob) {\n formData.append(key, property);\n } else if (typeof property === 'object' && property !== null) {\n formData.append(key, JSON.stringify(property));\n } else {\n formData.append(key, `${property}`);\n }\n\n return formData;\n }, new FormData()),\n 'application/x-www-form-urlencoded': (input: any) =>\n this.toQueryString(input),\n 'application/octet-stream': (input: any) => input,\n };\n\n protected mergeRequestParams(\n params1: RequestParams,\n params2?: RequestParams,\n ): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...params2,\n headers: {\n ...this.baseApiParams.headers,\n ...params1.headers,\n ...params2?.headers,\n },\n };\n }\n\n protected async createResponse(\n responseFormat: FullRequestParams['format'] = 'json',\n raw: Response,\n url: string,\n params: RequestInit,\n ): Promise<AnyHttpResponse> {\n const response = new HttpResponse<any, any>(raw, { url, params });\n\n if (response.isEmpty()) {\n return response;\n }\n\n await response.resolveBody(responseFormat);\n\n if (!response.ok || response.error) {\n this.setBadResponse(response);\n }\n\n return response;\n }\n\n public buildUrl = (params: FullRequestParams) => {\n const baseUrl = params.baseUrl ?? this.baseUrl ?? '';\n\n const path = params.path;\n\n const queryString = params.query && this.toQueryString(params.query);\n\n const query = queryString ? `?${queryString}` : '';\n\n if (this.config.buildUrl) {\n return this.config.buildUrl(params, { baseUrl, path, query }, this.meta);\n }\n\n const url = baseUrl + path + query;\n\n return url;\n };\n\n public request<T, E>(\n fullParams: FullRequestParams,\n endpoint?: Maybe<AnyEndpoint>,\n ): Promise<HttpResponse<T, E>>;\n public request<THttpResponse extends AnyResponse>(\n fullParams: FullRequestParams,\n endpoint?: Maybe<AnyEndpoint>,\n ): Promise<THttpResponse>;\n\n public async request(\n fullParams: FullRequestParams,\n endpoint?: Maybe<AnyEndpoint>,\n ): Promise<any> {\n this.setBadResponse(null);\n\n const { body, contentType, format, ...params } = fullParams;\n\n let requestParams = this.mergeRequestParams(params);\n\n if (this.config.interceptor) {\n requestParams =\n (await this.config.interceptor(requestParams, this.meta, endpoint)) ??\n requestParams;\n }\n\n const responseFormat = format || requestParams.format;\n\n const url = this.buildUrl(fullParams);\n\n let headers: Headers;\n\n if (requestParams.headers instanceof Headers) {\n headers = requestParams.headers;\n } else if (Array.isArray(requestParams.headers)) {\n headers = new Headers(requestParams.headers);\n } else {\n headers = new Headers(requestParams.headers);\n }\n\n let bodyToSend: Maybe<BodyInit>;\n\n if (contentType) {\n if (\n contentType !== ContentType.FormData &&\n !headers.has('Content-Type')\n ) {\n headers.set('Content-Type', contentType);\n }\n\n const payloadFormatter = this.contentFormatters[contentType];\n\n if (body == null) {\n bodyToSend = null;\n } else if (payloadFormatter) {\n bodyToSend = payloadFormatter(body);\n } else {\n bodyToSend = body as any;\n }\n }\n\n const fetchUrl: string = url;\n const fetchParams: RequestInit = {\n ...requestParams,\n headers,\n body: bodyToSend,\n };\n\n let response: Response;\n\n try {\n response = await this.fetch(fetchUrl, fetchParams);\n } catch (error) {\n if (error instanceof Response) {\n response = error;\n } else {\n throw error;\n }\n }\n\n const httpResponse = await this.createResponse(\n responseFormat,\n response,\n fetchUrl,\n fetchParams,\n );\n\n if (!httpResponse.ok || httpResponse.error) {\n throw httpResponse;\n }\n\n return httpResponse;\n }\n}\n"],"names":["Query","makeObservable","observable","params","runInAction","comparer","getMobxAdministration","computed","reaction","uniqKey","onDone","callFunction","lazyObserve","InfiniteQuery","Mutation","QueryClient","hashKey","tag","value","filter","stringify","action"],"mappings":"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"}
|
package/index.js
CHANGED
|
@@ -18,6 +18,7 @@ class EndpointQuery extends Query {
|
|
|
18
18
|
uniqKey,
|
|
19
19
|
transform: transformResponse,
|
|
20
20
|
params,
|
|
21
|
+
onDone: onDoneInput,
|
|
21
22
|
queryClient: overridedQueryClient,
|
|
22
23
|
...queryOptions
|
|
23
24
|
} = unpackedQueryOptionsInput;
|
|
@@ -41,8 +42,12 @@ class EndpointQuery extends Query {
|
|
|
41
42
|
response: observable.ref,
|
|
42
43
|
dynamicOptions: observable
|
|
43
44
|
});
|
|
45
|
+
const onDone = onDoneInput && ((...args) => {
|
|
46
|
+
onDoneInput(...args);
|
|
47
|
+
});
|
|
44
48
|
super({
|
|
45
49
|
...queryOptions,
|
|
50
|
+
onDone,
|
|
46
51
|
queryClient,
|
|
47
52
|
meta: endpoint.toQueryMeta(queryOptions.meta),
|
|
48
53
|
options: () => {
|
|
@@ -105,7 +110,7 @@ class EndpointQuery extends Query {
|
|
|
105
110
|
params: params2,
|
|
106
111
|
abortSignal,
|
|
107
112
|
select,
|
|
108
|
-
onDone,
|
|
113
|
+
onDone: onDone2,
|
|
109
114
|
onError,
|
|
110
115
|
onInit,
|
|
111
116
|
enableOnDemand,
|
|
@@ -428,9 +433,9 @@ class HttpResponse {
|
|
|
428
433
|
this.originalResponse = originalResponse;
|
|
429
434
|
this.request = request;
|
|
430
435
|
this.headers = originalResponse.headers;
|
|
431
|
-
this.ok = originalResponse.ok;
|
|
432
|
-
this.body = originalResponse.body;
|
|
433
|
-
this.redirected = originalResponse.redirected;
|
|
436
|
+
this.ok = originalResponse.ok ?? false;
|
|
437
|
+
this.body = originalResponse.body ?? null;
|
|
438
|
+
this.redirected = originalResponse.redirected ?? false;
|
|
434
439
|
this.status = originalResponse.status;
|
|
435
440
|
this.statusText = originalResponse.statusText;
|
|
436
441
|
this.type = originalResponse.type;
|
|
@@ -455,7 +460,7 @@ class HttpResponse {
|
|
|
455
460
|
if (emptyStatusCodesSet.has(this.status)) {
|
|
456
461
|
return true;
|
|
457
462
|
}
|
|
458
|
-
const contentLength = this.headers
|
|
463
|
+
const contentLength = this.headers?.get("content-length");
|
|
459
464
|
if (contentLength !== null && contentLength === "0") {
|
|
460
465
|
return true;
|
|
461
466
|
}
|
|
@@ -844,7 +849,11 @@ class HttpClient {
|
|
|
844
849
|
try {
|
|
845
850
|
response = await this.fetch(fetchUrl, fetchParams);
|
|
846
851
|
} catch (error) {
|
|
847
|
-
|
|
852
|
+
if (error instanceof Response) {
|
|
853
|
+
response = error;
|
|
854
|
+
} else {
|
|
855
|
+
throw error;
|
|
856
|
+
}
|
|
848
857
|
}
|
|
849
858
|
const httpResponse = await this.createResponse(
|
|
850
859
|
responseFormat,
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/runtime/endpoint-query.ts","../src/runtime/endpoint-infinite-query.ts","../src/runtime/endpoint-mutation.ts","../src/runtime/http-response.ts","../src/runtime/endpoint.ts","../src/runtime/endpoint-query-client.ts","../src/runtime/http-client.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/noUnusedVariables: generic type imports are intentional */\nimport type {\n DefaultError,\n QueryFunctionContext,\n QueryObserverResult,\n RefetchOptions,\n} from '@tanstack/query-core';\nimport {\n comparer,\n computed,\n makeObservable,\n observable,\n reaction,\n runInAction,\n} from 'mobx';\nimport { Query, type QueryUpdateOptionsAllVariants } from 'mobx-tanstack-query';\nimport { callFunction } from 'yummies/common';\nimport { getMobxAdministration, lazyObserve } from 'yummies/mobx';\nimport type { AnyObject, Maybe, MaybeFalsy, MaybeFn } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport type {\n EndpointQueryFlattenOptions,\n EndpointQueryOptions,\n EndpointQueryUniqKey,\n ExcludedQueryKeys,\n} from './endpoint-query.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { RequestParams } from './http-client.js';\n\ninterface InternalObservableData<TEndpoint extends AnyEndpoint> {\n params: MaybeFalsy<TEndpoint['__params']>;\n uniqKey?: EndpointQueryUniqKey;\n initialized?: boolean;\n dynamicOptions?: any;\n response: TEndpoint['__response'] | null;\n}\n\n/**\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/)\n */\nexport class EndpointQuery<\n TEndpoint extends AnyEndpoint,\n TQueryFnData = TEndpoint['__response']['data'],\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n> extends Query<TQueryFnData, TError, TData, TQueryData> {\n private _observableData: InternalObservableData<TEndpoint>;\n\n /**\n * Creates `EndpointQuery` instance.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#constructor)\n */\n constructor(\n private endpoint: AnyEndpoint,\n inputQueryClient: EndpointQueryClient,\n queryOptionsInput:\n | EndpointQueryOptions<TEndpoint, TQueryFnData, TError, TData, TQueryData>\n | (() => EndpointQueryFlattenOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TData,\n TQueryData\n >),\n ) {\n const isQueryOptionsInputFn = typeof queryOptionsInput === 'function';\n const unpackedQueryOptionsInput = isQueryOptionsInputFn\n ? queryOptionsInput()\n : queryOptionsInput;\n\n const {\n uniqKey,\n transform: transformResponse,\n params,\n queryClient: overridedQueryClient,\n ...queryOptions\n } = unpackedQueryOptionsInput;\n\n const queryClient = overridedQueryClient ?? inputQueryClient;\n\n const _observableData: InternalObservableData<TEndpoint> = {\n params: null,\n dynamicOptions: undefined,\n response: null,\n uniqKey: unpackedQueryOptionsInput.uniqKey,\n };\n\n if (!isQueryOptionsInputFn && typeof params !== 'function') {\n if ('params' in unpackedQueryOptionsInput) {\n _observableData.params = params;\n } else {\n _observableData.params = {};\n }\n _observableData.initialized = true;\n }\n\n makeObservable(_observableData, {\n params: observable.ref,\n response: observable.ref,\n dynamicOptions: observable,\n });\n\n super({\n ...queryOptions,\n queryClient,\n meta: endpoint.toQueryMeta(queryOptions.meta),\n options: (): any => {\n const builtOptions = buildOptionsFromParams(\n endpoint,\n _observableData.params,\n _observableData.uniqKey,\n );\n\n let isEnabled = !!_observableData.initialized && builtOptions.enabled;\n\n if (\n typeof queryOptionsInput !== 'function' &&\n queryOptionsInput.enabled === false\n ) {\n isEnabled = false;\n }\n\n return {\n ...builtOptions,\n enabled: isEnabled,\n ..._observableData.dynamicOptions,\n };\n },\n queryFn: async (ctx): Promise<any> => {\n const params = endpoint.getParamsFromContext(ctx);\n\n runInAction(() => {\n _observableData.response = null;\n if (!comparer.structural(params, _observableData.params)) {\n _observableData.params = params;\n }\n });\n\n let requestParams = params.requestParams as Maybe<RequestParams>;\n\n if (requestParams) {\n if (!requestParams.signal) {\n requestParams.signal = ctx.signal;\n }\n } else {\n requestParams = { signal: ctx.signal };\n }\n\n const fixedInput = {\n ...params,\n requestParams,\n };\n\n const response = await endpoint.request(fixedInput);\n\n runInAction(() => {\n _observableData.response = response as TEndpoint['__response'];\n });\n\n return (await transformResponse?.(response)) ?? response.data;\n },\n });\n\n const parentAtom = getMobxAdministration(this);\n\n computed.struct(this, 'params');\n computed.struct(this, 'response');\n makeObservable(this);\n\n if (isQueryOptionsInputFn || typeof params === 'function') {\n const createParamsReaction = () =>\n reaction(\n (): Partial<InternalObservableData<TEndpoint>> => {\n let outDynamicOptions: InternalObservableData<TEndpoint>['dynamicOptions'];\n let outParams: MaybeFn<MaybeFalsy<TEndpoint['__params']>>;\n let uniqKey: Maybe<EndpointQueryUniqKey>;\n\n if (isQueryOptionsInputFn) {\n const result = queryOptionsInput();\n const {\n params,\n abortSignal,\n select,\n onDone,\n onError,\n onInit,\n enableOnDemand,\n uniqKey: _uniqKey,\n ...dynamicOptions\n } = result;\n\n uniqKey = _uniqKey;\n\n if ('params' in result) {\n outParams = result.params;\n } else {\n outParams = {};\n }\n\n outDynamicOptions =\n Object.keys(dynamicOptions).length > 0\n ? dynamicOptions\n : undefined;\n } else if ('params' in unpackedQueryOptionsInput) {\n outParams = unpackedQueryOptionsInput.params;\n uniqKey = unpackedQueryOptionsInput.uniqKey;\n } else {\n outParams = {};\n uniqKey = unpackedQueryOptionsInput.uniqKey;\n }\n\n return {\n params: callFunction(outParams),\n dynamicOptions: outDynamicOptions,\n uniqKey,\n };\n },\n ({ params, dynamicOptions, uniqKey }) => {\n runInAction(() => {\n _observableData.initialized = true;\n _observableData.params = params;\n _observableData.dynamicOptions = dynamicOptions;\n _observableData.uniqKey = uniqKey;\n });\n },\n {\n fireImmediately: true,\n },\n );\n\n if (this.features.lazy) {\n lazyObserve({\n property: parentAtom.values_.get('_result'),\n onStart: createParamsReaction,\n onEnd: (disposeFn) => disposeFn(),\n });\n } else {\n this.abortController.signal.addEventListener(\n 'abort',\n createParamsReaction(),\n );\n }\n }\n\n this._observableData = _observableData;\n }\n\n /**\n * Current endpoint params used by this query.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#params)\n */\n get params() {\n return this._observableData.params;\n }\n\n /**\n * Last raw HTTP response returned by endpoint.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#response)\n */\n get response() {\n return this._observableData.response;\n }\n\n /**\n * Updates query options and optionally params.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#update)\n */\n update(\n updateParams: Omit<\n QueryUpdateOptionsAllVariants<TQueryFnData, TError, TData, TQueryData>,\n ExcludedQueryKeys\n > & {\n params?: MaybeFalsy<TEndpoint['__params']>;\n },\n ) {\n if ('params' in updateParams) {\n const { params, ...options } = updateParams;\n runInAction(() => {\n this._observableData.params = params;\n });\n return super.update({\n ...buildOptionsFromParams(\n this.endpoint,\n params,\n this._observableData.uniqKey,\n ),\n ...options,\n });\n } else if (this._observableData) {\n return super.update({\n ...buildOptionsFromParams(\n this.endpoint,\n this._observableData.params,\n this._observableData.uniqKey,\n ),\n ...updateParams,\n });\n } else {\n return super.update(updateParams);\n }\n }\n\n /**\n * Refetches query when params are initialized.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#refetch)\n */\n refetch(\n options?: RefetchOptions,\n ): Promise<QueryObserverResult<TData, TError>> {\n if (this.params) {\n return super.refetch(options);\n }\n return Promise.resolve(this.queryObserver.getCurrentResult());\n }\n\n /**\n * Sets params and starts query execution.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#start)\n */\n async start(\n params: MaybeFalsy<TEndpoint['__params']>,\n ): Promise<QueryObserverResult<TData, TError>> {\n runInAction(() => {\n this._observableData.params = params;\n });\n return await super.start(\n buildOptionsFromParams(\n this.endpoint,\n params,\n this._observableData.uniqKey,\n ),\n );\n }\n\n protected handleDestroy(): void {\n super.handleDestroy();\n runInAction(() => {\n this._observableData.params = undefined;\n this._observableData.dynamicOptions = undefined;\n });\n }\n}\n\nexport const getParamsFromContext = (ctx: QueryFunctionContext<any, any>) => {\n return (ctx.queryKey.at(-2) || {}) as AnyEndpoint['__params'];\n};\n\nexport const buildOptionsFromParams = (\n endpoint: AnyEndpoint,\n params: MaybeFalsy<AnyObject>,\n uniqKey: Maybe<EndpointQueryUniqKey>,\n): { enabled: boolean; queryKey: any[] } => {\n const { requiredParams } = endpoint.configuration;\n let hasRequiredParams = false;\n\n if (requiredParams.length > 0) {\n hasRequiredParams =\n !!params && requiredParams.every((param) => param in params);\n } else {\n hasRequiredParams = !!params;\n }\n\n return {\n enabled: hasRequiredParams,\n queryKey: endpoint.toQueryKey(params || {}, uniqKey),\n };\n};\n","import type {\n DefaultError,\n InfiniteData,\n QueryObserverResult,\n} from '@tanstack/query-core';\nimport { makeObservable, observable, runInAction } from 'mobx';\nimport { InfiniteQuery } from 'mobx-tanstack-query';\nimport type { Maybe, MaybeFalsy } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport type {\n EndpointInfiniteQueryFlattenOptions,\n EndpointInfiniteQueryOptions,\n EndpointInfiniteQueryUpdateOptionsAllVariants,\n} from './endpoint-infinite-query.types.js';\nimport { buildOptionsFromParams } from './endpoint-query.js';\nimport type { EndpointQueryUniqKey } from './endpoint-query.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { RequestParams } from './http-client.js';\n\nexport class EndpointInfiniteQuery<\n TEndpoint extends AnyEndpoint,\n TQueryFnData = TEndpoint['__response']['data'],\n TError = DefaultError,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n> extends InfiniteQuery<TQueryFnData, TError, TPageParam, TData, any[]> {\n response: TEndpoint['__response'] | null = null;\n params: TEndpoint['__params'] | null = null;\n\n private uniqKey?: EndpointQueryUniqKey;\n\n private paramsFn: EndpointInfiniteQueryFlattenOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >['params'];\n\n constructor(\n private endpoint: AnyEndpoint,\n queryClient: EndpointQueryClient,\n\n queryOptionsInput:\n | EndpointInfiniteQueryOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >\n | (() => EndpointInfiniteQueryFlattenOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >),\n ) {\n const {\n uniqKey,\n transform: transformResponse,\n params: paramsFn,\n ...queryOptions\n } = typeof queryOptionsInput === 'function'\n ? queryOptionsInput()\n : queryOptionsInput;\n\n super({\n ...queryOptions,\n queryClient,\n meta: endpoint.toQueryMeta(queryOptions.meta),\n options: (query): any => {\n const extraOptions: any = {};\n let willEnableManually: boolean;\n let params: any;\n\n const pageParam = query.options.initialPageParam;\n\n if (typeof queryOptionsInput === 'function') {\n Object.assign(extraOptions, queryOptionsInput());\n params = paramsFn(pageParam);\n willEnableManually = false;\n } else {\n willEnableManually = queryOptionsInput.enabled === false;\n params = paramsFn(pageParam);\n }\n\n const builtOptions = buildOptionsFromParams(endpoint, params, uniqKey);\n // const dynamicOuterOptions = getDynamicOptions?.(query);\n\n let isEnabled = false;\n\n if (willEnableManually) {\n // if (dynamicOuterOptions?.enabled != null) {\n // isEnabled = dynamicOuterOptions.enabled;\n // }\n } else {\n // const outerDynamicEnabled =\n // dynamicOuterOptions?.enabled == null ||\n // !!dynamicOuterOptions.enabled;\n\n // isEnabled = builtOptions.enabled && outerDynamicEnabled;\n isEnabled = builtOptions.enabled;\n }\n\n return {\n ...query.options,\n ...builtOptions,\n // ...dynamicOuterOptions,\n enabled: isEnabled,\n ...extraOptions,\n } as any;\n },\n queryFn: async (ctx): Promise<any> => {\n const params = paramsFn(\n (ctx.pageParam as any) ?? queryOptions.initialPageParam,\n ) as TEndpoint['__params'];\n\n runInAction(() => {\n this.response = null;\n this.params = params;\n });\n\n let requestParams = params.request as Maybe<RequestParams>;\n\n if (requestParams) {\n if (!requestParams.signal) {\n requestParams.signal = ctx.signal;\n }\n } else {\n requestParams = { signal: ctx.signal };\n }\n\n const fixedInput = {\n ...params,\n request: requestParams,\n };\n\n const response = await endpoint.request(fixedInput);\n\n runInAction(() => {\n this.response = response as TEndpoint['__response'];\n });\n\n return (await transformResponse?.(response)) ?? response.data;\n },\n });\n\n this.paramsFn = paramsFn;\n this.uniqKey = uniqKey;\n\n observable.ref(this, 'response');\n observable.ref(this, 'params');\n makeObservable(this);\n }\n\n update({\n params,\n ...options\n }: EndpointInfiniteQueryUpdateOptionsAllVariants<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >) {\n return super.update({\n ...buildOptionsFromParams(this.endpoint, params, this.uniqKey),\n ...options,\n });\n }\n\n async start(\n params: MaybeFalsy<TEndpoint['__params']>,\n ): Promise<QueryObserverResult<TData, TError>> {\n return await super.start(\n buildOptionsFromParams(this.endpoint, params, this.uniqKey),\n );\n }\n}\n","import { Mutation } from 'mobx-tanstack-query';\nimport type { AnyObject, Maybe } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport type {\n EndpointMutationOptions,\n EndpointMutationParams,\n} from './endpoint-mutation.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { InvalidateEndpointsFilters } from './endpoint-query-client.types.js';\nimport type { RequestParams } from './http-client.js';\n\n/**\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-mutations/)\n */\nexport class EndpointMutation<\n TEndpoint extends AnyEndpoint,\n TData = unknown,\n TParams extends AnyObject = AnyObject,\n TMutationMeta extends AnyObject | void = void,\n TOnMutateResult = unknown,\n> extends Mutation<\n TData,\n EndpointMutationParams<TParams, TMutationMeta>,\n TEndpoint['__response']['error'],\n TOnMutateResult\n> {\n /**\n * Creates `EndpointMutation` instance.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-mutations/#constructor)\n */\n constructor(\n endpoint: AnyEndpoint,\n inputQueryClient: EndpointQueryClient,\n {\n transform: transformResponse,\n invalidateEndpoints,\n queryClient: overridedQueryClient,\n ...mutationOptions\n }: EndpointMutationOptions<\n TEndpoint,\n TData,\n TParams,\n TMutationMeta,\n TOnMutateResult\n >,\n ) {\n const queryClient = overridedQueryClient ?? inputQueryClient;\n super({\n ...mutationOptions,\n queryClient,\n onSuccess: (data, variables, onMutateResult, context) => {\n mutationOptions.onSuccess?.(data, variables, onMutateResult, context);\n if (invalidateEndpoints) {\n if (typeof invalidateEndpoints === 'object') {\n queryClient.invalidateEndpoints(invalidateEndpoints);\n } else {\n let filters: Maybe<InvalidateEndpointsFilters>;\n switch (`${invalidateEndpoints}`) {\n case 'true': {\n filters = endpoint.group\n ? {\n group: endpoint.group,\n }\n : {\n tag: endpoint.tags,\n };\n\n break;\n }\n case 'by-group': {\n filters = {\n group: endpoint.group,\n };\n\n break;\n }\n case 'by-tag': {\n filters = {\n tag: endpoint.tags,\n };\n\n break;\n }\n }\n\n if (filters) {\n queryClient.invalidateEndpoints(filters);\n }\n }\n }\n },\n mutationFn: async (input, context) => {\n let requestParams = input?.requestParams as Maybe<RequestParams>;\n\n if (requestParams) {\n if (!requestParams.signal) {\n requestParams.signal = context.signal;\n }\n } else {\n requestParams = { signal: context.signal };\n }\n\n const fixedInput = {\n ...input,\n requestParams,\n };\n\n const response = await endpoint.request(fixedInput);\n return (await transformResponse?.(response)) ?? response.data;\n },\n });\n }\n}\n","import type {\n HttpStatusCode,\n HttpSuccessStatusCode,\n} from 'http-status-code-types';\nimport type { ValueOf } from 'yummies/types';\n\nexport const emptyStatusCodesSet = new Set([204, 205, 304]);\n\nexport interface RequestInfo {\n url: string;\n params: globalThis.RequestInit;\n}\n\ntype ResponsesByStatusMap = {\n [K in HttpStatusCode]?: any;\n};\n\nexport type HttpMultistatusResponse<\n TResponsesByStatusMap extends ResponsesByStatusMap,\n TDefaultOkResponse,\n TDefaultBadResponse = unknown,\n> =\n | ValueOf<{\n [K in keyof TResponsesByStatusMap]-?: HttpResponse<\n K extends HttpSuccessStatusCode\n ? TResponsesByStatusMap[K]\n : TDefaultOkResponse,\n K extends HttpSuccessStatusCode\n ? TDefaultBadResponse\n : TResponsesByStatusMap[K],\n number & K\n >;\n }>\n | HttpResponse<\n TDefaultOkResponse,\n TDefaultBadResponse,\n Exclude<HttpStatusCode, keyof TResponsesByStatusMap>\n >;\n\nexport type GetHttpResponse<T> = T extends (...args: any[]) => infer R\n ? R extends Promise<HttpResponse<any, any>>\n ? Awaited<R>\n : R extends Promise<HttpMultistatusResponse<any, any, any>>\n ? Awaited<R>\n : HttpResponse<any, any>\n : HttpResponse<any, any>;\n\nexport type HttpBadResponse<T = any> = HttpResponse<null, T>;\n\nexport type AnyHttpResponse = HttpResponse<any, any>;\n\nexport type AnyHttpMultistatusResponse = HttpMultistatusResponse<\n ResponsesByStatusMap,\n any,\n any\n>;\n\nexport type AnyResponse = AnyHttpResponse | AnyHttpMultistatusResponse;\n\nexport type ResponseFormat = ValueOf<{\n [K in keyof Body]: Body[K] extends Function ? K : never;\n}>;\n\nexport class HttpResponse<\n TData,\n TError = null,\n TStatus extends number = number,\n> {\n headers;\n ok;\n redirected;\n statusText;\n type;\n url;\n body;\n\n data: TData;\n error: TError;\n status: TStatus;\n\n constructor(\n public originalResponse: Response,\n public request: RequestInfo,\n ) {\n this.headers = originalResponse.headers;\n this.ok = originalResponse.ok;\n this.body = originalResponse.body;\n this.redirected = originalResponse.redirected;\n this.status = originalResponse.status as TStatus;\n this.statusText = originalResponse.statusText;\n this.type = originalResponse.type;\n this.url = originalResponse.url;\n this.data = null as any;\n this.error = null as any;\n }\n\n clone(): HttpResponse<TData, TError, TStatus> {\n return new HttpResponse(this.originalResponse.clone(), this.request);\n }\n\n isEmpty() {\n if (emptyStatusCodesSet.has(this.status)) {\n return true;\n }\n\n const contentLength = this.headers.get('content-length');\n\n if (contentLength !== null && contentLength === '0') {\n return true;\n }\n\n if (this.body === null) {\n return true;\n }\n\n return false;\n }\n\n async resolveBody(responseFormat: ResponseFormat) {\n try {\n const formatted = await this.originalResponse[responseFormat]();\n if (this.ok) {\n this.data = formatted;\n } else {\n this.error = formatted;\n }\n } catch (error) {\n this.error = error as TError;\n }\n }\n}\n\nexport const isHttpResponse = (\n response: unknown,\n status?: number,\n): response is AnyHttpResponse =>\n typeof response === 'object' &&\n response instanceof HttpResponse &&\n 'data' in response &&\n (!status || response.status === status);\n\nexport const isHttpBadResponse = (\n response: unknown,\n): response is HttpResponse<null, any> => {\n return isHttpResponse(response) && (!response.ok || !!response.error);\n};\n","/** biome-ignore-all lint/style/useShorthandFunctionType: this is special trick to add typings for callable class instance */\nimport type {\n DefaultError,\n InvalidateOptions,\n InvalidateQueryFilters,\n QueryFunctionContext,\n QueryKey,\n} from '@tanstack/query-core';\nimport type { HttpStatusCode } from 'http-status-code-types';\nimport type { IQueryClientCore } from 'mobx-tanstack-query';\nimport { callFunction } from 'yummies/common';\nimport type { AnyObject, Defined, IsPartial, Maybe } from 'yummies/types';\nimport type {\n EndpointConfiguration,\n EndpointMutationPresets,\n} from './endpoint.types.js';\nimport { EndpointInfiniteQuery } from './endpoint-infinite-query.js';\nimport type {\n EndpointInfiniteQueryFlattenOptions,\n EndpointInfiniteQueryOptions,\n} from './endpoint-infinite-query.types.js';\nimport { EndpointMutation } from './endpoint-mutation.js';\nimport type { EndpointMutationOptions } from './endpoint-mutation.types.js';\nimport { EndpointQuery } from './endpoint-query.js';\nimport type {\n EndpointQueryFlattenOptions,\n EndpointQueryMeta,\n EndpointQueryOptions,\n EndpointQueryUniqKey,\n} from './endpoint-query.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { HttpClient } from './http-client.js';\nimport { type AnyResponse, isHttpResponse } from './http-response.js';\n\nexport interface Endpoint<\n TResponse extends AnyResponse,\n TParams extends AnyObject,\n TMetaData extends AnyObject = AnyObject,\n> {\n (\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ): ReturnType<Endpoint<TResponse, TParams, TMetaData>['request']>;\n}\n\n/**\n * This class is a wrapper for your http request.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoints/)\n */\nexport class Endpoint<\n TResponse extends AnyResponse,\n TParams extends AnyObject,\n TMetaData extends AnyObject = AnyObject,\n> {\n endpointId: string;\n\n presets: {\n mutations: EndpointMutationPresets;\n } = {\n mutations: {},\n };\n\n __params!: TParams;\n __response!: TResponse;\n\n meta!: TMetaData;\n\n constructor(\n public configuration: EndpointConfiguration<NoInfer<TParams>, TMetaData>,\n public queryClient: EndpointQueryClient,\n public httpClient: HttpClient,\n ) {\n this.endpointId = globalThis.crypto.randomUUID();\n this.meta = configuration.meta ?? ({} as TMetaData);\n // Сохраняем оригинальный инстанс\n const instance = this;\n\n // Создаем функцию-обертку\n const callable = function (\n this: any,\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ) {\n return instance.request.apply(instance, args);\n } as unknown as Endpoint<TResponse, TParams, TMetaData>;\n\n // Копируем прототип\n Object.setPrototypeOf(callable, new.target.prototype);\n\n // Копируем методы из оригинального инстанса\n Object.getOwnPropertyNames(instance)\n .concat(Object.getOwnPropertyNames(new.target.prototype))\n .forEach((key) => {\n if (key === 'constructor') return;\n const desc =\n Object.getOwnPropertyDescriptor(instance, key) ||\n Object.getOwnPropertyDescriptor(new.target.prototype, key);\n if (desc) Object.defineProperty(callable, key, desc);\n });\n\n // biome-ignore lint/correctness/noConstructorReturn: this is special trick to add typings for callable class instance\n return callable;\n }\n\n getFullUrl(\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ): string {\n const params = this.configuration.params(args[0] ?? ({} as TParams));\n return this.httpClient.buildUrl(params);\n }\n\n getPath(\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ): string {\n const params = this.configuration.params(args[0] ?? ({} as TParams));\n return params.path;\n }\n\n getParamsFromContext<\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n ctx: Omit<QueryFunctionContext<TQueryKey, TPageParam>, 'client'> & {\n client: IQueryClientCore;\n },\n ): TParams {\n return (ctx.queryKey.at(-2) || {}) as TParams;\n }\n\n get tags() {\n return this.configuration.tags;\n }\n\n get path() {\n return this.configuration.path;\n }\n\n get pathDeclaration() {\n return this.path.join('/');\n }\n\n get operationId() {\n return this.configuration.operationId;\n }\n\n get group() {\n return this.configuration.group;\n }\n\n get namespace() {\n return this.configuration.namespace;\n }\n\n checkResponse<TStatus extends HttpStatusCode>(\n response: unknown,\n status: TStatus,\n ): response is Extract<TResponse, { status: TStatus }>;\n checkResponse(response: unknown): response is TResponse;\n checkResponse(response: unknown, status?: HttpStatusCode) {\n return isHttpResponse(response, status);\n }\n\n request(\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ) {\n return this.httpClient.request<TResponse>(\n this.configuration.params(args[0] ?? ({} as TParams)),\n this,\n );\n }\n\n toQueryMeta = (meta?: AnyObject) =>\n ({\n ...meta,\n tags: this.tags,\n operationId: this.operationId,\n path: this.path,\n pathDeclaration: this.pathDeclaration,\n endpointId: this.endpointId,\n endpointQuery: true,\n }) satisfies EndpointQueryMeta;\n\n toQueryKey(params?: Maybe<TParams>, uniqKey?: EndpointQueryUniqKey): any {\n return [\n ...this.configuration.path,\n this.configuration.operationId,\n params ?? {},\n callFunction(uniqKey),\n ];\n }\n\n toInfiniteQueryKey(\n params?: Maybe<TParams>,\n uniqKey?: EndpointQueryUniqKey,\n ): any {\n return [\n { infiniteQuery: true },\n ...this.configuration.path,\n this.configuration.operationId,\n params ?? {},\n callFunction(uniqKey),\n ];\n }\n\n invalidateQuery(\n ...args: IsPartial<TParams> extends true\n ? [\n params?: Maybe<TParams>,\n filters?: InvalidateQueryFilters & { uniqKey?: EndpointQueryUniqKey },\n options?: InvalidateOptions,\n ]\n : [\n params: TParams,\n filters?: InvalidateQueryFilters & { uniqKey?: EndpointQueryUniqKey },\n options?: InvalidateOptions,\n ]\n ) {\n this.queryClient.invalidateQueries(\n {\n queryKey: this.toQueryKey(args[0], args[1]?.uniqKey),\n exact: true,\n ...(args[1] as any),\n },\n args[2],\n );\n }\n\n toMutation<\n TData = TResponse['data'],\n TMutationMeta extends AnyObject | void = void,\n TContext = unknown,\n >(\n options: EndpointMutationOptions<\n this,\n TData,\n TParams,\n TMutationMeta,\n TContext\n >,\n ) {\n return new EndpointMutation<this, TData, TParams, TMutationMeta, TContext>(\n this,\n this.queryClient,\n {\n ...options,\n invalidateEndpoints:\n options.invalidateEndpoints ??\n this.presets.mutations?.invalidateQueries,\n },\n );\n }\n\n toQuery<\n TQueryFnData = TResponse['data'],\n TError = DefaultError | Defined<TResponse['error']>,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n >(\n options:\n | EndpointQueryOptions<this, TQueryFnData, TError, TData, TQueryData>\n | (() => EndpointQueryFlattenOptions<\n this,\n TQueryFnData,\n TError,\n TData,\n TQueryData\n >),\n ) {\n return new EndpointQuery<this, TQueryFnData, TError, TData, TQueryData>(\n this,\n this.queryClient,\n options,\n );\n }\n\n toInfiniteQuery<\n TData = TResponse['data'],\n TError = DefaultError,\n TPageParam = unknown,\n >(\n options:\n | EndpointInfiniteQueryOptions<this, TData, TError, TPageParam>\n | (() => EndpointInfiniteQueryFlattenOptions<\n this,\n TData,\n TError,\n TPageParam\n >),\n ) {\n return new EndpointInfiniteQuery<this, TData, TError, TPageParam>(\n this,\n this.queryClient,\n options,\n );\n }\n}\n","import { hashKey, type InvalidateOptions } from '@tanstack/query-core';\nimport { QueryClient, type QueryClientConfig } from 'mobx-tanstack-query';\nimport type { Maybe } from 'yummies/types';\nimport type { EndpointQueryMeta } from './endpoint-query.types.js';\nimport type {\n EndpointStringFilter,\n InvalidateEndpointsFilters,\n} from './endpoint-query-client.types.js';\n\n/**\n * Class that extends `QueryClient` and gives a bit more control over endpoint queries and mutations.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-query-client/)\n */\nexport class EndpointQueryClient extends QueryClient {\n /**\n * Creates `EndpointQueryClient` instance.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-query-client/#constructor)\n */\n constructor(config?: QueryClientConfig) {\n super({\n ...config,\n defaultOptions: {\n ...config?.defaultOptions,\n queries: {\n ...config?.defaultOptions?.queries,\n queryKeyHashFn:\n config?.defaultOptions?.queries?.queryKeyHashFn ?? hashKey,\n },\n },\n });\n }\n\n /**\n * Invalidates endpoint queries by endpoint metadata filters.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-query-client/#invalidateendpoints)\n */\n invalidateEndpoints(\n {\n group,\n namespace,\n operationId,\n tag,\n predicate,\n endpoint,\n exclude,\n ...queryFilters\n }: InvalidateEndpointsFilters,\n options?: InvalidateOptions,\n ) {\n const endpointIdsToExclude = new Set<string>(\n exclude?.endpoints?.map((it) => it.endpointId),\n );\n const endpointTagsToExclude = new Set<string>(exclude?.tags ?? []);\n\n let endpointIdsToFilter: Maybe<Set<string>>;\n\n if (Array.isArray(endpoint)) {\n endpointIdsToFilter = new Set(endpoint.map((it) => it.endpointId));\n } else if (endpoint) {\n endpointIdsToFilter = new Set([endpoint.endpointId]);\n }\n\n return this.invalidateQueries(\n {\n ...queryFilters,\n predicate: (query) => {\n if (!query.meta?.endpointQuery) {\n return false;\n }\n\n const meta = query.meta as unknown as EndpointQueryMeta;\n\n if (\n endpointIdsToExclude.has(meta.endpointId) ||\n (endpointTagsToExclude.size &&\n meta.tags.some((tag) => endpointTagsToExclude.has(tag)))\n ) {\n return false;\n }\n\n if (\n endpointIdsToFilter &&\n !endpointIdsToFilter.has(meta.endpointId)\n ) {\n return false;\n }\n\n if (\n namespace &&\n meta.namespace &&\n !applyStringFilter(namespace, meta.namespace)\n ) {\n return false;\n }\n\n if (group && meta.group && !applyStringFilter(group, meta.group)) {\n return false;\n }\n\n if (tag && meta.tags && !applyStringFilter(tag, meta.tags)) {\n return false;\n }\n\n if (tag && meta.tags && !applyStringFilter(tag, meta.tags)) {\n return false;\n }\n\n if (\n operationId &&\n !applyStringFilter(operationId, meta.operationId)\n ) {\n return false;\n }\n\n if (predicate && !predicate(meta, query as any)) {\n return false;\n }\n\n return true;\n },\n },\n options,\n );\n }\n}\n\nconst applyStringFilter = (\n filter: EndpointStringFilter,\n value: string | string[],\n): boolean => {\n const values = Array.isArray(value) ? value : [value];\n\n if (filter instanceof RegExp) {\n return values.some((value) => filter.test(value));\n }\n\n if (Array.isArray(filter)) {\n return filter.some((filter) => values.includes(filter));\n }\n\n return values.includes(filter);\n};\n","import { action, makeObservable, observable } from 'mobx';\nimport { type BooleanOptional, type IStringifyOptions, stringify } from 'qs';\nimport type { AnyObject, Defined, Maybe } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport {\n type AnyHttpResponse,\n type AnyResponse,\n HttpResponse,\n type ResponseFormat,\n} from './http-response.js';\n\nexport type QueryParamsType = Record<string | number, any>;\n\nexport interface FullRequestParams extends Omit<RequestInit, 'body'> {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n contentType?: string;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** meta data */\n meta?: Record<string, any>;\n}\n\nexport const ContentType = {\n Json: 'application/json',\n FormData: 'multipart/form-data',\n UrlEncoded: 'application/x-www-form-urlencoded',\n Text: 'text/plain',\n Binary: 'application/octet-stream',\n} as const;\n\nexport type RequestParams = Omit<\n FullRequestParams,\n 'body' | 'method' | 'query' | 'path' | 'serviceName'\n>;\n\nexport interface HttpClientConfig<TMeta = unknown> {\n baseUrl?: string;\n meta?: TMeta;\n fetch?: typeof globalThis.fetch;\n baseApiParams?: Omit<RequestParams, 'baseUrl' | 'cancelToken' | 'signal'>;\n contentFormatters?: Record<string, (input: any) => any>;\n queryStringifyOptions?: IStringifyOptions<BooleanOptional>;\n toQueryString?: (query?: AnyObject) => string;\n buildUrl?: (\n fullParams: FullRequestParams,\n formattedParts: { baseUrl: string; path: string; query: string },\n metadata: TMeta | null,\n ) => string;\n interceptor?: (\n requestParams: RequestParams,\n metadata: TMeta | null,\n endpoint?: Maybe<AnyEndpoint>,\n ) => Promise<RequestParams | void> | RequestParams | void;\n}\n\nexport class HttpClient<TMeta = unknown> {\n private config: HttpClientConfig<TMeta>;\n private fetch: Required<HttpClientConfig<TMeta>>['fetch'];\n\n public meta: TMeta | null;\n public baseApiParams: RequestParams;\n\n badResponse: unknown;\n\n protected toQueryString: Defined<HttpClientConfig<TMeta>['toQueryString']>;\n\n constructor(config?: HttpClientConfig<TMeta>) {\n this.config = config ?? {};\n this.badResponse = null;\n this.meta = config?.meta ?? null;\n this.fetch =\n config?.fetch ??\n ((...fetchParams: Parameters<typeof globalThis.fetch>) =>\n globalThis.fetch(...fetchParams));\n this.toQueryString =\n config?.toQueryString ??\n ((query) => stringify(query, config?.queryStringifyOptions));\n\n this.baseApiParams = {\n credentials: 'same-origin',\n headers: {},\n redirect: 'follow',\n referrerPolicy: 'no-referrer',\n };\n\n this.updateConfig(this.config);\n\n observable.ref(this, 'badResponse');\n observable.ref(this, 'meta');\n\n action(this, 'setMeta');\n action(this, 'setBadResponse');\n\n makeObservable(this);\n }\n\n get baseUrl() {\n return this.config.baseUrl ?? '';\n }\n\n public updateConfig(update: Partial<HttpClientConfig<TMeta>>) {\n Object.assign(this.config, update);\n\n if (update.baseApiParams) {\n Object.assign(this.baseApiParams, update.baseApiParams);\n }\n\n if (update.contentFormatters) {\n Object.assign(this.contentFormatters, update.contentFormatters);\n }\n\n if (update.fetch) {\n this.fetch = update.fetch;\n }\n }\n\n public setMeta = (data: TMeta | null) => {\n this.meta = data;\n };\n\n public setBadResponse = (response: unknown) => {\n this.badResponse = response;\n };\n\n private contentFormatters: Record<string, (input: any) => any> = {\n 'application/json': (input: any) =>\n input !== null && (typeof input === 'object' || typeof input === 'string')\n ? JSON.stringify(input)\n : input,\n 'text/plain': (input: any) =>\n input !== null && typeof input !== 'string'\n ? JSON.stringify(input)\n : input,\n 'multipart/form-data': (input: any) =>\n Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n\n if (property instanceof Blob) {\n formData.append(key, property);\n } else if (typeof property === 'object' && property !== null) {\n formData.append(key, JSON.stringify(property));\n } else {\n formData.append(key, `${property}`);\n }\n\n return formData;\n }, new FormData()),\n 'application/x-www-form-urlencoded': (input: any) =>\n this.toQueryString(input),\n 'application/octet-stream': (input: any) => input,\n };\n\n protected mergeRequestParams(\n params1: RequestParams,\n params2?: RequestParams,\n ): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...params2,\n headers: {\n ...this.baseApiParams.headers,\n ...params1.headers,\n ...params2?.headers,\n },\n };\n }\n\n protected async createResponse(\n responseFormat: FullRequestParams['format'] = 'json',\n raw: Response,\n url: string,\n params: RequestInit,\n ): Promise<AnyHttpResponse> {\n const response = new HttpResponse<any, any>(raw, { url, params });\n\n if (response.isEmpty()) {\n return response;\n }\n\n await response.resolveBody(responseFormat);\n\n if (!response.ok || response.error) {\n this.setBadResponse(response);\n }\n\n return response;\n }\n\n public buildUrl = (params: FullRequestParams) => {\n const baseUrl = params.baseUrl ?? this.baseUrl ?? '';\n\n const path = params.path;\n\n const queryString = params.query && this.toQueryString(params.query);\n\n const query = queryString ? `?${queryString}` : '';\n\n if (this.config.buildUrl) {\n return this.config.buildUrl(params, { baseUrl, path, query }, this.meta);\n }\n\n const url = baseUrl + path + query;\n\n return url;\n };\n\n public request<T, E>(\n fullParams: FullRequestParams,\n endpoint?: Maybe<AnyEndpoint>,\n ): Promise<HttpResponse<T, E>>;\n public request<THttpResponse extends AnyResponse>(\n fullParams: FullRequestParams,\n endpoint?: Maybe<AnyEndpoint>,\n ): Promise<THttpResponse>;\n\n public async request(\n fullParams: FullRequestParams,\n endpoint?: Maybe<AnyEndpoint>,\n ): Promise<any> {\n this.setBadResponse(null);\n\n const { body, contentType, format, ...params } = fullParams;\n\n let requestParams = this.mergeRequestParams(params);\n\n if (this.config.interceptor) {\n requestParams =\n (await this.config.interceptor(requestParams, this.meta, endpoint)) ??\n requestParams;\n }\n\n const responseFormat = format || requestParams.format;\n\n const url = this.buildUrl(fullParams);\n\n let headers: Headers;\n\n if (requestParams.headers instanceof Headers) {\n headers = requestParams.headers;\n } else if (Array.isArray(requestParams.headers)) {\n headers = new Headers(requestParams.headers);\n } else {\n headers = new Headers(requestParams.headers);\n }\n\n let bodyToSend: Maybe<BodyInit>;\n\n if (contentType) {\n if (\n contentType !== ContentType.FormData &&\n !headers.has('Content-Type')\n ) {\n headers.set('Content-Type', contentType);\n }\n\n const payloadFormatter = this.contentFormatters[contentType];\n\n if (body == null) {\n bodyToSend = null;\n } else if (payloadFormatter) {\n bodyToSend = payloadFormatter(body);\n } else {\n bodyToSend = body as any;\n }\n }\n\n const fetchUrl: string = url;\n const fetchParams: RequestInit = {\n ...requestParams,\n headers,\n body: bodyToSend,\n };\n\n let response: Response | undefined;\n\n try {\n response = await this.fetch(fetchUrl, fetchParams);\n } catch (error) {\n response = error as Response;\n }\n\n const httpResponse = await this.createResponse(\n responseFormat,\n response,\n fetchUrl,\n fetchParams,\n );\n\n if (!httpResponse.ok || httpResponse.error) {\n throw httpResponse;\n }\n\n return httpResponse;\n }\n}\n"],"names":["params","uniqKey","tag","value","filter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/runtime/endpoint-query.ts","../src/runtime/endpoint-infinite-query.ts","../src/runtime/endpoint-mutation.ts","../src/runtime/http-response.ts","../src/runtime/endpoint.ts","../src/runtime/endpoint-query-client.ts","../src/runtime/http-client.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/noUnusedVariables: generic type imports are intentional */\nimport type {\n DefaultError,\n QueryFunctionContext,\n QueryObserverResult,\n RefetchOptions,\n} from '@tanstack/query-core';\nimport {\n comparer,\n computed,\n makeObservable,\n observable,\n reaction,\n runInAction,\n} from 'mobx';\nimport { Query, type QueryUpdateOptionsAllVariants } from 'mobx-tanstack-query';\nimport { callFunction } from 'yummies/common';\nimport { getMobxAdministration, lazyObserve } from 'yummies/mobx';\nimport type { AnyObject, Maybe, MaybeFalsy, MaybeFn } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport type {\n EndpointQueryFlattenOptions,\n EndpointQueryOptions,\n EndpointQueryUniqKey,\n ExcludedQueryKeys,\n} from './endpoint-query.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { RequestParams } from './http-client.js';\n\ninterface InternalObservableData<TEndpoint extends AnyEndpoint> {\n params: MaybeFalsy<TEndpoint['__params']>;\n uniqKey?: EndpointQueryUniqKey;\n initialized?: boolean;\n dynamicOptions?: any;\n response: TEndpoint['__response'] | null;\n}\n\n/**\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/)\n */\nexport class EndpointQuery<\n TEndpoint extends AnyEndpoint,\n TQueryFnData = TEndpoint['__response']['data'],\n TError = DefaultError,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n> extends Query<TQueryFnData, TError, TData, TQueryData> {\n private _observableData: InternalObservableData<TEndpoint>;\n\n /**\n * Creates `EndpointQuery` instance.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#constructor)\n */\n constructor(\n private endpoint: AnyEndpoint,\n inputQueryClient: EndpointQueryClient,\n queryOptionsInput:\n | EndpointQueryOptions<TEndpoint, TQueryFnData, TError, TData, TQueryData>\n | (() => EndpointQueryFlattenOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TData,\n TQueryData\n >),\n ) {\n const isQueryOptionsInputFn = typeof queryOptionsInput === 'function';\n const unpackedQueryOptionsInput = isQueryOptionsInputFn\n ? queryOptionsInput()\n : queryOptionsInput;\n\n const {\n uniqKey,\n transform: transformResponse,\n params,\n onDone: onDoneInput,\n queryClient: overridedQueryClient,\n ...queryOptions\n } = unpackedQueryOptionsInput;\n\n const queryClient = overridedQueryClient ?? inputQueryClient;\n\n const _observableData: InternalObservableData<TEndpoint> = {\n params: null,\n dynamicOptions: undefined,\n response: null,\n uniqKey: unpackedQueryOptionsInput.uniqKey,\n };\n\n if (!isQueryOptionsInputFn && typeof params !== 'function') {\n if ('params' in unpackedQueryOptionsInput) {\n _observableData.params = params;\n } else {\n _observableData.params = {};\n }\n _observableData.initialized = true;\n }\n\n makeObservable(_observableData, {\n params: observable.ref,\n response: observable.ref,\n dynamicOptions: observable,\n });\n\n const lastHandledDataUpdatedAt = -1;\n const onDone =\n onDoneInput &&\n ((...args: Parameters<NonNullable<typeof onDoneInput>>) => {\n // const currentDataUpdatedAt = this.dataUpdatedAt ?? 0;\n // if (currentDataUpdatedAt === lastHandledDataUpdatedAt) {\n // return;\n // }\n // lastHandledDataUpdatedAt = currentDataUpdatedAt;\n onDoneInput(...args);\n });\n\n super({\n ...queryOptions,\n onDone,\n queryClient,\n meta: endpoint.toQueryMeta(queryOptions.meta),\n options: (): any => {\n const builtOptions = buildOptionsFromParams(\n endpoint,\n _observableData.params,\n _observableData.uniqKey,\n );\n\n let isEnabled = !!_observableData.initialized && builtOptions.enabled;\n\n if (\n typeof queryOptionsInput !== 'function' &&\n queryOptionsInput.enabled === false\n ) {\n isEnabled = false;\n }\n\n return {\n ...builtOptions,\n enabled: isEnabled,\n ..._observableData.dynamicOptions,\n };\n },\n queryFn: async (ctx): Promise<any> => {\n const params = endpoint.getParamsFromContext(ctx);\n\n runInAction(() => {\n _observableData.response = null;\n if (!comparer.structural(params, _observableData.params)) {\n _observableData.params = params;\n }\n });\n\n let requestParams = params.requestParams as Maybe<RequestParams>;\n\n if (requestParams) {\n if (!requestParams.signal) {\n requestParams.signal = ctx.signal;\n }\n } else {\n requestParams = { signal: ctx.signal };\n }\n\n const fixedInput = {\n ...params,\n requestParams,\n };\n\n const response = await endpoint.request(fixedInput);\n\n runInAction(() => {\n _observableData.response = response as TEndpoint['__response'];\n });\n\n return (await transformResponse?.(response)) ?? response.data;\n },\n });\n\n const parentAtom = getMobxAdministration(this);\n\n computed.struct(this, 'params');\n computed.struct(this, 'response');\n makeObservable(this);\n\n if (isQueryOptionsInputFn || typeof params === 'function') {\n const createParamsReaction = () =>\n reaction(\n (): Partial<InternalObservableData<TEndpoint>> => {\n let outDynamicOptions: InternalObservableData<TEndpoint>['dynamicOptions'];\n let outParams: MaybeFn<MaybeFalsy<TEndpoint['__params']>>;\n let uniqKey: Maybe<EndpointQueryUniqKey>;\n\n if (isQueryOptionsInputFn) {\n const result = queryOptionsInput();\n const {\n params,\n abortSignal,\n select,\n onDone,\n onError,\n onInit,\n enableOnDemand,\n uniqKey: _uniqKey,\n ...dynamicOptions\n } = result;\n\n uniqKey = _uniqKey;\n\n if ('params' in result) {\n outParams = result.params;\n } else {\n outParams = {};\n }\n\n outDynamicOptions =\n Object.keys(dynamicOptions).length > 0\n ? dynamicOptions\n : undefined;\n } else if ('params' in unpackedQueryOptionsInput) {\n outParams = unpackedQueryOptionsInput.params;\n uniqKey = unpackedQueryOptionsInput.uniqKey;\n } else {\n outParams = {};\n uniqKey = unpackedQueryOptionsInput.uniqKey;\n }\n\n return {\n params: callFunction(outParams),\n dynamicOptions: outDynamicOptions,\n uniqKey,\n };\n },\n ({ params, dynamicOptions, uniqKey }) => {\n runInAction(() => {\n _observableData.initialized = true;\n _observableData.params = params;\n _observableData.dynamicOptions = dynamicOptions;\n _observableData.uniqKey = uniqKey;\n });\n },\n {\n fireImmediately: true,\n },\n );\n\n if (this.features.lazy) {\n lazyObserve({\n property: parentAtom.values_.get('_result'),\n onStart: createParamsReaction,\n onEnd: (disposeFn) => disposeFn(),\n });\n } else {\n this.abortController.signal.addEventListener(\n 'abort',\n createParamsReaction(),\n );\n }\n }\n\n this._observableData = _observableData;\n }\n\n /**\n * Current endpoint params used by this query.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#params)\n */\n get params() {\n return this._observableData.params;\n }\n\n /**\n * Last raw HTTP response returned by endpoint.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#response)\n */\n get response() {\n return this._observableData.response;\n }\n\n /**\n * Updates query options and optionally params.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#update)\n */\n update(\n updateParams: Omit<\n QueryUpdateOptionsAllVariants<TQueryFnData, TError, TData, TQueryData>,\n ExcludedQueryKeys\n > & {\n params?: MaybeFalsy<TEndpoint['__params']>;\n },\n ) {\n if ('params' in updateParams) {\n const { params, ...options } = updateParams;\n runInAction(() => {\n this._observableData.params = params;\n });\n return super.update({\n ...buildOptionsFromParams(\n this.endpoint,\n params,\n this._observableData.uniqKey,\n ),\n ...options,\n });\n } else if (this._observableData) {\n return super.update({\n ...buildOptionsFromParams(\n this.endpoint,\n this._observableData.params,\n this._observableData.uniqKey,\n ),\n ...updateParams,\n });\n } else {\n return super.update(updateParams);\n }\n }\n\n /**\n * Refetches query when params are initialized.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#refetch)\n */\n refetch(\n options?: RefetchOptions,\n ): Promise<QueryObserverResult<TData, TError>> {\n if (this.params) {\n return super.refetch(options);\n }\n return Promise.resolve(this.queryObserver.getCurrentResult());\n }\n\n /**\n * Sets params and starts query execution.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-queries/#start)\n */\n async start(\n params: MaybeFalsy<TEndpoint['__params']>,\n ): Promise<QueryObserverResult<TData, TError>> {\n runInAction(() => {\n this._observableData.params = params;\n });\n return await super.start(\n buildOptionsFromParams(\n this.endpoint,\n params,\n this._observableData.uniqKey,\n ),\n );\n }\n\n protected handleDestroy(): void {\n super.handleDestroy();\n runInAction(() => {\n this._observableData.params = undefined;\n this._observableData.dynamicOptions = undefined;\n });\n }\n}\n\nexport const getParamsFromContext = (ctx: QueryFunctionContext<any, any>) => {\n return (ctx.queryKey.at(-2) || {}) as AnyEndpoint['__params'];\n};\n\nexport const buildOptionsFromParams = (\n endpoint: AnyEndpoint,\n params: MaybeFalsy<AnyObject>,\n uniqKey: Maybe<EndpointQueryUniqKey>,\n): { enabled: boolean; queryKey: any[] } => {\n const { requiredParams } = endpoint.configuration;\n let hasRequiredParams = false;\n\n if (requiredParams.length > 0) {\n hasRequiredParams =\n !!params && requiredParams.every((param) => param in params);\n } else {\n hasRequiredParams = !!params;\n }\n\n return {\n enabled: hasRequiredParams,\n queryKey: endpoint.toQueryKey(params || {}, uniqKey),\n };\n};\n","import type {\n DefaultError,\n InfiniteData,\n QueryObserverResult,\n} from '@tanstack/query-core';\nimport { makeObservable, observable, runInAction } from 'mobx';\nimport { InfiniteQuery } from 'mobx-tanstack-query';\nimport type { Maybe, MaybeFalsy } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport type {\n EndpointInfiniteQueryFlattenOptions,\n EndpointInfiniteQueryOptions,\n EndpointInfiniteQueryUpdateOptionsAllVariants,\n} from './endpoint-infinite-query.types.js';\nimport { buildOptionsFromParams } from './endpoint-query.js';\nimport type { EndpointQueryUniqKey } from './endpoint-query.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { RequestParams } from './http-client.js';\n\nexport class EndpointInfiniteQuery<\n TEndpoint extends AnyEndpoint,\n TQueryFnData = TEndpoint['__response']['data'],\n TError = DefaultError,\n TPageParam = unknown,\n TData = InfiniteData<TQueryFnData, TPageParam>,\n> extends InfiniteQuery<TQueryFnData, TError, TPageParam, TData, any[]> {\n response: TEndpoint['__response'] | null = null;\n params: TEndpoint['__params'] | null = null;\n\n private uniqKey?: EndpointQueryUniqKey;\n\n private paramsFn: EndpointInfiniteQueryFlattenOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >['params'];\n\n constructor(\n private endpoint: AnyEndpoint,\n queryClient: EndpointQueryClient,\n\n queryOptionsInput:\n | EndpointInfiniteQueryOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >\n | (() => EndpointInfiniteQueryFlattenOptions<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >),\n ) {\n const {\n uniqKey,\n transform: transformResponse,\n params: paramsFn,\n ...queryOptions\n } = typeof queryOptionsInput === 'function'\n ? queryOptionsInput()\n : queryOptionsInput;\n\n super({\n ...queryOptions,\n queryClient,\n meta: endpoint.toQueryMeta(queryOptions.meta),\n options: (query): any => {\n const extraOptions: any = {};\n let willEnableManually: boolean;\n let params: any;\n\n const pageParam = query.options.initialPageParam;\n\n if (typeof queryOptionsInput === 'function') {\n Object.assign(extraOptions, queryOptionsInput());\n params = paramsFn(pageParam);\n willEnableManually = false;\n } else {\n willEnableManually = queryOptionsInput.enabled === false;\n params = paramsFn(pageParam);\n }\n\n const builtOptions = buildOptionsFromParams(endpoint, params, uniqKey);\n // const dynamicOuterOptions = getDynamicOptions?.(query);\n\n let isEnabled = false;\n\n if (willEnableManually) {\n // if (dynamicOuterOptions?.enabled != null) {\n // isEnabled = dynamicOuterOptions.enabled;\n // }\n } else {\n // const outerDynamicEnabled =\n // dynamicOuterOptions?.enabled == null ||\n // !!dynamicOuterOptions.enabled;\n\n // isEnabled = builtOptions.enabled && outerDynamicEnabled;\n isEnabled = builtOptions.enabled;\n }\n\n return {\n ...query.options,\n ...builtOptions,\n // ...dynamicOuterOptions,\n enabled: isEnabled,\n ...extraOptions,\n } as any;\n },\n queryFn: async (ctx): Promise<any> => {\n const params = paramsFn(\n (ctx.pageParam as any) ?? queryOptions.initialPageParam,\n ) as TEndpoint['__params'];\n\n runInAction(() => {\n this.response = null;\n this.params = params;\n });\n\n let requestParams = params.request as Maybe<RequestParams>;\n\n if (requestParams) {\n if (!requestParams.signal) {\n requestParams.signal = ctx.signal;\n }\n } else {\n requestParams = { signal: ctx.signal };\n }\n\n const fixedInput = {\n ...params,\n request: requestParams,\n };\n\n const response = await endpoint.request(fixedInput);\n\n runInAction(() => {\n this.response = response as TEndpoint['__response'];\n });\n\n return (await transformResponse?.(response)) ?? response.data;\n },\n });\n\n this.paramsFn = paramsFn;\n this.uniqKey = uniqKey;\n\n observable.ref(this, 'response');\n observable.ref(this, 'params');\n makeObservable(this);\n }\n\n update({\n params,\n ...options\n }: EndpointInfiniteQueryUpdateOptionsAllVariants<\n TEndpoint,\n TQueryFnData,\n TError,\n TPageParam,\n TData\n >) {\n return super.update({\n ...buildOptionsFromParams(this.endpoint, params, this.uniqKey),\n ...options,\n });\n }\n\n async start(\n params: MaybeFalsy<TEndpoint['__params']>,\n ): Promise<QueryObserverResult<TData, TError>> {\n return await super.start(\n buildOptionsFromParams(this.endpoint, params, this.uniqKey),\n );\n }\n}\n","import { Mutation } from 'mobx-tanstack-query';\nimport type { AnyObject, Maybe } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport type {\n EndpointMutationOptions,\n EndpointMutationParams,\n} from './endpoint-mutation.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { InvalidateEndpointsFilters } from './endpoint-query-client.types.js';\nimport type { RequestParams } from './http-client.js';\n\n/**\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-mutations/)\n */\nexport class EndpointMutation<\n TEndpoint extends AnyEndpoint,\n TData = unknown,\n TParams extends AnyObject = AnyObject,\n TMutationMeta extends AnyObject | void = void,\n TOnMutateResult = unknown,\n> extends Mutation<\n TData,\n EndpointMutationParams<TParams, TMutationMeta>,\n TEndpoint['__response']['error'],\n TOnMutateResult\n> {\n /**\n * Creates `EndpointMutation` instance.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-mutations/#constructor)\n */\n constructor(\n endpoint: AnyEndpoint,\n inputQueryClient: EndpointQueryClient,\n {\n transform: transformResponse,\n invalidateEndpoints,\n queryClient: overridedQueryClient,\n ...mutationOptions\n }: EndpointMutationOptions<\n TEndpoint,\n TData,\n TParams,\n TMutationMeta,\n TOnMutateResult\n >,\n ) {\n const queryClient = overridedQueryClient ?? inputQueryClient;\n super({\n ...mutationOptions,\n queryClient,\n onSuccess: (data, variables, onMutateResult, context) => {\n mutationOptions.onSuccess?.(data, variables, onMutateResult, context);\n if (invalidateEndpoints) {\n if (typeof invalidateEndpoints === 'object') {\n queryClient.invalidateEndpoints(invalidateEndpoints);\n } else {\n let filters: Maybe<InvalidateEndpointsFilters>;\n switch (`${invalidateEndpoints}`) {\n case 'true': {\n filters = endpoint.group\n ? {\n group: endpoint.group,\n }\n : {\n tag: endpoint.tags,\n };\n\n break;\n }\n case 'by-group': {\n filters = {\n group: endpoint.group,\n };\n\n break;\n }\n case 'by-tag': {\n filters = {\n tag: endpoint.tags,\n };\n\n break;\n }\n }\n\n if (filters) {\n queryClient.invalidateEndpoints(filters);\n }\n }\n }\n },\n mutationFn: async (input, context) => {\n let requestParams = input?.requestParams as Maybe<RequestParams>;\n\n if (requestParams) {\n if (!requestParams.signal) {\n requestParams.signal = context.signal;\n }\n } else {\n requestParams = { signal: context.signal };\n }\n\n const fixedInput = {\n ...input,\n requestParams,\n };\n\n const response = await endpoint.request(fixedInput);\n return (await transformResponse?.(response)) ?? response.data;\n },\n });\n }\n}\n","import type {\n HttpStatusCode,\n HttpSuccessStatusCode,\n} from 'http-status-code-types';\nimport type { ValueOf } from 'yummies/types';\n\nexport const emptyStatusCodesSet = new Set([204, 205, 304]);\n\nexport interface RequestInfo {\n url: string;\n params: globalThis.RequestInit;\n}\n\ntype ResponsesByStatusMap = {\n [K in HttpStatusCode]?: any;\n};\n\nexport type HttpMultistatusResponse<\n TResponsesByStatusMap extends ResponsesByStatusMap,\n TDefaultOkResponse,\n TDefaultBadResponse = unknown,\n> =\n | ValueOf<{\n [K in keyof TResponsesByStatusMap]-?: HttpResponse<\n K extends HttpSuccessStatusCode\n ? TResponsesByStatusMap[K]\n : TDefaultOkResponse,\n K extends HttpSuccessStatusCode\n ? TDefaultBadResponse\n : TResponsesByStatusMap[K],\n number & K\n >;\n }>\n | HttpResponse<\n TDefaultOkResponse,\n TDefaultBadResponse,\n Exclude<HttpStatusCode, keyof TResponsesByStatusMap>\n >;\n\nexport type GetHttpResponse<T> = T extends (...args: any[]) => infer R\n ? R extends Promise<HttpResponse<any, any>>\n ? Awaited<R>\n : R extends Promise<HttpMultistatusResponse<any, any, any>>\n ? Awaited<R>\n : HttpResponse<any, any>\n : HttpResponse<any, any>;\n\nexport type HttpBadResponse<T = any> = HttpResponse<null, T>;\n\nexport type AnyHttpResponse = HttpResponse<any, any>;\n\nexport type AnyHttpMultistatusResponse = HttpMultistatusResponse<\n ResponsesByStatusMap,\n any,\n any\n>;\n\nexport type AnyResponse = AnyHttpResponse | AnyHttpMultistatusResponse;\n\nexport type ResponseFormat = ValueOf<{\n [K in keyof Body]: Body[K] extends Function ? K : never;\n}>;\n\nexport class HttpResponse<\n TData,\n TError = null,\n TStatus extends number = number,\n> {\n headers;\n ok;\n redirected;\n statusText;\n type;\n url;\n body;\n\n data: TData;\n error: TError;\n status: TStatus;\n\n constructor(\n public originalResponse: Response,\n public request: RequestInfo,\n ) {\n this.headers = originalResponse.headers;\n this.ok = originalResponse.ok ?? false;\n this.body = originalResponse.body ?? null;\n this.redirected = originalResponse.redirected ?? false;\n this.status = originalResponse.status as TStatus;\n this.statusText = originalResponse.statusText;\n this.type = originalResponse.type;\n this.url = originalResponse.url;\n this.data = null as any;\n this.error = null as any;\n }\n\n clone(): HttpResponse<TData, TError, TStatus> {\n return new HttpResponse(this.originalResponse.clone(), this.request);\n }\n\n isEmpty() {\n if (emptyStatusCodesSet.has(this.status)) {\n return true;\n }\n\n const contentLength = this.headers?.get('content-length');\n\n if (contentLength !== null && contentLength === '0') {\n return true;\n }\n\n if (this.body === null) {\n return true;\n }\n\n return false;\n }\n\n async resolveBody(responseFormat: ResponseFormat) {\n try {\n const formatted = await this.originalResponse[responseFormat]();\n if (this.ok) {\n this.data = formatted;\n } else {\n this.error = formatted;\n }\n } catch (error) {\n this.error = error as TError;\n }\n }\n}\n\nexport const isHttpResponse = (\n response: unknown,\n status?: number,\n): response is AnyHttpResponse =>\n typeof response === 'object' &&\n response instanceof HttpResponse &&\n 'data' in response &&\n (!status || response.status === status);\n\nexport const isHttpBadResponse = (\n response: unknown,\n): response is HttpResponse<null, any> => {\n return isHttpResponse(response) && (!response.ok || !!response.error);\n};\n","/** biome-ignore-all lint/style/useShorthandFunctionType: this is special trick to add typings for callable class instance */\nimport type {\n DefaultError,\n InvalidateOptions,\n InvalidateQueryFilters,\n QueryFunctionContext,\n QueryKey,\n} from '@tanstack/query-core';\nimport type { HttpStatusCode } from 'http-status-code-types';\nimport type { IQueryClientCore } from 'mobx-tanstack-query';\nimport { callFunction } from 'yummies/common';\nimport type { AnyObject, Defined, IsPartial, Maybe } from 'yummies/types';\nimport type {\n EndpointConfiguration,\n EndpointMutationPresets,\n} from './endpoint.types.js';\nimport { EndpointInfiniteQuery } from './endpoint-infinite-query.js';\nimport type {\n EndpointInfiniteQueryFlattenOptions,\n EndpointInfiniteQueryOptions,\n} from './endpoint-infinite-query.types.js';\nimport { EndpointMutation } from './endpoint-mutation.js';\nimport type { EndpointMutationOptions } from './endpoint-mutation.types.js';\nimport { EndpointQuery } from './endpoint-query.js';\nimport type {\n EndpointQueryFlattenOptions,\n EndpointQueryMeta,\n EndpointQueryOptions,\n EndpointQueryUniqKey,\n} from './endpoint-query.types.js';\nimport type { EndpointQueryClient } from './endpoint-query-client.js';\nimport type { HttpClient } from './http-client.js';\nimport { type AnyResponse, isHttpResponse } from './http-response.js';\n\nexport interface Endpoint<\n TResponse extends AnyResponse,\n TParams extends AnyObject,\n TMetaData extends AnyObject = AnyObject,\n> {\n (\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ): ReturnType<Endpoint<TResponse, TParams, TMetaData>['request']>;\n}\n\n/**\n * This class is a wrapper for your http request.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoints/)\n */\nexport class Endpoint<\n TResponse extends AnyResponse,\n TParams extends AnyObject,\n TMetaData extends AnyObject = AnyObject,\n> {\n endpointId: string;\n\n presets: {\n mutations: EndpointMutationPresets;\n } = {\n mutations: {},\n };\n\n __params!: TParams;\n __response!: TResponse;\n\n meta!: TMetaData;\n\n constructor(\n public configuration: EndpointConfiguration<NoInfer<TParams>, TMetaData>,\n public queryClient: EndpointQueryClient,\n public httpClient: HttpClient,\n ) {\n this.endpointId = globalThis.crypto.randomUUID();\n this.meta = configuration.meta ?? ({} as TMetaData);\n // Сохраняем оригинальный инстанс\n const instance = this;\n\n // Создаем функцию-обертку\n const callable = function (\n this: any,\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ) {\n return instance.request.apply(instance, args);\n } as unknown as Endpoint<TResponse, TParams, TMetaData>;\n\n // Копируем прототип\n Object.setPrototypeOf(callable, new.target.prototype);\n\n // Копируем методы из оригинального инстанса\n Object.getOwnPropertyNames(instance)\n .concat(Object.getOwnPropertyNames(new.target.prototype))\n .forEach((key) => {\n if (key === 'constructor') return;\n const desc =\n Object.getOwnPropertyDescriptor(instance, key) ||\n Object.getOwnPropertyDescriptor(new.target.prototype, key);\n if (desc) Object.defineProperty(callable, key, desc);\n });\n\n // biome-ignore lint/correctness/noConstructorReturn: this is special trick to add typings for callable class instance\n return callable;\n }\n\n getFullUrl(\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ): string {\n const params = this.configuration.params(args[0] ?? ({} as TParams));\n return this.httpClient.buildUrl(params);\n }\n\n getPath(\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ): string {\n const params = this.configuration.params(args[0] ?? ({} as TParams));\n return params.path;\n }\n\n getParamsFromContext<\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = never,\n >(\n ctx: Omit<QueryFunctionContext<TQueryKey, TPageParam>, 'client'> & {\n client: IQueryClientCore;\n },\n ): TParams {\n return (ctx.queryKey.at(-2) || {}) as TParams;\n }\n\n get tags() {\n return this.configuration.tags;\n }\n\n get path() {\n return this.configuration.path;\n }\n\n get pathDeclaration() {\n return this.path.join('/');\n }\n\n get operationId() {\n return this.configuration.operationId;\n }\n\n get group() {\n return this.configuration.group;\n }\n\n get namespace() {\n return this.configuration.namespace;\n }\n\n checkResponse<TStatus extends HttpStatusCode>(\n response: unknown,\n status: TStatus,\n ): response is Extract<TResponse, { status: TStatus }>;\n checkResponse(response: unknown): response is TResponse;\n checkResponse(response: unknown, status?: HttpStatusCode) {\n return isHttpResponse(response, status);\n }\n\n request(\n ...args: IsPartial<TParams> extends true\n ? [params?: Maybe<TParams>]\n : [params: TParams]\n ) {\n return this.httpClient.request<TResponse>(\n this.configuration.params(args[0] ?? ({} as TParams)),\n this,\n );\n }\n\n toQueryMeta = (meta?: AnyObject) =>\n ({\n ...meta,\n tags: this.tags,\n operationId: this.operationId,\n path: this.path,\n pathDeclaration: this.pathDeclaration,\n endpointId: this.endpointId,\n endpointQuery: true,\n }) satisfies EndpointQueryMeta;\n\n toQueryKey(params?: Maybe<TParams>, uniqKey?: EndpointQueryUniqKey): any {\n return [\n ...this.configuration.path,\n this.configuration.operationId,\n params ?? {},\n callFunction(uniqKey),\n ];\n }\n\n toInfiniteQueryKey(\n params?: Maybe<TParams>,\n uniqKey?: EndpointQueryUniqKey,\n ): any {\n return [\n { infiniteQuery: true },\n ...this.configuration.path,\n this.configuration.operationId,\n params ?? {},\n callFunction(uniqKey),\n ];\n }\n\n invalidateQuery(\n ...args: IsPartial<TParams> extends true\n ? [\n params?: Maybe<TParams>,\n filters?: InvalidateQueryFilters & { uniqKey?: EndpointQueryUniqKey },\n options?: InvalidateOptions,\n ]\n : [\n params: TParams,\n filters?: InvalidateQueryFilters & { uniqKey?: EndpointQueryUniqKey },\n options?: InvalidateOptions,\n ]\n ) {\n this.queryClient.invalidateQueries(\n {\n queryKey: this.toQueryKey(args[0], args[1]?.uniqKey),\n exact: true,\n ...(args[1] as any),\n },\n args[2],\n );\n }\n\n toMutation<\n TData = TResponse['data'],\n TMutationMeta extends AnyObject | void = void,\n TContext = unknown,\n >(\n options: EndpointMutationOptions<\n this,\n TData,\n TParams,\n TMutationMeta,\n TContext\n >,\n ) {\n return new EndpointMutation<this, TData, TParams, TMutationMeta, TContext>(\n this,\n this.queryClient,\n {\n ...options,\n invalidateEndpoints:\n options.invalidateEndpoints ??\n this.presets.mutations?.invalidateQueries,\n },\n );\n }\n\n toQuery<\n TQueryFnData = TResponse['data'],\n TError = DefaultError | Defined<TResponse['error']>,\n TData = TQueryFnData,\n TQueryData = TQueryFnData,\n >(\n options:\n | EndpointQueryOptions<this, TQueryFnData, TError, TData, TQueryData>\n | (() => EndpointQueryFlattenOptions<\n this,\n TQueryFnData,\n TError,\n TData,\n TQueryData\n >),\n ) {\n return new EndpointQuery<this, TQueryFnData, TError, TData, TQueryData>(\n this,\n this.queryClient,\n options,\n );\n }\n\n toInfiniteQuery<\n TData = TResponse['data'],\n TError = DefaultError,\n TPageParam = unknown,\n >(\n options:\n | EndpointInfiniteQueryOptions<this, TData, TError, TPageParam>\n | (() => EndpointInfiniteQueryFlattenOptions<\n this,\n TData,\n TError,\n TPageParam\n >),\n ) {\n return new EndpointInfiniteQuery<this, TData, TError, TPageParam>(\n this,\n this.queryClient,\n options,\n );\n }\n}\n","import { hashKey, type InvalidateOptions } from '@tanstack/query-core';\nimport { QueryClient, type QueryClientConfig } from 'mobx-tanstack-query';\nimport type { Maybe } from 'yummies/types';\nimport type { EndpointQueryMeta } from './endpoint-query.types.js';\nimport type {\n EndpointStringFilter,\n InvalidateEndpointsFilters,\n} from './endpoint-query-client.types.js';\n\n/**\n * Class that extends `QueryClient` and gives a bit more control over endpoint queries and mutations.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-query-client/)\n */\nexport class EndpointQueryClient extends QueryClient {\n /**\n * Creates `EndpointQueryClient` instance.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-query-client/#constructor)\n */\n constructor(config?: QueryClientConfig) {\n super({\n ...config,\n defaultOptions: {\n ...config?.defaultOptions,\n queries: {\n ...config?.defaultOptions?.queries,\n queryKeyHashFn:\n config?.defaultOptions?.queries?.queryKeyHashFn ?? hashKey,\n },\n },\n });\n }\n\n /**\n * Invalidates endpoint queries by endpoint metadata filters.\n *\n * [**Documentation**](https://js2me.github.io/mobx-tanstack-query-api/endpoint-query-client/#invalidateendpoints)\n */\n invalidateEndpoints(\n {\n group,\n namespace,\n operationId,\n tag,\n predicate,\n endpoint,\n exclude,\n ...queryFilters\n }: InvalidateEndpointsFilters,\n options?: InvalidateOptions,\n ) {\n const endpointIdsToExclude = new Set<string>(\n exclude?.endpoints?.map((it) => it.endpointId),\n );\n const endpointTagsToExclude = new Set<string>(exclude?.tags ?? []);\n\n let endpointIdsToFilter: Maybe<Set<string>>;\n\n if (Array.isArray(endpoint)) {\n endpointIdsToFilter = new Set(endpoint.map((it) => it.endpointId));\n } else if (endpoint) {\n endpointIdsToFilter = new Set([endpoint.endpointId]);\n }\n\n return this.invalidateQueries(\n {\n ...queryFilters,\n predicate: (query) => {\n if (!query.meta?.endpointQuery) {\n return false;\n }\n\n const meta = query.meta as unknown as EndpointQueryMeta;\n\n if (\n endpointIdsToExclude.has(meta.endpointId) ||\n (endpointTagsToExclude.size &&\n meta.tags.some((tag) => endpointTagsToExclude.has(tag)))\n ) {\n return false;\n }\n\n if (\n endpointIdsToFilter &&\n !endpointIdsToFilter.has(meta.endpointId)\n ) {\n return false;\n }\n\n if (\n namespace &&\n meta.namespace &&\n !applyStringFilter(namespace, meta.namespace)\n ) {\n return false;\n }\n\n if (group && meta.group && !applyStringFilter(group, meta.group)) {\n return false;\n }\n\n if (tag && meta.tags && !applyStringFilter(tag, meta.tags)) {\n return false;\n }\n\n if (tag && meta.tags && !applyStringFilter(tag, meta.tags)) {\n return false;\n }\n\n if (\n operationId &&\n !applyStringFilter(operationId, meta.operationId)\n ) {\n return false;\n }\n\n if (predicate && !predicate(meta, query as any)) {\n return false;\n }\n\n return true;\n },\n },\n options,\n );\n }\n}\n\nconst applyStringFilter = (\n filter: EndpointStringFilter,\n value: string | string[],\n): boolean => {\n const values = Array.isArray(value) ? value : [value];\n\n if (filter instanceof RegExp) {\n return values.some((value) => filter.test(value));\n }\n\n if (Array.isArray(filter)) {\n return filter.some((filter) => values.includes(filter));\n }\n\n return values.includes(filter);\n};\n","import { action, makeObservable, observable } from 'mobx';\nimport { type BooleanOptional, type IStringifyOptions, stringify } from 'qs';\nimport type { AnyObject, Defined, Maybe } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\nimport {\n type AnyHttpResponse,\n type AnyResponse,\n HttpResponse,\n type ResponseFormat,\n} from './http-response.js';\n\nexport type QueryParamsType = Record<string | number, any>;\n\nexport interface FullRequestParams extends Omit<RequestInit, 'body'> {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n contentType?: string;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** meta data */\n meta?: Record<string, any>;\n}\n\nexport const ContentType = {\n Json: 'application/json',\n FormData: 'multipart/form-data',\n UrlEncoded: 'application/x-www-form-urlencoded',\n Text: 'text/plain',\n Binary: 'application/octet-stream',\n} as const;\n\nexport type RequestParams = Omit<\n FullRequestParams,\n 'body' | 'method' | 'query' | 'path' | 'serviceName'\n>;\n\nexport interface HttpClientConfig<TMeta = unknown> {\n baseUrl?: string;\n meta?: TMeta;\n fetch?: typeof globalThis.fetch;\n baseApiParams?: Omit<RequestParams, 'baseUrl' | 'cancelToken' | 'signal'>;\n contentFormatters?: Record<string, (input: any) => any>;\n queryStringifyOptions?: IStringifyOptions<BooleanOptional>;\n toQueryString?: (query?: AnyObject) => string;\n buildUrl?: (\n fullParams: FullRequestParams,\n formattedParts: { baseUrl: string; path: string; query: string },\n metadata: TMeta | null,\n ) => string;\n interceptor?: (\n requestParams: RequestParams,\n metadata: TMeta | null,\n endpoint?: Maybe<AnyEndpoint>,\n ) => Promise<RequestParams | void> | RequestParams | void;\n}\n\nexport class HttpClient<TMeta = unknown> {\n private config: HttpClientConfig<TMeta>;\n private fetch: Required<HttpClientConfig<TMeta>>['fetch'];\n\n public meta: TMeta | null;\n public baseApiParams: RequestParams;\n\n badResponse: unknown;\n\n protected toQueryString: Defined<HttpClientConfig<TMeta>['toQueryString']>;\n\n constructor(config?: HttpClientConfig<TMeta>) {\n this.config = config ?? {};\n this.badResponse = null;\n this.meta = config?.meta ?? null;\n this.fetch =\n config?.fetch ??\n ((...fetchParams: Parameters<typeof globalThis.fetch>) =>\n globalThis.fetch(...fetchParams));\n this.toQueryString =\n config?.toQueryString ??\n ((query) => stringify(query, config?.queryStringifyOptions));\n\n this.baseApiParams = {\n credentials: 'same-origin',\n headers: {},\n redirect: 'follow',\n referrerPolicy: 'no-referrer',\n };\n\n this.updateConfig(this.config);\n\n observable.ref(this, 'badResponse');\n observable.ref(this, 'meta');\n\n action(this, 'setMeta');\n action(this, 'setBadResponse');\n\n makeObservable(this);\n }\n\n get baseUrl() {\n return this.config.baseUrl ?? '';\n }\n\n public updateConfig(update: Partial<HttpClientConfig<TMeta>>) {\n Object.assign(this.config, update);\n\n if (update.baseApiParams) {\n Object.assign(this.baseApiParams, update.baseApiParams);\n }\n\n if (update.contentFormatters) {\n Object.assign(this.contentFormatters, update.contentFormatters);\n }\n\n if (update.fetch) {\n this.fetch = update.fetch;\n }\n }\n\n public setMeta = (data: TMeta | null) => {\n this.meta = data;\n };\n\n public setBadResponse = (response: unknown) => {\n this.badResponse = response;\n };\n\n private contentFormatters: Record<string, (input: any) => any> = {\n 'application/json': (input: any) =>\n input !== null && (typeof input === 'object' || typeof input === 'string')\n ? JSON.stringify(input)\n : input,\n 'text/plain': (input: any) =>\n input !== null && typeof input !== 'string'\n ? JSON.stringify(input)\n : input,\n 'multipart/form-data': (input: any) =>\n Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n\n if (property instanceof Blob) {\n formData.append(key, property);\n } else if (typeof property === 'object' && property !== null) {\n formData.append(key, JSON.stringify(property));\n } else {\n formData.append(key, `${property}`);\n }\n\n return formData;\n }, new FormData()),\n 'application/x-www-form-urlencoded': (input: any) =>\n this.toQueryString(input),\n 'application/octet-stream': (input: any) => input,\n };\n\n protected mergeRequestParams(\n params1: RequestParams,\n params2?: RequestParams,\n ): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...params2,\n headers: {\n ...this.baseApiParams.headers,\n ...params1.headers,\n ...params2?.headers,\n },\n };\n }\n\n protected async createResponse(\n responseFormat: FullRequestParams['format'] = 'json',\n raw: Response,\n url: string,\n params: RequestInit,\n ): Promise<AnyHttpResponse> {\n const response = new HttpResponse<any, any>(raw, { url, params });\n\n if (response.isEmpty()) {\n return response;\n }\n\n await response.resolveBody(responseFormat);\n\n if (!response.ok || response.error) {\n this.setBadResponse(response);\n }\n\n return response;\n }\n\n public buildUrl = (params: FullRequestParams) => {\n const baseUrl = params.baseUrl ?? this.baseUrl ?? '';\n\n const path = params.path;\n\n const queryString = params.query && this.toQueryString(params.query);\n\n const query = queryString ? `?${queryString}` : '';\n\n if (this.config.buildUrl) {\n return this.config.buildUrl(params, { baseUrl, path, query }, this.meta);\n }\n\n const url = baseUrl + path + query;\n\n return url;\n };\n\n public request<T, E>(\n fullParams: FullRequestParams,\n endpoint?: Maybe<AnyEndpoint>,\n ): Promise<HttpResponse<T, E>>;\n public request<THttpResponse extends AnyResponse>(\n fullParams: FullRequestParams,\n endpoint?: Maybe<AnyEndpoint>,\n ): Promise<THttpResponse>;\n\n public async request(\n fullParams: FullRequestParams,\n endpoint?: Maybe<AnyEndpoint>,\n ): Promise<any> {\n this.setBadResponse(null);\n\n const { body, contentType, format, ...params } = fullParams;\n\n let requestParams = this.mergeRequestParams(params);\n\n if (this.config.interceptor) {\n requestParams =\n (await this.config.interceptor(requestParams, this.meta, endpoint)) ??\n requestParams;\n }\n\n const responseFormat = format || requestParams.format;\n\n const url = this.buildUrl(fullParams);\n\n let headers: Headers;\n\n if (requestParams.headers instanceof Headers) {\n headers = requestParams.headers;\n } else if (Array.isArray(requestParams.headers)) {\n headers = new Headers(requestParams.headers);\n } else {\n headers = new Headers(requestParams.headers);\n }\n\n let bodyToSend: Maybe<BodyInit>;\n\n if (contentType) {\n if (\n contentType !== ContentType.FormData &&\n !headers.has('Content-Type')\n ) {\n headers.set('Content-Type', contentType);\n }\n\n const payloadFormatter = this.contentFormatters[contentType];\n\n if (body == null) {\n bodyToSend = null;\n } else if (payloadFormatter) {\n bodyToSend = payloadFormatter(body);\n } else {\n bodyToSend = body as any;\n }\n }\n\n const fetchUrl: string = url;\n const fetchParams: RequestInit = {\n ...requestParams,\n headers,\n body: bodyToSend,\n };\n\n let response: Response;\n\n try {\n response = await this.fetch(fetchUrl, fetchParams);\n } catch (error) {\n if (error instanceof Response) {\n response = error;\n } else {\n throw error;\n }\n }\n\n const httpResponse = await this.createResponse(\n responseFormat,\n response,\n fetchUrl,\n fetchParams,\n );\n\n if (!httpResponse.ok || httpResponse.error) {\n throw httpResponse;\n }\n\n return httpResponse;\n }\n}\n"],"names":["params","uniqKey","onDone","tag","value","filter"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
2
|
+
"version": "0.35.1",
|
|
3
3
|
"name": "mobx-tanstack-query-api",
|
|
4
4
|
"description": "OpenAPI/Swagger client codegen + endpoints integration with mobx-tanstack-query",
|
|
5
5
|
"keywords": [
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"http-status-code-types": "^1.0.1",
|
|
34
34
|
"jiti": "^2.5.1",
|
|
35
35
|
"lodash-es": "^4.17.21",
|
|
36
|
-
"mobx-tanstack-query": "^6.12.
|
|
36
|
+
"mobx-tanstack-query": "^6.12.1",
|
|
37
37
|
"qs": "^6.14.1",
|
|
38
38
|
"swagger-typescript-api": "13.2.15",
|
|
39
39
|
"ts-morph": "^26.0.0",
|