@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.
- package/dist/.source-stamp.json +2 -2
- package/dist/lib/extract-openapi.d.ts.map +1 -1
- package/dist/lib/extract-openapi.js +4 -1
- package/dist/lib/extract-openapi.js.map +1 -1
- package/dist/lib/plugin-metadata.d.ts +5 -0
- package/dist/lib/plugin-metadata.d.ts.map +1 -0
- package/dist/lib/plugin-metadata.js +111 -0
- package/dist/lib/plugin-metadata.js.map +1 -0
- package/package.json +1 -1
package/dist/.source-stamp.json
CHANGED
|
@@ -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;
|
|
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":";;
|
|
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.
|
|
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",
|