@openapi-qraft/react 2.2.3-provenance-test.0 → 2.3.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/CHANGELOG.md CHANGED
@@ -1,11 +1,20 @@
1
1
  # @openapi-qraft/react
2
2
 
3
- ## 2.2.3-provenance-test.0
3
+ ## 2.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 50a784e: Handle primitive methods (toString, toJSON, etc.) in API client to avoid implicit errors.
8
+
9
+ ### Patch Changes
10
+
11
+ - @openapi-qraft/tanstack-query-react-types@2.3.0
12
+
13
+ ## 2.2.3
4
14
 
5
15
  ### Patch Changes
6
16
 
7
- - Updated dependencies [9c0eccb]
8
- - @openapi-qraft/tanstack-query-react-types@2.2.3-provenance-test.0
17
+ - @openapi-qraft/tanstack-query-react-types@2.2.3
9
18
 
10
19
  ## 2.2.2
11
20
 
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- // todo::rename to `qraftRecursiveProxy` with deprecated `createRecursiveProxy`
4
3
  /**
5
4
  * Creates a recursive proxy that calls the `getCallback` and `applyCallback` functions
6
5
  * @param getCallback The callback to call when a proxy property is accessed
@@ -9,7 +8,7 @@
9
8
  */ function createRecursiveProxy(getCallback, applyCallback, path) {
10
9
  return new Proxy(noop, {
11
10
  get (_obj, key) {
12
- if (typeof key !== 'string' || key === 'then') {
11
+ if (key === 'then') {
13
12
  // special case for if the proxy is accidentally treated
14
13
  // like a PromiseLike (like in `Promise.resolve(proxy)`)
15
14
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"createRecursiveProxy.cjs","sources":["../../../src/lib/createRecursiveProxy.ts"],"sourcesContent":["type ProxyApplyCallback = (path: string[], args: unknown[]) => unknown;\n/**\n * @internal\n * If returns `undefined | null`, the proxy will continue to create a new proxy for the next key.\n */\ntype ProxyGetCallback = (path: string[], key: string) => unknown | undefined;\n\n// todo::rename to `qraftRecursiveProxy` with deprecated `createRecursiveProxy`\n/**\n * Creates a recursive proxy that calls the `getCallback` and `applyCallback` functions\n * @param getCallback The callback to call when a proxy property is accessed\n * @param applyCallback The callback to call when a proxy is called as a function\n * @param path The current path of the proxy\n */\nexport function createRecursiveProxy(\n getCallback: ProxyGetCallback,\n applyCallback: ProxyApplyCallback,\n path: string[]\n): unknown {\n return new Proxy(noop, {\n get(_obj, key) {\n if (typeof key !== 'string' || key === 'then') {\n // special case for if the proxy is accidentally treated\n // like a PromiseLike (like in `Promise.resolve(proxy)`)\n return undefined;\n }\n\n return (\n getCallback(path, key) ??\n createRecursiveProxy(getCallback, applyCallback, [...path, key])\n );\n },\n apply(_1, _2, args) {\n const functionName = path[path.length - 1];\n\n const isCall = functionName === 'call';\n const isApply = isCall ? false : functionName === 'apply';\n\n return applyCallback(\n isApply || isCall ? path.slice(0, -1) : path,\n isApply\n ? args.length >= 2\n ? args[1]\n : []\n : isCall\n ? args.slice(1)\n : args\n );\n },\n });\n}\n\nfunction noop() {\n // noop\n}\n"],"names":["createRecursiveProxy","getCallback","applyCallback","path","Proxy","noop","get","_obj","key","undefined","apply","_1","_2","args","functionName","length","isCall","isApply","slice"],"mappings":";;AAOA;AACA;;;;;AAKC,IACM,SAASA,oBAAAA,CACdC,WAA6B,EAC7BC,aAAiC,EACjCC,IAAc,EAAA;IAEd,OAAO,IAAIC,MAAMC,IAAM,EAAA;QACrBC,GAAIC,CAAAA,CAAAA,IAAI,EAAEC,GAAG,EAAA;AACX,YAAA,IAAI,OAAOA,GAAAA,KAAQ,QAAYA,IAAAA,GAAAA,KAAQ,MAAQ,EAAA;;;gBAG7C,OAAOC,SAAAA,CAAAA;AACT,aAAA;AAEA,YAAA,OACER,WAAYE,CAAAA,IAAAA,EAAMK,GAClBR,CAAAA,IAAAA,oBAAAA,CAAqBC,aAAaC,aAAe,EAAA;AAAIC,gBAAAA,GAAAA,IAAAA;AAAMK,gBAAAA,GAAAA;AAAI,aAAA,CAAA,CAAA;AAEnE,SAAA;AACAE,QAAAA,KAAAA,CAAAA,CAAMC,EAAE,EAAEC,EAAE,EAAEC,IAAI,EAAA;AAChB,YAAA,MAAMC,eAAeX,IAAI,CAACA,IAAKY,CAAAA,MAAM,GAAG,CAAE,CAAA,CAAA;AAE1C,YAAA,MAAMC,SAASF,YAAiB,KAAA,MAAA,CAAA;YAChC,MAAMG,OAAAA,GAAUD,MAAS,GAAA,KAAA,GAAQF,YAAiB,KAAA,OAAA,CAAA;YAElD,OAAOZ,aAAAA,CACLe,OAAWD,IAAAA,MAAAA,GAASb,IAAKe,CAAAA,KAAK,CAAC,CAAG,EAAA,CAAC,CAAKf,CAAAA,GAAAA,IAAAA,EACxCc,OACIJ,GAAAA,IAAAA,CAAKE,MAAM,IAAI,CAAA,GACbF,IAAI,CAAC,CAAE,CAAA,GACP,EAAE,GACJG,MACEH,GAAAA,IAAAA,CAAKK,KAAK,CAAC,CACXL,CAAAA,GAAAA,IAAAA,CAAAA,CAAAA;AAEV,SAAA;AACF,KAAA,CAAA,CAAA;AACF,CAAA;AAEA,SAASR,IAAAA,GAAAA;AACP;AACF;;;;"}
1
+ {"version":3,"file":"createRecursiveProxy.cjs","sources":["../../../src/lib/createRecursiveProxy.ts"],"sourcesContent":["type ProxyApplyCallback = (\n path: (string | symbol)[],\n args: unknown[]\n) => unknown;\n/**\n * @internal\n * If returns `undefined | null`, the proxy will continue to create a new proxy for the next key.\n */\ntype ProxyGetCallback = (\n path: (string | symbol)[],\n key: string | symbol\n) => unknown | undefined;\n\n/**\n * Creates a recursive proxy that calls the `getCallback` and `applyCallback` functions\n * @param getCallback The callback to call when a proxy property is accessed\n * @param applyCallback The callback to call when a proxy is called as a function\n * @param path The current path of the proxy\n */\nexport function createRecursiveProxy(\n getCallback: ProxyGetCallback,\n applyCallback: ProxyApplyCallback,\n path: (string | symbol)[]\n): unknown {\n return new Proxy(noop, {\n get(_obj, key) {\n if (key === 'then') {\n // special case for if the proxy is accidentally treated\n // like a PromiseLike (like in `Promise.resolve(proxy)`)\n return undefined;\n }\n\n return (\n getCallback(path, key) ??\n createRecursiveProxy(getCallback, applyCallback, [...path, key])\n );\n },\n apply(_1, _2, args) {\n const functionName = path[path.length - 1];\n\n const isCall = functionName === 'call';\n const isApply = isCall ? false : functionName === 'apply';\n\n return applyCallback(\n isApply || isCall ? path.slice(0, -1) : path,\n isApply\n ? args.length >= 2\n ? args[1]\n : []\n : isCall\n ? args.slice(1)\n : args\n );\n },\n });\n}\n\nfunction noop() {\n // noop\n}\n"],"names":["createRecursiveProxy","getCallback","applyCallback","path","Proxy","noop","get","_obj","key","undefined","apply","_1","_2","args","functionName","length","isCall","isApply","slice"],"mappings":";;AAaA;;;;;AAKC,IACM,SAASA,oBAAAA,CACdC,WAA6B,EAC7BC,aAAiC,EACjCC,IAAyB,EAAA;IAEzB,OAAO,IAAIC,MAAMC,IAAM,EAAA;QACrBC,GAAIC,CAAAA,CAAAA,IAAI,EAAEC,GAAG,EAAA;AACX,YAAA,IAAIA,QAAQ,MAAQ,EAAA;;;gBAGlB,OAAOC,SAAAA,CAAAA;AACT,aAAA;AAEA,YAAA,OACER,WAAYE,CAAAA,IAAAA,EAAMK,GAClBR,CAAAA,IAAAA,oBAAAA,CAAqBC,aAAaC,aAAe,EAAA;AAAIC,gBAAAA,GAAAA,IAAAA;AAAMK,gBAAAA,GAAAA;AAAI,aAAA,CAAA,CAAA;AAEnE,SAAA;AACAE,QAAAA,KAAAA,CAAAA,CAAMC,EAAE,EAAEC,EAAE,EAAEC,IAAI,EAAA;AAChB,YAAA,MAAMC,eAAeX,IAAI,CAACA,IAAKY,CAAAA,MAAM,GAAG,CAAE,CAAA,CAAA;AAE1C,YAAA,MAAMC,SAASF,YAAiB,KAAA,MAAA,CAAA;YAChC,MAAMG,OAAAA,GAAUD,MAAS,GAAA,KAAA,GAAQF,YAAiB,KAAA,OAAA,CAAA;YAElD,OAAOZ,aAAAA,CACLe,OAAWD,IAAAA,MAAAA,GAASb,IAAKe,CAAAA,KAAK,CAAC,CAAG,EAAA,CAAC,CAAKf,CAAAA,GAAAA,IAAAA,EACxCc,OACIJ,GAAAA,IAAAA,CAAKE,MAAM,IAAI,CAAA,GACbF,IAAI,CAAC,CAAE,CAAA,GACP,EAAE,GACJG,MACEH,GAAAA,IAAAA,CAAKK,KAAK,CAAC,CACXL,CAAAA,GAAAA,IAAAA,CAAAA,CAAAA;AAEV,SAAA;AACF,KAAA,CAAA,CAAA;AACF,CAAA;AAEA,SAASR,IAAAA,GAAAA;AACP;AACF;;;;"}
@@ -3,7 +3,32 @@
3
3
  var createRecursiveProxy = require('./lib/createRecursiveProxy.cjs');
4
4
 
5
5
  function qraftAPIClient(services, callbacks, options) {
6
+ const stringTag = 'QraftAPIClient';
7
+ const toString = (path)=>{
8
+ return `[${stringTag}${path.length ? ' ' + path.join('.') : ''}]`;
9
+ };
10
+ const primitiveMethods = {
11
+ [Symbol.toPrimitive] (path, hint) {
12
+ if (hint === 'number') return NaN;
13
+ if (hint === 'string') return toString(path);
14
+ return getByPath(services, path);
15
+ },
16
+ valueOf (path) {
17
+ return getByPath(services, path);
18
+ },
19
+ toJSON (path) {
20
+ return JSON.stringify(getByPath(services, path));
21
+ },
22
+ toString (path) {
23
+ return toString(path);
24
+ }
25
+ };
6
26
  return createRecursiveProxy.createRecursiveProxy(function getCallback(getPath, key) {
27
+ if (Object.prototype.hasOwnProperty.call(primitiveMethods, key)) {
28
+ return primitiveMethods[key].bind(undefined, getPath);
29
+ } else if (key === Symbol.toStringTag) {
30
+ return stringTag;
31
+ }
7
32
  if (getPath.length !== 2 || key !== 'schema') return; // todo::maybe return callback?
8
33
  const serviceOperation = getByPath(services, getPath);
9
34
  if (!isServiceOperation(serviceOperation)) throw new Error(`Service operation not found: ${getPath.join('.')}`);
@@ -1 +1 @@
1
- {"version":3,"file":"qraftAPIClient.cjs","sources":["../../src/qraftAPIClient.ts"],"sourcesContent":["import type {\n ServiceOperationMutation,\n ServiceOperationMutationFn,\n ServiceOperationQuery,\n ServiceOperationQueryFn,\n} from '@openapi-qraft/tanstack-query-react-types';\nimport type { QueryClient } from '@tanstack/query-core';\nimport type * as callbacks from './callbacks/index.js';\nimport type * as operationInvokeModule from './callbacks/operationInvokeFn.js';\nimport type {\n OperationSchema,\n RequestFnInfo,\n RequestFnResponse,\n} from './lib/requestFn.js';\nimport { createRecursiveProxy } from './lib/createRecursiveProxy.js';\n\nexport interface CreateAPIBasicClientOptions {\n requestFn<TData, TError>(\n schema: OperationSchema,\n requestInfo: RequestFnInfo\n ): Promise<RequestFnResponse<TData, TError>>;\n baseUrl: string;\n}\n\nexport interface CreateAPIBasicQueryClientOptions {\n queryClient: QueryClient;\n}\n\nexport interface CreateAPIQueryClientOptions\n extends CreateAPIBasicClientOptions,\n CreateAPIBasicQueryClientOptions {}\n\n/**\n * @deprecated use `CreateAPIClientOptions` instead\n */\nexport type QraftClientOptions =\n | CreateAPIBasicClientOptions\n | CreateAPIQueryClientOptions;\n\nexport type CreateAPIClientOptions =\n | CreateAPIBasicClientOptions\n | CreateAPIBasicQueryClientOptions\n | CreateAPIQueryClientOptions;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIBasicClientOptions\n): APIBasicClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Required<Callbacks>,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIQueryClientOptions\n): Services;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIBasicQueryClientOptions\n): APIBasicQueryClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIQueryClientOptions\n): APIQueryClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks\n): APIUtilityClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options?: CreateAPIClientOptions\n): APIQueryClientServices<Services, TCallbacks> | Services {\n return createRecursiveProxy(\n function getCallback(getPath, key) {\n if (getPath.length !== 2 || key !== 'schema') return; // todo::maybe return callback?\n\n const serviceOperation = getByPath(services, getPath);\n if (!isServiceOperation(serviceOperation))\n throw new Error(`Service operation not found: ${getPath.join('.')}`);\n return serviceOperation.schema;\n },\n function applyCallback(applyPath, args) {\n const { path, callbackName } = extractCallbackDetails(applyPath);\n\n assertValidCallbackName(callbackName, callbacks);\n\n const serviceOperation = getByPath(services, path);\n\n if (!isServiceOperation(serviceOperation))\n throw new Error(`Service operation not found: ${path.join('.')}`);\n\n if (\n callbackName !== 'operationInvokeFn' &&\n callbackName !== 'getQueryKey' &&\n callbackName !== 'getMutationKey' &&\n callbackName !== 'getInfiniteQueryKey'\n )\n if (!options || !('queryClient' in options && options.queryClient))\n throw new Error(\n `'qraft.<service>.<operation>.${String(callbackName)}()' requires 'queryClient' in 'createAPIClient(...)' options.`\n );\n\n // @ts-expect-error - Too complex union type\n return callbacks[callbackName](options, serviceOperation.schema, args);\n },\n []\n ) as never;\n}\n\nfunction assertValidCallbackName<\n TCallbacks extends Record<string, (...rest: any[]) => unknown>,\n>(\n callbackName: string | number | symbol,\n callbacks: TCallbacks\n): asserts callbackName is keyof TCallbacks {\n if (!(callbackName in callbacks)) {\n if ((callbackName as OperationInvokeFnName) === 'operationInvokeFn')\n throw new Error(\n `Callback 'operationInvokeFn' is required for executing 'qraft.<service>.<operation>()', but it is not provided in the 'callbacks' object.`\n );\n throw new Error(\n `Callback for 'qraft.<service>.<operation>.${String(callbackName)}()' is not provided in the 'callbacks' object.`\n );\n }\n}\n\n/**\n * Extracts Callback details from the applyPath\n * @param applyPath\n */\nfunction extractCallbackDetails(applyPath: string[]) {\n // <service>.<operation>()\n if (applyPath.length === 2) {\n return {\n path: applyPath,\n callbackName: 'operationInvokeFn' satisfies OperationInvokeFnName,\n };\n } else {\n // <service>.<operation>.<method>()\n return {\n path: applyPath.slice(0, -1),\n // The last arg is for instance `.useMutation` or `.useQuery()`\n callbackName: applyPath[applyPath.length - 1],\n };\n }\n}\n\nfunction isServiceOperation(\n input: unknown\n): input is { schema: OperationSchema } {\n return input !== null && typeof input === 'object' && 'schema' in input;\n}\n\nfunction getByPath(obj: Record<string, unknown>, path: string[]) {\n return path.reduce<unknown>((acc, key) => {\n if (acc && typeof acc === 'object' && key in acc)\n return acc[key as keyof typeof acc];\n }, obj);\n}\n\ntype Callbacks = Partial<typeof callbacks>;\n\ntype ServicesDeclaration<Services> = {\n [service in keyof Services]: {\n [method in keyof Services[service]]: {\n schema: OperationSchema;\n types: {\n parameters?: any;\n data?: any;\n error?: any;\n body?: any;\n };\n };\n };\n};\n\ntype ServiceSchemasDeclaration<Services extends ServicesDeclaration<Services>> =\n {\n [service in keyof Services]: {\n [method in keyof Services[service]]: {\n schema: Services[service][method]['schema'];\n };\n };\n };\n\ntype QueryOperationCallbacks = Extract<\n keyof Callbacks,\n | 'cancelQueries'\n | 'fetchInfiniteQuery'\n | 'fetchQuery'\n | 'getInfiniteQueryData'\n | 'getInfiniteQueryKey'\n | 'getInfiniteQueryState'\n | 'getQueriesData'\n | 'getQueryData'\n | 'getQueryKey'\n | 'getQueryState'\n | 'invalidateQueries'\n | 'isFetching'\n | 'prefetchInfiniteQuery'\n | 'prefetchQuery'\n | 'refetchQueries'\n | 'ensureQueryData'\n | 'ensureInfiniteQueryData'\n | 'removeQueries'\n | 'resetQueries'\n | 'setInfiniteQueryData'\n | 'setQueriesData'\n | 'setQueryData'\n | 'useInfiniteQuery'\n | 'useIsFetching'\n | 'useQueries'\n | 'useQuery'\n | 'useSuspenseInfiniteQuery'\n | 'useSuspenseQueries'\n | 'useSuspenseQuery'\n>;\n\ntype MutationOperationCallbacks = Extract<\n keyof Callbacks,\n | 'getMutationKey'\n | 'isMutating'\n | 'useIsMutating'\n | 'useMutation'\n | 'useMutationState'\n>;\n\nexport type APIQueryClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n TCallbacks,\n QueryOperationCallbacks,\n MutationOperationCallbacks\n>;\n\nexport type APIBasicQueryClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n Omit<TCallbacks, 'operationInvokeFn'>,\n Extract<\n QueryOperationCallbacks,\n | 'resetQueries'\n | 'removeQueries'\n | 'cancelQueries'\n | 'invalidateQueries'\n | 'refetchQueries'\n | 'getQueryKey'\n | 'getInfiniteQueryState'\n | 'getInfiniteQueryData'\n | 'getInfiniteQueryKey'\n | 'setInfiniteQueryData'\n | 'getQueriesData'\n | 'setQueriesData'\n | 'getQueryState'\n | 'getQueryData'\n | 'setQueryData'\n | 'useIsFetching'\n | 'isFetching'\n >,\n Extract<\n MutationOperationCallbacks,\n 'getMutationKey' | 'useMutationState' | 'useIsMutating' | 'isMutating'\n >\n>;\n\nexport type APIUtilityClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n Omit<TCallbacks, 'operationInvokeFn'>,\n Extract<QueryOperationCallbacks, 'getQueryKey' | 'getInfiniteQueryKey'>,\n Extract<MutationOperationCallbacks, 'getMutationKey'>\n>;\n\nexport type APIBasicClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n TCallbacks,\n Extract<QueryOperationCallbacks, 'getQueryKey' | 'getInfiniteQueryKey'>,\n Extract<MutationOperationCallbacks, 'getMutationKey'>\n>;\n\ntype ServicesFilteredByCallbacks<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n TQueryOperationCallbacks extends QueryOperationCallbacks,\n TMutationOperationCallbacks extends MutationOperationCallbacks,\n> = {\n [serviceName in keyof TServices]: {\n [method in keyof TServices[serviceName]]: TServices[serviceName][method]['schema']['method'] extends\n | 'get'\n | 'head'\n | 'options'\n ? Pick<\n ServiceOperationQuery<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >,\n | Extract<keyof TCallbacks, TQueryOperationCallbacks>\n | 'types'\n | 'schema'\n > &\n (OperationInvokeFnName extends keyof TCallbacks\n ? ServiceOperationQueryFn<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >\n : {})\n : Pick<\n ServiceOperationMutation<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['body'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >,\n | Extract<keyof TCallbacks, TMutationOperationCallbacks>\n | 'types'\n | 'schema'\n > &\n (OperationInvokeFnName extends keyof TCallbacks\n ? ServiceOperationMutationFn<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['body'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >\n : {});\n };\n};\n\ntype OperationInvokeFnName = Extract<\n keyof typeof operationInvokeModule,\n 'operationInvokeFn'\n>;\n"],"names":["qraftAPIClient","services","callbacks","options","createRecursiveProxy","getCallback","getPath","key","length","serviceOperation","getByPath","isServiceOperation","Error","join","schema","applyCallback","applyPath","args","path","callbackName","extractCallbackDetails","assertValidCallbackName","queryClient","String","slice","input","obj","reduce","acc"],"mappings":"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"}
1
+ {"version":3,"file":"qraftAPIClient.cjs","sources":["../../src/qraftAPIClient.ts"],"sourcesContent":["import type {\n ServiceOperationMutation,\n ServiceOperationMutationFn,\n ServiceOperationQuery,\n ServiceOperationQueryFn,\n} from '@openapi-qraft/tanstack-query-react-types';\nimport type { QueryClient } from '@tanstack/query-core';\nimport type * as callbacks from './callbacks/index.js';\nimport type * as operationInvokeModule from './callbacks/operationInvokeFn.js';\nimport type {\n OperationSchema,\n RequestFnInfo,\n RequestFnResponse,\n} from './lib/requestFn.js';\nimport { createRecursiveProxy } from './lib/createRecursiveProxy.js';\n\nexport interface CreateAPIBasicClientOptions {\n requestFn<TData, TError>(\n schema: OperationSchema,\n requestInfo: RequestFnInfo\n ): Promise<RequestFnResponse<TData, TError>>;\n baseUrl: string;\n}\n\nexport interface CreateAPIBasicQueryClientOptions {\n queryClient: QueryClient;\n}\n\nexport interface CreateAPIQueryClientOptions\n extends CreateAPIBasicClientOptions,\n CreateAPIBasicQueryClientOptions {}\n\n/**\n * @deprecated use `CreateAPIClientOptions` instead\n */\nexport type QraftClientOptions =\n | CreateAPIBasicClientOptions\n | CreateAPIQueryClientOptions;\n\nexport type CreateAPIClientOptions =\n | CreateAPIBasicClientOptions\n | CreateAPIBasicQueryClientOptions\n | CreateAPIQueryClientOptions;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIBasicClientOptions\n): APIBasicClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Required<Callbacks>,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIQueryClientOptions\n): Services;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIBasicQueryClientOptions\n): APIBasicQueryClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIQueryClientOptions\n): APIQueryClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks\n): APIUtilityClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options?: CreateAPIClientOptions\n): APIQueryClientServices<Services, TCallbacks> | Services {\n const stringTag = 'QraftAPIClient';\n\n const toString = (path: (symbol | string)[]): string => {\n return `[${stringTag}${path.length ? ' ' + path.join('.') : ''}]`;\n };\n\n const primitiveMethods = {\n [Symbol.toPrimitive](\n this: undefined,\n path: (string | symbol)[],\n hint: 'string' | 'number' | 'default'\n ): unknown {\n if (hint === 'number') return NaN;\n if (hint === 'string') return toString(path);\n return getByPath(services, path);\n },\n valueOf(this: undefined, path: (string | symbol)[]): unknown {\n return getByPath(services, path);\n },\n toJSON(this: undefined, path: (string | symbol)[]): string {\n return JSON.stringify(getByPath(services, path));\n },\n toString(this: undefined, path: (string | symbol)[]): string {\n return toString(path);\n },\n };\n\n return createRecursiveProxy(\n function getCallback(getPath, key) {\n if (Object.prototype.hasOwnProperty.call(primitiveMethods, key)) {\n return primitiveMethods[key as keyof typeof primitiveMethods].bind(\n undefined,\n getPath\n );\n } else if (key === Symbol.toStringTag) {\n return stringTag;\n }\n\n if (getPath.length !== 2 || key !== 'schema') return; // todo::maybe return callback?\n\n const serviceOperation = getByPath(services, getPath);\n if (!isServiceOperation(serviceOperation))\n throw new Error(`Service operation not found: ${getPath.join('.')}`);\n return serviceOperation.schema;\n },\n function applyCallback(applyPath, args) {\n const { path, callbackName } = extractCallbackDetails(applyPath);\n\n assertValidCallbackName(callbackName, callbacks);\n\n const serviceOperation = getByPath(services, path);\n\n if (!isServiceOperation(serviceOperation))\n throw new Error(`Service operation not found: ${path.join('.')}`);\n\n if (\n callbackName !== 'operationInvokeFn' &&\n callbackName !== 'getQueryKey' &&\n callbackName !== 'getMutationKey' &&\n callbackName !== 'getInfiniteQueryKey'\n )\n if (!options || !('queryClient' in options && options.queryClient))\n throw new Error(\n `'qraft.<service>.<operation>.${String(callbackName)}()' requires 'queryClient' in 'createAPIClient(...)' options.`\n );\n\n // @ts-expect-error - Too complex union type\n return callbacks[callbackName](options, serviceOperation.schema, args);\n },\n []\n ) as never;\n}\n\nfunction assertValidCallbackName<\n TCallbacks extends Record<string, (...rest: any[]) => unknown>,\n>(\n callbackName: string | number | symbol,\n callbacks: TCallbacks\n): asserts callbackName is keyof TCallbacks {\n if (!(callbackName in callbacks)) {\n if ((callbackName as OperationInvokeFnName) === 'operationInvokeFn')\n throw new Error(\n `Callback 'operationInvokeFn' is required for executing 'qraft.<service>.<operation>()', but it is not provided in the 'callbacks' object.`\n );\n throw new Error(\n `Callback for 'qraft.<service>.<operation>.${String(callbackName)}()' is not provided in the 'callbacks' object.`\n );\n }\n}\n\n/**\n * Extracts Callback details from the applyPath\n * @param applyPath\n */\nfunction extractCallbackDetails(applyPath: (string | symbol)[]) {\n // <service>.<operation>()\n if (applyPath.length === 2) {\n return {\n path: applyPath,\n callbackName: 'operationInvokeFn' satisfies OperationInvokeFnName,\n };\n } else {\n // <service>.<operation>.<method>()\n return {\n path: applyPath.slice(0, -1),\n // The last arg is for instance `.useMutation` or `.useQuery()`\n callbackName: applyPath[applyPath.length - 1],\n };\n }\n}\n\nfunction isServiceOperation(\n input: unknown\n): input is { schema: OperationSchema } {\n return input !== null && typeof input === 'object' && 'schema' in input;\n}\n\nfunction getByPath(obj: Record<string, unknown>, path: (string | symbol)[]) {\n return path.reduce<unknown>((acc, key) => {\n if (acc && typeof acc === 'object' && key in acc)\n return acc[key as keyof typeof acc];\n }, obj);\n}\n\ntype Callbacks = Partial<typeof callbacks>;\n\ntype ServicesDeclaration<Services> = {\n [service in keyof Services]: {\n [method in keyof Services[service]]: {\n schema: OperationSchema;\n types: {\n parameters?: any;\n data?: any;\n error?: any;\n body?: any;\n };\n };\n };\n};\n\ntype ServiceSchemasDeclaration<Services extends ServicesDeclaration<Services>> =\n {\n [service in keyof Services]: {\n [method in keyof Services[service]]: {\n schema: Services[service][method]['schema'];\n };\n };\n };\n\ntype QueryOperationCallbacks = Extract<\n keyof Callbacks,\n | 'cancelQueries'\n | 'fetchInfiniteQuery'\n | 'fetchQuery'\n | 'getInfiniteQueryData'\n | 'getInfiniteQueryKey'\n | 'getInfiniteQueryState'\n | 'getQueriesData'\n | 'getQueryData'\n | 'getQueryKey'\n | 'getQueryState'\n | 'invalidateQueries'\n | 'isFetching'\n | 'prefetchInfiniteQuery'\n | 'prefetchQuery'\n | 'refetchQueries'\n | 'ensureQueryData'\n | 'ensureInfiniteQueryData'\n | 'removeQueries'\n | 'resetQueries'\n | 'setInfiniteQueryData'\n | 'setQueriesData'\n | 'setQueryData'\n | 'useInfiniteQuery'\n | 'useIsFetching'\n | 'useQueries'\n | 'useQuery'\n | 'useSuspenseInfiniteQuery'\n | 'useSuspenseQueries'\n | 'useSuspenseQuery'\n>;\n\ntype MutationOperationCallbacks = Extract<\n keyof Callbacks,\n | 'getMutationKey'\n | 'isMutating'\n | 'useIsMutating'\n | 'useMutation'\n | 'useMutationState'\n>;\n\nexport type APIQueryClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n TCallbacks,\n QueryOperationCallbacks,\n MutationOperationCallbacks\n>;\n\nexport type APIBasicQueryClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n Omit<TCallbacks, 'operationInvokeFn'>,\n Extract<\n QueryOperationCallbacks,\n | 'resetQueries'\n | 'removeQueries'\n | 'cancelQueries'\n | 'invalidateQueries'\n | 'refetchQueries'\n | 'getQueryKey'\n | 'getInfiniteQueryState'\n | 'getInfiniteQueryData'\n | 'getInfiniteQueryKey'\n | 'setInfiniteQueryData'\n | 'getQueriesData'\n | 'setQueriesData'\n | 'getQueryState'\n | 'getQueryData'\n | 'setQueryData'\n | 'useIsFetching'\n | 'isFetching'\n >,\n Extract<\n MutationOperationCallbacks,\n 'getMutationKey' | 'useMutationState' | 'useIsMutating' | 'isMutating'\n >\n>;\n\nexport type APIUtilityClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n Omit<TCallbacks, 'operationInvokeFn'>,\n Extract<QueryOperationCallbacks, 'getQueryKey' | 'getInfiniteQueryKey'>,\n Extract<MutationOperationCallbacks, 'getMutationKey'>\n>;\n\nexport type APIBasicClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n TCallbacks,\n Extract<QueryOperationCallbacks, 'getQueryKey' | 'getInfiniteQueryKey'>,\n Extract<MutationOperationCallbacks, 'getMutationKey'>\n>;\n\ntype ServicesFilteredByCallbacks<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n TQueryOperationCallbacks extends QueryOperationCallbacks,\n TMutationOperationCallbacks extends MutationOperationCallbacks,\n> = {\n [serviceName in keyof TServices]: {\n [method in keyof TServices[serviceName]]: TServices[serviceName][method]['schema']['method'] extends\n | 'get'\n | 'head'\n | 'options'\n ? Pick<\n ServiceOperationQuery<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >,\n | Extract<keyof TCallbacks, TQueryOperationCallbacks>\n | 'types'\n | 'schema'\n > &\n (OperationInvokeFnName extends keyof TCallbacks\n ? ServiceOperationQueryFn<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >\n : {})\n : Pick<\n ServiceOperationMutation<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['body'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >,\n | Extract<keyof TCallbacks, TMutationOperationCallbacks>\n | 'types'\n | 'schema'\n > &\n (OperationInvokeFnName extends keyof TCallbacks\n ? ServiceOperationMutationFn<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['body'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >\n : {});\n };\n};\n\ntype OperationInvokeFnName = Extract<\n keyof typeof operationInvokeModule,\n 'operationInvokeFn'\n>;\n"],"names":["qraftAPIClient","services","callbacks","options","stringTag","toString","path","length","join","primitiveMethods","Symbol","toPrimitive","hint","NaN","getByPath","valueOf","toJSON","JSON","stringify","createRecursiveProxy","getCallback","getPath","key","Object","prototype","hasOwnProperty","call","bind","undefined","toStringTag","serviceOperation","isServiceOperation","Error","schema","applyCallback","applyPath","args","callbackName","extractCallbackDetails","assertValidCallbackName","queryClient","String","slice","input","obj","reduce","acc"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- // todo::rename to `qraftRecursiveProxy` with deprecated `createRecursiveProxy`
2
1
  /**
3
2
  * Creates a recursive proxy that calls the `getCallback` and `applyCallback` functions
4
3
  * @param getCallback The callback to call when a proxy property is accessed
@@ -7,7 +6,7 @@
7
6
  */ function createRecursiveProxy(getCallback, applyCallback, path) {
8
7
  return new Proxy(noop, {
9
8
  get (_obj, key) {
10
- if (typeof key !== 'string' || key === 'then') {
9
+ if (key === 'then') {
11
10
  // special case for if the proxy is accidentally treated
12
11
  // like a PromiseLike (like in `Promise.resolve(proxy)`)
13
12
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"createRecursiveProxy.js","sources":["../../../src/lib/createRecursiveProxy.ts"],"sourcesContent":["type ProxyApplyCallback = (path: string[], args: unknown[]) => unknown;\n/**\n * @internal\n * If returns `undefined | null`, the proxy will continue to create a new proxy for the next key.\n */\ntype ProxyGetCallback = (path: string[], key: string) => unknown | undefined;\n\n// todo::rename to `qraftRecursiveProxy` with deprecated `createRecursiveProxy`\n/**\n * Creates a recursive proxy that calls the `getCallback` and `applyCallback` functions\n * @param getCallback The callback to call when a proxy property is accessed\n * @param applyCallback The callback to call when a proxy is called as a function\n * @param path The current path of the proxy\n */\nexport function createRecursiveProxy(\n getCallback: ProxyGetCallback,\n applyCallback: ProxyApplyCallback,\n path: string[]\n): unknown {\n return new Proxy(noop, {\n get(_obj, key) {\n if (typeof key !== 'string' || key === 'then') {\n // special case for if the proxy is accidentally treated\n // like a PromiseLike (like in `Promise.resolve(proxy)`)\n return undefined;\n }\n\n return (\n getCallback(path, key) ??\n createRecursiveProxy(getCallback, applyCallback, [...path, key])\n );\n },\n apply(_1, _2, args) {\n const functionName = path[path.length - 1];\n\n const isCall = functionName === 'call';\n const isApply = isCall ? false : functionName === 'apply';\n\n return applyCallback(\n isApply || isCall ? path.slice(0, -1) : path,\n isApply\n ? args.length >= 2\n ? args[1]\n : []\n : isCall\n ? args.slice(1)\n : args\n );\n },\n });\n}\n\nfunction noop() {\n // noop\n}\n"],"names":["createRecursiveProxy","getCallback","applyCallback","path","Proxy","noop","get","_obj","key","undefined","apply","_1","_2","args","functionName","length","isCall","isApply","slice"],"mappings":"AAOA;AACA;;;;;AAKC,IACM,SAASA,oBAAAA,CACdC,WAA6B,EAC7BC,aAAiC,EACjCC,IAAc,EAAA;IAEd,OAAO,IAAIC,MAAMC,IAAM,EAAA;QACrBC,GAAIC,CAAAA,CAAAA,IAAI,EAAEC,GAAG,EAAA;AACX,YAAA,IAAI,OAAOA,GAAAA,KAAQ,QAAYA,IAAAA,GAAAA,KAAQ,MAAQ,EAAA;;;gBAG7C,OAAOC,SAAAA,CAAAA;AACT,aAAA;AAEA,YAAA,OACER,WAAYE,CAAAA,IAAAA,EAAMK,GAClBR,CAAAA,IAAAA,oBAAAA,CAAqBC,aAAaC,aAAe,EAAA;AAAIC,gBAAAA,GAAAA,IAAAA;AAAMK,gBAAAA,GAAAA;AAAI,aAAA,CAAA,CAAA;AAEnE,SAAA;AACAE,QAAAA,KAAAA,CAAAA,CAAMC,EAAE,EAAEC,EAAE,EAAEC,IAAI,EAAA;AAChB,YAAA,MAAMC,eAAeX,IAAI,CAACA,IAAKY,CAAAA,MAAM,GAAG,CAAE,CAAA,CAAA;AAE1C,YAAA,MAAMC,SAASF,YAAiB,KAAA,MAAA,CAAA;YAChC,MAAMG,OAAAA,GAAUD,MAAS,GAAA,KAAA,GAAQF,YAAiB,KAAA,OAAA,CAAA;YAElD,OAAOZ,aAAAA,CACLe,OAAWD,IAAAA,MAAAA,GAASb,IAAKe,CAAAA,KAAK,CAAC,CAAG,EAAA,CAAC,CAAKf,CAAAA,GAAAA,IAAAA,EACxCc,OACIJ,GAAAA,IAAAA,CAAKE,MAAM,IAAI,CAAA,GACbF,IAAI,CAAC,CAAE,CAAA,GACP,EAAE,GACJG,MACEH,GAAAA,IAAAA,CAAKK,KAAK,CAAC,CACXL,CAAAA,GAAAA,IAAAA,CAAAA,CAAAA;AAEV,SAAA;AACF,KAAA,CAAA,CAAA;AACF,CAAA;AAEA,SAASR,IAAAA,GAAAA;AACP;AACF;;;;"}
1
+ {"version":3,"file":"createRecursiveProxy.js","sources":["../../../src/lib/createRecursiveProxy.ts"],"sourcesContent":["type ProxyApplyCallback = (\n path: (string | symbol)[],\n args: unknown[]\n) => unknown;\n/**\n * @internal\n * If returns `undefined | null`, the proxy will continue to create a new proxy for the next key.\n */\ntype ProxyGetCallback = (\n path: (string | symbol)[],\n key: string | symbol\n) => unknown | undefined;\n\n/**\n * Creates a recursive proxy that calls the `getCallback` and `applyCallback` functions\n * @param getCallback The callback to call when a proxy property is accessed\n * @param applyCallback The callback to call when a proxy is called as a function\n * @param path The current path of the proxy\n */\nexport function createRecursiveProxy(\n getCallback: ProxyGetCallback,\n applyCallback: ProxyApplyCallback,\n path: (string | symbol)[]\n): unknown {\n return new Proxy(noop, {\n get(_obj, key) {\n if (key === 'then') {\n // special case for if the proxy is accidentally treated\n // like a PromiseLike (like in `Promise.resolve(proxy)`)\n return undefined;\n }\n\n return (\n getCallback(path, key) ??\n createRecursiveProxy(getCallback, applyCallback, [...path, key])\n );\n },\n apply(_1, _2, args) {\n const functionName = path[path.length - 1];\n\n const isCall = functionName === 'call';\n const isApply = isCall ? false : functionName === 'apply';\n\n return applyCallback(\n isApply || isCall ? path.slice(0, -1) : path,\n isApply\n ? args.length >= 2\n ? args[1]\n : []\n : isCall\n ? args.slice(1)\n : args\n );\n },\n });\n}\n\nfunction noop() {\n // noop\n}\n"],"names":["createRecursiveProxy","getCallback","applyCallback","path","Proxy","noop","get","_obj","key","undefined","apply","_1","_2","args","functionName","length","isCall","isApply","slice"],"mappings":"AAaA;;;;;AAKC,IACM,SAASA,oBAAAA,CACdC,WAA6B,EAC7BC,aAAiC,EACjCC,IAAyB,EAAA;IAEzB,OAAO,IAAIC,MAAMC,IAAM,EAAA;QACrBC,GAAIC,CAAAA,CAAAA,IAAI,EAAEC,GAAG,EAAA;AACX,YAAA,IAAIA,QAAQ,MAAQ,EAAA;;;gBAGlB,OAAOC,SAAAA,CAAAA;AACT,aAAA;AAEA,YAAA,OACER,WAAYE,CAAAA,IAAAA,EAAMK,GAClBR,CAAAA,IAAAA,oBAAAA,CAAqBC,aAAaC,aAAe,EAAA;AAAIC,gBAAAA,GAAAA,IAAAA;AAAMK,gBAAAA,GAAAA;AAAI,aAAA,CAAA,CAAA;AAEnE,SAAA;AACAE,QAAAA,KAAAA,CAAAA,CAAMC,EAAE,EAAEC,EAAE,EAAEC,IAAI,EAAA;AAChB,YAAA,MAAMC,eAAeX,IAAI,CAACA,IAAKY,CAAAA,MAAM,GAAG,CAAE,CAAA,CAAA;AAE1C,YAAA,MAAMC,SAASF,YAAiB,KAAA,MAAA,CAAA;YAChC,MAAMG,OAAAA,GAAUD,MAAS,GAAA,KAAA,GAAQF,YAAiB,KAAA,OAAA,CAAA;YAElD,OAAOZ,aAAAA,CACLe,OAAWD,IAAAA,MAAAA,GAASb,IAAKe,CAAAA,KAAK,CAAC,CAAG,EAAA,CAAC,CAAKf,CAAAA,GAAAA,IAAAA,EACxCc,OACIJ,GAAAA,IAAAA,CAAKE,MAAM,IAAI,CAAA,GACbF,IAAI,CAAC,CAAE,CAAA,GACP,EAAE,GACJG,MACEH,GAAAA,IAAAA,CAAKK,KAAK,CAAC,CACXL,CAAAA,GAAAA,IAAAA,CAAAA,CAAAA;AAEV,SAAA;AACF,KAAA,CAAA,CAAA;AACF,CAAA;AAEA,SAASR,IAAAA,GAAAA;AACP;AACF;;;;"}
@@ -1,7 +1,32 @@
1
1
  import { createRecursiveProxy } from './lib/createRecursiveProxy.js';
2
2
 
3
3
  function qraftAPIClient(services, callbacks, options) {
4
+ const stringTag = 'QraftAPIClient';
5
+ const toString = (path)=>{
6
+ return `[${stringTag}${path.length ? ' ' + path.join('.') : ''}]`;
7
+ };
8
+ const primitiveMethods = {
9
+ [Symbol.toPrimitive] (path, hint) {
10
+ if (hint === 'number') return NaN;
11
+ if (hint === 'string') return toString(path);
12
+ return getByPath(services, path);
13
+ },
14
+ valueOf (path) {
15
+ return getByPath(services, path);
16
+ },
17
+ toJSON (path) {
18
+ return JSON.stringify(getByPath(services, path));
19
+ },
20
+ toString (path) {
21
+ return toString(path);
22
+ }
23
+ };
4
24
  return createRecursiveProxy(function getCallback(getPath, key) {
25
+ if (Object.prototype.hasOwnProperty.call(primitiveMethods, key)) {
26
+ return primitiveMethods[key].bind(undefined, getPath);
27
+ } else if (key === Symbol.toStringTag) {
28
+ return stringTag;
29
+ }
5
30
  if (getPath.length !== 2 || key !== 'schema') return; // todo::maybe return callback?
6
31
  const serviceOperation = getByPath(services, getPath);
7
32
  if (!isServiceOperation(serviceOperation)) throw new Error(`Service operation not found: ${getPath.join('.')}`);
@@ -1 +1 @@
1
- {"version":3,"file":"qraftAPIClient.js","sources":["../../src/qraftAPIClient.ts"],"sourcesContent":["import type {\n ServiceOperationMutation,\n ServiceOperationMutationFn,\n ServiceOperationQuery,\n ServiceOperationQueryFn,\n} from '@openapi-qraft/tanstack-query-react-types';\nimport type { QueryClient } from '@tanstack/query-core';\nimport type * as callbacks from './callbacks/index.js';\nimport type * as operationInvokeModule from './callbacks/operationInvokeFn.js';\nimport type {\n OperationSchema,\n RequestFnInfo,\n RequestFnResponse,\n} from './lib/requestFn.js';\nimport { createRecursiveProxy } from './lib/createRecursiveProxy.js';\n\nexport interface CreateAPIBasicClientOptions {\n requestFn<TData, TError>(\n schema: OperationSchema,\n requestInfo: RequestFnInfo\n ): Promise<RequestFnResponse<TData, TError>>;\n baseUrl: string;\n}\n\nexport interface CreateAPIBasicQueryClientOptions {\n queryClient: QueryClient;\n}\n\nexport interface CreateAPIQueryClientOptions\n extends CreateAPIBasicClientOptions,\n CreateAPIBasicQueryClientOptions {}\n\n/**\n * @deprecated use `CreateAPIClientOptions` instead\n */\nexport type QraftClientOptions =\n | CreateAPIBasicClientOptions\n | CreateAPIQueryClientOptions;\n\nexport type CreateAPIClientOptions =\n | CreateAPIBasicClientOptions\n | CreateAPIBasicQueryClientOptions\n | CreateAPIQueryClientOptions;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIBasicClientOptions\n): APIBasicClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Required<Callbacks>,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIQueryClientOptions\n): Services;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIBasicQueryClientOptions\n): APIBasicQueryClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIQueryClientOptions\n): APIQueryClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks\n): APIUtilityClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options?: CreateAPIClientOptions\n): APIQueryClientServices<Services, TCallbacks> | Services {\n return createRecursiveProxy(\n function getCallback(getPath, key) {\n if (getPath.length !== 2 || key !== 'schema') return; // todo::maybe return callback?\n\n const serviceOperation = getByPath(services, getPath);\n if (!isServiceOperation(serviceOperation))\n throw new Error(`Service operation not found: ${getPath.join('.')}`);\n return serviceOperation.schema;\n },\n function applyCallback(applyPath, args) {\n const { path, callbackName } = extractCallbackDetails(applyPath);\n\n assertValidCallbackName(callbackName, callbacks);\n\n const serviceOperation = getByPath(services, path);\n\n if (!isServiceOperation(serviceOperation))\n throw new Error(`Service operation not found: ${path.join('.')}`);\n\n if (\n callbackName !== 'operationInvokeFn' &&\n callbackName !== 'getQueryKey' &&\n callbackName !== 'getMutationKey' &&\n callbackName !== 'getInfiniteQueryKey'\n )\n if (!options || !('queryClient' in options && options.queryClient))\n throw new Error(\n `'qraft.<service>.<operation>.${String(callbackName)}()' requires 'queryClient' in 'createAPIClient(...)' options.`\n );\n\n // @ts-expect-error - Too complex union type\n return callbacks[callbackName](options, serviceOperation.schema, args);\n },\n []\n ) as never;\n}\n\nfunction assertValidCallbackName<\n TCallbacks extends Record<string, (...rest: any[]) => unknown>,\n>(\n callbackName: string | number | symbol,\n callbacks: TCallbacks\n): asserts callbackName is keyof TCallbacks {\n if (!(callbackName in callbacks)) {\n if ((callbackName as OperationInvokeFnName) === 'operationInvokeFn')\n throw new Error(\n `Callback 'operationInvokeFn' is required for executing 'qraft.<service>.<operation>()', but it is not provided in the 'callbacks' object.`\n );\n throw new Error(\n `Callback for 'qraft.<service>.<operation>.${String(callbackName)}()' is not provided in the 'callbacks' object.`\n );\n }\n}\n\n/**\n * Extracts Callback details from the applyPath\n * @param applyPath\n */\nfunction extractCallbackDetails(applyPath: string[]) {\n // <service>.<operation>()\n if (applyPath.length === 2) {\n return {\n path: applyPath,\n callbackName: 'operationInvokeFn' satisfies OperationInvokeFnName,\n };\n } else {\n // <service>.<operation>.<method>()\n return {\n path: applyPath.slice(0, -1),\n // The last arg is for instance `.useMutation` or `.useQuery()`\n callbackName: applyPath[applyPath.length - 1],\n };\n }\n}\n\nfunction isServiceOperation(\n input: unknown\n): input is { schema: OperationSchema } {\n return input !== null && typeof input === 'object' && 'schema' in input;\n}\n\nfunction getByPath(obj: Record<string, unknown>, path: string[]) {\n return path.reduce<unknown>((acc, key) => {\n if (acc && typeof acc === 'object' && key in acc)\n return acc[key as keyof typeof acc];\n }, obj);\n}\n\ntype Callbacks = Partial<typeof callbacks>;\n\ntype ServicesDeclaration<Services> = {\n [service in keyof Services]: {\n [method in keyof Services[service]]: {\n schema: OperationSchema;\n types: {\n parameters?: any;\n data?: any;\n error?: any;\n body?: any;\n };\n };\n };\n};\n\ntype ServiceSchemasDeclaration<Services extends ServicesDeclaration<Services>> =\n {\n [service in keyof Services]: {\n [method in keyof Services[service]]: {\n schema: Services[service][method]['schema'];\n };\n };\n };\n\ntype QueryOperationCallbacks = Extract<\n keyof Callbacks,\n | 'cancelQueries'\n | 'fetchInfiniteQuery'\n | 'fetchQuery'\n | 'getInfiniteQueryData'\n | 'getInfiniteQueryKey'\n | 'getInfiniteQueryState'\n | 'getQueriesData'\n | 'getQueryData'\n | 'getQueryKey'\n | 'getQueryState'\n | 'invalidateQueries'\n | 'isFetching'\n | 'prefetchInfiniteQuery'\n | 'prefetchQuery'\n | 'refetchQueries'\n | 'ensureQueryData'\n | 'ensureInfiniteQueryData'\n | 'removeQueries'\n | 'resetQueries'\n | 'setInfiniteQueryData'\n | 'setQueriesData'\n | 'setQueryData'\n | 'useInfiniteQuery'\n | 'useIsFetching'\n | 'useQueries'\n | 'useQuery'\n | 'useSuspenseInfiniteQuery'\n | 'useSuspenseQueries'\n | 'useSuspenseQuery'\n>;\n\ntype MutationOperationCallbacks = Extract<\n keyof Callbacks,\n | 'getMutationKey'\n | 'isMutating'\n | 'useIsMutating'\n | 'useMutation'\n | 'useMutationState'\n>;\n\nexport type APIQueryClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n TCallbacks,\n QueryOperationCallbacks,\n MutationOperationCallbacks\n>;\n\nexport type APIBasicQueryClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n Omit<TCallbacks, 'operationInvokeFn'>,\n Extract<\n QueryOperationCallbacks,\n | 'resetQueries'\n | 'removeQueries'\n | 'cancelQueries'\n | 'invalidateQueries'\n | 'refetchQueries'\n | 'getQueryKey'\n | 'getInfiniteQueryState'\n | 'getInfiniteQueryData'\n | 'getInfiniteQueryKey'\n | 'setInfiniteQueryData'\n | 'getQueriesData'\n | 'setQueriesData'\n | 'getQueryState'\n | 'getQueryData'\n | 'setQueryData'\n | 'useIsFetching'\n | 'isFetching'\n >,\n Extract<\n MutationOperationCallbacks,\n 'getMutationKey' | 'useMutationState' | 'useIsMutating' | 'isMutating'\n >\n>;\n\nexport type APIUtilityClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n Omit<TCallbacks, 'operationInvokeFn'>,\n Extract<QueryOperationCallbacks, 'getQueryKey' | 'getInfiniteQueryKey'>,\n Extract<MutationOperationCallbacks, 'getMutationKey'>\n>;\n\nexport type APIBasicClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n TCallbacks,\n Extract<QueryOperationCallbacks, 'getQueryKey' | 'getInfiniteQueryKey'>,\n Extract<MutationOperationCallbacks, 'getMutationKey'>\n>;\n\ntype ServicesFilteredByCallbacks<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n TQueryOperationCallbacks extends QueryOperationCallbacks,\n TMutationOperationCallbacks extends MutationOperationCallbacks,\n> = {\n [serviceName in keyof TServices]: {\n [method in keyof TServices[serviceName]]: TServices[serviceName][method]['schema']['method'] extends\n | 'get'\n | 'head'\n | 'options'\n ? Pick<\n ServiceOperationQuery<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >,\n | Extract<keyof TCallbacks, TQueryOperationCallbacks>\n | 'types'\n | 'schema'\n > &\n (OperationInvokeFnName extends keyof TCallbacks\n ? ServiceOperationQueryFn<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >\n : {})\n : Pick<\n ServiceOperationMutation<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['body'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >,\n | Extract<keyof TCallbacks, TMutationOperationCallbacks>\n | 'types'\n | 'schema'\n > &\n (OperationInvokeFnName extends keyof TCallbacks\n ? ServiceOperationMutationFn<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['body'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >\n : {});\n };\n};\n\ntype OperationInvokeFnName = Extract<\n keyof typeof operationInvokeModule,\n 'operationInvokeFn'\n>;\n"],"names":["qraftAPIClient","services","callbacks","options","createRecursiveProxy","getCallback","getPath","key","length","serviceOperation","getByPath","isServiceOperation","Error","join","schema","applyCallback","applyPath","args","path","callbackName","extractCallbackDetails","assertValidCallbackName","queryClient","String","slice","input","obj","reduce","acc"],"mappings":"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"}
1
+ {"version":3,"file":"qraftAPIClient.js","sources":["../../src/qraftAPIClient.ts"],"sourcesContent":["import type {\n ServiceOperationMutation,\n ServiceOperationMutationFn,\n ServiceOperationQuery,\n ServiceOperationQueryFn,\n} from '@openapi-qraft/tanstack-query-react-types';\nimport type { QueryClient } from '@tanstack/query-core';\nimport type * as callbacks from './callbacks/index.js';\nimport type * as operationInvokeModule from './callbacks/operationInvokeFn.js';\nimport type {\n OperationSchema,\n RequestFnInfo,\n RequestFnResponse,\n} from './lib/requestFn.js';\nimport { createRecursiveProxy } from './lib/createRecursiveProxy.js';\n\nexport interface CreateAPIBasicClientOptions {\n requestFn<TData, TError>(\n schema: OperationSchema,\n requestInfo: RequestFnInfo\n ): Promise<RequestFnResponse<TData, TError>>;\n baseUrl: string;\n}\n\nexport interface CreateAPIBasicQueryClientOptions {\n queryClient: QueryClient;\n}\n\nexport interface CreateAPIQueryClientOptions\n extends CreateAPIBasicClientOptions,\n CreateAPIBasicQueryClientOptions {}\n\n/**\n * @deprecated use `CreateAPIClientOptions` instead\n */\nexport type QraftClientOptions =\n | CreateAPIBasicClientOptions\n | CreateAPIQueryClientOptions;\n\nexport type CreateAPIClientOptions =\n | CreateAPIBasicClientOptions\n | CreateAPIBasicQueryClientOptions\n | CreateAPIQueryClientOptions;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIBasicClientOptions\n): APIBasicClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Required<Callbacks>,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIQueryClientOptions\n): Services;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIBasicQueryClientOptions\n): APIBasicQueryClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options: CreateAPIQueryClientOptions\n): APIQueryClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks\n): APIUtilityClientServices<Services, TCallbacks>;\n\nexport function qraftAPIClient<\n Services extends ServicesDeclaration<Services>,\n TCallbacks extends Callbacks,\n>(\n services: ServiceSchemasDeclaration<Services>,\n callbacks: TCallbacks,\n options?: CreateAPIClientOptions\n): APIQueryClientServices<Services, TCallbacks> | Services {\n const stringTag = 'QraftAPIClient';\n\n const toString = (path: (symbol | string)[]): string => {\n return `[${stringTag}${path.length ? ' ' + path.join('.') : ''}]`;\n };\n\n const primitiveMethods = {\n [Symbol.toPrimitive](\n this: undefined,\n path: (string | symbol)[],\n hint: 'string' | 'number' | 'default'\n ): unknown {\n if (hint === 'number') return NaN;\n if (hint === 'string') return toString(path);\n return getByPath(services, path);\n },\n valueOf(this: undefined, path: (string | symbol)[]): unknown {\n return getByPath(services, path);\n },\n toJSON(this: undefined, path: (string | symbol)[]): string {\n return JSON.stringify(getByPath(services, path));\n },\n toString(this: undefined, path: (string | symbol)[]): string {\n return toString(path);\n },\n };\n\n return createRecursiveProxy(\n function getCallback(getPath, key) {\n if (Object.prototype.hasOwnProperty.call(primitiveMethods, key)) {\n return primitiveMethods[key as keyof typeof primitiveMethods].bind(\n undefined,\n getPath\n );\n } else if (key === Symbol.toStringTag) {\n return stringTag;\n }\n\n if (getPath.length !== 2 || key !== 'schema') return; // todo::maybe return callback?\n\n const serviceOperation = getByPath(services, getPath);\n if (!isServiceOperation(serviceOperation))\n throw new Error(`Service operation not found: ${getPath.join('.')}`);\n return serviceOperation.schema;\n },\n function applyCallback(applyPath, args) {\n const { path, callbackName } = extractCallbackDetails(applyPath);\n\n assertValidCallbackName(callbackName, callbacks);\n\n const serviceOperation = getByPath(services, path);\n\n if (!isServiceOperation(serviceOperation))\n throw new Error(`Service operation not found: ${path.join('.')}`);\n\n if (\n callbackName !== 'operationInvokeFn' &&\n callbackName !== 'getQueryKey' &&\n callbackName !== 'getMutationKey' &&\n callbackName !== 'getInfiniteQueryKey'\n )\n if (!options || !('queryClient' in options && options.queryClient))\n throw new Error(\n `'qraft.<service>.<operation>.${String(callbackName)}()' requires 'queryClient' in 'createAPIClient(...)' options.`\n );\n\n // @ts-expect-error - Too complex union type\n return callbacks[callbackName](options, serviceOperation.schema, args);\n },\n []\n ) as never;\n}\n\nfunction assertValidCallbackName<\n TCallbacks extends Record<string, (...rest: any[]) => unknown>,\n>(\n callbackName: string | number | symbol,\n callbacks: TCallbacks\n): asserts callbackName is keyof TCallbacks {\n if (!(callbackName in callbacks)) {\n if ((callbackName as OperationInvokeFnName) === 'operationInvokeFn')\n throw new Error(\n `Callback 'operationInvokeFn' is required for executing 'qraft.<service>.<operation>()', but it is not provided in the 'callbacks' object.`\n );\n throw new Error(\n `Callback for 'qraft.<service>.<operation>.${String(callbackName)}()' is not provided in the 'callbacks' object.`\n );\n }\n}\n\n/**\n * Extracts Callback details from the applyPath\n * @param applyPath\n */\nfunction extractCallbackDetails(applyPath: (string | symbol)[]) {\n // <service>.<operation>()\n if (applyPath.length === 2) {\n return {\n path: applyPath,\n callbackName: 'operationInvokeFn' satisfies OperationInvokeFnName,\n };\n } else {\n // <service>.<operation>.<method>()\n return {\n path: applyPath.slice(0, -1),\n // The last arg is for instance `.useMutation` or `.useQuery()`\n callbackName: applyPath[applyPath.length - 1],\n };\n }\n}\n\nfunction isServiceOperation(\n input: unknown\n): input is { schema: OperationSchema } {\n return input !== null && typeof input === 'object' && 'schema' in input;\n}\n\nfunction getByPath(obj: Record<string, unknown>, path: (string | symbol)[]) {\n return path.reduce<unknown>((acc, key) => {\n if (acc && typeof acc === 'object' && key in acc)\n return acc[key as keyof typeof acc];\n }, obj);\n}\n\ntype Callbacks = Partial<typeof callbacks>;\n\ntype ServicesDeclaration<Services> = {\n [service in keyof Services]: {\n [method in keyof Services[service]]: {\n schema: OperationSchema;\n types: {\n parameters?: any;\n data?: any;\n error?: any;\n body?: any;\n };\n };\n };\n};\n\ntype ServiceSchemasDeclaration<Services extends ServicesDeclaration<Services>> =\n {\n [service in keyof Services]: {\n [method in keyof Services[service]]: {\n schema: Services[service][method]['schema'];\n };\n };\n };\n\ntype QueryOperationCallbacks = Extract<\n keyof Callbacks,\n | 'cancelQueries'\n | 'fetchInfiniteQuery'\n | 'fetchQuery'\n | 'getInfiniteQueryData'\n | 'getInfiniteQueryKey'\n | 'getInfiniteQueryState'\n | 'getQueriesData'\n | 'getQueryData'\n | 'getQueryKey'\n | 'getQueryState'\n | 'invalidateQueries'\n | 'isFetching'\n | 'prefetchInfiniteQuery'\n | 'prefetchQuery'\n | 'refetchQueries'\n | 'ensureQueryData'\n | 'ensureInfiniteQueryData'\n | 'removeQueries'\n | 'resetQueries'\n | 'setInfiniteQueryData'\n | 'setQueriesData'\n | 'setQueryData'\n | 'useInfiniteQuery'\n | 'useIsFetching'\n | 'useQueries'\n | 'useQuery'\n | 'useSuspenseInfiniteQuery'\n | 'useSuspenseQueries'\n | 'useSuspenseQuery'\n>;\n\ntype MutationOperationCallbacks = Extract<\n keyof Callbacks,\n | 'getMutationKey'\n | 'isMutating'\n | 'useIsMutating'\n | 'useMutation'\n | 'useMutationState'\n>;\n\nexport type APIQueryClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n TCallbacks,\n QueryOperationCallbacks,\n MutationOperationCallbacks\n>;\n\nexport type APIBasicQueryClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n Omit<TCallbacks, 'operationInvokeFn'>,\n Extract<\n QueryOperationCallbacks,\n | 'resetQueries'\n | 'removeQueries'\n | 'cancelQueries'\n | 'invalidateQueries'\n | 'refetchQueries'\n | 'getQueryKey'\n | 'getInfiniteQueryState'\n | 'getInfiniteQueryData'\n | 'getInfiniteQueryKey'\n | 'setInfiniteQueryData'\n | 'getQueriesData'\n | 'setQueriesData'\n | 'getQueryState'\n | 'getQueryData'\n | 'setQueryData'\n | 'useIsFetching'\n | 'isFetching'\n >,\n Extract<\n MutationOperationCallbacks,\n 'getMutationKey' | 'useMutationState' | 'useIsMutating' | 'isMutating'\n >\n>;\n\nexport type APIUtilityClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n Omit<TCallbacks, 'operationInvokeFn'>,\n Extract<QueryOperationCallbacks, 'getQueryKey' | 'getInfiniteQueryKey'>,\n Extract<MutationOperationCallbacks, 'getMutationKey'>\n>;\n\nexport type APIBasicClientServices<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n> = ServicesFilteredByCallbacks<\n TServices,\n TCallbacks,\n Extract<QueryOperationCallbacks, 'getQueryKey' | 'getInfiniteQueryKey'>,\n Extract<MutationOperationCallbacks, 'getMutationKey'>\n>;\n\ntype ServicesFilteredByCallbacks<\n TServices extends ServicesDeclaration<TServices>,\n TCallbacks extends Callbacks,\n TQueryOperationCallbacks extends QueryOperationCallbacks,\n TMutationOperationCallbacks extends MutationOperationCallbacks,\n> = {\n [serviceName in keyof TServices]: {\n [method in keyof TServices[serviceName]]: TServices[serviceName][method]['schema']['method'] extends\n | 'get'\n | 'head'\n | 'options'\n ? Pick<\n ServiceOperationQuery<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >,\n | Extract<keyof TCallbacks, TQueryOperationCallbacks>\n | 'types'\n | 'schema'\n > &\n (OperationInvokeFnName extends keyof TCallbacks\n ? ServiceOperationQueryFn<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >\n : {})\n : Pick<\n ServiceOperationMutation<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['body'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >,\n | Extract<keyof TCallbacks, TMutationOperationCallbacks>\n | 'types'\n | 'schema'\n > &\n (OperationInvokeFnName extends keyof TCallbacks\n ? ServiceOperationMutationFn<\n TServices[serviceName][method]['schema'],\n TServices[serviceName][method]['types']['body'],\n TServices[serviceName][method]['types']['data'],\n TServices[serviceName][method]['types']['parameters'],\n TServices[serviceName][method]['types']['error']\n >\n : {});\n };\n};\n\ntype OperationInvokeFnName = Extract<\n keyof typeof operationInvokeModule,\n 'operationInvokeFn'\n>;\n"],"names":["qraftAPIClient","services","callbacks","options","stringTag","toString","path","length","join","primitiveMethods","Symbol","toPrimitive","hint","NaN","getByPath","valueOf","toJSON","JSON","stringify","createRecursiveProxy","getCallback","getPath","key","Object","prototype","hasOwnProperty","call","bind","undefined","toStringTag","serviceOperation","isServiceOperation","Error","schema","applyCallback","applyPath","args","callbackName","extractCallbackDetails","assertValidCallbackName","queryClient","String","slice","input","obj","reduce","acc"],"mappings":"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"}
@@ -1,15 +1,15 @@
1
- type ProxyApplyCallback = (path: string[], args: unknown[]) => unknown;
1
+ type ProxyApplyCallback = (path: (string | symbol)[], args: unknown[]) => unknown;
2
2
  /**
3
3
  * @internal
4
4
  * If returns `undefined | null`, the proxy will continue to create a new proxy for the next key.
5
5
  */
6
- type ProxyGetCallback = (path: string[], key: string) => unknown | undefined;
6
+ type ProxyGetCallback = (path: (string | symbol)[], key: string | symbol) => unknown | undefined;
7
7
  /**
8
8
  * Creates a recursive proxy that calls the `getCallback` and `applyCallback` functions
9
9
  * @param getCallback The callback to call when a proxy property is accessed
10
10
  * @param applyCallback The callback to call when a proxy is called as a function
11
11
  * @param path The current path of the proxy
12
12
  */
13
- export declare function createRecursiveProxy(getCallback: ProxyGetCallback, applyCallback: ProxyApplyCallback, path: string[]): unknown;
13
+ export declare function createRecursiveProxy(getCallback: ProxyGetCallback, applyCallback: ProxyApplyCallback, path: (string | symbol)[]): unknown;
14
14
  export {};
15
15
  //# sourceMappingURL=createRecursiveProxy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createRecursiveProxy.d.ts","sourceRoot":"","sources":["../../../src/lib/createRecursiveProxy.ts"],"names":[],"mappings":"AAAA,KAAK,kBAAkB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AACvE;;;GAGG;AACH,KAAK,gBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;AAG7E;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,gBAAgB,EAC7B,aAAa,EAAE,kBAAkB,EACjC,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAgCT"}
1
+ {"version":3,"file":"createRecursiveProxy.d.ts","sourceRoot":"","sources":["../../../src/lib/createRecursiveProxy.ts"],"names":[],"mappings":"AAAA,KAAK,kBAAkB,GAAG,CACxB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACzB,IAAI,EAAE,OAAO,EAAE,KACZ,OAAO,CAAC;AACb;;;GAGG;AACH,KAAK,gBAAgB,GAAG,CACtB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EACzB,GAAG,EAAE,MAAM,GAAG,MAAM,KACjB,OAAO,GAAG,SAAS,CAAC;AAEzB;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,gBAAgB,EAC7B,aAAa,EAAE,kBAAkB,EACjC,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GACxB,OAAO,CAgCT"}
@@ -1 +1 @@
1
- {"version":3,"file":"qraftAPIClient.d.ts","sourceRoot":"","sources":["../../src/qraftAPIClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qraftAPIClient.d.ts","sourceRoot":"","sources":["../../src/qraftAPIClient.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openapi-qraft/react",
3
- "version": "2.2.3-provenance-test.0",
3
+ "version": "2.3.0",
4
4
  "description": "OpenAPI client for React, providing type-safe requests and dynamic TanStack Query React Hooks via a modular, Proxy-based architecture.",
5
5
  "scripts": {
6
6
  "build": "NODE_ENV=production rollup --config rollup.config.mjs && tsc --project tsconfig.build.json --emitDeclarationOnly",
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "sideEffects": false,
17
17
  "dependencies": {
18
- "@openapi-qraft/tanstack-query-react-types": "2.2.3-provenance-test.0"
18
+ "@openapi-qraft/tanstack-query-react-types": "2.3.0"
19
19
  },
20
20
  "peerDependencies": {
21
21
  "@tanstack/query-core": "^5.0.0",
@@ -23,11 +23,11 @@
23
23
  "react": "^18 || ^19"
24
24
  },
25
25
  "devDependencies": {
26
- "@openapi-qraft/cli": "2.2.3-provenance-test.0",
26
+ "@openapi-qraft/cli": "2.3.0",
27
27
  "@openapi-qraft/eslint-config": "1.0.0",
28
- "@openapi-qraft/openapi-typescript-plugin": "^1.2.9-provenance-test.0",
28
+ "@openapi-qraft/openapi-typescript-plugin": "^1.2.10",
29
29
  "@openapi-qraft/rollup-config": "1.1.0",
30
- "@openapi-qraft/tanstack-query-react-plugin": "2.2.3-provenance-test.0",
30
+ "@openapi-qraft/tanstack-query-react-plugin": "2.3.0",
31
31
  "@openapi-qraft/test-fixtures": "1.0.0",
32
32
  "@tanstack/query-core": "^5.66.3",
33
33
  "@tanstack/react-query": "^5.66.3",
@@ -38,8 +38,8 @@
38
38
  "@types/react-dom": "^19.0.3",
39
39
  "@vitejs/plugin-react": "^4.3.4",
40
40
  "@vitest/coverage-v8": "^3.0.5",
41
- "eslint": "^9.20.1",
42
- "eslint-plugin-react-compiler": "19.0.0-beta-30d8a17-20250209",
41
+ "eslint": "^9.24.0",
42
+ "eslint-plugin-react-compiler": "19.0.0-beta-e993439-20250328",
43
43
  "global-jsdom": "^26.0.0",
44
44
  "jscodeshift": "^17.0.0",
45
45
  "jsdom": "^26.0.0",
@@ -60,6 +60,7 @@
60
60
  "!src/tests/**"
61
61
  ],
62
62
  "type": "module",
63
+ "module": "dist/esm/index.js",
63
64
  "exports": {
64
65
  ".": {
65
66
  "types": "./dist/types/index.d.ts",
@@ -1,11 +1,16 @@
1
- type ProxyApplyCallback = (path: string[], args: unknown[]) => unknown;
1
+ type ProxyApplyCallback = (
2
+ path: (string | symbol)[],
3
+ args: unknown[]
4
+ ) => unknown;
2
5
  /**
3
6
  * @internal
4
7
  * If returns `undefined | null`, the proxy will continue to create a new proxy for the next key.
5
8
  */
6
- type ProxyGetCallback = (path: string[], key: string) => unknown | undefined;
9
+ type ProxyGetCallback = (
10
+ path: (string | symbol)[],
11
+ key: string | symbol
12
+ ) => unknown | undefined;
7
13
 
8
- // todo::rename to `qraftRecursiveProxy` with deprecated `createRecursiveProxy`
9
14
  /**
10
15
  * Creates a recursive proxy that calls the `getCallback` and `applyCallback` functions
11
16
  * @param getCallback The callback to call when a proxy property is accessed
@@ -15,11 +20,11 @@ type ProxyGetCallback = (path: string[], key: string) => unknown | undefined;
15
20
  export function createRecursiveProxy(
16
21
  getCallback: ProxyGetCallback,
17
22
  applyCallback: ProxyApplyCallback,
18
- path: string[]
23
+ path: (string | symbol)[]
19
24
  ): unknown {
20
25
  return new Proxy(noop, {
21
26
  get(_obj, key) {
22
- if (typeof key !== 'string' || key === 'then') {
27
+ if (key === 'then') {
23
28
  // special case for if the proxy is accidentally treated
24
29
  // like a PromiseLike (like in `Promise.resolve(proxy)`)
25
30
  return undefined;
@@ -94,8 +94,44 @@ export function qraftAPIClient<
94
94
  callbacks: TCallbacks,
95
95
  options?: CreateAPIClientOptions
96
96
  ): APIQueryClientServices<Services, TCallbacks> | Services {
97
+ const stringTag = 'QraftAPIClient';
98
+
99
+ const toString = (path: (symbol | string)[]): string => {
100
+ return `[${stringTag}${path.length ? ' ' + path.join('.') : ''}]`;
101
+ };
102
+
103
+ const primitiveMethods = {
104
+ [Symbol.toPrimitive](
105
+ this: undefined,
106
+ path: (string | symbol)[],
107
+ hint: 'string' | 'number' | 'default'
108
+ ): unknown {
109
+ if (hint === 'number') return NaN;
110
+ if (hint === 'string') return toString(path);
111
+ return getByPath(services, path);
112
+ },
113
+ valueOf(this: undefined, path: (string | symbol)[]): unknown {
114
+ return getByPath(services, path);
115
+ },
116
+ toJSON(this: undefined, path: (string | symbol)[]): string {
117
+ return JSON.stringify(getByPath(services, path));
118
+ },
119
+ toString(this: undefined, path: (string | symbol)[]): string {
120
+ return toString(path);
121
+ },
122
+ };
123
+
97
124
  return createRecursiveProxy(
98
125
  function getCallback(getPath, key) {
126
+ if (Object.prototype.hasOwnProperty.call(primitiveMethods, key)) {
127
+ return primitiveMethods[key as keyof typeof primitiveMethods].bind(
128
+ undefined,
129
+ getPath
130
+ );
131
+ } else if (key === Symbol.toStringTag) {
132
+ return stringTag;
133
+ }
134
+
99
135
  if (getPath.length !== 2 || key !== 'schema') return; // todo::maybe return callback?
100
136
 
101
137
  const serviceOperation = getByPath(services, getPath);
@@ -152,7 +188,7 @@ function assertValidCallbackName<
152
188
  * Extracts Callback details from the applyPath
153
189
  * @param applyPath
154
190
  */
155
- function extractCallbackDetails(applyPath: string[]) {
191
+ function extractCallbackDetails(applyPath: (string | symbol)[]) {
156
192
  // <service>.<operation>()
157
193
  if (applyPath.length === 2) {
158
194
  return {
@@ -175,7 +211,7 @@ function isServiceOperation(
175
211
  return input !== null && typeof input === 'object' && 'schema' in input;
176
212
  }
177
213
 
178
- function getByPath(obj: Record<string, unknown>, path: string[]) {
214
+ function getByPath(obj: Record<string, unknown>, path: (string | symbol)[]) {
179
215
  return path.reduce<unknown>((acc, key) => {
180
216
  if (acc && typeof acc === 'object' && key in acc)
181
217
  return acc[key as keyof typeof acc];