@xemahq/api-client-generator 0.15.2 → 0.17.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.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "algorithm": "sha256/len-framed-v1",
3
- "hash": "3d71b29519f279bb9b9e8b511f020503ff7d06e5ad9d670870b11f79cab16aad",
4
- "fileCount": 16
3
+ "hash": "a33ae31769991ec28ec11bc0473da7eac11278271c9bc86bbab1079f46dbf7f5",
4
+ "fileCount": 18
5
5
  }
@@ -0,0 +1,42 @@
1
+ export interface OperationResponseShape {
2
+ readonly operationId: string;
3
+ readonly method: string;
4
+ readonly route: string;
5
+ readonly successCodes: readonly string[];
6
+ readonly declaresResponseSchema: boolean;
7
+ }
8
+ export interface StructuralExemption {
9
+ readonly serviceId: string;
10
+ readonly operationId: string;
11
+ readonly reason: string;
12
+ }
13
+ export interface PendingDeclaration {
14
+ readonly serviceId: string;
15
+ readonly operationId: string;
16
+ readonly reason: string;
17
+ readonly declaredOn: string;
18
+ readonly fixBy: string;
19
+ }
20
+ export declare const STRUCTURAL_EXEMPTIONS: readonly StructuralExemption[];
21
+ export declare const PENDING_DECLARATIONS: readonly PendingDeclaration[];
22
+ export interface ResponseShapeDocument {
23
+ readonly paths?: Record<string, Record<string, unknown> | undefined>;
24
+ }
25
+ export declare function collectOperationResponseShapes(doc: ResponseShapeDocument): OperationResponseShape[];
26
+ export interface DeclaredGetResponseSummary {
27
+ readonly gets: number;
28
+ readonly declared: number;
29
+ readonly exempt: number;
30
+ readonly pending: number;
31
+ readonly pendingResolved: number;
32
+ }
33
+ export interface DeclaredGetResponseInput {
34
+ readonly serviceId: string;
35
+ readonly shapes: readonly OperationResponseShape[];
36
+ readonly today?: Date;
37
+ readonly structuralExemptions?: readonly StructuralExemption[];
38
+ readonly pendingDeclarations?: readonly PendingDeclaration[];
39
+ }
40
+ export declare function assertDeclaredGetResponses(input: DeclaredGetResponseInput): DeclaredGetResponseSummary;
41
+ export declare function formatDeclaredGetResponseSummary(summary: DeclaredGetResponseSummary): string;
42
+ //# sourceMappingURL=assert-declared-get-responses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-declared-get-responses.d.ts","sourceRoot":"","sources":["../../src/lib/assert-declared-get-responses.ts"],"names":[],"mappings":"AA8CA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAEzC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;CAC1C;AAkBD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AASD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAK5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AASD,eAAO,MAAM,qBAAqB,EAAE,SAAS,mBAAmB,EA0H/D,CAAC;AAeF,eAAO,MAAM,oBAAoB,EAAE,SAAS,kBAAkB,EAgG7D,CAAC;AAGF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;CACtE;AAoBD,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,qBAAqB,GACzB,sBAAsB,EAAE,CA6C1B;AAmBD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAEnD,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/D,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAC9D;AA+BD,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,wBAAwB,GAC9B,0BAA0B,CAwH5B;AAGD,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,0BAA0B,GAClC,MAAM,CAQR"}
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PENDING_DECLARATIONS = exports.STRUCTURAL_EXEMPTIONS = void 0;
4
+ exports.collectOperationResponseShapes = collectOperationResponseShapes;
5
+ exports.assertDeclaredGetResponses = assertDeclaredGetResponses;
6
+ exports.formatDeclaredGetResponseSummary = formatDeclaredGetResponseSummary;
7
+ const BODILESS_SUCCESS_CODES = new Set(['204', '205']);
8
+ exports.STRUCTURAL_EXEMPTIONS = [
9
+ ...[
10
+ 'artifact-store-api',
11
+ 'audit-log-api',
12
+ 'knowledge-base-api',
13
+ 'project-registry-api',
14
+ 'backlog-api',
15
+ 'scm-connector-api',
16
+ 'search-api',
17
+ ].map((serviceId) => ({
18
+ serviceId,
19
+ operationId: 'McpController_handleGet',
20
+ reason: 'MCP Streamable-HTTP transport is POST-only here; this GET only ever ' +
21
+ 'writes a 405 JSON-RPC error to @Res(). It has no success body, so there ' +
22
+ 'is no schema to declare — the 200 in the document is the framework ' +
23
+ 'default for an @Res() handler.',
24
+ })),
25
+ {
26
+ serviceId: 'activity-feed-api',
27
+ operationId: 'realtime_stream',
28
+ reason: 'SSE edge contributed by @xemahq/realtime-stream (operationId ' +
29
+ '`realtime.stream`, see src/realtime/realtime-stream-classification.ts). ' +
30
+ 'Emits text/event-stream frames to @Res(); there is no JSON body.',
31
+ },
32
+ {
33
+ serviceId: 'activity-feed-api',
34
+ operationId: 'realtime_session_stream',
35
+ reason: 'SSE edge contributed by @xemahq/realtime-stream (operationId ' +
36
+ '`realtime.sessionStream`). Emits text/event-stream frames to @Res(); ' +
37
+ 'there is no JSON body.',
38
+ },
39
+ {
40
+ serviceId: 'workflow-engine-api',
41
+ operationId: 'RunStreamController_stream',
42
+ reason: 'SSE run stream (@RawResponse, src/runs/run-stream.controller.ts). Polls ' +
43
+ 'Temporal and writes snapshot-delta events plus heartbeats to @Res() ' +
44
+ 'until the run is terminal; it returns Promise<void> for real.',
45
+ },
46
+ {
47
+ serviceId: 'biome-host-api',
48
+ operationId: 'BundleBytesController_download',
49
+ reason: 'Streams the granted biome bundle tarball (raw gzip) to @Res() for a ' +
50
+ 'dispatched adapter host (@RawResponse, src/bundle-bytes/). Bytes, not a ' +
51
+ 'JSON document.',
52
+ },
53
+ {
54
+ serviceId: 'policy-distributor-api',
55
+ operationId: 'BundleServiceController_download',
56
+ reason: 'OPA Bundle Service poll endpoint; streams the bundle tarball (raw gzip) ' +
57
+ 'to @Res() (@RawResponse, src/bundles/bundle-service.controller.ts). The ' +
58
+ 'consumer is the vendored OPA sidecar, which reads bytes.',
59
+ },
60
+ {
61
+ serviceId: 'document-render-api',
62
+ operationId: 'RendersController_download',
63
+ reason: 'Streams the rendered file bytes with a service-chosen Content-Type and ' +
64
+ 'filename (src/renders/renders.controller.ts). The typed record is a ' +
65
+ 'separate route, `RendersController_get`, which does declare its DTO.',
66
+ },
67
+ {
68
+ serviceId: 'workflow-engine-api',
69
+ operationId: 'DslSchemasController_workflow',
70
+ reason: 'Serves the JSON Schema for `kind: Workflow` as application/schema+json, ' +
71
+ 'generated at boot from the kernel Zod schema. The body is a schema ' +
72
+ 'document, not a DTO.',
73
+ },
74
+ {
75
+ serviceId: 'workflow-engine-api',
76
+ operationId: 'DslSchemasController_reusableWorkflow',
77
+ reason: 'Serves the JSON Schema for `kind: ReusableWorkflow` as ' +
78
+ 'application/schema+json, generated at boot from the kernel Zod schema.',
79
+ },
80
+ {
81
+ serviceId: 'workflow-engine-api',
82
+ operationId: 'DslSchemasController_action',
83
+ reason: 'Serves the JSON Schema for `kind: Action` as application/schema+json, ' +
84
+ 'generated at boot from the kernel Zod schema.',
85
+ },
86
+ {
87
+ serviceId: 'deliverable-specs-api',
88
+ operationId: 'SchemasController_deliverableSpec',
89
+ reason: 'Serves the JSON Schema for `kind: DeliverableSpec` as ' +
90
+ 'application/schema+json, generated at boot from the kernel Zod schema.',
91
+ },
92
+ {
93
+ serviceId: 'deliverable-specs-api',
94
+ operationId: 'SchemasController_deliverableSpecOverlay',
95
+ reason: 'Serves the JSON Schema for `kind: DeliverableSpecOverlay` as ' +
96
+ 'application/schema+json, generated at boot from the kernel Zod schema.',
97
+ },
98
+ ];
99
+ exports.PENDING_DECLARATIONS = [
100
+ {
101
+ serviceId: 'container-registry-api',
102
+ operationId: 'RepositoriesController_list',
103
+ reason: 'Returns Promise<ListRepositoriesResponseDto> — the DTO class already ' +
104
+ 'exists, decorated, at src/repositories/dto/repository.dto.ts. The route ' +
105
+ 'carries @ApiOperation but no response decorator, so the extracted spec ' +
106
+ 'has nothing. One @ApiDataResponse(ListRepositoriesResponseDto) fixes it.',
107
+ declaredOn: '2026-08-27',
108
+ fixBy: '2026-10-15',
109
+ },
110
+ {
111
+ serviceId: 'container-registry-api',
112
+ operationId: 'TokenController_issueToken',
113
+ reason: 'Returns Promise<TokenResponse> — the Distribution Token Spec body ' +
114
+ '(token/expires_in/issued_at), a fixed and externally specified shape. ' +
115
+ 'Needs a decorated DTO class; the route declares no response today.',
116
+ declaredOn: '2026-08-27',
117
+ fixBy: '2026-10-15',
118
+ },
119
+ {
120
+ serviceId: 'biome-adapter-host',
121
+ operationId: 'SidecarController_manifest',
122
+ reason: 'Returns SidecarManifestResponse from @xemahq/biome-sdk/adapter — a TYPE ' +
123
+ 'import, so nothing survives to runtime and no schema can be derived. ' +
124
+ 'The shape is fully known (adapterKind, provider, displayName, ' +
125
+ 'credentialKind, resourceTypes, actionNames, optional verifier) and needs ' +
126
+ 'a decorated DTO class. NOT the /webhook/verify route, which is a ' +
127
+ 'separate POST handler on the same controller.',
128
+ declaredOn: '2026-08-27',
129
+ fixBy: '2026-10-15',
130
+ },
131
+ {
132
+ serviceId: 'app-platform-api',
133
+ operationId: 'DelegatedSessionJwksController_jwks',
134
+ reason: 'Returns Promise<JwksDocument> — an RFC 7517 JWK Set. Served raw ' +
135
+ '(@RawResponse) so external verifiers get an unenveloped document, which ' +
136
+ 'is a reason to skip the envelope, not a reason to omit the schema: ' +
137
+ '{ keys: JWK[] } is declarable.',
138
+ declaredOn: '2026-08-27',
139
+ fixBy: '2026-10-15',
140
+ },
141
+ {
142
+ serviceId: 'org-database-pool-api',
143
+ operationId: 'PoolController_list',
144
+ reason: 'src/pool/pool.controller.ts `list()` has no return-type annotation and ' +
145
+ 'no response decorator; it returns PoolService.listPools(). Being fixed ' +
146
+ 'alongside the other pool controllers.',
147
+ declaredOn: '2026-08-27',
148
+ fixBy: '2026-10-15',
149
+ },
150
+ {
151
+ serviceId: 'org-database-pool-api',
152
+ operationId: 'PoolController_get',
153
+ reason: 'src/pool/pool.controller.ts `get()` has no return-type annotation and no ' +
154
+ 'response decorator; it returns PoolService.getPoolForOrg(). This is the ' +
155
+ 'browser-facing Public-surface route, so the generated void is reaching a ' +
156
+ 'real UI caller.',
157
+ declaredOn: '2026-08-27',
158
+ fixBy: '2026-10-15',
159
+ },
160
+ {
161
+ serviceId: 'org-database-pool-api',
162
+ operationId: 'MigrationController_listByDatabase',
163
+ reason: 'src/migration/migration.controller.ts `listByDatabase()` has no ' +
164
+ 'return-type annotation and no response decorator; it returns ' +
165
+ 'MigrationService.listByDatabase(). Public surface.',
166
+ declaredOn: '2026-08-27',
167
+ fixBy: '2026-10-15',
168
+ },
169
+ {
170
+ serviceId: 'org-database-pool-api',
171
+ operationId: 'MigrationController_get',
172
+ reason: 'src/migration/migration.controller.ts `get()` has no return-type ' +
173
+ 'annotation and no response decorator; it returns ' +
174
+ 'MigrationService.getMigrationRun().',
175
+ declaredOn: '2026-08-27',
176
+ fixBy: '2026-10-15',
177
+ },
178
+ {
179
+ serviceId: 'redis-pool-api',
180
+ operationId: 'PoolController_list',
181
+ reason: 'src/pool/pool.controller.ts `list()` has no return-type annotation and ' +
182
+ 'no response decorator; it returns PoolService.listPools().',
183
+ declaredOn: '2026-08-27',
184
+ fixBy: '2026-10-15',
185
+ },
186
+ ];
187
+ const HTTP_METHODS = new Set([
188
+ 'get',
189
+ 'post',
190
+ 'put',
191
+ 'patch',
192
+ 'delete',
193
+ 'head',
194
+ 'options',
195
+ 'trace',
196
+ ]);
197
+ function collectOperationResponseShapes(doc) {
198
+ const shapes = [];
199
+ for (const [route, pathItem] of Object.entries(doc.paths ?? {})) {
200
+ if (!pathItem || typeof pathItem !== 'object') {
201
+ continue;
202
+ }
203
+ for (const [method, operation] of Object.entries(pathItem)) {
204
+ if (!HTTP_METHODS.has(method.toLowerCase())) {
205
+ continue;
206
+ }
207
+ const op = operation;
208
+ if (!op || typeof op !== 'object') {
209
+ continue;
210
+ }
211
+ const responses = (op.responses ?? {});
212
+ const successCodes = Object.keys(responses).filter((code) => code.startsWith('2'));
213
+ let declaresResponseSchema = false;
214
+ for (const code of successCodes) {
215
+ const response = responses[code];
216
+ for (const body of Object.values(response?.content ?? {})) {
217
+ if (body?.schema !== undefined) {
218
+ declaresResponseSchema = true;
219
+ }
220
+ }
221
+ }
222
+ shapes.push({
223
+ operationId: typeof op.operationId === 'string' ? op.operationId : `${method} ${route}`,
224
+ method: method.toLowerCase(),
225
+ route,
226
+ successCodes,
227
+ declaresResponseSchema,
228
+ });
229
+ }
230
+ }
231
+ return shapes;
232
+ }
233
+ function isUndeclaredGet(shape) {
234
+ if (shape.method !== 'get' || shape.declaresResponseSchema) {
235
+ return false;
236
+ }
237
+ if (shape.successCodes.length === 0) {
238
+ return false;
239
+ }
240
+ return !shape.successCodes.every((code) => BODILESS_SUCCESS_CODES.has(code));
241
+ }
242
+ function formatSummaryLine(summary) {
243
+ return (`${summary.declared}/${summary.gets} GET response(s) declared, ` +
244
+ `${summary.exempt} structurally exempt, ${summary.pending} pending`);
245
+ }
246
+ function assertDeclaredGetResponses(input) {
247
+ const { serviceId, shapes, today = new Date(), structuralExemptions = exports.STRUCTURAL_EXEMPTIONS, pendingDeclarations = exports.PENDING_DECLARATIONS, } = input;
248
+ if (shapes.length === 0) {
249
+ throw new Error(`api-client-generator: ${serviceId} — the declared-GET-response check ` +
250
+ `examined ZERO operations, so it proved nothing. Either the document ` +
251
+ `was empty or the shapes were never collected from it; a check that ` +
252
+ `reports green while executing nothing is refused here rather than ` +
253
+ `counted as a pass.`);
254
+ }
255
+ const gets = shapes.filter((s) => s.method === 'get');
256
+ const undeclared = shapes.filter(isUndeclaredGet);
257
+ const undeclaredIds = new Set(undeclared.map((s) => s.operationId));
258
+ const allOperationIds = new Set(shapes.map((s) => s.operationId));
259
+ const structural = structuralExemptions.filter((e) => e.serviceId === serviceId);
260
+ const pending = pendingDeclarations.filter((e) => e.serviceId === serviceId);
261
+ const covered = new Set([
262
+ ...structural.map((e) => e.operationId),
263
+ ...pending.map((e) => e.operationId),
264
+ ]);
265
+ const failures = [];
266
+ const refused = undeclared.filter((s) => !covered.has(s.operationId));
267
+ for (const shape of refused) {
268
+ failures.push(` ${shape.operationId} (GET ${shape.route}) declares ` +
269
+ `${shape.successCodes.join('/')} with no response schema. The ` +
270
+ `generated client types it \`Promise<void>\` — "returns nothing", when ` +
271
+ `what is true is "nobody declared". Add a response decorator naming the ` +
272
+ `DTO the handler returns.`);
273
+ }
274
+ for (const entry of structural) {
275
+ if (!allOperationIds.has(entry.operationId)) {
276
+ failures.push(` STALE structural exemption: ${entry.operationId} is not an operation ` +
277
+ `of ${serviceId} any more. Remove the entry from ` +
278
+ `STRUCTURAL_EXEMPTIONS.`);
279
+ continue;
280
+ }
281
+ if (!undeclaredIds.has(entry.operationId)) {
282
+ failures.push(` STALE structural exemption: ${entry.operationId} now declares a ` +
283
+ `response schema, so the exemption suppresses nothing. Remove it from ` +
284
+ `STRUCTURAL_EXEMPTIONS.`);
285
+ }
286
+ }
287
+ const todayIso = today.toISOString().slice(0, 10);
288
+ let pendingResolved = 0;
289
+ for (const entry of pending) {
290
+ const expired = entry.fixBy < todayIso;
291
+ if (!allOperationIds.has(entry.operationId)) {
292
+ failures.push(` STALE pending declaration: ${entry.operationId} is not an operation ` +
293
+ `of ${serviceId} any more. Remove the entry from ` +
294
+ `PENDING_DECLARATIONS.`);
295
+ continue;
296
+ }
297
+ const resolvedNow = !undeclaredIds.has(entry.operationId);
298
+ if (resolvedNow) {
299
+ pendingResolved += 1;
300
+ }
301
+ if (expired) {
302
+ failures.push(` EXPIRED pending declaration: ${entry.operationId} was accepted until ` +
303
+ `${entry.fixBy} (declared ${entry.declaredOn}) and that date has ` +
304
+ `passed. ${resolvedNow
305
+ ? 'The route now declares a response — delete the entry.'
306
+ : 'Declare the response, or move the entry to ' +
307
+ 'STRUCTURAL_EXEMPTIONS with a reason that says why the route ' +
308
+ 'has no body.'}`);
309
+ }
310
+ }
311
+ const summary = {
312
+ gets: gets.length,
313
+ declared: gets.length - undeclared.length,
314
+ exempt: structural.length,
315
+ pending: pending.length,
316
+ pendingResolved,
317
+ };
318
+ if (failures.length > 0) {
319
+ throw new Error(`api-client-generator: ${serviceId} — ${failures.length} declared-GET-` +
320
+ `response finding(s) across ${gets.length} GET operation(s) ` +
321
+ `(${formatSummaryLine(summary)}):\n${failures.join('\n')}\n` +
322
+ `An undeclared GET response is not a cosmetic gap: the client says the ` +
323
+ `route returns nothing, so every consumer that needs the body writes ` +
324
+ `its own shape and drifts from the service with nothing comparing the ` +
325
+ `two. Nothing infers it for you — the @nestjs/swagger CLI plugin does ` +
326
+ `not run under this extractor's transpile-only ts-node.`);
327
+ }
328
+ return summary;
329
+ }
330
+ function formatDeclaredGetResponseSummary(summary) {
331
+ const resolved = summary.pendingResolved > 0
332
+ ? `, ${summary.pendingResolved} pending RESOLVED — remove the entr${summary.pendingResolved === 1 ? 'y' : 'ies'}`
333
+ : '';
334
+ return `${formatSummaryLine(summary)}${resolved}`;
335
+ }
336
+ //# sourceMappingURL=assert-declared-get-responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-declared-get-responses.js","sourceRoot":"","sources":["../../src/lib/assert-declared-get-responses.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"extract-openapi.d.ts","sourceRoot":"","sources":["../../src/lib/extract-openapi.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,UAAU,EAShB,MAAM,yBAAyB,CAAC;AAyDjC,wBAAsB,wBAAwB,CAC5C,UAAU,GAAE,MAAsB,EAOlC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,EAAE,CAAC,CA4JvB;AAGD,wBAAgB,aAAa,IAAI,IAAI,CAiBpC"}
1
+ {"version":3,"file":"extract-openapi.d.ts","sourceRoot":"","sources":["../../src/lib/extract-openapi.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,UAAU,EAShB,MAAM,yBAAyB,CAAC;AA+DjC,wBAAsB,wBAAwB,CAC5C,UAAU,GAAE,MAAsB,EAOlC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,EAAE,CAAC,CAwLvB;AAGD,wBAAgB,aAAa,IAAI,IAAI,CAiBpC"}
@@ -5,9 +5,11 @@ exports.runOpenApiCli = runOpenApiCli;
5
5
  const node_fs_1 = require("node:fs");
6
6
  const node_path_1 = require("node:path");
7
7
  const xema_decorators_1 = require("@xemahq/xema-decorators");
8
+ const assert_declared_get_responses_1 = require("./assert-declared-get-responses");
8
9
  const assert_surfaces_written_1 = require("./assert-surfaces-written");
9
10
  const default_stubs_1 = require("./default-stubs");
10
11
  const overrides_1 = require("./overrides");
12
+ const plugin_metadata_1 = require("./plugin-metadata");
11
13
  const seed_openapi_env_1 = require("./seed-openapi-env");
12
14
  const service_config_1 = require("./service-config");
13
15
  const service_nest_1 = require("./service-nest");
@@ -49,6 +51,7 @@ async function extractOpenApiForService(serviceDir = process.cwd(), outDir) {
49
51
  if (ctx.api.description) {
50
52
  builder.setDescription(ctx.api.description);
51
53
  }
54
+ const pluginMetadataLoaded = await (0, plugin_metadata_1.applyPluginMetadata)(ctx.serviceDir, nest.SwaggerModule);
52
55
  const fullDoc = nest.SwaggerModule.createDocument(app, builder.build(), {
53
56
  operationIdFactory: (controllerKey, methodKey) => `${controllerKey}_${methodKey}`,
54
57
  });
@@ -75,6 +78,10 @@ async function extractOpenApiForService(serviceDir = process.cwd(), outDir) {
75
78
  `(${unaccounted.join(', ')}). A controller is emitted into the spec ` +
76
79
  `but unreachable from the DiscoveryService scan.`);
77
80
  }
81
+ const getResponseSummary = (0, assert_declared_get_responses_1.assertDeclaredGetResponses)({
82
+ serviceId: ctx.api.serviceId,
83
+ shapes: (0, assert_declared_get_responses_1.collectOperationResponseShapes)(fullDoc),
84
+ });
78
85
  const coverage = (0, xema_decorators_1.stampRouteExtensions)(fullDoc, scan.projections);
79
86
  const written = [];
80
87
  const emitted = new Set();
@@ -114,7 +121,9 @@ async function extractOpenApiForService(serviceDir = process.cwd(), outDir) {
114
121
  excluded: scan.excluded.size,
115
122
  });
116
123
  console.log(`[xema-openapi] ${ctx.api.serviceId}: wrote ${written.length} surface spec(s) → ${written.join(', ')} ` +
117
- `[${(0, xema_decorators_1.formatRouteExtensionCoverage)(coverage)}]`);
124
+ `[${(0, xema_decorators_1.formatRouteExtensionCoverage)(coverage)}] ` +
125
+ `[${(0, assert_declared_get_responses_1.formatDeclaredGetResponseSummary)(getResponseSummary)}] ` +
126
+ `[pluginMetadata=${pluginMetadataLoaded ? 'loaded' : 'not declared'}]`);
118
127
  return written;
119
128
  }
120
129
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"extract-openapi.js","sourceRoot":"","sources":["../../src/lib/extract-openapi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extract-openapi.js","sourceRoot":"","sources":["../../src/lib/extract-openapi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function readSwaggerPluginOptions(serviceDir: string): Record<string, unknown> | undefined;
2
+ export declare function applyPluginMetadata(serviceDir: string, swaggerModule: {
3
+ loadPluginMetadata: (fn: () => Promise<Record<string, unknown>>) => Promise<void>;
4
+ }): Promise<boolean>;
5
+ //# sourceMappingURL=plugin-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-metadata.d.ts","sourceRoot":"","sources":["../../src/lib/plugin-metadata.ts"],"names":[],"mappings":"AAkFA,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA+BrC;AAwCD,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE;IACb,kBAAkB,EAAE,CAClB,EAAE,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KACvC,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,GACA,OAAO,CAAC,OAAO,CAAC,CAmElB"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readSwaggerPluginOptions = readSwaggerPluginOptions;
4
+ exports.applyPluginMetadata = applyPluginMetadata;
5
+ const node_child_process_1 = require("node:child_process");
6
+ const node_fs_1 = require("node:fs");
7
+ const node_os_1 = require("node:os");
8
+ const node_path_1 = require("node:path");
9
+ const METADATA_BASENAME = 'xema-openapi-plugin-metadata';
10
+ function readSwaggerPluginOptions(serviceDir) {
11
+ const cliPath = (0, node_path_1.join)(serviceDir, 'nest-cli.json');
12
+ if (!(0, node_fs_1.existsSync)(cliPath)) {
13
+ return undefined;
14
+ }
15
+ let parsed;
16
+ try {
17
+ parsed = JSON.parse((0, node_fs_1.readFileSync)(cliPath, 'utf8'));
18
+ }
19
+ catch (cause) {
20
+ throw new Error(`api-client-generator: ${cliPath} is not readable JSON. The extractor ` +
21
+ 'reads it so the spec it produces matches the one `nest build` serves, ' +
22
+ 'and it does not fall back to a hardcoded copy — that fallback is the ' +
23
+ 'divergence this read exists to remove.', { cause });
24
+ }
25
+ for (const plugin of parsed.compilerOptions?.plugins ?? []) {
26
+ if (typeof plugin === 'string') {
27
+ if (plugin.startsWith('@nestjs/swagger')) {
28
+ return {};
29
+ }
30
+ continue;
31
+ }
32
+ if (plugin.name?.startsWith('@nestjs/swagger')) {
33
+ return plugin.options ?? {};
34
+ }
35
+ }
36
+ return undefined;
37
+ }
38
+ const CHILD_SOURCE = `
39
+ const { join } = require('node:path');
40
+ const [serviceDir, filename, optionsJson] = process.argv.slice(2);
41
+ const { PluginMetadataGenerator } = require(
42
+ require.resolve('@nestjs/cli/lib/compiler/plugins/plugin-metadata-generator', {
43
+ paths: [serviceDir],
44
+ }),
45
+ );
46
+ const { ReadonlyVisitor } = require(
47
+ require.resolve('@nestjs/swagger/dist/plugin', { paths: [serviceDir] }),
48
+ );
49
+ const srcDir = join(serviceDir, 'src');
50
+ // \`tsconfigPath\` is documented as relative to process.cwd().
51
+ process.chdir(serviceDir);
52
+ new PluginMetadataGenerator().generate({
53
+ visitors: [
54
+ new ReadonlyVisitor({ ...JSON.parse(optionsJson), pathToSource: srcDir }),
55
+ ],
56
+ outputDir: srcDir,
57
+ filename,
58
+ tsconfigPath: require('node:fs').existsSync(
59
+ join(serviceDir, 'tsconfig.build.json'),
60
+ )
61
+ ? 'tsconfig.build.json'
62
+ : 'tsconfig.json',
63
+ printDiagnostics: false,
64
+ });
65
+ `;
66
+ async function applyPluginMetadata(serviceDir, swaggerModule) {
67
+ const options = readSwaggerPluginOptions(serviceDir);
68
+ if (options === undefined) {
69
+ return false;
70
+ }
71
+ const tsPath = (0, node_path_1.join)(serviceDir, 'src', `${METADATA_BASENAME}.ts`);
72
+ const cjsPath = (0, node_path_1.join)(serviceDir, 'src', `${METADATA_BASENAME}.cjs`);
73
+ const childDir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'xema-openapi-'));
74
+ const childPath = (0, node_path_1.join)(childDir, 'generate.cjs');
75
+ const cleanUp = () => {
76
+ (0, node_fs_1.rmSync)(tsPath, { force: true });
77
+ (0, node_fs_1.rmSync)(cjsPath, { force: true });
78
+ (0, node_fs_1.rmSync)(childDir, { force: true, recursive: true });
79
+ delete require.cache[cjsPath];
80
+ };
81
+ try {
82
+ (0, node_fs_1.rmSync)(tsPath, { force: true });
83
+ (0, node_fs_1.rmSync)(cjsPath, { force: true });
84
+ (0, node_fs_1.writeFileSync)(childPath, CHILD_SOURCE);
85
+ const child = (0, node_child_process_1.spawnSync)(process.execPath, [childPath, serviceDir, `${METADATA_BASENAME}.ts`, JSON.stringify(options)], { encoding: 'utf8' });
86
+ if (child.status !== 0 || !(0, node_fs_1.existsSync)(tsPath)) {
87
+ throw new Error('api-client-generator: the swagger plugin metadata generator failed ' +
88
+ `(exit ${String(child.status)}). This service DECLARES the plugin, so ` +
89
+ 'continuing would emit a spec missing everything the plugin infers — ' +
90
+ 'silently, in the document every client is generated from. Refusing ' +
91
+ `instead.\n${(child.stderr || child.stdout || '').slice(-1200)}`);
92
+ }
93
+ const ts = require(require.resolve('typescript', { paths: [serviceDir] }));
94
+ (0, node_fs_1.writeFileSync)(cjsPath, ts.transpileModule((0, node_fs_1.readFileSync)(tsPath, 'utf8'), {
95
+ compilerOptions: {
96
+ module: ts.ModuleKind.CommonJS,
97
+ target: ts.ScriptTarget.ES2022,
98
+ },
99
+ }).outputText);
100
+ const loaded = require(cjsPath);
101
+ if (typeof loaded.default !== 'function') {
102
+ throw new Error(`api-client-generator: ${METADATA_BASENAME} has no default export to load.`);
103
+ }
104
+ await swaggerModule.loadPluginMetadata(loaded.default);
105
+ return true;
106
+ }
107
+ finally {
108
+ cleanUp();
109
+ }
110
+ }
111
+ //# sourceMappingURL=plugin-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-metadata.js","sourceRoot":"","sources":["../../src/lib/plugin-metadata.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xemahq/api-client-generator",
3
- "version": "0.15.2",
3
+ "version": "0.17.0",
4
4
  "description": "Layer 1 — the single, central OpenAPI + ORVAL client generator for every Xema NestJS service. Replaces the per-service orval.config.ts / scripts/extract-openapi.ts / scripts/build-client-index.js trio with two bins (xema-openapi, xema-client-generate). Extracts one OpenAPI document per ApiSurface (public/internal/operator) using the @XemaApiSurface decorator metadata, generates one ORVAL client package per non-empty surface (every surface of a service landing on ONE derived version — the highest its clients already carry, advanced a patch when the generated output changes), and stamps deterministic `xema` provenance metadata into each generated client package.json. No heuristics: a route ships in a surface only if it (or its controller) is explicitly classified, and no client version is ever typed by hand.",
5
5
  "keywords": [
6
6
  "xema",