@redocly/cli 2.66.0 → 2.67.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.
Files changed (128) hide show
  1. package/lib/chunks/{Q7Y4MUA7.js → 2AJDP47K.js} +1 -1
  2. package/lib/chunks/{7NPQH3V7.js → 3HSHTOK2.js} +1 -1
  3. package/lib/chunks/{F7K3O6UM.js → 3SPC2VZI.js} +1 -1
  4. package/lib/chunks/{K4IZRPJV.js → 4JI4GT6B.js} +35 -35
  5. package/lib/chunks/{CK2FG2DD.js → 6BJRKKAU.js} +1 -1
  6. package/lib/chunks/{MOQAQ5M7.js → 7WOMNRDU.js} +1 -1
  7. package/lib/chunks/{3XQNPUP7.js → 7YY5ECWE.js} +1 -1
  8. package/lib/chunks/{FTPZZ6BG.js → A3NSKGWO.js} +1 -1
  9. package/lib/chunks/{4ABWBH3W.js → AENSGZDZ.js} +1 -1
  10. package/lib/chunks/{PBSA7HOV.js → AL7PXK7F.js} +1 -1
  11. package/lib/chunks/{B4Z2Z4FS.js → BUQQJCMF.js} +1 -1
  12. package/lib/chunks/{TLDUEX6A.js → BYO4KBZG.js} +1 -1
  13. package/lib/chunks/{4WRQYZGD.js → CCZY5XJV.js} +2 -2
  14. package/lib/chunks/{R3ZIINV3.js → D4U2LEEI.js} +1 -1
  15. package/lib/chunks/{GLUPJCQU.js → D5A4WCOD.js} +1 -1
  16. package/lib/chunks/{LJTGHAPA.js → DQZXJA6Q.js} +1 -1
  17. package/lib/chunks/{AVUOPIXP.js → DTPYQUHR.js} +13 -13
  18. package/lib/chunks/{4Y4YV5TG.js → EDKRUI6D.js} +1 -1
  19. package/lib/chunks/{EOXNJQ4F.js → EOCKJNES.js} +1 -1
  20. package/lib/chunks/{LSFJCPZH.js → EPVPJTXN.js} +1 -1
  21. package/lib/chunks/{TOBKCE6P.js → F77DQGVI.js} +1 -1
  22. package/lib/chunks/{EP53BWBM.js → F7DLPPNU.js} +1 -1
  23. package/lib/chunks/{ROLEKKAB.js → G67BALR7.js} +1 -1
  24. package/lib/chunks/{RALPAYEE.js → GP5VOB7R.js} +1 -1
  25. package/lib/chunks/{YVEWM3DE.js → GU34RIUR.js} +1 -1
  26. package/lib/chunks/{L3SH4LDY.js → H3CWVIT3.js} +1 -1
  27. package/lib/chunks/{ON2YZD5C.js → HET452FN.js} +1 -1
  28. package/lib/chunks/{HXPCC4OG.js → HG5B2AKP.js} +1 -1
  29. package/lib/chunks/{NUBOB7QM.js → HPYQF7FO.js} +2 -2
  30. package/lib/chunks/{KOEA2NZG.js → HQTUYG5X.js} +2 -2
  31. package/lib/chunks/{WLLP4IZS.js → HU6QTMHN.js} +1 -1
  32. package/lib/chunks/{IAAYM25M.js → IHFKHD4E.js} +1 -1
  33. package/lib/chunks/{BY6DKJ2R.js → IRF3OXDB.js} +1 -1
  34. package/lib/chunks/{OYDBXGWA.js → IZVG6IUS.js} +1 -1
  35. package/lib/chunks/{U5IK2ZXU.js → J32G7NQF.js} +4 -4
  36. package/lib/chunks/{OSFU2PWJ.js → JH6AK2RM.js} +1 -1
  37. package/lib/chunks/{HKVSCF3J.js → JMYCFXFO.js} +1 -1
  38. package/lib/chunks/{6KF4UNVM.js → KA43H34P.js} +1 -1
  39. package/lib/chunks/{W2AAAE7A.js → KHQEQ7SW.js} +1 -1
  40. package/lib/chunks/{EDTY75R2.js → KIFTQ6KG.js} +1 -1
  41. package/lib/chunks/{JGSM4NRA.js → KMGFC2JR.js} +1 -1
  42. package/lib/chunks/{5EHUKG3I.js → LEPQDSTM.js} +1 -1
  43. package/lib/chunks/{UYF7BOSD.js → LZUYKJND.js} +1 -1
  44. package/lib/chunks/{PGX27JIK.js → M5FZMXND.js} +1 -1
  45. package/lib/chunks/{NHOPECWM.js → MLLRCWW6.js} +1 -1
  46. package/lib/chunks/{FOXOWXSK.js → OKWRNBEY.js} +1 -1
  47. package/lib/chunks/{4WZNKPF4.js → OLVAP7AA.js} +1 -1
  48. package/lib/chunks/{ILGMLL46.js → OUNJECS6.js} +1 -1
  49. package/lib/chunks/{6JHVGOS4.js → PNADRNVV.js} +1 -1
  50. package/lib/chunks/{NFCO7FU3.js → QPNNEO3Y.js} +1 -1
  51. package/lib/chunks/{FP63LRP5.js → QT45SNBU.js} +1 -1
  52. package/lib/chunks/{46YO7ZAG.js → RIJ5NQKJ.js} +1 -1
  53. package/lib/chunks/{5DD7WY23.js → RV4QSDBS.js} +1 -1
  54. package/lib/chunks/{IH6TBN5D.js → SR776DY3.js} +1 -1
  55. package/lib/chunks/TO7JCTX3.js +20 -0
  56. package/lib/chunks/{DRSH6QBU.js → UNWO4KGQ.js} +1 -1
  57. package/lib/chunks/{YY44N7JX.js → VEVZJC25.js} +1 -1
  58. package/lib/chunks/{PVBX7API.js → VJQCED3T.js} +1 -1
  59. package/lib/chunks/{FHDBQIEB.js → WFKHK77N.js} +1 -1
  60. package/lib/chunks/{36DQZK3T.js → WH5ELPJC.js} +1 -1
  61. package/lib/chunks/{QAEXHBKV.js → WHI5PM5X.js} +1 -1
  62. package/lib/chunks/{YCJL4ZHF.js → WJLUIDSE.js} +1 -1
  63. package/lib/chunks/{M3VAMERP.js → XZIAEGVZ.js} +1 -1
  64. package/lib/chunks/{JZPKVDJA.js → XZNJU67S.js} +1 -1
  65. package/lib/chunks/{E3YDJXL6.js → Y5OFK6NL.js} +1 -1
  66. package/lib/chunks/{MOGSSUQO.js → YIXIZB5W.js} +1 -1
  67. package/lib/chunks/{OMDMN4SS.js → YQYR6TIT.js} +1 -1
  68. package/lib/chunks/YUHXZXUL.js +34 -0
  69. package/lib/chunks/{VL2MPFWQ.js → ZLAHBPRQ.js} +1 -1
  70. package/lib/chunks/{USAJ5FBD.js → ZMV5LF7Y.js} +1 -1
  71. package/lib/eject-assets/generators/cli/docs.ts +1 -1
  72. package/lib/eject-assets/generators/cli/engine-source.ts +1 -1
  73. package/lib/eject-assets/generators/cli/index.ts +2 -2
  74. package/lib/eject-assets/generators/cli/render.ts +1 -1
  75. package/lib/eject-assets/generators/go/client.ts +1 -1
  76. package/lib/eject-assets/generators/go/descriptor.ts +1 -1
  77. package/lib/eject-assets/generators/go/index.ts +2 -2
  78. package/lib/eject-assets/generators/go/models.ts +1 -1
  79. package/lib/eject-assets/generators/go/naming.ts +1 -1
  80. package/lib/eject-assets/generators/go/operations.ts +1 -1
  81. package/lib/eject-assets/generators/go/pagination.ts +1 -1
  82. package/lib/eject-assets/generators/go/types.ts +1 -1
  83. package/lib/eject-assets/generators/mock/faker.ts +1 -1
  84. package/lib/eject-assets/generators/mock/index.ts +2 -2
  85. package/lib/eject-assets/generators/mock/render.ts +1 -1
  86. package/lib/eject-assets/generators/mock/sample.ts +1 -1
  87. package/lib/eject-assets/generators/mock/values.ts +1 -1
  88. package/lib/eject-assets/generators/php/client.ts +1 -1
  89. package/lib/eject-assets/generators/php/descriptor.ts +1 -1
  90. package/lib/eject-assets/generators/php/index.ts +2 -2
  91. package/lib/eject-assets/generators/php/models.ts +4 -4
  92. package/lib/eject-assets/generators/php/naming.ts +1 -1
  93. package/lib/eject-assets/generators/php/operations.ts +1 -1
  94. package/lib/eject-assets/generators/php/pagination.ts +1 -1
  95. package/lib/eject-assets/generators/php/types.ts +1 -1
  96. package/lib/eject-assets/generators/python/client.ts +1 -1
  97. package/lib/eject-assets/generators/python/descriptor.ts +1 -1
  98. package/lib/eject-assets/generators/python/index.ts +2 -2
  99. package/lib/eject-assets/generators/python/models.ts +44 -19
  100. package/lib/eject-assets/generators/python/naming.ts +1 -1
  101. package/lib/eject-assets/generators/python/operations.ts +1 -1
  102. package/lib/eject-assets/generators/python/pagination.ts +1 -1
  103. package/lib/eject-assets/generators/python/types.ts +1 -1
  104. package/lib/eject-assets/generators/swr/index.ts +2 -2
  105. package/lib/eject-assets/generators/swr/render.ts +1 -1
  106. package/lib/eject-assets/generators/tanstack-query/index.ts +2 -2
  107. package/lib/eject-assets/generators/tanstack-query/render.ts +1 -1
  108. package/lib/eject-assets/generators/transformers/index.ts +2 -2
  109. package/lib/eject-assets/generators/transformers/render.ts +1 -1
  110. package/lib/eject-assets/generators/typescript/banner.ts +1 -1
  111. package/lib/eject-assets/generators/typescript/client.ts +1 -1
  112. package/lib/eject-assets/generators/typescript/descriptor.ts +1 -1
  113. package/lib/eject-assets/generators/typescript/index.ts +2 -2
  114. package/lib/eject-assets/generators/typescript/inline-runtime.ts +1 -1
  115. package/lib/eject-assets/generators/typescript/operation-signature.ts +1 -1
  116. package/lib/eject-assets/generators/typescript/operation-types.ts +1 -1
  117. package/lib/eject-assets/generators/typescript/operations.ts +1 -1
  118. package/lib/eject-assets/generators/typescript/response-headers.ts +1 -1
  119. package/lib/eject-assets/generators/typescript/type-guards.ts +1 -1
  120. package/lib/eject-assets/generators/typescript/types.ts +1 -1
  121. package/lib/eject-assets/generators/zod/index.ts +2 -2
  122. package/lib/eject-assets/generators/zod/schemas.ts +1 -1
  123. package/lib/eject-assets/skills/php-generator/SKILL.md +3 -1
  124. package/lib/eject-assets/skills/python-generator/SKILL.md +2 -1
  125. package/lib/index.js +5 -5
  126. package/package.json +1 -1
  127. package/lib/chunks/FNQMGCDF.js +0 -20
  128. package/lib/chunks/U7CHKSVN.js +0 -34
@@ -4,4 +4,4 @@ import { dirname as __pathDirname } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  var __filename = __fileURLToPath(import.meta.url);
6
6
  var __dirname = __pathDirname(__filename);
7
- import{a}from"./5DD7WY23.js";import"./PVBX7API.js";import"./WLLP4IZS.js";import"./Q7Y4MUA7.js";import"./4WRQYZGD.js";import"./WZXA5XPB.js";import"./K4IZRPJV.js";import"./NEWT5A6S.js";import"./LD5MEXEL.js";import"./UW4UC7ZI.js";import"./RFWIIJFG.js";export{a as swrGenerator};
7
+ import{a}from"./RV4QSDBS.js";import"./VJQCED3T.js";import"./HU6QTMHN.js";import"./2AJDP47K.js";import"./CCZY5XJV.js";import"./WZXA5XPB.js";import"./4JI4GT6B.js";import"./NEWT5A6S.js";import"./LD5MEXEL.js";import"./UW4UC7ZI.js";import"./RFWIIJFG.js";export{a as swrGenerator};
@@ -4,7 +4,7 @@ import { dirname as __pathDirname } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  var __filename = __fileURLToPath(import.meta.url);
6
6
  var __dirname = __pathDirname(__filename);
7
- import{a as x,b as y,c as g,d}from"./PVBX7API.js";import{b as P,d as h,e as m}from"./LD5MEXEL.js";import{m as v}from"./UW4UC7ZI.js";import{join as B}from"node:path";function b(e,t){let n=x(e,"tanstack-query");if(n.length===0)return"";let r=t.pagination??new Map;return[I(n,t,r),...n.some(s=>M(s,r))?[j]:[],...n.filter(y).map(s=>F(s,t.queryKeyPrefix)),S(e,n,r,t.queryKeyPrefix,t.argsStyle),...E(n,r)].join(`
7
+ import{a as x,b as y,c as g,d}from"./VJQCED3T.js";import{b as P,d as h,e as m}from"./LD5MEXEL.js";import{m as v}from"./UW4UC7ZI.js";import{join as B}from"node:path";function b(e,t){let n=x(e,"tanstack-query");if(n.length===0)return"";let r=t.pagination??new Map;return[I(n,t,r),...n.some(s=>M(s,r))?[j]:[],...n.filter(y).map(s=>F(s,t.queryKeyPrefix)),S(e,n,r,t.queryKeyPrefix,t.argsStyle),...E(n,r)].join(`
8
8
  `)}function p(e,t){if(!y(e))return!1;let n=t.get(e.name);return n===void 0||n.spec.style==="link"?!1:n.spec.style!=="body-link"||e.queryParams.length>0}function M(e,t){return p(e,t)&&t.get(e.name)?.spec.style==="body-link"}var j=`/** The query parameters of a next-page link; a repeated key becomes an array. */
9
9
  const nextLinkQuery = (link: string) => {
10
10
  const query: Record<string, string | string[]> = {};
@@ -4,7 +4,7 @@ import { dirname as __pathDirname } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  var __filename = __fileURLToPath(import.meta.url);
6
6
  var __dirname = __pathDirname(__filename);
7
- import{a as o,b as t,c as e}from"./HBUZKWXC.js";import{ia as r}from"./K4IZRPJV.js";import"./NEWT5A6S.js";import"./RFWIIJFG.js";import{spawn as p}from"node:child_process";var u=async({argv:n})=>{r.info(`
7
+ import{a as o,b as t,c as e}from"./HBUZKWXC.js";import{ia as r}from"./4JI4GT6B.js";import"./NEWT5A6S.js";import"./RFWIIJFG.js";import{spawn as p}from"node:child_process";var u=async({argv:n})=>{r.info(`
8
8
  Launching translate using NPX.
9
9
 
10
10
  `);let{npxExecutableName:s,sanitize:a,shell:i}=e(),l=a(n["project-dir"],o),c=a(n.locale,t);p(s,["-y","@redocly/realm","translate",c,`-d=${l}`],{stdio:"inherit",shell:i}).on("error",m=>{throw r.info(`Translate launch failed: ${m.message}`),new Error("Translate launch failed.")})};export{u as handleTranslations};
@@ -0,0 +1,34 @@
1
+ import { createRequire as __createRequire } from 'node:module';
2
+ import { fileURLToPath as __fileURLToPath } from 'node:url';
3
+ import { dirname as __pathDirname } from 'node:path';
4
+ const require = __createRequire(import.meta.url);
5
+ var __filename = __fileURLToPath(import.meta.url);
6
+ var __dirname = __pathDirname(__filename);
7
+ import{a as p,b as U,c as F,d as R,e as j}from"./U5DIFWGH.js";import{b as O}from"./RIJ5NQKJ.js";import{ba as $,c as b,ca as A,ga as v,ia as k,l as P,oa as d}from"./4JI4GT6B.js";import"./NEWT5A6S.js";import"./RFWIIJFG.js";import{readFileSync as H}from"node:fs";import{mkdir as B,writeFile as D}from"node:fs/promises";import{basename as I,dirname as S,extname as N,isAbsolute as L,relative as x,resolve as f}from"node:path";var V=/^[a-z][a-z0-9+.-]+:/i;function W(e,t){let{setup:i}=e;if(typeof i!="string")return e;if(V.test(i))throw new d(`
8
+ \u274C \`client.setup\` must be a local file path \u2014 remote setup modules are not supported.
9
+ Got: ${i}
10
+ `);return L(i)?e:{...e,setup:f(t,i)}}function q(e){return`${e.replace(/[\\/]/g,"_")}.client.ts`}function J(e){if(e.startsWith("//"))return!1;if(e.startsWith("/"))return!0;try{let t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"}catch{return!1}}async function se({argv:e,config:t,collectSpecData:i}){let{AUTHORING_HELPER_NAMES:r,generateClient:m,mergeConfig:n}=await import("./D4U2LEEI.js"),l=t.configPath?S(t.configPath):process.cwd(),o={serverUrl:e["server-url"],outputMode:e["output-mode"],runtime:e.runtime,importExt:e["import-ext"],goPackage:e["go-package"],argsStyle:e["args-style"],errorMode:e["error-mode"],dateType:e["date-type"],mockData:e["mock-data"],mockSeed:e["mock-seed"],docs:e.docs,generators:e.generator?.map(c=>c.startsWith(".")?f(c):c),setup:e.setup===void 0?void 0:W({setup:e.setup},process.cwd()).setup},s=t.resolvedConfig.apis??{},a=Object.keys(s).filter(c=>b(s[c].client)||s[c].clientOutput!==void 0);if(e.api===void 0){if(e.output)throw new d("\n\u274C --output can't target multiple APIs. Set `clientOutput` under each api in redocly.yaml, or pass a single <api>.\n");if(a.length===0)throw new d("\n\u274C No API to generate. Add a `client` block or `clientOutput` under an `apis:` entry, or pass <api> (a file/URL or an `apis:` alias).\n")}let h=await O(e.api===void 0?a:[e.api],t),g={config:t,collectSpecData:i,configDir:l,cliFlags:o,outputFlag:e.output,toolkit:{generateClient:m,mergeConfig:n,helperNames:r},seenOutputs:new Set,composable:[]};for(let c of h)await K(c,g);let w=b(t.resolvedConfig.client)?t.resolvedConfig.client:{};w.cliOutput!==void 0&&e.api===void 0&&g.composable.length>0&&await Q(w.cliOutput,g)}async function K(e,{config:t,collectSpecData:i,configDir:r,cliFlags:m,outputFlag:n,toolkit:l,seenOutputs:o,composable:s}){let{path:a,alias:h}=e,g=h??I(a,N(a)),w=t.forAlias(h),{client:c,clientOutput:E}=w.resolvedConfig,M=W(b(c)?c:{},r),C=l.mergeConfig(M,m);X(C.generators??[],l.helperNames,r);let y=n!==void 0?f(n):E!==void 0?f(r,E):f(r,q(g));if(!y.endsWith(".ts"))throw new d(`
11
+ \u274C output must point at a TypeScript file (ending in .ts).
12
+ Got: ${y}
13
+ `);if(o.has(y))throw new d(`
14
+ \u274C Two APIs write to the same path: ${y}.
15
+ Give each api a distinct \`clientOutput\`.
16
+ `);if(o.add(y),C.serverUrl!==void 0&&!J(C.serverUrl))throw new d(`
17
+ \u274C serverUrl must be an absolute URL (https://api.example.com) or a root-relative path (/v1) \u2014 set via --server-url or the \`client\` block in redocly.yaml.
18
+ Got: ${C.serverUrl}
19
+ `);try{k.info(v(`
20
+ Generating client for ${g}...
21
+ `));let u=await l.generateClient({...C,api:a,output:y,config:w,configDir:r,collectSpecData:i}),_=u.files.find(G=>G.path.endsWith(".cli.ts"));if(_!==void 0){let G=C.importExt??"js";s.push({alias:g,cliPath:_.path.replace(/\.ts$/,G==="ts"?".ts":".js")})}for(let G of u.files)o.add(G.path);let z=`Client successfully generated: ${`${u.files.length} ${P("file",u.files.length)}`} (${u.bytes} bytes) at ${$(u.outputPath)}.`;k.info(`
22
+ `+A(z)+`
23
+ `)}catch(u){let _=u instanceof Error?u.message:String(u);throw p.generate_client_error_category=j(_),new d(`
24
+ \u274C Failed to generate client for ${g}.
25
+ ${_}
26
+ `)}}async function Q(e,{configDir:t,seenOutputs:i,composable:r}){let{renderComposedCliEntry:m}=await import("./OLVAP7AA.js"),n=f(t,e);if(!n.endsWith(".ts"))throw new d(`
27
+ \u274C client.cliOutput must point at a TypeScript file (ending in .ts).
28
+ Got: ${n}
29
+ `);if(i.has(n))throw new d(`
30
+ \u274C client.cliOutput resolves to a file this run generated: ${n}.
31
+ Give the composed entry its own path.
32
+ `);let l=I(n,N(n)),o=m(r.map(({alias:s,cliPath:a})=>({alias:s,modulePath:`./${x(S(n),a).split("\\").join("/")}`})),l);await B(S(n),{recursive:!0}),await D(n,o,"utf-8"),p.generate_client_composed_apis_count=r.length,k.info(`
33
+ `+A(`Composed CLI written to ${$(x(process.cwd(),n))} \u2014 ${r.map(({alias:s})=>s).join(", ")} behind one \`${l}\` binary.`)+`
34
+ `)}var T=new Set;function X(e,t,i){let r=new Set(p.generate_client_builtin_generators??[]),m=new Set(p.generate_client_toolkit_imports??[]),n=new Set(p.generate_client_ejected_generators??[]),l=p.generate_client_custom_generators_count??0;for(let o of e){if(U.has(o)){r.add(o);continue}if(!T.has(o)&&(T.add(o),l++,o.startsWith(".")||L(o)))try{let s=H(f(i,o),"utf-8");for(let h of F(s,t))m.add(h);let a=R(s);a&&n.add(`${a.name}@${a.version}`)}catch{}}p.generate_client_builtin_generators=[...r],p.generate_client_custom_generators_count=l,p.generate_client_toolkit_imports=[...m],p.generate_client_ejected_generators=[...n]}export{X as collectGeneratorUsage,se as handleGenerateClient};
@@ -4,7 +4,7 @@ import { dirname as __pathDirname } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  var __filename = __fileURLToPath(import.meta.url);
6
6
  var __dirname = __pathDirname(__filename);
7
- import{a as G}from"./HAOBCQWB.js";import{b as j,c as N,d as Q,e as O,f as Z,g as Y,h as X,i as ee,j as ne}from"./Q7Y4MUA7.js";import{a as H}from"./WZXA5XPB.js";import{a as F,b as W,c as L,d as x,e as _,g as A,h as U,i as z,j as K,k as J,l as D,n as V}from"./UW4UC7ZI.js";var B=L.go,P=class extends F{constructor(){super(" ")}typeName(t){return d(t)}memberName(t){return d(t)}identifier(t){return x(t,{style:"camel",reserved:B})}identifiers(t,n){let r=new Set(n??[]);return t.map(o=>{let s=d(o),a=s;for(let i=2;r.has(a);i++)a=`${s}${i}`;return r.add(a),a})}packageName(t){let n=t.toLowerCase().replace(/[^a-z0-9]/g,"");return n===""||/^[0-9]/.test(n)?"client":n}string(t){let n='"';for(let r of t){let o=r.codePointAt(0);r==="\\"?n+="\\\\":r==='"'?n+='\\"':r===`
7
+ import{a as G}from"./HAOBCQWB.js";import{b as j,c as N,d as Q,e as O,f as Z,g as Y,h as X,i as ee,j as ne}from"./2AJDP47K.js";import{a as H}from"./WZXA5XPB.js";import{a as F,b as W,c as L,d as x,e as _,g as A,h as U,i as z,j as K,k as J,l as D,n as V}from"./UW4UC7ZI.js";var B=L.go,P=class extends F{constructor(){super(" ")}typeName(t){return d(t)}memberName(t){return d(t)}identifier(t){return x(t,{style:"camel",reserved:B})}identifiers(t,n){let r=new Set(n??[]);return t.map(o=>{let s=d(o),a=s;for(let i=2;r.has(a);i++)a=`${s}${i}`;return r.add(a),a})}packageName(t){let n=t.toLowerCase().replace(/[^a-z0-9]/g,"");return n===""||/^[0-9]/.test(n)?"client":n}string(t){let n='"';for(let r of t){let o=r.codePointAt(0);r==="\\"?n+="\\\\":r==='"'?n+='\\"':r===`
8
8
  `?n+="\\n":r==="\r"?n+="\\r":r===" "?n+="\\t":o<32||o===127?n+=`\\x${o.toString(16).padStart(2,"0")}`:o>=55296&&o<=57343?n+="\\uFFFD":n+=r}return n+'"'}literal(t){return t==null?"nil":typeof t=="boolean"||typeof t=="number"?String(t):typeof t=="string"?this.string(t):Array.isArray(t)?`[]any{${t.map(r=>this.literal(r)).join(", ")}}`:`map[string]any{${Object.entries(t).map(([r,o])=>`${this.string(r)}: ${this.literal(o)}`).join(", ")}}`}comment(t){for(let n of D(t))this.line(n===""?"//":`// ${n}`);return this}doc(t,n){let r=D(n);if(r.length===0)return this;this.line(`// ${t} \u2014 ${r[0]}`);let o=!1;for(let s of r.slice(1)){if(s===""){o||this.line("//"),o=!0;continue}this.line(`// ${s}`),o=!1}return this}layout(t){return ue(fe(t))}toString(){return this.layout(super.toString())}};function d(e){let t=x(e,{style:"pascal",reserved:B});return t.startsWith("_")?`N${t.slice(1)}`:t}function ue(e){return`${e.replace(/\n{3,}/g,`
9
9
 
10
10
  `).trimEnd()}
@@ -4,7 +4,7 @@ import { dirname as __pathDirname } from 'node:path';
4
4
  const require = __createRequire(import.meta.url);
5
5
  var __filename = __fileURLToPath(import.meta.url);
6
6
  var __dirname = __pathDirname(__filename);
7
- import{a as C,b as Z,c as ee,d as Ne,e as te,f as ne,g as Se,h as oe}from"./7NPQH3V7.js";import{a as Fe,b as De}from"./64G5RPLP.js";import{f as de,g as L,h as ue,i as Ce,l as W,m as h,n as Oe}from"./46YO7ZAG.js";import{$ as le,O as pe,S as ce,T as fe,aa as ye,b as me,c as j,ca as u,d as O,h as ae,ia as N,ka as he,o as A,oa as S,r as d,t as v,va as ge,wa as Ae}from"./K4IZRPJV.js";import"./NEWT5A6S.js";import"./RFWIIJFG.js";import*as U from"node:fs";import*as Ge from"node:path";import{performance as Xe}from"perf_hooks";import*as G from"node:path";import*as R from"node:path";function F(e,t,o){let n=R.resolve(e),r=R.resolve(t);if(r!==n&&!r.startsWith(n+R.sep))throw new S(`Refusing to write "${o}" outside the output directory.`)}import*as we from"node:path";function D(e,t,o,n,r){let m=o?`.${o}`:"",a=we.join(e,t),i=a+m,p=n.get(i.toLowerCase());for(let s=2;n.has(i.toLowerCase());s++)i=`${a}-${s}${m}`;return r&&p&&p!==t&&p.toLowerCase()===t.toLowerCase()&&r.conflicts.push({name:t,collidingName:p,filename:i,pointer:r.pointer}),n.set(i.toLowerCase(),t),i}function $(e,t,o,n,r,m,a){let i={},p=new Map;for(let[s,c]of Object.entries(e||{})){if(d(c))continue;let f=D(n,L(s,r),m,p,{conflicts:a,pointer:`${t}/${v(s)}`});F(o,f,s),i[s]=f}return i}import*as Pe from"node:path";function g(e,t,o={}){Se(e,r=>{if(d(r)&&oe(r.$ref))n(r,"$ref");else if(j(r.discriminator)&&j(r.discriminator.mapping)){let{mapping:m}=r.discriminator;for(let a of Object.keys(m)){let i=m[a];typeof i=="string"&&oe(i)&&n(r.discriminator.mapping,a)}}});function n(r,m){let a=r[m].split("/"),i=a.pop(),p=a[2],s=o[p];if(!s||!s[i])return;let c=A(Pe.relative(t,s[i].filename));c.startsWith(".")||(c="./"+c),r[m]=c}}function Y(e,t,o="warn"){if(o==="off"||e.length===0)return;let n=e.map(({name:r,collidingName:m,filename:a,pointer:i})=>({ruleId:"split",severity:o,message:`${r} and ${m} would share one file on a case-insensitive file system`+(o==="error"?".":`, saving ${r} to ${a}.`),location:[{source:t,pointer:i,reportOnKey:!0}],suggest:[]}));if(Ae(n,{totals:ge(n),command:"split"}),o==="error")throw new S("\u274C Errors encountered while splitting: files not created.")}import*as ie from"node:path";var Ee=["schemas","messages","securitySchemes","parameters","correlationIds","messageTraits","operationTraits","serverBindings","channelBindings","operationBindings","messageBindings"];var xe=["schemas","messages","securitySchemes","servers","serverVariables","parameters","replies","replyAddresses","correlationIds","messageTraits","operationTraits","tags","externalDocs","serverBindings","channelBindings","operationBindings","messageBindings"];function H(e,t){return(t==="async2"?Ee:xe).filter(n=>n in e)}function ve({asyncapi:e,asyncapiDir:t,componentsFiles:o,ext:n,specVersion:r,conflicts:m}){let a=e.components;if(!a)return;let i=ie.join(t,C),p=H(a,r);for(let s of p){let c=ie.join(i,s),f=new Map;for(let l of Object.keys(a[s]||{})){let y=D(c,l,n,f,{conflicts:m,pointer:`#/components/${s}/${v(l)}`});F(t,y,l),o[s]=o[s]||{},o[s][l]={filename:y}}}}import*as be from"node:fs";import*as V from"node:path";import*as P from"node:fs";import*as $e from"node:path";function E(e,t,o){if(!P.existsSync(e)||!P.statSync(e).isDirectory())return;let n=P.readdirSync(e);for(let r of n){let m=$e.join(e,r);P.statSync(m).isDirectory()?E(m,t,o):t(m,e,o)}}function b(e,t,o){if(!ce(e))return;let n=W(e);g(n,t,o),h(n,e)}function Te({channels:e,channelsFiles:t,asyncapiDir:o,outDir:n,componentsFiles:r}){if(e){be.mkdirSync(n,{recursive:!0});for(let m of Object.keys(e)){let a=e[m];if(d(a))continue;let i=t[m];g(a,V.dirname(i),r),h(a,i),e[m]={$ref:A(V.relative(o,i))},E(n,b,r)}}}import*as Be from"node:fs";import*as k from"node:path";import*as ke from"node:fs";function K(e){return e!=="securitySchemes"}function z(e,t){K(t)&&ke.mkdirSync(e,{recursive:!0})}import*as je from"node:fs";function q(e,t){return je.existsSync(e)&&!me(W(e),t)}import*as Re from"node:path";function T(e,t,o){if(!(!j(e)&&!Array.isArray(e))){if(Array.isArray(e)){for(let n of e)T(n,t,o);return}for(let n of Object.keys(e)){let r=e[n];if(n==="$ref"&&typeof r=="string"&&r.startsWith("#/channels/")){let m=r.slice(11),a=m.indexOf("/"),i=a===-1?m:m.slice(0,a),p=a===-1?"":m.slice(a),s=o[i];if(s){let c=A(Re.relative(t,s));e[n]=p?`${c}#${p}`:c}}else T(r,t,o)}}}function _e(e,t){let o=e.components;o&&(O(o[t])&&delete o[t],O(o)&&delete e.components)}function Ie({asyncapi:e,asyncapiDir:t,componentsFiles:o,channelsFiles:n,specVersion:r}){let m=e.components;if(m){let p=function(s){let c=k.join(a,s);z(c,s);for(let f of Object.keys(m?.[s]||{})){let{filename:l}=o[s][f],y=m?.[s]?.[f];g(y,k.dirname(l),o),T(y,k.dirname(l),n),q(l,y)?N.warn(`warning: conflict for ${f} - file already exists with different content: ${u(l)} ... Skip.
7
+ import{a as C,b as Z,c as ee,d as Ne,e as te,f as ne,g as Se,h as oe}from"./3HSHTOK2.js";import{a as Fe,b as De}from"./64G5RPLP.js";import{f as de,g as L,h as ue,i as Ce,l as W,m as h,n as Oe}from"./RIJ5NQKJ.js";import{$ as le,O as pe,S as ce,T as fe,aa as ye,b as me,c as j,ca as u,d as O,h as ae,ia as N,ka as he,o as A,oa as S,r as d,t as v,va as ge,wa as Ae}from"./4JI4GT6B.js";import"./NEWT5A6S.js";import"./RFWIIJFG.js";import*as U from"node:fs";import*as Ge from"node:path";import{performance as Xe}from"perf_hooks";import*as G from"node:path";import*as R from"node:path";function F(e,t,o){let n=R.resolve(e),r=R.resolve(t);if(r!==n&&!r.startsWith(n+R.sep))throw new S(`Refusing to write "${o}" outside the output directory.`)}import*as we from"node:path";function D(e,t,o,n,r){let m=o?`.${o}`:"",a=we.join(e,t),i=a+m,p=n.get(i.toLowerCase());for(let s=2;n.has(i.toLowerCase());s++)i=`${a}-${s}${m}`;return r&&p&&p!==t&&p.toLowerCase()===t.toLowerCase()&&r.conflicts.push({name:t,collidingName:p,filename:i,pointer:r.pointer}),n.set(i.toLowerCase(),t),i}function $(e,t,o,n,r,m,a){let i={},p=new Map;for(let[s,c]of Object.entries(e||{})){if(d(c))continue;let f=D(n,L(s,r),m,p,{conflicts:a,pointer:`${t}/${v(s)}`});F(o,f,s),i[s]=f}return i}import*as Pe from"node:path";function g(e,t,o={}){Se(e,r=>{if(d(r)&&oe(r.$ref))n(r,"$ref");else if(j(r.discriminator)&&j(r.discriminator.mapping)){let{mapping:m}=r.discriminator;for(let a of Object.keys(m)){let i=m[a];typeof i=="string"&&oe(i)&&n(r.discriminator.mapping,a)}}});function n(r,m){let a=r[m].split("/"),i=a.pop(),p=a[2],s=o[p];if(!s||!s[i])return;let c=A(Pe.relative(t,s[i].filename));c.startsWith(".")||(c="./"+c),r[m]=c}}function Y(e,t,o="warn"){if(o==="off"||e.length===0)return;let n=e.map(({name:r,collidingName:m,filename:a,pointer:i})=>({ruleId:"split",severity:o,message:`${r} and ${m} would share one file on a case-insensitive file system`+(o==="error"?".":`, saving ${r} to ${a}.`),location:[{source:t,pointer:i,reportOnKey:!0}],suggest:[]}));if(Ae(n,{totals:ge(n),command:"split"}),o==="error")throw new S("\u274C Errors encountered while splitting: files not created.")}import*as ie from"node:path";var Ee=["schemas","messages","securitySchemes","parameters","correlationIds","messageTraits","operationTraits","serverBindings","channelBindings","operationBindings","messageBindings"];var xe=["schemas","messages","securitySchemes","servers","serverVariables","parameters","replies","replyAddresses","correlationIds","messageTraits","operationTraits","tags","externalDocs","serverBindings","channelBindings","operationBindings","messageBindings"];function H(e,t){return(t==="async2"?Ee:xe).filter(n=>n in e)}function ve({asyncapi:e,asyncapiDir:t,componentsFiles:o,ext:n,specVersion:r,conflicts:m}){let a=e.components;if(!a)return;let i=ie.join(t,C),p=H(a,r);for(let s of p){let c=ie.join(i,s),f=new Map;for(let l of Object.keys(a[s]||{})){let y=D(c,l,n,f,{conflicts:m,pointer:`#/components/${s}/${v(l)}`});F(t,y,l),o[s]=o[s]||{},o[s][l]={filename:y}}}}import*as be from"node:fs";import*as V from"node:path";import*as P from"node:fs";import*as $e from"node:path";function E(e,t,o){if(!P.existsSync(e)||!P.statSync(e).isDirectory())return;let n=P.readdirSync(e);for(let r of n){let m=$e.join(e,r);P.statSync(m).isDirectory()?E(m,t,o):t(m,e,o)}}function b(e,t,o){if(!ce(e))return;let n=W(e);g(n,t,o),h(n,e)}function Te({channels:e,channelsFiles:t,asyncapiDir:o,outDir:n,componentsFiles:r}){if(e){be.mkdirSync(n,{recursive:!0});for(let m of Object.keys(e)){let a=e[m];if(d(a))continue;let i=t[m];g(a,V.dirname(i),r),h(a,i),e[m]={$ref:A(V.relative(o,i))},E(n,b,r)}}}import*as Be from"node:fs";import*as k from"node:path";import*as ke from"node:fs";function K(e){return e!=="securitySchemes"}function z(e,t){K(t)&&ke.mkdirSync(e,{recursive:!0})}import*as je from"node:fs";function q(e,t){return je.existsSync(e)&&!me(W(e),t)}import*as Re from"node:path";function T(e,t,o){if(!(!j(e)&&!Array.isArray(e))){if(Array.isArray(e)){for(let n of e)T(n,t,o);return}for(let n of Object.keys(e)){let r=e[n];if(n==="$ref"&&typeof r=="string"&&r.startsWith("#/channels/")){let m=r.slice(11),a=m.indexOf("/"),i=a===-1?m:m.slice(0,a),p=a===-1?"":m.slice(a),s=o[i];if(s){let c=A(Re.relative(t,s));e[n]=p?`${c}#${p}`:c}}else T(r,t,o)}}}function _e(e,t){let o=e.components;o&&(O(o[t])&&delete o[t],O(o)&&delete e.components)}function Ie({asyncapi:e,asyncapiDir:t,componentsFiles:o,channelsFiles:n,specVersion:r}){let m=e.components;if(m){let p=function(s){let c=k.join(a,s);z(c,s);for(let f of Object.keys(m?.[s]||{})){let{filename:l}=o[s][f],y=m?.[s]?.[f];g(y,k.dirname(l),o),T(y,k.dirname(l),n),q(l,y)?N.warn(`warning: conflict for ${f} - file already exists with different content: ${u(l)} ... Skip.
8
8
  `):h(y,l),delete m?.[s]?.[f]}_e(e,s)},a=k.join(t,C);Be.mkdirSync(a,{recursive:!0}),H(m,r).forEach(p)}}import*as Me from"node:fs";import*as _ from"node:path";function Le({operations:e,operationFiles:t,asyncapiDir:o,outDir:n,componentsFiles:r,channelsFiles:m}){if(e){Me.mkdirSync(n,{recursive:!0});for(let a of Object.keys(e)){let i=e[a];if(d(i))continue;let p=t[a];g(i,_.dirname(p),r),T(i,_.dirname(p),m),h(i,p),e[a]={$ref:A(_.relative(o,p))},E(n,b,r)}}}function We({asyncapi:e,asyncapiDir:t,pathSeparator:o,ext:n,specVersion:r,source:m,fileNameConflictsSeverity:a}){let i=G.join(t,te),p=G.join(t,ne),s=r==="async3"?e.operations:void 0,c={},f=[];ve({asyncapi:e,asyncapiDir:t,componentsFiles:c,ext:n,specVersion:r,conflicts:f});let l=$(e.channels,`#/${te}`,t,i,o,n,f),y=$(s,`#/${ne}`,t,p,o,n,f);Y(f,m,a),Te({channels:e.channels,channelsFiles:l,asyncapiDir:t,outDir:i,componentsFiles:c}),Ie({asyncapi:e,asyncapiDir:t,componentsFiles:c,channelsFiles:l,specVersion:r}),Le({operations:s,operationFiles:y,asyncapiDir:t,outDir:p,componentsFiles:c,channelsFiles:l}),g(e,t,c),h(e,G.join(t,`asyncapi.${n}`))}import*as Q from"node:path";import*as se from"node:path";function X(e){return e?De.filter(t=>K(t)&&Object.keys(e).includes(t)):[]}function Ye(e,t,o,n,r){let{components:m}=e;if(!m)return;let a=se.join(t,C);for(let i of X(m)){let p=se.join(a,i),s=new Map;for(let c of Object.keys(m[i]||{})){let f=D(p,c,n,s,{conflicts:r,pointer:`#/components/${i}/${v(c)}`});F(t,f,c);let l=[];i==="schemas"&&(l=(m[i]?.[c]?.allOf||[]).map(({$ref:y})=>y).filter(ae)),o[i]=o[i]||{},o[i][c]={inherits:l,filename:f}}}}import*as Ke from"node:fs";import*as B from"node:path";import*as J from"node:path";function He(e,t,o,n){if(!e.discriminator)return;let r=`#/${C}/schemas/${t}`,m={};for(let[s,{inherits:c,filename:f}]of Object.entries(n))if(c.indexOf(r)>-1){let l=A(J.relative(J.dirname(o),f));m[s]=l.startsWith(".")?l:"./"+l}if(O(m))return;let a=e.properties[e.discriminator.propertyName],i=a&&a.enum,p=e.discriminator.mapping=e.discriminator.mapping||{};for(let s of Object.keys(m))i&&!i.includes(s)||(p[s]&&p[s]!==m[s]&&N.warn(`warning: explicit mapping overlaps with local mapping entry ${le(s)} at ${u(o)}. Please check it.`),p[s]=m[s])}function Ve(e,t){e.components&&O(e.components[t])&&delete e.components[t],O(e.components)&&delete e.components}function ze(e,t,o){let{components:n}=e;if(n){let a=function(i){let p=B.join(r,i);z(p,i);for(let s of Object.keys(n?.[i]||{})){let{filename:c}=o[i][s],f=n?.[i]?.[s];g(f,B.dirname(c),o),He(f,s,c,o.schemas||{}),q(c,f)?N.warn(`warning: conflict for ${s} - file already exists with different content: ${u(c)} ... Skip.
9
9
  `):h(f,c),delete e.components?.[i]?.[s]}Ve(e,i)},r=B.join(t,C);Ke.mkdirSync(r,{recursive:!0}),X(n).forEach(a)}}import*as I from"node:fs";import*as x from"node:path";function re(e,t,o,n,r,m,a=""){if(!e)return;I.mkdirSync(n,{recursive:!0});let i=new Map;for(let p of Object.keys(e)){let s=e[p];if(d(s))continue;let c=t[p];for(let f of Fe){let l=s[f],y=l?.["x-code-samples"]||l?.["x-codeSamples"];if(!(!y||!Array.isArray(y)))for(let w of y){if(w.source&&w.source.$ref)continue;let M=D(x.join(o,"code_samples",ue(w.lang),a+L(p,m)),f,Ce(w.lang).slice(1),i);F(o,M,w.lang),I.mkdirSync(x.dirname(M),{recursive:!0}),I.writeFileSync(M,w.source),w.source={$ref:A(x.relative(n,M))}}}h(s,c),e[p]={$ref:A(x.relative(o,c))},E(n,b,r)}}function qe(e,t,o,n,r,m){let a=Q.join(t,Z),i=Q.join(t,ee),p=e.webhooks||e["x-webhooks"],s="webhooks"in e&&e.webhooks?`#/${ee}`:`#/${Ne}`,c={},f=[];Ye(e,t,c,n,f);let l=$(e.paths,`#/${Z}`,t,a,o,n,f),y=$(p,s,t,i,o,n,f);Y(f,r,m),ze(e,t,c),re(e.paths,l,t,a,c,o),re(p,y,t,i,c,o,"webhook_"),g(e,t,c),h(e,Q.join(t,`openapi.${n}`))}async function ro({argv:e,collectSpecData:t}){let o=Xe.now(),{api:n,outDir:r,separator:m}=e,a=Oe(n);if(!U.existsSync(n))throw new S(`File ${u(n)} does not exist.`);let i=new fe(Ge.resolve(n),U.readFileSync(n,"utf-8")),p=pe(i.body,{filename:n});t?.({parsed:p});let s=he(p);switch(s){case"async2":case"async3":We({asyncapi:p,asyncapiDir:r,pathSeparator:m,ext:a,specVersion:s,source:i,fileNameConflictsSeverity:e["file-name-conflicts-severity"]});break;case"oas3_0":case"oas3_1":case"oas3_2":qe(p,r,m,a,i,e["file-name-conflicts-severity"]);break;case"oas2":throw new S("OpenAPI 2 is not supported by this command.");default:throw new S("File does not conform to the OpenAPI or AsyncAPI Specification. Version is not specified.")}N.info(`\u{1FA93} Document: ${u(n)} ${ye("is successfully split")}
10
10
  and all related files are saved to the directory: ${u(r)}
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "cli" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "cli" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator cli --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "cli" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "cli" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator cli --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "cli" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "cli" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator cli --update`.
@@ -86,5 +86,5 @@ export default {
86
86
  docs: cliDocs,
87
87
  requires: ["typescript","zod"],
88
88
  errorModes: ["throw"],
89
- requiresGenerator: '^0.7.4',
89
+ requiresGenerator: '^0.7.6',
90
90
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "cli" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "cli" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator cli --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "go" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator go --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "go" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator go --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "go" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator go --update`.
@@ -332,5 +332,5 @@ export default {
332
332
  "argsStyle": "inputs follow the target language's own idiom",
333
333
  "importExt": "the generated file has no relative imports"
334
334
  },
335
- requiresGenerator: '^0.7.4',
335
+ requiresGenerator: '^0.7.6',
336
336
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "go" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator go --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "go" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator go --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "go" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator go --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "go" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator go --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "go" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator go --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "mock" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator mock --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "mock" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator mock --update`.
@@ -31,5 +31,5 @@ export default {
31
31
  name: 'mock',
32
32
  run: mockGenerator,
33
33
  requires: ["typescript"],
34
- requiresGenerator: '^0.7.4',
34
+ requiresGenerator: '^0.7.6',
35
35
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "mock" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator mock --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "mock" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator mock --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "mock" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator mock --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "php" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator php --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "php" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator php --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "php" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator php --update`.
@@ -234,5 +234,5 @@ export default {
234
234
  "argsStyle": "inputs follow the target language's own idiom",
235
235
  "importExt": "the generated file has no relative imports"
236
236
  },
237
- requiresGenerator: '^0.7.4',
237
+ requiresGenerator: '^0.7.6',
238
238
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "php" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator php --update`.
@@ -254,9 +254,9 @@ export function renderPhpModels(model: ApiModel, dateType: DateType = 'string'):
254
254
  `return match ($data[${phpString(cases.property)}] ?? null) {`,
255
255
  () => {
256
256
  for (const entry of cases.cases) {
257
- printer.line(
258
- `${phpString(entry.value)} => ${className(entry.schemaName)}::fromArray($data),`
259
- );
257
+ const target = { kind: 'ref', name: entry.schemaName } as const;
258
+ const typed = hydration(target, '$data', model, dateType) ?? '$data';
259
+ printer.line(`${phpString(entry.value)} => ${typed},`);
260
260
  }
261
261
  printer.line('default => $data,');
262
262
  },
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "php" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator php --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "php" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator php --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "php" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator php --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "php" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator php --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "python" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator python --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "python" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator python --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "python" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator python --update`.
@@ -247,5 +247,5 @@ export default {
247
247
  "argsStyle": "inputs follow the target language's own idiom",
248
248
  "importExt": "the generated file has no relative imports"
249
249
  },
250
- requiresGenerator: '^0.7.4',
250
+ requiresGenerator: '^0.7.6',
251
251
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "python" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator python --update`.
@@ -12,6 +12,7 @@ import {
12
12
  enumValues,
13
13
  flattenAllOf,
14
14
  type PropertyModel,
15
+ type SchemaModel,
15
16
  } from '@redocly/client-generator';
16
17
  import { PythonPrinter } from '@redocly/client-generator/printers/python';
17
18
 
@@ -166,7 +167,7 @@ export function renderPythonModels(
166
167
  printer.blank();
167
168
  printer.blank();
168
169
 
169
- const aliases: Array<() => void> = [];
170
+ const aliases = new Map<string, SchemaModel>();
170
171
  for (const { name, schema } of model.schemas) {
171
172
  const asEnum = enumValues(schema);
172
173
  if (asEnum !== undefined) {
@@ -198,27 +199,51 @@ export function renderPythonModels(
198
199
  }
199
200
  // Everything else (unions, scalar aliases, records) becomes a module-level alias,
200
201
  // emitted AFTER the classes it references so the assignment evaluates.
201
- aliases.push(() => {
202
- const cases = discriminatorCases(schema, model);
203
- if (cases !== undefined) {
204
- const table = cases.cases
205
- .map((entry) => `${entry.value} -> ${className(entry.schemaName)}`)
206
- .join(', ');
207
- printer.line(`# Discriminated by "${cases.property}": ${table}`);
208
- }
209
- const field = unions.get(name);
210
- const union =
211
- field === undefined
212
- ? pythonType(schema, dateType)
213
- : `Annotated[${pythonType(schema, dateType)}, Field(discriminator=${naming.string(field)})]`;
214
- printer.line(`${className(name)} = ${union}`);
215
- printer.blank();
216
- });
202
+ aliases.set(name, schema);
203
+ }
204
+ for (const [name, schema] of sortAliases(aliases)) {
205
+ const cases = discriminatorCases(schema, model);
206
+ if (cases !== undefined) {
207
+ const table = cases.cases
208
+ .map((entry) => `${entry.value} -> ${className(entry.schemaName)}`)
209
+ .join(', ');
210
+ printer.line(`# Discriminated by "${cases.property}": ${table}`);
211
+ }
212
+ const field = unions.get(name);
213
+ const union =
214
+ field === undefined
215
+ ? pythonType(schema, dateType)
216
+ : `Annotated[${pythonType(schema, dateType)}, Field(discriminator=${naming.string(field)})]`;
217
+ printer.line(`${className(name)} = ${union}`);
218
+ printer.blank();
217
219
  }
218
- for (const emit of aliases) emit();
219
220
  return printer.toString();
220
221
  }
221
222
 
223
+ /** The aliases in emit order: an alias comes after the aliases it names. */
224
+ export function sortAliases(aliases: Map<string, SchemaModel>): Array<[string, SchemaModel]> {
225
+ const order: Array<[string, SchemaModel]> = [];
226
+ const visited = new Set<string>();
227
+ const visit = (name: string): void => {
228
+ const schema = aliases.get(name);
229
+ if (schema === undefined || visited.has(name)) return;
230
+ visited.add(name);
231
+ for (const referenced of findReferencedNames(schema)) visit(referenced);
232
+ order.push([name, schema]);
233
+ };
234
+ for (const name of aliases.keys()) visit(name);
235
+ return order;
236
+ }
237
+
238
+ /** The named schemas an alias annotation names (objects render as `Any`). */
239
+ function findReferencedNames(schema: SchemaModel): string[] {
240
+ if (schema.kind === 'ref') return [schema.name];
241
+ if (schema.kind === 'array') return findReferencedNames(schema.items);
242
+ if (schema.kind === 'record') return findReferencedNames(schema.value);
243
+ if (schema.kind === 'union') return schema.members.flatMap(findReferencedNames);
244
+ return [];
245
+ }
246
+
222
247
  /**
223
248
  * `DISCRIMINATORS[Pet] = ("petType", {"cat": Cat, ...})` registration lines, which `decode`
224
249
  * dispatches through. A union whose annotation already carries the discriminator is left
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "python" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator python --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "python" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator python --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "python" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator python --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "python" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator python --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "swr" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "swr" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator swr --update`.
@@ -33,5 +33,5 @@ export default {
33
33
  run: swrGenerator,
34
34
  requires: ["typescript"],
35
35
  errorModes: ["throw"],
36
- requiresGenerator: '^0.7.4',
36
+ requiresGenerator: '^0.7.6',
37
37
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "swr" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "swr" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator swr --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "tanstack-query" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "tanstack-query" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator tanstack-query --update`.
@@ -44,5 +44,5 @@ export default {
44
44
  run: tanstackQueryGenerator('react'),
45
45
  requires: ["typescript"],
46
46
  errorModes: ["throw"],
47
- requiresGenerator: '^0.7.4',
47
+ requiresGenerator: '^0.7.6',
48
48
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "tanstack-query" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "tanstack-query" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator tanstack-query --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "transformers" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "transformers" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator transformers --update`.
@@ -42,5 +42,5 @@ export default {
42
42
  run: transformersGenerator,
43
43
  requires: ["typescript"],
44
44
  dateTypes: ["Date"],
45
- requiresGenerator: '^0.7.4',
45
+ requiresGenerator: '^0.7.6',
46
46
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "transformers" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "transformers" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator transformers --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "typescript" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator typescript --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "typescript" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator typescript --update`.
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.4 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.6 — the built-in "typescript" generator.
2
2
  // This file is yours: edit freely; the generated client stays machine-owned and is
3
3
  // rebuilt by `redocly generate-client`. Newer generator versions merge in with
4
4
  // `redocly eject-generator typescript --update`.