@redocly/client-generator 0.0.0-snapshot.1784554531

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 (250) hide show
  1. package/README.md +506 -0
  2. package/lib/config-file.d.ts +8 -0
  3. package/lib/config-file.d.ts.map +1 -0
  4. package/lib/config-file.js +32 -0
  5. package/lib/config-file.js.map +1 -0
  6. package/lib/config.d.ts +63 -0
  7. package/lib/config.d.ts.map +1 -0
  8. package/lib/config.js +2 -0
  9. package/lib/config.js.map +1 -0
  10. package/lib/emitters/auth.d.ts +14 -0
  11. package/lib/emitters/auth.d.ts.map +1 -0
  12. package/lib/emitters/auth.js +30 -0
  13. package/lib/emitters/auth.js.map +1 -0
  14. package/lib/emitters/client-assembly.d.ts +15 -0
  15. package/lib/emitters/client-assembly.d.ts.map +1 -0
  16. package/lib/emitters/client-assembly.js +299 -0
  17. package/lib/emitters/client-assembly.js.map +1 -0
  18. package/lib/emitters/descriptor.d.ts +22 -0
  19. package/lib/emitters/descriptor.d.ts.map +1 -0
  20. package/lib/emitters/descriptor.js +207 -0
  21. package/lib/emitters/descriptor.js.map +1 -0
  22. package/lib/emitters/emit-options.d.ts +71 -0
  23. package/lib/emitters/emit-options.d.ts.map +1 -0
  24. package/lib/emitters/emit-options.js +28 -0
  25. package/lib/emitters/emit-options.js.map +1 -0
  26. package/lib/emitters/faker.d.ts +11 -0
  27. package/lib/emitters/faker.d.ts.map +1 -0
  28. package/lib/emitters/faker.js +204 -0
  29. package/lib/emitters/faker.js.map +1 -0
  30. package/lib/emitters/identifier.d.ts +28 -0
  31. package/lib/emitters/identifier.d.ts.map +1 -0
  32. package/lib/emitters/identifier.js +94 -0
  33. package/lib/emitters/identifier.js.map +1 -0
  34. package/lib/emitters/inline-runtime.d.ts +11 -0
  35. package/lib/emitters/inline-runtime.d.ts.map +1 -0
  36. package/lib/emitters/inline-runtime.js +97 -0
  37. package/lib/emitters/inline-runtime.js.map +1 -0
  38. package/lib/emitters/jsdoc.d.ts +9 -0
  39. package/lib/emitters/jsdoc.d.ts.map +1 -0
  40. package/lib/emitters/jsdoc.js +83 -0
  41. package/lib/emitters/jsdoc.js.map +1 -0
  42. package/lib/emitters/mock.d.ts +22 -0
  43. package/lib/emitters/mock.d.ts.map +1 -0
  44. package/lib/emitters/mock.js +243 -0
  45. package/lib/emitters/mock.js.map +1 -0
  46. package/lib/emitters/operation-aliases.d.ts +27 -0
  47. package/lib/emitters/operation-aliases.d.ts.map +1 -0
  48. package/lib/emitters/operation-aliases.js +138 -0
  49. package/lib/emitters/operation-aliases.js.map +1 -0
  50. package/lib/emitters/operation-signature.d.ts +23 -0
  51. package/lib/emitters/operation-signature.d.ts.map +1 -0
  52. package/lib/emitters/operation-signature.js +34 -0
  53. package/lib/emitters/operation-signature.js.map +1 -0
  54. package/lib/emitters/operation-types.d.ts +32 -0
  55. package/lib/emitters/operation-types.d.ts.map +1 -0
  56. package/lib/emitters/operation-types.js +117 -0
  57. package/lib/emitters/operation-types.js.map +1 -0
  58. package/lib/emitters/operations.d.ts +39 -0
  59. package/lib/emitters/operations.d.ts.map +1 -0
  60. package/lib/emitters/operations.js +33 -0
  61. package/lib/emitters/operations.js.map +1 -0
  62. package/lib/emitters/pagination.d.ts +69 -0
  63. package/lib/emitters/pagination.d.ts.map +1 -0
  64. package/lib/emitters/pagination.js +223 -0
  65. package/lib/emitters/pagination.js.map +1 -0
  66. package/lib/emitters/runtime-sources.d.ts +16 -0
  67. package/lib/emitters/runtime-sources.d.ts.map +1 -0
  68. package/lib/emitters/runtime-sources.js +16 -0
  69. package/lib/emitters/runtime-sources.js.map +1 -0
  70. package/lib/emitters/sample.d.ts +27 -0
  71. package/lib/emitters/sample.d.ts.map +1 -0
  72. package/lib/emitters/sample.js +161 -0
  73. package/lib/emitters/sample.js.map +1 -0
  74. package/lib/emitters/setup-bake.d.ts +15 -0
  75. package/lib/emitters/setup-bake.d.ts.map +1 -0
  76. package/lib/emitters/setup-bake.js +65 -0
  77. package/lib/emitters/setup-bake.js.map +1 -0
  78. package/lib/emitters/sse.d.ts +10 -0
  79. package/lib/emitters/sse.d.ts.map +1 -0
  80. package/lib/emitters/sse.js +46 -0
  81. package/lib/emitters/sse.js.map +1 -0
  82. package/lib/emitters/support.d.ts +13 -0
  83. package/lib/emitters/support.d.ts.map +1 -0
  84. package/lib/emitters/support.js +21 -0
  85. package/lib/emitters/support.js.map +1 -0
  86. package/lib/emitters/swr.d.ts +10 -0
  87. package/lib/emitters/swr.d.ts.map +1 -0
  88. package/lib/emitters/swr.js +88 -0
  89. package/lib/emitters/swr.js.map +1 -0
  90. package/lib/emitters/tanstack-query.d.ts +11 -0
  91. package/lib/emitters/tanstack-query.d.ts.map +1 -0
  92. package/lib/emitters/tanstack-query.js +68 -0
  93. package/lib/emitters/tanstack-query.js.map +1 -0
  94. package/lib/emitters/transformers.d.ts +11 -0
  95. package/lib/emitters/transformers.d.ts.map +1 -0
  96. package/lib/emitters/transformers.js +334 -0
  97. package/lib/emitters/transformers.js.map +1 -0
  98. package/lib/emitters/ts.d.ts +40 -0
  99. package/lib/emitters/ts.d.ts.map +1 -0
  100. package/lib/emitters/ts.js +104 -0
  101. package/lib/emitters/ts.js.map +1 -0
  102. package/lib/emitters/type-guards.d.ts +21 -0
  103. package/lib/emitters/type-guards.d.ts.map +1 -0
  104. package/lib/emitters/type-guards.js +183 -0
  105. package/lib/emitters/type-guards.js.map +1 -0
  106. package/lib/emitters/types.d.ts +23 -0
  107. package/lib/emitters/types.d.ts.map +1 -0
  108. package/lib/emitters/types.js +127 -0
  109. package/lib/emitters/types.js.map +1 -0
  110. package/lib/emitters/wrapper-support.d.ts +40 -0
  111. package/lib/emitters/wrapper-support.d.ts.map +1 -0
  112. package/lib/emitters/wrapper-support.js +112 -0
  113. package/lib/emitters/wrapper-support.js.map +1 -0
  114. package/lib/emitters/zod.d.ts +13 -0
  115. package/lib/emitters/zod.d.ts.map +1 -0
  116. package/lib/emitters/zod.js +344 -0
  117. package/lib/emitters/zod.js.map +1 -0
  118. package/lib/errors.d.ts +4 -0
  119. package/lib/errors.d.ts.map +1 -0
  120. package/lib/errors.js +7 -0
  121. package/lib/errors.js.map +1 -0
  122. package/lib/generators/anchor.d.ts +9 -0
  123. package/lib/generators/anchor.d.ts.map +1 -0
  124. package/lib/generators/anchor.js +10 -0
  125. package/lib/generators/anchor.js.map +1 -0
  126. package/lib/generators/index.d.ts +15 -0
  127. package/lib/generators/index.d.ts.map +1 -0
  128. package/lib/generators/index.js +62 -0
  129. package/lib/generators/index.js.map +1 -0
  130. package/lib/generators/mock.d.ts +9 -0
  131. package/lib/generators/mock.d.ts.map +1 -0
  132. package/lib/generators/mock.js +23 -0
  133. package/lib/generators/mock.js.map +1 -0
  134. package/lib/generators/resolve.d.ts +19 -0
  135. package/lib/generators/resolve.d.ts.map +1 -0
  136. package/lib/generators/resolve.js +68 -0
  137. package/lib/generators/resolve.js.map +1 -0
  138. package/lib/generators/sdk.d.ts +12 -0
  139. package/lib/generators/sdk.d.ts.map +1 -0
  140. package/lib/generators/sdk.js +26 -0
  141. package/lib/generators/sdk.js.map +1 -0
  142. package/lib/generators/swr.d.ts +15 -0
  143. package/lib/generators/swr.d.ts.map +1 -0
  144. package/lib/generators/swr.js +27 -0
  145. package/lib/generators/swr.js.map +1 -0
  146. package/lib/generators/tanstack-query.d.ts +17 -0
  147. package/lib/generators/tanstack-query.d.ts.map +1 -0
  148. package/lib/generators/tanstack-query.js +30 -0
  149. package/lib/generators/tanstack-query.js.map +1 -0
  150. package/lib/generators/transformers.d.ts +19 -0
  151. package/lib/generators/transformers.d.ts.map +1 -0
  152. package/lib/generators/transformers.js +28 -0
  153. package/lib/generators/transformers.js.map +1 -0
  154. package/lib/generators/types.d.ts +66 -0
  155. package/lib/generators/types.d.ts.map +1 -0
  156. package/lib/generators/types.js +2 -0
  157. package/lib/generators/types.js.map +1 -0
  158. package/lib/generators/zod.d.ts +14 -0
  159. package/lib/generators/zod.d.ts.map +1 -0
  160. package/lib/generators/zod.js +23 -0
  161. package/lib/generators/zod.js.map +1 -0
  162. package/lib/index.d.ts +29 -0
  163. package/lib/index.d.ts.map +1 -0
  164. package/lib/index.js +119 -0
  165. package/lib/index.js.map +1 -0
  166. package/lib/intermediate-representation/build.d.ts +4 -0
  167. package/lib/intermediate-representation/build.d.ts.map +1 -0
  168. package/lib/intermediate-representation/build.js +761 -0
  169. package/lib/intermediate-representation/build.js.map +1 -0
  170. package/lib/intermediate-representation/model.d.ts +275 -0
  171. package/lib/intermediate-representation/model.d.ts.map +1 -0
  172. package/lib/intermediate-representation/model.js +5 -0
  173. package/lib/intermediate-representation/model.js.map +1 -0
  174. package/lib/intermediate-representation/normalize-swagger2.d.ts +10 -0
  175. package/lib/intermediate-representation/normalize-swagger2.d.ts.map +1 -0
  176. package/lib/intermediate-representation/normalize-swagger2.js +210 -0
  177. package/lib/intermediate-representation/normalize-swagger2.js.map +1 -0
  178. package/lib/intermediate-representation/sanitize-identifiers.d.ts +30 -0
  179. package/lib/intermediate-representation/sanitize-identifiers.d.ts.map +1 -0
  180. package/lib/intermediate-representation/sanitize-identifiers.js +153 -0
  181. package/lib/intermediate-representation/sanitize-identifiers.js.map +1 -0
  182. package/lib/loader.d.ts +4 -0
  183. package/lib/loader.d.ts.map +1 -0
  184. package/lib/loader.js +14 -0
  185. package/lib/loader.js.map +1 -0
  186. package/lib/plugin.d.ts +19 -0
  187. package/lib/plugin.d.ts.map +1 -0
  188. package/lib/plugin.js +41 -0
  189. package/lib/plugin.js.map +1 -0
  190. package/lib/runtime/auth.d.ts +15 -0
  191. package/lib/runtime/auth.d.ts.map +1 -0
  192. package/lib/runtime/auth.js +67 -0
  193. package/lib/runtime/auth.js.map +1 -0
  194. package/lib/runtime/create-client.d.ts +35 -0
  195. package/lib/runtime/create-client.d.ts.map +1 -0
  196. package/lib/runtime/create-client.js +215 -0
  197. package/lib/runtime/create-client.js.map +1 -0
  198. package/lib/runtime/errors.d.ts +11 -0
  199. package/lib/runtime/errors.d.ts.map +1 -0
  200. package/lib/runtime/errors.js +25 -0
  201. package/lib/runtime/errors.js.map +1 -0
  202. package/lib/runtime/index.d.ts +14 -0
  203. package/lib/runtime/index.d.ts.map +1 -0
  204. package/lib/runtime/index.js +24 -0
  205. package/lib/runtime/index.js.map +1 -0
  206. package/lib/runtime/multipart.d.ts +9 -0
  207. package/lib/runtime/multipart.d.ts.map +1 -0
  208. package/lib/runtime/multipart.js +31 -0
  209. package/lib/runtime/multipart.js.map +1 -0
  210. package/lib/runtime/paginate.d.ts +36 -0
  211. package/lib/runtime/paginate.d.ts.map +1 -0
  212. package/lib/runtime/paginate.js +99 -0
  213. package/lib/runtime/paginate.js.map +1 -0
  214. package/lib/runtime/parse.d.ts +9 -0
  215. package/lib/runtime/parse.d.ts.map +1 -0
  216. package/lib/runtime/parse.js +37 -0
  217. package/lib/runtime/parse.js.map +1 -0
  218. package/lib/runtime/retry.d.ts +15 -0
  219. package/lib/runtime/retry.d.ts.map +1 -0
  220. package/lib/runtime/retry.js +51 -0
  221. package/lib/runtime/retry.js.map +1 -0
  222. package/lib/runtime/send.d.ts +31 -0
  223. package/lib/runtime/send.d.ts.map +1 -0
  224. package/lib/runtime/send.js +138 -0
  225. package/lib/runtime/send.js.map +1 -0
  226. package/lib/runtime/setup.d.ts +11 -0
  227. package/lib/runtime/setup.d.ts.map +1 -0
  228. package/lib/runtime/setup.js +13 -0
  229. package/lib/runtime/setup.js.map +1 -0
  230. package/lib/runtime/sse.d.ts +21 -0
  231. package/lib/runtime/sse.d.ts.map +1 -0
  232. package/lib/runtime/sse.js +163 -0
  233. package/lib/runtime/sse.js.map +1 -0
  234. package/lib/runtime/types.d.ts +232 -0
  235. package/lib/runtime/types.d.ts.map +1 -0
  236. package/lib/runtime/types.js +9 -0
  237. package/lib/runtime/types.js.map +1 -0
  238. package/lib/runtime/url.d.ts +25 -0
  239. package/lib/runtime/url.d.ts.map +1 -0
  240. package/lib/runtime/url.js +97 -0
  241. package/lib/runtime/url.js.map +1 -0
  242. package/lib/runtime-contract.d.ts +27 -0
  243. package/lib/runtime-contract.d.ts.map +1 -0
  244. package/lib/runtime-contract.js +14 -0
  245. package/lib/runtime-contract.js.map +1 -0
  246. package/lib/types.d.ts +118 -0
  247. package/lib/types.d.ts.map +1 -0
  248. package/lib/types.js +2 -0
  249. package/lib/types.js.map +1 -0
  250. package/package.json +59 -0
@@ -0,0 +1,83 @@
1
+ import { splitLines } from './support.js';
2
+ import { escapeJsDoc } from './ts.js';
3
+ /**
4
+ * The JSDoc body for a description + metadata as a single `\n`-joined string,
5
+ * or `undefined` when there's nothing to document. The AST emitters feed this
6
+ * to `ts.ts`'s `jsdoc` helper (which owns the `*`-prefixing and indentation),
7
+ * so this returns only the raw body — no comment delimiters, no padding.
8
+ */
9
+ export function jsdocText(text, metadata) {
10
+ const lines = jsdocLines(text, metadata);
11
+ return lines.length === 0 ? undefined : lines.join('\n');
12
+ }
13
+ /**
14
+ * Build the body of a JSDoc block from a description and an optional metadata
15
+ * bag. Description lines come first (trimmed of leading/trailing blanks); then
16
+ * the metadata tag lines in a stable, source-driven order.
17
+ *
18
+ * Returns `[]` when there's nothing to render — callers use the empty result
19
+ * to skip emitting any JSDoc at all.
20
+ */
21
+ function jsdocLines(text, metadata) {
22
+ const lines = [];
23
+ if (text && text.trim()) {
24
+ lines.push(...trimLines(splitLines(text)));
25
+ }
26
+ if (metadata) {
27
+ lines.push(...formatMetadata(metadata));
28
+ }
29
+ return lines;
30
+ }
31
+ /**
32
+ * Project a SchemaMetadata bag into JSDoc tag lines.
33
+ *
34
+ * Order matches the (near-)spec order so generated output is deterministic and
35
+ * diff-stable. `pattern` is escaped so an embedded `*​/` cannot terminate the
36
+ * surrounding JSDoc block.
37
+ */
38
+ function formatMetadata(metadata) {
39
+ const lines = [];
40
+ const push = (tag, value) => {
41
+ if (value === undefined) {
42
+ lines.push(`@${tag}`);
43
+ }
44
+ else {
45
+ lines.push(`@${tag} ${value}`);
46
+ }
47
+ };
48
+ if (metadata.minimum !== undefined)
49
+ push('minimum', metadata.minimum);
50
+ if (metadata.maximum !== undefined)
51
+ push('maximum', metadata.maximum);
52
+ if (metadata.exclusiveMinimum !== undefined)
53
+ push('exclusiveMinimum', metadata.exclusiveMinimum);
54
+ if (metadata.exclusiveMaximum !== undefined)
55
+ push('exclusiveMaximum', metadata.exclusiveMaximum);
56
+ if (metadata.minLength !== undefined)
57
+ push('minLength', metadata.minLength);
58
+ if (metadata.maxLength !== undefined)
59
+ push('maxLength', metadata.maxLength);
60
+ if (metadata.pattern !== undefined)
61
+ push('pattern', escapeJsDoc(metadata.pattern));
62
+ if (metadata.minItems !== undefined)
63
+ push('minItems', metadata.minItems);
64
+ if (metadata.maxItems !== undefined)
65
+ push('maxItems', metadata.maxItems);
66
+ if (metadata.uniqueItems === true)
67
+ push('uniqueItems');
68
+ if (metadata.format !== undefined)
69
+ push('format', metadata.format);
70
+ if (metadata.deprecated === true)
71
+ push('deprecated');
72
+ return lines;
73
+ }
74
+ function trimLines(lines) {
75
+ let start = 0;
76
+ let end = lines.length;
77
+ while (start < end && lines[start] === '')
78
+ start++;
79
+ while (end > start && lines[end - 1] === '')
80
+ end--;
81
+ return lines.slice(start, end);
82
+ }
83
+ //# sourceMappingURL=jsdoc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsdoc.js","sourceRoot":"","sources":["../../src/emitters/jsdoc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type ApiModel } from '../intermediate-representation/model.js';
2
+ import type { DateType } from './types.js';
3
+ export type MockOptions = {
4
+ /** Import specifier for the sdk entry the schema types live in. */
5
+ sdkModule: string;
6
+ /** Must match the sdk's `--date-type`: under `'Date'` the sampler bakes date
7
+ * fields as `new Date(...)` so the mock data matches the `Date`-typed sdk. */
8
+ dateType?: DateType;
9
+ /**
10
+ * How factory/handler bodies produce data. `'baked'` (default) inlines deterministic
11
+ * literals from the sampler (zero-dep, contract-faithful). `'faker'` emits
12
+ * `@faker-js/faker` calls for realistic data — reproducible when `mockSeed` is set —
13
+ * making `@faker-js/faker` the consumer's dev-dep. Factory signatures are identical
14
+ * across modes, so a consumer can flip this without changing call sites.
15
+ */
16
+ mockData?: 'baked' | 'faker';
17
+ /** When set in `'faker'` mode, emit a top-level `faker.seed(<n>);` so runs reproduce. */
18
+ mockSeed?: number;
19
+ };
20
+ /** Render the full `*.mocks.ts` source. `''` when the model has no operations. */
21
+ export declare function renderMockModule(model: ApiModel, opts: MockOptions): string;
22
+ //# sourceMappingURL=mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/emitters/mock.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,QAAQ,EAKd,MAAM,yCAAyC,CAAC;AAMjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,MAAM,MAAM,WAAW,GAAG;IACxB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB;mFAC+E;IAC/E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAYF,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAqB3E"}
@@ -0,0 +1,243 @@
1
+ // Emits a `*.mocks.ts` module: a `create<Schema>(overrides?)` data factory per
2
+ // named schema, an `<op>Handler(override?)` MSW request handler per operation
3
+ // (its primary success response), and an aggregated `handlers` array. Response
4
+ // data is baked at codegen time via the sampler (`sampleValue`) and printed as
5
+ // TypeScript literals through `ts.factory`, so the generated module depends only
6
+ // on `msw` — the real client stays zero-dependency.
7
+ import { isPlainObject } from '@redocly/openapi-core';
8
+ import { allOperations, } from '../intermediate-representation/model.js';
9
+ import { fakerExpression } from './faker.js';
10
+ import { safeIdent } from './identifier.js';
11
+ import { sampleValue, SampleExpression } from './sample.js';
12
+ import { pascalCase } from './support.js';
13
+ import { literalExpression, parseExpression, printStatements, ts } from './ts.js';
14
+ const { factory } = ts;
15
+ /** The body expression for `schema` under the active data mode: a baked literal tree
16
+ * (`'baked'`) or a tree of `@faker-js/faker` calls (`'faker'`). Both honor `dateType`
17
+ * and the binary/Blob type demand; the faker path inlines refs with the same cycle
18
+ * guard as the baked sampler, so neither recurses forever on a cyclic schema. */
19
+ function bodyExpression(schema, model, opts) {
20
+ return opts.mockData === 'faker'
21
+ ? fakerExpression(schema, model.schemas, { dateType: opts.dateType })
22
+ : literal(sampleValue(schema, model.schemas, { dateType: opts.dateType }));
23
+ }
24
+ /** Render the full `*.mocks.ts` source. `''` when the model has no operations. */
25
+ export function renderMockModule(model, opts) {
26
+ const operations = allOperations(model.services);
27
+ if (operations.length === 0)
28
+ return '';
29
+ const factories = model.schemas.map((s) => factoryFor(s, model, opts));
30
+ const handlers = operations.flatMap((op) => [
31
+ handlerFor(op, model, opts),
32
+ ...(op.errorResponses.length > 0 ? [errorHandlerFor(op, model, opts)] : []),
33
+ ]);
34
+ const typeImport = schemaTypeImport(model, opts);
35
+ // Faker mode imports `faker` (the consumer's dev-dep) and, with a seed, pins it once
36
+ // at module top so every run reproduces. Baked mode emits neither (stays zero-dep).
37
+ const fakerImport = opts.mockData === 'faker' ? "import { faker } from '@faker-js/faker';\n" : '';
38
+ const seed = opts.mockData === 'faker' && opts.mockSeed !== undefined ? [seedStatement(opts.mockSeed)] : [];
39
+ return `import { http, HttpResponse } from 'msw';\n${fakerImport}\n${printStatements([
40
+ ...typeImport,
41
+ ...seed,
42
+ ...factories,
43
+ ...handlers,
44
+ handlersArray(operations),
45
+ ])}`;
46
+ }
47
+ /** `faker.seed(<n>);` — pins faker's PRNG so a seeded faker-mode module reproduces. */
48
+ function seedStatement(seed) {
49
+ return factory.createExpressionStatement(factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier('faker'), 'seed'), undefined, [factory.createNumericLiteral(seed)]));
50
+ }
51
+ /**
52
+ * `import type { A, B, … } from '<sdkModule>';` — the named-schema types the factories
53
+ * reference (`create<Pascal>` returns/accepts `<Pascal>`). Sorted for stable output.
54
+ * Empty when the model has no named schemas (so no type import is emitted). Importing
55
+ * the schema types also shadows globals of the same name (e.g. an `Error` schema) so the
56
+ * factory return types resolve to the generated type, not `globalThis.Error`.
57
+ */
58
+ function schemaTypeImport(model, opts) {
59
+ if (model.schemas.length === 0)
60
+ return [];
61
+ const names = model.schemas.map((s) => pascalCase(s.name)).sort();
62
+ return [
63
+ factory.createImportDeclaration(undefined, factory.createImportClause(true, undefined, factory.createNamedImports(names.map((name) => factory.createImportSpecifier(false, undefined, factory.createIdentifier(name))))), factory.createStringLiteral(opts.sdkModule)),
64
+ ];
65
+ }
66
+ /** `export function create<Pascal>(overrides?: Partial<Pascal>): Pascal { return { …sampled, ...overrides }; }`. */
67
+ function factoryFor(named, model, opts) {
68
+ const pascal = pascalCase(named.name);
69
+ const sampled = bodyExpression(named.schema, model, opts);
70
+ const typeRef = factory.createTypeReferenceNode(pascal);
71
+ // Spreading `Partial<Union>` (the override type of a union schema) distributes into
72
+ // `Partial<A> | Partial<B>`, which widens any discriminant property (e.g. `category`)
73
+ // and defeats narrowing — TS can no longer place the literal in a single union member.
74
+ // The sampled object is already a complete, correct member, so re-assert the type.
75
+ const body = named.schema.kind === 'union'
76
+ ? factory.createAsExpression(spreadOverrides(sampled, 'overrides'), typeRef)
77
+ : spreadOverrides(sampled, 'overrides');
78
+ return factory.createFunctionDeclaration([factory.createModifier(ts.SyntaxKind.ExportKeyword)], undefined, `create${pascal}`, undefined, [
79
+ factory.createParameterDeclaration(undefined, undefined, 'overrides', factory.createToken(ts.SyntaxKind.QuestionToken), factory.createTypeReferenceNode('Partial', [typeRef])),
80
+ ], typeRef, factory.createBlock([factory.createReturnStatement(body)], true));
81
+ }
82
+ /** `export const <op>Handler = (override?: <OverrideType>) => http.<method>('<path>', () => <response>);`. */
83
+ function handlerFor(op, model, opts) {
84
+ const arrow = factory.createArrowFunction(undefined, undefined, [
85
+ factory.createParameterDeclaration(undefined, undefined, 'override', factory.createToken(ts.SyntaxKind.QuestionToken), overrideType(op)),
86
+ ], undefined, factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), handlerCall(op, model, opts));
87
+ return factory.createVariableStatement([factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([factory.createVariableDeclaration(`${op.name}Handler`, undefined, undefined, arrow)], ts.NodeFlags.Const));
88
+ }
89
+ /**
90
+ * `export const <op>ErrorHandler = (status: <StatusUnion>, body?: <BodyType>) =>
91
+ * http.<method>("<mswPath>", () => HttpResponse.json(body ?? <bakedSample>, { status }));`
92
+ *
93
+ * Opt-in (not added to `handlers`): `server.use(getPetErrorHandler(404))` overrides the
94
+ * happy path with an error. `<StatusUnion>` is the declared error statuses as literals
95
+ * (plus `number` when a `default` error is present, so any status is allowed). The baked
96
+ * fallback samples the FIRST error response's schema.
97
+ */
98
+ function errorHandlerFor(op, model, opts) {
99
+ const first = op.errorResponses[0];
100
+ const baked = bodyExpression(first.schema, model, opts);
101
+ const body = factory.createBinaryExpression(factory.createIdentifier('body'), factory.createToken(ts.SyntaxKind.QuestionQuestionToken), baked);
102
+ const resolver = factory.createArrowFunction(undefined, undefined, [], undefined, factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier('HttpResponse'), 'json'), undefined, [
103
+ body,
104
+ factory.createObjectLiteralExpression([factory.createShorthandPropertyAssignment('status')], false),
105
+ ]));
106
+ const call = factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier('http'), op.method), undefined, [factory.createStringLiteral(mswPath(op.path)), resolver]);
107
+ const arrow = factory.createArrowFunction(undefined, undefined, [
108
+ factory.createParameterDeclaration(undefined, undefined, 'status', undefined, errorStatusType(op)),
109
+ factory.createParameterDeclaration(undefined, undefined, 'body', factory.createToken(ts.SyntaxKind.QuestionToken), errorBodyType(op)),
110
+ ], undefined, factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), call);
111
+ return factory.createVariableStatement([factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([factory.createVariableDeclaration(`${op.name}ErrorHandler`, undefined, undefined, arrow)], ts.NodeFlags.Const));
112
+ }
113
+ /**
114
+ * A union of the op's declared numeric error statuses (as literals); `number` is used in place
115
+ * of a literal whenever a `default` error is present, so any status is accepted. De-duped, since
116
+ * a multi-media-type error contributes the same status more than once.
117
+ */
118
+ function errorStatusType(op) {
119
+ const codes = [
120
+ ...new Set(op.errorResponses.filter((r) => r.status !== 'default').map((r) => r.status)),
121
+ ];
122
+ const members = codes.map((c) => factory.createLiteralTypeNode(factory.createNumericLiteral(c)));
123
+ // A `default` error means any status is valid, so widen the union with `number`.
124
+ if (op.errorResponses.some((r) => r.status === 'default')) {
125
+ members.push(factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword));
126
+ }
127
+ return members.length === 1 ? members[0] : factory.createUnionTypeNode(members);
128
+ }
129
+ /**
130
+ * The `body?` type: the union of the error responses' body types — `ref` bodies map to their
131
+ * named type, anything else to `unknown` (matching how the success handler types its override
132
+ * loosely). De-duped by printed name.
133
+ */
134
+ function errorBodyType(op) {
135
+ const names = new Set();
136
+ let hasUnknown = false;
137
+ for (const r of op.errorResponses) {
138
+ if (r.schema.kind === 'ref')
139
+ names.add(pascalCase(r.schema.name));
140
+ else
141
+ hasUnknown = true;
142
+ }
143
+ const members = [...names].map((n) => factory.createTypeReferenceNode(n));
144
+ if (hasUnknown || members.length === 0) {
145
+ members.push(factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword));
146
+ }
147
+ return members.length === 1 ? members[0] : factory.createUnionTypeNode(members);
148
+ }
149
+ /**
150
+ * The static type of a handler's `override?` parameter, matching how the response uses it.
151
+ * A `ref` success body forwards `override` to `create<Schema>(override)` (whose parameter is
152
+ * `Partial<Schema>`), so the override is `Partial<Schema>`. Otherwise `override` is either spread
153
+ * into an inline object literal or unused, so `Record<string, unknown>` types it without error.
154
+ */
155
+ function overrideType(op) {
156
+ const success = op.successResponses[0];
157
+ if (success?.schema.kind === 'ref') {
158
+ return factory.createTypeReferenceNode('Partial', [
159
+ factory.createTypeReferenceNode(pascalCase(success.schema.name)),
160
+ ]);
161
+ }
162
+ return factory.createTypeReferenceNode('Record', [
163
+ factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
164
+ factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),
165
+ ]);
166
+ }
167
+ /** `http.<method>('<mswPath>', () => <responseExpr>)`. */
168
+ function handlerCall(op, model, opts) {
169
+ const resolver = factory.createArrowFunction(undefined, undefined, [], undefined, factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), responseExpression(op, model, opts));
170
+ return factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier('http'), op.method), undefined, [factory.createStringLiteral(mswPath(op.path)), resolver]);
171
+ }
172
+ /**
173
+ * The handler's response. A primary success body becomes `HttpResponse.json(…)`:
174
+ * a `ref` body calls its named `create<Schema>(override)` factory; an inline body
175
+ * is sampled and printed in place with `...override` spread in. A success with no
176
+ * usable body (an `unknown` schema, or no success response at all) becomes a
177
+ * body-less `new HttpResponse(null, { status })`. The status is the success
178
+ * response's declared code, or 200 when it's `default`/absent.
179
+ */
180
+ function responseExpression(op, model, opts) {
181
+ const success = op.successResponses[0];
182
+ const status = statusCode(success?.status);
183
+ if (!success || success.schema.kind === 'unknown')
184
+ return emptyResponse(status);
185
+ const data = success.schema.kind === 'ref'
186
+ ? factory.createCallExpression(factory.createIdentifier(`create${pascalCase(success.schema.name)}`), undefined, [factory.createIdentifier('override')])
187
+ : spreadOverrides(bodyExpression(success.schema, model, opts), 'override');
188
+ // `HttpResponse.json(x)` already defaults to 200, so only pass `{ status }` when it differs.
189
+ const args = status === 200 ? [data] : [data, statusInit(status)];
190
+ return factory.createCallExpression(factory.createPropertyAccessExpression(factory.createIdentifier('HttpResponse'), 'json'), undefined, args);
191
+ }
192
+ /** Numeric status for a response, mapping `default`/absent to 200. */
193
+ function statusCode(status) {
194
+ return typeof status === 'number' ? status : 200;
195
+ }
196
+ /** `{ status: <n> }`. */
197
+ function statusInit(status) {
198
+ return factory.createObjectLiteralExpression([factory.createPropertyAssignment('status', factory.createNumericLiteral(status))], false);
199
+ }
200
+ /** `new HttpResponse(null, { status: <n> })`. */
201
+ function emptyResponse(status) {
202
+ return factory.createNewExpression(factory.createIdentifier('HttpResponse'), undefined, [
203
+ factory.createNull(),
204
+ statusInit(status),
205
+ ]);
206
+ }
207
+ /** `export const handlers = [<op>Handler(), …];`. */
208
+ function handlersArray(operations) {
209
+ const elements = operations.map((op) => factory.createCallExpression(factory.createIdentifier(`${op.name}Handler`), undefined, []));
210
+ return factory.createVariableStatement([factory.createModifier(ts.SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([
211
+ factory.createVariableDeclaration('handlers', undefined, undefined, factory.createArrayLiteralExpression(elements, false)),
212
+ ], ts.NodeFlags.Const));
213
+ }
214
+ /** Spread `<spreadName>` into an object literal; non-object values pass through unchanged. */
215
+ function spreadOverrides(value, spreadName) {
216
+ if (!ts.isObjectLiteralExpression(value))
217
+ return value;
218
+ return factory.createObjectLiteralExpression([...value.properties, factory.createSpreadAssignment(factory.createIdentifier(spreadName))], true);
219
+ }
220
+ /** `/pets/{petId}` → `*​/pets/:petId` — MSW path with a wildcard origin and `:param` segments. */
221
+ function mswPath(path) {
222
+ return `*${path.replace(/\{([^{}]+)\}/g, ':$1')}`;
223
+ }
224
+ /** Recursively print a sampled JS value as a TypeScript literal expression. Containers
225
+ * stay local rather than delegating to the shared `literalExpression`: sampled trees
226
+ * print multiline and may nest a `SampleExpression` at any depth. */
227
+ function literal(value) {
228
+ if (value instanceof SampleExpression)
229
+ return parseExpression(value.code);
230
+ if (Array.isArray(value)) {
231
+ return factory.createArrayLiteralExpression(value.map(literal), true);
232
+ }
233
+ if (isPlainObject(value)) {
234
+ const entries = Object.entries(value);
235
+ return factory.createObjectLiteralExpression(entries.map(([key, v]) => {
236
+ const safe = safeIdent(key);
237
+ const name = safe === key ? factory.createIdentifier(key) : factory.createStringLiteral(key);
238
+ return factory.createPropertyAssignment(name, literal(v));
239
+ }), true);
240
+ }
241
+ return literalExpression(value);
242
+ }
243
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/emitters/mock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { OperationModel, ParamModel } from '../intermediate-representation/model.js';
2
+ import type { EmitContext } from './operations.js';
3
+ import { ts } from './ts.js';
4
+ /**
5
+ * Emit derived type aliases for an operation so callers can name intermediate
6
+ * values without re-deriving via `Awaited<ReturnType<...>>` plumbing.
7
+ *
8
+ * `*Result` is always emitted (even for `void`). The others are conditional on
9
+ * the operation actually having the corresponding inputs — emitting empty
10
+ * `*Params = {}` or `*Body = unknown` aliases would just be noise.
11
+ */
12
+ export declare function renderOperationAliases(op: OperationModel, responseType: ts.TypeNode, orderedPathParams: ParamModel[], pathParamIdent: Map<string, string>, errorAlias: string, errorMembers: ts.TypeNode[], ctx: EmitContext, emitResultAndError?: boolean, pathKeys?: 'ident' | 'wire'): ts.Statement[];
13
+ /**
14
+ * An SSE op's input aliases (`*Params` / `*Body` / `*Headers` / `*Variables`) — but NOT
15
+ * `*Result`/`*Error`, which describe a one-shot response an event stream has no equivalent of.
16
+ * Passes the real `schemaNames` so the input aliases still get collision suppression, and sets
17
+ * `emitResultAndError = false` to omit the result/error pair.
18
+ */
19
+ export declare function sseAliases(op: OperationModel, orderedPathParams: ParamModel[], pathParamIdent: Map<string, string>, ctx: EmitContext, pathKeys?: 'ident' | 'wire'): ts.Statement[];
20
+ /**
21
+ * The `<Op>Variables` object type literal (the body of the alias, reused inline by the grouped
22
+ * signature when the alias name itself collides). Each `params`/`body`/`headers` property
23
+ * references its `<Op>X` alias, or inlines the type when that alias name collides with a schema
24
+ * (so a suppressed alias is never referenced).
25
+ */
26
+ export declare function variablesTypeLiteral(op: OperationModel, name: string, orderedPathParams: ParamModel[], pathParamIdent: Map<string, string>, ctx: EmitContext, pathKeys?: 'ident' | 'wire'): ts.TypeNode;
27
+ //# sourceMappingURL=operation-aliases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-aliases.d.ts","sourceRoot":"","sources":["../../src/emitters/operation-aliases.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAK1F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,EAAS,EAAE,EAAE,MAAM,SAAS,CAAC;AAKpC;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,cAAc,EAClB,YAAY,EAAE,EAAE,CAAC,QAAQ,EACzB,iBAAiB,EAAE,UAAU,EAAE,EAC/B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,EAAE,CAAC,QAAQ,EAAE,EAC3B,GAAG,EAAE,WAAW,EAGhB,kBAAkB,UAAO,EAEzB,QAAQ,GAAE,OAAO,GAAG,MAAgB,GACnC,EAAE,CAAC,SAAS,EAAE,CA2DhB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,cAAc,EAClB,iBAAiB,EAAE,UAAU,EAAE,EAC/B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,GAAG,EAAE,WAAW,EAChB,QAAQ,GAAE,OAAO,GAAG,MAAgB,GACnC,EAAE,CAAC,SAAS,EAAE,CAYhB;AA6CD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,UAAU,EAAE,EAC/B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,GAAG,EAAE,WAAW,EAIhB,QAAQ,GAAE,OAAO,GAAG,MAAgB,GACnC,EAAE,CAAC,QAAQ,CAoDb"}
@@ -0,0 +1,138 @@
1
+ // The `<Op>*` derived type-alias builders (`<Op>Result`/`Error`/`Params`/`Body`/`Headers`/`Variables`).
2
+ // Split out of operations.ts: this is the cohesive cluster the sdk emits so callers can name
3
+ // intermediate values. Reuses the shared type builders (operation-types.ts) and the block-wide
4
+ // `EmitContext` (a type-only import from operations.ts — erased, so there is no runtime cycle).
5
+ import { safeIdent } from './identifier.js';
6
+ import { jsdocText } from './jsdoc.js';
7
+ import { operationSignature } from './operation-signature.js';
8
+ import { bodyTypeNode, paramsTypeLiteral, propertyKey } from './operation-types.js';
9
+ import { pascalCase } from './support.js';
10
+ import { jsdoc, ts } from './ts.js';
11
+ import { schemaToTypeNode } from './types.js';
12
+ const { factory } = ts;
13
+ /**
14
+ * Emit derived type aliases for an operation so callers can name intermediate
15
+ * values without re-deriving via `Awaited<ReturnType<...>>` plumbing.
16
+ *
17
+ * `*Result` is always emitted (even for `void`). The others are conditional on
18
+ * the operation actually having the corresponding inputs — emitting empty
19
+ * `*Params = {}` or `*Body = unknown` aliases would just be noise.
20
+ */
21
+ export function renderOperationAliases(op, responseType, orderedPathParams, pathParamIdent, errorAlias, errorMembers, ctx,
22
+ // SSE ops have no one-shot response, so they omit `*Result`/`*Error` and keep only the input
23
+ // aliases.
24
+ emitResultAndError = true,
25
+ // Threaded to the `<Op>Variables` body — see `variablesTypeLiteral`.
26
+ pathKeys = 'ident') {
27
+ const { dateType, schemaNames } = ctx;
28
+ const name = pascalCase(op.name);
29
+ const aliases = [];
30
+ // Every derived alias is suppressed when its name collides with an exported schema (a
31
+ // duplicate `export type` is a TS2300 error). References to a suppressed alias inline the
32
+ // underlying type instead — see `renderOperationParts` (Result/Error) and `renderVariablesAlias`
33
+ // / the grouped signature (Params/Body/Headers/Variables).
34
+ // Emit `export type <Op>Result = …` unless its name collides with an exported schema. Two
35
+ // cases collide: self-referential (operation `search` returning schema `SearchResult` →
36
+ // `export type SearchResult = SearchResult;`, circular) and plain (operation `login` returning
37
+ // some other type while a `LoginResult` schema also exists). In both, call sites reference the
38
+ // response type directly (`renderOperationParts`), so the alias is redundant.
39
+ const resultName = `${name}Result`;
40
+ if (emitResultAndError && !schemaNames.has(resultName)) {
41
+ aliases.push(exportType(resultName, responseType));
42
+ }
43
+ // Result mode only, and only when the operation declares error responses: the typed `error`.
44
+ if (emitResultAndError && errorAlias && !schemaNames.has(errorAlias)) {
45
+ aliases.push(exportType(errorAlias, errorMembers.length === 1 ? errorMembers[0] : factory.createUnionTypeNode(errorMembers)));
46
+ }
47
+ if (op.queryParams.length > 0 && !schemaNames.has(`${name}Params`)) {
48
+ // Reuse the params type-literal builder so the alias body picks up per-prop
49
+ // JSDoc automatically — no second renderer to keep in sync.
50
+ aliases.push(exportType(`${name}Params`, paramsTypeLiteral(op.queryParams, dateType)));
51
+ }
52
+ if (op.requestBody && !schemaNames.has(`${name}Body`)) {
53
+ // Use the same content-type → TS-type mapping as the function signature, so
54
+ // `<Op>Body` matches the second-positional arg of the function exactly.
55
+ aliases.push(exportType(`${name}Body`, bodyTypeNode(op.requestBody, dateType)));
56
+ }
57
+ if (op.headerParams.length > 0 && !schemaNames.has(`${name}Headers`)) {
58
+ aliases.push(exportType(`${name}Headers`, paramsTypeLiteral(op.headerParams, dateType)));
59
+ }
60
+ if (!schemaNames.has(`${name}Variables`)) {
61
+ const variables = renderVariablesAlias(op, name, orderedPathParams, pathParamIdent, ctx, pathKeys);
62
+ if (variables)
63
+ aliases.push(variables);
64
+ }
65
+ return aliases;
66
+ }
67
+ /**
68
+ * An SSE op's input aliases (`*Params` / `*Body` / `*Headers` / `*Variables`) — but NOT
69
+ * `*Result`/`*Error`, which describe a one-shot response an event stream has no equivalent of.
70
+ * Passes the real `schemaNames` so the input aliases still get collision suppression, and sets
71
+ * `emitResultAndError = false` to omit the result/error pair.
72
+ */
73
+ export function sseAliases(op, orderedPathParams, pathParamIdent, ctx, pathKeys = 'ident') {
74
+ return renderOperationAliases(op, factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword), orderedPathParams, pathParamIdent, '', [], ctx, false, pathKeys);
75
+ }
76
+ /** `export type <name> = <type>;` */
77
+ function exportType(name, type) {
78
+ return factory.createTypeAliasDeclaration([factory.createModifier(ts.SyntaxKind.ExportKeyword)], name, undefined, type);
79
+ }
80
+ /**
81
+ * Combined inputs alias — a single object that bundles every positional input
82
+ * the operation function accepts. The seam React Query / SWR wrappers use:
83
+ *
84
+ * useMutation({ mutationFn: (vars: UpdateOrderVariables) => updateOrder(vars.orderId, vars.params, vars.body) })
85
+ *
86
+ * Conventions:
87
+ * - Property order: path params (URL-template order), then `params`, then `body`,
88
+ * then `headers`. Mirrors the function's positional argument order.
89
+ * - Path-param props carry the same JSDoc (description + schema metadata) the
90
+ * function declaration omits.
91
+ * - `params?` is optional iff the function signature defaults to `= {}` (all query
92
+ * params optional). Same rule for `body?` / `headers?`.
93
+ * - References `<Op>Params` / `<Op>Body` / `<Op>Headers` when those aliases were
94
+ * also emitted, so the aliases stay in sync without duplicating their bodies.
95
+ *
96
+ * Returns `undefined` for operations with no inputs at all.
97
+ */
98
+ function renderVariablesAlias(op, name, orderedPathParams, pathParamIdent, ctx, pathKeys) {
99
+ if (!operationSignature(op).hasInputs)
100
+ return undefined;
101
+ return exportType(name + 'Variables', variablesTypeLiteral(op, name, orderedPathParams, pathParamIdent, ctx, pathKeys));
102
+ }
103
+ /**
104
+ * The `<Op>Variables` object type literal (the body of the alias, reused inline by the grouped
105
+ * signature when the alias name itself collides). Each `params`/`body`/`headers` property
106
+ * references its `<Op>X` alias, or inlines the type when that alias name collides with a schema
107
+ * (so a suppressed alias is never referenced).
108
+ */
109
+ export function variablesTypeLiteral(op, name, orderedPathParams, pathParamIdent, ctx,
110
+ // How path-param properties are keyed: `'ident'` (default) uses the sanitized identifier
111
+ // that doubles as the flat positional argument; `'wire'` (package mode) uses the spec's
112
+ // param name — quoted when needed — because the runtime routes `args[param.name]`.
113
+ pathKeys = 'ident') {
114
+ const { dateType, schemaNames } = ctx;
115
+ const props = [];
116
+ for (const p of orderedPathParams) {
117
+ // Ident mode: same safe identifier the function uses, so a wrapper can map
118
+ // `vars.<ident>` straight onto the positional argument.
119
+ const sig = factory.createPropertySignature(undefined, pathKeys === 'wire' ? propertyKey(safeIdent(p.name)) : pathParamIdent.get(p.name), undefined, schemaToTypeNode(p.schema, dateType));
120
+ const doc = jsdocText(p.description, p.schema.metadata);
121
+ props.push(doc === undefined ? sig : jsdoc(sig, doc));
122
+ }
123
+ if (op.queryParams.length > 0) {
124
+ props.push(inputProp('params', `${name}Params`, () => paramsTypeLiteral(op.queryParams, dateType), op.queryParams.some((p) => p.required), schemaNames));
125
+ }
126
+ if (op.requestBody) {
127
+ props.push(inputProp('body', `${name}Body`, () => bodyTypeNode(op.requestBody, dateType), op.requestBody.required, schemaNames));
128
+ }
129
+ if (op.headerParams.length > 0) {
130
+ props.push(inputProp('headers', `${name}Headers`, () => paramsTypeLiteral(op.headerParams, dateType), op.headerParams.some((p) => p.required), schemaNames));
131
+ }
132
+ return factory.createTypeLiteralNode(props);
133
+ }
134
+ /** A `<key>(?): <Alias>` property, or an inline-typed one when `<Alias>` collides with a schema. */
135
+ function inputProp(key, alias, inlineType, required, schemaNames) {
136
+ return factory.createPropertySignature(undefined, key, required ? undefined : factory.createToken(ts.SyntaxKind.QuestionToken), schemaNames.has(alias) ? inlineType() : factory.createTypeReferenceNode(alias));
137
+ }
138
+ //# sourceMappingURL=operation-aliases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-aliases.js","sourceRoot":"","sources":["../../src/emitters/operation-aliases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { OperationModel, ParamModel } from '../intermediate-representation/model.js';
2
+ /** A path parameter paired with the unique JS identifier used for it in flat mode. */
3
+ export type SignaturePathParam = {
4
+ param: ParamModel;
5
+ ident: string;
6
+ };
7
+ export type OperationSignature = {
8
+ /** Path params in URL-template order, each with its unique JS identifier. */
9
+ pathParams: SignaturePathParam[];
10
+ /** Slot presence, in the order flat-mode arguments follow the path params. */
11
+ hasQuery: boolean;
12
+ hasBody: boolean;
13
+ hasHeaders: boolean;
14
+ /** Any input at all — i.e. a `<Op>Variables` type exists for the operation. */
15
+ hasInputs: boolean;
16
+ /** Grouped mode: whether `vars` is required (else it defaults to `= {}`). */
17
+ varsRequired: boolean;
18
+ /** The `<Op>Variables` type-alias name. */
19
+ variablesTypeName: string;
20
+ };
21
+ /** Compute the calling-convention description for `op`. Pure; no AST. */
22
+ export declare function operationSignature(op: OperationModel): OperationSignature;
23
+ //# sourceMappingURL=operation-signature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-signature.d.ts","sourceRoot":"","sources":["../../src/emitters/operation-signature.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAI1F,sFAAsF;AACtF,MAAM,MAAM,kBAAkB,GAAG;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,6EAA6E;IAC7E,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,8EAA8E;IAC9E,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,YAAY,EAAE,OAAO,CAAC;IACtB,2CAA2C;IAC3C,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,kBAAkB,CA0BzE"}
@@ -0,0 +1,34 @@
1
+ // The shared calling-convention description for an operation. Both the sdk (which
2
+ // emits each operation's parameter list) and the wrapper generators (which emit the
3
+ // forwarding call) derive their argument *order*, slot presence, and `<Op>Variables`
4
+ // naming from this one source — so a flat-mode signature and its call site can never drift.
5
+ import { uniqueIdent } from './identifier.js';
6
+ import { pascalCase } from './support.js';
7
+ /** Compute the calling-convention description for `op`. Pure; no AST. */
8
+ export function operationSignature(op) {
9
+ const byName = new Map(op.pathParams.map((p) => [p.name, p]));
10
+ const ordered = [];
11
+ for (const match of op.path.matchAll(/\{([^{}]+)\}/g)) {
12
+ const p = byName.get(match[1]);
13
+ if (p)
14
+ ordered.push(p);
15
+ }
16
+ const used = new Set();
17
+ const pathParams = ordered.map((param) => ({ param, ident: uniqueIdent(param.name, used) }));
18
+ const hasQuery = op.queryParams.length > 0;
19
+ const hasBody = Boolean(op.requestBody);
20
+ const hasHeaders = op.headerParams.length > 0;
21
+ return {
22
+ pathParams,
23
+ hasQuery,
24
+ hasBody,
25
+ hasHeaders,
26
+ hasInputs: pathParams.length > 0 || hasQuery || hasBody || hasHeaders,
27
+ varsRequired: pathParams.length > 0 ||
28
+ op.queryParams.some((p) => p.required) ||
29
+ (op.requestBody?.required ?? false) ||
30
+ op.headerParams.some((p) => p.required),
31
+ variablesTypeName: `${pascalCase(op.name)}Variables`,
32
+ };
33
+ }
34
+ //# sourceMappingURL=operation-signature.js.map