@metaobjectsdev/metadata 0.5.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +189 -0
- package/README.md +29 -0
- package/dist/attr-class-map.d.ts +26 -0
- package/dist/attr-class-map.d.ts.map +1 -0
- package/dist/attr-class-map.js +44 -0
- package/dist/attr-class-map.js.map +1 -0
- package/dist/attr-schema-validate.d.ts +9 -0
- package/dist/attr-schema-validate.d.ts.map +1 -0
- package/dist/attr-schema-validate.js +100 -0
- package/dist/attr-schema-validate.js.map +1 -0
- package/dist/constants.d.ts +208 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +419 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/attr/attr-constants.d.ts +12 -0
- package/dist/core/attr/attr-constants.d.ts.map +1 -0
- package/dist/core/attr/attr-constants.js +27 -0
- package/dist/core/attr/attr-constants.js.map +1 -0
- package/dist/core/attr/meta-attr-filter.d.ts +10 -0
- package/dist/core/attr/meta-attr-filter.d.ts.map +1 -0
- package/dist/core/attr/meta-attr-filter.js +56 -0
- package/dist/core/attr/meta-attr-filter.js.map +1 -0
- package/dist/core/attr/meta-attr-properties.d.ts +9 -0
- package/dist/core/attr/meta-attr-properties.d.ts.map +1 -0
- package/dist/core/attr/meta-attr-properties.js +22 -0
- package/dist/core/attr/meta-attr-properties.js.map +1 -0
- package/dist/core/attr/meta-attr-stringarray.d.ts +9 -0
- package/dist/core/attr/meta-attr-stringarray.d.ts.map +1 -0
- package/dist/core/attr/meta-attr-stringarray.js +29 -0
- package/dist/core/attr/meta-attr-stringarray.js.map +1 -0
- package/dist/core/attr/meta-attr.d.ts +37 -0
- package/dist/core/attr/meta-attr.d.ts.map +1 -0
- package/dist/core/attr/meta-attr.js +97 -0
- package/dist/core/attr/meta-attr.js.map +1 -0
- package/dist/core/export-json.d.ts +29 -0
- package/dist/core/export-json.d.ts.map +1 -0
- package/dist/core/export-json.js +45 -0
- package/dist/core/export-json.js.map +1 -0
- package/dist/core/field/field-constants.d.ts +40 -0
- package/dist/core/field/field-constants.d.ts.map +1 -0
- package/dist/core/field/field-constants.js +66 -0
- package/dist/core/field/field-constants.js.map +1 -0
- package/dist/core/field/field-schema.d.ts +6 -0
- package/dist/core/field/field-schema.d.ts.map +1 -0
- package/dist/core/field/field-schema.js +92 -0
- package/dist/core/field/field-schema.js.map +1 -0
- package/dist/core/field/meta-field.d.ts +50 -0
- package/dist/core/field/meta-field.d.ts.map +1 -0
- package/dist/core/field/meta-field.js +121 -0
- package/dist/core/field/meta-field.js.map +1 -0
- package/dist/core/file-meta-data-loader.d.ts +18 -0
- package/dist/core/file-meta-data-loader.d.ts.map +1 -0
- package/dist/core/file-meta-data-loader.js +81 -0
- package/dist/core/file-meta-data-loader.js.map +1 -0
- package/dist/core/file-source.d.ts +12 -0
- package/dist/core/file-source.d.ts.map +1 -0
- package/dist/core/file-source.js +46 -0
- package/dist/core/file-source.js.map +1 -0
- package/dist/core/identity/identity-constants.d.ts +19 -0
- package/dist/core/identity/identity-constants.d.ts.map +1 -0
- package/dist/core/identity/identity-constants.js +35 -0
- package/dist/core/identity/identity-constants.js.map +1 -0
- package/dist/core/identity/identity-schema.d.ts +6 -0
- package/dist/core/identity/identity-schema.d.ts.map +1 -0
- package/dist/core/identity/identity-schema.js +55 -0
- package/dist/core/identity/identity-schema.js.map +1 -0
- package/dist/core/identity/meta-identity.d.ts +71 -0
- package/dist/core/identity/meta-identity.d.ts.map +1 -0
- package/dist/core/identity/meta-identity.js +129 -0
- package/dist/core/identity/meta-identity.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +11 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/object/meta-object.d.ts +39 -0
- package/dist/core/object/meta-object.d.ts.map +1 -0
- package/dist/core/object/meta-object.js +80 -0
- package/dist/core/object/meta-object.js.map +1 -0
- package/dist/core/object/object-constants.d.ts +5 -0
- package/dist/core/object/object-constants.d.ts.map +1 -0
- package/dist/core/object/object-constants.js +18 -0
- package/dist/core/object/object-constants.js.map +1 -0
- package/dist/core/object/object-schema.d.ts +4 -0
- package/dist/core/object/object-schema.d.ts.map +1 -0
- package/dist/core/object/object-schema.js +5 -0
- package/dist/core/object/object-schema.js.map +1 -0
- package/dist/core/parser-yaml.d.ts +3 -0
- package/dist/core/parser-yaml.d.ts.map +1 -0
- package/dist/core/parser-yaml.js +39 -0
- package/dist/core/parser-yaml.js.map +1 -0
- package/dist/core/query/query-constants.d.ts +20 -0
- package/dist/core/query/query-constants.d.ts.map +1 -0
- package/dist/core/query/query-constants.js +56 -0
- package/dist/core/query/query-constants.js.map +1 -0
- package/dist/core/relationship/find-reference.d.ts +22 -0
- package/dist/core/relationship/find-reference.d.ts.map +1 -0
- package/dist/core/relationship/find-reference.js +29 -0
- package/dist/core/relationship/find-reference.js.map +1 -0
- package/dist/core/relationship/meta-relationship.d.ts +11 -0
- package/dist/core/relationship/meta-relationship.d.ts.map +1 -0
- package/dist/core/relationship/meta-relationship.js +27 -0
- package/dist/core/relationship/meta-relationship.js.map +1 -0
- package/dist/core/relationship/relationship-constants.d.ts +14 -0
- package/dist/core/relationship/relationship-constants.d.ts.map +1 -0
- package/dist/core/relationship/relationship-constants.js +28 -0
- package/dist/core/relationship/relationship-constants.js.map +1 -0
- package/dist/core/relationship/relationship-schema.d.ts +4 -0
- package/dist/core/relationship/relationship-schema.d.ts.map +1 -0
- package/dist/core/relationship/relationship-schema.js +37 -0
- package/dist/core/relationship/relationship-schema.js.map +1 -0
- package/dist/core/validator/meta-validator.d.ts +29 -0
- package/dist/core/validator/meta-validator.d.ts.map +1 -0
- package/dist/core/validator/meta-validator.js +49 -0
- package/dist/core/validator/meta-validator.js.map +1 -0
- package/dist/core/validator/validator-constants.d.ts +11 -0
- package/dist/core/validator/validator-constants.d.ts.map +1 -0
- package/dist/core/validator/validator-constants.js +25 -0
- package/dist/core/validator/validator-constants.js.map +1 -0
- package/dist/core/validator/validator-schema.d.ts +4 -0
- package/dist/core/validator/validator-schema.d.ts.map +1 -0
- package/dist/core/validator/validator-schema.js +38 -0
- package/dist/core/validator/validator-schema.js.map +1 -0
- package/dist/core/yaml-desugar.d.ts +10 -0
- package/dist/core/yaml-desugar.d.ts.map +1 -0
- package/dist/core/yaml-desugar.js +99 -0
- package/dist/core/yaml-desugar.js.map +1 -0
- package/dist/core-attr-schemas.d.ts +22 -0
- package/dist/core-attr-schemas.d.ts.map +1 -0
- package/dist/core-attr-schemas.js +324 -0
- package/dist/core-attr-schemas.js.map +1 -0
- package/dist/core-types.d.ts +20 -0
- package/dist/core-types.d.ts.map +1 -0
- package/dist/core-types.js +225 -0
- package/dist/core-types.js.map +1 -0
- package/dist/data-converter.d.ts +17 -0
- package/dist/data-converter.d.ts.map +1 -0
- package/dist/data-converter.js +117 -0
- package/dist/data-converter.js.map +1 -0
- package/dist/data-type.d.ts +15 -0
- package/dist/data-type.d.ts.map +1 -0
- package/dist/data-type.js +25 -0
- package/dist/data-type.js.map +1 -0
- package/dist/db/db-attr-schemas.d.ts +8 -0
- package/dist/db/db-attr-schemas.d.ts.map +1 -0
- package/dist/db/db-attr-schemas.js +26 -0
- package/dist/db/db-attr-schemas.js.map +1 -0
- package/dist/db/db-provider.d.ts +3 -0
- package/dist/db/db-provider.d.ts.map +1 -0
- package/dist/db/db-provider.js +28 -0
- package/dist/db/db-provider.js.map +1 -0
- package/dist/errors.d.ts +26 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +59 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +70 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/loader/meta-data-loader.d.ts +87 -0
- package/dist/loader/meta-data-loader.d.ts.map +1 -0
- package/dist/loader/meta-data-loader.js +232 -0
- package/dist/loader/meta-data-loader.js.map +1 -0
- package/dist/loader/meta-data-source.d.ts +23 -0
- package/dist/loader/meta-data-source.d.ts.map +1 -0
- package/dist/loader/meta-data-source.js +20 -0
- package/dist/loader/meta-data-source.js.map +1 -0
- package/dist/loader/validation-passes.d.ts +7 -0
- package/dist/loader/validation-passes.d.ts.map +1 -0
- package/dist/loader/validation-passes.js +244 -0
- package/dist/loader/validation-passes.js.map +1 -0
- package/dist/meta/find-reference.d.ts +22 -0
- package/dist/meta/find-reference.d.ts.map +1 -0
- package/dist/meta/find-reference.js +29 -0
- package/dist/meta/find-reference.js.map +1 -0
- package/dist/meta/meta-attr.d.ts +8 -0
- package/dist/meta/meta-attr.d.ts.map +1 -0
- package/dist/meta/meta-attr.js +17 -0
- package/dist/meta/meta-attr.js.map +1 -0
- package/dist/meta/meta-data.d.ts +107 -0
- package/dist/meta/meta-data.d.ts.map +1 -0
- package/dist/meta/meta-data.js +302 -0
- package/dist/meta/meta-data.js.map +1 -0
- package/dist/meta/meta-field.d.ts +48 -0
- package/dist/meta/meta-field.d.ts.map +1 -0
- package/dist/meta/meta-field.js +94 -0
- package/dist/meta/meta-field.js.map +1 -0
- package/dist/meta/meta-identity.d.ts +71 -0
- package/dist/meta/meta-identity.d.ts.map +1 -0
- package/dist/meta/meta-identity.js +129 -0
- package/dist/meta/meta-identity.js.map +1 -0
- package/dist/meta/meta-layout.d.ts +23 -0
- package/dist/meta/meta-layout.d.ts.map +1 -0
- package/dist/meta/meta-layout.js +45 -0
- package/dist/meta/meta-layout.js.map +1 -0
- package/dist/meta/meta-object.d.ts +40 -0
- package/dist/meta/meta-object.d.ts.map +1 -0
- package/dist/meta/meta-object.js +81 -0
- package/dist/meta/meta-object.js.map +1 -0
- package/dist/meta/meta-origin.d.ts +32 -0
- package/dist/meta/meta-origin.d.ts.map +1 -0
- package/dist/meta/meta-origin.js +55 -0
- package/dist/meta/meta-origin.js.map +1 -0
- package/dist/meta/meta-relationship.d.ts +11 -0
- package/dist/meta/meta-relationship.d.ts.map +1 -0
- package/dist/meta/meta-relationship.js +27 -0
- package/dist/meta/meta-relationship.js.map +1 -0
- package/dist/meta/meta-root.d.ts +12 -0
- package/dist/meta/meta-root.d.ts.map +1 -0
- package/dist/meta/meta-root.js +24 -0
- package/dist/meta/meta-root.js.map +1 -0
- package/dist/meta/meta-source.d.ts +18 -0
- package/dist/meta/meta-source.d.ts.map +1 -0
- package/dist/meta/meta-source.js +31 -0
- package/dist/meta/meta-source.js.map +1 -0
- package/dist/meta/meta-validator.d.ts +29 -0
- package/dist/meta/meta-validator.d.ts.map +1 -0
- package/dist/meta/meta-validator.js +49 -0
- package/dist/meta/meta-validator.js.map +1 -0
- package/dist/meta/meta-view.d.ts +4 -0
- package/dist/meta/meta-view.d.ts.map +1 -0
- package/dist/meta/meta-view.js +8 -0
- package/dist/meta/meta-view.js.map +1 -0
- package/dist/naming.d.ts +27 -0
- package/dist/naming.d.ts.map +1 -0
- package/dist/naming.js +72 -0
- package/dist/naming.js.map +1 -0
- package/dist/object-serializer.d.ts +10 -0
- package/dist/object-serializer.d.ts.map +1 -0
- package/dist/object-serializer.js +128 -0
- package/dist/object-serializer.js.map +1 -0
- package/dist/overlay.d.ts +2 -0
- package/dist/overlay.d.ts.map +1 -0
- package/dist/overlay.js +6 -0
- package/dist/overlay.js.map +1 -0
- package/dist/parser-core.d.ts +47 -0
- package/dist/parser-core.d.ts.map +1 -0
- package/dist/parser-core.js +516 -0
- package/dist/parser-core.js.map +1 -0
- package/dist/parser-json.d.ts +4 -0
- package/dist/parser-json.d.ts.map +1 -0
- package/dist/parser-json.js +19 -0
- package/dist/parser-json.js.map +1 -0
- package/dist/persistence/db/db-attr-schemas.d.ts +8 -0
- package/dist/persistence/db/db-attr-schemas.d.ts.map +1 -0
- package/dist/persistence/db/db-attr-schemas.js +28 -0
- package/dist/persistence/db/db-attr-schemas.js.map +1 -0
- package/dist/persistence/db/db-constants.d.ts +5 -0
- package/dist/persistence/db/db-constants.d.ts.map +1 -0
- package/dist/persistence/db/db-constants.js +6 -0
- package/dist/persistence/db/db-constants.js.map +1 -0
- package/dist/persistence/db/db-provider.d.ts +3 -0
- package/dist/persistence/db/db-provider.d.ts.map +1 -0
- package/dist/persistence/db/db-provider.js +29 -0
- package/dist/persistence/db/db-provider.js.map +1 -0
- package/dist/persistence/db/db-schema.d.ts +8 -0
- package/dist/persistence/db/db-schema.d.ts.map +1 -0
- package/dist/persistence/db/db-schema.js +27 -0
- package/dist/persistence/db/db-schema.js.map +1 -0
- package/dist/persistence/origin/meta-origin.d.ts +32 -0
- package/dist/persistence/origin/meta-origin.d.ts.map +1 -0
- package/dist/persistence/origin/meta-origin.js +55 -0
- package/dist/persistence/origin/meta-origin.js.map +1 -0
- package/dist/persistence/origin/origin-constants.d.ts +12 -0
- package/dist/persistence/origin/origin-constants.d.ts.map +1 -0
- package/dist/persistence/origin/origin-constants.js +27 -0
- package/dist/persistence/origin/origin-constants.js.map +1 -0
- package/dist/persistence/origin/origin-schema.d.ts +4 -0
- package/dist/persistence/origin/origin-schema.d.ts.map +1 -0
- package/dist/persistence/origin/origin-schema.js +49 -0
- package/dist/persistence/origin/origin-schema.js.map +1 -0
- package/dist/persistence/source/meta-source.d.ts +18 -0
- package/dist/persistence/source/meta-source.d.ts.map +1 -0
- package/dist/persistence/source/meta-source.js +31 -0
- package/dist/persistence/source/meta-source.js.map +1 -0
- package/dist/persistence/source/source-constants.d.ts +16 -0
- package/dist/persistence/source/source-constants.d.ts.map +1 -0
- package/dist/persistence/source/source-constants.js +28 -0
- package/dist/persistence/source/source-constants.js.map +1 -0
- package/dist/presentation/layout/layout-constants.d.ts +10 -0
- package/dist/presentation/layout/layout-constants.d.ts.map +1 -0
- package/dist/presentation/layout/layout-constants.js +21 -0
- package/dist/presentation/layout/layout-constants.js.map +1 -0
- package/dist/presentation/layout/layout-schema.d.ts +4 -0
- package/dist/presentation/layout/layout-schema.d.ts.map +1 -0
- package/dist/presentation/layout/layout-schema.js +46 -0
- package/dist/presentation/layout/layout-schema.js.map +1 -0
- package/dist/presentation/layout/meta-layout.d.ts +23 -0
- package/dist/presentation/layout/meta-layout.d.ts.map +1 -0
- package/dist/presentation/layout/meta-layout.js +47 -0
- package/dist/presentation/layout/meta-layout.js.map +1 -0
- package/dist/presentation/view/meta-view.d.ts +4 -0
- package/dist/presentation/view/meta-view.d.ts.map +1 -0
- package/dist/presentation/view/meta-view.js +8 -0
- package/dist/presentation/view/meta-view.js.map +1 -0
- package/dist/presentation/view/view-constants.d.ts +20 -0
- package/dist/presentation/view/view-constants.d.ts.map +1 -0
- package/dist/presentation/view/view-constants.js +47 -0
- package/dist/presentation/view/view-constants.js.map +1 -0
- package/dist/presentation/view/view-schema.d.ts +4 -0
- package/dist/presentation/view/view-schema.d.ts.map +1 -0
- package/dist/presentation/view/view-schema.js +15 -0
- package/dist/presentation/view/view-schema.js.map +1 -0
- package/dist/provider.d.ts +20 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +58 -0
- package/dist/provider.js.map +1 -0
- package/dist/registry.d.ts +89 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +107 -0
- package/dist/registry.js.map +1 -0
- package/dist/serializer-json.d.ts +16 -0
- package/dist/serializer-json.d.ts.map +1 -0
- package/dist/serializer-json.js +154 -0
- package/dist/serializer-json.js.map +1 -0
- package/dist/shared/base-types.d.ts +23 -0
- package/dist/shared/base-types.d.ts.map +1 -0
- package/dist/shared/base-types.js +43 -0
- package/dist/shared/base-types.js.map +1 -0
- package/dist/shared/meta-data.d.ts +123 -0
- package/dist/shared/meta-data.d.ts.map +1 -0
- package/dist/shared/meta-data.js +365 -0
- package/dist/shared/meta-data.js.map +1 -0
- package/dist/shared/meta-root.d.ts +12 -0
- package/dist/shared/meta-root.d.ts.map +1 -0
- package/dist/shared/meta-root.js +24 -0
- package/dist/shared/meta-root.js.map +1 -0
- package/dist/shared/structural.d.ts +20 -0
- package/dist/shared/structural.d.ts.map +1 -0
- package/dist/shared/structural.js +49 -0
- package/dist/shared/structural.js.map +1 -0
- package/dist/subtype-rules.d.ts +8 -0
- package/dist/subtype-rules.d.ts.map +1 -0
- package/dist/subtype-rules.js +34 -0
- package/dist/subtype-rules.js.map +1 -0
- package/dist/super-resolve.d.ts +34 -0
- package/dist/super-resolve.d.ts.map +1 -0
- package/dist/super-resolve.js +124 -0
- package/dist/super-resolve.js.map +1 -0
- package/package.json +50 -0
- package/src/attr-class-map.ts +64 -0
- package/src/attr-schema-validate.ts +134 -0
- package/src/core/attr/attr-constants.ts +31 -0
- package/src/core/attr/meta-attr-filter.ts +67 -0
- package/src/core/attr/meta-attr-properties.ts +26 -0
- package/src/core/attr/meta-attr-stringarray.ts +31 -0
- package/src/core/attr/meta-attr.ts +125 -0
- package/src/core/export-json.ts +66 -0
- package/src/core/field/field-constants.ts +79 -0
- package/src/core/field/field-schema.ts +121 -0
- package/src/core/field/meta-field.ts +179 -0
- package/src/core/file-meta-data-loader.ts +89 -0
- package/src/core/file-source.ts +52 -0
- package/src/core/identity/identity-constants.ts +44 -0
- package/src/core/identity/identity-schema.ts +80 -0
- package/src/core/identity/meta-identity.ts +148 -0
- package/src/core/index.ts +12 -0
- package/src/core/object/meta-object.ts +151 -0
- package/src/core/object/object-constants.ts +21 -0
- package/src/core/object/object-schema.ts +7 -0
- package/src/core/parser-yaml.ts +54 -0
- package/src/core/query/query-constants.ts +66 -0
- package/src/core/relationship/find-reference.ts +44 -0
- package/src/core/relationship/meta-relationship.ts +36 -0
- package/src/core/relationship/relationship-constants.ts +38 -0
- package/src/core/relationship/relationship-schema.ts +49 -0
- package/src/core/validator/meta-validator.ts +62 -0
- package/src/core/validator/validator-constants.ts +31 -0
- package/src/core/validator/validator-schema.ts +50 -0
- package/src/core/yaml-desugar.ts +145 -0
- package/src/core-types.ts +329 -0
- package/src/data-converter.ts +125 -0
- package/src/data-type.ts +33 -0
- package/src/errors.ts +68 -0
- package/src/index.ts +165 -0
- package/src/loader/meta-data-loader.ts +307 -0
- package/src/loader/meta-data-source.ts +35 -0
- package/src/loader/validation-passes.ts +370 -0
- package/src/naming.ts +86 -0
- package/src/object-serializer.ts +153 -0
- package/src/overlay.ts +5 -0
- package/src/parser-core.ts +815 -0
- package/src/parser-json.ts +28 -0
- package/src/persistence/db/db-constants.ts +6 -0
- package/src/persistence/db/db-provider.ts +36 -0
- package/src/persistence/db/db-schema.ts +40 -0
- package/src/persistence/origin/meta-origin.ts +67 -0
- package/src/persistence/origin/origin-constants.ts +35 -0
- package/src/persistence/origin/origin-schema.ts +66 -0
- package/src/persistence/source/meta-source.ts +38 -0
- package/src/persistence/source/source-constants.ts +35 -0
- package/src/presentation/layout/layout-constants.ts +27 -0
- package/src/presentation/layout/layout-schema.ts +62 -0
- package/src/presentation/layout/meta-layout.ts +61 -0
- package/src/presentation/view/meta-view.ts +8 -0
- package/src/presentation/view/view-constants.ts +53 -0
- package/src/presentation/view/view-schema.ts +21 -0
- package/src/provider.ts +85 -0
- package/src/registry.ts +190 -0
- package/src/serializer-json.ts +210 -0
- package/src/shared/base-types.ts +52 -0
- package/src/shared/meta-data.ts +443 -0
- package/src/shared/meta-root.ts +33 -0
- package/src/shared/structural.ts +62 -0
- package/src/subtype-rules.ts +56 -0
- package/src/super-resolve.ts +147 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Canonical JSON parser.
|
|
2
|
+
//
|
|
3
|
+
// parseJson is a thin front-end: strip the UTF-8 BOM, JSON.parse, then hand
|
|
4
|
+
// the canonical object to the shared buildTree (parser-core.ts).
|
|
5
|
+
|
|
6
|
+
import { ParseError } from "./errors.js";
|
|
7
|
+
import { buildTree, errOpts } from "./parser-core.js";
|
|
8
|
+
import type { ParseOptions, ParseResult } from "./parser-core.js";
|
|
9
|
+
|
|
10
|
+
export type { ParseOptions, ParseResult } from "./parser-core.js";
|
|
11
|
+
|
|
12
|
+
export function parseJson(content: string, opts: ParseOptions): ParseResult {
|
|
13
|
+
// Strip UTF-8 BOM if present (Java-authored files often have it).
|
|
14
|
+
const normalizedContent =
|
|
15
|
+
content.charCodeAt(0) === 0xfeff ? content.slice(1) : content;
|
|
16
|
+
|
|
17
|
+
let parsed: unknown;
|
|
18
|
+
try {
|
|
19
|
+
parsed = JSON.parse(normalizedContent);
|
|
20
|
+
} catch (err) {
|
|
21
|
+
throw new ParseError(
|
|
22
|
+
`Invalid JSON: ${(err as Error).message}`,
|
|
23
|
+
{ ...errOpts(opts.sourceName), code: "ERR_MALFORMED_JSON" },
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return buildTree(parsed, opts);
|
|
28
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// DB concern constants — physical DB column attr keys.
|
|
2
|
+
|
|
3
|
+
/** Custom DB column name override on a field (maps to @dbColumn in metadata). */
|
|
4
|
+
export const FIELD_ATTR_DB_COLUMN = "dbColumn";
|
|
5
|
+
/** When true, suppress the @filterable-without-index Loader warning (Project D drift check). */
|
|
6
|
+
export const FIELD_ATTR_DB_INDEXED = "db.indexed";
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// dbProvider — the DB-domain MetaDataTypeProvider. Registers the DB-domain
|
|
2
|
+
// attributes (@dbColumn, @db.indexed on fields; @name on source.dbTable /
|
|
3
|
+
// source.dbView) by extending the core-registered types. Mirrors Java's
|
|
4
|
+
// CoreDBMetaDataProvider (com.metaobjects.database).
|
|
5
|
+
|
|
6
|
+
import type { MetaDataTypeProvider } from "../../provider.js";
|
|
7
|
+
import type { TypeRegistry } from "../../registry.js";
|
|
8
|
+
import { TYPE_FIELD, TYPE_SOURCE } from "../../shared/base-types.js";
|
|
9
|
+
import { FIELD_SUBTYPES } from "../../core/field/field-constants.js";
|
|
10
|
+
import {
|
|
11
|
+
SOURCE_SUBTYPE_DB_TABLE,
|
|
12
|
+
SOURCE_SUBTYPE_DB_VIEW,
|
|
13
|
+
} from "../source/source-constants.js";
|
|
14
|
+
import { dbColumnSchema, dbIndexedSchema, sourceNameSchema } from "./db-schema.js";
|
|
15
|
+
|
|
16
|
+
export const dbProvider: MetaDataTypeProvider = {
|
|
17
|
+
id: "metaobjects-db",
|
|
18
|
+
dependencies: ["metaobjects-core-types"],
|
|
19
|
+
description:
|
|
20
|
+
"DB-domain attributes — @dbColumn / @db.indexed on fields, @name on source.dbTable / source.dbView.",
|
|
21
|
+
registerTypes(registry: TypeRegistry): void {
|
|
22
|
+
for (const subType of FIELD_SUBTYPES) {
|
|
23
|
+
registry.extend(TYPE_FIELD, subType, {
|
|
24
|
+
attributes: [dbColumnSchema, dbIndexedSchema],
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
// Two explicit calls (not a loop) — dbTable and dbView are the only DB
|
|
28
|
+
// source subtypes, and there is no DB_SOURCE_SUBTYPES constant to loop.
|
|
29
|
+
registry.extend(TYPE_SOURCE, SOURCE_SUBTYPE_DB_TABLE, {
|
|
30
|
+
attributes: [sourceNameSchema],
|
|
31
|
+
});
|
|
32
|
+
registry.extend(TYPE_SOURCE, SOURCE_SUBTYPE_DB_VIEW, {
|
|
33
|
+
attributes: [sourceNameSchema],
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// DB-domain attribute schemas — registered by dbProvider (db-provider.ts),
|
|
2
|
+
// not the core metamodel.
|
|
3
|
+
|
|
4
|
+
import type { AttrSchema } from "../../registry.js";
|
|
5
|
+
import {
|
|
6
|
+
ATTR_SUBTYPE_STRING,
|
|
7
|
+
ATTR_SUBTYPE_BOOLEAN,
|
|
8
|
+
} from "../../core/attr/attr-constants.js";
|
|
9
|
+
import {
|
|
10
|
+
FIELD_ATTR_DB_COLUMN,
|
|
11
|
+
FIELD_ATTR_DB_INDEXED,
|
|
12
|
+
} from "./db-constants.js";
|
|
13
|
+
import { SOURCE_ATTR_NAME } from "../source/source-constants.js";
|
|
14
|
+
|
|
15
|
+
/** `@dbColumn` — column-name override; on every field subtype. */
|
|
16
|
+
export const dbColumnSchema: AttrSchema = {
|
|
17
|
+
name: FIELD_ATTR_DB_COLUMN,
|
|
18
|
+
valueType: ATTR_SUBTYPE_STRING,
|
|
19
|
+
required: false,
|
|
20
|
+
description:
|
|
21
|
+
"Override the generated SQL column name for this field. Defaults to the field name run through the project's columnNamingStrategy.",
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/** `@db.indexed` — suppress the @filterable-without-index warning; on every field subtype. */
|
|
25
|
+
export const dbIndexedSchema: AttrSchema = {
|
|
26
|
+
name: FIELD_ATTR_DB_INDEXED,
|
|
27
|
+
valueType: ATTR_SUBTYPE_BOOLEAN,
|
|
28
|
+
required: false,
|
|
29
|
+
description:
|
|
30
|
+
"When true, suppress the @filterable-without-index Loader warning (the field is indexed by other means).",
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/** `@name` — the SQL table/view identifier; on source.dbTable and source.dbView. */
|
|
34
|
+
export const sourceNameSchema: AttrSchema = {
|
|
35
|
+
name: SOURCE_ATTR_NAME,
|
|
36
|
+
valueType: ATTR_SUBTYPE_STRING,
|
|
37
|
+
required: false,
|
|
38
|
+
description:
|
|
39
|
+
"The SQL table or view name for this source. Defaults to the object name run through the columnNamingStrategy when omitted.",
|
|
40
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// MetaOrigin — concrete node class for type=origin nodes.
|
|
2
|
+
// Field-level provenance (Project E).
|
|
3
|
+
// passthrough / aggregate origin subtypes declare how field values are derived.
|
|
4
|
+
//
|
|
5
|
+
// MetaPassthroughOrigin and MetaAggregateOrigin are co-located subtype classes
|
|
6
|
+
// (mirrors the meta-identity.ts pattern).
|
|
7
|
+
//
|
|
8
|
+
// Extends MetaData directly: no model wrapper, no metaOf() indirection.
|
|
9
|
+
|
|
10
|
+
import { MetaData } from "../../shared/meta-data.js";
|
|
11
|
+
import {
|
|
12
|
+
ORIGIN_PASSTHROUGH_ATTR_FROM,
|
|
13
|
+
ORIGIN_PASSTHROUGH_ATTR_VIA,
|
|
14
|
+
ORIGIN_AGGREGATE_ATTR_AGG,
|
|
15
|
+
ORIGIN_AGGREGATE_ATTR_OF,
|
|
16
|
+
ORIGIN_AGGREGATE_ATTR_VIA,
|
|
17
|
+
type AggregateFunction,
|
|
18
|
+
} from "./origin-constants.js";
|
|
19
|
+
|
|
20
|
+
export class MetaOrigin extends MetaData {}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Passthrough origin — the field's value is sourced directly from a
|
|
24
|
+
* cross-entity field reference (e.g. a projection that forwards Program.title).
|
|
25
|
+
*
|
|
26
|
+
* Carries `@from` (required): the dotted Entity.field reference identifying
|
|
27
|
+
* the source value.
|
|
28
|
+
*/
|
|
29
|
+
export class MetaPassthroughOrigin extends MetaOrigin {
|
|
30
|
+
/** The dotted-path cross-entity field reference this origin passes through (e.g. "Program.title"). */
|
|
31
|
+
get from(): string | undefined {
|
|
32
|
+
const v = this.ownAttr(ORIGIN_PASSTHROUGH_ATTR_FROM);
|
|
33
|
+
return typeof v === "string" ? v : undefined;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** Optional dotted relationship path used to reach the source entity (e.g. "Program.weeks"). */
|
|
37
|
+
get via(): string | undefined {
|
|
38
|
+
const v = this.ownAttr(ORIGIN_PASSTHROUGH_ATTR_VIA);
|
|
39
|
+
return typeof v === "string" ? v : undefined;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Aggregate origin — the field's value is computed by aggregating values
|
|
45
|
+
* over a relationship path (count / sum / avg / min / max).
|
|
46
|
+
*
|
|
47
|
+
* Carries `@agg`, `@of`, and `@via` (all required).
|
|
48
|
+
*/
|
|
49
|
+
export class MetaAggregateOrigin extends MetaOrigin {
|
|
50
|
+
/** The aggregate function (count | sum | avg | min | max). */
|
|
51
|
+
get agg(): AggregateFunction | undefined {
|
|
52
|
+
const v = this.ownAttr(ORIGIN_AGGREGATE_ATTR_AGG);
|
|
53
|
+
return typeof v === "string" ? (v as AggregateFunction) : undefined;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** The dotted-path target of the aggregate (e.g. "Week.id"). */
|
|
57
|
+
get of(): string | undefined {
|
|
58
|
+
const v = this.ownAttr(ORIGIN_AGGREGATE_ATTR_OF);
|
|
59
|
+
return typeof v === "string" ? v : undefined;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** The dotted relationship path the aggregate walks (e.g. "Program.weeks"). */
|
|
63
|
+
get via(): string | undefined {
|
|
64
|
+
const v = this.ownAttr(ORIGIN_AGGREGATE_ATTR_VIA);
|
|
65
|
+
return typeof v === "string" ? v : undefined;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Origin concern constants — subtypes and attr keys for the origin.* type family.
|
|
2
|
+
|
|
3
|
+
import { SUBTYPE_BASE } from "../../shared/base-types.js";
|
|
4
|
+
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Origin type — field-level provenance (Project E).
|
|
7
|
+
//
|
|
8
|
+
// Origin is a child of `field`. Says "this field's value comes from there."
|
|
9
|
+
// passthrough: from <Entity.field> [via <relationship path>]
|
|
10
|
+
// aggregate: <agg> of <Entity.field> via <relationship path>
|
|
11
|
+
//
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
|
|
14
|
+
export const ORIGIN_SUBTYPE_PASSTHROUGH = "passthrough";
|
|
15
|
+
export const ORIGIN_SUBTYPE_AGGREGATE = "aggregate";
|
|
16
|
+
|
|
17
|
+
export const ORIGIN_SUBTYPES = [
|
|
18
|
+
SUBTYPE_BASE,
|
|
19
|
+
ORIGIN_SUBTYPE_PASSTHROUGH,
|
|
20
|
+
ORIGIN_SUBTYPE_AGGREGATE,
|
|
21
|
+
] as const;
|
|
22
|
+
export type OriginSubType = (typeof ORIGIN_SUBTYPES)[number];
|
|
23
|
+
|
|
24
|
+
// passthrough attrs
|
|
25
|
+
export const ORIGIN_PASSTHROUGH_ATTR_FROM = "from";
|
|
26
|
+
export const ORIGIN_PASSTHROUGH_ATTR_VIA = "via";
|
|
27
|
+
|
|
28
|
+
// aggregate attrs
|
|
29
|
+
export const ORIGIN_AGGREGATE_ATTR_AGG = "agg";
|
|
30
|
+
export const ORIGIN_AGGREGATE_ATTR_OF = "of";
|
|
31
|
+
export const ORIGIN_AGGREGATE_ATTR_VIA = "via";
|
|
32
|
+
|
|
33
|
+
// aggregate function vocabulary
|
|
34
|
+
export const AGGREGATE_FUNCTIONS = ["count", "sum", "avg", "min", "max"] as const;
|
|
35
|
+
export type AggregateFunction = (typeof AGGREGATE_FUNCTIONS)[number];
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// Origin attribute schemas — per-subtype attr inventories for origin types.
|
|
2
|
+
// Consumed by registerCoreTypes().
|
|
3
|
+
|
|
4
|
+
import type { AttrSchema } from "../../registry.js";
|
|
5
|
+
import { ATTR_SUBTYPE_STRING } from "../../core/attr/attr-constants.js";
|
|
6
|
+
import { SUBTYPE_BASE } from "../../shared/base-types.js";
|
|
7
|
+
import {
|
|
8
|
+
ORIGIN_SUBTYPE_PASSTHROUGH,
|
|
9
|
+
ORIGIN_SUBTYPE_AGGREGATE,
|
|
10
|
+
ORIGIN_PASSTHROUGH_ATTR_FROM,
|
|
11
|
+
ORIGIN_PASSTHROUGH_ATTR_VIA,
|
|
12
|
+
ORIGIN_AGGREGATE_ATTR_AGG,
|
|
13
|
+
ORIGIN_AGGREGATE_ATTR_OF,
|
|
14
|
+
ORIGIN_AGGREGATE_ATTR_VIA,
|
|
15
|
+
AGGREGATE_FUNCTIONS,
|
|
16
|
+
} from "./origin-constants.js";
|
|
17
|
+
|
|
18
|
+
/** Attrs on origin.passthrough — @from is required. */
|
|
19
|
+
const passthroughOriginAttrs: AttrSchema[] = [
|
|
20
|
+
{
|
|
21
|
+
name: ORIGIN_PASSTHROUGH_ATTR_FROM,
|
|
22
|
+
valueType: ATTR_SUBTYPE_STRING,
|
|
23
|
+
required: true,
|
|
24
|
+
description:
|
|
25
|
+
"Dotted Entity.field reference identifying the source value this projection field passes through (e.g. 'Program.title').",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: ORIGIN_PASSTHROUGH_ATTR_VIA,
|
|
29
|
+
valueType: ATTR_SUBTYPE_STRING,
|
|
30
|
+
required: false,
|
|
31
|
+
description:
|
|
32
|
+
"Optional dotted relationship path used to reach the source entity (e.g. 'Program.weeks').",
|
|
33
|
+
},
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
/** Attrs on origin.aggregate — @agg, @of, @via all required. */
|
|
37
|
+
const aggregateOriginAttrs: AttrSchema[] = [
|
|
38
|
+
{
|
|
39
|
+
name: ORIGIN_AGGREGATE_ATTR_AGG,
|
|
40
|
+
valueType: ATTR_SUBTYPE_STRING,
|
|
41
|
+
required: true,
|
|
42
|
+
allowedValues: [...AGGREGATE_FUNCTIONS],
|
|
43
|
+
description: "Aggregate function applied over the relationship path: count, sum, avg, min, or max.",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: ORIGIN_AGGREGATE_ATTR_OF,
|
|
47
|
+
valueType: ATTR_SUBTYPE_STRING,
|
|
48
|
+
required: true,
|
|
49
|
+
description:
|
|
50
|
+
"Dotted Entity.field reference identifying the column being aggregated (e.g. 'Week.durationMinutes').",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: ORIGIN_AGGREGATE_ATTR_VIA,
|
|
54
|
+
valueType: ATTR_SUBTYPE_STRING,
|
|
55
|
+
required: true,
|
|
56
|
+
description:
|
|
57
|
+
"Dotted relationship path from the base entity to the aggregated rows (e.g. 'Program.weeks' or 'Program.weeks.workouts').",
|
|
58
|
+
},
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
/** Attrs per origin subtype. base has none; passthrough and aggregate carry their respective attrs. */
|
|
62
|
+
export const ORIGIN_ATTRS_MAP = new Map<string, AttrSchema[]>([
|
|
63
|
+
[SUBTYPE_BASE, []],
|
|
64
|
+
[ORIGIN_SUBTYPE_PASSTHROUGH, [...passthroughOriginAttrs]],
|
|
65
|
+
[ORIGIN_SUBTYPE_AGGREGATE, [...aggregateOriginAttrs]],
|
|
66
|
+
]);
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// MetaSource — concrete node class for type=source nodes.
|
|
2
|
+
// Declares where an object's data lives (Project E).
|
|
3
|
+
// dbTable / dbView source subtypes declare the SQL table or view name.
|
|
4
|
+
//
|
|
5
|
+
// Extends MetaData directly: no model wrapper, no metaOf() indirection.
|
|
6
|
+
|
|
7
|
+
import { MetaData } from "../../shared/meta-data.js";
|
|
8
|
+
import {
|
|
9
|
+
SOURCE_ATTR_NAME,
|
|
10
|
+
SOURCE_SUBTYPE_DB_TABLE,
|
|
11
|
+
SOURCE_SUBTYPE_DB_VIEW,
|
|
12
|
+
} from "./source-constants.js";
|
|
13
|
+
|
|
14
|
+
export class MetaSource extends MetaData {
|
|
15
|
+
/** The SQL table or view name (value of @name attr on the source child). */
|
|
16
|
+
get sourceName(): string | undefined {
|
|
17
|
+
const v = this.ownAttr(SOURCE_ATTR_NAME);
|
|
18
|
+
return typeof v === "string" ? v : undefined;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* True when this source is a `dbTable` (writable).
|
|
23
|
+
* Explicitly defined rather than derived from `isReadOnly()` so it remains
|
|
24
|
+
* correct if a third source subtype is added in the future.
|
|
25
|
+
*/
|
|
26
|
+
isWritable(): boolean {
|
|
27
|
+
return this.subType === SOURCE_SUBTYPE_DB_TABLE;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* True when this source is a `dbView` (read-only projection).
|
|
32
|
+
* Explicitly defined rather than derived from `isWritable()` so it remains
|
|
33
|
+
* correct if a third source subtype is added in the future.
|
|
34
|
+
*/
|
|
35
|
+
isReadOnly(): boolean {
|
|
36
|
+
return this.subType === SOURCE_SUBTYPE_DB_VIEW;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Source concern constants — subtypes and attr keys for the source.* type family.
|
|
2
|
+
|
|
3
|
+
import { SUBTYPE_BASE } from "../../shared/base-types.js";
|
|
4
|
+
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Source type — declares where an object's data lives (Project E).
|
|
7
|
+
// dbTable / dbView ship in v1. Multiple sources per object are allowed
|
|
8
|
+
// and meaningful (write-through CQRS: dbTable for writes + dbView for reads).
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
export const SOURCE_SUBTYPE_DB_TABLE = "dbTable";
|
|
12
|
+
export const SOURCE_SUBTYPE_DB_VIEW = "dbView";
|
|
13
|
+
|
|
14
|
+
export const SOURCE_SUBTYPES = [
|
|
15
|
+
SUBTYPE_BASE,
|
|
16
|
+
SOURCE_SUBTYPE_DB_TABLE,
|
|
17
|
+
SOURCE_SUBTYPE_DB_VIEW,
|
|
18
|
+
] as const;
|
|
19
|
+
export type SourceSubType = (typeof SOURCE_SUBTYPES)[number];
|
|
20
|
+
|
|
21
|
+
// Source attrs — both dbTable and dbView use @name for the SQL identifier
|
|
22
|
+
// (table name and view name respectively). Same key for ergonomic consistency.
|
|
23
|
+
export const SOURCE_DB_TABLE_ATTR_NAME = "name";
|
|
24
|
+
export const SOURCE_DB_VIEW_ATTR_NAME = "name";
|
|
25
|
+
/** Shared @name attr key for MetaSource (covers both dbTable and dbView). Use this
|
|
26
|
+
* in generic source accessors instead of the subtype-specific aliases above. */
|
|
27
|
+
export const SOURCE_ATTR_NAME = "name";
|
|
28
|
+
|
|
29
|
+
/** Optional DB schema attr on source[dbTable] / source[dbView]. Postgres uses
|
|
30
|
+
* this to namespace tables/views. SQLite has no schema concept and rejects
|
|
31
|
+
* any non-default value. Default for Postgres: "public". */
|
|
32
|
+
export const SOURCE_ATTR_SCHEMA = "schema";
|
|
33
|
+
|
|
34
|
+
/** Default Postgres schema when @schema is omitted from a source. */
|
|
35
|
+
export const DEFAULT_DB_SCHEMA_POSTGRES = "public";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Layout concern constants — subtypes and dataGrid attr keys.
|
|
2
|
+
|
|
3
|
+
import { SUBTYPE_BASE } from "../../shared/base-types.js";
|
|
4
|
+
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Layout type — object-level UI surfaces (replaces Project B's object-attached
|
|
7
|
+
// data-grid view subtype; views are now strictly field-level per Java parity).
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
|
|
10
|
+
export const LAYOUT_SUBTYPE_DATA_GRID = "dataGrid";
|
|
11
|
+
|
|
12
|
+
export const LAYOUT_SUBTYPES = [
|
|
13
|
+
SUBTYPE_BASE,
|
|
14
|
+
LAYOUT_SUBTYPE_DATA_GRID,
|
|
15
|
+
] as const;
|
|
16
|
+
export type LayoutSubType = (typeof LAYOUT_SUBTYPES)[number];
|
|
17
|
+
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Layout attrs (on dataGrid layouts)
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
|
|
22
|
+
export const LAYOUT_DATA_GRID_ATTR_PAGE_SIZE = "pageSize";
|
|
23
|
+
export const LAYOUT_DATA_GRID_ATTR_DEFAULT_SORT_FIELD = "defaultSortField";
|
|
24
|
+
export const LAYOUT_DATA_GRID_ATTR_DEFAULT_SORT_ORDER = "defaultSortOrder";
|
|
25
|
+
export const LAYOUT_DATA_GRID_ATTR_FILTERABLE = "filterable";
|
|
26
|
+
export const LAYOUT_DATA_GRID_ATTR_FILTER = "filter";
|
|
27
|
+
export const LAYOUT_DATA_GRID_ATTR_COLUMNS = "columns";
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// Layout attribute schemas — attrs for layout subtypes (e.g. dataGrid).
|
|
2
|
+
// Consumed by registerCoreTypes().
|
|
3
|
+
|
|
4
|
+
import type { AttrSchema } from "../../registry.js";
|
|
5
|
+
import {
|
|
6
|
+
ATTR_SUBTYPE_INT,
|
|
7
|
+
ATTR_SUBTYPE_STRING,
|
|
8
|
+
ATTR_SUBTYPE_BOOLEAN,
|
|
9
|
+
ATTR_SUBTYPE_FILTER,
|
|
10
|
+
ATTR_SUBTYPE_STRINGARRAY,
|
|
11
|
+
} from "../../core/attr/attr-constants.js";
|
|
12
|
+
import { SORT_ORDER_VALUES } from "../../core/query/query-constants.js";
|
|
13
|
+
import {
|
|
14
|
+
LAYOUT_DATA_GRID_ATTR_PAGE_SIZE,
|
|
15
|
+
LAYOUT_DATA_GRID_ATTR_DEFAULT_SORT_FIELD,
|
|
16
|
+
LAYOUT_DATA_GRID_ATTR_DEFAULT_SORT_ORDER,
|
|
17
|
+
LAYOUT_DATA_GRID_ATTR_FILTERABLE,
|
|
18
|
+
LAYOUT_DATA_GRID_ATTR_FILTER,
|
|
19
|
+
LAYOUT_DATA_GRID_ATTR_COLUMNS,
|
|
20
|
+
} from "./layout-constants.js";
|
|
21
|
+
|
|
22
|
+
/** Attrs on layout.dataGrid. */
|
|
23
|
+
export const dataGridLayoutAttrs: AttrSchema[] = [
|
|
24
|
+
{
|
|
25
|
+
name: LAYOUT_DATA_GRID_ATTR_PAGE_SIZE,
|
|
26
|
+
valueType: ATTR_SUBTYPE_INT,
|
|
27
|
+
required: false,
|
|
28
|
+
description: "Number of rows per page in the generated data grid.",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: LAYOUT_DATA_GRID_ATTR_DEFAULT_SORT_FIELD,
|
|
32
|
+
valueType: ATTR_SUBTYPE_STRING,
|
|
33
|
+
required: false,
|
|
34
|
+
description:
|
|
35
|
+
"Field name the grid is sorted by on initial render. Must reference an actual field on the entity.",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: LAYOUT_DATA_GRID_ATTR_DEFAULT_SORT_ORDER,
|
|
39
|
+
valueType: ATTR_SUBTYPE_STRING,
|
|
40
|
+
required: false,
|
|
41
|
+
allowedValues: [...SORT_ORDER_VALUES],
|
|
42
|
+
description: "Initial sort direction for the default sort field: 'asc' or 'desc'.",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: LAYOUT_DATA_GRID_ATTR_FILTERABLE,
|
|
46
|
+
valueType: ATTR_SUBTYPE_BOOLEAN,
|
|
47
|
+
required: false,
|
|
48
|
+
description: "When true, the generated grid exposes column filtering UI.",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: LAYOUT_DATA_GRID_ATTR_FILTER,
|
|
52
|
+
valueType: ATTR_SUBTYPE_FILTER,
|
|
53
|
+
required: false,
|
|
54
|
+
description: "Structured preset filter object applied to the grid at the metadata level. Desugared to canonical { field: { op: value } } form at parse time.",
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: LAYOUT_DATA_GRID_ATTR_COLUMNS,
|
|
58
|
+
valueType: ATTR_SUBTYPE_STRINGARRAY,
|
|
59
|
+
required: false,
|
|
60
|
+
description: "Flat ordered list of field names to display as grid columns.",
|
|
61
|
+
},
|
|
62
|
+
];
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// MetaLayout — concrete node class for type=layout nodes.
|
|
2
|
+
// Object-level UI surfaces (Project E; replaces object-attached data-grid view
|
|
3
|
+
// subtype; views are strictly field-level per Java parity).
|
|
4
|
+
//
|
|
5
|
+
// Extends MetaData directly: no model wrapper, no metaOf() indirection.
|
|
6
|
+
|
|
7
|
+
import { MetaData } from "../../shared/meta-data.js";
|
|
8
|
+
import {
|
|
9
|
+
LAYOUT_DATA_GRID_ATTR_PAGE_SIZE,
|
|
10
|
+
LAYOUT_DATA_GRID_ATTR_DEFAULT_SORT_FIELD,
|
|
11
|
+
LAYOUT_DATA_GRID_ATTR_DEFAULT_SORT_ORDER,
|
|
12
|
+
LAYOUT_DATA_GRID_ATTR_FILTERABLE,
|
|
13
|
+
LAYOUT_DATA_GRID_ATTR_FILTER,
|
|
14
|
+
LAYOUT_DATA_GRID_ATTR_COLUMNS,
|
|
15
|
+
} from "./layout-constants.js";
|
|
16
|
+
import type { SortOrderValue } from "../../core/query/query-constants.js";
|
|
17
|
+
|
|
18
|
+
export class MetaLayout extends MetaData {
|
|
19
|
+
/** The number of rows per page for the dataGrid layout. */
|
|
20
|
+
get pageSize(): number | undefined {
|
|
21
|
+
const v = this.ownAttr(LAYOUT_DATA_GRID_ATTR_PAGE_SIZE);
|
|
22
|
+
return typeof v === "number" ? v : undefined;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** The field name to sort by default in the dataGrid layout. */
|
|
26
|
+
get defaultSortField(): string | undefined {
|
|
27
|
+
const v = this.ownAttr(LAYOUT_DATA_GRID_ATTR_DEFAULT_SORT_FIELD);
|
|
28
|
+
return typeof v === "string" ? v : undefined;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The default sort order (`"asc"` or `"desc"`) for the dataGrid layout.
|
|
33
|
+
* Returns `undefined` when the attr is absent.
|
|
34
|
+
*/
|
|
35
|
+
get defaultSortOrder(): SortOrderValue | undefined {
|
|
36
|
+
const v = this.ownAttr(LAYOUT_DATA_GRID_ATTR_DEFAULT_SORT_ORDER);
|
|
37
|
+
return typeof v === "string" ? (v as SortOrderValue) : undefined;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* True when `@filterable: true` is set on the dataGrid layout.
|
|
42
|
+
* Defaults to `false` when the attr is absent.
|
|
43
|
+
*/
|
|
44
|
+
get filterable(): boolean {
|
|
45
|
+
return this.ownAttr(LAYOUT_DATA_GRID_ATTR_FILTERABLE) === true;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** The desugared preset filter object for the dataGrid layout, or undefined. */
|
|
49
|
+
get filter(): Record<string, unknown> | undefined {
|
|
50
|
+
const v = this.ownAttr(LAYOUT_DATA_GRID_ATTR_FILTER);
|
|
51
|
+
return typeof v === "object" && v !== null && !Array.isArray(v)
|
|
52
|
+
? (v as Record<string, unknown>)
|
|
53
|
+
: undefined;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** The ordered list of field names to display as columns in the dataGrid layout. */
|
|
57
|
+
get columns(): string[] {
|
|
58
|
+
const c = this.ownAttr(LAYOUT_DATA_GRID_ATTR_COLUMNS);
|
|
59
|
+
return Array.isArray(c) ? (c as string[]) : [];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// MetaView — concrete node class for type=view nodes.
|
|
2
|
+
//
|
|
3
|
+
// Extends MetaData directly: no model wrapper, no metaOf() indirection.
|
|
4
|
+
// Currently minimal — placeholder for v0.3+ view-level accessors.
|
|
5
|
+
|
|
6
|
+
import { MetaData } from "../../shared/meta-data.js";
|
|
7
|
+
|
|
8
|
+
export class MetaView extends MetaData {}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// View concern constants — subtypes and attr keys for the view.* type family.
|
|
2
|
+
|
|
3
|
+
import { SUBTYPE_BASE } from "../../shared/base-types.js";
|
|
4
|
+
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// View subtypes (13)
|
|
7
|
+
//
|
|
8
|
+
// The view's subType IS the UI control type. Each control kind has its own
|
|
9
|
+
// expected attrs (placeholder, maxLength, options, etc.) — runtime-ts
|
|
10
|
+
// surfaces them as opaque Record<string, unknown>; UI layers interpret.
|
|
11
|
+
// Mirrors metaobjects-dynamic/web/.../html/*View.java naming.
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
|
|
14
|
+
export const VIEW_SUBTYPE_TEXT = "text";
|
|
15
|
+
export const VIEW_SUBTYPE_TEXTAREA = "textarea";
|
|
16
|
+
export const VIEW_SUBTYPE_DATE = "date";
|
|
17
|
+
export const VIEW_SUBTYPE_MONTH = "month";
|
|
18
|
+
export const VIEW_SUBTYPE_HOTLINK = "hotlink";
|
|
19
|
+
export const VIEW_SUBTYPE_DROPDOWN = "dropdown";
|
|
20
|
+
export const VIEW_SUBTYPE_RADIO = "radio";
|
|
21
|
+
export const VIEW_SUBTYPE_CHECKBOX = "checkbox";
|
|
22
|
+
export const VIEW_SUBTYPE_NUMBER = "number";
|
|
23
|
+
export const VIEW_SUBTYPE_PASSWORD = "password";
|
|
24
|
+
export const VIEW_SUBTYPE_HIDDEN = "hidden";
|
|
25
|
+
export const VIEW_SUBTYPE_WEB = "web"; // abstract base for web-rendered views
|
|
26
|
+
export const VIEW_SUBTYPE_CURRENCY = "currency";
|
|
27
|
+
|
|
28
|
+
export const VIEW_SUBTYPES = [
|
|
29
|
+
SUBTYPE_BASE,
|
|
30
|
+
VIEW_SUBTYPE_TEXT,
|
|
31
|
+
VIEW_SUBTYPE_TEXTAREA,
|
|
32
|
+
VIEW_SUBTYPE_DATE,
|
|
33
|
+
VIEW_SUBTYPE_MONTH,
|
|
34
|
+
VIEW_SUBTYPE_HOTLINK,
|
|
35
|
+
VIEW_SUBTYPE_DROPDOWN,
|
|
36
|
+
VIEW_SUBTYPE_RADIO,
|
|
37
|
+
VIEW_SUBTYPE_CHECKBOX,
|
|
38
|
+
VIEW_SUBTYPE_NUMBER,
|
|
39
|
+
VIEW_SUBTYPE_PASSWORD,
|
|
40
|
+
VIEW_SUBTYPE_HIDDEN,
|
|
41
|
+
VIEW_SUBTYPE_WEB,
|
|
42
|
+
VIEW_SUBTYPE_CURRENCY,
|
|
43
|
+
] as const;
|
|
44
|
+
export type ViewSubType = (typeof VIEW_SUBTYPES)[number];
|
|
45
|
+
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// View attrs (on currency views)
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
|
|
50
|
+
/** BCP 47 locale code on a view[currency]. Defaults to "en-US" when omitted. */
|
|
51
|
+
export const VIEW_CURRENCY_ATTR_LOCALE = "locale";
|
|
52
|
+
/** Default BCP 47 locale code when @locale is omitted on a view[currency]. */
|
|
53
|
+
export const VIEW_CURRENCY_ATTR_LOCALE_DEFAULT = "en-US";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// View attribute schemas — per-subtype attr inventories for view types.
|
|
2
|
+
// Consumed by registerCoreTypes().
|
|
3
|
+
|
|
4
|
+
import type { AttrSchema } from "../../registry.js";
|
|
5
|
+
import { ATTR_SUBTYPE_STRING } from "../../core/attr/attr-constants.js";
|
|
6
|
+
import {
|
|
7
|
+
VIEW_CURRENCY_ATTR_LOCALE,
|
|
8
|
+
VIEW_CURRENCY_ATTR_LOCALE_DEFAULT,
|
|
9
|
+
} from "./view-constants.js";
|
|
10
|
+
|
|
11
|
+
/** Attrs on view.currency. */
|
|
12
|
+
export const currencyViewAttrs: AttrSchema[] = [
|
|
13
|
+
{
|
|
14
|
+
name: VIEW_CURRENCY_ATTR_LOCALE,
|
|
15
|
+
valueType: ATTR_SUBTYPE_STRING,
|
|
16
|
+
required: false,
|
|
17
|
+
default: VIEW_CURRENCY_ATTR_LOCALE_DEFAULT,
|
|
18
|
+
description:
|
|
19
|
+
"BCP 47 locale code controlling currency display formatting. Defaults to 'en-US' when omitted.",
|
|
20
|
+
},
|
|
21
|
+
];
|