@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.
Files changed (62) hide show
  1. package/README.md +73 -0
  2. package/dist/bin/xema-client-generate.d.ts +3 -0
  3. package/dist/bin/xema-client-generate.d.ts.map +1 -0
  4. package/dist/bin/xema-client-generate.js +6 -0
  5. package/dist/bin/xema-client-generate.js.map +1 -0
  6. package/dist/bin/xema-openapi.d.ts +3 -0
  7. package/dist/bin/xema-openapi.d.ts.map +1 -0
  8. package/dist/bin/xema-openapi.js +28 -0
  9. package/dist/bin/xema-openapi.js.map +1 -0
  10. package/dist/index.d.ts +10 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +26 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/lib/client-package.d.ts +17 -0
  15. package/dist/lib/client-package.d.ts.map +1 -0
  16. package/dist/lib/client-package.js +114 -0
  17. package/dist/lib/client-package.js.map +1 -0
  18. package/dist/lib/client-readme.d.ts +9 -0
  19. package/dist/lib/client-readme.d.ts.map +1 -0
  20. package/dist/lib/client-readme.js +100 -0
  21. package/dist/lib/client-readme.js.map +1 -0
  22. package/dist/lib/custom-fetch-template.d.ts +2 -0
  23. package/dist/lib/custom-fetch-template.d.ts.map +1 -0
  24. package/dist/lib/custom-fetch-template.js +166 -0
  25. package/dist/lib/custom-fetch-template.js.map +1 -0
  26. package/dist/lib/default-stubs.d.ts +3 -0
  27. package/dist/lib/default-stubs.d.ts.map +1 -0
  28. package/dist/lib/default-stubs.js +107 -0
  29. package/dist/lib/default-stubs.js.map +1 -0
  30. package/dist/lib/extract-openapi.d.ts +4 -0
  31. package/dist/lib/extract-openapi.d.ts.map +1 -0
  32. package/dist/lib/extract-openapi.js +134 -0
  33. package/dist/lib/extract-openapi.js.map +1 -0
  34. package/dist/lib/generate-clients.d.ts +4 -0
  35. package/dist/lib/generate-clients.d.ts.map +1 -0
  36. package/dist/lib/generate-clients.js +84 -0
  37. package/dist/lib/generate-clients.js.map +1 -0
  38. package/dist/lib/overrides.d.ts +7 -0
  39. package/dist/lib/overrides.d.ts.map +1 -0
  40. package/dist/lib/overrides.js +26 -0
  41. package/dist/lib/overrides.js.map +1 -0
  42. package/dist/lib/prune-spec.d.ts +16 -0
  43. package/dist/lib/prune-spec.d.ts.map +1 -0
  44. package/dist/lib/prune-spec.js +100 -0
  45. package/dist/lib/prune-spec.js.map +1 -0
  46. package/dist/lib/repo-post-process.d.ts +9 -0
  47. package/dist/lib/repo-post-process.d.ts.map +1 -0
  48. package/dist/lib/repo-post-process.js +56 -0
  49. package/dist/lib/repo-post-process.js.map +1 -0
  50. package/dist/lib/seed-openapi-env.d.ts +2 -0
  51. package/dist/lib/seed-openapi-env.d.ts.map +1 -0
  52. package/dist/lib/seed-openapi-env.js +77 -0
  53. package/dist/lib/seed-openapi-env.js.map +1 -0
  54. package/dist/lib/service-config.d.ts +20 -0
  55. package/dist/lib/service-config.d.ts.map +1 -0
  56. package/dist/lib/service-config.js +80 -0
  57. package/dist/lib/service-config.js.map +1 -0
  58. package/dist/lib/service-nest.d.ts +15 -0
  59. package/dist/lib/service-nest.d.ts.map +1 -0
  60. package/dist/lib/service-nest.js +21 -0
  61. package/dist/lib/service-nest.js.map +1 -0
  62. package/package.json +72 -0
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyDefaultOpenApiStubs = applyDefaultOpenApiStubs;
4
+ const node_path_1 = require("node:path");
5
+ function tryResolveExport(fromDir, request, exportName) {
6
+ try {
7
+ const resolved = require.resolve(request, { paths: [fromDir] });
8
+ const mod = require(resolved);
9
+ return mod[exportName];
10
+ }
11
+ catch {
12
+ return undefined;
13
+ }
14
+ }
15
+ function createPrismaStub() {
16
+ const handler = {
17
+ get: (_t, prop) => {
18
+ if (prop === 'then')
19
+ return undefined;
20
+ if (prop === '$connect' || prop === '$disconnect' || prop === '$on') {
21
+ return () => Promise.resolve();
22
+ }
23
+ return new Proxy((() => Promise.resolve([])), handler);
24
+ },
25
+ apply: () => Promise.resolve([]),
26
+ };
27
+ return new Proxy({}, handler);
28
+ }
29
+ const IDENTITY_STUB = {
30
+ waitForReady: async () => true,
31
+ getAccessToken: async () => 'dummy-token',
32
+ getKeycloakBaseUrl: () => 'http://localhost:8180',
33
+ getAllowedRealms: () => ['master'],
34
+ getClientId: () => 'openapi-extraction',
35
+ };
36
+ const EVENT_HUB_BOOTSTRAP_STUB = {
37
+ onModuleInit: async () => { },
38
+ onModuleDestroy: async () => { },
39
+ isEventHubRegistered: () => true,
40
+ waitForRegistration: async () => true,
41
+ };
42
+ const EVENT_HUB_CLIENT_STUB = {
43
+ getAuthInfo: () => ({
44
+ jwksUrl: 'http://localhost:8180/realms/dummy/protocol/openid-connect/certs',
45
+ issuer: 'http://localhost:8180/realms/dummy',
46
+ }),
47
+ };
48
+ function applyDefaultOpenApiStubs(builder, serviceDir) {
49
+ const PrismaService = tryResolveExport(serviceDir, (0, node_path_1.join)(serviceDir, 'src', 'prisma', 'prisma.service'), 'PrismaService');
50
+ if (PrismaService) {
51
+ builder.overrideProvider(PrismaService).useValue(createPrismaStub());
52
+ }
53
+ const IdentityBootstrapService = tryResolveExport(serviceDir, '@xemahq/identity-client', 'IdentityBootstrapService');
54
+ if (IdentityBootstrapService) {
55
+ builder
56
+ .overrideProvider(IdentityBootstrapService)
57
+ .useValue(IDENTITY_STUB);
58
+ }
59
+ const EventHubBootstrapService = tryResolveExport(serviceDir, '@xemahq/event-hub-client', 'EventHubBootstrapService');
60
+ if (EventHubBootstrapService) {
61
+ builder
62
+ .overrideProvider(EventHubBootstrapService)
63
+ .useValue(EVENT_HUB_BOOTSTRAP_STUB);
64
+ }
65
+ const EventHubClient = tryResolveExport(serviceDir, '@xemahq/event-hub-client', 'EventHubClient');
66
+ if (EventHubClient) {
67
+ builder
68
+ .overrideProvider(EventHubClient)
69
+ .useValue(EVENT_HUB_CLIENT_STUB);
70
+ }
71
+ const ServiceTokenGuard = tryResolveExport(serviceDir, '@xemahq/platform-common', 'ServiceTokenGuard');
72
+ if (ServiceTokenGuard) {
73
+ builder
74
+ .overrideGuard(ServiceTokenGuard)
75
+ .useValue({ canActivate: () => true });
76
+ }
77
+ const XemaRuntimeScanner = tryResolveExport(serviceDir, '@xemahq/xema-decorators', 'XemaRuntimeScanner');
78
+ if (XemaRuntimeScanner) {
79
+ builder.overrideProvider(XemaRuntimeScanner).useValue({
80
+ onApplicationBootstrap: async () => { },
81
+ });
82
+ }
83
+ const discoveryStub = { getProviders: () => [], getControllers: () => [] };
84
+ const coreRoots = new Set([serviceDir]);
85
+ try {
86
+ coreRoots.add((0, node_path_1.dirname)(require.resolve('@xemahq/xema-decorators', { paths: [serviceDir] })));
87
+ }
88
+ catch {
89
+ }
90
+ const seenDiscovery = new Set();
91
+ for (const root of coreRoots) {
92
+ const DiscoveryService = tryResolveExport(root, '@nestjs/core', 'DiscoveryService');
93
+ if (DiscoveryService && !seenDiscovery.has(DiscoveryService)) {
94
+ seenDiscovery.add(DiscoveryService);
95
+ builder.overrideProvider(DiscoveryService).useValue(discoveryStub);
96
+ }
97
+ }
98
+ const SERVICE_REGISTRY_TOKEN = tryResolveExport(serviceDir, '@xemahq/service-registry-nest', 'SERVICE_REGISTRY_TOKEN');
99
+ const createOpenApiStubRegistry = tryResolveExport(serviceDir, '@xemahq/service-registry-nest', 'createOpenApiStubRegistry');
100
+ if (SERVICE_REGISTRY_TOKEN && createOpenApiStubRegistry) {
101
+ builder
102
+ .overrideProvider(SERVICE_REGISTRY_TOKEN)
103
+ .useValue(createOpenApiStubRegistry());
104
+ }
105
+ return builder;
106
+ }
107
+ //# sourceMappingURL=default-stubs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-stubs.js","sourceRoot":"","sources":["../../src/lib/default-stubs.ts"],"names":[],"mappings":";;AA8EA,4DA+HC;AA7MD,yCAA0C;AAqB1C,SAAS,gBAAgB,CACvB,OAAe,EACf,OAAe,EACf,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEhE,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAA4B,CAAC;QACzD,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAGD,SAAS,gBAAgB;IACvB,MAAM,OAAO,GAAkD;QAC7D,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE;YAChB,IAAI,IAAI,KAAK,MAAM;gBAAE,OAAO,SAAS,CAAC;YACtC,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBACpE,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACjC,CAAC;YACD,OAAO,IAAI,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAU,EAAE,OAAO,CAAC,CAAC;QAClE,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;KACjC,CAAC;IACF,OAAO,IAAI,KAAK,CAAC,EAAW,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,aAAa,GAAG;IACpB,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;IAC9B,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa;IACzC,kBAAkB,EAAE,GAAG,EAAE,CAAC,uBAAuB;IACjD,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC;IAClC,WAAW,EAAE,GAAG,EAAE,CAAC,oBAAoB;CACxC,CAAC;AAEF,MAAM,wBAAwB,GAAG;IAC/B,YAAY,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;IAC5B,eAAe,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;IAC/B,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI;IAChC,mBAAmB,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;CACtC,CAAC;AAEF,MAAM,qBAAqB,GAAG;IAC5B,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAClB,OAAO,EACL,kEAAkE;QACpE,MAAM,EAAE,oCAAoC;KAC7C,CAAC;CACH,CAAC;AAMF,SAAgB,wBAAwB,CACtC,OAA6B,EAC7B,UAAkB;IAGlB,MAAM,aAAa,GAAG,gBAAgB,CACpC,UAAU,EACV,IAAA,gBAAI,EAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EACnD,eAAe,CAChB,CAAC;IACF,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,gBAAgB,CAAC,aAAsB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAChF,CAAC;IAGD,MAAM,wBAAwB,GAAG,gBAAgB,CAC/C,UAAU,EACV,yBAAyB,EACzB,0BAA0B,CAC3B,CAAC;IACF,IAAI,wBAAwB,EAAE,CAAC;QAC7B,OAAO;aACJ,gBAAgB,CAAC,wBAAiC,CAAC;aACnD,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC7B,CAAC;IAGD,MAAM,wBAAwB,GAAG,gBAAgB,CAC/C,UAAU,EACV,0BAA0B,EAC1B,0BAA0B,CAC3B,CAAC;IACF,IAAI,wBAAwB,EAAE,CAAC;QAC7B,OAAO;aACJ,gBAAgB,CAAC,wBAAiC,CAAC;aACnD,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,cAAc,GAAG,gBAAgB,CACrC,UAAU,EACV,0BAA0B,EAC1B,gBAAgB,CACjB,CAAC;IACF,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO;aACJ,gBAAgB,CAAC,cAAuB,CAAC;aACzC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;IAGD,MAAM,iBAAiB,GAAG,gBAAgB,CACxC,UAAU,EACV,yBAAyB,EACzB,mBAAmB,CACpB,CAAC;IACF,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO;aACJ,aAAa,CAAC,iBAA0B,CAAC;aACzC,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAID,MAAM,kBAAkB,GAAG,gBAAgB,CACzC,UAAU,EACV,yBAAyB,EACzB,oBAAoB,CACrB,CAAC;IACF,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,CAAC,gBAAgB,CAAC,kBAA2B,CAAC,CAAC,QAAQ,CAAC;YAC7D,sBAAsB,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;IAoBD,MAAM,aAAa,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAC3E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,SAAS,CAAC,GAAG,CACX,IAAA,mBAAO,EAAC,OAAO,CAAC,OAAO,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAC7E,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;IACD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAW,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACpF,IAAI,gBAAgB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC7D,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACpC,OAAO,CAAC,gBAAgB,CAAC,gBAAyB,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAGD,MAAM,sBAAsB,GAAG,gBAAgB,CAC7C,UAAU,EACV,+BAA+B,EAC/B,wBAAwB,CACzB,CAAC;IACF,MAAM,yBAAyB,GAAG,gBAAgB,CAChD,UAAU,EACV,+BAA+B,EAC/B,2BAA2B,CACG,CAAC;IACjC,IAAI,sBAAsB,IAAI,yBAAyB,EAAE,CAAC;QACxD,OAAO;aACJ,gBAAgB,CAAC,sBAA+B,CAAC;aACjD,QAAQ,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { ApiSurface } from '@xemahq/xema-decorators';
2
+ export declare function extractOpenApiForService(serviceDir?: string): Promise<ApiSurface[]>;
3
+ export declare function runOpenApiCli(): void;
4
+ //# sourceMappingURL=extract-openapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-openapi.d.ts","sourceRoot":"","sources":["../../src/lib/extract-openapi.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,UAAU,EAGX,MAAM,yBAAyB,CAAC;AAqFjC,wBAAsB,wBAAwB,CAC5C,UAAU,GAAE,MAAsB,GACjC,OAAO,CAAC,UAAU,EAAE,CAAC,CAgGvB;AAGD,wBAAgB,aAAa,IAAI,IAAI,CAQpC"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractOpenApiForService = extractOpenApiForService;
4
+ exports.runOpenApiCli = runOpenApiCli;
5
+ const node_fs_1 = require("node:fs");
6
+ const node_path_1 = require("node:path");
7
+ const xema_decorators_1 = require("@xemahq/xema-decorators");
8
+ const default_stubs_1 = require("./default-stubs");
9
+ const overrides_1 = require("./overrides");
10
+ const prune_spec_1 = require("./prune-spec");
11
+ const seed_openapi_env_1 = require("./seed-openapi-env");
12
+ const service_nest_1 = require("./service-nest");
13
+ const service_config_1 = require("./service-config");
14
+ const HTTP_METHODS = new Set([
15
+ 'get',
16
+ 'post',
17
+ 'put',
18
+ 'patch',
19
+ 'delete',
20
+ 'options',
21
+ 'head',
22
+ 'trace',
23
+ ]);
24
+ function collectDocOperationIds(doc) {
25
+ const ids = new Set();
26
+ for (const pathItem of Object.values(doc.paths ?? {})) {
27
+ if (!pathItem)
28
+ continue;
29
+ for (const [method, op] of Object.entries(pathItem)) {
30
+ if (!HTTP_METHODS.has(method.toLowerCase()))
31
+ continue;
32
+ const id = op?.operationId;
33
+ if (typeof id === 'string')
34
+ ids.add(id);
35
+ }
36
+ }
37
+ return ids;
38
+ }
39
+ async function buildApp(ctx, nest) {
40
+ const appModuleMod = require((0, node_path_1.join)(ctx.serviceDir, 'src', 'app.module'));
41
+ if (!appModuleMod.AppModule) {
42
+ throw new Error(`api-client-generator: ${(0, node_path_1.join)(ctx.serviceDir, 'src/app.module')} does not ` +
43
+ `export \`AppModule\`.`);
44
+ }
45
+ let builder = nest.Test.createTestingModule({
46
+ imports: [appModuleMod.AppModule],
47
+ });
48
+ builder = (0, default_stubs_1.applyDefaultOpenApiStubs)(builder, ctx.serviceDir);
49
+ const overrides = (0, overrides_1.loadServiceOverrides)(ctx.serviceDir);
50
+ if (overrides?.applyOverrides) {
51
+ builder = overrides.applyOverrides(builder) ?? builder;
52
+ }
53
+ const moduleRef = await builder.compile();
54
+ return moduleRef.createNestApplication();
55
+ }
56
+ async function extractOpenApiForService(serviceDir = process.cwd()) {
57
+ (0, seed_openapi_env_1.seedOpenApiEnv)();
58
+ const ctx = (0, service_config_1.resolveServiceContext)(serviceDir);
59
+ const overrides = (0, overrides_1.loadServiceOverrides)(ctx.serviceDir);
60
+ if (overrides?.env) {
61
+ for (const [k, v] of Object.entries(overrides.env)) {
62
+ if (process.env[k] === undefined)
63
+ process.env[k] = v;
64
+ }
65
+ }
66
+ const nest = (0, service_nest_1.loadServiceNest)(ctx.serviceDir);
67
+ const app = await buildApp(ctx, nest);
68
+ try {
69
+ const builder = new nest.DocumentBuilder()
70
+ .setTitle(ctx.api.title)
71
+ .setVersion(ctx.version)
72
+ .addBearerAuth();
73
+ if (ctx.api.description) {
74
+ builder.setDescription(ctx.api.description);
75
+ }
76
+ const fullDoc = nest.SwaggerModule.createDocument(app, builder.build(), {
77
+ operationIdFactory: (controllerKey, methodKey) => `${controllerKey}_${methodKey}`,
78
+ });
79
+ const modulesContainer = app.get(nest.ModulesContainer, { strict: false });
80
+ const discovery = new nest.DiscoveryService(modulesContainer);
81
+ const metadataScanner = new nest.MetadataScanner();
82
+ const scan = (0, xema_decorators_1.scanApiSurfaces)(discovery, metadataScanner);
83
+ const docOps = collectDocOperationIds(fullDoc);
84
+ const unclassifiedInDoc = scan.unclassified.filter((u) => docOps.has(u.operationId));
85
+ if (unclassifiedInDoc.length > 0) {
86
+ (0, xema_decorators_1.assertNoUnclassifiedSurfaces)(ctx.api.serviceId, {
87
+ surfaces: scan.surfaces,
88
+ excluded: scan.excluded,
89
+ unclassified: unclassifiedInDoc,
90
+ });
91
+ }
92
+ const seen = new Set([
93
+ ...scan.surfaces.keys(),
94
+ ...scan.excluded,
95
+ ...scan.unclassified.map((u) => u.operationId),
96
+ ]);
97
+ const unaccounted = [...docOps].filter((id) => !seen.has(id));
98
+ if (unaccounted.length > 0) {
99
+ throw new Error(`api-client-generator: ${ctx.api.serviceId} has ${unaccounted.length} ` +
100
+ `OpenAPI operation(s) the surface scan never saw ` +
101
+ `(${unaccounted.join(', ')}). A controller is emitted into the spec ` +
102
+ `but unreachable from the DiscoveryService scan.`);
103
+ }
104
+ const written = [];
105
+ for (const surface of prune_spec_1.ALL_SURFACES) {
106
+ const keep = new Set([...scan.surfaces.entries()]
107
+ .filter(([, s]) => s === surface)
108
+ .map(([id]) => id));
109
+ const specPath = (0, service_config_1.surfaceSpecPath)(ctx, surface);
110
+ const { doc, pathCount } = (0, prune_spec_1.pruneSpecForSurface)(fullDoc, keep);
111
+ if (pathCount === 0) {
112
+ if ((0, node_fs_1.existsSync)(specPath))
113
+ (0, node_fs_1.rmSync)(specPath);
114
+ continue;
115
+ }
116
+ (0, node_fs_1.writeFileSync)(specPath, `${JSON.stringify(doc, null, 2)}\n`, 'utf8');
117
+ written.push(surface);
118
+ }
119
+ console.log(`[xema-openapi] ${ctx.api.serviceId}: wrote ${written.length} surface spec(s) → ${written.join(', ') || '(none)'}`);
120
+ return written;
121
+ }
122
+ finally {
123
+ await app.close().catch(() => { });
124
+ }
125
+ }
126
+ function runOpenApiCli() {
127
+ extractOpenApiForService()
128
+ .then(() => process.exit(0))
129
+ .catch((err) => {
130
+ console.error('[xema-openapi] extraction failed:', err);
131
+ process.exit(1);
132
+ });
133
+ }
134
+ //# sourceMappingURL=extract-openapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-openapi.js","sourceRoot":"","sources":["../../src/lib/extract-openapi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { ApiSurface } from '@xemahq/xema-decorators';
2
+ export declare function generateClientsForService(serviceDir?: string): Promise<ApiSurface[]>;
3
+ export declare function runClientGenerateCli(): void;
4
+ //# sourceMappingURL=generate-clients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-clients.d.ts","sourceRoot":"","sources":["../../src/lib/generate-clients.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AA6ErD,wBAAsB,yBAAyB,CAC7C,UAAU,GAAE,MAAsB,GACjC,OAAO,CAAC,UAAU,EAAE,CAAC,CAwCvB;AAGD,wBAAgB,oBAAoB,IAAI,IAAI,CAQ3C"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateClientsForService = generateClientsForService;
4
+ exports.runClientGenerateCli = runClientGenerateCli;
5
+ const node_child_process_1 = require("node:child_process");
6
+ const node_fs_1 = require("node:fs");
7
+ const node_path_1 = require("node:path");
8
+ const node_url_1 = require("node:url");
9
+ const client_package_1 = require("./client-package");
10
+ const client_readme_1 = require("./client-readme");
11
+ const repo_post_process_1 = require("./repo-post-process");
12
+ const prune_spec_1 = require("./prune-spec");
13
+ const service_config_1 = require("./service-config");
14
+ async function importFromService(serviceDir, request) {
15
+ const resolved = require.resolve(request, { paths: [serviceDir] });
16
+ const dynamicImport = new Function('u', 'return import(u)');
17
+ return dynamicImport((0, node_url_1.pathToFileURL)(resolved).href);
18
+ }
19
+ async function resolveOrvalGenerate(serviceDir) {
20
+ const mod = await importFromService(serviceDir, 'orval');
21
+ const generate = mod.generate ??
22
+ (mod.default?.generate);
23
+ if (typeof generate !== 'function') {
24
+ throw new Error('api-client-generator: could not resolve orval `generate` from the service.');
25
+ }
26
+ return generate;
27
+ }
28
+ function orvalConfigFor(specPath, clientSrc) {
29
+ return {
30
+ input: { target: specPath },
31
+ output: {
32
+ mode: 'tags-split',
33
+ target: `${clientSrc}/endpoints`,
34
+ schemas: `${clientSrc}/models`,
35
+ client: 'fetch',
36
+ override: {
37
+ fetch: { includeHttpResponseReturnType: false },
38
+ mutator: {
39
+ path: `${clientSrc}/custom-fetch.ts`,
40
+ name: 'customFetch',
41
+ },
42
+ },
43
+ },
44
+ };
45
+ }
46
+ async function generateClientsForService(serviceDir = process.cwd()) {
47
+ const ctx = (0, service_config_1.resolveServiceContext)(serviceDir);
48
+ const generate = await resolveOrvalGenerate(ctx.serviceDir);
49
+ const generated = [];
50
+ for (const surface of prune_spec_1.ALL_SURFACES) {
51
+ const specPath = (0, service_config_1.surfaceSpecPath)(ctx, surface);
52
+ if (!(0, node_fs_1.existsSync)(specPath)) {
53
+ continue;
54
+ }
55
+ const { clientDir, clientSrc } = (0, client_package_1.ensureClientPackage)(ctx, surface);
56
+ (0, client_readme_1.ensureClientReadme)({
57
+ clientDir,
58
+ packageName: (0, service_config_1.surfaceClientPackageName)(ctx.api.serviceId, surface),
59
+ serviceTitle: ctx.api.title,
60
+ surface,
61
+ repoRoot: ctx.repoRoot,
62
+ });
63
+ (0, node_fs_1.rmSync)((0, node_path_1.join)(clientSrc, 'endpoints'), { recursive: true, force: true });
64
+ (0, node_fs_1.rmSync)((0, node_path_1.join)(clientSrc, 'models'), { recursive: true, force: true });
65
+ await generate(orvalConfigFor(specPath, clientSrc));
66
+ (0, repo_post_process_1.postProcessClient)(ctx.repoRoot, ctx.serviceDir, clientSrc);
67
+ (0, node_child_process_1.execFileSync)('pnpm', ['exec', 'tsc', '-p', 'tsconfig.json'], {
68
+ cwd: clientDir,
69
+ stdio: 'inherit',
70
+ });
71
+ generated.push(surface);
72
+ }
73
+ console.log(`[xema-client-generate] ${ctx.api.serviceId}: generated ${generated.length} client(s) → ${generated.join(', ') || '(none)'}`);
74
+ return generated;
75
+ }
76
+ function runClientGenerateCli() {
77
+ generateClientsForService()
78
+ .then(() => process.exit(0))
79
+ .catch((err) => {
80
+ console.error('[xema-client-generate] generation failed:', err);
81
+ process.exit(1);
82
+ });
83
+ }
84
+ //# sourceMappingURL=generate-clients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-clients.js","sourceRoot":"","sources":["../../src/lib/generate-clients.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { TestingModuleBuilder } from '@nestjs/testing';
2
+ export interface OpenApiOverrides {
3
+ readonly env?: Record<string, string>;
4
+ readonly applyOverrides?: (builder: TestingModuleBuilder) => TestingModuleBuilder | void;
5
+ }
6
+ export declare function loadServiceOverrides(serviceDir: string): OpenApiOverrides | undefined;
7
+ //# sourceMappingURL=overrides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/lib/overrides.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAiB5D,MAAM,WAAW,gBAAgB;IAE/B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAMtC,QAAQ,CAAC,cAAc,CAAC,EAAE,CACxB,OAAO,EAAE,oBAAoB,KAC1B,oBAAoB,GAAG,IAAI,CAAC;CAClC;AASD,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,GACjB,gBAAgB,GAAG,SAAS,CA6B9B"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadServiceOverrides = loadServiceOverrides;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const OVERRIDES_BASENAME = 'openapi.overrides';
7
+ function loadServiceOverrides(serviceDir) {
8
+ const candidate = [`${OVERRIDES_BASENAME}.ts`, `${OVERRIDES_BASENAME}.js`]
9
+ .map((f) => (0, node_path_1.join)(serviceDir, f))
10
+ .find((p) => (0, node_fs_1.existsSync)(p));
11
+ if (!candidate) {
12
+ return undefined;
13
+ }
14
+ const mod = require(candidate);
15
+ const overrides = mod.default ?? mod;
16
+ if (overrides.env !== undefined &&
17
+ (typeof overrides.env !== 'object' || overrides.env === null)) {
18
+ throw new Error(`api-client-generator: ${candidate} \`env\` must be a Record<string,string>.`);
19
+ }
20
+ if (overrides.applyOverrides !== undefined &&
21
+ typeof overrides.applyOverrides !== 'function') {
22
+ throw new Error(`api-client-generator: ${candidate} \`applyOverrides\` must be a function.`);
23
+ }
24
+ return overrides;
25
+ }
26
+ //# sourceMappingURL=overrides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/lib/overrides.ts"],"names":[],"mappings":";;AAwCA,oDA+BC;AAvED,qCAAqC;AACrC,yCAAiC;AAgCjC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAO/C,SAAgB,oBAAoB,CAClC,UAAkB;IAElB,MAAM,SAAS,GAAG,CAAC,GAAG,kBAAkB,KAAK,EAAE,GAAG,kBAAkB,KAAK,CAAC;SACvE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,gBAAI,EAAC,UAAU,EAAE,CAAC,CAAC,CAAC;SAC/B,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,oBAAU,EAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAET,CAAC;IACrB,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;IACrC,IACE,SAAS,CAAC,GAAG,KAAK,SAAS;QAC3B,CAAC,OAAO,SAAS,CAAC,GAAG,KAAK,QAAQ,IAAI,SAAS,CAAC,GAAG,KAAK,IAAI,CAAC,EAC7D,CAAC;QACD,MAAM,IAAI,KAAK,CACb,yBAAyB,SAAS,2CAA2C,CAC9E,CAAC;IACJ,CAAC;IACD,IACE,SAAS,CAAC,cAAc,KAAK,SAAS;QACtC,OAAO,SAAS,CAAC,cAAc,KAAK,UAAU,EAC9C,CAAC;QACD,MAAM,IAAI,KAAK,CACb,yBAAyB,SAAS,yCAAyC,CAC5E,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { ApiSurface } from '@xemahq/xema-decorators';
2
+ interface OpenApiDoc {
3
+ paths?: Record<string, Record<string, unknown> | undefined>;
4
+ components?: {
5
+ schemas?: Record<string, unknown>;
6
+ [k: string]: unknown;
7
+ };
8
+ [k: string]: unknown;
9
+ }
10
+ export declare function pruneSpecForSurface(fullDoc: OpenApiDoc, keepOperationIds: ReadonlySet<string>): {
11
+ doc: OpenApiDoc;
12
+ pathCount: number;
13
+ };
14
+ export declare const ALL_SURFACES: readonly ApiSurface[];
15
+ export {};
16
+ //# sourceMappingURL=prune-spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prune-spec.d.ts","sourceRoot":"","sources":["../../src/lib/prune-spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;IAC5D,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACtB,CAAC;IACF,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAkDD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,UAAU,EACnB,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,GACpC;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAiExC;AAGD,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAI7C,CAAC"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ALL_SURFACES = void 0;
4
+ exports.pruneSpecForSurface = pruneSpecForSurface;
5
+ const xema_decorators_1 = require("@xemahq/xema-decorators");
6
+ const HTTP_METHODS = new Set([
7
+ 'get',
8
+ 'post',
9
+ 'put',
10
+ 'patch',
11
+ 'delete',
12
+ 'options',
13
+ 'head',
14
+ 'trace',
15
+ ]);
16
+ const SCHEMA_REF_PREFIX = '#/components/schemas/';
17
+ function collectSchemaRefs(node, out) {
18
+ if (Array.isArray(node)) {
19
+ for (const item of node) {
20
+ collectSchemaRefs(item, out);
21
+ }
22
+ return;
23
+ }
24
+ if (node && typeof node === 'object') {
25
+ for (const [key, value] of Object.entries(node)) {
26
+ if (key === '$ref' && typeof value === 'string') {
27
+ if (value.startsWith(SCHEMA_REF_PREFIX)) {
28
+ out.add(value.slice(SCHEMA_REF_PREFIX.length));
29
+ }
30
+ }
31
+ else {
32
+ collectSchemaRefs(value, out);
33
+ }
34
+ }
35
+ }
36
+ }
37
+ function pruneSpecForSurface(fullDoc, keepOperationIds) {
38
+ const clone = JSON.parse(JSON.stringify(fullDoc));
39
+ const paths = clone.paths ?? {};
40
+ let pathCount = 0;
41
+ for (const [pathKey, pathItem] of Object.entries(paths)) {
42
+ if (!pathItem || typeof pathItem !== 'object') {
43
+ delete paths[pathKey];
44
+ continue;
45
+ }
46
+ for (const [method, operation] of Object.entries(pathItem)) {
47
+ if (!HTTP_METHODS.has(method.toLowerCase())) {
48
+ continue;
49
+ }
50
+ const operationId = operation?.operationId;
51
+ if (typeof operationId !== 'string' ||
52
+ !keepOperationIds.has(operationId)) {
53
+ delete pathItem[method];
54
+ }
55
+ }
56
+ const remainingMethods = Object.keys(pathItem).filter((k) => HTTP_METHODS.has(k.toLowerCase()));
57
+ if (remainingMethods.length === 0) {
58
+ delete paths[pathKey];
59
+ }
60
+ else {
61
+ pathCount += remainingMethods.length;
62
+ }
63
+ }
64
+ clone.paths = paths;
65
+ const allSchemas = clone.components?.schemas;
66
+ if (allSchemas && typeof allSchemas === 'object') {
67
+ const reachable = new Set();
68
+ collectSchemaRefs(clone.paths, reachable);
69
+ const queue = [...reachable];
70
+ while (queue.length > 0) {
71
+ const name = queue.pop();
72
+ const schema = allSchemas[name];
73
+ if (schema === undefined) {
74
+ continue;
75
+ }
76
+ const nested = new Set();
77
+ collectSchemaRefs(schema, nested);
78
+ for (const ref of nested) {
79
+ if (!reachable.has(ref)) {
80
+ reachable.add(ref);
81
+ queue.push(ref);
82
+ }
83
+ }
84
+ }
85
+ const pruned = {};
86
+ for (const [name, schema] of Object.entries(allSchemas)) {
87
+ if (reachable.has(name)) {
88
+ pruned[name] = schema;
89
+ }
90
+ }
91
+ clone.components = { ...clone.components, schemas: pruned };
92
+ }
93
+ return { doc: clone, pathCount };
94
+ }
95
+ exports.ALL_SURFACES = [
96
+ xema_decorators_1.ApiSurface.Public,
97
+ xema_decorators_1.ApiSurface.Internal,
98
+ xema_decorators_1.ApiSurface.Operator,
99
+ ];
100
+ //# sourceMappingURL=prune-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prune-spec.js","sourceRoot":"","sources":["../../src/lib/prune-spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ interface PostProcessors {
2
+ regenerateModelsBarrel: (clientSrc: string) => number;
3
+ fixOrvalResponseTypes: (serviceRoot: string) => number;
4
+ fixOrvalArrayParams: (clientSrc: string) => number;
5
+ }
6
+ export declare function loadRepoPostProcessors(repoRoot: string): PostProcessors;
7
+ export declare function postProcessClient(repoRoot: string, serviceRoot: string, clientSrc: string): void;
8
+ export {};
9
+ //# sourceMappingURL=repo-post-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-post-process.d.ts","sourceRoot":"","sources":["../../src/lib/repo-post-process.ts"],"names":[],"mappings":"AAeA,UAAU,cAAc;IACtB,sBAAsB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACtD,qBAAqB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IACvD,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CACpD;AAcD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAcvE;AAmDD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,IAAI,CAMN"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadRepoPostProcessors = loadRepoPostProcessors;
4
+ exports.postProcessClient = postProcessClient;
5
+ const node_fs_1 = require("node:fs");
6
+ const node_path_1 = require("node:path");
7
+ function requireRepoTool(repoRoot, file) {
8
+ const path = (0, node_path_1.join)(repoRoot, 'tooling', 'codegen', file);
9
+ if (!(0, node_fs_1.existsSync)(path)) {
10
+ throw new Error(`api-client-generator: required post-processor ${path} not found. The ` +
11
+ `repo must ship tooling/codegen/${file}.`);
12
+ }
13
+ return require(path);
14
+ }
15
+ function loadRepoPostProcessors(repoRoot) {
16
+ const { regenerateModelsBarrel } = requireRepoTool(repoRoot, 'regenerate-models-barrel.js');
17
+ const { fixOrvalResponseTypes } = requireRepoTool(repoRoot, 'fix-orval-response-types.js');
18
+ const { fixOrvalArrayParams } = requireRepoTool(repoRoot, 'fix-orval-array-params.js');
19
+ return { regenerateModelsBarrel, fixOrvalResponseTypes, fixOrvalArrayParams };
20
+ }
21
+ function rebuildIndexBarrel(clientSrc) {
22
+ const lines = [
23
+ '// Auto-generated by @xemahq/api-client-generator — do not edit manually.',
24
+ "export { configureClient, getClientConfig, ClientError, customFetch, type ClientConfig } from './custom-fetch';",
25
+ ];
26
+ const modelsIndex = (0, node_path_1.join)(clientSrc, 'models', 'index.ts');
27
+ if ((0, node_fs_1.existsSync)(modelsIndex)) {
28
+ const content = (0, node_fs_1.readFileSync)(modelsIndex, 'utf8');
29
+ if (/^export /m.test(content)) {
30
+ lines.push("export * from './models';");
31
+ }
32
+ }
33
+ const endpointsDir = (0, node_path_1.join)(clientSrc, 'endpoints');
34
+ if ((0, node_fs_1.existsSync)(endpointsDir)) {
35
+ for (const entry of (0, node_fs_1.readdirSync)(endpointsDir, { withFileTypes: true })) {
36
+ if (!entry.isDirectory())
37
+ continue;
38
+ const files = (0, node_fs_1.readdirSync)((0, node_path_1.join)(endpointsDir, entry.name));
39
+ const tsFile = files.find((f) => f.endsWith('.ts') && !f.endsWith('.d.ts'));
40
+ if (tsFile) {
41
+ lines.push(`export * from './endpoints/${entry.name}/${tsFile.replace('.ts', '')}';`);
42
+ }
43
+ }
44
+ }
45
+ lines.push('');
46
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(clientSrc, 'index.ts'), lines.join('\n'));
47
+ return lines.length - 2;
48
+ }
49
+ function postProcessClient(repoRoot, serviceRoot, clientSrc) {
50
+ const tools = loadRepoPostProcessors(repoRoot);
51
+ tools.regenerateModelsBarrel(clientSrc);
52
+ rebuildIndexBarrel(clientSrc);
53
+ tools.fixOrvalResponseTypes(serviceRoot);
54
+ tools.fixOrvalArrayParams(clientSrc);
55
+ }
56
+ //# sourceMappingURL=repo-post-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-post-process.js","sourceRoot":"","sources":["../../src/lib/repo-post-process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function seedOpenApiEnv(): void;
2
+ //# sourceMappingURL=seed-openapi-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-openapi-env.d.ts","sourceRoot":"","sources":["../../src/lib/seed-openapi-env.ts"],"names":[],"mappings":"AA6BA,wBAAgB,cAAc,IAAI,IAAI,CAkFrC"}