ts-procedures 8.2.1 → 8.4.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/agent_config/claude-code/skills/ts-procedures/SKILL.md +31 -9
- package/agent_config/claude-code/skills/ts-procedures/api-reference.md +3 -1
- package/agent_config/claude-code/skills/ts-procedures/patterns.md +30 -6
- package/agent_config/claude-code/skills/ts-procedures/templates/client.md +3 -3
- package/agent_config/claude-code/skills/ts-procedures/templates/hono.md +3 -3
- package/agent_config/claude-code/skills/ts-procedures/templates/procedure.md +3 -3
- package/agent_config/claude-code/skills/ts-procedures/templates/stream-procedure.md +3 -3
- package/agent_config/copilot/copilot-instructions.md +10 -6
- package/agent_config/cursor/cursorrules +10 -6
- package/build/client/call.js +1 -1
- package/build/client/call.js.map +1 -1
- package/build/client/index.d.ts +1 -1
- package/build/client/index.js +23 -1
- package/build/client/index.js.map +1 -1
- package/build/client/index.test.js +87 -0
- package/build/client/index.test.js.map +1 -1
- package/build/client/resolve-options.d.ts +5 -4
- package/build/client/resolve-options.js +18 -7
- package/build/client/resolve-options.js.map +1 -1
- package/build/client/resolve-options.test.js +53 -24
- package/build/client/resolve-options.test.js.map +1 -1
- package/build/client/stream.js +1 -1
- package/build/client/stream.js.map +1 -1
- package/build/client/types.d.ts +31 -3
- package/build/codegen/__fixtures__/make-envelope.d.ts +41 -0
- package/build/codegen/__fixtures__/make-envelope.js +38 -0
- package/build/codegen/__fixtures__/make-envelope.js.map +1 -0
- package/build/codegen/bin/cli.d.ts +11 -0
- package/build/codegen/bin/cli.js +30 -21
- package/build/codegen/bin/cli.js.map +1 -1
- package/build/codegen/bin/cli.test.js +36 -1
- package/build/codegen/bin/cli.test.js.map +1 -1
- package/build/codegen/bin/flag-specs.d.ts +10 -0
- package/build/codegen/bin/flag-specs.js +60 -0
- package/build/codegen/bin/flag-specs.js.map +1 -0
- package/build/codegen/bin/flag-specs.test.d.ts +1 -0
- package/build/codegen/bin/flag-specs.test.js +26 -0
- package/build/codegen/bin/flag-specs.test.js.map +1 -0
- package/build/codegen/collect-models.d.ts +37 -0
- package/build/codegen/collect-models.js +74 -0
- package/build/codegen/collect-models.js.map +1 -0
- package/build/codegen/collect-models.test.d.ts +1 -0
- package/build/codegen/collect-models.test.js +40 -0
- package/build/codegen/collect-models.test.js.map +1 -0
- package/build/codegen/emit-client-runtime.js +1 -0
- package/build/codegen/emit-client-runtime.js.map +1 -1
- package/build/codegen/emit-errors.integration.test.js +22 -0
- package/build/codegen/emit-errors.integration.test.js.map +1 -1
- package/build/codegen/emit-models.d.ts +26 -0
- package/build/codegen/emit-models.js +53 -0
- package/build/codegen/emit-models.js.map +1 -0
- package/build/codegen/emit-models.test.d.ts +1 -0
- package/build/codegen/emit-models.test.js +42 -0
- package/build/codegen/emit-models.test.js.map +1 -0
- package/build/codegen/emit-scope.d.ts +10 -0
- package/build/codegen/emit-scope.js +119 -34
- package/build/codegen/emit-scope.js.map +1 -1
- package/build/codegen/emit-types.d.ts +26 -1
- package/build/codegen/emit-types.js +27 -5
- package/build/codegen/emit-types.js.map +1 -1
- package/build/codegen/index.d.ts +5 -0
- package/build/codegen/index.js +2 -0
- package/build/codegen/index.js.map +1 -1
- package/build/codegen/model-refs.d.ts +27 -0
- package/build/codegen/model-refs.js +49 -0
- package/build/codegen/model-refs.js.map +1 -0
- package/build/codegen/model-refs.test.d.ts +1 -0
- package/build/codegen/model-refs.test.js +33 -0
- package/build/codegen/model-refs.test.js.map +1 -0
- package/build/codegen/pipeline.d.ts +3 -0
- package/build/codegen/pipeline.js +3 -1
- package/build/codegen/pipeline.js.map +1 -1
- package/build/codegen/schema-walk.d.ts +13 -0
- package/build/codegen/schema-walk.js +26 -0
- package/build/codegen/schema-walk.js.map +1 -0
- package/build/codegen/schema-walk.test.d.ts +1 -0
- package/build/codegen/schema-walk.test.js +35 -0
- package/build/codegen/schema-walk.test.js.map +1 -0
- package/build/codegen/targets/_shared/target-run.d.ts +5 -0
- package/build/codegen/targets/ts/run.js +28 -1
- package/build/codegen/targets/ts/run.js.map +1 -1
- package/build/codegen/targets/ts/shared-models.test.d.ts +1 -0
- package/build/codegen/targets/ts/shared-models.test.js +258 -0
- package/build/codegen/targets/ts/shared-models.test.js.map +1 -0
- package/build/doc-envelope.d.ts +13 -0
- package/build/doc-envelope.js +23 -0
- package/build/doc-envelope.js.map +1 -0
- package/build/doc-envelope.test.d.ts +1 -0
- package/build/doc-envelope.test.js +31 -0
- package/build/doc-envelope.test.js.map +1 -0
- package/build/exports.d.ts +2 -0
- package/build/exports.js +1 -0
- package/build/exports.js.map +1 -1
- package/build/implementations/http/error-taxonomy.d.ts +40 -0
- package/build/implementations/http/error-taxonomy.js +57 -5
- package/build/implementations/http/error-taxonomy.js.map +1 -1
- package/build/implementations/http/error-taxonomy.test.js +95 -1
- package/build/implementations/http/error-taxonomy.test.js.map +1 -1
- package/build/implementations/http/hono/handlers/http.js +19 -24
- package/build/implementations/http/hono/handlers/http.js.map +1 -1
- package/build/implementations/http/hono/handlers/http.test.js +64 -1
- package/build/implementations/http/hono/handlers/http.test.js.map +1 -1
- package/docs/client-and-codegen.md +109 -0
- package/docs/core.md +2 -0
- package/docs/handoffs/ajsc-named-type-collision.md +134 -0
- package/docs/handoffs/ajsc-named-type-support.md +181 -0
- package/docs/http-integrations.md +4 -0
- package/docs/superpowers/plans/2026-06-05-dx-feedback-round.md +1292 -0
- package/docs/superpowers/specs/2026-06-05-dx-feedback-round-design.md +285 -0
- package/package.json +2 -2
- package/src/client/call.ts +1 -1
- package/src/client/index.test.ts +98 -0
- package/src/client/index.ts +32 -1
- package/src/client/resolve-options.test.ts +73 -26
- package/src/client/resolve-options.ts +23 -9
- package/src/client/stream.ts +1 -1
- package/src/client/types.ts +34 -3
- package/src/codegen/__fixtures__/make-envelope.ts +89 -0
- package/src/codegen/bin/cli.test.ts +38 -1
- package/src/codegen/bin/cli.ts +33 -22
- package/src/codegen/bin/flag-specs.test.ts +27 -0
- package/src/codegen/bin/flag-specs.ts +69 -0
- package/src/codegen/collect-models.test.ts +46 -0
- package/src/codegen/collect-models.ts +108 -0
- package/src/codegen/emit-client-runtime.ts +1 -0
- package/src/codegen/emit-errors.integration.test.ts +26 -0
- package/src/codegen/emit-models.test.ts +48 -0
- package/src/codegen/emit-models.ts +63 -0
- package/src/codegen/emit-scope.ts +145 -33
- package/src/codegen/emit-types.ts +48 -7
- package/src/codegen/index.ts +7 -0
- package/src/codegen/model-refs.test.ts +37 -0
- package/src/codegen/model-refs.ts +57 -0
- package/src/codegen/pipeline.ts +6 -1
- package/src/codegen/schema-walk.test.ts +37 -0
- package/src/codegen/schema-walk.ts +23 -0
- package/src/codegen/targets/_shared/target-run.ts +5 -0
- package/src/codegen/targets/ts/run.ts +33 -0
- package/src/codegen/targets/ts/shared-models.test.ts +283 -0
- package/src/doc-envelope.test.ts +35 -0
- package/src/doc-envelope.ts +30 -0
- package/src/exports.ts +2 -0
- package/src/implementations/http/error-taxonomy.test.ts +111 -0
- package/src/implementations/http/error-taxonomy.ts +60 -5
- package/src/implementations/http/hono/handlers/http.test.ts +69 -1
- package/src/implementations/http/hono/handlers/http.ts +19 -21
|
@@ -25,7 +25,8 @@ async function resolveTypeBody(schema, options) {
|
|
|
25
25
|
code = code.replace(/^(?:export\s+)?type\s+\w+\s*=\s*/, '');
|
|
26
26
|
// Remove trailing semicolons and newlines
|
|
27
27
|
code = code.replace(/;\s*$/, '').trim();
|
|
28
|
-
|
|
28
|
+
const referencedNamedTypes = converter.referencedNamedTypes ?? [];
|
|
29
|
+
return { body: code, referencedNamedTypes };
|
|
29
30
|
}
|
|
30
31
|
/**
|
|
31
32
|
* Converts a JSON Schema to a TypeScript type string using ajsc.
|
|
@@ -38,8 +39,8 @@ async function resolveTypeBody(schema, options) {
|
|
|
38
39
|
export async function jsonSchemaToTypeString(typeName, schema, options) {
|
|
39
40
|
if (schema == null)
|
|
40
41
|
return undefined;
|
|
41
|
-
const
|
|
42
|
-
return `export type ${typeName} = ${
|
|
42
|
+
const { body } = await resolveTypeBody(schema, options);
|
|
43
|
+
return `export type ${typeName} = ${body}`;
|
|
43
44
|
}
|
|
44
45
|
/**
|
|
45
46
|
* Converts a JSON Schema to a bare TypeScript type body using ajsc.
|
|
@@ -50,6 +51,20 @@ export async function jsonSchemaToTypeString(typeName, schema, options) {
|
|
|
50
51
|
* Returns undefined for undefined or null schema.
|
|
51
52
|
*/
|
|
52
53
|
export async function jsonSchemaToTypeBody(schema, options) {
|
|
54
|
+
if (schema == null)
|
|
55
|
+
return undefined;
|
|
56
|
+
const { body } = await resolveTypeBody(schema, options);
|
|
57
|
+
return body;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Like {@link jsonSchemaToTypeBody} but also surfaces the ajsc converter's
|
|
61
|
+
* `referencedNamedTypes` — the bare type names emitted verbatim because they
|
|
62
|
+
* carried an `x-named-type` keyword (see `model-refs.ts`). Drives the
|
|
63
|
+
* `_models` import in flat-mode scope emission.
|
|
64
|
+
*
|
|
65
|
+
* Returns undefined for undefined or null schema.
|
|
66
|
+
*/
|
|
67
|
+
export async function jsonSchemaToTypeBodyWithRefs(schema, options) {
|
|
53
68
|
if (schema == null)
|
|
54
69
|
return undefined;
|
|
55
70
|
return resolveTypeBody(schema, options);
|
|
@@ -111,6 +126,8 @@ export async function jsonSchemaToExtractedTypes(schema, options) {
|
|
|
111
126
|
...options,
|
|
112
127
|
inlineTypes: false,
|
|
113
128
|
});
|
|
129
|
+
const referencedNamedTypes = converter.referencedNamedTypes ?? [];
|
|
130
|
+
const extractedTypeNames = converter.extractedTypeNames ?? [];
|
|
114
131
|
const code = converter.code.trim();
|
|
115
132
|
if (!code) {
|
|
116
133
|
throw new Error(`[ts-procedures-codegen] ajsc produced empty output. Schema: ${JSON.stringify(schema)}`);
|
|
@@ -156,7 +173,7 @@ export async function jsonSchemaToExtractedTypes(schema, options) {
|
|
|
156
173
|
.replace(/;\s*$/, '')
|
|
157
174
|
.trim();
|
|
158
175
|
}
|
|
159
|
-
return { declarations, body };
|
|
176
|
+
return { declarations, body, referencedNamedTypes, extractedTypeNames };
|
|
160
177
|
}
|
|
161
178
|
/**
|
|
162
179
|
* Returns the declared name of an `export type|enum|interface X = …` block,
|
|
@@ -231,6 +248,11 @@ export function renameExtractedTypes(result, taken) {
|
|
|
231
248
|
declarations[i] = declarations[i].replace(re, alias);
|
|
232
249
|
}
|
|
233
250
|
}
|
|
234
|
-
return {
|
|
251
|
+
return {
|
|
252
|
+
declarations,
|
|
253
|
+
body,
|
|
254
|
+
referencedNamedTypes: result.referencedNamedTypes ?? [],
|
|
255
|
+
extractedTypeNames: result.extractedTypeNames ?? [],
|
|
256
|
+
};
|
|
235
257
|
}
|
|
236
258
|
//# sourceMappingURL=emit-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-types.js","sourceRoot":"","sources":["../../src/codegen/emit-types.ts"],"names":[],"mappings":"AASA,IAAI,aAAa,GAAG,KAAK,CAAA;AACzB,KAAK,UAAU,kBAAkB;IAC/B,IAAI,aAAa;QAAE,OAAM;IACzB,aAAa,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IACpD,MAAM,KAAK,GAAG,IAAI,mBAAmB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAChF,MAAM,SAAS,GAAI,KAAK,CAAC,IAAe,CAAC,IAAI,EAAE,CAAA;IAC/C,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,gHAAgH,SAAS,GAAG,CAAC,CAAA;IAC5I,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,MAA+B,EAC/B,OAAqB;IAErB,MAAM,kBAAkB,EAAE,CAAA;IAE1B,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IAEpD,MAAM,SAAS,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE;QAChD,GAAG,OAAO;QACV,WAAW,EAAE,IAAI;KAClB,CAAC,CAAA;IAEF,IAAI,IAAI,GAAI,SAAS,CAAC,IAAe,CAAC,IAAI,EAAE,CAAA;IAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,+DAA+D,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CACxF,CAAA;IACH,CAAC;IACD,oEAAoE;IACpE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAA;IAC3D,0CAA0C;IAC1C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAEvC,OAAO,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"emit-types.js","sourceRoot":"","sources":["../../src/codegen/emit-types.ts"],"names":[],"mappings":"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"}
|
package/build/codegen/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ResolveInput } from './resolve-envelope.js';
|
|
2
2
|
import { type GeneratedFile } from './pipeline.js';
|
|
3
3
|
import type { AjscOptions } from './emit-types.js';
|
|
4
|
+
import type { SharedTypesImportMap } from './collect-models.js';
|
|
4
5
|
import type { KotlinEmitter } from './targets/kotlin/ajsc-adapter.js';
|
|
5
6
|
import type { SwiftEmitter } from './targets/swift/ajsc-adapter.js';
|
|
6
7
|
export interface GenerateClientOptions extends ResolveInput {
|
|
@@ -12,6 +13,10 @@ export interface GenerateClientOptions extends ResolveInput {
|
|
|
12
13
|
selfContained?: boolean;
|
|
13
14
|
serviceName?: string;
|
|
14
15
|
cleanOutDir?: boolean;
|
|
16
|
+
/** Hoist `$id`-bearing schemas into a shared `_models.ts` and reference them from scopes (TS target). */
|
|
17
|
+
shareModels?: boolean;
|
|
18
|
+
/** Maps a model `$id` to an external import so a shared model is re-exported rather than generated. */
|
|
19
|
+
sharedTypesImport?: SharedTypesImportMap;
|
|
15
20
|
target?: 'ts' | 'kotlin' | 'swift';
|
|
16
21
|
kotlinPackage?: string;
|
|
17
22
|
kotlinSerializer?: 'kotlinx' | 'none';
|
package/build/codegen/index.js
CHANGED
|
@@ -12,6 +12,8 @@ export async function generateClient(options) {
|
|
|
12
12
|
selfContained: options.selfContained,
|
|
13
13
|
serviceName: options.serviceName,
|
|
14
14
|
cleanOutDir: options.cleanOutDir,
|
|
15
|
+
shareModels: options.shareModels,
|
|
16
|
+
sharedTypesImport: options.sharedTypesImport,
|
|
15
17
|
target: options.target,
|
|
16
18
|
kotlinPackage: options.kotlinPackage,
|
|
17
19
|
kotlinSerializer: options.kotlinSerializer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAqB,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAqB,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAA;AA+B/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA8B;IACjE,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAA;IAC/C,OAAO,WAAW,CAAC;QACjB,QAAQ;QACR,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,YAAY,EAAE,OAAO,CAAC,YAAY;KACnC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared-`$id` model referencing via ajsc's `x-named-type` keyword (ajsc ≥7.3.0).
|
|
3
|
+
*
|
|
4
|
+
* ajsc inlines plain `$ref`s, so to make a route reference a hoisted model by
|
|
5
|
+
* name instead of re-inlining its shape, {@link substituteModelRefs} rewrites
|
|
6
|
+
* each `$id` subschema (BEFORE ajsc runs) into `{ 'x-named-type': '<Name>' }`.
|
|
7
|
+
* ajsc then emits a bare verbatim reference to `<Name>` (surviving arrays and
|
|
8
|
+
* both `inlineTypes` modes, never extracted as a sub-type) and reports it via
|
|
9
|
+
* the converter's `referencedNamedTypes` — which the emitter uses to add the
|
|
10
|
+
* `import type { … } from './_models'` line.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Returns a deep-cloned schema where every object node carrying a `$id` present
|
|
14
|
+
* in `idToName` is replaced by `{ 'x-named-type': '<Name>' }`. The input is
|
|
15
|
+
* never mutated.
|
|
16
|
+
*
|
|
17
|
+
* - Replaced nodes are NOT recursed into (they're gone).
|
|
18
|
+
* - A node whose `$id === skipSelfId` is left in place (used when emitting that
|
|
19
|
+
* model itself), but its CHILDREN are still recursed so nested OTHER models are
|
|
20
|
+
* still referenced.
|
|
21
|
+
*
|
|
22
|
+
* @returns the rewritten schema and the set of referenced model names.
|
|
23
|
+
*/
|
|
24
|
+
export declare function substituteModelRefs(schema: Record<string, unknown>, idToName: Map<string, string>, skipSelfId?: string): {
|
|
25
|
+
schema: Record<string, unknown>;
|
|
26
|
+
referenced: Set<string>;
|
|
27
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared-`$id` model referencing via ajsc's `x-named-type` keyword (ajsc ≥7.3.0).
|
|
3
|
+
*
|
|
4
|
+
* ajsc inlines plain `$ref`s, so to make a route reference a hoisted model by
|
|
5
|
+
* name instead of re-inlining its shape, {@link substituteModelRefs} rewrites
|
|
6
|
+
* each `$id` subschema (BEFORE ajsc runs) into `{ 'x-named-type': '<Name>' }`.
|
|
7
|
+
* ajsc then emits a bare verbatim reference to `<Name>` (surviving arrays and
|
|
8
|
+
* both `inlineTypes` modes, never extracted as a sub-type) and reports it via
|
|
9
|
+
* the converter's `referencedNamedTypes` — which the emitter uses to add the
|
|
10
|
+
* `import type { … } from './_models'` line.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Returns a deep-cloned schema where every object node carrying a `$id` present
|
|
14
|
+
* in `idToName` is replaced by `{ 'x-named-type': '<Name>' }`. The input is
|
|
15
|
+
* never mutated.
|
|
16
|
+
*
|
|
17
|
+
* - Replaced nodes are NOT recursed into (they're gone).
|
|
18
|
+
* - A node whose `$id === skipSelfId` is left in place (used when emitting that
|
|
19
|
+
* model itself), but its CHILDREN are still recursed so nested OTHER models are
|
|
20
|
+
* still referenced.
|
|
21
|
+
*
|
|
22
|
+
* @returns the rewritten schema and the set of referenced model names.
|
|
23
|
+
*/
|
|
24
|
+
export function substituteModelRefs(schema, idToName, skipSelfId) {
|
|
25
|
+
const referenced = new Set();
|
|
26
|
+
const walk = (node) => {
|
|
27
|
+
if (Array.isArray(node)) {
|
|
28
|
+
return node.map((item) => walk(item));
|
|
29
|
+
}
|
|
30
|
+
if (!node || typeof node !== 'object')
|
|
31
|
+
return node;
|
|
32
|
+
const obj = node;
|
|
33
|
+
const id = typeof obj.$id === 'string' ? obj.$id : undefined;
|
|
34
|
+
if (id !== undefined && id !== skipSelfId && idToName.has(id)) {
|
|
35
|
+
const name = idToName.get(id);
|
|
36
|
+
referenced.add(name);
|
|
37
|
+
// Replace entirely — do not recurse into a node that's being swapped out.
|
|
38
|
+
return { 'x-named-type': name };
|
|
39
|
+
}
|
|
40
|
+
// Either no $id, or the self node we're emitting: deep-clone children and recurse.
|
|
41
|
+
const out = {};
|
|
42
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
43
|
+
out[k] = walk(v);
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
};
|
|
47
|
+
return { schema: walk(structuredClone(schema)), referenced };
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=model-refs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-refs.js","sourceRoot":"","sources":["../../src/codegen/model-refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAA+B,EAC/B,QAA6B,EAC7B,UAAmB;IAEnB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAA;IAEpC,MAAM,IAAI,GAAG,CAAC,IAAa,EAAW,EAAE;QACtC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACvC,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAA;QAElD,MAAM,GAAG,GAAG,IAA+B,CAAA;QAC3C,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;QAE5D,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,UAAU,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAE,CAAA;YAC9B,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACpB,0EAA0E;YAC1E,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAA;QACjC,CAAC;QAED,mFAAmF;QACnF,MAAM,GAAG,GAA4B,EAAE,CAAA;QACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAA4B,EAAE,UAAU,EAAE,CAAA;AACzF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { substituteModelRefs } from './model-refs.js';
|
|
3
|
+
const message = { type: 'object', $id: 'urn:msg', title: 'Message', properties: { id: { type: 'string' } } };
|
|
4
|
+
describe('substituteModelRefs', () => {
|
|
5
|
+
it('replaces an $id subschema with an x-named-type node keyed by model name', () => {
|
|
6
|
+
const schema = { type: 'object', properties: { author: message, tags: { type: 'array', items: message } } };
|
|
7
|
+
const idToName = new Map([['urn:msg', 'Message']]);
|
|
8
|
+
const { schema: out, referenced } = substituteModelRefs(schema, idToName);
|
|
9
|
+
expect(out.properties.author).toEqual({ 'x-named-type': 'Message' });
|
|
10
|
+
expect(out.properties.tags.items).toEqual({ 'x-named-type': 'Message' });
|
|
11
|
+
expect([...referenced]).toEqual(['Message']);
|
|
12
|
+
});
|
|
13
|
+
it('does not mutate the input schema', () => {
|
|
14
|
+
const schema = { type: 'object', properties: { author: message } };
|
|
15
|
+
const before = JSON.stringify(schema);
|
|
16
|
+
substituteModelRefs(schema, new Map([['urn:msg', 'Message']]));
|
|
17
|
+
expect(JSON.stringify(schema)).toBe(before);
|
|
18
|
+
});
|
|
19
|
+
it('leaves the schema untouched when no $id is in the registry', () => {
|
|
20
|
+
const schema = { type: 'object', properties: { author: message } };
|
|
21
|
+
const { schema: out, referenced } = substituteModelRefs(schema, new Map());
|
|
22
|
+
expect(out).toEqual(schema);
|
|
23
|
+
expect(referenced.size).toBe(0);
|
|
24
|
+
});
|
|
25
|
+
it('does NOT replace the node when its own $id is the registry root being emitted (optional skipSelfId)', () => {
|
|
26
|
+
// When emitting the Message model itself, we don't want Message to become a ref to itself.
|
|
27
|
+
const idToName = new Map([['urn:msg', 'Message']]);
|
|
28
|
+
const { schema: out } = substituteModelRefs(message, idToName, 'urn:msg');
|
|
29
|
+
expect(out).not.toHaveProperty('x-named-type');
|
|
30
|
+
expect(out.$id).toBe('urn:msg');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=model-refs.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-refs.test.js","sourceRoot":"","sources":["../../src/codegen/model-refs.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { DocEnvelope } from '../implementations/types.js';
|
|
2
2
|
import type { AjscOptions } from './emit-types.js';
|
|
3
|
+
import type { SharedTypesImportMap } from './collect-models.js';
|
|
3
4
|
import type { GeneratedFile } from './targets/_shared/write-files.js';
|
|
4
5
|
import type { KotlinEmitter } from './targets/kotlin/ajsc-adapter.js';
|
|
5
6
|
import type { SwiftEmitter } from './targets/swift/ajsc-adapter.js';
|
|
@@ -13,6 +14,8 @@ export interface PipelineOptions {
|
|
|
13
14
|
selfContained?: boolean;
|
|
14
15
|
serviceName?: string;
|
|
15
16
|
cleanOutDir?: boolean;
|
|
17
|
+
shareModels?: boolean;
|
|
18
|
+
sharedTypesImport?: SharedTypesImportMap;
|
|
16
19
|
target?: 'ts' | 'kotlin' | 'swift';
|
|
17
20
|
kotlinPackage?: string;
|
|
18
21
|
kotlinSerializer?: 'kotlinx' | 'none';
|
|
@@ -13,7 +13,7 @@ import { runTsPipeline } from './targets/ts/run.js';
|
|
|
13
13
|
* `_shared/write-files.ts`).
|
|
14
14
|
*/
|
|
15
15
|
export async function runPipeline(options) {
|
|
16
|
-
const { envelope, outDir, ajsc: ajscOpts, dryRun = false, namespaceTypes = false, selfContained = false, cleanOutDir = true } = options;
|
|
16
|
+
const { envelope, outDir, ajsc: ajscOpts, dryRun = false, namespaceTypes = false, selfContained = false, cleanOutDir = true, shareModels = true } = options;
|
|
17
17
|
const serviceName = options.serviceName ?? 'Api';
|
|
18
18
|
validateServiceName(serviceName);
|
|
19
19
|
const clientImportPath = selfContained ? './_types' : options.clientImportPath;
|
|
@@ -34,6 +34,8 @@ export async function runPipeline(options) {
|
|
|
34
34
|
namespaceTypes,
|
|
35
35
|
selfContained,
|
|
36
36
|
cleanOutDir,
|
|
37
|
+
shareModels,
|
|
38
|
+
sharedTypesImport: options.sharedTypesImport,
|
|
37
39
|
};
|
|
38
40
|
switch (options.target) {
|
|
39
41
|
case 'kotlin':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/codegen/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/codegen/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAGxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AA4BnD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAwB;IACxD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE,cAAc,GAAG,KAAK,EAAE,aAAa,GAAG,KAAK,EAAE,WAAW,GAAG,IAAI,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,OAAO,CAAA;IAC3J,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAA;IAChD,mBAAmB,CAAC,WAAW,CAAC,CAAA;IAEhC,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAA;IAC9E,IAAI,aAAa,IAAI,OAAO,CAAC,gBAAgB,IAAI,IAAI,EAAE,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,yFAAyF,CAAC,CAAA;IACzG,CAAC;IAED,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;IAEvE,MAAM,IAAI,GAAG;QACX,QAAQ;QACR,MAAM;QACN,IAAI;QACJ,MAAM;QACN,WAAW;QACX,IAAI,EAAE,QAAQ;QACd,gBAAgB;QAChB,MAAM;QACN,cAAc;QACd,aAAa;QACb,WAAW;QACX,WAAW;QACX,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAA;IAED,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC;gBACvB,GAAG,IAAI;gBACP,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC1C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;gBAC5C,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC,CAAA;QACJ,KAAK,OAAO;YACV,OAAO,gBAAgB,CAAC;gBACtB,GAAG,IAAI;gBACP,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC1C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;gBAC5C,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC,CAAA;QACJ,KAAK,IAAI,CAAC;QACV,KAAK,SAAS,CAAC;QACf;YACE,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only recursive traversal of a JSON-Schema-shaped value.
|
|
3
|
+
*
|
|
4
|
+
* Recurses into arrays and into the values of plain objects, invoking `visit`
|
|
5
|
+
* on every plain-object node encountered (including the root, if it is one).
|
|
6
|
+
* Arrays are not passed to `visit` — only object nodes are. The traversal does
|
|
7
|
+
* not mutate the tree and does not prune: a visited node's children are always
|
|
8
|
+
* recursed.
|
|
9
|
+
*
|
|
10
|
+
* For mutation/substitution semantics (deep-clone, replace-and-prune), see
|
|
11
|
+
* `substituteModelRefs` in `model-refs.ts`, which keeps its own bespoke walk.
|
|
12
|
+
*/
|
|
13
|
+
export declare function walkSubschemas(node: unknown, visit: (obj: Record<string, unknown>) => void): void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only recursive traversal of a JSON-Schema-shaped value.
|
|
3
|
+
*
|
|
4
|
+
* Recurses into arrays and into the values of plain objects, invoking `visit`
|
|
5
|
+
* on every plain-object node encountered (including the root, if it is one).
|
|
6
|
+
* Arrays are not passed to `visit` — only object nodes are. The traversal does
|
|
7
|
+
* not mutate the tree and does not prune: a visited node's children are always
|
|
8
|
+
* recursed.
|
|
9
|
+
*
|
|
10
|
+
* For mutation/substitution semantics (deep-clone, replace-and-prune), see
|
|
11
|
+
* `substituteModelRefs` in `model-refs.ts`, which keeps its own bespoke walk.
|
|
12
|
+
*/
|
|
13
|
+
export function walkSubschemas(node, visit) {
|
|
14
|
+
if (Array.isArray(node)) {
|
|
15
|
+
for (const item of node)
|
|
16
|
+
walkSubschemas(item, visit);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (!node || typeof node !== 'object')
|
|
20
|
+
return;
|
|
21
|
+
const obj = node;
|
|
22
|
+
visit(obj);
|
|
23
|
+
for (const value of Object.values(obj))
|
|
24
|
+
walkSubschemas(value, visit);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=schema-walk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-walk.js","sourceRoot":"","sources":["../../src/codegen/schema-walk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,IAAa,EAAE,KAA6C;IACzF,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,IAAI;YAAE,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACpD,OAAM;IACR,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAM;IAE7C,MAAM,GAAG,GAAG,IAA+B,CAAA;IAC3C,KAAK,CAAC,GAAG,CAAC,CAAA;IACV,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AACtE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { walkSubschemas } from './schema-walk.js';
|
|
3
|
+
describe('walkSubschemas', () => {
|
|
4
|
+
it('visits every plain-object node, including nested and array-nested ones', () => {
|
|
5
|
+
const tree = {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
a: { type: 'string' },
|
|
9
|
+
b: { type: 'array', items: { type: 'number' } },
|
|
10
|
+
},
|
|
11
|
+
anyOf: [{ const: 1 }, { const: 2 }],
|
|
12
|
+
};
|
|
13
|
+
const seen = [];
|
|
14
|
+
walkSubschemas(tree, (obj) => seen.push(obj));
|
|
15
|
+
// root + properties + a + b + items + 2 anyOf entries = 7 object nodes
|
|
16
|
+
expect(seen).toHaveLength(7);
|
|
17
|
+
expect(seen[0]).toBe(tree);
|
|
18
|
+
expect(seen).toContainEqual({ type: 'number' });
|
|
19
|
+
expect(seen).toContainEqual({ const: 1 });
|
|
20
|
+
});
|
|
21
|
+
it('does not invoke visit on arrays or primitives', () => {
|
|
22
|
+
const seen = [];
|
|
23
|
+
walkSubschemas([1, 'two', { x: 1 }], (obj) => seen.push(obj));
|
|
24
|
+
expect(seen).toEqual([{ x: 1 }]);
|
|
25
|
+
});
|
|
26
|
+
it('is a no-op for null, primitives, and bare arrays of primitives', () => {
|
|
27
|
+
const seen = [];
|
|
28
|
+
walkSubschemas(null, (obj) => seen.push(obj));
|
|
29
|
+
walkSubschemas('str', (obj) => seen.push(obj));
|
|
30
|
+
walkSubschemas(42, (obj) => seen.push(obj));
|
|
31
|
+
walkSubschemas(['a', 'b'], (obj) => seen.push(obj));
|
|
32
|
+
expect(seen).toEqual([]);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=schema-walk.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-walk.test.js","sourceRoot":"","sources":["../../src/codegen/schema-walk.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACrB,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;aAChD;YACD,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SACpC,CAAA;QACD,MAAM,IAAI,GAAmC,EAAE,CAAA;QAC/C,cAAc,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7C,uEAAuE;QACvE,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,IAAI,GAAmC,EAAE,CAAA;QAC/C,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7D,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,IAAI,GAAmC,EAAE,CAAA;QAC/C,cAAc,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7C,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAC9C,cAAc,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3C,cAAc,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACnD,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { DocEnvelope } from '../../../implementations/types.js';
|
|
2
2
|
import type { ScopeGroup } from '../../group-routes.js';
|
|
3
3
|
import type { AjscOptions } from '../../emit-types.js';
|
|
4
|
+
import type { SharedTypesImportMap } from '../../collect-models.js';
|
|
4
5
|
/**
|
|
5
6
|
* Inputs the dispatcher prepares once and forwards to every per-target
|
|
6
7
|
* `run*Pipeline` module. Each target module reads only the fields it needs.
|
|
@@ -24,4 +25,8 @@ export interface TargetRunInput {
|
|
|
24
25
|
namespaceTypes?: boolean;
|
|
25
26
|
selfContained?: boolean;
|
|
26
27
|
cleanOutDir?: boolean;
|
|
28
|
+
/** Hoist `$id`-bearing schemas into a shared `_models.ts` (TS target only). */
|
|
29
|
+
shareModels?: boolean;
|
|
30
|
+
/** Maps a model `$id` to an external import (re-exported instead of generated). */
|
|
31
|
+
sharedTypesImport?: SharedTypesImportMap;
|
|
27
32
|
}
|
|
@@ -12,8 +12,11 @@ import { emitIndexFile } from '../../emit-index.js';
|
|
|
12
12
|
import { emitErrorsFile } from '../../emit-errors.js';
|
|
13
13
|
import { emitClientTypesFile } from '../../emit-client-types.js';
|
|
14
14
|
import { emitClientRuntimeFile } from '../../emit-client-runtime.js';
|
|
15
|
+
import { collectModels, resolveModelImports } from '../../collect-models.js';
|
|
16
|
+
import { emitModelsFile } from '../../emit-models.js';
|
|
15
17
|
export async function runTsPipeline(input) {
|
|
16
|
-
const { envelope, outDir, hash, groups, serviceName, ajsc: ajscOpts, clientImportPath, dryRun = false, namespaceTypes = false, selfContained = false, cleanOutDir = false, } = input;
|
|
18
|
+
const { envelope, outDir, hash, groups, serviceName, ajsc: ajscOpts, clientImportPath, dryRun = false, namespaceTypes = false, selfContained = false, cleanOutDir = false, sharedTypesImport, } = input;
|
|
19
|
+
const shareModels = input.shareModels ?? false;
|
|
17
20
|
const hashComment = `// Source hash: ${hash}`;
|
|
18
21
|
// Error keys that will be emitted in `_errors.ts` — only those with a schema.
|
|
19
22
|
// Scope emit uses this to filter `route.errors` so generated code never
|
|
@@ -26,6 +29,21 @@ export async function runTsPipeline(input) {
|
|
|
26
29
|
}
|
|
27
30
|
}
|
|
28
31
|
}
|
|
32
|
+
// Shared models: hoist every `$id`-bearing schema into `_models.ts` and pass an
|
|
33
|
+
// id→name map so scope emission references them instead of inlining. The map
|
|
34
|
+
// covers ALL models (generated AND externally-imported) since scopes always
|
|
35
|
+
// import shared types from `./_models`.
|
|
36
|
+
const models = shareModels
|
|
37
|
+
? resolveModelImports(collectModels(envelope.routes), sharedTypesImport)
|
|
38
|
+
: [];
|
|
39
|
+
const idToModelName = new Map(models.map((m) => [m.id, m.name]));
|
|
40
|
+
if (shareModels) {
|
|
41
|
+
for (const group of groups) {
|
|
42
|
+
if (group.scopeKey === '_models') {
|
|
43
|
+
throw new Error(`[ts-procedures-codegen] Scope "_models" conflicts with shared-models reserved filename "_models.ts". Rename the scope to avoid collision.`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
29
47
|
const files = [];
|
|
30
48
|
for (const group of groups) {
|
|
31
49
|
const rawCode = await emitScopeFile(group, {
|
|
@@ -34,12 +52,21 @@ export async function runTsPipeline(input) {
|
|
|
34
52
|
namespaceTypes,
|
|
35
53
|
serviceName,
|
|
36
54
|
errorKeys: errorKeys.size > 0 ? errorKeys : undefined,
|
|
55
|
+
idToModelName,
|
|
37
56
|
});
|
|
38
57
|
const lines = rawCode.split('\n');
|
|
39
58
|
lines.splice(1, 0, hashComment);
|
|
40
59
|
const code = lines.join('\n');
|
|
41
60
|
files.push({ path: join(outDir, `${group.scopeKey}.ts`), code });
|
|
42
61
|
}
|
|
62
|
+
if (models.length > 0) {
|
|
63
|
+
const modelsCode = await emitModelsFile(models, { ajsc: ajscOpts });
|
|
64
|
+
if (modelsCode != null) {
|
|
65
|
+
const ml = modelsCode.split('\n');
|
|
66
|
+
ml.splice(1, 0, hashComment);
|
|
67
|
+
files.push({ path: join(outDir, '_models.ts'), code: ml.join('\n') });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
43
70
|
const errorsCode = await emitErrorsFile(envelope.errors, {
|
|
44
71
|
ajsc: ajscOpts,
|
|
45
72
|
clientImportPath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/codegen/targets/ts/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/codegen/targets/ts/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|