@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 @@
|
|
|
1
|
+
{"version":3,"file":"meta-layout.js","sourceRoot":"","sources":["../../../src/presentation/layout/meta-layout.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,+EAA+E;AAC/E,4DAA4D;AAC5D,EAAE;AACF,wEAAwE;AAExE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EACL,+BAA+B,EAC/B,wCAAwC,EACxC,wCAAwC,EACxC,gCAAgC,EAChC,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAG/B,MAAM,OAAO,UAAW,SAAQ,QAAQ;IACtC,2DAA2D;IAC3D,IAAI,QAAQ;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;IAED,gEAAgE;IAChE,IAAI,gBAAgB;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;QACjE,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,IAAI,gBAAgB;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;QACjE,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,CAAC;IAED;;;OAGG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,gCAAgC,CAAC,KAAK,IAAI,CAAC;IACjE,CAAC;IAED,gFAAgF;IAChF,IAAI,MAAM;QACR,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7D,CAAC,CAAE,CAA6B;YAChC,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAED,oFAAoF;IACpF,IAAI,OAAO;QACT,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QACtD,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-view.d.ts","sourceRoot":"","sources":["../../../src/presentation/view/meta-view.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,qBAAa,QAAS,SAAQ,QAAQ;CAAG"}
|
|
@@ -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
|
+
import { MetaData } from "../../shared/meta-data.js";
|
|
6
|
+
export class MetaView extends MetaData {
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=meta-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-view.js","sourceRoot":"","sources":["../../../src/presentation/view/meta-view.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,wEAAwE;AACxE,kEAAkE;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,OAAO,QAAS,SAAQ,QAAQ;CAAG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const VIEW_SUBTYPE_TEXT = "text";
|
|
2
|
+
export declare const VIEW_SUBTYPE_TEXTAREA = "textarea";
|
|
3
|
+
export declare const VIEW_SUBTYPE_DATE = "date";
|
|
4
|
+
export declare const VIEW_SUBTYPE_MONTH = "month";
|
|
5
|
+
export declare const VIEW_SUBTYPE_HOTLINK = "hotlink";
|
|
6
|
+
export declare const VIEW_SUBTYPE_DROPDOWN = "dropdown";
|
|
7
|
+
export declare const VIEW_SUBTYPE_RADIO = "radio";
|
|
8
|
+
export declare const VIEW_SUBTYPE_CHECKBOX = "checkbox";
|
|
9
|
+
export declare const VIEW_SUBTYPE_NUMBER = "number";
|
|
10
|
+
export declare const VIEW_SUBTYPE_PASSWORD = "password";
|
|
11
|
+
export declare const VIEW_SUBTYPE_HIDDEN = "hidden";
|
|
12
|
+
export declare const VIEW_SUBTYPE_WEB = "web";
|
|
13
|
+
export declare const VIEW_SUBTYPE_CURRENCY = "currency";
|
|
14
|
+
export declare const VIEW_SUBTYPES: readonly ["base", "text", "textarea", "date", "month", "hotlink", "dropdown", "radio", "checkbox", "number", "password", "hidden", "web", "currency"];
|
|
15
|
+
export type ViewSubType = (typeof VIEW_SUBTYPES)[number];
|
|
16
|
+
/** BCP 47 locale code on a view[currency]. Defaults to "en-US" when omitted. */
|
|
17
|
+
export declare const VIEW_CURRENCY_ATTR_LOCALE = "locale";
|
|
18
|
+
/** Default BCP 47 locale code when @locale is omitted on a view[currency]. */
|
|
19
|
+
export declare const VIEW_CURRENCY_ATTR_LOCALE_DEFAULT = "en-US";
|
|
20
|
+
//# sourceMappingURL=view-constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-constants.d.ts","sourceRoot":"","sources":["../../../src/presentation/view/view-constants.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAC1C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAC1C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAC5C,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,eAAO,MAAM,aAAa,uJAehB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAMzD,gFAAgF;AAChF,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAClD,8EAA8E;AAC9E,eAAO,MAAM,iCAAiC,UAAU,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// View concern constants — subtypes and attr keys for the view.* type family.
|
|
2
|
+
import { SUBTYPE_BASE } from "../../shared/base-types.js";
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// View subtypes (13)
|
|
5
|
+
//
|
|
6
|
+
// The view's subType IS the UI control type. Each control kind has its own
|
|
7
|
+
// expected attrs (placeholder, maxLength, options, etc.) — runtime-ts
|
|
8
|
+
// surfaces them as opaque Record<string, unknown>; UI layers interpret.
|
|
9
|
+
// Mirrors metaobjects-dynamic/web/.../html/*View.java naming.
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
export const VIEW_SUBTYPE_TEXT = "text";
|
|
12
|
+
export const VIEW_SUBTYPE_TEXTAREA = "textarea";
|
|
13
|
+
export const VIEW_SUBTYPE_DATE = "date";
|
|
14
|
+
export const VIEW_SUBTYPE_MONTH = "month";
|
|
15
|
+
export const VIEW_SUBTYPE_HOTLINK = "hotlink";
|
|
16
|
+
export const VIEW_SUBTYPE_DROPDOWN = "dropdown";
|
|
17
|
+
export const VIEW_SUBTYPE_RADIO = "radio";
|
|
18
|
+
export const VIEW_SUBTYPE_CHECKBOX = "checkbox";
|
|
19
|
+
export const VIEW_SUBTYPE_NUMBER = "number";
|
|
20
|
+
export const VIEW_SUBTYPE_PASSWORD = "password";
|
|
21
|
+
export const VIEW_SUBTYPE_HIDDEN = "hidden";
|
|
22
|
+
export const VIEW_SUBTYPE_WEB = "web"; // abstract base for web-rendered views
|
|
23
|
+
export const VIEW_SUBTYPE_CURRENCY = "currency";
|
|
24
|
+
export const VIEW_SUBTYPES = [
|
|
25
|
+
SUBTYPE_BASE,
|
|
26
|
+
VIEW_SUBTYPE_TEXT,
|
|
27
|
+
VIEW_SUBTYPE_TEXTAREA,
|
|
28
|
+
VIEW_SUBTYPE_DATE,
|
|
29
|
+
VIEW_SUBTYPE_MONTH,
|
|
30
|
+
VIEW_SUBTYPE_HOTLINK,
|
|
31
|
+
VIEW_SUBTYPE_DROPDOWN,
|
|
32
|
+
VIEW_SUBTYPE_RADIO,
|
|
33
|
+
VIEW_SUBTYPE_CHECKBOX,
|
|
34
|
+
VIEW_SUBTYPE_NUMBER,
|
|
35
|
+
VIEW_SUBTYPE_PASSWORD,
|
|
36
|
+
VIEW_SUBTYPE_HIDDEN,
|
|
37
|
+
VIEW_SUBTYPE_WEB,
|
|
38
|
+
VIEW_SUBTYPE_CURRENCY,
|
|
39
|
+
];
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// View attrs (on currency views)
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
/** BCP 47 locale code on a view[currency]. Defaults to "en-US" when omitted. */
|
|
44
|
+
export const VIEW_CURRENCY_ATTR_LOCALE = "locale";
|
|
45
|
+
/** Default BCP 47 locale code when @locale is omitted on a view[currency]. */
|
|
46
|
+
export const VIEW_CURRENCY_ATTR_LOCALE_DEFAULT = "en-US";
|
|
47
|
+
//# sourceMappingURL=view-constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-constants.js","sourceRoot":"","sources":["../../../src/presentation/view/view-constants.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,8EAA8E;AAC9E,qBAAqB;AACrB,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,wEAAwE;AACxE,8DAA8D;AAC9D,8EAA8E;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAC9C,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAChD,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAC5C,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAC5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAU,uCAAuC;AACvF,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,YAAY;IACZ,iBAAiB;IACjB,qBAAqB;IACrB,iBAAiB;IACjB,kBAAkB;IAClB,oBAAoB;IACpB,qBAAqB;IACrB,kBAAkB;IAClB,qBAAqB;IACrB,mBAAmB;IACnB,qBAAqB;IACrB,mBAAmB;IACnB,gBAAgB;IAChB,qBAAqB;CACb,CAAC;AAGX,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E,gFAAgF;AAChF,MAAM,CAAC,MAAM,yBAAyB,GAAG,QAAQ,CAAC;AAClD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iCAAiC,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-schema.d.ts","sourceRoot":"","sources":["../../../src/presentation/view/view-schema.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOpD,8BAA8B;AAC9B,eAAO,MAAM,iBAAiB,EAAE,UAAU,EASzC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// View attribute schemas — per-subtype attr inventories for view types.
|
|
2
|
+
// Consumed by registerCoreTypes().
|
|
3
|
+
import { ATTR_SUBTYPE_STRING } from "../../core/attr/attr-constants.js";
|
|
4
|
+
import { VIEW_CURRENCY_ATTR_LOCALE, VIEW_CURRENCY_ATTR_LOCALE_DEFAULT, } from "./view-constants.js";
|
|
5
|
+
/** Attrs on view.currency. */
|
|
6
|
+
export const currencyViewAttrs = [
|
|
7
|
+
{
|
|
8
|
+
name: VIEW_CURRENCY_ATTR_LOCALE,
|
|
9
|
+
valueType: ATTR_SUBTYPE_STRING,
|
|
10
|
+
required: false,
|
|
11
|
+
default: VIEW_CURRENCY_ATTR_LOCALE_DEFAULT,
|
|
12
|
+
description: "BCP 47 locale code controlling currency display formatting. Defaults to 'en-US' when omitted.",
|
|
13
|
+
},
|
|
14
|
+
];
|
|
15
|
+
//# sourceMappingURL=view-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-schema.js","sourceRoot":"","sources":["../../../src/presentation/view/view-schema.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,mCAAmC;AAGnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EACL,yBAAyB,EACzB,iCAAiC,GAClC,MAAM,qBAAqB,CAAC;AAE7B,8BAA8B;AAC9B,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC7C;QACE,IAAI,EAAE,yBAAyB;QAC/B,SAAS,EAAE,mBAAmB;QAC9B,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,iCAAiC;QAC1C,WAAW,EACT,+FAA+F;KAClG;CACF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TypeRegistry } from "./registry.js";
|
|
2
|
+
/** A unit of metamodel registration. One provider per package. */
|
|
3
|
+
export interface MetaDataTypeProvider {
|
|
4
|
+
/** Stable id; other providers reference it in `dependencies`. */
|
|
5
|
+
readonly id: string;
|
|
6
|
+
/** Ids of providers that must register before this one. Default: none. */
|
|
7
|
+
readonly dependencies?: readonly string[];
|
|
8
|
+
/** Human/AI-facing description of what this provider contributes. */
|
|
9
|
+
readonly description?: string;
|
|
10
|
+
/** Register new types and/or extend existing ones. */
|
|
11
|
+
registerTypes(registry: TypeRegistry): void;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Build a TypeRegistry by composing providers. Providers are topologically
|
|
15
|
+
* sorted by their `dependencies`; the sort is stable — providers with no
|
|
16
|
+
* ordering constraint between them keep input order. Throws on a duplicate
|
|
17
|
+
* provider id, a missing dependency, or a dependency cycle.
|
|
18
|
+
*/
|
|
19
|
+
export declare function composeRegistry(providers: readonly MetaDataTypeProvider[]): TypeRegistry;
|
|
20
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,kEAAkE;AAClE,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,sDAAsD;IACtD,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,oBAAoB,EAAE,GACzC,YAAY,CAOd"}
|
package/dist/provider.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Type provider model — provider-based, extensible metamodel registration.
|
|
2
|
+
//
|
|
3
|
+
// A MetaDataTypeProvider contributes (and/or extends) registered types. The
|
|
4
|
+
// contract is cross-language identical (Java MetaDataTypeProvider parity);
|
|
5
|
+
// discovery is per-language — for TS it is explicit composition via
|
|
6
|
+
// composeRegistry. See docs/superpowers/specs/2026-05-17-type-provider-model-design.md.
|
|
7
|
+
import { TypeRegistry } from "./registry.js";
|
|
8
|
+
import { MetaModelError } from "./errors.js";
|
|
9
|
+
/**
|
|
10
|
+
* Build a TypeRegistry by composing providers. Providers are topologically
|
|
11
|
+
* sorted by their `dependencies`; the sort is stable — providers with no
|
|
12
|
+
* ordering constraint between them keep input order. Throws on a duplicate
|
|
13
|
+
* provider id, a missing dependency, or a dependency cycle.
|
|
14
|
+
*/
|
|
15
|
+
export function composeRegistry(providers) {
|
|
16
|
+
const ordered = topoSortProviders(providers);
|
|
17
|
+
const registry = new TypeRegistry();
|
|
18
|
+
for (const provider of ordered) {
|
|
19
|
+
provider.registerTypes(registry);
|
|
20
|
+
}
|
|
21
|
+
return registry;
|
|
22
|
+
}
|
|
23
|
+
function topoSortProviders(providers) {
|
|
24
|
+
// Duplicate-id check.
|
|
25
|
+
const ids = new Set();
|
|
26
|
+
for (const p of providers) {
|
|
27
|
+
if (ids.has(p.id)) {
|
|
28
|
+
throw new MetaModelError(`composeRegistry: duplicate provider id "${p.id}"`, { code: "ERR_PROVIDER_DUPLICATE_ID" });
|
|
29
|
+
}
|
|
30
|
+
ids.add(p.id);
|
|
31
|
+
}
|
|
32
|
+
// Missing-dependency check.
|
|
33
|
+
for (const p of providers) {
|
|
34
|
+
for (const dep of p.dependencies ?? []) {
|
|
35
|
+
if (!ids.has(dep)) {
|
|
36
|
+
throw new MetaModelError(`composeRegistry: provider "${p.id}" depends on "${dep}", which is not in the provider set`, { code: "ERR_PROVIDER_MISSING_DEPENDENCY" });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Stable topological sort: repeatedly emit the first (input-order) provider
|
|
41
|
+
// whose dependencies are all already emitted. O(n^2) — n is a handful.
|
|
42
|
+
const result = [];
|
|
43
|
+
const emitted = new Set();
|
|
44
|
+
while (result.length < providers.length) {
|
|
45
|
+
const next = providers.find((p) => !emitted.has(p.id) &&
|
|
46
|
+
(p.dependencies ?? []).every((d) => emitted.has(d)));
|
|
47
|
+
if (next === undefined) {
|
|
48
|
+
const stuck = providers
|
|
49
|
+
.filter((p) => !emitted.has(p.id))
|
|
50
|
+
.map((p) => p.id);
|
|
51
|
+
throw new MetaModelError(`composeRegistry: dependency cycle among providers [${stuck.join(", ")}]`, { code: "ERR_PROVIDER_DEPENDENCY_CYCLE" });
|
|
52
|
+
}
|
|
53
|
+
result.push(next);
|
|
54
|
+
emitted.add(next.id);
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,oEAAoE;AACpE,wFAAwF;AAExF,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAc7C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,SAA0C;IAE1C,MAAM,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CACxB,SAA0C;IAE1C,sBAAsB;IACtB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,cAAc,CAAC,2CAA2C,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC,CAAC;QACtH,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IACD,4BAA4B;IAC5B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,MAAM,IAAI,cAAc,CACtB,8BAA8B,CAAC,CAAC,EAAE,iBAAiB,GAAG,qCAAqC,EAC3F,EAAE,IAAI,EAAE,iCAAiC,EAAE,CAC5C,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,4EAA4E;IAC5E,uEAAuE;IACvE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,OAAO,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CACzB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACtD,CAAC;QACF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,SAAS;iBACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpB,MAAM,IAAI,cAAc,CACtB,sDAAsD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EACzE,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAC1C,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { AttrValue, MetaData } from "./shared/meta-data.js";
|
|
2
|
+
import { type AttrSubType } from "./core/attr/attr-constants.js";
|
|
3
|
+
import type { DataType } from "./data-type.js";
|
|
4
|
+
export declare class TypeId {
|
|
5
|
+
readonly type: string;
|
|
6
|
+
readonly subType: string;
|
|
7
|
+
constructor(type: string, subType: string);
|
|
8
|
+
toString(): string;
|
|
9
|
+
equals(other: TypeId): boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ChildRule {
|
|
12
|
+
/** `"*"` matches any type. */
|
|
13
|
+
childType: string;
|
|
14
|
+
/** `"*"` matches any subtype. */
|
|
15
|
+
childSubType: string;
|
|
16
|
+
/** `"*"` matches any name. */
|
|
17
|
+
childName: string;
|
|
18
|
+
}
|
|
19
|
+
export interface AttrSchema {
|
|
20
|
+
/** Attribute name WITHOUT the "@" prefix (e.g. "dbColumn", "currency"). */
|
|
21
|
+
name: string;
|
|
22
|
+
/**
|
|
23
|
+
* The attribute's value type — one of the registered attr subtypes.
|
|
24
|
+
*
|
|
25
|
+
* Optional: when absent, the attr is declared-but-untyped (no parse-time
|
|
26
|
+
* coercion; value stored raw via `toAttrValue`). Use this for polymorphic
|
|
27
|
+
* attrs whose value type is determined by the owning node at consumption
|
|
28
|
+
* time (e.g. `@default`, which is typed by its owning field's subtype).
|
|
29
|
+
*
|
|
30
|
+
* `SUBTYPE_BASE` ("base") MUST NOT be used here — it is the universal root
|
|
31
|
+
* subtype for object/field/etc. nodes and carries no "untyped" semantics for
|
|
32
|
+
* attrs. Attempting to register an AttrSchema with `valueType: "base"` throws.
|
|
33
|
+
*/
|
|
34
|
+
valueType?: AttrSubType;
|
|
35
|
+
/** Whether this attribute must be present on the node. */
|
|
36
|
+
required: boolean;
|
|
37
|
+
/** Default value applied when the attribute is absent. Optional. */
|
|
38
|
+
default?: AttrValue;
|
|
39
|
+
/** When set, the attribute's value must be one of these (a closed enum). Optional. */
|
|
40
|
+
allowedValues?: readonly AttrValue[];
|
|
41
|
+
/** Human/AI-facing description of what the attribute means. */
|
|
42
|
+
description: string;
|
|
43
|
+
}
|
|
44
|
+
export interface TypeDefinition {
|
|
45
|
+
typeId: TypeId;
|
|
46
|
+
description: string;
|
|
47
|
+
factory: (typeId: TypeId, name: string) => MetaData;
|
|
48
|
+
childRules: ChildRule[];
|
|
49
|
+
attributes: AttrSchema[];
|
|
50
|
+
/** The coarse value-type classification, for (type, subType)s whose nodes
|
|
51
|
+
* carry a typed value (field, attr). Absent for non-value-bearing types. */
|
|
52
|
+
dataType?: DataType;
|
|
53
|
+
}
|
|
54
|
+
export declare class TypeRegistry {
|
|
55
|
+
/** Keyed by `"type.subType"`. */
|
|
56
|
+
private readonly _defs;
|
|
57
|
+
/** Per-type insertion-ordered subtype lists. */
|
|
58
|
+
private readonly _subTypes;
|
|
59
|
+
/** Per-type designated default subType (queried by the YAML desugar). */
|
|
60
|
+
private readonly _defaultSubTypes;
|
|
61
|
+
register(def: TypeDefinition): void;
|
|
62
|
+
find(type: string, subType: string): TypeDefinition | undefined;
|
|
63
|
+
has(type: string, subType: string): boolean;
|
|
64
|
+
allTypes(): TypeId[];
|
|
65
|
+
allSubTypesOf(type: string): string[];
|
|
66
|
+
/** Designate the default subType for a bare `type` key (used by YAML authoring sugar). */
|
|
67
|
+
setDefaultSubType(type: string, subType: string): void;
|
|
68
|
+
/** The designated default subType for a type, or undefined if none was designated. */
|
|
69
|
+
defaultSubTypeOf(type: string): string | undefined;
|
|
70
|
+
/** The declared attribute schema for a (type, subType), or [] if the
|
|
71
|
+
* pair is unregistered or declares no attributes. */
|
|
72
|
+
attrsOf(type: string, subType: string): AttrSchema[];
|
|
73
|
+
/**
|
|
74
|
+
* Additively enrich an already-registered (type, subType): append attributes
|
|
75
|
+
* and/or child rules. Does NOT touch factory / typeId / dataType / default
|
|
76
|
+
* subType — a type's identity belongs to whoever registered it. Used by
|
|
77
|
+
* providers to extend types another provider defined.
|
|
78
|
+
*/
|
|
79
|
+
extend(type: string, subType: string, ext: {
|
|
80
|
+
attributes?: AttrSchema[];
|
|
81
|
+
childRules?: ChildRule[];
|
|
82
|
+
}): void;
|
|
83
|
+
}
|
|
84
|
+
export declare function childRuleMatches(rule: ChildRule, child: {
|
|
85
|
+
type: string;
|
|
86
|
+
subType: string;
|
|
87
|
+
name: string;
|
|
88
|
+
}): boolean;
|
|
89
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,qBAAa,MAAM;aAEC,IAAI,EAAE,MAAM;aACZ,OAAO,EAAE,MAAM;gBADf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM;IAGjC,QAAQ,IAAI,MAAM;IAIlB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAG/B;AAED,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,0DAA0D;IAC1D,QAAQ,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,sFAAsF;IACtF,aAAa,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IACrC,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC;IACpD,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB;iFAC6E;IAC7E,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,qBAAa,YAAY;IACvB,iCAAiC;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAE3D,gDAAgD;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAE9D,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAgCnC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI/D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAI3C,QAAQ,IAAI,MAAM,EAAE;IAIpB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAIrC,0FAA0F;IAC1F,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAItD,sFAAsF;IACtF,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIlD;0DACsD;IACtD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAIpD;;;;;OAKG;IACH,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,GAAG,EAAE;QAAE,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;KAAE,GAC3D,IAAI;CA0BR;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,EACf,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrD,OAAO,CAMT"}
|
package/dist/registry.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { SUBTYPE_BASE, TYPE_ATTR } from "./shared/base-types.js";
|
|
2
|
+
import { CHILD_RULE_WILDCARD } from "./shared/structural.js";
|
|
3
|
+
import {} from "./core/attr/attr-constants.js";
|
|
4
|
+
import { MetaModelError } from "./errors.js";
|
|
5
|
+
export class TypeId {
|
|
6
|
+
type;
|
|
7
|
+
subType;
|
|
8
|
+
constructor(type, subType) {
|
|
9
|
+
this.type = type;
|
|
10
|
+
this.subType = subType;
|
|
11
|
+
}
|
|
12
|
+
toString() {
|
|
13
|
+
return `${this.type}.${this.subType}`;
|
|
14
|
+
}
|
|
15
|
+
equals(other) {
|
|
16
|
+
return this.type === other.type && this.subType === other.subType;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class TypeRegistry {
|
|
20
|
+
/** Keyed by `"type.subType"`. */
|
|
21
|
+
_defs = new Map();
|
|
22
|
+
/** Per-type insertion-ordered subtype lists. */
|
|
23
|
+
_subTypes = new Map();
|
|
24
|
+
/** Per-type designated default subType (queried by the YAML desugar). */
|
|
25
|
+
_defaultSubTypes = new Map();
|
|
26
|
+
register(def) {
|
|
27
|
+
const key = def.typeId.toString();
|
|
28
|
+
if (this._defs.has(key)) {
|
|
29
|
+
throw new Error(`TypeRegistry: duplicate registration for "${key}" (type="${def.typeId.type}", subType="${def.typeId.subType}")`);
|
|
30
|
+
}
|
|
31
|
+
// Reject SUBTYPE_BASE as an attr valueType. "base" is the universal root
|
|
32
|
+
// subtype for object/field/etc. nodes; it must NOT be used as an attr value
|
|
33
|
+
// type because it carries no meaningful type semantics for attrs (its DataType
|
|
34
|
+
// resolves to DATA_TYPE_STRING, silently coercing boolean/number defaults to
|
|
35
|
+
// strings). Polymorphic attrs (e.g. @default) must omit valueType instead.
|
|
36
|
+
for (const attr of def.attributes) {
|
|
37
|
+
if (attr.valueType === SUBTYPE_BASE) {
|
|
38
|
+
throw new Error(`TypeRegistry.register: attr "${attr.name}" on "${key}" declares valueType "${SUBTYPE_BASE}", ` +
|
|
39
|
+
`which is not valid for attrs. Use no valueType (omit the field) for a polymorphic/untyped attr.`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
this._defs.set(key, def);
|
|
43
|
+
const list = this._subTypes.get(def.typeId.type);
|
|
44
|
+
if (list !== undefined) {
|
|
45
|
+
list.push(def.typeId.subType);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this._subTypes.set(def.typeId.type, [def.typeId.subType]);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
find(type, subType) {
|
|
52
|
+
return this._defs.get(`${type}.${subType}`);
|
|
53
|
+
}
|
|
54
|
+
has(type, subType) {
|
|
55
|
+
return this.find(type, subType) !== undefined;
|
|
56
|
+
}
|
|
57
|
+
allTypes() {
|
|
58
|
+
return Array.from(this._defs.values()).map((def) => def.typeId);
|
|
59
|
+
}
|
|
60
|
+
allSubTypesOf(type) {
|
|
61
|
+
return [...(this._subTypes.get(type) ?? [])];
|
|
62
|
+
}
|
|
63
|
+
/** Designate the default subType for a bare `type` key (used by YAML authoring sugar). */
|
|
64
|
+
setDefaultSubType(type, subType) {
|
|
65
|
+
this._defaultSubTypes.set(type, subType);
|
|
66
|
+
}
|
|
67
|
+
/** The designated default subType for a type, or undefined if none was designated. */
|
|
68
|
+
defaultSubTypeOf(type) {
|
|
69
|
+
return this._defaultSubTypes.get(type);
|
|
70
|
+
}
|
|
71
|
+
/** The declared attribute schema for a (type, subType), or [] if the
|
|
72
|
+
* pair is unregistered or declares no attributes. */
|
|
73
|
+
attrsOf(type, subType) {
|
|
74
|
+
return [...(this.find(type, subType)?.attributes ?? [])];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Additively enrich an already-registered (type, subType): append attributes
|
|
78
|
+
* and/or child rules. Does NOT touch factory / typeId / dataType / default
|
|
79
|
+
* subType — a type's identity belongs to whoever registered it. Used by
|
|
80
|
+
* providers to extend types another provider defined.
|
|
81
|
+
*/
|
|
82
|
+
extend(type, subType, ext) {
|
|
83
|
+
const def = this.find(type, subType);
|
|
84
|
+
if (def === undefined) {
|
|
85
|
+
throw new Error(`TypeRegistry.extend: no registered type "${type}.${subType}" to extend`);
|
|
86
|
+
}
|
|
87
|
+
for (const attr of ext.attributes ?? []) {
|
|
88
|
+
if (attr.valueType === SUBTYPE_BASE) {
|
|
89
|
+
throw new Error(`TypeRegistry.extend: attr "${attr.name}" being added to "${type}.${subType}" declares valueType "${SUBTYPE_BASE}", ` +
|
|
90
|
+
`which is not valid for attrs. Use no valueType (omit the field) for a polymorphic/untyped attr.`);
|
|
91
|
+
}
|
|
92
|
+
if (def.attributes.some((a) => a.name === attr.name)) {
|
|
93
|
+
throw new MetaModelError(`TypeRegistry.extend: attribute "${attr.name}" is already declared on "${type}.${subType}"`, { code: "ERR_PROVIDER_ATTR_CONFLICT" });
|
|
94
|
+
}
|
|
95
|
+
def.attributes.push(attr);
|
|
96
|
+
}
|
|
97
|
+
for (const rule of ext.childRules ?? []) {
|
|
98
|
+
def.childRules.push(rule);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export function childRuleMatches(rule, child) {
|
|
103
|
+
return ((rule.childType === CHILD_RULE_WILDCARD || rule.childType === child.type) &&
|
|
104
|
+
(rule.childSubType === CHILD_RULE_WILDCARD || rule.childSubType === child.subType) &&
|
|
105
|
+
(rule.childName === CHILD_RULE_WILDCARD || rule.childName === child.name));
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { MetaData, AttrValue } from "./shared/meta-data.js";
|
|
2
|
+
export interface SerializeOptions {
|
|
3
|
+
/** Pretty-print indent. 0 = no whitespace. Default 2. */
|
|
4
|
+
indent?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function serializeJson(model: MetaData, opts?: SerializeOptions): string;
|
|
7
|
+
export declare function inferAttrSubType(value: AttrValue): string;
|
|
8
|
+
export declare function canonicalSerialize(model: MetaData): string;
|
|
9
|
+
/**
|
|
10
|
+
* Like canonicalSerialize, but emits the EFFECTIVE tree — children() and
|
|
11
|
+
* attrs() at every node (own + inherited via the super chain), so the
|
|
12
|
+
* super-chain merge is materialized in the output.
|
|
13
|
+
* Used by the conformance harness's expected-effective fixtures.
|
|
14
|
+
*/
|
|
15
|
+
export declare function canonicalSerializeEffective(model: MetaData): string;
|
|
16
|
+
//# sourceMappingURL=serializer-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer-json.d.ts","sourceRoot":"","sources":["../src/serializer-json.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAwBjE,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAK9E;AAUD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAUzD;AAyFD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAQ1D;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CASnE"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// Canonical JSON serializer — redesigned (post-v0.3) format.
|
|
2
|
+
//
|
|
3
|
+
// Every node serializes to a single-key map { "<type>.<subType>": <body> }.
|
|
4
|
+
// The wrapper key fuses type and subType. The body emits keys in the canonical
|
|
5
|
+
// order, each included only when non-default:
|
|
6
|
+
// 1. name 2. package 3. extends 4. abstract
|
|
7
|
+
// 5. overlay 6. isArray 7. @-attrs (alphabetical) 8. children
|
|
8
|
+
import { ATTR_PREFIX, TYPE_SUBTYPE_SEPARATOR, RESERVED_KEY_NAME, RESERVED_KEY_PACKAGE, RESERVED_KEY_EXTENDS, RESERVED_KEY_ABSTRACT, RESERVED_KEY_IS_ARRAY, RESERVED_KEY_CHILDREN, } from "./shared/structural.js";
|
|
9
|
+
import { ATTR_SUBTYPE_STRING, ATTR_SUBTYPE_INT, ATTR_SUBTYPE_LONG, ATTR_SUBTYPE_DOUBLE, ATTR_SUBTYPE_BOOLEAN, ATTR_SUBTYPE_STRINGARRAY, } from "./core/attr/attr-constants.js";
|
|
10
|
+
export function serializeJson(model, opts) {
|
|
11
|
+
const indent = opts?.indent ?? 2;
|
|
12
|
+
const nodeObj = serializeNode(model, false);
|
|
13
|
+
return JSON.stringify(nodeObj, null, indent === 0 ? undefined : indent);
|
|
14
|
+
}
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Infer attr subType from a JS value (for child-node form when subType isn't known)
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Java int range — used for distinguishing int vs long subtypes.
|
|
19
|
+
const JAVA_INT_MAX = 2 ** 31 - 1;
|
|
20
|
+
const JAVA_INT_MIN = -(2 ** 31);
|
|
21
|
+
export function inferAttrSubType(value) {
|
|
22
|
+
if (Array.isArray(value))
|
|
23
|
+
return ATTR_SUBTYPE_STRINGARRAY;
|
|
24
|
+
if (typeof value === "boolean")
|
|
25
|
+
return ATTR_SUBTYPE_BOOLEAN;
|
|
26
|
+
if (typeof value === "number") {
|
|
27
|
+
if (!Number.isInteger(value))
|
|
28
|
+
return ATTR_SUBTYPE_DOUBLE;
|
|
29
|
+
return value >= JAVA_INT_MIN && value <= JAVA_INT_MAX
|
|
30
|
+
? ATTR_SUBTYPE_INT
|
|
31
|
+
: ATTR_SUBTYPE_LONG;
|
|
32
|
+
}
|
|
33
|
+
return ATTR_SUBTYPE_STRING;
|
|
34
|
+
}
|
|
35
|
+
/** Build a fused `type.subType` wrapper key. */
|
|
36
|
+
function fusedKey(type, subType) {
|
|
37
|
+
return `${type}${TYPE_SUBTYPE_SEPARATOR}${subType}`;
|
|
38
|
+
}
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Serialize a single node — returns { "<type>.<subType>": { ...body } }
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
function serializeNode(model, effective) {
|
|
43
|
+
const inner = serializeNodeInner(model, effective);
|
|
44
|
+
return { [fusedKey(model.type, model.subType)]: inner };
|
|
45
|
+
}
|
|
46
|
+
function serializeNodeInner(model, effective) {
|
|
47
|
+
// Canonical body-key order:
|
|
48
|
+
// 1. name 2. package 3. extends 4. abstract
|
|
49
|
+
// 5. overlay 6. isArray 7. inline @-attrs 8. children
|
|
50
|
+
const obj = {};
|
|
51
|
+
if (model.name !== "") {
|
|
52
|
+
obj[RESERVED_KEY_NAME] = model.name;
|
|
53
|
+
}
|
|
54
|
+
if (model.package !== undefined && model.package !== "") {
|
|
55
|
+
obj[RESERVED_KEY_PACKAGE] = model.package;
|
|
56
|
+
}
|
|
57
|
+
if (model.superRef !== undefined) {
|
|
58
|
+
obj[RESERVED_KEY_EXTENDS] = model.superRef;
|
|
59
|
+
}
|
|
60
|
+
if (model.isAbstract === true) {
|
|
61
|
+
obj[RESERVED_KEY_ABSTRACT] = true;
|
|
62
|
+
}
|
|
63
|
+
// NOTE: `overlay` is an authoring-time parser directive, not a property of
|
|
64
|
+
// the resolved tree. After a merge, the merged node is a normal node — the
|
|
65
|
+
// canonical serialization is the merged RESULT, which carries no overlay
|
|
66
|
+
// semantics. Re-emitting `overlay: true` would break round-trip stability
|
|
67
|
+
// (re-parsing would seek a non-existent node to merge into). So it is
|
|
68
|
+
// deliberately NOT serialized.
|
|
69
|
+
if (model.isArray === true) {
|
|
70
|
+
obj[RESERVED_KEY_IS_ARRAY] = true;
|
|
71
|
+
}
|
|
72
|
+
// In effective mode use children()/attrs() (own + inherited via super chain);
|
|
73
|
+
// in own mode use ownChildren()/ownAttrs() (declared on this node only).
|
|
74
|
+
const childList = effective ? model.children() : model.ownChildren();
|
|
75
|
+
const attrMap = effective ? model.attrs() : model.ownAttrs();
|
|
76
|
+
const serializedChildren = [];
|
|
77
|
+
for (const child of childList) {
|
|
78
|
+
// Attrs never appear in children(); only structural nodes recurse.
|
|
79
|
+
serializedChildren.push(serializeNode(child, effective));
|
|
80
|
+
}
|
|
81
|
+
// Attrs ALWAYS emit inline @name (D5 — attrs have no children, one canonical form).
|
|
82
|
+
for (const [attrName, attrValue] of attrMap) {
|
|
83
|
+
obj[`${ATTR_PREFIX}${attrName}`] = attrValue;
|
|
84
|
+
}
|
|
85
|
+
if (serializedChildren.length > 0) {
|
|
86
|
+
obj[RESERVED_KEY_CHILDREN] = serializedChildren;
|
|
87
|
+
}
|
|
88
|
+
return obj;
|
|
89
|
+
}
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
// canonicalSerialize — deterministic serializer for cross-language conformance
|
|
92
|
+
//
|
|
93
|
+
// Wraps serializeJson with two extra guarantees:
|
|
94
|
+
// 1. Inline @-attrs are emitted in alphabetical order (not Map iteration order).
|
|
95
|
+
// 2. Output ends with exactly one trailing newline.
|
|
96
|
+
//
|
|
97
|
+
// Both behaviors are required so Java/Python/C# implementations can produce
|
|
98
|
+
// byte-identical output from the same input metamodel.
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
export function canonicalSerialize(model) {
|
|
101
|
+
const raw = serializeJson(model, { indent: 2 });
|
|
102
|
+
const parsed = JSON.parse(raw);
|
|
103
|
+
const sorted = sortAttrKeys(parsed);
|
|
104
|
+
const out = JSON.stringify(sorted, null, 2);
|
|
105
|
+
return out + "\n";
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Like canonicalSerialize, but emits the EFFECTIVE tree — children() and
|
|
109
|
+
* attrs() at every node (own + inherited via the super chain), so the
|
|
110
|
+
* super-chain merge is materialized in the output.
|
|
111
|
+
* Used by the conformance harness's expected-effective fixtures.
|
|
112
|
+
*/
|
|
113
|
+
export function canonicalSerializeEffective(model) {
|
|
114
|
+
const nodeObj = serializeNode(model, true);
|
|
115
|
+
const raw = JSON.stringify(nodeObj, null, 2);
|
|
116
|
+
const parsed = JSON.parse(raw);
|
|
117
|
+
const sorted = sortAttrKeys(parsed);
|
|
118
|
+
const out = JSON.stringify(sorted, null, 2);
|
|
119
|
+
return out + "\n";
|
|
120
|
+
}
|
|
121
|
+
function sortAttrKeys(value) {
|
|
122
|
+
if (Array.isArray(value)) {
|
|
123
|
+
return value.map(sortAttrKeys);
|
|
124
|
+
}
|
|
125
|
+
if (value !== null && typeof value === "object") {
|
|
126
|
+
const obj = value;
|
|
127
|
+
const keys = Object.keys(obj);
|
|
128
|
+
const structuralKeys = [];
|
|
129
|
+
const attrKeys = [];
|
|
130
|
+
for (const k of keys) {
|
|
131
|
+
if (k.startsWith(ATTR_PREFIX))
|
|
132
|
+
attrKeys.push(k);
|
|
133
|
+
else
|
|
134
|
+
structuralKeys.push(k);
|
|
135
|
+
}
|
|
136
|
+
attrKeys.sort();
|
|
137
|
+
const result = {};
|
|
138
|
+
const hasChildren = structuralKeys.includes(RESERVED_KEY_CHILDREN);
|
|
139
|
+
for (const k of structuralKeys) {
|
|
140
|
+
if (k === RESERVED_KEY_CHILDREN)
|
|
141
|
+
continue;
|
|
142
|
+
result[k] = sortAttrKeys(obj[k]);
|
|
143
|
+
}
|
|
144
|
+
for (const k of attrKeys) {
|
|
145
|
+
result[k] = sortAttrKeys(obj[k]);
|
|
146
|
+
}
|
|
147
|
+
if (hasChildren) {
|
|
148
|
+
result[RESERVED_KEY_CHILDREN] = sortAttrKeys(obj[RESERVED_KEY_CHILDREN]);
|
|
149
|
+
}
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
return value;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=serializer-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer-json.js","sourceRoot":"","sources":["../src/serializer-json.ts"],"names":[],"mappings":"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"}
|