oazapfts 6.3.1 → 6.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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\", \"useUnknown\"],\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 useUnknown,\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 --useUnknown\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 useUnknown,\n mergeReadWriteOnly,\n argumentStyle,\n});\n"],"names":["argv","minimist","generate","spec","dest","opts","__async","code","generateSource","fs","include","exclude","optimistic","useEnumType","mergeReadWriteOnly","useUnknown","argumentStyle","optsArgumentStyles"],"mappings":";+RAOMA,EAAOC,EAAS,QAAQ,KAAK,MAAM,CAAC,EAAG,CAC3C,MAAO,CACL,EAAG,UACH,EAAG,SACL,EACA,QAAS,CAAC,aAAc,cAAe,qBAAsB,YAAY,EACzE,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,WAAAC,EACA,cAAAC,CACF,EAAIhB,EACE,CAACG,EAAMC,CAAI,EAAIJ,EAAK,EACrBG,IACH,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAWOc,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,GAGhBd,EAASC,EAAMC,EAAM,CACnB,QAAAM,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,WAAAE,EACA,mBAAAD,EACA,cAAAE,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\", \"useUnknown\"],\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 useUnknown,\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 --useUnknown\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 useUnknown,\n mergeReadWriteOnly,\n argumentStyle,\n});\n"],"names":["argv","minimist","generate","spec","dest","opts","__async","code","generateSource","fs","include","exclude","optimistic","useEnumType","mergeReadWriteOnly","useUnknown","argumentStyle","optsArgumentStyles"],"mappings":";+RAOMA,EAAOC,EAAS,QAAQ,KAAK,MAAM,CAAC,EAAG,CAC3C,MAAO,CACL,EAAG,UACH,EAAG,SAAA,EAEL,QAAS,CAAC,aAAc,cAAe,qBAAsB,YAAY,EACzE,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,WAAAC,EACA,cAAAC,CACF,EAAIhB,EACE,CAACG,EAAMC,CAAI,EAAIJ,EAAK,EACrBG,IACH,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAWOc,EAAAA,mBAAmB,KAAK,KAAK,CAAC;AAAA,CACpD,EACC,QAAQ,KAAK,CAAC,GAIdD,IAAkB,QAClB,CAACC,EAAAA,mBAAmB,SAASD,CAAa,IAE1C,QAAQ,MACN,qCAAqCC,EAAAA,mBAAmB,KACtD,KAAA,CACD,eAAeD,CAAa,GAAA,EAE/B,QAAQ,KAAK,CAAC,GAGhBd,EAASC,EAAMC,EAAM,CACnB,QAAAM,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,WAAAE,EACA,mBAAAD,EACA,cAAAE,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\", \"useUnknown\"],\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 useUnknown,\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 --useUnknown\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 useUnknown,\n mergeReadWriteOnly,\n argumentStyle,\n});\n"],"names":["argv","minimist","generate","spec","dest","opts","code","generateSource","fs","include","exclude","optimistic","useEnumType","mergeReadWriteOnly","useUnknown","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,sBAAsB,YAAY;AAAA,EACzE,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,YAAAC;AAAA,EACA,eAAAC;AACF,IAAIf,GACE,CAACG,GAAMC,CAAI,IAAIJ,EAAK;AACrBG,MACH,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAWOa,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;AAGhBb,EAASC,GAAMC,GAAM;AAAA,EACnB,SAAAK;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAE;AAAA,EACA,oBAAAD;AAAA,EACA,eAAAE;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\", \"useUnknown\"],\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 useUnknown,\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 --useUnknown\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 useUnknown,\n mergeReadWriteOnly,\n argumentStyle,\n});\n"],"names":["argv","minimist","generate","spec","dest","opts","code","generateSource","fs","include","exclude","optimistic","useEnumType","mergeReadWriteOnly","useUnknown","argumentStyle","optsArgumentStyles"],"mappings":";;;;AAOA,MAAMA,IAAOC,EAAS,QAAQ,KAAK,MAAM,CAAC,GAAG;AAAA,EAC3C,OAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EAAA;AAAA,EAEL,SAAS,CAAC,cAAc,eAAe,sBAAsB,YAAY;AAAA,EACzE,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,YAAAC;AAAA,EACA,eAAAC;AACF,IAAIf,GACE,CAACG,GAAMC,CAAI,IAAIJ,EAAK;AACrBG,MACH,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAWOa,EAAmB,KAAK,KAAK,CAAC;AAAA,CACpD,GACC,QAAQ,KAAK,CAAC;AAIdD,MAAkB,UAClB,CAACC,EAAmB,SAASD,CAAa,MAE1C,QAAQ;AAAA,EACN,qCAAqCC,EAAmB;AAAA,IACtD;AAAA,EAAA,CACD,eAAeD,CAAa;AAAA,GAE/B,QAAQ,KAAK,CAAC;AAGhBb,EAASC,GAAMC,GAAM;AAAA,EACnB,SAAAK;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAE;AAAA,EACA,oBAAAD;AAAA,EACA,eAAAE;AACF,CAAC;"}
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 useUnknown?: 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(\n spec: string,\n opts: Opts = {},\n): Promise<string> {\n const { 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,EAYzC,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,EACpBC,EAEiB,QAAAC,EAAA,yBAFjBC,EACAT,EAAa,GACI,CACjB,KAAM,CAAE,IAAAD,EAAK,YAAAE,CAAgB,EAAA,MAAMS,EAAUD,CAAI,EAC3CL,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"}
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 useUnknown?: 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(\n spec: string,\n opts: Opts = {},\n): Promise<string> {\n const { 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,EAYlD,SAASC,EACdC,EACAC,EACAC,EACA,CACA,OAAO,IAAIC,EAAAA,aAAaH,EAAKC,EAAMC,CAAW,EAAE,YAAA,CAClD,CAEO,SAASE,EAASC,EAAoB,CAC3C,OAAOC,EAAAA,UAAaD,CAAG,CACzB,CAEA,SAAsBE,EACpBC,EAEiB,QAAAC,EAAA,yBAFjBC,EACAT,EAAa,GACI,CACjB,KAAM,CAAE,IAAAD,EAAK,YAAAE,CAAA,EAAgB,MAAMS,EAAUD,CAAI,EAC3CL,EAAMN,EAAYC,EAAKC,EAAMC,CAAW,EACxC,CAAE,MAAAU,EAAO,QAAAC,CAAA,EAAYb,EAAI,KACzBc,EAAW,CAAC,KAAMF,EAAOC,CAAO,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA,IAAO,EAEpE,OADYT,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,EAC3C,OAAIK,EAAYf,CAAG,EACV,CACL,IAAAA,EACA,YAAa,EAAA,EAIR,CACL,KAFgB,MAAMiB,EAAU,WAAWjB,EAAK,CAAA,CAAE,GAEnC,QACf,YAAa,EAAA,CAGnB"}
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 useUnknown?: 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(\n spec: string,\n opts: Opts = {},\n): Promise<string> {\n const { 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;AAYzC,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,EACpBC,GACAP,IAAa,IACI;AACjB,QAAM,EAAE,KAAAD,GAAK,aAAAE,EAAgB,IAAA,MAAMO,EAAUD,CAAI,GAC3CH,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;"}
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 useUnknown?: 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(\n spec: string,\n opts: Opts = {},\n): Promise<string> {\n const { 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":";;;;AASO,MAAMA,IAAqB,CAAC,cAAc,QAAQ;AAYlD,SAASC,EACdC,GACAC,GACAC,GACA;AACA,SAAO,IAAIC,EAAaH,GAAKC,GAAMC,CAAW,EAAE,YAAA;AAClD;AAEO,SAASE,EAASC,GAAoB;AAC3C,SAAOC,EAAaD,CAAG;AACzB;AAEA,eAAsBE,EACpBC,GACAP,IAAa,IACI;AACjB,QAAM,EAAE,KAAAD,GAAK,aAAAE,EAAA,IAAgB,MAAMO,EAAUD,CAAI,GAC3CH,IAAMN,EAAYC,GAAKC,GAAMC,CAAW,GACxC,EAAE,OAAAQ,GAAO,SAAAC,EAAA,IAAYX,EAAI,MACzBY,IAAW,CAAC,MAAMF,GAAOC,CAAO,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA,IAAO;AAEpE,SADYP,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;AAC3C,SAAIK,EAAYb,CAAG,IACV;AAAA,IACL,KAAAA;AAAA,IACA,aAAa;AAAA,EAAA,IAIR;AAAA,IACL,MAFgB,MAAMe,EAAU,WAAWf,GAAK,CAAA,CAAE,GAEnC;AAAA,IACf,aAAa;AAAA,EAAA;AAGnB;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oazapfts",
3
- "version": "6.3.1",
3
+ "version": "6.3.2",
4
4
  "description": "OpenApi TypeScript client generator",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -46,21 +46,20 @@
46
46
  ]
47
47
  },
48
48
  "devDependencies": {
49
- "@types/lodash": "^4.17.20",
49
+ "@types/lodash": "^4.17.21",
50
50
  "@types/minimist": "^1.2.5",
51
- "@types/node": "^24.0.15",
52
- "@types/tapable": "^2.2.7"
51
+ "@types/tapable": "^2.3.0"
53
52
  },
54
53
  "peerDependencies": {
55
54
  "@oazapfts/runtime": "*"
56
55
  },
57
56
  "dependencies": {
58
- "@apidevtools/swagger-parser": "^12.0.0",
57
+ "@apidevtools/swagger-parser": "^12.1.0",
59
58
  "lodash": "^4.17.21",
60
59
  "minimist": "^1.2.8",
61
60
  "swagger2openapi": "^7.0.8",
62
- "tapable": "^2.2.2",
63
- "typescript": "^5.8.3"
61
+ "tapable": "^2.3.0",
62
+ "typescript": "^5.9.3"
64
63
  },
65
64
  "keywords": [
66
65
  "openapi",
@@ -1 +1 @@
1
- {"version":3,"file":"tscodegen-BjtNU8_R.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 _.uniq(\n variants.map((schema) =>\n this.getTypeFromSchema(schema, undefined, onlyMode),\n ),\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 getEmptySchemaType() {\n return this.opts.useUnknown ? cg.keywordType.unknown : cg.keywordType.any;\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\")\n return this.getEmptySchemaType();\n if (isReference(schema)) {\n return this.getRefAlias(schema, onlyMode) as ts.TypeReferenceNode;\n }\n\n if (schema === true) {\n return this.getEmptySchemaType();\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: Array<ts.TypeNode> = [];\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 matches = Object.entries(discriminator.mapping ?? {})\n .filter(([, ref]) => ref === schema[\"x-component-ref-path\"])\n .map(([discriminatorValue]) => discriminatorValue);\n if (matches.length > 0) {\n types.push(\n factory.createTypeLiteralNode([\n cg.createPropertySignature({\n name: discriminator.propertyName,\n type: this.getTypeFromEnum(matches),\n }),\n ]),\n );\n }\n types.push(\n this.getRefAlias(\n childSchema,\n onlyMode,\n /* ignoreDiscriminator */ true,\n ),\n );\n } else {\n types.push(\n this.getTypeFromSchema(\n {\n required: schema.required,\n ...childSchema,\n },\n undefined,\n onlyMode,\n ),\n );\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 // Union types defined by an array in schema.type\n if (Array.isArray(schema.type)) {\n return factory.createUnionTypeNode(\n schema.type.map((type) => {\n const subSchema = { ...schema, type } as SchemaObject;\n // Remove items if the type isn't array since it's not relevant\n if (\"items\" in subSchema && type !== \"array\") {\n delete subSchema.items;\n }\n if (\"properties\" in subSchema && type !== \"object\") {\n delete subSchema.properties;\n }\n\n return this.getBaseTypeFromSchema(subSchema, name, onlyMode);\n }),\n );\n }\n if (\"items\" in schema) {\n const schemaItems = schema.items as OpenAPIV3.BaseSchemaObject;\n\n // items -> array of enums or unions\n if (schemaItems.enum) {\n const enumType = this.isTrueEnum(schemaItems, name)\n ? this.getTrueEnum(schemaItems, name)\n : cg.createEnumTypeNode(schemaItems.enum);\n\n return factory.createArrayTypeNode(enumType);\n }\n\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 !== undefined) {\n if (schema.type === null) return cg.keywordType.null;\n if (isKeyOfKeywordType(schema.type)) return cg.keywordType[schema.type];\n }\n\n return this.getEmptySchemaType();\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 ? this.getEmptySchemaType()\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 integer: 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 unknown: factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\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","matches","subSchema","schemaItems","enumType","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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"}
1
+ {"version":3,"file":"tscodegen-BjtNU8_R.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 _.uniq(\n variants.map((schema) =>\n this.getTypeFromSchema(schema, undefined, onlyMode),\n ),\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 getEmptySchemaType() {\n return this.opts.useUnknown ? cg.keywordType.unknown : cg.keywordType.any;\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\")\n return this.getEmptySchemaType();\n if (isReference(schema)) {\n return this.getRefAlias(schema, onlyMode) as ts.TypeReferenceNode;\n }\n\n if (schema === true) {\n return this.getEmptySchemaType();\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: Array<ts.TypeNode> = [];\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 matches = Object.entries(discriminator.mapping ?? {})\n .filter(([, ref]) => ref === schema[\"x-component-ref-path\"])\n .map(([discriminatorValue]) => discriminatorValue);\n if (matches.length > 0) {\n types.push(\n factory.createTypeLiteralNode([\n cg.createPropertySignature({\n name: discriminator.propertyName,\n type: this.getTypeFromEnum(matches),\n }),\n ]),\n );\n }\n types.push(\n this.getRefAlias(\n childSchema,\n onlyMode,\n /* ignoreDiscriminator */ true,\n ),\n );\n } else {\n types.push(\n this.getTypeFromSchema(\n {\n required: schema.required,\n ...childSchema,\n },\n undefined,\n onlyMode,\n ),\n );\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 // Union types defined by an array in schema.type\n if (Array.isArray(schema.type)) {\n return factory.createUnionTypeNode(\n schema.type.map((type) => {\n const subSchema = { ...schema, type } as SchemaObject;\n // Remove items if the type isn't array since it's not relevant\n if (\"items\" in subSchema && type !== \"array\") {\n delete subSchema.items;\n }\n if (\"properties\" in subSchema && type !== \"object\") {\n delete subSchema.properties;\n }\n\n return this.getBaseTypeFromSchema(subSchema, name, onlyMode);\n }),\n );\n }\n if (\"items\" in schema) {\n const schemaItems = schema.items as OpenAPIV3.BaseSchemaObject;\n\n // items -> array of enums or unions\n if (schemaItems.enum) {\n const enumType = this.isTrueEnum(schemaItems, name)\n ? this.getTrueEnum(schemaItems, name)\n : cg.createEnumTypeNode(schemaItems.enum);\n\n return factory.createArrayTypeNode(enumType);\n }\n\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 !== undefined) {\n if (schema.type === null) return cg.keywordType.null;\n if (isKeyOfKeywordType(schema.type)) return cg.keywordType[schema.type];\n }\n\n return this.getEmptySchemaType();\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 ? this.getEmptySchemaType()\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 integer: 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 unknown: factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\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","matches","subSchema","schemaItems","enumType","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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tscodegen-pfm_MWoH.cjs","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 _.uniq(\n variants.map((schema) =>\n this.getTypeFromSchema(schema, undefined, onlyMode),\n ),\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 getEmptySchemaType() {\n return this.opts.useUnknown ? cg.keywordType.unknown : cg.keywordType.any;\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\")\n return this.getEmptySchemaType();\n if (isReference(schema)) {\n return this.getRefAlias(schema, onlyMode) as ts.TypeReferenceNode;\n }\n\n if (schema === true) {\n return this.getEmptySchemaType();\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: Array<ts.TypeNode> = [];\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 matches = Object.entries(discriminator.mapping ?? {})\n .filter(([, ref]) => ref === schema[\"x-component-ref-path\"])\n .map(([discriminatorValue]) => discriminatorValue);\n if (matches.length > 0) {\n types.push(\n factory.createTypeLiteralNode([\n cg.createPropertySignature({\n name: discriminator.propertyName,\n type: this.getTypeFromEnum(matches),\n }),\n ]),\n );\n }\n types.push(\n this.getRefAlias(\n childSchema,\n onlyMode,\n /* ignoreDiscriminator */ true,\n ),\n );\n } else {\n types.push(\n this.getTypeFromSchema(\n {\n required: schema.required,\n ...childSchema,\n },\n undefined,\n onlyMode,\n ),\n );\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 // Union types defined by an array in schema.type\n if (Array.isArray(schema.type)) {\n return factory.createUnionTypeNode(\n schema.type.map((type) => {\n const subSchema = { ...schema, type } as SchemaObject;\n // Remove items if the type isn't array since it's not relevant\n if (\"items\" in subSchema && type !== \"array\") {\n delete subSchema.items;\n }\n if (\"properties\" in subSchema && type !== \"object\") {\n delete subSchema.properties;\n }\n\n return this.getBaseTypeFromSchema(subSchema, name, onlyMode);\n }),\n );\n }\n if (\"items\" in schema) {\n const schemaItems = schema.items as OpenAPIV3.BaseSchemaObject;\n\n // items -> array of enums or unions\n if (schemaItems.enum) {\n const enumType = this.isTrueEnum(schemaItems, name)\n ? this.getTrueEnum(schemaItems, name)\n : cg.createEnumTypeNode(schemaItems.enum);\n\n return factory.createArrayTypeNode(enumType);\n }\n\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 !== undefined) {\n if (schema.type === null) return cg.keywordType.null;\n if (isKeyOfKeywordType(schema.type)) return cg.keywordType[schema.type];\n }\n\n return this.getEmptySchemaType();\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 ? this.getEmptySchemaType()\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 integer: 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 unknown: factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\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","__publicField","_a","resolved","array","el","tags","t","_b","available","error","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","__spreadValues","objValue","srcValue","mapping","types","childSchema","matches","subSchema","__spreadProps","schemaItems","enumType","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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"}
1
+ {"version":3,"file":"tscodegen-pfm_MWoH.cjs","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 _.uniq(\n variants.map((schema) =>\n this.getTypeFromSchema(schema, undefined, onlyMode),\n ),\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 getEmptySchemaType() {\n return this.opts.useUnknown ? cg.keywordType.unknown : cg.keywordType.any;\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\")\n return this.getEmptySchemaType();\n if (isReference(schema)) {\n return this.getRefAlias(schema, onlyMode) as ts.TypeReferenceNode;\n }\n\n if (schema === true) {\n return this.getEmptySchemaType();\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: Array<ts.TypeNode> = [];\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 matches = Object.entries(discriminator.mapping ?? {})\n .filter(([, ref]) => ref === schema[\"x-component-ref-path\"])\n .map(([discriminatorValue]) => discriminatorValue);\n if (matches.length > 0) {\n types.push(\n factory.createTypeLiteralNode([\n cg.createPropertySignature({\n name: discriminator.propertyName,\n type: this.getTypeFromEnum(matches),\n }),\n ]),\n );\n }\n types.push(\n this.getRefAlias(\n childSchema,\n onlyMode,\n /* ignoreDiscriminator */ true,\n ),\n );\n } else {\n types.push(\n this.getTypeFromSchema(\n {\n required: schema.required,\n ...childSchema,\n },\n undefined,\n onlyMode,\n ),\n );\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 // Union types defined by an array in schema.type\n if (Array.isArray(schema.type)) {\n return factory.createUnionTypeNode(\n schema.type.map((type) => {\n const subSchema = { ...schema, type } as SchemaObject;\n // Remove items if the type isn't array since it's not relevant\n if (\"items\" in subSchema && type !== \"array\") {\n delete subSchema.items;\n }\n if (\"properties\" in subSchema && type !== \"object\") {\n delete subSchema.properties;\n }\n\n return this.getBaseTypeFromSchema(subSchema, name, onlyMode);\n }),\n );\n }\n if (\"items\" in schema) {\n const schemaItems = schema.items as OpenAPIV3.BaseSchemaObject;\n\n // items -> array of enums or unions\n if (schemaItems.enum) {\n const enumType = this.isTrueEnum(schemaItems, name)\n ? this.getTrueEnum(schemaItems, name)\n : cg.createEnumTypeNode(schemaItems.enum);\n\n return factory.createArrayTypeNode(enumType);\n }\n\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 !== undefined) {\n if (schema.type === null) return cg.keywordType.null;\n if (isKeyOfKeywordType(schema.type)) return cg.keywordType[schema.type];\n }\n\n return this.getEmptySchemaType();\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 ? this.getEmptySchemaType()\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 integer: 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 unknown: factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\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","__publicField","_a","resolved","array","el","tags","t","_b","available","error","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","__spreadValues","objValue","srcValue","mapping","types","childSchema","matches","subSchema","__spreadProps","schemaItems","enumType","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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"}