@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 +28 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +89 -0
- package/package.json +22 -0
package/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
[](https://badge.fury.io/js/orval)
|
|
2
|
+
[](https://opensource.org/licenses/MIT)
|
|
3
|
+
[](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)
|
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
}
|