@xemahq/api-client-generator 0.16.0 → 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": "ba18fd179d3f4554e233b717dd16477f458860ebab9b8a18ceec4d00f3755c2b",
4
- "fileCount": 17
3
+ "hash": "a33ae31769991ec28ec11bc0473da7eac11278271c9bc86bbab1079f46dbf7f5",
4
+ "fileCount": 18
5
5
  }
@@ -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;AA8DjC,wBAAsB,wBAAwB,CAC5C,UAAU,GAAE,MAAsB,EAOlC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,EAAE,CAAC,CAuKvB;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"}
@@ -9,6 +9,7 @@ const assert_declared_get_responses_1 = require("./assert-declared-get-responses
9
9
  const assert_surfaces_written_1 = require("./assert-surfaces-written");
10
10
  const default_stubs_1 = require("./default-stubs");
11
11
  const overrides_1 = require("./overrides");
12
+ const plugin_metadata_1 = require("./plugin-metadata");
12
13
  const seed_openapi_env_1 = require("./seed-openapi-env");
13
14
  const service_config_1 = require("./service-config");
14
15
  const service_nest_1 = require("./service-nest");
@@ -50,6 +51,7 @@ async function extractOpenApiForService(serviceDir = process.cwd(), outDir) {
50
51
  if (ctx.api.description) {
51
52
  builder.setDescription(ctx.api.description);
52
53
  }
54
+ const pluginMetadataLoaded = await (0, plugin_metadata_1.applyPluginMetadata)(ctx.serviceDir, nest.SwaggerModule);
53
55
  const fullDoc = nest.SwaggerModule.createDocument(app, builder.build(), {
54
56
  operationIdFactory: (controllerKey, methodKey) => `${controllerKey}_${methodKey}`,
55
57
  });
@@ -120,7 +122,8 @@ async function extractOpenApiForService(serviceDir = process.cwd(), outDir) {
120
122
  });
121
123
  console.log(`[xema-openapi] ${ctx.api.serviceId}: wrote ${written.length} surface spec(s) → ${written.join(', ')} ` +
122
124
  `[${(0, xema_decorators_1.formatRouteExtensionCoverage)(coverage)}] ` +
123
- `[${(0, assert_declared_get_responses_1.formatDeclaredGetResponseSummary)(getResponseSummary)}]`);
125
+ `[${(0, assert_declared_get_responses_1.formatDeclaredGetResponseSummary)(getResponseSummary)}] ` +
126
+ `[pluginMetadata=${pluginMetadataLoaded ? 'loaded' : 'not declared'}]`);
124
127
  return written;
125
128
  }
126
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.16.0",
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",