@metaobjectsdev/codegen-ts 0.9.0-rc.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/column-mapper.d.ts.map +1 -1
- package/dist/column-mapper.js +24 -8
- package/dist/column-mapper.js.map +1 -1
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +16 -0
- package/dist/constants.js.map +1 -1
- package/dist/docs-paths.d.ts +58 -0
- package/dist/docs-paths.d.ts.map +1 -0
- package/dist/docs-paths.js +89 -0
- package/dist/docs-paths.js.map +1 -0
- package/dist/enum-import.d.ts +14 -0
- package/dist/enum-import.d.ts.map +1 -0
- package/dist/enum-import.js +35 -0
- package/dist/enum-import.js.map +1 -0
- package/dist/enum-shared.d.ts +32 -0
- package/dist/enum-shared.d.ts.map +1 -0
- package/dist/enum-shared.js +83 -0
- package/dist/enum-shared.js.map +1 -0
- package/dist/generator-registry.d.ts +22 -0
- package/dist/generator-registry.d.ts.map +1 -0
- package/dist/generator-registry.js +161 -0
- package/dist/generator-registry.js.map +1 -0
- package/dist/generator.d.ts +6 -0
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js.map +1 -1
- package/dist/generators/api-doc-render.d.ts +17 -0
- package/dist/generators/api-doc-render.d.ts.map +1 -0
- package/dist/generators/api-doc-render.js +431 -0
- package/dist/generators/api-doc-render.js.map +1 -0
- package/dist/generators/api-docs-file.d.ts +21 -0
- package/dist/generators/api-docs-file.d.ts.map +1 -0
- package/dist/generators/api-docs-file.js +112 -0
- package/dist/generators/api-docs-file.js.map +1 -0
- package/dist/generators/api-field-shape.d.ts +39 -0
- package/dist/generators/api-field-shape.d.ts.map +1 -0
- package/dist/generators/api-field-shape.js +92 -0
- package/dist/generators/api-field-shape.js.map +1 -0
- package/dist/generators/api-label.d.ts +3 -0
- package/dist/generators/api-label.d.ts.map +1 -0
- package/dist/generators/api-label.js +8 -0
- package/dist/generators/api-label.js.map +1 -0
- package/dist/generators/api-model.d.ts +122 -0
- package/dist/generators/api-model.d.ts.map +1 -0
- package/dist/generators/api-model.js +809 -0
- package/dist/generators/api-model.js.map +1 -0
- package/dist/generators/docs-data-builder.d.ts +26 -4
- package/dist/generators/docs-data-builder.d.ts.map +1 -1
- package/dist/generators/docs-data-builder.js +436 -164
- package/dist/generators/docs-data-builder.js.map +1 -1
- package/dist/generators/docs-data.d.ts +136 -27
- package/dist/generators/docs-data.d.ts.map +1 -1
- package/dist/generators/docs-data.js +1 -1
- package/dist/generators/docs-data.js.map +1 -1
- package/dist/generators/docs-file.d.ts +19 -0
- package/dist/generators/docs-file.d.ts.map +1 -1
- package/dist/generators/docs-file.js +154 -27
- package/dist/generators/docs-file.js.map +1 -1
- package/dist/generators/entity-file.d.ts.map +1 -1
- package/dist/generators/entity-file.js +29 -14
- package/dist/generators/entity-file.js.map +1 -1
- package/dist/generators/extractor-file.d.ts.map +1 -1
- package/dist/generators/extractor-file.js +2 -1
- package/dist/generators/extractor-file.js.map +1 -1
- package/dist/generators/field-anchor.d.ts +7 -0
- package/dist/generators/field-anchor.d.ts.map +1 -0
- package/dist/generators/field-anchor.js +23 -0
- package/dist/generators/field-anchor.js.map +1 -0
- package/dist/generators/index.d.ts +8 -1
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +6 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/mermaid-er.d.ts +14 -0
- package/dist/generators/mermaid-er.d.ts.map +1 -1
- package/dist/generators/mermaid-er.js +14 -0
- package/dist/generators/mermaid-er.js.map +1 -1
- package/dist/generators/output-parser-file.d.ts.map +1 -1
- package/dist/generators/output-parser-file.js +3 -4
- package/dist/generators/output-parser-file.js.map +1 -1
- package/dist/generators/output-prompt-file.d.ts.map +1 -1
- package/dist/generators/output-prompt-file.js +2 -2
- package/dist/generators/output-prompt-file.js.map +1 -1
- package/dist/generators/prompt-render-file.d.ts.map +1 -1
- package/dist/generators/prompt-render-file.js +3 -4
- package/dist/generators/prompt-render-file.js.map +1 -1
- package/dist/generators/queries-file.d.ts.map +1 -1
- package/dist/generators/queries-file.js +8 -3
- package/dist/generators/queries-file.js.map +1 -1
- package/dist/generators/render-helper-file.d.ts.map +1 -1
- package/dist/generators/render-helper-file.js +2 -2
- package/dist/generators/render-helper-file.js.map +1 -1
- package/dist/generators/routes-file-hono.d.ts.map +1 -1
- package/dist/generators/routes-file-hono.js +5 -1
- package/dist/generators/routes-file-hono.js.map +1 -1
- package/dist/generators/routes-file.d.ts +3 -0
- package/dist/generators/routes-file.d.ts.map +1 -1
- package/dist/generators/routes-file.js +6 -1
- package/dist/generators/routes-file.js.map +1 -1
- package/dist/generators/template-doc-builder.d.ts +19 -0
- package/dist/generators/template-doc-builder.d.ts.map +1 -0
- package/dist/generators/template-doc-builder.js +220 -0
- package/dist/generators/template-doc-builder.js.map +1 -0
- package/dist/generators/template-doc-data.d.ts +62 -0
- package/dist/generators/template-doc-data.d.ts.map +1 -0
- package/dist/generators/template-doc-data.js +16 -0
- package/dist/generators/template-doc-data.js.map +1 -0
- package/dist/generators/template-payload-tree.d.ts +15 -0
- package/dist/generators/template-payload-tree.d.ts.map +1 -0
- package/dist/generators/template-payload-tree.js +61 -0
- package/dist/generators/template-payload-tree.js.map +1 -0
- package/dist/generators/template-source-annotate.d.ts +74 -0
- package/dist/generators/template-source-annotate.d.ts.map +1 -0
- package/dist/generators/template-source-annotate.js +184 -0
- package/dist/generators/template-source-annotate.js.map +1 -0
- package/dist/generators/template-source-render.d.ts +24 -0
- package/dist/generators/template-source-render.d.ts.map +1 -0
- package/dist/generators/template-source-render.js +175 -0
- package/dist/generators/template-source-render.js.map +1 -0
- package/dist/generators/trace-helper-file.d.ts +9 -0
- package/dist/generators/trace-helper-file.d.ts.map +1 -0
- package/dist/generators/trace-helper-file.js +196 -0
- package/dist/generators/trace-helper-file.js.map +1 -0
- package/dist/index.d.ts +29 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -2
- package/dist/index.js.map +1 -1
- package/dist/metaobjects-config.d.ts +75 -2
- package/dist/metaobjects-config.d.ts.map +1 -1
- package/dist/metaobjects-config.js +43 -0
- package/dist/metaobjects-config.js.map +1 -1
- package/dist/naming.d.ts +19 -0
- package/dist/naming.d.ts.map +1 -1
- package/dist/naming.js +41 -0
- package/dist/naming.js.map +1 -1
- package/dist/payload-codegen.d.ts.map +1 -1
- package/dist/payload-codegen.js +12 -4
- package/dist/payload-codegen.js.map +1 -1
- package/dist/projection/extract-view-spec.d.ts.map +1 -1
- package/dist/projection/extract-view-spec.js +51 -25
- package/dist/projection/extract-view-spec.js.map +1 -1
- package/dist/relation-resolver.d.ts +16 -0
- package/dist/relation-resolver.d.ts.map +1 -1
- package/dist/relation-resolver.js +82 -1
- package/dist/relation-resolver.js.map +1 -1
- package/dist/render-context.d.ts +4 -0
- package/dist/render-context.d.ts.map +1 -1
- package/dist/render-context.js.map +1 -1
- package/dist/render-engine/embedded-templates.generated.d.ts +2 -0
- package/dist/render-engine/embedded-templates.generated.d.ts.map +1 -0
- package/dist/render-engine/embedded-templates.generated.js +15 -0
- package/dist/render-engine/embedded-templates.generated.js.map +1 -0
- package/dist/render-engine/framework-provider.d.ts.map +1 -1
- package/dist/render-engine/framework-provider.js +26 -13
- package/dist/render-engine/framework-provider.js.map +1 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +17 -0
- package/dist/runner.js.map +1 -1
- package/dist/templates/docs-file.d.ts +2 -6
- package/dist/templates/docs-file.d.ts.map +1 -1
- package/dist/templates/docs-file.js +2 -5
- package/dist/templates/docs-file.js.map +1 -1
- package/dist/templates/drizzle-schema.d.ts.map +1 -1
- package/dist/templates/drizzle-schema.js +30 -2
- package/dist/templates/drizzle-schema.js.map +1 -1
- package/dist/templates/entity-constants.d.ts +7 -0
- package/dist/templates/entity-constants.d.ts.map +1 -1
- package/dist/templates/entity-constants.js +1 -1
- package/dist/templates/entity-constants.js.map +1 -1
- package/dist/templates/entity-file.d.ts.map +1 -1
- package/dist/templates/entity-file.js +16 -5
- package/dist/templates/entity-file.js.map +1 -1
- package/dist/templates/enums-file.d.ts +11 -0
- package/dist/templates/enums-file.d.ts.map +1 -0
- package/dist/templates/enums-file.js +44 -0
- package/dist/templates/enums-file.js.map +1 -0
- package/dist/templates/extract-delegate-emitter.d.ts.map +1 -1
- package/dist/templates/extract-delegate-emitter.js +5 -7
- package/dist/templates/extract-delegate-emitter.js.map +1 -1
- package/dist/templates/extract-schema-emitter.d.ts.map +1 -1
- package/dist/templates/extract-schema-emitter.js +5 -1
- package/dist/templates/extract-schema-emitter.js.map +1 -1
- package/dist/templates/extractor.d.ts.map +1 -1
- package/dist/templates/extractor.js +56 -39
- package/dist/templates/extractor.js.map +1 -1
- package/dist/templates/field-meta.d.ts.map +1 -1
- package/dist/templates/field-meta.js +1 -5
- package/dist/templates/field-meta.js.map +1 -1
- package/dist/templates/filter-allowlist.d.ts +7 -2
- package/dist/templates/filter-allowlist.d.ts.map +1 -1
- package/dist/templates/filter-allowlist.js +17 -9
- package/dist/templates/filter-allowlist.js.map +1 -1
- package/dist/templates/filter-type.d.ts +7 -1
- package/dist/templates/filter-type.d.ts.map +1 -1
- package/dist/templates/filter-type.js +9 -5
- package/dist/templates/filter-type.js.map +1 -1
- package/dist/templates/find-templates.d.ts +4 -0
- package/dist/templates/find-templates.d.ts.map +1 -0
- package/dist/templates/find-templates.js +15 -0
- package/dist/templates/find-templates.js.map +1 -0
- package/dist/templates/fr010-field-mapping.d.ts +2 -0
- package/dist/templates/fr010-field-mapping.d.ts.map +1 -1
- package/dist/templates/fr010-field-mapping.js +10 -6
- package/dist/templates/fr010-field-mapping.js.map +1 -1
- package/dist/templates/inferred-types.d.ts +44 -7
- package/dist/templates/inferred-types.d.ts.map +1 -1
- package/dist/templates/inferred-types.js +107 -16
- package/dist/templates/inferred-types.js.map +1 -1
- package/dist/templates/mermaid-er.d.ts +35 -2
- package/dist/templates/mermaid-er.d.ts.map +1 -1
- package/dist/templates/mermaid-er.js +174 -7
- package/dist/templates/mermaid-er.js.map +1 -1
- package/dist/templates/output-parser.d.ts.map +1 -1
- package/dist/templates/output-parser.js +30 -79
- package/dist/templates/output-parser.js.map +1 -1
- package/dist/templates/output-prompt.d.ts.map +1 -1
- package/dist/templates/output-prompt.js +2 -2
- package/dist/templates/output-prompt.js.map +1 -1
- package/dist/templates/queries-file.d.ts.map +1 -1
- package/dist/templates/queries-file.js +112 -4
- package/dist/templates/queries-file.js.map +1 -1
- package/dist/templates/queries.d.ts +5 -0
- package/dist/templates/queries.d.ts.map +1 -1
- package/dist/templates/queries.js +7 -7
- package/dist/templates/queries.js.map +1 -1
- package/dist/templates/recover-schema-emitter.d.ts +8 -0
- package/dist/templates/recover-schema-emitter.d.ts.map +1 -0
- package/dist/templates/recover-schema-emitter.js +64 -0
- package/dist/templates/recover-schema-emitter.js.map +1 -0
- package/dist/templates/relations-block.js +10 -0
- package/dist/templates/relations-block.js.map +1 -1
- package/dist/templates/render-helper.d.ts.map +1 -1
- package/dist/templates/render-helper.js +4 -4
- package/dist/templates/render-helper.js.map +1 -1
- package/dist/templates/routes-file.d.ts.map +1 -1
- package/dist/templates/routes-file.js +183 -6
- package/dist/templates/routes-file.js.map +1 -1
- package/dist/templates/tph-discriminator.d.ts +56 -0
- package/dist/templates/tph-discriminator.d.ts.map +1 -0
- package/dist/templates/tph-discriminator.js +180 -0
- package/dist/templates/tph-discriminator.js.map +1 -0
- package/dist/templates/value-object-file.d.ts +2 -1
- package/dist/templates/value-object-file.d.ts.map +1 -1
- package/dist/templates/value-object-file.js +32 -4
- package/dist/templates/value-object-file.js.map +1 -1
- package/dist/templates/zod-validators.d.ts +64 -1
- package/dist/templates/zod-validators.d.ts.map +1 -1
- package/dist/templates/zod-validators.js +181 -8
- package/dist/templates/zod-validators.js.map +1 -1
- package/package.json +103 -34
- package/src/column-mapper.ts +25 -8
- package/src/constants.ts +18 -0
- package/src/docs-paths.ts +128 -0
- package/src/enum-import.ts +43 -0
- package/src/enum-shared.ts +95 -0
- package/src/generator-registry.ts +204 -0
- package/src/generator.ts +6 -0
- package/src/generators/api-doc-render.ts +572 -0
- package/src/generators/api-docs-file.ts +146 -0
- package/src/generators/api-field-shape.ts +114 -0
- package/src/generators/api-label.ts +7 -0
- package/src/generators/api-model.ts +1067 -0
- package/src/generators/docs-data-builder.ts +479 -185
- package/src/generators/docs-data.ts +139 -28
- package/src/generators/docs-file.ts +205 -39
- package/src/generators/entity-file.ts +31 -15
- package/src/generators/extractor-file.ts +2 -1
- package/src/generators/field-anchor.ts +24 -0
- package/src/generators/index.ts +8 -1
- package/src/generators/mermaid-er.ts +14 -0
- package/src/generators/output-parser-file.ts +3 -4
- package/src/generators/output-prompt-file.ts +2 -1
- package/src/generators/prompt-render-file.ts +3 -4
- package/src/generators/queries-file.ts +9 -3
- package/src/generators/render-helper-file.ts +2 -1
- package/src/generators/routes-file-hono.ts +5 -1
- package/src/generators/routes-file.ts +7 -1
- package/src/generators/template-doc-builder.ts +306 -0
- package/src/generators/template-doc-data.ts +85 -0
- package/src/generators/template-payload-tree.ts +71 -0
- package/src/generators/template-source-annotate.ts +290 -0
- package/src/generators/template-source-render.ts +203 -0
- package/src/generators/trace-helper-file.ts +301 -0
- package/src/index.ts +55 -4
- package/src/metaobjects-config.ts +117 -2
- package/src/naming.ts +48 -0
- package/src/payload-codegen.ts +14 -3
- package/src/projection/extract-view-spec.ts +49 -30
- package/src/relation-resolver.ts +103 -1
- package/src/render-context.ts +4 -0
- package/src/render-engine/embedded-templates.generated.ts +14 -0
- package/src/render-engine/framework-provider.ts +25 -11
- package/src/runner.ts +21 -0
- package/src/templates/docs-file.ts +2 -9
- package/src/templates/drizzle-schema.ts +31 -1
- package/src/templates/entity-constants.ts +1 -1
- package/src/templates/entity-file.ts +16 -5
- package/src/templates/enums-file.ts +50 -0
- package/src/templates/extract-delegate-emitter.ts +5 -6
- package/src/templates/extractor.ts +68 -38
- package/src/templates/field-meta.ts +0 -6
- package/src/templates/filter-allowlist.ts +17 -10
- package/src/templates/filter-type.ts +8 -6
- package/src/templates/find-templates.ts +15 -0
- package/src/templates/fr010-field-mapping.ts +10 -8
- package/src/templates/inferred-types.ts +108 -18
- package/src/templates/mermaid-er.ts +176 -8
- package/src/templates/output-parser.ts +30 -79
- package/src/templates/output-prompt.ts +2 -1
- package/src/templates/queries-file.ts +132 -3
- package/src/templates/queries.ts +15 -7
- package/src/templates/relations-block.ts +17 -0
- package/src/templates/render-helper.ts +4 -3
- package/src/templates/routes-file.ts +233 -6
- package/src/templates/tph-discriminator.ts +232 -0
- package/src/templates/value-object-file.ts +38 -4
- package/src/templates/zod-validators.ts +204 -7
- package/templates/api/agent-api.md.mustache +30 -0
- package/templates/api/entity-api.md.mustache +69 -0
- package/templates/api/index.md.mustache +21 -0
- package/templates/docs/entity-page.md.mustache +33 -21
- package/templates/docs/template-page.md.mustache +56 -0
- package/src/templates/extract-schema-emitter.ts +0 -111
package/README.md
CHANGED
|
@@ -198,7 +198,7 @@ if (!r.success) { /* handle r.error (a ZodError) */ } else { /* use r.data */ }
|
|
|
198
198
|
| Field subtype | Emitted Zod |
|
|
199
199
|
|---|---|
|
|
200
200
|
| `field.string`, `field.class` | `z.string()` |
|
|
201
|
-
| `field.int`, `field.long
|
|
201
|
+
| `field.int`, `field.long` | `z.number().int()` |
|
|
202
202
|
| `field.double`, `field.float` | `z.number()` |
|
|
203
203
|
| `field.boolean` | `z.boolean()` |
|
|
204
204
|
| `field.object` (with `@objectRef`) | nested `z.object({ ... })` |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-mapper.d.ts","sourceRoot":"","sources":["../src/column-mapper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"column-mapper.d.ts","sourceRoot":"","sources":["../src/column-mapper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAoC1D,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE7E,YAAY,EAAE,OAAO,EAAE,CAAC;AAExB;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AA+DxC,MAAM,WAAW,UAAU;IACzB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,iEAAiE;IACjE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,6FAA6F;IAC7F,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0FAA0F;IAC1F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,aAAa,CAAC,EACV;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;KAAE,GAC3D;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AA2DD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,OAAO,EAChB,QAAQ,GAAE,oBAAqD,GAC9D,UAAU,CAsQZ"}
|
package/dist/column-mapper.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Field-type → Drizzle column type mapping. Per design §6.
|
|
2
2
|
// Uses the typed MetaField.validators() accessor (effective — includes inherited) for all validator checks.
|
|
3
|
-
import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_OBJECT,
|
|
3
|
+
import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_UUID, VALIDATOR_SUBTYPE_REQUIRED, VALIDATOR_SUBTYPE_LENGTH, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_PRECISION, FIELD_ATTR_SCALE, FIELD_ATTR_REQUIRED, FIELD_ATTR_UNIQUE, FIELD_ATTR_DEFAULT, FIELD_ATTR_OBJECT_REF, FIELD_ATTR_STORAGE, STORAGE_JSONB, VALIDATOR_ATTR_MAX, FIELD_ATTR_DB_COLUMN_TYPE, DB_COLUMN_TYPE_UUID, DB_COLUMN_TYPE_JSONB, DB_COLUMN_TYPE_TIMESTAMP_WITH_TZ, } from "@metaobjectsdev/metadata";
|
|
4
4
|
import { columnNameFromField } from "./naming.js";
|
|
5
5
|
import { enumValues } from "./enum-meta.js";
|
|
6
|
-
import { DEFAULT_COLUMN_NAMING_STRATEGY } from "@metaobjectsdev/metadata";
|
|
6
|
+
import { DEFAULT_COLUMN_NAMING_STRATEGY, stripPackage } from "@metaobjectsdev/metadata";
|
|
7
7
|
/**
|
|
8
8
|
* Patterns recognized as SQL expressions in a default value. Anything matching
|
|
9
9
|
* these is treated as a SQL expression, not a string literal. Mirrors
|
|
@@ -33,7 +33,6 @@ function sqliteJsonArrayElementTsType(subType) {
|
|
|
33
33
|
switch (subType) {
|
|
34
34
|
case FIELD_SUBTYPE_STRING:
|
|
35
35
|
case FIELD_SUBTYPE_ENUM:
|
|
36
|
-
case FIELD_SUBTYPE_CLASS:
|
|
37
36
|
case FIELD_SUBTYPE_UUID:
|
|
38
37
|
case FIELD_SUBTYPE_DATE:
|
|
39
38
|
case FIELD_SUBTYPE_TIME:
|
|
@@ -156,13 +155,21 @@ export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_S
|
|
|
156
155
|
// isn't a silent rounding hazard.
|
|
157
156
|
leadingComment = "TODO: SQLite has no decimal type; stored as text. Convert at the application boundary or migrate to Postgres for native numeric.";
|
|
158
157
|
break;
|
|
158
|
+
case FIELD_SUBTYPE_OBJECT:
|
|
159
|
+
// A nested object is stored as a single JSON column (the default
|
|
160
|
+
// single-jsonb-column storage). SQLite has no native jsonb, so the
|
|
161
|
+
// idiomatic Drizzle form is text(..., { mode: "json" }) — agreeing with
|
|
162
|
+
// migrate-ts/expected-schema, which maps field.object → { kind: "json" }
|
|
163
|
+
// (JSON on SQLite). @storage flattened expansion is a separate codegen
|
|
164
|
+
// gap; the column TYPE here is the single-column JSON representation.
|
|
165
|
+
fnName = "text";
|
|
166
|
+
fnOptions = { mode: "json" };
|
|
167
|
+
break;
|
|
159
168
|
case FIELD_SUBTYPE_DATE:
|
|
160
169
|
case FIELD_SUBTYPE_TIME:
|
|
161
170
|
case FIELD_SUBTYPE_TIMESTAMP:
|
|
162
171
|
case FIELD_SUBTYPE_STRING:
|
|
163
172
|
case FIELD_SUBTYPE_ENUM:
|
|
164
|
-
case FIELD_SUBTYPE_CLASS:
|
|
165
|
-
case FIELD_SUBTYPE_OBJECT:
|
|
166
173
|
case FIELD_SUBTYPE_UUID:
|
|
167
174
|
// SQLite has no native uuid type; store as TEXT (string native binding).
|
|
168
175
|
fnName = "text";
|
|
@@ -253,9 +260,15 @@ export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_S
|
|
|
253
260
|
}
|
|
254
261
|
break;
|
|
255
262
|
}
|
|
256
|
-
case FIELD_SUBTYPE_ENUM:
|
|
257
|
-
case FIELD_SUBTYPE_CLASS:
|
|
258
263
|
case FIELD_SUBTYPE_OBJECT:
|
|
264
|
+
// A nested object is stored as a single jsonb column (the default
|
|
265
|
+
// single-jsonb-column storage), matching migrate-ts/expected-schema,
|
|
266
|
+
// which maps field.object → { kind: "json" } → JSONB on Postgres.
|
|
267
|
+
// @storage flattened expansion is a separate codegen gap; the column
|
|
268
|
+
// TYPE here is the single-column jsonb representation.
|
|
269
|
+
fnName = "jsonb";
|
|
270
|
+
break;
|
|
271
|
+
case FIELD_SUBTYPE_ENUM:
|
|
259
272
|
default:
|
|
260
273
|
fnName = "text";
|
|
261
274
|
break;
|
|
@@ -326,7 +339,10 @@ export function mapColumnType(field, dialect, strategy = DEFAULT_COLUMN_NAMING_S
|
|
|
326
339
|
if (subType === FIELD_SUBTYPE_OBJECT) {
|
|
327
340
|
const ref = field.ownAttr(FIELD_ATTR_OBJECT_REF);
|
|
328
341
|
if (typeof ref === "string" && ref.length > 0) {
|
|
329
|
-
|
|
342
|
+
// @objectRef may be authored fully-qualified or bare — the $type<E[]>()
|
|
343
|
+
// target interface + its sibling module use the BARE short name.
|
|
344
|
+
const base = stripPackage(ref);
|
|
345
|
+
dollarTypeRef = { kind: "objectRef", name: base, module: `./${base}.js` };
|
|
330
346
|
}
|
|
331
347
|
}
|
|
332
348
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-mapper.js","sourceRoot":"","sources":["../src/column-mapper.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,4GAA4G;AAG5G,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"column-mapper.js","sourceRoot":"","sources":["../src/column-mapper.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -4,4 +4,12 @@ export declare const GENERATED_HEADER = "@generated by @metaobjectsdev/codegen-t
|
|
|
4
4
|
export declare const EXTRA_SUFFIX = ".extra";
|
|
5
5
|
/** Default outDir used by tests + as a sane default for generate(). */
|
|
6
6
|
export declare const DEFAULT_OUT_DIR = "./src/db/entities";
|
|
7
|
+
/** `@emitTanstack: false` — skip the TanStack hooks + grid generators for an entity. */
|
|
8
|
+
export declare const CODEGEN_ATTR_EMIT_TANSTACK = "emitTanstack";
|
|
9
|
+
/** `@emitGrid: true` — opt a TPH subtype IN to its own per-subtype grid (default: the polymorphic base grid is the single source). */
|
|
10
|
+
export declare const CODEGEN_ATTR_EMIT_GRID = "emitGrid";
|
|
11
|
+
/** `@emitForm: false` — skip the React form generator for an entity. */
|
|
12
|
+
export declare const CODEGEN_ATTR_EMIT_FORM = "emitForm";
|
|
13
|
+
/** `@emitRoutes: false` — skip the Fastify routes generator for an entity. */
|
|
14
|
+
export declare const CODEGEN_ATTR_EMIT_ROUTES = "emitRoutes";
|
|
7
15
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,6CAA6C,CAAC;AAE3E,6EAA6E;AAC7E,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,uEAAuE;AACvE,eAAO,MAAM,eAAe,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,6CAA6C,CAAC;AAE3E,6EAA6E;AAC7E,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,uEAAuE;AACvE,eAAO,MAAM,eAAe,sBAAsB,CAAC;AAWnD,wFAAwF;AACxF,eAAO,MAAM,0BAA0B,iBAAiB,CAAC;AACzD,sIAAsI;AACtI,eAAO,MAAM,sBAAsB,aAAa,CAAC;AACjD,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,aAAa,CAAC;AACjD,8EAA8E;AAC9E,eAAO,MAAM,wBAAwB,eAAe,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -5,4 +5,20 @@ export const GENERATED_HEADER = "@generated by @metaobjectsdev/codegen-ts";
|
|
|
5
5
|
export const EXTRA_SUFFIX = ".extra";
|
|
6
6
|
/** Default outDir used by tests + as a sane default for generate(). */
|
|
7
7
|
export const DEFAULT_OUT_DIR = "./src/db/entities";
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Codegen-control attributes.
|
|
10
|
+
//
|
|
11
|
+
// These are per-entity opt-in/opt-out flags read by generators (NOT metamodel
|
|
12
|
+
// vocabulary — they tune codegen, not the model). Named here so the literals
|
|
13
|
+
// aren't scattered as magic strings across the generator packages (compile-time
|
|
14
|
+
// typo safety), matching the metadata package's constants discipline.
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/** `@emitTanstack: false` — skip the TanStack hooks + grid generators for an entity. */
|
|
17
|
+
export const CODEGEN_ATTR_EMIT_TANSTACK = "emitTanstack";
|
|
18
|
+
/** `@emitGrid: true` — opt a TPH subtype IN to its own per-subtype grid (default: the polymorphic base grid is the single source). */
|
|
19
|
+
export const CODEGEN_ATTR_EMIT_GRID = "emitGrid";
|
|
20
|
+
/** `@emitForm: false` — skip the React form generator for an entity. */
|
|
21
|
+
export const CODEGEN_ATTR_EMIT_FORM = "emitForm";
|
|
22
|
+
/** `@emitRoutes: false` — skip the Fastify routes generator for an entity. */
|
|
23
|
+
export const CODEGEN_ATTR_EMIT_ROUTES = "emitRoutes";
|
|
8
24
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAElC,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,0CAA0C,CAAC;AAE3E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AAErC,uEAAuE;AACvE,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAElC,mFAAmF;AACnF,MAAM,CAAC,MAAM,gBAAgB,GAAG,0CAA0C,CAAC;AAE3E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;AAErC,uEAAuE;AACvE,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAEnD,8EAA8E;AAC9E,8BAA8B;AAC9B,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,gFAAgF;AAChF,sEAAsE;AACtE,8EAA8E;AAE9E,wFAAwF;AACxF,MAAM,CAAC,MAAM,0BAA0B,GAAG,cAAc,CAAC;AACzD,sIAAsI;AACtI,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AACjD,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AACjD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,wBAAwB,GAAG,YAAY,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { type OutputLayout } from "./import-path.js";
|
|
2
|
+
/** The minimal shape needed to place a docs page / compute a link to it: a
|
|
3
|
+
* short name and its EFFECTIVE package. Build one from a metadata node via
|
|
4
|
+
* `docPageNode()`. */
|
|
5
|
+
export interface DocPageNode {
|
|
6
|
+
readonly name: string;
|
|
7
|
+
readonly package?: string | undefined;
|
|
8
|
+
}
|
|
9
|
+
/** A metadata node enough to derive page placement. `resolutionKey()` carries
|
|
10
|
+
* the EFFECTIVE package (own package OR the file-default captured at parse
|
|
11
|
+
* time) folded as `<pkg>::<name>` — `.package` alone is often undefined for
|
|
12
|
+
* objects (FR5d keeps object fqn() bare), so we read placement off the
|
|
13
|
+
* resolution key instead. */
|
|
14
|
+
interface PlaceableNode {
|
|
15
|
+
readonly name: string;
|
|
16
|
+
resolutionKey(): string;
|
|
17
|
+
}
|
|
18
|
+
/** Effective package of a placeable node: the prefix of `resolutionKey()`
|
|
19
|
+
* before the trailing `::<name>`, or undefined when the node is package-less. */
|
|
20
|
+
export declare function effectivePackage(node: PlaceableNode): string | undefined;
|
|
21
|
+
/** Build a placement node ({name, effective package}) from a metadata node. The
|
|
22
|
+
* single bridge from a loaded node to the path/href helpers — so file location
|
|
23
|
+
* and link href derive from the SAME effective package. */
|
|
24
|
+
export declare function docPageNode(node: PlaceableNode): DocPageNode;
|
|
25
|
+
/** Output path (relative to the docs out dir) for a node's `.md` page.
|
|
26
|
+
* Flat → `<name>.md` (today's value, byte-identical). Package → folded under
|
|
27
|
+
* the package path (`acme/sales/Order.md`); a package-less node stays at root. */
|
|
28
|
+
export declare function docPageOutputPath(layout: OutputLayout, node: DocPageNode): string;
|
|
29
|
+
/** Relative href FROM `fromNode`'s page TO `toNode`'s page. Derived from the
|
|
30
|
+
* same `docPageOutputPath()` placement, so a link always points at the file's
|
|
31
|
+
* real location in BOTH layouts. Flat → `./<to>.md`; package → a correct
|
|
32
|
+
* relative path (e.g. `../comms/OrderEmail.md`). */
|
|
33
|
+
export declare function docPageHref(layout: OutputLayout, fromNode: DocPageNode, toNode: DocPageNode): string;
|
|
34
|
+
/** Relative href between two doc pages whose output paths (relative to the shared
|
|
35
|
+
* docs outDir) may sit under different surface sub-roots — e.g. model `Order.md`
|
|
36
|
+
* and api `api/Order.md`. The shared relative-path rule, over raw paths;
|
|
37
|
+
* docPageHref delegates its package-layout branch here. */
|
|
38
|
+
export declare function surfaceCrossHref(fromOutputPath: string, toOutputPath: string): string;
|
|
39
|
+
/** Href FROM a page (at `fromOutputPath`, relative to the docs root) TO a page
|
|
40
|
+
* (`page`, relative to the surface's own root) in an api surface. Relative via
|
|
41
|
+
* `surfaceCrossHref` when the surface is in the same tree; absolute `baseUrl/page`
|
|
42
|
+
* when the surface declares a baseUrl (federated / separate repo). */
|
|
43
|
+
export declare function apiSurfaceHref(fromOutputPath: string, surface: {
|
|
44
|
+
subDir: string;
|
|
45
|
+
baseUrl?: string;
|
|
46
|
+
}, page: string): string;
|
|
47
|
+
/** A page about to be emitted, paired with the FQN of the node that produced it
|
|
48
|
+
* (for a precise collision diagnostic). */
|
|
49
|
+
export interface DocPagePlacement {
|
|
50
|
+
path: string;
|
|
51
|
+
fqn: string;
|
|
52
|
+
}
|
|
53
|
+
/** Hard backstop against silent overwrite (ALL layouts): if two placements
|
|
54
|
+
* resolve to the SAME output path, THROW naming both colliding node FQNs and
|
|
55
|
+
* the path. Guarantees a docs run never silently drops a page. */
|
|
56
|
+
export declare function assertNoDuplicateDocPaths(placements: DocPagePlacement[]): void;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=docs-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-paths.d.ts","sourceRoot":"","sources":["../src/docs-paths.ts"],"names":[],"mappings":"AAaA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEpE;;uBAEuB;AACvB,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED;;;;8BAI8B;AAC9B,UAAU,aAAa;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,aAAa,IAAI,MAAM,CAAC;CACzB;AAED;kFACkF;AAClF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CASxE;AAED;;4DAE4D;AAC5D,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,CAE5D;AAED;;mFAEmF;AACnF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAKjF;AAED;;;qDAGqD;AACrD,wBAAgB,WAAW,CACzB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,WAAW,GAClB,MAAM,CAMR;AAED;;;4DAG4D;AAC5D,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED;;;uEAGuE;AACvE,wBAAgB,cAAc,CAC5B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7C,IAAI,EAAE,MAAM,GACX,MAAM,CAKR;AAED;4CAC4C;AAC5C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;mEAEmE;AACnE,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAa9E"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// docs-paths.ts — the SINGLE source of truth for where a docs page is written
|
|
2
|
+
// AND how one page links to another. The file location and every inbound link
|
|
3
|
+
// href are derived from the SAME functions here, so they can never diverge.
|
|
4
|
+
//
|
|
5
|
+
// Why this matters: pages are placed by short name. In "flat" layout two nodes
|
|
6
|
+
// that share a short name across different packages (e.g. `acme::sales::Order`
|
|
7
|
+
// and `acme::billing::Order`) would both want `Order.md` and one would silently
|
|
8
|
+
// overwrite the other. `assertNoDuplicateDocPaths()` is the hard backstop that
|
|
9
|
+
// turns that data-loss into a clear error; "package" layout folds pages under
|
|
10
|
+
// package-path subdirs (`acme/sales/Order.md`) so multi-package models work.
|
|
11
|
+
import { PACKAGE_SEPARATOR } from "@metaobjectsdev/metadata";
|
|
12
|
+
import { relative as posixRelative } from "node:path/posix";
|
|
13
|
+
import { packageToPath } from "./import-path.js";
|
|
14
|
+
/** Effective package of a placeable node: the prefix of `resolutionKey()`
|
|
15
|
+
* before the trailing `::<name>`, or undefined when the node is package-less. */
|
|
16
|
+
export function effectivePackage(node) {
|
|
17
|
+
const key = node.resolutionKey();
|
|
18
|
+
const suffix = `${PACKAGE_SEPARATOR}${node.name}`;
|
|
19
|
+
if (key === node.name)
|
|
20
|
+
return undefined;
|
|
21
|
+
if (key.endsWith(suffix)) {
|
|
22
|
+
const pkg = key.slice(0, key.length - suffix.length);
|
|
23
|
+
return pkg === "" ? undefined : pkg;
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
/** Build a placement node ({name, effective package}) from a metadata node. The
|
|
28
|
+
* single bridge from a loaded node to the path/href helpers — so file location
|
|
29
|
+
* and link href derive from the SAME effective package. */
|
|
30
|
+
export function docPageNode(node) {
|
|
31
|
+
return { name: node.name, package: effectivePackage(node) };
|
|
32
|
+
}
|
|
33
|
+
/** Output path (relative to the docs out dir) for a node's `.md` page.
|
|
34
|
+
* Flat → `<name>.md` (today's value, byte-identical). Package → folded under
|
|
35
|
+
* the package path (`acme/sales/Order.md`); a package-less node stays at root. */
|
|
36
|
+
export function docPageOutputPath(layout, node) {
|
|
37
|
+
const filename = `${node.name}.md`;
|
|
38
|
+
if (layout === "flat")
|
|
39
|
+
return filename;
|
|
40
|
+
const dir = packageToPath(node.package);
|
|
41
|
+
return dir === "" ? filename : `${dir}/${filename}`;
|
|
42
|
+
}
|
|
43
|
+
/** Relative href FROM `fromNode`'s page TO `toNode`'s page. Derived from the
|
|
44
|
+
* same `docPageOutputPath()` placement, so a link always points at the file's
|
|
45
|
+
* real location in BOTH layouts. Flat → `./<to>.md`; package → a correct
|
|
46
|
+
* relative path (e.g. `../comms/OrderEmail.md`). */
|
|
47
|
+
export function docPageHref(layout, fromNode, toNode) {
|
|
48
|
+
const toPath = docPageOutputPath(layout, toNode);
|
|
49
|
+
if (layout === "flat")
|
|
50
|
+
return `./${toPath}`;
|
|
51
|
+
// Relative path from the FROM page's directory to the TO page — the same
|
|
52
|
+
// raw-path rule surfaceCrossHref uses, so the two can never diverge.
|
|
53
|
+
return surfaceCrossHref(docPageOutputPath(layout, fromNode), toPath);
|
|
54
|
+
}
|
|
55
|
+
/** Relative href between two doc pages whose output paths (relative to the shared
|
|
56
|
+
* docs outDir) may sit under different surface sub-roots — e.g. model `Order.md`
|
|
57
|
+
* and api `api/Order.md`. The shared relative-path rule, over raw paths;
|
|
58
|
+
* docPageHref delegates its package-layout branch here. */
|
|
59
|
+
export function surfaceCrossHref(fromOutputPath, toOutputPath) {
|
|
60
|
+
const fromDir = fromOutputPath.includes("/") ? fromOutputPath.slice(0, fromOutputPath.lastIndexOf("/")) : "";
|
|
61
|
+
const rel = posixRelative(fromDir, toOutputPath);
|
|
62
|
+
return rel.startsWith(".") ? rel : `./${rel}`;
|
|
63
|
+
}
|
|
64
|
+
/** Href FROM a page (at `fromOutputPath`, relative to the docs root) TO a page
|
|
65
|
+
* (`page`, relative to the surface's own root) in an api surface. Relative via
|
|
66
|
+
* `surfaceCrossHref` when the surface is in the same tree; absolute `baseUrl/page`
|
|
67
|
+
* when the surface declares a baseUrl (federated / separate repo). */
|
|
68
|
+
export function apiSurfaceHref(fromOutputPath, surface, page) {
|
|
69
|
+
if (surface.baseUrl !== undefined && surface.baseUrl !== "") {
|
|
70
|
+
return `${surface.baseUrl.replace(/\/$/, "")}/${page}`;
|
|
71
|
+
}
|
|
72
|
+
return surfaceCrossHref(fromOutputPath, `${surface.subDir}/${page}`);
|
|
73
|
+
}
|
|
74
|
+
/** Hard backstop against silent overwrite (ALL layouts): if two placements
|
|
75
|
+
* resolve to the SAME output path, THROW naming both colliding node FQNs and
|
|
76
|
+
* the path. Guarantees a docs run never silently drops a page. */
|
|
77
|
+
export function assertNoDuplicateDocPaths(placements) {
|
|
78
|
+
const seen = new Map();
|
|
79
|
+
for (const { path, fqn } of placements) {
|
|
80
|
+
const prior = seen.get(path);
|
|
81
|
+
if (prior !== undefined) {
|
|
82
|
+
throw new Error(`docs: duplicate output path "${path}" from nodes ${prior} and ${fqn} — ` +
|
|
83
|
+
`use package layout (outputLayout: "package" / meta docs --layout package) ` +
|
|
84
|
+
`to disambiguate.`);
|
|
85
|
+
}
|
|
86
|
+
seen.set(path, fqn);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=docs-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-paths.js","sourceRoot":"","sources":["../src/docs-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RenderContext } from "./render-context.js";
|
|
2
|
+
/**
|
|
3
|
+
* Specifier to import a MATERIALIZED shared enum into an entity file in
|
|
4
|
+
* `entityPkg`. The shared module sits at the entity-module target root; in
|
|
5
|
+
* package layout the entity may be nested, so the `./enums` base is adjusted by
|
|
6
|
+
* package depth.
|
|
7
|
+
*/
|
|
8
|
+
export declare function sharedEnumImportSpecifier(ctx: RenderContext, entityPkg: string | undefined): string;
|
|
9
|
+
/**
|
|
10
|
+
* Specifier to import an externally-PROVIDED enum. Resolved from codegen config
|
|
11
|
+
* (`providedEnumModule`); throws a clear codegen-time error when unset.
|
|
12
|
+
*/
|
|
13
|
+
export declare function providedEnumImportSpecifier(ctx: RenderContext, enumName: string): string;
|
|
14
|
+
//# sourceMappingURL=enum-import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum-import.d.ts","sourceRoot":"","sources":["../src/enum-import.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,MAAM,CAGR;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUxF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// FR-019 — import-specifier resolution for shared + provided enums.
|
|
2
|
+
//
|
|
3
|
+
// A consuming entity file references a shared enum `E` by importing it:
|
|
4
|
+
// • materialized (non-@provided) → from the generated shared enums module
|
|
5
|
+
// (`./enums`, at the entity-module target root, package-layout-aware).
|
|
6
|
+
// • @provided → from the per-port-configured module
|
|
7
|
+
// (`ctx.providedEnumModule`). Missing config ⇒ a codegen-time error naming
|
|
8
|
+
// the enum + the config key (ADR-0026: namespace is config, not metadata).
|
|
9
|
+
import { withExt } from "./render-context.js";
|
|
10
|
+
import { relativeModuleSpecifier } from "./import-path.js";
|
|
11
|
+
import { SHARED_ENUMS_BASENAME } from "./templates/enums-file.js";
|
|
12
|
+
/**
|
|
13
|
+
* Specifier to import a MATERIALIZED shared enum into an entity file in
|
|
14
|
+
* `entityPkg`. The shared module sits at the entity-module target root; in
|
|
15
|
+
* package layout the entity may be nested, so the `./enums` base is adjusted by
|
|
16
|
+
* package depth.
|
|
17
|
+
*/
|
|
18
|
+
export function sharedEnumImportSpecifier(ctx, entityPkg) {
|
|
19
|
+
const base = withExt(`./${SHARED_ENUMS_BASENAME}`, ctx.extStyle);
|
|
20
|
+
return relativeModuleSpecifier(ctx.selfTarget.outputLayout, entityPkg, base);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Specifier to import an externally-PROVIDED enum. Resolved from codegen config
|
|
24
|
+
* (`providedEnumModule`); throws a clear codegen-time error when unset.
|
|
25
|
+
*/
|
|
26
|
+
export function providedEnumImportSpecifier(ctx, enumName) {
|
|
27
|
+
const mod = ctx.providedEnumModule;
|
|
28
|
+
if (mod === undefined || mod === "") {
|
|
29
|
+
throw new Error(`provided enum "${enumName}" is marked @provided but no module is configured ` +
|
|
30
|
+
`to import it from. Set "providedEnumModule" in your codegen config (e.g. ` +
|
|
31
|
+
`providedEnumModule: "@your-app/enums") so the generated code can reference "${enumName}".`);
|
|
32
|
+
}
|
|
33
|
+
return mod;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=enum-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum-import.js","sourceRoot":"","sources":["../src/enum-import.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,2EAA2E;AAC3E,yEAAyE;AACzE,+EAA+E;AAC/E,+EAA+E;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,GAAkB,EAClB,SAA6B;IAE7B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,qBAAqB,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjE,OAAO,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAkB,EAAE,QAAgB;IAC9E,MAAM,GAAG,GAAG,GAAG,CAAC,kBAAkB,CAAC;IACnC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,kBAAkB,QAAQ,oDAAoD;YAC9E,2EAA2E;YAC3E,+EAA+E,QAAQ,IAAI,CAC5F,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { MetaField, MetaRoot } from "@metaobjectsdev/metadata";
|
|
2
|
+
/** A shared (root-level abstract) enum declaration the codegen must reason about. */
|
|
3
|
+
export interface SharedEnum {
|
|
4
|
+
/** The materialized type name — the abstract declaration's PascalCase name (cross-port identity). */
|
|
5
|
+
readonly name: string;
|
|
6
|
+
/** Member symbols (the @values SSOT). */
|
|
7
|
+
readonly values: string[];
|
|
8
|
+
/** True when the declaration carries `@provided: true` (reference, don't materialize). */
|
|
9
|
+
readonly provided: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The root-level abstract `field.enum` a concrete enum field resolves to via
|
|
13
|
+
* `extends`, or undefined when the field is an inline enum (no root-abstract
|
|
14
|
+
* super). A super qualifies only when it is (a) an abstract field, AND (b) a
|
|
15
|
+
* direct child of the metadata root (a package-level declaration) — NOT an
|
|
16
|
+
* abstract field nested inside another object.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveSharedEnumDecl(field: MetaField): MetaField | undefined;
|
|
19
|
+
/** The shared-enum descriptor a field resolves to, or undefined for inline enums. */
|
|
20
|
+
export declare function sharedEnumForField(field: MetaField): SharedEnum | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* All shared (root-level abstract) enum declarations in the loaded root that are
|
|
23
|
+
* actually CONSUMED by at least one concrete entity field — keyed by the
|
|
24
|
+
* materialized type name. A declaration nobody extends is not materialized (no
|
|
25
|
+
* dangling type). Deterministic order: first-consumption order across entities.
|
|
26
|
+
*/
|
|
27
|
+
export declare function collectSharedEnums(root: MetaRoot): Map<string, SharedEnum>;
|
|
28
|
+
/** The shared enums that metaobjects MATERIALIZES (non-@provided, consumed). */
|
|
29
|
+
export declare function materializedSharedEnums(root: MetaRoot): SharedEnum[];
|
|
30
|
+
/** Whether any shared enum (materialized or provided) is consumed in the model. */
|
|
31
|
+
export declare function hasSharedEnums(root: MetaRoot): boolean;
|
|
32
|
+
//# sourceMappingURL=enum-shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum-shared.d.ts","sourceRoot":"","sources":["../src/enum-shared.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AASpE,qFAAqF;AACrF,MAAM,WAAW,UAAU;IACzB,qGAAqG;IACrG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1B,0FAA0F;IAC1F,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAU7E;AAED,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAU3E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAU1E;AAED,gFAAgF;AAChF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,EAAE,CAEpE;AAED,mFAAmF;AACnF,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEtD"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// FR-019 — shared + externally-provided enum resolution.
|
|
2
|
+
//
|
|
3
|
+
// A reusable enum is a ROOT/package-level abstract `field.enum` (a sibling of
|
|
4
|
+
// object.entity) that concrete entity fields `extends`. Per ADR-0026 such a
|
|
5
|
+
// declaration is materialized ONCE per port and referenced, instead of being
|
|
6
|
+
// redeclared inline in every consuming entity file.
|
|
7
|
+
//
|
|
8
|
+
// Two cases on the abstract declaration:
|
|
9
|
+
// • non-@provided → metaobjects MATERIALIZES the type once (a shared module),
|
|
10
|
+
// and consuming fields reference it.
|
|
11
|
+
// • @provided: true → metaobjects emits NOTHING for the type; consuming fields
|
|
12
|
+
// reference an existing hand-written/third-party type, resolved via per-port
|
|
13
|
+
// codegen config (the namespace/module never lives in metadata — ADR-0001).
|
|
14
|
+
//
|
|
15
|
+
// The common inline case (a concrete `field.enum` with @values declared directly,
|
|
16
|
+
// no root-extends) is UNCHANGED — it stays a per-entity `<Entity><Field>` union.
|
|
17
|
+
import { FIELD_SUBTYPE_ENUM, FIELD_ATTR_PROVIDED, TYPE_METADATA, } from "@metaobjectsdev/metadata";
|
|
18
|
+
import { toPascalCase } from "./naming.js";
|
|
19
|
+
import { enumValues } from "./enum-meta.js";
|
|
20
|
+
/**
|
|
21
|
+
* The root-level abstract `field.enum` a concrete enum field resolves to via
|
|
22
|
+
* `extends`, or undefined when the field is an inline enum (no root-abstract
|
|
23
|
+
* super). A super qualifies only when it is (a) an abstract field, AND (b) a
|
|
24
|
+
* direct child of the metadata root (a package-level declaration) — NOT an
|
|
25
|
+
* abstract field nested inside another object.
|
|
26
|
+
*/
|
|
27
|
+
export function resolveSharedEnumDecl(field) {
|
|
28
|
+
if (field.subType !== FIELD_SUBTYPE_ENUM)
|
|
29
|
+
return undefined;
|
|
30
|
+
const sup = field.resolveSuper();
|
|
31
|
+
if (sup === undefined)
|
|
32
|
+
return undefined;
|
|
33
|
+
if (!sup.isAbstract)
|
|
34
|
+
return undefined;
|
|
35
|
+
// The declaration must sit at the package/root level (sibling of object.entity),
|
|
36
|
+
// i.e. its parent node is the metadata root.
|
|
37
|
+
const parent = sup.parent;
|
|
38
|
+
if (parent === undefined || parent.type !== TYPE_METADATA)
|
|
39
|
+
return undefined;
|
|
40
|
+
return sup;
|
|
41
|
+
}
|
|
42
|
+
/** The shared-enum descriptor a field resolves to, or undefined for inline enums. */
|
|
43
|
+
export function sharedEnumForField(field) {
|
|
44
|
+
const decl = resolveSharedEnumDecl(field);
|
|
45
|
+
if (decl === undefined)
|
|
46
|
+
return undefined;
|
|
47
|
+
const values = enumValues(field);
|
|
48
|
+
if (values === undefined)
|
|
49
|
+
return undefined;
|
|
50
|
+
return {
|
|
51
|
+
name: toPascalCase(decl.name),
|
|
52
|
+
values,
|
|
53
|
+
provided: decl.ownAttr(FIELD_ATTR_PROVIDED) === true,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* All shared (root-level abstract) enum declarations in the loaded root that are
|
|
58
|
+
* actually CONSUMED by at least one concrete entity field — keyed by the
|
|
59
|
+
* materialized type name. A declaration nobody extends is not materialized (no
|
|
60
|
+
* dangling type). Deterministic order: first-consumption order across entities.
|
|
61
|
+
*/
|
|
62
|
+
export function collectSharedEnums(root) {
|
|
63
|
+
const out = new Map();
|
|
64
|
+
for (const entity of root.objects()) {
|
|
65
|
+
for (const field of entity.fields()) {
|
|
66
|
+
const shared = sharedEnumForField(field);
|
|
67
|
+
if (shared === undefined)
|
|
68
|
+
continue;
|
|
69
|
+
if (!out.has(shared.name))
|
|
70
|
+
out.set(shared.name, shared);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
/** The shared enums that metaobjects MATERIALIZES (non-@provided, consumed). */
|
|
76
|
+
export function materializedSharedEnums(root) {
|
|
77
|
+
return [...collectSharedEnums(root).values()].filter((e) => !e.provided);
|
|
78
|
+
}
|
|
79
|
+
/** Whether any shared enum (materialized or provided) is consumed in the model. */
|
|
80
|
+
export function hasSharedEnums(root) {
|
|
81
|
+
return collectSharedEnums(root).size > 0;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=enum-shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum-shared.js","sourceRoot":"","sources":["../src/enum-shared.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,oDAAoD;AACpD,EAAE;AACF,yCAAyC;AACzC,gFAAgF;AAChF,yCAAyC;AACzC,iFAAiF;AACjF,iFAAiF;AACjF,gFAAgF;AAChF,EAAE;AACF,kFAAkF;AAClF,iFAAiF;AAGjF,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAY5C;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAgB;IACpD,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB;QAAE,OAAO,SAAS,CAAC;IAC3D,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC,GAAG,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IACtC,iFAAiF;IACjF,6CAA6C;IAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,SAAS,CAAC;IAC5E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,kBAAkB,CAAC,KAAgB;IACjD,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,MAAM;QACN,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,IAAI;KACrD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC1C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,SAAS;gBAAE,SAAS;YACnC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,uBAAuB,CAAC,IAAc;IACpD,OAAO,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,cAAc,CAAC,IAAc;IAC3C,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Generator } from "./generator.js";
|
|
2
|
+
export type GeneratorTier = "native" | "neutral";
|
|
3
|
+
export interface GeneratorRegistryEntry {
|
|
4
|
+
/** Stable, cross-port-consistent id. Equals the registry map key. */
|
|
5
|
+
name: string;
|
|
6
|
+
/** One-line (no newline) human description for `--list`. */
|
|
7
|
+
description: string;
|
|
8
|
+
/** "native" = recommended `meta gen` suite; "neutral" = `meta docs`-owned. */
|
|
9
|
+
tier: GeneratorTier;
|
|
10
|
+
/** Constructs the generator with sensible defaults. Calling it must not throw. */
|
|
11
|
+
factory: () => Generator;
|
|
12
|
+
/** Optional one-line options summary for `--list`. */
|
|
13
|
+
options?: string;
|
|
14
|
+
/** Optional note — used to point neutral entries at their canonical door. */
|
|
15
|
+
note?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const generatorRegistry: Record<string, GeneratorRegistryEntry>;
|
|
18
|
+
/** All registry entries, native first then neutral, alphabetical within tier. */
|
|
19
|
+
export declare function listGenerators(): GeneratorRegistryEntry[];
|
|
20
|
+
/** Resolve a generator entry by its stable id, or undefined if unknown. */
|
|
21
|
+
export declare function getGenerator(id: string): GeneratorRegistryEntry | undefined;
|
|
22
|
+
//# sourceMappingURL=generator-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator-registry.d.ts","sourceRoot":"","sources":["../src/generator-registry.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAoBhD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjD,MAAM,WAAW,sBAAsB;IACrC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,IAAI,EAAE,aAAa,CAAC;IACpB,kFAAkF;IAClF,OAAO,EAAE,MAAM,SAAS,CAAC;IACzB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAeD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAsHpE,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,cAAc,IAAI,sBAAsB,EAAE,CAQzD;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAE3E"}
|