mobx-tanstack-query-api 0.28.0 → 0.29.0

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
@@ -704,8 +704,13 @@ class EndpointQueryClient extends mobxTanstackQuery.QueryClient {
704
704
  tag,
705
705
  predicate,
706
706
  endpoint,
707
+ exclude,
707
708
  ...queryFilters
708
709
  }, options) {
710
+ const endpointIdsToExclude = new Set(
711
+ exclude?.endpoints?.map((it) => it.endpointId)
712
+ );
713
+ const endpointTagsToExclude = new Set(exclude?.tags ?? []);
709
714
  let endpointIdsToFilter;
710
715
  if (Array.isArray(endpoint)) {
711
716
  endpointIdsToFilter = new Set(endpoint.map((it) => it.endpointId));
@@ -720,6 +725,9 @@ class EndpointQueryClient extends mobxTanstackQuery.QueryClient {
720
725
  return false;
721
726
  }
722
727
  const meta = query.meta;
728
+ if (endpointIdsToExclude.has(meta.endpointId) || endpointTagsToExclude.size && meta.tags.some((tag2) => endpointTagsToExclude.has(tag2))) {
729
+ return false;
730
+ }
723
731
  if (endpointIdsToFilter && !endpointIdsToFilter.has(meta.endpointId)) {
724
732
  return false;
725
733
  }
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 {\n body,\n contentType = 'application/json',\n format = 'json',\n ...params\n } = 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 payloadFormatter = this.contentFormatters[contentType];\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 if (!headers.has('Content-Type')) {\n headers.set('Content-Type', contentType);\n }\n\n const fetchUrl: string = url;\n const fetchParams: RequestInit = {\n ...requestParams,\n headers,\n body: body == null ? null : payloadFormatter(body),\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 ...queryFilters\n }: InvalidateEndpointsFilters,\n options?: InvalidateOptions,\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 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","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 = 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 {\n body,\n contentType = 'application/json',\n format = 'json',\n ...params\n } = 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 payloadFormatter = this.contentFormatters[contentType];\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 if (!headers.has('Content-Type')) {\n headers.set('Content-Type', contentType);\n }\n\n const fetchUrl: string = url;\n const fetchParams: RequestInit = {\n ...requestParams,\n headers,\n body: body == null ? null : payloadFormatter(body),\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
@@ -13,7 +13,7 @@ import { IStringifyOptions, BooleanOptional } from 'qs';
13
13
  */
14
14
  declare class EndpointQueryClient extends QueryClient {
15
15
  constructor(config?: QueryClientConfig);
16
- invalidateEndpoints({ group, namespace, operationId, tag, predicate, endpoint, ...queryFilters }: InvalidateEndpointsFilters, options?: InvalidateOptions): Promise<void>;
16
+ invalidateEndpoints({ group, namespace, operationId, tag, predicate, endpoint, exclude, ...queryFilters }: InvalidateEndpointsFilters, options?: InvalidateOptions): Promise<void>;
17
17
  }
18
18
 
19
19
  /** biome-ignore-all lint/correctness/noUnusedVariables: <explanation> */
@@ -84,6 +84,10 @@ interface InvalidateEndpointsFilters extends InvalidateEndpointQueryFilters {
84
84
  group?: EndpointStringFilter;
85
85
  operationId?: EndpointStringFilter;
86
86
  tag?: EndpointStringFilter;
87
+ exclude?: {
88
+ endpoints?: AnyEndpoint[];
89
+ tags?: string[];
90
+ };
87
91
  }
88
92
 
89
93
  type QueryParamsType = Record<string | number, any>;
package/index.js CHANGED
@@ -703,8 +703,13 @@ class EndpointQueryClient extends QueryClient {
703
703
  tag,
704
704
  predicate,
705
705
  endpoint,
706
+ exclude,
706
707
  ...queryFilters
707
708
  }, options) {
709
+ const endpointIdsToExclude = new Set(
710
+ exclude?.endpoints?.map((it) => it.endpointId)
711
+ );
712
+ const endpointTagsToExclude = new Set(exclude?.tags ?? []);
708
713
  let endpointIdsToFilter;
709
714
  if (Array.isArray(endpoint)) {
710
715
  endpointIdsToFilter = new Set(endpoint.map((it) => it.endpointId));
@@ -719,6 +724,9 @@ class EndpointQueryClient extends QueryClient {
719
724
  return false;
720
725
  }
721
726
  const meta = query.meta;
727
+ if (endpointIdsToExclude.has(meta.endpointId) || endpointTagsToExclude.size && meta.tags.some((tag2) => endpointTagsToExclude.has(tag2))) {
728
+ return false;
729
+ }
722
730
  if (endpointIdsToFilter && !endpointIdsToFilter.has(meta.endpointId)) {
723
731
  return false;
724
732
  }
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 {\n body,\n contentType = 'application/json',\n format = 'json',\n ...params\n } = 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 payloadFormatter = this.contentFormatters[contentType];\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 if (!headers.has('Content-Type')) {\n headers.set('Content-Type', contentType);\n }\n\n const fetchUrl: string = url;\n const fetchParams: RequestInit = {\n ...requestParams,\n headers,\n body: body == null ? null : payloadFormatter(body),\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 ...queryFilters\n }: InvalidateEndpointsFilters,\n options?: InvalidateOptions,\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 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","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 = 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 {\n body,\n contentType = 'application/json',\n format = 'json',\n ...params\n } = 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 payloadFormatter = this.contentFormatters[contentType];\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 if (!headers.has('Content-Type')) {\n headers.set('Content-Type', contentType);\n }\n\n const fetchUrl: string = url;\n const fetchParams: RequestInit = {\n ...requestParams,\n headers,\n body: body == null ? null : payloadFormatter(body),\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.28.0",
2
+ "version": "0.29.0",
3
3
  "name": "mobx-tanstack-query-api",
4
4
  "description": "OpenAPI/Swagger client codegen + endpoints integration with mobx-tanstack-query",
5
5
  "keywords": [