@xemahq/api-client-generator 0.1.1
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/README.md +73 -0
- package/dist/bin/xema-client-generate.d.ts +3 -0
- package/dist/bin/xema-client-generate.d.ts.map +1 -0
- package/dist/bin/xema-client-generate.js +6 -0
- package/dist/bin/xema-client-generate.js.map +1 -0
- package/dist/bin/xema-openapi.d.ts +3 -0
- package/dist/bin/xema-openapi.d.ts.map +1 -0
- package/dist/bin/xema-openapi.js +28 -0
- package/dist/bin/xema-openapi.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/client-package.d.ts +17 -0
- package/dist/lib/client-package.d.ts.map +1 -0
- package/dist/lib/client-package.js +114 -0
- package/dist/lib/client-package.js.map +1 -0
- package/dist/lib/client-readme.d.ts +9 -0
- package/dist/lib/client-readme.d.ts.map +1 -0
- package/dist/lib/client-readme.js +100 -0
- package/dist/lib/client-readme.js.map +1 -0
- package/dist/lib/custom-fetch-template.d.ts +2 -0
- package/dist/lib/custom-fetch-template.d.ts.map +1 -0
- package/dist/lib/custom-fetch-template.js +166 -0
- package/dist/lib/custom-fetch-template.js.map +1 -0
- package/dist/lib/default-stubs.d.ts +3 -0
- package/dist/lib/default-stubs.d.ts.map +1 -0
- package/dist/lib/default-stubs.js +107 -0
- package/dist/lib/default-stubs.js.map +1 -0
- package/dist/lib/extract-openapi.d.ts +4 -0
- package/dist/lib/extract-openapi.d.ts.map +1 -0
- package/dist/lib/extract-openapi.js +134 -0
- package/dist/lib/extract-openapi.js.map +1 -0
- package/dist/lib/generate-clients.d.ts +4 -0
- package/dist/lib/generate-clients.d.ts.map +1 -0
- package/dist/lib/generate-clients.js +84 -0
- package/dist/lib/generate-clients.js.map +1 -0
- package/dist/lib/overrides.d.ts +7 -0
- package/dist/lib/overrides.d.ts.map +1 -0
- package/dist/lib/overrides.js +26 -0
- package/dist/lib/overrides.js.map +1 -0
- package/dist/lib/prune-spec.d.ts +16 -0
- package/dist/lib/prune-spec.d.ts.map +1 -0
- package/dist/lib/prune-spec.js +100 -0
- package/dist/lib/prune-spec.js.map +1 -0
- package/dist/lib/repo-post-process.d.ts +9 -0
- package/dist/lib/repo-post-process.d.ts.map +1 -0
- package/dist/lib/repo-post-process.js +56 -0
- package/dist/lib/repo-post-process.js.map +1 -0
- package/dist/lib/seed-openapi-env.d.ts +2 -0
- package/dist/lib/seed-openapi-env.d.ts.map +1 -0
- package/dist/lib/seed-openapi-env.js +77 -0
- package/dist/lib/seed-openapi-env.js.map +1 -0
- package/dist/lib/service-config.d.ts +20 -0
- package/dist/lib/service-config.d.ts.map +1 -0
- package/dist/lib/service-config.js +80 -0
- package/dist/lib/service-config.js.map +1 -0
- package/dist/lib/service-nest.d.ts +15 -0
- package/dist/lib/service-nest.d.ts.map +1 -0
- package/dist/lib/service-nest.js +21 -0
- package/dist/lib/service-nest.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.seedOpenApiEnv = seedOpenApiEnv;
|
|
4
|
+
const DUMMY_ENCRYPTION_KEY_HEX = '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef';
|
|
5
|
+
const DUMMY_BASE64_KEY = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=';
|
|
6
|
+
function seed(vars) {
|
|
7
|
+
for (const [key, value] of Object.entries(vars)) {
|
|
8
|
+
if (process.env[key] === undefined) {
|
|
9
|
+
process.env[key] = value;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function seedOpenApiEnv() {
|
|
14
|
+
seed({
|
|
15
|
+
NODE_ENV: 'development',
|
|
16
|
+
DATABASE_URL: 'postgresql://dummy:dummy@localhost:5432/dummy_openapi',
|
|
17
|
+
DB_HOST: 'localhost',
|
|
18
|
+
DB_PORT: '5432',
|
|
19
|
+
DB_NAME: 'dummy_openapi',
|
|
20
|
+
DB_USER: 'dummy',
|
|
21
|
+
DB_PASSWORD: 'dummy',
|
|
22
|
+
REDIS_URL: 'redis://localhost:6379',
|
|
23
|
+
OPENSEARCH_URL: 'http://localhost:9200',
|
|
24
|
+
IDENTITY_API_URL: 'http://localhost:3053',
|
|
25
|
+
IDENTITY_API_INTERNAL_TOKEN: 'dummy-token',
|
|
26
|
+
JWT_PUBLIC_KEY_URL: 'http://localhost:8180/realms/dummy/protocol/openid-connect/certs',
|
|
27
|
+
JWT_ISSUER: 'http://localhost:8180/realms/dummy',
|
|
28
|
+
GATEWAY_JWT_SECRET: 'dummy-gateway-jwt-secret-for-openapi-extraction',
|
|
29
|
+
SHARE_TOKEN_SECRET: 'dummy-share-token-secret',
|
|
30
|
+
OPENCODE_WORKER_PASSWORD: 'dummy-worker-password',
|
|
31
|
+
EVENT_HUB_URL: 'http://localhost:3128',
|
|
32
|
+
USER_API_URL: 'http://localhost:3050',
|
|
33
|
+
BACKLOG_API_URL: 'http://localhost:3100',
|
|
34
|
+
MEMORY_API_URL: 'http://localhost:3060',
|
|
35
|
+
LLM_REGISTRY_API_URL: 'http://localhost:3112',
|
|
36
|
+
LLM_GATEWAY_API_URL: 'http://localhost:3110',
|
|
37
|
+
POOL_API_URL: 'http://localhost:3145',
|
|
38
|
+
ARTIFACT_STORE_API_URL: 'http://localhost:3130',
|
|
39
|
+
KNOWLEDGE_BASE_API_URL: 'http://localhost:3200',
|
|
40
|
+
PROJECT_REGISTRY_API_URL: 'http://localhost:3300',
|
|
41
|
+
INTEGRATION_ADAPTERS_API_URL: 'http://localhost:3900',
|
|
42
|
+
DESIGN_SYSTEM_BUILDER_API_URL: 'http://localhost:3210',
|
|
43
|
+
SEARCH_API_URL: 'http://localhost:3220',
|
|
44
|
+
BILLING_API_URL: 'http://localhost:3140',
|
|
45
|
+
CAPABILITY_REGISTRY_API_URL: 'http://localhost:3700',
|
|
46
|
+
MCP_KNOWLEDGE_BASE_URL: 'http://localhost:3201/mcp',
|
|
47
|
+
MCP_BACKLOG_URL: 'http://localhost:3101/mcp',
|
|
48
|
+
MCP_DOC_TEMPLATE_URL: 'http://localhost:3231/mcp',
|
|
49
|
+
MCP_PROJECT_REGISTRY_URL: 'http://localhost:3301/mcp',
|
|
50
|
+
MCP_SEARCH_URL: 'http://localhost:3221/mcp',
|
|
51
|
+
KNOWLEDGE_BASE_MCP_URL: 'http://localhost:3201/mcp',
|
|
52
|
+
BACKLOG_MCP_URL: 'http://localhost:3101/mcp',
|
|
53
|
+
ARTIFACT_STORE_MCP_URL: 'http://localhost:3131/mcp',
|
|
54
|
+
MEMORY_MCP_URL: 'http://localhost:3061/mcp',
|
|
55
|
+
CATALOG_MCP_URL: 'http://localhost:3111/mcp',
|
|
56
|
+
REVIEW_GATE_MCP_URL: 'http://localhost:3501/mcp',
|
|
57
|
+
AUDIT_LOG_MCP_URL: 'http://localhost:3601/mcp',
|
|
58
|
+
PROJECT_REGISTRY_MCP_URL: 'http://localhost:3301/mcp',
|
|
59
|
+
DOC_TEMPLATE_MCP_URL: 'http://localhost:3231/mcp',
|
|
60
|
+
PHASE_GATE_MCP_URL: 'http://localhost:3801/mcp',
|
|
61
|
+
UI_TEMPLATES_MCP_URL: 'http://localhost:3901/mcp',
|
|
62
|
+
SEARCH_MCP_URL: 'http://localhost:3221/mcp',
|
|
63
|
+
DESIGN_SYSTEM_BUILDER_MCP_URL: 'http://localhost:3211/mcp',
|
|
64
|
+
SCM_WEBHOOK_SECRET: 'dummy-webhook-secret',
|
|
65
|
+
SCM_WEBHOOK_BASE_URL: 'http://localhost:3500/webhooks',
|
|
66
|
+
GITEA_URL: 'http://localhost:3000',
|
|
67
|
+
GITEA_ADMIN_USER: 'gitea_admin',
|
|
68
|
+
GITEA_ADMIN_PASS: 'gitea_admin_pass',
|
|
69
|
+
MASTER_ENCRYPTION_KEY: DUMMY_ENCRYPTION_KEY_HEX,
|
|
70
|
+
ENCRYPTION_MASTER_KEY: DUMMY_BASE64_KEY,
|
|
71
|
+
LLM_REGISTRY_ENCRYPTION_KEY: 'abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789',
|
|
72
|
+
VARIABLE_ENCRYPTION_KEY: 'fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210',
|
|
73
|
+
PLATFORM_METRICS_ENDPOINT: 'http://localhost:9090/metrics',
|
|
74
|
+
PLATFORM_AUDIT_ENDPOINT: 'http://localhost:3601/audit',
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=seed-openapi-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-openapi-env.js","sourceRoot":"","sources":["../../src/lib/seed-openapi-env.ts"],"names":[],"mappings":";;AA6BA,wCAkFC;AA/FD,MAAM,wBAAwB,GAC5B,kEAAkE,CAAC;AACrE,MAAM,gBAAgB,GAAG,8CAA8C,CAAC;AAGxE,SAAS,IAAI,CAAC,IAA4B;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,cAAc;IAC5B,IAAI,CAAC;QACH,QAAQ,EAAE,aAAa;QAGvB,YAAY,EAAE,uDAAuD;QACrE,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,eAAe;QACxB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,wBAAwB;QACnC,cAAc,EAAE,uBAAuB;QAGvC,gBAAgB,EAAE,uBAAuB;QACzC,2BAA2B,EAAE,aAAa;QAC1C,kBAAkB,EAChB,kEAAkE;QACpE,UAAU,EAAE,oCAAoC;QAChD,kBAAkB,EAAE,iDAAiD;QACrE,kBAAkB,EAAE,0BAA0B;QAC9C,wBAAwB,EAAE,uBAAuB;QAGjD,aAAa,EAAE,uBAAuB;QAGtC,YAAY,EAAE,uBAAuB;QACrC,eAAe,EAAE,uBAAuB;QACxC,cAAc,EAAE,uBAAuB;QACvC,oBAAoB,EAAE,uBAAuB;QAC7C,mBAAmB,EAAE,uBAAuB;QAC5C,YAAY,EAAE,uBAAuB;QACrC,sBAAsB,EAAE,uBAAuB;QAC/C,sBAAsB,EAAE,uBAAuB;QAC/C,wBAAwB,EAAE,uBAAuB;QACjD,4BAA4B,EAAE,uBAAuB;QACrD,6BAA6B,EAAE,uBAAuB;QACtD,cAAc,EAAE,uBAAuB;QACvC,eAAe,EAAE,uBAAuB;QACxC,2BAA2B,EAAE,uBAAuB;QAGpD,sBAAsB,EAAE,2BAA2B;QACnD,eAAe,EAAE,2BAA2B;QAC5C,oBAAoB,EAAE,2BAA2B;QACjD,wBAAwB,EAAE,2BAA2B;QACrD,cAAc,EAAE,2BAA2B;QAC3C,sBAAsB,EAAE,2BAA2B;QACnD,eAAe,EAAE,2BAA2B;QAC5C,sBAAsB,EAAE,2BAA2B;QACnD,cAAc,EAAE,2BAA2B;QAC3C,eAAe,EAAE,2BAA2B;QAC5C,mBAAmB,EAAE,2BAA2B;QAChD,iBAAiB,EAAE,2BAA2B;QAC9C,wBAAwB,EAAE,2BAA2B;QACrD,oBAAoB,EAAE,2BAA2B;QACjD,kBAAkB,EAAE,2BAA2B;QAC/C,oBAAoB,EAAE,2BAA2B;QACjD,cAAc,EAAE,2BAA2B;QAC3C,6BAA6B,EAAE,2BAA2B;QAG1D,kBAAkB,EAAE,sBAAsB;QAC1C,oBAAoB,EAAE,gCAAgC;QACtD,SAAS,EAAE,uBAAuB;QAClC,gBAAgB,EAAE,aAAa;QAC/B,gBAAgB,EAAE,kBAAkB;QAGpC,qBAAqB,EAAE,wBAAwB;QAC/C,qBAAqB,EAAE,gBAAgB;QACvC,2BAA2B,EACzB,kEAAkE;QACpE,uBAAuB,EACrB,kEAAkE;QAGpE,yBAAyB,EAAE,+BAA+B;QAC1D,uBAAuB,EAAE,6BAA6B;KACvD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ApiSurface } from '@xemahq/xema-decorators';
|
|
2
|
+
export interface XemaApiConfig {
|
|
3
|
+
readonly serviceId: string;
|
|
4
|
+
readonly biomeId: string;
|
|
5
|
+
readonly title: string;
|
|
6
|
+
readonly description?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ResolvedServiceContext {
|
|
9
|
+
readonly serviceDir: string;
|
|
10
|
+
readonly repoRoot: string;
|
|
11
|
+
readonly api: XemaApiConfig;
|
|
12
|
+
readonly version: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function findRepoRoot(start: string): string;
|
|
15
|
+
export declare function resolveServiceContext(serviceDir: string): ResolvedServiceContext;
|
|
16
|
+
export declare function surfaceClientShortName(serviceId: string, surface: ApiSurface): string;
|
|
17
|
+
export declare function surfaceClientPackageName(serviceId: string, surface: ApiSurface): string;
|
|
18
|
+
export declare function surfaceClientDir(ctx: ResolvedServiceContext, surface: ApiSurface): string;
|
|
19
|
+
export declare function surfaceSpecPath(ctx: ResolvedServiceContext, surface: ApiSurface): string;
|
|
20
|
+
//# sourceMappingURL=service-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-config.d.ts","sourceRoot":"","sources":["../../src/lib/service-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAerD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IAErC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;IAE5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAYlD;AAOD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,sBAAsB,CA8ChF;AAeD,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,GAClB,MAAM,CAUR;AAGD,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,GAClB,MAAM,CAER;AAGD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,sBAAsB,EAC3B,OAAO,EAAE,UAAU,GAClB,MAAM,CAMR;AAGD,wBAAgB,eAAe,CAC7B,GAAG,EAAE,sBAAsB,EAC3B,OAAO,EAAE,UAAU,GAClB,MAAM,CAER"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findRepoRoot = findRepoRoot;
|
|
4
|
+
exports.resolveServiceContext = resolveServiceContext;
|
|
5
|
+
exports.surfaceClientShortName = surfaceClientShortName;
|
|
6
|
+
exports.surfaceClientPackageName = surfaceClientPackageName;
|
|
7
|
+
exports.surfaceClientDir = surfaceClientDir;
|
|
8
|
+
exports.surfaceSpecPath = surfaceSpecPath;
|
|
9
|
+
const node_fs_1 = require("node:fs");
|
|
10
|
+
const node_path_1 = require("node:path");
|
|
11
|
+
const xema_decorators_1 = require("@xemahq/xema-decorators");
|
|
12
|
+
function findRepoRoot(start) {
|
|
13
|
+
let dir = (0, node_path_1.resolve)(start);
|
|
14
|
+
while (dir !== (0, node_path_1.dirname)(dir)) {
|
|
15
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(dir, 'pnpm-workspace.yaml'))) {
|
|
16
|
+
return dir;
|
|
17
|
+
}
|
|
18
|
+
dir = (0, node_path_1.dirname)(dir);
|
|
19
|
+
}
|
|
20
|
+
throw new Error(`api-client-generator: could not locate a repo root (pnpm-workspace.yaml) ` +
|
|
21
|
+
`walking up from ${start}.`);
|
|
22
|
+
}
|
|
23
|
+
function resolveServiceContext(serviceDir) {
|
|
24
|
+
const pkgPath = (0, node_path_1.join)(serviceDir, 'package.json');
|
|
25
|
+
if (!(0, node_fs_1.existsSync)(pkgPath)) {
|
|
26
|
+
throw new Error(`api-client-generator: no package.json found at ${pkgPath}. Run the ` +
|
|
27
|
+
`generator from a service directory.`);
|
|
28
|
+
}
|
|
29
|
+
const pkg = JSON.parse((0, node_fs_1.readFileSync)(pkgPath, 'utf8'));
|
|
30
|
+
const api = pkg.xema?.api;
|
|
31
|
+
if (!api || typeof api !== 'object') {
|
|
32
|
+
throw new Error(`api-client-generator: ${pkgPath} is missing the required \`xema.api\` ` +
|
|
33
|
+
`block. Add: { "xema": { "api": { "serviceId": "<id>", "biomeId": ` +
|
|
34
|
+
`"<biome>", "title": "<title>" } } }.`);
|
|
35
|
+
}
|
|
36
|
+
const { serviceId, biomeId, title, description } = api;
|
|
37
|
+
for (const [field, value] of Object.entries({ serviceId, biomeId, title })) {
|
|
38
|
+
if (typeof value !== 'string' || value.trim() === '') {
|
|
39
|
+
throw new Error(`api-client-generator: \`xema.api.${field}\` is required and must be a ` +
|
|
40
|
+
`non-empty string in ${pkgPath}.`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (typeof pkg.version !== 'string' || pkg.version.trim() === '') {
|
|
44
|
+
throw new Error(`api-client-generator: ${pkgPath} is missing a \`version\` — every ` +
|
|
45
|
+
`generated surface client shares the service version.`);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
serviceDir: (0, node_path_1.resolve)(serviceDir),
|
|
49
|
+
repoRoot: findRepoRoot(serviceDir),
|
|
50
|
+
api: {
|
|
51
|
+
serviceId: serviceId,
|
|
52
|
+
biomeId: biomeId,
|
|
53
|
+
title: title,
|
|
54
|
+
...(typeof description === 'string' ? { description } : {}),
|
|
55
|
+
},
|
|
56
|
+
version: pkg.version,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function surfaceClientShortName(serviceId, surface) {
|
|
60
|
+
if (surface === xema_decorators_1.ApiSurface.Public) {
|
|
61
|
+
return `${serviceId}-client`;
|
|
62
|
+
}
|
|
63
|
+
const segment = surface;
|
|
64
|
+
if (serviceId.endsWith('-api')) {
|
|
65
|
+
const base = serviceId.slice(0, -'-api'.length);
|
|
66
|
+
return `${base}-${segment}-api-client`;
|
|
67
|
+
}
|
|
68
|
+
return `${serviceId}-${segment}-client`;
|
|
69
|
+
}
|
|
70
|
+
function surfaceClientPackageName(serviceId, surface) {
|
|
71
|
+
return `@xemahq/${surfaceClientShortName(serviceId, surface)}`;
|
|
72
|
+
}
|
|
73
|
+
function surfaceClientDir(ctx, surface) {
|
|
74
|
+
const dirName = surfaceClientShortName(ctx.api.serviceId, surface).replace(/-client$/, '');
|
|
75
|
+
return (0, node_path_1.join)(ctx.repoRoot, 'packages', 'clients', dirName);
|
|
76
|
+
}
|
|
77
|
+
function surfaceSpecPath(ctx, surface) {
|
|
78
|
+
return (0, node_path_1.join)(ctx.serviceDir, `openapi.${surface}.json`);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=service-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-config.js","sourceRoot":"","sources":["../../src/lib/service-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { INestApplication, Type } from '@nestjs/common';
|
|
2
|
+
import type { DiscoveryService, MetadataScanner, ModulesContainer } from '@nestjs/core';
|
|
3
|
+
import type { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
|
|
4
|
+
import type { Test } from '@nestjs/testing';
|
|
5
|
+
export interface ServiceNest {
|
|
6
|
+
readonly Test: typeof Test;
|
|
7
|
+
readonly DocumentBuilder: typeof DocumentBuilder;
|
|
8
|
+
readonly SwaggerModule: typeof SwaggerModule;
|
|
9
|
+
readonly DiscoveryService: Type<DiscoveryService>;
|
|
10
|
+
readonly MetadataScanner: Type<MetadataScanner>;
|
|
11
|
+
readonly ModulesContainer: Type<ModulesContainer>;
|
|
12
|
+
}
|
|
13
|
+
export declare function loadServiceNest(serviceDir: string): ServiceNest;
|
|
14
|
+
export type { INestApplication };
|
|
15
|
+
//# sourceMappingURL=service-nest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-nest.d.ts","sourceRoot":"","sources":["../../src/lib/service-nest.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,OAAO,eAAe,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE,OAAO,aAAa,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAClD,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAChD,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;CACnD;AAQD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAY/D;AAED,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadServiceNest = loadServiceNest;
|
|
4
|
+
function requireFrom(serviceDir, request) {
|
|
5
|
+
const resolved = require.resolve(request, { paths: [serviceDir] });
|
|
6
|
+
return require(resolved);
|
|
7
|
+
}
|
|
8
|
+
function loadServiceNest(serviceDir) {
|
|
9
|
+
const core = requireFrom(serviceDir, '@nestjs/core');
|
|
10
|
+
const testing = requireFrom(serviceDir, '@nestjs/testing');
|
|
11
|
+
const swagger = requireFrom(serviceDir, '@nestjs/swagger');
|
|
12
|
+
return {
|
|
13
|
+
Test: testing.Test,
|
|
14
|
+
DocumentBuilder: swagger.DocumentBuilder,
|
|
15
|
+
SwaggerModule: swagger.SwaggerModule,
|
|
16
|
+
DiscoveryService: core.DiscoveryService,
|
|
17
|
+
MetadataScanner: core.MetadataScanner,
|
|
18
|
+
ModulesContainer: core.ModulesContainer,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=service-nest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-nest.js","sourceRoot":"","sources":["../../src/lib/service-nest.ts"],"names":[],"mappings":";;AAwCA,0CAYC;AAlBD,SAAS,WAAW,CAAC,UAAkB,EAAE,OAAe;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAEnE,OAAO,OAAO,CAAC,QAAQ,CAA4B,CAAC;AACtD,CAAC;AAED,SAAgB,eAAe,CAAC,UAAkB;IAChD,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC3D,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAmB;QACjC,eAAe,EAAE,OAAO,CAAC,eAAyC;QAClE,aAAa,EAAE,OAAO,CAAC,aAAqC;QAC5D,gBAAgB,EAAE,IAAI,CAAC,gBAA0C;QACjE,eAAe,EAAE,IAAI,CAAC,eAAwC;QAC9D,gBAAgB,EAAE,IAAI,CAAC,gBAA0C;KAClE,CAAC;AACJ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xemahq/api-client-generator",
|
|
3
|
+
"version": "0.1.1",
|
|
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 (all sharing the owning service's version), 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.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"xema",
|
|
7
|
+
"openapi",
|
|
8
|
+
"orval",
|
|
9
|
+
"nestjs",
|
|
10
|
+
"api-client",
|
|
11
|
+
"codegen"
|
|
12
|
+
],
|
|
13
|
+
"license": "Apache-2.0",
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public",
|
|
16
|
+
"registry": "https://registry.npmjs.org/"
|
|
17
|
+
},
|
|
18
|
+
"main": "dist/index.js",
|
|
19
|
+
"types": "dist/index.d.ts",
|
|
20
|
+
"bin": {
|
|
21
|
+
"xema-openapi": "dist/bin/xema-openapi.js",
|
|
22
|
+
"xema-client-generate": "dist/bin/xema-client-generate.js"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist"
|
|
26
|
+
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"clean": "rm -rf dist",
|
|
29
|
+
"build": "tsc -p tsconfig.build.json",
|
|
30
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
31
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"@nestjs/common": "^10 || ^11",
|
|
35
|
+
"@nestjs/core": "^10 || ^11",
|
|
36
|
+
"@nestjs/swagger": "^7 || ^8 || ^11",
|
|
37
|
+
"@nestjs/testing": "^10 || ^11",
|
|
38
|
+
"@xemahq/xema-decorators": "^0.1.1",
|
|
39
|
+
"orval": "^8",
|
|
40
|
+
"reflect-metadata": "^0.2",
|
|
41
|
+
"ts-node": ">=10",
|
|
42
|
+
"tsconfig-paths": ">=4",
|
|
43
|
+
"typescript": "^5"
|
|
44
|
+
},
|
|
45
|
+
"peerDependenciesMeta": {
|
|
46
|
+
"ts-node": {
|
|
47
|
+
"optional": true
|
|
48
|
+
},
|
|
49
|
+
"tsconfig-paths": {
|
|
50
|
+
"optional": true
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@nestjs/common": "catalog:",
|
|
55
|
+
"@nestjs/core": "catalog:",
|
|
56
|
+
"@nestjs/swagger": "catalog:",
|
|
57
|
+
"@nestjs/testing": "catalog:",
|
|
58
|
+
"@types/node": "catalog:",
|
|
59
|
+
"@xemahq/xema-decorators": "workspace:*",
|
|
60
|
+
"orval": "catalog:",
|
|
61
|
+
"prettier": "catalog:",
|
|
62
|
+
"reflect-metadata": "catalog:",
|
|
63
|
+
"typescript": "catalog:"
|
|
64
|
+
},
|
|
65
|
+
"exports": {
|
|
66
|
+
".": {
|
|
67
|
+
"types": "./dist/index.d.ts",
|
|
68
|
+
"xema-source": "./src/index.ts",
|
|
69
|
+
"default": "./dist/index.js"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|