@metaobjectsdev/metadata 0.9.0-rc.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/attr-schema-validate.d.ts +1 -1
- package/dist/attr-schema-validate.d.ts.map +1 -1
- package/dist/attr-schema-validate.js +84 -7
- package/dist/attr-schema-validate.js.map +1 -1
- 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/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/doc-schema.d.ts +1 -1
- package/dist/core/documentation/doc-schema.d.ts.map +1 -1
- package/dist/core/documentation/doc-schema.js +13 -5
- package/dist/core/documentation/doc-schema.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/field-schema.d.ts +0 -16
- package/dist/core/field/field-schema.d.ts.map +1 -1
- package/dist/core/field/field-schema.js +10 -158
- package/dist/core/field/field-schema.js.map +1 -1
- 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/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-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 +91 -0
- package/dist/core/identity/identity-definition.embedded.js.map +1 -0
- package/dist/core/identity/identity-schema.d.ts.map +1 -1
- package/dist/core/identity/identity-schema.js +3 -2
- package/dist/core/identity/identity-schema.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/relationship/relationship-schema.d.ts.map +1 -1
- package/dist/core/relationship/relationship-schema.js +13 -7
- package/dist/core/relationship/relationship-schema.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 +134 -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-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 +5 -2
- package/dist/core-types.d.ts.map +1 -1
- package/dist/core-types.js +261 -115
- package/dist/core-types.js.map +1 -1
- 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 +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +78 -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 +47 -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 +513 -33
- package/dist/loader/validation-passes.js.map +1 -1
- 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/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 +74 -8
- package/dist/parser-core.js.map +1 -1
- 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-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 +170 -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/db/db-schema.d.ts +14 -0
- package/dist/persistence/db/db-schema.d.ts.map +1 -1
- package/dist/persistence/db/db-schema.js +27 -0
- package/dist/persistence/db/db-schema.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/origin/origin-schema.d.ts.map +1 -1
- package/dist/persistence/origin/origin-schema.js +7 -3
- package/dist/persistence/origin/origin-schema.js.map +1 -1
- 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/layout/layout-schema.d.ts.map +1 -1
- package/dist/presentation/layout/layout-schema.js +3 -2
- package/dist/presentation/layout/layout-schema.js.map +1 -1
- 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/ui/ui-schema.d.ts +10 -0
- package/dist/presentation/ui/ui-schema.d.ts.map +1 -0
- package/dist/presentation/ui/ui-schema.js +41 -0
- package/dist/presentation/ui/ui-schema.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 +169 -0
- package/dist/provider-data.d.ts.map +1 -0
- package/dist/provider-data.js +269 -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 +60 -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/prompt-schema.d.ts +20 -0
- package/dist/template/prompt-schema.d.ts.map +1 -0
- package/dist/template/prompt-schema.js +70 -0
- package/dist/template/prompt-schema.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/template/template-schema.d.ts.map +1 -1
- package/dist/template/template-schema.js +12 -4
- package/dist/template/template-schema.js.map +1 -1
- package/package.json +33 -22
- package/src/attr-schema-validate.ts +96 -4
- 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-definition.embedded.ts +98 -0
- 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-definition.embedded.ts +141 -0
- package/src/core/yaml-desugar.ts +96 -7
- package/src/core-types.ts +289 -150
- package/src/errors.ts +78 -0
- 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 +66 -7
- package/src/loader/shortcuts.ts +2 -2
- package/src/loader/validation-passes.ts +679 -33
- 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 +86 -8
- package/src/persistence/db/db-definition.embedded.ts +177 -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 +446 -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 +90 -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/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,158 @@
|
|
|
1
|
+
// Validation pass: FR-024 projection identity pass-through + key correspondence.
|
|
2
|
+
//
|
|
3
|
+
// A projection's identity is a PASS-THROUGH of an entity identity:
|
|
4
|
+
//
|
|
5
|
+
// - every identity child of an object.projection MUST extend an entity
|
|
6
|
+
// identity (the dotted by-name form, e.g. `extends: "Customer.id"`);
|
|
7
|
+
// a projection identity without `extends` → ERR_PROJECTION_IDENTITY_NOT_EXTENDED.
|
|
8
|
+
// - key correspondence: every field named by the extended identity's
|
|
9
|
+
// @fields must have a local projection field extending it; a missing
|
|
10
|
+
// pass-through → ERR_IDENTITY_KEY_MISMATCH.
|
|
11
|
+
// - the identity's local key is COMPUTED from those local fields (in the
|
|
12
|
+
// extended identity's order) — derived on read, NEVER written back into
|
|
13
|
+
// the tree (metadata is the authored spine; the loader never mutates it).
|
|
14
|
+
// An explicit @fields that disagrees with the computed set →
|
|
15
|
+
// ERR_IDENTITY_KEY_MISMATCH.
|
|
16
|
+
//
|
|
17
|
+
// Unresolved / type-mismatched `extends` refs are NOT re-reported here — the
|
|
18
|
+
// deferred-super pass already emitted ERR_UNRESOLVED_SUPER /
|
|
19
|
+
// ERR_EXTENDS_TARGET_MISMATCH for those.
|
|
20
|
+
import { ParseError } from "../../errors.js";
|
|
21
|
+
import { TYPE_OBJECT, TYPE_IDENTITY, TYPE_FIELD } from "../../shared/base-types.js";
|
|
22
|
+
import { OBJECT_SUBTYPE_PROJECTION } from "../object/object-constants.js";
|
|
23
|
+
import { IDENTITY_ATTR_FIELDS } from "./identity-constants.js";
|
|
24
|
+
/**
|
|
25
|
+
* Normalize an identity's OWN @fields attr to a string[]. Accepts both the
|
|
26
|
+
* array form (["id"]) and the comma-string form ("id" / "a,b"); returns
|
|
27
|
+
* undefined when the identity declares no own @fields (the pass-through case).
|
|
28
|
+
*/
|
|
29
|
+
export function identityOwnFields(identity) {
|
|
30
|
+
return normalizeFields(identity.ownAttr(IDENTITY_ATTR_FIELDS));
|
|
31
|
+
}
|
|
32
|
+
/** Normalize an identity's EFFECTIVE @fields attr (inherits through extends). */
|
|
33
|
+
export function identityEffectiveFields(identity) {
|
|
34
|
+
return normalizeFields(identity.attr(IDENTITY_ATTR_FIELDS));
|
|
35
|
+
}
|
|
36
|
+
function normalizeFields(raw) {
|
|
37
|
+
if (raw === undefined || raw === null)
|
|
38
|
+
return undefined;
|
|
39
|
+
if (Array.isArray(raw))
|
|
40
|
+
return raw.map((v) => String(v).trim());
|
|
41
|
+
if (typeof raw === "string") {
|
|
42
|
+
return raw
|
|
43
|
+
.split(",")
|
|
44
|
+
.map((s) => s.trim())
|
|
45
|
+
.filter((s) => s.length > 0);
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Derive a projection identity's pass-through key — a PURE read of the
|
|
51
|
+
* resolved tree (no mutation): for each field name in the extended identity's
|
|
52
|
+
* effective @fields, find the local field whose extends-chain reaches the
|
|
53
|
+
* entity's field of that name; the computed key is those local field names in
|
|
54
|
+
* the extended identity's order.
|
|
55
|
+
*
|
|
56
|
+
* Returns undefined when the identity has no resolved identity super (the
|
|
57
|
+
* not-extended / unresolved / mismatched cases — reported elsewhere).
|
|
58
|
+
*/
|
|
59
|
+
export function resolveIdentityPassthrough(identity) {
|
|
60
|
+
const extended = identity.superResolved;
|
|
61
|
+
if (extended === undefined || extended.type !== TYPE_IDENTITY)
|
|
62
|
+
return undefined;
|
|
63
|
+
const entity = extended.parent;
|
|
64
|
+
if (entity === undefined || entity.type !== TYPE_OBJECT)
|
|
65
|
+
return undefined;
|
|
66
|
+
const owner = identity.parent;
|
|
67
|
+
if (owner === undefined)
|
|
68
|
+
return undefined;
|
|
69
|
+
const extendedFields = identityEffectiveFields(extended) ?? [];
|
|
70
|
+
const computedFields = [];
|
|
71
|
+
const missing = [];
|
|
72
|
+
for (const fieldName of extendedFields) {
|
|
73
|
+
const entityField = entity
|
|
74
|
+
.children()
|
|
75
|
+
.find((c) => c.type === TYPE_FIELD && c.name === fieldName);
|
|
76
|
+
if (entityField === undefined) {
|
|
77
|
+
missing.push(fieldName);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const local = owner
|
|
81
|
+
.ownChildren()
|
|
82
|
+
.find((c) => c.type === TYPE_FIELD && extendsChainReaches(c, entityField));
|
|
83
|
+
if (local === undefined) {
|
|
84
|
+
missing.push(fieldName);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
computedFields.push(local.name);
|
|
88
|
+
}
|
|
89
|
+
return { entity, computedFields, missing };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The computed pass-through key of a projection identity, or undefined when
|
|
93
|
+
* the identity is not a fully-corresponding pass-through. Codegen-facing
|
|
94
|
+
* convenience over resolveIdentityPassthrough.
|
|
95
|
+
*/
|
|
96
|
+
export function computedIdentityFields(identity) {
|
|
97
|
+
const res = resolveIdentityPassthrough(identity);
|
|
98
|
+
if (res === undefined || res.missing.length > 0)
|
|
99
|
+
return undefined;
|
|
100
|
+
return res.computedFields;
|
|
101
|
+
}
|
|
102
|
+
function extendsChainReaches(node, target) {
|
|
103
|
+
let cur = node.superResolved;
|
|
104
|
+
while (cur !== undefined) {
|
|
105
|
+
if (cur === target)
|
|
106
|
+
return true;
|
|
107
|
+
cur = cur.superResolved;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
function arraysEqual(a, b) {
|
|
112
|
+
return a.length === b.length && a.every((v, i) => v === b[i]);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Walk every object.projection in the root and enforce the pass-through +
|
|
116
|
+
* key-correspondence rules. Returns errors; never mutates the tree.
|
|
117
|
+
*/
|
|
118
|
+
export function validateIdentityPassthrough(root) {
|
|
119
|
+
const errors = [];
|
|
120
|
+
for (const obj of root
|
|
121
|
+
.ownChildren()
|
|
122
|
+
.filter((c) => c.type === TYPE_OBJECT && c.subType === OBJECT_SUBTYPE_PROJECTION)) {
|
|
123
|
+
for (const identity of obj
|
|
124
|
+
.ownChildren()
|
|
125
|
+
.filter((c) => c.type === TYPE_IDENTITY)) {
|
|
126
|
+
if (identity.superRef === undefined) {
|
|
127
|
+
errors.push(new ParseError(`identity '${identity.name}' on projection '${obj.name}' must extend an entity identity ` +
|
|
128
|
+
`(e.g. extends: "Customer.id") — a projection identity is a pass-through (FR-024)`, {
|
|
129
|
+
code: "ERR_PROJECTION_IDENTITY_NOT_EXTENDED",
|
|
130
|
+
source: identity.source,
|
|
131
|
+
}));
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const res = resolveIdentityPassthrough(identity);
|
|
135
|
+
// Unresolved or non-identity target: ERR_UNRESOLVED_SUPER /
|
|
136
|
+
// ERR_EXTENDS_TARGET_MISMATCH already reported by the deferred-super pass.
|
|
137
|
+
if (res === undefined)
|
|
138
|
+
continue;
|
|
139
|
+
if (res.missing.length > 0) {
|
|
140
|
+
const missingRefs = res.missing
|
|
141
|
+
.map((f) => `'${res.entity.name}.${f}'`)
|
|
142
|
+
.join(", ");
|
|
143
|
+
errors.push(new ParseError(`identity '${identity.name}' on projection '${obj.name}' does not correspond to its ` +
|
|
144
|
+
`extended identity: no local field extends ${missingRefs} — every field of the ` +
|
|
145
|
+
`extended identity needs a pass-through field on the projection (FR-024)`, { code: "ERR_IDENTITY_KEY_MISMATCH", source: identity.source }));
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
const explicit = identityOwnFields(identity);
|
|
149
|
+
if (explicit !== undefined && !arraysEqual(explicit, res.computedFields)) {
|
|
150
|
+
errors.push(new ParseError(`identity '${identity.name}' on projection '${obj.name}' declares @fields ` +
|
|
151
|
+
`[${explicit.join(", ")}] but the computed pass-through key is ` +
|
|
152
|
+
`[${res.computedFields.join(", ")}] — omit @fields (it is derived) or make them agree (FR-024)`, { code: "ERR_IDENTITY_KEY_MISMATCH", source: identity.source }));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return errors;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=validate-identity-passthrough.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-identity-passthrough.js","sourceRoot":"","sources":["../../../src/core/identity/validate-identity-passthrough.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export declare const OBJECT_SUBTYPE_ENTITY = "entity";
|
|
2
2
|
export declare const OBJECT_SUBTYPE_VALUE = "value";
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const OBJECT_SUBTYPE_PROJECTION = "projection";
|
|
4
|
+
export declare const OBJECT_SUBTYPES: readonly ["base", "entity", "value", "projection"];
|
|
4
5
|
export type ObjectSubType = (typeof OBJECT_SUBTYPES)[number];
|
|
5
6
|
/** FR-014: names the field on this entity (resolvable via extends) that holds
|
|
6
7
|
* the subtype-discriminator value. Subtypes declare @discriminatorValue to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object-constants.d.ts","sourceRoot":"","sources":["../../../src/core/object/object-constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"object-constants.d.ts","sourceRoot":"","sources":["../../../src/core/object/object-constants.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAC9C,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAC5C,eAAO,MAAM,yBAAyB,eAAe,CAAC;AAEtD,eAAO,MAAM,eAAe,oDAKlB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAU7D;;gDAEgD;AAChD,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AAEzD;yEACyE;AACzE,eAAO,MAAM,+BAA+B,uBAAuB,CAAC"}
|
|
@@ -7,13 +7,16 @@ import { SUBTYPE_BASE } from "../../shared/base-types.js";
|
|
|
7
7
|
// - base : abstract template (no runtime semantics)
|
|
8
8
|
// - entity : persistent record (typically has @primary identity)
|
|
9
9
|
// - value : value-object (no identity; equality by content)
|
|
10
|
+
// - projection : derived read-only representation of entities (FR-024, ADR-0028)
|
|
10
11
|
//
|
|
11
12
|
export const OBJECT_SUBTYPE_ENTITY = "entity";
|
|
12
13
|
export const OBJECT_SUBTYPE_VALUE = "value";
|
|
14
|
+
export const OBJECT_SUBTYPE_PROJECTION = "projection";
|
|
13
15
|
export const OBJECT_SUBTYPES = [
|
|
14
16
|
SUBTYPE_BASE,
|
|
15
17
|
OBJECT_SUBTYPE_ENTITY,
|
|
16
18
|
OBJECT_SUBTYPE_VALUE,
|
|
19
|
+
OBJECT_SUBTYPE_PROJECTION,
|
|
17
20
|
];
|
|
18
21
|
// ---------------------------------------------------------------------------
|
|
19
22
|
// FR-014 — TPH discriminator (Table-per-Hierarchy single-table inheritance)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object-constants.js","sourceRoot":"","sources":["../../../src/core/object/object-constants.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAC9E,EAAE;AACF,wDAAwD;AACxD,mEAAmE;AACnE,+DAA+D;AAC/D,EAAE;AACF,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"object-constants.js","sourceRoot":"","sources":["../../../src/core/object/object-constants.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAC9E,EAAE;AACF,wDAAwD;AACxD,mEAAmE;AACnE,+DAA+D;AAC/D,mFAAmF;AACnF,EAAE;AACF,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAC5C,MAAM,CAAC,MAAM,yBAAyB,GAAG,YAAY,CAAC;AAEtD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY;IACZ,qBAAqB;IACrB,oBAAoB;IACpB,yBAAyB;CACjB,CAAC;AAGX,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,uEAAuE;AACvE,qEAAqE;AACrE,8EAA8E;AAC9E,mDAAmD;AAEnD;;gDAEgD;AAChD,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAC;AAEzD;yEACyE;AACzE,MAAM,CAAC,MAAM,+BAA+B,GAAG,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-definition.embedded.d.ts","sourceRoot":"","sources":["../../../src/core/object/object-definition.embedded.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,eAAO,MAAM,iBAAiB,EAAE,kBA4G/B,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
export const OBJECT_DEFINITION = {
|
|
2
|
+
"provider": "metaobjects-core-types",
|
|
3
|
+
"types": [
|
|
4
|
+
{
|
|
5
|
+
"type": "object",
|
|
6
|
+
"subType": "base",
|
|
7
|
+
"description": "Abstract object base — the shared root subtype that concrete object subtypes (entity/value/projection) specialize. Declares the structural children common to EVERY object subtype (the intersection: field/identity/validator/layout/source); subtype-specific children (relationship, template) and attrs (discriminator) ride their own subtypes. Has no runtime semantics of its own; not authored directly.",
|
|
8
|
+
"children": [
|
|
9
|
+
{
|
|
10
|
+
"type": "field",
|
|
11
|
+
"subType": "*",
|
|
12
|
+
"name": "*",
|
|
13
|
+
"min": 0,
|
|
14
|
+
"max": null
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"type": "identity",
|
|
18
|
+
"subType": "*",
|
|
19
|
+
"name": "*",
|
|
20
|
+
"min": 0,
|
|
21
|
+
"max": null
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"type": "validator",
|
|
25
|
+
"subType": "*",
|
|
26
|
+
"name": "*",
|
|
27
|
+
"min": 0,
|
|
28
|
+
"max": null
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"type": "layout",
|
|
32
|
+
"subType": "*",
|
|
33
|
+
"name": "*",
|
|
34
|
+
"min": 0,
|
|
35
|
+
"max": null
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"type": "source",
|
|
39
|
+
"subType": "*",
|
|
40
|
+
"name": "*",
|
|
41
|
+
"min": 0,
|
|
42
|
+
"max": null
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"type": "object",
|
|
48
|
+
"subType": "entity",
|
|
49
|
+
"extendsBase": true,
|
|
50
|
+
"description": "An object that owns its data: own identity, writable sources, and lifecycle. The default object subtype — a bare `object:` key resolves to entity. May co-locate templates (template.prompt and friends) with the owning entity.",
|
|
51
|
+
"rules": "object.entity owns data — it declares its own identity, its primary source must be a writable @kind (read-only kinds may appear only in a read role), and it carries lifecycle. A field carrying origin.* is derived ⇒ read-only wherever it lives, including on an entity. Templates (template.*) may be nested so a prompt can be co-located with its owning entity. See ADR-0028 (object taxonomy).",
|
|
52
|
+
"children": [
|
|
53
|
+
{
|
|
54
|
+
"type": "relationship",
|
|
55
|
+
"subType": "*",
|
|
56
|
+
"name": "*",
|
|
57
|
+
"min": 0,
|
|
58
|
+
"max": null
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"type": "template",
|
|
62
|
+
"subType": "*",
|
|
63
|
+
"name": "*",
|
|
64
|
+
"min": 0,
|
|
65
|
+
"max": null
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"type": "attr",
|
|
69
|
+
"subType": "string",
|
|
70
|
+
"name": "discriminator",
|
|
71
|
+
"min": 0,
|
|
72
|
+
"max": 1,
|
|
73
|
+
"description": "FR-014: names the field on this entity (resolvable via extends:) that holds the subtype-discriminator value. Subtypes of this entity declare @discriminatorValue to bind their rows to a discriminator value. The discriminator field itself is an ordinary field declaration (typically field.enum or field.int / field.string)."
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"type": "attr",
|
|
77
|
+
"subType": "string",
|
|
78
|
+
"name": "discriminatorValue",
|
|
79
|
+
"min": 0,
|
|
80
|
+
"max": 1,
|
|
81
|
+
"description": "FR-014: on a subtype of an entity with @discriminator — the value that identifies rows of this subtype in the shared discriminator field. Wire form is always a string; the underlying field's subtype (enum / int / string) controls codegen + storage coercion. Required on every concrete subtype of a discriminated entity."
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"type": "object",
|
|
87
|
+
"subType": "value",
|
|
88
|
+
"extendsBase": true,
|
|
89
|
+
"description": "A value object — pure shape with NO identity and NO source, ever. Constructed (by caller / assembly / embedding), never populated from a store. May `extends` an entity's fields to reuse shape. Equality is by content.",
|
|
90
|
+
"rules": "object.value is pure shape: it NEVER declares an identity and NEVER declares a source, in any role. It is constructed — by a caller, by assembly, or by embedding — and is never populated from a backing store. It may `extends` an entity's fields to reuse their shape. @normalize is the object-level default ASCII normalization mode applied to this value's enum fields' tolerant extract (each field may still override per-field). See ADR-0028 (object taxonomy, value purity).",
|
|
91
|
+
"children": [
|
|
92
|
+
{
|
|
93
|
+
"type": "relationship",
|
|
94
|
+
"subType": "*",
|
|
95
|
+
"name": "*",
|
|
96
|
+
"min": 0,
|
|
97
|
+
"max": null
|
|
98
|
+
}
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"type": "object",
|
|
103
|
+
"subType": "projection",
|
|
104
|
+
"extendsBase": true,
|
|
105
|
+
"description": "A derived read-only representation of entities. Its fields are extends-bound / origin-derived / self-declared-under-external-assembly, all read-only at the subtype level. Identity is optional and MUST extend an entity identity; sources are restricted to read-only @kinds. The declared field set IS the exposure (inclusive, fail-closed).",
|
|
106
|
+
"rules": "object.projection is a derived read-only representation: every field is extends-bound, origin-derived, or self-declared-under-external-assembly, and all are read-only at the subtype level. Identity is optional and, when present, MUST extend an entity identity. Sources are restricted to read-only @kinds. The declared field set IS the exposure — an inclusive list, fail-closed. A projection NEVER declares relationships (derivation is expressed via @via, not a relationship child) and NEVER co-locates templates — hence its child set omits both relationship and template. See ADR-0028 (object taxonomy, projection)."
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=object-definition.embedded.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-definition.embedded.js","sourceRoot":"","sources":["../../../src/core/object/object-definition.embedded.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,iBAAiB,GAAuB;IACnD,UAAU,EAAE,wBAAwB;IACpC,OAAO,EAAE;QACP;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,kZAAkZ;YACja,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,OAAO;oBACf,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,UAAU;oBAClB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,WAAW;oBACnB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;aACF;SACF;QACD;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,QAAQ;YACnB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,kOAAkO;YACjP,OAAO,EAAE,wYAAwY;YACjZ,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,cAAc;oBACtB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,UAAU;oBAClB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,eAAe;oBACvB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,mUAAmU;iBACnV;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,oBAAoB;oBAC5B,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,iUAAiU;iBACjV;aACF;SACF;QACD;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,OAAO;YAClB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,0NAA0N;YACzO,OAAO,EAAE,2dAA2d;YACpe,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,cAAc;oBACtB,SAAS,EAAE,GAAG;oBACd,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,IAAI;iBACZ;aACF;SACF;QACD;YACE,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,YAAY;YACvB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,kVAAkV;YACjW,OAAO,EAAE,ymBAAymB;SACnnB;KACF;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-discriminator.d.ts","sourceRoot":"","sources":["../../../src/core/object/validate-discriminator.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"validate-discriminator.d.ts","sourceRoot":"","sources":["../../../src/core/object/validate-discriminator.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAoB7C,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,EAAE,CAsHlE"}
|
|
@@ -18,12 +18,10 @@
|
|
|
18
18
|
import { ParseError } from "../../errors.js";
|
|
19
19
|
import { TYPE_OBJECT, TYPE_FIELD } from "../../shared/base-types.js";
|
|
20
20
|
import { OBJECT_ATTR_DISCRIMINATOR, OBJECT_ATTR_DISCRIMINATOR_VALUE, OBJECT_SUBTYPE_ENTITY, } from "./object-constants.js";
|
|
21
|
-
import { FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG,
|
|
21
|
+
import { FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_STRING, FIELD_ATTR_VALUES, } from "../field/field-constants.js";
|
|
22
22
|
const NUMERIC_DISCRIMINATOR_SUBTYPES = new Set([
|
|
23
23
|
FIELD_SUBTYPE_INT,
|
|
24
24
|
FIELD_SUBTYPE_LONG,
|
|
25
|
-
FIELD_SUBTYPE_SHORT,
|
|
26
|
-
FIELD_SUBTYPE_BYTE,
|
|
27
25
|
]);
|
|
28
26
|
export function validateDiscriminator(root) {
|
|
29
27
|
const errors = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-discriminator.js","sourceRoot":"","sources":["../../../src/core/object/validate-discriminator.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,sBAAsB;AACtB,+EAA+E;AAC/E,+EAA+E;AAC/E,oEAAoE;AACpE,sEAAsE;AACtE,+EAA+E;AAC/E,2EAA2E;AAC3E,8EAA8E;AAC9E,gFAAgF;AAChF,kFAAkF;AAClF,kEAAkE;AAClE,2EAA2E;AAC3E,kFAAkF;AAClF,4EAA4E;AAC5E,mFAAmF;AAGnF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"validate-discriminator.js","sourceRoot":"","sources":["../../../src/core/object/validate-discriminator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-constants.d.ts","sourceRoot":"","sources":["../../../src/core/query/query-constants.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,YAAY,OAAY,CAAC;AACtC,eAAO,MAAM,YAAY,OAAY,CAAC;AACtC,eAAO,MAAM,YAAY,OAAY,CAAC;AACtC,eAAO,MAAM,aAAa,QAAY,CAAC;AACvC,eAAO,MAAM,YAAY,OAAY,CAAC;AACtC,eAAO,MAAM,aAAa,QAAY,CAAC;AACvC,eAAO,MAAM,YAAY,OAAY,CAAC;AACtC,eAAO,MAAM,cAAc,SAAY,CAAC;AACxC,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAG1C,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAExC,eAAO,MAAM,UAAU,yEAGb,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"query-constants.d.ts","sourceRoot":"","sources":["../../../src/core/query/query-constants.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,YAAY,OAAY,CAAC;AACtC,eAAO,MAAM,YAAY,OAAY,CAAC;AACtC,eAAO,MAAM,YAAY,OAAY,CAAC;AACtC,eAAO,MAAM,aAAa,QAAY,CAAC;AACvC,eAAO,MAAM,YAAY,OAAY,CAAC;AACtC,eAAO,MAAM,aAAa,QAAY,CAAC;AACvC,eAAO,MAAM,YAAY,OAAY,CAAC;AACtC,eAAO,MAAM,cAAc,SAAY,CAAC;AACxC,eAAO,MAAM,iBAAiB,WAAW,CAAC;AAG1C,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAExC,eAAO,MAAM,UAAU,yEAGb,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC,CAkB/D,CAAC;AAEX,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,QAAQ,EAAE,CAElE;AAOD,eAAO,MAAM,cAAc,QAAS,CAAC;AACrC,eAAO,MAAM,eAAe,SAAS,CAAC;AAEtC,eAAO,MAAM,iBAAiB,0BAA6C,CAAC;AAC5E,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FIELD_SUBTYPE_UUID } from "../field/field-constants.js";
|
|
1
|
+
import { FIELD_SUBTYPE_UUID, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_ENUM } from "../field/field-constants.js";
|
|
2
2
|
// Query concern constants — filter operators, sort order values.
|
|
3
3
|
//
|
|
4
4
|
// NOTE: `query` is NOT a metamodel node type — it has no subtype, schema, or
|
|
@@ -32,13 +32,15 @@ export const FILTER_OPS = [
|
|
|
32
32
|
];
|
|
33
33
|
export const OPS_BY_SUBTYPE = {
|
|
34
34
|
string: [FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_IN, FILTER_OP_LIKE, FILTER_OP_IS_NULL],
|
|
35
|
+
// enum: string-backed — same op band as string.
|
|
36
|
+
[FIELD_SUBTYPE_ENUM]: [FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_IN, FILTER_OP_LIKE, FILTER_OP_IS_NULL],
|
|
35
37
|
int: [FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, FILTER_OP_GTE, FILTER_OP_LT, FILTER_OP_LTE, FILTER_OP_IN, FILTER_OP_IS_NULL],
|
|
36
|
-
short: [FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, FILTER_OP_GTE, FILTER_OP_LT, FILTER_OP_LTE, FILTER_OP_IN, FILTER_OP_IS_NULL],
|
|
37
|
-
byte: [FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, FILTER_OP_GTE, FILTER_OP_LT, FILTER_OP_LTE, FILTER_OP_IN, FILTER_OP_IS_NULL],
|
|
38
38
|
long: [FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, FILTER_OP_GTE, FILTER_OP_LT, FILTER_OP_LTE, FILTER_OP_IN, FILTER_OP_IS_NULL],
|
|
39
39
|
double: [FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, FILTER_OP_GTE, FILTER_OP_LT, FILTER_OP_LTE, FILTER_OP_IN, FILTER_OP_IS_NULL],
|
|
40
40
|
float: [FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, FILTER_OP_GTE, FILTER_OP_LT, FILTER_OP_LTE, FILTER_OP_IN, FILTER_OP_IS_NULL],
|
|
41
41
|
decimal: [FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, FILTER_OP_GTE, FILTER_OP_LT, FILTER_OP_LTE, FILTER_OP_IN, FILTER_OP_IS_NULL],
|
|
42
|
+
// currency: integer minor units — an orderable number. Numeric ops, no `like`.
|
|
43
|
+
[FIELD_SUBTYPE_CURRENCY]: [FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, FILTER_OP_GTE, FILTER_OP_LT, FILTER_OP_LTE, FILTER_OP_IN, FILTER_OP_IS_NULL],
|
|
42
44
|
boolean: [FILTER_OP_EQ, FILTER_OP_IS_NULL],
|
|
43
45
|
date: [FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, FILTER_OP_GTE, FILTER_OP_LT, FILTER_OP_LTE, FILTER_OP_IN, FILTER_OP_IS_NULL],
|
|
44
46
|
time: [FILTER_OP_EQ, FILTER_OP_NE, FILTER_OP_GT, FILTER_OP_GTE, FILTER_OP_LT, FILTER_OP_LTE, FILTER_OP_IN, FILTER_OP_IS_NULL],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-constants.js","sourceRoot":"","sources":["../../../src/core/query/query-constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"query-constants.js","sourceRoot":"","sources":["../../../src/core/query/query-constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { MetaObject } from "../object/meta-object.js";
|
|
2
|
+
import type { MetaRoot } from "../../shared/meta-root.js";
|
|
3
|
+
import type { MetaRelationship } from "./meta-relationship.js";
|
|
4
|
+
/** Thrown when a M:N relationship's junction FK fields cannot be derived. */
|
|
5
|
+
export declare class M2MDerivationError extends Error {
|
|
6
|
+
readonly code = "ERR_INVALID_RELATIONSHIP";
|
|
7
|
+
constructor(message: string);
|
|
8
|
+
}
|
|
9
|
+
export interface M2MFields {
|
|
10
|
+
/** The junction FK field holding the source-entity key. */
|
|
11
|
+
readonly sourceField: string;
|
|
12
|
+
/** The junction FK field holding the target-entity key. */
|
|
13
|
+
readonly targetField: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Derive the source/target junction FK fields for a M:N relationship.
|
|
17
|
+
*
|
|
18
|
+
* @param rel the M:N relationship (carries @objectRef + @through + optional
|
|
19
|
+
* @sourceRefField / @symmetric)
|
|
20
|
+
* @param source the entity declaring `rel`
|
|
21
|
+
* @param root the loaded model root (to find the junction entity)
|
|
22
|
+
* @throws M2MDerivationError when the junction is missing/malformed or the
|
|
23
|
+
* self-join is ambiguous.
|
|
24
|
+
*/
|
|
25
|
+
export declare function deriveM2MFields(rel: MetaRelationship, source: MetaObject, root: MetaRoot): M2MFields;
|
|
26
|
+
//# sourceMappingURL=derive-m2m-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive-m2m-fields.d.ts","sourceRoot":"","sources":["../../../src/core/relationship/derive-m2m-fields.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,6EAA6E;AAC7E,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,8BAA8B;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,SAAS;IACxB,2DAA2D;IAC3D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAOD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,QAAQ,GACb,SAAS,CAmFX"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// M:N junction FK derivation — the single source of truth for which junction
|
|
2
|
+
// columns are the SOURCE side and the TARGET side of a many-to-many relationship.
|
|
3
|
+
//
|
|
4
|
+
// A M:N relationship (`@cardinality: "many"`, `@objectRef: <target>`,
|
|
5
|
+
// `@through: <junction>`) does NOT restate its FK columns. They are derived from
|
|
6
|
+
// the junction entity's two `identity.reference` children — one resolving to the
|
|
7
|
+
// source entity, one to the target — exactly as 1:N FK direction is declared
|
|
8
|
+
// (`find-reference.ts` is the analogous SSOT).
|
|
9
|
+
//
|
|
10
|
+
// Three modes (see the FR-018 design):
|
|
11
|
+
// 1. Hetero (source != target): the reference resolving to the source entity
|
|
12
|
+
// gives sourceField; the one resolving to the target gives targetField.
|
|
13
|
+
// 2. Directed self-join (source == target, @sourceRefField set): both
|
|
14
|
+
// references resolve to the same entity, so @sourceRefField names the
|
|
15
|
+
// source-side FK field; the OTHER reference is the target side.
|
|
16
|
+
// 3. Symmetric self-join (source == target, @symmetric: true): undirected; the
|
|
17
|
+
// two references are taken in declaration order (sourceField = first,
|
|
18
|
+
// targetField = second). Resolution unions both at read time.
|
|
19
|
+
// Ambiguous (source == target, neither @sourceRefField nor @symmetric) → throw.
|
|
20
|
+
import { stripPackage } from "../../naming.js";
|
|
21
|
+
/** Thrown when a M:N relationship's junction FK fields cannot be derived. */
|
|
22
|
+
export class M2MDerivationError extends Error {
|
|
23
|
+
code = "ERR_INVALID_RELATIONSHIP";
|
|
24
|
+
constructor(message) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.name = "M2MDerivationError";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** First @fields entry of a reference (the physical FK column on the junction). */
|
|
30
|
+
function refFkField(ref) {
|
|
31
|
+
return ref.fields[0];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Derive the source/target junction FK fields for a M:N relationship.
|
|
35
|
+
*
|
|
36
|
+
* @param rel the M:N relationship (carries @objectRef + @through + optional
|
|
37
|
+
* @sourceRefField / @symmetric)
|
|
38
|
+
* @param source the entity declaring `rel`
|
|
39
|
+
* @param root the loaded model root (to find the junction entity)
|
|
40
|
+
* @throws M2MDerivationError when the junction is missing/malformed or the
|
|
41
|
+
* self-join is ambiguous.
|
|
42
|
+
*/
|
|
43
|
+
export function deriveM2MFields(rel, source, root) {
|
|
44
|
+
const throughName = rel.through;
|
|
45
|
+
if (throughName === undefined) {
|
|
46
|
+
throw new M2MDerivationError(`relationship "${source.name}.${rel.name}" is missing @through (required for M:N derivation)`);
|
|
47
|
+
}
|
|
48
|
+
const junction = root.findObject(throughName);
|
|
49
|
+
if (junction === undefined) {
|
|
50
|
+
throw new M2MDerivationError(`relationship "${source.name}.${rel.name}" @through "${throughName}" does not resolve to an entity`);
|
|
51
|
+
}
|
|
52
|
+
const targetName = rel.objectRef;
|
|
53
|
+
if (targetName === undefined) {
|
|
54
|
+
throw new M2MDerivationError(`relationship "${source.name}.${rel.name}" is missing @objectRef (the M:N target)`);
|
|
55
|
+
}
|
|
56
|
+
const refs = junction.referenceIdentities();
|
|
57
|
+
if (refs.length !== 2) {
|
|
58
|
+
throw new M2MDerivationError(`junction "${throughName}" for relationship "${source.name}.${rel.name}" must declare exactly two ` +
|
|
59
|
+
`identity.reference children (found ${refs.length})`);
|
|
60
|
+
}
|
|
61
|
+
const isSelfJoin = stripPackage(targetName) === source.name;
|
|
62
|
+
if (!isSelfJoin) {
|
|
63
|
+
// Hetero: match each reference by the entity it resolves to.
|
|
64
|
+
const sourceRef = refs.find((r) => r.targetEntity !== undefined && stripPackage(r.targetEntity) === source.name);
|
|
65
|
+
const targetRef = refs.find((r) => r.targetEntity !== undefined && stripPackage(r.targetEntity) === stripPackage(targetName));
|
|
66
|
+
const sourceField = sourceRef ? refFkField(sourceRef) : undefined;
|
|
67
|
+
const targetField = targetRef ? refFkField(targetRef) : undefined;
|
|
68
|
+
if (sourceField === undefined || targetField === undefined) {
|
|
69
|
+
throw new M2MDerivationError(`junction "${throughName}" for relationship "${source.name}.${rel.name}" must declare one ` +
|
|
70
|
+
`identity.reference to "${source.name}" and one to "${stripPackage(targetName)}"`);
|
|
71
|
+
}
|
|
72
|
+
return { sourceField, targetField };
|
|
73
|
+
}
|
|
74
|
+
// Self-join: both references resolve to the same entity.
|
|
75
|
+
if (rel.symmetric) {
|
|
76
|
+
// Undirected: take references in declaration order; union happens at read time.
|
|
77
|
+
const a = refFkField(refs[0]);
|
|
78
|
+
const b = refFkField(refs[1]);
|
|
79
|
+
if (a === undefined || b === undefined) {
|
|
80
|
+
throw new M2MDerivationError(`symmetric junction "${throughName}" for "${source.name}.${rel.name}" has a reference with no @fields`);
|
|
81
|
+
}
|
|
82
|
+
return { sourceField: a, targetField: b };
|
|
83
|
+
}
|
|
84
|
+
const sourceRefField = rel.sourceRefField;
|
|
85
|
+
if (sourceRefField === undefined) {
|
|
86
|
+
throw new M2MDerivationError(`self-join relationship "${source.name}.${rel.name}" through "${throughName}" is ambiguous: ` +
|
|
87
|
+
`set @sourceRefField (directed) or @symmetric (undirected)`);
|
|
88
|
+
}
|
|
89
|
+
// Directed self-join: @sourceRefField names the source-side FK; the other ref is the target.
|
|
90
|
+
const sourceRef = refs.find((r) => refFkField(r) === sourceRefField);
|
|
91
|
+
if (sourceRef === undefined) {
|
|
92
|
+
throw new M2MDerivationError(`@sourceRefField "${sourceRefField}" on "${source.name}.${rel.name}" does not match any ` +
|
|
93
|
+
`identity.reference FK field on junction "${throughName}"`);
|
|
94
|
+
}
|
|
95
|
+
const targetRef = refs.find((r) => r !== sourceRef);
|
|
96
|
+
const targetField = targetRef ? refFkField(targetRef) : undefined;
|
|
97
|
+
if (targetField === undefined) {
|
|
98
|
+
throw new M2MDerivationError(`junction "${throughName}" for "${source.name}.${rel.name}" has no distinct target-side reference`);
|
|
99
|
+
}
|
|
100
|
+
return { sourceField: sourceRefField, targetField };
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=derive-m2m-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive-m2m-fields.js","sourceRoot":"","sources":["../../../src/core/relationship/derive-m2m-fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,12 @@ export declare class MetaRelationship extends MetaData {
|
|
|
3
3
|
get cardinality(): string | undefined;
|
|
4
4
|
/** FQN of the target object (e.g., "acme::vehicle::Car"). */
|
|
5
5
|
get objectRef(): string | undefined;
|
|
6
|
-
/**
|
|
7
|
-
get
|
|
8
|
-
/**
|
|
9
|
-
get
|
|
6
|
+
/** Junction (through) entity name for M:N relationships. */
|
|
7
|
+
get through(): string | undefined;
|
|
8
|
+
/** Source-side FK field on the junction (directed self-join disambiguator). */
|
|
9
|
+
get sourceRefField(): string | undefined;
|
|
10
|
+
/** Whether this M:N relationship is an undirected (symmetric) self-join. */
|
|
11
|
+
get symmetric(): boolean;
|
|
10
12
|
/** Referential action on parent delete. Undefined when not explicitly set (default derives from subtype). */
|
|
11
13
|
get onDelete(): string | undefined;
|
|
12
14
|
/** Referential action on key update. Undefined when not explicitly set (default: cascade). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-relationship.d.ts","sourceRoot":"","sources":["../../../src/core/relationship/meta-relationship.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"meta-relationship.d.ts","sourceRoot":"","sources":["../../../src/core/relationship/meta-relationship.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAWrD,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAGpC;IAED,6DAA6D;IAC7D,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAGlC;IAED,4DAA4D;IAC5D,IAAI,OAAO,IAAI,MAAM,GAAG,SAAS,CAGhC;IAED,+EAA+E;IAC/E,IAAI,cAAc,IAAI,MAAM,GAAG,SAAS,CAGvC;IAED,4EAA4E;IAC5E,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,6GAA6G;IAC7G,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAGjC;IAED,8FAA8F;IAC9F,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAGjC;CACF"}
|