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