@xemahq/api-client-generator 0.17.2 → 0.18.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/client-package.d.ts +1 -1
- package/dist/lib/client-package.d.ts.map +1 -1
- package/dist/lib/client-package.js +24 -1
- package/dist/lib/client-package.js.map +1 -1
- package/dist/lib/client-repository.d.ts +14 -0
- package/dist/lib/client-repository.d.ts.map +1 -0
- package/dist/lib/client-repository.js +50 -0
- package/dist/lib/client-repository.js.map +1 -0
- package/dist/lib/generate-clients.d.ts.map +1 -1
- package/dist/lib/generate-clients.js +3 -1
- package/dist/lib/generate-clients.js.map +1 -1
- package/package.json +5 -3
package/dist/.source-stamp.json
CHANGED
|
@@ -10,7 +10,7 @@ export interface GeneratedClientXemaBlock {
|
|
|
10
10
|
readonly source: string;
|
|
11
11
|
}
|
|
12
12
|
export declare function resolveGeneratedClientLicense(repoRoot: string): string;
|
|
13
|
-
export declare function ensureClientPackage(ctx: ResolvedServiceContext, surface: ApiSurface, version: string): {
|
|
13
|
+
export declare function ensureClientPackage(ctx: ResolvedServiceContext, surface: ApiSurface, version: string, repositoryUrl: string): {
|
|
14
14
|
clientDir: string;
|
|
15
15
|
clientSrc: string;
|
|
16
16
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-package.d.ts","sourceRoot":"","sources":["../../src/lib/client-package.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"client-package.d.ts","sourceRoot":"","sources":["../../src/lib/client-package.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAO1D,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAmCD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqBtE;AAqDD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,sBAAsB,EAC3B,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CA0G1C"}
|
|
@@ -4,6 +4,7 @@ exports.resolveGeneratedClientLicense = resolveGeneratedClientLicense;
|
|
|
4
4
|
exports.ensureClientPackage = ensureClientPackage;
|
|
5
5
|
const node_fs_1 = require("node:fs");
|
|
6
6
|
const node_path_1 = require("node:path");
|
|
7
|
+
const client_repository_1 = require("./client-repository");
|
|
7
8
|
const custom_fetch_template_1 = require("./custom-fetch-template");
|
|
8
9
|
const service_config_1 = require("./service-config");
|
|
9
10
|
const REPOSITORY_LICENSES = new Map([
|
|
@@ -52,7 +53,20 @@ function resolveGeneratedClientLicense(repoRoot) {
|
|
|
52
53
|
}
|
|
53
54
|
return license;
|
|
54
55
|
}
|
|
55
|
-
function
|
|
56
|
+
function assertDeclaredRepository(packageName, declared, expected) {
|
|
57
|
+
const { url, directory } = (declared ?? {});
|
|
58
|
+
if (url === expected.url && directory === expected.directory) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
throw new Error(`api-client-generator: ${packageName} declares a \`repository\` block ` +
|
|
62
|
+
`that does not bind it to this repository — found ` +
|
|
63
|
+
`${JSON.stringify({ url: url ?? null, directory: directory ?? null })}, ` +
|
|
64
|
+
`expected ${JSON.stringify({ url: expected.url, directory: expected.directory })}. ` +
|
|
65
|
+
`The publisher asserts exactly this pair on every tarball, so the ` +
|
|
66
|
+
`package as written cannot be released. Correct it by hand — the ` +
|
|
67
|
+
`generator never overwrites a declared \`repository\`.`);
|
|
68
|
+
}
|
|
69
|
+
function ensureClientPackage(ctx, surface, version, repositoryUrl) {
|
|
56
70
|
const clientDir = (0, service_config_1.surfaceClientDir)(ctx, surface);
|
|
57
71
|
const clientSrc = (0, node_path_1.join)(clientDir, 'src');
|
|
58
72
|
(0, node_fs_1.mkdirSync)(clientSrc, { recursive: true });
|
|
@@ -73,10 +87,19 @@ function ensureClientPackage(ctx, surface, version) {
|
|
|
73
87
|
const existingScripts = recordOrEmpty(existing.scripts);
|
|
74
88
|
const existingDevDeps = recordOrEmpty(existing.devDependencies);
|
|
75
89
|
const existingPublishConfig = recordOrEmpty(existing.publishConfig);
|
|
90
|
+
const repository = (0, client_repository_1.generatedClientRepository)({
|
|
91
|
+
repositoryUrl,
|
|
92
|
+
repoRoot: ctx.repoRoot,
|
|
93
|
+
clientDir,
|
|
94
|
+
});
|
|
95
|
+
if (existing.repository !== undefined) {
|
|
96
|
+
assertDeclaredRepository(packageName, existing.repository, repository);
|
|
97
|
+
}
|
|
76
98
|
const pkg = {
|
|
77
99
|
...existing,
|
|
78
100
|
name: packageName,
|
|
79
101
|
version,
|
|
102
|
+
...(existing.repository === undefined ? { repository } : {}),
|
|
80
103
|
main: './dist/index.js',
|
|
81
104
|
types: './dist/index.d.ts',
|
|
82
105
|
files: ['dist'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-package.js","sourceRoot":"","sources":["../../src/lib/client-package.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"client-package.js","sourceRoot":"","sources":["../../src/lib/client-package.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface GeneratedClientRepository {
|
|
2
|
+
readonly type: 'git';
|
|
3
|
+
readonly url: string;
|
|
4
|
+
readonly directory: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const RELEASE_CONFIG_PATH = "tooling/ci/release.config.mjs";
|
|
7
|
+
export declare function packageRepositoryUrl(repositorySlug: string): string;
|
|
8
|
+
export declare function resolveClientRepositoryUrl(repoRoot: string): Promise<string>;
|
|
9
|
+
export declare function generatedClientRepository(params: {
|
|
10
|
+
repositoryUrl: string;
|
|
11
|
+
repoRoot: string;
|
|
12
|
+
clientDir: string;
|
|
13
|
+
}): GeneratedClientRepository;
|
|
14
|
+
//# sourceMappingURL=client-repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-repository.d.ts","sourceRoot":"","sources":["../../src/lib/client-repository.ts"],"names":[],"mappings":"AAgCA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAErB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAaD,eAAO,MAAM,mBAAmB,kCAAkC,CAAC;AAgBnE,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAEnE;AAqBD,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CA0BjB;AASD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,yBAAyB,CAW5B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RELEASE_CONFIG_PATH = void 0;
|
|
4
|
+
exports.packageRepositoryUrl = packageRepositoryUrl;
|
|
5
|
+
exports.resolveClientRepositoryUrl = resolveClientRepositoryUrl;
|
|
6
|
+
exports.generatedClientRepository = generatedClientRepository;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const node_url_1 = require("node:url");
|
|
10
|
+
exports.RELEASE_CONFIG_PATH = 'tooling/ci/release.config.mjs';
|
|
11
|
+
const REPOSITORY_SLUG_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]*\/[A-Za-z0-9][A-Za-z0-9._-]*$/u;
|
|
12
|
+
function packageRepositoryUrl(repositorySlug) {
|
|
13
|
+
return `git+https://github.com/${repositorySlug}.git`;
|
|
14
|
+
}
|
|
15
|
+
async function importModule(path) {
|
|
16
|
+
const dynamicImport = new Function('u', 'return import(u)');
|
|
17
|
+
return dynamicImport((0, node_url_1.pathToFileURL)(path).href);
|
|
18
|
+
}
|
|
19
|
+
async function resolveClientRepositoryUrl(repoRoot) {
|
|
20
|
+
const configPath = (0, node_path_1.join)(repoRoot, exports.RELEASE_CONFIG_PATH);
|
|
21
|
+
if (!(0, node_fs_1.existsSync)(configPath)) {
|
|
22
|
+
throw new Error(`api-client-generator: ${repoRoot} has no ${exports.RELEASE_CONFIG_PATH}. That ` +
|
|
23
|
+
`file is where a repository declares the identity every published ` +
|
|
24
|
+
`package is bound to, and a generated client without a ` +
|
|
25
|
+
`\`repository\` block fails release readiness the moment it is ` +
|
|
26
|
+
`created. Add the release config, or do not generate publishable ` +
|
|
27
|
+
`clients from this repository.`);
|
|
28
|
+
}
|
|
29
|
+
const config = (await importModule(configPath)).default;
|
|
30
|
+
const repository = config?.repository;
|
|
31
|
+
if (typeof repository !== 'string' || !REPOSITORY_SLUG_PATTERN.test(repository)) {
|
|
32
|
+
throw new Error(`api-client-generator: ${configPath} does not declare a \`repository\` ` +
|
|
33
|
+
`slug of the form "owner/repo" (found ` +
|
|
34
|
+
`${JSON.stringify(repository ?? null)}). The publisher binds every ` +
|
|
35
|
+
`tarball to that value, so the generator cannot stamp a client's ` +
|
|
36
|
+
`\`repository\` block without it.`);
|
|
37
|
+
}
|
|
38
|
+
return packageRepositoryUrl(repository);
|
|
39
|
+
}
|
|
40
|
+
function generatedClientRepository(params) {
|
|
41
|
+
const { repositoryUrl, repoRoot, clientDir } = params;
|
|
42
|
+
const directory = (0, node_path_1.relative)(repoRoot, clientDir).split(node_path_1.sep).join('/');
|
|
43
|
+
if (directory === '' || directory.startsWith('..')) {
|
|
44
|
+
throw new Error(`api-client-generator: the client directory ${clientDir} is not inside ` +
|
|
45
|
+
`the repository root ${repoRoot}, so its \`repository.directory\` ` +
|
|
46
|
+
`cannot be stated. Refusing to stamp a binding that would not resolve.`);
|
|
47
|
+
}
|
|
48
|
+
return { type: 'git', url: repositoryUrl, directory };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=client-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-repository.js","sourceRoot":"","sources":["../../src/lib/client-repository.ts"],"names":[],"mappings":";;;AAmEA,oDAEC;AAqBD,gEA4BC;AASD,8DAeC;AA9ID,qCAAqC;AACrC,yCAAgD;AAChD,uCAAyC;AAiD5B,QAAA,mBAAmB,GAAG,+BAA+B,CAAC;AAGnE,MAAM,uBAAuB,GAAG,2DAA2D,CAAC;AAa5F,SAAgB,oBAAoB,CAAC,cAAsB;IACzD,OAAO,0BAA0B,cAAc,MAAM,CAAC;AACxD,CAAC;AAQD,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAErB,CAAC;IACtC,OAAO,aAAa,CAAC,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AAQM,KAAK,UAAU,0BAA0B,CAC9C,QAAgB;IAEhB,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,QAAQ,EAAE,2BAAmB,CAAC,CAAC;IACvD,IAAI,CAAC,IAAA,oBAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,yBAAyB,QAAQ,WAAW,2BAAmB,SAAS;YACtE,mEAAmE;YACnE,wDAAwD;YACxD,gEAAgE;YAChE,kEAAkE;YAClE,+BAA+B,CAClC,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,OAEnC,CAAC;IACd,MAAM,UAAU,GAAG,MAAM,EAAE,UAAU,CAAC;IACtC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CACb,yBAAyB,UAAU,qCAAqC;YACtE,uCAAuC;YACvC,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,+BAA+B;YACpE,kEAAkE;YAClE,kCAAkC,CACrC,CAAC;IACJ,CAAC;IACD,OAAO,oBAAoB,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC;AASD,SAAgB,yBAAyB,CAAC,MAIzC;IACC,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IACtD,MAAM,SAAS,GAAG,IAAA,oBAAQ,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,eAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CACb,8CAA8C,SAAS,iBAAiB;YACtE,uBAAuB,QAAQ,oCAAoC;YACnE,uEAAuE,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;AACxD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-clients.d.ts","sourceRoot":"","sources":["../../src/lib/generate-clients.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-clients.d.ts","sourceRoot":"","sources":["../../src/lib/generate-clients.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AA8OxE,wBAAsB,yBAAyB,CAC7C,UAAU,GAAE,MAAsB,GACjC,OAAO,CAAC,UAAU,EAAE,CAAC,CA8GvB;AAGD,wBAAgB,oBAAoB,IAAI,IAAI,CAO3C"}
|
|
@@ -9,6 +9,7 @@ const node_url_1 = require("node:url");
|
|
|
9
9
|
const xema_decorators_1 = require("@xemahq/xema-decorators");
|
|
10
10
|
const client_package_1 = require("./client-package");
|
|
11
11
|
const client_readme_1 = require("./client-readme");
|
|
12
|
+
const client_repository_1 = require("./client-repository");
|
|
12
13
|
const client_version_1 = require("./client-version");
|
|
13
14
|
const repo_post_process_1 = require("./repo-post-process");
|
|
14
15
|
const service_config_1 = require("./service-config");
|
|
@@ -90,6 +91,7 @@ function restampClientVersion(clientDir, version) {
|
|
|
90
91
|
async function generateClientsForService(serviceDir = process.cwd()) {
|
|
91
92
|
const ctx = (0, service_config_1.resolveServiceContext)(serviceDir);
|
|
92
93
|
const generate = await resolveOrvalGenerate(ctx.serviceDir);
|
|
94
|
+
const repositoryUrl = await (0, client_repository_1.resolveClientRepositoryUrl)(ctx.repoRoot);
|
|
93
95
|
const surfacesWithSpec = xema_decorators_1.ALL_SURFACES.filter((s) => (0, node_fs_1.existsSync)((0, service_config_1.surfaceSpecPath)(ctx, s)));
|
|
94
96
|
assertNoOrphanedSurfaceClients(ctx, surfacesWithSpec);
|
|
95
97
|
const existingClientVersions = (0, client_version_1.readExistingClientVersions)(ctx);
|
|
@@ -104,7 +106,7 @@ async function generateClientsForService(serviceDir = process.cwd()) {
|
|
|
104
106
|
let contentChanged = false;
|
|
105
107
|
for (const surface of surfacesWithSpec) {
|
|
106
108
|
const specPath = (0, service_config_1.surfaceSpecPath)(ctx, surface);
|
|
107
|
-
const { clientDir, clientSrc } = (0, client_package_1.ensureClientPackage)(ctx, surface, baseline);
|
|
109
|
+
const { clientDir, clientSrc } = (0, client_package_1.ensureClientPackage)(ctx, surface, baseline, repositoryUrl);
|
|
108
110
|
clientDirs.set(surface, clientDir);
|
|
109
111
|
const fingerprintBefore = (0, client_version_1.fingerprintGeneratedOutput)(clientSrc);
|
|
110
112
|
(0, client_readme_1.ensureClientReadme)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-clients.js","sourceRoot":"","sources":["../../src/lib/generate-clients.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generate-clients.js","sourceRoot":"","sources":["../../src/lib/generate-clients.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.18.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",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"@nestjs/core": "^10 || ^11",
|
|
38
38
|
"@nestjs/swagger": "^7 || ^8 || ^11",
|
|
39
39
|
"@nestjs/testing": "^10 || ^11",
|
|
40
|
-
"@xemahq/xema-decorators": ">=0.7.0 <0.
|
|
40
|
+
"@xemahq/xema-decorators": ">=0.7.0 <0.14.0",
|
|
41
41
|
"orval": "^8",
|
|
42
42
|
"reflect-metadata": "^0.2",
|
|
43
43
|
"ts-node": "^10",
|
|
@@ -58,10 +58,12 @@
|
|
|
58
58
|
"@nestjs/swagger": "11.2.6",
|
|
59
59
|
"@nestjs/testing": "11.1.18",
|
|
60
60
|
"@types/node": "25.2.3",
|
|
61
|
+
"eslint": "^9.39.4",
|
|
61
62
|
"prettier": "3.6.2",
|
|
62
63
|
"reflect-metadata": "0.2.2",
|
|
63
64
|
"typescript": "5.9.3",
|
|
64
|
-
"@xemahq/
|
|
65
|
+
"@xemahq/eslint-config": "0.2.0",
|
|
66
|
+
"@xemahq/xema-decorators": "0.13.0"
|
|
65
67
|
},
|
|
66
68
|
"exports": {
|
|
67
69
|
".": {
|