oazapfts 7.3.0 → 7.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -41,6 +41,7 @@ Options:
41
41
  --argumentStyle=<positional | object> (default: positional)
42
42
  --allSchemas
43
43
  --futureStripLegacyMethods
44
+ --numericBooleanQueryParameters
44
45
  ```
45
46
 
46
47
  Where `<spec>` is the URL or local path of an OpenAPI or Swagger spec (in either json or yml) and `<filename>` is the location of the `.ts` file to be generated. If the filename is omitted, the code is written to stdout.
@@ -63,6 +64,8 @@ Where `<spec>` is the URL or local path of an OpenAPI or Swagger spec (in either
63
64
  By default, when an `operationId` contains special characters (like dots or colons, e.g. `scope1.userAccount.get`), oazapfts generates both a normalized method name (`scope1UserAccountGet`) and a deprecated fallback using the HTTP verb and path (`getUsersById`) for backward compatibility. Use this flag to only generate the normalized operationId-based names.
64
65
  The next major version will default to this behavior.
65
66
 
67
+ - `--numericBooleanQueryParameters` when true, serialize boolean query parameters as `1 | 0` instead of `true | false`.
68
+
66
69
  ## Consuming the generated API
67
70
 
68
71
  For each operation defined in the spec the generated API will export a function with a name matching the `operationId`. If no ID is specified, a reasonable name is generated from the HTTP verb and the path.
package/dist/cli.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var g=(t,l,o)=>new Promise((c,u)=>{var i=e=>{try{s(o.next(e))}catch(r){u(r)}},a=e=>{try{s(o.throw(e))}catch(r){u(r)}},s=e=>e.done?c(e.value):Promise.resolve(e.value).then(i,a);s((o=o.apply(t,l)).next())});const y=require("fs/promises"),v=require("minimist"),w=require("path"),n=require("./index-DLicGIOu.cjs");function b(t){return g(this,null,function*(){const{include:l,exclude:o,optimistic:c,useEnumType:u,enumStyle:i,mergeReadWriteOnly:a,useUnknown:s,argumentStyle:e,allSchemas:r,futureStripLegacyMethods:f,help:h,version:x}=t,[p,m]=t._;if(h&&(S(),process.exit(0)),x){const O=JSON.parse(yield y.readFile(w.join(__dirname,"..","package.json"),"utf8"));console.log(O.version),process.exit(0)}p||(S(),process.exit(1)),e!==void 0&&!n.argumentStyleOptions.includes(e)&&(console.error(`--argumentStyle should be one of <${n.argumentStyleOptions.join(" | ")}>, but got "${e}"`),process.exit(1)),i!==void 0&&!n.enumStyleOptions.includes(i)&&(console.error(`--enumStyle should be one of <${n.enumStyleOptions.join(" | ")}>, but got "${i}"`),process.exit(1));const d=yield n.generateSource(p,{include:l,exclude:o,optimistic:c,useEnumType:u,enumStyle:i,useUnknown:s,mergeReadWriteOnly:a,argumentStyle:e,allSchemas:r,futureStripLegacyMethods:f});m?yield y.writeFile(m,d):console.log(d)})}function S(){console.error(`
2
+ "use strict";var y=(t,l,o)=>new Promise((a,u)=>{var i=e=>{try{s(o.next(e))}catch(r){u(r)}},c=e=>{try{s(o.throw(e))}catch(r){u(r)}},s=e=>e.done?a(e.value):Promise.resolve(e.value).then(i,c);s((o=o.apply(t,l)).next())});const g=require("fs/promises"),w=require("minimist"),b=require("path"),n=require("./index-ClBTKGtv.cjs");function j(t){return y(this,null,function*(){const{include:l,exclude:o,optimistic:a,useEnumType:u,enumStyle:i,mergeReadWriteOnly:c,useUnknown:s,argumentStyle:e,allSchemas:r,numericBooleanQueryParameters:f,futureStripLegacyMethods:h,help:x,version:O}=t,[m,p]=t._;if(x&&(S(),process.exit(0)),O){const v=JSON.parse(yield g.readFile(b.join(__dirname,"..","package.json"),"utf8"));console.log(v.version),process.exit(0)}m||(S(),process.exit(1)),e!==void 0&&!n.argumentStyleOptions.includes(e)&&(console.error(`--argumentStyle should be one of <${n.argumentStyleOptions.join(" | ")}>, but got "${e}"`),process.exit(1)),i!==void 0&&!n.enumStyleOptions.includes(i)&&(console.error(`--enumStyle should be one of <${n.enumStyleOptions.join(" | ")}>, but got "${i}"`),process.exit(1));const d=yield n.generateSource(m,{include:l,exclude:o,optimistic:a,useEnumType:u,enumStyle:i,useUnknown:s,mergeReadWriteOnly:c,argumentStyle:e,allSchemas:r,numericBooleanQueryParameters:f,futureStripLegacyMethods:h});p?yield g.writeFile(p,d):console.log(d)})}function S(){console.error(`
3
3
  Usage:
4
4
  oazapfts <spec> [filename]
5
5
 
@@ -15,6 +15,7 @@
15
15
  --mergeReadWriteOnly
16
16
  --argumentStyle=<${n.argumentStyleOptions.join(" | ")}> (default: positional)
17
17
  --allSchemas
18
+ --numericBooleanQueryParameters
18
19
  --futureStripLegacyMethods
19
- `)}b(v(process.argv.slice(2),{alias:{h:"help",v:"version",i:"include",e:"exclude"},boolean:["help","version","optimistic","useEnumType","mergeReadWriteOnly","useUnknown","allSchemas","futureStripLegacyMethods"],string:["argumentStyle","enumStyle"]})).catch(t=>{console.error(t),process.exit(1)});
20
+ `)}j(w(process.argv.slice(2),{alias:{h:"help",v:"version",i:"include",e:"exclude"},boolean:["help","version","optimistic","useEnumType","mergeReadWriteOnly","useUnknown","allSchemas","numericBooleanQueryParameters","futureStripLegacyMethods"],string:["argumentStyle","enumStyle"]})).catch(t=>{console.error(t),process.exit(1)});
20
21
  //# sourceMappingURL=cli.cjs.map
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.cjs","sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { readFile, writeFile } from \"fs/promises\";\nimport minimist, { type ParsedArgs } from \"minimist\";\nimport { join } from \"path\";\n\nimport { generateSource } from \"./\";\nimport { argumentStyleOptions } from \"./generate/generateClientMethod\";\nimport { enumStyleOptions } from \"./helpers/getEnumStyle\";\n\nasync function run(argv: ParsedArgs) {\n const {\n include,\n exclude,\n optimistic,\n useEnumType,\n enumStyle,\n mergeReadWriteOnly,\n useUnknown,\n argumentStyle,\n allSchemas,\n futureStripLegacyMethods,\n help,\n version,\n } = argv;\n const [spec, dest] = argv._;\n\n if (help) {\n printUsage();\n process.exit(0);\n }\n\n if (version) {\n const pkg = JSON.parse(\n await readFile(join(__dirname, \"..\", \"package.json\"), \"utf8\"),\n );\n console.log(pkg.version);\n process.exit(0);\n }\n\n if (!spec) {\n printUsage();\n process.exit(1);\n }\n\n if (\n argumentStyle !== undefined &&\n !argumentStyleOptions.includes(argumentStyle)\n ) {\n console.error(\n `--argumentStyle should be one of <${argumentStyleOptions.join(\n \" | \",\n )}>, but got \"${argumentStyle}\"`,\n );\n process.exit(1);\n }\n\n if (enumStyle !== undefined && !enumStyleOptions.includes(enumStyle)) {\n console.error(\n `--enumStyle should be one of <${enumStyleOptions.join(\n \" | \",\n )}>, but got \"${enumStyle}\"`,\n );\n process.exit(1);\n }\n\n const code = await generateSource(spec, {\n include,\n exclude,\n optimistic,\n useEnumType,\n enumStyle,\n useUnknown,\n mergeReadWriteOnly,\n argumentStyle,\n allSchemas,\n futureStripLegacyMethods,\n });\n\n if (dest) await writeFile(dest, code);\n else console.log(code);\n}\n\nfunction printUsage() {\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 --help, -h\n --version, -v\n --optimistic\n --useEnumType (deprecated, use --enumStyle=enum)\n --enumStyle=<${enumStyleOptions.join(\" | \")}> (default: union)\n --useUnknown\n --mergeReadWriteOnly\n --argumentStyle=<${argumentStyleOptions.join(\" | \")}> (default: positional)\n --allSchemas\n --futureStripLegacyMethods\n`);\n}\n\nrun(\n minimist(process.argv.slice(2), {\n alias: {\n h: \"help\",\n v: \"version\",\n i: \"include\",\n e: \"exclude\",\n },\n boolean: [\n \"help\",\n \"version\",\n \"optimistic\",\n \"useEnumType\",\n \"mergeReadWriteOnly\",\n \"useUnknown\",\n \"allSchemas\",\n \"futureStripLegacyMethods\",\n ],\n string: [\"argumentStyle\", \"enumStyle\"],\n }),\n).catch((error) => {\n console.error(error);\n process.exit(1);\n});\n"],"names":["run","argv","__async","include","exclude","optimistic","useEnumType","enumStyle","mergeReadWriteOnly","useUnknown","argumentStyle","allSchemas","futureStripLegacyMethods","help","version","spec","dest","printUsage","pkg","readFile","join","argumentStyleOptions","enumStyleOptions","code","generateSource","writeFile","minimist","error"],"mappings":";mUAUA,SAAeA,EAAIC,EAAkB,QAAAC,EAAA,sBACnC,KAAM,CACJ,QAAAC,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAAC,EACA,mBAAAC,EACA,WAAAC,EACA,cAAAC,EACA,WAAAC,EACA,yBAAAC,EACA,KAAAC,EACA,QAAAC,CAAA,EACEb,EACE,CAACc,EAAMC,CAAI,EAAIf,EAAK,EAO1B,GALIY,IACFI,EAAA,EACA,QAAQ,KAAK,CAAC,GAGZH,EAAS,CACX,MAAMI,EAAM,KAAK,MACf,MAAMC,EAAAA,SAASC,EAAAA,KAAK,UAAW,KAAM,cAAc,EAAG,MAAM,CAAA,EAE9D,QAAQ,IAAIF,EAAI,OAAO,EACvB,QAAQ,KAAK,CAAC,CAChB,CAEKH,IACHE,EAAA,EACA,QAAQ,KAAK,CAAC,GAIdP,IAAkB,QAClB,CAACW,EAAAA,qBAAqB,SAASX,CAAa,IAE5C,QAAQ,MACN,qCAAqCW,EAAAA,qBAAqB,KACxD,KAAA,CACD,eAAeX,CAAa,GAAA,EAE/B,QAAQ,KAAK,CAAC,GAGZH,IAAc,QAAa,CAACe,EAAAA,iBAAiB,SAASf,CAAS,IACjE,QAAQ,MACN,iCAAiCe,EAAAA,iBAAiB,KAChD,KAAA,CACD,eAAef,CAAS,GAAA,EAE3B,QAAQ,KAAK,CAAC,GAGhB,MAAMgB,EAAO,MAAMC,EAAAA,eAAeT,EAAM,CACtC,QAAAZ,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAAC,EACA,WAAAE,EACA,mBAAAD,EACA,cAAAE,EACA,WAAAC,EACA,yBAAAC,CAAA,CACD,EAEGI,EAAM,MAAMS,YAAUT,EAAMO,CAAI,EAC/B,QAAQ,IAAIA,CAAI,CACvB,GAEA,SAASN,GAAa,CACpB,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAWGK,EAAAA,iBAAiB,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,uBAGxBD,EAAAA,qBAAqB,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,CAGtD,CACD,CAEArB,EACE0B,EAAS,QAAQ,KAAK,MAAM,CAAC,EAAG,CAC9B,MAAO,CACL,EAAG,OACH,EAAG,UACH,EAAG,UACH,EAAG,SAAA,EAEL,QAAS,CACP,OACA,UACA,aACA,cACA,qBACA,aACA,aACA,0BAAA,EAEF,OAAQ,CAAC,gBAAiB,WAAW,CAAA,CACtC,CACH,EAAE,MAAOC,GAAU,CACjB,QAAQ,MAAMA,CAAK,EACnB,QAAQ,KAAK,CAAC,CAChB,CAAC"}
1
+ {"version":3,"file":"cli.cjs","sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { readFile, writeFile } from \"fs/promises\";\nimport minimist, { type ParsedArgs } from \"minimist\";\nimport { join } from \"path\";\n\nimport { generateSource } from \"./\";\nimport { argumentStyleOptions } from \"./generate/generateClientMethod\";\nimport { enumStyleOptions } from \"./helpers/getEnumStyle\";\n\nasync function run(argv: ParsedArgs) {\n const {\n include,\n exclude,\n optimistic,\n useEnumType,\n enumStyle,\n mergeReadWriteOnly,\n useUnknown,\n argumentStyle,\n allSchemas,\n numericBooleanQueryParameters,\n futureStripLegacyMethods,\n help,\n version,\n } = argv;\n const [spec, dest] = argv._;\n\n if (help) {\n printUsage();\n process.exit(0);\n }\n\n if (version) {\n const pkg = JSON.parse(\n await readFile(join(__dirname, \"..\", \"package.json\"), \"utf8\"),\n );\n console.log(pkg.version);\n process.exit(0);\n }\n\n if (!spec) {\n printUsage();\n process.exit(1);\n }\n\n if (\n argumentStyle !== undefined &&\n !argumentStyleOptions.includes(argumentStyle)\n ) {\n console.error(\n `--argumentStyle should be one of <${argumentStyleOptions.join(\n \" | \",\n )}>, but got \"${argumentStyle}\"`,\n );\n process.exit(1);\n }\n\n if (enumStyle !== undefined && !enumStyleOptions.includes(enumStyle)) {\n console.error(\n `--enumStyle should be one of <${enumStyleOptions.join(\n \" | \",\n )}>, but got \"${enumStyle}\"`,\n );\n process.exit(1);\n }\n\n const code = await generateSource(spec, {\n include,\n exclude,\n optimistic,\n useEnumType,\n enumStyle,\n useUnknown,\n mergeReadWriteOnly,\n argumentStyle,\n allSchemas,\n numericBooleanQueryParameters,\n futureStripLegacyMethods,\n });\n\n if (dest) await writeFile(dest, code);\n else console.log(code);\n}\n\nfunction printUsage() {\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 --help, -h\n --version, -v\n --optimistic\n --useEnumType (deprecated, use --enumStyle=enum)\n --enumStyle=<${enumStyleOptions.join(\" | \")}> (default: union)\n --useUnknown\n --mergeReadWriteOnly\n --argumentStyle=<${argumentStyleOptions.join(\" | \")}> (default: positional)\n --allSchemas\n --numericBooleanQueryParameters\n --futureStripLegacyMethods\n`);\n}\n\nrun(\n minimist(process.argv.slice(2), {\n alias: {\n h: \"help\",\n v: \"version\",\n i: \"include\",\n e: \"exclude\",\n },\n boolean: [\n \"help\",\n \"version\",\n \"optimistic\",\n \"useEnumType\",\n \"mergeReadWriteOnly\",\n \"useUnknown\",\n \"allSchemas\",\n \"numericBooleanQueryParameters\",\n \"futureStripLegacyMethods\",\n ],\n string: [\"argumentStyle\", \"enumStyle\"],\n }),\n).catch((error) => {\n console.error(error);\n process.exit(1);\n});\n"],"names":["run","argv","__async","include","exclude","optimistic","useEnumType","enumStyle","mergeReadWriteOnly","useUnknown","argumentStyle","allSchemas","numericBooleanQueryParameters","futureStripLegacyMethods","help","version","spec","dest","printUsage","pkg","readFile","join","argumentStyleOptions","enumStyleOptions","code","generateSource","writeFile","minimist","error"],"mappings":";mUAUA,SAAeA,EAAIC,EAAkB,QAAAC,EAAA,sBACnC,KAAM,CACJ,QAAAC,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAAC,EACA,mBAAAC,EACA,WAAAC,EACA,cAAAC,EACA,WAAAC,EACA,8BAAAC,EACA,yBAAAC,EACA,KAAAC,EACA,QAAAC,CAAA,EACEd,EACE,CAACe,EAAMC,CAAI,EAAIhB,EAAK,EAO1B,GALIa,IACFI,EAAA,EACA,QAAQ,KAAK,CAAC,GAGZH,EAAS,CACX,MAAMI,EAAM,KAAK,MACf,MAAMC,EAAAA,SAASC,EAAAA,KAAK,UAAW,KAAM,cAAc,EAAG,MAAM,CAAA,EAE9D,QAAQ,IAAIF,EAAI,OAAO,EACvB,QAAQ,KAAK,CAAC,CAChB,CAEKH,IACHE,EAAA,EACA,QAAQ,KAAK,CAAC,GAIdR,IAAkB,QAClB,CAACY,EAAAA,qBAAqB,SAASZ,CAAa,IAE5C,QAAQ,MACN,qCAAqCY,EAAAA,qBAAqB,KACxD,KAAA,CACD,eAAeZ,CAAa,GAAA,EAE/B,QAAQ,KAAK,CAAC,GAGZH,IAAc,QAAa,CAACgB,EAAAA,iBAAiB,SAAShB,CAAS,IACjE,QAAQ,MACN,iCAAiCgB,EAAAA,iBAAiB,KAChD,KAAA,CACD,eAAehB,CAAS,GAAA,EAE3B,QAAQ,KAAK,CAAC,GAGhB,MAAMiB,EAAO,MAAMC,EAAAA,eAAeT,EAAM,CACtC,QAAAb,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,EACA,UAAAC,EACA,WAAAE,EACA,mBAAAD,EACA,cAAAE,EACA,WAAAC,EACA,8BAAAC,EACA,yBAAAC,CAAA,CACD,EAEGI,EAAM,MAAMS,YAAUT,EAAMO,CAAI,EAC/B,QAAQ,IAAIA,CAAI,CACvB,GAEA,SAASN,GAAa,CACpB,QAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAWGK,EAAAA,iBAAiB,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,uBAGxBD,EAAAA,qBAAqB,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,CAItD,CACD,CAEAtB,EACE2B,EAAS,QAAQ,KAAK,MAAM,CAAC,EAAG,CAC9B,MAAO,CACL,EAAG,OACH,EAAG,UACH,EAAG,UACH,EAAG,SAAA,EAEL,QAAS,CACP,OACA,UACA,aACA,cACA,qBACA,aACA,aACA,gCACA,0BAAA,EAEF,OAAQ,CAAC,gBAAiB,WAAW,CAAA,CACtC,CACH,EAAE,MAAOC,GAAU,CACjB,QAAQ,MAAMA,CAAK,EACnB,QAAQ,KAAK,CAAC,CAChB,CAAC"}
package/dist/cli.js CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { readFile as x, writeFile as w } from "fs/promises";
3
- import O from "minimist";
4
- import { join as b } from "path";
5
- import { a as t, e as i, g as j } from "./index-D2W38DVS.js";
6
- async function $(e) {
2
+ import { readFile as w, writeFile as O } from "fs/promises";
3
+ import b from "minimist";
4
+ import { join as j } from "path";
5
+ import { a as t, e as i, g as $ } from "./index-DOhxV2DJ.js";
6
+ async function k(e) {
7
7
  const {
8
- include: a,
8
+ include: u,
9
9
  exclude: c,
10
10
  optimistic: m,
11
11
  useEnumType: p,
@@ -13,18 +13,19 @@ async function $(e) {
13
13
  mergeReadWriteOnly: d,
14
14
  useUnknown: g,
15
15
  argumentStyle: n,
16
- allSchemas: f,
17
- futureStripLegacyMethods: y,
18
- help: S,
19
- version: h
16
+ allSchemas: y,
17
+ numericBooleanQueryParameters: f,
18
+ futureStripLegacyMethods: S,
19
+ help: h,
20
+ version: v
20
21
  } = e, [s, r] = e._;
21
- if (S && (u(), process.exit(0)), h) {
22
- const v = JSON.parse(
23
- await x(b(__dirname, "..", "package.json"), "utf8")
22
+ if (h && (l(), process.exit(0)), v) {
23
+ const x = JSON.parse(
24
+ await w(j(__dirname, "..", "package.json"), "utf8")
24
25
  );
25
- console.log(v.version), process.exit(0);
26
+ console.log(x.version), process.exit(0);
26
27
  }
27
- s || (u(), process.exit(1)), n !== void 0 && !t.includes(n) && (console.error(
28
+ s || (l(), process.exit(1)), n !== void 0 && !t.includes(n) && (console.error(
28
29
  `--argumentStyle should be one of <${t.join(
29
30
  " | "
30
31
  )}>, but got "${n}"`
@@ -33,8 +34,8 @@ async function $(e) {
33
34
  " | "
34
35
  )}>, but got "${o}"`
35
36
  ), process.exit(1));
36
- const l = await j(s, {
37
- include: a,
37
+ const a = await $(s, {
38
+ include: u,
38
39
  exclude: c,
39
40
  optimistic: m,
40
41
  useEnumType: p,
@@ -42,12 +43,13 @@ async function $(e) {
42
43
  useUnknown: g,
43
44
  mergeReadWriteOnly: d,
44
45
  argumentStyle: n,
45
- allSchemas: f,
46
- futureStripLegacyMethods: y
46
+ allSchemas: y,
47
+ numericBooleanQueryParameters: f,
48
+ futureStripLegacyMethods: S
47
49
  });
48
- r ? await w(r, l) : console.log(l);
50
+ r ? await O(r, a) : console.log(a);
49
51
  }
50
- function u() {
52
+ function l() {
51
53
  console.error(`
52
54
  Usage:
53
55
  oazapfts <spec> [filename]
@@ -64,11 +66,12 @@ function u() {
64
66
  --mergeReadWriteOnly
65
67
  --argumentStyle=<${t.join(" | ")}> (default: positional)
66
68
  --allSchemas
69
+ --numericBooleanQueryParameters
67
70
  --futureStripLegacyMethods
68
71
  `);
69
72
  }
70
- $(
71
- O(process.argv.slice(2), {
73
+ k(
74
+ b(process.argv.slice(2), {
72
75
  alias: {
73
76
  h: "help",
74
77
  v: "version",
@@ -83,6 +86,7 @@ $(
83
86
  "mergeReadWriteOnly",
84
87
  "useUnknown",
85
88
  "allSchemas",
89
+ "numericBooleanQueryParameters",
86
90
  "futureStripLegacyMethods"
87
91
  ],
88
92
  string: ["argumentStyle", "enumStyle"]
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { readFile, writeFile } from \"fs/promises\";\nimport minimist, { type ParsedArgs } from \"minimist\";\nimport { join } from \"path\";\n\nimport { generateSource } from \"./\";\nimport { argumentStyleOptions } from \"./generate/generateClientMethod\";\nimport { enumStyleOptions } from \"./helpers/getEnumStyle\";\n\nasync function run(argv: ParsedArgs) {\n const {\n include,\n exclude,\n optimistic,\n useEnumType,\n enumStyle,\n mergeReadWriteOnly,\n useUnknown,\n argumentStyle,\n allSchemas,\n futureStripLegacyMethods,\n help,\n version,\n } = argv;\n const [spec, dest] = argv._;\n\n if (help) {\n printUsage();\n process.exit(0);\n }\n\n if (version) {\n const pkg = JSON.parse(\n await readFile(join(__dirname, \"..\", \"package.json\"), \"utf8\"),\n );\n console.log(pkg.version);\n process.exit(0);\n }\n\n if (!spec) {\n printUsage();\n process.exit(1);\n }\n\n if (\n argumentStyle !== undefined &&\n !argumentStyleOptions.includes(argumentStyle)\n ) {\n console.error(\n `--argumentStyle should be one of <${argumentStyleOptions.join(\n \" | \",\n )}>, but got \"${argumentStyle}\"`,\n );\n process.exit(1);\n }\n\n if (enumStyle !== undefined && !enumStyleOptions.includes(enumStyle)) {\n console.error(\n `--enumStyle should be one of <${enumStyleOptions.join(\n \" | \",\n )}>, but got \"${enumStyle}\"`,\n );\n process.exit(1);\n }\n\n const code = await generateSource(spec, {\n include,\n exclude,\n optimistic,\n useEnumType,\n enumStyle,\n useUnknown,\n mergeReadWriteOnly,\n argumentStyle,\n allSchemas,\n futureStripLegacyMethods,\n });\n\n if (dest) await writeFile(dest, code);\n else console.log(code);\n}\n\nfunction printUsage() {\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 --help, -h\n --version, -v\n --optimistic\n --useEnumType (deprecated, use --enumStyle=enum)\n --enumStyle=<${enumStyleOptions.join(\" | \")}> (default: union)\n --useUnknown\n --mergeReadWriteOnly\n --argumentStyle=<${argumentStyleOptions.join(\" | \")}> (default: positional)\n --allSchemas\n --futureStripLegacyMethods\n`);\n}\n\nrun(\n minimist(process.argv.slice(2), {\n alias: {\n h: \"help\",\n v: \"version\",\n i: \"include\",\n e: \"exclude\",\n },\n boolean: [\n \"help\",\n \"version\",\n \"optimistic\",\n \"useEnumType\",\n \"mergeReadWriteOnly\",\n \"useUnknown\",\n \"allSchemas\",\n \"futureStripLegacyMethods\",\n ],\n string: [\"argumentStyle\", \"enumStyle\"],\n }),\n).catch((error) => {\n console.error(error);\n process.exit(1);\n});\n"],"names":["run","argv","include","exclude","optimistic","useEnumType","enumStyle","mergeReadWriteOnly","useUnknown","argumentStyle","allSchemas","futureStripLegacyMethods","help","version","spec","dest","printUsage","pkg","readFile","join","argumentStyleOptions","enumStyleOptions","code","generateSource","writeFile","minimist","error"],"mappings":";;;;;AAUA,eAAeA,EAAIC,GAAkB;AACnC,QAAM;AAAA,IACJ,SAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,YAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC;AAAA,EAAA,IACEZ,GACE,CAACa,GAAMC,CAAI,IAAId,EAAK;AAO1B,MALIW,MACFI,EAAA,GACA,QAAQ,KAAK,CAAC,IAGZH,GAAS;AACX,UAAMI,IAAM,KAAK;AAAA,MACf,MAAMC,EAASC,EAAK,WAAW,MAAM,cAAc,GAAG,MAAM;AAAA,IAAA;AAE9D,YAAQ,IAAIF,EAAI,OAAO,GACvB,QAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,EAAKH,MACHE,EAAA,GACA,QAAQ,KAAK,CAAC,IAIdP,MAAkB,UAClB,CAACW,EAAqB,SAASX,CAAa,MAE5C,QAAQ;AAAA,IACN,qCAAqCW,EAAqB;AAAA,MACxD;AAAA,IAAA,CACD,eAAeX,CAAa;AAAA,EAAA,GAE/B,QAAQ,KAAK,CAAC,IAGZH,MAAc,UAAa,CAACe,EAAiB,SAASf,CAAS,MACjE,QAAQ;AAAA,IACN,iCAAiCe,EAAiB;AAAA,MAChD;AAAA,IAAA,CACD,eAAef,CAAS;AAAA,EAAA,GAE3B,QAAQ,KAAK,CAAC;AAGhB,QAAMgB,IAAO,MAAMC,EAAeT,GAAM;AAAA,IACtC,SAAAZ;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,YAAAE;AAAA,IACA,oBAAAD;AAAA,IACA,eAAAE;AAAA,IACA,YAAAC;AAAA,IACA,0BAAAC;AAAA,EAAA,CACD;AAED,EAAII,IAAM,MAAMS,EAAUT,GAAMO,CAAI,IAC/B,QAAQ,IAAIA,CAAI;AACvB;AAEA,SAASN,IAAa;AACpB,UAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAWGK,EAAiB,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,uBAGxBD,EAAqB,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,CAGtD;AACD;AAEApB;AAAA,EACEyB,EAAS,QAAQ,KAAK,MAAM,CAAC,GAAG;AAAA,IAC9B,OAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,IAEL,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,QAAQ,CAAC,iBAAiB,WAAW;AAAA,EAAA,CACtC;AACH,EAAE,MAAM,CAACC,MAAU;AACjB,UAAQ,MAAMA,CAAK,GACnB,QAAQ,KAAK,CAAC;AAChB,CAAC;"}
1
+ {"version":3,"file":"cli.js","sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { readFile, writeFile } from \"fs/promises\";\nimport minimist, { type ParsedArgs } from \"minimist\";\nimport { join } from \"path\";\n\nimport { generateSource } from \"./\";\nimport { argumentStyleOptions } from \"./generate/generateClientMethod\";\nimport { enumStyleOptions } from \"./helpers/getEnumStyle\";\n\nasync function run(argv: ParsedArgs) {\n const {\n include,\n exclude,\n optimistic,\n useEnumType,\n enumStyle,\n mergeReadWriteOnly,\n useUnknown,\n argumentStyle,\n allSchemas,\n numericBooleanQueryParameters,\n futureStripLegacyMethods,\n help,\n version,\n } = argv;\n const [spec, dest] = argv._;\n\n if (help) {\n printUsage();\n process.exit(0);\n }\n\n if (version) {\n const pkg = JSON.parse(\n await readFile(join(__dirname, \"..\", \"package.json\"), \"utf8\"),\n );\n console.log(pkg.version);\n process.exit(0);\n }\n\n if (!spec) {\n printUsage();\n process.exit(1);\n }\n\n if (\n argumentStyle !== undefined &&\n !argumentStyleOptions.includes(argumentStyle)\n ) {\n console.error(\n `--argumentStyle should be one of <${argumentStyleOptions.join(\n \" | \",\n )}>, but got \"${argumentStyle}\"`,\n );\n process.exit(1);\n }\n\n if (enumStyle !== undefined && !enumStyleOptions.includes(enumStyle)) {\n console.error(\n `--enumStyle should be one of <${enumStyleOptions.join(\n \" | \",\n )}>, but got \"${enumStyle}\"`,\n );\n process.exit(1);\n }\n\n const code = await generateSource(spec, {\n include,\n exclude,\n optimistic,\n useEnumType,\n enumStyle,\n useUnknown,\n mergeReadWriteOnly,\n argumentStyle,\n allSchemas,\n numericBooleanQueryParameters,\n futureStripLegacyMethods,\n });\n\n if (dest) await writeFile(dest, code);\n else console.log(code);\n}\n\nfunction printUsage() {\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 --help, -h\n --version, -v\n --optimistic\n --useEnumType (deprecated, use --enumStyle=enum)\n --enumStyle=<${enumStyleOptions.join(\" | \")}> (default: union)\n --useUnknown\n --mergeReadWriteOnly\n --argumentStyle=<${argumentStyleOptions.join(\" | \")}> (default: positional)\n --allSchemas\n --numericBooleanQueryParameters\n --futureStripLegacyMethods\n`);\n}\n\nrun(\n minimist(process.argv.slice(2), {\n alias: {\n h: \"help\",\n v: \"version\",\n i: \"include\",\n e: \"exclude\",\n },\n boolean: [\n \"help\",\n \"version\",\n \"optimistic\",\n \"useEnumType\",\n \"mergeReadWriteOnly\",\n \"useUnknown\",\n \"allSchemas\",\n \"numericBooleanQueryParameters\",\n \"futureStripLegacyMethods\",\n ],\n string: [\"argumentStyle\", \"enumStyle\"],\n }),\n).catch((error) => {\n console.error(error);\n process.exit(1);\n});\n"],"names":["run","argv","include","exclude","optimistic","useEnumType","enumStyle","mergeReadWriteOnly","useUnknown","argumentStyle","allSchemas","numericBooleanQueryParameters","futureStripLegacyMethods","help","version","spec","dest","printUsage","pkg","readFile","join","argumentStyleOptions","enumStyleOptions","code","generateSource","writeFile","minimist","error"],"mappings":";;;;;AAUA,eAAeA,EAAIC,GAAkB;AACnC,QAAM;AAAA,IACJ,SAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,YAAAC;AAAA,IACA,+BAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC;AAAA,EAAA,IACEb,GACE,CAACc,GAAMC,CAAI,IAAIf,EAAK;AAO1B,MALIY,MACFI,EAAA,GACA,QAAQ,KAAK,CAAC,IAGZH,GAAS;AACX,UAAMI,IAAM,KAAK;AAAA,MACf,MAAMC,EAASC,EAAK,WAAW,MAAM,cAAc,GAAG,MAAM;AAAA,IAAA;AAE9D,YAAQ,IAAIF,EAAI,OAAO,GACvB,QAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,EAAKH,MACHE,EAAA,GACA,QAAQ,KAAK,CAAC,IAIdR,MAAkB,UAClB,CAACY,EAAqB,SAASZ,CAAa,MAE5C,QAAQ;AAAA,IACN,qCAAqCY,EAAqB;AAAA,MACxD;AAAA,IAAA,CACD,eAAeZ,CAAa;AAAA,EAAA,GAE/B,QAAQ,KAAK,CAAC,IAGZH,MAAc,UAAa,CAACgB,EAAiB,SAAShB,CAAS,MACjE,QAAQ;AAAA,IACN,iCAAiCgB,EAAiB;AAAA,MAChD;AAAA,IAAA,CACD,eAAehB,CAAS;AAAA,EAAA,GAE3B,QAAQ,KAAK,CAAC;AAGhB,QAAMiB,IAAO,MAAMC,EAAeT,GAAM;AAAA,IACtC,SAAAb;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAAC;AAAA,IACA,WAAAC;AAAA,IACA,YAAAE;AAAA,IACA,oBAAAD;AAAA,IACA,eAAAE;AAAA,IACA,YAAAC;AAAA,IACA,+BAAAC;AAAA,IACA,0BAAAC;AAAA,EAAA,CACD;AAED,EAAII,IAAM,MAAMS,EAAUT,GAAMO,CAAI,IAC/B,QAAQ,IAAIA,CAAI;AACvB;AAEA,SAASN,IAAa;AACpB,UAAQ,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAWGK,EAAiB,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,uBAGxBD,EAAqB,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,CAItD;AACD;AAEArB;AAAA,EACE0B,EAAS,QAAQ,KAAK,MAAM,CAAC,GAAG;AAAA,IAC9B,OAAO;AAAA,MACL,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IAAA;AAAA,IAEL,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,QAAQ,CAAC,iBAAiB,WAAW;AAAA,EAAA,CACtC;AACH,EAAE,MAAM,CAACC,MAAU;AACjB,UAAQ,MAAMA,CAAK,GACnB,QAAQ,KAAK,CAAC;AAChB,CAAC;"}
package/dist/context.d.ts CHANGED
@@ -6,6 +6,7 @@ import { InterfaceDeclaration } from 'typescript';
6
6
  import { OpenAPIV3 } from 'openapi-types';
7
7
  import { OpenAPIV3_1 } from 'openapi-types';
8
8
  import { Statement } from 'typescript';
9
+ import { SyncWaterfallHook } from 'tapable';
9
10
  import { TypeAliasDeclaration } from 'typescript';
10
11
  import { TypeReferenceNode } from 'typescript';
11
12
 
@@ -181,6 +182,10 @@ declare type OazapftsOptions = {
181
182
  useUnknown?: boolean;
182
183
  argumentStyle?: ArgumentStyle;
183
184
  allSchemas?: boolean;
185
+ /**
186
+ * When true, serialize boolean query parameters as 1/0.
187
+ */
188
+ numericBooleanQueryParameters?: boolean;
184
189
  /**
185
190
  * When true, skip generating deprecated legacy method aliases for backward
186
191
  * compatibility. Only the primary normalized operationId-based names will
@@ -272,6 +277,11 @@ declare type UNSTABLE_OazapftsPluginHooks = {
272
277
  },
273
278
  OazapftsContext_2
274
279
  ]>;
280
+ /**
281
+ * Customize query serializer call arguments for each formatter call.
282
+ * Default behavior is identity (returns the original args unchanged).
283
+ */
284
+ querySerializerArgs: SyncWaterfallHook<UNSTABLE_QuerySerializerHookArgs>;
275
285
  /**
276
286
  * Called after the full AST has been generated, before printing to string.
277
287
  * Use this to add/modify/remove statements from the final source file.
@@ -285,4 +295,18 @@ declare type UNSTABLE_OazapftsPluginOptions = {
285
295
  precedence?: UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE;
286
296
  };
287
297
 
298
+ declare type UNSTABLE_QuerySerializerHookArgs = [
299
+ default_2.Expression[],
300
+ {
301
+ method: HttpMethod;
302
+ path: string;
303
+ operation: OpenAPI.OperationObject;
304
+ pathItem: OpenAPI.PathItemObject;
305
+ formatter: string;
306
+ parameters: OpenAPI.ParameterObject[];
307
+ query: OpenAPI.ParameterObject[];
308
+ },
309
+ OazapftsContext_2
310
+ ];
311
+
288
312
  export { }
@@ -0,0 +1,9 @@
1
+ "use strict";var he=Object.defineProperty,ve=Object.defineProperties;var Ie=Object.getOwnPropertyDescriptors;var oe=Object.getOwnPropertySymbols;var Ae=Object.prototype.hasOwnProperty,Ee=Object.prototype.propertyIsEnumerable;var ie=(e,t,r)=>t in e?he(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,F=(e,t)=>{for(var r in t||(t={}))Ae.call(t,r)&&ie(e,r,t[r]);if(oe)for(var r of oe(t))Ee.call(t,r)&&ie(e,r,t[r]);return e},ae=(e,t)=>ve(e,Ie(t));var C=(e,t,r)=>new Promise((a,o)=>{var c=u=>{try{f(r.next(u))}catch(p){o(p)}},i=u=>{try{f(r.throw(u))}catch(p){o(p)}},f=u=>u.done?a(u.value):Promise.resolve(u.value).then(c,i);f((r=r.apply(e,t)).next())});const s=require("./context-lKBK5qCf.cjs"),Pe=require("@apidevtools/swagger-parser"),n=require("typescript"),N=require("lodash"),B=require("./plugin.cjs");function k(e){return e.replace(/.+\//,"")}function v(e){return typeof e=="object"&&e!==null&&"$ref"in e}function ye(e){if(!e.startsWith("#/"))throw new Error(`External refs are not supported (${e}). Make sure to call SwaggerParser.bundle() first.`);return e.slice(2).split("/").map(t=>decodeURI(t.replace(/~1/g,"/").replace(/~0/g,"~")))}function T(e,{spec:t}){if(!v(e))return e;const r=e.$ref,a=ye(r),o=N.get(t,a);if(typeof o=="undefined")throw new Error(`Can't find ${a}`);return o}function se(e,t){return t?t.map(r=>T(r,e)):[]}function je(e){var o;if(!((o=e.spec.components)!=null&&o.schemas))return;const t="#/components/schemas/",r=e.spec.components.schemas;for(const c of Object.keys(r)){const i=r[c];v(i)||typeof i=="boolean"||i.discriminator&&!i.oneOf&&!i.anyOf&&e.discriminatingSchemas.add(i)}const a=(c,i)=>Object.values(c.mapping||{}).includes(i);for(const c of Object.keys(r)){const i=r[c];if(!(v(i)||typeof i=="boolean"||!i.allOf))for(const f of i.allOf){if(!v(f)||!e.discriminatingSchemas.has(T(f,e)))continue;const u=r[k(f.$ref)];if(v(u))throw new Error("Unexpected nested reference");const p=u.discriminator;a(p,t+c)||(p.mapping||(p.mapping={}),p.mapping[c]=t+c)}}}function Le(e,t){var a;return t&&t.some(o=>{var c,i;return(i=(c=e.opts)==null?void 0:c.exclude)==null?void 0:i.includes(o)})?!0:(a=e.opts)!=null&&a.include?!(t&&t.some(c=>{var i;return(i=e.opts.include)==null?void 0:i.includes(c)})):!1}function ke(e,t,r){const a=Re(e,t),o=Ce(r),c=$e(r);return c&&!o?{primaryName:c,deprecatedLegacyName:a}:{primaryName:c||a}}function Re(e,t){return t=t.replace(/\{(.+?)\}/,"by $1").replace(/\{(.+?)\}/,"and $1"),s.toIdentifier(`${e} ${t}`)}function $e(e){if(!e)return;const t=e.replace(/[^\w\s]/g," ");let r=N.camelCase(t);if(r&&(r=r.replace(/^[^a-zA-Z_$]+/,""),r=N.lowerFirst(r),!!r&&s.isValidIdentifier(r)))return r}function Ce(e){if(!e||e.match(/[^\w\s]/))return;const t=N.camelCase(e);if(s.isValidIdentifier(t))return t}const le={"*/*":"json","application/json":"json","application/x-www-form-urlencoded":"form","multipart/form-data":"multipart"};function Fe(e){return typeof e=="string"&&/^[^/]+\/[^/]+$/.test(e)}function Y(e){return le[e]==="json"||/\bjson\b/i.test(e)}function qe({style:e="form",explode:t=!0,content:r}){if(r){const a=Object.keys(r);if(a.length!==1)throw new Error("Parameters with content property must specify one media type");if(!Y(a[0]))throw new Error("Parameters with content property must specify a JSON compatible media type");return"json"}return t&&e==="deepObject"?"deep":t?"explode":e==="spaceDelimited"?"space":e==="pipeDelimited"?"pipe":"form"}function ce(e,t){return s.createCall(n.factory.createPropertyAccessExpression(n.factory.createIdentifier("QS"),e),{args:t})}function De(e,t){const r=[],a=e.replace(/(.*?)\{(.+?)\}(.*?)(?=\{|$)/g,(o,c,i,f)=>{const u=s.toIdentifier(i);return r.push({expression:s.createCall(n.factory.createIdentifier("encodeURIComponent"),{args:[n.factory.createIdentifier(u)]}),literal:f}),c});return t&&r.push({expression:t,literal:""}),s.createTemplateString(a,r)}function q(e,t,r){return s.createCall(n.factory.createPropertyAccessExpression(n.factory.createIdentifier("oazapfts"),e),{args:t,typeArgs:r})}function Ue(e){if(e!=null&&e.content)for(const t of Object.keys(e.content)){const r=le[t];if(r)return r;if(Y(t))return"json"}}function Be(e,t){var r;return(r=t.opts)!=null&&r.optimistic?q("ok",[e]):e}function fe(e){if(v(e))return k(e.$ref)}function Ke(e,t){const r=o=>{try{return T({$ref:o},t),!1}catch(c){return!0}};if(r(e))return e;let a=2;for(;;){const o=e+String(a);if(r(o))return o;a+=1}}function _e(e){const t=k(e);return/^\d+/.test(t)?ye(e).join("_"):t}function K(e,t){return!!(typeof e!="boolean"&&e.enum&&t&&e.type!=="boolean")}const Qe=["union","enum","as-const"];function _(e){return e.enumStyle!==void 0?e.enumStyle:e.useEnumType?"enum":"union"}function D(e,t){let r=t.typeAliases[e]||0;return r&&(t.typeAliases[e]=++r,e+=r),t.typeAliases[e]=1,e}function de(e,t,r){return r.enumRefs[e]&&r.enumRefs[e].values===t?e:D(e,r)}function me(e,t){const r="x-enumNames"in e?e["x-enumNames"]:"x-enum-varnames"in e?e["x-enum-varnames"]:void 0;if(r){if(!Array.isArray(r))throw new Error("enum names must be an array");if(r.length!==t.length)throw new Error("enum names must have the same length as enum values");if(r.some(a=>typeof a!="string"))throw new Error("enum names must be an array of strings");return r}}function ge(e,t,r=!0){if(t.opts.mergeReadWriteOnly)return{readOnly:!1,writeOnly:!1};const a=(o,c)=>{var p,y,l,d,O,b;if(v(o)){if(!r)return{readOnly:!1,writeOnly:!1};if(c.has(o.$ref))return{readOnly:!1,writeOnly:!1};const I=t.refsOnlyMode.get(o.$ref);if(I)return I;c.add(o.$ref);const h=a(T(o,t),c);return c.delete(o.$ref),t.refsOnlyMode.set(o.$ref,h),h}if(typeof o=="boolean")return{readOnly:!1,writeOnly:!1};let i=(p=o.readOnly)!=null?p:!1,f=(y=o.writeOnly)!=null?y:!1;const u=[];"items"in o&&o.items?u.push(o.items):(u.push(...Object.values((l=o.properties)!=null?l:{})),u.push(...(d=o.allOf)!=null?d:[]),u.push(...(O=o.anyOf)!=null?O:[]),u.push(...(b=o.oneOf)!=null?b:[]));for(const I of u){if(i&&f)break;const h=a(I,c);i=i||h.readOnly,f=f||h.writeOnly}return{readOnly:i,writeOnly:f}};return a(e,new Set)}function ze(e){return typeof e=="boolean"?e:e&&"nullable"in e?!v(e)&&e.nullable:!1}const Ve=["GET","PUT","POST","DELETE","OPTIONS","HEAD","PATCH","TRACE"];function Me(e){return Ve.includes(e)}function He(e){const t={};return e.map(r=>{var o;const a=(o=r.name)==null?void 0:o.text;if(a){if(t[a])return s.updateFunctionDeclaration(r,{name:n.factory.createIdentifier(`${a}${++t[a]}`)});t[a]=1}return r})}function Q(e){const t=Object.keys(e).find(Fe);if(t){const{schema:r}=e[t];if(r)return r}return Object.keys(e).length===0||Object.keys(e).some(r=>r.startsWith("text/"))?{type:"string"}:{type:"string",format:"binary"}}function W(e,t,r,a){var c;const o=a?Ke(e.$ref+"Base",t):e.$ref;if(!t.refs[o]){let i=T(e,t);typeof i!="boolean"&&a&&(i=N.cloneDeep(i),delete i.discriminator);const f=typeof i!="boolean"&&i.title||_e(o),u=s.toIdentifier(f,!0);if(_(t.opts)!=="union"&&K(i,f))return w(t,i,f);const p=D(u,t);t.refs[o]={base:n.factory.createTypeReferenceNode(p,void 0),readOnly:void 0,writeOnly:void 0};const y=w(t,i,void 0);t.aliases.push(s.createTypeAliasDeclaration({modifiers:[s.modifier.export],name:p,type:y}));const{readOnly:l,writeOnly:d}=ge(i,t);if(l){const O=D(s.toIdentifier(f,!0,"readOnly"),t);t.refs[o].readOnly=n.factory.createTypeReferenceNode(O,void 0);const b=w(t,i,f,"readOnly");t.aliases.push(s.createTypeAliasDeclaration({modifiers:[s.modifier.export],name:O,type:b}))}if(d){const O=D(s.toIdentifier(f,!0,"writeOnly"),t);t.refs[o].writeOnly=n.factory.createTypeReferenceNode(O,void 0);const b=w(t,i,f,"writeOnly");t.aliases.push(s.createTypeAliasDeclaration({modifiers:[s.modifier.export],name:O,type:b}))}}return(c=t.refs[o][r||"base"])!=null?c:t.refs[o].base}function J(e,t,r){var l;if(typeof e=="boolean")throw new Error("cannot get enum from boolean schema. schema must be an object");const o=(e.title||N.upperFirst(t)).split(/[^A-Za-z0-9$_]/g).map(d=>N.upperFirst(d)).join(""),c=((l=e.enum)!=null?l:[]).join("_"),i=de(o,c,r);if(r.enumRefs[o]&&o===i)return r.enumRefs[o].type;const f=e.enum?e.enum:[],u=me(e,f),p=f.map((d,O)=>{if(e.type==="number"||e.type==="integer"||e.type==="string"){const b=u?u[O]:String(d);return n.factory.createEnumMember(n.factory.createIdentifier(s.toIdentifier(b,!0)),s.createLiteral(d))}return n.factory.createEnumMember(n.factory.createIdentifier(s.toIdentifier(String(d),!0)),s.createLiteral(d))});r.enumAliases.push(n.factory.createEnumDeclaration([s.modifier.export],i,p));const y=n.factory.createTypeReferenceNode(i,void 0);return r.enumRefs[o]={values:c,type:n.factory.createTypeReferenceNode(i,void 0)},y}function Z(e,t,r){var O;if(typeof e=="boolean")throw new Error("cannot get enum from boolean schema. schema must be an object");const o=(e.title||N.upperFirst(t)).split(/[^A-Za-z0-9$_]/g).map(b=>N.upperFirst(b)).join(""),c=((O=e.enum)!=null?O:[]).join("_"),i=de(o,c,r);if(r.enumRefs[o]&&o===i)return r.enumRefs[o].type;const f=e.enum?e.enum:[],u=me(e,f),p=f.map((b,I)=>{if(e.type==="number"||e.type==="integer"||e.type==="string"){const h=u?u[I]:String(b);return n.factory.createPropertyAssignment(n.factory.createIdentifier(s.toIdentifier(h,!0)),s.createLiteral(b))}return n.factory.createPropertyAssignment(n.factory.createIdentifier(s.toIdentifier(String(b),!0)),s.createLiteral(b))}),y=n.factory.createVariableStatement([s.modifier.export],n.factory.createVariableDeclarationList([n.factory.createVariableDeclaration(i,void 0,void 0,n.factory.createAsExpression(n.factory.createObjectLiteralExpression(p,!0),n.factory.createTypeReferenceNode("const")))],n.NodeFlags.Const)),l=s.createTypeAliasDeclaration({modifiers:[s.modifier.export],name:i,type:n.factory.createIndexedAccessTypeNode(n.factory.createParenthesizedType(n.factory.createTypeQueryNode(n.factory.createIdentifier(i))),n.factory.createTypeOperatorNode(n.SyntaxKind.KeyOfKeyword,n.factory.createTypeQueryNode(n.factory.createIdentifier(i))))});r.enumAliases.push(y,l);const d=n.factory.createTypeReferenceNode(i,void 0);return r.enumRefs[o]={values:c,type:d},d}function G(e){const t=e.map(r=>{if(r===null)return s.keywordType.null;if(typeof r=="boolean")return r?n.factory.createLiteralTypeNode(n.factory.createToken(n.SyntaxKind.TrueKeyword)):n.factory.createLiteralTypeNode(n.factory.createToken(n.SyntaxKind.FalseKeyword));if(typeof r=="number")return n.factory.createLiteralTypeNode(n.factory.createNumericLiteral(r));if(typeof r=="string")return n.factory.createLiteralTypeNode(n.factory.createStringLiteral(r));throw new Error(`Unexpected ${String(r)} of type ${typeof r} in enum`)});return t.length>1?n.factory.createUnionTypeNode(t):t[0]}function be(e,t,r,a){var p,y;const o=_(e.opts);if(o==="union")return G(a);const c=T(t,e);let i=T((p=c.properties)==null?void 0:p[r],e);if(!i&&c.allOf)for(const l of c.allOf){const d=T(l,e);if((y=d.properties)!=null&&y[r]){i=T(d.properties[r],e);break}}if(!i||!K(i,r))return G(a);const f=o==="as-const"?Z(i,r,e):J(i,r,e),u=a.map(l=>{const d=n.factory.createQualifiedName(f.typeName,n.factory.createIdentifier(s.toIdentifier(l,!0)));return o==="as-const"?n.factory.createTypeQueryNode(d):n.factory.createTypeReferenceNode(d)});return u.length===1?u[0]:n.factory.createUnionTypeNode(u)}function M(e,t,r,a){if(r){if(r.propertyName===void 0)throw new Error("Discriminators require a propertyName");const o=new Set(Object.values(r.mapping||{}).map(k));return n.factory.createUnionTypeNode([...Object.entries(r.mapping||{}).map(([c,i])=>[c,{$ref:i}]),...e.filter(c=>{if(!v(c))throw new Error("Discriminators require references, not inline schemas");return!o.has(k(c.$ref))}).map(c=>{var y,l;const i=k(c.$ref),u=(y=T(c,t).properties)==null?void 0:y[r.propertyName];return[(u&&"enum"in u?(l=u==null?void 0:u.enum)==null?void 0:l[0]:"")||i,c]})].map(([c,i])=>n.factory.createIntersectionTypeNode([n.factory.createTypeLiteralNode([s.createPropertySignature({name:r.propertyName,type:be(t,i,r.propertyName,[c])})]),w(t,i,void 0,a)])))}else return n.factory.createUnionTypeNode(N.uniq(e.map(o=>w(t,o,void 0,a))))}function U(e){return e.opts.useUnknown?s.keywordType.unknown:s.keywordType.any}function ue(e,t,r,a,o){const f=Object.keys(e).filter(u=>{const p=e[u],{readOnly:y,writeOnly:l}=ge(p,t,!1);switch(o){case"readOnly":return y||!l;case"writeOnly":return l||!y;default:return!y&&!l}}).map(u=>{const p=e[u],y=r&&r.includes(u);let l=w(t,p,u,o);!y&&t.opts.unionUndefined&&(l=n.factory.createUnionTypeNode([l,s.keywordType.undefined]));const d=s.createPropertySignature({questionToken:!y,name:u,type:l});if(typeof p!="boolean"&&"description"in p&&p.description){const O=p.description.replace("*/","*\\/");n.addSyntheticLeadingComment(d,n.SyntaxKind.MultiLineCommentTrivia,`* ${O} `,!0)}return d});if(a){const u=a===!0?U(t):w(t,a,void 0,o);f.push(s.createIndexSignature(u))}return n.factory.createTypeLiteralNode(f)}function w(e,t,r,a){const o=Te(e,t,r,a);return ze(t)?n.factory.createUnionTypeNode([o,s.keywordType.null]):o}function Te(e,t,r,a){var o,c;if(t===void 0)return U(e);if(v(t))return W(t,e,a);if(t===!0)return U(e);if(t===!1)return s.keywordType.never;if(t.oneOf){const i=F({},t);return delete i.oneOf,M(t.oneOf.map(f=>N.mergeWith({},i,f,(u,p)=>{if(N.isArray(u))return u.concat(p)})),e,t.discriminator,a)}if(t.anyOf)return M(t.anyOf,e,void 0,a);if((o=t.discriminator)!=null&&o.mapping){const i=t.discriminator.mapping;return M(Object.values(i).map(f=>({$ref:f})),e,void 0,a)}if(t.allOf){const i=[];for(const f of t.allOf)if(v(f)&&e.discriminatingSchemas.has(T(f,e))){const p=T(f,e).discriminator,y=Object.entries((c=p.mapping)!=null?c:{}).filter(([,l])=>T({$ref:l},e)===t).map(([l])=>l);y.length>0&&i.push(n.factory.createTypeLiteralNode([s.createPropertySignature({name:p.propertyName,type:be(e,f,p.propertyName,y)})])),i.push(W(f,e,a,!0))}else i.push(w(e,F({required:t.required},f),void 0,a));return(t.properties||t.additionalProperties)&&i.push(ue(t.properties||{},e,t.required,t.additionalProperties,a)),n.factory.createIntersectionTypeNode(i)}if(Array.isArray(t.type))return n.factory.createUnionTypeNode(t.type.map(i=>{const f=ae(F({},t),{type:i});return"items"in f&&i!=="array"&&delete f.items,"properties"in f&&i!=="object"&&delete f.properties,Te(e,f,r,a)}));if("items"in t){const i=t.items;if(i&&!v(i)&&i.enum){const f=_(e.opts);let u;return f!=="union"&&K(i,r)?u=f==="as-const"?Z(i,r,e):J(i,r,e):u=s.createEnumTypeNode(i.enum),n.factory.createArrayTypeNode(u)}return n.factory.createArrayTypeNode(w(e,t.items,void 0,a))}if("prefixItems"in t&&Array.isArray(t.prefixItems))return n.factory.createTupleTypeNode(t.prefixItems.map(i=>w(e,i)));if(t.properties||t.additionalProperties)return ue(t.properties||{},e,t.required,t.additionalProperties,a);if(t.enum){const i=_(e.opts);return i!=="union"&&K(t,r)?i==="as-const"?Z(t,r,e):J(t,r,e):s.createEnumTypeNode(t.enum)}if(t.format=="binary")return n.factory.createTypeReferenceNode("Blob",[]);if("const"in t&&t.const)return G([t.const]);if(t.type!==void 0){if(t.type===null)return s.keywordType.null;if(We(t.type))return s.keywordType[t.type]}return U(e)}function We(e){return e in s.keywordType}function H(e,t){if(e.content){const r=Q(e.content);return w(t,r)}return w(t,v(e)?e:e.schema)}function Je(e,t){if(!t)return"text";const r=Object.values(t).map(o=>T(o,e));return r.some(o=>{var c;return Object.keys((c=o.content)!=null?c:{}).length>0})?r.some(o=>{var i;return Object.keys((i=o.content)!=null?i:{}).some(Y)})?"json":r.some(o=>{var c;return Object.keys((c=o.content)!=null?c:[]).some(i=>i.startsWith("text/"))})?"text":"blob":"text"}function Ze(e,t,r){return n.factory.createUnionTypeNode(Object.entries(e).map(([a,o])=>{const c=a==="default"?s.keywordType.number:n.factory.createLiteralTypeNode(n.factory.createNumericLiteral(a)),i=[s.createPropertySignature({name:"status",type:c})],f=Ge(o,t,r);return f!==s.keywordType.void&&i.push(s.createPropertySignature({name:"data",type:f})),n.factory.createTypeLiteralNode(i)}))}function Ge(e,t,r){const a=T(e,t);return!a||!a.content?s.keywordType.void:w(t,Q(a.content),void 0,r)}const Ye=["positional","object"];function Xe(e,t,r,a,o,c){var ne;const{operationId:i,requestBody:f,responses:u,summary:p,description:y,tags:l}=r;if(Le(o,l))return[];const{primaryName:d,deprecatedLegacyName:O}=ke(e,t,i),b=se(o,a.parameters);for(const m of se(o,r.parameters))b.find(E=>E.name===m.name&&E.in===m.in)||b.push(m);const I=new Map;N.sortBy(b,"name.length").forEach(m=>{const S=s.toIdentifier(m.name),L=[...I.values()].includes(S)?N.upperFirst(m.in):"";I.set(m,S+L)});const h=m=>{const S=I.get(m);if(!S)throw new Error(`Can't find parameter: ${m.name}`);return S},P=[];let j,A;switch((ne=o.opts.argumentStyle)!=null?ne:"positional"){case"positional":const[m,S]=N.partition(b,"required"),E=m.map(g=>s.createParameter(h(T(g,o)),{type:H(g,o)}));if(P.push(...E),f){j=T(f,o);const g=Q(j.content),$=w(o,g,void 0,"writeOnly");A=s.toIdentifier($.name||fe(g)||"body"),P.push(s.createParameter(A,{type:$,questionToken:!j.required}))}S.length&&P.push(s.createParameter(s.createObjectBinding(S.map(g=>T(g,o)).map(g=>({name:h(g)}))),{initializer:n.factory.createObjectLiteralExpression(),type:n.factory.createTypeLiteralNode(S.map(g=>s.createPropertySignature({name:h(T(g,o)),questionToken:!0,type:H(g,o)})))}));break;case"object":const L=b.map(g=>s.createPropertySignature({name:h(T(g,o)),questionToken:!g.required,type:H(g,o)}));if(f){j=T(f,o);const g=Q(j.content),$=w(o,g,void 0,"writeOnly");A=s.toIdentifier($.name||fe(g)||"body"),L.push(s.createPropertySignature({name:A,questionToken:!j.required,type:$}))}if(L.length===0)break;P.push(s.createParameter(s.createObjectBinding([...b.map(g=>T(g,o)).map(g=>({name:h(g)})),...A?[{name:A}]:[]]),{type:n.factory.createTypeLiteralNode(L)}));break}P.push(s.createParameter("opts",{type:n.factory.createTypeReferenceNode("Oazapfts.RequestOpts",void 0),questionToken:!0}));const z=Je(o,u),V=b.filter(m=>m.in==="query"),X=b.filter(m=>m.in==="header");let x;if(V.length){const m=N.groupBy(V,qe);x=ce("query",Object.entries(m).map(([S,E])=>{const L=c.querySerializerArgs.call([s.createObjectLiteral(E.map(g=>[g.name,h(g)]))],{method:e,path:t,operation:r,pathItem:a,formatter:S,parameters:E,query:V},o);return ce(S,L)}))}const we=De(t,x),R=[n.factory.createSpreadAssignment(n.factory.createIdentifier("opts"))];e!=="GET"&&R.push(n.factory.createPropertyAssignment("method",n.factory.createStringLiteral(e))),A&&R.push(s.createPropertyAssignment("body",n.factory.createIdentifier(A))),X.length&&R.push(n.factory.createPropertyAssignment("headers",q("mergeHeaders",[n.factory.createPropertyAccessChain(n.factory.createIdentifier("opts"),n.factory.createToken(n.SyntaxKind.QuestionDotToken),"headers"),n.factory.createObjectLiteralExpression([...X.map(m=>s.createPropertyAssignment(m.name,n.factory.createIdentifier(h(m))))],!0)])));const ee=[we];if(R.length){const m=Ue(j),S=n.factory.createObjectLiteralExpression(R,!0);ee.push(m?q(m,[S]):S)}const te=s.block(n.factory.createReturnStatement(Be(q({json:"fetchJson",text:"fetchText",blob:"fetchBlob"}[z],ee,z==="json"||z==="blob"?[Ze(u,o,"readOnly")||n.SyntaxKind.AnyKeyword]:void 0),o))),re=[s.addComment(s.createFunctionDeclaration(d,{modifiers:[s.modifier.export]},P,te),p||y)];if(O&&!o.opts.futureStripLegacyMethods){const m=[`@deprecated Use {@link ${d}} instead.`,p||y].filter(Boolean).join(`
2
+ `);re.push(s.addComment(s.createFunctionDeclaration(O,{modifiers:[s.modifier.export]},P,te),m))}return re}function xe(e){if(typeof e=="string")return n.factory.createImportDeclaration(void 0,void 0,n.factory.createStringLiteral(e));if(e.length===2&&typeof e[0]=="object"&&"namespace"in e[0]){const[{namespace:t},{from:r}]=e;return n.factory.createImportDeclaration(void 0,n.factory.createImportClause(!1,void 0,n.factory.createNamespaceImport(n.factory.createIdentifier(t))),n.factory.createStringLiteral(r))}if(e.length===2&&typeof e[0]=="string"&&typeof e[1]=="object"&&"from"in e[1]){const[t,{from:r}]=e;return n.factory.createImportDeclaration(void 0,n.factory.createImportClause(!1,n.factory.createIdentifier(t),void 0),n.factory.createStringLiteral(r))}if(e.length===2&&Array.isArray(e[0])){const[t,{from:r}]=e;return n.factory.createImportDeclaration(void 0,n.factory.createImportClause(!1,void 0,n.factory.createNamedImports(t.map(pe))),n.factory.createStringLiteral(r))}if(e.length===3){const[t,r,{from:a}]=e;return n.factory.createImportDeclaration(void 0,n.factory.createImportClause(!1,n.factory.createIdentifier(t),n.factory.createNamedImports(r.map(pe))),n.factory.createStringLiteral(a))}throw new Error(`Invalid import format: ${JSON.stringify(e)}`)}function pe(e){return typeof e=="string"?n.factory.createImportSpecifier(!1,void 0,n.factory.createIdentifier(e)):n.factory.createImportSpecifier(!1,e.as?n.factory.createIdentifier(e.name):void 0,n.factory.createIdentifier(e.as||e.name))}function et(e){const t=[];return t.push(n.factory.createPropertyAssignment("headers",e.headers?n.factory.createObjectLiteralExpression(Object.entries(e.headers).filter(([,r])=>r!==void 0).map(([r,a])=>n.factory.createPropertyAssignment(n.factory.createStringLiteral(r),tt(a)))):n.factory.createObjectLiteralExpression([]))),e.baseUrl!==void 0&&t.push(n.factory.createPropertyAssignment("baseUrl",n.factory.createStringLiteral(e.baseUrl))),e.fetch&&t.push(n.factory.createPropertyAssignment("fetch",e.fetch)),e.FormData&&t.push(n.factory.createPropertyAssignment("FormData",e.FormData)),n.factory.createVariableStatement([n.factory.createModifier(n.SyntaxKind.ExportKeyword)],n.factory.createVariableDeclarationList([n.factory.createVariableDeclaration("defaults",void 0,n.factory.createTypeReferenceNode(n.factory.createQualifiedName(n.factory.createIdentifier("Oazapfts"),"Defaults"),[n.factory.createTypeReferenceNode(n.factory.createQualifiedName(n.factory.createIdentifier("Oazapfts"),"CustomHeaders"))]),n.factory.createObjectLiteralExpression(t,!0))],n.NodeFlags.Const))}function tt(e){return e===null?n.factory.createNull():typeof e=="boolean"?e?n.factory.createTrue():n.factory.createFalse():typeof e=="number"?n.factory.createNumericLiteral(e):n.factory.createStringLiteral(String(e))}function rt(e,t){return C(this,null,function*(){var o;je(e),yield t.prepare.promise(e);const r=[];for(const[c,i]of Object.entries(e.spec.paths||{}))if(i)for(const[f,u]of Object.entries(i)){if(!u)continue;const p=f.toUpperCase();if(!Me(p))continue;let y=Xe(p,c,u,i,e,t);y=yield t.generateMethod.promise(y,{method:p,path:c,operation:u,pathItem:i},e),r.push(...y)}if(e.opts.allSchemas&&((o=e.spec.components)!=null&&o.schemas))for(const[c,i]of Object.entries(e.spec.components.schemas))W({$ref:`#/components/schemas/${c}`},e,i);let a=nt(e,r);return a=yield t.astGenerated.promise(a,e),a})}function nt(e,t){let r=[...e.imports.map(xe),et(e.defaults),...e.init,s.createServersStatement(e.servers),...e.aliases,...He(t),...e.enumAliases];if(e.banner&&r.length>0){const a=`*
3
+ * ${e.banner.split(`
4
+ `).join(`
5
+ * `)}
6
+ `;r[0]=n.addSyntheticLeadingComment(r[0],n.SyntaxKind.MultiLineCommentTrivia,a,!0)}return n.factory.createSourceFile(r,n.factory.createToken(n.SyntaxKind.EndOfFileToken),n.NodeFlags.None)}function ot(e,t){return e.some(r=>{const a=r.schema&&T(r.schema,t);return!!a&&typeof a=="object"&&a.type==="boolean"})}function it(){return B.UNSTABLE_createPlugin(e=>{e.querySerializerArgs.tap("numericBooleanQueryParameters",(t,r,a)=>!a.opts.numericBooleanQueryParameters||!ot(r.query,a)?t:[...t,n.factory.createPropertyAccessExpression(n.factory.createIdentifier("QS"),"numericBooleanReserved")])},{precedence:B.UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE.LAZY})}function at(e){return[it()]}function st(r){return C(this,arguments,function*(e,t={}){const a=yield Ne(e),o=s.createContext(a,t);o.banner=[a.info.title,a.info.version,o.banner].filter(Boolean).join(`
7
+ `);const c=yield Oe(o,t.UNSTABLE_plugins);return Se(c)})}function Oe(r){return C(this,arguments,function*(e,t=[]){const a=B.UNSTABLE_createHooks();return yield B.UNSTABLE_applyPlugins(a,[...at(),...t]),rt(e,a)})}function Se(e){return s.printFile(e)}function Ne(e){return C(this,null,function*(){typeof e=="string"&&e.startsWith("http")&&(e=yield(yield fetch(e)).json());const t=yield Pe.bundle(e);if(!ct(t))throw new Error(`Only OpenAPI v3 is supported
8
+ You may convert you spec with https://github.com/swagger-api/swagger-converter or swagger2openapi package`);return t})}function ct(e){return"openapi"in e&&e.openapi.startsWith("3")}exports.argumentStyleOptions=Ye;exports.enumStyleOptions=Qe;exports.generateAst=Oe;exports.generateSource=st;exports.parseSpec=Ne;exports.printAst=Se;
9
+ //# sourceMappingURL=index-ClBTKGtv.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-ClBTKGtv.cjs","sources":["../src/helpers/getRefBasename.ts","../src/helpers/isReference.ts","../src/helpers/refPathToPropertyPath.ts","../src/helpers/resolve.ts","../src/helpers/preprocessComponents.ts","../src/helpers/skip.ts","../src/helpers/getOperationName.ts","../src/helpers/mimeTypes.ts","../src/helpers/getFormatter.ts","../src/helpers/callQsFunction.ts","../src/helpers/createUrlExpression.ts","../src/helpers/callOazapftsFunction.ts","../src/helpers/getBodyFormatter.ts","../src/helpers/wrapResult.ts","../src/helpers/getReferenceName.ts","../src/helpers/findAvailableRef.ts","../src/helpers/getRefName.ts","../src/helpers/isNamedEnumSchema.ts","../src/helpers/getEnumStyle.ts","../src/helpers/getUniqueAlias.ts","../src/helpers/getEnumUniqueAlias.ts","../src/helpers/getCustomNames.ts","../src/helpers/checkSchemaOnlyMode.ts","../src/helpers/isNullable.ts","../src/helpers/isHttpMethod.ts","../src/helpers/dedupeMethodNames.ts","../src/generate/getSchemaFromContent.ts","../src/generate/getRefAlias.ts","../src/generate/getTrueEnum.ts","../src/generate/getAsConstEnum.ts","../src/generate/getTypeFromEnum.ts","../src/generate/getDiscriminatorType.ts","../src/generate/getUnionType.ts","../src/helpers/emptySchemaType.ts","../src/generate/getTypeFromProperties.ts","../src/generate/getTypeForSchema.ts","../src/generate/getTypeFromParameter.ts","../src/generate/getResponseType.ts","../src/generate/getTypeFromResponses.ts","../src/generate/generateClientMethod.ts","../src/generate/generateImports.ts","../src/generate/createDefaultsStatement.ts","../src/generate/generateApi.ts","../src/internalPlugins/numericBooleanQueryParameters.ts","../src/internalPlugins/index.ts","../src/index.ts"],"sourcesContent":["/**\n * Get the last path component of the given ref.\n */\nexport function getRefBasename(ref: string) {\n return ref.replace(/.+\\//, \"\");\n}\n","import { ReferenceObject } from \"./openApi3-x\";\n\nexport function isReference(obj: unknown): obj is ReferenceObject {\n return typeof obj === \"object\" && obj !== null && \"$ref\" in obj;\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","import _ from \"lodash\";\nimport { OazapftsContext } from \"../context\";\nimport { ReferenceObject } from \"./openApi3-x\";\nimport { isReference } from \"./isReference\";\nimport { refPathToPropertyPath } from \"./refPathToPropertyPath\";\n\nexport function resolve<T>(\n obj: T | ReferenceObject,\n { spec }: OazapftsContext,\n) {\n if (!isReference(obj)) return obj;\n const ref = obj.$ref;\n const path = refPathToPropertyPath(ref);\n const resolved = _.get(spec, path);\n if (typeof resolved === \"undefined\") {\n throw new Error(`Can't find ${path}`);\n }\n return resolved as T;\n}\n\nexport function resolveArray<T>(\n ctx: OazapftsContext,\n array?: Array<T | ReferenceObject>,\n) {\n return array ? array.map((el) => resolve(el, ctx)) : [];\n}\n","import { OazapftsContext } from \"../context\";\nimport * as OpenApi from \"./openApi3-x\";\nimport { getRefBasename } from \"./getRefBasename\";\nimport { isReference } from \"./isReference\";\nimport { resolve } from \"./resolve\";\n\n/**\n * In order to support discriminated unions.\n *\n * @see https://github.com/oazapfts/oazapfts/pull/473\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 */\nexport function preprocessComponents(ctx: OazapftsContext) {\n if (!ctx.spec.components?.schemas) {\n return;\n }\n\n const prefix = \"#/components/schemas/\";\n const schemas = ctx.spec.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 if (schema.discriminator && !schema.oneOf && !schema.anyOf) {\n ctx.discriminatingSchemas.add(schema);\n }\n }\n\n const isExplicit = (\n discriminator: OpenApi.DiscriminatorObject,\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 !ctx.discriminatingSchemas.has(\n resolve<OpenApi.SchemaObject>(childSchema, ctx),\n )\n ) {\n continue;\n }\n\n const discriminatingSchema = schemas[\n getRefBasename(childSchema.$ref)\n ] as OpenApi.UNSTABLE_DiscriminatingSchemaObject;\n if (isReference(discriminatingSchema)) {\n throw new Error(\"Unexpected nested reference\");\n }\n\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","import { OazapftsContext } from \"../context\";\n\nexport function skip(ctx: OazapftsContext, tags?: Readonly<string[]>) {\n const excluded = tags && tags.some((t) => ctx.opts?.exclude?.includes(t));\n if (excluded) {\n return true;\n }\n if (ctx.opts?.include) {\n const included = tags && tags.some((t) => ctx.opts.include?.includes(t));\n return !included;\n }\n return false;\n}\n","import _ from \"lodash\";\nimport { toIdentifier } from \"./toIdentifier\";\nimport { isValidIdentifier } from \"../generate/tscodegen\";\n\n/**\n * Result of getOperationNames containing the primary method name and\n * optionally a deprecated legacy name for backward compatibility.\n */\nexport type OperationNames = {\n primaryName: string;\n /**\n * When set, indicates the legacy fallback name that older versions of\n * oazapfts would have generated. A deprecated alias should be emitted.\n */\n deprecatedLegacyName?: string;\n};\n\n/**\n * Create method name(s) for a given operation, either from its operationId or\n * the HTTP verb and path. Returns the primary name and optionally a deprecated\n * legacy name for backward compatibility.\n */\nexport function getOperationNames(\n verb: string,\n path: string,\n operationId?: string,\n): OperationNames {\n const fallbackName = getFallbackName(verb, path);\n const legacyId = getLegacyOperationIdentifier(operationId);\n const newId = getOperationIdentifier(operationId);\n\n // If new normalization produces a valid identifier but legacy did not,\n // we need to emit a deprecated alias for backward compatibility.\n if (newId && !legacyId) {\n return {\n primaryName: newId,\n deprecatedLegacyName: fallbackName,\n };\n }\n\n // Either both agree on the id, or both fall back\n return {\n primaryName: newId || fallbackName,\n };\n}\n\n/**\n * Create a method name for a given operation, either from its operationId or\n * the HTTP verb and path.\n * @deprecated Use getOperationNames instead for backward compatibility support.\n */\nexport function getOperationName(\n verb: string,\n path: string,\n operationId?: string,\n) {\n return getOperationNames(verb, path, operationId).primaryName;\n}\n\n/**\n * Compute the fallback name from verb + path (used when operationId is missing\n * or cannot be normalized to a valid identifier).\n */\nfunction getFallbackName(verb: string, path: string) {\n path = path.replace(/\\{(.+?)\\}/, \"by $1\").replace(/\\{(.+?)\\}/, \"and $1\");\n return toIdentifier(`${verb} ${path}`);\n}\n\n/**\n * Normalize an operationId into a valid camelCase identifier.\n * - Replaces non-word characters (except whitespace) with spaces\n * - Strips invalid leading characters (digits, etc.)\n * - Returns undefined if the result is empty or invalid\n */\nfunction getOperationIdentifier(id?: string): string | undefined {\n if (!id) return;\n\n // Replace any non-word, non-whitespace character with a space\n // This handles dots, colons, backslashes, dashes, etc.\n const normalized = id.replace(/[^\\w\\s]/g, \" \");\n\n let camelCased = _.camelCase(normalized);\n if (!camelCased) return;\n\n // Strip invalid leading characters (digits, etc.) until we have a valid start\n camelCased = camelCased.replace(/^[^a-zA-Z_$]+/, \"\");\n\n // Ensure it starts lowercase (function-style)\n camelCased = _.lowerFirst(camelCased);\n\n if (!camelCased) return;\n if (isValidIdentifier(camelCased)) return camelCased;\n}\n\n/**\n * Legacy operationId handling: only accepts IDs with word characters and\n * whitespace. This matches the old behavior before relaxed operationId support.\n */\nfunction getLegacyOperationIdentifier(id?: string): string | undefined {\n if (!id) return;\n // Old behavior: reject any special characters\n if (id.match(/[^\\w\\s]/)) return;\n const camelCased = _.camelCase(id);\n if (isValidIdentifier(camelCased)) return camelCased;\n}\n","export type ContentType = \"json\" | \"form\" | \"multipart\";\n\nexport const 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","import { ParameterObject } from \"./openApi3-x\";\nimport { isJsonMimeType } from \"./mimeTypes\";\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}: ParameterObject) {\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","import ts from \"typescript\";\nimport { createCall } from \"../generate/tscodegen\";\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 createCall(\n ts.factory.createPropertyAccessExpression(\n ts.factory.createIdentifier(\"QS\"),\n name,\n ),\n { args },\n );\n}\n","import ts from \"typescript\";\nimport { toIdentifier } from \"./toIdentifier\";\nimport { createCall, createTemplateString } from \"../generate/tscodegen\";\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: createCall(\n ts.factory.createIdentifier(\"encodeURIComponent\"),\n {\n args: [ts.factory.createIdentifier(expression)],\n },\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 createTemplateString(head, spans);\n}\n","import ts from \"typescript\";\nimport { createCall } from \"../generate/tscodegen\";\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 createCall(\n ts.factory.createPropertyAccessExpression(\n ts.factory.createIdentifier(\"oazapfts\"),\n name,\n ),\n { args, typeArgs },\n );\n}\n","import { RequestBodyObject } from \"./openApi3-x\";\nimport { contentTypes, isJsonMimeType } from \"./mimeTypes\";\n\nexport function getBodyFormatter(body?: RequestBodyObject) {\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","import ts from \"typescript\";\nimport { OazapftsContext } from \"../context\";\nimport { callOazapftsFunction } from \"./callOazapftsFunction\";\n\nexport function wrapResult(ex: ts.Expression, ctx: OazapftsContext) {\n return ctx.opts?.optimistic ? callOazapftsFunction(\"ok\", [ex]) : ex;\n}\n","import { getRefBasename } from \"./getRefBasename\";\nimport { isReference } from \"./isReference\";\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","import { OazapftsContext } from \"../context\";\nimport { resolve } from \"./resolve\";\n\nexport function findAvailableRef(ref: string, ctx: OazapftsContext) {\n const available = (ref: string) => {\n try {\n resolve({ $ref: ref }, ctx);\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","import { getRefBasename } from \"./getRefBasename\";\nimport { refPathToPropertyPath } from \"./refPathToPropertyPath\";\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 */\nexport function getRefName(ref: string) {\n const base = getRefBasename(ref);\n if (/^\\d+/.test(base)) {\n return refPathToPropertyPath(ref).join(\"_\");\n }\n return base;\n}\n","import { SchemaObject } from \"./openApi3-x\";\n\n/**\n * Check if a schema is suitable for generating a named enum declaration\n * (has enum values, has a name, and is not a boolean type).\n */\nexport function isNamedEnumSchema(\n schema: SchemaObject,\n name?: string,\n): name is string {\n return Boolean(\n typeof schema !== \"boolean\" &&\n schema.enum &&\n name &&\n schema.type !== \"boolean\",\n );\n}\n","export const enumStyleOptions = [\"union\", \"enum\", \"as-const\"] as const;\nexport type EnumStyle = (typeof enumStyleOptions)[number];\n\n/**\n * Resolve the effective enum style from options.\n * `enumStyle` takes precedence over the deprecated `useEnumType`.\n */\nexport function getEnumStyle(opts: {\n enumStyle?: EnumStyle;\n useEnumType?: boolean;\n}): EnumStyle {\n if (opts.enumStyle !== undefined) return opts.enumStyle;\n if (opts.useEnumType) return \"enum\";\n return \"union\";\n}\n","import { OazapftsContext } from \"../context\";\n\nexport function getUniqueAlias(name: string, ctx: OazapftsContext) {\n let used = ctx.typeAliases[name] || 0;\n if (used) {\n ctx.typeAliases[name] = ++used;\n name += used;\n }\n\n ctx.typeAliases[name] = 1;\n return name;\n}\n","import { OazapftsContext } from \"../context\";\nimport { getUniqueAlias } from \"./getUniqueAlias\";\n\n/**\n * Return a unique alias for an enum declaration.\n * Reuses the existing name when the same enum values have already been registered.\n */\nexport function getEnumUniqueAlias(\n name: string,\n values: string,\n ctx: OazapftsContext,\n) {\n if (ctx.enumRefs[name] && ctx.enumRefs[name].values === values) {\n return name;\n }\n\n return getUniqueAlias(name, ctx);\n}\n","import { SchemaObject } from \"./openApi3-x\";\n\n/**\n * Extract custom member names from `x-enumNames` or `x-enum-varnames` extensions.\n * Returns `undefined` when neither extension is present.\n */\nexport function getCustomNames(\n schema: Exclude<SchemaObject, boolean>,\n values: unknown[],\n) {\n const names =\n \"x-enumNames\" in schema\n ? schema[\"x-enumNames\"]\n : \"x-enum-varnames\" in schema\n ? schema[\"x-enum-varnames\"]\n : undefined;\n\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 if (names.some((name) => typeof name !== \"string\")) {\n throw new Error(\"enum names must be an array of strings\");\n }\n return names as string[];\n }\n\n return undefined;\n}\n","import { OazapftsContext, OnlyModes } from \"../context\";\nimport { ReferenceObject, SchemaObject } from \"./openApi3-x\";\nimport { isReference } from \"./isReference\";\nimport { resolve } from \"./resolve\";\n\nexport function /**\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 */\ncheckSchemaOnlyMode(\n schema: SchemaObject | ReferenceObject,\n ctx: OazapftsContext,\n resolveRefs = true,\n): OnlyModes {\n if (ctx.opts.mergeReadWriteOnly) {\n return { readOnly: false, writeOnly: false };\n }\n\n const check = (\n schema: SchemaObject | ReferenceObject,\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 = ctx.refsOnlyMode.get(schema.$ref);\n if (cached) return cached;\n\n history.add(schema.$ref);\n const ret = check(resolve(schema, ctx), history);\n history.delete(schema.$ref);\n\n // cache the result\n ctx.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: (ReferenceObject | 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","import { ReferenceObject, SchemaObject } from \"./openApi3-x\";\nimport { isReference } from \"./isReference\";\n\nexport function isNullable(schema?: SchemaObject | ReferenceObject) {\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","const HttpMethods = [\n \"GET\",\n \"PUT\",\n \"POST\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n \"PATCH\",\n \"TRACE\",\n] as const;\nexport type HttpMethod = (typeof HttpMethods)[number];\n\nexport function isHttpMethod(method: string): method is HttpMethod {\n return HttpMethods.includes(method as HttpMethod);\n}\n","import ts from \"typescript\";\nimport * as cg from \"../generate/tscodegen\";\n\n/**\n * According to OAS, the operationId must be unique. However, it is quite common\n * that this is not the case. So we'll gracefully handle this by appending a\n * counter to the method name.\n */\nexport function dedupeMethodNames(methods: ts.FunctionDeclaration[]) {\n const methodNames: Record<string, number> = {};\n\n return methods.map((method) => {\n const name = method.name?.text;\n if (name) {\n if (methodNames[name]) {\n return cg.updateFunctionDeclaration(method, {\n name: ts.factory.createIdentifier(`${name}${++methodNames[name]}`),\n });\n }\n\n methodNames[name] = 1;\n }\n\n return method;\n });\n}\n","import * as OpenApi from \"../helpers/openApi3-x\";\nimport { isMimeType } from \"../helpers\";\n\nexport function getSchemaFromContent(\n content: Record<string, OpenApi.MediaTypeObject>,\n): OpenApi.SchemaObject | OpenApi.ReferenceObject {\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","import ts from \"typescript\";\nimport _ from \"lodash\";\nimport { OazapftsContext, OnlyMode } from \"../context\";\nimport * as cg from \"./tscodegen\";\nimport * as OpenApi from \"../helpers/openApi3-x\";\nimport * as h from \"../helpers\";\nimport { getTypeFromSchema } from \"./getTypeForSchema\";\n\n/**\n * Create a type alias for the schema referenced by the given ReferenceObject\n */\nexport function getRefAlias(\n obj: OpenApi.ReferenceObject,\n ctx: OazapftsContext,\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 ? h.findAvailableRef(obj.$ref + \"Base\", ctx)\n : obj.$ref;\n\n if (!ctx.refs[$ref]) {\n let schema = h.resolve<OpenApi.SchemaObject>(obj, ctx);\n if (typeof schema !== \"boolean\" && ignoreDiscriminator) {\n schema = _.cloneDeep(schema);\n delete schema.discriminator;\n }\n const name =\n (typeof schema !== \"boolean\" && schema.title) || h.getRefName($ref);\n const identifier = h.toIdentifier(name, true);\n\n // When this is a named enum (enum or as-const) we can reference it directly,\n // no need to create a type alias\n if (\n h.getEnumStyle(ctx.opts) !== \"union\" &&\n h.isNamedEnumSchema(schema, name)\n ) {\n return getTypeFromSchema(ctx, schema, name);\n }\n\n const alias = h.getUniqueAlias(identifier, ctx);\n\n ctx.refs[$ref] = {\n base: ts.factory.createTypeReferenceNode(alias, undefined),\n readOnly: undefined,\n writeOnly: undefined,\n };\n\n const type = getTypeFromSchema(ctx, schema, undefined);\n ctx.aliases.push(\n cg.createTypeAliasDeclaration({\n modifiers: [cg.modifier.export],\n name: alias,\n type,\n }),\n );\n\n const { readOnly, writeOnly } = h.checkSchemaOnlyMode(schema, ctx);\n\n if (readOnly) {\n const readOnlyAlias = h.getUniqueAlias(\n h.toIdentifier(name, true, \"readOnly\"),\n ctx,\n );\n ctx.refs[$ref][\"readOnly\"] = ts.factory.createTypeReferenceNode(\n readOnlyAlias,\n undefined,\n );\n\n const readOnlyType = getTypeFromSchema(ctx, schema, name, \"readOnly\");\n ctx.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 = h.getUniqueAlias(\n h.toIdentifier(name, true, \"writeOnly\"),\n ctx,\n );\n ctx.refs[$ref][\"writeOnly\"] = ts.factory.createTypeReferenceNode(\n writeOnlyAlias,\n undefined,\n );\n const writeOnlyType = getTypeFromSchema(ctx, schema, name, \"writeOnly\");\n ctx.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 ctx.refs[$ref][onlyMode || \"base\"] ?? ctx.refs[$ref].base;\n}\n","import ts from \"typescript\";\nimport _ from \"lodash\";\nimport { OazapftsContext } from \"../context\";\nimport { SchemaObject } from \"../helpers/openApi3-x\";\nimport * as cg from \"./tscodegen\";\nimport * as h from \"../helpers\";\nimport { getEnumUniqueAlias } from \"../helpers/getEnumUniqueAlias\";\nimport { getCustomNames } from \"../helpers/getCustomNames\";\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 */\nexport function getTrueEnum(\n schema: SchemaObject,\n propName: string,\n ctx: OazapftsContext,\n) {\n if (typeof schema === \"boolean\") {\n // this should never be thrown, since `getTrueEnum` calls are\n // behind an `isNamedEnumSchema` 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 = (schema.enum ?? []).join(\"_\");\n\n const name = getEnumUniqueAlias(proposedName, stringEnumValue, ctx);\n\n if (ctx.enumRefs[proposedName] && proposedName === name) {\n return ctx.enumRefs[proposedName].type;\n }\n\n const values = schema.enum ? schema.enum : [];\n\n const names = getCustomNames(schema, values);\n\n const members = values.map((s, index) => {\n if (\n schema.type === \"number\" ||\n schema.type === \"integer\" ||\n schema.type === \"string\"\n ) {\n const name = names ? names[index] : String(s);\n return ts.factory.createEnumMember(\n ts.factory.createIdentifier(h.toIdentifier(name, true)),\n cg.createLiteral(s),\n );\n }\n return ts.factory.createEnumMember(\n ts.factory.createIdentifier(h.toIdentifier(String(s), true)),\n cg.createLiteral(s),\n );\n });\n ctx.enumAliases.push(\n ts.factory.createEnumDeclaration([cg.modifier.export], name, members),\n );\n\n const type = ts.factory.createTypeReferenceNode(name, undefined);\n\n ctx.enumRefs[proposedName] = {\n values: stringEnumValue,\n type: ts.factory.createTypeReferenceNode(name, undefined),\n };\n\n return type;\n}\n","import ts from \"typescript\";\nimport _ from \"lodash\";\nimport { OazapftsContext } from \"../context\";\nimport { SchemaObject } from \"../helpers/openApi3-x\";\nimport * as cg from \"./tscodegen\";\nimport * as h from \"../helpers\";\nimport { getEnumUniqueAlias } from \"../helpers/getEnumUniqueAlias\";\nimport { getCustomNames } from \"../helpers/getCustomNames\";\n\n/**\n * Creates an `as const` object declaration with a companion type alias.\n *\n * Generates:\n * ```\n * export const Name = { A: 'a', B: 'b' } as const;\n * export type Name = (typeof Name)[keyof typeof Name];\n * ```\n */\nexport function getAsConstEnum(\n schema: SchemaObject,\n propName: string,\n ctx: OazapftsContext,\n) {\n if (typeof schema === \"boolean\") {\n throw new Error(\n \"cannot get enum from boolean schema. schema must be an object\",\n );\n }\n\n const baseName = schema.title || _.upperFirst(propName);\n const proposedName = baseName\n .split(/[^A-Za-z0-9$_]/g)\n .map((n) => _.upperFirst(n))\n .join(\"\");\n const stringEnumValue = (schema.enum ?? []).join(\"_\");\n\n const name = getEnumUniqueAlias(proposedName, stringEnumValue, ctx);\n\n if (ctx.enumRefs[proposedName] && proposedName === name) {\n return ctx.enumRefs[proposedName].type;\n }\n\n const values = schema.enum ? schema.enum : [];\n const names = getCustomNames(schema, values);\n\n const properties = values.map((s, index) => {\n if (\n schema.type === \"number\" ||\n schema.type === \"integer\" ||\n schema.type === \"string\"\n ) {\n const memberName = names ? names[index] : String(s);\n return ts.factory.createPropertyAssignment(\n ts.factory.createIdentifier(h.toIdentifier(memberName, true)),\n cg.createLiteral(s),\n );\n }\n return ts.factory.createPropertyAssignment(\n ts.factory.createIdentifier(h.toIdentifier(String(s), true)),\n cg.createLiteral(s),\n );\n });\n\n // export const Name = { ... } as const;\n const constStatement = ts.factory.createVariableStatement(\n [cg.modifier.export],\n ts.factory.createVariableDeclarationList(\n [\n ts.factory.createVariableDeclaration(\n name,\n undefined,\n undefined,\n ts.factory.createAsExpression(\n ts.factory.createObjectLiteralExpression(properties, true),\n ts.factory.createTypeReferenceNode(\"const\"),\n ),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n );\n\n // export type Name = (typeof Name)[keyof typeof Name];\n const typeStatement = cg.createTypeAliasDeclaration({\n modifiers: [cg.modifier.export],\n name,\n type: ts.factory.createIndexedAccessTypeNode(\n ts.factory.createParenthesizedType(\n ts.factory.createTypeQueryNode(ts.factory.createIdentifier(name)),\n ),\n ts.factory.createTypeOperatorNode(\n ts.SyntaxKind.KeyOfKeyword,\n ts.factory.createTypeQueryNode(ts.factory.createIdentifier(name)),\n ),\n ),\n });\n\n ctx.enumAliases.push(constStatement, typeStatement);\n\n const type = ts.factory.createTypeReferenceNode(name, undefined);\n\n ctx.enumRefs[proposedName] = {\n values: stringEnumValue,\n type,\n };\n\n return type;\n}\n","import ts from \"typescript\";\nimport { keywordType } from \"./tscodegen\";\n\n/**\n * Creates literal type (or union) from an array of values\n */\nexport function getTypeFromEnum(values: unknown[]) {\n const types = values.map((s) => {\n if (s === null) return keywordType.null;\n if (typeof s === \"boolean\")\n return s\n ? ts.factory.createLiteralTypeNode(\n ts.factory.createToken(ts.SyntaxKind.TrueKeyword),\n )\n : ts.factory.createLiteralTypeNode(\n ts.factory.createToken(ts.SyntaxKind.FalseKeyword),\n );\n if (typeof s === \"number\")\n return ts.factory.createLiteralTypeNode(\n ts.factory.createNumericLiteral(s),\n );\n if (typeof s === \"string\")\n return ts.factory.createLiteralTypeNode(\n ts.factory.createStringLiteral(s),\n );\n throw new Error(`Unexpected ${String(s)} of type ${typeof s} in enum`);\n });\n return types.length > 1 ? ts.factory.createUnionTypeNode(types) : types[0];\n}\n","import ts, { factory } from \"typescript\";\nimport { OazapftsContext } from \"../context\";\nimport {\n getEnumStyle,\n isNamedEnumSchema,\n resolve,\n toIdentifier,\n} from \"../helpers\";\nimport * as OpenApi from \"../helpers/openApi3-x\";\nimport { getTrueEnum } from \"./getTrueEnum\";\nimport { getAsConstEnum } from \"./getAsConstEnum\";\nimport { getTypeFromEnum } from \"./getTypeFromEnum\";\n\n/**\n * Get enum member reference type for discriminator values when enumStyle is \"enum\" or \"as-const\"\n */\nexport function getDiscriminatorType(\n ctx: OazapftsContext,\n discriminatingSchemaRef:\n | Exclude<OpenApi.SchemaObject, boolean>\n | OpenApi.ReferenceObject,\n propertyName: string,\n matches: string[],\n) {\n const enumStyle = getEnumStyle(ctx.opts);\n if (enumStyle === \"union\") {\n return getTypeFromEnum(matches);\n }\n\n const discriminatingSchema = resolve(discriminatingSchemaRef, ctx);\n // Get the discriminator property schema to check if it should use enum types\n // Check the schema's own properties first, then search in allOf parents\n let discriminatorPropertySchema = resolve(\n discriminatingSchema.properties?.[propertyName],\n ctx,\n );\n\n if (!discriminatorPropertySchema && discriminatingSchema.allOf) {\n for (const allOfSchema of discriminatingSchema.allOf) {\n const resolvedAllOf = resolve(allOfSchema, ctx);\n if (resolvedAllOf.properties?.[propertyName]) {\n discriminatorPropertySchema = resolve(\n resolvedAllOf.properties[propertyName],\n ctx,\n );\n break;\n }\n }\n }\n\n if (\n !discriminatorPropertySchema ||\n !isNamedEnumSchema(discriminatorPropertySchema, propertyName)\n ) {\n return getTypeFromEnum(matches);\n }\n\n const enumTypeRef =\n enumStyle === \"as-const\"\n ? getAsConstEnum(discriminatorPropertySchema, propertyName, ctx)\n : getTrueEnum(discriminatorPropertySchema, propertyName, ctx);\n\n const memberTypes = matches.map((value) => {\n const entity = factory.createQualifiedName(\n enumTypeRef.typeName,\n factory.createIdentifier(toIdentifier(value, true)),\n );\n\n if (enumStyle === \"as-const\") {\n return factory.createTypeQueryNode(entity);\n }\n\n return factory.createTypeReferenceNode(entity);\n });\n\n return memberTypes.length === 1\n ? memberTypes[0]\n : factory.createUnionTypeNode(memberTypes);\n}\n","import ts from \"typescript\";\nimport _ from \"lodash\";\nimport { OazapftsContext, OnlyMode } from \"../context\";\nimport * as OpenApi from \"../helpers/openApi3-x\";\nimport { isReference, getRefBasename, resolve } from \"../helpers\";\nimport { createPropertySignature } from \"./tscodegen\";\nimport { getTypeFromSchema } from \"./getTypeForSchema\";\nimport { getDiscriminatorType } from \"./getDiscriminatorType\";\n\nexport function getUnionType(\n variants: (OpenApi.ReferenceObject | OpenApi.SchemaObject)[],\n ctx: OazapftsContext,\n discriminator?: OpenApi.DiscriminatorObject,\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 ts.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 OpenApi.ReferenceObject).$ref,\n );\n // TODO: handle boolean\n const resolvedSchema = resolve(schema, ctx) as Exclude<\n OpenApi.SchemaObject,\n boolean\n >;\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, OpenApi.ReferenceObject][]\n ).map(([discriminatorValue, variant]) =>\n // Yields: { [discriminator.propertyName]: discriminatorValue } & variant\n ts.factory.createIntersectionTypeNode([\n ts.factory.createTypeLiteralNode([\n createPropertySignature({\n name: discriminator.propertyName,\n type: getDiscriminatorType(\n ctx,\n variant,\n discriminator.propertyName,\n [discriminatorValue],\n ),\n }),\n ]),\n getTypeFromSchema(ctx, variant, undefined, onlyMode),\n ]),\n ),\n );\n } else {\n // oneOf -> untagged union\n return ts.factory.createUnionTypeNode(\n _.uniq(\n variants.map((schema) =>\n getTypeFromSchema(ctx, schema, undefined, onlyMode),\n ),\n ),\n );\n }\n}\n","import { OazapftsContext } from \"../context\";\nimport * as cg from \"../generate/tscodegen\";\n\nexport function getEmptySchemaType(ctx: OazapftsContext) {\n return ctx.opts.useUnknown ? cg.keywordType.unknown : cg.keywordType.any;\n}\n","import ts from \"typescript\";\nimport { OazapftsContext, OnlyMode } from \"../context\";\nimport { ReferenceObject, SchemaObject } from \"../helpers/openApi3-x\";\nimport * as cg from \"./tscodegen\";\nimport { checkSchemaOnlyMode } from \"../helpers\";\nimport { getTypeFromSchema } from \"./getTypeForSchema\";\nimport { getEmptySchemaType } from \"../helpers/emptySchemaType\";\n\n/**\n * Recursively creates a type literal with the given props.\n */\nexport function getTypeFromProperties(\n props: {\n [prop: string]: SchemaObject | ReferenceObject;\n },\n ctx: OazapftsContext,\n required?: string[],\n additionalProperties?: boolean | SchemaObject | ReferenceObject,\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 } = checkSchemaOnlyMode(schema, ctx, 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 = getTypeFromSchema(ctx, schema, name, onlyMode);\n if (!isRequired && ctx.opts.unionUndefined) {\n type = ts.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 ? getEmptySchemaType(ctx)\n : getTypeFromSchema(ctx, additionalProperties, undefined, onlyMode);\n\n members.push(cg.createIndexSignature(type));\n }\n return ts.factory.createTypeLiteralNode(members);\n}\n","import ts, { factory } from \"typescript\";\nimport _ from \"lodash\";\nimport { OazapftsContext, OnlyMode } from \"../context\";\nimport * as OpenApi from \"../helpers/openApi3-x\";\nimport * as cg from \"./tscodegen\";\nimport * as h from \"../helpers\";\nimport { getRefAlias } from \"./getRefAlias\";\nimport { getUnionType } from \"./getUnionType\";\nimport { getTypeFromProperties } from \"./getTypeFromProperties\";\nimport { getTrueEnum } from \"./getTrueEnum\";\nimport { getAsConstEnum } from \"./getAsConstEnum\";\nimport { getTypeFromEnum } from \"./getTypeFromEnum\";\nimport { getEmptySchemaType } from \"../helpers/emptySchemaType\";\nimport { getDiscriminatorType } from \"./getDiscriminatorType\";\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 */\nexport function getTypeFromSchema(\n ctx: OazapftsContext,\n schema?: OpenApi.SchemaObject | OpenApi.ReferenceObject,\n name?: string,\n onlyMode?: OnlyMode,\n) {\n const type = getBaseTypeFromSchema(ctx, schema, name, onlyMode);\n return h.isNullable(schema)\n ? ts.factory.createUnionTypeNode([type, cg.keywordType.null])\n : type;\n}\n\n/**\n * This is the very core of the OpenAPI to TS conversion - it takes a\n * schema and returns the appropriate type.\n */\nfunction getBaseTypeFromSchema(\n ctx: OazapftsContext,\n schema?: OpenApi.SchemaObject | OpenApi.ReferenceObject,\n name?: string,\n onlyMode?: OnlyMode,\n): ts.TypeNode {\n if (schema === undefined) return getEmptySchemaType(ctx);\n if (h.isReference(schema)) {\n return getRefAlias(schema, ctx, onlyMode) as ts.TypeReferenceNode;\n }\n\n if (schema === true) {\n return getEmptySchemaType(ctx);\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 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 ctx,\n schema.discriminator,\n onlyMode,\n );\n }\n if (schema.anyOf) {\n // anyOf -> union\n return getUnionType(schema.anyOf, ctx, undefined, onlyMode);\n }\n if (schema.discriminator?.mapping) {\n // discriminating schema -> union\n const mapping = schema.discriminator.mapping;\n return getUnionType(\n Object.values(mapping).map((ref) => ({ $ref: ref })),\n ctx,\n undefined,\n onlyMode,\n );\n }\n if (schema.allOf) {\n // allOf -> intersection\n const types: ts.TypeNode[] = [];\n for (const childSchema of schema.allOf) {\n if (\n h.isReference(childSchema) &&\n ctx.discriminatingSchemas.has(\n h.resolve(childSchema, ctx) as OpenApi.SchemaObject,\n )\n ) {\n const discriminatingSchema =\n h.resolve<OpenApi.UNSTABLE_DiscriminatingSchemaObject>(\n childSchema,\n ctx,\n );\n const discriminator = discriminatingSchema.discriminator;\n\n const matches = Object.entries(discriminator.mapping ?? {})\n .filter(([, ref]) => h.resolve({ $ref: ref }, ctx) === schema)\n .map(([discriminatorValue]) => discriminatorValue);\n if (matches.length > 0) {\n types.push(\n ts.factory.createTypeLiteralNode([\n cg.createPropertySignature({\n name: discriminator.propertyName,\n type: getDiscriminatorType(\n ctx,\n childSchema,\n discriminator.propertyName,\n matches,\n ),\n }),\n ]),\n );\n }\n types.push(\n getRefAlias(\n childSchema,\n ctx,\n onlyMode,\n /* ignoreDiscriminator */ true,\n ),\n );\n } else {\n types.push(\n getTypeFromSchema(\n ctx,\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 getTypeFromProperties(\n schema.properties || {},\n ctx,\n schema.required,\n schema.additionalProperties,\n onlyMode,\n ),\n );\n }\n return ts.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 Exclude<\n OpenApi.SchemaObject,\n boolean\n >;\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 getBaseTypeFromSchema(ctx, subSchema, name, onlyMode);\n }),\n );\n }\n if (\"items\" in schema) {\n const schemaItems = schema.items;\n\n // items -> array of enums or unions\n if (schemaItems && !h.isReference(schemaItems) && schemaItems.enum) {\n const enumStyle = h.getEnumStyle(ctx.opts);\n let enumType;\n if (enumStyle !== \"union\" && h.isNamedEnumSchema(schemaItems, name)) {\n enumType =\n enumStyle === \"as-const\"\n ? getAsConstEnum(schemaItems, name, ctx)\n : getTrueEnum(schemaItems, name, ctx);\n } else {\n enumType = cg.createEnumTypeNode(schemaItems.enum);\n }\n\n return factory.createArrayTypeNode(enumType);\n }\n\n // items -> array\n return ts.factory.createArrayTypeNode(\n getTypeFromSchema(ctx, schema.items, undefined, onlyMode),\n );\n }\n if (\"prefixItems\" in schema && Array.isArray(schema.prefixItems)) {\n // prefixItems -> typed tuple\n return ts.factory.createTupleTypeNode(\n schema.prefixItems.map((schema) => getTypeFromSchema(ctx, schema)),\n );\n }\n if (schema.properties || schema.additionalProperties) {\n // properties -> literal type\n return getTypeFromProperties(\n schema.properties || {},\n ctx,\n schema.required,\n schema.additionalProperties,\n onlyMode,\n );\n }\n\n if (schema.enum) {\n const enumStyle = h.getEnumStyle(ctx.opts);\n if (enumStyle !== \"union\" && h.isNamedEnumSchema(schema, name)) {\n return enumStyle === \"as-const\"\n ? getAsConstEnum(schema, name, ctx)\n : getTrueEnum(schema, name, ctx);\n }\n return cg.createEnumTypeNode(schema.enum);\n }\n if (schema.format == \"binary\") {\n return ts.factory.createTypeReferenceNode(\"Blob\", []);\n }\n if (\"const\" in schema && schema.const) {\n return 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 getEmptySchemaType(ctx);\n}\n\nfunction isKeyOfKeywordType(key: string): key is keyof typeof cg.keywordType {\n return key in cg.keywordType;\n}\n","import { OazapftsContext } from \"../context\";\nimport { ParameterObject } from \"../helpers/openApi3-x\";\nimport { isReference } from \"../helpers\";\nimport { getSchemaFromContent } from \"./getSchemaFromContent\";\nimport { getTypeFromSchema } from \"./getTypeForSchema\";\n\nexport function getTypeFromParameter(p: ParameterObject, ctx: OazapftsContext) {\n if (p.content) {\n const schema = getSchemaFromContent(p.content);\n return getTypeFromSchema(ctx, schema);\n }\n return getTypeFromSchema(ctx, isReference(p) ? p : p.schema);\n}\n","import { OazapftsContext } from \"../context\";\nimport { ResponsesObject } from \"../helpers/openApi3-x\";\nimport * as h from \"../helpers\";\n\nexport function getResponseType(\n ctx: OazapftsContext,\n responses?: ResponsesObject,\n): \"json\" | \"text\" | \"blob\" {\n // backwards-compatibility\n if (!responses) return \"text\";\n\n const resolvedResponses = Object.values(responses).map((response) =>\n h.resolve(response, ctx),\n );\n\n // if no content is specified, assume `text` (backwards-compatibility)\n if (\n !resolvedResponses.some((res) => Object.keys(res.content ?? {}).length > 0)\n ) {\n return \"text\";\n }\n\n const isJson = resolvedResponses.some((response) => {\n const responseMimeTypes = Object.keys(response.content ?? {});\n return responseMimeTypes.some(h.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","import ts from \"typescript\";\nimport { OazapftsContext, OnlyMode } from \"../context\";\nimport * as OpenApi from \"../helpers/openApi3-x\";\nimport * as cg from \"./tscodegen\";\nimport { resolve } from \"../helpers\";\nimport { getTypeFromSchema } from \"./getTypeForSchema\";\nimport { getSchemaFromContent } from \"./getSchemaFromContent\";\n\nexport function getTypeFromResponses(\n responses: OpenApi.ResponsesObject,\n ctx: OazapftsContext,\n onlyMode?: OnlyMode,\n) {\n return ts.factory.createUnionTypeNode(\n Object.entries(responses).map(([code, res]) => {\n const statusType =\n code === \"default\"\n ? cg.keywordType.number\n : ts.factory.createLiteralTypeNode(\n ts.factory.createNumericLiteral(code),\n );\n\n const props = [\n cg.createPropertySignature({\n name: \"status\",\n type: statusType,\n }),\n ];\n\n const dataType = getTypeFromResponse(res, ctx, onlyMode);\n if (dataType !== cg.keywordType.void) {\n props.push(\n cg.createPropertySignature({\n name: \"data\",\n type: dataType,\n }),\n );\n }\n return ts.factory.createTypeLiteralNode(props);\n }),\n );\n}\n\nfunction getTypeFromResponse(\n resOrRef: OpenApi.ResponseObject | OpenApi.ReferenceObject,\n ctx: OazapftsContext,\n onlyMode?: OnlyMode,\n) {\n const res = resolve(resOrRef, ctx);\n if (!res || !res.content) return cg.keywordType.void;\n return getTypeFromSchema(\n ctx,\n getSchemaFromContent(res.content),\n undefined,\n onlyMode,\n );\n}\n","import ts from \"typescript\";\nimport _ from \"lodash\";\nimport { OazapftsContext } from \"../context\";\nimport * as OpenApi from \"../helpers/openApi3-x\";\nimport * as cg from \"./tscodegen\";\nimport * as h from \"../helpers\";\nimport { getTypeFromParameter } from \"./getTypeFromParameter\";\nimport { getSchemaFromContent } from \"./getSchemaFromContent\";\nimport { getTypeFromSchema } from \"./getTypeForSchema\";\nimport { getResponseType } from \"./getResponseType\";\nimport { getTypeFromResponses } from \"./getTypeFromResponses\";\nimport * as OpenAPI from \"../helpers/openApi3-x\";\nimport type { UNSTABLE_OazapftsPluginHooks } from \"../plugin\";\n\nexport const argumentStyleOptions = [\"positional\", \"object\"] as const;\nexport type ArgumentStyle = (typeof argumentStyleOptions)[number];\n\nexport function generateClientMethod(\n method: h.HttpMethod,\n path: string,\n operation: OpenAPI.OperationObject,\n pathItem: OpenAPI.PathItemObject,\n ctx: OazapftsContext,\n hooks: UNSTABLE_OazapftsPluginHooks,\n): ts.FunctionDeclaration[] {\n const { operationId, requestBody, responses, summary, description, tags } =\n operation;\n\n if (h.skip(ctx, tags)) {\n return [];\n }\n\n const { primaryName, deprecatedLegacyName } = h.getOperationNames(\n method,\n path,\n operationId,\n );\n\n // merge item and op parameters\n const parameters = h.resolveArray(ctx, pathItem.parameters);\n for (const p of h.resolveArray(ctx, operation.parameters)) {\n const existing = parameters.find((r) => r.name === p.name && r.in === p.in);\n if (!existing) {\n parameters.push(p);\n }\n }\n\n // convert parameter names to argument names ...\n const argNames = new Map<OpenApi.ParameterObject, string>();\n _.sortBy(parameters, \"name.length\").forEach((p) => {\n const identifier = h.toIdentifier(p.name);\n const existing = [...argNames.values()];\n const suffix = existing.includes(identifier) ? _.upperFirst(p.in) : \"\";\n argNames.set(p, identifier + suffix);\n });\n\n const getArgName = (param: OpenApi.ParameterObject) => {\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: OpenApi.RequestBodyObject | undefined = undefined;\n let bodyVar: string | undefined = undefined;\n switch (ctx.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(h.resolve(p, ctx)), {\n type: getTypeFromParameter(p, ctx),\n }),\n );\n methodParams.push(...requiredParams);\n\n // add body if present\n if (requestBody) {\n body = h.resolve(requestBody, ctx);\n const schema = getSchemaFromContent(body.content);\n const type = getTypeFromSchema(ctx, schema, undefined, \"writeOnly\");\n bodyVar = h.toIdentifier(\n (type as any).name || h.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) => h.resolve(param, ctx))\n .map((param) => ({ name: getArgName(param) })),\n ),\n {\n initializer: ts.factory.createObjectLiteralExpression(),\n type: ts.factory.createTypeLiteralNode(\n optional.map((p) =>\n cg.createPropertySignature({\n name: getArgName(h.resolve(p, ctx)),\n questionToken: true,\n type: getTypeFromParameter(p, ctx),\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(h.resolve(p, ctx)),\n questionToken: !p.required,\n type: getTypeFromParameter(p, ctx),\n }),\n );\n\n // add body if present\n if (requestBody) {\n body = h.resolve(requestBody, ctx);\n const schema = getSchemaFromContent(body.content);\n const type = getTypeFromSchema(ctx, schema, undefined, \"writeOnly\");\n bodyVar = h.toIdentifier(\n (type as any).name || h.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) => h.resolve(param, ctx))\n .map((param) => ({ name: getArgName(param) })),\n ...(bodyVar ? [{ name: bodyVar }] : []),\n ]),\n {\n type: ts.factory.createTypeLiteralNode(paramMembers),\n },\n ),\n );\n break;\n }\n\n // add oazapfts options\n methodParams.push(\n cg.createParameter(\"opts\", {\n type: ts.factory.createTypeReferenceNode(\n \"Oazapfts.RequestOpts\",\n undefined,\n ),\n questionToken: true,\n }),\n );\n\n // Next, build the method body...\n\n const returnType = getResponseType(ctx, 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, h.getFormatter);\n qs = h.callQsFunction(\n \"query\",\n Object.entries(paramsByFormatter).map(([formatter, parameters]) => {\n const args = hooks.querySerializerArgs.call(\n [\n cg.createObjectLiteral(\n parameters.map((p) => [p.name, getArgName(p)]),\n ),\n ],\n {\n method,\n path,\n operation,\n pathItem,\n formatter,\n parameters,\n query,\n },\n ctx,\n );\n return h.callQsFunction(formatter, args);\n }),\n );\n }\n\n const url = h.createUrlExpression(path, qs);\n const init: ts.ObjectLiteralElementLike[] = [\n ts.factory.createSpreadAssignment(ts.factory.createIdentifier(\"opts\")),\n ];\n\n if (method !== \"GET\") {\n init.push(\n ts.factory.createPropertyAssignment(\n \"method\",\n ts.factory.createStringLiteral(method),\n ),\n );\n }\n\n if (bodyVar) {\n init.push(\n cg.createPropertyAssignment(\"body\", ts.factory.createIdentifier(bodyVar)),\n );\n }\n\n if (header.length) {\n init.push(\n ts.factory.createPropertyAssignment(\n \"headers\",\n h.callOazapftsFunction(\"mergeHeaders\", [\n ts.factory.createPropertyAccessChain(\n ts.factory.createIdentifier(\"opts\"),\n ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),\n \"headers\",\n ),\n ts.factory.createObjectLiteralExpression(\n [\n ...header.map((param) =>\n cg.createPropertyAssignment(\n param.name,\n ts.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 = h.getBodyFormatter(body); // json, form, multipart\n const initObj = ts.factory.createObjectLiteralExpression(init, true);\n args.push(\n formatter ? h.callOazapftsFunction(formatter, [initObj]) : initObj,\n );\n }\n\n const methodBody = cg.block(\n ts.factory.createReturnStatement(\n h.wrapResult(\n h.callOazapftsFunction(\n {\n json: \"fetchJson\",\n text: \"fetchText\",\n blob: \"fetchBlob\",\n }[returnType],\n args,\n returnType === \"json\" || returnType === \"blob\"\n ? [\n getTypeFromResponses(responses!, ctx, \"readOnly\") ||\n ts.SyntaxKind.AnyKeyword,\n ]\n : undefined,\n ),\n ctx,\n ),\n ),\n );\n\n const result: ts.FunctionDeclaration[] = [\n cg.addComment(\n cg.createFunctionDeclaration(\n primaryName,\n {\n modifiers: [cg.modifier.export],\n },\n methodParams,\n methodBody,\n ),\n summary || description,\n ),\n ];\n\n // Generate deprecated legacy alias if needed for backward compatibility\n if (deprecatedLegacyName && !ctx.opts.futureStripLegacyMethods) {\n const deprecatedComment = [\n `@deprecated Use {@link ${primaryName}} instead.`,\n summary || description,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n\n result.push(\n cg.addComment(\n cg.createFunctionDeclaration(\n deprecatedLegacyName,\n {\n modifiers: [cg.modifier.export],\n },\n methodParams,\n methodBody,\n ),\n deprecatedComment,\n ),\n );\n }\n\n return result;\n}\n","import ts from \"typescript\";\nimport type { Import, ImportSpecifier } from \"../context\";\n\n/**\n * Convert an Import definition to a TypeScript ImportDeclaration AST node.\n *\n * Supported formats:\n * - string: side-effect import `import \"module\";`\n * - [specifiers[], { from }]: named imports `import { a, b } from \"module\";`\n * - [default, { from }]: default import `import X from \"module\";`\n * - [default, specifiers[], { from }]: default + named `import X, { a } from \"module\";`\n * - [{ namespace }, { from }]: namespace import `import * as X from \"module\";`\n */\nexport function createImportStatement(imp: Import): ts.ImportDeclaration {\n // Side-effect import: import \"module\";\n if (typeof imp === \"string\") {\n return ts.factory.createImportDeclaration(\n undefined,\n undefined,\n ts.factory.createStringLiteral(imp),\n );\n }\n\n // Namespace import: [{ namespace: \"X\" }, { from: \"module\" }]\n if (imp.length === 2 && typeof imp[0] === \"object\" && \"namespace\" in imp[0]) {\n const [{ namespace }, { from }] = imp as [\n { namespace: string },\n { from: string },\n ];\n return ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n false,\n undefined,\n ts.factory.createNamespaceImport(\n ts.factory.createIdentifier(namespace),\n ),\n ),\n ts.factory.createStringLiteral(from),\n );\n }\n\n // Default import: [\"Default\", { from: \"module\" }]\n if (\n imp.length === 2 &&\n typeof imp[0] === \"string\" &&\n typeof imp[1] === \"object\" &&\n \"from\" in imp[1]\n ) {\n const [defaultName, { from }] = imp as [string, { from: string }];\n return ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n false,\n ts.factory.createIdentifier(defaultName),\n undefined,\n ),\n ts.factory.createStringLiteral(from),\n );\n }\n\n // Named imports: [[specifiers], { from: \"module\" }]\n if (imp.length === 2 && Array.isArray(imp[0])) {\n const [specifiers, { from }] = imp as [\n (ImportSpecifier | string)[],\n { from: string },\n ];\n return ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n false,\n undefined,\n ts.factory.createNamedImports(specifiers.map(createImportSpecifier)),\n ),\n ts.factory.createStringLiteral(from),\n );\n }\n\n // Default + named imports: [\"Default\", [specifiers], { from: \"module\" }]\n if (imp.length === 3) {\n const [defaultName, specifiers, { from }] = imp as [\n string,\n (ImportSpecifier | string)[],\n { from: string },\n ];\n return ts.factory.createImportDeclaration(\n undefined,\n ts.factory.createImportClause(\n false,\n ts.factory.createIdentifier(defaultName),\n ts.factory.createNamedImports(specifiers.map(createImportSpecifier)),\n ),\n ts.factory.createStringLiteral(from),\n );\n }\n\n throw new Error(`Invalid import format: ${JSON.stringify(imp)}`);\n}\n\nfunction createImportSpecifier(\n spec: ImportSpecifier | string,\n): ts.ImportSpecifier {\n if (typeof spec === \"string\") {\n return ts.factory.createImportSpecifier(\n false,\n undefined,\n ts.factory.createIdentifier(spec),\n );\n }\n return ts.factory.createImportSpecifier(\n false,\n spec.as ? ts.factory.createIdentifier(spec.name) : undefined,\n ts.factory.createIdentifier(spec.as || spec.name),\n );\n}\n","import ts from \"typescript\";\nimport type { Defaults } from \"../context\";\n\n/** Creates: export const defaults: Oazapfts.Defaults<Oazapfts.CustomHeaders> = { ... }; */\nexport function createDefaultsStatement(\n defaults: Defaults,\n): ts.VariableStatement {\n const properties: ts.PropertyAssignment[] = [];\n\n // headers (always include, default to empty object)\n properties.push(\n ts.factory.createPropertyAssignment(\n \"headers\",\n defaults.headers\n ? ts.factory.createObjectLiteralExpression(\n Object.entries(defaults.headers)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) =>\n ts.factory.createPropertyAssignment(\n ts.factory.createStringLiteral(key),\n createHeaderValueLiteral(value),\n ),\n ),\n )\n : ts.factory.createObjectLiteralExpression([]),\n ),\n );\n\n // baseUrl (include if defined)\n if (defaults.baseUrl !== undefined) {\n properties.push(\n ts.factory.createPropertyAssignment(\n \"baseUrl\",\n ts.factory.createStringLiteral(defaults.baseUrl),\n ),\n );\n }\n\n // fetch (expression-based: FunctionExpression, ArrowFunction, or Identifier)\n if (defaults.fetch) {\n properties.push(\n ts.factory.createPropertyAssignment(\"fetch\", defaults.fetch),\n );\n }\n\n // FormData (expression-based: ClassExpression or Identifier)\n if (defaults.FormData) {\n properties.push(\n ts.factory.createPropertyAssignment(\"FormData\", defaults.FormData),\n );\n }\n\n return ts.factory.createVariableStatement(\n [ts.factory.createModifier(ts.SyntaxKind.ExportKeyword)],\n ts.factory.createVariableDeclarationList(\n [\n ts.factory.createVariableDeclaration(\n \"defaults\",\n undefined,\n ts.factory.createTypeReferenceNode(\n ts.factory.createQualifiedName(\n ts.factory.createIdentifier(\"Oazapfts\"),\n \"Defaults\",\n ),\n [\n ts.factory.createTypeReferenceNode(\n ts.factory.createQualifiedName(\n ts.factory.createIdentifier(\"Oazapfts\"),\n \"CustomHeaders\",\n ),\n ),\n ],\n ),\n ts.factory.createObjectLiteralExpression(properties, true),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n );\n}\n\n/** Create a literal expression for a header value (string | number | boolean | null) */\nexport function createHeaderValueLiteral(\n value: string | number | boolean | null | undefined,\n): ts.Expression {\n if (value === null) {\n return ts.factory.createNull();\n }\n if (typeof value === \"boolean\") {\n return value ? ts.factory.createTrue() : ts.factory.createFalse();\n }\n if (typeof value === \"number\") {\n return ts.factory.createNumericLiteral(value);\n }\n return ts.factory.createStringLiteral(String(value));\n}\n","import ts from \"typescript\";\nimport { OazapftsContext } from \"../context\";\nimport * as h from \"../helpers\";\nimport { generateClientMethod } from \"./generateClientMethod\";\nimport { createImportStatement } from \"./generateImports\";\nimport { createDefaultsStatement } from \"./createDefaultsStatement\";\nimport * as OpenAPI from \"../helpers/openApi3-x\";\nimport type { UNSTABLE_OazapftsPluginHooks } from \"../plugin\";\nimport { createServersStatement } from \"./generateServers\";\nimport { getRefAlias } from \"./getRefAlias\";\n\nexport async function generateApi(\n ctx: OazapftsContext,\n hooks: UNSTABLE_OazapftsPluginHooks,\n): Promise<ts.SourceFile> {\n // Preprocess components (needs mutable context)\n h.preprocessComponents(ctx);\n\n // Hook: prepare - allow plugins to modify spec, context, or template parts\n await hooks.prepare.promise(ctx);\n\n // Generate methods with hook support\n const methods: ts.FunctionDeclaration[] = [];\n for (const [path, pathItem] of Object.entries(ctx.spec.paths || {})) {\n if (!pathItem) continue;\n\n for (const [verb, operation] of Object.entries(pathItem)) {\n if (!operation) continue;\n const method = verb.toUpperCase();\n if (!h.isHttpMethod(method)) continue;\n\n // Generate default methods\n let generatedMethods = generateClientMethod(\n method,\n path,\n operation as OpenAPI.OperationObject,\n pathItem,\n ctx,\n hooks,\n );\n\n // Hook: generateMethod - allow plugins to modify/replace methods\n generatedMethods = await hooks.generateMethod.promise(\n generatedMethods,\n {\n method,\n path,\n operation: operation as OpenAPI.OperationObject,\n pathItem,\n },\n ctx,\n );\n\n methods.push(...generatedMethods);\n }\n }\n\n if (ctx.opts.allSchemas && ctx.spec.components?.schemas) {\n for (const [name, schema] of Object.entries(ctx.spec.components.schemas)) {\n getRefAlias({ $ref: `#/components/schemas/${name}` }, ctx, schema);\n }\n }\n\n // Compose the final source file from template parts\n let apiSourceFile = composeSourceFile(ctx, methods);\n\n // Hook: astGenerated - allow plugins to modify final AST\n apiSourceFile = await hooks.astGenerated.promise(apiSourceFile, ctx);\n\n return apiSourceFile;\n}\n\n/**\n * Compose the final source file from all template parts and generated code.\n */\nexport function composeSourceFile(\n ctx: OazapftsContext,\n methods: ts.FunctionDeclaration[],\n): ts.SourceFile {\n // Build statements array from flat context properties\n let statements: ts.Statement[] = [\n ...ctx.imports.map(createImportStatement),\n createDefaultsStatement(ctx.defaults),\n ...ctx.init,\n createServersStatement(ctx.servers),\n ...ctx.aliases,\n ...h.dedupeMethodNames(methods),\n ...ctx.enumAliases,\n ];\n\n // Add banner comment to first statement if present\n if (ctx.banner && statements.length > 0) {\n const bannerComment = `*\\n * ${ctx.banner.split(\"\\n\").join(\"\\n * \")}\\n `;\n statements[0] = ts.addSyntheticLeadingComment(\n statements[0],\n ts.SyntaxKind.MultiLineCommentTrivia,\n bannerComment,\n true,\n );\n }\n\n // Create the source file with all parts in order\n return ts.factory.createSourceFile(\n statements,\n ts.factory.createToken(ts.SyntaxKind.EndOfFileToken),\n ts.NodeFlags.None,\n );\n}\n","import ts from \"typescript\";\nimport * as h from \"../helpers\";\nimport type { OazapftsContext } from \"../context\";\nimport type { ParameterObject } from \"../helpers/openApi3-x\";\nimport {\n UNSTABLE_createPlugin,\n UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE,\n} from \"../plugin\";\n\nfunction hasBooleanQueryParameter(\n query: ParameterObject[],\n ctx: OazapftsContext,\n) {\n return query.some((param) => {\n const schema = param.schema && h.resolve(param.schema, ctx);\n return !!schema && typeof schema === \"object\" && schema.type === \"boolean\";\n });\n}\n\nexport function numericBooleanQueryParametersPlugin() {\n return UNSTABLE_createPlugin(\n (hooks) => {\n hooks.querySerializerArgs.tap(\n \"numericBooleanQueryParameters\",\n (args, queryContext, ctx) => {\n if (!ctx.opts.numericBooleanQueryParameters) {\n return args;\n }\n\n if (!hasBooleanQueryParameter(queryContext.query, ctx)) {\n return args;\n }\n\n return [\n ...args,\n ts.factory.createPropertyAccessExpression(\n ts.factory.createIdentifier(\"QS\"),\n \"numericBooleanReserved\",\n ),\n ];\n },\n );\n },\n {\n precedence: UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE.LAZY,\n },\n );\n}\n","import type { OazapftsContext } from \"../context\";\nimport type { UNSTABLE_OazapftsPlugin } from \"../plugin\";\nimport { numericBooleanQueryParametersPlugin } from \"./numericBooleanQueryParameters\";\n\nexport function getInternalPlugins(\n _ctx: OazapftsContext,\n): UNSTABLE_OazapftsPlugin[] {\n return [numericBooleanQueryParametersPlugin()];\n}\n","import * as cg from \"./generate/tscodegen\";\nimport { type SourceFile } from \"typescript\";\nimport SwaggerParser from \"@apidevtools/swagger-parser\";\nimport { createContext, OazapftsContext } from \"./context\";\nimport { generateApi } from \"./generate/generateApi\";\nimport * as OpenAPI from \"./helpers/openApi3-x\";\nimport {\n type UNSTABLE_OazapftsPlugin,\n UNSTABLE_createHooks,\n UNSTABLE_applyPlugins,\n} from \"./plugin\";\nimport { ArgumentStyle } from \"./generate/generateClientMethod\";\nimport { EnumStyle } from \"./helpers/getEnumStyle\";\nimport { getInternalPlugins } from \"./internalPlugins\";\n\nexport { cg as UNSTABLE_cg, type OpenAPI };\n\nexport type OazapftsOptions = {\n include?: string[];\n exclude?: string[];\n optimistic?: boolean;\n unionUndefined?: boolean;\n /**\n * @deprecated Use `enumStyle: \"enum\"` instead.\n */\n useEnumType?: boolean;\n /**\n * Controls how enums are generated in TypeScript.\n * Takes precedence over `useEnumType` if both are specified.\n */\n enumStyle?: EnumStyle;\n mergeReadWriteOnly?: boolean;\n useUnknown?: boolean;\n argumentStyle?: ArgumentStyle;\n allSchemas?: boolean;\n /**\n * When true, serialize boolean query parameters as 1/0.\n */\n numericBooleanQueryParameters?: boolean;\n /**\n * When true, skip generating deprecated legacy method aliases for backward\n * compatibility. Only the primary normalized operationId-based names will\n * be generated.\n */\n futureStripLegacyMethods?: boolean;\n /**\n * Plugins to apply during code generation.\n * Each plugin receives hooks and can tap into generation steps.\n */\n UNSTABLE_plugins?: UNSTABLE_OazapftsPlugin[];\n};\n\n/**\n * Create a a TypeScript source file from an OpenAPI spec.\n *\n * @param spec - Path to an OpenAPI spec file or source string\n * @param opts - Options for the code generation\n * @returns The generated TypeScript source file\n */\nexport async function generateSource(spec: string, opts: OazapftsOptions = {}) {\n const doc = await parseSpec(spec);\n\n const ctx = createContext(doc, opts);\n ctx.banner = [doc.info.title, doc.info.version, ctx.banner]\n .filter(Boolean)\n .join(\"\\n\");\n\n const ast = await generateAst(ctx, opts.UNSTABLE_plugins);\n\n return printAst(ast);\n}\nexport { generateSource as default, generateSource as oazapfts };\n\n/**\n * Create an Typescript AST from an OpenAPI document.\n *\n * @param ctx - Oazapfts context\n * @param UNSTABLE_plugins - Unstable plugins to apply\n * @returns The generated TypeScript AST\n */\nexport async function generateAst(\n ctx: OazapftsContext,\n UNSTABLE_plugins: UNSTABLE_OazapftsPlugin[] = [],\n) {\n const hooks = UNSTABLE_createHooks();\n await UNSTABLE_applyPlugins(hooks, [\n ...getInternalPlugins(ctx),\n ...UNSTABLE_plugins,\n ]);\n\n return generateApi(ctx, hooks);\n}\n\n/**\n * Print a TypeScript AST to a string.\n *\n * @param ast - The TypeScript AST to print\n * @returns The printed TypeScript source\n */\nexport function printAst(ast: SourceFile) {\n return cg.printFile(ast);\n}\n\n/**\n * Parse an OpenAPI spec into a document object.\n *\n * @param spec - Path to a local OpenAPI spec file,\n * or a URL to an OpenAPI spec file\n * or a OpenAPI document object\n * @returns The parsed OpenAPI document\n */\nexport async function parseSpec(spec: string | OpenAPI.Document) {\n if (typeof spec === \"string\" && spec.startsWith(\"http\")) {\n const response = await fetch(spec);\n spec = await response.json();\n }\n\n const doc = await SwaggerParser.bundle(spec);\n if (!isOpenApiV3(doc)) {\n throw new Error(\n \"Only OpenAPI v3 is supported\\nYou may convert you spec with https://github.com/swagger-api/swagger-converter or swagger2openapi package\",\n );\n }\n\n return doc;\n}\n\nfunction isOpenApiV3(\n doc: Awaited<ReturnType<typeof SwaggerParser.bundle>>,\n): doc is OpenAPI.Document {\n return \"openapi\" in doc && doc.openapi.startsWith(\"3\");\n}\n"],"names":["getRefBasename","ref","isReference","obj","refPathToPropertyPath","s","resolve","spec","path","resolved","_","resolveArray","ctx","array","el","preprocessComponents","_a","prefix","schemas","name","schema","isExplicit","discriminator","childSchema","discriminatingSchema","skip","tags","t","_b","getOperationNames","verb","operationId","fallbackName","getFallbackName","legacyId","getLegacyOperationIdentifier","newId","getOperationIdentifier","toIdentifier","id","normalized","camelCased","isValidIdentifier","contentTypes","isMimeType","isJsonMimeType","mime","getFormatter","style","explode","content","medias","callQsFunction","args","createCall","ts","createUrlExpression","qs","spans","head","_substr","literal","expression","createTemplateString","callOazapftsFunction","typeArgs","getBodyFormatter","body","contentType","formatter","wrapResult","ex","getReferenceName","findAvailableRef","available","error","i","key","getRefName","base","isNamedEnumSchema","enumStyleOptions","getEnumStyle","opts","getUniqueAlias","used","getEnumUniqueAlias","values","getCustomNames","names","checkSchemaOnlyMode","resolveRefs","check","history","cached","ret","readOnly","writeOnly","subSchemas","result","isNullable","HttpMethods","isHttpMethod","method","dedupeMethodNames","methods","methodNames","cg.updateFunctionDeclaration","getSchemaFromContent","type","getRefAlias","onlyMode","ignoreDiscriminator","$ref","h.findAvailableRef","h.resolve","h.getRefName","identifier","h.toIdentifier","h.getEnumStyle","h.isNamedEnumSchema","getTypeFromSchema","alias","h.getUniqueAlias","cg.createTypeAliasDeclaration","cg.modifier","h.checkSchemaOnlyMode","readOnlyAlias","readOnlyType","writeOnlyAlias","writeOnlyType","getTrueEnum","propName","proposedName","n","stringEnumValue","members","index","cg.createLiteral","getAsConstEnum","properties","memberName","constStatement","typeStatement","getTypeFromEnum","types","keywordType","getDiscriminatorType","discriminatingSchemaRef","propertyName","matches","enumStyle","discriminatorPropertySchema","allOfSchema","resolvedAllOf","enumTypeRef","memberTypes","value","entity","factory","getUnionType","variants","mappedValues","discriminatorValue","variantRef","variant","schemaBaseName","discriminatorProperty","createPropertySignature","getEmptySchemaType","cg.keywordType","getTypeFromProperties","props","required","additionalProperties","isRequired","signature","cg.createPropertySignature","description","cg.createIndexSignature","getBaseTypeFromSchema","h.isNullable","h.isReference","clone","__spreadValues","objValue","srcValue","mapping","subSchema","__spreadProps","schemaItems","enumType","cg.createEnumTypeNode","isKeyOfKeywordType","getTypeFromParameter","p","getResponseType","responses","resolvedResponses","response","res","h.isJsonMimeType","getTypeFromResponses","code","statusType","dataType","getTypeFromResponse","resOrRef","argumentStyleOptions","generateClientMethod","operation","pathItem","hooks","requestBody","summary","h.skip","primaryName","deprecatedLegacyName","h.getOperationNames","parameters","h.resolveArray","r","argNames","suffix","getArgName","param","methodParams","bodyVar","optional","requiredParams","cg.createParameter","h.getReferenceName","cg.createObjectBinding","paramMembers","returnType","query","header","paramsByFormatter","h.getFormatter","h.callQsFunction","cg.createObjectLiteral","url","h.createUrlExpression","init","cg.createPropertyAssignment","h.callOazapftsFunction","h.getBodyFormatter","initObj","methodBody","cg.block","h.wrapResult","cg.addComment","cg.createFunctionDeclaration","deprecatedComment","createImportStatement","imp","namespace","from","defaultName","specifiers","createImportSpecifier","createDefaultsStatement","defaults","createHeaderValueLiteral","generateApi","__async","h.preprocessComponents","h.isHttpMethod","generatedMethods","apiSourceFile","composeSourceFile","statements","createServersStatement","h.dedupeMethodNames","bannerComment","hasBooleanQueryParameter","numericBooleanQueryParametersPlugin","UNSTABLE_createPlugin","queryContext","UNSTABLE_OAZAPFTS_PLUGIN_PRECEDENCE","getInternalPlugins","_ctx","generateSource","_0","doc","parseSpec","createContext","ast","generateAst","printAst","UNSTABLE_plugins","UNSTABLE_createHooks","UNSTABLE_applyPlugins","cg.printFile","SwaggerParser","isOpenApiV3"],"mappings":"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"}