@openapi-qraft/react 2.0.0-next.0 → 2.0.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @openapi-qraft/react
2
2
 
3
+ ## 2.0.0-next.1
4
+
5
+ ### Minor Changes
6
+
7
+ - 76634bf: ### Changeset: `createPredefinedParametersRequestFn`
8
+
9
+ Introduced `createPredefinedParametersRequestFn`, generated by the `@openapi-qraft/cli` using
10
+ the `--operation-predefined-parameters` option.
11
+ This function allows for the automatic application of predefined
12
+ parameters to selected API operations by wrapping the base `requestFn`. It simplifies managing parameters, reducing
13
+ boilerplate code, and supports both static and dynamic values, enhancing flexibility in API request handling.
14
+
3
15
  ## 2.0.0-next.0
4
16
 
5
17
  ### Major Changes
package/README.md CHANGED
@@ -23,7 +23,7 @@ Read the full documentation at [openapi-qraft.github.io/openapi-qraft](https://o
23
23
  First, install the core package for your project:
24
24
 
25
25
  ```bash
26
- npm install @openapi-qraft/react
26
+ npm install @openapi-qraft/react@next
27
27
  ```
28
28
 
29
29
  If your project doesn't already include `@tanstack/react-query`, you'll also need to install it. This package is
@@ -47,7 +47,7 @@ and schemas from your OpenAPI Document.
47
47
  To generate both TypeScript definitions and services using `openapi-qraft`, run the following command in the root directory of your project:
48
48
 
49
49
  ```bash
50
- npx @openapi-qraft/cli --plugin tanstack-query-react --plugin openapi-typescript https://api.dev.monite.com/openapi.json?version=2023-09-01 --output-dir src/api
50
+ npx @openapi-qraft/cli@next --plugin tanstack-query-react --plugin openapi-typescript https://api.dev.monite.com/openapi.json?version=2023-09-01 --output-dir src/api
51
51
  ```
52
52
 
53
53
  By completing this step, you will generate `src/api/schema.d.ts`, which serves as a TypeScript representation of the specified OpenAPI,
@@ -75,11 +75,9 @@ Finally, provide the request client to the `QraftContext` to enable the generate
75
75
  Every request will be handled by `request` function, which can be customized to fit your project's needs.
76
76
 
77
77
  ```tsx
78
- import { useMemo } from 'react';
79
-
80
78
  import { QraftContext, requestFn } from '@openapi-qraft/react';
81
79
  import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
82
-
80
+ import { useMemo } from 'react';
83
81
  // where `./api` is the '--output-dir' path to the services you generated with `@openapi-qraft/cli`
84
82
  import { createAPIClient } from './api';
85
83
 
@@ -599,7 +597,6 @@ using a custom `fetchToken` async function.
599
597
 
600
598
  ```tsx
601
599
  import { QraftContext, requestFn } from '@openapi-qraft/react';
602
-
603
600
  import { fetchToken } from './auth';
604
601
 
605
602
  function QraftProvider({ children }: { children: React.ReactNode }) {
@@ -11,7 +11,7 @@ export interface QraftSecureRequestFnProps extends QraftSecureRequestFnBaseProps
11
11
  queryClient?: QueryClient;
12
12
  }
13
13
  export declare function QraftSecureRequestFn({ children, requestFn, securitySchemes, queryClient: inQueryClient, }: QraftSecureRequestFnProps): import("react").FunctionComponentElement<{
14
- children?: ReactNode;
14
+ children?: ReactNode | undefined;
15
15
  }>;
16
16
  export declare const useSecuritySchemeAuth: ({ securitySchemes, requestFn, queryClient, }: QraftSecureRequestFnBaseProps & {
17
17
  queryClient: QueryClient;
@@ -1 +1 @@
1
- {"version":3,"file":"Unstable_QraftSecureRequestFn.d.ts","sourceRoot":"","sources":["../../src/Unstable_QraftSecureRequestFn.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAc,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAA2B,SAAS,EAAsB,MAAM,OAAO,CAAC;AAG/E,UAAU,6BAA6B;IACrC,SAAS,CAAC,KAAK,EAAE,MAAM,EACrB,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,aAAa,EAC1B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,eAAe,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,KAAK,SAAS,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;AAE5D,MAAM,WAAW,yBACf,SAAQ,6BAA6B;IACrC,QAAQ,CACN,eAAe,EAAE,6BAA6B,CAAC,WAAW,CAAC,GAC1D,SAAS,CAAC;IACb,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,SAAS,EACT,eAAe,EACf,WAAW,EAAE,aAAa,GAC3B,EAAE,yBAAyB;;GAkC3B;AAED,eAAO,MAAM,qBAAqB;iBAKnB,WAAW;MACtB,SAwBH,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAC/C,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,GACvB,SAAS,CA+BX;AA6HD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,EACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS,WAmBlD;AAED,KAAK,cAAc,GACf,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,oBAAoB,GAC5B,MAAM,CAAC,yBAAyB,GAChC;IACE,wCAAwC;IACxC,eAAe,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IAEpB,wCAAwC;IACxC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,yCAAyC;IACzC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC;IACvB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,yCAAyC;IACzC,EAAE,EAAE,QAAQ,CAAC;IACb,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,KAAK,qBAAqB,GAAG,CAAC,KAAK,EAAE;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;CACrB,KAAK,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE/C,MAAM,MAAM,sBAAsB,CAAC,kBAAkB,SAAS,MAAM,IAAI;KACrE,GAAG,IAAI,kBAAkB,GAAG,qBAAqB;CACnD,CAAC"}
1
+ {"version":3,"file":"Unstable_QraftSecureRequestFn.d.ts","sourceRoot":"","sources":["../../src/Unstable_QraftSecureRequestFn.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAc,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAA2B,SAAS,EAAsB,MAAM,OAAO,CAAC;AAG/E,UAAU,6BAA6B;IACrC,SAAS,CAAC,KAAK,EAAE,MAAM,EACrB,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,aAAa,EAC1B,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,eAAe,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,KAAK,SAAS,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;AAE5D,MAAM,WAAW,yBACf,SAAQ,6BAA6B;IACrC,QAAQ,CACN,eAAe,EAAE,6BAA6B,CAAC,WAAW,CAAC,GAC1D,SAAS,CAAC;IACb,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,SAAS,EACT,eAAe,EACf,WAAW,EAAE,aAAa,GAC3B,EAAE,yBAAyB;;GAkC3B;AAED,eAAO,MAAM,qBAAqB,iDAI/B,6BAA6B,GAAG;IACjC,WAAW,EAAE,WAAW,CAAC;CAC1B,KAAG,SAwBH,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,sBAAsB,CAAC,MAAM,CAAC,EAC/C,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,GACvB,SAAS,CA+BX;AA6HD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,EACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS,WAmBlD;AAED,KAAK,cAAc,GACf,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,oBAAoB,GAC5B,MAAM,CAAC,yBAAyB,GAChC;IACE,wCAAwC;IACxC,eAAe,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IAEpB,wCAAwC;IACxC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,yCAAyC;IACzC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC;IACvB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,yCAAyC;IACzC,EAAE,EAAE,QAAQ,CAAC;IACb,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,KAAK,qBAAqB,GAAG,CAAC,KAAK,EAAE;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;CACrB,KAAK,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE/C,MAAM,MAAM,sBAAsB,CAAC,kBAAkB,SAAS,MAAM,IAAI;KACrE,GAAG,IAAI,kBAAkB,GAAG,qBAAqB;CACnD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { OperationSchema } from '../lib/requestFn.js';
2
2
  import { CreateAPIBasicClientOptions } from '../qraftAPIClient.js';
3
3
  import { ServiceOperationQuery } from '../service-operation/ServiceOperation.js';
4
- export declare const getInfiniteQueryKey: (_qraftOptions: CreateAPIBasicClientOptions, schema: OperationSchema, args: Parameters<ServiceOperationQuery<OperationSchema, unknown, unknown>['getInfiniteQueryKey']>) => import("../service-operation/ServiceOperationKey.js").ServiceOperationInfiniteQueryKey<OperationSchema, unknown>;
4
+ export declare const getInfiniteQueryKey: (_qraftOptions: CreateAPIBasicClientOptions, schema: OperationSchema, args: Parameters<ServiceOperationQuery<OperationSchema, unknown, unknown>["getInfiniteQueryKey"]>) => import("../service-operation/ServiceOperationKey.js").ServiceOperationInfiniteQueryKey<OperationSchema, unknown>;
5
5
  //# sourceMappingURL=getInfiniteQueryKey.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getInfiniteQueryKey.d.ts","sourceRoot":"","sources":["../../../src/callbacks/getInfiniteQueryKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAEjF,eAAO,MAAM,mBAAmB,kBACf,2BAA2B,UAClC,eAAe,QACjB,WACJ,sBACE,eAAe,EACf,OAAO,EACP,OAAO,CACR,CAAC,qBAAqB,CAAC,CACzB,qHAGF,CAAC"}
1
+ {"version":3,"file":"getInfiniteQueryKey.d.ts","sourceRoot":"","sources":["../../../src/callbacks/getInfiniteQueryKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAEjF,eAAO,MAAM,mBAAmB,kBACf,2BAA2B,UAClC,eAAe,QACjB,UAAU,CACd,qBAAqB,CACnB,eAAe,EACf,OAAO,EACP,OAAO,CACR,CAAC,qBAAqB,CAAC,CACzB,qHAGF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { OperationSchema } from '../lib/requestFn.js';
2
2
  import type { CreateAPIBasicClientOptions } from '../qraftAPIClient.js';
3
3
  import type { ServiceOperationMutation } from '../service-operation/ServiceOperation.js';
4
- export declare const getMutationKey: (_qraftOptions: CreateAPIBasicClientOptions, schema: OperationSchema, args: Parameters<ServiceOperationMutation<OperationSchema, unknown, unknown, unknown>['getMutationKey']>) => [OperationSchema, unknown];
4
+ export declare const getMutationKey: (_qraftOptions: CreateAPIBasicClientOptions, schema: OperationSchema, args: Parameters<ServiceOperationMutation<OperationSchema, unknown, unknown, unknown>["getMutationKey"]>) => [OperationSchema, unknown];
5
5
  //# sourceMappingURL=getMutationKey.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getMutationKey.d.ts","sourceRoot":"","sources":["../../../src/callbacks/getMutationKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAGzF,eAAO,MAAM,cAAc,kBACV,2BAA2B,UAClC,eAAe,QACjB,WACJ,yBACE,eAAe,EACf,OAAO,EACP,OAAO,EACP,OAAO,CACR,CAAC,gBAAgB,CAAC,CACpB,+BAGF,CAAC"}
1
+ {"version":3,"file":"getMutationKey.d.ts","sourceRoot":"","sources":["../../../src/callbacks/getMutationKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAGzF,eAAO,MAAM,cAAc,kBACV,2BAA2B,UAClC,eAAe,QACjB,UAAU,CACd,wBAAwB,CACtB,eAAe,EACf,OAAO,EACP,OAAO,EACP,OAAO,CACR,CAAC,gBAAgB,CAAC,CACpB,+BAGF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { OperationSchema } from '../lib/requestFn.js';
2
2
  import type { CreateAPIBasicClientOptions } from '../qraftAPIClient.js';
3
3
  import type { ServiceOperationQuery } from '../service-operation/ServiceOperation.js';
4
- export declare const getQueryKey: (_qraftOptions: CreateAPIBasicClientOptions, schema: OperationSchema, args: Parameters<ServiceOperationQuery<OperationSchema, unknown, unknown>['getQueryKey']>) => import("../service-operation/ServiceOperationKey.js").ServiceOperationQueryKey<OperationSchema, unknown>;
4
+ export declare const getQueryKey: (_qraftOptions: CreateAPIBasicClientOptions, schema: OperationSchema, args: Parameters<ServiceOperationQuery<OperationSchema, unknown, unknown>["getQueryKey"]>) => import("../service-operation/ServiceOperationKey.js").ServiceOperationQueryKey<OperationSchema, unknown>;
5
5
  //# sourceMappingURL=getQueryKey.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getQueryKey.d.ts","sourceRoot":"","sources":["../../../src/callbacks/getQueryKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAGtF,eAAO,MAAM,WAAW,kBACP,2BAA2B,UAClC,eAAe,QACjB,WACJ,sBAAsB,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,aAAa,CAAC,CACxE,6GAGF,CAAC"}
1
+ {"version":3,"file":"getQueryKey.d.ts","sourceRoot":"","sources":["../../../src/callbacks/getQueryKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAGtF,eAAO,MAAM,WAAW,kBACP,2BAA2B,UAClC,eAAe,QACjB,UAAU,CACd,qBAAqB,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,aAAa,CAAC,CACxE,6GAGF,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { RequestFn } from './lib/requestFn.js';
2
+ export type QraftPredefinedParameterValue<T> = T extends () => Promise<infer R> ? R | undefined : T | undefined;
3
+ export type InputPredefinedParametersItem<TValue> = {
4
+ requestPattern: string;
5
+ parameters: Array<{
6
+ in: 'header' | 'query' | 'cookie';
7
+ name: string;
8
+ value: QraftPredefinedParameterValue<TValue>;
9
+ }>;
10
+ };
11
+ type TargetPredefinedParametersMethods = 'get' | 'post' | 'put' | 'patch' | 'delete' | 'options' | 'head' | 'trace';
12
+ export type TargetPredefinedParametersItem = {
13
+ requestPattern: string;
14
+ methods: Array<TargetPredefinedParametersMethods> | ReadonlyArray<Readonly<TargetPredefinedParametersMethods>>;
15
+ paths: Array<string> | ReadonlyArray<Readonly<string>>;
16
+ };
17
+ export declare function qraftPredefinedParametersRequestFn<TInputPredefinedParametersItem extends InputPredefinedParametersItem<any>, TData, TError>(inputPredefinedParameters: Array<TInputPredefinedParametersItem> | ReadonlyArray<Readonly<TInputPredefinedParametersItem>>, targetPredefinedParameters: Array<TargetPredefinedParametersItem> | ReadonlyArray<Readonly<TargetPredefinedParametersItem>>, requestFn: RequestFn<TData, TError>): RequestFn<TData, TError>;
18
+ export {};
19
+ //# sourceMappingURL=qraftPredefinedParametersRequestFn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qraftPredefinedParametersRequestFn.d.ts","sourceRoot":"","sources":["../../src/qraftPredefinedParametersRequestFn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EAIV,MAAM,oBAAoB,CAAC;AAG5B,MAAM,MAAM,6BAA6B,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAC3E,CAAC,GAAG,SAAS,GACb,CAAC,GAAG,SAAS,CAAC;AAElB,MAAM,MAAM,6BAA6B,CAAC,MAAM,IAAI;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,KAAK,CAAC;QAChB,EAAE,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;QAClC,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,6BAA6B,CAAC,MAAM,CAAC,CAAC;KAC9C,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,iCAAiC,GAClC,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,MAAM,8BAA8B,GAAG;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EACH,KAAK,CAAC,iCAAiC,CAAC,GACxC,aAAa,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC/D,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;CACxD,CAAC;AAEF,wBAAgB,kCAAkC,CAChD,8BAA8B,SAAS,6BAA6B,CAAC,GAAG,CAAC,EACzE,KAAK,EACL,MAAM,EAEN,yBAAyB,EACrB,KAAK,CAAC,8BAA8B,CAAC,GACrC,aAAa,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC,EAC3D,0BAA0B,EACtB,KAAK,CAAC,8BAA8B,CAAC,GACrC,aAAa,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC,EAC3D,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,GAClC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CA6C1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openapi-qraft/react",
3
- "version": "2.0.0-next.0",
3
+ "version": "2.0.0-next.1",
4
4
  "description": "API 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,10 +15,10 @@
15
15
  },
16
16
  "sideEffects": false,
17
17
  "devDependencies": {
18
- "@openapi-qraft/cli": "2.0.0-next.0",
18
+ "@openapi-qraft/cli": "2.0.0-next.1",
19
19
  "@openapi-qraft/eslint-config": "1.0.0",
20
- "@openapi-qraft/openapi-typescript-plugin": "^1.1.1-next.0",
21
- "@openapi-qraft/rollup-config": "1.0.0",
20
+ "@openapi-qraft/openapi-typescript-plugin": "^1.2.0-next.1",
21
+ "@openapi-qraft/rollup-config": "1.1.0-next.0",
22
22
  "@openapi-qraft/test-fixtures": "1.0.0",
23
23
  "@tanstack/react-query": "^5.17.3",
24
24
  "@testing-library/jest-dom": "^5.17.0",
@@ -66,6 +66,11 @@
66
66
  "require": "./dist/cjs/Unstable_QraftSecureRequestFn.cjs",
67
67
  "types": "./dist/types/Unstable_QraftSecureRequestFn.d.ts"
68
68
  },
69
+ "./qraftPredefinedParametersRequestFn": {
70
+ "import": "./dist/esm/qraftPredefinedParametersRequestFn.js",
71
+ "require": "./dist/cjs/qraftPredefinedParametersRequestFn.cjs",
72
+ "types": "./dist/types/qraftPredefinedParametersRequestFn.d.ts"
73
+ },
69
74
  "./package.json": "./package.json"
70
75
  },
71
76
  "typesVersions": {
@@ -0,0 +1,140 @@
1
+ import type {
2
+ OperationSchema,
3
+ RequestFn,
4
+ RequestFnInfo,
5
+ RequestFnOptions,
6
+ RequestFnResponse,
7
+ } from './lib/requestFn.js';
8
+ import { shelfMerge } from './lib/shelfMerge.js';
9
+
10
+ export type QraftPredefinedParameterValue<T> = T extends () => Promise<infer R>
11
+ ? R | undefined
12
+ : T | undefined;
13
+
14
+ export type InputPredefinedParametersItem<TValue> = {
15
+ requestPattern: string;
16
+ parameters: Array<{
17
+ in: 'header' | 'query' | 'cookie';
18
+ name: string;
19
+ value: QraftPredefinedParameterValue<TValue>;
20
+ }>;
21
+ };
22
+
23
+ type TargetPredefinedParametersMethods =
24
+ | 'get'
25
+ | 'post'
26
+ | 'put'
27
+ | 'patch'
28
+ | 'delete'
29
+ | 'options'
30
+ | 'head'
31
+ | 'trace';
32
+
33
+ export type TargetPredefinedParametersItem = {
34
+ requestPattern: string;
35
+ methods:
36
+ | Array<TargetPredefinedParametersMethods>
37
+ | ReadonlyArray<Readonly<TargetPredefinedParametersMethods>>;
38
+ paths: Array<string> | ReadonlyArray<Readonly<string>>;
39
+ };
40
+
41
+ export function qraftPredefinedParametersRequestFn<
42
+ TInputPredefinedParametersItem extends InputPredefinedParametersItem<any>,
43
+ TData,
44
+ TError,
45
+ >(
46
+ inputPredefinedParameters:
47
+ | Array<TInputPredefinedParametersItem>
48
+ | ReadonlyArray<Readonly<TInputPredefinedParametersItem>>,
49
+ targetPredefinedParameters:
50
+ | Array<TargetPredefinedParametersItem>
51
+ | ReadonlyArray<Readonly<TargetPredefinedParametersItem>>,
52
+ requestFn: RequestFn<TData, TError>
53
+ ): RequestFn<TData, TError> {
54
+ return function predefinedParametersRequestFn(
55
+ schema: OperationSchema,
56
+ requestInfo: RequestFnInfo,
57
+ options?: RequestFnOptions
58
+ ): Promise<RequestFnResponse<TData, TError>> {
59
+ const matchingInputPredefinedParameters =
60
+ targetPredefinedParameters.flatMap((targetParameter) =>
61
+ targetParameter.paths.includes(schema.url) &&
62
+ (!targetParameter.methods.length ||
63
+ targetParameter.methods.includes(schema.method))
64
+ ? inputPredefinedParameters.filter(
65
+ (predefinedParameter) =>
66
+ predefinedParameter.requestPattern ===
67
+ targetParameter.requestPattern
68
+ )
69
+ : []
70
+ );
71
+
72
+ if (!matchingInputPredefinedParameters?.length)
73
+ return requestFn(schema, requestInfo, options);
74
+
75
+ return Promise.all(
76
+ matchingInputPredefinedParameters.map((item) =>
77
+ resolveQraftPredefinedParameters(item.parameters)
78
+ )
79
+ ).then((resolvedPredefinedParameters) => {
80
+ const mergedParameters = resolvedPredefinedParameters.reduce(
81
+ (acc, item) => {
82
+ acc = shelfMerge(2, acc, item);
83
+ return acc;
84
+ },
85
+ {}
86
+ );
87
+
88
+ return requestFn(
89
+ schema,
90
+ {
91
+ ...requestInfo,
92
+ parameters: shelfMerge(2, mergedParameters, requestInfo.parameters),
93
+ },
94
+ options
95
+ );
96
+ });
97
+ };
98
+ }
99
+
100
+ async function resolveQraftPredefinedParameters<T>(
101
+ predefinedParameters: InputPredefinedParametersItem<T>['parameters']
102
+ ) {
103
+ return Promise.all(
104
+ predefinedParameters.map(async (predefinedParameter) => {
105
+ return {
106
+ ...predefinedParameter,
107
+ value: await resolveQraftPredefinedParameterValue(
108
+ predefinedParameter.value
109
+ ),
110
+ };
111
+ })
112
+ ).then((resolvedPredefinedParameters) =>
113
+ resolvedPredefinedParameters
114
+ .filter(
115
+ (resolvedPredefinedParameter) =>
116
+ resolvedPredefinedParameter.value !== undefined
117
+ )
118
+ .reduce(
119
+ (acc, resolvedPredefinedParameter) => {
120
+ acc[resolvedPredefinedParameter.in] =
121
+ acc[resolvedPredefinedParameter.in] ?? {};
122
+
123
+ acc[resolvedPredefinedParameter.in][
124
+ resolvedPredefinedParameter.name
125
+ ] = resolvedPredefinedParameter.value;
126
+
127
+ return acc;
128
+ },
129
+ {} as Record<string, Record<string, unknown>>
130
+ )
131
+ );
132
+ }
133
+
134
+ async function resolveQraftPredefinedParameterValue<T>(
135
+ value: QraftPredefinedParameterValue<T>
136
+ ): Promise<T | undefined> {
137
+ if (value && typeof value === 'function')
138
+ return (await value()) as T | undefined;
139
+ return value as T | undefined;
140
+ }