@metaobjectsdev/codegen-ts 0.7.0-rc.11 → 0.7.0-rc.12

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 (52) hide show
  1. package/dist/generators/docs-data-builder.d.ts +16 -0
  2. package/dist/generators/docs-data-builder.d.ts.map +1 -0
  3. package/dist/generators/docs-data-builder.js +375 -0
  4. package/dist/generators/docs-data-builder.js.map +1 -0
  5. package/dist/generators/docs-data.d.ts +87 -0
  6. package/dist/generators/docs-data.d.ts.map +1 -0
  7. package/dist/generators/docs-data.js +13 -0
  8. package/dist/generators/docs-data.js.map +1 -0
  9. package/dist/generators/docs-file.d.ts +1 -1
  10. package/dist/generators/docs-file.d.ts.map +1 -1
  11. package/dist/generators/docs-file.js +50 -33
  12. package/dist/generators/docs-file.js.map +1 -1
  13. package/dist/generators/index.d.ts +3 -0
  14. package/dist/generators/index.d.ts.map +1 -1
  15. package/dist/generators/index.js +2 -0
  16. package/dist/generators/index.js.map +1 -1
  17. package/dist/generators/template-generator.d.ts +40 -0
  18. package/dist/generators/template-generator.d.ts.map +1 -0
  19. package/dist/generators/template-generator.js +43 -0
  20. package/dist/generators/template-generator.js.map +1 -0
  21. package/dist/index.d.ts +6 -2
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +7 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/overwrite-policy.d.ts +39 -2
  26. package/dist/overwrite-policy.d.ts.map +1 -1
  27. package/dist/overwrite-policy.js +233 -13
  28. package/dist/overwrite-policy.js.map +1 -1
  29. package/dist/render-engine/framework-provider.d.ts +28 -0
  30. package/dist/render-engine/framework-provider.d.ts.map +1 -0
  31. package/dist/render-engine/framework-provider.js +99 -0
  32. package/dist/render-engine/framework-provider.js.map +1 -0
  33. package/dist/runner.d.ts +15 -1
  34. package/dist/runner.d.ts.map +1 -1
  35. package/dist/runner.js +43 -6
  36. package/dist/runner.js.map +1 -1
  37. package/dist/templates/docs-file.d.ts +5 -36
  38. package/dist/templates/docs-file.d.ts.map +1 -1
  39. package/dist/templates/docs-file.js +33 -447
  40. package/dist/templates/docs-file.js.map +1 -1
  41. package/package.json +5 -5
  42. package/src/generators/docs-data-builder.ts +467 -0
  43. package/src/generators/docs-data.ts +113 -0
  44. package/src/generators/docs-file.ts +64 -43
  45. package/src/generators/index.ts +15 -0
  46. package/src/generators/template-generator.ts +84 -0
  47. package/src/index.ts +33 -2
  48. package/src/overwrite-policy.ts +325 -14
  49. package/src/render-engine/framework-provider.ts +98 -0
  50. package/src/runner.ts +64 -6
  51. package/src/templates/docs-file.ts +36 -537
  52. package/templates/docs/entity-page.md.mustache +54 -0
@@ -0,0 +1,16 @@
1
+ import { type MetaObject, type MetaRoot } from "@metaobjectsdev/metadata";
2
+ import { type Dialect } from "../column-mapper.js";
3
+ import type { ColumnNamingStrategy } from "../metaobjects-config.js";
4
+ import type { EntityDocData } from "./docs-data.js";
5
+ export interface BuildDocDataOpts {
6
+ dialect: Dialect;
7
+ columnNamingStrategy?: ColumnNamingStrategy;
8
+ loadedRoot: MetaRoot;
9
+ /** Set of generator names present in the pipeline; drives "Generated code". */
10
+ generatorNames?: ReadonlySet<string>;
11
+ }
12
+ /** Build the EntityDocData payload for one entity. The single public-API
13
+ * entry point exported by this module; the markdown template applies
14
+ * against this shape. */
15
+ export declare function buildEntityDocData(entity: MetaObject, opts: BuildDocDataOpts): EntityDocData;
16
+ //# sourceMappingURL=docs-data-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-data-builder.d.ts","sourceRoot":"","sources":["../../src/generators/docs-data-builder.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,UAAU,EAGf,KAAK,QAAQ,EA2Cd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAKrE,OAAO,KAAK,EACV,aAAa,EAMd,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,UAAU,EAAE,QAAQ,CAAC;IACrB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACtC;AA+OD;;0BAE0B;AAC1B,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,gBAAgB,GACrB,aAAa,CAmJf"}
@@ -0,0 +1,375 @@
1
+ // Helper that turns a MetaObject (+ root) into the EntityDocData shape the
2
+ // templates consume. The previous hand-coded `renderDocsFile()` mixed data
3
+ // extraction with string emission; this module is the data-only half — the
4
+ // markdown structure now lives in templates/docs/entity-page.md.mustache.
5
+ import { TYPE_TEMPLATE, TEMPLATE_ATTR_PAYLOAD_REF, OBJECT_SUBTYPE_VALUE, IDENTITY_SUBTYPE_PRIMARY, IDENTITY_SUBTYPE_SECONDARY, IDENTITY_SUBTYPE_REFERENCE, IDENTITY_ATTR_GENERATION, RELATIONSHIP_ATTR_CARDINALITY, RELATIONSHIP_ATTR_OBJECT_REF, RELATIONSHIP_SUBTYPE_COMPOSITION, RELATIONSHIP_SUBTYPE_AGGREGATION, RELATIONSHIP_SUBTYPE_ASSOCIATION, FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_CLASS, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_SHORT, FIELD_SUBTYPE_BYTE, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_ATTR_REQUIRED, FIELD_ATTR_UNIQUE, FIELD_ATTR_OBJECT_REF, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_DEFAULT, VALIDATOR_SUBTYPE_LENGTH, VALIDATOR_SUBTYPE_REGEX, VALIDATOR_SUBTYPE_NUMERIC, VALIDATOR_SUBTYPE_REQUIRED, VALIDATOR_ATTR_PATTERN, VALIDATOR_ATTR_MIN, VALIDATOR_ATTR_MAX, DOC_ATTR_DESCRIPTION, stripPackage, } from "@metaobjectsdev/metadata";
6
+ import { mapColumnType } from "../column-mapper.js";
7
+ import { toPascalCase } from "../naming.js";
8
+ import { enumValues } from "../enum-meta.js";
9
+ import { hasWritableRdbSource } from "../source-detect.js";
10
+ import { GENERATED_HEADER } from "../constants.js";
11
+ const SCALAR_TS_BY_SUBTYPE = {
12
+ [FIELD_SUBTYPE_STRING]: "string",
13
+ [FIELD_SUBTYPE_CLASS]: "string",
14
+ [FIELD_SUBTYPE_INT]: "number",
15
+ [FIELD_SUBTYPE_SHORT]: "number",
16
+ [FIELD_SUBTYPE_BYTE]: "number",
17
+ [FIELD_SUBTYPE_LONG]: "number",
18
+ [FIELD_SUBTYPE_DOUBLE]: "number",
19
+ [FIELD_SUBTYPE_FLOAT]: "number",
20
+ [FIELD_SUBTYPE_DECIMAL]: "number",
21
+ [FIELD_SUBTYPE_CURRENCY]: "number",
22
+ [FIELD_SUBTYPE_BOOLEAN]: "boolean",
23
+ [FIELD_SUBTYPE_DATE]: "string",
24
+ [FIELD_SUBTYPE_TIME]: "string",
25
+ [FIELD_SUBTYPE_TIMESTAMP]: "string",
26
+ };
27
+ function enumTypeAliasName(entity, field) {
28
+ const superField = field.resolveSuper();
29
+ return superField !== undefined
30
+ ? toPascalCase(superField.name)
31
+ : `${entity.name}${toPascalCase(field.name)}`;
32
+ }
33
+ function isFieldRequired(field) {
34
+ if (field.ownAttr(FIELD_ATTR_REQUIRED) === true)
35
+ return true;
36
+ return field.validators().some((v) => v.subType === VALIDATOR_SUBTYPE_REQUIRED);
37
+ }
38
+ function tsTypeForStorage(entity, field, pkFieldNames) {
39
+ let base;
40
+ if (field.subType === FIELD_SUBTYPE_ENUM) {
41
+ const values = enumValues(field);
42
+ if (values !== undefined && values.length > 0) {
43
+ if (field.isArray) {
44
+ base = `${enumTypeAliasName(entity, field)}[]`;
45
+ }
46
+ else {
47
+ base = values.map((v) => JSON.stringify(v)).join(" | ");
48
+ }
49
+ }
50
+ else {
51
+ base = field.isArray ? "string[]" : "string";
52
+ }
53
+ }
54
+ else if (field.subType === FIELD_SUBTYPE_OBJECT) {
55
+ const ref = field.ownAttr(FIELD_ATTR_OBJECT_REF);
56
+ const refName = typeof ref === "string" && ref.length > 0 ? ref : "unknown";
57
+ base = field.isArray ? `${refName}[]` : refName;
58
+ }
59
+ else {
60
+ const scalar = SCALAR_TS_BY_SUBTYPE[field.subType] ?? "unknown";
61
+ base = field.isArray ? `${scalar}[]` : scalar;
62
+ }
63
+ const required = pkFieldNames.has(field.name) || isFieldRequired(field);
64
+ return required ? base : `${base} | null`;
65
+ }
66
+ function sqlColumnExpr(spec) {
67
+ const dbName = JSON.stringify(spec.dbName);
68
+ if (spec.fnOptions !== undefined && Object.keys(spec.fnOptions).length > 0) {
69
+ const parts = [];
70
+ for (const [k, v] of Object.entries(spec.fnOptions)) {
71
+ const lit = JSON.stringify(v);
72
+ if (Array.isArray(v)) {
73
+ parts.push(`${k}: ${lit} as const`);
74
+ }
75
+ else {
76
+ parts.push(`${k}: ${lit}`);
77
+ }
78
+ }
79
+ return `${spec.fnName}(${dbName}, { ${parts.join(", ")} })`;
80
+ }
81
+ return `${spec.fnName}(${dbName})`;
82
+ }
83
+ function constraintsCell(entity, field, pkFieldNames, fkMap) {
84
+ const parts = [];
85
+ if (pkFieldNames.has(field.name)) {
86
+ parts.push("primary key");
87
+ const primary = entity.primaryIdentity();
88
+ const gen = primary?.ownAttr(IDENTITY_ATTR_GENERATION);
89
+ if (typeof gen === "string") {
90
+ parts.push(`generation: \`${gen}\``);
91
+ }
92
+ }
93
+ else if (isFieldRequired(field)) {
94
+ parts.push("required");
95
+ }
96
+ else {
97
+ parts.push("optional");
98
+ }
99
+ if (field.ownAttr(FIELD_ATTR_UNIQUE) === true) {
100
+ parts.push("unique");
101
+ }
102
+ if (field.isArray) {
103
+ parts.push("JSON column");
104
+ }
105
+ if (field.subType === FIELD_SUBTYPE_ENUM && !field.isArray) {
106
+ const values = enumValues(field);
107
+ if (values !== undefined && values.length > 0) {
108
+ const list = values.map((v) => `'${v.replace(/'/g, "''")}'`).join(", ");
109
+ parts.push(`CHECK \`${field.column ?? field.name} IN (${list})\``);
110
+ }
111
+ }
112
+ for (const v of field.validators()) {
113
+ if (v.subType === VALIDATOR_SUBTYPE_REGEX) {
114
+ const pattern = v.ownAttr(VALIDATOR_ATTR_PATTERN);
115
+ if (typeof pattern === "string" && pattern.length > 0) {
116
+ parts.push(`pattern \`${pattern}\``);
117
+ }
118
+ }
119
+ }
120
+ const maxLenAttr = field.ownAttr(FIELD_ATTR_MAX_LENGTH);
121
+ if (typeof maxLenAttr === "number") {
122
+ parts.push(`maxLength: ${maxLenAttr}`);
123
+ }
124
+ for (const v of field.validators()) {
125
+ if (v.subType === VALIDATOR_SUBTYPE_LENGTH) {
126
+ const min = v.ownAttr(VALIDATOR_ATTR_MIN);
127
+ const max = v.ownAttr(VALIDATOR_ATTR_MAX);
128
+ if (typeof min === "number")
129
+ parts.push(`minLength: ${min}`);
130
+ if (typeof max === "number" && typeof maxLenAttr !== "number")
131
+ parts.push(`maxLength: ${max}`);
132
+ }
133
+ }
134
+ for (const v of field.validators()) {
135
+ if (v.subType === VALIDATOR_SUBTYPE_NUMERIC) {
136
+ const min = v.ownAttr(VALIDATOR_ATTR_MIN);
137
+ const max = v.ownAttr(VALIDATOR_ATTR_MAX);
138
+ if (typeof min === "number")
139
+ parts.push(`min: ${min}`);
140
+ if (typeof max === "number")
141
+ parts.push(`max: ${max}`);
142
+ }
143
+ }
144
+ const fk = fkMap.get(field.name);
145
+ if (fk !== undefined) {
146
+ parts.push(`references \`${fk.targetEntity}.${fk.targetField}\``);
147
+ }
148
+ const def = field.ownAttr(FIELD_ATTR_DEFAULT);
149
+ if (def !== undefined) {
150
+ parts.push(`default: \`${String(def)}\``);
151
+ }
152
+ const sup = field.resolveSuper();
153
+ if (sup !== undefined) {
154
+ parts.push(`extends \`${sup.name}\``);
155
+ }
156
+ return parts.join(", ");
157
+ }
158
+ function buildFkMap(entity, root) {
159
+ const out = new Map();
160
+ for (const ref of entity.referenceIdentities()) {
161
+ const fkField = ref.fields[0];
162
+ const targetEntity = ref.targetEntity;
163
+ if (fkField === undefined || targetEntity === undefined)
164
+ continue;
165
+ const targetField = ref.resolvedTargetPkField(root) ?? "id";
166
+ out.set(fkField, { targetEntity: stripPackage(targetEntity), targetField });
167
+ }
168
+ return out;
169
+ }
170
+ function sourceLine(entity) {
171
+ const src = entity.source;
172
+ if (!src)
173
+ return undefined;
174
+ if ("files" in src && src.files.length > 0) {
175
+ return src.files[0];
176
+ }
177
+ if (src.format === "code") {
178
+ return src.caller !== undefined ? `(code) ${src.caller}` : "(code)";
179
+ }
180
+ return undefined;
181
+ }
182
+ function entityDescription(entity) {
183
+ const v = entity.attr(DOC_ATTR_DESCRIPTION);
184
+ return typeof v === "string" && v.length > 0 ? v : undefined;
185
+ }
186
+ function describeIdentity(id) {
187
+ const fields = id.fields;
188
+ const fieldList = fields.length === 1
189
+ ? `\`${fields[0]}\``
190
+ : `(${fields.map((f) => `\`${f}\``).join(", ")})`;
191
+ if (id.subType === IDENTITY_SUBTYPE_PRIMARY) {
192
+ const gen = id.ownAttr(IDENTITY_ATTR_GENERATION);
193
+ const genSuffix = typeof gen === "string" ? ` — generation: \`${gen}\`` : "";
194
+ return `**Primary key:** ${fieldList}${genSuffix}`;
195
+ }
196
+ if (id.subType === IDENTITY_SUBTYPE_SECONDARY) {
197
+ const uniqueText = id.unique ? "unique" : "non-unique";
198
+ return `**Secondary index:** ${fieldList} — ${uniqueText}`;
199
+ }
200
+ if (id.subType === IDENTITY_SUBTYPE_REFERENCE) {
201
+ const refIdent = id;
202
+ const raw = refIdent.referencesRaw;
203
+ if (typeof raw === "string" && raw.length > 0) {
204
+ return `**Reference:** ${fieldList} → \`${raw}\``;
205
+ }
206
+ return `**Reference:** ${fieldList}`;
207
+ }
208
+ return `**Identity (${id.subType}):** ${fieldList}`;
209
+ }
210
+ function relationshipBullet(r) {
211
+ const cardinality = r.ownAttr(RELATIONSHIP_ATTR_CARDINALITY);
212
+ const card = typeof cardinality === "string" ? cardinality : "?";
213
+ const targetRaw = r.ownAttr(RELATIONSHIP_ATTR_OBJECT_REF);
214
+ const target = typeof targetRaw === "string" ? stripPackage(targetRaw) : "?";
215
+ const subtype = r.subType;
216
+ let label;
217
+ switch (subtype) {
218
+ case RELATIONSHIP_SUBTYPE_COMPOSITION:
219
+ label = "composition";
220
+ break;
221
+ case RELATIONSHIP_SUBTYPE_AGGREGATION:
222
+ label = "aggregation";
223
+ break;
224
+ case RELATIONSHIP_SUBTYPE_ASSOCIATION:
225
+ label = "association";
226
+ break;
227
+ default: label = subtype;
228
+ }
229
+ return `\`${r.name}\` — ${card} → \`${target}\` (${label})`;
230
+ }
231
+ /** Build the EntityDocData payload for one entity. The single public-API
232
+ * entry point exported by this module; the markdown template applies
233
+ * against this shape. */
234
+ export function buildEntityDocData(entity, opts) {
235
+ const strategy = opts.columnNamingStrategy ?? "snake_case";
236
+ const root = opts.loadedRoot;
237
+ const primary = entity.primaryIdentity();
238
+ const pkFields = primary?.fields ?? [];
239
+ const pkFieldNames = new Set(pkFields);
240
+ const fkMap = buildFkMap(entity, root);
241
+ // ---- Storage rows
242
+ const storageRows = entity.fields().map((field) => {
243
+ const spec = mapColumnType(field, opts.dialect, strategy);
244
+ const tsType = tsTypeForStorage(entity, field, pkFieldNames);
245
+ const tsTypeCell = tsType.split("|").map((s) => s.trim()).join(" \\| ");
246
+ const sqlExpr = sqlColumnExpr(spec);
247
+ const cons = constraintsCell(entity, field, pkFieldNames, fkMap);
248
+ const tsTypeCellStr = `\`${tsTypeCell}\``;
249
+ const sqlExprCellStr = `\`${sqlExpr}\``;
250
+ return {
251
+ name: field.name,
252
+ tsTypeCell: tsTypeCellStr,
253
+ sqlExprCell: sqlExprCellStr,
254
+ constraintsCell: cons,
255
+ rowLine: `| \`${field.name}\` | ${tsTypeCellStr} | ${sqlExprCellStr} | ${cons} |`,
256
+ };
257
+ });
258
+ const isValue = entity.subType === OBJECT_SUBTYPE_VALUE;
259
+ const hasStorage = !isValue && hasWritableRdbSource(entity);
260
+ // ---- Identities
261
+ const ids = entity.identities();
262
+ const identities = ids.length > 0
263
+ ? ids.map((id) => ({ bullet: describeIdentity(id) }))
264
+ : undefined;
265
+ // ---- Relationships
266
+ const rels = entity.relationships();
267
+ const relationships = rels.length > 0
268
+ ? rels.map((r) => ({ bullet: relationshipBullet(r) }))
269
+ : undefined;
270
+ // ---- Validation
271
+ const lower = entity.name.charAt(0).toLowerCase() + entity.name.slice(1);
272
+ const validation = {
273
+ insertSchema: `${entity.name}InsertSchema`,
274
+ updateSchema: `${entity.name}UpdateSchema`,
275
+ entityFile: `${entity.name}.ts`,
276
+ lower,
277
+ };
278
+ // ---- UsedBy
279
+ const usedByMatches = [];
280
+ for (const child of root.ownChildren()) {
281
+ if (child.type !== TYPE_TEMPLATE)
282
+ continue;
283
+ const ref = child.ownAttr(TEMPLATE_ATTR_PAYLOAD_REF);
284
+ if (typeof ref !== "string")
285
+ continue;
286
+ if (stripPackage(ref) !== entity.name)
287
+ continue;
288
+ usedByMatches.push({
289
+ bullet: `\`template.${child.subType} ${child.name}\` — uses \`${entity.name}\` as \`@payloadRef\``,
290
+ });
291
+ }
292
+ const usedBy = usedByMatches.length > 0 ? usedByMatches : undefined;
293
+ // ---- Generated
294
+ const gens = opts.generatorNames ?? new Set();
295
+ const generated = [];
296
+ generated.push({
297
+ filename: `${entity.name}.ts`,
298
+ description: "Drizzle table, Zod schemas, type aliases, enum literal unions.",
299
+ });
300
+ if (gens.has("queries-file") && !isValue) {
301
+ generated.push({
302
+ filename: `${entity.name}.queries.ts`,
303
+ description: "typed CRUD helpers (find / list / create / update / delete; takes `db` as first param per ADR-0008).",
304
+ });
305
+ }
306
+ if (gens.has("routes-file") && !isValue) {
307
+ generated.push({
308
+ filename: `${entity.name}.routes.ts`,
309
+ description: `Fastify CRUD-5 route registration (\`register${entity.name}Routes\`).`,
310
+ });
311
+ }
312
+ if (gens.has("routes-file-hono") && !isValue) {
313
+ generated.push({
314
+ filename: `${entity.name}.routes.hono.ts`,
315
+ description: `Hono CRUD-5 route registration (\`register${entity.name}Routes\`).`,
316
+ });
317
+ }
318
+ // Preamble header — built up exactly as the legacy emitter did.
319
+ const preambleLines = [];
320
+ const typeStr = `${entity.type}.${entity.subType}`;
321
+ preambleLines.push(`**Type:** \`${typeStr}\``);
322
+ const src = sourceLine(entity);
323
+ if (src !== undefined)
324
+ preambleLines.push(`**Source:** \`${src}\``);
325
+ if (entity.package !== undefined && entity.package !== "") {
326
+ preambleLines.push(`**Package:** \`${entity.package}\``);
327
+ }
328
+ const preambleHeader = preambleLines.join("\n");
329
+ // Description quote — each line of the description prefixed with "> ".
330
+ const desc = entityDescription(entity);
331
+ let descriptionQuote;
332
+ if (desc !== undefined) {
333
+ descriptionQuote = desc.split("\n").map((l) => `> ${l}`.trimEnd()).join("\n");
334
+ }
335
+ const data = {
336
+ generatedMarker: `<!-- ${GENERATED_HEADER} — DO NOT EDIT. -->`,
337
+ entity: {
338
+ name: entity.name,
339
+ type: typeStr,
340
+ },
341
+ preambleHeader,
342
+ validation,
343
+ generated,
344
+ };
345
+ if (desc !== undefined)
346
+ data.entity.description = desc;
347
+ if (descriptionQuote !== undefined)
348
+ data.descriptionQuote = descriptionQuote;
349
+ if (src !== undefined)
350
+ data.entity.source = src;
351
+ if (entity.package !== undefined && entity.package !== "") {
352
+ data.entity.package = entity.package;
353
+ }
354
+ if (hasStorage) {
355
+ data.storage = {
356
+ tableHeader: "| Field | TypeScript type | SQL column | Constraints |\n|---|---|---|---|",
357
+ rows: storageRows,
358
+ };
359
+ data.hasStorage = true;
360
+ }
361
+ if (identities !== undefined) {
362
+ data.identities = identities;
363
+ data.hasIdentities = true;
364
+ }
365
+ if (relationships !== undefined) {
366
+ data.relationships = relationships;
367
+ data.hasRelationships = true;
368
+ }
369
+ if (usedBy !== undefined) {
370
+ data.usedBy = usedBy;
371
+ data.hasUsedBy = true;
372
+ }
373
+ return data;
374
+ }
375
+ //# sourceMappingURL=docs-data-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-data-builder.js","sourceRoot":"","sources":["../../src/generators/docs-data-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /** One row in the Storage table — fully-rendered as a single Markdown table
2
+ * row. The escaping rules for pipe-inside-cell are non-trivial and live in
3
+ * the data builder, not the template, so templates stay trivial and the
4
+ * cross-port walk functions don't have to re-derive the rules. */
5
+ export interface StorageFieldDoc {
6
+ name: string;
7
+ tsTypeCell: string;
8
+ sqlExprCell: string;
9
+ constraintsCell: string;
10
+ /** Pre-rendered full Markdown table row, e.g.
11
+ * "| `id` | `number` | `integer(\"id\")` | primary key |"
12
+ * Templates emit this verbatim via `{{{rowLine}}}`. */
13
+ rowLine: string;
14
+ }
15
+ export interface IdentityDoc {
16
+ /** Pre-formatted bullet text — e.g.
17
+ * "**Primary key:** `id` — generation: `increment`"
18
+ * (Carrying the fully-rendered string keeps the template trivial; the
19
+ * identity rendering rules are non-trivial and live in the builder.) */
20
+ bullet: string;
21
+ }
22
+ export interface RelationshipDoc {
23
+ /** Pre-formatted bullet text — e.g.
24
+ * "- `posts` — one-to-many → `Post` (composition)" */
25
+ bullet: string;
26
+ }
27
+ export interface UsedByDoc {
28
+ /** Pre-formatted bullet text. */
29
+ bullet: string;
30
+ }
31
+ export interface GeneratedFileDoc {
32
+ filename: string;
33
+ description: string;
34
+ }
35
+ export interface EntityDocData {
36
+ /** Auto-emitted by the templateGenerator; templates may also echo it for
37
+ * human readers. Format: `<!-- @generated by @metaobjectsdev/codegen-ts —
38
+ * DO NOT EDIT. -->`. */
39
+ generatedMarker: string;
40
+ /** The entity preamble. */
41
+ entity: {
42
+ name: string;
43
+ type: string;
44
+ source?: string;
45
+ package?: string;
46
+ description?: string;
47
+ };
48
+ /** Description as a blockquote (one `> ` per line). Present iff description
49
+ * is present. Pre-rendered so multi-line descriptions don't have to be
50
+ * expressed as Mustache structural constructs. */
51
+ descriptionQuote?: string;
52
+ /** Multi-line preamble block: Type / Source? / Package?, one per line,
53
+ * in the exact order matching the legacy emitter. Always present. */
54
+ preambleHeader: string;
55
+ /** Storage section. Present iff the entity has a writable rdb source and
56
+ * is NOT object.value. */
57
+ storage?: {
58
+ /** Pre-rendered "| Field | ... |\n|---|---|---|---|" header pair. */
59
+ tableHeader: string;
60
+ rows: StorageFieldDoc[];
61
+ };
62
+ /** Identity section bullets — empty array iff section is omitted. Templates
63
+ * check `hasIdentities` (boolean) to decide whether to emit the section
64
+ * header; iterate `identities` for the bullets. (Splitting "is the section
65
+ * present?" from "iterate the bullets" works around Mustache's lack of an
66
+ * "is non-empty array" primitive.) */
67
+ identities?: IdentityDoc[];
68
+ hasIdentities?: boolean;
69
+ /** Relationships section — same pattern as identities. */
70
+ relationships?: RelationshipDoc[];
71
+ hasRelationships?: boolean;
72
+ /** Validation section — always emitted. */
73
+ validation: {
74
+ insertSchema: string;
75
+ updateSchema: string;
76
+ entityFile: string;
77
+ lower: string;
78
+ };
79
+ /** "Used by" — present iff any templates declare @payloadRef → this entity. */
80
+ usedBy?: UsedByDoc[];
81
+ hasUsedBy?: boolean;
82
+ /** Storage section presence flag — same pattern as identities. */
83
+ hasStorage?: boolean;
84
+ /** Generated-code section — always emitted (at minimum the entity file). */
85
+ generated: GeneratedFileDoc[];
86
+ }
87
+ //# sourceMappingURL=docs-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-data.d.ts","sourceRoot":"","sources":["../../src/generators/docs-data.ts"],"names":[],"mappings":"AAYA;;;mEAGmE;AACnE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB;;4DAEwD;IACxD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B;;;6EAGyE;IACzE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B;6DACyD;IACzD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B;;6BAEyB;IACzB,eAAe,EAAE,MAAM,CAAC;IAExB,2BAA2B;IAC3B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF;;uDAEmD;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;0EACsE;IACtE,cAAc,EAAE,MAAM,CAAC;IAEvB;+BAC2B;IAC3B,OAAO,CAAC,EAAE;QACR,qEAAqE;QACrE,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,eAAe,EAAE,CAAC;KACzB,CAAC;IAEF;;;;2CAIuC;IACvC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,2CAA2C;IAC3C,UAAU,EAAE;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,+EAA+E;IAC/E,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,kEAAkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,4EAA4E;IAC5E,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B"}
@@ -0,0 +1,13 @@
1
+ // Data-dict shapes for the docs templates — the public contract template
2
+ // authors consume. Versioned per MO major; deprecated before removal.
3
+ //
4
+ // Per the template-driven codegen design (D3 — data-shape stability), these
5
+ // types ARE a public API. Template authors who write custom Mustache files
6
+ // for `docs/entity-page.md` (or any of the partials) reference these keys.
7
+ //
8
+ // Today's docsFile() refactor populates EntityDocData from MetaObject + the
9
+ // existing column-mapper / source-detect / enum-meta helpers. Cross-port
10
+ // implementations (C#, Java, Kotlin, Python) emit the same shape so a single
11
+ // set of Mustache templates can drive every port's docs codegen.
12
+ export {};
13
+ //# sourceMappingURL=docs-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-data.js","sourceRoot":"","sources":["../../src/generators/docs-data.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,sEAAsE;AACtE,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,EAAE;AACF,4EAA4E;AAC5E,yEAAyE;AACzE,6EAA6E;AAC7E,iEAAiE"}
@@ -1,5 +1,5 @@
1
1
  import type { MetaObject } from "@metaobjectsdev/metadata";
2
- import { type GeneratorFactory } from "../generator.js";
2
+ import type { GeneratorFactory } from "../generator.js";
3
3
  export interface DocsFileOpts {
4
4
  filter?: (entity: MetaObject) => boolean;
5
5
  target?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"docs-file.d.ts","sourceRoot":"","sources":["../../src/generators/docs-file.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAInF,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,QAAQ,EA+BhB,gBAAgB,CAAC,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"docs-file.d.ts","sourceRoot":"","sources":["../../src/generators/docs-file.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAa,gBAAgB,EAAc,MAAM,iBAAiB,CAAC;AAQ/E,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAYD,eAAO,MAAM,QAAQ,EA+ChB,gBAAgB,CAAC,YAAY,CAAC,CAAC"}
@@ -1,52 +1,69 @@
1
1
  // docsFile() — emits `<Entity>.md` next to each generated entity module.
2
2
  //
3
- // Markdown is port-agnostic: the same metadata produces the same documentation
4
- // page regardless of dialect, output layout, or runtime target. The page covers
5
- // description / type / source / package preamble; storage table + identity +
6
- // relationships for table-backed entities; validation entry points; "used by"
7
- // template cross-references; and the generated-code surface (which sibling
8
- // files codegen produces). See `templates/docs-file.ts` for the body.
9
- import { perEntity } from "../generator.js";
10
- import { renderDocsFile } from "../templates/docs-file.js";
3
+ // rc.12+: refactored to use templateGenerator(). The Markdown structure now
4
+ // lives in `templates/docs/entity-page.md.mustache`; the data extraction lives
5
+ // in `buildEntityDocData()`. Adopters can override the framework template by
6
+ // dropping their own `templates/docs/entity-page.md.mustache` into the project
7
+ // root (resolved via the project-then-framework provider chain).
8
+ //
9
+ // The conformance fixture (`fixtures/conformance/docs-file-basic`) gates
10
+ // byte-identity through the refactor — the codegen output must match the
11
+ // hand-coded rc.11 byte-for-byte. If you're hacking on this and the
12
+ // conformance test breaks, the refactor is the bug, not the fixture.
11
13
  import { entityOutputPath } from "../import-path.js";
14
+ import { templateGenerator, } from "./template-generator.js";
15
+ import { buildEntityDocData } from "./docs-data-builder.js";
16
+ /** The names of the generators that may emit sibling files for an entity.
17
+ * We always list them in the "Generated code" section — adopters cross-
18
+ * reference their own metaobjects.config.ts to confirm which are wired in.
19
+ * Matches the rc.11 behavior. */
20
+ const KNOWN_SIBLING_GENERATORS = new Set([
21
+ "queries-file",
22
+ "routes-file",
23
+ "routes-file-hono",
24
+ ]);
12
25
  export const docsFile = function docsFile(opts) {
26
+ // We can't fully delegate to templateGenerator's `walk(root)` because the
27
+ // per-entity output path depends on the runtime `outputLayout` (flat /
28
+ // package), which only lives on `GenContext.config`. So docsFile wraps
29
+ // templateGenerator and threads ctx through.
30
+ const tgOpts = {
31
+ name: "docs-file",
32
+ template: "docs/entity-page.md",
33
+ format: "markdown",
34
+ walk: () => [], // placeholder — real walk happens inside generate() below
35
+ };
36
+ const inner = templateGenerator(tgOpts);
13
37
  const generator = {
14
38
  name: "docs-file",
15
- generate: perEntity((entity, ctx) => {
39
+ async generate(ctx) {
16
40
  if (!ctx.renderContext) {
17
41
  throw new Error("docs-file: renderContext is required (provided by runGen)");
18
42
  }
19
43
  const rc = ctx.renderContext;
20
- const generatorNames = readGeneratorNames(ctx);
21
- return {
22
- path: entityOutputPath(ctx.config.outputLayout ?? "flat", entity.package, `${entity.name}.md`),
23
- content: renderDocsFile(entity, {
44
+ // Drive the templateGenerator by populating its walk via closure.
45
+ const realWalk = (root) => root.objects().filter(ctx.matches).map((entity) => ({
46
+ data: buildEntityDocData(entity, {
24
47
  dialect: rc.dialect,
25
- columnNamingStrategy: rc.columnNamingStrategy,
48
+ ...(rc.columnNamingStrategy !== undefined
49
+ ? { columnNamingStrategy: rc.columnNamingStrategy }
50
+ : {}),
26
51
  loadedRoot: rc.loadedRoot,
27
- generatorNames,
52
+ generatorNames: KNOWN_SIBLING_GENERATORS,
28
53
  }),
29
- };
30
- }),
54
+ outputPath: entityOutputPath(ctx.config.outputLayout ?? "flat", entity.package, `${entity.name}.md`),
55
+ }));
56
+ // Hot-swap walk on the underlying templateGenerator. (The factory
57
+ // closes over `opts.walk`, so we mutate the options object's walk
58
+ // reference here.)
59
+ tgOpts.walk = realWalk;
60
+ return inner.generate(ctx);
61
+ },
31
62
  };
32
- if (opts?.filter) {
63
+ if (opts?.filter)
33
64
  generator.filter = opts.filter;
34
- }
35
- if (opts?.target) {
65
+ if (opts?.target)
36
66
  generator.target = opts.target;
37
- }
38
67
  return generator;
39
68
  };
40
- /**
41
- * `GenContext` does not currently carry the full generator list — that lives on
42
- * the resolved config inside the runner. Rather than thread a new field through
43
- * just to populate one optional markdown section, we always list every
44
- * potential companion. The "Generated code" section becomes "files that may be
45
- * generated alongside this one" — adopters cross-reference their own
46
- * `metaobjects.config.ts` to confirm which they actually wired in. This matches
47
- * the spec guidance "list them all and let the reader figure out which exist."
48
- */
49
- function readGeneratorNames(_ctx) {
50
- return new Set(["queries-file", "routes-file", "routes-file-hono"]);
51
- }
52
69
  //# sourceMappingURL=docs-file.js.map