oazapfts 6.1.2 → 6.1.4

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/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.cjs","sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport fs from \"fs\";\nimport minimist from \"minimist\";\n\nimport { generateSource, Opts, optsArgumentStyles } from \"./\";\n\nconst argv = minimist(process.argv.slice(2), {\n alias: {\n i: \"include\",\n e: \"exclude\",\n },\n boolean: [\"optimistic\", \"useEnumType\", \"mergeReadWriteOnly\"],\n string: [\"argumentStyle\"],\n});\n\nasync function generate(spec: string, dest: string, opts: Opts) {\n const code = await generateSource(spec, opts);\n if (dest) fs.writeFileSync(dest, code);\n else console.log(code);\n}\n\nconst {\n include,\n exclude,\n optimistic,\n useEnumType,\n mergeReadWriteOnly,\n argumentStyle,\n} = argv;\nconst [spec, dest] = argv._;\nif (!spec) {\n console.error(`\n Usage:\n oazapfts <spec> [filename]\n\n Options:\n --exclude, -e <tag to exclude>\n --include, -i <tag to include>\n --optimistic\n --useEnumType\n --mergeReadWriteOnly\n --argumentStyle=<${optsArgumentStyles.join(\" | \")}> (default: positional)\n`);\n process.exit(1);\n}\n\nif (\n argumentStyle !== undefined &&\n !optsArgumentStyles.includes(argumentStyle)\n) {\n console.error(\n `--argumentStyle should be one of <${optsArgumentStyles.join(\n \" | \",\n )}>, but got \"${argumentStyle}\"`,\n );\n process.exit(1);\n}\n\ngenerate(spec, dest, {\n include,\n exclude,\n optimistic,\n useEnumType,\n mergeReadWriteOnly,\n argumentStyle,\n});\n"],"names":["argv","minimist","generate","spec","dest","opts","__async","code","generateSource","fs","include","exclude","optimistic","useEnumType","mergeReadWriteOnly","argumentStyle","optsArgumentStyles"],"mappings":";+RAOMA,EAAOC,EAAS,QAAQ,KAAK,MAAM,CAAC,EAAG,CAC3C,MAAO,CACL,EAAG,UACH,EAAG,SACL,EACA,QAAS,CAAC,aAAc,cAAe,oBAAoB,EAC3D,OAAQ,CAAC,eAAe,CAC1B,CAAC,EAED,SAAeC,EAASC,EAAcC,EAAcC,EAAY,QAAAC,EAAA,sBAC9D,MAAMC,EAAO,MAAMC,EAAAA,eAAeL,EAAME,CAAI,EACxCD,EAASK,EAAA,cAAcL,EAAMG,CAAI,EAChC,QAAQ,IAAIA,CAAI,CACvB,GAEA,KAAM,CACJ,QAAAG,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,mBAAAC,EACA,cAAAC,CACF,EAAIf,EACE,CAACG,EAAMC,CAAI,EAAIJ,EAAK,EACrBG,IACH,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAUOa,EAAA,mBAAmB,KAAK,KAAK,CAAC;AAAA,CACpD,EACC,QAAQ,KAAK,CAAC,GAIdD,IAAkB,QAClB,CAACC,EAAmB,mBAAA,SAASD,CAAa,IAElC,QAAA,MACN,qCAAqCC,EAAAA,mBAAmB,KACtD,KAAA,CACD,eAAeD,CAAa,GAAA,EAE/B,QAAQ,KAAK,CAAC,GAGhBb,EAASC,EAAMC,EAAM,CACnB,QAAAM,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,mBAAAC,EACA,cAAAC,CACF,CAAC"}
1
+ {"version":3,"file":"cli.cjs","sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport fs from \"fs\";\nimport minimist from \"minimist\";\n\nimport { generateSource, Opts, optsArgumentStyles } from \"./\";\n\nconst argv = minimist(process.argv.slice(2), {\n alias: {\n i: \"include\",\n e: \"exclude\",\n },\n boolean: [\"optimistic\", \"useEnumType\", \"mergeReadWriteOnly\"],\n string: [\"argumentStyle\"],\n});\n\nasync function generate(spec: string, dest: string, opts: Opts) {\n const code = await generateSource(spec, opts);\n if (dest) fs.writeFileSync(dest, code);\n else console.log(code);\n}\n\nconst {\n include,\n exclude,\n optimistic,\n useEnumType,\n mergeReadWriteOnly,\n argumentStyle,\n} = argv;\nconst [spec, dest] = argv._;\nif (!spec) {\n console.error(`\n Usage:\n oazapfts <spec> [filename]\n\n Options:\n --exclude, -e <tag to exclude>\n --include, -i <tag to include>\n --optimistic\n --useEnumType\n --mergeReadWriteOnly\n --argumentStyle=<${optsArgumentStyles.join(\" | \")}> (default: positional)\n`);\n process.exit(1);\n}\n\nif (\n argumentStyle !== undefined &&\n !optsArgumentStyles.includes(argumentStyle)\n) {\n console.error(\n `--argumentStyle should be one of <${optsArgumentStyles.join(\n \" | \",\n )}>, but got \"${argumentStyle}\"`,\n );\n process.exit(1);\n}\n\ngenerate(spec, dest, {\n include,\n exclude,\n optimistic,\n useEnumType,\n mergeReadWriteOnly,\n argumentStyle,\n});\n"],"names":["argv","minimist","generate","spec","dest","opts","__async","code","generateSource","fs","include","exclude","optimistic","useEnumType","mergeReadWriteOnly","argumentStyle","optsArgumentStyles"],"mappings":";+RAOMA,EAAOC,EAAS,QAAQ,KAAK,MAAM,CAAC,EAAG,CAC3C,MAAO,CACL,EAAG,UACH,EAAG,SACL,EACA,QAAS,CAAC,aAAc,cAAe,oBAAoB,EAC3D,OAAQ,CAAC,eAAe,CAC1B,CAAC,EAED,SAAeC,EAASC,EAAcC,EAAcC,EAAY,QAAAC,EAAA,sBAC9D,MAAMC,EAAO,MAAMC,iBAAeL,EAAME,CAAI,EACxCD,EAAMK,EAAG,cAAcL,EAAMG,CAAI,EAChC,QAAQ,IAAIA,CAAI,CACvB,GAEA,KAAM,CACJ,QAAAG,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,mBAAAC,EACA,cAAAC,CACF,EAAIf,EACE,CAACG,EAAMC,CAAI,EAAIJ,EAAK,EACrBG,IACH,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAUOa,EAAA,mBAAmB,KAAK,KAAK,CAAC;AAAA,CACpD,EACC,QAAQ,KAAK,CAAC,GAIdD,IAAkB,QAClB,CAACC,EAAmB,mBAAA,SAASD,CAAa,IAElC,QAAA,MACN,qCAAqCC,EAAAA,mBAAmB,KACtD,KAAA,CACD,eAAeD,CAAa,GAC/B,EACA,QAAQ,KAAK,CAAC,GAGhBb,EAASC,EAAMC,EAAM,CACnB,QAAAM,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,mBAAAC,EACA,cAAAC,CACF,CAAC"}
package/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport fs from \"fs\";\nimport minimist from \"minimist\";\n\nimport { generateSource, Opts, optsArgumentStyles } from \"./\";\n\nconst argv = minimist(process.argv.slice(2), {\n alias: {\n i: \"include\",\n e: \"exclude\",\n },\n boolean: [\"optimistic\", \"useEnumType\", \"mergeReadWriteOnly\"],\n string: [\"argumentStyle\"],\n});\n\nasync function generate(spec: string, dest: string, opts: Opts) {\n const code = await generateSource(spec, opts);\n if (dest) fs.writeFileSync(dest, code);\n else console.log(code);\n}\n\nconst {\n include,\n exclude,\n optimistic,\n useEnumType,\n mergeReadWriteOnly,\n argumentStyle,\n} = argv;\nconst [spec, dest] = argv._;\nif (!spec) {\n console.error(`\n Usage:\n oazapfts <spec> [filename]\n\n Options:\n --exclude, -e <tag to exclude>\n --include, -i <tag to include>\n --optimistic\n --useEnumType\n --mergeReadWriteOnly\n --argumentStyle=<${optsArgumentStyles.join(\" | \")}> (default: positional)\n`);\n process.exit(1);\n}\n\nif (\n argumentStyle !== undefined &&\n !optsArgumentStyles.includes(argumentStyle)\n) {\n console.error(\n `--argumentStyle should be one of <${optsArgumentStyles.join(\n \" | \",\n )}>, but got \"${argumentStyle}\"`,\n );\n process.exit(1);\n}\n\ngenerate(spec, dest, {\n include,\n exclude,\n optimistic,\n useEnumType,\n mergeReadWriteOnly,\n argumentStyle,\n});\n"],"names":["argv","minimist","generate","spec","dest","opts","code","generateSource","fs","include","exclude","optimistic","useEnumType","mergeReadWriteOnly","argumentStyle","optsArgumentStyles"],"mappings":";;;;AAOA,MAAMA,IAAOC,EAAS,QAAQ,KAAK,MAAM,CAAC,GAAG;AAAA,EAC3C,OAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAAA,EACA,SAAS,CAAC,cAAc,eAAe,oBAAoB;AAAA,EAC3D,QAAQ,CAAC,eAAe;AAC1B,CAAC;AAED,eAAeC,EAASC,GAAcC,GAAcC,GAAY;AAC9D,QAAMC,IAAO,MAAMC,EAAeJ,GAAME,CAAI;AACxCD,EAAAA,IAASI,EAAA,cAAcJ,GAAME,CAAI,IAChC,QAAQ,IAAIA,CAAI;AACvB;AAEA,MAAM;AAAA,EACJ,SAAAG;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,eAAAC;AACF,IAAId,GACE,CAACG,GAAMC,CAAI,IAAIJ,EAAK;AACrBG,MACH,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAUOY,EAAmB,KAAK,KAAK,CAAC;AAAA,CACpD,GACC,QAAQ,KAAK,CAAC;AAIdD,MAAkB,UAClB,CAACC,EAAmB,SAASD,CAAa,MAElC,QAAA;AAAA,EACN,qCAAqCC,EAAmB;AAAA,IACtD;AAAA,EAAA,CACD,eAAeD,CAAa;AAAA,GAE/B,QAAQ,KAAK,CAAC;AAGhBZ,EAASC,GAAMC,GAAM;AAAA,EACnB,SAAAK;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,eAAAC;AACF,CAAC;"}
1
+ {"version":3,"file":"cli.js","sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport fs from \"fs\";\nimport minimist from \"minimist\";\n\nimport { generateSource, Opts, optsArgumentStyles } from \"./\";\n\nconst argv = minimist(process.argv.slice(2), {\n alias: {\n i: \"include\",\n e: \"exclude\",\n },\n boolean: [\"optimistic\", \"useEnumType\", \"mergeReadWriteOnly\"],\n string: [\"argumentStyle\"],\n});\n\nasync function generate(spec: string, dest: string, opts: Opts) {\n const code = await generateSource(spec, opts);\n if (dest) fs.writeFileSync(dest, code);\n else console.log(code);\n}\n\nconst {\n include,\n exclude,\n optimistic,\n useEnumType,\n mergeReadWriteOnly,\n argumentStyle,\n} = argv;\nconst [spec, dest] = argv._;\nif (!spec) {\n console.error(`\n Usage:\n oazapfts <spec> [filename]\n\n Options:\n --exclude, -e <tag to exclude>\n --include, -i <tag to include>\n --optimistic\n --useEnumType\n --mergeReadWriteOnly\n --argumentStyle=<${optsArgumentStyles.join(\" | \")}> (default: positional)\n`);\n process.exit(1);\n}\n\nif (\n argumentStyle !== undefined &&\n !optsArgumentStyles.includes(argumentStyle)\n) {\n console.error(\n `--argumentStyle should be one of <${optsArgumentStyles.join(\n \" | \",\n )}>, but got \"${argumentStyle}\"`,\n );\n process.exit(1);\n}\n\ngenerate(spec, dest, {\n include,\n exclude,\n optimistic,\n useEnumType,\n mergeReadWriteOnly,\n argumentStyle,\n});\n"],"names":["argv","minimist","generate","spec","dest","opts","code","generateSource","fs","include","exclude","optimistic","useEnumType","mergeReadWriteOnly","argumentStyle","optsArgumentStyles"],"mappings":";;;;AAOA,MAAMA,IAAOC,EAAS,QAAQ,KAAK,MAAM,CAAC,GAAG;AAAA,EAC3C,OAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAAA,EACA,SAAS,CAAC,cAAc,eAAe,oBAAoB;AAAA,EAC3D,QAAQ,CAAC,eAAe;AAC1B,CAAC;AAED,eAAeC,EAASC,GAAcC,GAAcC,GAAY;AAC9D,QAAMC,IAAO,MAAMC,EAAeJ,GAAME,CAAI;AAC5C,EAAID,IAAMI,EAAG,cAAcJ,GAAME,CAAI,IAChC,QAAQ,IAAIA,CAAI;AACvB;AAEA,MAAM;AAAA,EACJ,SAAAG;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,eAAAC;AACF,IAAId,GACE,CAACG,GAAMC,CAAI,IAAIJ,EAAK;AACrBG,MACH,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAUOY,EAAmB,KAAK,KAAK,CAAC;AAAA,CACpD,GACC,QAAQ,KAAK,CAAC;AAIdD,MAAkB,UAClB,CAACC,EAAmB,SAASD,CAAa,MAElC,QAAA;AAAA,EACN,qCAAqCC,EAAmB;AAAA,IACtD;AAAA,EAAA,CACD,eAAeD,CAAa;AAC/B,GACA,QAAQ,KAAK,CAAC;AAGhBZ,EAASC,GAAMC,GAAM;AAAA,EACnB,SAAAK;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,eAAAC;AACF,CAAC;"}
package/generate.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("lodash");require("typescript");const e=require("./tscodegen-D-Pq-t1I.cjs");exports.addComment=e.addComment;exports.appendNodes=e.appendNodes;exports.block=e.block;exports.callOazapftsFunction=e.callOazapftsFunction;exports.callQsFunction=e.callQsFunction;exports.changePropertyValue=e.changePropertyValue;exports.createArrowFunction=e.createArrowFunction;exports.createCall=e.createCall;exports.createClassDeclaration=e.createClassDeclaration;exports.createConstructor=e.createConstructor;exports.createEnumTypeNode=e.createEnumTypeNode;exports.createFunctionDeclaration=e.createFunctionDeclaration;exports.createIndexSignature=e.createIndexSignature;exports.createInterfaceAliasDeclaration=e.createInterfaceAliasDeclaration;exports.createKeywordType=e.createKeywordType;exports.createLiteral=e.createLiteral;exports.createMethod=e.createMethod;exports.createMethodCall=e.createMethodCall;exports.createObjectBinding=e.createObjectBinding;exports.createObjectLiteral=e.createObjectLiteral;exports.createParameter=e.createParameter;exports.createPropertyAssignment=e.createPropertyAssignment;exports.createPropertySignature=e.createPropertySignature;exports.createQuestionToken=e.createQuestionToken;exports.createTemplateString=e.createTemplateString;exports.createTypeAliasDeclaration=e.createTypeAliasDeclaration;exports.createUrlExpression=e.createUrlExpression;exports.default=e.ApiGenerator;exports.defaultBaseUrl=e.defaultBaseUrl;exports.findFirstVariableDeclaration=e.findFirstVariableDeclaration;exports.findNode=e.findNode;exports.getBodyFormatter=e.getBodyFormatter;exports.getFirstDeclarationName=e.getFirstDeclarationName;exports.getFormatter=e.getFormatter;exports.getName=e.getName;exports.getOperationIdentifier=e.getOperationIdentifier;exports.getOperationName=e.getOperationName;exports.getReferenceName=e.getReferenceName;exports.isJsonMimeType=e.isJsonMimeType;exports.isMimeType=e.isMimeType;exports.isNullable=e.isNullable;exports.isReference=e.isReference;exports.isValidIdentifier=e.isValidIdentifier;exports.keywordType=e.keywordType;exports.modifier=e.modifier;exports.printFile=e.printFile;exports.printNode=e.printNode;exports.printNodes=e.printNodes;exports.questionToken=e.questionToken;exports.refPathToPropertyPath=e.refPathToPropertyPath;exports.supportDeepObjects=e.supportDeepObjects;exports.toExpression=e.toExpression;exports.toIdentifier=e.toIdentifier;exports.verbs=e.verbs;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require("lodash");require("typescript");const e=require("./tscodegen-DAKpgwcF.cjs");exports.addComment=e.addComment;exports.appendNodes=e.appendNodes;exports.block=e.block;exports.callOazapftsFunction=e.callOazapftsFunction;exports.callQsFunction=e.callQsFunction;exports.changePropertyValue=e.changePropertyValue;exports.createArrowFunction=e.createArrowFunction;exports.createCall=e.createCall;exports.createClassDeclaration=e.createClassDeclaration;exports.createConstructor=e.createConstructor;exports.createEnumTypeNode=e.createEnumTypeNode;exports.createFunctionDeclaration=e.createFunctionDeclaration;exports.createIndexSignature=e.createIndexSignature;exports.createInterfaceAliasDeclaration=e.createInterfaceAliasDeclaration;exports.createKeywordType=e.createKeywordType;exports.createLiteral=e.createLiteral;exports.createMethod=e.createMethod;exports.createMethodCall=e.createMethodCall;exports.createObjectBinding=e.createObjectBinding;exports.createObjectLiteral=e.createObjectLiteral;exports.createParameter=e.createParameter;exports.createPropertyAssignment=e.createPropertyAssignment;exports.createPropertySignature=e.createPropertySignature;exports.createQuestionToken=e.createQuestionToken;exports.createTemplateString=e.createTemplateString;exports.createTypeAliasDeclaration=e.createTypeAliasDeclaration;exports.createUrlExpression=e.createUrlExpression;exports.default=e.ApiGenerator;exports.defaultBaseUrl=e.defaultBaseUrl;exports.findFirstVariableDeclaration=e.findFirstVariableDeclaration;exports.findNode=e.findNode;exports.getBodyFormatter=e.getBodyFormatter;exports.getFirstDeclarationName=e.getFirstDeclarationName;exports.getFormatter=e.getFormatter;exports.getName=e.getName;exports.getOperationIdentifier=e.getOperationIdentifier;exports.getOperationName=e.getOperationName;exports.getReferenceName=e.getReferenceName;exports.isJsonMimeType=e.isJsonMimeType;exports.isMimeType=e.isMimeType;exports.isNullable=e.isNullable;exports.isReference=e.isReference;exports.isValidIdentifier=e.isValidIdentifier;exports.keywordType=e.keywordType;exports.modifier=e.modifier;exports.printFile=e.printFile;exports.printNode=e.printNode;exports.printNodes=e.printNodes;exports.questionToken=e.questionToken;exports.refPathToPropertyPath=e.refPathToPropertyPath;exports.supportDeepObjects=e.supportDeepObjects;exports.toExpression=e.toExpression;exports.toIdentifier=e.toIdentifier;exports.verbs=e.verbs;
2
2
  //# sourceMappingURL=generate.cjs.map
package/generate.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import "lodash";
2
2
  import "typescript";
3
- import { Y as r, X as i, H as o, m as n, l as c, W as l, I as p, D as d, K as m, L as u, y as f, J as g, P as y, B as N, u as T, x as F, M as b, E as D, Q as P, F as O, N as h, G as C, O as I, n as k, R as x, z as A, k as M, A as j, a0 as w, V as B, S as E, g as S, U as V, b as L, T as Q, c as R, d as U, h as q, a as v, i as z, e as J, f as K, $ as G, o as H, w as W, p as X, Z as Y, _ as Z, q as _, r as $, s as ee, C as ae, j as te, v as se } from "./tscodegen-Cd0Ct4AR.js";
3
+ import { Y as r, X as i, H as o, m as n, l as c, W as l, I as p, D as d, K as m, L as u, y as f, J as g, P as y, B as N, u as T, x as F, M as b, E as D, Q as P, F as O, N as h, G as C, O as I, n as k, R as x, z as A, k as M, A as j, a0 as w, V as B, S as E, g as S, U as V, b as L, T as Q, c as R, d as U, h as q, a as v, i as z, e as J, f as K, $ as G, o as H, w as W, p as X, Z as Y, _ as Z, q as _, r as $, s as ee, C as ae, j as te, v as se } from "./tscodegen-B_Csbh-6.js";
4
4
  export {
5
5
  r as addComment,
6
6
  i as appendNodes,
package/index.cjs CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var u=(e,t,r)=>new Promise((s,i)=>{var a=n=>{try{o(r.next(n))}catch(c){i(c)}},p=n=>{try{o(r.throw(n))}catch(c){i(c)}},o=n=>n.done?s(n.value):Promise.resolve(n.value).then(a,p);o((r=r.apply(e,t)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("./tscodegen-D-Pq-t1I.cjs"),v=require("@apidevtools/swagger-parser"),A=require("swagger2openapi"),S=["positional","object"];function g(e,t,r){return new l.ApiGenerator(e,t,r).generateApi()}function d(e){return l.printFile(e)}function b(r){return u(this,arguments,function*(e,t={}){var{doc:s,isConverted:i}=yield f(e);const a=g(s,t,i),{title:p,version:o}=s.info,n=["$&",p,o].filter(Boolean).join(`
1
+ "use strict";var u=(e,t,r)=>new Promise((s,i)=>{var a=n=>{try{o(r.next(n))}catch(c){i(c)}},p=n=>{try{o(r.throw(n))}catch(c){i(c)}},o=n=>n.done?s(n.value):Promise.resolve(n.value).then(a,p);o((r=r.apply(e,t)).next())});Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("./tscodegen-DAKpgwcF.cjs"),v=require("@apidevtools/swagger-parser"),A=require("swagger2openapi"),S=["positional","object"];function g(e,t,r){return new l.ApiGenerator(e,t,r).generateApi()}function d(e){return l.printFile(e)}function b(r){return u(this,arguments,function*(e,t={}){var{doc:s,isConverted:i}=yield f(e);const a=g(s,t,i),{title:p,version:o}=s.info,n=["$&",p,o].filter(Boolean).join(`
2
2
  * `);return d(a).replace(/^\/\*\*/,n)})}function y(e){return"openapi"in e&&e.openapi.startsWith("3")}function f(e){return u(this,null,function*(){const t=yield v.bundle(e);return y(t)?{doc:t,isConverted:!1}:{doc:(yield A.convertObj(t,{})).openapi,isConverted:!0}})}exports.cg=l.tscodegen;exports.generateAst=g;exports.generateSource=b;exports.optsArgumentStyles=S;exports.parseSpec=f;exports.printAst=d;
3
3
  //# sourceMappingURL=index.cjs.map
package/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import * as cg from \"./tscodegen\";\nimport ApiGenerator from \"./generate\";\nimport ts from \"typescript\";\nimport SwaggerParser from \"@apidevtools/swagger-parser\";\nimport converter from \"swagger2openapi\";\nimport { OpenAPI, OpenAPIV3 } from \"openapi-types\";\n\nexport { cg };\n\nexport const optsArgumentStyles = [\"positional\", \"object\"];\nexport type Opts = {\n include?: string[];\n exclude?: string[];\n optimistic?: boolean;\n unionUndefined?: boolean;\n useEnumType?: boolean;\n mergeReadWriteOnly?: boolean;\n argumentStyle?: (typeof optsArgumentStyles)[number];\n};\n\nexport function generateAst(\n doc: OpenAPIV3.Document,\n opts: Opts,\n isConverted: boolean,\n) {\n return new ApiGenerator(doc, opts, isConverted).generateApi();\n}\n\nexport function printAst(ast: ts.SourceFile) {\n return cg.printFile(ast);\n}\n\nexport async function generateSource(spec: string, opts: Opts = {}) {\n var { doc, isConverted } = await parseSpec(spec);\n const ast = generateAst(doc, opts, isConverted);\n const { title, version } = doc.info;\n const preamble = [\"$&\", title, version].filter(Boolean).join(\"\\n * \");\n const src = printAst(ast);\n return src.replace(/^\\/\\*\\*/, preamble);\n}\n\nfunction isOpenApiV3(doc: OpenAPI.Document): doc is OpenAPIV3.Document {\n return \"openapi\" in doc && doc.openapi.startsWith(\"3\");\n}\n\nexport async function parseSpec(spec: string) {\n const doc = await SwaggerParser.bundle(spec);\n if (isOpenApiV3(doc)) {\n return {\n doc,\n isConverted: false,\n };\n } else {\n const converted = await converter.convertObj(doc, {});\n return {\n doc: converted.openapi as OpenAPIV3.Document,\n isConverted: true,\n };\n }\n}\n"],"names":["optsArgumentStyles","generateAst","doc","opts","isConverted","ApiGenerator","printAst","ast","cg.printFile","generateSource","_0","__async","spec","parseSpec","title","version","preamble","isOpenApiV3","SwaggerParser","converter"],"mappings":"+YASaA,EAAqB,CAAC,aAAc,QAAQ,EAWzC,SAAAC,EACdC,EACAC,EACAC,EACA,CACA,OAAO,IAAIC,EAAa,aAAAH,EAAKC,EAAMC,CAAW,EAAE,aAClD,CAEO,SAASE,EAASC,EAAoB,CACpC,OAAAC,EAAAA,UAAaD,CAAG,CACzB,CAEA,SAAsBE,EAAeC,EAA+B,QAAAC,EAAA,yBAA/BC,EAAcT,EAAa,GAAI,CAClE,GAAI,CAAE,IAAAD,EAAK,YAAAE,CAAA,EAAgB,MAAMS,EAAUD,CAAI,EAC/C,MAAML,EAAMN,EAAYC,EAAKC,EAAMC,CAAW,EACxC,CAAE,MAAAU,EAAO,QAAAC,GAAYb,EAAI,KACzBc,EAAW,CAAC,KAAMF,EAAOC,CAAO,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA,IAAO,EAE7D,OADKT,EAASC,CAAG,EACb,QAAQ,UAAWS,CAAQ,CACxC,GAEA,SAASC,EAAYf,EAAkD,CACrE,MAAO,YAAaA,GAAOA,EAAI,QAAQ,WAAW,GAAG,CACvD,CAEA,SAAsBW,EAAUD,EAAc,QAAAD,EAAA,sBAC5C,MAAMT,EAAM,MAAMgB,EAAc,OAAON,CAAI,EACvC,OAAAK,EAAYf,CAAG,EACV,CACL,IAAAA,EACA,YAAa,EAAA,EAIR,CACL,KAFgB,MAAMiB,EAAU,WAAWjB,EAAK,CAAE,CAAA,GAEnC,QACf,YAAa,EAAA,CAGnB"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import * as cg from \"./tscodegen\";\nimport ApiGenerator from \"./generate\";\nimport ts from \"typescript\";\nimport SwaggerParser from \"@apidevtools/swagger-parser\";\nimport converter from \"swagger2openapi\";\nimport { OpenAPI, OpenAPIV3 } from \"openapi-types\";\n\nexport { cg };\n\nexport const optsArgumentStyles = [\"positional\", \"object\"];\nexport type Opts = {\n include?: string[];\n exclude?: string[];\n optimistic?: boolean;\n unionUndefined?: boolean;\n useEnumType?: boolean;\n mergeReadWriteOnly?: boolean;\n argumentStyle?: (typeof optsArgumentStyles)[number];\n};\n\nexport function generateAst(\n doc: OpenAPIV3.Document,\n opts: Opts,\n isConverted: boolean,\n) {\n return new ApiGenerator(doc, opts, isConverted).generateApi();\n}\n\nexport function printAst(ast: ts.SourceFile) {\n return cg.printFile(ast);\n}\n\nexport async function generateSource(spec: string, opts: Opts = {}) {\n var { doc, isConverted } = await parseSpec(spec);\n const ast = generateAst(doc, opts, isConverted);\n const { title, version } = doc.info;\n const preamble = [\"$&\", title, version].filter(Boolean).join(\"\\n * \");\n const src = printAst(ast);\n return src.replace(/^\\/\\*\\*/, preamble);\n}\n\nfunction isOpenApiV3(doc: OpenAPI.Document): doc is OpenAPIV3.Document {\n return \"openapi\" in doc && doc.openapi.startsWith(\"3\");\n}\n\nexport async function parseSpec(spec: string) {\n const doc = await SwaggerParser.bundle(spec);\n if (isOpenApiV3(doc)) {\n return {\n doc,\n isConverted: false,\n };\n } else {\n const converted = await converter.convertObj(doc, {});\n return {\n doc: converted.openapi as OpenAPIV3.Document,\n isConverted: true,\n };\n }\n}\n"],"names":["optsArgumentStyles","generateAst","doc","opts","isConverted","ApiGenerator","printAst","ast","cg.printFile","generateSource","_0","__async","spec","parseSpec","title","version","preamble","isOpenApiV3","SwaggerParser","converter"],"mappings":"+YASaA,EAAqB,CAAC,aAAc,QAAQ,EAWzC,SAAAC,EACdC,EACAC,EACAC,EACA,CACA,OAAO,IAAIC,EAAa,aAAAH,EAAKC,EAAMC,CAAW,EAAE,YAAY,CAC9D,CAEO,SAASE,EAASC,EAAoB,CACpC,OAAAC,EAAAA,UAAaD,CAAG,CACzB,CAEA,SAAsBE,EAAeC,EAA+B,QAAAC,EAAA,yBAA/BC,EAAcT,EAAa,GAAI,CAClE,GAAI,CAAE,IAAAD,EAAK,YAAAE,CAAgB,EAAA,MAAMS,EAAUD,CAAI,EAC/C,MAAML,EAAMN,EAAYC,EAAKC,EAAMC,CAAW,EACxC,CAAE,MAAAU,EAAO,QAAAC,CAAQ,EAAIb,EAAI,KACzBc,EAAW,CAAC,KAAMF,EAAOC,CAAO,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA,IAAO,EAE7D,OADKT,EAASC,CAAG,EACb,QAAQ,UAAWS,CAAQ,CACxC,GAEA,SAASC,EAAYf,EAAkD,CACrE,MAAO,YAAaA,GAAOA,EAAI,QAAQ,WAAW,GAAG,CACvD,CAEA,SAAsBW,EAAUD,EAAc,QAAAD,EAAA,sBAC5C,MAAMT,EAAM,MAAMgB,EAAc,OAAON,CAAI,EACvC,OAAAK,EAAYf,CAAG,EACV,CACL,IAAAA,EACA,YAAa,EACf,EAGO,CACL,KAFgB,MAAMiB,EAAU,WAAWjB,EAAK,CAAA,CAAE,GAEnC,QACf,YAAa,EACf,CAEJ"}
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { A as c, p } from "./tscodegen-Cd0Ct4AR.js";
2
- import { t as x } from "./tscodegen-Cd0Ct4AR.js";
1
+ import { A as c, p } from "./tscodegen-B_Csbh-6.js";
2
+ import { t as x } from "./tscodegen-B_Csbh-6.js";
3
3
  import u from "@apidevtools/swagger-parser";
4
4
  import f from "swagger2openapi";
5
5
  const S = ["positional", "object"];
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import * as cg from \"./tscodegen\";\nimport ApiGenerator from \"./generate\";\nimport ts from \"typescript\";\nimport SwaggerParser from \"@apidevtools/swagger-parser\";\nimport converter from \"swagger2openapi\";\nimport { OpenAPI, OpenAPIV3 } from \"openapi-types\";\n\nexport { cg };\n\nexport const optsArgumentStyles = [\"positional\", \"object\"];\nexport type Opts = {\n include?: string[];\n exclude?: string[];\n optimistic?: boolean;\n unionUndefined?: boolean;\n useEnumType?: boolean;\n mergeReadWriteOnly?: boolean;\n argumentStyle?: (typeof optsArgumentStyles)[number];\n};\n\nexport function generateAst(\n doc: OpenAPIV3.Document,\n opts: Opts,\n isConverted: boolean,\n) {\n return new ApiGenerator(doc, opts, isConverted).generateApi();\n}\n\nexport function printAst(ast: ts.SourceFile) {\n return cg.printFile(ast);\n}\n\nexport async function generateSource(spec: string, opts: Opts = {}) {\n var { doc, isConverted } = await parseSpec(spec);\n const ast = generateAst(doc, opts, isConverted);\n const { title, version } = doc.info;\n const preamble = [\"$&\", title, version].filter(Boolean).join(\"\\n * \");\n const src = printAst(ast);\n return src.replace(/^\\/\\*\\*/, preamble);\n}\n\nfunction isOpenApiV3(doc: OpenAPI.Document): doc is OpenAPIV3.Document {\n return \"openapi\" in doc && doc.openapi.startsWith(\"3\");\n}\n\nexport async function parseSpec(spec: string) {\n const doc = await SwaggerParser.bundle(spec);\n if (isOpenApiV3(doc)) {\n return {\n doc,\n isConverted: false,\n };\n } else {\n const converted = await converter.convertObj(doc, {});\n return {\n doc: converted.openapi as OpenAPIV3.Document,\n isConverted: true,\n };\n }\n}\n"],"names":["optsArgumentStyles","generateAst","doc","opts","isConverted","ApiGenerator","printAst","ast","cg.printFile","generateSource","spec","parseSpec","title","version","preamble","isOpenApiV3","SwaggerParser","converter"],"mappings":";;;;AASa,MAAAA,IAAqB,CAAC,cAAc,QAAQ;AAWzC,SAAAC,EACdC,GACAC,GACAC,GACA;AACA,SAAO,IAAIC,EAAaH,GAAKC,GAAMC,CAAW,EAAE;AAClD;AAEO,SAASE,EAASC,GAAoB;AACpC,SAAAC,EAAaD,CAAG;AACzB;AAEA,eAAsBE,EAAeC,GAAcP,IAAa,IAAI;AAClE,MAAI,EAAE,KAAAD,GAAK,aAAAE,EAAA,IAAgB,MAAMO,EAAUD,CAAI;AAC/C,QAAMH,IAAMN,EAAYC,GAAKC,GAAMC,CAAW,GACxC,EAAE,OAAAQ,GAAO,SAAAC,MAAYX,EAAI,MACzBY,IAAW,CAAC,MAAMF,GAAOC,CAAO,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA,IAAO;AAE7D,SADKP,EAASC,CAAG,EACb,QAAQ,WAAWO,CAAQ;AACxC;AAEA,SAASC,EAAYb,GAAkD;AACrE,SAAO,aAAaA,KAAOA,EAAI,QAAQ,WAAW,GAAG;AACvD;AAEA,eAAsBS,EAAUD,GAAc;AAC5C,QAAMR,IAAM,MAAMc,EAAc,OAAON,CAAI;AACvC,SAAAK,EAAYb,CAAG,IACV;AAAA,IACL,KAAAA;AAAA,IACA,aAAa;AAAA,EAAA,IAIR;AAAA,IACL,MAFgB,MAAMe,EAAU,WAAWf,GAAK,CAAE,CAAA,GAEnC;AAAA,IACf,aAAa;AAAA,EAAA;AAGnB;"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import * as cg from \"./tscodegen\";\nimport ApiGenerator from \"./generate\";\nimport ts from \"typescript\";\nimport SwaggerParser from \"@apidevtools/swagger-parser\";\nimport converter from \"swagger2openapi\";\nimport { OpenAPI, OpenAPIV3 } from \"openapi-types\";\n\nexport { cg };\n\nexport const optsArgumentStyles = [\"positional\", \"object\"];\nexport type Opts = {\n include?: string[];\n exclude?: string[];\n optimistic?: boolean;\n unionUndefined?: boolean;\n useEnumType?: boolean;\n mergeReadWriteOnly?: boolean;\n argumentStyle?: (typeof optsArgumentStyles)[number];\n};\n\nexport function generateAst(\n doc: OpenAPIV3.Document,\n opts: Opts,\n isConverted: boolean,\n) {\n return new ApiGenerator(doc, opts, isConverted).generateApi();\n}\n\nexport function printAst(ast: ts.SourceFile) {\n return cg.printFile(ast);\n}\n\nexport async function generateSource(spec: string, opts: Opts = {}) {\n var { doc, isConverted } = await parseSpec(spec);\n const ast = generateAst(doc, opts, isConverted);\n const { title, version } = doc.info;\n const preamble = [\"$&\", title, version].filter(Boolean).join(\"\\n * \");\n const src = printAst(ast);\n return src.replace(/^\\/\\*\\*/, preamble);\n}\n\nfunction isOpenApiV3(doc: OpenAPI.Document): doc is OpenAPIV3.Document {\n return \"openapi\" in doc && doc.openapi.startsWith(\"3\");\n}\n\nexport async function parseSpec(spec: string) {\n const doc = await SwaggerParser.bundle(spec);\n if (isOpenApiV3(doc)) {\n return {\n doc,\n isConverted: false,\n };\n } else {\n const converted = await converter.convertObj(doc, {});\n return {\n doc: converted.openapi as OpenAPIV3.Document,\n isConverted: true,\n };\n }\n}\n"],"names":["optsArgumentStyles","generateAst","doc","opts","isConverted","ApiGenerator","printAst","ast","cg.printFile","generateSource","spec","parseSpec","title","version","preamble","isOpenApiV3","SwaggerParser","converter"],"mappings":";;;;AASa,MAAAA,IAAqB,CAAC,cAAc,QAAQ;AAWzC,SAAAC,EACdC,GACAC,GACAC,GACA;AACA,SAAO,IAAIC,EAAaH,GAAKC,GAAMC,CAAW,EAAE,YAAY;AAC9D;AAEO,SAASE,EAASC,GAAoB;AACpC,SAAAC,EAAaD,CAAG;AACzB;AAEA,eAAsBE,EAAeC,GAAcP,IAAa,IAAI;AAClE,MAAI,EAAE,KAAAD,GAAK,aAAAE,EAAgB,IAAA,MAAMO,EAAUD,CAAI;AAC/C,QAAMH,IAAMN,EAAYC,GAAKC,GAAMC,CAAW,GACxC,EAAE,OAAAQ,GAAO,SAAAC,EAAQ,IAAIX,EAAI,MACzBY,IAAW,CAAC,MAAMF,GAAOC,CAAO,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA,IAAO;AAE7D,SADKP,EAASC,CAAG,EACb,QAAQ,WAAWO,CAAQ;AACxC;AAEA,SAASC,EAAYb,GAAkD;AACrE,SAAO,aAAaA,KAAOA,EAAI,QAAQ,WAAW,GAAG;AACvD;AAEA,eAAsBS,EAAUD,GAAc;AAC5C,QAAMR,IAAM,MAAMc,EAAc,OAAON,CAAI;AACvC,SAAAK,EAAYb,CAAG,IACV;AAAA,IACL,KAAAA;AAAA,IACA,aAAa;AAAA,EACf,IAGO;AAAA,IACL,MAFgB,MAAMe,EAAU,WAAWf,GAAK,CAAA,CAAE,GAEnC;AAAA,IACf,aAAa;AAAA,EACf;AAEJ;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oazapfts",
3
- "version": "6.1.2",
3
+ "version": "6.1.4",
4
4
  "description": "OpenApi TypeScript client generator",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -46,21 +46,21 @@
46
46
  ]
47
47
  },
48
48
  "devDependencies": {
49
- "@types/lodash": "^4.17.0",
49
+ "@types/lodash": "^4.17.15",
50
50
  "@types/minimist": "^1.2.5",
51
- "@types/node": "^20.12.7",
51
+ "@types/node": "^22.13.1",
52
52
  "@types/tapable": "^2.2.7"
53
53
  },
54
54
  "peerDependencies": {
55
55
  "@oazapfts/runtime": "*"
56
56
  },
57
57
  "dependencies": {
58
- "@apidevtools/swagger-parser": "^10.1.0",
58
+ "@apidevtools/swagger-parser": "^10.1.1",
59
59
  "lodash": "^4.17.21",
60
60
  "minimist": "^1.2.8",
61
61
  "swagger2openapi": "^7.0.8",
62
62
  "tapable": "^2.2.1",
63
- "typescript": "^5.4.5"
63
+ "typescript": "^5.7.3"
64
64
  },
65
65
  "keywords": [
66
66
  "openapi",
@@ -40,8 +40,7 @@ function ke(t) {
40
40
  return t.variables ? Ke(t.url, t.variables) : U.createStringLiteral(t.url);
41
41
  }
42
42
  function Le(t) {
43
- if (!t)
44
- return "/";
43
+ if (!t) return "/";
45
44
  const { url: e, variables: n } = t;
46
45
  return n ? e.replace(
47
46
  /\{(.+?)\}/g,
@@ -87,10 +86,8 @@ function Ce(t) {
87
86
  if (t?.content)
88
87
  for (const e of Object.keys(t.content)) {
89
88
  const n = le[e];
90
- if (n)
91
- return n;
92
- if (Y(e))
93
- return "json";
89
+ if (n) return n;
90
+ if (Y(e)) return "json";
94
91
  }
95
92
  }
96
93
  function qe({
@@ -237,8 +234,7 @@ class st {
237
234
  this.aliases = [], this.enumAliases = [], this.refs = {}, this.typeAliases = {};
238
235
  }
239
236
  resolve(e) {
240
- if (!O(e))
241
- return e;
237
+ if (!O(e)) return e;
242
238
  const n = e.$ref, i = de(n), r = b.get(this.spec, i);
243
239
  if (typeof r > "u")
244
240
  throw new Error(`Can't find ${i}`);
@@ -258,13 +254,11 @@ class st {
258
254
  return !0;
259
255
  }
260
256
  };
261
- if (n(e))
262
- return e;
257
+ if (n(e)) return e;
263
258
  let i = 2;
264
259
  for (; ; ) {
265
260
  const r = e + String(i);
266
- if (n(r))
267
- return r;
261
+ if (n(r)) return r;
268
262
  i += 1;
269
263
  }
270
264
  }
@@ -405,8 +399,7 @@ class st {
405
399
  * schema and returns the appropriate type.
406
400
  */
407
401
  getBaseTypeFromSchema(e, n, i) {
408
- if (!e && typeof e != "boolean")
409
- return l.any;
402
+ if (!e && typeof e != "boolean") return l.any;
410
403
  if (O(e))
411
404
  return this.getRefAlias(e, i);
412
405
  if (e === !0)
@@ -431,8 +424,8 @@ class st {
431
424
  }
432
425
  if (e.anyOf)
433
426
  return this.getUnionType(e.anyOf, void 0, i);
434
- if (e.discriminator) {
435
- const r = e.discriminator.mapping || {};
427
+ if (e.discriminator?.mapping) {
428
+ const r = e.discriminator.mapping;
436
429
  return this.getUnionType(
437
430
  Object.values(r).map((s) => ({ $ref: s })),
438
431
  void 0,
@@ -499,8 +492,7 @@ class st {
499
492
  */
500
493
  getTypeFromEnum(e) {
501
494
  const n = e.map((i) => {
502
- if (i === null)
503
- return l.null;
495
+ if (i === null) return l.null;
504
496
  if (typeof i == "boolean")
505
497
  return i ? o.createLiteralTypeNode(
506
498
  u.factory.createToken(u.SyntaxKind.TrueKeyword)
@@ -571,13 +563,11 @@ class st {
571
563
  return { readOnly: !1, writeOnly: !1 };
572
564
  const i = (r, s) => {
573
565
  if (O(r)) {
574
- if (!n)
575
- return { readOnly: !1, writeOnly: !1 };
566
+ if (!n) return { readOnly: !1, writeOnly: !1 };
576
567
  if (s.has(r.$ref))
577
568
  return { readOnly: !1, writeOnly: !1 };
578
569
  const d = this.refsOnlyMode.get(r.$ref);
579
- if (d)
580
- return d;
570
+ if (d) return d;
581
571
  s.add(r.$ref);
582
572
  const h = i(this.resolve(r), s);
583
573
  return s.delete(r.$ref), this.refsOnlyMode.set(r.$ref, h), h;
@@ -588,8 +578,7 @@ class st {
588
578
  const p = [];
589
579
  "items" in r && r.items ? p.push(r.items) : (p.push(...Object.values(r.properties ?? {})), p.push(...r.allOf ?? []), p.push(...r.anyOf ?? []), p.push(...r.oneOf ?? []));
590
580
  for (const d of p) {
591
- if (c && f)
592
- break;
581
+ if (c && f) break;
593
582
  const h = i(d, s);
594
583
  c = c || h.readOnly, f = f || h.writeOnly;
595
584
  }
@@ -665,8 +654,7 @@ class st {
665
654
  );
666
655
  }
667
656
  getResponseType(e) {
668
- if (!e)
669
- return "text";
657
+ if (!e) return "text";
670
658
  const n = Object.values(e).map(
671
659
  (r) => this.resolve(r)
672
660
  );
@@ -764,13 +752,11 @@ export const servers = {};
764
752
  );
765
753
  const r = [], s = {};
766
754
  return this.spec.paths && Object.keys(this.spec.paths).forEach((c) => {
767
- if (!this.spec.paths)
768
- return;
755
+ if (!this.spec.paths) return;
769
756
  const f = this.spec.paths[c];
770
757
  f && Object.keys(this.resolve(f)).forEach((p) => {
771
758
  const d = p.toUpperCase();
772
- if (!Ie.includes(d))
773
- return;
759
+ if (!Ie.includes(d)) return;
774
760
  const h = f[p], {
775
761
  operationId: g,
776
762
  requestBody: T,
@@ -796,8 +782,7 @@ export const servers = {};
796
782
  });
797
783
  const A = (y) => {
798
784
  const S = Q.get(y);
799
- if (!S)
800
- throw new Error(`Can't find parameter: ${y.name}`);
785
+ if (!S) throw new Error(`Can't find parameter: ${y.name}`);
801
786
  return S;
802
787
  }, L = [];
803
788
  let j, v;
@@ -1246,8 +1231,7 @@ function be(t, e, n) {
1246
1231
  const i = t.find(
1247
1232
  (r) => r.kind === e && (!n || n(r))
1248
1233
  );
1249
- if (!i)
1250
- throw new Error(`Node not found: ${e}`);
1234
+ if (!i) throw new Error(`Node not found: ${e}`);
1251
1235
  return i;
1252
1236
  }
1253
1237
  function re(t) {
@@ -1263,8 +1247,7 @@ function G(t, e) {
1263
1247
  u.SyntaxKind.VariableStatement,
1264
1248
  (r) => Oe(r) === e
1265
1249
  ), [i] = n.declarationList.declarations;
1266
- if (!i)
1267
- throw new Error("Missing declaration");
1250
+ if (!i) throw new Error("Missing declaration");
1268
1251
  return i;
1269
1252
  }
1270
1253
  function we(t, e, n) {
@@ -1320,8 +1303,7 @@ function rt(t) {
1320
1303
  return ne.printFile(t);
1321
1304
  }
1322
1305
  function W(t) {
1323
- if (!t.length || t.trim() !== t)
1324
- return !1;
1306
+ if (!t.length || t.trim() !== t) return !1;
1325
1307
  const e = u.parseIsolatedEntityName(t, u.ScriptTarget.Latest);
1326
1308
  return !!e && e.kind === u.SyntaxKind.Identifier && u.identifierToKeywordKind(e) === void 0;
1327
1309
  }
@@ -1421,4 +1403,4 @@ export {
1421
1403
  Z as y,
1422
1404
  M as z
1423
1405
  };
1424
- //# sourceMappingURL=tscodegen-Cd0Ct4AR.js.map
1406
+ //# sourceMappingURL=tscodegen-B_Csbh-6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tscodegen-B_Csbh-6.js","sources":["../src/generateServers.ts","../src/generate.ts","../src/tscodegen.ts"],"sourcesContent":["import _ from \"lodash\";\nimport * as cg from \"./tscodegen\";\nimport ts from \"typescript\";\nimport { OpenAPIV3 } from \"openapi-types\";\n\nconst factory = ts.factory;\n\nfunction createTemplate(url: string) {\n const tokens = url.split(/{([\\s\\S]+?)}/g);\n const chunks = _.chunk(tokens.slice(1), 2);\n return cg.createTemplateString(\n tokens[0],\n chunks.map(([expression, literal]) => ({\n expression: factory.createIdentifier(expression),\n literal,\n })),\n );\n}\n\nfunction createServerFunction(\n template: string,\n vars: Record<string, OpenAPIV3.ServerVariableObject>,\n) {\n const params = [\n cg.createParameter(\n cg.createObjectBinding(\n Object.entries(vars || {}).map(([name, value]) => {\n return {\n name,\n initializer: cg.createLiteral(value.default),\n };\n }),\n ),\n {\n type: factory.createTypeLiteralNode(\n Object.entries(vars || {}).map(([name, value]) => {\n return cg.createPropertySignature({\n name,\n type: value.enum\n ? cg.createEnumTypeNode(value.enum)\n : factory.createUnionTypeNode([\n cg.keywordType.string,\n cg.keywordType.number,\n cg.keywordType.boolean,\n ]),\n });\n }),\n ),\n },\n ),\n ];\n\n return cg.createArrowFunction(params, createTemplate(template));\n}\n\nfunction generateServerExpression(server: OpenAPIV3.ServerObject) {\n return server.variables\n ? createServerFunction(server.url, server.variables)\n : factory.createStringLiteral(server.url);\n}\n\nfunction defaultUrl(server?: OpenAPIV3.ServerObject) {\n if (!server) return \"/\";\n const { url, variables } = server;\n if (!variables) return url;\n return url.replace(/\\{(.+?)\\}/g, (m, name) =>\n variables[name] ? String(variables[name].default) : m,\n );\n}\n\nexport function defaultBaseUrl(servers: OpenAPIV3.ServerObject[]) {\n return factory.createStringLiteral(defaultUrl(servers[0]));\n}\n\nfunction serverName(server: OpenAPIV3.ServerObject, index: number) {\n return server.description\n ? _.camelCase(server.description.replace(/\\W+/, \" \"))\n : `server${index + 1}`;\n}\n\nexport default function generateServers(\n servers: OpenAPIV3.ServerObject[],\n): ts.ObjectLiteralExpression {\n return cg.createObjectLiteral(\n servers.map((server, i) => [\n serverName(server, i),\n generateServerExpression(server),\n ]),\n );\n}\n","import _ from \"lodash\";\nimport ts from \"typescript\";\nimport { OpenAPIV3, OpenAPIV3_1 } from \"openapi-types\";\nimport * as cg from \"./tscodegen\";\nimport generateServers, { defaultBaseUrl } from \"./generateServers\";\nimport { Opts } from \".\";\n\nexport * from \"./tscodegen\";\nexport * from \"./generateServers\";\n\nconst factory = ts.factory;\n\nexport const verbs = [\n \"GET\",\n \"PUT\",\n \"POST\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n \"PATCH\",\n \"TRACE\",\n];\n\ntype ContentType = \"json\" | \"form\" | \"multipart\";\ntype OnlyMode = \"readOnly\" | \"writeOnly\";\ntype OnlyModes = Record<OnlyMode, boolean>;\n\n// Use union of OAS 3.0 and 3.1 types throughout\n// openapi-types does not define boolean json schemas (https://json-schema.org/draft/2020-12/json-schema-core#section-4.3.2)\ntype OpenAPISchemaObject =\n | OpenAPIV3.SchemaObject\n | OpenAPIV3_1.SchemaObject\n | boolean;\ntype OpenAPIReferenceObject =\n | OpenAPIV3.ReferenceObject\n | OpenAPIV3_1.ReferenceObject;\ntype OpenAPIParameterObject =\n | OpenAPIV3.ParameterObject\n | OpenAPIV3_1.ParameterObject;\nexport type OpenAPIDocument = OpenAPIV3.Document | OpenAPIV3_1.Document;\ntype OpenAPIDiscriminatorObject =\n | OpenAPIV3.DiscriminatorObject\n | OpenAPIV3_1.DiscriminatorObject;\ntype OpenAPIResponseObject =\n | OpenAPIV3.ResponseObject\n | OpenAPIV3_1.ResponseObject;\ntype OpenAPIResponsesObject =\n | OpenAPIV3.ResponsesObject\n | OpenAPIV3_1.ResponsesObject;\ntype OpenAPIRequestBodyObject =\n | OpenAPIV3.RequestBodyObject\n | OpenAPIV3_1.RequestBodyObject;\ntype OpenAPIMediaTypeObject =\n | OpenAPIV3.MediaTypeObject\n | OpenAPIV3_1.MediaTypeObject;\ntype OpenAPIOperationObject =\n | OpenAPIV3.OperationObject\n | OpenAPIV3_1.OperationObject;\n\nconst contentTypes: Record<string, ContentType> = {\n \"*/*\": \"json\",\n \"application/json\": \"json\",\n \"application/x-www-form-urlencoded\": \"form\",\n \"multipart/form-data\": \"multipart\",\n};\n\nexport function isMimeType(s: unknown) {\n return typeof s === \"string\" && /^[^/]+\\/[^/]+$/.test(s);\n}\n\nexport function isJsonMimeType(mime: string) {\n return contentTypes[mime] === \"json\" || /\\bjson\\b/i.test(mime);\n}\n\nexport function getBodyFormatter(body?: OpenAPIRequestBodyObject) {\n if (body?.content) {\n for (const contentType of Object.keys(body.content)) {\n const formatter = contentTypes[contentType];\n if (formatter) return formatter;\n if (isJsonMimeType(contentType)) return \"json\";\n }\n }\n}\n\n// Augment SchemaObject type to allow slowly adopting new OAS3.1+ features\n// and support custom vendor extensions.\nexport type SchemaObject = OpenAPISchemaObject & {\n const?: unknown;\n \"x-enumNames\"?: string[];\n \"x-enum-varnames\"?: string[];\n \"x-component-ref-path\"?: string;\n prefixItems?: (OpenAPIReferenceObject | SchemaObject)[];\n};\n\nexport type DiscriminatingSchemaObject = Exclude<SchemaObject, boolean> & {\n discriminator: NonNullable<Exclude<SchemaObject, boolean>[\"discriminator\"]>;\n};\n\n/**\n * Get the name of a formatter function for a given parameter.\n */\nexport function getFormatter({\n style = \"form\",\n explode = true,\n content,\n}: OpenAPIParameterObject) {\n if (content) {\n const medias = Object.keys(content);\n if (medias.length !== 1) {\n throw new Error(\n \"Parameters with content property must specify one media type\",\n );\n }\n if (!isJsonMimeType(medias[0])) {\n throw new Error(\n \"Parameters with content property must specify a JSON compatible media type\",\n );\n }\n return \"json\";\n }\n if (explode && style === \"deepObject\") return \"deep\";\n if (explode) return \"explode\";\n if (style === \"spaceDelimited\") return \"space\";\n if (style === \"pipeDelimited\") return \"pipe\";\n return \"form\";\n}\n\nexport function getOperationIdentifier(id?: string) {\n if (!id) return;\n if (id.match(/[^\\w\\s]/)) return;\n id = _.camelCase(id);\n if (cg.isValidIdentifier(id)) return id;\n}\n\n/**\n * Create a method name for a given operation, either from its operationId or\n * the HTTP verb and path.\n */\nexport function getOperationName(\n verb: string,\n path: string,\n operationId?: string,\n) {\n const id = getOperationIdentifier(operationId);\n if (id) return id;\n path = path.replace(/\\{(.+?)\\}/, \"by $1\").replace(/\\{(.+?)\\}/, \"and $1\");\n return toIdentifier(`${verb} ${path}`);\n}\n\nexport function isNullable(schema?: SchemaObject | OpenAPIReferenceObject) {\n if (typeof schema === \"boolean\") return schema;\n\n if (schema && \"nullable\" in schema)\n return !isReference(schema) && schema.nullable;\n\n return false;\n}\n\nexport function isReference(obj: unknown): obj is OpenAPIReferenceObject {\n return typeof obj === \"object\" && obj !== null && \"$ref\" in obj;\n}\n\n/**\n * Converts a local reference path into an array of property names.\n */\nexport function refPathToPropertyPath(ref: string) {\n if (!ref.startsWith(\"#/\")) {\n throw new Error(\n `External refs are not supported (${ref}). Make sure to call SwaggerParser.bundle() first.`,\n );\n }\n return ref\n .slice(2)\n .split(\"/\")\n .map((s) => decodeURI(s.replace(/~1/g, \"/\").replace(/~0/g, \"~\")));\n}\n\n/**\n * Get the last path component of the given ref.\n */\nfunction getRefBasename(ref: string) {\n return ref.replace(/.+\\//, \"\");\n}\n\n/**\n * Returns a name for the given ref that can be used as basis for a type\n * alias. This usually is the baseName, unless the ref starts with a number,\n * in which case the whole ref is returned, with slashes turned into\n * underscores.\n */\nfunction getRefName(ref: string) {\n const base = getRefBasename(ref);\n if (/^\\d+/.test(base)) {\n return refPathToPropertyPath(ref).join(\"_\");\n }\n return base;\n}\n\n/**\n * If the given object is a ReferenceObject, return the last part of its path.\n */\nexport function getReferenceName(obj: unknown) {\n if (isReference(obj)) {\n return getRefBasename(obj.$ref);\n }\n}\n\nconst onlyModeSuffixes: Record<OnlyMode, string> = {\n readOnly: \"Read\",\n writeOnly: \"Write\",\n};\n\nfunction getOnlyModeSuffix(onlyMode?: OnlyMode) {\n if (!onlyMode) return \"\";\n return onlyModeSuffixes[onlyMode];\n}\n\nexport function toIdentifier(\n s: string,\n upperFirst = false,\n onlyMode?: OnlyMode,\n) {\n let cc = _.camelCase(s) + getOnlyModeSuffix(onlyMode);\n if (upperFirst) cc = _.upperFirst(cc);\n if (cg.isValidIdentifier(cc)) return cc;\n return \"$\" + cc;\n}\n\n/**\n * Create a template string literal from the given OpenAPI urlTemplate.\n * Curly braces in the path are turned into identifier expressions,\n * which are read from the local scope during runtime.\n */\nexport function createUrlExpression(path: string, qs?: ts.Expression) {\n const spans: Array<{ expression: ts.Expression; literal: string }> = [];\n // Use a replacer function to collect spans as a side effect:\n const head = path.replace(\n /(.*?)\\{(.+?)\\}(.*?)(?=\\{|$)/g,\n (_substr, head, name, literal) => {\n const expression = toIdentifier(name);\n spans.push({\n expression: cg.createCall(\n factory.createIdentifier(\"encodeURIComponent\"),\n { args: [factory.createIdentifier(expression)] },\n ),\n literal,\n });\n return head;\n },\n );\n\n if (qs) {\n // add the query string as last span\n spans.push({ expression: qs, literal: \"\" });\n }\n return cg.createTemplateString(head, spans);\n}\n\n/**\n * Create a call expression for one of the QS runtime functions.\n */\nexport function callQsFunction(name: string, args: ts.Expression[]) {\n return cg.createCall(\n factory.createPropertyAccessExpression(\n factory.createIdentifier(\"QS\"),\n name,\n ),\n { args },\n );\n}\n\n/**\n * Create a call expression for one of the oazapfts runtime functions.\n */\nexport function callOazapftsFunction(\n name: string,\n args: ts.Expression[],\n typeArgs?: ts.TypeNode[],\n) {\n return cg.createCall(\n factory.createPropertyAccessExpression(\n factory.createIdentifier(\"oazapfts\"),\n name,\n ),\n { args, typeArgs },\n );\n}\n\n/**\n * Despite its name, OpenApi's `deepObject` serialization does not support\n * deeply nested objects. As a workaround we detect parameters that contain\n * square brackets and merge them into a single object.\n */\nexport function supportDeepObjects(params: OpenAPIParameterObject[]) {\n const res: OpenAPIParameterObject[] = [];\n const merged: any = {};\n params.forEach((p) => {\n const m = /^(.+?)\\[(.*?)\\]/.exec(p.name);\n if (!m) {\n res.push(p);\n return;\n }\n const [, name, prop] = m;\n let obj = merged[name];\n if (!obj) {\n obj = merged[name] = {\n name,\n in: p.in,\n style: \"deepObject\",\n schema: {\n type: \"object\",\n properties: {},\n },\n };\n res.push(obj);\n }\n obj.schema.properties[prop] = p.schema;\n });\n return res;\n}\n\nfunction isKeyOfKeywordType(key: string): key is keyof typeof cg.keywordType {\n return key in cg.keywordType;\n}\n\n/**\n * Main entry point that generates TypeScript code from a given API spec.\n */\nexport default class ApiGenerator {\n constructor(\n public readonly spec: OpenAPIDocument,\n public readonly opts: Opts = {},\n /** Indicates if the document was converted from an older version of the OpenAPI specification. */\n public readonly isConverted = false,\n ) {\n if (this.spec.components?.schemas) {\n this.preprocessComponents(this.spec.components.schemas);\n }\n }\n\n // see `preprocessComponents` for the definition of a discriminating schema\n discriminatingSchemas: Set<string> = new Set();\n\n aliases: (ts.TypeAliasDeclaration | ts.InterfaceDeclaration)[] = [];\n\n enumAliases: ts.Statement[] = [];\n enumRefs: Record<string, { values: string; type: ts.TypeReferenceNode }> = {};\n\n // Collect the types of all referenced schemas so we can export them later\n // Referenced schemas can be pointing at the following versions:\n // - \"base\": The regular type/interface e.g. ExampleSchema\n // - \"readOnly\": The readOnly version e.g. ExampleSchemaRead\n // - \"writeOnly\": The writeOnly version e.g. ExampleSchemaWrite\n refs: Record<\n string,\n {\n base: ts.TypeReferenceNode;\n readOnly?: ts.TypeReferenceNode;\n writeOnly?: ts.TypeReferenceNode;\n }\n > = {};\n\n // Maps a referenced schema to its readOnly/writeOnly status\n // This field should be used exclusively within the `checkSchemaOnlyMode` method\n refsOnlyMode: Map<string, OnlyModes> = new Map();\n\n // Keep track of already used type aliases\n typeAliases: Record<string, number> = {};\n\n reset() {\n this.aliases = [];\n this.enumAliases = [];\n this.refs = {};\n this.typeAliases = {};\n }\n\n resolve<T>(obj: T | OpenAPIReferenceObject) {\n if (!isReference(obj)) return obj;\n const ref = obj.$ref;\n const path = refPathToPropertyPath(ref);\n const resolved = _.get(this.spec, path);\n if (typeof resolved === \"undefined\") {\n throw new Error(`Can't find ${path}`);\n }\n return resolved as T;\n }\n\n resolveArray<T>(array?: Array<T | OpenAPIReferenceObject>) {\n return array ? array.map((el) => this.resolve(el)) : [];\n }\n\n skip(tags?: string[]) {\n const excluded = tags && tags.some((t) => this.opts?.exclude?.includes(t));\n if (excluded) {\n return true;\n }\n if (this.opts?.include) {\n const included = tags && tags.some((t) => this.opts.include?.includes(t));\n return !included;\n }\n return false;\n }\n\n findAvailableRef(ref: string) {\n const available = (ref: string) => {\n try {\n this.resolve({ $ref: ref });\n return false;\n } catch (error) {\n return true;\n }\n };\n\n if (available(ref)) return ref;\n\n let i = 2;\n while (true) {\n const key = ref + String(i);\n if (available(key)) return key;\n i += 1;\n }\n }\n\n getUniqueAlias(name: string) {\n let used = this.typeAliases[name] || 0;\n if (used) {\n this.typeAliases[name] = ++used;\n name += used;\n }\n this.typeAliases[name] = 1;\n return name;\n }\n\n getEnumUniqueAlias(name: string, values: string) {\n // If enum name already exists and have the same values\n if (this.enumRefs[name] && this.enumRefs[name].values == values) {\n return name;\n }\n\n return this.getUniqueAlias(name);\n }\n\n /**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\n getRefAlias(\n obj: OpenAPIReferenceObject,\n onlyMode?: OnlyMode,\n // If true, the discriminator property of the schema referenced by `obj` will be ignored.\n // This is meant to be used when getting the type of a discriminating schema in an `allOf`\n // construct.\n ignoreDiscriminator?: boolean,\n ) {\n const $ref = ignoreDiscriminator\n ? this.findAvailableRef(obj.$ref + \"Base\")\n : obj.$ref;\n\n if (!this.refs[$ref]) {\n let schema = this.resolve<SchemaObject>(obj);\n\n if (typeof schema !== \"boolean\" && ignoreDiscriminator) {\n schema = _.cloneDeep(schema);\n delete schema.discriminator;\n }\n const name =\n (typeof schema !== \"boolean\" && schema.title) || getRefName($ref);\n const identifier = toIdentifier(name, true);\n\n // When this is a true enum we can reference it directly,\n // no need to create a type alias\n if (this.isTrueEnum(schema, name)) {\n return this.getTypeFromSchema(schema, name);\n }\n\n const alias = this.getUniqueAlias(identifier);\n\n this.refs[$ref] = {\n base: factory.createTypeReferenceNode(alias, undefined),\n readOnly: undefined,\n writeOnly: undefined,\n };\n\n const type = this.getTypeFromSchema(schema, undefined);\n this.aliases.push(\n cg.createTypeAliasDeclaration({\n modifiers: [cg.modifier.export],\n name: alias,\n type,\n }),\n );\n\n const { readOnly, writeOnly } = this.checkSchemaOnlyMode(schema);\n\n if (readOnly) {\n const readOnlyAlias = this.getUniqueAlias(\n toIdentifier(name, true, \"readOnly\"),\n );\n this.refs[$ref][\"readOnly\"] = factory.createTypeReferenceNode(\n readOnlyAlias,\n undefined,\n );\n\n const readOnlyType = this.getTypeFromSchema(schema, name, \"readOnly\");\n this.aliases.push(\n cg.createTypeAliasDeclaration({\n modifiers: [cg.modifier.export],\n name: readOnlyAlias,\n type: readOnlyType,\n }),\n );\n }\n\n if (writeOnly) {\n const writeOnlyAlias = this.getUniqueAlias(\n toIdentifier(name, true, \"writeOnly\"),\n );\n this.refs[$ref][\"writeOnly\"] = factory.createTypeReferenceNode(\n writeOnlyAlias,\n undefined,\n );\n const writeOnlyType = this.getTypeFromSchema(schema, name, \"writeOnly\");\n this.aliases.push(\n cg.createTypeAliasDeclaration({\n modifiers: [cg.modifier.export],\n name: writeOnlyAlias,\n type: writeOnlyType,\n }),\n );\n }\n }\n\n // If not ref fallback to the regular reference\n return this.refs[$ref][onlyMode || \"base\"] ?? this.refs[$ref].base;\n }\n\n getUnionType(\n variants: (OpenAPIReferenceObject | SchemaObject)[],\n discriminator?: OpenAPIDiscriminatorObject,\n onlyMode?: OnlyMode,\n ) {\n if (discriminator) {\n // oneOf + discriminator -> tagged union (polymorphism)\n if (discriminator.propertyName === undefined) {\n throw new Error(\"Discriminators require a propertyName\");\n }\n\n // By default, the last component of the ref name (i.e., after the last trailing slash) is\n // used as the discriminator value for each variant. This can be overridden using the\n // discriminator.mapping property.\n const mappedValues = new Set(\n Object.values(discriminator.mapping || {}).map(getRefBasename),\n );\n\n return factory.createUnionTypeNode(\n (\n [\n ...Object.entries(discriminator.mapping || {}).map(\n ([discriminatorValue, variantRef]) => [\n discriminatorValue,\n { $ref: variantRef },\n ],\n ),\n ...variants\n .filter((variant) => {\n if (!isReference(variant)) {\n // From the Swagger spec: \"When using the discriminator, inline schemas will not be\n // considered.\"\n throw new Error(\n \"Discriminators require references, not inline schemas\",\n );\n }\n return !mappedValues.has(getRefBasename(variant.$ref));\n })\n .map((schema) => {\n const schemaBaseName = getRefBasename(\n (schema as OpenAPIV3.ReferenceObject).$ref,\n );\n const resolvedSchema = this.resolve(\n schema,\n ) as OpenAPIV3.SchemaObject;\n const discriminatorProperty =\n resolvedSchema.properties?.[discriminator.propertyName];\n const variantName =\n discriminatorProperty && \"enum\" in discriminatorProperty\n ? discriminatorProperty?.enum?.[0]\n : \"\";\n return [variantName || schemaBaseName, schema];\n }),\n ] as [string, OpenAPIReferenceObject][]\n ).map(([discriminatorValue, variant]) =>\n // Yields: { [discriminator.propertyName]: discriminatorValue } & variant\n factory.createIntersectionTypeNode([\n factory.createTypeLiteralNode([\n cg.createPropertySignature({\n name: discriminator.propertyName,\n type: factory.createLiteralTypeNode(\n factory.createStringLiteral(discriminatorValue),\n ),\n }),\n ]),\n this.getTypeFromSchema(variant, undefined, onlyMode),\n ]),\n ),\n );\n } else {\n // oneOf -> untagged union\n return factory.createUnionTypeNode(\n variants.map((schema) =>\n this.getTypeFromSchema(schema, undefined, onlyMode),\n ),\n );\n }\n }\n\n /**\n * Creates a type node from a given schema.\n * Delegates to getBaseTypeFromSchema internally and\n * optionally adds a union with null.\n */\n getTypeFromSchema(\n schema?: SchemaObject | OpenAPIReferenceObject,\n name?: string,\n onlyMode?: OnlyMode,\n ) {\n const type = this.getBaseTypeFromSchema(schema, name, onlyMode);\n return isNullable(schema)\n ? factory.createUnionTypeNode([type, cg.keywordType.null])\n : type;\n }\n\n /**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\n getBaseTypeFromSchema(\n schema?: SchemaObject | OpenAPIReferenceObject,\n name?: string,\n onlyMode?: OnlyMode,\n ): ts.TypeNode {\n if (!schema && typeof schema !== \"boolean\") return cg.keywordType.any;\n if (isReference(schema)) {\n return this.getRefAlias(schema, onlyMode) as ts.TypeReferenceNode;\n }\n\n if (schema === true) {\n return cg.keywordType.any;\n }\n\n if (schema === false) {\n return cg.keywordType.never;\n }\n\n if (schema.oneOf) {\n const clone = { ...schema };\n delete clone.oneOf;\n // oneOf -> union\n return this.getUnionType(\n schema.oneOf.map((variant) =>\n // ensure that base properties from the schema are included in the oneOf variants\n _.mergeWith({}, clone, variant, (objValue, srcValue) => {\n if (_.isArray(objValue)) {\n return objValue.concat(srcValue);\n }\n }),\n ),\n schema.discriminator,\n onlyMode,\n );\n }\n if (schema.anyOf) {\n // anyOf -> union\n return this.getUnionType(schema.anyOf, undefined, onlyMode);\n }\n if (schema.discriminator?.mapping) {\n // discriminating schema -> union\n const mapping = schema.discriminator.mapping;\n return this.getUnionType(\n Object.values(mapping).map((ref) => ({ $ref: ref })),\n undefined,\n onlyMode,\n );\n }\n if (schema.allOf) {\n // allOf -> intersection\n const types = [];\n for (const childSchema of schema.allOf) {\n if (\n isReference(childSchema) &&\n this.discriminatingSchemas.has(childSchema.$ref)\n ) {\n const discriminatingSchema =\n this.resolve<DiscriminatingSchemaObject>(childSchema);\n const discriminator = discriminatingSchema.discriminator;\n const matched = Object.entries(discriminator.mapping || {}).find(\n ([, ref]) => ref === schema[\"x-component-ref-path\"],\n );\n if (matched) {\n const [discriminatorValue] = matched;\n types.push(\n factory.createTypeLiteralNode([\n cg.createPropertySignature({\n name: discriminator.propertyName,\n type: factory.createLiteralTypeNode(\n factory.createStringLiteral(discriminatorValue),\n ),\n }),\n ]),\n );\n }\n types.push(\n this.getRefAlias(\n childSchema,\n onlyMode,\n /* ignoreDiscriminator */ true,\n ),\n );\n } else {\n types.push(this.getTypeFromSchema(childSchema, undefined, onlyMode));\n }\n }\n\n if (schema.properties || schema.additionalProperties) {\n // properties -> literal type\n types.push(\n this.getTypeFromProperties(\n schema.properties || {},\n schema.required,\n schema.additionalProperties,\n onlyMode,\n ),\n );\n }\n return factory.createIntersectionTypeNode(types);\n }\n if (\"items\" in schema) {\n // items -> array\n return factory.createArrayTypeNode(\n this.getTypeFromSchema(schema.items, undefined, onlyMode),\n );\n }\n if (\"prefixItems\" in schema && schema.prefixItems) {\n // prefixItems -> typed tuple\n return factory.createTupleTypeNode(\n schema.prefixItems.map((schema) => this.getTypeFromSchema(schema)),\n );\n }\n if (schema.properties || schema.additionalProperties) {\n // properties -> literal type\n return this.getTypeFromProperties(\n schema.properties || {},\n schema.required,\n schema.additionalProperties,\n onlyMode,\n );\n }\n if (schema.enum) {\n // enum -> enum or union\n return this.isTrueEnum(schema, name)\n ? this.getTrueEnum(schema, name)\n : cg.createEnumTypeNode(schema.enum);\n }\n if (schema.format == \"binary\") {\n return factory.createTypeReferenceNode(\"Blob\", []);\n }\n if (schema.const) {\n return this.getTypeFromEnum([schema.const]);\n }\n if (schema.type) {\n // string, boolean, null, number, array\n if (Array.isArray(schema.type)) {\n return factory.createUnionTypeNode(\n schema.type.map((type) => {\n if (type === \"null\") return cg.keywordType.null;\n if (type === \"integer\") return cg.keywordType.number;\n if (isKeyOfKeywordType(type)) return cg.keywordType[type];\n\n return cg.keywordType.any;\n }),\n );\n }\n if (schema.type === \"integer\") return cg.keywordType.number;\n if (isKeyOfKeywordType(schema.type)) return cg.keywordType[schema.type];\n return cg.keywordType.any;\n }\n\n return cg.keywordType.any;\n }\n\n isTrueEnum(schema: SchemaObject, name?: string): name is string {\n return Boolean(\n typeof schema !== \"boolean\" &&\n schema.enum &&\n this.opts.useEnumType &&\n name &&\n schema.type !== \"boolean\",\n );\n }\n\n /**\n * Creates literal type (or union) from an array of values\n */\n getTypeFromEnum(values: unknown[]) {\n const types = values.map((s) => {\n if (s === null) return cg.keywordType.null;\n if (typeof s === \"boolean\")\n return s\n ? factory.createLiteralTypeNode(\n ts.factory.createToken(ts.SyntaxKind.TrueKeyword),\n )\n : factory.createLiteralTypeNode(\n ts.factory.createToken(ts.SyntaxKind.FalseKeyword),\n );\n if (typeof s === \"number\")\n return factory.createLiteralTypeNode(factory.createNumericLiteral(s));\n if (typeof s === \"string\")\n return factory.createLiteralTypeNode(factory.createStringLiteral(s));\n throw new Error(`Unexpected ${String(s)} of type ${typeof s} in enum`);\n });\n return types.length > 1 ? factory.createUnionTypeNode(types) : types[0];\n }\n\n getEnumValuesString(values: string[]) {\n return values.join(\"_\");\n }\n\n /*\n Creates a enum \"ref\" if not used, reuse existing if values and name matches or creates a new one\n with a new name adding a number\n */\n getTrueEnum(schema: SchemaObject, propName: string) {\n if (typeof schema === \"boolean\") {\n // this should never be thrown, since the only `getTrueEnum` call is\n // behind an `isTrueEnum` check, which returns false for boolean schemas.\n throw new Error(\n \"cannot get enum from boolean schema. schema must be an object\",\n );\n }\n const baseName = schema.title || _.upperFirst(propName);\n // TODO: use _.camelCase in future major version\n // (currently we allow _ and $ for backwards compatibility)\n const proposedName = baseName\n .split(/[^A-Za-z0-9$_]/g)\n .map((n) => _.upperFirst(n))\n .join(\"\");\n const stringEnumValue = this.getEnumValuesString(\n schema.enum ? schema.enum : [],\n );\n\n const name = this.getEnumUniqueAlias(proposedName, stringEnumValue);\n\n if (this.enumRefs[proposedName] && proposedName === name) {\n return this.enumRefs[proposedName].type;\n }\n\n const values = schema.enum ? schema.enum : [];\n\n const names = schema[\"x-enumNames\"] ?? schema[\"x-enum-varnames\"];\n if (names) {\n if (!Array.isArray(names)) {\n throw new Error(\"enum names must be an array\");\n }\n if (names.length !== values.length) {\n throw new Error(\"enum names must have the same length as enum values\");\n }\n }\n\n const members = values.map((s, index) => {\n if (schema.type === \"number\" || schema.type === \"integer\") {\n const name = names ? names[index] : String(s);\n return factory.createEnumMember(\n factory.createIdentifier(toIdentifier(name, true)),\n cg.createLiteral(s),\n );\n }\n return factory.createEnumMember(\n factory.createIdentifier(toIdentifier(s, true)),\n cg.createLiteral(s),\n );\n });\n this.enumAliases.push(\n factory.createEnumDeclaration([cg.modifier.export], name, members),\n );\n\n const type = factory.createTypeReferenceNode(name, undefined);\n\n this.enumRefs[proposedName] = {\n values: stringEnumValue,\n type: factory.createTypeReferenceNode(name, undefined),\n };\n\n return type;\n }\n\n /**\n * Checks if readOnly/writeOnly properties are present in the given schema.\n * Returns a tuple of booleans; the first one is about readOnly, the second\n * one is about writeOnly.\n */\n checkSchemaOnlyMode(\n schema: SchemaObject | OpenAPIReferenceObject,\n resolveRefs = true,\n ): OnlyModes {\n if (this.opts.mergeReadWriteOnly) {\n return { readOnly: false, writeOnly: false };\n }\n\n const check = (\n schema: SchemaObject | OpenAPIReferenceObject,\n history: Set<string>,\n ): OnlyModes => {\n if (isReference(schema)) {\n if (!resolveRefs) return { readOnly: false, writeOnly: false };\n\n // history is used to prevent infinite recursion\n if (history.has(schema.$ref))\n return { readOnly: false, writeOnly: false };\n\n // check if the result is cached in `this.refsOnlyMode`\n const cached = this.refsOnlyMode.get(schema.$ref);\n if (cached) return cached;\n\n history.add(schema.$ref);\n const ret = check(this.resolve(schema), history);\n history.delete(schema.$ref);\n\n // cache the result\n this.refsOnlyMode.set(schema.$ref, ret);\n\n return ret;\n }\n\n if (typeof schema === \"boolean\") {\n return { readOnly: false, writeOnly: false };\n }\n\n let readOnly = schema.readOnly ?? false;\n let writeOnly = schema.writeOnly ?? false;\n\n const subSchemas: (OpenAPIReferenceObject | SchemaObject)[] = [];\n if (\"items\" in schema && schema.items) {\n subSchemas.push(schema.items);\n } else {\n subSchemas.push(...Object.values(schema.properties ?? {}));\n subSchemas.push(...(schema.allOf ?? []));\n subSchemas.push(...(schema.anyOf ?? []));\n subSchemas.push(...(schema.oneOf ?? []));\n }\n\n for (const schema of subSchemas) {\n // `readOnly` and `writeOnly` do not change once they become true,\n // so you can exit early if both are true.\n if (readOnly && writeOnly) break;\n\n const result = check(schema, history);\n readOnly = readOnly || result.readOnly;\n writeOnly = writeOnly || result.writeOnly;\n }\n\n return { readOnly, writeOnly };\n };\n\n return check(schema, new Set<string>());\n }\n\n /**\n * Recursively creates a type literal with the given props.\n */\n getTypeFromProperties(\n props: {\n [prop: string]: SchemaObject | OpenAPIReferenceObject;\n },\n required?: string[],\n additionalProperties?:\n | boolean\n | OpenAPISchemaObject\n | OpenAPIReferenceObject,\n onlyMode?: OnlyMode,\n ): ts.TypeLiteralNode {\n // Check if any of the props are readOnly or writeOnly schemas\n const propertyNames = Object.keys(props);\n const filteredPropertyNames = propertyNames.filter((name) => {\n const schema = props[name];\n const { readOnly, writeOnly } = this.checkSchemaOnlyMode(schema, false);\n\n switch (onlyMode) {\n case \"readOnly\":\n return readOnly || !writeOnly;\n case \"writeOnly\":\n return writeOnly || !readOnly;\n default:\n return !readOnly && !writeOnly;\n }\n });\n\n const members: ts.TypeElement[] = filteredPropertyNames.map((name) => {\n const schema = props[name];\n const isRequired = required && required.includes(name);\n let type = this.getTypeFromSchema(schema, name, onlyMode);\n if (!isRequired && this.opts.unionUndefined) {\n type = factory.createUnionTypeNode([type, cg.keywordType.undefined]);\n }\n\n const signature = cg.createPropertySignature({\n questionToken: !isRequired,\n name,\n type,\n });\n\n if (\n typeof schema !== \"boolean\" &&\n \"description\" in schema &&\n schema.description\n ) {\n // Escape any JSDoc comment closing tags in description\n const description = schema.description.replace(\"*/\", \"*\\\\/\");\n\n ts.addSyntheticLeadingComment(\n signature,\n ts.SyntaxKind.MultiLineCommentTrivia,\n // Ensures it is formatted like a JSDoc comment: /** description here */\n `* ${description} `,\n true,\n );\n }\n\n return signature;\n });\n if (additionalProperties) {\n const type =\n additionalProperties === true\n ? cg.keywordType.any\n : this.getTypeFromSchema(additionalProperties, undefined, onlyMode);\n\n members.push(cg.createIndexSignature(type));\n }\n return factory.createTypeLiteralNode(members);\n }\n\n getTypeFromResponses(responses: OpenAPIResponsesObject, onlyMode?: OnlyMode) {\n return factory.createUnionTypeNode(\n Object.entries(responses).map(([code, res]) => {\n const statusType =\n code === \"default\"\n ? cg.keywordType.number\n : factory.createLiteralTypeNode(factory.createNumericLiteral(code));\n\n const props = [\n cg.createPropertySignature({\n name: \"status\",\n type: statusType,\n }),\n ];\n\n const dataType = this.getTypeFromResponse(res, onlyMode);\n if (dataType !== cg.keywordType.void) {\n props.push(\n cg.createPropertySignature({\n name: \"data\",\n type: dataType,\n }),\n );\n }\n return factory.createTypeLiteralNode(props);\n }),\n );\n }\n\n getTypeFromResponse(\n resOrRef: OpenAPIResponseObject | OpenAPIReferenceObject,\n onlyMode?: OnlyMode,\n ) {\n const res = this.resolve(resOrRef);\n if (!res || !res.content) return cg.keywordType.void;\n return this.getTypeFromSchema(\n this.getSchemaFromContent(res.content),\n undefined,\n onlyMode,\n );\n }\n\n getResponseType(\n responses?: OpenAPIResponsesObject,\n ): \"json\" | \"text\" | \"blob\" {\n // backwards-compatibility\n if (!responses) return \"text\";\n\n const resolvedResponses = Object.values(responses).map((response) =>\n this.resolve(response),\n );\n\n // if no content is specified, assume `text` (backwards-compatibility)\n if (\n !resolvedResponses.some(\n (res) => Object.keys(res.content ?? {}).length > 0,\n )\n ) {\n return \"text\";\n }\n\n const isJson = resolvedResponses.some((response) => {\n const responseMimeTypes = Object.keys(response.content ?? {});\n return responseMimeTypes.some(isJsonMimeType);\n });\n\n // if there’s `application/json` or `*/*`, assume `json`\n if (isJson) {\n return \"json\";\n }\n\n // if there’s `text/*`, assume `text`\n if (\n resolvedResponses.some((res) =>\n Object.keys(res.content ?? []).some((type) => type.startsWith(\"text/\")),\n )\n ) {\n return \"text\";\n }\n\n // for the rest, assume `blob`\n return \"blob\";\n }\n\n getSchemaFromContent(\n content: Record<string, OpenAPIMediaTypeObject>,\n ): OpenAPISchemaObject | OpenAPIReferenceObject {\n const contentType = Object.keys(content).find(isMimeType);\n if (contentType) {\n const { schema } = content[contentType];\n if (schema) {\n return schema;\n }\n }\n\n // if no content is specified -> string\n // `text/*` -> string\n if (\n Object.keys(content).length === 0 ||\n Object.keys(content).some((type) => type.startsWith(\"text/\"))\n ) {\n return { type: \"string\" };\n }\n\n // rest (e.g. `application/octet-stream`, `application/gzip`, …) -> binary\n return { type: \"string\", format: \"binary\" };\n }\n\n getTypeFromParameter(p: OpenAPIParameterObject) {\n if (p.content) {\n const schema = this.getSchemaFromContent(p.content);\n return this.getTypeFromSchema(schema);\n }\n return this.getTypeFromSchema(isReference(p) ? p : p.schema);\n }\n\n wrapResult(ex: ts.Expression) {\n return this.opts?.optimistic ? callOazapftsFunction(\"ok\", [ex]) : ex;\n }\n\n /**\n * Does three things:\n * 1. Add a `x-component-ref-path` property.\n * 2. Record discriminating schemas in `this.discriminatingSchemas`. A discriminating schema\n * refers to a schema that has a `discriminator` property which is neither used in conjunction\n * with `oneOf` nor `anyOf`.\n * 3. Make all mappings of discriminating schemas explicit to generate types immediately.\n */\n preprocessComponents(schemas: {\n [key: string]: OpenAPIReferenceObject | SchemaObject;\n }) {\n const prefix = \"#/components/schemas/\";\n\n // First scan: Add `x-component-ref-path` property and record discriminating schemas\n for (const name of Object.keys(schemas)) {\n const schema = schemas[name];\n if (isReference(schema) || typeof schema === \"boolean\") continue;\n\n schema[\"x-component-ref-path\"] = prefix + name;\n\n if (\n typeof schema !== \"boolean\" &&\n schema.discriminator &&\n !schema.oneOf &&\n !schema.anyOf\n ) {\n this.discriminatingSchemas.add(prefix + name);\n }\n }\n\n const isExplicit = (\n discriminator: OpenAPIDiscriminatorObject,\n ref: string,\n ) => {\n const refs = Object.values(discriminator.mapping || {});\n return refs.includes(ref);\n };\n\n // Second scan: Make all mappings of discriminating schemas explicit\n for (const name of Object.keys(schemas)) {\n const schema = schemas[name];\n\n if (isReference(schema) || typeof schema === \"boolean\" || !schema.allOf) {\n continue;\n }\n\n for (const childSchema of schema.allOf) {\n if (\n !isReference(childSchema) ||\n !this.discriminatingSchemas.has(childSchema.$ref)\n ) {\n continue;\n }\n\n const discriminatingSchema = schemas[\n getRefBasename(childSchema.$ref)\n ] as DiscriminatingSchemaObject;\n const discriminator = discriminatingSchema.discriminator!;\n\n if (isExplicit(discriminator, prefix + name)) continue;\n if (!discriminator.mapping) {\n discriminator.mapping = {};\n }\n discriminator.mapping[name] = prefix + name;\n }\n }\n }\n\n generateApi() {\n this.reset();\n\n // Parse ApiStub.ts so that we don't have to generate everything manually\n const stub = ts.createSourceFile(\n \"ApiStub.ts\",\n __API_STUB_PLACEHOLDER__, // replaced with ApiStub.ts during build\n ts.ScriptTarget.Latest,\n /*setParentNodes*/ false,\n ts.ScriptKind.TS,\n );\n\n // ApiStub contains `const servers = {}`, find it ...\n const servers = cg.findFirstVariableDeclaration(stub.statements, \"servers\");\n // servers.initializer is readonly, this might break in a future TS version, but works fine for now.\n Object.assign(servers, {\n initializer: generateServers(this.spec.servers || []),\n });\n\n const { initializer } = cg.findFirstVariableDeclaration(\n stub.statements,\n \"defaults\",\n );\n if (!initializer || !ts.isObjectLiteralExpression(initializer)) {\n throw new Error(\"No object literal: defaults\");\n }\n\n cg.changePropertyValue(\n initializer,\n \"baseUrl\",\n defaultBaseUrl(this.spec.servers || []),\n );\n\n // Collect class functions to be added...\n const functions: ts.FunctionDeclaration[] = [];\n\n // Keep track of names to detect duplicates\n const names: Record<string, number> = {};\n\n if (this.spec.paths) {\n Object.keys(this.spec.paths).forEach((path) => {\n if (!this.spec.paths) return;\n\n const item = this.spec.paths[path];\n\n if (!item) {\n return;\n }\n\n Object.keys(this.resolve(item)).forEach((verb) => {\n const method = verb.toUpperCase();\n // skip summary/description/parameters etc...\n if (!verbs.includes(method)) return;\n\n const op: OpenAPIOperationObject = (item as any)[verb];\n const {\n operationId,\n requestBody,\n responses,\n summary,\n description,\n tags,\n } = op;\n\n if (this.skip(tags)) {\n return;\n }\n\n let name = getOperationName(verb, path, operationId);\n const count = (names[name] = (names[name] || 0) + 1);\n if (count > 1) {\n // The name is already taken, which means that the spec is probably\n // invalid as operationIds must be unique. Since this is quite common\n // nevertheless we append a counter:\n name += count;\n }\n\n // merge item and op parameters\n const resolvedParameters = this.resolveArray(item.parameters);\n for (const p of this.resolveArray(op.parameters)) {\n const existing = resolvedParameters.find(\n (r) => r.name === p.name && r.in === p.in,\n );\n if (!existing) {\n resolvedParameters.push(p);\n }\n }\n\n // expand older OpenAPI parameters into deepObject style where needed\n const parameters = this.isConverted\n ? supportDeepObjects(resolvedParameters)\n : resolvedParameters;\n\n // convert parameter names to argument names ...\n const argNames = new Map<OpenAPIParameterObject, string>();\n _.sortBy(parameters, \"name.length\").forEach((p) => {\n const identifier = toIdentifier(p.name);\n const existing = [...argNames.values()];\n const suffix = existing.includes(identifier)\n ? _.upperFirst(p.in)\n : \"\";\n argNames.set(p, identifier + suffix);\n });\n\n const getArgName = (param: OpenAPIParameterObject) => {\n const name = argNames.get(param);\n if (!name) throw new Error(`Can't find parameter: ${param.name}`);\n return name;\n };\n\n const methodParams: ts.ParameterDeclaration[] = [];\n let body: OpenAPIRequestBodyObject | undefined = undefined;\n let bodyVar: string | undefined = undefined;\n switch (this.opts.argumentStyle ?? \"positional\") {\n case \"positional\":\n // split into required/optional\n const [required, optional] = _.partition(parameters, \"required\");\n\n // build the method signature - first all the required parameters\n const requiredParams = required.map((p) =>\n cg.createParameter(getArgName(this.resolve(p)), {\n type: this.getTypeFromParameter(p),\n }),\n );\n methodParams.push(...requiredParams);\n\n // add body if present\n if (requestBody) {\n body = this.resolve(requestBody);\n const schema = this.getSchemaFromContent(body.content);\n const type = this.getTypeFromSchema(\n schema,\n undefined,\n \"writeOnly\",\n );\n bodyVar = toIdentifier(\n (type as any).name || getReferenceName(schema) || \"body\",\n );\n methodParams.push(\n cg.createParameter(bodyVar, {\n type,\n questionToken: !body.required,\n }),\n );\n }\n\n // add an object with all optional parameters\n if (optional.length) {\n methodParams.push(\n cg.createParameter(\n cg.createObjectBinding(\n optional\n .map((param) => this.resolve(param))\n .map((param) => ({ name: getArgName(param) })),\n ),\n {\n initializer: factory.createObjectLiteralExpression(),\n type: factory.createTypeLiteralNode(\n optional.map((p) =>\n cg.createPropertySignature({\n name: getArgName(this.resolve(p)),\n questionToken: true,\n type: this.getTypeFromParameter(p),\n }),\n ),\n ),\n },\n ),\n );\n }\n break;\n\n case \"object\":\n // build the method signature - first all the required/optional parameters\n const paramMembers = parameters.map((p) =>\n cg.createPropertySignature({\n name: getArgName(this.resolve(p)),\n questionToken: !p.required,\n type: this.getTypeFromParameter(p),\n }),\n );\n\n // add body if present\n if (requestBody) {\n body = this.resolve(requestBody);\n const schema = this.getSchemaFromContent(body.content);\n const type = this.getTypeFromSchema(\n schema,\n undefined,\n \"writeOnly\",\n );\n bodyVar = toIdentifier(\n (type as any).name || getReferenceName(schema) || \"body\",\n );\n paramMembers.push(\n cg.createPropertySignature({\n name: bodyVar,\n questionToken: !body.required,\n type,\n }),\n );\n }\n\n // if there's no params, leave methodParams as is and prevent empty object argument generation\n if (paramMembers.length === 0) {\n break;\n }\n\n methodParams.push(\n cg.createParameter(\n cg.createObjectBinding([\n ...parameters\n .map((param) => this.resolve(param))\n .map((param) => ({ name: getArgName(param) })),\n ...(bodyVar ? [{ name: bodyVar }] : []),\n ]),\n {\n type: factory.createTypeLiteralNode(paramMembers),\n },\n ),\n );\n break;\n }\n\n // add oazapfts options\n methodParams.push(\n cg.createParameter(\"opts\", {\n type: factory.createTypeReferenceNode(\n \"Oazapfts.RequestOpts\",\n undefined,\n ),\n questionToken: true,\n }),\n );\n\n // Next, build the method body...\n\n const returnType = this.getResponseType(responses);\n const query = parameters.filter((p) => p.in === \"query\");\n const header = parameters.filter((p) => p.in === \"header\");\n\n let qs;\n if (query.length) {\n const paramsByFormatter = _.groupBy(query, getFormatter);\n qs = callQsFunction(\n \"query\",\n Object.entries(paramsByFormatter).map(([format, params]) => {\n //const [allowReserved, encodeReserved] = _.partition(params, \"allowReserved\");\n return callQsFunction(format, [\n cg.createObjectLiteral(\n params.map((p) => [p.name, getArgName(p)]),\n ),\n ]);\n }),\n );\n }\n\n const url = createUrlExpression(path, qs);\n const init: ts.ObjectLiteralElementLike[] = [\n factory.createSpreadAssignment(factory.createIdentifier(\"opts\")),\n ];\n\n if (method !== \"GET\") {\n init.push(\n factory.createPropertyAssignment(\n \"method\",\n factory.createStringLiteral(method),\n ),\n );\n }\n\n if (bodyVar) {\n init.push(\n cg.createPropertyAssignment(\n \"body\",\n factory.createIdentifier(bodyVar),\n ),\n );\n }\n\n if (header.length) {\n init.push(\n factory.createPropertyAssignment(\n \"headers\",\n callOazapftsFunction(\"mergeHeaders\", [\n factory.createPropertyAccessChain(\n factory.createIdentifier(\"opts\"),\n factory.createToken(ts.SyntaxKind.QuestionDotToken),\n \"headers\",\n ),\n factory.createObjectLiteralExpression(\n [\n ...header.map((param) =>\n cg.createPropertyAssignment(\n param.name,\n factory.createIdentifier(getArgName(param)),\n ),\n ),\n ],\n true,\n ),\n ]),\n ),\n );\n }\n\n const args: ts.Expression[] = [url];\n\n if (init.length) {\n const formatter = getBodyFormatter(body); // json, form, multipart\n const initObj = factory.createObjectLiteralExpression(init, true);\n args.push(\n formatter ? callOazapftsFunction(formatter, [initObj]) : initObj,\n );\n }\n\n functions.push(\n cg.addComment(\n cg.createFunctionDeclaration(\n name,\n {\n modifiers: [cg.modifier.export],\n },\n methodParams,\n cg.block(\n factory.createReturnStatement(\n this.wrapResult(\n callOazapftsFunction(\n {\n json: \"fetchJson\",\n text: \"fetchText\",\n blob: \"fetchBlob\",\n }[returnType],\n args,\n returnType === \"json\" || returnType === \"blob\"\n ? [\n this.getTypeFromResponses(\n responses!,\n \"readOnly\",\n ) || ts.SyntaxKind.AnyKeyword,\n ]\n : undefined,\n ),\n ),\n ),\n ),\n ),\n summary || description,\n ),\n );\n });\n });\n }\n\n Object.assign(stub, {\n statements: cg.appendNodes(\n stub.statements,\n ...[...this.aliases, ...functions],\n ...this.enumAliases,\n ),\n });\n\n return stub;\n }\n}\n","import ts from \"typescript\";\nimport { toIdentifier } from \"./generate\";\n\nconst factory = ts.factory;\n\nexport const questionToken = factory.createToken(ts.SyntaxKind.QuestionToken);\n\nexport function createQuestionToken(token?: boolean | ts.QuestionToken) {\n if (!token) return undefined;\n if (token === true) return questionToken;\n return token;\n}\n\nexport const keywordType = {\n any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),\n string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),\n undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n void: factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword),\n never: factory.createKeywordTypeNode(ts.SyntaxKind.NeverKeyword),\n null: factory.createLiteralTypeNode(factory.createNull()),\n};\n\ntype KeywordTypeName = keyof typeof keywordType;\n\nexport function createKeywordType(type: KeywordTypeName) {\n return keywordType[type];\n}\n\nexport const modifier = {\n async: factory.createModifier(ts.SyntaxKind.AsyncKeyword),\n export: factory.createModifier(ts.SyntaxKind.ExportKeyword),\n};\n\nexport function createLiteral(v: string | boolean | number) {\n switch (typeof v) {\n case \"string\":\n return factory.createStringLiteral(v);\n case \"boolean\":\n return v ? factory.createTrue() : factory.createFalse();\n case \"number\":\n return String(v).charAt(0) === \"-\"\n ? factory.createPrefixUnaryExpression(\n ts.SyntaxKind.MinusToken,\n factory.createNumericLiteral(String(-v)),\n )\n : factory.createNumericLiteral(String(v));\n }\n}\n\nexport function createEnumTypeNode(values: Array<string | boolean | number>) {\n const types = values.map((v) =>\n v === null\n ? keywordType.null\n : factory.createLiteralTypeNode(createLiteral(v)),\n );\n return types.length > 1 ? factory.createUnionTypeNode(types) : types[0];\n}\n\nexport function createTypeAliasDeclaration({\n modifiers,\n name,\n typeParameters,\n type,\n}: {\n modifiers?: Array<ts.Modifier>;\n name: string | ts.Identifier;\n typeParameters?: Array<ts.TypeParameterDeclaration>;\n type: ts.TypeNode;\n}) {\n return factory.createTypeAliasDeclaration(\n modifiers,\n name,\n typeParameters,\n type,\n );\n}\n\nexport function createInterfaceAliasDeclaration({\n modifiers,\n name,\n typeParameters,\n type,\n inheritedNodeNames,\n}: {\n modifiers?: Array<ts.Modifier>;\n name: string | ts.Identifier;\n typeParameters?: Array<ts.TypeParameterDeclaration>;\n type: ts.TypeNode;\n inheritedNodeNames?: (string | ts.Identifier)[];\n}) {\n const heritageClauses = inheritedNodeNames\n ? [\n factory.createHeritageClause(\n ts.SyntaxKind.ExtendsKeyword,\n inheritedNodeNames.map((name) => {\n const extendedInterfaceName =\n typeof name === \"string\" ? name : name.escapedText.toString();\n return factory.createExpressionWithTypeArguments(\n factory.createIdentifier(\n toIdentifier(extendedInterfaceName, true),\n ),\n undefined,\n );\n }),\n ),\n ]\n : [];\n return factory.createInterfaceDeclaration(\n modifiers,\n name,\n typeParameters,\n heritageClauses,\n (type as ts.TypeLiteralNode).members,\n );\n}\n\nexport function toExpression(ex: ts.Expression | string) {\n if (typeof ex === \"string\") return factory.createIdentifier(ex);\n return ex;\n}\n\nexport function createCall(\n expression: ts.Expression | string,\n {\n typeArgs,\n args,\n }: {\n typeArgs?: Array<ts.TypeNode>;\n args?: Array<ts.Expression>;\n } = {},\n) {\n return factory.createCallExpression(toExpression(expression), typeArgs, args);\n}\n\nexport function createMethodCall(\n method: string,\n opts: {\n typeArgs?: Array<ts.TypeNode>;\n args?: Array<ts.Expression>;\n },\n) {\n return createCall(\n factory.createPropertyAccessExpression(factory.createThis(), method),\n opts,\n );\n}\n\nexport function createObjectLiteral(props: [string, string | ts.Expression][]) {\n return factory.createObjectLiteralExpression(\n props.map(([name, identifier]) =>\n createPropertyAssignment(name, toExpression(identifier)),\n ),\n true,\n );\n}\n\nexport function createPropertyAssignment(\n name: string,\n expression: ts.Expression,\n) {\n if (ts.isIdentifier(expression)) {\n if (expression.text === name) {\n return factory.createShorthandPropertyAssignment(name);\n }\n }\n return factory.createPropertyAssignment(propertyName(name), expression);\n}\n\nexport function block(...statements: ts.Statement[]) {\n return factory.createBlock(statements, true);\n}\n\nexport function createArrowFunction(\n parameters: ts.ParameterDeclaration[],\n body: ts.ConciseBody,\n {\n modifiers,\n typeParameters,\n type,\n equalsGreaterThanToken,\n }: {\n modifiers?: ts.Modifier[];\n typeParameters?: ts.TypeParameterDeclaration[];\n type?: ts.TypeNode;\n equalsGreaterThanToken?: ts.EqualsGreaterThanToken;\n } = {},\n) {\n return factory.createArrowFunction(\n modifiers,\n typeParameters,\n parameters,\n type,\n equalsGreaterThanToken,\n body,\n );\n}\n\nexport function createFunctionDeclaration(\n name: string | ts.Identifier | undefined,\n {\n modifiers,\n asteriskToken,\n typeParameters,\n type,\n }: {\n modifiers?: ts.Modifier[];\n asteriskToken?: ts.AsteriskToken;\n typeParameters?: ts.TypeParameterDeclaration[];\n type?: ts.TypeNode;\n },\n parameters: ts.ParameterDeclaration[],\n body?: ts.Block,\n): ts.FunctionDeclaration {\n return factory.createFunctionDeclaration(\n modifiers,\n asteriskToken,\n name,\n typeParameters,\n parameters,\n type,\n body,\n );\n}\n\nexport function createClassDeclaration({\n modifiers,\n name,\n typeParameters,\n heritageClauses,\n members,\n}: {\n modifiers?: Array<ts.Modifier>;\n name?: string | ts.Identifier;\n typeParameters?: Array<ts.TypeParameterDeclaration>;\n heritageClauses?: Array<ts.HeritageClause>;\n members: Array<ts.ClassElement>;\n}) {\n return factory.createClassDeclaration(\n modifiers,\n name,\n typeParameters,\n heritageClauses,\n members,\n );\n}\n\nexport function createConstructor({\n modifiers,\n parameters,\n body,\n}: {\n modifiers?: Array<ts.Modifier>;\n parameters: Array<ts.ParameterDeclaration>;\n body?: ts.Block;\n}) {\n return factory.createConstructorDeclaration(modifiers, parameters, body);\n}\n\nexport function createMethod(\n name:\n | string\n | ts.Identifier\n | ts.StringLiteral\n | ts.NumericLiteral\n | ts.ComputedPropertyName,\n {\n modifiers,\n asteriskToken,\n questionToken,\n typeParameters,\n type,\n }: {\n modifiers?: ts.Modifier[];\n asteriskToken?: ts.AsteriskToken;\n questionToken?: ts.QuestionToken | boolean;\n typeParameters?: ts.TypeParameterDeclaration[];\n type?: ts.TypeNode;\n } = {},\n parameters: ts.ParameterDeclaration[] = [],\n body?: ts.Block,\n): ts.MethodDeclaration {\n return factory.createMethodDeclaration(\n modifiers,\n asteriskToken,\n name,\n createQuestionToken(questionToken),\n typeParameters,\n parameters,\n type,\n body,\n );\n}\n\nexport function createParameter(\n name: string | ts.BindingName,\n {\n modifiers,\n dotDotDotToken,\n questionToken,\n type,\n initializer,\n }: {\n modifiers?: Array<ts.Modifier>;\n dotDotDotToken?: ts.DotDotDotToken;\n questionToken?: ts.QuestionToken | boolean;\n type?: ts.TypeNode;\n initializer?: ts.Expression;\n },\n): ts.ParameterDeclaration {\n return factory.createParameterDeclaration(\n modifiers,\n dotDotDotToken,\n name,\n createQuestionToken(questionToken),\n type,\n initializer,\n );\n}\n\nfunction propertyName(name: string | ts.PropertyName): ts.PropertyName {\n if (typeof name === \"string\") {\n return isValidIdentifier(name)\n ? factory.createIdentifier(name)\n : factory.createStringLiteral(name);\n }\n return name;\n}\n\nexport function createPropertySignature({\n modifiers,\n name,\n questionToken,\n type,\n}: {\n modifiers?: Array<ts.Modifier>;\n name: ts.PropertyName | string;\n questionToken?: ts.QuestionToken | boolean;\n type?: ts.TypeNode;\n}) {\n return factory.createPropertySignature(\n modifiers,\n propertyName(name),\n createQuestionToken(questionToken),\n type,\n );\n}\n\nexport function createIndexSignature(\n type: ts.TypeNode,\n {\n modifiers,\n indexName = \"key\",\n indexType = keywordType.string,\n }: {\n indexName?: string;\n indexType?: ts.TypeNode;\n modifiers?: Array<ts.Modifier>;\n } = {},\n) {\n return factory.createIndexSignature(\n modifiers,\n [createParameter(indexName, { type: indexType })],\n type,\n );\n}\n\nexport function createObjectBinding(\n elements: Array<{\n name: string | ts.BindingName;\n dotDotDotToken?: ts.DotDotDotToken;\n propertyName?: string | ts.PropertyName;\n initializer?: ts.Expression;\n }>,\n) {\n return factory.createObjectBindingPattern(\n elements.map(({ dotDotDotToken, propertyName, name, initializer }) =>\n factory.createBindingElement(\n dotDotDotToken,\n propertyName,\n name,\n initializer,\n ),\n ),\n );\n}\n\nexport function createTemplateString(\n head: string,\n spans: Array<{ literal: string; expression: ts.Expression }>,\n) {\n if (!spans.length) return factory.createStringLiteral(head);\n return factory.createTemplateExpression(\n factory.createTemplateHead(head),\n spans.map(({ expression, literal }, i) =>\n factory.createTemplateSpan(\n expression,\n i === spans.length - 1\n ? factory.createTemplateTail(literal)\n : factory.createTemplateMiddle(literal),\n ),\n ),\n );\n}\n\nexport function findNode<T extends ts.Node>(\n nodes: ts.NodeArray<ts.Node>,\n kind: T extends { kind: infer K } ? K : never,\n test?: (node: T) => boolean | undefined,\n): T {\n const node = nodes.find(\n (s) => s.kind === kind && (!test || test(s as T)),\n ) as T;\n if (!node) throw new Error(`Node not found: ${kind}`);\n return node;\n}\n\nexport function getName(name: ts.Node) {\n if (ts.isIdentifier(name)) {\n return name.escapedText;\n }\n if (ts.isLiteralExpression(name)) {\n return name.text;\n }\n return \"\";\n}\n\nexport function getFirstDeclarationName(n: ts.VariableStatement) {\n const name = ts.getNameOfDeclaration(n.declarationList.declarations[0]);\n return name ? getName(name) : \"\";\n}\n\nexport function findFirstVariableDeclaration(\n nodes: ts.NodeArray<ts.Node>,\n name: string,\n) {\n const statement = findNode<ts.VariableStatement>(\n nodes,\n ts.SyntaxKind.VariableStatement,\n (n) => getFirstDeclarationName(n) === name,\n );\n const [first] = statement.declarationList.declarations;\n if (!first) throw new Error(\"Missing declaration\");\n return first;\n}\n\nexport function changePropertyValue(\n o: ts.ObjectLiteralExpression,\n property: string,\n value: ts.Expression,\n) {\n const p = o.properties.find(\n (p) => ts.isPropertyAssignment(p) && getName(p.name) === property,\n );\n if (p && ts.isPropertyAssignment(p)) {\n // p.initializer is readonly, this might break in a future TS version, but works fine for now.\n Object.assign(p, { initializer: value });\n } else {\n throw new Error(`No such property: ${property}`);\n }\n}\n\nexport function appendNodes<T extends ts.Node>(\n array: ts.NodeArray<T>,\n ...nodes: T[]\n) {\n return factory.createNodeArray([...array, ...nodes]);\n}\n\nexport function addComment<T extends ts.Node>(node: T, comment?: string) {\n if (!comment) return node;\n return ts.addSyntheticLeadingComment(\n node,\n ts.SyntaxKind.MultiLineCommentTrivia,\n `*\\n * ${comment.replace(/\\n/g, \"\\n * \")}\\n `,\n true,\n );\n}\n\nconst printer = ts.createPrinter({\n newLine: ts.NewLineKind.LineFeed,\n});\n\nexport function printNode(node: ts.Node) {\n const file = ts.createSourceFile(\n \"someFileName.ts\",\n \"\",\n ts.ScriptTarget.Latest,\n /*setParentNodes*/ false,\n ts.ScriptKind.TS,\n );\n return printer.printNode(ts.EmitHint.Unspecified, node, file);\n}\n\nexport function printNodes(nodes: ts.Node[]) {\n const file = ts.createSourceFile(\n \"someFileName.ts\",\n \"\",\n ts.ScriptTarget.Latest,\n /*setParentNodes*/ false,\n ts.ScriptKind.TS,\n );\n return nodes\n .map((node) => printer.printNode(ts.EmitHint.Unspecified, node, file))\n .join(\"\\n\");\n}\n\nexport function printFile(sourceFile: ts.SourceFile) {\n return printer.printFile(sourceFile);\n}\n\nexport function isValidIdentifier(str: string) {\n if (!str.length || str.trim() !== str) return false;\n const node = ts.parseIsolatedEntityName(str, ts.ScriptTarget.Latest);\n return (\n !!node &&\n node.kind === ts.SyntaxKind.Identifier &&\n ts.identifierToKeywordKind(node) === undefined\n );\n}\n"],"names":["factory","ts","createTemplate","url","tokens","chunks","_","cg.createTemplateString","expression","literal","createServerFunction","template","vars","params","cg.createParameter","cg.createObjectBinding","name","value","cg.createLiteral","cg.createPropertySignature","cg.createEnumTypeNode","cg.keywordType","cg.createArrowFunction","generateServerExpression","server","defaultUrl","variables","m","defaultBaseUrl","servers","serverName","index","generateServers","cg.createObjectLiteral","i","verbs","contentTypes","isMimeType","s","isJsonMimeType","mime","getBodyFormatter","body","contentType","formatter","getFormatter","style","explode","content","medias","getOperationIdentifier","id","cg.isValidIdentifier","getOperationName","verb","path","operationId","toIdentifier","isNullable","schema","isReference","obj","refPathToPropertyPath","ref","getRefBasename","getRefName","base","getReferenceName","onlyModeSuffixes","getOnlyModeSuffix","onlyMode","upperFirst","cc","createUrlExpression","qs","spans","head","_substr","cg.createCall","callQsFunction","args","callOazapftsFunction","typeArgs","supportDeepObjects","res","merged","p","prop","isKeyOfKeywordType","key","ApiGenerator","spec","opts","isConverted","resolved","array","el","tags","t","available","used","values","ignoreDiscriminator","$ref","identifier","alias","type","cg.createTypeAliasDeclaration","cg.modifier","readOnly","writeOnly","readOnlyAlias","readOnlyType","writeOnlyAlias","writeOnlyType","variants","discriminator","mappedValues","discriminatorValue","variantRef","variant","schemaBaseName","discriminatorProperty","clone","objValue","srcValue","mapping","types","childSchema","matched","propName","proposedName","n","stringEnumValue","names","members","resolveRefs","check","history","cached","ret","subSchemas","result","props","required","additionalProperties","isRequired","signature","description","cg.createIndexSignature","responses","code","statusType","dataType","resOrRef","resolvedResponses","response","ex","schemas","prefix","isExplicit","stub","cg.findFirstVariableDeclaration","initializer","cg.changePropertyValue","functions","item","method","op","requestBody","summary","count","resolvedParameters","r","parameters","argNames","suffix","getArgName","param","methodParams","bodyVar","optional","requiredParams","paramMembers","returnType","query","header","paramsByFormatter","format","init","cg.createPropertyAssignment","initObj","cg.addComment","cg.createFunctionDeclaration","cg.block","cg.appendNodes","questionToken","createQuestionToken","token","keywordType","createKeywordType","modifier","createLiteral","v","createEnumTypeNode","createTypeAliasDeclaration","modifiers","typeParameters","createInterfaceAliasDeclaration","inheritedNodeNames","heritageClauses","extendedInterfaceName","toExpression","createCall","createMethodCall","createObjectLiteral","createPropertyAssignment","propertyName","block","statements","createArrowFunction","equalsGreaterThanToken","createFunctionDeclaration","asteriskToken","createClassDeclaration","createConstructor","createMethod","createParameter","dotDotDotToken","isValidIdentifier","createPropertySignature","createIndexSignature","indexName","indexType","createObjectBinding","elements","createTemplateString","findNode","nodes","kind","test","node","getName","getFirstDeclarationName","findFirstVariableDeclaration","statement","first","changePropertyValue","o","property","appendNodes","addComment","comment","printer","printNode","file","printNodes","printFile","sourceFile","str"],"mappings":"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"}