@metaobjectsdev/codegen-ts 0.12.5-rc.1 → 0.13.0-rc.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 +19 -2
- package/dist/generator.d.ts +11 -1
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +32 -1
- package/dist/generator.js.map +1 -1
- package/dist/generators/index.d.ts +4 -0
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +10 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/template-generator.d.ts +14 -2
- package/dist/generators/template-generator.d.ts.map +1 -1
- package/dist/generators/template-generator.js +43 -1
- package/dist/generators/template-generator.js.map +1 -1
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/reference-templates.d.ts +13 -0
- package/dist/reference-templates.d.ts.map +1 -0
- package/dist/reference-templates.js +44 -0
- package/dist/reference-templates.js.map +1 -0
- package/dist/template-codegen/output-pattern.d.ts +5 -0
- package/dist/template-codegen/output-pattern.d.ts.map +1 -0
- package/dist/template-codegen/output-pattern.js +32 -0
- package/dist/template-codegen/output-pattern.js.map +1 -0
- package/dist/template-codegen/template-data.d.ts +45 -0
- package/dist/template-codegen/template-data.d.ts.map +1 -0
- package/dist/template-codegen/template-data.js +60 -0
- package/dist/template-codegen/template-data.js.map +1 -0
- package/dist/template-codegen/template-spec.d.ts +20 -0
- package/dist/template-codegen/template-spec.d.ts.map +1 -0
- package/dist/template-codegen/template-spec.js +57 -0
- package/dist/template-codegen/template-spec.js.map +1 -0
- package/package.json +6 -6
- package/src/generator.ts +36 -1
- package/src/generators/index.ts +11 -0
- package/src/generators/template-generator.ts +66 -3
- package/src/index.ts +44 -1
- package/src/reference/barrel.ts +66 -0
- package/src/reference/entity.ts +147 -0
- package/src/reference/queries.ts +124 -0
- package/src/reference/routes.ts +58 -0
- package/src/reference-templates.ts +49 -0
- package/src/template-codegen/output-pattern.ts +36 -0
- package/src/template-codegen/template-data.ts +87 -0
- package/src/template-codegen/template-spec.schema.json +27 -0
- package/src/template-codegen/template-spec.ts +75 -0
package/README.md
CHANGED
|
@@ -72,13 +72,25 @@ dependency tree entirely:
|
|
|
72
72
|
```ts
|
|
73
73
|
// metaobjects.config.ts
|
|
74
74
|
import { defineConfig } from "@metaobjectsdev/cli";
|
|
75
|
-
import { entityFile
|
|
75
|
+
import { entityFile } from "./codegen/generators/entity";
|
|
76
|
+
import { queriesFile } from "./codegen/generators/queries";
|
|
77
|
+
import { barrel } from "./codegen/generators/barrel";
|
|
76
78
|
|
|
77
79
|
export default defineConfig({
|
|
78
80
|
generators: [entityFile({ allowlists: false }), queriesFile(), barrel()],
|
|
79
81
|
});
|
|
80
82
|
```
|
|
81
83
|
|
|
84
|
+
The `entityFile` / `queriesFile` / `routesFile` / `barrel` factories are imported
|
|
85
|
+
from the **owned local copies** that `meta init` scaffolds into
|
|
86
|
+
`codegen/generators/` (ADR-0034 scaffold-and-own). Importing them from
|
|
87
|
+
`@metaobjectsdev/codegen-ts/generators` still works but is **deprecated** — own a
|
|
88
|
+
copy instead; the package export will be removed in a future major. The engine and
|
|
89
|
+
primitives (`runGen`, the scope helpers `perEntity` / `perPackage` / `perModel`
|
|
90
|
+
(`oncePerRun` is a soft-deprecated alias of `perModel`), `RenderContext`, the loader and
|
|
91
|
+
render helpers) remain the stable, versioned import from `@metaobjectsdev/codegen-ts`,
|
|
92
|
+
and an owned generator imports them from there.
|
|
93
|
+
|
|
82
94
|
The client-side `<Entity>Filter` type is still emitted regardless — it has zero
|
|
83
95
|
runtime-ts dependency and consumers want it for typed client calls. Default is
|
|
84
96
|
`true` for back-compat with existing projects.
|
|
@@ -153,7 +165,12 @@ For every `template.output` declared in your metadata, `outputParser()` emits
|
|
|
153
165
|
```ts
|
|
154
166
|
// metaobjects.config.ts
|
|
155
167
|
import { defineConfig } from "@metaobjectsdev/cli";
|
|
156
|
-
|
|
168
|
+
// Owned generators scaffolded by `meta init` (ADR-0034 scaffold-and-own).
|
|
169
|
+
import { entityFile } from "./codegen/generators/entity";
|
|
170
|
+
import { queriesFile } from "./codegen/generators/queries";
|
|
171
|
+
import { barrel } from "./codegen/generators/barrel";
|
|
172
|
+
// Prompt/output generators have no reference template yet — package import.
|
|
173
|
+
import { promptRender, outputParser } from "@metaobjectsdev/codegen-ts/generators";
|
|
157
174
|
|
|
158
175
|
export default defineConfig({
|
|
159
176
|
generators: [entityFile(), queriesFile(), barrel(), promptRender(), outputParser()],
|
package/dist/generator.d.ts
CHANGED
|
@@ -54,6 +54,16 @@ export interface Generator {
|
|
|
54
54
|
export type GeneratorFactory<TOpts = void> = TOpts extends void ? () => Generator : (opts?: TOpts) => Generator;
|
|
55
55
|
/** One-file-per-entity convenience. Async-safe. */
|
|
56
56
|
export declare function perEntity(fn: (entity: MetaObject, ctx: GenContext) => EmittedFile | EmittedFile[] | Promise<EmittedFile | EmittedFile[]>): (ctx: GenContext) => Promise<EmittedFile[]>;
|
|
57
|
-
/** Called once with all matching entities. Use for barrels and cross-entity files.
|
|
57
|
+
/** Called once with all matching entities. Use for barrels and cross-entity files.
|
|
58
|
+
* @deprecated Use {@link perModel} — "run" is ambiguous under multi-target output
|
|
59
|
+
* (it reads as "per target"); `perModel` names the data scope (the whole model). */
|
|
58
60
|
export declare function oncePerRun(fn: (entities: MetaObject[], ctx: GenContext) => EmittedFile | EmittedFile[] | Promise<EmittedFile | EmittedFile[]>): (ctx: GenContext) => Promise<EmittedFile[]>;
|
|
61
|
+
/** App-scope convenience — run `fn` once over the whole model (all matched
|
|
62
|
+
* entities). The canonical name for the one-shot scope (replaces `oncePerRun`). */
|
|
63
|
+
export declare const perModel: typeof oncePerRun;
|
|
64
|
+
/** One-file-per-package convenience. Groups matched entities by `package`, runs
|
|
65
|
+
* `fn` once per package — packages ascending, entities keeping `ctx.entities`
|
|
66
|
+
* order. The package scope from codegen-concepts §10 (object + model already
|
|
67
|
+
* exist via perEntity + perModel). */
|
|
68
|
+
export declare function perPackage(fn: (pkg: string, entities: MetaObject[], ctx: GenContext) => EmittedFile | EmittedFile[] | Promise<EmittedFile | EmittedFile[]>): (ctx: GenContext) => Promise<EmittedFile[]>;
|
|
59
69
|
//# sourceMappingURL=generator.d.ts.map
|
package/dist/generator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,MAAM,WAAW,WAAW;IAC1B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,UAAU,EAAE,QAAQ,CAAC;IACrB;;oBAEgB;IAChB,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;IACzC,MAAM,EAAE,iBAAiB,CAAC;IAC1B;;;gEAG4D;IAC5D,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;;4DAOwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;IACzC,QAAQ,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACtE,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;iFAC6E;IAC7E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;oFAIgF;IAChF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,CAAC,KAAK,GAAG,IAAI,IAAI,KAAK,SAAS,IAAI,GAC3D,MAAM,SAAS,GACf,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,SAAS,CAAC;AAEhC,mDAAmD;AACnD,wBAAgB,SAAS,CACvB,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,KACpC,WAAW,GACX,WAAW,EAAE,GACb,OAAO,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,GACvC,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAM7C;AAED;;qFAEqF;AACrF,wBAAgB,UAAU,CACxB,EAAE,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,UAAU,KACxC,WAAW,GACX,WAAW,EAAE,GACb,OAAO,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,GACvC,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAM7C;AAED;oFACoF;AACpF,eAAO,MAAM,QAAQ,mBAAa,CAAC;AAEnC;;;uCAGuC;AACvC,wBAAgB,UAAU,CACxB,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,UAAU,KACrD,WAAW,GACX,WAAW,EAAE,GACb,OAAO,CAAC,WAAW,GAAG,WAAW,EAAE,CAAC,GACvC,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAiB7C"}
|
package/dist/generator.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { effectivePackage } from "./docs-paths.js";
|
|
1
2
|
/** One-file-per-entity convenience. Async-safe. */
|
|
2
3
|
export function perEntity(fn) {
|
|
3
4
|
return async (ctx) => {
|
|
@@ -6,7 +7,9 @@ export function perEntity(fn) {
|
|
|
6
7
|
return results.flatMap((r) => (Array.isArray(r) ? r : [r]));
|
|
7
8
|
};
|
|
8
9
|
}
|
|
9
|
-
/** Called once with all matching entities. Use for barrels and cross-entity files.
|
|
10
|
+
/** Called once with all matching entities. Use for barrels and cross-entity files.
|
|
11
|
+
* @deprecated Use {@link perModel} — "run" is ambiguous under multi-target output
|
|
12
|
+
* (it reads as "per target"); `perModel` names the data scope (the whole model). */
|
|
10
13
|
export function oncePerRun(fn) {
|
|
11
14
|
return async (ctx) => {
|
|
12
15
|
const matched = ctx.entities.filter(ctx.matches);
|
|
@@ -14,4 +17,32 @@ export function oncePerRun(fn) {
|
|
|
14
17
|
return Array.isArray(result) ? result : [result];
|
|
15
18
|
};
|
|
16
19
|
}
|
|
20
|
+
/** App-scope convenience — run `fn` once over the whole model (all matched
|
|
21
|
+
* entities). The canonical name for the one-shot scope (replaces `oncePerRun`). */
|
|
22
|
+
export const perModel = oncePerRun;
|
|
23
|
+
/** One-file-per-package convenience. Groups matched entities by `package`, runs
|
|
24
|
+
* `fn` once per package — packages ascending, entities keeping `ctx.entities`
|
|
25
|
+
* order. The package scope from codegen-concepts §10 (object + model already
|
|
26
|
+
* exist via perEntity + perModel). */
|
|
27
|
+
export function perPackage(fn) {
|
|
28
|
+
return async (ctx) => {
|
|
29
|
+
const matched = ctx.entities.filter(ctx.matches);
|
|
30
|
+
const byPkg = new Map();
|
|
31
|
+
for (const e of matched) {
|
|
32
|
+
const pkg = effectivePackage(e) ?? "";
|
|
33
|
+
let bucket = byPkg.get(pkg);
|
|
34
|
+
if (bucket === undefined) {
|
|
35
|
+
bucket = [];
|
|
36
|
+
byPkg.set(pkg, bucket);
|
|
37
|
+
}
|
|
38
|
+
bucket.push(e);
|
|
39
|
+
}
|
|
40
|
+
const out = [];
|
|
41
|
+
for (const pkg of [...byPkg.keys()].sort()) {
|
|
42
|
+
const r = await fn(pkg, byPkg.get(pkg), ctx);
|
|
43
|
+
out.push(...(Array.isArray(r) ? r : [r]));
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
17
48
|
//# sourceMappingURL=generator.js.map
|
package/dist/generator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AA2DnD,mDAAmD;AACnD,MAAM,UAAU,SAAS,CACvB,EAGwC;IAExC,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAClE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC;AACJ,CAAC;AAED;;qFAEqF;AACrF,MAAM,UAAU,UAAU,CACxB,EAGwC;IAExC,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC,CAAC;AACJ,CAAC;AAED;oFACoF;AACpF,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AAEnC;;;uCAGuC;AACvC,MAAM,UAAU,UAAU,CACxB,EAGwC;IAExC,OAAO,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;QAC9C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBAAC,MAAM,GAAG,EAAE,CAAC;gBAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,MAAM,GAAG,GAAkB,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,EAAE,GAAG,CAAC,CAAC;YAC9C,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
/** @deprecated ADR-0034 — own a copy instead: `import { entityFile } from "./codegen/generators/entity"` (scaffolded by `meta init`). */
|
|
1
2
|
export { entityFile, type EntityFileOpts } from "./entity-file.js";
|
|
3
|
+
/** @deprecated ADR-0034 — own a copy instead: `import { queriesFile } from "./codegen/generators/queries"` (scaffolded by `meta init`). */
|
|
2
4
|
export { queriesFile, type QueriesFileOpts } from "./queries-file.js";
|
|
3
5
|
export { callableFile, type CallableFileOpts } from "./callable-file.js";
|
|
6
|
+
/** @deprecated ADR-0034 — own a copy instead: `import { routesFile } from "./codegen/generators/routes"` (scaffolded by `meta init`). */
|
|
4
7
|
export { routesFile, type RoutesFileOpts } from "./routes-file.js";
|
|
5
8
|
export { routesFileHono, type RoutesFileHonoOpts } from "./routes-file-hono.js";
|
|
9
|
+
/** @deprecated ADR-0034 — own a copy instead: `import { barrel } from "./codegen/generators/barrel"` (scaffolded by `meta init`). */
|
|
6
10
|
export { barrel, type BarrelOpts } from "./barrel.js";
|
|
7
11
|
/** @deprecated ADR-0021 D1 — neutral artifact owned by `meta docs` (ADR-0020); not part of the recommended `meta gen` suite. */
|
|
8
12
|
export { mermaidErDiagram, type MermaidErOptions } from "./mermaid-er.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAOA,yIAAyI;AACzI,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,2IAA2I;AAC3I,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACzE,yIAAyI;AACzI,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChF,qIAAqI;AACrI,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,gIAAgI;AAChI,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,oKAAoK;AACpK,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACvE,iJAAiJ;AACjJ,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC/E,YAAY,EACV,aAAa,EACb,eAAe,EACf,WAAW,EACX,eAAe,EACf,SAAS,EACT,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/generators/index.js
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
|
+
// ADR-0034 scaffold-and-own — these built-in generator factories remain the engine's
|
|
2
|
+
// internal composers, but importing them from `@metaobjectsdev/codegen-ts/generators`
|
|
3
|
+
// into a consumer's `metaobjects.config.ts` is DEPRECATED. The recommended path is to
|
|
4
|
+
// own copyable reference templates in your repo (`meta init` scaffolds them into
|
|
5
|
+
// `codegen/generators/*.ts`) and import those locally. This package export will be
|
|
6
|
+
// removed in a future major. See spec/decisions/ADR-0034-codegen-scaffold-and-own.md.
|
|
7
|
+
/** @deprecated ADR-0034 — own a copy instead: `import { entityFile } from "./codegen/generators/entity"` (scaffolded by `meta init`). */
|
|
1
8
|
export { entityFile } from "./entity-file.js";
|
|
9
|
+
/** @deprecated ADR-0034 — own a copy instead: `import { queriesFile } from "./codegen/generators/queries"` (scaffolded by `meta init`). */
|
|
2
10
|
export { queriesFile } from "./queries-file.js";
|
|
3
11
|
export { callableFile } from "./callable-file.js";
|
|
12
|
+
/** @deprecated ADR-0034 — own a copy instead: `import { routesFile } from "./codegen/generators/routes"` (scaffolded by `meta init`). */
|
|
4
13
|
export { routesFile } from "./routes-file.js";
|
|
5
14
|
export { routesFileHono } from "./routes-file-hono.js";
|
|
15
|
+
/** @deprecated ADR-0034 — own a copy instead: `import { barrel } from "./codegen/generators/barrel"` (scaffolded by `meta init`). */
|
|
6
16
|
export { barrel } from "./barrel.js";
|
|
7
17
|
/** @deprecated ADR-0021 D1 — neutral artifact owned by `meta docs` (ADR-0020); not part of the recommended `meta gen` suite. */
|
|
8
18
|
export { mermaidErDiagram } from "./mermaid-er.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAwB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAyB,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAuB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,cAAc,EAA2B,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,MAAM,EAAmB,MAAM,aAAa,CAAC;AACtD,gIAAgI;AAChI,OAAO,EAAE,gBAAgB,EAAyB,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAyB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAyB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAsB,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAyB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAyB,MAAM,yBAAyB,CAAC;AAC9E,oKAAoK;AACpK,OAAO,EAAE,WAAW,EAAwB,MAAM,oBAAoB,CAAC;AACvE,iJAAiJ;AACjJ,OAAO,EAAE,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EACL,iBAAiB,GAIlB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAwB,MAAM,wBAAwB,CAAC;AAS/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,sFAAsF;AACtF,sFAAsF;AACtF,iFAAiF;AACjF,mFAAmF;AACnF,sFAAsF;AAEtF,yIAAyI;AACzI,OAAO,EAAE,UAAU,EAAuB,MAAM,kBAAkB,CAAC;AACnE,2IAA2I;AAC3I,OAAO,EAAE,WAAW,EAAwB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAyB,MAAM,oBAAoB,CAAC;AACzE,yIAAyI;AACzI,OAAO,EAAE,UAAU,EAAuB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,cAAc,EAA2B,MAAM,uBAAuB,CAAC;AAChF,qIAAqI;AACrI,OAAO,EAAE,MAAM,EAAmB,MAAM,aAAa,CAAC;AACtD,gIAAgI;AAChI,OAAO,EAAE,gBAAgB,EAAyB,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAyB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAyB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAsB,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAyB,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAyB,MAAM,yBAAyB,CAAC;AAC9E,oKAAoK;AACpK,OAAO,EAAE,WAAW,EAAwB,MAAM,oBAAoB,CAAC;AACvE,iJAAiJ;AACjJ,OAAO,EAAE,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EACL,iBAAiB,GAIlB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAwB,MAAM,wBAAwB,CAAC;AAS/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { MetaRoot, MetaObject } from "@metaobjectsdev/metadata";
|
|
2
2
|
import { type Provider, type RenderFormat } from "@metaobjectsdev/render";
|
|
3
3
|
import type { GeneratorFactory } from "../generator.js";
|
|
4
|
+
/** The three built-in walk scopes (SP-1 §3.1). Same vocabulary as the engine
|
|
5
|
+
* helpers perEntity/perPackage/perModel. */
|
|
6
|
+
export type TemplateScope = "perEntity" | "perPackage" | "perModel";
|
|
4
7
|
export type TemplateFormat = RenderFormat;
|
|
5
8
|
export interface TemplateWalkResult {
|
|
6
9
|
/** The data dict to render against. Templates reference its keys; the
|
|
@@ -15,8 +18,17 @@ export interface TemplateGeneratorOpts {
|
|
|
15
18
|
name: string;
|
|
16
19
|
/** Walk the loaded metadata tree and produce `{ data, outputPath }` tuples
|
|
17
20
|
* — one per emitted file. Pattern A (per-entity), pattern B (single
|
|
18
|
-
* aggregator), pattern C (mixed), pattern D (filter inline) all fit.
|
|
19
|
-
|
|
21
|
+
* aggregator), pattern C (mixed), pattern D (filter inline) all fit.
|
|
22
|
+
* Mutually exclusive with `scope` — provide exactly one. The power-user
|
|
23
|
+
* escape hatch; most consumers declare a `scope` + `outputPattern` instead. */
|
|
24
|
+
walk?: (root: MetaRoot) => TemplateWalkResult[] | Promise<TemplateWalkResult[]>;
|
|
25
|
+
/** Built-in walk scope (SP-1 §3.1) — declarative alternative to `walk`. The
|
|
26
|
+
* generator derives the neutral data dict (template-data.ts) per unit and
|
|
27
|
+
* names each file via `outputPattern`. Mutually exclusive with `walk`. */
|
|
28
|
+
scope?: TemplateScope;
|
|
29
|
+
/** Output path pattern for the built-in `scope` walk: `{name}` `{Name}`
|
|
30
|
+
* `{package}` (SP-1 §3.3). Required with `scope`; ignored with `walk`. */
|
|
31
|
+
outputPattern?: string;
|
|
20
32
|
/** Template reference. Resolved by the configured Provider chain — by
|
|
21
33
|
* default the project's `templates/<ref>.mustache` first, then the
|
|
22
34
|
* framework defaults at `codegen-ts/templates/<ref>.mustache`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-generator.d.ts","sourceRoot":"","sources":["../../src/generators/template-generator.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAU,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAsC,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"template-generator.d.ts","sourceRoot":"","sources":["../../src/generators/template-generator.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAU,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAsC,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAU5F;6CAC6C;AAC7C,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;AAEpE,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC;qEACiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC;iCAC6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb;;;;oFAIgF;IAChF,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAChF;;+EAE2E;IAC3E,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;+EAC2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;uEAEmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB;;8EAE0E;IAC1E,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;IACzC;;;;;uDAKmD;IACnD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAkCD,eAAO,MAAM,iBAAiB,EAyDzB,gBAAgB,CAAC,qBAAqB,CAAC,CAAC"}
|
|
@@ -14,8 +14,50 @@
|
|
|
14
14
|
// function each.
|
|
15
15
|
import { render } from "@metaobjectsdev/render";
|
|
16
16
|
import { projectProvider } from "../render-engine/framework-provider.js";
|
|
17
|
+
import { expandOutputPattern } from "../template-codegen/output-pattern.js";
|
|
18
|
+
import { buildEntityTemplateData, buildPackageTemplateData, buildModelTemplateData, packageOf, } from "../template-codegen/template-data.js";
|
|
19
|
+
/** Derive a `walk` from a built-in scope + output pattern. Each scope yields the
|
|
20
|
+
* neutral data dict for its unit and names the file via the pattern. */
|
|
21
|
+
function scopeWalk(scope, pattern) {
|
|
22
|
+
return (root) => {
|
|
23
|
+
const concrete = root.objects().filter((o) => o.isAbstract !== true);
|
|
24
|
+
if (scope === "perEntity") {
|
|
25
|
+
return concrete.map((e) => ({
|
|
26
|
+
data: buildEntityTemplateData(e),
|
|
27
|
+
outputPath: expandOutputPattern(pattern, { name: e.name, package: packageOf(e) }),
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
if (scope === "perPackage") {
|
|
31
|
+
const byPkg = new Map();
|
|
32
|
+
for (const o of concrete) {
|
|
33
|
+
const pkg = packageOf(o);
|
|
34
|
+
let bucket = byPkg.get(pkg);
|
|
35
|
+
if (bucket === undefined) {
|
|
36
|
+
bucket = [];
|
|
37
|
+
byPkg.set(pkg, bucket);
|
|
38
|
+
}
|
|
39
|
+
bucket.push(o);
|
|
40
|
+
}
|
|
41
|
+
return [...byPkg.keys()].sort().map((pkg) => ({
|
|
42
|
+
data: buildPackageTemplateData(pkg, byPkg.get(pkg)),
|
|
43
|
+
outputPath: expandOutputPattern(pattern, { package: pkg }),
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
// perModel — one file over the whole model.
|
|
47
|
+
return [{ data: buildModelTemplateData(root), outputPath: expandOutputPattern(pattern, {}) }];
|
|
48
|
+
};
|
|
49
|
+
}
|
|
17
50
|
export const templateGenerator = function templateGenerator(opts) {
|
|
18
51
|
const fmt = opts.format ?? "text";
|
|
52
|
+
const hasWalk = typeof opts.walk === "function";
|
|
53
|
+
const hasScope = opts.scope !== undefined;
|
|
54
|
+
if (hasWalk === hasScope) {
|
|
55
|
+
throw new Error(`templateGenerator(${opts.name}): provide exactly one of \`walk\` or (\`scope\` + \`outputPattern\`)`);
|
|
56
|
+
}
|
|
57
|
+
if (hasScope && (opts.outputPattern === undefined || opts.outputPattern === "")) {
|
|
58
|
+
throw new Error(`templateGenerator(${opts.name}): \`scope\` requires a non-empty \`outputPattern\``);
|
|
59
|
+
}
|
|
60
|
+
const walk = hasWalk ? opts.walk : scopeWalk(opts.scope, opts.outputPattern);
|
|
19
61
|
const generator = {
|
|
20
62
|
name: opts.name,
|
|
21
63
|
async generate(ctx) {
|
|
@@ -32,7 +74,7 @@ export const templateGenerator = function templateGenerator(opts) {
|
|
|
32
74
|
"`meta gen` invoked from a sub-directory. Drive via runGen(opts.projectRoot) to remove this warning.");
|
|
33
75
|
provider = projectProvider(process.cwd());
|
|
34
76
|
}
|
|
35
|
-
const walkRes = await
|
|
77
|
+
const walkRes = await walk(ctx.loadedRoot);
|
|
36
78
|
const files = [];
|
|
37
79
|
for (const { data, outputPath } of walkRes) {
|
|
38
80
|
let content;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-generator.js","sourceRoot":"","sources":["../../src/generators/template-generator.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,yEAAyE;AACzE,yEAAyE;AACzE,qEAAqE;AACrE,sEAAsE;AACtE,oCAAoC;AACpC,EAAE;AACF,gDAAgD;AAChD,gEAAgE;AAChE,+DAA+D;AAC/D,EAAE;AACF,6EAA6E;AAC7E,sEAAsE;AACtE,iBAAiB;AAGjB,OAAO,EAAE,MAAM,EAAoC,MAAM,wBAAwB,CAAC;AAElF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"template-generator.js","sourceRoot":"","sources":["../../src/generators/template-generator.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,yEAAyE;AACzE,yEAAyE;AACzE,qEAAqE;AACrE,sEAAsE;AACtE,oCAAoC;AACpC,EAAE;AACF,gDAAgD;AAChD,gEAAgE;AAChE,+DAA+D;AAC/D,EAAE;AACF,6EAA6E;AAC7E,sEAAsE;AACtE,iBAAiB;AAGjB,OAAO,EAAE,MAAM,EAAoC,MAAM,wBAAwB,CAAC;AAElF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,SAAS,GACV,MAAM,sCAAsC,CAAC;AAsD9C;yEACyE;AACzE,SAAS,SAAS,CAChB,KAAoB,EACpB,OAAe;IAEf,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;QACrE,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC1B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC1B,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC;gBAChC,UAAU,EAAE,mBAAmB,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;aAClF,CAAC,CAAC,CAAC;QACN,CAAC;QACD,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;YAC9C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBAAC,MAAM,GAAG,EAAE,CAAC;oBAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAAC,CAAC;gBAClE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;YACD,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC5C,IAAI,EAAE,wBAAwB,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;gBACpD,UAAU,EAAE,mBAAmB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;aAC3D,CAAC,CAAC,CAAC;QACN,CAAC;QACD,4CAA4C;QAC5C,OAAO,CAAC,EAAE,IAAI,EAAE,sBAAsB,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,mBAAmB,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,iBAAiB,CACzD,IAA2B;IAE3B,MAAM,GAAG,GAAmB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;IAClD,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;IAC1C,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,qBAAqB,IAAI,CAAC,IAAI,uEAAuE,CACtG,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,IAAI,qDAAqD,CAAC,CAAC;IACvG,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAM,EAAE,IAAI,CAAC,aAAc,CAAC,CAAC;IAChF,MAAM,SAAS,GAAc;QAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,CAAC,QAAQ,CAAC,GAAe;YAC5B,IAAI,QAAkB,CAAC;YACvB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAChC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC3B,CAAC;iBAAM,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACzC,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CACN,kHAAkH;oBAClH,mHAAmH;oBACnH,qGAAqG,CACtG,CAAC;gBACF,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAkB,EAAE,CAAC;YAChC,KAAK,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,OAAO,EAAE,CAAC;gBAC3C,IAAI,OAAe,CAAC;gBACpB,IAAI,CAAC;oBACH,OAAO,GAAG,MAAM,CAAC;wBACf,GAAG,EAAE,IAAI,CAAC,QAAQ;wBAClB,OAAO,EAAE,IAAI;wBACb,QAAQ;wBACR,MAAM,EAAE,GAAG;qBACZ,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC7D,MAAM,IAAI,KAAK,CACb,qBAAqB,IAAI,CAAC,IAAI,uBAAuB,IAAI,CAAC,QAAQ,UAAU,UAAU,MAAM,GAAG,EAAE,EACjG,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAClD,CAAC;gBACJ,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;IACF,IAAI,IAAI,CAAC,MAAM;QAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAChD,IAAI,IAAI,CAAC,MAAM;QAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAChD,OAAO,SAAS,CAAC;AACnB,CAA4C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
export { runGen } from "./runner.js";
|
|
2
2
|
export type { RunGenOpts, RunGenResult } from "./runner.js";
|
|
3
3
|
export type { Generator, GenContext, EmittedFile, GeneratorFactory } from "./generator.js";
|
|
4
|
-
export { perEntity, oncePerRun } from "./generator.js";
|
|
4
|
+
export { perEntity, perPackage, perModel, oncePerRun } from "./generator.js";
|
|
5
|
+
export { expandOutputPattern } from "./template-codegen/output-pattern.js";
|
|
6
|
+
export { buildEntityTemplateData, buildPackageTemplateData, buildModelTemplateData, } from "./template-codegen/template-data.js";
|
|
7
|
+
export type { FieldTemplateData, EntityTemplateData, IdentityTemplateData, RelationshipTemplateData, PackageTemplateData, ModelTemplateData, } from "./template-codegen/template-data.js";
|
|
8
|
+
export { parseTemplateSpec, templateSpecToGenerators } from "./template-codegen/template-spec.js";
|
|
9
|
+
export type { TemplateSpecEntry, TemplateSpecFile } from "./template-codegen/template-spec.js";
|
|
10
|
+
export type { TemplateScope } from "./generators/template-generator.js";
|
|
5
11
|
export { generatorRegistry, listGenerators, getGenerator, } from "./generator-registry.js";
|
|
6
12
|
export type { GeneratorRegistryEntry, GeneratorTier } from "./generator-registry.js";
|
|
7
13
|
export type { MetaobjectsGenConfig, NormalizedMetaobjectsGenConfig, ResolvedGenConfig, Dialect, ExtStyle, ColumnNamingStrategy, MetaDataTypeProvider, GeneratorSpec, DocsConfig, ResolvedDocsConfig, DocsSurface, ApiSurface } from "./metaobjects-config.js";
|
|
@@ -30,6 +36,12 @@ export { isAbstract, emitsInstanceArtifacts, emitsWriteArtifacts } from "./insta
|
|
|
30
36
|
export { isTphDiscriminatorBase, tphConcreteSubtypes, collectTphSubtypeFields, tphPlan, tphRouteSegment } from "./templates/tph-discriminator.js";
|
|
31
37
|
export type { TphPlan, TphSubtypePlan } from "./templates/tph-discriminator.js";
|
|
32
38
|
export { isTphSubtype, tphDiscriminatorPin } from "./templates/zod-validators.js";
|
|
39
|
+
export { renderTphDiscriminatorUnion } from "./templates/tph-discriminator.js";
|
|
40
|
+
export { hasWritableRdbSource } from "./source-detect.js";
|
|
41
|
+
export { renderSharedEnumsFile, SHARED_ENUMS_BASENAME } from "./templates/enums-file.js";
|
|
42
|
+
export { resolveReferenceRoot, readReferenceTemplate, REFERENCE_GENERATOR_NAMES } from "./reference-templates.js";
|
|
43
|
+
export type { ReferenceGeneratorName } from "./reference-templates.js";
|
|
44
|
+
export { renderFindByIdFn, renderListFn, renderCreateFn, renderUpdateFn, renderDeleteByIdFn, getPkInfo, } from "./templates/queries.js";
|
|
33
45
|
export { renderEntityFile } from "./templates/entity-file.js";
|
|
34
46
|
export type { RenderEntityFileOpts } from "./templates/entity-file.js";
|
|
35
47
|
export { renderZodValidators } from "./templates/zod-validators.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5D,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,12 @@
|
|
|
3
3
|
// Architecture: Vite-style plugin model.
|
|
4
4
|
// See docs/superpowers/specs/2026-05-12-pluggable-generators-design.md.
|
|
5
5
|
export { runGen } from "./runner.js";
|
|
6
|
-
export { perEntity, oncePerRun } from "./generator.js";
|
|
6
|
+
export { perEntity, perPackage, perModel, oncePerRun } from "./generator.js";
|
|
7
|
+
// SP-1 declarative Mustache template-codegen — scope walks, neutral data dict,
|
|
8
|
+
// output-pattern, and the JSON template-spec the CLI ports reuse.
|
|
9
|
+
export { expandOutputPattern } from "./template-codegen/output-pattern.js";
|
|
10
|
+
export { buildEntityTemplateData, buildPackageTemplateData, buildModelTemplateData, } from "./template-codegen/template-data.js";
|
|
11
|
+
export { parseTemplateSpec, templateSpecToGenerators } from "./template-codegen/template-spec.js";
|
|
7
12
|
// ADR-0021 D3 — stable-name generator registry + discoverability surface.
|
|
8
13
|
export { generatorRegistry, listGenerators, getGenerator, } from "./generator-registry.js";
|
|
9
14
|
export { defineConfig, normalizeConfig, resolveGenerators, resolveDocsConfig } from "./metaobjects-config.js";
|
|
@@ -25,6 +30,18 @@ export { isAbstract, emitsInstanceArtifacts, emitsWriteArtifacts } from "./insta
|
|
|
25
30
|
// react) to dispatch polymorphic/per-subtype emission and skip subtype files.
|
|
26
31
|
export { isTphDiscriminatorBase, tphConcreteSubtypes, collectTphSubtypeFields, tphPlan, tphRouteSegment } from "./templates/tph-discriminator.js";
|
|
27
32
|
export { isTphSubtype, tphDiscriminatorPin } from "./templates/zod-validators.js";
|
|
33
|
+
// ADR-0034 reference-template composition helpers. Promoted to the public engine
|
|
34
|
+
// surface so a COPIED reference generator (src/reference/*.ts → consumer's
|
|
35
|
+
// codegen/generators/*.ts) imports only `@metaobjectsdev/codegen-ts`, never a
|
|
36
|
+
// package-internal relative path. These are the assembly pieces the built-in
|
|
37
|
+
// entity/queries composers use; the reference templates relocate that assembly.
|
|
38
|
+
export { renderTphDiscriminatorUnion } from "./templates/tph-discriminator.js";
|
|
39
|
+
export { hasWritableRdbSource } from "./source-detect.js";
|
|
40
|
+
export { renderSharedEnumsFile, SHARED_ENUMS_BASENAME } from "./templates/enums-file.js";
|
|
41
|
+
// ADR-0034 scaffold-and-own — reader for the copyable reference generators in
|
|
42
|
+
// `src/reference/*.ts`. `meta init` uses this to copy them into the consumer's repo.
|
|
43
|
+
export { resolveReferenceRoot, readReferenceTemplate, REFERENCE_GENERATOR_NAMES } from "./reference-templates.js";
|
|
44
|
+
export { renderFindByIdFn, renderListFn, renderCreateFn, renderUpdateFn, renderDeleteByIdFn, getPkInfo, } from "./templates/queries.js";
|
|
28
45
|
// Built-in template render functions — the composition seam for adopters who
|
|
29
46
|
// want to call a built-in template, then post-process / append to its output
|
|
30
47
|
// from their own Generator (added to `generators: [...]`) WITHOUT forking the
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,EAAE;AACF,yCAAyC;AACzC,wEAAwE;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Basenames (no extension) of the copyable reference generators shipped in `src/reference/`. */
|
|
2
|
+
export declare const REFERENCE_GENERATOR_NAMES: readonly ["entity", "queries", "routes", "barrel"];
|
|
3
|
+
export type ReferenceGeneratorName = (typeof REFERENCE_GENERATOR_NAMES)[number];
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the `src/reference/` directory holding the copyable reference generators.
|
|
6
|
+
* Works in dev (this module runs from `src/`, templates at `./reference/`) and in a
|
|
7
|
+
* published install (this module runs from `dist/`, templates at `../src/reference/`,
|
|
8
|
+
* since `src/` ships alongside `dist/`). Walks up checking both layouts at each level.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveReferenceRoot(): string;
|
|
11
|
+
/** Read the raw source of one reference generator (e.g. `"entity"` → the text of `entity.ts`). */
|
|
12
|
+
export declare function readReferenceTemplate(name: ReferenceGeneratorName): string;
|
|
13
|
+
//# sourceMappingURL=reference-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-templates.d.ts","sourceRoot":"","sources":["../src/reference-templates.ts"],"names":[],"mappings":"AAcA,iGAAiG;AACjG,eAAO,MAAM,yBAAyB,oDAAqD,CAAC;AAC5F,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;AAOhF;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAc7C;AAED,kGAAkG;AAClG,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,CAE1E"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// ADR-0034 scaffold-and-own — locate + read the copyable reference generators that
|
|
2
|
+
// live (as raw source assets) in `src/reference/*.ts`. `meta init` reads them through
|
|
3
|
+
// here and writes them into the consumer's repo (e.g. `codegen/generators/*.ts`), which
|
|
4
|
+
// the consumer then OWNS. The templates import only `@metaobjectsdev/codegen-ts` (the
|
|
5
|
+
// stable engine), so a copied file works verbatim with no rewriting.
|
|
6
|
+
//
|
|
7
|
+
// The reference files are excluded from the tsc build (they are scaffold assets, not
|
|
8
|
+
// package source — see tsconfig.json). They ship to npm via the package `files: ["src"]`
|
|
9
|
+
// entry, so they are present at `<pkg>/src/reference/*.ts` in a published install.
|
|
10
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
+
import { dirname, join } from "node:path";
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
13
|
+
/** Basenames (no extension) of the copyable reference generators shipped in `src/reference/`. */
|
|
14
|
+
export const REFERENCE_GENERATOR_NAMES = ["entity", "queries", "routes", "barrel"];
|
|
15
|
+
/** A directory is the reference root iff it holds the entity reference template. */
|
|
16
|
+
function isReferenceRoot(dir) {
|
|
17
|
+
return existsSync(join(dir, "entity.ts"));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the `src/reference/` directory holding the copyable reference generators.
|
|
21
|
+
* Works in dev (this module runs from `src/`, templates at `./reference/`) and in a
|
|
22
|
+
* published install (this module runs from `dist/`, templates at `../src/reference/`,
|
|
23
|
+
* since `src/` ships alongside `dist/`). Walks up checking both layouts at each level.
|
|
24
|
+
*/
|
|
25
|
+
export function resolveReferenceRoot() {
|
|
26
|
+
let dir = dirname(fileURLToPath(import.meta.url));
|
|
27
|
+
for (let i = 0; i < 8; i++) {
|
|
28
|
+
for (const candidate of [join(dir, "reference"), join(dir, "src", "reference")]) {
|
|
29
|
+
if (isReferenceRoot(candidate))
|
|
30
|
+
return candidate;
|
|
31
|
+
}
|
|
32
|
+
const parent = dirname(dir);
|
|
33
|
+
if (parent === dir)
|
|
34
|
+
break;
|
|
35
|
+
dir = parent;
|
|
36
|
+
}
|
|
37
|
+
throw new Error("codegen-ts reference templates not found — looked for `reference/` and `src/reference/` " +
|
|
38
|
+
"walking up from the codegen-ts module.");
|
|
39
|
+
}
|
|
40
|
+
/** Read the raw source of one reference generator (e.g. `"entity"` → the text of `entity.ts`). */
|
|
41
|
+
export function readReferenceTemplate(name) {
|
|
42
|
+
return readFileSync(join(resolveReferenceRoot(), `${name}.ts`), "utf8");
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=reference-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-templates.js","sourceRoot":"","sources":["../src/reference-templates.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,sFAAsF;AACtF,wFAAwF;AACxF,sFAAsF;AACtF,qEAAqE;AACrE,EAAE;AACF,qFAAqF;AACrF,yFAAyF;AACzF,mFAAmF;AAEnF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,iGAAiG;AACjG,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAG5F,oFAAoF;AACpF,SAAS,eAAe,CAAC,GAAW;IAClC,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,KAAK,MAAM,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;YAChF,IAAI,eAAe,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;QACnD,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CACb,0FAA0F;QACxF,wCAAwC,CAC3C,CAAC;AACJ,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,qBAAqB,CAAC,IAA4B;IAChE,OAAO,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-pattern.d.ts","sourceRoot":"","sources":["../../src/template-codegen/output-pattern.ts"],"names":[],"mappings":"AAeA,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,MAAM,CAiBR"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Expands the tiny, fixed output-pattern grammar shared cross-port (SP-1 §3.3).
|
|
2
|
+
// Placeholders: {name}, {Name} (PascalCase of name), {package} (:: → /).
|
|
3
|
+
// An empty {package} collapses its trailing slash so `{package}/{name}` with no
|
|
4
|
+
// package yields just `{name}`. Unknown placeholders are a hard error.
|
|
5
|
+
const KNOWN = new Set(["name", "Name", "package"]);
|
|
6
|
+
function pascalCase(s) {
|
|
7
|
+
return s
|
|
8
|
+
.split(/[^A-Za-z0-9]+/)
|
|
9
|
+
.filter(Boolean)
|
|
10
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
11
|
+
.join("");
|
|
12
|
+
}
|
|
13
|
+
export function expandOutputPattern(pattern, vars) {
|
|
14
|
+
let pkgWasEmpty = false;
|
|
15
|
+
const out = pattern.replace(/\{(\w+)\}/g, (_m, token) => {
|
|
16
|
+
if (!KNOWN.has(token)) {
|
|
17
|
+
throw new Error(`unknown placeholder {${token}} in output pattern '${pattern}'`);
|
|
18
|
+
}
|
|
19
|
+
if (token === "package") {
|
|
20
|
+
const p = (vars.package ?? "").replaceAll("::", "/");
|
|
21
|
+
if (p === "")
|
|
22
|
+
pkgWasEmpty = true;
|
|
23
|
+
return p;
|
|
24
|
+
}
|
|
25
|
+
if (vars.name === undefined) {
|
|
26
|
+
throw new Error(`output pattern '${pattern}' uses {${token}} but no entity name is in scope`);
|
|
27
|
+
}
|
|
28
|
+
return token === "Name" ? pascalCase(vars.name) : vars.name;
|
|
29
|
+
});
|
|
30
|
+
return pkgWasEmpty ? out.replace(/^\/+/, "").replace(/\/{2,}/g, "/") : out;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=output-pattern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-pattern.js","sourceRoot":"","sources":["../../src/template-codegen/output-pattern.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,yEAAyE;AACzE,gFAAgF;AAChF,uEAAuE;AAEvE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAEnD,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC;SACL,KAAK,CAAC,eAAe,CAAC;SACtB,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAClD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,IAAyC;IAEzC,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,KAAa,EAAE,EAAE;QAC9D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,wBAAwB,OAAO,GAAG,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,EAAE;gBAAE,WAAW,GAAG,IAAI,CAAC;YACjC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,WAAW,KAAK,kCAAkC,CAAC,CAAC;QAChG,CAAC;QACD,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9D,CAAC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { MetaObject, MetaRoot } from "@metaobjectsdev/metadata";
|
|
2
|
+
/** The effective package of an object — its own package OR the file-default
|
|
3
|
+
* folded into `resolutionKey()`. `entity.package` alone is usually undefined
|
|
4
|
+
* (object fqn() stays bare), so all package reads go through here. */
|
|
5
|
+
export declare function packageOf(entity: MetaObject): string;
|
|
6
|
+
export interface FieldTemplateData {
|
|
7
|
+
name: string;
|
|
8
|
+
/** Neutral field subtype, e.g. "string" | "int" | "currency" | "enum".
|
|
9
|
+
* Arrayness is carried by `isArray`, NOT appended here. */
|
|
10
|
+
type: string;
|
|
11
|
+
required: boolean;
|
|
12
|
+
isArray: boolean;
|
|
13
|
+
maxLength?: number;
|
|
14
|
+
enumValues?: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface IdentityTemplateData {
|
|
17
|
+
kind: string;
|
|
18
|
+
fields: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface RelationshipTemplateData {
|
|
21
|
+
name: string;
|
|
22
|
+
cardinality: string;
|
|
23
|
+
targetRef: string;
|
|
24
|
+
}
|
|
25
|
+
export interface EntityTemplateData {
|
|
26
|
+
name: string;
|
|
27
|
+
package: string;
|
|
28
|
+
fields: FieldTemplateData[];
|
|
29
|
+
identities: IdentityTemplateData[];
|
|
30
|
+
relationships: RelationshipTemplateData[];
|
|
31
|
+
}
|
|
32
|
+
export interface PackageTemplateData {
|
|
33
|
+
package: string;
|
|
34
|
+
entities: EntityTemplateData[];
|
|
35
|
+
}
|
|
36
|
+
export interface ModelTemplateData {
|
|
37
|
+
packages: PackageTemplateData[];
|
|
38
|
+
}
|
|
39
|
+
export declare function buildEntityTemplateData(entity: MetaObject): EntityTemplateData;
|
|
40
|
+
export declare function buildPackageTemplateData(pkg: string, entities: MetaObject[]): PackageTemplateData;
|
|
41
|
+
/** Groups concrete (non-abstract) objects by package — packages ascending,
|
|
42
|
+
* entities in `root.objects()` order. Abstract objects never emit instance
|
|
43
|
+
* artifacts, so they are excluded. */
|
|
44
|
+
export declare function buildModelTemplateData(root: MetaRoot): ModelTemplateData;
|
|
45
|
+
//# sourceMappingURL=template-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-data.d.ts","sourceRoot":"","sources":["../../src/template-codegen/template-data.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAa,MAAM,0BAA0B,CAAC;AAIhF;;uEAEuE;AACvE,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAEpD;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb;gEAC4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AACD,MAAM,WAAW,oBAAoB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAAE;AACzE,MAAM,WAAW,wBAAwB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;CAAE;AACnG,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,aAAa,EAAE,wBAAwB,EAAE,CAAC;CAC3C;AACD,MAAM,WAAW,mBAAmB;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAAE;AACzF,MAAM,WAAW,iBAAiB;IAAG,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CAAE;AAiBvE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,kBAAkB,CAY9E;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAEjG;AAED;;uCAEuC;AACvC,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,GAAG,iBAAiB,CAYxE"}
|