@orval/query 6.11.0-alpha

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/README.md ADDED
@@ -0,0 +1,28 @@
1
+ [![npm version](https://badge.fury.io/js/orval.svg)](https://badge.fury.io/js/orval)
2
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
3
+ [![tests](https://github.com/anymaniax/orval/actions/workflows/tests.yaml/badge.svg)](https://github.com/anymaniax/orval/actions/workflows/tests.yaml)
4
+
5
+ <p align="center">
6
+ <img src="./logo/orval-logo-horizontal.svg?raw=true" width="500" height="160" alt="orval - Restfull Client Generator" />
7
+ </p>
8
+ <h1 align="center">
9
+ Visit <a href="https://orval.dev" target="_blank">orval.dev</a> for docs, guides, API and beer!
10
+ </h1>
11
+
12
+ ### Code Generation
13
+
14
+ `orval` is able to generate client with appropriate type-signatures (TypeScript) from any valid OpenAPI v3 or Swagger v2 specification, either in `yaml` or `json` formats.
15
+
16
+ `Generate`, `valid`, `cache` and `mock` in your React, Vue, Svelte and Angular applications all with your OpenAPI specification.
17
+
18
+ ### Samples
19
+
20
+ You can find below some samples
21
+
22
+ - [react app](https://github.com/anymaniax/orval/tree/master/samples/react-app)
23
+ - [react query](https://github.com/anymaniax/orval/tree/master/samples/react-query)
24
+ - [svelte query](https://github.com/anymaniax/orval/tree/master/samples/svelte-query)
25
+ - [vue query](https://github.com/anymaniax/orval/tree/master/samples/vue-query)
26
+ - [react app with swr](https://github.com/anymaniax/orval/tree/master/samples/react-app-with-swr)
27
+ - [nx fastify react](https://github.com/anymaniax/orval/tree/master/samples/nx-fastify-react)
28
+ - [angular app](https://github.com/anymaniax/orval/tree/master/samples/angular-app)
@@ -0,0 +1,14 @@
1
+ import { ClientDependenciesBuilder, ClientTitleBuilder, ClientHeaderBuilder, ClientFooterBuilder, ClientBuilder, ClientGeneratorsBuilder } from '@orval/core';
2
+
3
+ declare const getSvelteQueryDependencies: ClientDependenciesBuilder;
4
+ declare const getReactQueryDependencies: ClientDependenciesBuilder;
5
+ declare const getVueQueryDependencies: ClientDependenciesBuilder;
6
+ declare const generateQueryTitle: ClientTitleBuilder;
7
+ declare const generateQueryHeader: ClientHeaderBuilder;
8
+ declare const generateQueryFooter: ClientFooterBuilder;
9
+ declare const generateQuery: ClientBuilder;
10
+ declare const builder: ({ type, }: {
11
+ type: 'react-query' | 'vue-query' | 'svelte-query';
12
+ }) => ClientGeneratorsBuilder;
13
+
14
+ export { builder, builder as default, generateQuery, generateQueryFooter, generateQueryHeader, generateQueryTitle, getReactQueryDependencies, getSvelteQueryDependencies, getVueQueryDependencies };
package/dist/index.js ADDED
@@ -0,0 +1,89 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _core = require('@orval/core');var _lodashomitby = require('lodash.omitby'); var _lodashomitby2 = _interopRequireDefault(_lodashomitby);var B=[{exports:[{name:"axios",default:!0,values:!0,syntheticDefaultImport:!0},{name:"AxiosRequestConfig"},{name:"AxiosResponse"},{name:"AxiosError"}],dependency:"axios"}],ne=[{exports:[{name:"useQuery",values:!0},{name:"useInfiniteQuery",values:!0},{name:"useMutation",values:!0},{name:"UseQueryOptions"},{name:"UseInfiniteQueryOptions"},{name:"UseMutationOptions"},{name:"QueryFunction"},{name:"MutationFunction"},{name:"UseQueryStoreResult"},{name:"UseInfiniteQueryStoreResult"},{name:"QueryKey"}],dependency:"@sveltestack/svelte-query"}],te= exports.getSvelteQueryDependencies =n=>[...n?[]:B,...ne],se=[{exports:[{name:"useQuery",values:!0},{name:"useInfiniteQuery",values:!0},{name:"useMutation",values:!0},{name:"UseQueryOptions"},{name:"UseInfiniteQueryOptions"},{name:"UseMutationOptions"},{name:"QueryFunction"},{name:"MutationFunction"},{name:"UseQueryResult"},{name:"UseInfiniteQueryResult"},{name:"QueryKey"}],dependency:"react-query"}],re=[{exports:[{name:"useQuery",values:!0},{name:"useInfiniteQuery",values:!0},{name:"useMutation",values:!0},{name:"UseQueryOptions"},{name:"UseInfiniteQueryOptions"},{name:"UseMutationOptions"},{name:"QueryFunction"},{name:"MutationFunction"},{name:"UseQueryResult"},{name:"UseInfiniteQueryResult"},{name:"QueryKey"}],dependency:"@tanstack/react-query"}],ie= exports.getReactQueryDependencies =(n,e)=>{var t,y,a,r,f,Q;let s=(a=(t=e==null?void 0:e.dependencies)==null?void 0:t["react-query"])!=null?a:(y=e==null?void 0:e.devDependencies)==null?void 0:y["react-query"],i=(Q=(r=e==null?void 0:e.dependencies)==null?void 0:r["@tanstack/react-query"])!=null?Q:(f=e==null?void 0:e.devDependencies)==null?void 0:f["@tanstack/react-query"];return[...n?[]:B,...s&&!i?se:re]},oe=[{exports:[{name:"useQuery",values:!0},{name:"useInfiniteQuery",values:!0},{name:"useMutation",values:!0}],dependency:"vue-query"},{exports:[{name:"UseQueryOptions"},{name:"UseInfiniteQueryOptions"},{name:"UseMutationOptions"},{name:"QueryFunction"},{name:"MutationFunction"},{name:"UseQueryResult"},{name:"UseInfiniteQueryResult"},{name:"QueryKey"}],dependency:"vue-query/types"},{exports:[{name:"UseQueryReturnType"}],dependency:"vue-query/lib/vue/useBaseQuery"}],ue= exports.getVueQueryDependencies =n=>[...n?[]:B,...oe],ye=({isRequestOptions:n,hasSignal:e})=>n?`options?: AxiosRequestConfig
2
+ `:e?`signal?: AbortSignal
3
+ `:"",pe=({headers:n,queryParams:e,operationName:s,response:i,mutator:t,body:y,props:a,verb:r,formData:f,formUrlEncoded:Q,override:o},{route:R,context:q})=>{var A,C;let g=o.requestOptions!==!1,u=o.formData!==!1,T=o.formUrlEncoded!==!1,l=!!o.query.signal,I=_core.isSyntheticDefaultImportsAllow.call(void 0, q.tsconfig),d=!!((C=(A=q.tsconfig)==null?void 0:A.compilerOptions)!=null&&C.exactOptionalPropertyTypes),c=_core.VERBS_WITH_BODY.includes(r),O=_core.generateFormDataAndUrlEncodedFunction.call(void 0, {formData:f,formUrlEncoded:Q,body:y,isFormData:u,isFormUrlEncoded:T});if(t){let $=_core.generateMutatorConfig.call(void 0, {route:R,body:y,headers:n,queryParams:e,response:i,verb:r,isFormData:u,isFormUrlEncoded:T,isBodyVerb:c,hasSignal:l,isExactOptionalPropertyTypes:d}),x=(t==null?void 0:t.bodyTypeName)&&y.definition?_core.toObjectString.call(void 0, a,"implementation").replace(new RegExp(`(\\w*):\\s?${y.definition}`),`$1: ${t.bodyTypeName}<${y.definition}>`):_core.toObjectString.call(void 0, a,"implementation"),G=g?_core.generateMutatorRequestOptions.call(void 0, o.requestOptions,t.hasSecondArg):"";return t.isHook?`export const use${_core.pascal.call(void 0, s)}Hook = () => {
4
+ const ${s} = ${t.name}<${i.definition.success||"unknown"}>();
5
+
6
+ return (
7
+ ${x}
8
+ ${g&&t.hasSecondArg?`options?: SecondParameter<ReturnType<typeof ${t.name}>>,`:""}${!c&&l?`signal?: AbortSignal
9
+ `:""}) => {${O}
10
+ return ${s}(
11
+ ${$},
12
+ ${G});
13
+ }
14
+ }
15
+ `:`export const ${s} = (
16
+ ${x}
17
+ ${g&&t.hasSecondArg?`options?: SecondParameter<typeof ${t.name}>,`:""}${!c&&l?`signal?: AbortSignal
18
+ `:""}) => {${O}
19
+ return ${t.name}<${i.definition.success||"unknown"}>(
20
+ ${$},
21
+ ${G});
22
+ }
23
+ `}let P=_core.generateOptions.call(void 0, {route:R,body:y,headers:n,queryParams:e,response:i,verb:r,requestOptions:o==null?void 0:o.requestOptions,isFormData:u,isFormUrlEncoded:T,isExactOptionalPropertyTypes:d,hasSignal:l}),D=ye({isRequestOptions:g,hasSignal:l});return`export const ${s} = (
24
+ ${_core.toObjectString.call(void 0, a,"implementation")} ${D} ): Promise<AxiosResponse<${i.definition.success||"unknown"}>> => {${O}
25
+ return axios${I?"":".default"}.${r}(${P});
26
+ }
27
+ `},w={INFINITE:"infiniteQuery",QUERY:"query"},ae=["getNextPageParam","getPreviousPageParam"],le=({params:n,options:e,type:s})=>{var t;if(e===!1)return"";let i=_core.isObject.call(void 0, e)?` ${(t=_core.stringify.call(void 0, _lodashomitby2.default.call(void 0, e,(y,a)=>!!(s!==w.INFINITE&&ae.includes(a)))))==null?void 0:t.slice(1,-1)}`:"";return n.length?`{${!_core.isObject.call(void 0, e)||!e.hasOwnProperty("enabled")?`enabled: !!(${n.map(({name:y})=>y).join(" && ")}),`:""}${i} ...queryOptions}`:e?`{${i} ...queryOptions}`:"queryOptions"},ce=n=>n?n.hasSecondArg&&!n.isHook?`request?: SecondParameter<typeof ${n.name}>`:n.hasSecondArg&&n.isHook?`request?: SecondParameter<ReturnType<typeof ${n.name}>>`:"":"axios?: AxiosRequestConfig",_=({operationName:n,definitions:e,mutator:s,isRequestOptions:i,type:t})=>{let y=s==null?void 0:s.isHook,a=t?`Use${_core.pascal.call(void 0, t)}Options<Awaited<ReturnType<${y?`ReturnType<typeof use${_core.pascal.call(void 0, n)}Hook>`:`typeof ${n}`}>>, TError, TData>`:`UseMutationOptions<Awaited<ReturnType<${y?`ReturnType<typeof use${_core.pascal.call(void 0, n)}Hook>`:`typeof ${n}`}>>, TError,${e?`{${e}}`:"TVariables"}, TContext>`;if(!i)return`${t?"queryOptions":"mutationOptions"}?: ${a}`;let r=ce(s);return`options?: { ${t?"query":"mutation"}?:${a}, ${r}}
28
+ `},$e=({outputClient:n,type:e,isMutatorHook:s,operationName:i})=>{switch(n){case _core.OutputClient.SVELTE_QUERY:return`Use${_core.pascal.call(void 0, e)}StoreResult<Awaited<ReturnType<${s?`ReturnType<typeof use${_core.pascal.call(void 0, i)}Hook>`:`typeof ${i}`}>>, TError, TData, QueryKey>`;case _core.OutputClient.VUE_QUERY:return` UseQueryReturnType<TData, TError, Use${_core.pascal.call(void 0, e)}Result<TData, TError>>`;case _core.OutputClient.REACT_QUERY:default:return` Use${_core.pascal.call(void 0, e)}Result<TData, TError>`}},de=({isRequestOptions:n,mutator:e,isExactOptionalPropertyTypes:s,hasSignal:i})=>!e&&n?i?`{ ${s?"...(signal ? { signal } : {})":"signal"}, ...axiosOptions }`:"axiosOptions":(e==null?void 0:e.hasSecondArg)&&n?i?"requestOptions, signal":"requestOptions":i?"signal":"",fe=({isRequestOptions:n,mutator:e})=>{if(!n)return"";let s="const {query: queryOptions";return e||(s+=", axios: axiosOptions"),e!=null&&e.hasSecondArg&&(s+=", request: requestOptions"),s+="} = options ?? {};",s},Te=({hasQueryParam:n,hasSignal:e})=>!n&&!e?"":n?e?"{ signal, pageParam }":"{ pageParam }":"{ signal }",Qe=({queryOption:{name:n,queryParam:e,options:s,type:i},operationName:t,queryKeyFnName:y,queryProperties:a,queryKeyProperties:r,params:f,props:Q,mutator:o,isRequestOptions:R,response:q,outputClient:g,isExactOptionalPropertyTypes:u,hasSignal:T})=>{let l=_core.toObjectString.call(void 0, Q,"implementation"),I=e?Q.map(({name:$})=>$==="params"?`{ ${e}: pageParam, ...params }`:$).join(","):a,d=$e({outputClient:g,type:i,isMutatorHook:o==null?void 0:o.isHook,operationName:t}),c=`AxiosError<${q.definition.errors||"unknown"}>`;o&&(c=o.hasErrorType?`${o.default?_core.pascal.call(void 0, t):""}ErrorType<${q.definition.errors||"unknown"}>`:q.definition.errors||"unknown");let O=o!=null&&o.isHook?`ReturnType<typeof use${_core.pascal.call(void 0, t)}Hook>`:`typeof ${t}`,P=_({operationName:t,definitions:"",mutator:o,isRequestOptions:R,type:i}),D=de({isRequestOptions:R,isExactOptionalPropertyTypes:u,mutator:o,hasSignal:T}),A=fe({isRequestOptions:R,mutator:o}),C=Te({hasQueryParam:!!e&&Q.some(({type:$})=>$==="queryParam"),hasSignal:T});return`
29
+ export type ${_core.pascal.call(void 0, n)}QueryResult = NonNullable<Awaited<ReturnType<${O}>>>
30
+ export type ${_core.pascal.call(void 0, n)}QueryError = ${c}
31
+
32
+ export const ${_core.camel.call(void 0, `use-${n}`)} = <TData = Awaited<ReturnType<${O}>>, TError = ${c}>(
33
+ ${l} ${P}
34
+ ): ${d} & { queryKey: QueryKey } => {
35
+
36
+ ${A}
37
+
38
+ const queryKey = queryOptions?.queryKey ?? ${y}(${r});
39
+
40
+ ${o!=null&&o.isHook?`const ${t} = use${_core.pascal.call(void 0, t)}Hook();`:""}
41
+
42
+ const queryFn: QueryFunction<Awaited<ReturnType<${o!=null&&o.isHook?`ReturnType<typeof use${_core.pascal.call(void 0, t)}Hook>`:`typeof ${t}`}>>> = (${C}) => ${t}(${I}${I?", ":""}${D});
43
+
44
+ const query = ${_core.camel.call(void 0, `use-${i}`)}<Awaited<ReturnType<${o!=null&&o.isHook?`ReturnType<typeof use${_core.pascal.call(void 0, t)}Hook>`:`typeof ${t}`}>>, TError, TData>(queryKey, queryFn, ${le({params:f,options:s,type:i})}) as ${d} & { queryKey: QueryKey };
45
+
46
+ query.queryKey = queryKey;
47
+
48
+ return query;
49
+ }
50
+ `},Oe=({queryParams:n,operationName:e,body:s,props:i,verb:t,params:y,override:a,mutator:r,response:f,operationId:Q},{route:o,override:{operations:R={}},context:q},g)=>{var D,A,C;let u=a==null?void 0:a.query,T=(a==null?void 0:a.requestOptions)!==!1,l=(D=R[Q])==null?void 0:D.query,I=!!((C=(A=q.tsconfig)==null?void 0:A.compilerOptions)!=null&&C.exactOptionalPropertyTypes);if(t===_core.Verbs.GET||(l==null?void 0:l.useInfinite)||(l==null?void 0:l.useQuery)){let $=i.map(({name:E,type:F})=>F===_core.GetterPropType.BODY?s.implementation:E).join(","),x=i.filter(E=>E.type!==_core.GetterPropType.HEADER).map(({name:E,type:F})=>F===_core.GetterPropType.BODY?s.implementation:E).join(","),G=[...u!=null&&u.useInfinite?[{name:_core.camel.call(void 0, `${e}-infinite`),options:u==null?void 0:u.options,type:w.INFINITE,queryParam:u==null?void 0:u.useInfiniteQueryParam}]:[],...!(u!=null&&u.useQuery)&&!(u!=null&&u.useInfinite)||(u==null?void 0:u.useQuery)?[{name:e,options:u==null?void 0:u.options,type:w.QUERY}]:[]],K=_core.camel.call(void 0, `get-${e}-queryKey`),Y=_core.toObjectString.call(void 0, i.filter(E=>E.type!==_core.GetterPropType.HEADER),"implementation");return`export const ${K} = (${Y}) => [\`${o}\`${n?", ...(params ? [params]: [])":""}${s.implementation?`, ${s.implementation}`:""}];
51
+
52
+ ${G.reduce((E,F)=>E+Qe({queryOption:F,operationName:e,queryKeyFnName:K,queryProperties:$,queryKeyProperties:x,params:y,props:i,mutator:r,isRequestOptions:T,response:f,outputClient:g,isExactOptionalPropertyTypes:I,hasSignal:!!u.signal}),"")}
53
+ `}let d=i.map(({definition:$,type:x})=>x===_core.GetterPropType.BODY?r!=null&&r.bodyTypeName?`data: ${r.bodyTypeName}<${s.definition}>`:`data: ${s.definition}`:$).join(";"),c=i.map(({name:$,type:x})=>x===_core.GetterPropType.BODY?"data":$).join(","),O=`AxiosError<${f.definition.errors||"unknown"}>`;r&&(O=r.hasErrorType?`${r.default?_core.pascal.call(void 0, e):""}ErrorType<${f.definition.errors||"unknown"}>`:f.definition.errors||"unknown");let P=r!=null&&r.isHook?`ReturnType<typeof use${_core.pascal.call(void 0, e)}Hook>`:`typeof ${e}`;return`
54
+ export type ${_core.pascal.call(void 0, e)}MutationResult = NonNullable<Awaited<ReturnType<${P}>>>
55
+ ${s.definition?`export type ${_core.pascal.call(void 0, e)}MutationBody = ${r!=null&&r.bodyTypeName?`${r.bodyTypeName}<${s.definition}>`:s.definition}`:""}
56
+ export type ${_core.pascal.call(void 0, e)}MutationError = ${O}
57
+
58
+ export const ${_core.camel.call(void 0, `use-${e}`)} = <TError = ${O},
59
+ ${d?"":"TVariables = void,"}
60
+ TContext = unknown>(${_({operationName:e,definitions:d,mutator:r,isRequestOptions:T})}) => {
61
+ ${T?`const {mutation: mutationOptions${r?r!=null&&r.hasSecondArg?", request: requestOptions":"":", axios: axiosOptions"}} = options ?? {};`:""}
62
+
63
+ ${r!=null&&r.isHook?`const ${e} = use${_core.pascal.call(void 0, e)}Hook()`:""}
64
+
65
+
66
+ const mutationFn: MutationFunction<Awaited<ReturnType<${P}>>, ${d?`{${d}}`:"TVariables"}> = (${c?"props":""}) => {
67
+ ${c?`const {${c}} = props ?? {};`:""}
68
+
69
+ return ${e}(${c}${c?",":""}${T?r?r!=null&&r.hasSecondArg?"requestOptions":"":"axiosOptions":""})
70
+ }
71
+
72
+ return useMutation<Awaited<ReturnType<typeof ${e}>>, TError, ${d?`{${d}}`:"TVariables"}, TContext>(mutationFn, mutationOptions)
73
+ }
74
+ `},M= exports.generateQueryTitle =()=>"",h= exports.generateQueryHeader =({isRequestOptions:n,isMutator:e,hasAwaitedType:s})=>`${s?"":`type AwaitedInput<T> = PromiseLike<T> | T;
75
+
76
+ type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
77
+
78
+ `}
79
+ ${n&&e?`// eslint-disable-next-line
80
+ type SecondParameter<T extends (...args: any) => any> = T extends (
81
+ config: any,
82
+ args: infer P,
83
+ ) => any
84
+ ? P
85
+ : never;
86
+
87
+ `:""}`,k= exports.generateQueryFooter =()=>"",m= exports.generateQuery =(n,e,s)=>{let i=_core.generateVerbImports.call(void 0, n),t=pe(n,e),y=Oe(n,e,s);return{implementation:`${t}
88
+
89
+ ${y}`,imports:i}},Ee={client:m,header:h,dependencies:ie,footer:k,title:M},Re={client:m,header:h,dependencies:te,footer:k,title:M},qe={client:m,header:h,dependencies:ue,footer:k,title:M},ge= exports.builder =({type:n})=>{switch(n){case"react-query":return Ee;case"vue-query":return qe;case"svelte-query":return Re}},ke= exports.default =ge;exports.builder = ge; exports.default = ke; exports.generateQuery = m; exports.generateQueryFooter = k; exports.generateQueryHeader = h; exports.generateQueryTitle = M; exports.getReactQueryDependencies = ie; exports.getSvelteQueryDependencies = te; exports.getVueQueryDependencies = ue;
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@orval/query",
3
+ "version": "6.11.0-alpha",
4
+ "license": "MIT",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsup ./src/index.ts --target node12 --minify --clean --dts --splitting",
12
+ "dev": "tsup ./src/index.ts --target node12 --clean --watch src",
13
+ "lint": "eslint src/**/*.ts"
14
+ },
15
+ "dependencies": {
16
+ "@orval/core": "*",
17
+ "lodash.omitby": "^4.6.0"
18
+ },
19
+ "devDependencies": {
20
+ "@types/lodash.omitby": "^4.6.7"
21
+ }
22
+ }