@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
|
@@ -19,13 +19,13 @@
|
|
|
19
19
|
//
|
|
20
20
|
// NO registry / binding provider / factory; codegen walks the whole type graph statically (the
|
|
21
21
|
// same MetaObject walk the extract-schema / payload emitters use).
|
|
22
|
-
import { TYPE_OBJECT, TYPE_TEMPLATE, TEMPLATE_SUBTYPE_OUTPUT, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_ENUM, FIELD_ATTR_OBJECT_REF, FIELD_ATTR_REQUIRED, TEMPLATE_ATTR_PAYLOAD_REF, TEMPLATE_ATTR_FORMAT, PACKAGE_SEPARATOR, } from "@metaobjectsdev/metadata";
|
|
22
|
+
import { TYPE_OBJECT, TYPE_TEMPLATE, TEMPLATE_SUBTYPE_OUTPUT, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_ENUM, FIELD_ATTR_OBJECT_REF, FIELD_ATTR_REQUIRED, TEMPLATE_ATTR_PAYLOAD_REF, TEMPLATE_ATTR_FORMAT, PACKAGE_SEPARATOR, refMatchesObject, } from "@metaobjectsdev/metadata";
|
|
23
23
|
import { fields, isArray } from "./fr010-field-mapping.js";
|
|
24
24
|
import { mirrorName } from "./extract-delegate-emitter.js";
|
|
25
25
|
import { enumUnionAliasName } from "./inferred-types.js";
|
|
26
26
|
import { enumValues } from "../enum-meta.js";
|
|
27
27
|
function findObject(root, name) {
|
|
28
|
-
return root.ownChildren().find((c) => c.type === TYPE_OBJECT && c
|
|
28
|
+
return root.ownChildren().find((c) => c.type === TYPE_OBJECT && refMatchesObject(c, name));
|
|
29
29
|
}
|
|
30
30
|
function findTemplate(root, name) {
|
|
31
31
|
return root.ownChildren().find((c) => c.type === TYPE_TEMPLATE && c.name === name);
|
|
@@ -48,9 +48,9 @@ function isObjectField(field) {
|
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
50
|
* The union-alias type name for a `field.enum` with effective `@values`, or undefined when the
|
|
51
|
-
* field is not a value-constrained enum. Reuses `enumUnionAliasName` — the SAME naming the
|
|
52
|
-
* emitter
|
|
53
|
-
*
|
|
51
|
+
* field is not a value-constrained enum. Reuses `enumUnionAliasName` — the SAME naming the entity
|
|
52
|
+
* inferred-types emitter types the field as — so the cast target resolves to the exact alias
|
|
53
|
+
* exported from the owning VO's entity module. `ownerName` is the owning value-object's interface name.
|
|
54
54
|
*/
|
|
55
55
|
function enumAlias(field, ownerName) {
|
|
56
56
|
if (field.subType !== FIELD_SUBTYPE_ENUM)
|
|
@@ -61,11 +61,12 @@ function enumAlias(field, ownerName) {
|
|
|
61
61
|
return enumUnionAliasName(ownerName, field);
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
|
-
* True iff the field is required IN THE STRICT PAYLOAD TYPE.
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* (`m.f!` vs `m.f ??
|
|
68
|
-
*
|
|
64
|
+
* True iff the field is required IN THE STRICT PAYLOAD TYPE. The strict payload IS the VO's own
|
|
65
|
+
* generated entity-module interface (`renderValueObjectInterface`), which types a required field
|
|
66
|
+
* `f: T` and an optional one `f?: T` (i.e. `T | undefined` — NOT `T | null`). So the mapper's
|
|
67
|
+
* optionality assumption (`m.f!` vs `m.f ?? undefined`) has to agree with THAT interface, and an
|
|
68
|
+
* absent optional maps to `undefined`, never `null`. This predicate matches the interface's
|
|
69
|
+
* required test (boolean `true` only) so the two never skew.
|
|
69
70
|
*/
|
|
70
71
|
function isFieldRequired(field) {
|
|
71
72
|
return field.ownAttr(FIELD_ATTR_REQUIRED) === true;
|
|
@@ -76,8 +77,10 @@ function mapperName(vo) {
|
|
|
76
77
|
}
|
|
77
78
|
/**
|
|
78
79
|
* The mapper-body initializer expression for one field, reading mirror member `m.<name>` and
|
|
79
|
-
* mapping it onto the strict payload's exact optionality (required → `m.f!`; optional → `m.f ??
|
|
80
|
-
*
|
|
80
|
+
* mapping it onto the strict payload's exact optionality (required → `m.f!`; optional → `m.f ?? undefined`).
|
|
81
|
+
* The strict payload is the VO's generated entity-module interface, whose optional fields are
|
|
82
|
+
* `f?: T` (= `T | undefined`, never `T | null`), so an absent optional maps to `undefined`.
|
|
83
|
+
* Nested single/array objects recurse into their toStrict<Type> mapper, guarding when optional.
|
|
81
84
|
*/
|
|
82
85
|
function strictArg(field, root, ownerName) {
|
|
83
86
|
const name = field.name;
|
|
@@ -86,7 +89,7 @@ function strictArg(field, root, ownerName) {
|
|
|
86
89
|
const target = refVo(field, root);
|
|
87
90
|
if (target === undefined) {
|
|
88
91
|
// Unresolved @objectRef — the payload type would be `unknown`; pass through as-is.
|
|
89
|
-
return required ? `m.${name}!` : `m.${name} ??
|
|
92
|
+
return required ? `m.${name}!` : `m.${name} ?? undefined`;
|
|
90
93
|
}
|
|
91
94
|
const fn = mapperName(target);
|
|
92
95
|
if (isArray(field)) {
|
|
@@ -94,18 +97,18 @@ function strictArg(field, root, ownerName) {
|
|
|
94
97
|
// via the non-null assertion (extract never yields null elements for a present array).
|
|
95
98
|
if (required)
|
|
96
99
|
return `m.${name}!.map((e) => ${fn}(e!))`;
|
|
97
|
-
return `m.${name} ? m.${name}!.map((e) => ${fn}(e!)) :
|
|
100
|
+
return `m.${name} ? m.${name}!.map((e) => ${fn}(e!)) : undefined`;
|
|
98
101
|
}
|
|
99
102
|
// Single nested object.
|
|
100
103
|
if (required)
|
|
101
104
|
return `${fn}(m.${name}!)`;
|
|
102
|
-
return `m.${name} ? ${fn}(m.${name}) :
|
|
105
|
+
return `m.${name} ? ${fn}(m.${name}) : undefined`;
|
|
103
106
|
}
|
|
104
107
|
// Scalar ARRAY (e.g. `field.string` with isArray): the mirror types it `(T | null)[] | null`
|
|
105
|
-
// but the strict payload types it `T[]` (required) / `T[]
|
|
108
|
+
// but the strict payload types it `T[]` (required) / `T[]?` (optional). A bare `m.f!`
|
|
106
109
|
// would leave the element type `T | null`, a `tsc --strict` TS2322 error. Filter out null
|
|
107
110
|
// elements so the element type narrows to non-null (consistent with the lost-element DROP policy
|
|
108
|
-
// already used for required arrays-of-objects above).
|
|
111
|
+
// already used for required arrays-of-objects above). An absent optional array maps to `undefined`.
|
|
109
112
|
//
|
|
110
113
|
// ENUM arrays: the mirror element is a plain `string`, but the strict payload types it as the
|
|
111
114
|
// closed `<Alias>[]` union. The null-filter alone narrows to `string[]`, not `<Alias>[]` — a
|
|
@@ -119,22 +122,22 @@ function strictArg(field, root, ownerName) {
|
|
|
119
122
|
return alias !== undefined ? `(${filtered}) as ${alias}[]` : filtered;
|
|
120
123
|
}
|
|
121
124
|
const filtered = `m.${name}.filter((x): x is NonNullable<typeof x> => x != null)`;
|
|
122
|
-
const guarded = `m.${name} == null ?
|
|
125
|
+
const guarded = `m.${name} == null ? undefined : ${filtered}`;
|
|
123
126
|
return alias !== undefined
|
|
124
|
-
? `m.${name} == null ?
|
|
127
|
+
? `m.${name} == null ? undefined : (${filtered}) as ${alias}[]`
|
|
125
128
|
: guarded;
|
|
126
129
|
}
|
|
127
130
|
// Scalar / enum (single): the strict payload's optionality decides the shape.
|
|
128
|
-
// Required → non-null assertion; optional → `??
|
|
131
|
+
// Required → non-null assertion; optional → `?? undefined` (matches the entity-module `f?: T`).
|
|
129
132
|
//
|
|
130
133
|
// ENUM scalar: the mirror member is a plain `string`, but the strict payload types it as the
|
|
131
134
|
// closed `<Alias>` union — assigning `string` into `<Alias>` is a `tsc --strict` TS2322 error.
|
|
132
135
|
// So the value is CAST to `<Alias>`. Sound for the same reason as enum arrays above: the engine
|
|
133
136
|
// already validated membership (or extract throws on a lost required field).
|
|
134
137
|
if (alias !== undefined) {
|
|
135
|
-
return required ? `m.${name}! as ${alias}` : `(m.${name} ??
|
|
138
|
+
return required ? `m.${name}! as ${alias}` : `(m.${name} ?? undefined) as ${alias} | undefined`;
|
|
136
139
|
}
|
|
137
|
-
return required ? `m.${name}!` : `m.${name} ??
|
|
140
|
+
return required ? `m.${name}!` : `m.${name} ?? undefined`;
|
|
138
141
|
}
|
|
139
142
|
/**
|
|
140
143
|
* Emit one `toStrict<VO>(m)` mapper per value-object reachable from `vo` (payload + nested,
|
|
@@ -173,25 +176,34 @@ function emitMapper(vo, root, seen, out, mirrorOverride) {
|
|
|
173
176
|
}
|
|
174
177
|
}
|
|
175
178
|
/**
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
179
|
+
* Group the strict payload types reachable from `vo` BY THE ENTITY MODULE THAT EXPORTS THEM.
|
|
180
|
+
*
|
|
181
|
+
* Each value-object gets its own generated entity module (`entityFile()` emits `<VO>.ts` exporting
|
|
182
|
+
* `export interface <VO>`), and `renderEnumTypeAliases` hoists every `field.enum` union-alias INTO
|
|
183
|
+
* the OWNING VO's module (`export type <Owner><Field> = ...` co-located with the interface). So a
|
|
184
|
+
* VO's interface AND the aliases for its own enum fields are imported from `./<VO>.js` — NOT from a
|
|
185
|
+
* single `payloads.ts` (which no generator emits). Deduped, in discovery order, one group per VO.
|
|
180
186
|
*/
|
|
181
|
-
function
|
|
182
|
-
const
|
|
183
|
-
const
|
|
187
|
+
function reachablePayloadGroups(vo, root) {
|
|
188
|
+
const groups = [];
|
|
189
|
+
const seenVo = new Set();
|
|
190
|
+
const seenAlias = new Set();
|
|
184
191
|
const visit = (cur) => {
|
|
185
|
-
if (
|
|
192
|
+
if (seenVo.has(cur.name))
|
|
186
193
|
return;
|
|
187
|
-
|
|
188
|
-
|
|
194
|
+
seenVo.add(cur.name);
|
|
195
|
+
// The VO interface + its OWN enum aliases share the VO's entity module.
|
|
196
|
+
const types = [cur.name];
|
|
189
197
|
for (const f of fields(cur)) {
|
|
190
198
|
const alias = enumAlias(f, cur.name);
|
|
191
|
-
if (alias !== undefined && !
|
|
192
|
-
|
|
193
|
-
|
|
199
|
+
if (alias !== undefined && !seenAlias.has(alias)) {
|
|
200
|
+
seenAlias.add(alias);
|
|
201
|
+
types.push(alias);
|
|
194
202
|
}
|
|
203
|
+
}
|
|
204
|
+
groups.push({ module: cur.name, types });
|
|
205
|
+
// Recurse into nested object refs (their interfaces live in their own modules).
|
|
206
|
+
for (const f of fields(cur)) {
|
|
195
207
|
if (isObjectField(f)) {
|
|
196
208
|
const target = refVo(f, root);
|
|
197
209
|
if (target !== undefined)
|
|
@@ -200,7 +212,7 @@ function reachablePayloadTypes(vo, root) {
|
|
|
200
212
|
}
|
|
201
213
|
};
|
|
202
214
|
visit(vo);
|
|
203
|
-
return
|
|
215
|
+
return groups;
|
|
204
216
|
}
|
|
205
217
|
/** Collect the mirror-interface names reachable from `vo` (root mirror + nested VO mirrors). */
|
|
206
218
|
function reachableMirrorTypes(vo, root, rootMirror) {
|
|
@@ -253,9 +265,14 @@ export function renderExtractor(root, templateName) {
|
|
|
253
265
|
const extractLenientPublic = `extractLenient${templateName}`; // re-exposed never-throws lenient tier name
|
|
254
266
|
const extractName = `extract${templateName}`;
|
|
255
267
|
const rootMapper = mapperName(vo);
|
|
256
|
-
const
|
|
268
|
+
const payloadGroups = reachablePayloadGroups(vo, root);
|
|
257
269
|
const mirrorTypes = reachableMirrorTypes(vo, root, rootMirror);
|
|
258
270
|
const mappers = emitMappers(vo, root, rootMirror);
|
|
271
|
+
// One type-only import per VO entity module (the VO interface + its own enum
|
|
272
|
+
// union-aliases co-located there). NOT a single non-existent `./payloads.js`.
|
|
273
|
+
const payloadImports = payloadGroups
|
|
274
|
+
.map((g) => `import type { ${g.types.join(", ")} } from "./${g.module}.js";`)
|
|
275
|
+
.join("\n");
|
|
259
276
|
const lostMsg = `${extractName}: lost required field(s): `;
|
|
260
277
|
return (`// GENERATED — extractor for "${templateName}".\n` +
|
|
261
278
|
`//\n` +
|
|
@@ -264,13 +281,13 @@ export function renderExtractor(root, templateName) {
|
|
|
264
281
|
`// mapping the all-nullable mirror onto the strict payload. No registry / binding / factory.\n` +
|
|
265
282
|
`\n` +
|
|
266
283
|
`import {\n ${extractLenientWithName},\n type ${mirrorTypes.join(",\n type ")},\n} from "./${templateName}.output.js";\n` +
|
|
267
|
-
|
|
284
|
+
`${payloadImports}\n` +
|
|
268
285
|
`import type { MetaRoot } from "@metaobjectsdev/metadata";\n` +
|
|
269
286
|
`import type { ExtractionResult } from "@metaobjectsdev/render";\n` +
|
|
270
287
|
`\n` +
|
|
271
288
|
`/**\n` +
|
|
272
289
|
` * Extract a fully-typed \`${strictType}\` from dirty \`text\` using the loaded \`root\` (which must\n` +
|
|
273
|
-
` * declare the "${
|
|
290
|
+
` * declare the "${strictType}" payload value-object). Runs the tolerant extract, then maps the\n` +
|
|
274
291
|
` * extracted mirror onto the strict payload.\n` +
|
|
275
292
|
` *\n` +
|
|
276
293
|
` * @throws Error iff a \`@required\` field was lost (the strict opt-in gate).\n` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/templates/extractor.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,qGAAqG;AACrG,sGAAsG;AACtG,4CAA4C;AAC5C,EAAE;AACF,gGAAgG;AAChG,wGAAwG;AACxG,mGAAmG;AACnG,8FAA8F;AAC9F,yGAAyG;AACzG,6FAA6F;AAC7F,kGAAkG;AAClG,EAAE;AACF,sGAAsG;AACtG,2GAA2G;AAC3G,+FAA+F;AAC/F,mHAAmH;AACnH,EAAE;AACF,+FAA+F;AAC/F,mEAAmE;AAEnE,OAAO,EAGL,WAAW,EACX,aAAa,EACb,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/templates/extractor.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,qGAAqG;AACrG,sGAAsG;AACtG,4CAA4C;AAC5C,EAAE;AACF,gGAAgG;AAChG,wGAAwG;AACxG,mGAAmG;AACnG,8FAA8F;AAC9F,yGAAyG;AACzG,6FAA6F;AAC7F,kGAAkG;AAClG,EAAE;AACF,sGAAsG;AACtG,2GAA2G;AAC3G,+FAA+F;AAC/F,mHAAmH;AACnH,EAAE;AACF,+FAA+F;AAC/F,mEAAmE;AAEnE,OAAO,EAGL,WAAW,EACX,aAAa,EACb,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,SAAS,UAAU,CAAC,IAAc,EAAE,IAAY;IAC9C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,YAAY,CAAC,IAAc,EAAE,IAAY;IAChD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACrF,CAAC;AAED,0FAA0F;AAC1F,SAAS,KAAK,CAAC,KAAe,EAAE,IAAc;IAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACjD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAC/C,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,KAAe;IACpC,OAAO,KAAK,CAAC,OAAO,KAAK,oBAAoB,CAAC;AAChD,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,KAAe,EAAE,SAAiB;IACnD,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB;QAAE,OAAO,SAAS,CAAC;IAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,KAAkB,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,kBAAkB,CAAC,SAAS,EAAE,KAAkB,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CAAC,KAAe;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,2EAA2E;AAC3E,SAAS,UAAU,CAAC,EAAY;IAC9B,OAAO,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,KAAe,EAAE,IAAc,EAAE,SAAiB;IACnE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,mFAAmF;YACnF,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,eAAe,CAAC;QAC5D,CAAC;QACD,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,0FAA0F;YAC1F,uFAAuF;YACvF,IAAI,QAAQ;gBAAE,OAAO,KAAK,IAAI,gBAAgB,EAAE,OAAO,CAAC;YACxD,OAAO,KAAK,IAAI,QAAQ,IAAI,gBAAgB,EAAE,mBAAmB,CAAC;QACpE,CAAC;QACD,wBAAwB;QACxB,IAAI,QAAQ;YAAE,OAAO,GAAG,EAAE,MAAM,IAAI,IAAI,CAAC;QACzC,OAAO,KAAK,IAAI,MAAM,EAAE,MAAM,IAAI,eAAe,CAAC;IACpD,CAAC;IAED,6FAA6F;IAC7F,sFAAsF;IACtF,0FAA0F;IAC1F,iGAAiG;IACjG,oGAAoG;IACpG,EAAE;IACF,8FAA8F;IAC9F,6FAA6F;IAC7F,+FAA+F;IAC/F,iGAAiG;IACjG,wFAAwF;IACxF,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,MAAM,IAAI,8DAA8D,CAAC;YAC1F,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxE,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,IAAI,uDAAuD,CAAC;QAClF,MAAM,OAAO,GAAG,KAAK,IAAI,0BAA0B,QAAQ,EAAE,CAAC;QAC9D,OAAO,KAAK,KAAK,SAAS;YACxB,CAAC,CAAC,KAAK,IAAI,2BAA2B,QAAQ,QAAQ,KAAK,IAAI;YAC/D,CAAC,CAAC,OAAO,CAAC;IACd,CAAC;IAED,8EAA8E;IAC9E,gGAAgG;IAChG,EAAE;IACF,6FAA6F;IAC7F,+FAA+F;IAC/F,gGAAgG;IAChG,6EAA6E;IAC7E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,qBAAqB,KAAK,cAAc,CAAC;IAClG,CAAC;IACD,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,eAAe,CAAC;AAC5D,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,SAAmB,EAAE,IAAc,EAAE,UAAkB;IAC1E,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IACnD,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CACjB,EAAY,EACZ,IAAc,EACd,IAAiB,EACjB,GAAa,EACb,cAAuB;IAEvB,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;QAAE,OAAO;IAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAElB,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;IACvB,MAAM,GAAG,GAAG,cAAc,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxF,GAAG,CAAC,IAAI,CACN;QACE,8BAA8B,GAAG,+BAA+B,MAAM,2BAA2B;QACjG,YAAY,EAAE,OAAO,GAAG,MAAM,MAAM,IAAI;QACxC,YAAY;QACZ,GAAG,OAAO;QACV,MAAM;QACN,GAAG;KACJ,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3B,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC9B,IAAI,MAAM,KAAK,SAAS;gBAAE,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC;AAaD;;;;;;;;GAQG;AACH,SAAS,sBAAsB,CAAC,EAAY,EAAE,IAAc;IAC1D,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,KAAK,GAAG,CAAC,GAAa,EAAE,EAAE;QAC9B,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QACjC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,wEAAwE;QACxE,MAAM,KAAK,GAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,gFAAgF;QAChF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC9B,IAAI,MAAM,KAAK,SAAS;oBAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gGAAgG;AAChG,SAAS,oBAAoB,CAAC,EAAY,EAAE,IAAc,EAAE,UAAkB;IAC5E,MAAM,GAAG,GAAa,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,CAAC,GAAa,EAAE,EAAE;QAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC9B,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtB,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC7B,KAAK,CAAC,MAAM,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAc,EAAE,YAAoB;IAClE,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,8BAA8B,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,KAAK,uBAAuB,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,4CAA4C,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC3D,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,uBAAuB,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,kBAAkB,UAAU,8BAA8B,CAAC,CAAC;IACvG,CAAC;IACD,MAAM,MAAM,GAAG,CAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAwB,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACpG,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACb,aAAa,YAAY,cAAc,MAAM,sDAAsD,CACpG,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,2EAA2E;IACvG,MAAM,UAAU,GAAG,GAAG,YAAY,WAAW,CAAC;IAC9C,MAAM,sBAAsB,GAAG,iBAAiB,YAAY,YAAY,CAAC,CAAC,qDAAqD;IAC/H,MAAM,oBAAoB,GAAG,iBAAiB,YAAY,EAAE,CAAC,CAAC,4CAA4C;IAC1G,MAAM,WAAW,GAAG,UAAU,YAAY,EAAE,CAAC;IAC7C,MAAM,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAElC,MAAM,aAAa,GAAG,sBAAsB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,oBAAoB,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAElD,6EAA6E;IAC7E,8EAA8E;IAC9E,MAAM,cAAc,GAAG,aAAa;SACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,OAAO,CAAC;SAC5E,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,OAAO,GACX,GAAG,WAAW,4BAA4B,CAAC;IAE7C,OAAO,CACL,iCAAiC,YAAY,MAAM;QACnD,MAAM;QACN,gDAAgD,UAAU,8BAA8B;QACxF,gGAAgG;QAChG,gGAAgG;QAChG,IAAI;QACJ,eAAe,sBAAsB,aAAa,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,YAAY,gBAAgB;QAC5H,GAAG,cAAc,IAAI;QACrB,6DAA6D;QAC7D,mEAAmE;QACnE,IAAI;QACJ,OAAO;QACP,8BAA8B,UAAU,gEAAgE;QACxG,mBAAmB,UAAU,qEAAqE;QAClG,gDAAgD;QAChD,MAAM;QACN,iFAAiF;QACjF,OAAO;QACP,mBAAmB,WAAW,mCAAmC,UAAU,MAAM;QACjF,eAAe,sBAAsB,iBAAiB;QACtD,uCAAuC;QACvC,uBAAuB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,2CAA2C;QACzF,OAAO;QACP,YAAY,UAAU,cAAc;QACpC,KAAK;QACL,IAAI;QACJ,OAAO;QACP,kBAAkB,UAAU,qEAAqE;QACjG,2FAA2F;QAC3F,OAAO;QACP,mBAAmB,oBAAoB,oDAAoD,UAAU,OAAO;QAC5G,YAAY,sBAAsB,iBAAiB;QACnD,KAAK;QACL,IAAI;QACJ,GAAG,OAAO,IAAI,CACf,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-meta.d.ts","sourceRoot":"","sources":["../../src/templates/field-meta.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"field-meta.d.ts","sourceRoot":"","sources":["../../src/templates/field-meta.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AA+BrD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAMtD;AA2BD;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CA2BnD;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAS7F;AAMD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAMjD"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
// All helpers take a MetaField node.
|
|
5
5
|
import { MetaField } from "@metaobjectsdev/metadata";
|
|
6
|
-
import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG,
|
|
6
|
+
import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_UUID, VIEW_SUBTYPE_TEXT, VIEW_SUBTYPE_DATE, VIEW_SUBTYPE_NUMBER, VIEW_SUBTYPE_CHECKBOX, VIEW_SUBTYPE_CURRENCY, FIELD_ATTR_CURRENCY, FIELD_ATTR_CURRENCY_DEFAULT, VIEW_CURRENCY_ATTR_LOCALE, VIEW_CURRENCY_ATTR_LOCALE_DEFAULT, } from "@metaobjectsdev/metadata";
|
|
7
7
|
import { enumValues, zodEnumExpr } from "../enum-meta.js";
|
|
8
8
|
// ---------------------------------------------------------------------------
|
|
9
9
|
// inferViewKind
|
|
@@ -26,8 +26,6 @@ function defaultViewForSubType(subType) {
|
|
|
26
26
|
return VIEW_SUBTYPE_CHECKBOX;
|
|
27
27
|
case FIELD_SUBTYPE_INT:
|
|
28
28
|
case FIELD_SUBTYPE_LONG:
|
|
29
|
-
case FIELD_SUBTYPE_SHORT:
|
|
30
|
-
case FIELD_SUBTYPE_BYTE:
|
|
31
29
|
case FIELD_SUBTYPE_DOUBLE:
|
|
32
30
|
case FIELD_SUBTYPE_FLOAT:
|
|
33
31
|
case FIELD_SUBTYPE_DECIMAL:
|
|
@@ -62,8 +60,6 @@ export function zodTypeFor(field) {
|
|
|
62
60
|
return "z.string()";
|
|
63
61
|
case FIELD_SUBTYPE_INT:
|
|
64
62
|
case FIELD_SUBTYPE_LONG:
|
|
65
|
-
case FIELD_SUBTYPE_SHORT:
|
|
66
|
-
case FIELD_SUBTYPE_BYTE:
|
|
67
63
|
case FIELD_SUBTYPE_CURRENCY:
|
|
68
64
|
return "z.number().int()";
|
|
69
65
|
case FIELD_SUBTYPE_DOUBLE:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-meta.js","sourceRoot":"","sources":["../../src/templates/field-meta.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,+EAA+E;AAC/E,EAAE;AACF,qCAAqC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"field-meta.js","sourceRoot":"","sources":["../../src/templates/field-meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { type Code } from "ts-poet";
|
|
2
2
|
import { MetaObject } from "@metaobjectsdev/metadata";
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* `exclude` (FR-017): drop a field from the allowlist. Used by per-subtype TPH
|
|
5
|
+
* allowlists to omit the discriminator — it's pinned by the per-subtype route
|
|
6
|
+
* path, so a client must not filter on it.
|
|
7
|
+
*/
|
|
8
|
+
export declare function renderFilterAllowlist(entity: MetaObject, exclude?: string): Code;
|
|
9
|
+
export declare function renderSortAllowlist(entity: MetaObject, exclude?: string): Code;
|
|
5
10
|
//# sourceMappingURL=filter-allowlist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-allowlist.d.ts","sourceRoot":"","sources":["../../src/templates/filter-allowlist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAa,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"filter-allowlist.d.ts","sourceRoot":"","sources":["../../src/templates/filter-allowlist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAa,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAiDjE;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAuBhF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CA8B9E"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { code } from "ts-poet";
|
|
2
2
|
import { MetaField, MetaObject } from "@metaobjectsdev/metadata";
|
|
3
|
-
import { FIELD_ATTR_FILTERABLE, FIELD_ATTR_SORTABLE_DEFAULT_ORDER, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_INT,
|
|
3
|
+
import { FIELD_ATTR_FILTERABLE, FIELD_ATTR_SORTABLE_DEFAULT_ORDER, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_CURRENCY, opsForSubType, } from "@metaobjectsdev/metadata";
|
|
4
4
|
import { sortableFields } from "./filter-shared.js";
|
|
5
5
|
const NUMBER_SUBTYPES = new Set([
|
|
6
6
|
FIELD_SUBTYPE_INT,
|
|
7
|
-
FIELD_SUBTYPE_SHORT,
|
|
8
|
-
FIELD_SUBTYPE_BYTE,
|
|
9
7
|
FIELD_SUBTYPE_LONG,
|
|
10
8
|
FIELD_SUBTYPE_DOUBLE,
|
|
11
9
|
FIELD_SUBTYPE_FLOAT,
|
|
12
10
|
FIELD_SUBTYPE_DECIMAL,
|
|
11
|
+
// currency is integer minor units — coerces as a number on the wire.
|
|
12
|
+
FIELD_SUBTYPE_CURRENCY,
|
|
13
13
|
]);
|
|
14
14
|
const DATETIME_SUBTYPES = new Set([
|
|
15
15
|
FIELD_SUBTYPE_DATE,
|
|
@@ -26,12 +26,19 @@ function filterSubTypeFor(fieldSubType) {
|
|
|
26
26
|
return "datetime";
|
|
27
27
|
return "string";
|
|
28
28
|
}
|
|
29
|
-
function filterableFields(entity) {
|
|
29
|
+
function filterableFields(entity, exclude) {
|
|
30
30
|
// fields() returns effective fields, so inherited fields (from extends:/super:) are included in allowlists.
|
|
31
|
-
return entity
|
|
31
|
+
return entity
|
|
32
|
+
.fields()
|
|
33
|
+
.filter((c) => c.ownAttr(FIELD_ATTR_FILTERABLE) === true && c.name !== exclude);
|
|
32
34
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
/**
|
|
36
|
+
* `exclude` (FR-017): drop a field from the allowlist. Used by per-subtype TPH
|
|
37
|
+
* allowlists to omit the discriminator — it's pinned by the per-subtype route
|
|
38
|
+
* path, so a client must not filter on it.
|
|
39
|
+
*/
|
|
40
|
+
export function renderFilterAllowlist(entity, exclude) {
|
|
41
|
+
const fields = filterableFields(entity, exclude);
|
|
35
42
|
if (fields.length === 0) {
|
|
36
43
|
return code `
|
|
37
44
|
import type { FilterAllowlist } from "@metaobjectsdev/runtime-ts/drizzle-fastify";
|
|
@@ -54,11 +61,12 @@ ${rows}
|
|
|
54
61
|
} as const satisfies FilterAllowlist;
|
|
55
62
|
`;
|
|
56
63
|
}
|
|
57
|
-
export function renderSortAllowlist(entity) {
|
|
64
|
+
export function renderSortAllowlist(entity, exclude) {
|
|
58
65
|
// Sortable = explicit @sortable === true, OR (no @sortable AND @filterable === true).
|
|
59
66
|
// @sortable: false explicitly opts out.
|
|
60
67
|
// Uses shared isSortableField predicate — must stay in sync with renderFilterType.
|
|
61
|
-
|
|
68
|
+
// `exclude` (FR-017): per-subtype TPH allowlists omit the discriminator.
|
|
69
|
+
const sortable = sortableFields(entity).filter((f) => f.name !== exclude);
|
|
62
70
|
if (sortable.length === 0) {
|
|
63
71
|
return code `
|
|
64
72
|
import type { SortAllowlist } from "@metaobjectsdev/runtime-ts/drizzle-fastify";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-allowlist.js","sourceRoot":"","sources":["../../src/templates/filter-allowlist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAa,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EACL,qBAAqB,EACrB,iCAAiC,EACjC,qBAAqB,EACrB,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"filter-allowlist.js","sourceRoot":"","sources":["../../src/templates/filter-allowlist.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { type Code } from "ts-poet";
|
|
2
2
|
import { MetaObject } from "@metaobjectsdev/metadata";
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* `exclude` (FR-017): drop a field from the client filter type. Used by
|
|
5
|
+
* per-subtype TPH filter types to omit the discriminator (it's pinned by the
|
|
6
|
+
* per-subtype route path), keeping the client `<Sub>Filter` type aligned with
|
|
7
|
+
* the server's per-subtype allowlist.
|
|
8
|
+
*/
|
|
9
|
+
export declare function renderFilterType(entity: MetaObject, exclude?: string): Code;
|
|
4
10
|
//# sourceMappingURL=filter-type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-type.d.ts","sourceRoot":"","sources":["../../src/templates/filter-type.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAa,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"filter-type.d.ts","sourceRoot":"","sources":["../../src/templates/filter-type.ts"],"names":[],"mappings":"AAIA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAa,UAAU,EAAE,MAAM,0BAA0B,CAAC;AA0CjE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CA2C3E"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// datetimes get eq/ne/gt/gte/lt/lte/in.
|
|
4
4
|
import { code } from "ts-poet";
|
|
5
5
|
import { MetaField, MetaObject } from "@metaobjectsdev/metadata";
|
|
6
|
-
import { FIELD_ATTR_FILTERABLE, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_INT,
|
|
6
|
+
import { FIELD_ATTR_FILTERABLE, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, opsForSubType, } from "@metaobjectsdev/metadata";
|
|
7
7
|
import { isSortableField } from "./filter-shared.js";
|
|
8
8
|
// VALUE-type classification only (distinct from the OPERATOR band, which comes from
|
|
9
9
|
// opsForSubType). decimal is deliberately NOT here: its operator band stays NUMERIC
|
|
@@ -11,8 +11,6 @@ import { isSortableField } from "./filter-shared.js";
|
|
|
11
11
|
// matching the entity field representation (exact decimal string, not lossy number).
|
|
12
12
|
const NUMBER_VALUE_SUBTYPES = new Set([
|
|
13
13
|
FIELD_SUBTYPE_INT,
|
|
14
|
-
FIELD_SUBTYPE_SHORT,
|
|
15
|
-
FIELD_SUBTYPE_BYTE,
|
|
16
14
|
FIELD_SUBTYPE_LONG,
|
|
17
15
|
FIELD_SUBTYPE_DOUBLE,
|
|
18
16
|
FIELD_SUBTYPE_FLOAT,
|
|
@@ -39,9 +37,15 @@ function renderFieldUnion(field) {
|
|
|
39
37
|
});
|
|
40
38
|
return `${tsName} | { ${opEntries.join("; ")} }`;
|
|
41
39
|
}
|
|
42
|
-
|
|
40
|
+
/**
|
|
41
|
+
* `exclude` (FR-017): drop a field from the client filter type. Used by
|
|
42
|
+
* per-subtype TPH filter types to omit the discriminator (it's pinned by the
|
|
43
|
+
* per-subtype route path), keeping the client `<Sub>Filter` type aligned with
|
|
44
|
+
* the server's per-subtype allowlist.
|
|
45
|
+
*/
|
|
46
|
+
export function renderFilterType(entity, exclude) {
|
|
43
47
|
// fields() returns effective fields, so inherited fields (from extends:/super:) are included in filter types.
|
|
44
|
-
const allFields = entity.fields();
|
|
48
|
+
const allFields = entity.fields().filter((c) => c.name !== exclude);
|
|
45
49
|
const filterableFieldsList = allFields.filter((c) => c.ownAttr(FIELD_ATTR_FILTERABLE) === true);
|
|
46
50
|
// Sort union uses isSortableField — same predicate as renderSortAllowlist to prevent
|
|
47
51
|
// client/server mismatches (@filterable: true + @sortable: false must be excluded from both).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-type.js","sourceRoot":"","sources":["../../src/templates/filter-type.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,oGAAoG;AACpG,wCAAwC;AAExC,OAAO,EAAE,IAAI,EAAa,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"filter-type.js","sourceRoot":"","sources":["../../src/templates/filter-type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MetaData } from "@metaobjectsdev/metadata";
|
|
2
|
+
/** All template nodes of `subType` anywhere in the tree (top-level OR nested in entities). */
|
|
3
|
+
export declare function findTemplates(root: MetaData, subType: string): MetaData[];
|
|
4
|
+
//# sourceMappingURL=find-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-templates.d.ts","sourceRoot":"","sources":["../../src/templates/find-templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGzD,8FAA8F;AAC9F,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAUzE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TYPE_TEMPLATE } from "@metaobjectsdev/metadata";
|
|
2
|
+
/** All template nodes of `subType` anywhere in the tree (top-level OR nested in entities). */
|
|
3
|
+
export function findTemplates(root, subType) {
|
|
4
|
+
const out = [];
|
|
5
|
+
const visit = (node) => {
|
|
6
|
+
for (const child of node.ownChildren()) {
|
|
7
|
+
if (child.type === TYPE_TEMPLATE && child.subType === subType)
|
|
8
|
+
out.push(child);
|
|
9
|
+
visit(child);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
visit(root);
|
|
13
|
+
return out;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=find-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-templates.js","sourceRoot":"","sources":["../../src/templates/find-templates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,8FAA8F;AAC9F,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,OAAe;IAC3D,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,CAAC,IAAc,EAAE,EAAE;QAC/B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO;gBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/E,KAAK,CAAC,KAAK,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,CAAC;IACZ,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -7,6 +7,8 @@ export declare function fields(vo: MetaData): MetaData[];
|
|
|
7
7
|
export declare function isArray(field: MetaData): boolean;
|
|
8
8
|
/** True iff the field's @required is explicitly true (or the string "true"). */
|
|
9
9
|
export declare function isRequired(field: MetaData): boolean;
|
|
10
|
+
/** True iff the field's @xmlText is explicitly true (the XML text-content extract marker). */
|
|
11
|
+
export declare function xmlText(field: MetaData): boolean;
|
|
10
12
|
/** The string members of an enum field's @values attr (empty when absent). */
|
|
11
13
|
export declare function enumValues(field: MetaData): string[];
|
|
12
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fr010-field-mapping.d.ts","sourceRoot":"","sources":["../../src/templates/fr010-field-mapping.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"fr010-field-mapping.d.ts","sourceRoot":"","sources":["../../src/templates/fr010-field-mapping.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,KAAK,QAAQ,EAuBb,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAElC,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyBzD;AAED,0EAA0E;AAC1E,wBAAgB,MAAM,CAAC,EAAE,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAE/C;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAEhD;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAInD;AAED,8FAA8F;AAC9F,wBAAgB,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAIhD;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,EAAE,CAIpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAG5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAG3D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI,GAAG,aAAa,CAM7F;AAQD,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAmBlD;AA4BD,8FAA8F;AAC9F,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAItD;AAED,6FAA6F;AAC7F,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,EAAE,CAO5D;AAED,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAwBvD;AAED,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAS1D"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
// server/typescript/packages/codegen-ts/src/templates/fr010-field-mapping.ts
|
|
2
2
|
//
|
|
3
|
-
// Shared field-kind mapping for the FR-010 codegen emitters (
|
|
4
|
-
//
|
|
3
|
+
// Shared field-kind mapping for the FR-010 codegen emitters (the output-format-spec
|
|
4
|
+
// emitter et al.). Maps a metadata field subtype onto the render engine's
|
|
5
5
|
// FieldKind member, the idiomatic nullable TS type used by the extract mirror interface,
|
|
6
6
|
// and the ExtractMap accessor that reads it from the forgiving outcome map.
|
|
7
7
|
//
|
|
8
8
|
// Mirrors the C# Fr010FieldMapping (adapted to TS syntax + the `| null` nullable mirror).
|
|
9
9
|
// Bounded scope (parity with Java/Kotlin/C#): scalar / enum / scalar-array. Nested object +
|
|
10
10
|
// array-of-enum are deferred.
|
|
11
|
-
import { TYPE_FIELD, FIELD_SUBTYPE_STRING,
|
|
11
|
+
import { TYPE_FIELD, FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_UUID, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_OBJECT, FIELD_ATTR_REQUIRED, FIELD_ATTR_VALUES, FIELD_ATTR_COERCE_DEFAULT, FIELD_ATTR_DEFAULT, FIELD_ATTR_NORMALIZE, FIELD_ATTR_XML_TEXT, NORMALIZE_DEFAULT, } from "@metaobjectsdev/metadata";
|
|
12
12
|
/** The render-engine FieldKind member name for a scalar field subtype, or null if non-scalar. */
|
|
13
13
|
export function scalarKind(subType) {
|
|
14
14
|
switch (subType) {
|
|
15
15
|
case FIELD_SUBTYPE_STRING:
|
|
16
|
-
case FIELD_SUBTYPE_CLASS:
|
|
17
16
|
case FIELD_SUBTYPE_UUID:
|
|
18
17
|
case FIELD_SUBTYPE_DATE:
|
|
19
18
|
case FIELD_SUBTYPE_TIME:
|
|
@@ -24,8 +23,6 @@ export function scalarKind(subType) {
|
|
|
24
23
|
case FIELD_SUBTYPE_DECIMAL:
|
|
25
24
|
return "STRING";
|
|
26
25
|
case FIELD_SUBTYPE_INT:
|
|
27
|
-
case FIELD_SUBTYPE_SHORT:
|
|
28
|
-
case FIELD_SUBTYPE_BYTE:
|
|
29
26
|
return "INT";
|
|
30
27
|
case FIELD_SUBTYPE_LONG:
|
|
31
28
|
case FIELD_SUBTYPE_CURRENCY:
|
|
@@ -54,6 +51,13 @@ export function isRequired(field) {
|
|
|
54
51
|
return true;
|
|
55
52
|
return typeof v === "string" && v.toLowerCase() === "true";
|
|
56
53
|
}
|
|
54
|
+
/** True iff the field's @xmlText is explicitly true (the XML text-content extract marker). */
|
|
55
|
+
export function xmlText(field) {
|
|
56
|
+
const v = field.ownAttr(FIELD_ATTR_XML_TEXT);
|
|
57
|
+
if (v === true)
|
|
58
|
+
return true;
|
|
59
|
+
return typeof v === "string" && v.toLowerCase() === "true";
|
|
60
|
+
}
|
|
57
61
|
/** The string members of an enum field's @values attr (empty when absent). */
|
|
58
62
|
export function enumValues(field) {
|
|
59
63
|
const v = field.ownAttr(FIELD_ATTR_VALUES);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fr010-field-mapping.js","sourceRoot":"","sources":["../../src/templates/fr010-field-mapping.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"fr010-field-mapping.js","sourceRoot":"","sources":["../../src/templates/fr010-field-mapping.ts"],"names":[],"mappings":"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"}
|