@metaobjectsdev/codegen-ts 0.7.0-rc.9 → 0.8.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.
Files changed (108) hide show
  1. package/dist/generator.d.ts +9 -0
  2. package/dist/generator.d.ts.map +1 -1
  3. package/dist/generator.js.map +1 -1
  4. package/dist/generators/docs-data-builder.d.ts +16 -0
  5. package/dist/generators/docs-data-builder.d.ts.map +1 -0
  6. package/dist/generators/docs-data-builder.js +381 -0
  7. package/dist/generators/docs-data-builder.js.map +1 -0
  8. package/dist/generators/docs-data.d.ts +98 -0
  9. package/dist/generators/docs-data.d.ts.map +1 -0
  10. package/dist/generators/docs-data.js +43 -0
  11. package/dist/generators/docs-data.js.map +1 -0
  12. package/dist/generators/docs-file.d.ts +8 -0
  13. package/dist/generators/docs-file.d.ts.map +1 -0
  14. package/dist/generators/docs-file.js +77 -0
  15. package/dist/generators/docs-file.js.map +1 -0
  16. package/dist/generators/entity-file.d.ts.map +1 -1
  17. package/dist/generators/entity-file.js +7 -0
  18. package/dist/generators/entity-file.js.map +1 -1
  19. package/dist/generators/index.d.ts +5 -0
  20. package/dist/generators/index.d.ts.map +1 -1
  21. package/dist/generators/index.js +4 -0
  22. package/dist/generators/index.js.map +1 -1
  23. package/dist/generators/output-prompt-file.d.ts +9 -0
  24. package/dist/generators/output-prompt-file.d.ts.map +1 -0
  25. package/dist/generators/output-prompt-file.js +51 -0
  26. package/dist/generators/output-prompt-file.js.map +1 -0
  27. package/dist/generators/template-generator.d.ts +41 -0
  28. package/dist/generators/template-generator.d.ts.map +1 -0
  29. package/dist/generators/template-generator.js +62 -0
  30. package/dist/generators/template-generator.js.map +1 -0
  31. package/dist/index.d.ts +7 -2
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +8 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/instance-artifacts.d.ts +29 -0
  36. package/dist/instance-artifacts.d.ts.map +1 -0
  37. package/dist/instance-artifacts.js +57 -0
  38. package/dist/instance-artifacts.js.map +1 -0
  39. package/dist/metaobjects-config.d.ts +10 -0
  40. package/dist/metaobjects-config.d.ts.map +1 -1
  41. package/dist/metaobjects-config.js +1 -0
  42. package/dist/metaobjects-config.js.map +1 -1
  43. package/dist/overwrite-policy.d.ts +39 -2
  44. package/dist/overwrite-policy.d.ts.map +1 -1
  45. package/dist/overwrite-policy.js +233 -13
  46. package/dist/overwrite-policy.js.map +1 -1
  47. package/dist/render-context.d.ts +4 -1
  48. package/dist/render-context.d.ts.map +1 -1
  49. package/dist/render-context.js +1 -0
  50. package/dist/render-context.js.map +1 -1
  51. package/dist/render-engine/framework-provider.d.ts +28 -0
  52. package/dist/render-engine/framework-provider.d.ts.map +1 -0
  53. package/dist/render-engine/framework-provider.js +104 -0
  54. package/dist/render-engine/framework-provider.js.map +1 -0
  55. package/dist/runner.d.ts +15 -1
  56. package/dist/runner.d.ts.map +1 -1
  57. package/dist/runner.js +45 -6
  58. package/dist/runner.js.map +1 -1
  59. package/dist/templates/docs-file.d.ts +17 -0
  60. package/dist/templates/docs-file.d.ts.map +1 -0
  61. package/dist/templates/docs-file.js +37 -0
  62. package/dist/templates/docs-file.js.map +1 -0
  63. package/dist/templates/entity-file.d.ts.map +1 -1
  64. package/dist/templates/entity-file.js +12 -0
  65. package/dist/templates/entity-file.js.map +1 -1
  66. package/dist/templates/fr010-field-mapping.d.ts +28 -0
  67. package/dist/templates/fr010-field-mapping.d.ts.map +1 -0
  68. package/dist/templates/fr010-field-mapping.js +170 -0
  69. package/dist/templates/fr010-field-mapping.js.map +1 -0
  70. package/dist/templates/output-format-spec-emitter.d.ts +4 -0
  71. package/dist/templates/output-format-spec-emitter.d.ts.map +1 -0
  72. package/dist/templates/output-format-spec-emitter.js +60 -0
  73. package/dist/templates/output-format-spec-emitter.js.map +1 -0
  74. package/dist/templates/output-parser.d.ts.map +1 -1
  75. package/dist/templates/output-parser.js +69 -4
  76. package/dist/templates/output-parser.js.map +1 -1
  77. package/dist/templates/output-prompt.d.ts +10 -0
  78. package/dist/templates/output-prompt.d.ts.map +1 -0
  79. package/dist/templates/output-prompt.js +75 -0
  80. package/dist/templates/output-prompt.js.map +1 -0
  81. package/dist/templates/recover-schema-emitter.d.ts +8 -0
  82. package/dist/templates/recover-schema-emitter.d.ts.map +1 -0
  83. package/dist/templates/recover-schema-emitter.js +64 -0
  84. package/dist/templates/recover-schema-emitter.js.map +1 -0
  85. package/package.json +5 -5
  86. package/src/generator.ts +9 -0
  87. package/src/generators/docs-data-builder.ts +470 -0
  88. package/src/generators/docs-data.ts +154 -0
  89. package/src/generators/docs-file.ts +87 -0
  90. package/src/generators/entity-file.ts +7 -0
  91. package/src/generators/index.ts +17 -0
  92. package/src/generators/output-prompt-file.ts +66 -0
  93. package/src/generators/template-generator.ts +106 -0
  94. package/src/index.ts +34 -2
  95. package/src/instance-artifacts.ts +61 -0
  96. package/src/metaobjects-config.ts +11 -0
  97. package/src/overwrite-policy.ts +325 -14
  98. package/src/render-context.ts +5 -1
  99. package/src/render-engine/framework-provider.ts +107 -0
  100. package/src/runner.ts +66 -6
  101. package/src/templates/docs-file.ts +51 -0
  102. package/src/templates/entity-file.ts +13 -0
  103. package/src/templates/fr010-field-mapping.ts +191 -0
  104. package/src/templates/output-format-spec-emitter.ts +97 -0
  105. package/src/templates/output-parser.ts +77 -2
  106. package/src/templates/output-prompt.ts +88 -0
  107. package/src/templates/recover-schema-emitter.ts +91 -0
  108. package/templates/docs/entity-page.md.mustache +54 -0
@@ -22,6 +22,15 @@ export interface GenContext {
22
22
  * present at run time when invoked via runGen(); optional in the type
23
23
  * so tests and custom callers don't need a placeholder. */
24
24
  renderContext?: RenderContext;
25
+ /** Resolved absolute project root — what the runner derives from
26
+ * `opts.projectRoot` (the directory holding `.metaobjects/config.json`).
27
+ * Generators that resolve project-scoped resources (e.g.
28
+ * `templateGenerator` looking up the project's `templates/` directory)
29
+ * should read this rather than `process.cwd()`, which is whatever
30
+ * directory the CLI was invoked from and breaks when `meta gen` runs
31
+ * in a sub-directory. Undefined only when the runner was driven
32
+ * programmatically without an explicit projectRoot. */
33
+ projectRoot?: string;
25
34
  warn: (msg: string) => void;
26
35
  }
27
36
  export interface Generator {
@@ -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;AAEjE,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,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;CAC7B;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,sFAAsF;AACtF,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"}
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;AAEjE,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;CAC7B;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,sFAAsF;AACtF,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AA8CA,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,sFAAsF;AACtF,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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"AAuDA,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,sFAAsF;AACtF,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"}
@@ -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,EAIf,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;AAiPD;;0BAE0B;AAC1B,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,gBAAgB,GACrB,aAAa,CAmJf"}
@@ -0,0 +1,381 @@
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
+ // Walk validators once, bucket by subtype. We re-emit in the original
113
+ // emission order to preserve byte-identity with the docs-file-basic
114
+ // conformance fixture: regex pattern → maxLength-from-@maxLength →
115
+ // length-validator (min/max) → numeric-validator (min/max).
116
+ const maxLenAttr = field.ownAttr(FIELD_ATTR_MAX_LENGTH);
117
+ const regexParts = [];
118
+ const lengthParts = [];
119
+ const numericParts = [];
120
+ for (const v of field.validators()) {
121
+ if (v.subType === VALIDATOR_SUBTYPE_REGEX) {
122
+ const pattern = v.ownAttr(VALIDATOR_ATTR_PATTERN);
123
+ if (typeof pattern === "string" && pattern.length > 0) {
124
+ regexParts.push(`pattern \`${pattern}\``);
125
+ }
126
+ }
127
+ else if (v.subType === VALIDATOR_SUBTYPE_LENGTH) {
128
+ const min = v.ownAttr(VALIDATOR_ATTR_MIN);
129
+ const max = v.ownAttr(VALIDATOR_ATTR_MAX);
130
+ if (typeof min === "number")
131
+ lengthParts.push(`minLength: ${min}`);
132
+ if (typeof max === "number" && typeof maxLenAttr !== "number")
133
+ lengthParts.push(`maxLength: ${max}`);
134
+ }
135
+ else 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
+ numericParts.push(`min: ${min}`);
140
+ if (typeof max === "number")
141
+ numericParts.push(`max: ${max}`);
142
+ }
143
+ }
144
+ parts.push(...regexParts);
145
+ if (typeof maxLenAttr === "number") {
146
+ parts.push(`maxLength: ${maxLenAttr}`);
147
+ }
148
+ parts.push(...lengthParts, ...numericParts);
149
+ const fk = fkMap.get(field.name);
150
+ if (fk !== undefined) {
151
+ parts.push(`references \`${fk.targetEntity}.${fk.targetField}\``);
152
+ }
153
+ const def = field.ownAttr(FIELD_ATTR_DEFAULT);
154
+ if (def !== undefined) {
155
+ parts.push(`default: \`${String(def)}\``);
156
+ }
157
+ const sup = field.resolveSuper();
158
+ if (sup !== undefined) {
159
+ parts.push(`extends \`${sup.name}\``);
160
+ }
161
+ return parts.join(", ");
162
+ }
163
+ function buildFkMap(entity, root) {
164
+ const out = new Map();
165
+ for (const ref of entity.referenceIdentities()) {
166
+ const fkField = ref.fields[0];
167
+ const targetEntity = ref.targetEntity;
168
+ if (fkField === undefined || targetEntity === undefined)
169
+ continue;
170
+ const targetField = ref.resolvedTargetPkField(root) ?? "id";
171
+ out.set(fkField, { targetEntity: stripPackage(targetEntity), targetField });
172
+ }
173
+ return out;
174
+ }
175
+ function sourceLine(entity) {
176
+ const src = entity.source;
177
+ if (!src)
178
+ return undefined;
179
+ if ("files" in src && src.files.length > 0) {
180
+ return src.files[0];
181
+ }
182
+ if (src.format === "code") {
183
+ return src.caller !== undefined ? `(code) ${src.caller}` : "(code)";
184
+ }
185
+ return undefined;
186
+ }
187
+ function entityDescription(entity) {
188
+ const v = entity.attr(DOC_ATTR_DESCRIPTION);
189
+ return typeof v === "string" && v.length > 0 ? v : undefined;
190
+ }
191
+ function describeIdentity(id) {
192
+ const fields = id.fields;
193
+ const fieldList = fields.length === 1
194
+ ? `\`${fields[0]}\``
195
+ : `(${fields.map((f) => `\`${f}\``).join(", ")})`;
196
+ if (id.subType === IDENTITY_SUBTYPE_PRIMARY) {
197
+ const gen = id.ownAttr(IDENTITY_ATTR_GENERATION);
198
+ const genSuffix = typeof gen === "string" ? ` — generation: \`${gen}\`` : "";
199
+ return `**Primary key:** ${fieldList}${genSuffix}`;
200
+ }
201
+ if (id.subType === IDENTITY_SUBTYPE_SECONDARY) {
202
+ const uniqueText = id.unique ? "unique" : "non-unique";
203
+ return `**Secondary index:** ${fieldList} — ${uniqueText}`;
204
+ }
205
+ if (id.subType === IDENTITY_SUBTYPE_REFERENCE) {
206
+ // The subType discriminator guarantees the instance is a MetaReferenceIdentity;
207
+ // narrow to it so we can use its typed `referencesRaw` getter directly.
208
+ const raw = id.referencesRaw;
209
+ if (typeof raw === "string" && raw.length > 0) {
210
+ return `**Reference:** ${fieldList} → \`${raw}\``;
211
+ }
212
+ return `**Reference:** ${fieldList}`;
213
+ }
214
+ return `**Identity (${id.subType}):** ${fieldList}`;
215
+ }
216
+ function relationshipBullet(r) {
217
+ const cardinality = r.ownAttr(RELATIONSHIP_ATTR_CARDINALITY);
218
+ const card = typeof cardinality === "string" ? cardinality : "?";
219
+ const targetRaw = r.ownAttr(RELATIONSHIP_ATTR_OBJECT_REF);
220
+ const target = typeof targetRaw === "string" ? stripPackage(targetRaw) : "?";
221
+ const subtype = r.subType;
222
+ let label;
223
+ switch (subtype) {
224
+ case RELATIONSHIP_SUBTYPE_COMPOSITION:
225
+ label = "composition";
226
+ break;
227
+ case RELATIONSHIP_SUBTYPE_AGGREGATION:
228
+ label = "aggregation";
229
+ break;
230
+ case RELATIONSHIP_SUBTYPE_ASSOCIATION:
231
+ label = "association";
232
+ break;
233
+ default: label = subtype;
234
+ }
235
+ return `\`${r.name}\` — ${card} → \`${target}\` (${label})`;
236
+ }
237
+ /** Build the EntityDocData payload for one entity. The single public-API
238
+ * entry point exported by this module; the markdown template applies
239
+ * against this shape. */
240
+ export function buildEntityDocData(entity, opts) {
241
+ const strategy = opts.columnNamingStrategy ?? "snake_case";
242
+ const root = opts.loadedRoot;
243
+ const primary = entity.primaryIdentity();
244
+ const pkFields = primary?.fields ?? [];
245
+ const pkFieldNames = new Set(pkFields);
246
+ const fkMap = buildFkMap(entity, root);
247
+ // ---- Storage rows
248
+ const storageRows = entity.fields().map((field) => {
249
+ const spec = mapColumnType(field, opts.dialect, strategy);
250
+ const tsType = tsTypeForStorage(entity, field, pkFieldNames);
251
+ const tsTypeCell = tsType.split("|").map((s) => s.trim()).join(" \\| ");
252
+ const sqlExpr = sqlColumnExpr(spec);
253
+ const cons = constraintsCell(entity, field, pkFieldNames, fkMap);
254
+ const tsTypeCellStr = `\`${tsTypeCell}\``;
255
+ const sqlExprCellStr = `\`${sqlExpr}\``;
256
+ return {
257
+ name: field.name,
258
+ tsTypeCell: tsTypeCellStr,
259
+ sqlExprCell: sqlExprCellStr,
260
+ constraintsCell: cons,
261
+ rowLine: `| \`${field.name}\` | ${tsTypeCellStr} | ${sqlExprCellStr} | ${cons} |`,
262
+ };
263
+ });
264
+ const isValue = entity.subType === OBJECT_SUBTYPE_VALUE;
265
+ const hasStorage = !isValue && hasWritableRdbSource(entity);
266
+ // ---- Identities
267
+ const ids = entity.identities();
268
+ const identities = ids.length > 0
269
+ ? ids.map((id) => ({ bullet: describeIdentity(id) }))
270
+ : undefined;
271
+ // ---- Relationships
272
+ const rels = entity.relationships();
273
+ const relationships = rels.length > 0
274
+ ? rels.map((r) => ({ bullet: relationshipBullet(r) }))
275
+ : undefined;
276
+ // ---- Validation
277
+ const lower = entity.name.charAt(0).toLowerCase() + entity.name.slice(1);
278
+ const validation = {
279
+ insertSchema: `${entity.name}InsertSchema`,
280
+ updateSchema: `${entity.name}UpdateSchema`,
281
+ entityFile: `${entity.name}.ts`,
282
+ lower,
283
+ };
284
+ // ---- UsedBy
285
+ const usedByMatches = [];
286
+ for (const child of root.ownChildren()) {
287
+ if (child.type !== TYPE_TEMPLATE)
288
+ continue;
289
+ const ref = child.ownAttr(TEMPLATE_ATTR_PAYLOAD_REF);
290
+ if (typeof ref !== "string")
291
+ continue;
292
+ if (stripPackage(ref) !== entity.name)
293
+ continue;
294
+ usedByMatches.push({
295
+ bullet: `\`template.${child.subType} ${child.name}\` — uses \`${entity.name}\` as \`@payloadRef\``,
296
+ });
297
+ }
298
+ const usedBy = usedByMatches.length > 0 ? usedByMatches : undefined;
299
+ // ---- Generated
300
+ const gens = opts.generatorNames ?? new Set();
301
+ const generated = [];
302
+ generated.push({
303
+ filename: `${entity.name}.ts`,
304
+ description: "Drizzle table, Zod schemas, type aliases, enum literal unions.",
305
+ });
306
+ if (gens.has("queries-file") && !isValue) {
307
+ generated.push({
308
+ filename: `${entity.name}.queries.ts`,
309
+ description: "typed CRUD helpers (find / list / create / update / delete; takes `db` as first param per ADR-0008).",
310
+ });
311
+ }
312
+ if (gens.has("routes-file") && !isValue) {
313
+ generated.push({
314
+ filename: `${entity.name}.routes.ts`,
315
+ description: `Fastify CRUD-5 route registration (\`register${entity.name}Routes\`).`,
316
+ });
317
+ }
318
+ if (gens.has("routes-file-hono") && !isValue) {
319
+ generated.push({
320
+ filename: `${entity.name}.routes.hono.ts`,
321
+ description: `Hono CRUD-5 route registration (\`register${entity.name}Routes\`).`,
322
+ });
323
+ }
324
+ // Preamble header — built up exactly as the legacy emitter did.
325
+ const preambleLines = [];
326
+ const typeStr = `${entity.type}.${entity.subType}`;
327
+ preambleLines.push(`**Type:** \`${typeStr}\``);
328
+ const src = sourceLine(entity);
329
+ if (src !== undefined)
330
+ preambleLines.push(`**Source:** \`${src}\``);
331
+ if (entity.package !== undefined && entity.package !== "") {
332
+ preambleLines.push(`**Package:** \`${entity.package}\``);
333
+ }
334
+ const preambleHeader = preambleLines.join("\n");
335
+ // Description quote — each line of the description prefixed with "> ".
336
+ const desc = entityDescription(entity);
337
+ let descriptionQuote;
338
+ if (desc !== undefined) {
339
+ descriptionQuote = desc.split("\n").map((l) => `> ${l}`.trimEnd()).join("\n");
340
+ }
341
+ const data = {
342
+ generatedMarker: `<!-- ${GENERATED_HEADER} — DO NOT EDIT. -->`,
343
+ entity: {
344
+ name: entity.name,
345
+ type: typeStr,
346
+ },
347
+ preambleHeader,
348
+ validation,
349
+ generated,
350
+ };
351
+ if (desc !== undefined)
352
+ data.entity.description = desc;
353
+ if (descriptionQuote !== undefined)
354
+ data.descriptionQuote = descriptionQuote;
355
+ if (src !== undefined)
356
+ data.entity.source = src;
357
+ if (entity.package !== undefined && entity.package !== "") {
358
+ data.entity.package = entity.package;
359
+ }
360
+ if (hasStorage) {
361
+ data.storage = {
362
+ tableHeader: "| Field | TypeScript type | SQL column | Constraints |\n|---|---|---|---|",
363
+ rows: storageRows,
364
+ };
365
+ data.hasStorage = true;
366
+ }
367
+ if (identities !== undefined) {
368
+ data.identities = identities;
369
+ data.hasIdentities = true;
370
+ }
371
+ if (relationships !== undefined) {
372
+ data.relationships = relationships;
373
+ data.hasRelationships = true;
374
+ }
375
+ if (usedBy !== undefined) {
376
+ data.usedBy = usedBy;
377
+ data.hasUsedBy = true;
378
+ }
379
+ return data;
380
+ }
381
+ //# 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,98 @@
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
+ /** @markdown — already escaped TS type, with backticks. */
8
+ tsTypeCell: string;
9
+ /** @markdown — already escaped SQL expression, wrapped in backticks. */
10
+ sqlExprCell: string;
11
+ /** @markdown — already-formatted constraints text. */
12
+ constraintsCell: string;
13
+ /** @markdown — pre-rendered full Markdown table row, e.g.
14
+ * "| `id` | `number` | `integer(\"id\")` | primary key |"
15
+ * Templates emit this verbatim via `{{{rowLine}}}`. */
16
+ rowLine: string;
17
+ }
18
+ export interface IdentityDoc {
19
+ /** @markdown — pre-formatted bullet text — e.g.
20
+ * "**Primary key:** `id` — generation: `increment`"
21
+ * (Carrying the fully-rendered string keeps the template trivial; the
22
+ * identity rendering rules are non-trivial and live in the builder.) */
23
+ bullet: string;
24
+ }
25
+ export interface RelationshipDoc {
26
+ /** @markdown — pre-formatted bullet text — e.g.
27
+ * "- `posts` — one-to-many → `Post` (composition)" */
28
+ bullet: string;
29
+ }
30
+ export interface UsedByDoc {
31
+ /** @markdown — pre-formatted bullet text. */
32
+ bullet: string;
33
+ }
34
+ export interface GeneratedFileDoc {
35
+ filename: string;
36
+ description: string;
37
+ }
38
+ export interface EntityDocData {
39
+ /** @markdown — auto-emitted by the templateGenerator; templates may also
40
+ * echo it for human readers. Format: `<!-- @generated by
41
+ * @metaobjectsdev/codegen-ts — DO NOT EDIT. -->`. */
42
+ generatedMarker: string;
43
+ /** The entity preamble — RAW (not Markdown-flavored). Custom non-Markdown
44
+ * templates can rely on these fields. */
45
+ entity: {
46
+ name: string;
47
+ type: string;
48
+ source?: string;
49
+ package?: string;
50
+ description?: string;
51
+ };
52
+ /** @markdown — description as a blockquote (one `> ` per line). Present
53
+ * iff `entity.description` is present. Pre-rendered so multi-line
54
+ * descriptions don't have to be expressed as Mustache structural
55
+ * constructs. */
56
+ descriptionQuote?: string;
57
+ /** @markdown — multi-line preamble block: Type / Source? / Package?, one
58
+ * per line, in the exact order matching the legacy emitter. Always
59
+ * present. */
60
+ preambleHeader: string;
61
+ /** Storage section. Present iff the entity has a writable rdb source and
62
+ * is NOT object.value. */
63
+ storage?: {
64
+ /** @markdown — pre-rendered "| Field | ... |\n|---|---|---|---|" header
65
+ * pair. */
66
+ tableHeader: string;
67
+ rows: StorageFieldDoc[];
68
+ };
69
+ /** Identity section bullets — empty array iff section is omitted.
70
+ * See the "Mustache idiom note" at the top of this file for why this
71
+ * ships alongside a parallel `hasIdentities` boolean. */
72
+ identities?: IdentityDoc[];
73
+ /** Present-and-non-empty flag for the identities section. See the
74
+ * "Mustache idiom note" at the top of this file. */
75
+ hasIdentities?: boolean;
76
+ /** Relationships section — same list+flag pattern as identities. */
77
+ relationships?: RelationshipDoc[];
78
+ /** Present-and-non-empty flag for the relationships section. */
79
+ hasRelationships?: boolean;
80
+ /** Validation section — RAW (not Markdown-flavored). Always emitted.
81
+ * Custom non-Markdown templates can rely on these fields. */
82
+ validation: {
83
+ insertSchema: string;
84
+ updateSchema: string;
85
+ entityFile: string;
86
+ lower: string;
87
+ };
88
+ /** "Used by" — present iff any templates declare `@payloadRef` → this
89
+ * entity. Same list+flag pattern as identities. */
90
+ usedBy?: UsedByDoc[];
91
+ /** Present-and-non-empty flag for the usedBy section. */
92
+ hasUsedBy?: boolean;
93
+ /** Present flag for the storage section. */
94
+ hasStorage?: boolean;
95
+ /** Generated-code section — always emitted (at minimum the entity file). */
96
+ generated: GeneratedFileDoc[];
97
+ }
98
+ //# 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":"AA0CA;;;mEAGmE;AACnE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,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,6CAA6C;IAC7C,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;;0DAEsD;IACtD,eAAe,EAAE,MAAM,CAAC;IAExB;8CAC0C;IAC1C,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;;;sBAGkB;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;mBAEe;IACf,cAAc,EAAE,MAAM,CAAC;IAEvB;+BAC2B;IAC3B,OAAO,CAAC,EAAE;QACR;oBACY;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,eAAe,EAAE,CAAC;KACzB,CAAC;IAEF;;8DAE0D;IAC1D,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3B;yDACqD;IACrD,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,oEAAoE;IACpE,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;IAClC,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;kEAC8D;IAC9D,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;wDACoD;IACpD,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,yDAAyD;IACzD,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,4EAA4E;IAC5E,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B"}
@@ -0,0 +1,43 @@
1
+ // Data-dict shapes for the docs templates — the public contract template
2
+ // authors consume. Versioned per MO major; deprecated before removal.
3
+ //
4
+ // ## Stability contract (v1)
5
+ //
6
+ // Per the template-driven codegen design (D3 — data-shape stability), these
7
+ // types ARE a public API. Template authors who write custom Mustache files
8
+ // for `docs/entity-page.md` (or any of the partials) reference these keys.
9
+ //
10
+ // `EntityDocData` is the **Markdown-flavored** data shape — it intentionally
11
+ // mixes raw structural fields (entity, validation, generated) with
12
+ // **pre-rendered Markdown fragments** so cross-port walk functions (TS,
13
+ // Python, C#, Java, Kotlin) don't have to re-derive the same escaping rules
14
+ // (pipe-inside-cell escapes, backtick wrapping, identity bullets,
15
+ // description blockquotes). Fields whose JSDoc carries a `@markdown` tag
16
+ // encode Markdown-specific layout decisions and are stable for the v1
17
+ // contract; they are NOT useful for non-Markdown output (HTML, JSON, plain
18
+ // text).
19
+ //
20
+ // A consumer writing a custom Mustache template with **different table
21
+ // columns** or a **different output format** today must compose their own
22
+ // data from `MetaObject` directly — the v1 shape does not expose a
23
+ // structural-only layer. A future `EntityDocStructure` (raw fields only,
24
+ // no Markdown) may ship in v2 if a real adopter needs that surface; the
25
+ // split is deliberately deferred until then.
26
+ //
27
+ // ## Cross-port consistency
28
+ //
29
+ // Today's docsFile() refactor populates EntityDocData from MetaObject + the
30
+ // existing column-mapper / source-detect / enum-meta helpers. Cross-port
31
+ // implementations (C#, Java, Kotlin, Python) emit the same shape so a single
32
+ // set of Mustache templates can drive every port's docs codegen.
33
+ //
34
+ // ## Mustache idiom note
35
+ //
36
+ // Some sections carry both a list and a parallel `has*` boolean. The flag is
37
+ // only present to work around Mustache's lack of an "is non-empty array"
38
+ // primitive (`{{#identities}}` iterates but doesn't gate a wrapping section
39
+ // header). A future render engine version may let templates use
40
+ // `{{#identities.0}}` for the same effect, at which point the flag fields
41
+ // can be deprecated.
42
+ export {};
43
+ //# 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,6BAA6B;AAC7B,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,EAAE;AACF,6EAA6E;AAC7E,mEAAmE;AACnE,wEAAwE;AACxE,4EAA4E;AAC5E,kEAAkE;AAClE,yEAAyE;AACzE,sEAAsE;AACtE,2EAA2E;AAC3E,SAAS;AACT,EAAE;AACF,uEAAuE;AACvE,0EAA0E;AAC1E,mEAAmE;AACnE,yEAAyE;AACzE,wEAAwE;AACxE,6CAA6C;AAC7C,EAAE;AACF,4BAA4B;AAC5B,EAAE;AACF,4EAA4E;AAC5E,yEAAyE;AACzE,6EAA6E;AAC7E,iEAAiE;AACjE,EAAE;AACF,yBAAyB;AACzB,EAAE;AACF,6EAA6E;AAC7E,yEAAyE;AACzE,4EAA4E;AAC5E,gEAAgE;AAChE,0EAA0E;AAC1E,qBAAqB"}
@@ -0,0 +1,8 @@
1
+ import type { MetaObject } from "@metaobjectsdev/metadata";
2
+ import type { GeneratorFactory } from "../generator.js";
3
+ export interface DocsFileOpts {
4
+ filter?: (entity: MetaObject) => boolean;
5
+ target?: string;
6
+ }
7
+ export declare const docsFile: GeneratorFactory<DocsFileOpts>;
8
+ //# sourceMappingURL=docs-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-file.d.ts","sourceRoot":"","sources":["../../src/generators/docs-file.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,KAAK,EAAa,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKnE,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAcD,eAAO,MAAM,QAAQ,EA0ChB,gBAAgB,CAAC,YAAY,CAAC,CAAC"}