@redocly/cli 2.65.1 → 2.66.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/README.md +5 -1
  2. package/THIRD_PARTY_NOTICES +1 -1
  3. package/lib/chunks/{3JAAMD2R.js → 36DQZK3T.js} +1 -1
  4. package/lib/chunks/{LLF5CY3L.js → 46YO7ZAG.js} +8 -8
  5. package/lib/chunks/{VAWGDT2W.js → 4ABWBH3W.js} +1 -1
  6. package/lib/chunks/{LVTNHX3K.js → 5EHUKG3I.js} +1 -1
  7. package/lib/chunks/{TNOMHRE3.js → 6JHVGOS4.js} +1 -1
  8. package/lib/chunks/{PFDVXHFS.js → 6KF4UNVM.js} +1 -1
  9. package/lib/chunks/{5UVEGDN5.js → 7NPQH3V7.js} +1 -1
  10. package/lib/chunks/{QLVSL5ZF.js → AONBK2JI.js} +1 -1
  11. package/lib/chunks/{SDI3BFVE.js → ARBQ5CUR.js} +1 -1
  12. package/lib/chunks/{OAZXHMUB.js → AZPQQ3GI.js} +1 -1
  13. package/lib/chunks/{K7YR4ZCE.js → B4Z2Z4FS.js} +1 -1
  14. package/lib/chunks/{GPHT4S2M.js → CK2FG2DD.js} +1 -1
  15. package/lib/chunks/{GY5LIRXF.js → CVCE3TMJ.js} +1 -1
  16. package/lib/chunks/{4JADC334.js → DRSH6QBU.js} +1 -1
  17. package/lib/chunks/ERBLCNSR.js +9 -0
  18. package/lib/chunks/{N7DGFIVS.js → F7K3O6UM.js} +1 -1
  19. package/lib/chunks/{Z4H5FLK2.js → FHDBQIEB.js} +1 -1
  20. package/lib/chunks/{PDRYPWBF.js → FOXOWXSK.js} +1 -1
  21. package/lib/chunks/{Y3UYQPDY.js → FP63LRP5.js} +1 -1
  22. package/lib/chunks/{7HX75VPL.js → FXCLUZIF.js} +1 -1
  23. package/lib/chunks/{YMEXZJK4.js → GG6HRP6Y.js} +1 -1
  24. package/lib/chunks/{W7XDH65E.js → GLUPJCQU.js} +1 -1
  25. package/lib/chunks/HHCU6T2V.js +7 -0
  26. package/lib/chunks/{ZHVZ22LO.js → HXPCC4OG.js} +1 -1
  27. package/lib/chunks/{AHV2L4AT.js → IAAYM25M.js} +1 -1
  28. package/lib/chunks/{6IEALFNR.js → IVWO724G.js} +1 -1
  29. package/lib/chunks/{RC2SP4YD.js → JFWECYV5.js} +1 -1
  30. package/lib/chunks/{GJJKLLSJ.js → JGSM4NRA.js} +1 -1
  31. package/lib/chunks/{TWAEUQN5.js → JZPKVDJA.js} +1 -1
  32. package/lib/chunks/{WJHTYCZL.js → JZV7OYQZ.js} +1 -1
  33. package/lib/chunks/{YUBO3M45.js → K4IZRPJV.js} +77 -77
  34. package/lib/chunks/{PDOJBUHH.js → KOEA2NZG.js} +2 -2
  35. package/lib/chunks/{76L5Y4E5.js → KTZA5BVG.js} +1 -1
  36. package/lib/chunks/{6O4EZZCB.js → L3SH4LDY.js} +1 -1
  37. package/lib/chunks/{QRGB7OHQ.js → LIDTATJI.js} +1 -1
  38. package/lib/chunks/{NCJ56PXB.js → LJTGHAPA.js} +1 -1
  39. package/lib/chunks/{PTPIZYEL.js → LR6VKQFM.js} +2 -2
  40. package/lib/chunks/{M6USEZHV.js → LSFJCPZH.js} +1 -1
  41. package/lib/chunks/{6OKAMFUS.js → M37DUXGN.js} +1 -1
  42. package/lib/chunks/{QET7LMPQ.js → M3VAMERP.js} +1 -1
  43. package/lib/chunks/{5LDTRSKM.js → MSJZTIMR.js} +3 -3
  44. package/lib/chunks/{EGRWOCUZ.js → NFCO7FU3.js} +1 -1
  45. package/lib/chunks/{XLPP6YHU.js → NHOPECWM.js} +1 -1
  46. package/lib/chunks/{F6CK2H55.js → NT6J6VMM.js} +1 -1
  47. package/lib/chunks/{YWLFGM2W.js → NUBOB7QM.js} +2 -2
  48. package/lib/chunks/{L7EAVWQA.js → OMDMN4SS.js} +1 -1
  49. package/lib/chunks/{GMPZCENU.js → ON2YZD5C.js} +1 -1
  50. package/lib/chunks/{LMOHVXBG.js → OYDBXGWA.js} +1 -1
  51. package/lib/chunks/{25STMLZM.js → PGX27JIK.js} +1 -1
  52. package/lib/chunks/{XVSKACRN.js → POIQ4MUQ.js} +1 -1
  53. package/lib/chunks/{Z3O5AH5W.js → PYSE2LAG.js} +1 -1
  54. package/lib/chunks/QMIJ4HMG.js +20 -0
  55. package/lib/chunks/{Q3SW35UY.js → R5MSEDNK.js} +1 -1
  56. package/lib/chunks/{FTJ2GLND.js → RALPAYEE.js} +1 -1
  57. package/lib/chunks/{BM3HLVGR.js → RO4A6LSK.js} +1 -1
  58. package/lib/chunks/{4ZSE2QKC.js → ROLEKKAB.js} +1 -1
  59. package/lib/chunks/{2AC4OXSZ.js → SDGM5YBT.js} +1 -1
  60. package/lib/chunks/{XGUY3CME.js → STYLK3WI.js} +1 -1
  61. package/lib/chunks/{XLDZKMWY.js → T23ZPTN4.js} +1 -1
  62. package/lib/chunks/{DLTGH5OY.js → TLDUEX6A.js} +1 -1
  63. package/lib/chunks/{VMZQPXC5.js → TOBKCE6P.js} +1 -1
  64. package/lib/chunks/{M3F2P6PS.js → TPBJSMIK.js} +1 -1
  65. package/lib/chunks/{7XEJIRRE.js → U7SJFXVW.js} +1 -1
  66. package/lib/chunks/{2IWPVA32.js → UJN4HIWM.js} +4 -4
  67. package/lib/chunks/{Q4UXM33T.js → ULKOLYWY.js} +1 -1
  68. package/lib/chunks/{AVRP5K2W.js → USAJ5FBD.js} +1 -1
  69. package/lib/chunks/{2Y42T65U.js → UYF7BOSD.js} +1 -1
  70. package/lib/chunks/{HTZ66OYY.js → VAPT4FUS.js} +1 -1
  71. package/lib/chunks/VOLUJUI5.js +7 -0
  72. package/lib/chunks/{YW65CIDB.js → WFZEGGBA.js} +1 -1
  73. package/lib/chunks/{KTG4J5LM.js → YCJL4ZHF.js} +1 -1
  74. package/lib/chunks/{5LKBZN75.js → YY44N7JX.js} +1 -1
  75. package/lib/chunks/{UFQAPCO4.js → ZSK75GT2.js} +1 -1
  76. package/lib/eject-assets/generators/cli/docs.ts +1 -1
  77. package/lib/eject-assets/generators/cli/engine-source.ts +1 -1
  78. package/lib/eject-assets/generators/cli/index.ts +2 -2
  79. package/lib/eject-assets/generators/cli/render.ts +1 -1
  80. package/lib/eject-assets/generators/go/client.ts +1 -1
  81. package/lib/eject-assets/generators/go/descriptor.ts +1 -1
  82. package/lib/eject-assets/generators/go/index.ts +2 -2
  83. package/lib/eject-assets/generators/go/models.ts +1 -1
  84. package/lib/eject-assets/generators/go/naming.ts +1 -1
  85. package/lib/eject-assets/generators/go/operations.ts +1 -1
  86. package/lib/eject-assets/generators/go/pagination.ts +1 -1
  87. package/lib/eject-assets/generators/go/types.ts +1 -1
  88. package/lib/eject-assets/generators/mock/faker.ts +1 -1
  89. package/lib/eject-assets/generators/mock/index.ts +2 -2
  90. package/lib/eject-assets/generators/mock/render.ts +1 -1
  91. package/lib/eject-assets/generators/mock/sample.ts +1 -1
  92. package/lib/eject-assets/generators/mock/values.ts +1 -1
  93. package/lib/eject-assets/generators/php/client.ts +1 -1
  94. package/lib/eject-assets/generators/php/descriptor.ts +1 -1
  95. package/lib/eject-assets/generators/php/index.ts +2 -2
  96. package/lib/eject-assets/generators/php/models.ts +4 -4
  97. package/lib/eject-assets/generators/php/naming.ts +1 -1
  98. package/lib/eject-assets/generators/php/operations.ts +1 -1
  99. package/lib/eject-assets/generators/php/pagination.ts +1 -1
  100. package/lib/eject-assets/generators/php/types.ts +1 -1
  101. package/lib/eject-assets/generators/python/client.ts +1 -1
  102. package/lib/eject-assets/generators/python/descriptor.ts +1 -1
  103. package/lib/eject-assets/generators/python/index.ts +2 -2
  104. package/lib/eject-assets/generators/python/models.ts +44 -19
  105. package/lib/eject-assets/generators/python/naming.ts +1 -1
  106. package/lib/eject-assets/generators/python/operations.ts +1 -1
  107. package/lib/eject-assets/generators/python/pagination.ts +1 -1
  108. package/lib/eject-assets/generators/python/types.ts +1 -1
  109. package/lib/eject-assets/generators/swr/index.ts +2 -2
  110. package/lib/eject-assets/generators/swr/render.ts +1 -1
  111. package/lib/eject-assets/generators/tanstack-query/index.ts +2 -2
  112. package/lib/eject-assets/generators/tanstack-query/render.ts +1 -1
  113. package/lib/eject-assets/generators/transformers/index.ts +2 -2
  114. package/lib/eject-assets/generators/transformers/render.ts +1 -1
  115. package/lib/eject-assets/generators/typescript/banner.ts +1 -1
  116. package/lib/eject-assets/generators/typescript/client.ts +1 -1
  117. package/lib/eject-assets/generators/typescript/descriptor.ts +1 -1
  118. package/lib/eject-assets/generators/typescript/index.ts +2 -2
  119. package/lib/eject-assets/generators/typescript/inline-runtime.ts +1 -1
  120. package/lib/eject-assets/generators/typescript/operation-signature.ts +1 -1
  121. package/lib/eject-assets/generators/typescript/operation-types.ts +1 -1
  122. package/lib/eject-assets/generators/typescript/operations.ts +1 -1
  123. package/lib/eject-assets/generators/typescript/response-headers.ts +1 -1
  124. package/lib/eject-assets/generators/typescript/type-guards.ts +1 -1
  125. package/lib/eject-assets/generators/typescript/types.ts +1 -1
  126. package/lib/eject-assets/generators/zod/index.ts +2 -2
  127. package/lib/eject-assets/generators/zod/schemas.ts +1 -1
  128. package/lib/eject-assets/skills/php-generator/SKILL.md +3 -1
  129. package/lib/eject-assets/skills/python-generator/SKILL.md +2 -1
  130. package/lib/index.js +80 -70
  131. package/lib/skills/recheck-config/SKILL.md +116 -0
  132. package/lib/skills/recheck-lint/SKILL.md +73 -0
  133. package/lib/skills/redocly-cli/SKILL.md +214 -0
  134. package/lib/skills/redocly-lint-rules/SKILL.md +554 -0
  135. package/package.json +1 -1
  136. package/lib/chunks/GHSNC2OX.js +0 -9
  137. package/lib/chunks/SCSGALAM.js +0 -20
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.3 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "swr" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3',
36
+ requiresGenerator: '^0.7.5',
37
37
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.3 — the built-in "swr" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "tanstack-query" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3',
47
+ requiresGenerator: '^0.7.5',
48
48
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.3 — the built-in "tanstack-query" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "transformers" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3',
45
+ requiresGenerator: '^0.7.5',
46
46
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.3 — the built-in "transformers" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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`.
@@ -123,5 +123,5 @@ export default {
123
123
  run: typescriptGenerator,
124
124
  sample: typescriptSample,
125
125
  docs: typescriptDocs,
126
- requiresGenerator: '^0.7.3',
126
+ requiresGenerator: '^0.7.5',
127
127
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.3 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — 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.3 — the built-in "zod" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — the built-in "zod" 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 zod --update`.
@@ -28,5 +28,5 @@ export const zodGenerator: Generator = ({ model, output, banner }) => {
28
28
  export default {
29
29
  name: 'zod',
30
30
  run: zodGenerator,
31
- requiresGenerator: '^0.7.3',
31
+ requiresGenerator: '^0.7.5',
32
32
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.7.3 — the built-in "zod" generator.
1
+ // Ejected from @redocly/client-generator@0.7.5 — the built-in "zod" 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 zod --update`.
@@ -41,7 +41,9 @@ extension — zero Composer dependencies. The namespace derives from the API tit
41
41
  - **Naming:** classes PascalCase, properties/methods camelCase via
42
42
  `identifierFor(..., RESERVED_WORDS.php)`; reserved words get a trailing underscore.
43
43
  - **Enums** are native backed enums (string/int); other scalars stay aliases.
44
- **Discriminated unions** are `match`-based `unmarshalX(array $data)` dispatchers;
44
+ **Discriminated unions** are `match`-based `unmarshalX(array $data)` dispatchers.
45
+ Each arm hydrates its mapping target the way a property of that type does, so a
46
+ target with no class of its own (a plain `oneOf`) stays a raw array;
45
47
  **allOf** is flattened.
46
48
  - **Unions keep their types where PHP 8.1 can express them.** A union of scalars, enums,
47
49
  classes, or arrays becomes a native union type (`int|string`, `PromotionType|array`)
@@ -59,7 +59,8 @@ One self-contained `<stem>.py`: typed dataclass models, a sync `Client` and an a
59
59
  - **Naming:** fields/methods snake*case via `identifierFor(..., RESERVED_WORDS.python)`;
60
60
  reserved words get a trailing underscore (`class*`); `+1`/`-1`become`plus_1`/`minus_1`.
61
61
  - **Enums** are `class X(str, Enum)` with SCREAMING members; **unions** are `Union[...]`
62
- aliases. A DISCRIMINATED union registers its dispatch table in the runtime's
62
+ aliases, emitted after the classes and the other aliases they name, because a
63
+ module-level assignment evaluates at import. A DISCRIMINATED union registers its dispatch table in the runtime's
63
64
  `DISCRIMINATORS` registry (`DISCRIMINATORS[Pet] = ("petType", {"cat": Cat, ...})`),
64
65
  and `decode()` routes through it — `isinstance` narrowing works on decoded members.
65
66
  Undiscriminated unions decode by trying each member in order (the first that