@metaobjectsdev/metadata 0.9.0 → 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
|
@@ -1,161 +1,13 @@
|
|
|
1
|
-
// Field attribute
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
required: false,
|
|
12
|
-
description: "Name (or FQN) of the target object an object-typed field nests — drives nested-object (de)serialization.",
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
name: FIELD_ATTR_STORAGE,
|
|
16
|
-
valueType: ATTR_SUBTYPE_STRING,
|
|
17
|
-
required: false,
|
|
18
|
-
allowedValues: [...STORAGE_VALUES],
|
|
19
|
-
description: "Storage strategy for an object-typed field (set with @objectRef). " +
|
|
20
|
-
"\"flattened\" expands the nested value into prefixed columns on the parent " +
|
|
21
|
-
"table. \"jsonb\" stores the structured value in a single jsonb column " +
|
|
22
|
-
"(supports isArray=true for arrays of values). \"subdocument\" is a hint for " +
|
|
23
|
-
"document-store codegen targets and emits no Postgres column.",
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
name: FIELD_ATTR_REQUIRED,
|
|
27
|
-
valueType: ATTR_SUBTYPE_BOOLEAN,
|
|
28
|
-
required: false,
|
|
29
|
-
description: "When true, the field is NOT NULL. Equivalent to attaching a validator.required child.",
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
name: FIELD_ATTR_READ_ONLY,
|
|
33
|
-
valueType: ATTR_SUBTYPE_BOOLEAN,
|
|
34
|
-
required: false,
|
|
35
|
-
description: "FR-013: when true, the field is read-only — codegen emits no setter / " +
|
|
36
|
-
"writable property, the persistence layer skips the column on INSERT/UPDATE, " +
|
|
37
|
-
"and Zod/Pydantic/class-validator schemas mark it read-only on input variants. " +
|
|
38
|
-
"The value is populated by the database (computed column, default expression, " +
|
|
39
|
-
"trigger), by replication, or by another external owner.",
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
name: FIELD_ATTR_UNIQUE,
|
|
43
|
-
valueType: ATTR_SUBTYPE_BOOLEAN,
|
|
44
|
-
required: false,
|
|
45
|
-
description: "When true, the field gets a column-level UNIQUE constraint.",
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
name: FIELD_ATTR_DEFAULT,
|
|
49
|
-
// @default is polymorphic: its value type follows the OWNING field's
|
|
50
|
-
// subtype — a boolean field defaults to a boolean, an int field to a
|
|
51
|
-
// number, a string field to a string. No single fixed valueType can
|
|
52
|
-
// capture that, so valueType is intentionally omitted (declared-but-untyped).
|
|
53
|
-
// The parser stores the raw JSON value type-preserved (no coercion).
|
|
54
|
-
// Typed conversion happens at consumption time via MetaField.defaultValue(),
|
|
55
|
-
// which applies the field's own DataType — Java parity with
|
|
56
|
-
// MetaField.getDefaultValue() / DataConverter.toTypeSafe(getDataType(), o).
|
|
57
|
-
required: false,
|
|
58
|
-
description: "Default value applied to the column when no value is supplied. Its type follows the field's own subtype (string / boolean / number / ...). Converted at consumption time via MetaField.defaultValue().",
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
name: FIELD_ATTR_MAX_LENGTH,
|
|
62
|
-
valueType: ATTR_SUBTYPE_INT,
|
|
63
|
-
required: false,
|
|
64
|
-
description: "Maximum character length for string-typed fields (drives VARCHAR(n)).",
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
name: FIELD_ATTR_PRECISION,
|
|
68
|
-
valueType: ATTR_SUBTYPE_INT,
|
|
69
|
-
required: false,
|
|
70
|
-
description: "Total number of significant digits for decimal-typed fields.",
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
name: FIELD_ATTR_SCALE,
|
|
74
|
-
valueType: ATTR_SUBTYPE_INT,
|
|
75
|
-
required: false,
|
|
76
|
-
description: "Number of digits to the right of the decimal point for decimal-typed fields.",
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
name: FIELD_ATTR_FILTERABLE,
|
|
80
|
-
valueType: ATTR_SUBTYPE_BOOLEAN,
|
|
81
|
-
required: false,
|
|
82
|
-
description: "When true, the field is exposed in generated CRUD filter allowlists (Project D filter layer).",
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
name: FIELD_ATTR_SORTABLE,
|
|
86
|
-
valueType: ATTR_SUBTYPE_BOOLEAN,
|
|
87
|
-
required: false,
|
|
88
|
-
description: "When true, the field is exposed in generated CRUD sort allowlists. Inherits from @filterable by default; set false to opt out.",
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
name: FIELD_ATTR_SORTABLE_DEFAULT_ORDER,
|
|
92
|
-
valueType: ATTR_SUBTYPE_STRING,
|
|
93
|
-
required: false,
|
|
94
|
-
allowedValues: [...SORT_ORDER_VALUES],
|
|
95
|
-
description: "Default sort direction applied when this field is the default sort field.",
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
name: FIELD_ATTR_AUTO_SET,
|
|
99
|
-
valueType: ATTR_SUBTYPE_STRING,
|
|
100
|
-
required: false,
|
|
101
|
-
allowedValues: [...AUTO_SET_VALUES],
|
|
102
|
-
description: "Auto-set semantics for timestamp-like fields: 'onCreate' stamps on insert, 'onUpdate' stamps on every write.",
|
|
103
|
-
},
|
|
104
|
-
// FR-010 field-teaching attrs (any field): free-text shown in the generated
|
|
105
|
-
// output-format prompt fragment. Never carried in comments.
|
|
106
|
-
{
|
|
107
|
-
name: FIELD_ATTR_EXAMPLE,
|
|
108
|
-
valueType: ATTR_SUBTYPE_STRING,
|
|
109
|
-
required: false,
|
|
110
|
-
description: "FR-010: an example value for this field, shown in the generated output-format prompt fragment.",
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
name: FIELD_ATTR_INSTRUCTION,
|
|
114
|
-
valueType: ATTR_SUBTYPE_STRING,
|
|
115
|
-
required: false,
|
|
116
|
-
description: "FR-010: a short instruction for this field, shown in the generated output-format prompt fragment.",
|
|
117
|
-
},
|
|
118
|
-
];
|
|
119
|
-
/** The @currency attr — only on field.currency. */
|
|
120
|
-
export const currencyFieldAttr = {
|
|
121
|
-
name: FIELD_ATTR_CURRENCY,
|
|
122
|
-
valueType: ATTR_SUBTYPE_STRING,
|
|
123
|
-
required: false,
|
|
124
|
-
default: FIELD_ATTR_CURRENCY_DEFAULT,
|
|
125
|
-
description: "ISO 4217 currency code for a currency-subtype field. Storage is integer minor units; defaults to 'USD' when omitted.",
|
|
126
|
-
};
|
|
127
|
-
/** The @values attr — only on field.enum. Required string array. */
|
|
128
|
-
export const enumFieldAttr = {
|
|
129
|
-
name: FIELD_ATTR_VALUES,
|
|
130
|
-
valueType: ATTR_SUBTYPE_STRINGARRAY,
|
|
131
|
-
required: true,
|
|
132
|
-
description: "Member symbols of an enum-subtype field. Declaration order is significant; each is a legal identifier and its own stored string.",
|
|
133
|
-
};
|
|
134
|
-
/** The @enumAlias attr — only on field.enum. Map of off-vocabulary token → canonical
|
|
135
|
-
* member, feeding the FR-010 tolerant extract alias-fold (runtime aliases win on conflict). */
|
|
136
|
-
export const enumAliasAttr = {
|
|
137
|
-
name: FIELD_ATTR_ENUM_ALIAS,
|
|
138
|
-
valueType: ATTR_SUBTYPE_PROPERTIES,
|
|
139
|
-
required: false,
|
|
140
|
-
description: "Map of alternate/off-vocabulary tokens to canonical enum members; feeds the FR-010 tolerant extract alias-fold.",
|
|
141
|
-
};
|
|
142
|
-
/** The @enumDoc attr — only on field.enum. Map of member → human-readable description,
|
|
143
|
-
* shown per-member in the FR-010 'guide'-style output-format prompt fragment. */
|
|
144
|
-
export const enumDocAttr = {
|
|
145
|
-
name: FIELD_ATTR_ENUM_DOC,
|
|
146
|
-
valueType: ATTR_SUBTYPE_PROPERTIES,
|
|
147
|
-
required: false,
|
|
148
|
-
description: "Map of enum member to a human-readable description; shown per-member in the FR-010 'guide'-style prompt fragment.",
|
|
149
|
-
};
|
|
150
|
-
/** FR-011: the @coerceDefault attr — only on field.enum. String member symbol used as
|
|
151
|
-
* the extract fallback when an LLM sends a present-but-uncoercible value. Loader-validated
|
|
152
|
-
* to be one of the field's @values (ERR_BAD_ATTR_VALUE otherwise). */
|
|
153
|
-
export const coerceDefaultAttr = {
|
|
154
|
-
name: FIELD_ATTR_COERCE_DEFAULT,
|
|
155
|
-
valueType: ATTR_SUBTYPE_STRING,
|
|
156
|
-
required: false,
|
|
157
|
-
description: "Fallback enum member used by tolerant extract when a present value cannot be coerced; must be one of the field's @values.",
|
|
158
|
-
};
|
|
1
|
+
// Field attribute schema(s) still authored as code.
|
|
2
|
+
//
|
|
3
|
+
// FR-033: the FIELD provider's per-subtype attr constraints + descriptions are
|
|
4
|
+
// externalized to spec/metamodel/field.json (embedded as FIELD_DEFINITION) and
|
|
5
|
+
// lowered via defineProviderFromData. What remains here is `normalizeAttr` —
|
|
6
|
+
// shared between field.enum AND object.value (the object-level default
|
|
7
|
+
// normalization mode for its enum fields), so it stays a code-shared AttrSchema
|
|
8
|
+
// consumed by core-types.ts when registering object.value.
|
|
9
|
+
import { ATTR_SUBTYPE_STRING } from "../attr/attr-constants.js";
|
|
10
|
+
import { FIELD_ATTR_NORMALIZE, NORMALIZE_MODES, NORMALIZE_DEFAULT, } from "./field-constants.js";
|
|
159
11
|
/** FR-011: the @normalize attr — on field.enum (per-field) and object.value (object default).
|
|
160
12
|
* Closed enum (none|collapse|strip); controls the ASCII normalization applied during tolerant
|
|
161
13
|
* enum extract. Resolved field → owning object.value → global default (strip). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-schema.js","sourceRoot":"","sources":["../../../src/core/field/field-schema.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"field-schema.js","sourceRoot":"","sources":["../../../src/core/field/field-schema.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,uEAAuE;AACvE,gFAAgF;AAChF,2DAA2D;AAG3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B;;mFAEmF;AACnF,MAAM,CAAC,MAAM,aAAa,GAAe;IACvC,IAAI,EAAE,oBAAoB;IAC1B,SAAS,EAAE,mBAAmB;IAC9B,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,iBAAiB;IAC1B,aAAa,EAAE,CAAC,GAAG,eAAe,CAAC;IACnC,WAAW,EACT,2FAA2F;QAC3F,gGAAgG;CACnG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-field.d.ts","sourceRoot":"","sources":["../../../src/core/field/meta-field.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,aAAa,EAQnB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"meta-field.d.ts","sourceRoot":"","sources":["../../../src/core/field/meta-field.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,aAAa,EAQnB,MAAM,oBAAoB,CAAC;AA4B5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AA6BrE,qBAAa,SAAU,SAAQ,QAAS,YAAW,aAAa;IAC9D,qEAAqE;IACrE,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,mFAAmF;IACnF,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS;IAI/B,gFAAgF;IAChF,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAGlC;IAED,sDAAsD;IACtD,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAG/B;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;;;;;;OAWG;IACH,YAAY,IAAI,SAAS,GAAG,SAAS;IAQrC,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAGlC;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAGlC;IAED,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAG9B;IAED,gFAAgF;IAChF,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;;;OAKG;IACH,IAAI,UAAU,IAAI,OAAO,CAGxB;IAED,+IAA+I;IAC/I,UAAU,IAAI,aAAa,EAAE;IAM7B,+GAA+G;IAC/G,aAAa,IAAI,aAAa,EAAE;IAMhC,gIAAgI;IAChI,KAAK,IAAI,QAAQ,EAAE;IAMnB,6DAA6D;IAC7D,QAAQ,IAAI,QAAQ,EAAE;IAMtB,wEAAwE;IACxE,YAAY,IAAI,SAAS,GAAG,SAAS;IAerC;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkB,GAAG,OAAO;IAQxD;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,GAAE,MAAkB,GAAG,IAAI;CAOtE"}
|
|
@@ -6,7 +6,7 @@ import { MetaData } from "../../shared/meta-data.js";
|
|
|
6
6
|
import { DATA_TYPE_STRING, DATA_TYPE_INT, DATA_TYPE_LONG, DATA_TYPE_DOUBLE, DATA_TYPE_BOOLEAN, DATA_TYPE_DATE, DATA_TYPE_OBJECT, } from "../../data-type.js";
|
|
7
7
|
import { convertToDataType } from "../../data-converter.js";
|
|
8
8
|
import { TYPE_VALIDATOR, TYPE_VIEW, SUBTYPE_BASE } from "../../shared/base-types.js";
|
|
9
|
-
import { FIELD_SUBTYPE_STRING,
|
|
9
|
+
import { FIELD_SUBTYPE_STRING, FIELD_SUBTYPE_INT, FIELD_SUBTYPE_LONG, FIELD_SUBTYPE_CURRENCY, FIELD_SUBTYPE_DOUBLE, FIELD_SUBTYPE_FLOAT, FIELD_SUBTYPE_DECIMAL, FIELD_SUBTYPE_BOOLEAN, FIELD_SUBTYPE_DATE, FIELD_SUBTYPE_TIME, FIELD_SUBTYPE_TIMESTAMP, FIELD_SUBTYPE_OBJECT, FIELD_SUBTYPE_ENUM, FIELD_SUBTYPE_UUID, FIELD_ATTR_REQUIRED, FIELD_ATTR_UNIQUE, FIELD_ATTR_DEFAULT, FIELD_ATTR_MAX_LENGTH, FIELD_ATTR_PRECISION, FIELD_ATTR_SCALE, FIELD_ATTR_OBJECT_REF, } from "./field-constants.js";
|
|
10
10
|
import { FIELD_ATTR_COLUMN } from "../../persistence/db/db-constants.js";
|
|
11
11
|
import { VALIDATOR_SUBTYPE_REQUIRED } from "../validator/validator-constants.js";
|
|
12
12
|
import { ValueObject } from "../object/value-object.js";
|
|
@@ -15,18 +15,20 @@ import { ValueObject } from "../object/value-object.js";
|
|
|
15
15
|
const FIELD_DATA_TYPE = {
|
|
16
16
|
[SUBTYPE_BASE]: DATA_TYPE_STRING,
|
|
17
17
|
[FIELD_SUBTYPE_STRING]: DATA_TYPE_STRING,
|
|
18
|
-
[FIELD_SUBTYPE_CLASS]: DATA_TYPE_STRING,
|
|
19
18
|
// field.uuid binds to TS `string` (no native UUID type) — DATA_TYPE_STRING.
|
|
20
19
|
[FIELD_SUBTYPE_UUID]: DATA_TYPE_STRING,
|
|
21
20
|
[FIELD_SUBTYPE_INT]: DATA_TYPE_INT,
|
|
22
|
-
[FIELD_SUBTYPE_SHORT]: DATA_TYPE_INT,
|
|
23
|
-
[FIELD_SUBTYPE_BYTE]: DATA_TYPE_INT,
|
|
24
21
|
[FIELD_SUBTYPE_LONG]: DATA_TYPE_LONG,
|
|
25
22
|
[FIELD_SUBTYPE_CURRENCY]: DATA_TYPE_LONG,
|
|
26
23
|
[FIELD_SUBTYPE_ENUM]: DATA_TYPE_STRING,
|
|
27
24
|
[FIELD_SUBTYPE_DOUBLE]: DATA_TYPE_DOUBLE,
|
|
28
25
|
[FIELD_SUBTYPE_FLOAT]: DATA_TYPE_DOUBLE,
|
|
29
|
-
|
|
26
|
+
// field.decimal is precision-exact: the native TS binding is `string` (Drizzle
|
|
27
|
+
// pg `numeric` infers as `string`; SP-H/ADR-0019), the DB column is numeric(p,s),
|
|
28
|
+
// and the wire form is a STRING. Classifying it DATA_TYPE_DOUBLE would route
|
|
29
|
+
// @default/coerce through toDouble() and silently round an exact decimal
|
|
30
|
+
// (e.g. "12345678901234.5678"). DATA_TYPE_STRING keeps it lossless end-to-end.
|
|
31
|
+
[FIELD_SUBTYPE_DECIMAL]: DATA_TYPE_STRING,
|
|
30
32
|
[FIELD_SUBTYPE_BOOLEAN]: DATA_TYPE_BOOLEAN,
|
|
31
33
|
[FIELD_SUBTYPE_DATE]: DATA_TYPE_DATE,
|
|
32
34
|
[FIELD_SUBTYPE_TIME]: DATA_TYPE_DATE,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-field.js","sourceRoot":"","sources":["../../../src/core/field/meta-field.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,wEAAwE;AACxE,gFAAgF;AAEhF,OAAO,EAAE,QAAQ,EAAkB,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAGL,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EACL,oBAAoB,EACpB,
|
|
1
|
+
{"version":3,"file":"meta-field.js","sourceRoot":"","sources":["../../../src/core/field/meta-field.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { MetaDataLoader, type LoadResult } from "../loader/meta-data-loader.js";
|
|
2
|
+
import type { ParseOptions, ParseResult } from "../parser-core.js";
|
|
3
|
+
import type { MetaDataSource } from "../loader/meta-data-source.js";
|
|
4
|
+
export declare class FileMetaDataLoader extends MetaDataLoader {
|
|
5
|
+
/** Adds YAML parsing on top of the base loader's JSON-only `parseSource`. */
|
|
6
|
+
protected parseSource(content: string, source: MetaDataSource, parseOpts: ParseOptions): ParseResult;
|
|
7
|
+
/**
|
|
8
|
+
* Load every `.json` / `.yaml` / `.yml` file in a directory (non-recursive),
|
|
9
|
+
* in deterministic ordinal filename order.
|
|
10
|
+
* @param opts.exclude glob patterns (relative to dir) to skip — `*` / `**`.
|
|
11
|
+
*/
|
|
12
|
+
loadDirectory(dir: string, opts?: {
|
|
13
|
+
exclude?: string[];
|
|
14
|
+
}): Promise<LoadResult>;
|
|
15
|
+
/** Load an explicit list of file paths, in order. */
|
|
16
|
+
loadFiles(paths: string[]): Promise<LoadResult>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=file-meta-data-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-meta-data-loader.d.ts","sourceRoot":"","sources":["../../src/core/file-meta-data-loader.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhF,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAYpE,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,6EAA6E;cAC1D,WAAW,CAC5B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,YAAY,GACtB,WAAW;IAOd;;;;OAIG;IACG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IA2CpF,qDAAqD;IAC/C,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;CAGtD"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// FileMetaDataLoader — discovers file-backed MetaDataSources and runs the
|
|
2
|
+
// MetaDataLoader pipeline over them. A UrlMetaDataLoader will slot in the
|
|
3
|
+
// same way later.
|
|
4
|
+
import { readdir, stat } from "node:fs/promises";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { MetaDataLoader } from "../loader/meta-data-loader.js";
|
|
7
|
+
import { FileSource } from "./file-source.js";
|
|
8
|
+
import { parseYaml } from "./parser-yaml.js";
|
|
9
|
+
/** Minimal glob matcher supporting `*` (any chars except `/`) and `**` (any chars). */
|
|
10
|
+
function matchSimpleGlob(pattern, value) {
|
|
11
|
+
const regexStr = pattern
|
|
12
|
+
.replace(/[.+^${}()|[\]\\]/g, "\\$&")
|
|
13
|
+
.replace(/\*\*/g, "::DOUBLESTAR::")
|
|
14
|
+
.replace(/\*/g, "[^/]*")
|
|
15
|
+
.replace(/::DOUBLESTAR::/g, ".*");
|
|
16
|
+
return new RegExp(`^${regexStr}$`).test(value);
|
|
17
|
+
}
|
|
18
|
+
export class FileMetaDataLoader extends MetaDataLoader {
|
|
19
|
+
/** Adds YAML parsing on top of the base loader's JSON-only `parseSource`. */
|
|
20
|
+
parseSource(content, source, parseOpts) {
|
|
21
|
+
if (source.format === "yaml") {
|
|
22
|
+
return parseYaml(content, parseOpts);
|
|
23
|
+
}
|
|
24
|
+
return super.parseSource(content, source, parseOpts);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Load every `.json` / `.yaml` / `.yml` file in a directory (non-recursive),
|
|
28
|
+
* in deterministic ordinal filename order.
|
|
29
|
+
* @param opts.exclude glob patterns (relative to dir) to skip — `*` / `**`.
|
|
30
|
+
*/
|
|
31
|
+
async loadDirectory(dir, opts) {
|
|
32
|
+
let entries;
|
|
33
|
+
try {
|
|
34
|
+
// Sorted for deterministic multi-file load order: the overlay merge is
|
|
35
|
+
// order-sensitive (last-writer-wins on attr conflicts), so the scan must
|
|
36
|
+
// not depend on filesystem readdir order. Ordinal filename sort is
|
|
37
|
+
// reproducible across the Java/Python/C# ports.
|
|
38
|
+
entries = (await readdir(dir)).sort();
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
// Surface the I/O failure as a collected error via the empty-source path.
|
|
42
|
+
const emptyResult = await this.load([]);
|
|
43
|
+
return {
|
|
44
|
+
...emptyResult,
|
|
45
|
+
errors: [
|
|
46
|
+
new Error(`loadDirectory: cannot read ${dir}: ${err.message}`),
|
|
47
|
+
...emptyResult.errors,
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const excludes = opts?.exclude ?? [];
|
|
52
|
+
const paths = [];
|
|
53
|
+
for (const entry of entries) {
|
|
54
|
+
const lower = entry.toLowerCase();
|
|
55
|
+
if (!lower.endsWith(".json") && !lower.endsWith(".yaml") && !lower.endsWith(".yml")) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const filePath = join(dir, entry);
|
|
59
|
+
let statResult;
|
|
60
|
+
try {
|
|
61
|
+
statResult = await stat(filePath);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Entry vanished between readdir and stat (TOCTOU) or is not accessible.
|
|
65
|
+
// Skip it rather than breaking the no-throw contract of loadDirectory.
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (!statResult.isFile())
|
|
69
|
+
continue;
|
|
70
|
+
if (excludes.some((p) => matchSimpleGlob(p, entry)))
|
|
71
|
+
continue;
|
|
72
|
+
paths.push(filePath);
|
|
73
|
+
}
|
|
74
|
+
return this.loadFiles(paths);
|
|
75
|
+
}
|
|
76
|
+
/** Load an explicit list of file paths, in order. */
|
|
77
|
+
async loadFiles(paths) {
|
|
78
|
+
return this.load(paths.map((p) => new FileSource(p)));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=file-meta-data-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-meta-data-loader.js","sourceRoot":"","sources":["../../src/core/file-meta-data-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { MetaDataFormat, MetaDataSource } from "../loader/meta-data-source.js";
|
|
2
|
+
/** A metadata source backed by a file on disk. */
|
|
3
|
+
export declare class FileSource implements MetaDataSource {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly format: MetaDataFormat;
|
|
6
|
+
private readonly _path;
|
|
7
|
+
constructor(path: string);
|
|
8
|
+
/** The absolute/relative path this source reads from. */
|
|
9
|
+
get path(): string;
|
|
10
|
+
read(): Promise<string>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=file-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-source.d.ts","sourceRoot":"","sources":["../../src/core/file-source.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAwBpF,kDAAkD;AAClD,qBAAa,UAAW,YAAW,cAAc;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,IAAI,EAAE,MAAM;IAOxB,yDAAyD;IACzD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CAI9B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// FileSource — a MetaDataSource backed by a file on disk. Server-side only
|
|
2
|
+
// (touches node:fs); lives under src/core/ so the browser-safe root never
|
|
3
|
+
// imports it.
|
|
4
|
+
import { basename, extname } from "node:path";
|
|
5
|
+
/** Infer a source format from a file extension. `.yaml`/`.yml` → "yaml";
|
|
6
|
+
* everything else (including `.json`) → "json", the canonical default. */
|
|
7
|
+
function inferFormat(path) {
|
|
8
|
+
const ext = extname(path).toLowerCase();
|
|
9
|
+
return ext === ".yaml" || ext === ".yml" ? "yaml" : "json";
|
|
10
|
+
}
|
|
11
|
+
// File reader — Bun-first (Bun.file().text()) with a Node fallback
|
|
12
|
+
// (node:fs/promises.readFile). Matches CLAUDE.md's Bun-first / Node-compatible policy.
|
|
13
|
+
let _readText;
|
|
14
|
+
async function getReadText() {
|
|
15
|
+
if (_readText !== undefined)
|
|
16
|
+
return _readText;
|
|
17
|
+
if (typeof Bun !== "undefined") {
|
|
18
|
+
_readText = (p) => Bun.file(p).text();
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const { readFile } = await import("node:fs/promises");
|
|
22
|
+
_readText = (p) => readFile(p, "utf-8");
|
|
23
|
+
}
|
|
24
|
+
return _readText;
|
|
25
|
+
}
|
|
26
|
+
/** A metadata source backed by a file on disk. */
|
|
27
|
+
export class FileSource {
|
|
28
|
+
id;
|
|
29
|
+
format;
|
|
30
|
+
_path;
|
|
31
|
+
constructor(path) {
|
|
32
|
+
this._path = path;
|
|
33
|
+
// basename() for readable error messages; cross-platform (handles both / and \). Full path retained for read().
|
|
34
|
+
this.id = basename(path);
|
|
35
|
+
this.format = inferFormat(path);
|
|
36
|
+
}
|
|
37
|
+
/** The absolute/relative path this source reads from. */
|
|
38
|
+
get path() {
|
|
39
|
+
return this._path;
|
|
40
|
+
}
|
|
41
|
+
async read() {
|
|
42
|
+
const readText = await getReadText();
|
|
43
|
+
return readText(this._path);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=file-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-source.js","sourceRoot":"","sources":["../../src/core/file-source.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,0EAA0E;AAC1E,cAAc;AAEd,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG9C;2EAC2E;AAC3E,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7D,CAAC;AAED,mEAAmE;AACnE,uFAAuF;AACvF,IAAI,SAA0D,CAAC;AAE/D,KAAK,UAAU,WAAW;IACxB,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE,CAAC;QAC/B,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACtD,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,kDAAkD;AAClD,MAAM,OAAO,UAAU;IACZ,EAAE,CAAS;IACX,MAAM,CAAiB;IACf,KAAK,CAAS;IAE/B,YAAY,IAAY;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,gHAAgH;QAChH,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,yDAAyD;IACzD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;QACrC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-definition.embedded.d.ts","sourceRoot":"","sources":["../../../src/core/identity/identity-definition.embedded.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,eAAO,MAAM,mBAAmB,EAAE,kBAyFjC,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
export const IDENTITY_DEFINITION = {
|
|
2
|
+
"provider": "metaobjects-core-types",
|
|
3
|
+
"types": [
|
|
4
|
+
{
|
|
5
|
+
"type": "identity",
|
|
6
|
+
"subType": "primary",
|
|
7
|
+
"description": "The primary key — one per entity; @fields names its column(s), @generation the value strategy.",
|
|
8
|
+
"children": [
|
|
9
|
+
{
|
|
10
|
+
"type": "attr",
|
|
11
|
+
"subType": "string",
|
|
12
|
+
"name": "fields",
|
|
13
|
+
"isArray": true,
|
|
14
|
+
"min": 1,
|
|
15
|
+
"max": 1,
|
|
16
|
+
"description": "The field name(s) composing this identity. Single-element for a simple PK/index, multiple for a composite."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"type": "attr",
|
|
20
|
+
"subType": "string",
|
|
21
|
+
"name": "generation",
|
|
22
|
+
"min": 0,
|
|
23
|
+
"max": 1,
|
|
24
|
+
"allowedValues": [
|
|
25
|
+
"increment",
|
|
26
|
+
"uuid",
|
|
27
|
+
"assigned"
|
|
28
|
+
],
|
|
29
|
+
"description": "Primary-key value generation strategy: 'increment' (auto-increment), 'uuid', or 'assigned' (caller-supplied)."
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"type": "identity",
|
|
35
|
+
"subType": "secondary",
|
|
36
|
+
"description": "A secondary index (unique by default via @unique).",
|
|
37
|
+
"children": [
|
|
38
|
+
{
|
|
39
|
+
"type": "attr",
|
|
40
|
+
"subType": "string",
|
|
41
|
+
"name": "fields",
|
|
42
|
+
"isArray": true,
|
|
43
|
+
"min": 1,
|
|
44
|
+
"max": 1,
|
|
45
|
+
"description": "The field name(s) composing this identity. Single-element for a simple PK/index, multiple for a composite."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"type": "attr",
|
|
49
|
+
"subType": "boolean",
|
|
50
|
+
"name": "unique",
|
|
51
|
+
"min": 0,
|
|
52
|
+
"max": 1,
|
|
53
|
+
"description": "When true (default), the secondary identity is a UNIQUE index; false makes it a plain (non-unique) index."
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"type": "identity",
|
|
59
|
+
"subType": "reference",
|
|
60
|
+
"description": "A foreign-key reference to another entity (@references target; @enforce toggles a physical FK).",
|
|
61
|
+
"children": [
|
|
62
|
+
{
|
|
63
|
+
"type": "attr",
|
|
64
|
+
"subType": "string",
|
|
65
|
+
"name": "fields",
|
|
66
|
+
"isArray": true,
|
|
67
|
+
"min": 1,
|
|
68
|
+
"max": 1,
|
|
69
|
+
"description": "The field name(s) composing this identity. Single-element for a simple PK/index, multiple for a composite."
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"type": "attr",
|
|
73
|
+
"subType": "string",
|
|
74
|
+
"name": "references",
|
|
75
|
+
"min": 1,
|
|
76
|
+
"max": 1,
|
|
77
|
+
"description": "Target of the reference. Bare entity name (e.g. 'Program') resolves to that entity's primary identity. Dotted forms ('Program.id' or 'Program.fieldA,fieldB') target an explicit field set on the entity."
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"type": "attr",
|
|
81
|
+
"subType": "boolean",
|
|
82
|
+
"name": "enforce",
|
|
83
|
+
"min": 0,
|
|
84
|
+
"max": 1,
|
|
85
|
+
"description": "When true (default), the backend physically enforces the reference (SQL FK constraint, document validation rule, graph edge guarantee). Set false to declare a logical reference for navigation/typing/codegen only — the value may dangle at the backend level."
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=identity-definition.embedded.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-definition.embedded.js","sourceRoot":"","sources":["../../../src/core/identity/identity-definition.embedded.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,mBAAmB,GAAuB;IACrD,UAAU,EAAE,wBAAwB;IACpC,OAAO,EAAE;QACP;YACE,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,SAAS;YACpB,aAAa,EAAE,gGAAgG;YAC/G,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,4GAA4G;iBAC5H;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,YAAY;oBACpB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,eAAe,EAAE;wBACf,WAAW;wBACX,MAAM;wBACN,UAAU;qBACX;oBACD,aAAa,EAAE,+GAA+G;iBAC/H;aACF;SACF;QACD;YACE,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,WAAW;YACtB,aAAa,EAAE,oDAAoD;YACnE,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,4GAA4G;iBAC5H;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,SAAS;oBACpB,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,2GAA2G;iBAC3H;aACF;SACF;QACD;YACE,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,WAAW;YACtB,aAAa,EAAE,iGAAiG;YAChH,UAAU,EAAE;gBACV;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,QAAQ;oBAChB,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,4GAA4G;iBAC5H;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,QAAQ;oBACnB,MAAM,EAAE,YAAY;oBACpB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,2MAA2M;iBAC3N;gBACD;oBACE,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,SAAS;oBACpB,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,aAAa,EAAE,kQAAkQ;iBAClR;aACF;SACF;KACF;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-schema.d.ts","sourceRoot":"","sources":["../../../src/core/identity/identity-schema.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"identity-schema.d.ts","sourceRoot":"","sources":["../../../src/core/identity/identity-schema.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAiBpD,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,EAAE,UAOhC,CAAC;AA8CF,oFAAoF;AACpF,eAAO,MAAM,kBAAkB,2BAI7B,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// Identity attribute schemas — per-subtype attr inventories for identity types.
|
|
2
2
|
// Consumed by registerCoreTypes().
|
|
3
|
-
import { ATTR_SUBTYPE_STRING, ATTR_SUBTYPE_BOOLEAN,
|
|
3
|
+
import { ATTR_SUBTYPE_STRING, ATTR_SUBTYPE_BOOLEAN, } from "../attr/attr-constants.js";
|
|
4
4
|
import { IDENTITY_SUBTYPE_PRIMARY, IDENTITY_SUBTYPE_SECONDARY, IDENTITY_SUBTYPE_REFERENCE, IDENTITY_ATTR_FIELDS, IDENTITY_ATTR_GENERATION, IDENTITY_ATTR_UNIQUE, IDENTITY_REFERENCE_ATTR_REFERENCES, IDENTITY_REFERENCE_ATTR_ENFORCE, GENERATION_VALUES, } from "./identity-constants.js";
|
|
5
5
|
/** Attrs on identity.primary / identity.secondary — @fields is required. */
|
|
6
6
|
export const identityFieldsAttr = {
|
|
7
7
|
name: IDENTITY_ATTR_FIELDS,
|
|
8
|
-
valueType:
|
|
8
|
+
valueType: ATTR_SUBTYPE_STRING,
|
|
9
|
+
isArray: true,
|
|
9
10
|
required: true,
|
|
10
11
|
description: "The field name(s) composing this identity. Single-element for a simple PK/index, multiple for a composite.",
|
|
11
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-schema.js","sourceRoot":"","sources":["../../../src/core/identity/identity-schema.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,mCAAmC;AAGnC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"identity-schema.js","sourceRoot":"","sources":["../../../src/core/identity/identity-schema.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,mCAAmC;AAGnC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,kCAAkC,EAClC,+BAA+B,EAC/B,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAEjC,4EAA4E;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAe;IAC5C,IAAI,EAAE,oBAAoB;IAC1B,SAAS,EAAE,mBAAmB;IAC9B,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,WAAW,EACT,4GAA4G;CAC/G,CAAC;AAEF,MAAM,oBAAoB,GAAiB;IACzC,EAAE,GAAG,kBAAkB,EAAE;IACzB;QACE,IAAI,EAAE,wBAAwB;QAC9B,SAAS,EAAE,mBAAmB;QAC9B,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,CAAC,GAAG,iBAAiB,CAAC;QACrC,WAAW,EACT,+GAA+G;KAClH;CACF,CAAC;AAEF,MAAM,sBAAsB,GAAiB;IAC3C,EAAE,GAAG,kBAAkB,EAAE;IACzB;QACE,IAAI,EAAE,oBAAoB;QAC1B,SAAS,EAAE,oBAAoB;QAC/B,QAAQ,EAAE,KAAK;QACf,WAAW,EACT,2GAA2G;KAC9G;CACF,CAAC;AAEF,MAAM,sBAAsB,GAAiB;IAC3C,EAAE,GAAG,kBAAkB,EAAE;IACzB;QACE,IAAI,EAAE,kCAAkC;QACxC,SAAS,EAAE,mBAAmB;QAC9B,QAAQ,EAAE,IAAI;QACd,WAAW,EACT,yGAAyG;YACzG,oGAAoG;KACvG;IACD;QACE,IAAI,EAAE,+BAA+B;QACrC,SAAS,EAAE,oBAAoB;QAC/B,QAAQ,EAAE,KAAK;QACf,WAAW,EACT,yFAAyF;YACzF,4FAA4F;YAC5F,iFAAiF;KACpF;CACF,CAAC;AAEF,oFAAoF;AACpF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAuB;IAC9D,CAAC,wBAAwB,EAAE,CAAC,GAAG,oBAAoB,CAAC,CAAC;IACrD,CAAC,0BAA0B,EAAE,CAAC,GAAG,sBAAsB,CAAC,CAAC;IACzD,CAAC,0BAA0B,EAAE,CAAC,GAAG,sBAAsB,CAAC,CAAC;CAC1D,CAAC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { MetaData } from "../../shared/meta-data.js";
|
|
2
|
+
import { ParseError } from "../../errors.js";
|
|
3
|
+
/**
|
|
4
|
+
* Normalize an identity's OWN @fields attr to a string[]. Accepts both the
|
|
5
|
+
* array form (["id"]) and the comma-string form ("id" / "a,b"); returns
|
|
6
|
+
* undefined when the identity declares no own @fields (the pass-through case).
|
|
7
|
+
*/
|
|
8
|
+
export declare function identityOwnFields(identity: MetaData): string[] | undefined;
|
|
9
|
+
/** Normalize an identity's EFFECTIVE @fields attr (inherits through extends). */
|
|
10
|
+
export declare function identityEffectiveFields(identity: MetaData): string[] | undefined;
|
|
11
|
+
/** The result of deriving a projection identity's pass-through key. */
|
|
12
|
+
export interface IdentityPassthroughResolution {
|
|
13
|
+
/** The owning entity of the extended identity. */
|
|
14
|
+
readonly entity: MetaData;
|
|
15
|
+
/** Local pass-through field names, in the extended identity's @fields order. */
|
|
16
|
+
readonly computedFields: string[];
|
|
17
|
+
/** Extended-identity field names with NO local pass-through field. */
|
|
18
|
+
readonly missing: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Derive a projection identity's pass-through key — a PURE read of the
|
|
22
|
+
* resolved tree (no mutation): for each field name in the extended identity's
|
|
23
|
+
* effective @fields, find the local field whose extends-chain reaches the
|
|
24
|
+
* entity's field of that name; the computed key is those local field names in
|
|
25
|
+
* the extended identity's order.
|
|
26
|
+
*
|
|
27
|
+
* Returns undefined when the identity has no resolved identity super (the
|
|
28
|
+
* not-extended / unresolved / mismatched cases — reported elsewhere).
|
|
29
|
+
*/
|
|
30
|
+
export declare function resolveIdentityPassthrough(identity: MetaData): IdentityPassthroughResolution | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* The computed pass-through key of a projection identity, or undefined when
|
|
33
|
+
* the identity is not a fully-corresponding pass-through. Codegen-facing
|
|
34
|
+
* convenience over resolveIdentityPassthrough.
|
|
35
|
+
*/
|
|
36
|
+
export declare function computedIdentityFields(identity: MetaData): string[] | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Walk every object.projection in the root and enforce the pass-through +
|
|
39
|
+
* key-correspondence rules. Returns errors; never mutates the tree.
|
|
40
|
+
*/
|
|
41
|
+
export declare function validateIdentityPassthrough(root: MetaData): ParseError[];
|
|
42
|
+
//# sourceMappingURL=validate-identity-passthrough.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-identity-passthrough.d.ts","sourceRoot":"","sources":["../../../src/core/identity/validate-identity-passthrough.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAK7C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,SAAS,CAE1E;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,SAAS,CAEhF;AAcD,uEAAuE;AACvE,MAAM,WAAW,6BAA6B;IAC5C,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAClC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,QAAQ,GACjB,6BAA6B,GAAG,SAAS,CA6B3C;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,GAAG,SAAS,CAI/E;AAeD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,EAAE,CA4DxE"}
|