mobx-tanstack-query-api 0.31.0 → 0.32.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 CHANGED
@@ -389,10 +389,18 @@ class EndpointMutation extends mobxTanstackQuery.Mutation {
389
389
  this.endpoint = endpoint;
390
390
  }
391
391
  }
392
+ const ContentType = {
393
+ Json: "application/json",
394
+ FormData: "multipart/form-data",
395
+ UrlEncoded: "application/x-www-form-urlencoded",
396
+ Text: "text/plain",
397
+ Binary: "application/octet-stream"
398
+ };
392
399
  const isHttpResponse = (response, status) => !!response && typeof response === "object" && response instanceof Response && "data" in response && (!status || response.status === status);
393
400
  const isHttpBadResponse = (response) => {
394
401
  return isHttpResponse(response) && (!response.ok || !!response.error);
395
402
  };
403
+ const emptyStatusCodesSet = /* @__PURE__ */ new Set([204, 205, 304]);
396
404
  class HttpClient {
397
405
  config;
398
406
  fetch;
@@ -469,29 +477,36 @@ class HttpClient {
469
477
  }
470
478
  };
471
479
  }
472
- async createResponse(responseFormat, raw, url, params) {
480
+ isEmptyResponseBody(response) {
481
+ if (emptyStatusCodesSet.has(response.status)) {
482
+ return true;
483
+ }
484
+ const contentLength = response.headers.get("content-length");
485
+ if (contentLength !== null && contentLength === "0") {
486
+ return true;
487
+ }
488
+ if (response.body === null) {
489
+ return true;
490
+ }
491
+ return false;
492
+ }
493
+ async createResponse(responseFormat = "json", raw, url, params) {
473
494
  const response = raw;
474
- response.request = {
475
- url,
476
- params
477
- };
495
+ response.request = { url, params };
478
496
  response.data = null;
479
497
  response.error = null;
480
- if (responseFormat) {
481
- try {
482
- const formatted = await response[responseFormat]();
483
- if (response.ok) {
484
- response.data = formatted;
485
- } else {
486
- response.error = formatted;
487
- }
488
- } catch (error) {
489
- if (response.ok) {
490
- response.error = error;
491
- } else {
492
- response.error = null;
493
- }
498
+ if (this.isEmptyResponseBody(response)) {
499
+ return response;
500
+ }
501
+ try {
502
+ const formatted = await response[responseFormat]();
503
+ if (response.ok) {
504
+ response.data = formatted;
505
+ } else {
506
+ response.error = formatted;
494
507
  }
508
+ } catch (error) {
509
+ response.error = error;
495
510
  }
496
511
  if (!response.ok || response.error) {
497
512
  this.setBadResponse(response);
@@ -528,7 +543,7 @@ class HttpClient {
528
543
  }
529
544
  let bodyToSend;
530
545
  if (contentType) {
531
- if (!headers.has("Content-Type")) {
546
+ if (contentType !== ContentType.FormData && !headers.has("Content-Type")) {
532
547
  headers.set("Content-Type", contentType);
533
548
  }
534
549
  const payloadFormatter = this.contentFormatters[contentType];
@@ -771,12 +786,14 @@ const applyStringFilter = (filter, value) => {
771
786
  }
772
787
  return values.includes(filter);
773
788
  };
789
+ exports.ContentType = ContentType;
774
790
  exports.Endpoint = Endpoint;
775
791
  exports.EndpointMutation = EndpointMutation;
776
792
  exports.EndpointQuery = EndpointQuery;
777
793
  exports.EndpointQueryClient = EndpointQueryClient;
778
794
  exports.HttpClient = HttpClient;
779
795
  exports.buildOptionsFromParams = buildOptionsFromParams;
796
+ exports.emptyStatusCodesSet = emptyStatusCodesSet;
780
797
  exports.getParamsFromContext = getParamsFromContext;
781
798
  exports.isHttpBadResponse = isHttpBadResponse;
782
799
  exports.isHttpResponse = isHttpResponse;
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-client.ts","../src/runtime/endpoint.ts","../src/runtime/endpoint-query-client.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/noUnusedVariables: <explanation> */\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 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 get params() {\n return this._observableData.params;\n }\n\n get response() {\n return this._observableData.response;\n }\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 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 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 constructor(\n private 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 { action, makeObservable, observable } from 'mobx';\nimport { type BooleanOptional, type IStringifyOptions, stringify } from 'qs';\nimport type { AnyObject, Defined, Maybe, ValueOf } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\n\nexport type QueryParamsType = Record<string | number, any>;\nexport type ResponseFormat = keyof Omit<Body, 'body' | 'bodyUsed'>;\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 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 interface HttpResponse<TData, TError = null, TStatus = number>\n extends Omit<Response, 'status'> {\n data: TData;\n error: TError;\n status: TStatus;\n request: {\n url: string;\n params: globalThis.RequestInit;\n };\n}\n\ntype ResponsesByStatusMap = {\n [K in HttpStatusCode]?: any;\n};\n\nexport type HttpMultistatusResponse<\n TResponsesByStatusMap extends ResponsesByStatusMap,\n TDefaultOkResponse,\n TDefaultBadResponse = unknown,\n> = Omit<Response, 'status'> &\n (\n | ValueOf<{\n [K in keyof TResponsesByStatusMap]: {\n status: K;\n data: K extends HttpSuccessStatusCode\n ? TResponsesByStatusMap[K]\n : TDefaultOkResponse;\n error: K extends HttpSuccessStatusCode\n ? TDefaultBadResponse\n : TResponsesByStatusMap[K];\n request: {\n url: string;\n params: globalThis.RequestInit;\n };\n };\n }>\n | {\n status: Exclude<HttpStatusCode, keyof TResponsesByStatusMap>;\n data: TDefaultOkResponse;\n error: TDefaultBadResponse;\n request: {\n url: string;\n params: globalThis.RequestInit;\n };\n }\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 const isHttpResponse = (\n response: unknown,\n status?: number,\n): response is AnyHttpResponse =>\n !!response &&\n typeof response === 'object' &&\n response instanceof Response &&\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\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'],\n raw: Response,\n url: string,\n params: RequestInit,\n ): Promise<AnyHttpResponse> {\n const response = raw as AnyHttpResponse;\n\n response.request = {\n url,\n params,\n };\n response.data = null;\n response.error = null;\n\n if (responseFormat) {\n try {\n const formatted = await response[responseFormat]();\n if (response.ok) {\n response.data = formatted;\n } else {\n response.error = formatted;\n }\n } catch (error) {\n if (response.ok) {\n response.error = error;\n } else {\n response.error = null;\n }\n }\n }\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 (!headers.has('Content-Type')) {\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","/** 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 {\n type AnyResponse,\n type HttpClient,\n isHttpResponse,\n} from './http-client.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 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 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"],"names":["Query","makeObservable","observable","params","runInAction","comparer","getMobxAdministration","computed","reaction","uniqKey","callFunction","lazyObserve","InfiniteQuery","Mutation","stringify","action","QueryClient","hashKey","tag","value","filter"],"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-client.ts","../src/runtime/endpoint.ts","../src/runtime/endpoint-query-client.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/noUnusedVariables: <explanation> */\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 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 get params() {\n return this._observableData.params;\n }\n\n get response() {\n return this._observableData.response;\n }\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 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 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 constructor(\n private 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 { action, makeObservable, observable } from 'mobx';\nimport { type BooleanOptional, type IStringifyOptions, stringify } from 'qs';\nimport type { AnyObject, Defined, Maybe, ValueOf } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\n\nexport type QueryParamsType = Record<string | number, any>;\nexport type ResponseFormat = ValueOf<{\n [K in keyof Body]: Body[K] extends Function ? K : never;\n}>;\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 interface HttpResponse<TData, TError = null, TStatus = number>\n extends Omit<Response, 'status'> {\n data: TData;\n error: TError;\n status: TStatus;\n request: {\n url: string;\n params: globalThis.RequestInit;\n };\n}\n\ntype ResponsesByStatusMap = {\n [K in HttpStatusCode]?: any;\n};\n\nexport type HttpMultistatusResponse<\n TResponsesByStatusMap extends ResponsesByStatusMap,\n TDefaultOkResponse,\n TDefaultBadResponse = unknown,\n> = Omit<Response, 'status'> &\n (\n | ValueOf<{\n [K in keyof TResponsesByStatusMap]: {\n status: K;\n data: K extends HttpSuccessStatusCode\n ? TResponsesByStatusMap[K]\n : TDefaultOkResponse;\n error: K extends HttpSuccessStatusCode\n ? TDefaultBadResponse\n : TResponsesByStatusMap[K];\n request: {\n url: string;\n params: globalThis.RequestInit;\n };\n };\n }>\n | {\n status: Exclude<HttpStatusCode, keyof TResponsesByStatusMap>;\n data: TDefaultOkResponse;\n error: TDefaultBadResponse;\n request: {\n url: string;\n params: globalThis.RequestInit;\n };\n }\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 const isHttpResponse = (\n response: unknown,\n status?: number,\n): response is AnyHttpResponse =>\n !!response &&\n typeof response === 'object' &&\n response instanceof Response &&\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\nexport const emptyStatusCodesSet = new Set([204, 205, 304]);\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 isEmptyResponseBody(response: Response): boolean {\n if (emptyStatusCodesSet.has(response.status)) {\n return true;\n }\n\n const contentLength = response.headers.get('content-length');\n\n if (contentLength !== null && contentLength === '0') {\n return true;\n }\n\n if (response.body === null) {\n return true;\n }\n\n return false;\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 = raw as AnyHttpResponse;\n\n response.request = { url, params };\n response.data = null;\n response.error = null;\n\n if (this.isEmptyResponseBody(response)) {\n return response;\n }\n\n try {\n const formatted = await response[responseFormat]();\n if (response.ok) {\n response.data = formatted;\n } else {\n response.error = formatted;\n }\n } catch (error) {\n response.error = error;\n }\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","/** 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 {\n type AnyResponse,\n type HttpClient,\n isHttpResponse,\n} from './http-client.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 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 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"],"names":["Query","makeObservable","observable","params","runInAction","comparer","getMobxAdministration","computed","reaction","uniqKey","callFunction","lazyObserve","InfiniteQuery","Mutation","stringify","action","QueryClient","hashKey","tag","value","filter"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -91,7 +91,9 @@ interface InvalidateEndpointsFilters extends InvalidateEndpointQueryFilters {
91
91
  }
92
92
 
93
93
  type QueryParamsType = Record<string | number, any>;
94
- type ResponseFormat = keyof Omit<Body, 'body' | 'bodyUsed'>;
94
+ type ResponseFormat = ValueOf<{
95
+ [K in keyof Body]: Body[K] extends Function ? K : never;
96
+ }>;
95
97
  interface FullRequestParams extends Omit<RequestInit, 'body'> {
96
98
  /** set parameter to `true` for call `securityWorker` for this request */
97
99
  secure?: boolean;
@@ -110,6 +112,13 @@ interface FullRequestParams extends Omit<RequestInit, 'body'> {
110
112
  /** meta data */
111
113
  meta?: Record<string, any>;
112
114
  }
115
+ declare const ContentType: {
116
+ readonly Json: "application/json";
117
+ readonly FormData: "multipart/form-data";
118
+ readonly UrlEncoded: "application/x-www-form-urlencoded";
119
+ readonly Text: "text/plain";
120
+ readonly Binary: "application/octet-stream";
121
+ };
113
122
  type RequestParams = Omit<FullRequestParams, 'body' | 'method' | 'query' | 'path' | 'serviceName'>;
114
123
  interface HttpClientConfig<TMeta = unknown> {
115
124
  baseUrl?: string;
@@ -164,6 +173,7 @@ type AnyHttpMultistatusResponse = HttpMultistatusResponse<ResponsesByStatusMap,
164
173
  type AnyResponse = AnyHttpResponse | AnyHttpMultistatusResponse;
165
174
  declare const isHttpResponse: (response: unknown, status?: number) => response is AnyHttpResponse;
166
175
  declare const isHttpBadResponse: (response: unknown) => response is HttpResponse<null, any>;
176
+ declare const emptyStatusCodesSet: Set<number>;
167
177
  declare class HttpClient<TMeta = unknown> {
168
178
  private config;
169
179
  private fetch;
@@ -178,6 +188,7 @@ declare class HttpClient<TMeta = unknown> {
178
188
  setBadResponse: (response: unknown) => void;
179
189
  private contentFormatters;
180
190
  protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams;
191
+ protected isEmptyResponseBody(response: Response): boolean;
181
192
  protected createResponse(responseFormat: FullRequestParams['format'], raw: Response, url: string, params: RequestInit): Promise<AnyHttpResponse>;
182
193
  buildUrl: (params: FullRequestParams) => string;
183
194
  request<T, E>(fullParams: FullRequestParams, endpoint?: Maybe<AnyEndpoint>): Promise<HttpResponse<T, E>>;
@@ -340,5 +351,5 @@ declare class Endpoint<TResponse extends AnyResponse, TParams extends AnyObject,
340
351
  toInfiniteQuery<TData = TResponse['data'], TError = DefaultError, TPageParam = unknown>(options: EndpointInfiniteQueryOptions<this, TData, TError, TPageParam> | (() => EndpointInfiniteQueryFlattenOptions<this, TData, TError, TPageParam>)): EndpointInfiniteQuery<this, TData, TError, TPageParam, _tanstack_query_core.InfiniteData<TData, TPageParam>>;
341
352
  }
342
353
 
343
- export { Endpoint, EndpointMutation, EndpointQuery, EndpointQueryClient, HttpClient, buildOptionsFromParams, getParamsFromContext, isHttpBadResponse, isHttpResponse };
354
+ export { ContentType, Endpoint, EndpointMutation, EndpointQuery, EndpointQueryClient, HttpClient, buildOptionsFromParams, emptyStatusCodesSet, getParamsFromContext, isHttpBadResponse, isHttpResponse };
344
355
  export type { AnyEndpoint, AnyHttpMultistatusResponse, AnyHttpResponse, AnyResponse, EndpointConfiguration, EndpointMutationInvalidateQueriesOptions, EndpointMutationOptions, EndpointMutationParams, EndpointMutationPresets, EndpointQueryFlattenOptions, EndpointQueryMeta, EndpointQueryOptions, EndpointQueryUniqKey, EndpointStringFilter, ExcludedQueryKeys, FullRequestParams, GetHttpResponse, HttpBadResponse, HttpClientConfig, HttpMultistatusResponse, HttpResponse, InferEndpointData, InferEndpointInput, InferEndpointMetaData, InferEndpointResponse, InvalidateEndpointsFilters, QueryParamsType, RequestParams, ResponseFormat, ToEndpoint, ToEndpointMutation, ToEndpointQuery };
package/index.js CHANGED
@@ -388,10 +388,18 @@ class EndpointMutation extends Mutation {
388
388
  this.endpoint = endpoint;
389
389
  }
390
390
  }
391
+ const ContentType = {
392
+ Json: "application/json",
393
+ FormData: "multipart/form-data",
394
+ UrlEncoded: "application/x-www-form-urlencoded",
395
+ Text: "text/plain",
396
+ Binary: "application/octet-stream"
397
+ };
391
398
  const isHttpResponse = (response, status) => !!response && typeof response === "object" && response instanceof Response && "data" in response && (!status || response.status === status);
392
399
  const isHttpBadResponse = (response) => {
393
400
  return isHttpResponse(response) && (!response.ok || !!response.error);
394
401
  };
402
+ const emptyStatusCodesSet = /* @__PURE__ */ new Set([204, 205, 304]);
395
403
  class HttpClient {
396
404
  config;
397
405
  fetch;
@@ -468,29 +476,36 @@ class HttpClient {
468
476
  }
469
477
  };
470
478
  }
471
- async createResponse(responseFormat, raw, url, params) {
479
+ isEmptyResponseBody(response) {
480
+ if (emptyStatusCodesSet.has(response.status)) {
481
+ return true;
482
+ }
483
+ const contentLength = response.headers.get("content-length");
484
+ if (contentLength !== null && contentLength === "0") {
485
+ return true;
486
+ }
487
+ if (response.body === null) {
488
+ return true;
489
+ }
490
+ return false;
491
+ }
492
+ async createResponse(responseFormat = "json", raw, url, params) {
472
493
  const response = raw;
473
- response.request = {
474
- url,
475
- params
476
- };
494
+ response.request = { url, params };
477
495
  response.data = null;
478
496
  response.error = null;
479
- if (responseFormat) {
480
- try {
481
- const formatted = await response[responseFormat]();
482
- if (response.ok) {
483
- response.data = formatted;
484
- } else {
485
- response.error = formatted;
486
- }
487
- } catch (error) {
488
- if (response.ok) {
489
- response.error = error;
490
- } else {
491
- response.error = null;
492
- }
497
+ if (this.isEmptyResponseBody(response)) {
498
+ return response;
499
+ }
500
+ try {
501
+ const formatted = await response[responseFormat]();
502
+ if (response.ok) {
503
+ response.data = formatted;
504
+ } else {
505
+ response.error = formatted;
493
506
  }
507
+ } catch (error) {
508
+ response.error = error;
494
509
  }
495
510
  if (!response.ok || response.error) {
496
511
  this.setBadResponse(response);
@@ -527,7 +542,7 @@ class HttpClient {
527
542
  }
528
543
  let bodyToSend;
529
544
  if (contentType) {
530
- if (!headers.has("Content-Type")) {
545
+ if (contentType !== ContentType.FormData && !headers.has("Content-Type")) {
531
546
  headers.set("Content-Type", contentType);
532
547
  }
533
548
  const payloadFormatter = this.contentFormatters[contentType];
@@ -771,12 +786,14 @@ const applyStringFilter = (filter, value) => {
771
786
  return values.includes(filter);
772
787
  };
773
788
  export {
789
+ ContentType,
774
790
  Endpoint,
775
791
  EndpointMutation,
776
792
  EndpointQuery,
777
793
  EndpointQueryClient,
778
794
  HttpClient,
779
795
  buildOptionsFromParams,
796
+ emptyStatusCodesSet,
780
797
  getParamsFromContext,
781
798
  isHttpBadResponse,
782
799
  isHttpResponse
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-client.ts","../src/runtime/endpoint.ts","../src/runtime/endpoint-query-client.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/noUnusedVariables: <explanation> */\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 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 get params() {\n return this._observableData.params;\n }\n\n get response() {\n return this._observableData.response;\n }\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 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 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 constructor(\n private 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 { action, makeObservable, observable } from 'mobx';\nimport { type BooleanOptional, type IStringifyOptions, stringify } from 'qs';\nimport type { AnyObject, Defined, Maybe, ValueOf } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\n\nexport type QueryParamsType = Record<string | number, any>;\nexport type ResponseFormat = keyof Omit<Body, 'body' | 'bodyUsed'>;\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 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 interface HttpResponse<TData, TError = null, TStatus = number>\n extends Omit<Response, 'status'> {\n data: TData;\n error: TError;\n status: TStatus;\n request: {\n url: string;\n params: globalThis.RequestInit;\n };\n}\n\ntype ResponsesByStatusMap = {\n [K in HttpStatusCode]?: any;\n};\n\nexport type HttpMultistatusResponse<\n TResponsesByStatusMap extends ResponsesByStatusMap,\n TDefaultOkResponse,\n TDefaultBadResponse = unknown,\n> = Omit<Response, 'status'> &\n (\n | ValueOf<{\n [K in keyof TResponsesByStatusMap]: {\n status: K;\n data: K extends HttpSuccessStatusCode\n ? TResponsesByStatusMap[K]\n : TDefaultOkResponse;\n error: K extends HttpSuccessStatusCode\n ? TDefaultBadResponse\n : TResponsesByStatusMap[K];\n request: {\n url: string;\n params: globalThis.RequestInit;\n };\n };\n }>\n | {\n status: Exclude<HttpStatusCode, keyof TResponsesByStatusMap>;\n data: TDefaultOkResponse;\n error: TDefaultBadResponse;\n request: {\n url: string;\n params: globalThis.RequestInit;\n };\n }\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 const isHttpResponse = (\n response: unknown,\n status?: number,\n): response is AnyHttpResponse =>\n !!response &&\n typeof response === 'object' &&\n response instanceof Response &&\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\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'],\n raw: Response,\n url: string,\n params: RequestInit,\n ): Promise<AnyHttpResponse> {\n const response = raw as AnyHttpResponse;\n\n response.request = {\n url,\n params,\n };\n response.data = null;\n response.error = null;\n\n if (responseFormat) {\n try {\n const formatted = await response[responseFormat]();\n if (response.ok) {\n response.data = formatted;\n } else {\n response.error = formatted;\n }\n } catch (error) {\n if (response.ok) {\n response.error = error;\n } else {\n response.error = null;\n }\n }\n }\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 (!headers.has('Content-Type')) {\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","/** 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 {\n type AnyResponse,\n type HttpClient,\n isHttpResponse,\n} from './http-client.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 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 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"],"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-client.ts","../src/runtime/endpoint.ts","../src/runtime/endpoint-query-client.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/noUnusedVariables: <explanation> */\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 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 get params() {\n return this._observableData.params;\n }\n\n get response() {\n return this._observableData.response;\n }\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 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 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 constructor(\n private 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 { action, makeObservable, observable } from 'mobx';\nimport { type BooleanOptional, type IStringifyOptions, stringify } from 'qs';\nimport type { AnyObject, Defined, Maybe, ValueOf } from 'yummies/types';\nimport type { AnyEndpoint } from './endpoint.types.js';\n\nexport type QueryParamsType = Record<string | number, any>;\nexport type ResponseFormat = ValueOf<{\n [K in keyof Body]: Body[K] extends Function ? K : never;\n}>;\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 interface HttpResponse<TData, TError = null, TStatus = number>\n extends Omit<Response, 'status'> {\n data: TData;\n error: TError;\n status: TStatus;\n request: {\n url: string;\n params: globalThis.RequestInit;\n };\n}\n\ntype ResponsesByStatusMap = {\n [K in HttpStatusCode]?: any;\n};\n\nexport type HttpMultistatusResponse<\n TResponsesByStatusMap extends ResponsesByStatusMap,\n TDefaultOkResponse,\n TDefaultBadResponse = unknown,\n> = Omit<Response, 'status'> &\n (\n | ValueOf<{\n [K in keyof TResponsesByStatusMap]: {\n status: K;\n data: K extends HttpSuccessStatusCode\n ? TResponsesByStatusMap[K]\n : TDefaultOkResponse;\n error: K extends HttpSuccessStatusCode\n ? TDefaultBadResponse\n : TResponsesByStatusMap[K];\n request: {\n url: string;\n params: globalThis.RequestInit;\n };\n };\n }>\n | {\n status: Exclude<HttpStatusCode, keyof TResponsesByStatusMap>;\n data: TDefaultOkResponse;\n error: TDefaultBadResponse;\n request: {\n url: string;\n params: globalThis.RequestInit;\n };\n }\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 const isHttpResponse = (\n response: unknown,\n status?: number,\n): response is AnyHttpResponse =>\n !!response &&\n typeof response === 'object' &&\n response instanceof Response &&\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\nexport const emptyStatusCodesSet = new Set([204, 205, 304]);\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 isEmptyResponseBody(response: Response): boolean {\n if (emptyStatusCodesSet.has(response.status)) {\n return true;\n }\n\n const contentLength = response.headers.get('content-length');\n\n if (contentLength !== null && contentLength === '0') {\n return true;\n }\n\n if (response.body === null) {\n return true;\n }\n\n return false;\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 = raw as AnyHttpResponse;\n\n response.request = { url, params };\n response.data = null;\n response.error = null;\n\n if (this.isEmptyResponseBody(response)) {\n return response;\n }\n\n try {\n const formatted = await response[responseFormat]();\n if (response.ok) {\n response.data = formatted;\n } else {\n response.error = formatted;\n }\n } catch (error) {\n response.error = error;\n }\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","/** 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 {\n type AnyResponse,\n type HttpClient,\n isHttpResponse,\n} from './http-client.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 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 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"],"names":["params","uniqKey","tag","value","filter"],"mappings":"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"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.31.0",
2
+ "version": "0.32.1",
3
3
  "name": "mobx-tanstack-query-api",
4
4
  "description": "OpenAPI/Swagger client codegen + endpoints integration with mobx-tanstack-query",
5
5
  "keywords": [