@redocly/cli 2.60.0 → 2.62.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 (141) hide show
  1. package/THIRD_PARTY_NOTICES +24 -3
  2. package/lib/chunks/{AP2GA7RS.js → 22EANOP2.js} +87 -87
  3. package/lib/chunks/{B5GZ7KU2.js → 2EP764NP.js} +1 -1
  4. package/lib/chunks/2OVI7BIW.js +105 -0
  5. package/lib/chunks/{GYKYFMW3.js → 2XK7ML3U.js} +1 -1
  6. package/lib/chunks/{DAAOXDSB.js → 37WWN4MA.js} +1 -1
  7. package/lib/chunks/{IAN3UOJT.js → 3C6UUCEW.js} +1 -1
  8. package/lib/chunks/{S27TE7KZ.js → 3DEJQSYG.js} +1 -1
  9. package/lib/chunks/{SDNESV5E.js → 3JYY42DL.js} +1 -1
  10. package/lib/chunks/{SNR3DAVL.js → 4WO6ZSKT.js} +1 -1
  11. package/lib/chunks/53INGMTO.js +20 -0
  12. package/lib/chunks/5NOJ76EP.js +9 -0
  13. package/lib/chunks/{SXOXAG7R.js → 5PG3ST2N.js} +2 -2
  14. package/lib/chunks/{BHUCIWQF.js → 66GKT2TZ.js} +1 -1
  15. package/lib/chunks/{V46KUEYR.js → 6DO6IN4A.js} +1 -1
  16. package/lib/chunks/{2F2YM4RD.js → 6EGJEFXO.js} +1 -1
  17. package/lib/chunks/{MJYI42E6.js → 6NB3FKVN.js} +8 -8
  18. package/lib/chunks/{GHPOEF7A.js → 75SLMDAN.js} +1 -1
  19. package/lib/chunks/{CAJM6OL3.js → AB2EMYEK.js} +1 -1
  20. package/lib/chunks/{PKYNMOKV.js → AZO6SCNH.js} +1 -1
  21. package/lib/chunks/{LF35KJ5M.js → B2J7WNDG.js} +1 -1
  22. package/lib/chunks/C67OKMFJ.js +11 -0
  23. package/lib/chunks/{ZJAFKITR.js → DC2HDHGE.js} +1 -1
  24. package/lib/chunks/{XZKUPNLZ.js → DFWXX7E2.js} +1 -1
  25. package/lib/chunks/{HFGKPU2P.js → FDMXHRDK.js} +1 -1
  26. package/lib/chunks/{SL6UQOKE.js → G5N3UXMR.js} +1 -1
  27. package/lib/chunks/{HVO5F4MP.js → GVQMC2WB.js} +1 -1
  28. package/lib/chunks/{RDMFHSDB.js → HBENVUR4.js} +1 -1
  29. package/lib/chunks/HN2ZK7LZ.js +20 -0
  30. package/lib/chunks/I6AAWNTY.js +20 -0
  31. package/lib/chunks/{HSHAARAO.js → KPPPJNVL.js} +1 -1
  32. package/lib/chunks/{52MW7SRF.js → KRCCY64H.js} +1 -1
  33. package/lib/chunks/LNYTDBAU.js +12 -0
  34. package/lib/chunks/{4XDEFJCF.js → LRLGVYCG.js} +1 -1
  35. package/lib/chunks/{3MPID4OC.js → LVGVWPDB.js} +1 -1
  36. package/lib/chunks/{XHDOW23C.js → MNH2K4WM.js} +1 -1
  37. package/lib/chunks/{J4NCFMOR.js → N3GO4LRW.js} +1 -1
  38. package/lib/chunks/{GD6WKI2C.js → NBI4EQPC.js} +1 -1
  39. package/lib/chunks/{G4ZIYGF5.js → NENSYJQB.js} +1 -1
  40. package/lib/chunks/NFRA6IE2.js +7 -0
  41. package/lib/chunks/{O5WCU6SC.js → OMIM3KH6.js} +10 -10
  42. package/lib/chunks/{YNPWONFN.js → OP7NIAI7.js} +1 -1
  43. package/lib/chunks/{CKZ35ARL.js → OT7Y7FIM.js} +1 -1
  44. package/lib/chunks/{ACVFQG4D.js → PTNNX4IU.js} +1 -1
  45. package/lib/chunks/{UPHYYNN3.js → PXCT44HL.js} +5 -5
  46. package/lib/chunks/{HQUG6XPO.js → QAUXTHD6.js} +2 -2
  47. package/lib/chunks/{N4AA4DRD.js → R2TPTKNR.js} +1 -1
  48. package/lib/chunks/{UXSV2J6V.js → REIGI2Y7.js} +1 -1
  49. package/lib/chunks/{S5G22GL5.js → RGU6OZYB.js} +1 -1
  50. package/lib/chunks/{W3K4YAMS.js → RPHIT72T.js} +1 -1
  51. package/lib/chunks/{7C244K4X.js → RUIEI3YV.js} +1 -1
  52. package/lib/chunks/{NADFEIIN.js → S3STDXJN.js} +1 -1
  53. package/lib/chunks/{DJWI7SF7.js → S6NFOZ34.js} +1 -1
  54. package/lib/chunks/{VCV3FKMW.js → SLQPKXO2.js} +1 -1
  55. package/lib/chunks/{4WAQNM63.js → SS6PCAMM.js} +58 -12
  56. package/lib/chunks/{CEPC3LL4.js → SXBAAS4M.js} +1 -1
  57. package/lib/chunks/{7ED6ZTTH.js → SYWAPWW7.js} +1 -1
  58. package/lib/chunks/{S46ENZHC.js → T4Y6M5MJ.js} +1 -1
  59. package/lib/chunks/{O4RAFGZA.js → TBZEEKTV.js} +1 -1
  60. package/lib/chunks/{HNKSHJLU.js → TF4PPK4N.js} +1 -1
  61. package/lib/chunks/TWWNWQRB.js +7 -0
  62. package/lib/chunks/{EXCIOEBN.js → US7X4XPD.js} +1 -1
  63. package/lib/chunks/VGM6NIVC.js +8 -0
  64. package/lib/chunks/{QGUZ4KFX.js → VX2VONNO.js} +1 -1
  65. package/lib/chunks/{DTMC35L3.js → VXLODB3S.js} +1 -1
  66. package/lib/chunks/{4HEJ6GQB.js → WEOCCL26.js} +2 -2
  67. package/lib/chunks/{Q526MFO3.js → WQ3XMPU7.js} +1 -1
  68. package/lib/chunks/{2U6O26CV.js → XJE2OFDN.js} +116 -16
  69. package/lib/chunks/{WFIIXHF3.js → XJTGJYVS.js} +1 -1
  70. package/lib/chunks/YDVWNFMS.js +24 -0
  71. package/lib/chunks/{HZZP3BZQ.js → YPYZCXVX.js} +1 -1
  72. package/lib/chunks/{72ZX5WSN.js → ZYQDPQVA.js} +1 -1
  73. package/lib/eject-assets/AGENTS.md +24 -23
  74. package/lib/eject-assets/generators/cli/docs.ts +1 -1
  75. package/lib/eject-assets/generators/cli/engine-source.ts +1 -1
  76. package/lib/eject-assets/generators/cli/index.ts +2 -2
  77. package/lib/eject-assets/generators/cli/render.ts +1 -1
  78. package/lib/eject-assets/generators/go/client.ts +1 -1
  79. package/lib/eject-assets/generators/go/descriptor.ts +1 -1
  80. package/lib/eject-assets/generators/go/index.ts +2 -2
  81. package/lib/eject-assets/generators/go/models.ts +1 -1
  82. package/lib/eject-assets/generators/go/naming.ts +1 -1
  83. package/lib/eject-assets/generators/go/operations.ts +35 -3
  84. package/lib/eject-assets/generators/go/pagination.ts +1 -1
  85. package/lib/eject-assets/generators/go/types.ts +1 -1
  86. package/lib/eject-assets/generators/mock/faker.ts +1 -1
  87. package/lib/eject-assets/generators/mock/index.ts +2 -2
  88. package/lib/eject-assets/generators/mock/render.ts +1 -1
  89. package/lib/eject-assets/generators/mock/sample.ts +1 -1
  90. package/lib/eject-assets/generators/mock/values.ts +1 -1
  91. package/lib/eject-assets/generators/php/client.ts +1 -1
  92. package/lib/eject-assets/generators/php/descriptor.ts +1 -1
  93. package/lib/eject-assets/generators/php/index.ts +2 -2
  94. package/lib/eject-assets/generators/php/models.ts +1 -1
  95. package/lib/eject-assets/generators/php/naming.ts +1 -1
  96. package/lib/eject-assets/generators/php/operations.ts +21 -3
  97. package/lib/eject-assets/generators/php/pagination.ts +1 -1
  98. package/lib/eject-assets/generators/php/types.ts +1 -1
  99. package/lib/eject-assets/generators/python/client.ts +1 -1
  100. package/lib/eject-assets/generators/python/descriptor.ts +1 -1
  101. package/lib/eject-assets/generators/python/index.ts +2 -2
  102. package/lib/eject-assets/generators/python/models.ts +1 -1
  103. package/lib/eject-assets/generators/python/naming.ts +1 -1
  104. package/lib/eject-assets/generators/python/operations.ts +19 -6
  105. package/lib/eject-assets/generators/python/pagination.ts +1 -1
  106. package/lib/eject-assets/generators/python/types.ts +1 -1
  107. package/lib/eject-assets/generators/swr/index.ts +2 -2
  108. package/lib/eject-assets/generators/swr/render.ts +1 -1
  109. package/lib/eject-assets/generators/tanstack-query/index.ts +2 -2
  110. package/lib/eject-assets/generators/tanstack-query/render.ts +1 -1
  111. package/lib/eject-assets/generators/transformers/index.ts +2 -2
  112. package/lib/eject-assets/generators/transformers/render.ts +1 -1
  113. package/lib/eject-assets/generators/typescript/banner.ts +1 -1
  114. package/lib/eject-assets/generators/typescript/client.ts +1 -1
  115. package/lib/eject-assets/generators/typescript/descriptor.ts +1 -1
  116. package/lib/eject-assets/generators/typescript/index.ts +2 -2
  117. package/lib/eject-assets/generators/typescript/inline-runtime.ts +1 -1
  118. package/lib/eject-assets/generators/typescript/operation-signature.ts +1 -1
  119. package/lib/eject-assets/generators/typescript/operation-types.ts +1 -1
  120. package/lib/eject-assets/generators/typescript/operations.ts +3 -4
  121. package/lib/eject-assets/generators/typescript/response-headers.ts +1 -1
  122. package/lib/eject-assets/generators/typescript/type-guards.ts +1 -1
  123. package/lib/eject-assets/generators/typescript/types.ts +1 -1
  124. package/lib/eject-assets/generators/zod/index.ts +2 -2
  125. package/lib/eject-assets/generators/zod/schemas.ts +1 -1
  126. package/lib/eject-assets/skills/client-generators/SKILL.md +24 -23
  127. package/lib/eject-assets/skills/go-generator/SKILL.md +11 -0
  128. package/lib/eject-assets/skills/php-generator/SKILL.md +16 -0
  129. package/lib/eject-assets/skills/python-generator/SKILL.md +13 -0
  130. package/lib/eject-assets/skills/typescript-generator/SKILL.md +16 -0
  131. package/lib/index.js +55 -55
  132. package/package.json +1 -1
  133. package/lib/chunks/BZBFESBB.js +0 -11
  134. package/lib/chunks/DJXBNZCO.js +0 -7
  135. package/lib/chunks/GC26XZYZ.js +0 -20
  136. package/lib/chunks/IJ43XWPG.js +0 -20
  137. package/lib/chunks/MCJLOALK.js +0 -22
  138. package/lib/chunks/OKTLNLO3.js +0 -7
  139. package/lib/chunks/PGZIUA7J.js +0 -105
  140. package/lib/chunks/W7VT3BOM.js +0 -9
  141. package/lib/chunks/XQA4EEZA.js +0 -20
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "cli" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25',
335
+ requiresGenerator: '^0.5.1',
336
336
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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`.
@@ -9,7 +9,9 @@ import {
9
9
  type ApiModel,
10
10
  type DateType,
11
11
  headerCoerceType,
12
+ isBinaryContentType,
12
13
  isMultipartBody,
14
+ isUntypedMultipartBody,
13
15
  jsonSuccessSchema,
14
16
  type OperationModel,
15
17
  type ParamModel,
@@ -97,6 +99,10 @@ export function writeGoMethod(
97
99
  const success = jsonSuccessSchema(op);
98
100
  const returnType = success === undefined ? undefined : goType(success, dateType);
99
101
  const headerPlan = envelope ? envelopeHeaderPlan(op, model!) : [];
102
+ // An untyped multipart or a binary body is `any`: the runtime sorts out what it got.
103
+ const passThrough =
104
+ isUntypedMultipartBody(op) ||
105
+ (op.requestBody !== undefined && isBinaryContentType(op.requestBody.contentType));
100
106
  if (envelope) {
101
107
  printer.line(
102
108
  `// ${ident}Headers carries the declared response headers of ${ident}WithHeaders (nil when absent or unparsable).`
@@ -113,7 +119,9 @@ export function writeGoMethod(
113
119
  const args = [
114
120
  'ctx context.Context',
115
121
  ...pathArgs.map(({ go, type }) => `${go} ${type}`),
116
- ...(op.requestBody ? [`body ${goType(op.requestBody.schema, dateType)}`] : []),
122
+ ...(op.requestBody
123
+ ? [`body ${passThrough ? 'any' : goType(op.requestBody.schema, dateType)}`]
124
+ : []),
117
125
  ...(hasParams ? [`params *${ident}Params`] : []),
118
126
  ];
119
127
  const sse = sseResponse(op);
@@ -225,7 +233,31 @@ export function writeGoMethod(
225
233
  'Headers: authHeaders',
226
234
  'Query: query',
227
235
  ];
228
- if (op.requestBody && isMultipartBody(op)) {
236
+ if (isUntypedMultipartBody(op)) {
237
+ printer.line('contentType, reader, stream, err := multipartBody(body)');
238
+ printer.block(
239
+ 'if err != nil {',
240
+ () => {
241
+ printer.line(fail('err'));
242
+ },
243
+ '}'
244
+ );
245
+ specFields.push('Body: reader', 'Stream: stream', 'ContentType: contentType');
246
+ } else if (op.requestBody && passThrough) {
247
+ printer.line('reader, stream, err := binaryBody(body)');
248
+ printer.block(
249
+ 'if err != nil {',
250
+ () => {
251
+ printer.line(fail('err'));
252
+ },
253
+ '}'
254
+ );
255
+ specFields.push(
256
+ 'Body: reader',
257
+ 'Stream: stream',
258
+ `ContentType: ${naming.string(op.requestBody.contentType)}`
259
+ );
260
+ } else if (op.requestBody && isMultipartBody(op)) {
229
261
  printer.line('contentType, reader, err := toMultipart(body)');
230
262
  printer.block(
231
263
  'if err != nil {',
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25',
34
+ requiresGenerator: '^0.5.1',
35
35
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25',
237
+ requiresGenerator: '^0.5.1',
238
238
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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`.
@@ -8,7 +8,9 @@
8
8
  import {
9
9
  type ApiModel,
10
10
  type DateType,
11
+ isBinaryContentType,
11
12
  isMultipartBody,
13
+ isUntypedMultipartBody,
12
14
  jsonSuccessSchema,
13
15
  type OperationModel,
14
16
  sseResponse,
@@ -36,6 +38,14 @@ type MethodArgs = {
36
38
  */
37
39
  const SIGNATURE_ARG_SLOTS = ['body', 'headers', 'idempotencyKey'];
38
40
 
41
+ /** Whether the body is `mixed` and the runtime sorts out what it got (`multipartBody` / `binaryBody`). */
42
+ function passesThrough(op: OperationModel): boolean {
43
+ return (
44
+ isUntypedMultipartBody(op) ||
45
+ (op.requestBody !== undefined && isBinaryContentType(op.requestBody.contentType))
46
+ );
47
+ }
48
+
39
49
  export function methodArgs(
40
50
  op: OperationModel,
41
51
  model: ApiModel,
@@ -68,7 +78,7 @@ export function methodArgs(
68
78
  ...pathArgs.map(({ php, type }) => `${type} ${'$'}${php}`),
69
79
  ...(includeBody && op.requestBody
70
80
  ? [
71
- `${isMultipartBody(op) ? 'array' : phpType(op.requestBody.schema, model, dateType)} ${'$'}body`,
81
+ `${passesThrough(op) ? 'mixed' : isMultipartBody(op) ? 'array' : phpType(op.requestBody.schema, model, dateType)} ${'$'}body`,
72
82
  ]
73
83
  : []),
74
84
  ...queryArgs.map(({ php, type }) => {
@@ -181,7 +191,15 @@ export function writePhpMethod(
181
191
  `'headers' => $requestHeaders`,
182
192
  `'query' => $query`,
183
193
  ];
184
- if (op.requestBody && isMultipartBody(op)) {
194
+ if (isUntypedMultipartBody(op)) {
195
+ printer.line('[$contentType, $encoded] = multipartBody($body);');
196
+ request.push(`'body' => $encoded`, `'contentType' => $contentType`);
197
+ } else if (op.requestBody && passesThrough(op)) {
198
+ request.push(
199
+ `'body' => binaryBody($body)`,
200
+ `'contentType' => ${phpString(op.requestBody.contentType)}`
201
+ );
202
+ } else if (op.requestBody && isMultipartBody(op)) {
185
203
  printer.line('[$contentType, $encoded] = toMultipart($body);');
186
204
  request.push(`'body' => $encoded`, `'contentType' => $contentType`);
187
205
  } else if (op.requestBody) {
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25',
250
+ requiresGenerator: '^0.5.1',
251
251
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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`.
@@ -8,7 +8,9 @@
8
8
  import {
9
9
  type ApiModel,
10
10
  type DateType,
11
+ isBinaryContentType,
11
12
  isMultipartBody,
13
+ isUntypedMultipartBody,
12
14
  jsonSuccessSchema,
13
15
  type OperationModel,
14
16
  sseResponse,
@@ -46,7 +48,12 @@ export function writeMethod(
46
48
  const positional = pathArgs.map(
47
49
  ({ param, python }) => `${python}: ${pythonType(param.schema, dateType)}`
48
50
  );
49
- const bodyArg = op.requestBody ? [`body: ${pythonType(op.requestBody.schema, dateType)}`] : [];
51
+ const passThrough =
52
+ isUntypedMultipartBody(op) ||
53
+ (op.requestBody !== undefined && isBinaryContentType(op.requestBody.contentType));
54
+ const bodyArg = op.requestBody
55
+ ? [`body: ${passThrough ? 'Any' : pythonType(op.requestBody.schema, dateType)}`]
56
+ : [];
50
57
  const kwargs = [
51
58
  ...queryArgs.map(({ param, python }) => {
52
59
  const annotation = pythonType(param.schema, dateType);
@@ -105,11 +112,17 @@ export function writeMethod(
105
112
  printer.line(`return ${isAsync ? 'aiter_sse' : 'iter_sse'}(_open, data_kind="${dataKind}")`);
106
113
  return;
107
114
  }
108
- if (isMultipartBody(op)) printer.line('form_data, form_files = to_multipart(body)');
115
+ if (isMultipartBody(op) && !isUntypedMultipartBody(op)) {
116
+ printer.line('form_data, form_files = to_multipart(body)');
117
+ }
109
118
  const bodyKw = op.requestBody
110
- ? isMultipartBody(op)
111
- ? ', data=form_data, files=form_files'
112
- : ', json_body=encode(body)'
119
+ ? isUntypedMultipartBody(op)
120
+ ? ', **multipart_arguments(body)'
121
+ : isMultipartBody(op)
122
+ ? ', data=form_data, files=form_files'
123
+ : isBinaryContentType(op.requestBody.contentType)
124
+ ? `, content=body, content_type=${naming.string(op.requestBody.contentType)}`
125
+ : ', json_body=encode(body)'
113
126
  : '';
114
127
  printer.line(
115
128
  `response = ${awaitKw}${sendFn}(self._http, self._config, op, url, method=op["method"], ` +
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "swr" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25',
36
+ requiresGenerator: '^0.5.1',
37
37
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "swr" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "tanstack-query" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25',
47
+ requiresGenerator: '^0.5.1',
48
48
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "tanstack-query" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "transformers" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25',
45
+ requiresGenerator: '^0.5.1',
46
46
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "transformers" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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`.
@@ -97,5 +97,5 @@ export default {
97
97
  run: typescriptGenerator,
98
98
  sample: typescriptSample,
99
99
  docs: typescriptDocs,
100
- requiresGenerator: '^0.4.25',
100
+ requiresGenerator: '^0.5.1',
101
101
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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`.
@@ -51,13 +51,12 @@ const INDENT = ' ';
51
51
  /** The request-body TS type: special wrapper types per content-type, else the schema. */
52
52
  export function bodyTypeText(rb: RequestBodyModel, dateType: DateType, indent = ''): string {
53
53
  if (isTypedMultipart(rb)) return tsType(rb.schema, dateType, indent);
54
+ if (isBinaryContentType(rb.contentType)) return 'Blob | ArrayBuffer | ReadableStream';
54
55
  switch (rb.contentType) {
55
56
  case 'multipart/form-data':
56
- return 'FormData';
57
+ return 'FormData | ReadableStream';
57
58
  case 'application/x-www-form-urlencoded':
58
59
  return 'URLSearchParams';
59
- case 'application/octet-stream':
60
- return 'Blob | ArrayBuffer';
61
60
  default:
62
61
  return tsType(rb.schema, dateType, indent);
63
62
  }
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25 — the built-in "zod" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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.4.25',
31
+ requiresGenerator: '^0.5.1',
32
32
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.4.25 — the built-in "zod" generator.
1
+ // Ejected from @redocly/client-generator@0.5.1 — 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`.