@acrool/rtk-query-codegen-openapi 1.4.0-alpha.1 → 1.4.0-alpha.2
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/lib/bin/cli.mjs +95 -47
- package/lib/bin/cli.mjs.map +1 -1
- package/lib/index.js +79 -21
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +79 -21
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/generators/common-types-generator.ts +51 -2
- package/src/generators/rtk-query-generator.ts +37 -20
package/lib/bin/cli.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
2
|
+
var z=Object.defineProperty;var De=Object.getOwnPropertyDescriptor;var Fe=Object.getOwnPropertyNames;var je=Object.prototype.hasOwnProperty;var X=(n,e)=>()=>(n&&(e=n(n=0)),e);var Ie=(n,e)=>{for(var t in e)z(n,t,{get:e[t],enumerable:!0})},qe=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Fe(e))!je.call(n,o)&&o!==t&&z(n,o,{get:()=>e[o],enumerable:!(r=De(e,o))||r.enumerable});return n};var Ge=n=>qe(z({},"__esModule",{value:!0}),n);import{fileURLToPath as Me}from"node:url";var ke,y,c=X(()=>{"use strict";ke=()=>Me(import.meta.url),y=ke()});var be={};Ie(be,{argumentMatches:()=>tt,defaultIsDataResponse:()=>Xe,getOperationName:()=>K,getOverrides:()=>H,getTags:()=>et,operationMatches:()=>he});import{getOperationName as Je}from"oazapfts/generate";function Xe(n,e){if(e&&n==="default")return!0;let t=Number(n);return!Number.isNaN(t)&&t>=200&&t<300}function K({verb:n,path:e}){return Je(n,e,void 0)}function et({verb:n,pathItem:e}){return n?e[n]?.tags||[]:[]}function de(n){let e=Array.isArray(n)?n:[n];return function(r){return n?e.some(o=>typeof o=="string"?o===r:o?.test(r)):!0}}function he(n){let e=typeof n=="function"?n:de(n);return function(r){if(!n)return!0;let o=K(r);return e(o,r)}}function tt(n){let e=typeof n=="function"?n:de(n);return function(r){if(!n||r.in==="path")return!0;let o=r.name;return e(o,r)}}function H(n,e){return e?.find(t=>he(t.pattern)(n))}var Z=X(()=>{"use strict";c()});c();import L from"commander";import{createRequire as bt}from"node:module";c();import Ke from"commander";import{createRequire as Ue}from"node:module";import{resolve as ee}from"node:path";import{existsSync as _,rmSync as Ve,readdirSync as Qe,statSync as We,mkdirSync as Le}from"node:fs";import te from"node:path";var E=Ue(y);function ze(n){let e=new Map;if(!_(n))return e;function t(r){try{let o=Qe(r);for(let i of o){let s=te.join(r,i);if(We(s).isDirectory())t(s);else if(i==="enhanceEndpoints.ts"){let p=E("node:fs").readFileSync(s);e.set(s,p)}}}catch{}}return t(n),e}function _e(n){for(let[e,t]of n)try{let r=te.dirname(e);_(r)||Le(r,{recursive:!0}),E("node:fs").writeFileSync(e,t)}catch(r){console.warn(`Failed to restore ${e}:`,r)}}function ne(n){let e=["/","/usr","/etc","/var","/home","/Users",".",".."],t=ee(n);if(e.some(r=>t===ee(r))&&(console.error(`Dangerous path detected: ${t}. Refusing to delete.`),process.exit(1)),_(n)){console.log(`Cleaning output directory: ${n}`);let r=ze(n);Ve(n,{recursive:!0,force:!0}),r.size>0&&(_e(r),console.log(`Protected ${r.size} enhanceEndpoints.ts file(s) from deletion`)),console.log(`Directory cleaned: ${n}`)}}function re(){try{if(E.resolve("esbuild")&&E.resolve("esbuild-runner"))return E("esbuild-runner/register"),!0}catch{}try{if(E.resolve("typescript")&&E.resolve("ts-node"))return E("ts-node").register({transpileOnly:!0,compilerOptions:{target:"es6",module:"commonjs"}}),!0}catch{}return!1}function oe(n){(!n||!/\.([mc]?(jsx?|tsx?)|jsonc?)?$/.test(n))&&(console.error("Please provide a valid configuration file."),Ke.help())}function ie(n,e){/\.[mc]?tsx?$/.test(n)&&!e&&(console.error("Encountered a TypeScript config file, but neither esbuild-runner nor ts-node are installed."),process.exit(1))}import{dirname as Ot,resolve as Tt}from"node:path";c();c();import j from"node:path";import we from"typescript";c();c();function q(n){return n.replace(n[0],n[0].toUpperCase())}c();import B from"node:fs";import Be from"node:path";c();function se(n){try{new URL(n)}catch{return!1}return!0}async function ae(n,e){if(!se(n))throw new Error(`remoteFile must be a valid URL: ${n}`);try{let t=Be.dirname(e);B.existsSync(t)||await B.promises.mkdir(t,{recursive:!0});let r=await fetch(n);if(!r.ok)throw new Error(`Failed to download schema from ${n}: ${r.statusText}`);let o=await r.text();return await B.promises.writeFile(e,o,"utf-8"),console.log(`Schema downloaded from ${n} to ${e}`),e}catch(t){throw console.error(`Error downloading schema from ${n}:`,t),t}}c();c();var pe=["get","put","post","delete","options","head","patch","trace"];function ce(n){return Object.entries(n.paths).flatMap(([e,t])=>t?Object.entries(t).filter(r=>pe.includes(r[0])).map(([r,o])=>({path:e,verb:r,pathItem:t,operation:o})):[])}c();import He from"@apidevtools/swagger-parser";import Ze from"swagger2openapi";async function ue(n,e){let t=await He.bundle(n,{resolve:{http:e}});return"openapi"in t&&t.openapi.startsWith("3")?t:(await Ze.convertObj(t,{})).openapi}c();function le(n,e,t,r){return r?r(n,e):t?.type?t.type==="query":n==="get"}var G=class{docCache={};async getDocument(e,t){if(this.docCache[e])return this.docCache[e];let r=await ue(e,t);return this.docCache[e]=r,r}async downloadSchema(e,t){return ae(e,t)}getPaths(e){return Object.keys(e.paths||{})}clearCache(){this.docCache={}}};c();import me from"lodash.camelcase";var M=class{groupPaths(e,t){let{groupKeyMatch:r,outputDir:o}=t,i=e.reduce((a,p)=>{let l=r(p),m=l?me(l):"_common";return a[m]||(a[m]=[]),a[m].push(p),a},{}),s={};for(let[a,p]of Object.entries(i))s[a]={groupKey:a,paths:p,outputPath:`${o}/${a}/query.service.ts`};return s}createGroupFilter(e,t){return(r,o)=>{let i=o.path,s=me(t.groupKeyMatch(i)||"");return s!==e&&(s||"_common")!==e?!1:t.filterEndpoint?t.filterEndpoint(r,i,e):!0}}};c();import ye from"node:fs";import $ from"node:path";c();import Ye from"node:path";import fe from"node:fs";async function ge(n){let e=Ye.dirname(n);fe.existsSync(e)||await fe.promises.mkdir(e,{recursive:!0})}var k=class{async writeFile(e,t){try{let r=$.resolve(process.cwd(),e);return $.basename(r)==="enhanceEndpoints.ts"&&ye.existsSync(r)?{path:r,success:!0}:(await ge(r),ye.writeFileSync(r,t),{path:r,success:!0})}catch(r){return{path:e,success:!1,error:r}}}async writeFiles(e){let t=[];for(let[r,o]of Object.entries(e)){let i=await this.writeFile(r,o);t.push(i)}return t}async writeGroupFiles(e,t){let r={};return t.types&&(r[$.join(e,"types.ts")]=t.types),t.queryService&&(r[$.join(e,"query.generated.ts")]=t.queryService),t.enhanceEndpoints&&(r[$.join(e,"enhanceEndpoints.ts")]=t.enhanceEndpoints),t.index&&(r[$.join(e,"index.ts")]=t.index),this.writeFiles(r)}async writeSharedFiles(e,t){let r={};return t.commonTypes&&(r[$.join(e,"common-types.ts")]=t.commonTypes),t.doNotModify&&(r[$.join(e,"DO_NOT_MODIFY.md")]=t.doNotModify),t.utils&&(r[$.join(e,"utils.ts")]=t.utils),this.writeFiles(r)}async writeSchemaFile(e,t){let r={};return r[$.join(e,"schema.ts")]=t,this.writeFiles(r)}};c();import nt from"oazapfts/generate";var U=class{constructor(e,t){this.v3Doc=e;this.apiGen=new nt(e,{unionUndefined:t.unionUndefined,mergeReadWriteOnly:t.mergeReadWriteOnly})}apiGen;initialize(){this.apiGen.spec.components?.schemas&&(Object.keys(this.apiGen.spec.components.schemas).forEach(e=>{let t=this.apiGen.spec.components.schemas[e];t&&typeof t=="object"&&"title"in t&&delete t.title}),this.apiGen.preprocessComponents(this.apiGen.spec.components.schemas),Object.keys(this.apiGen.spec.components.schemas).forEach(e=>{try{this.apiGen.getRefAlias({$ref:`#/components/schemas/${e}`})}catch{}}))}getOperationDefinitions(e){let{operationMatches:t}=(Z(),Ge(be));return ce(this.v3Doc).filter(t(e))}getApiGenerator(){return this.apiGen}getDocument(){return this.v3Doc}getSchemaTypeNames(){return new Set}};c();function Oe(){return`/* eslint-disable */
|
|
3
3
|
// [Warning] Generated automatically - do not edit manually
|
|
4
4
|
|
|
5
5
|
export interface RequestOptions {
|
|
@@ -14,21 +14,70 @@ export interface IRequestConfig {
|
|
|
14
14
|
timeout?: number;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export type IRestFulEndpointsQueryReturn<TVariables> = TVariables extends void ?
|
|
18
|
-
void | {fetchOptions?: IRequestConfig;}:
|
|
17
|
+
export type IRestFulEndpointsQueryReturn<TVariables> = TVariables extends void ?
|
|
18
|
+
void | {fetchOptions?: IRequestConfig;}:
|
|
19
19
|
{
|
|
20
20
|
variables: TVariables;
|
|
21
21
|
fetchOptions?: IRequestConfig;
|
|
22
22
|
};
|
|
23
|
-
|
|
23
|
+
|
|
24
|
+
export type UseSimpleQuery<TRes, TArg = void> = (
|
|
25
|
+
arg: TArg,
|
|
26
|
+
options?: {
|
|
27
|
+
skip?: boolean;
|
|
28
|
+
pollingInterval?: number;
|
|
29
|
+
refetchOnMountOrArgChange?: boolean | number;
|
|
30
|
+
refetchOnFocus?: boolean;
|
|
31
|
+
refetchOnReconnect?: boolean;
|
|
32
|
+
}
|
|
33
|
+
) => {
|
|
34
|
+
data: TRes | undefined;
|
|
35
|
+
currentData: TRes | undefined;
|
|
36
|
+
isLoading: boolean;
|
|
37
|
+
isFetching: boolean;
|
|
38
|
+
isSuccess: boolean;
|
|
39
|
+
isError: boolean;
|
|
40
|
+
isUninitialized: boolean;
|
|
41
|
+
error: unknown;
|
|
42
|
+
refetch: () => void;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export type UseSimpleMutation<TRes, TArg = void> = () => [
|
|
46
|
+
(arg: TArg) => {unwrap: () => Promise<TRes>} & PromiseLike<{data: TRes} | {error: unknown}>,
|
|
47
|
+
{
|
|
48
|
+
data: TRes | undefined;
|
|
49
|
+
isLoading: boolean;
|
|
50
|
+
isSuccess: boolean;
|
|
51
|
+
isError: boolean;
|
|
52
|
+
isUninitialized: boolean;
|
|
53
|
+
error: unknown;
|
|
54
|
+
reset: () => void;
|
|
55
|
+
}
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
export type UseSimpleLazyQuery<TRes, TArg = void> = () => [
|
|
59
|
+
(arg: TArg, preferCacheValue?: boolean) => void,
|
|
60
|
+
{
|
|
61
|
+
data: TRes | undefined;
|
|
62
|
+
currentData: TRes | undefined;
|
|
63
|
+
isLoading: boolean;
|
|
64
|
+
isFetching: boolean;
|
|
65
|
+
isSuccess: boolean;
|
|
66
|
+
isError: boolean;
|
|
67
|
+
isUninitialized: boolean;
|
|
68
|
+
error: unknown;
|
|
69
|
+
},
|
|
70
|
+
{lastArg: TArg | undefined}
|
|
71
|
+
];
|
|
72
|
+
`}c();import v from"typescript";function rt(n){return n.charAt(0).toUpperCase()+n.slice(1)}function ot(n,e,t){return v.transform(n,[r=>o=>v.visitNode(o,function i(s){return v.isIdentifier(s)&&s.text===e?v.factory.createIdentifier(t):v.visitEachChild(s,i,r)})]).transformed[0]}function it(n){if(!v.isUnionTypeNode(n.type))return null;let e=[];for(let t of n.type.types)if(v.isLiteralTypeNode(t)&&v.isStringLiteral(t.literal))e.push(t.literal.text);else return null;return e.length>0?e:null}function st(n,e){let t=e.map(r=>` ${r.charAt(0).toUpperCase()+r.slice(1)} = "${r}"`);return`export enum ${n} {
|
|
24
73
|
${t.join(`,
|
|
25
74
|
`)}
|
|
26
|
-
}`}function
|
|
75
|
+
}`}function Te(n,e){let t=v.createPrinter({newLine:v.NewLineKind.LineFeed}),r=v.createSourceFile("component-schema.ts","",v.ScriptTarget.Latest,!1,v.ScriptKind.TS),o=[],i={};return Object.entries(n).forEach(([s,a])=>{let p=rt(s);if(i[s]=p,e&&!e.has(s))return;if(v.isTypeAliasDeclaration(a)){let f=it(a);if(f){o.push(st(p,f));return}}let l=ot(a,s,p),m=t.printNode(v.EmitHint.Unspecified,l,r);o.push(m)}),`/* eslint-disable */
|
|
27
76
|
// [Warning] Generated automatically - do not edit manually
|
|
28
77
|
|
|
29
78
|
${o.join(`
|
|
30
79
|
`)}
|
|
31
|
-
`}
|
|
80
|
+
`}c();function Se(){return`# \u8ACB\u52FF\u4FEE\u6539\u6B64\u8CC7\u6599\u593E
|
|
32
81
|
|
|
33
82
|
\u26A0\uFE0F **\u91CD\u8981\u63D0\u9192\uFF1A\u8ACB\u52FF\u4FEE\u6539\u6B64\u8CC7\u6599\u593E\u4E2D\u7684\u4EFB\u4F55\u6A94\u6848**
|
|
34
83
|
|
|
@@ -47,51 +96,54 @@ ${o.join(`
|
|
|
47
96
|
\u9019\u4E9B\u6A94\u6848\u662F\u7531 @acrool/rtk-query-codegen-openapi \u7522\u751F\u5668\u6240\u5EFA\u7ACB\u3002
|
|
48
97
|
|
|
49
98
|
\u5982\u6709\u7591\u554F\uFF0C\u8ACB\u53C3\u8003\u5C08\u6848\u6587\u4EF6\u6216\u806F\u7E6B\u958B\u767C\u5718\u968A\u3002
|
|
50
|
-
`}
|
|
99
|
+
`}c();import Pe from"typescript";c();Z();import{supportDeepObjects as at}from"oazapfts/generate";var F=class{constructor(e){this.options=e}extractEndpointInfos(e){return e.map(t=>this.extractSingleEndpointInfo(t))}extractSingleEndpointInfo(e){let{verb:t,path:r,operation:o}=e,{operationNameSuffix:i="",argSuffix:s="Req",responseSuffix:a="Res",queryMatch:p,endpointOverrides:l}=this.options,m=K({verb:t,path:r}),f=i?q(m+i):m,g=q(m+i+s),O=q(m+i+a),b=le(t,r,H(e,l),p),T=`${m.replace(/([A-Z])/g,"_$1").toUpperCase()}`,C=o.summary||`${t.toUpperCase()} ${r}`,{queryParams:u,pathParams:A,isVoidArg:P,hasRequestBody:S}=this.extractParameters(e),x=this.extractContentType(o),N=Array.isArray(o.tags)?o.tags:[];return{operationName:f,argTypeName:g,responseTypeName:O,isQuery:b,verb:t.toUpperCase(),path:r,queryKeyName:T,queryParams:u,pathParams:A,isVoidArg:P,summary:C,contentType:x,hasRequestBody:S,tags:N}}extractParameters(e){let{operation:t,pathItem:r}=e,o=this.resolveArray(t.parameters),i=this.resolveArray(r.parameters).filter(f=>!o.some(g=>g.name===f.name&&g.in===f.in)),s=at([...i,...o]).filter(f=>f.in!=="header"),a=s.filter(f=>f.in==="query"),p=s.filter(f=>f.in==="path"),l=!!t.requestBody,m=a.length===0&&p.length===0&&!t.requestBody;return{queryParams:a,pathParams:p,isVoidArg:m,hasRequestBody:l}}resolveArray(e){return e?Array.isArray(e)?e:[e]:[]}extractContentType(e){if(!e.requestBody)return"application/json";let t=e.requestBody.content;if(!t||typeof t!="object")return"application/json";let r=Object.keys(t);return r.length===0?"application/json":r[0]}};c();import h from"typescript";var Y=n=>n.charAt(0).toUpperCase()+n.slice(1);function pt(n,e,t){return h.transform(n,[r=>o=>h.visitNode(o,function i(s){return h.isIdentifier(s)&&s.text===e?h.factory.createIdentifier(t):h.visitEachChild(s,i,r)})]).transformed[0]}function ct(n,e,t,r){let o=new Set;for(let i of e)t.has(i)||o.add(Y(i));return h.transform(n,[i=>s=>h.visitNode(s,function a(p){if(h.isTypeReferenceNode(p)&&h.isIdentifier(p.typeName)){let l=p.typeName.text;if(o.has(l)&&l!==r){let m=h.factory.createQualifiedName(h.factory.createIdentifier("Schema"),h.factory.createIdentifier(l));return h.factory.createTypeReferenceNode(m,p.typeArguments)}}return h.visitEachChild(p,a,i)})]).transformed[0]}function ut(n){if(!h.isUnionTypeNode(n.type))return null;let e=[];for(let t of n.type.types)if(h.isLiteralTypeNode(t)&&h.isStringLiteral(t.literal))e.push(t.literal.text);else return null;return e.length>0?e:null}function lt(n,e){let t=e.map(r=>` ${r.charAt(0).toUpperCase()+r.slice(1)} = "${r}"`);return`export enum ${n} {
|
|
51
100
|
${t.join(`,
|
|
52
101
|
`)}
|
|
53
|
-
}`}function
|
|
102
|
+
}`}function V(n,e,t,r,o){let i=o?.localSchemaNames??new Set,s=o?.localSchemaInterfaces??{},a={};t&&Object.keys(t).forEach(g=>{if(a[g]=g,g.endsWith("Vo")){let O=g.slice(0,-2)+"VO";a[O]=g}if(g.endsWith("Dto")){let O=g.slice(0,-3)+"DTO";a[O]=g}});let p=t&&Object.keys(t).some(g=>!i.has(g)),l=`/* eslint-disable */
|
|
54
103
|
// [Warning] Generated automatically - do not edit manually
|
|
55
104
|
|
|
56
|
-
`;
|
|
57
|
-
`),
|
|
58
|
-
`;let
|
|
59
|
-
`))}let
|
|
60
|
-
`)),
|
|
105
|
+
`;p&&(l+=`import * as Schema from "../schema";
|
|
106
|
+
`),l+=`
|
|
107
|
+
`;let m=[];if(Object.keys(s).length>0){let g=h.createPrinter({newLine:h.NewLineKind.LineFeed}),O=h.createSourceFile("types.ts","",h.ScriptTarget.Latest,!1,h.ScriptKind.TS),b=[],T=new Set(t?Object.keys(t):[]);for(let[C,u]of Object.entries(s)){let A=Y(C);if(h.isTypeAliasDeclaration(u)){let x=ut(u);if(x){b.push(lt(A,x));continue}}let P=pt(u,C,A);P=ct(P,T,i,A);let S=g.printNode(h.EmitHint.Unspecified,P,O);b.push(S)}b.length>0&&m.push(b.join(`
|
|
108
|
+
`))}let f=[];return n.forEach(g=>{let O=g.argTypeName,b=g.responseTypeName;if(O){let T=mt(g,r,a,i);T.trim()===""?f.push(`export type ${O} = void;`,""):f.push(`export type ${O} = {`,T,"};","")}if(b){let T=ft(g,r,a,i);T.content.trim()===""?f.push(`export type ${b} = void;`,""):T.isDirectType?f.push(`export type ${b} = ${T.content};`,""):f.push(`export type ${b} = {`,T.content,"};","")}}),f.length>0&&m.push(f.join(`
|
|
109
|
+
`)),m.length===0&&m.push("// \u6B64\u6A94\u6848\u7528\u65BC\u5B9A\u7FA9 API \u76F8\u95DC\u7684\u985E\u578B","// \u985E\u578B\u5B9A\u7FA9\u6703\u6839\u64DA OpenAPI Schema \u81EA\u52D5\u751F\u6210",""),l+m.join(`
|
|
61
110
|
|
|
62
|
-
`)}function
|
|
63
|
-
`)}function
|
|
64
|
-
`),isDirectType:!1}}}}return{content:"",isDirectType:!1}}function
|
|
65
|
-
${
|
|
111
|
+
`)}function mt(n,e,t={},r=new Set){let o=[];n.queryParams&&n.queryParams.length>0&&n.queryParams.forEach(s=>{let a=s.required?"":"?",p=ve(s,t,r);o.push(` ${s.name}${a}: ${p};`)}),n.pathParams&&n.pathParams.length>0&&n.pathParams.forEach(s=>{let a=s.required?"":"?",p=ve(s,t,r);o.push(` ${s.name}${a}: ${p};`)});let i=e?.find(s=>s.operation?.operationId===n.operationName||s.operation?.operationId===n.operationName.toLowerCase()||s.verb===n.verb.toLowerCase()&&s.path===n.path);if(i?.operation?.requestBody){let a=i.operation.requestBody.content,p=a["application/json"]||a["*/*"],l=a["multipart/form-data"]||a["application/x-www-form-urlencoded"];if(p?.schema){let m=R(p.schema,t,1,r);o.push(` body: ${m};`)}else if(l?.schema){let m=R(l.schema,t,1,r);o.push(` body: ${m};`)}else{let m=Object.values(a)[0];if(m?.schema){let f=R(m.schema,t,1,r);o.push(` body: ${f};`)}else o.push(" body?: any; // Request body from OpenAPI")}}return o.length===0?"":o.join(`
|
|
112
|
+
`)}function ft(n,e,t={},r=new Set){let o=e?.find(i=>i.operation?.operationId===n.operationName||i.operation?.operationId===n.operationName.toLowerCase()||i.verb===n.verb.toLowerCase()&&i.path===n.path);if(o?.operation?.responses){let i=o.operation.responses[200]||o.operation.responses[201];if(i?.content){let s=i.content["application/json"]||i.content["*/*"]||Object.values(i.content)[0];if(s?.schema){let a=s.schema;if(a.$ref||a.type!=="object"||!a.properties){let l=R(a,t,0,r);if(l&&l!=="any")return{content:l,isDirectType:!0}}let p=gt(a,t,r);if(p.length>0)return{content:p.join(`
|
|
113
|
+
`),isDirectType:!1}}}}return{content:"",isDirectType:!1}}function gt(n,e={},t=new Set){let r=[];if(n.type==="object"&&n.properties){let o=n.required||[];Object.entries(n.properties).forEach(([i,s])=>{let p=o.includes(i)?"":"?",l=R(s,e,1,t),f=/[^a-zA-Z0-9_$]/.test(i)?`"${i}"`:i;s.description&&r.push(` /** ${s.description} */`),r.push(` ${f}${p}: ${l};`)})}return r}function R(n,e={},t=0,r=new Set){if(!n)return"any";if(n.$ref){let i=n.$ref;if(i.startsWith("#/components/schemas/")){let s=i.replace("#/components/schemas/",""),a=e[s]||s,p=Y(a),l=r.has(s)?p:`Schema.${p}`;return n.nullable?`${l} | null`:l}}let o;switch(n.type){case"string":n.enum?o=n.enum.map(a=>`"${a}"`).join(" | "):n.format==="binary"?o="Blob":o="string";break;case"number":case"integer":o="number";break;case"boolean":o="boolean";break;case"array":let i=n.items?R(n.items,e,t,r):"any";o=i.includes("|")?`(${i})[]`:`${i}[]`;break;case"object":if(n.properties){let a=Object.entries(n.properties);if(a.length===0)n.additionalProperties?o=`Record<string, ${n.additionalProperties===!0?"any":R(n.additionalProperties,e,t,r)}>`:o="{}";else{let p=" ".repeat(t+1),l=" ".repeat(t),m=[];a.forEach(([f,g])=>{let b=(n.required||[]).includes(f)?"":"?",T=R(g,e,t+1,r),u=/[^a-zA-Z0-9_$]/.test(f)?`"${f}"`:f;g.description&&m.push(`${p}/** ${g.description} */`),m.push(`${p}${u}${b}: ${T};`)}),o=`{
|
|
114
|
+
${m.join(`
|
|
66
115
|
`)}
|
|
67
|
-
${
|
|
116
|
+
${l}}`}}else n.additionalProperties?o=`Record<string, ${n.additionalProperties===!0?"any":R(n.additionalProperties,e,t,r)}>`:o="any";break;default:o="any";break}return n.nullable?`${o} | null`:o}function ve(n,e={},t=new Set){return n.schema?R(n.schema,e,0,t):"any"}c();function xe(n,e){let{groupKey:t}=e,r=e.httpClient?.importReturnTypeName||"IRestFulEndpointsQueryReturn",o=n.map(u=>{let A=u.isQuery?"query":"mutation",P=u.isVoidArg?"void":`${r}<${u.argTypeName}>`,S=u.path;u.pathParams&&u.pathParams.length>0?(u.pathParams.forEach(D=>{S=S.replace(`{${D.name}}`,`\${queryArg.variables.${D.name}}`)}),S="`"+S+"`"):S=`"${S}"`;let x="";u.queryParams&&u.queryParams.length>0&&(x=`
|
|
68
117
|
params: {
|
|
69
|
-
${
|
|
118
|
+
${u.queryParams.map(I=>` ${I.name}: queryArg.variables.${I.name},`).join(`
|
|
70
119
|
`)}
|
|
71
|
-
},`);let
|
|
72
|
-
providesTags: [${
|
|
73
|
-
invalidatesTags: (result, error) => error ? [] : [${
|
|
74
|
-
${
|
|
75
|
-
${
|
|
76
|
-
${
|
|
77
|
-
>({${
|
|
120
|
+
},`);let N="";if(u.tags&&u.tags.length>0){let D=u.tags.map(I=>`ECacheTagTypes.${I.split(/\s+/).map(J=>J.charAt(0).toUpperCase()+J.slice(1)).join("")}`).join(", ");u.isQuery?N=`
|
|
121
|
+
providesTags: [${D}],`:N=`
|
|
122
|
+
invalidatesTags: (result, error) => error ? [] : [${D}],`}return` /** ${u.summary||u.operationName} */
|
|
123
|
+
${u.operationName}: build.${A}<
|
|
124
|
+
${u.responseTypeName},
|
|
125
|
+
${P}
|
|
126
|
+
>({${N}
|
|
78
127
|
query: (queryArg) => ({
|
|
79
|
-
url: ${
|
|
80
|
-
method: "${
|
|
81
|
-
contentType: "${
|
|
82
|
-
body: queryArg.variables.body,`:""}${
|
|
128
|
+
url: ${S},
|
|
129
|
+
method: "${u.verb.toUpperCase()}",
|
|
130
|
+
contentType: "${u.contentType}",${x}${u.hasRequestBody?`
|
|
131
|
+
body: queryArg.variables.body,`:""}${u.isVoidArg?"":`
|
|
83
132
|
fetchOptions: queryArg?.fetchOptions,`}
|
|
84
133
|
}),
|
|
85
134
|
}),`}).join(`
|
|
86
|
-
`),i=[...new Set([...n.map(
|
|
135
|
+
`),i=[...new Set([...n.map(u=>u.argTypeName),...n.map(u=>u.responseTypeName)])].filter(u=>u!=="VoidApiArg"),s=i.length>0?`import type { ${i.join(", ")} } from "./types";`:"",a=e.apiConfiguration?`import {${e.apiConfiguration.importName} as api} from "${e.apiConfiguration.file.replace(/\.ts$/,"")}";
|
|
87
136
|
`:`import {baseApi as api} from "../../../library/redux/baseApi";
|
|
88
|
-
`,
|
|
137
|
+
`,p=e.httpClient?`import {${e.httpClient.importReturnTypeName}} from "${e.httpClient.file}";
|
|
89
138
|
`:`import {IRestFulEndpointsQueryReturn} from "@acrool/react-fetcher";
|
|
90
|
-
`,
|
|
91
|
-
`:"";
|
|
139
|
+
`,m=n.some(u=>u.tags&&u.tags.length>0)?`import {ECacheTagTypes} from "../tagTypes";
|
|
140
|
+
`:"",f=n.some(u=>u.isQuery),g=f&&!!e.useLazyQueries,O=n.some(u=>!u.isQuery),b=[];f&&b.push("UseSimpleQuery"),O&&b.push("UseSimpleMutation"),g&&b.push("UseSimpleLazyQuery");let T=b.length>0?`import type { ${b.join(", ")} } from "../common-types";
|
|
141
|
+
`:"",C=n.map(u=>{let A=u.operationName.charAt(0).toUpperCase()+u.operationName.slice(1),P=u.isVoidArg?"void":`${r}<${u.argTypeName}>`,S=[];if(u.isQuery){let x=`use${A}Query`;if(S.push(`export const ${x} = injectedRtkApi.${x} as UseSimpleQuery<${u.responseTypeName}, ${P}>;`),e.useLazyQueries){let N=`useLazy${A}Query`;S.push(`export const ${N} = injectedRtkApi.${N} as UseSimpleLazyQuery<${u.responseTypeName}, ${P}>;`)}}else{let x=`use${A}Mutation`;S.push(`export const ${x} = injectedRtkApi.${x} as UseSimpleMutation<${u.responseTypeName}, ${P}>;`)}return S.join(`
|
|
142
|
+
`)}).join(`
|
|
143
|
+
`);return`/* eslint-disable */
|
|
92
144
|
// [Warning] Generated automatically - do not edit manually
|
|
93
145
|
|
|
94
|
-
${a}${
|
|
146
|
+
${a}${p}${m}${T}
|
|
95
147
|
${s}
|
|
96
148
|
|
|
97
149
|
|
|
@@ -101,14 +153,10 @@ ${o}
|
|
|
101
153
|
}),
|
|
102
154
|
});
|
|
103
155
|
|
|
104
|
-
|
|
105
|
-
${n.map(p=>{let f=p.operationName.charAt(0).toUpperCase()+p.operationName.slice(1);if(p.isQuery){let h=`use${f}Query`;if(e.useLazyQueries){let y=`useLazy${f}Query`;return` ${h},
|
|
106
|
-
${y},`}else return` ${h},`}else return` ${`use${f}Mutation`},`}).join(`
|
|
107
|
-
`)}
|
|
108
|
-
} = injectedRtkApi;
|
|
156
|
+
${C}
|
|
109
157
|
|
|
110
158
|
export default injectedRtkApi;
|
|
111
|
-
`}
|
|
159
|
+
`}c();function Ae(n,e){return`/* eslint-disable */
|
|
112
160
|
// [Warning] Generated automatically - do not edit manually
|
|
113
161
|
|
|
114
162
|
import api from "./query.generated";
|
|
@@ -125,13 +173,13 @@ ${n.map(o=>o.isQuery?` ${o.operationName}: {
|
|
|
125
173
|
});
|
|
126
174
|
|
|
127
175
|
export default enhancedApi;
|
|
128
|
-
`}var
|
|
176
|
+
`}var Q=class{constructor(e,t){this.parserService=e;this.options=t;this.infoExtractor=new F(t)}infoExtractor;async generate(){let e=this.parserService.getOperationDefinitions(this.options.filterEndpoints),t=this.infoExtractor.extractEndpointInfos(e);return this.generateRtkQueryCode(t)}generateRtkQueryCode(e){let t=this.generateTypes(e),r=xe(e,this.options),o=Ae(e,this.options),i=this.generateIndex(),s=e.map(p=>p.operationName),a=new Set;return e.forEach(p=>{p.tags&&Array.isArray(p.tags)&&p.tags.forEach(l=>a.add(l))}),{operationNames:s,tags:Array.from(a),files:{types:t,queryService:r,index:i,enhanceEndpoints:o}}}generateTypes(e){let t={...this.options,apiConfiguration:this.options.apiConfiguration||{file:"@/store/webapi",importName:"WebApiConfiguration"}},o=this.parserService.getApiGenerator().aliases.reduce((s,a)=>{if(Pe.isInterfaceDeclaration(a)||Pe.isTypeAliasDeclaration(a)){let p=a.name.text;return{...s,[p]:a}}return s},{}),i=this.parserService.getOperationDefinitions(this.options.filterEndpoints);return V(e,t,o,i)}generateIndex(){let e=this.options.groupKey||"";return`/* eslint-disable */
|
|
129
177
|
// [Warning] Generated automatically - do not edit manually
|
|
130
178
|
|
|
131
179
|
export { default as ${e?`${e.charAt(0).toLowerCase()+e.slice(1)}Api`:"api"} } from "./enhanceEndpoints";
|
|
132
180
|
export * from "./query.generated";
|
|
133
181
|
export * from "./types";
|
|
134
|
-
`}};
|
|
182
|
+
`}};c();function Ce(){return`/* eslint-disable */
|
|
135
183
|
// [Warning] Generated automatically - do not edit manually
|
|
136
184
|
|
|
137
185
|
/**
|
|
@@ -144,7 +192,7 @@ export function withoutUndefined(obj?: Record<string, any>) {
|
|
|
144
192
|
);
|
|
145
193
|
}
|
|
146
194
|
|
|
147
|
-
`}
|
|
195
|
+
`}c();function yt(n){return n.split(/\s+/).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")}function $e(n){return n.length===0?`/* eslint-disable */
|
|
148
196
|
// [Warning] Generated automatically - do not edit manually
|
|
149
197
|
|
|
150
198
|
export enum ECacheTagTypes {
|
|
@@ -153,14 +201,14 @@ export enum ECacheTagTypes {
|
|
|
153
201
|
// [Warning] Generated automatically - do not edit manually
|
|
154
202
|
|
|
155
203
|
export enum ECacheTagTypes {
|
|
156
|
-
${n.sort().map(t=>` ${
|
|
204
|
+
${n.sort().map(t=>` ${yt(t)} = '${t}',`).join(`
|
|
157
205
|
`)}
|
|
158
206
|
}
|
|
159
|
-
`}
|
|
207
|
+
`}c();function w(n,e){if(!(!n||typeof n!="object")){if(n.$ref&&typeof n.$ref=="string"){let t=n.$ref.match(/^#\/components\/schemas\/(.+)$/);t&&e.add(t[1])}if(n.properties)for(let t of Object.values(n.properties))w(t,e);n.items&&w(n.items,e),n.additionalProperties&&typeof n.additionalProperties=="object"&&w(n.additionalProperties,e);for(let t of["allOf","oneOf","anyOf"])if(Array.isArray(n[t]))for(let r of n[t])w(r,e)}}function dt(n){let e=new Set;for(let t of n){let r=t.operation;if(r.parameters)for(let o of r.parameters){let i=o;i.schema&&w(i.schema,e)}if(r.requestBody){let o=r.requestBody;if(o.content)for(let i of Object.values(o.content))i.schema&&w(i.schema,e)}if(r.responses)for(let o of Object.values(r.responses)){let i=o;if(i.content)for(let s of Object.values(i.content))s.schema&&w(s.schema,e)}}return e}function ht(n,e){let t=new Set,r=[...n];for(;r.length>0;){let o=r.pop();if(t.has(o))continue;t.add(o);let i=e[o];if(!i)continue;let s=new Set;w(i,s);for(let a of s)t.has(a)||r.push(a)}return t}function Re(n,e,t){let r=new Map;for(let[l,m]of n){let f=dt(m),g=ht(f,e);r.set(l,g)}let o=new Map;for(let[l,m]of r)for(let f of m)o.has(f)||o.set(f,new Set),o.get(f).add(l);let i=new Set,s=new Map,a=new Set;for(let l of t){let m=o.get(l);if(!m||m.size===0)a.add(l);else if(m.size===1){let f=[...m][0];s.has(f)||s.set(f,new Set),s.get(f).add(l)}else i.add(l)}let p=!0;for(;p;){p=!1;for(let[l,m]of s)for(let f of[...m]){let g=e[f];if(!g)continue;let O=new Set;w(g,O);for(let b of O)for(let[T,C]of s)T!==l&&C.has(b)&&(i.add(b),i.add(f),C.delete(b),m.delete(f),p=!0)}}return{sharedSchemas:i,groupLocalSchemas:s,unusedSchemas:a}}var W=class{_options;openApiService=new G;groupService=new M;fileWriterService=new k;openApiDoc=null;parserService=null;schemaInterfaces={};actualSchemaFile="";generatedContent={groups:[],commonTypes:"",componentSchema:"",doNotModify:"",utils:"",tagTypes:""};allTags=new Set;groupOperationDefs=new Map;groupGenerationOptions=new Map;constructor(e){this._options=e}async generateAll(){return await this.prepare(),await this.generateApi(),this.splitSchemaByUsage(),this.generateCommonTypesContent(),this.generateSchemaContent(),this.generateUtilsContent(),this.generateDoNotModifyContent(),this.generateTagTypesContent(),await this.release()}async prepare(){this.actualSchemaFile=this._options.schemaFile,this._options.remoteFile&&(this.actualSchemaFile=await this.openApiService.downloadSchema(this._options.remoteFile,this._options.schemaFile)),this.openApiDoc=await this.openApiService.getDocument(this.actualSchemaFile,this._options.httpResolverOptions),this.parserService=new U(this.openApiDoc,this._options),this.parserService.initialize();let e=this.parserService.getApiGenerator();this.schemaInterfaces=e.aliases.reduce((t,r)=>{if(we.isInterfaceDeclaration(r)||we.isTypeAliasDeclaration(r)){let o=r.name.text;return{...t,[o]:r}}return t},{})}async generateApi(){if(!this.openApiDoc||!this.parserService)throw new Error("\u8ACB\u5148\u8ABF\u7528 prepare() \u65B9\u6CD5");let e=this.openApiService.getPaths(this.openApiDoc),t=this.groupService.groupPaths(e,this._options.outputFiles);for(let r of Object.values(t))try{let o=await this.generateApiGroupContent(this._options,r);o.operationNames.length>0&&(this.generatedContent.groups.push({groupKey:r.groupKey,outputPath:r.outputPath,content:o}),o.tags&&Array.isArray(o.tags)&&o.tags.forEach(i=>this.allTags.add(i)))}catch(o){throw new Error(`\u7FA4\u7D44 ${r.groupKey} \u751F\u6210\u5931\u6557: ${o}`)}}splitSchemaByUsage(){if(!this.openApiDoc||this.groupOperationDefs.size===0)return;let e=this.openApiDoc.components?.schemas??{},t=Object.keys(this.schemaInterfaces),r=Re(this.groupOperationDefs,e,t);this.sharedSchemaNames=r.sharedSchemas;for(let o of this.generatedContent.groups){let i=r.groupLocalSchemas.get(o.groupKey);if(!i||i.size===0)continue;let s=this.groupGenerationOptions.get(o.groupKey);if(!s||!this.parserService)continue;let a={};for(let O of i)this.schemaInterfaces[O]&&(a[O]=this.schemaInterfaces[O]);let p=new F(s),l=this.groupOperationDefs.get(o.groupKey)??[],m=p.extractEndpointInfos(l),f={...s,apiConfiguration:s.apiConfiguration||{file:"@/store/webapi",importName:"WebApiConfiguration"}},g=V(m,f,this.schemaInterfaces,l,{localSchemaInterfaces:a,localSchemaNames:i});o.content.files.types=g}}sharedSchemaNames=null;async generateCommonTypesContent(){this.generatedContent.commonTypes=Oe()}async generateSchemaContent(){this.generatedContent.componentSchema=Te(this.schemaInterfaces,this.sharedSchemaNames??void 0)}async generateDoNotModifyContent(){this.generatedContent.doNotModify=Se()}async generateUtilsContent(){this.generatedContent.utils=Ce()}async generateTagTypesContent(){let e=Array.from(this.allTags);this.generatedContent.tagTypes=$e(e)}async release(){let e=[],t=[],r=[];try{for(let a of this.generatedContent.groups)try{if(a.content?.files){let p=j.dirname(a.outputPath),l=await this.fileWriterService.writeGroupFiles(p,{types:a.content.files.types,queryService:a.content.files.queryService,enhanceEndpoints:a.content.files.enhanceEndpoints,index:a.content.files.index});e.push(...l),r.push(a.groupKey)}}catch(p){t.push(new Error(`\u5BEB\u5165\u7FA4\u7D44 ${a.groupKey} \u5931\u6557: ${p}`))}let o=this.generatedContent.groups[0]?j.dirname(j.dirname(this.generatedContent.groups[0].outputPath)):"./generated";if(this.generatedContent.commonTypes||this.generatedContent.doNotModify||this.generatedContent.utils){let a=await this.fileWriterService.writeSharedFiles(o,{commonTypes:this.generatedContent.commonTypes||void 0,doNotModify:this.generatedContent.doNotModify||void 0,utils:this.generatedContent.utils||void 0});e.push(...a)}if(this.generatedContent.tagTypes){let a=await this.fileWriterService.writeFile(j.join(o,"tagTypes.ts"),this.generatedContent.tagTypes);e.push(a)}if(this.generatedContent.componentSchema){let a=await this.fileWriterService.writeSchemaFile(o,this.generatedContent.componentSchema);e.push(...a)}let i=this.generateMainIndex(r),s=await this.fileWriterService.writeFile(j.join(o,"index.ts"),i);e.push(s)}catch(o){t.push(o)}return{success:t.length===0,writtenFiles:e,errors:t,generatedGroups:r}}async generateApiGroupContent(e,t){let{outputFiles:r,...o}=e,i={...o,schemaFile:this.actualSchemaFile,outputFile:t.outputPath,sharedTypesFile:`${r.outputDir}/common-types.ts`,filterEndpoints:this.groupService.createGroupFilter(t.groupKey,r),queryMatch:r.queryMatch,groupKey:t.groupKey};if(!this.openApiDoc||!this.parserService)throw new Error("OpenAPI \u6587\u6A94\u672A\u521D\u59CB\u5316\uFF0C\u8ACB\u5148\u8ABF\u7528 prepare()");let s=this.parserService.getOperationDefinitions(i.filterEndpoints);return this.groupOperationDefs.set(t.groupKey,s),this.groupGenerationOptions.set(t.groupKey,i),await new Q(this.parserService,i).generate()}generateMainIndex(e){return`/* eslint-disable */
|
|
160
208
|
// [Warning] Generated automatically - do not edit manually
|
|
161
209
|
|
|
162
210
|
export * from "./schema";
|
|
163
211
|
${e.map(r=>`export * from "./${r}";`).join(`
|
|
164
212
|
`)}
|
|
165
|
-
`}};async function
|
|
213
|
+
`}};async function Ne(n){let t=await new W(n).generateAll();if(!t.success&&t.errors.length>0)throw t.errors[0]}var Ee=bt(y);async function St(n){let e=Tt(process.cwd(),n);process.chdir(Ot(e));let t=Ee(e),r=t.default??t;"outputFiles"in r||(console.error('Configuration must include "outputFiles" property. Single file output is no longer supported.'),process.exit(1)),r.outputFiles&&r.outputFiles.outputDir&&ne(r.outputFiles.outputDir);try{console.log("Generating multiple outputs..."),await Ne(r),console.log("Done")}catch(o){console.error("Generation failed:",o),process.exit(1)}}async function vt(){let n=Ee("../../package.json"),e=re();L.version(n.version).usage("<path/to/config.js>").parse(process.argv);let t=L.args[0];if(L.args.length===0){L.help();return}oe(t),ie(t,e),await St(t)}vt().catch(n=>{console.error("CLI execution failed:",n),process.exit(1)});export{St as runGeneration};
|
|
166
214
|
//# sourceMappingURL=cli.mjs.map
|