@metaobjectsdev/metadata 0.9.0 → 0.11.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/dist/attr-schema-validate.d.ts +1 -1
- package/dist/attr-schema-validate.d.ts.map +1 -1
- package/dist/attr-schema-validate.js +96 -11
- package/dist/attr-schema-validate.js.map +1 -1
- package/dist/constraint-merge.d.ts +18 -0
- package/dist/constraint-merge.d.ts.map +1 -0
- package/dist/constraint-merge.js +0 -0
- package/dist/constraint-merge.js.map +1 -0
- package/dist/constraint-validate.d.ts +6 -0
- package/dist/constraint-validate.d.ts.map +1 -0
- package/dist/constraint-validate.js +274 -0
- package/dist/constraint-validate.js.map +1 -0
- package/dist/core/attr/attr-constants.d.ts +13 -3
- package/dist/core/attr/attr-constants.d.ts.map +1 -1
- package/dist/core/attr/attr-constants.js +11 -2
- package/dist/core/attr/attr-constants.js.map +1 -1
- package/dist/core/attr/attr-definition.embedded.d.ts +3 -0
- package/dist/core/attr/attr-definition.embedded.d.ts.map +1 -0
- package/dist/core/attr/attr-definition.embedded.js +60 -0
- package/dist/core/attr/attr-definition.embedded.js.map +1 -0
- package/dist/core/documentation/doc-constants.d.ts +3 -2
- package/dist/core/documentation/doc-constants.d.ts.map +1 -1
- package/dist/core/documentation/doc-constants.js +3 -1
- package/dist/core/documentation/doc-constants.js.map +1 -1
- package/dist/core/documentation/doc-provider.d.ts.map +1 -1
- package/dist/core/documentation/doc-provider.js +6 -2
- package/dist/core/documentation/doc-provider.js.map +1 -1
- package/dist/core/documentation/documentation-definition.embedded.d.ts +3 -0
- package/dist/core/documentation/documentation-definition.embedded.d.ts.map +1 -0
- package/dist/core/documentation/documentation-definition.embedded.js +79 -0
- package/dist/core/documentation/documentation-definition.embedded.js.map +1 -0
- package/dist/core/field/field-constants.d.ts +7 -4
- package/dist/core/field/field-constants.d.ts.map +1 -1
- package/dist/core/field/field-constants.js +7 -7
- package/dist/core/field/field-constants.js.map +1 -1
- package/dist/core/field/field-definition.embedded.d.ts +3 -0
- package/dist/core/field/field-definition.embedded.d.ts.map +1 -0
- package/dist/core/field/field-definition.embedded.js +236 -0
- package/dist/core/field/field-definition.embedded.js.map +1 -0
- package/dist/core/field/meta-field.d.ts.map +1 -1
- package/dist/core/field/meta-field.js +7 -5
- package/dist/core/field/meta-field.js.map +1 -1
- package/dist/core/identity/identity-constants.d.ts.map +1 -1
- package/dist/core/identity/identity-constants.js +3 -0
- package/dist/core/identity/identity-constants.js.map +1 -1
- package/dist/core/identity/identity-definition.embedded.d.ts +3 -0
- package/dist/core/identity/identity-definition.embedded.d.ts.map +1 -0
- package/dist/core/identity/identity-definition.embedded.js +93 -0
- package/dist/core/identity/identity-definition.embedded.js.map +1 -0
- package/dist/core/identity/meta-identity.d.ts.map +1 -1
- package/dist/core/identity/meta-identity.js +8 -1
- package/dist/core/identity/meta-identity.js.map +1 -1
- package/dist/core/identity/validate-identity-passthrough.d.ts +42 -0
- package/dist/core/identity/validate-identity-passthrough.d.ts.map +1 -0
- package/dist/core/identity/validate-identity-passthrough.js +158 -0
- package/dist/core/identity/validate-identity-passthrough.js.map +1 -0
- package/dist/core/object/object-constants.d.ts +2 -1
- package/dist/core/object/object-constants.d.ts.map +1 -1
- package/dist/core/object/object-constants.js +3 -0
- package/dist/core/object/object-constants.js.map +1 -1
- package/dist/core/object/object-definition.embedded.d.ts +3 -0
- package/dist/core/object/object-definition.embedded.d.ts.map +1 -0
- package/dist/core/object/object-definition.embedded.js +110 -0
- package/dist/core/object/object-definition.embedded.js.map +1 -0
- package/dist/core/object/validate-discriminator.d.ts.map +1 -1
- package/dist/core/object/validate-discriminator.js +1 -3
- package/dist/core/object/validate-discriminator.js.map +1 -1
- package/dist/core/query/query-constants.d.ts.map +1 -1
- package/dist/core/query/query-constants.js +5 -3
- package/dist/core/query/query-constants.js.map +1 -1
- package/dist/core/relationship/derive-m2m-fields.d.ts +26 -0
- package/dist/core/relationship/derive-m2m-fields.d.ts.map +1 -0
- package/dist/core/relationship/derive-m2m-fields.js +102 -0
- package/dist/core/relationship/derive-m2m-fields.js.map +1 -0
- package/dist/core/relationship/meta-relationship.d.ts +6 -4
- package/dist/core/relationship/meta-relationship.d.ts.map +1 -1
- package/dist/core/relationship/meta-relationship.js +12 -8
- package/dist/core/relationship/meta-relationship.js.map +1 -1
- package/dist/core/relationship/relationship-constants.d.ts +6 -2
- package/dist/core/relationship/relationship-constants.d.ts.map +1 -1
- package/dist/core/relationship/relationship-constants.js +6 -2
- package/dist/core/relationship/relationship-constants.js.map +1 -1
- package/dist/core/relationship/relationship-definition.embedded.d.ts +3 -0
- package/dist/core/relationship/relationship-definition.embedded.d.ts.map +1 -0
- package/dist/core/relationship/relationship-definition.embedded.js +310 -0
- package/dist/core/relationship/relationship-definition.embedded.js.map +1 -0
- package/dist/core/validator/validator-constants.d.ts +14 -1
- package/dist/core/validator/validator-constants.d.ts.map +1 -1
- package/dist/core/validator/validator-constants.js +20 -1
- package/dist/core/validator/validator-constants.js.map +1 -1
- package/dist/core/validator/validator-definition.embedded.d.ts +3 -0
- package/dist/core/validator/validator-definition.embedded.d.ts.map +1 -0
- package/dist/core/validator/validator-definition.embedded.js +255 -0
- package/dist/core/validator/validator-definition.embedded.js.map +1 -0
- package/dist/core/yaml-desugar.d.ts.map +1 -1
- package/dist/core/yaml-desugar.js +88 -10
- package/dist/core/yaml-desugar.js.map +1 -1
- package/dist/core-types.d.ts +5 -2
- package/dist/core-types.d.ts.map +1 -1
- package/dist/core-types.js +285 -116
- package/dist/core-types.js.map +1 -1
- package/dist/errors.d.ts +3 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +87 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +17 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -1
- package/dist/index.js.map +1 -1
- package/dist/library/embedded-library.generated.d.ts +2 -0
- package/dist/library/embedded-library.generated.d.ts.map +1 -0
- package/dist/library/embedded-library.generated.js +11 -0
- package/dist/library/embedded-library.generated.js.map +1 -0
- package/dist/library/library-sources.d.ts +12 -0
- package/dist/library/library-sources.d.ts.map +1 -0
- package/dist/library/library-sources.js +88 -0
- package/dist/library/library-sources.js.map +1 -0
- package/dist/loader/meta-data-loader.d.ts +10 -2
- package/dist/loader/meta-data-loader.d.ts.map +1 -1
- package/dist/loader/meta-data-loader.js +57 -6
- package/dist/loader/meta-data-loader.js.map +1 -1
- package/dist/loader/shortcuts.d.ts +2 -5
- package/dist/loader/shortcuts.d.ts.map +1 -1
- package/dist/loader/shortcuts.js.map +1 -1
- package/dist/loader/validation-passes.d.ts +3 -0
- package/dist/loader/validation-passes.d.ts.map +1 -1
- package/dist/loader/validation-passes.js +519 -34
- package/dist/loader/validation-passes.js.map +1 -1
- package/dist/loader/validation-registry.d.ts +10 -0
- package/dist/loader/validation-registry.d.ts.map +1 -0
- package/dist/loader/validation-registry.js +84 -0
- package/dist/loader/validation-registry.js.map +1 -0
- package/dist/metamodel-docs/index.d.ts +19 -0
- package/dist/metamodel-docs/index.d.ts.map +1 -0
- package/dist/metamodel-docs/index.js +37 -0
- package/dist/metamodel-docs/index.js.map +1 -0
- package/dist/metamodel-docs/provenance.d.ts +42 -0
- package/dist/metamodel-docs/provenance.d.ts.map +1 -0
- package/dist/metamodel-docs/provenance.js +148 -0
- package/dist/metamodel-docs/provenance.js.map +1 -0
- package/dist/metamodel-docs/provider-definitions.d.ts +8 -0
- package/dist/metamodel-docs/provider-definitions.d.ts.map +1 -0
- package/dist/metamodel-docs/provider-definitions.js +48 -0
- package/dist/metamodel-docs/provider-definitions.js.map +1 -0
- package/dist/metamodel-docs/render.d.ts +12 -0
- package/dist/metamodel-docs/render.d.ts.map +1 -0
- package/dist/metamodel-docs/render.js +252 -0
- package/dist/metamodel-docs/render.js.map +1 -0
- package/dist/naming-refs.d.ts +41 -0
- package/dist/naming-refs.d.ts.map +1 -0
- package/dist/naming-refs.js +144 -0
- package/dist/naming-refs.js.map +1 -0
- package/dist/naming.d.ts.map +1 -1
- package/dist/naming.js +10 -2
- package/dist/naming.js.map +1 -1
- package/dist/parser-core.d.ts.map +1 -1
- package/dist/parser-core.js +84 -9
- package/dist/parser-core.js.map +1 -1
- package/dist/persistence/db/db-constants.d.ts +10 -0
- package/dist/persistence/db/db-constants.d.ts.map +1 -1
- package/dist/persistence/db/db-constants.js +14 -0
- package/dist/persistence/db/db-constants.js.map +1 -1
- package/dist/persistence/db/db-definition.embedded.d.ts +3 -0
- package/dist/persistence/db/db-definition.embedded.d.ts.map +1 -0
- package/dist/persistence/db/db-definition.embedded.js +227 -0
- package/dist/persistence/db/db-definition.embedded.js.map +1 -0
- package/dist/persistence/db/db-provider.d.ts.map +1 -1
- package/dist/persistence/db/db-provider.js +13 -18
- package/dist/persistence/db/db-provider.js.map +1 -1
- package/dist/persistence/origin/origin-definition.embedded.d.ts +3 -0
- package/dist/persistence/origin/origin-definition.embedded.d.ts.map +1 -0
- package/dist/persistence/origin/origin-definition.embedded.js +88 -0
- package/dist/persistence/origin/origin-definition.embedded.js.map +1 -0
- package/dist/persistence/source/source-definition.embedded.d.ts +3 -0
- package/dist/persistence/source/source-definition.embedded.d.ts.map +1 -0
- package/dist/persistence/source/source-definition.embedded.js +17 -0
- package/dist/persistence/source/source-definition.embedded.js.map +1 -0
- package/dist/persistence/source/validate-source-parameter-ref.d.ts.map +1 -1
- package/dist/persistence/source/validate-source-parameter-ref.js +7 -1
- package/dist/persistence/source/validate-source-parameter-ref.js.map +1 -1
- package/dist/persistence/source/validate-source-roles.d.ts.map +1 -1
- package/dist/persistence/source/validate-source-roles.js +16 -1
- package/dist/persistence/source/validate-source-roles.js.map +1 -1
- package/dist/presentation/layout/layout-definition.embedded.d.ts +3 -0
- package/dist/presentation/layout/layout-definition.embedded.d.ts.map +1 -0
- package/dist/presentation/layout/layout-definition.embedded.js +16 -0
- package/dist/presentation/layout/layout-definition.embedded.js.map +1 -0
- package/dist/presentation/ui/ui-definition.embedded.d.ts +3 -0
- package/dist/presentation/ui/ui-definition.embedded.d.ts.map +1 -0
- package/dist/presentation/ui/ui-definition.embedded.js +114 -0
- package/dist/presentation/ui/ui-definition.embedded.js.map +1 -0
- package/dist/presentation/ui/ui-provider.d.ts +3 -0
- package/dist/presentation/ui/ui-provider.d.ts.map +1 -0
- package/dist/presentation/ui/ui-provider.js +21 -0
- package/dist/presentation/ui/ui-provider.js.map +1 -0
- package/dist/presentation/view/view-definition.embedded.d.ts +3 -0
- package/dist/presentation/view/view-definition.embedded.d.ts.map +1 -0
- package/dist/presentation/view/view-definition.embedded.js +76 -0
- package/dist/presentation/view/view-definition.embedded.js.map +1 -0
- package/dist/provider-data.d.ts +184 -0
- package/dist/provider-data.d.ts.map +1 -0
- package/dist/provider-data.js +271 -0
- package/dist/provider-data.js.map +1 -0
- package/dist/provider.d.ts +3 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +15 -1
- package/dist/provider.js.map +1 -1
- package/dist/registry-coverage.d.ts +99 -0
- package/dist/registry-coverage.d.ts.map +1 -0
- package/dist/registry-coverage.js +294 -0
- package/dist/registry-coverage.js.map +1 -0
- package/dist/registry-manifest-exclusions.d.ts +62 -0
- package/dist/registry-manifest-exclusions.d.ts.map +1 -0
- package/dist/registry-manifest-exclusions.js +163 -0
- package/dist/registry-manifest-exclusions.js.map +1 -0
- package/dist/registry-manifest.d.ts +117 -0
- package/dist/registry-manifest.d.ts.map +1 -0
- package/dist/registry-manifest.js +242 -0
- package/dist/registry-manifest.js.map +1 -0
- package/dist/registry.d.ts +76 -2
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +37 -1
- package/dist/registry.js.map +1 -1
- package/dist/shared/structural.d.ts +7 -0
- package/dist/shared/structural.d.ts.map +1 -1
- package/dist/shared/structural.js +7 -0
- package/dist/shared/structural.js.map +1 -1
- package/dist/subtype-rules.d.ts.map +1 -1
- package/dist/subtype-rules.js +97 -13
- package/dist/subtype-rules.js.map +1 -1
- package/dist/super-resolve.d.ts +49 -2
- package/dist/super-resolve.d.ts.map +1 -1
- package/dist/super-resolve.js +128 -43
- package/dist/super-resolve.js.map +1 -1
- package/dist/template/meta-template.d.ts +3 -2
- package/dist/template/meta-template.d.ts.map +1 -1
- package/dist/template/meta-template.js +3 -2
- package/dist/template/meta-template.js.map +1 -1
- package/dist/template/prompt-definition.embedded.d.ts +3 -0
- package/dist/template/prompt-definition.embedded.d.ts.map +1 -0
- package/dist/template/prompt-definition.embedded.js +368 -0
- package/dist/template/prompt-definition.embedded.js.map +1 -0
- package/dist/template/prompt-provider.d.ts +3 -0
- package/dist/template/prompt-provider.d.ts.map +1 -0
- package/dist/template/prompt-provider.js +25 -0
- package/dist/template/prompt-provider.js.map +1 -0
- package/dist/template/template-constants.d.ts +2 -0
- package/dist/template/template-constants.d.ts.map +1 -1
- package/dist/template/template-constants.js +7 -0
- package/dist/template/template-constants.js.map +1 -1
- package/dist/template/template-definition.embedded.d.ts +3 -0
- package/dist/template/template-definition.embedded.d.ts.map +1 -0
- package/dist/template/template-definition.embedded.js +30 -0
- package/dist/template/template-definition.embedded.js.map +1 -0
- package/dist/validate-max-occurs.d.ts +5 -0
- package/dist/validate-max-occurs.d.ts.map +1 -0
- package/dist/validate-max-occurs.js +28 -0
- package/dist/validate-max-occurs.js.map +1 -0
- package/dist/validation-types.d.ts +36 -0
- package/dist/validation-types.d.ts.map +1 -0
- package/dist/validation-types.js +7 -0
- package/dist/validation-types.js.map +1 -0
- package/package.json +33 -22
- package/src/attr-schema-validate.ts +108 -8
- package/src/constraint-merge.ts +0 -0
- package/src/constraint-validate.ts +363 -0
- package/src/core/attr/attr-constants.ts +15 -3
- package/src/core/attr/attr-definition.embedded.ts +67 -0
- package/src/core/documentation/doc-constants.ts +3 -1
- package/src/core/documentation/doc-provider.ts +6 -2
- package/src/core/documentation/documentation-definition.embedded.ts +86 -0
- package/src/core/field/field-constants.ts +8 -7
- package/src/core/field/field-definition.embedded.ts +243 -0
- package/src/core/field/meta-field.ts +6 -7
- package/src/core/identity/identity-constants.ts +4 -0
- package/src/core/identity/identity-definition.embedded.ts +100 -0
- package/src/core/identity/meta-identity.ts +8 -1
- package/src/core/identity/validate-identity-passthrough.ts +194 -0
- package/src/core/object/object-constants.ts +3 -0
- package/src/core/object/object-definition.embedded.ts +117 -0
- package/src/core/object/validate-discriminator.ts +0 -4
- package/src/core/query/query-constants.ts +5 -3
- package/src/core/relationship/derive-m2m-fields.ts +145 -0
- package/src/core/relationship/meta-relationship.ts +15 -9
- package/src/core/relationship/relationship-constants.ts +6 -2
- package/src/core/relationship/relationship-definition.embedded.ts +317 -0
- package/src/core/validator/validator-constants.ts +22 -1
- package/src/core/validator/validator-definition.embedded.ts +262 -0
- package/src/core/yaml-desugar.ts +96 -7
- package/src/core-types.ts +314 -150
- package/src/errors.ts +89 -2
- package/src/index.ts +47 -2
- package/src/library/embedded-library.generated.ts +10 -0
- package/src/library/library-sources.ts +97 -0
- package/src/loader/meta-data-loader.ts +78 -7
- package/src/loader/shortcuts.ts +2 -2
- package/src/loader/validation-passes.ts +690 -34
- package/src/loader/validation-registry.ts +93 -0
- package/src/metamodel-docs/index.ts +41 -0
- package/src/metamodel-docs/provenance.ts +187 -0
- package/src/metamodel-docs/provider-definitions.ts +50 -0
- package/src/metamodel-docs/render.ts +309 -0
- package/src/naming-refs.ts +162 -0
- package/src/naming.ts +10 -2
- package/src/parser-core.ts +96 -9
- package/src/persistence/db/db-constants.ts +16 -0
- package/src/persistence/db/db-definition.embedded.ts +234 -0
- package/src/persistence/db/db-provider.ts +13 -18
- package/src/persistence/origin/origin-definition.embedded.ts +95 -0
- package/src/persistence/source/source-definition.embedded.ts +24 -0
- package/src/persistence/source/validate-source-parameter-ref.ts +7 -1
- package/src/persistence/source/validate-source-roles.ts +22 -1
- package/src/presentation/layout/layout-definition.embedded.ts +23 -0
- package/src/presentation/ui/ui-definition.embedded.ts +121 -0
- package/src/presentation/ui/ui-provider.ts +25 -0
- package/src/presentation/view/view-definition.embedded.ts +83 -0
- package/src/provider-data.ts +463 -0
- package/src/provider.ts +18 -0
- package/src/registry-coverage.ts +430 -0
- package/src/registry-manifest-exclusions.ts +176 -0
- package/src/registry-manifest.ts +334 -0
- package/src/registry.ts +106 -3
- package/src/shared/structural.ts +8 -0
- package/src/subtype-rules.ts +135 -18
- package/src/super-resolve.ts +153 -43
- package/src/template/meta-template.ts +3 -2
- package/src/template/prompt-definition.embedded.ts +375 -0
- package/src/template/prompt-provider.ts +29 -0
- package/src/template/template-constants.ts +8 -0
- package/src/template/template-definition.embedded.ts +37 -0
- package/src/validate-max-occurs.ts +39 -0
- package/src/validation-types.ts +57 -0
- package/dist/core/documentation/doc-schema.d.ts +0 -8
- package/dist/core/documentation/doc-schema.d.ts.map +0 -1
- package/dist/core/documentation/doc-schema.js +0 -53
- package/dist/core/documentation/doc-schema.js.map +0 -1
- package/dist/core/field/field-schema.d.ts +0 -22
- package/dist/core/field/field-schema.d.ts.map +0 -1
- package/dist/core/field/field-schema.js +0 -171
- package/dist/core/field/field-schema.js.map +0 -1
- package/dist/core/identity/identity-schema.d.ts +0 -6
- package/dist/core/identity/identity-schema.d.ts.map +0 -1
- package/dist/core/identity/identity-schema.js +0 -55
- package/dist/core/identity/identity-schema.js.map +0 -1
- package/dist/core/object/object-schema.d.ts +0 -4
- package/dist/core/object/object-schema.d.ts.map +0 -1
- package/dist/core/object/object-schema.js +0 -28
- package/dist/core/object/object-schema.js.map +0 -1
- package/dist/core/relationship/relationship-schema.d.ts +0 -4
- package/dist/core/relationship/relationship-schema.d.ts.map +0 -1
- package/dist/core/relationship/relationship-schema.js +0 -51
- package/dist/core/relationship/relationship-schema.js.map +0 -1
- package/dist/core/validator/validator-schema.d.ts +0 -4
- package/dist/core/validator/validator-schema.d.ts.map +0 -1
- package/dist/core/validator/validator-schema.js +0 -38
- package/dist/core/validator/validator-schema.js.map +0 -1
- package/dist/persistence/db/db-schema.d.ts +0 -14
- package/dist/persistence/db/db-schema.d.ts.map +0 -1
- package/dist/persistence/db/db-schema.js +0 -35
- package/dist/persistence/db/db-schema.js.map +0 -1
- package/dist/persistence/origin/origin-schema.d.ts +0 -4
- package/dist/persistence/origin/origin-schema.d.ts.map +0 -1
- package/dist/persistence/origin/origin-schema.js +0 -59
- package/dist/persistence/origin/origin-schema.js.map +0 -1
- package/dist/persistence/source/source-schema.d.ts +0 -4
- package/dist/persistence/source/source-schema.d.ts.map +0 -1
- package/dist/persistence/source/source-schema.js +0 -98
- package/dist/persistence/source/source-schema.js.map +0 -1
- package/dist/presentation/layout/layout-schema.d.ts +0 -4
- package/dist/presentation/layout/layout-schema.d.ts.map +0 -1
- package/dist/presentation/layout/layout-schema.js +0 -46
- package/dist/presentation/layout/layout-schema.js.map +0 -1
- package/dist/presentation/view/view-schema.d.ts +0 -4
- package/dist/presentation/view/view-schema.d.ts.map +0 -1
- package/dist/presentation/view/view-schema.js +0 -15
- package/dist/presentation/view/view-schema.js.map +0 -1
- package/dist/template/template-schema.d.ts +0 -3
- package/dist/template/template-schema.d.ts.map +0 -1
- package/dist/template/template-schema.js +0 -173
- package/dist/template/template-schema.js.map +0 -1
- package/src/core/documentation/doc-schema.ts +0 -64
- package/src/core/field/field-schema.ts +0 -228
- package/src/core/identity/identity-schema.ts +0 -80
- package/src/core/object/object-schema.ts +0 -35
- package/src/core/relationship/relationship-schema.ts +0 -67
- package/src/core/validator/validator-schema.ts +0 -50
- package/src/persistence/db/db-schema.ts +0 -50
- package/src/persistence/origin/origin-schema.ts +0 -80
- package/src/persistence/source/source-schema.ts +0 -129
- package/src/presentation/layout/layout-schema.ts +0 -62
- package/src/presentation/view/view-schema.ts +0 -21
- package/src/template/template-schema.ts +0 -211
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { TypeRegistry } from "./registry.js";
|
|
2
|
+
import { ExclusionReason } from "./registry-manifest-exclusions.js";
|
|
3
|
+
/** One attribute in the manifest — the logical, cross-port-identical facet. */
|
|
4
|
+
interface ManifestAttr {
|
|
5
|
+
name: string;
|
|
6
|
+
/** The attr's SCALAR value-type subtype, or null for a polymorphic/untyped attr (e.g. @default). */
|
|
7
|
+
valueType: string | null;
|
|
8
|
+
/** True for an array-valued attr (a list of the scalar `valueType`); the orthogonal array axis. */
|
|
9
|
+
isArray: boolean;
|
|
10
|
+
required: boolean;
|
|
11
|
+
/** FR-033 — human/AI-facing description of the attribute (required, non-empty). */
|
|
12
|
+
description: string;
|
|
13
|
+
/** FR-033 — prose documenting the complex rules enforced in code. Emitted only when present. */
|
|
14
|
+
rules?: string;
|
|
15
|
+
/** FR-033 — an example value. Emitted only when present. */
|
|
16
|
+
example?: string;
|
|
17
|
+
/** FR-033 — guidance on when to reach for this attribute. Emitted only when present. */
|
|
18
|
+
whenToUse?: string;
|
|
19
|
+
}
|
|
20
|
+
/** One structural child rule of a type (FR-033 constraint graph). */
|
|
21
|
+
interface ManifestChild {
|
|
22
|
+
/** The admitted child `type` (`"*"` = any). */
|
|
23
|
+
childType: string;
|
|
24
|
+
/** The admitted child subType — a single subtype, `"*"` (any), or a list of admitted subtypes. */
|
|
25
|
+
childSubType: string | readonly string[];
|
|
26
|
+
/** The admitted child name (`"*"` = any). */
|
|
27
|
+
childName: string;
|
|
28
|
+
/** Cardinality lower bound — emitted only when defined on the rule. */
|
|
29
|
+
min?: number;
|
|
30
|
+
/** Cardinality upper bound (`null` = unbounded) — emitted only when defined on the rule. */
|
|
31
|
+
max?: number | null;
|
|
32
|
+
/** Whether the child must carry an explicit name — emitted only when defined on the rule. */
|
|
33
|
+
named?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/** One registered (type, subType) in the manifest, with its docs + attrs + constraint graph. */
|
|
36
|
+
interface ManifestType {
|
|
37
|
+
type: string;
|
|
38
|
+
subType: string;
|
|
39
|
+
/** FR-033 — human/AI-facing description of the type/subType (required, non-empty). */
|
|
40
|
+
description: string;
|
|
41
|
+
/** FR-033 — prose documenting the complex rules enforced in code. Emitted only when present. */
|
|
42
|
+
rules?: string;
|
|
43
|
+
/** FR-033 — an example. Emitted only when present. */
|
|
44
|
+
example?: string;
|
|
45
|
+
/** FR-033 — guidance on when to reach for this type/subType. Emitted only when present. */
|
|
46
|
+
whenToUse?: string;
|
|
47
|
+
attrs: ManifestAttr[];
|
|
48
|
+
/** FR-033 — the type's structural child rules (sorted), the constraint graph. */
|
|
49
|
+
children: ManifestChild[];
|
|
50
|
+
/** FR-033 — the child-side placement claim (sorted). Emitted only when present + non-empty. */
|
|
51
|
+
parents?: string[];
|
|
52
|
+
}
|
|
53
|
+
/** The full canonical manifest. All collections are sorted for byte-stability. */
|
|
54
|
+
interface RegistryManifest {
|
|
55
|
+
types: ManifestType[];
|
|
56
|
+
commonAttrs: ManifestAttr[];
|
|
57
|
+
defaultSubTypes: Record<string, string>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The boundary classifier (Wave 3b). For every per-type attr the emitter
|
|
61
|
+
* encounters, the in/out decision is an EXPLICIT classification — never a silent
|
|
62
|
+
* default. Returns either an `ExclusionReason` (carved out, with a documented
|
|
63
|
+
* category) or `INCLUDED` (logical cross-port vocabulary). It is TOTAL: there is
|
|
64
|
+
* no "unclassified" third state, so a port can never silently let an unreasoned
|
|
65
|
+
* facet through — the self-documenting property the conformance test asserts.
|
|
66
|
+
*
|
|
67
|
+
* This replaces the prior tautology — a bare `EXCLUDED.has(name)` whose negative
|
|
68
|
+
* branch silently meant "logical". The decision is now centralized and reasoned;
|
|
69
|
+
* the cross-port byte-canonical + ADR-0023 (sealed agreed-vocabulary registry)
|
|
70
|
+
* together guarantee that an `INCLUDED` attr really is agreed vocabulary rather
|
|
71
|
+
* than an accidental registration, so inclusion-by-classification is sound.
|
|
72
|
+
*
|
|
73
|
+
* NOTE on liveness: a per-type attr exclusion (e.g. `extends`, `object`) is a
|
|
74
|
+
* CROSS-PORT carve-out that only the OO ports (Java/Kotlin) physically register;
|
|
75
|
+
* TS/C#/Python never register those names, so a single port's emitter cannot
|
|
76
|
+
* judge a carve-out "dead" — that is a cross-port property, asserted by the
|
|
77
|
+
* shared byte-canonical, not here.
|
|
78
|
+
*/
|
|
79
|
+
declare const INCLUDED: "included";
|
|
80
|
+
export type AttrClassification = ExclusionReason | typeof INCLUDED;
|
|
81
|
+
export declare function classifyPerTypeAttr(name: string): AttrClassification;
|
|
82
|
+
/**
|
|
83
|
+
* Build the canonical registry manifest object from an assembled registry.
|
|
84
|
+
*
|
|
85
|
+
* The registry must already be composed (e.g. `composeRegistry(coreProviders)`)
|
|
86
|
+
* so all providers — core types, db-domain attrs, common doc attrs — have run.
|
|
87
|
+
*/
|
|
88
|
+
export declare function buildRegistryManifest(registry: TypeRegistry): RegistryManifest;
|
|
89
|
+
/**
|
|
90
|
+
* Emit the canonical registry manifest as a byte-stable JSON string.
|
|
91
|
+
*
|
|
92
|
+
* Serialization contract — every port MUST match this exactly:
|
|
93
|
+
* - 2-space indentation (JSON.stringify(_, _, 2)).
|
|
94
|
+
* - Object keys in a fixed order (JSON.stringify preserves insertion order):
|
|
95
|
+
* the manifest is built with `types`, `commonAttrs`, `defaultSubTypes`.
|
|
96
|
+
* - Each attr: `name`, `valueType`, `isArray`, `required`, `description`,
|
|
97
|
+
* then optional `rules`, `example`, `whenToUse` (each omitted when absent).
|
|
98
|
+
* - Each type: `type`, `subType`, `description`, then optional `rules`,
|
|
99
|
+
* `example`, `whenToUse` (omitted when absent), then `attrs`, `children`,
|
|
100
|
+
* then optional `parents` (omitted when absent/empty).
|
|
101
|
+
* - Each child (FR-033 constraint graph): `childType`, `childSubType`,
|
|
102
|
+
* `childName`, then optional `min`, `max`, `named` (each emitted ONLY when
|
|
103
|
+
* defined on the rule — legacy wildcard rules omit all three; `max: null`
|
|
104
|
+
* is emitted when the rule sets it null, omitted when undefined).
|
|
105
|
+
* - All arrays sorted: `types` by "type.subType"; each `attrs` by name;
|
|
106
|
+
* each type's `children` by the tuple (childType, childSubTypeKey, childName)
|
|
107
|
+
* where childSubTypeKey is the string or the comma-joined list; `parents`
|
|
108
|
+
* ascending; `commonAttrs` by name; `defaultSubTypes` keys sorted.
|
|
109
|
+
* - `valueType: null` literal for polymorphic/untyped attrs.
|
|
110
|
+
* - `childSubType` is a string OR a string[] (a list of admitted subtypes).
|
|
111
|
+
* - `description` is required + non-empty on every type and attr (gated by the
|
|
112
|
+
* coverage assertion in registry-conformance.test.ts — mirrors ADR-0023).
|
|
113
|
+
* - A single trailing newline (matches the repo's committed-canonical style).
|
|
114
|
+
*/
|
|
115
|
+
export declare function emitRegistryManifest(registry: TypeRegistry): string;
|
|
116
|
+
export {};
|
|
117
|
+
//# sourceMappingURL=registry-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-manifest.d.ts","sourceRoot":"","sources":["../src/registry-manifest.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAyC,YAAY,EAAE,MAAM,eAAe,CAAC;AAEzF,OAAO,EAEL,eAAe,EAGhB,MAAM,mCAAmC,CAAC;AAE3C,+EAA+E;AAC/E,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,oGAAoG;IACpG,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mGAAmG;IACnG,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,mFAAmF;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,gGAAgG;IAChG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qEAAqE;AACrE,UAAU,aAAa;IACrB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,kGAAkG;IAClG,YAAY,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACzC,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4FAA4F;IAC5F,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,6FAA6F;IAC7F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,gGAAgG;AAChG,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,WAAW,EAAE,MAAM,CAAC;IACpB,gGAAgG;IAChG,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,iFAAiF;IACjF,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,kFAAkF;AAClF,UAAU,gBAAgB;IACxB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAgHD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,QAAA,MAAM,QAAQ,EAAG,UAAmB,CAAC;AACrC,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,OAAO,QAAQ,CAAC;AAEnE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAEpE;AA6BD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB,CAqC9E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAGnE"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
// SP-G Registry Conformance — the TS reference emitter.
|
|
2
|
+
//
|
|
3
|
+
// Walks an assembled core TypeRegistry and serializes the LOGICAL metamodel
|
|
4
|
+
// vocabulary as a canonical, fully-sorted, byte-stable JSON manifest. This is
|
|
5
|
+
// the single-source contract the other four ports (C#, Java, Kotlin, Python)
|
|
6
|
+
// must byte-match — a structural gate against the SP-C class of silent
|
|
7
|
+
// vocabulary drift (a port's registry diverging — wrong attr names, missing
|
|
8
|
+
// subtypes, different required-ness — with every behavioral corpus still green).
|
|
9
|
+
//
|
|
10
|
+
// The IN/OUT boundary is documented in fixtures/registry-conformance/README.md.
|
|
11
|
+
// In short, the manifest emits: type.subType + per-type/per-attr `description`
|
|
12
|
+
// (FR-033) + attrs[{name, valueType, isArray, required, description, rules?,
|
|
13
|
+
// example?, whenToUse?}] + the structural constraint graph (children / parents /
|
|
14
|
+
// cardinality, FR-033) + commonAttrs + defaultSubTypes. EXCLUDED (per-port-
|
|
15
|
+
// physical or not-universally-tracked-on-the-registry): factories/native
|
|
16
|
+
// bindings; AttrSchema.default and allowedValues (Java's attr model —
|
|
17
|
+
// ChildRequirement — carries neither).
|
|
18
|
+
//
|
|
19
|
+
// FR-033 Task 5 GREW the manifest: it now also emits the documentation surface
|
|
20
|
+
// (every type/attr carries a required, non-empty `description`; optional `rules`/
|
|
21
|
+
// `example`/`whenToUse`) AND the full structural constraint graph (each type's
|
|
22
|
+
// `children` from childRules — childType/childSubType/childName + optional
|
|
23
|
+
// cardinality min/max/named — and optional `parents`). Growing the canonical
|
|
24
|
+
// RED-flags the other four ports' registry-conformance until they reconcile
|
|
25
|
+
// (the intended intermediate state, same as the FR-032 sweep).
|
|
26
|
+
import { ATTR_SUBTYPE_STRING, ATTR_SUBTYPE_STRINGARRAY } from "./core/attr/attr-constants.js";
|
|
27
|
+
import { EXCLUDED_PER_TYPE_ATTRS, ExclusionReason, isExcludedTypeSubType, manifestRequiredOverride, } from "./registry-manifest-exclusions.js";
|
|
28
|
+
/** ASCII-string compare so the sort is locale-independent and byte-stable across ports. */
|
|
29
|
+
function compareStrings(a, b) {
|
|
30
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Normalize one AttrSchema to the manifest's logical attr shape — decomposing
|
|
34
|
+
* array-ness into a scalar `valueType` + an orthogonal `isArray` flag.
|
|
35
|
+
*
|
|
36
|
+
* An attr is array-valued when its schema sets `isArray: true` (the cross-port
|
|
37
|
+
* model). For resilience, a legacy `valueType: "stringarray"` token is also
|
|
38
|
+
* decomposed to `{ valueType: "string", isArray: true }` — so no `stringarray`
|
|
39
|
+
* token ever reaches the manifest. A polymorphic attr (no valueType) is `null` +
|
|
40
|
+
* non-array.
|
|
41
|
+
*/
|
|
42
|
+
function toManifestAttr(attr) {
|
|
43
|
+
const isLegacyStringArray = attr.valueType === ATTR_SUBTYPE_STRINGARRAY;
|
|
44
|
+
const isArray = attr.isArray === true || isLegacyStringArray;
|
|
45
|
+
// The scalar value-type: a legacy stringarray token collapses to "string";
|
|
46
|
+
// otherwise the declared valueType (omitted → null for polymorphic attrs).
|
|
47
|
+
const valueType = isLegacyStringArray
|
|
48
|
+
? ATTR_SUBTYPE_STRING
|
|
49
|
+
: (attr.valueType ?? null);
|
|
50
|
+
// FR-033: the documentation surface (`description` required + non-empty;
|
|
51
|
+
// `rules`/`example`/`whenToUse` emitted ONLY when present) follows the
|
|
52
|
+
// existing facets, preserving key order for byte-stability.
|
|
53
|
+
const out = {
|
|
54
|
+
name: attr.name,
|
|
55
|
+
valueType,
|
|
56
|
+
isArray,
|
|
57
|
+
required: attr.required,
|
|
58
|
+
description: attr.description,
|
|
59
|
+
};
|
|
60
|
+
if (attr.rules !== undefined)
|
|
61
|
+
out.rules = attr.rules;
|
|
62
|
+
if (attr.example !== undefined)
|
|
63
|
+
out.example = attr.example;
|
|
64
|
+
if (attr.whenToUse !== undefined)
|
|
65
|
+
out.whenToUse = attr.whenToUse;
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
/** The canonical sort key for a child rule: childType, then the childSubType
|
|
69
|
+
* string (or comma-joined list), then childName — ASCII codepoint compare. */
|
|
70
|
+
function childSubTypeKey(childSubType) {
|
|
71
|
+
return Array.isArray(childSubType) ? childSubType.join(",") : childSubType;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Normalize one structural ChildRule to the manifest's child shape (FR-033).
|
|
75
|
+
* Cardinality (`min`/`max`/`named`) is emitted ONLY when defined on the rule —
|
|
76
|
+
* legacy wildcard rules leave them undefined and must NOT fabricate cardinality.
|
|
77
|
+
* `max` may legitimately be `null` (unbounded); `null` is emitted, `undefined`
|
|
78
|
+
* is omitted.
|
|
79
|
+
*/
|
|
80
|
+
function toManifestChild(rule) {
|
|
81
|
+
const out = {
|
|
82
|
+
childType: rule.childType,
|
|
83
|
+
childSubType: rule.childSubType,
|
|
84
|
+
childName: rule.childName,
|
|
85
|
+
};
|
|
86
|
+
if (rule.min !== undefined)
|
|
87
|
+
out.min = rule.min;
|
|
88
|
+
if (rule.max !== undefined)
|
|
89
|
+
out.max = rule.max;
|
|
90
|
+
if (rule.named !== undefined)
|
|
91
|
+
out.named = rule.named;
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
/** Sort the constraint graph by (childType, childSubTypeKey, childName) — ASCII. */
|
|
95
|
+
function sortedChildren(rules) {
|
|
96
|
+
return rules
|
|
97
|
+
.map(toManifestChild)
|
|
98
|
+
.sort((a, b) => compareStrings(a.childType, b.childType) ||
|
|
99
|
+
compareStrings(childSubTypeKey(a.childSubType), childSubTypeKey(b.childSubType)) ||
|
|
100
|
+
compareStrings(a.childName, b.childName));
|
|
101
|
+
}
|
|
102
|
+
/** Sort attrs by name (ascending, ASCII). */
|
|
103
|
+
function sortedAttrs(attrs) {
|
|
104
|
+
return attrs
|
|
105
|
+
.map(toManifestAttr)
|
|
106
|
+
.sort((a, b) => compareStrings(a.name, b.name));
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Sort PER-TYPE attrs, keeping only those the explicit classification marks
|
|
110
|
+
* INCLUDED (logical cross-port vocabulary). A per-type attr classified with any
|
|
111
|
+
* `ExclusionReason` (structural keyword, native binding, per-type `description`
|
|
112
|
+
* commonAttr dup) is carved out — for a documented reason, never a silent
|
|
113
|
+
* name-match. The filter is a no-op for TS (which never registers the carved-out
|
|
114
|
+
* names as per-type attrs); it is applied uniformly so the cross-port contract
|
|
115
|
+
* is explicit. NOTE: `description` is filtered ONLY here — it remains in the
|
|
116
|
+
* `commonAttrs` block (built via `sortedAttrs`, unfiltered).
|
|
117
|
+
*/
|
|
118
|
+
function sortedPerTypeAttrs(attrs, type, subType) {
|
|
119
|
+
return sortedAttrs(attrs.filter((a) => classifyPerTypeAttr(a.name) === INCLUDED)).map((attr) => {
|
|
120
|
+
// FR-024-pending requiredness override (the attr-level analogue of the
|
|
121
|
+
// Fr024Pending row carve-out): the TS registry already registers the
|
|
122
|
+
// FR-024 requiredness, but the manifest keeps emitting the pre-FR-024
|
|
123
|
+
// agreed value until the Phase-E atomic all-ports flip.
|
|
124
|
+
const required = manifestRequiredOverride(type, subType, attr.name);
|
|
125
|
+
return required === undefined ? attr : { ...attr, required };
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* The boundary classifier (Wave 3b). For every per-type attr the emitter
|
|
130
|
+
* encounters, the in/out decision is an EXPLICIT classification — never a silent
|
|
131
|
+
* default. Returns either an `ExclusionReason` (carved out, with a documented
|
|
132
|
+
* category) or `INCLUDED` (logical cross-port vocabulary). It is TOTAL: there is
|
|
133
|
+
* no "unclassified" third state, so a port can never silently let an unreasoned
|
|
134
|
+
* facet through — the self-documenting property the conformance test asserts.
|
|
135
|
+
*
|
|
136
|
+
* This replaces the prior tautology — a bare `EXCLUDED.has(name)` whose negative
|
|
137
|
+
* branch silently meant "logical". The decision is now centralized and reasoned;
|
|
138
|
+
* the cross-port byte-canonical + ADR-0023 (sealed agreed-vocabulary registry)
|
|
139
|
+
* together guarantee that an `INCLUDED` attr really is agreed vocabulary rather
|
|
140
|
+
* than an accidental registration, so inclusion-by-classification is sound.
|
|
141
|
+
*
|
|
142
|
+
* NOTE on liveness: a per-type attr exclusion (e.g. `extends`, `object`) is a
|
|
143
|
+
* CROSS-PORT carve-out that only the OO ports (Java/Kotlin) physically register;
|
|
144
|
+
* TS/C#/Python never register those names, so a single port's emitter cannot
|
|
145
|
+
* judge a carve-out "dead" — that is a cross-port property, asserted by the
|
|
146
|
+
* shared byte-canonical, not here.
|
|
147
|
+
*/
|
|
148
|
+
const INCLUDED = "included";
|
|
149
|
+
export function classifyPerTypeAttr(name) {
|
|
150
|
+
return EXCLUDED_PER_TYPE_ATTRS.get(name) ?? INCLUDED;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Build one manifest type entry from its full TypeDefinition (FR-033). Key order
|
|
154
|
+
* is fixed for byte-stability: `type`, `subType`, `description`, then optional
|
|
155
|
+
* `rules`/`example`/`whenToUse` (emitted only when present), then `attrs`,
|
|
156
|
+
* `children` (the sorted constraint graph), and optional `parents` (emitted only
|
|
157
|
+
* when present + non-empty, sorted ASCII).
|
|
158
|
+
*/
|
|
159
|
+
function toManifestType(def) {
|
|
160
|
+
// Build in fixed key order. Optional docs facets (rules/example/whenToUse) sit
|
|
161
|
+
// between `description` and `attrs`, so they are spread into the literal (when
|
|
162
|
+
// present) to preserve insertion order — `attrs`/`children`/`parents` follow.
|
|
163
|
+
const out = {
|
|
164
|
+
type: def.typeId.type,
|
|
165
|
+
subType: def.typeId.subType,
|
|
166
|
+
description: def.description,
|
|
167
|
+
...(def.rules !== undefined ? { rules: def.rules } : {}),
|
|
168
|
+
...(def.example !== undefined ? { example: def.example } : {}),
|
|
169
|
+
...(def.whenToUse !== undefined ? { whenToUse: def.whenToUse } : {}),
|
|
170
|
+
attrs: sortedPerTypeAttrs(def.attributes, def.typeId.type, def.typeId.subType),
|
|
171
|
+
children: sortedChildren(def.childRules),
|
|
172
|
+
};
|
|
173
|
+
if (def.parents !== undefined && def.parents.length > 0) {
|
|
174
|
+
out.parents = [...def.parents].sort(compareStrings);
|
|
175
|
+
}
|
|
176
|
+
return out;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Build the canonical registry manifest object from an assembled registry.
|
|
180
|
+
*
|
|
181
|
+
* The registry must already be composed (e.g. `composeRegistry(coreProviders)`)
|
|
182
|
+
* so all providers — core types, db-domain attrs, common doc attrs — have run.
|
|
183
|
+
*/
|
|
184
|
+
export function buildRegistryManifest(registry) {
|
|
185
|
+
// Walk every registered (type, subType). `allTypes()` returns the TypeIds;
|
|
186
|
+
// `find` gives each one's full TypeDefinition (description / attributes /
|
|
187
|
+
// childRules / parents / rules / example / whenToUse) in a single lookup.
|
|
188
|
+
const types = registry
|
|
189
|
+
.allTypes()
|
|
190
|
+
// Skip excluded (type, subType) rows: the `metadata.base` inheritance
|
|
191
|
+
// anchor (C-5) + the generic TS-presentation `view.*` controls (B-2).
|
|
192
|
+
.filter((typeId) => !isExcludedTypeSubType(typeId.type, typeId.subType))
|
|
193
|
+
.map((typeId) => toManifestType(
|
|
194
|
+
// The type IS registered (it came from allTypes()), so find() is defined.
|
|
195
|
+
registry.find(typeId.type, typeId.subType)))
|
|
196
|
+
// Sort by the full "type.subType" key for a stable, port-independent order.
|
|
197
|
+
.sort((a, b) => compareStrings(`${a.type}.${a.subType}`, `${b.type}.${b.subType}`));
|
|
198
|
+
const commonAttrs = sortedAttrs(registry.getCommonAttrs());
|
|
199
|
+
// defaultSubTypes: rebuild with sorted keys so JSON.stringify emits a stable
|
|
200
|
+
// key order. There is no public "all default subTypes" accessor, so derive
|
|
201
|
+
// the candidate type names from the registered types and probe each.
|
|
202
|
+
const typeNames = Array.from(new Set(types.map((t) => t.type))).sort(compareStrings);
|
|
203
|
+
const defaultSubTypes = {};
|
|
204
|
+
for (const typeName of typeNames) {
|
|
205
|
+
const defaultSub = registry.defaultSubTypeOf(typeName);
|
|
206
|
+
if (defaultSub !== undefined) {
|
|
207
|
+
defaultSubTypes[typeName] = defaultSub;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return { types, commonAttrs, defaultSubTypes };
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Emit the canonical registry manifest as a byte-stable JSON string.
|
|
214
|
+
*
|
|
215
|
+
* Serialization contract — every port MUST match this exactly:
|
|
216
|
+
* - 2-space indentation (JSON.stringify(_, _, 2)).
|
|
217
|
+
* - Object keys in a fixed order (JSON.stringify preserves insertion order):
|
|
218
|
+
* the manifest is built with `types`, `commonAttrs`, `defaultSubTypes`.
|
|
219
|
+
* - Each attr: `name`, `valueType`, `isArray`, `required`, `description`,
|
|
220
|
+
* then optional `rules`, `example`, `whenToUse` (each omitted when absent).
|
|
221
|
+
* - Each type: `type`, `subType`, `description`, then optional `rules`,
|
|
222
|
+
* `example`, `whenToUse` (omitted when absent), then `attrs`, `children`,
|
|
223
|
+
* then optional `parents` (omitted when absent/empty).
|
|
224
|
+
* - Each child (FR-033 constraint graph): `childType`, `childSubType`,
|
|
225
|
+
* `childName`, then optional `min`, `max`, `named` (each emitted ONLY when
|
|
226
|
+
* defined on the rule — legacy wildcard rules omit all three; `max: null`
|
|
227
|
+
* is emitted when the rule sets it null, omitted when undefined).
|
|
228
|
+
* - All arrays sorted: `types` by "type.subType"; each `attrs` by name;
|
|
229
|
+
* each type's `children` by the tuple (childType, childSubTypeKey, childName)
|
|
230
|
+
* where childSubTypeKey is the string or the comma-joined list; `parents`
|
|
231
|
+
* ascending; `commonAttrs` by name; `defaultSubTypes` keys sorted.
|
|
232
|
+
* - `valueType: null` literal for polymorphic/untyped attrs.
|
|
233
|
+
* - `childSubType` is a string OR a string[] (a list of admitted subtypes).
|
|
234
|
+
* - `description` is required + non-empty on every type and attr (gated by the
|
|
235
|
+
* coverage assertion in registry-conformance.test.ts — mirrors ADR-0023).
|
|
236
|
+
* - A single trailing newline (matches the repo's committed-canonical style).
|
|
237
|
+
*/
|
|
238
|
+
export function emitRegistryManifest(registry) {
|
|
239
|
+
const manifest = buildRegistryManifest(registry);
|
|
240
|
+
return `${JSON.stringify(manifest, null, 2)}\n`;
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=registry-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry-manifest.js","sourceRoot":"","sources":["../src/registry-manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AttrValue, MetaData } from "./shared/meta-data.js";
|
|
2
2
|
import { type AttrSubType } from "./core/attr/attr-constants.js";
|
|
3
3
|
import type { DataType } from "./data-type.js";
|
|
4
|
+
import type { ReferenceDescriptor, NodeValidator } from "./validation-types.js";
|
|
4
5
|
export declare class TypeId {
|
|
5
6
|
readonly type: string;
|
|
6
7
|
readonly subType: string;
|
|
@@ -11,10 +12,25 @@ export declare class TypeId {
|
|
|
11
12
|
export interface ChildRule {
|
|
12
13
|
/** `"*"` matches any type. */
|
|
13
14
|
childType: string;
|
|
14
|
-
/**
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* `"*"` matches any subtype. A list (FR-033) admits any one of several
|
|
17
|
+
* subtypes (e.g. a `source` child may be `["rdb", "view"]`).
|
|
18
|
+
*/
|
|
19
|
+
childSubType: string | readonly string[];
|
|
16
20
|
/** `"*"` matches any name. */
|
|
17
21
|
childName: string;
|
|
22
|
+
/**
|
|
23
|
+
* FR-033 — cardinality lower bound. A required child has `min >= 1`. Optional
|
|
24
|
+
* on the interface for back-compat with rules authored before FR-033.
|
|
25
|
+
*/
|
|
26
|
+
min?: number;
|
|
27
|
+
/**
|
|
28
|
+
* FR-033 — cardinality upper bound; `null` means unbounded (0..∞). Optional
|
|
29
|
+
* for back-compat.
|
|
30
|
+
*/
|
|
31
|
+
max?: number | null;
|
|
32
|
+
/** FR-033 — whether the child must carry an explicit name. */
|
|
33
|
+
named?: boolean;
|
|
18
34
|
}
|
|
19
35
|
export interface AttrSchema {
|
|
20
36
|
/** Attribute name WITHOUT the "@" prefix (e.g. "dbColumn", "currency"). */
|
|
@@ -32,6 +48,16 @@ export interface AttrSchema {
|
|
|
32
48
|
* attrs. Attempting to register an AttrSchema with `valueType: "base"` throws.
|
|
33
49
|
*/
|
|
34
50
|
valueType?: AttrSubType;
|
|
51
|
+
/**
|
|
52
|
+
* Whether this attribute is array-valued (a list of the scalar `valueType`).
|
|
53
|
+
*
|
|
54
|
+
* Array-ness is a single orthogonal axis — a `string` attr with `isArray: true`
|
|
55
|
+
* is what was formerly the `stringarray` subtype. The loader coerces an
|
|
56
|
+
* array-flagged attr through the array string-attr coercion (bare-string →
|
|
57
|
+
* one-element array). Mirrors Java's `StringAttribute + @isArray` model.
|
|
58
|
+
* Absent/false = scalar.
|
|
59
|
+
*/
|
|
60
|
+
isArray?: boolean;
|
|
35
61
|
/** Whether this attribute must be present on the node. */
|
|
36
62
|
required: boolean;
|
|
37
63
|
/** Default value applied when the attribute is absent. Optional. */
|
|
@@ -40,6 +66,12 @@ export interface AttrSchema {
|
|
|
40
66
|
allowedValues?: readonly AttrValue[];
|
|
41
67
|
/** Human/AI-facing description of what the attribute means. */
|
|
42
68
|
description: string;
|
|
69
|
+
/** FR-033 — prose documenting the complex rules enforced in code. Optional. */
|
|
70
|
+
rules?: string;
|
|
71
|
+
/** FR-033 — an example value, shown only in the provider detail page. Optional. */
|
|
72
|
+
example?: string;
|
|
73
|
+
/** FR-033 — guidance on when to reach for this attribute. Optional. */
|
|
74
|
+
whenToUse?: string;
|
|
43
75
|
}
|
|
44
76
|
export interface TypeDefinition {
|
|
45
77
|
typeId: TypeId;
|
|
@@ -50,6 +82,33 @@ export interface TypeDefinition {
|
|
|
50
82
|
/** The coarse value-type classification, for (type, subType)s whose nodes
|
|
51
83
|
* carry a typed value (field, attr). Absent for non-value-bearing types. */
|
|
52
84
|
dataType?: DataType;
|
|
85
|
+
/**
|
|
86
|
+
* FR-033 — the child-side placement claim: the `type.subType`s under which a
|
|
87
|
+
* node of this type is allowed. Additive (an extension provider names a parent
|
|
88
|
+
* without editing the parent's definition). Optional.
|
|
89
|
+
*/
|
|
90
|
+
parents?: readonly string[];
|
|
91
|
+
/** FR-033 — prose documenting the complex rules enforced in code. Optional. */
|
|
92
|
+
rules?: string;
|
|
93
|
+
/** FR-033 — an example, shown only in the provider detail page. Optional. */
|
|
94
|
+
example?: string;
|
|
95
|
+
/** FR-033 — guidance on when to reach for this type/subType. Optional. */
|
|
96
|
+
whenToUse?: string;
|
|
97
|
+
/** Max children of this type.subType per parent (`1` = singleton). Loader-enforced. */
|
|
98
|
+
maxOccurs?: number;
|
|
99
|
+
/** Default name for a singleton (`maxOccurs===1`) child declared with no name. */
|
|
100
|
+
defaultName?: string;
|
|
101
|
+
/**
|
|
102
|
+
* Cross-references this node's attrs declare — resolved generically against the symbol
|
|
103
|
+
* table (a dangling/kind-mismatched target fails the load). Carried by the type's
|
|
104
|
+
* registration, so a downstream provider's references validate with no core changes.
|
|
105
|
+
*/
|
|
106
|
+
references?: ReferenceDescriptor[];
|
|
107
|
+
/**
|
|
108
|
+
* The type's imperative validator (logic config can't express). Invoked by the recursive
|
|
109
|
+
* validation walk. Owned by the provider that owns the type.
|
|
110
|
+
*/
|
|
111
|
+
validate?: NodeValidator;
|
|
53
112
|
}
|
|
54
113
|
export declare class TypeRegistry {
|
|
55
114
|
/** Keyed by `"type.subType"`. */
|
|
@@ -60,6 +119,21 @@ export declare class TypeRegistry {
|
|
|
60
119
|
private readonly _defaultSubTypes;
|
|
61
120
|
/** Attrs accepted on every metatype (declared by providers). */
|
|
62
121
|
private readonly _commonAttrs;
|
|
122
|
+
/**
|
|
123
|
+
* ADR-0023 Decision 2 — sealed state. Once sealed, every mutating registration
|
|
124
|
+
* method (`register`/`setDefaultSubType`/`registerCommonAttrs`/`extend`) throws
|
|
125
|
+
* `ERR_REGISTRY_SEALED`. The library seals its composed registry after the agreed
|
|
126
|
+
* metamodel providers bootstrap, so nothing can register made-up metamodel
|
|
127
|
+
* attributes post-bootstrap. A downstream app composes its own (unsealed) registry.
|
|
128
|
+
*/
|
|
129
|
+
private _sealed;
|
|
130
|
+
/** Seal the registry: every subsequent mutating registration throws
|
|
131
|
+
* `ERR_REGISTRY_SEALED`. Idempotent. Reads are unaffected. */
|
|
132
|
+
seal(): void;
|
|
133
|
+
/** Whether this registry has been sealed (ADR-0023). */
|
|
134
|
+
isSealed(): boolean;
|
|
135
|
+
/** Guard at the top of every mutating registration method. */
|
|
136
|
+
private checkNotSealed;
|
|
63
137
|
register(def: TypeDefinition): void;
|
|
64
138
|
find(type: string, subType: string): TypeDefinition | undefined;
|
|
65
139
|
has(type: string, subType: string): boolean;
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/registry.js
CHANGED
|
@@ -25,7 +25,34 @@ export class TypeRegistry {
|
|
|
25
25
|
_defaultSubTypes = new Map();
|
|
26
26
|
/** Attrs accepted on every metatype (declared by providers). */
|
|
27
27
|
_commonAttrs = [];
|
|
28
|
+
/**
|
|
29
|
+
* ADR-0023 Decision 2 — sealed state. Once sealed, every mutating registration
|
|
30
|
+
* method (`register`/`setDefaultSubType`/`registerCommonAttrs`/`extend`) throws
|
|
31
|
+
* `ERR_REGISTRY_SEALED`. The library seals its composed registry after the agreed
|
|
32
|
+
* metamodel providers bootstrap, so nothing can register made-up metamodel
|
|
33
|
+
* attributes post-bootstrap. A downstream app composes its own (unsealed) registry.
|
|
34
|
+
*/
|
|
35
|
+
_sealed = false;
|
|
36
|
+
/** Seal the registry: every subsequent mutating registration throws
|
|
37
|
+
* `ERR_REGISTRY_SEALED`. Idempotent. Reads are unaffected. */
|
|
38
|
+
seal() {
|
|
39
|
+
this._sealed = true;
|
|
40
|
+
}
|
|
41
|
+
/** Whether this registry has been sealed (ADR-0023). */
|
|
42
|
+
isSealed() {
|
|
43
|
+
return this._sealed;
|
|
44
|
+
}
|
|
45
|
+
/** Guard at the top of every mutating registration method. */
|
|
46
|
+
checkNotSealed(operation) {
|
|
47
|
+
if (this._sealed) {
|
|
48
|
+
throw new MetaModelError(`TypeRegistry is sealed (ADR-0023): ${operation} is not permitted after metamodel ` +
|
|
49
|
+
`bootstrap. Made-up metamodel attributes/types are structurally disallowed — a new ` +
|
|
50
|
+
`metamodel attribute requires a registered provider + human agreement. Downstream apps ` +
|
|
51
|
+
`that need extra vocabulary must compose their own (unsealed) registry.`, { code: "ERR_REGISTRY_SEALED" });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
28
54
|
register(def) {
|
|
55
|
+
this.checkNotSealed(`register("${def.typeId.toString()}")`);
|
|
29
56
|
const key = def.typeId.toString();
|
|
30
57
|
if (this._defs.has(key)) {
|
|
31
58
|
throw new Error(`TypeRegistry: duplicate registration for "${key}" (type="${def.typeId.type}", subType="${def.typeId.subType}")`);
|
|
@@ -64,6 +91,7 @@ export class TypeRegistry {
|
|
|
64
91
|
}
|
|
65
92
|
/** Designate the default subType for a bare `type` key (used by YAML authoring sugar). */
|
|
66
93
|
setDefaultSubType(type, subType) {
|
|
94
|
+
this.checkNotSealed(`setDefaultSubType("${type}")`);
|
|
67
95
|
this._defaultSubTypes.set(type, subType);
|
|
68
96
|
}
|
|
69
97
|
/** The designated default subType for a type, or undefined if none was designated. */
|
|
@@ -82,6 +110,7 @@ export class TypeRegistry {
|
|
|
82
110
|
* per-type attrs are resolved at validation time (Task 1.3).
|
|
83
111
|
*/
|
|
84
112
|
registerCommonAttrs(attrs) {
|
|
113
|
+
this.checkNotSealed("registerCommonAttrs");
|
|
85
114
|
for (const attr of attrs) {
|
|
86
115
|
if (attr.valueType === SUBTYPE_BASE) {
|
|
87
116
|
throw new Error(`TypeRegistry.registerCommonAttrs: attr "${attr.name}" declares valueType "${SUBTYPE_BASE}", ` +
|
|
@@ -106,6 +135,7 @@ export class TypeRegistry {
|
|
|
106
135
|
* providers to extend types another provider defined.
|
|
107
136
|
*/
|
|
108
137
|
extend(type, subType, ext) {
|
|
138
|
+
this.checkNotSealed(`extend("${type}.${subType}")`);
|
|
109
139
|
const def = this.find(type, subType);
|
|
110
140
|
if (def === undefined) {
|
|
111
141
|
throw new Error(`TypeRegistry.extend: no registered type "${type}.${subType}" to extend`);
|
|
@@ -126,8 +156,14 @@ export class TypeRegistry {
|
|
|
126
156
|
}
|
|
127
157
|
}
|
|
128
158
|
export function childRuleMatches(rule, child) {
|
|
159
|
+
// FR-033 — childSubType may be a wildcard, a single subtype, or a list of
|
|
160
|
+
// admitted subtypes.
|
|
161
|
+
const subTypeMatches = rule.childSubType === CHILD_RULE_WILDCARD ||
|
|
162
|
+
(Array.isArray(rule.childSubType)
|
|
163
|
+
? rule.childSubType.includes(child.subType)
|
|
164
|
+
: rule.childSubType === child.subType);
|
|
129
165
|
return ((rule.childType === CHILD_RULE_WILDCARD || rule.childType === child.type) &&
|
|
130
|
-
|
|
166
|
+
subTypeMatches &&
|
|
131
167
|
(rule.childName === CHILD_RULE_WILDCARD || rule.childName === child.name));
|
|
132
168
|
}
|
|
133
169
|
//# sourceMappingURL=registry.js.map
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAoB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,13 @@ export declare const ATTR_PREFIX = "@";
|
|
|
14
14
|
export declare const TYPE_SUBTYPE_SEPARATOR = ".";
|
|
15
15
|
/** Separator between package segments and between package and name. */
|
|
16
16
|
export declare const PACKAGE_SEPARATOR = "::";
|
|
17
|
+
/**
|
|
18
|
+
* FR-024 (ADR-0029): separator between an owner object and a nested child in a
|
|
19
|
+
* dotted `extends` reference (`Customer.id`, `acme::sales::Customer.id`).
|
|
20
|
+
* Names cannot contain `.`, so a `.` in the final `::`-segment of a ref
|
|
21
|
+
* unambiguously marks a child-targeting reference.
|
|
22
|
+
*/
|
|
23
|
+
export declare const CHILD_REF_SEPARATOR = ".";
|
|
17
24
|
/** Relative-reference "go up one level" marker. */
|
|
18
25
|
export declare const PACKAGE_PARENT = "..";
|
|
19
26
|
export declare const CHILD_RULE_WILDCARD = "*";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structural.d.ts","sourceRoot":"","sources":["../../src/shared/structural.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAC/C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,eAAO,MAAM,aAAa,aASxB,CAAC;AAMH,eAAO,MAAM,eAAe,YAAY,CAAC;AAMzC,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAM1C,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,mDAAmD;AACnD,eAAO,MAAM,cAAc,OAAO,CAAC;AAMnC,eAAO,MAAM,mBAAmB,MAAM,CAAC"}
|
|
1
|
+
{"version":3,"file":"structural.d.ts","sourceRoot":"","sources":["../../src/shared/structural.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAC/C,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,eAAO,MAAM,aAAa,aASxB,CAAC;AAMH,eAAO,MAAM,eAAe,YAAY,CAAC;AAMzC,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAM1C,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,mDAAmD;AACnD,eAAO,MAAM,cAAc,OAAO,CAAC;AAMnC,eAAO,MAAM,mBAAmB,MAAM,CAAC"}
|