@redocly/client-generator 0.6.0 → 0.7.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 (96) hide show
  1. package/README.md +3 -3
  2. package/eject-assets/generators/cli/docs.ts +1 -1
  3. package/eject-assets/generators/cli/engine-source.ts +1 -1
  4. package/eject-assets/generators/cli/index.ts +2 -2
  5. package/eject-assets/generators/cli/render.ts +1 -1
  6. package/eject-assets/generators/go/client.ts +1 -1
  7. package/eject-assets/generators/go/descriptor.ts +1 -1
  8. package/eject-assets/generators/go/index.ts +2 -2
  9. package/eject-assets/generators/go/models.ts +1 -1
  10. package/eject-assets/generators/go/naming.ts +1 -1
  11. package/eject-assets/generators/go/operations.ts +1 -1
  12. package/eject-assets/generators/go/pagination.ts +1 -1
  13. package/eject-assets/generators/go/types.ts +1 -1
  14. package/eject-assets/generators/mock/faker.ts +1 -1
  15. package/eject-assets/generators/mock/index.ts +2 -2
  16. package/eject-assets/generators/mock/render.ts +1 -1
  17. package/eject-assets/generators/mock/sample.ts +1 -1
  18. package/eject-assets/generators/mock/values.ts +1 -1
  19. package/eject-assets/generators/php/client.ts +1 -1
  20. package/eject-assets/generators/php/descriptor.ts +1 -1
  21. package/eject-assets/generators/php/index.ts +2 -2
  22. package/eject-assets/generators/php/models.ts +1 -1
  23. package/eject-assets/generators/php/naming.ts +1 -1
  24. package/eject-assets/generators/php/operations.ts +1 -1
  25. package/eject-assets/generators/php/pagination.ts +1 -1
  26. package/eject-assets/generators/php/types.ts +1 -1
  27. package/eject-assets/generators/python/client.ts +1 -1
  28. package/eject-assets/generators/python/descriptor.ts +1 -1
  29. package/eject-assets/generators/python/index.ts +2 -2
  30. package/eject-assets/generators/python/models.ts +1 -1
  31. package/eject-assets/generators/python/naming.ts +1 -1
  32. package/eject-assets/generators/python/operations.ts +1 -1
  33. package/eject-assets/generators/python/pagination.ts +1 -1
  34. package/eject-assets/generators/python/types.ts +1 -1
  35. package/eject-assets/generators/swr/index.ts +2 -2
  36. package/eject-assets/generators/swr/render.ts +1 -1
  37. package/eject-assets/generators/tanstack-query/index.ts +2 -2
  38. package/eject-assets/generators/tanstack-query/render.ts +1 -1
  39. package/eject-assets/generators/transformers/index.ts +2 -2
  40. package/eject-assets/generators/transformers/render.ts +1 -1
  41. package/eject-assets/generators/typescript/banner.ts +1 -1
  42. package/eject-assets/generators/typescript/client.ts +1 -1
  43. package/eject-assets/generators/typescript/descriptor.ts +1 -1
  44. package/eject-assets/generators/typescript/index.ts +29 -3
  45. package/eject-assets/generators/typescript/inline-runtime.ts +1 -1
  46. package/eject-assets/generators/typescript/operation-signature.ts +1 -1
  47. package/eject-assets/generators/typescript/operation-types.ts +1 -1
  48. package/eject-assets/generators/typescript/operations.ts +1 -1
  49. package/eject-assets/generators/typescript/response-headers.ts +1 -1
  50. package/eject-assets/generators/typescript/type-guards.ts +1 -1
  51. package/eject-assets/generators/typescript/types.ts +1 -1
  52. package/eject-assets/generators/zod/index.ts +2 -2
  53. package/eject-assets/generators/zod/schemas.ts +1 -1
  54. package/eject-assets/skills/typescript-generator/SKILL.md +19 -0
  55. package/lib/generators/meta.d.ts.map +1 -1
  56. package/lib/generators/meta.js +3 -0
  57. package/lib/generators/meta.js.map +1 -1
  58. package/lib/generators/types.d.ts +1 -0
  59. package/lib/generators/types.d.ts.map +1 -1
  60. package/lib/generators/typescript/index.d.ts.map +1 -1
  61. package/lib/generators/typescript/index.js +18 -2
  62. package/lib/generators/typescript/index.js.map +1 -1
  63. package/lib/generators/typescript/runtime/send.d.ts +2 -1
  64. package/lib/generators/typescript/runtime/send.d.ts.map +1 -1
  65. package/lib/generators/typescript/runtime/send.js +107 -56
  66. package/lib/generators/typescript/runtime/send.js.map +1 -1
  67. package/lib/generators/typescript/runtime/types.d.ts +1 -1
  68. package/lib/generators/typescript/runtime/types.d.ts.map +1 -1
  69. package/lib/generators/typescript/telemetry/telemetry.d.ts +24 -0
  70. package/lib/generators/typescript/telemetry/telemetry.d.ts.map +1 -0
  71. package/lib/generators/typescript/telemetry/telemetry.js +265 -0
  72. package/lib/generators/typescript/telemetry/telemetry.js.map +1 -0
  73. package/lib/index.d.ts +1 -1
  74. package/lib/index.d.ts.map +1 -1
  75. package/lib/index.js.map +1 -1
  76. package/lib/pipeline.d.ts.map +1 -1
  77. package/lib/pipeline.js +1 -0
  78. package/lib/pipeline.js.map +1 -1
  79. package/lib/runtime-contract.d.ts +8 -1
  80. package/lib/runtime-contract.d.ts.map +1 -1
  81. package/lib/runtime-contract.js.map +1 -1
  82. package/lib/runtime-sources/telemetry.d.ts +2 -0
  83. package/lib/runtime-sources/telemetry.d.ts.map +1 -0
  84. package/lib/runtime-sources/telemetry.js +3 -0
  85. package/lib/runtime-sources/telemetry.js.map +1 -0
  86. package/lib/runtime-sources/typescript.d.ts +5 -5
  87. package/lib/runtime-sources/typescript.d.ts.map +1 -1
  88. package/lib/runtime-sources/typescript.js +5 -4
  89. package/lib/runtime-sources/typescript.js.map +1 -1
  90. package/lib/runtime-sources.d.ts +1 -0
  91. package/lib/runtime-sources.d.ts.map +1 -1
  92. package/lib/runtime-sources.js +1 -0
  93. package/lib/runtime-sources.js.map +1 -1
  94. package/lib/types.d.ts +1 -0
  95. package/lib/types.d.ts.map +1 -1
  96. package/package.json +2 -2
package/README.md CHANGED
@@ -108,7 +108,7 @@ type GenerateClientResult = {
108
108
  };
109
109
  ```
110
110
 
111
- `GenerateClientOptions` is the options type ([`src/types.ts`](https://github.com/Redocly/redocly-cli/blob/main/packages/client-generator/src/types.ts)) (`api` and `output` required; `outputMode`, `runtime`, `importExt`, `argsStyle`, `errorMode`, `dateType`, `serverUrl`, `mockData`, `mockSeed`, `generators`, `customGenerators`, `options`, `setup`, `pagination`, `queryKeyPrefix`, `goPackage`, `cliOutput`, `codeSamples`, `docs`, `docsFrontmatter` optional) plus an optional resolved Redocly `config` used to load the description.
111
+ `GenerateClientOptions` is the options type ([`src/types.ts`](https://github.com/Redocly/redocly-cli/blob/main/packages/client-generator/src/types.ts)) (`api` and `output` required; `outputMode`, `runtime`, `importExt`, `argsStyle`, `errorMode`, `dateType`, `serverUrl`, `mockData`, `mockSeed`, `generators`, `customGenerators`, `options`, `setup`, `pagination`, `queryKeyPrefix`, `goPackage`, `cliOutput`, `codeSamples`, `docs`, `docsFrontmatter`, `telemetry` optional) plus an optional resolved Redocly `config` used to load the description.
112
112
 
113
113
  ### `collectGeneratedFiles`
114
114
 
@@ -139,7 +139,7 @@ function defineGenerator(generator: CustomGenerator): CustomGenerator;
139
139
  The `@redocly/client-generator/generate` entry also exports the TypeScript renderers the built-ins use (`tsType`, `tsJsdoc`, `codeLiteral`, `operationSignature`, `pascalCase`, `safeIdent`).
140
140
  The package root exports the IR types plus the language-neutral toolkit.
141
141
  A custom generator emits TypeScript exactly as the first-party ones do.
142
- See the [`typescript-types-generator` example](https://github.com/Redocly/redocly-cli/tree/main/tests/e2e/generate-client/examples/typescript-types-generator).
142
+ See the [`typescript-types-generator` example](https://github.com/Redocly/redocly-cli/tree/main/packages/client-generator/examples/typescript-types-generator).
143
143
 
144
144
  ### `defineClientSetup`
145
145
 
@@ -156,7 +156,7 @@ A setup module may import only from `@redocly/client-generator`, so it never add
156
156
 
157
157
  ## Examples
158
158
 
159
- Runnable examples — from a zero-install quickstart to middleware, publisher setup, SSE streaming, pagination, and custom generators — live in [`tests/e2e/generate-client/examples`](https://github.com/Redocly/redocly-cli/tree/main/tests/e2e/generate-client/examples).
159
+ Runnable examples — from a zero-install quickstart to middleware, publisher setup, SSE streaming, pagination, and custom generators — live in [`packages/client-generator/examples`](https://github.com/Redocly/redocly-cli/tree/main/packages/client-generator/examples).
160
160
  Each is a standalone Vite app with a checked-in, drift-checked generated client.
161
161
 
162
162
  ## Documentation
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.6.0 — the built-in "cli" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "cli" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "cli" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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`.
@@ -86,5 +86,5 @@ export default {
86
86
  docs: cliDocs,
87
87
  requires: ["typescript","zod"],
88
88
  errorModes: ["throw"],
89
- requiresGenerator: '^0.6.0',
89
+ requiresGenerator: '^0.7.1',
90
90
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.6.0 — the built-in "cli" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0',
335
+ requiresGenerator: '^0.7.1',
336
336
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.6.0 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "go" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0',
34
+ requiresGenerator: '^0.7.1',
35
35
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.6.0 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "mock" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0',
237
+ requiresGenerator: '^0.7.1',
238
238
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.6.0 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "php" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0',
250
+ requiresGenerator: '^0.7.1',
251
251
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.6.0 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "python" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "swr" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0',
36
+ requiresGenerator: '^0.7.1',
37
37
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.6.0 — the built-in "swr" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "tanstack-query" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0',
47
+ requiresGenerator: '^0.7.1',
48
48
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.6.0 — the built-in "tanstack-query" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "transformers" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0',
45
+ requiresGenerator: '^0.7.1',
46
46
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.6.0 — the built-in "transformers" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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,16 +1,21 @@
1
- // Ejected from @redocly/client-generator@0.6.0 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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`.
5
5
  import {
6
6
  type CodeSample,
7
+ type EmitOptions,
7
8
  type Generator,
9
+ GENERATOR_VERSION,
10
+ type GeneratedFile,
8
11
  type OperationModel,
9
12
  renderReferencePage,
10
13
  type SampleContext,
11
14
  } from '@redocly/client-generator';
15
+ import { TELEMETRY_RUNTIME_SOURCE } from '@redocly/client-generator/runtime-sources';
12
16
  import { join } from 'node:path';
13
17
 
18
+ import { HEADER } from './banner.ts';
14
19
  import { emitClientSingleFile, emitClientSplit, emitRuntimeFiles } from './client.ts';
15
20
  import { packageIdents } from './descriptor.ts';
16
21
 
@@ -29,6 +34,10 @@ export const typescriptGenerator: Generator = ({ model, output, outputMode, emit
29
34
  path: join(output.dir, 'runtime', name),
30
35
  content,
31
36
  }));
37
+ const telemetry: GeneratedFile[] = [];
38
+ if (emit.telemetry === 'on') {
39
+ telemetry.push(telemetryFile(output.dir, output.stem, emit));
40
+ }
32
41
  if (outputMode === 'split') {
33
42
  const { dir, stem } = output;
34
43
  const { entry, schemas } = emitClientSplit(model, emit, stem);
@@ -38,11 +47,28 @@ export const typescriptGenerator: Generator = ({ model, output, outputMode, emit
38
47
  : [{ path: join(dir, `${stem}.schemas.ts`), content: schemas }]),
39
48
  { path: output.path, content: entry },
40
49
  ...runtime,
50
+ ...telemetry,
41
51
  ];
42
52
  }
43
- return [{ path: output.path, content: emitClientSingleFile(model, emit) }, ...runtime];
53
+ return [
54
+ { path: output.path, content: emitClientSingleFile(model, emit) },
55
+ ...runtime,
56
+ ...telemetry,
57
+ ];
44
58
  };
45
59
 
60
+ function telemetryFile(dir: string, stem: string, emit: EmitOptions): GeneratedFile {
61
+ const clientModule = `./${stem}.${emit.importExt ?? 'js'}`;
62
+ const content = TELEMETRY_RUNTIME_SOURCE.replace(
63
+ "from '../../../runtime-contract.js';",
64
+ () => `from '${clientModule}';`
65
+ ).replace(
66
+ "const GENERATOR_VERSION: string = 'dev';",
67
+ () => `const GENERATOR_VERSION: string = '${GENERATOR_VERSION}';`
68
+ );
69
+ return { path: join(dir, `${stem}.telemetry.ts`), content: `${HEADER}\n\n${content}` };
70
+ }
71
+
46
72
  /**
47
73
  * The client's own reference page, written when `client.docs` is on. Its snippets come from
48
74
  * `typescriptSample` below, so the page shows the calling convention this run generated —
@@ -97,5 +123,5 @@ export default {
97
123
  run: typescriptGenerator,
98
124
  sample: typescriptSample,
99
125
  docs: typescriptDocs,
100
- requiresGenerator: '^0.6.0',
126
+ requiresGenerator: '^0.7.1',
101
127
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.6.0 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "typescript" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0 — the built-in "zod" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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.6.0',
31
+ requiresGenerator: '^0.7.1',
32
32
  };
@@ -1,4 +1,4 @@
1
- // Ejected from @redocly/client-generator@0.6.0 — the built-in "zod" generator.
1
+ // Ejected from @redocly/client-generator@0.7.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`.
@@ -17,6 +17,10 @@ operation, and the runtime — embedded in the file (`runtime: inline`, the defa
17
17
  written as real modules in a `runtime/` folder beside it that the client imports
18
18
  relatively (`runtime: module`).
19
19
 
20
+ With `client.telemetry: on`, it also writes `<stem>.telemetry.ts`: the usage telemetry
21
+ middleware. The module exports `telemetry()` and `flush()`, and the application registers
22
+ it with `use(telemetry({ sdkName, sdkVersion, client }))`.
23
+
20
24
  ## Design decisions that must hold
21
25
 
22
26
  - **Descriptor-driven:** generated code is DATA (`OPERATIONS` + `Ops`) plus wiring;
@@ -61,6 +65,18 @@ relatively (`runtime: module`).
61
65
  derives, boundary included), `send()` sets the operation's declared content type only
62
66
  when the caller set none, the same rule the JSON branch already follows. A forwarded
63
67
  multipart boundary therefore survives, and a binary upload is never sent untyped.
68
+ - **`onSettled` sees every sent call once.** `send()` calls it after the last attempt
69
+ with the final response, the error, or both, the attempt count, and the duration from
70
+ the first attempt to the end of the `onResponse` hooks on the final response. A call
71
+ that fails in `onRequest` or in body serialization does not reach it. A call whose
72
+ signal is already aborted reaches it with 0 attempts.
73
+ Every hook runs. The first hook error rejects a successful call; on a failed call, the
74
+ original error wins.
75
+ - **Telemetry is opt-in at generation time.** Without `telemetry: on`, the output holds
76
+ no telemetry code, and the client file does not change. An event holds only the
77
+ operation id, the counts, the window, and the SDK identity. The kill switches and a
78
+ browser turn the middleware off. The module embeds on its own, not in
79
+ `RUNTIME_SOURCES`, so `telemetry` and `flush` never become reserved names of a client.
64
80
  - **Throw mode returns the body**; `{ envelope: true }` opts into
65
81
  `{ data, headers, response }` with typed declared headers. Result mode returns
66
82
  `{ data, error, response }` and ignores `envelope`.
@@ -82,6 +98,9 @@ inside the package and reach the generator through
82
98
  `@redocly/client-generator/runtime-sources` (in this repo they live in `runtime/` beside
83
99
  these files). Naming and string escaping live in the TypeScript printer
84
100
  (`@redocly/client-generator/printers/typescript`).
101
+ The telemetry middleware ships the same way, as `TELEMETRY_RUNTIME_SOURCE` (in this repo
102
+ it lives in `telemetry/`); `index.ts` writes it with the contract import pointed at the
103
+ client entry and the generator version baked in.
85
104
 
86
105
  ## Ejecting it
87
106
 
@@ -1 +1 @@
1
- {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/generators/meta.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9F,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG;IAC/E,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC;CAC3E,CAAC;AAyBF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,WAAW,CAuF3D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,GAAG,mBAAmB,CAAC,EAG7E,UAAU,CAAC,EAAE,UAAU,GACtB,IAAI,CA6CN"}
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/generators/meta.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9F,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG;IAC/E,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC;CAC3E,CAAC;AAyBF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,WAAW,CAuF3D,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,GAAG,mBAAmB,CAAC,EAG7E,UAAU,CAAC,EAAE,UAAU,GACtB,IAAI,CAkDN"}
@@ -125,6 +125,9 @@ outputMode) {
125
125
  if (emit.goPackage !== undefined && !selected.has('go')) {
126
126
  logger.warn('generate-client: goPackage is ignored — it declares the Go package clause, and no selected generator uses it (add --generator go).\n');
127
127
  }
128
+ if (emit.telemetry === 'on' && !selected.has('typescript')) {
129
+ logger.warn('generate-client: telemetry is ignored — the typescript generator writes the telemetry module, and it is not selected (add --generator typescript).\n');
130
+ }
128
131
  const errorMode = emit.errorMode ?? 'throw';
129
132
  const dateType = emit.dateType ?? 'string';
130
133
  for (const name of names) {