@fougere/schema 0.2.0-alpha.2 → 0.4.0-alpha.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/README.md +1 -1
- package/dist/EntityAdapters.d.ts +26 -0
- package/dist/EntityAdapters.d.ts.map +1 -0
- package/dist/EntityAdapters.js +71 -0
- package/dist/EntityAdapters.js.map +1 -0
- package/dist/EntityDeclarations.d.ts +15 -0
- package/dist/EntityDeclarations.d.ts.map +1 -0
- package/dist/EntityDeclarations.js +2 -0
- package/dist/EntityDeclarations.js.map +1 -0
- package/dist/axis/Axis.d.ts +12 -0
- package/dist/axis/Axis.d.ts.map +1 -0
- package/dist/axis/Axis.js +11 -0
- package/dist/axis/Axis.js.map +1 -0
- package/dist/axis/Meta.d.ts +4 -0
- package/dist/axis/Meta.d.ts.map +1 -0
- package/dist/axis/Meta.js +2 -0
- package/dist/axis/Meta.js.map +1 -0
- package/dist/axis/boundary/Boundaries.d.ts +20 -0
- package/dist/axis/boundary/Boundaries.d.ts.map +1 -0
- package/dist/axis/boundary/Boundaries.js +31 -0
- package/dist/axis/boundary/Boundaries.js.map +1 -0
- package/dist/axis/boundary/Boundary.d.ts +26 -0
- package/dist/axis/boundary/Boundary.d.ts.map +1 -0
- package/dist/axis/boundary/Boundary.js +53 -0
- package/dist/axis/boundary/Boundary.js.map +1 -0
- package/dist/axis/boundary/BoundaryAxis.d.ts +4 -0
- package/dist/axis/boundary/BoundaryAxis.d.ts.map +1 -0
- package/dist/axis/boundary/BoundaryAxis.js +30 -0
- package/dist/axis/boundary/BoundaryAxis.js.map +1 -0
- package/dist/axis/lifecycle/Clock.d.ts +18 -0
- package/dist/axis/lifecycle/Clock.d.ts.map +1 -0
- package/dist/axis/lifecycle/Clock.js +25 -0
- package/dist/axis/lifecycle/Clock.js.map +1 -0
- package/dist/axis/lifecycle/Generators.d.ts +18 -0
- package/dist/axis/lifecycle/Generators.d.ts.map +1 -0
- package/dist/axis/lifecycle/Generators.js +38 -0
- package/dist/axis/lifecycle/Generators.js.map +1 -0
- package/dist/axis/lifecycle/Lifecycle.d.ts +28 -0
- package/dist/axis/lifecycle/Lifecycle.d.ts.map +1 -0
- package/dist/axis/lifecycle/Lifecycle.js +38 -0
- package/dist/axis/lifecycle/Lifecycle.js.map +1 -0
- package/dist/axis/lifecycle/LifecycleAxis.d.ts +4 -0
- package/dist/axis/lifecycle/LifecycleAxis.d.ts.map +1 -0
- package/dist/axis/lifecycle/LifecycleAxis.js +47 -0
- package/dist/axis/lifecycle/LifecycleAxis.js.map +1 -0
- package/dist/axis/lifecycle/apply.d.ts +6 -0
- package/dist/axis/lifecycle/apply.d.ts.map +1 -0
- package/dist/axis/lifecycle/apply.js +34 -0
- package/dist/axis/lifecycle/apply.js.map +1 -0
- package/dist/axis/role/Relation.d.ts +20 -0
- package/dist/axis/role/Relation.d.ts.map +1 -0
- package/dist/axis/role/Relation.js +21 -0
- package/dist/axis/role/Relation.js.map +1 -0
- package/dist/axis/role/Role.d.ts +26 -0
- package/dist/axis/role/Role.d.ts.map +1 -0
- package/dist/axis/role/Role.js +40 -0
- package/dist/axis/role/Role.js.map +1 -0
- package/dist/axis/role/RoleAxis.d.ts +5 -0
- package/dist/axis/role/RoleAxis.d.ts.map +1 -0
- package/dist/axis/role/RoleAxis.js +102 -0
- package/dist/axis/role/RoleAxis.js.map +1 -0
- package/dist/axis/shape/Formats.d.ts +8 -0
- package/dist/axis/shape/Formats.d.ts.map +1 -0
- package/dist/axis/shape/Formats.js +10 -0
- package/dist/axis/shape/Formats.js.map +1 -0
- package/dist/axis/shape/Shape.d.ts +58 -0
- package/dist/axis/shape/Shape.d.ts.map +1 -0
- package/dist/{field/shape.js → axis/shape/Shape.js} +10 -25
- package/dist/axis/shape/Shape.js.map +1 -0
- package/dist/card/Bundle.d.ts +15 -0
- package/dist/card/Bundle.d.ts.map +1 -0
- package/dist/card/Bundle.js +67 -0
- package/dist/card/Bundle.js.map +1 -0
- package/dist/card/Card.d.ts +27 -0
- package/dist/card/Card.d.ts.map +1 -0
- package/dist/card/Card.js +230 -0
- package/dist/card/Card.js.map +1 -0
- package/dist/card/Descriptor.d.ts +55 -0
- package/dist/card/Descriptor.d.ts.map +1 -0
- package/dist/card/Descriptor.js +2 -0
- package/dist/card/Descriptor.js.map +1 -0
- package/dist/card/EntityTypeSource.d.ts +12 -0
- package/dist/card/EntityTypeSource.d.ts.map +1 -0
- package/dist/card/EntityTypeSource.js +78 -0
- package/dist/card/EntityTypeSource.js.map +1 -0
- package/dist/card/FacadeTypeSource.d.ts +19 -0
- package/dist/card/FacadeTypeSource.d.ts.map +1 -0
- package/dist/card/FacadeTypeSource.js +40 -0
- package/dist/card/FacadeTypeSource.js.map +1 -0
- package/dist/card/admission.d.ts +9 -0
- package/dist/card/admission.d.ts.map +1 -0
- package/dist/card/admission.js +16 -0
- package/dist/card/admission.js.map +1 -0
- package/dist/card/diff.d.ts +96 -0
- package/dist/card/diff.d.ts.map +1 -0
- package/dist/card/diff.js +2 -0
- package/dist/card/diff.js.map +1 -0
- package/dist/constraint/FieldGroup.d.ts +21 -0
- package/dist/constraint/FieldGroup.d.ts.map +1 -0
- package/dist/constraint/FieldGroup.js +65 -0
- package/dist/constraint/FieldGroup.js.map +1 -0
- package/dist/constraint/Unique.d.ts +4 -0
- package/dist/constraint/Unique.d.ts.map +1 -0
- package/dist/constraint/Unique.js +4 -0
- package/dist/constraint/Unique.js.map +1 -0
- package/dist/entity.d.ts +4 -19
- package/dist/entity.d.ts.map +1 -1
- package/dist/entity.js +8 -39
- package/dist/entity.js.map +1 -1
- package/dist/fields/Field.d.ts +24 -0
- package/dist/fields/Field.d.ts.map +1 -0
- package/dist/fields/Field.js +52 -0
- package/dist/fields/Field.js.map +1 -0
- package/dist/fields/FieldSet.d.ts +28 -0
- package/dist/fields/FieldSet.d.ts.map +1 -0
- package/dist/fields/FieldSet.js +55 -0
- package/dist/fields/FieldSet.js.map +1 -0
- package/dist/index.d.ts +59 -37
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -48
- package/dist/index.js.map +1 -1
- package/dist/judge/Cases.d.ts +50 -0
- package/dist/judge/Cases.d.ts.map +1 -0
- package/dist/judge/Cases.js +108 -0
- package/dist/judge/Cases.js.map +1 -0
- package/dist/judge/FieldJudge.d.ts +9 -0
- package/dist/judge/FieldJudge.d.ts.map +1 -0
- package/dist/judge/FieldJudge.js +54 -0
- package/dist/judge/FieldJudge.js.map +1 -0
- package/dist/judge/RowJudge.d.ts +12 -0
- package/dist/judge/RowJudge.d.ts.map +1 -0
- package/dist/judge/RowJudge.js +81 -0
- package/dist/judge/RowJudge.js.map +1 -0
- package/dist/judge/RowRefusal.d.ts +17 -0
- package/dist/judge/RowRefusal.d.ts.map +1 -0
- package/dist/judge/RowRefusal.js +16 -0
- package/dist/judge/RowRefusal.js.map +1 -0
- package/dist/judge/ValueForm.d.ts +3 -0
- package/dist/judge/ValueForm.d.ts.map +1 -0
- package/dist/judge/ValueForm.js +3 -0
- package/dist/judge/ValueForm.js.map +1 -0
- package/dist/judge/ValueJudge.d.ts +12 -0
- package/dist/judge/ValueJudge.d.ts.map +1 -0
- package/dist/judge/ValueJudge.js +60 -0
- package/dist/judge/ValueJudge.js.map +1 -0
- package/dist/judge/options.d.ts +4 -0
- package/dist/judge/options.d.ts.map +1 -0
- package/dist/judge/options.js +2 -0
- package/dist/judge/options.js.map +1 -0
- package/dist/judge/result.d.ts +17 -0
- package/dist/judge/result.d.ts.map +1 -0
- package/dist/judge/result.js +2 -0
- package/dist/judge/result.js.map +1 -0
- package/dist/projection/SchemaOrCard.d.ts +7 -0
- package/dist/projection/SchemaOrCard.d.ts.map +1 -0
- package/dist/projection/SchemaOrCard.js +11 -0
- package/dist/projection/SchemaOrCard.js.map +1 -0
- package/dist/projection/Visibility.d.ts +10 -0
- package/dist/projection/Visibility.d.ts.map +1 -0
- package/dist/projection/Visibility.js +55 -0
- package/dist/projection/Visibility.js.map +1 -0
- package/dist/{projections → projection}/standard.d.ts +2 -10
- package/dist/projection/standard.d.ts.map +1 -0
- package/dist/projection/standard.js +2 -0
- package/dist/projection/standard.js.map +1 -0
- package/dist/schema/Schema.d.ts +63 -0
- package/dist/schema/Schema.d.ts.map +1 -0
- package/dist/schema/Schema.js +129 -0
- package/dist/schema/Schema.js.map +1 -0
- package/dist/schema/SchemaDefinition.d.ts +46 -0
- package/dist/schema/SchemaDefinition.d.ts.map +1 -0
- package/dist/schema/SchemaDefinition.js +64 -0
- package/dist/schema/SchemaDefinition.js.map +1 -0
- package/dist/schema/SchemaDerivation.d.ts +28 -0
- package/dist/schema/SchemaDerivation.d.ts.map +1 -0
- package/dist/schema/SchemaDerivation.js +37 -0
- package/dist/schema/SchemaDerivation.js.map +1 -0
- package/dist/schema/SchemaView.d.ts +23 -0
- package/dist/schema/SchemaView.d.ts.map +1 -0
- package/dist/schema/SchemaView.js +2 -0
- package/dist/schema/SchemaView.js.map +1 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +13 -0
- package/dist/utils.js.map +1 -0
- package/dist/vocabulary/bool.d.ts +1 -1
- package/dist/vocabulary/bool.d.ts.map +1 -1
- package/dist/vocabulary/bool.js +1 -1
- package/dist/vocabulary/bool.js.map +1 -1
- package/dist/vocabulary/created.d.ts +1 -5
- package/dist/vocabulary/created.d.ts.map +1 -1
- package/dist/vocabulary/created.js +1 -5
- package/dist/vocabulary/created.js.map +1 -1
- package/dist/vocabulary/date.d.ts +1 -1
- package/dist/vocabulary/date.d.ts.map +1 -1
- package/dist/vocabulary/date.js +1 -1
- package/dist/vocabulary/date.js.map +1 -1
- package/dist/vocabulary/email.d.ts +1 -2
- package/dist/vocabulary/email.d.ts.map +1 -1
- package/dist/vocabulary/email.js +0 -1
- package/dist/vocabulary/email.js.map +1 -1
- package/dist/vocabulary/immutable.d.ts +2 -6
- package/dist/vocabulary/immutable.d.ts.map +1 -1
- package/dist/vocabulary/immutable.js +4 -7
- package/dist/vocabulary/immutable.js.map +1 -1
- package/dist/vocabulary/indexed.d.ts +2 -7
- package/dist/vocabulary/indexed.d.ts.map +1 -1
- package/dist/vocabulary/indexed.js +2 -8
- package/dist/vocabulary/indexed.js.map +1 -1
- package/dist/vocabulary/json.d.ts +2 -10
- package/dist/vocabulary/json.d.ts.map +1 -1
- package/dist/vocabulary/json.js +12 -7
- package/dist/vocabulary/json.js.map +1 -1
- package/dist/vocabulary/list.d.ts +1 -12
- package/dist/vocabulary/list.d.ts.map +1 -1
- package/dist/vocabulary/list.js +1 -14
- package/dist/vocabulary/list.js.map +1 -1
- package/dist/vocabulary/many.d.ts +2 -5
- package/dist/vocabulary/many.d.ts.map +1 -1
- package/dist/vocabulary/many.js +3 -6
- package/dist/vocabulary/many.js.map +1 -1
- package/dist/vocabulary/nullable.d.ts +2 -6
- package/dist/vocabulary/nullable.d.ts.map +1 -1
- package/dist/vocabulary/nullable.js +5 -8
- package/dist/vocabulary/nullable.js.map +1 -1
- package/dist/vocabulary/number.d.ts +1 -1
- package/dist/vocabulary/number.d.ts.map +1 -1
- package/dist/vocabulary/number.js +1 -1
- package/dist/vocabulary/number.js.map +1 -1
- package/dist/vocabulary/oneOf.d.ts +1 -8
- package/dist/vocabulary/oneOf.d.ts.map +1 -1
- package/dist/vocabulary/oneOf.js +1 -1
- package/dist/vocabulary/oneOf.js.map +1 -1
- package/dist/vocabulary/optional.d.ts +2 -9
- package/dist/vocabulary/optional.d.ts.map +1 -1
- package/dist/vocabulary/optional.js +6 -14
- package/dist/vocabulary/optional.js.map +1 -1
- package/dist/vocabulary/primary.d.ts +2 -15
- package/dist/vocabulary/primary.d.ts.map +1 -1
- package/dist/vocabulary/primary.js +4 -11
- package/dist/vocabulary/primary.js.map +1 -1
- package/dist/vocabulary/readOnly.d.ts +2 -6
- package/dist/vocabulary/readOnly.d.ts.map +1 -1
- package/dist/vocabulary/readOnly.js +5 -8
- package/dist/vocabulary/readOnly.js.map +1 -1
- package/dist/vocabulary/ref.d.ts +2 -7
- package/dist/vocabulary/ref.d.ts.map +1 -1
- package/dist/vocabulary/ref.js +3 -14
- package/dist/vocabulary/ref.js.map +1 -1
- package/dist/vocabulary/text.d.ts +2 -2
- package/dist/vocabulary/text.d.ts.map +1 -1
- package/dist/vocabulary/text.js +1 -1
- package/dist/vocabulary/text.js.map +1 -1
- package/dist/vocabulary/unique.d.ts +2 -12
- package/dist/vocabulary/unique.d.ts.map +1 -1
- package/dist/vocabulary/unique.js +5 -13
- package/dist/vocabulary/unique.js.map +1 -1
- package/dist/vocabulary/updated.d.ts +1 -6
- package/dist/vocabulary/updated.d.ts.map +1 -1
- package/dist/vocabulary/updated.js +0 -5
- package/dist/vocabulary/updated.js.map +1 -1
- package/dist/vocabulary/url.d.ts +1 -2
- package/dist/vocabulary/url.d.ts.map +1 -1
- package/dist/vocabulary/url.js +0 -1
- package/dist/vocabulary/url.js.map +1 -1
- package/dist/vocabulary/vocabulary.d.ts +4 -0
- package/dist/vocabulary/vocabulary.d.ts.map +1 -0
- package/dist/vocabulary/vocabulary.js +31 -0
- package/dist/vocabulary/vocabulary.js.map +1 -0
- package/dist/vocabulary/writeOnly.d.ts +2 -6
- package/dist/vocabulary/writeOnly.d.ts.map +1 -1
- package/dist/vocabulary/writeOnly.js +5 -8
- package/dist/vocabulary/writeOnly.js.map +1 -1
- package/package.json +8 -4
- package/src/EntityAdapters.ts +95 -0
- package/src/EntityDeclarations.ts +19 -0
- package/src/axis/Axis.ts +25 -0
- package/src/axis/Meta.ts +3 -0
- package/src/axis/boundary/Boundaries.ts +44 -0
- package/src/axis/boundary/Boundary.ts +69 -0
- package/src/axis/boundary/BoundaryAxis.ts +32 -0
- package/src/axis/lifecycle/Clock.ts +26 -0
- package/src/axis/lifecycle/Generators.ts +46 -0
- package/src/axis/lifecycle/Lifecycle.ts +53 -0
- package/src/axis/lifecycle/LifecycleAxis.ts +49 -0
- package/src/axis/lifecycle/apply.ts +38 -0
- package/src/axis/role/Relation.ts +31 -0
- package/src/axis/role/Role.ts +56 -0
- package/src/axis/role/RoleAxis.ts +115 -0
- package/src/axis/shape/Formats.ts +22 -0
- package/src/axis/shape/Shape.ts +91 -0
- package/src/card/Bundle.ts +80 -0
- package/src/card/Card.ts +256 -0
- package/src/card/Descriptor.ts +68 -0
- package/src/card/EntityTypeSource.ts +90 -0
- package/src/card/FacadeTypeSource.ts +55 -0
- package/src/card/admission.ts +25 -0
- package/src/card/diff.ts +56 -0
- package/src/constraint/FieldGroup.ts +91 -0
- package/src/constraint/Unique.ts +3 -0
- package/src/entity.ts +15 -0
- package/src/fields/Field.ts +80 -0
- package/src/fields/FieldSet.ts +62 -0
- package/src/index.ts +64 -0
- package/src/judge/Cases.ts +139 -0
- package/src/judge/FieldJudge.ts +61 -0
- package/src/judge/RowJudge.ts +84 -0
- package/src/judge/RowRefusal.ts +17 -0
- package/src/judge/ValueForm.ts +7 -0
- package/src/judge/ValueJudge.ts +72 -0
- package/src/judge/options.ts +3 -0
- package/src/judge/result.ts +10 -0
- package/src/projection/SchemaOrCard.ts +18 -0
- package/src/projection/Visibility.ts +47 -0
- package/src/projection/standard.ts +47 -0
- package/src/schema/Schema.ts +167 -0
- package/src/schema/SchemaDefinition.ts +87 -0
- package/src/schema/SchemaDerivation.ts +46 -0
- package/src/schema/SchemaView.ts +25 -0
- package/src/utils.ts +13 -0
- package/src/vocabulary/bool.ts +9 -0
- package/src/vocabulary/created.ts +8 -0
- package/src/vocabulary/date.ts +5 -0
- package/src/vocabulary/email.ts +6 -0
- package/src/vocabulary/immutable.ts +6 -0
- package/src/vocabulary/indexed.ts +4 -0
- package/src/vocabulary/json.ts +22 -0
- package/src/vocabulary/list.ts +13 -0
- package/src/vocabulary/many.ts +9 -0
- package/src/vocabulary/nullable.ts +7 -0
- package/src/vocabulary/number.ts +17 -0
- package/src/vocabulary/oneOf.ts +24 -0
- package/src/vocabulary/optional.ts +8 -0
- package/src/vocabulary/primary.ts +33 -0
- package/src/vocabulary/readOnly.ts +7 -0
- package/src/vocabulary/ref.ts +13 -0
- package/src/vocabulary/text.ts +19 -0
- package/src/vocabulary/unique.ts +10 -0
- package/src/vocabulary/updated.ts +7 -0
- package/src/vocabulary/url.ts +6 -0
- package/src/vocabulary/vocabulary.ts +40 -0
- package/src/vocabulary/writeOnly.ts +7 -0
- package/dist/field/boundary.d.ts +0 -69
- package/dist/field/boundary.d.ts.map +0 -1
- package/dist/field/boundary.js +0 -82
- package/dist/field/boundary.js.map +0 -1
- package/dist/field/field.d.ts +0 -21
- package/dist/field/field.d.ts.map +0 -1
- package/dist/field/field.js +0 -24
- package/dist/field/field.js.map +0 -1
- package/dist/field/format.d.ts +0 -29
- package/dist/field/format.d.ts.map +0 -1
- package/dist/field/format.js +0 -24
- package/dist/field/format.js.map +0 -1
- package/dist/field/index.d.ts +0 -8
- package/dist/field/index.d.ts.map +0 -1
- package/dist/field/index.js +0 -10
- package/dist/field/index.js.map +0 -1
- package/dist/field/lifecycle.d.ts +0 -31
- package/dist/field/lifecycle.d.ts.map +0 -1
- package/dist/field/lifecycle.js +0 -20
- package/dist/field/lifecycle.js.map +0 -1
- package/dist/field/meta.d.ts +0 -5
- package/dist/field/meta.d.ts.map +0 -1
- package/dist/field/meta.js +0 -5
- package/dist/field/meta.js.map +0 -1
- package/dist/field/role.d.ts +0 -47
- package/dist/field/role.d.ts.map +0 -1
- package/dist/field/role.js +0 -35
- package/dist/field/role.js.map +0 -1
- package/dist/field/shape.d.ts +0 -89
- package/dist/field/shape.d.ts.map +0 -1
- package/dist/field/shape.js.map +0 -1
- package/dist/hints.d.ts +0 -28
- package/dist/hints.d.ts.map +0 -1
- package/dist/hints.js +0 -23
- package/dist/hints.js.map +0 -1
- package/dist/name.d.ts +0 -8
- package/dist/name.d.ts.map +0 -1
- package/dist/name.js +0 -10
- package/dist/name.js.map +0 -1
- package/dist/projections/card.d.ts +0 -98
- package/dist/projections/card.d.ts.map +0 -1
- package/dist/projections/card.js +0 -8
- package/dist/projections/card.js.map +0 -1
- package/dist/projections/describe.d.ts +0 -25
- package/dist/projections/describe.d.ts.map +0 -1
- package/dist/projections/describe.js +0 -131
- package/dist/projections/describe.js.map +0 -1
- package/dist/projections/encode.d.ts +0 -11
- package/dist/projections/encode.d.ts.map +0 -1
- package/dist/projections/encode.js +0 -26
- package/dist/projections/encode.js.map +0 -1
- package/dist/projections/io.d.ts +0 -24
- package/dist/projections/io.d.ts.map +0 -1
- package/dist/projections/io.js +0 -46
- package/dist/projections/io.js.map +0 -1
- package/dist/projections/lifecycle.d.ts +0 -29
- package/dist/projections/lifecycle.d.ts.map +0 -1
- package/dist/projections/lifecycle.js +0 -93
- package/dist/projections/lifecycle.js.map +0 -1
- package/dist/projections/reconstruct.d.ts +0 -31
- package/dist/projections/reconstruct.d.ts.map +0 -1
- package/dist/projections/reconstruct.js +0 -146
- package/dist/projections/reconstruct.js.map +0 -1
- package/dist/projections/source.d.ts +0 -18
- package/dist/projections/source.d.ts.map +0 -1
- package/dist/projections/source.js +0 -18
- package/dist/projections/source.js.map +0 -1
- package/dist/projections/standard.d.ts.map +0 -1
- package/dist/projections/standard.js +0 -10
- package/dist/projections/standard.js.map +0 -1
- package/dist/projections/typescript.d.ts +0 -37
- package/dist/projections/typescript.d.ts.map +0 -1
- package/dist/projections/typescript.js +0 -157
- package/dist/projections/typescript.js.map +0 -1
- package/dist/schema/index.d.ts +0 -3
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -2
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/schema.d.ts +0 -74
- package/dist/schema/schema.d.ts.map +0 -1
- package/dist/schema/schema.js +0 -162
- package/dist/schema/schema.js.map +0 -1
- package/dist/schema/view.d.ts +0 -26
- package/dist/schema/view.d.ts.map +0 -1
- package/dist/schema/view.js +0 -2
- package/dist/schema/view.js.map +0 -1
- package/dist/unique.d.ts +0 -40
- package/dist/unique.d.ts.map +0 -1
- package/dist/unique.js +0 -57
- package/dist/unique.js.map +0 -1
- package/dist/validation/index.d.ts +0 -4
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js +0 -2
- package/dist/validation/index.js.map +0 -1
- package/dist/validation/judge.d.ts +0 -55
- package/dist/validation/judge.d.ts.map +0 -1
- package/dist/validation/judge.js +0 -351
- package/dist/validation/judge.js.map +0 -1
- package/dist/validation/options.d.ts +0 -6
- package/dist/validation/options.d.ts.map +0 -1
- package/dist/validation/options.js +0 -3
- package/dist/validation/options.js.map +0 -1
- package/dist/validation/result.d.ts +0 -20
- package/dist/validation/result.d.ts.map +0 -1
- package/dist/validation/result.js +0 -3
- package/dist/validation/result.js.map +0 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { BoundaryRef } from '../axis/boundary/Boundary.js';
|
|
2
|
+
import type { LifecycleRules } from '../axis/lifecycle/Lifecycle.js';
|
|
3
|
+
import type { FieldDescriptor, RoleDescriptor } from './Descriptor.js';
|
|
4
|
+
/** One named difference, at one place. Each kind exists because a reader asks for it. */
|
|
5
|
+
export type Change =
|
|
6
|
+
/** DDL: add the column. Codec: the old caller never sends it. Boot: refuse when required. */
|
|
7
|
+
{
|
|
8
|
+
kind: 'added';
|
|
9
|
+
field: string;
|
|
10
|
+
to: FieldDescriptor;
|
|
11
|
+
required: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** DDL: drop the column. Codec: the old caller still sends it, and it goes nowhere. */
|
|
14
|
+
| {
|
|
15
|
+
kind: 'removed';
|
|
16
|
+
field: string;
|
|
17
|
+
from: FieldDescriptor;
|
|
18
|
+
required: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** DDL: rename the column. Codec and ORM: one more entry in the field-to-column map. */
|
|
21
|
+
| {
|
|
22
|
+
kind: 'renamed';
|
|
23
|
+
from: string;
|
|
24
|
+
to: string;
|
|
25
|
+
field: FieldDescriptor;
|
|
26
|
+
}
|
|
27
|
+
/** DDL: alter the type. Codec: convert the value, when it can. */
|
|
28
|
+
| {
|
|
29
|
+
kind: 'retyped';
|
|
30
|
+
field: string;
|
|
31
|
+
from: TypeSet;
|
|
32
|
+
to: TypeSet;
|
|
33
|
+
}
|
|
34
|
+
/** Same type, different bounds: a CHECK moves, and a value legal yesterday may not be. */
|
|
35
|
+
| {
|
|
36
|
+
kind: 'reshaped';
|
|
37
|
+
field: string;
|
|
38
|
+
from: FieldDescriptor;
|
|
39
|
+
to: FieldDescriptor;
|
|
40
|
+
}
|
|
41
|
+
/** NOT NULL in either direction. Boot: an old writer cannot fill what it never knew. */
|
|
42
|
+
| {
|
|
43
|
+
kind: 'required';
|
|
44
|
+
field: string;
|
|
45
|
+
from: boolean;
|
|
46
|
+
to: boolean;
|
|
47
|
+
}
|
|
48
|
+
/** An axis other than shape was restated. */
|
|
49
|
+
| {
|
|
50
|
+
kind: 'restated';
|
|
51
|
+
field: string;
|
|
52
|
+
axis: 'role';
|
|
53
|
+
from?: RoleDescriptor;
|
|
54
|
+
to?: RoleDescriptor;
|
|
55
|
+
} | {
|
|
56
|
+
kind: 'restated';
|
|
57
|
+
field: string;
|
|
58
|
+
axis: 'lifecycle';
|
|
59
|
+
from?: LifecycleRules;
|
|
60
|
+
to?: LifecycleRules;
|
|
61
|
+
} | {
|
|
62
|
+
kind: 'restated';
|
|
63
|
+
field: string;
|
|
64
|
+
axis: 'boundary';
|
|
65
|
+
from?: BoundaryRef;
|
|
66
|
+
to?: BoundaryRef;
|
|
67
|
+
};
|
|
68
|
+
/** A field's declared types, always represented as a set. */
|
|
69
|
+
export type TypeSet = string[];
|
|
70
|
+
/** A removal and an addition that could be one rename: same shape, different name. */
|
|
71
|
+
export interface RenameCandidate {
|
|
72
|
+
removed: string;
|
|
73
|
+
added: string;
|
|
74
|
+
}
|
|
75
|
+
export interface Diff {
|
|
76
|
+
changes: Change[];
|
|
77
|
+
/** Questions the comparison refuses to decide without an explicit rename declaration. */
|
|
78
|
+
ambiguous: RenameCandidate[];
|
|
79
|
+
}
|
|
80
|
+
export interface DiffOptions {
|
|
81
|
+
/** Renames as declared at the time: old name to new name. */
|
|
82
|
+
renamed?: Record<string, string>;
|
|
83
|
+
}
|
|
84
|
+
export interface SetDiff {
|
|
85
|
+
/** Entities the target bundle has and the source bundle had not. */
|
|
86
|
+
entitiesAdded: string[];
|
|
87
|
+
/** Entities the source bundle had and the target bundle has not. */
|
|
88
|
+
entitiesRemoved: string[];
|
|
89
|
+
/** Differences for entities present in both bundles; unchanged entities are absent. */
|
|
90
|
+
entities: Record<string, Diff>;
|
|
91
|
+
}
|
|
92
|
+
export interface SetDiffOptions {
|
|
93
|
+
/** Declared renames, per entity: `{ post: { body: 'content' } }`. */
|
|
94
|
+
renamed?: Record<string, Record<string, string>>;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/card/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/card/diff.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Field, Fields } from "../fields/Field.js";
|
|
2
|
+
export declare abstract class FieldGroup {
|
|
3
|
+
readonly members: readonly string[];
|
|
4
|
+
constructor(members: readonly string[]);
|
|
5
|
+
protected withMembers(members: readonly string[]): this;
|
|
6
|
+
get isSelf(): boolean;
|
|
7
|
+
resolvedOn(ownKey: string): this;
|
|
8
|
+
covers(key: string): boolean;
|
|
9
|
+
equals(other: FieldGroup): boolean;
|
|
10
|
+
onto(fields: Fields): Fields;
|
|
11
|
+
rename(map: (key: string) => string | undefined): this | null;
|
|
12
|
+
toJSON(): string[];
|
|
13
|
+
static normalize<R extends FieldGroup>(groups: readonly (R | readonly string[])[] | undefined, make: (members: readonly string[]) => R): readonly R[] | undefined;
|
|
14
|
+
static on<R extends FieldGroup>(field: Field, kind: Function & {
|
|
15
|
+
prototype: R;
|
|
16
|
+
}): R[];
|
|
17
|
+
static groupsOf<R extends FieldGroup>(fields: Fields, kind: Function & {
|
|
18
|
+
prototype: R;
|
|
19
|
+
}): R[];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=FieldGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldGroup.d.ts","sourceRoot":"","sources":["../../src/constraint/FieldGroup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAExD,8BAAsB,UAAU;IAClB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;IAA/C,YAAqB,OAAO,EAAE,SAAS,MAAM,EAAE,EAAI;IAEnD,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAItD;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/B;IAED,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3B;IAED,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAMjC;IAED,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgB3B;IAED,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAM5D;IAED,MAAM,IAAI,MAAM,EAAE,CAEjB;IAED,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,UAAU,EACnC,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,SAAS,EACtD,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,CAAC,GACtC,SAAS,CAAC,EAAE,GAAG,SAAS,CAK1B;IAED,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,UAAU,EAC5B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,QAAQ,GAAG;QAAE,SAAS,EAAE,CAAC,CAAA;KAAE,GAChC,CAAC,EAAE,CAIL;IAED,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,UAAU,EAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,GAAG;QAAE,SAAS,EAAE,CAAC,CAAA;KAAE,GAChC,CAAC,EAAE,CAML;CACF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export class FieldGroup {
|
|
2
|
+
members;
|
|
3
|
+
constructor(members) {
|
|
4
|
+
this.members = members;
|
|
5
|
+
}
|
|
6
|
+
withMembers(members) {
|
|
7
|
+
return new this.constructor(members);
|
|
8
|
+
}
|
|
9
|
+
get isSelf() {
|
|
10
|
+
return this.members.length === 0;
|
|
11
|
+
}
|
|
12
|
+
resolvedOn(ownKey) {
|
|
13
|
+
return this.isSelf ? this.withMembers([ownKey]) : this;
|
|
14
|
+
}
|
|
15
|
+
covers(key) {
|
|
16
|
+
return this.members.includes(key);
|
|
17
|
+
}
|
|
18
|
+
equals(other) {
|
|
19
|
+
return (this.constructor === other.constructor &&
|
|
20
|
+
this.members.length === other.members.length &&
|
|
21
|
+
this.members.every((member, i) => member === other.members[i]));
|
|
22
|
+
}
|
|
23
|
+
onto(fields) {
|
|
24
|
+
const missing = this.members.filter((key) => !(key in fields));
|
|
25
|
+
if (missing.length)
|
|
26
|
+
throw new Error(`${this.constructor.name.toLowerCase()}: [${this.members.join(", ")}] names ` +
|
|
27
|
+
`${missing.map((m) => `'${m}'`).join(", ")}, which the entity does not declare.`);
|
|
28
|
+
const out = { ...fields };
|
|
29
|
+
for (const key of this.members) {
|
|
30
|
+
const field = out[key];
|
|
31
|
+
out[key] = field.with({
|
|
32
|
+
role: { ...field.role, rules: [...(field.role?.rules ?? []), this] },
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return out;
|
|
36
|
+
}
|
|
37
|
+
rename(map) {
|
|
38
|
+
if (this.isSelf)
|
|
39
|
+
return this;
|
|
40
|
+
const carried = this.members.map(map);
|
|
41
|
+
return carried.every((key) => key !== undefined)
|
|
42
|
+
? this.withMembers(carried)
|
|
43
|
+
: null;
|
|
44
|
+
}
|
|
45
|
+
toJSON() {
|
|
46
|
+
return [...this.members];
|
|
47
|
+
}
|
|
48
|
+
static normalize(groups, make) {
|
|
49
|
+
if (!groups)
|
|
50
|
+
return undefined;
|
|
51
|
+
return groups.map((group) => group instanceof FieldGroup ? group : make(group));
|
|
52
|
+
}
|
|
53
|
+
static on(field, kind) {
|
|
54
|
+
return (field.role?.rules ?? []).filter((rule) => rule instanceof kind);
|
|
55
|
+
}
|
|
56
|
+
static groupsOf(fields, kind) {
|
|
57
|
+
const seen = new Map();
|
|
58
|
+
for (const field of Object.values(fields))
|
|
59
|
+
for (const rule of FieldGroup.on(field, kind))
|
|
60
|
+
if (rule.members.length > 1)
|
|
61
|
+
seen.set(rule.members.join(" "), rule);
|
|
62
|
+
return [...seen.values()];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=FieldGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldGroup.js","sourceRoot":"","sources":["../../src/constraint/FieldGroup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Unique.d.ts","sourceRoot":"","sources":["../../src/constraint/Unique.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,qBAAa,MAAO,SAAQ,UAAU;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Unique.js","sourceRoot":"","sources":["../../src/constraint/Unique.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,OAAO,MAAO,SAAQ,UAAU;CAAG"}
|
package/dist/entity.d.ts
CHANGED
|
@@ -1,20 +1,5 @@
|
|
|
1
|
-
import { type Fields } from
|
|
2
|
-
import { type EntityDeclarations } from
|
|
3
|
-
import { type SchemaConstructor } from
|
|
4
|
-
|
|
5
|
-
* Define an entity — the factory that produces a schema-carrying class.
|
|
6
|
-
*
|
|
7
|
-
* ```ts
|
|
8
|
-
* class Post extends entity({ id: primary(), title: text({ min: 1 }) }) {}
|
|
9
|
-
*
|
|
10
|
-
* new Post({ id, title }) // a real instance, data-typed
|
|
11
|
-
* Post.pick('title') // a derived view, same static API
|
|
12
|
-
* function publish(p: Post) // `Post` IS the data type
|
|
13
|
-
* ```
|
|
14
|
-
*
|
|
15
|
-
* Data and schema metadata only — no business behaviour lives on an entity. The 2nd
|
|
16
|
-
* argument carries what the entity states about itself: `unique` groups, and per-adapter
|
|
17
|
-
* hints for what a neutral field cannot express.
|
|
18
|
-
*/
|
|
19
|
-
export declare function entity<TFields extends Fields>(fields: TFields, declarations?: EntityDeclarations<TFields>): SchemaConstructor<TFields>;
|
|
1
|
+
import { type Fields } from './fields/Field.js';
|
|
2
|
+
import { type EntityDeclarations } from './EntityDeclarations.js';
|
|
3
|
+
import { type SchemaConstructor } from './schema/Schema.js';
|
|
4
|
+
export declare function entity<TFields extends Fields>(originalFields: TFields, { unique, adapters, previous }?: EntityDeclarations<TFields>): SchemaConstructor<TFields>;
|
|
20
5
|
//# sourceMappingURL=entity.d.ts.map
|
package/dist/entity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,wBAAgB,MAAM,CAAC,OAAO,SAAS,MAAM,EAC3C,cAAc,EAAE,OAAO,EACvB,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAE,kBAAkB,CAAC,OAAO,CAAM,GAC/D,iBAAiB,CAAC,OAAO,CAAC,CAM5B"}
|
package/dist/entity.js
CHANGED
|
@@ -1,41 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
* class Post extends entity({ id: primary(), title: text({ min: 1 }) }) {}
|
|
10
|
-
*
|
|
11
|
-
* new Post({ id, title }) // a real instance, data-typed
|
|
12
|
-
* Post.pick('title') // a derived view, same static API
|
|
13
|
-
* function publish(p: Post) // `Post` IS the data type
|
|
14
|
-
* ```
|
|
15
|
-
*
|
|
16
|
-
* Data and schema metadata only — no business behaviour lives on an entity. The 2nd
|
|
17
|
-
* argument carries what the entity states about itself: `unique` groups, and per-adapter
|
|
18
|
-
* hints for what a neutral field cannot express.
|
|
19
|
-
*/
|
|
20
|
-
export function entity(fields, declarations) {
|
|
21
|
-
const own = {};
|
|
22
|
-
for (const [key, field] of Object.entries(fields))
|
|
23
|
-
own[key] = new Field(field, key);
|
|
24
|
-
const projected = projectUniqueOntoFields(own, declarations?.unique);
|
|
25
|
-
assertDefaultsAreValid(projected);
|
|
26
|
-
return Schema.of(projected, undefined, declarations?.hints, {}, declarations?.unique);
|
|
27
|
-
}
|
|
28
|
-
function assertDefaultsAreValid(fields) {
|
|
29
|
-
for (const [name, field] of Object.entries(fields)) {
|
|
30
|
-
const create = field.lifecycle?.create;
|
|
31
|
-
if (typeof create !== 'object' || create === null || !('value' in create))
|
|
32
|
-
continue;
|
|
33
|
-
const checked = Judge.value(field, create.value);
|
|
34
|
-
if ('error' in checked) {
|
|
35
|
-
throw new Error(`Field '${name}': the declared default ${JSON.stringify(create.value)} `
|
|
36
|
-
+ `is not a legal value for it — ${checked.error}. It would be written into every row `
|
|
37
|
-
+ `without passing the judge.`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
1
|
+
import { FieldSet } from './fields/FieldSet.js';
|
|
2
|
+
import { Schema } from './schema/Schema.js';
|
|
3
|
+
export function entity(originalFields, { unique, adapters, previous } = {}) {
|
|
4
|
+
return Schema.of({
|
|
5
|
+
fields: FieldSet.declared(originalFields, unique),
|
|
6
|
+
adapters,
|
|
7
|
+
previous,
|
|
8
|
+
});
|
|
40
9
|
}
|
|
41
10
|
//# sourceMappingURL=entity.js.map
|
package/dist/entity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAA0B,MAAM,oBAAoB,CAAC;AAEpE,MAAM,UAAU,MAAM,CACpB,cAAuB,EACvB,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAgC,EAAE;IAEhE,OAAO,MAAM,CAAC,EAAE,CAAC;QACf,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QACjD,QAAQ;QACR,QAAQ;KACT,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Shape } from "../axis/shape/Shape.js";
|
|
2
|
+
import { type RoleRules } from "../axis/role/Role.js";
|
|
3
|
+
import type { LifecycleRules } from "../axis/lifecycle/Lifecycle.js";
|
|
4
|
+
import type { BoundaryRef } from "../axis/boundary/Boundary.js";
|
|
5
|
+
import type { Meta } from "../axis/Meta.js";
|
|
6
|
+
import type { Axis } from "../axis/Axis.js";
|
|
7
|
+
export type Fields = Record<string, Field>;
|
|
8
|
+
/** A key of a field set — the name a declaration addresses a field by. */
|
|
9
|
+
export type FieldName<TFields extends Fields> = Extract<keyof TFields, string>;
|
|
10
|
+
/** The carrier, the three extension axes, the annotation — the five the judge reads. */
|
|
11
|
+
export type FieldDeclaration = Pick<Field, "shape" | Axis["slot"] | "meta">;
|
|
12
|
+
export declare class Field<T = unknown> {
|
|
13
|
+
readonly shape: Shape;
|
|
14
|
+
readonly role?: RoleRules;
|
|
15
|
+
readonly lifecycle?: LifecycleRules;
|
|
16
|
+
readonly boundary?: BoundaryRef;
|
|
17
|
+
readonly meta?: Meta;
|
|
18
|
+
readonly _type?: T;
|
|
19
|
+
constructor(init: FieldDeclaration, key?: string);
|
|
20
|
+
static is(value: unknown): value is Field;
|
|
21
|
+
with<U = T>(overrides: Partial<FieldDeclaration>): Field<U>;
|
|
22
|
+
rename(map: (key: string) => string | undefined): Field<T>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=Field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/fields/Field.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE3C,0EAA0E;AAC1E,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,CAAC;AAE/E,wFAAwF;AACxF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAE5E,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAErB,SAAiB,KAAK,CAAC,EAAE,CAAC,CAAC;IAE3B,YAAY,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC,EAAE,MAAM,EAyB/C;IAED,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAExC;IAED,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAE1D;IAED,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAgBzD;CACF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Role } from "../axis/role/Role.js";
|
|
2
|
+
import { FieldJudge } from "../judge/FieldJudge.js";
|
|
3
|
+
import { ValueJudge } from "../judge/ValueJudge.js";
|
|
4
|
+
export class Field {
|
|
5
|
+
shape;
|
|
6
|
+
role;
|
|
7
|
+
lifecycle;
|
|
8
|
+
boundary;
|
|
9
|
+
meta;
|
|
10
|
+
constructor(init, key) {
|
|
11
|
+
const verdict = FieldJudge.of(init).verdict;
|
|
12
|
+
if (!verdict.success) {
|
|
13
|
+
throw new Error(`${key ? `Field '${key}': ` : ""}` +
|
|
14
|
+
verdict.errors.map((e) => `${e.path}: ${e.message}`).join("; "));
|
|
15
|
+
}
|
|
16
|
+
this.shape = init.shape;
|
|
17
|
+
this.role = Role.resolvedOn(init.role, key);
|
|
18
|
+
this.lifecycle = init.lifecycle;
|
|
19
|
+
this.boundary = init.boundary;
|
|
20
|
+
this.meta = init.meta;
|
|
21
|
+
const create = this.lifecycle?.create;
|
|
22
|
+
if (typeof create === "object" && create !== null && "value" in create) {
|
|
23
|
+
const checked = ValueJudge.of(this).check(create.value);
|
|
24
|
+
if ("error" in checked)
|
|
25
|
+
throw new Error(`${key ? `Field '${key}': ` : ""}the declared default ${JSON.stringify(create.value)} ` +
|
|
26
|
+
`is not a legal value for it — ${checked.error}.`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
static is(value) {
|
|
30
|
+
return FieldJudge.of(value).verdict.success;
|
|
31
|
+
}
|
|
32
|
+
with(overrides) {
|
|
33
|
+
return new Field({ ...this, ...overrides });
|
|
34
|
+
}
|
|
35
|
+
rename(map) {
|
|
36
|
+
const rules = this.role?.rules;
|
|
37
|
+
if (!rules?.length)
|
|
38
|
+
return this;
|
|
39
|
+
const carried = rules
|
|
40
|
+
.map((group) => group.rename(map))
|
|
41
|
+
.filter((group) => group !== null);
|
|
42
|
+
const unchanged = carried.length === rules.length &&
|
|
43
|
+
carried.every((group, i) => group.equals(rules[i]));
|
|
44
|
+
if (unchanged)
|
|
45
|
+
return this;
|
|
46
|
+
const { rules: _dropped, ...rest } = this.role;
|
|
47
|
+
return this.with({
|
|
48
|
+
role: carried.length ? { ...rest, rules: carried } : rest,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=Field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../../src/fields/Field.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { CompositeUnique } from '../EntityDeclarations.js';
|
|
2
|
+
import { type FieldName, type Fields } from './Field.js';
|
|
3
|
+
export declare class FieldSet<TFields extends Fields = Fields> {
|
|
4
|
+
private readonly fields;
|
|
5
|
+
private constructor();
|
|
6
|
+
static of<TFields extends Fields>(fields: TFields): FieldSet<TFields>;
|
|
7
|
+
/**
|
|
8
|
+
* Every entry through the field door, then the groups declared over several of them.
|
|
9
|
+
* A group written here names its members; one written on a field named itself, and the
|
|
10
|
+
* key it sat under resolved it.
|
|
11
|
+
*/
|
|
12
|
+
static declared<TFields extends Fields>(declared: TFields, unique?: CompositeUnique<TFields>): TFields;
|
|
13
|
+
/**
|
|
14
|
+
* The name of the field that carries `primary`, or `undefined` when none does.
|
|
15
|
+
*
|
|
16
|
+
* `Role.of(field).isPrimary` answers about ONE field; this answers about a shape, which
|
|
17
|
+
* is the question every reader actually had. It was the same three lines spelled five
|
|
18
|
+
* times — a mirror's key, a form's row identity, GraphQL's node id, the DDL's primary
|
|
19
|
+
* key and the ORM's `findById` column — so a shape with two primaries meant whichever
|
|
20
|
+
* one that loop happened to see first, five times over.
|
|
21
|
+
*
|
|
22
|
+
* The absence is answered and not defaulted: `'id'` is a fine fallback for a form and a
|
|
23
|
+
* lie for a DDL, so the caller decides.
|
|
24
|
+
*/
|
|
25
|
+
get primary(): FieldName<TFields> | undefined;
|
|
26
|
+
get uniqueGroups(): CompositeUnique<TFields> | undefined;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=FieldSet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldSet.d.ts","sourceRoot":"","sources":["../../src/fields/FieldSet.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAS,KAAK,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAEhE,qBAAa,QAAQ,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAA3C,OAAO,eAAiD;IAExD,MAAM,CAAC,EAAE,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAEpE;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,SAAS,MAAM,EACpC,QAAQ,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GAChC,OAAO,CAKT;IAED;;;;;;;;;;;OAWG;IACH,IAAI,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAa5C;IAED,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,CAKvD;CACF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Role } from '../axis/role/Role.js';
|
|
2
|
+
import { FieldGroup } from '../constraint/FieldGroup.js';
|
|
3
|
+
import { Unique } from '../constraint/Unique.js';
|
|
4
|
+
import { Field } from './Field.js';
|
|
5
|
+
export class FieldSet {
|
|
6
|
+
fields;
|
|
7
|
+
constructor(fields) {
|
|
8
|
+
this.fields = fields;
|
|
9
|
+
}
|
|
10
|
+
static of(fields) {
|
|
11
|
+
return new FieldSet(fields);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Every entry through the field door, then the groups declared over several of them.
|
|
15
|
+
* A group written here names its members; one written on a field named itself, and the
|
|
16
|
+
* key it sat under resolved it.
|
|
17
|
+
*/
|
|
18
|
+
static declared(declared, unique) {
|
|
19
|
+
let fields = {};
|
|
20
|
+
for (const [key, field] of Object.entries(declared))
|
|
21
|
+
fields[key] = new Field(field, key);
|
|
22
|
+
for (const group of unique ?? [])
|
|
23
|
+
fields = new Unique(group).onto(fields);
|
|
24
|
+
return fields;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The name of the field that carries `primary`, or `undefined` when none does.
|
|
28
|
+
*
|
|
29
|
+
* `Role.of(field).isPrimary` answers about ONE field; this answers about a shape, which
|
|
30
|
+
* is the question every reader actually had. It was the same three lines spelled five
|
|
31
|
+
* times — a mirror's key, a form's row identity, GraphQL's node id, the DDL's primary
|
|
32
|
+
* key and the ORM's `findById` column — so a shape with two primaries meant whichever
|
|
33
|
+
* one that loop happened to see first, five times over.
|
|
34
|
+
*
|
|
35
|
+
* The absence is answered and not defaulted: `'id'` is a fine fallback for a form and a
|
|
36
|
+
* lie for a DDL, so the caller decides.
|
|
37
|
+
*/
|
|
38
|
+
get primary() {
|
|
39
|
+
const primaries = Object.entries(this.fields)
|
|
40
|
+
.filter(([, field]) => Role.of(field).isPrimary)
|
|
41
|
+
.map(([name]) => name);
|
|
42
|
+
if (primaries.length > 1) {
|
|
43
|
+
throw new Error(`FieldSet.primary: ${primaries.map((name) => JSON.stringify(name)).join(', ')} all declare ` +
|
|
44
|
+
'`primary`; a field set can have only one primary field.');
|
|
45
|
+
}
|
|
46
|
+
return primaries[0];
|
|
47
|
+
}
|
|
48
|
+
get uniqueGroups() {
|
|
49
|
+
const groups = FieldGroup.groupsOf(this.fields, Unique);
|
|
50
|
+
return groups.length
|
|
51
|
+
? groups.map((group) => [...group.members])
|
|
52
|
+
: undefined;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=FieldSet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldSet.js","sourceRoot":"","sources":["../../src/fields/FieldSet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EAAE,KAAK,EAA+B,MAAM,YAAY,CAAC;AAEhE,MAAM,OAAO,QAAQ;IACkB,MAAM;IAA3C,YAAqC,MAAe;sBAAf,MAAM;IAAY,CAAC;IAExD,MAAM,CAAC,EAAE,CAAyB,MAAe;QAC/C,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CACb,QAAiB,EACjB,MAAiC;QAEjC,IAAI,MAAM,GAAW,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACzF,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE;YAAE,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1E,OAAO,MAAiB,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;OAWG;IACH,IAAI,OAAO;QACT,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;aAC1C,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;aAC/C,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAEzB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,qBAAqB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;gBAC5F,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC,CAAC,CAAmC,CAAC;IACxD,CAAC;IAED,IAAI,YAAY;QACd,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC,MAAM;YAClB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAwC;YAClF,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,38 +1,60 @@
|
|
|
1
|
-
export { Field, type Fields
|
|
2
|
-
export {
|
|
3
|
-
export { type
|
|
4
|
-
export { type
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
21
|
-
export {
|
|
22
|
-
export {
|
|
23
|
-
export {
|
|
24
|
-
export {
|
|
25
|
-
export {
|
|
26
|
-
export {
|
|
27
|
-
export {
|
|
28
|
-
export {
|
|
29
|
-
export {
|
|
30
|
-
export {
|
|
31
|
-
export {
|
|
32
|
-
export {
|
|
33
|
-
export {
|
|
34
|
-
export {
|
|
35
|
-
export
|
|
36
|
-
export {
|
|
37
|
-
export {
|
|
1
|
+
export { Field, type Fields } from './fields/Field.js';
|
|
2
|
+
export { FieldSet } from './fields/FieldSet.js';
|
|
3
|
+
export { type Shape, Anatomy } from './axis/shape/Shape.js';
|
|
4
|
+
export { type StringFormat, type FormatPredicate, Formats } from './axis/shape/Formats.js';
|
|
5
|
+
export { Role, type RoleRules } from './axis/role/Role.js';
|
|
6
|
+
export { type Relation, type EntityConstructor } from './axis/role/Relation.js';
|
|
7
|
+
export { Lifecycle, type LifecycleRules } from './axis/lifecycle/Lifecycle.js';
|
|
8
|
+
export { type GeneratorRef, Generators } from './axis/lifecycle/Generators.js';
|
|
9
|
+
export { Clock } from './axis/lifecycle/Clock.js';
|
|
10
|
+
export { Boundary, type BoundaryRules, type BoundaryRef } from './axis/boundary/Boundary.js';
|
|
11
|
+
export { type Decoder, type Encoder, Boundaries } from './axis/boundary/Boundaries.js';
|
|
12
|
+
export { type Meta } from './axis/Meta.js';
|
|
13
|
+
export { FieldGroup } from './constraint/FieldGroup.js';
|
|
14
|
+
export { Unique } from './constraint/Unique.js';
|
|
15
|
+
export { Schema, ANONYMOUS_SCHEMA_NAME, type SchemaConstructor } from './schema/Schema.js';
|
|
16
|
+
export { SchemaDerivation } from './schema/SchemaDerivation.js';
|
|
17
|
+
export { isObject } from './judge/ValueForm.js';
|
|
18
|
+
export { Cases, type Case } from './judge/Cases.js';
|
|
19
|
+
export { RowRefusal } from './judge/RowRefusal.js';
|
|
20
|
+
export { type SchemaView, type Row, type PartialRow } from './schema/SchemaView.js';
|
|
21
|
+
export { type FougereEntityAdapters, type EntityAdapters } from './EntityAdapters.js';
|
|
22
|
+
export { lowerFirst, upperFirst } from './utils.js';
|
|
23
|
+
export { primary } from './vocabulary/primary.js';
|
|
24
|
+
export { text } from './vocabulary/text.js';
|
|
25
|
+
export { email } from './vocabulary/email.js';
|
|
26
|
+
export { url } from './vocabulary/url.js';
|
|
27
|
+
export { list } from './vocabulary/list.js';
|
|
28
|
+
export { number } from './vocabulary/number.js';
|
|
29
|
+
export { bool } from './vocabulary/bool.js';
|
|
30
|
+
export { date } from './vocabulary/date.js';
|
|
31
|
+
export { created } from './vocabulary/created.js';
|
|
32
|
+
export { updated } from './vocabulary/updated.js';
|
|
33
|
+
export { oneOf } from './vocabulary/oneOf.js';
|
|
34
|
+
export { ref } from './vocabulary/ref.js';
|
|
35
|
+
export { many } from './vocabulary/many.js';
|
|
36
|
+
export { optional } from './vocabulary/optional.js';
|
|
37
|
+
export { nullable } from './vocabulary/nullable.js';
|
|
38
|
+
export { immutable } from './vocabulary/immutable.js';
|
|
39
|
+
export { unique } from './vocabulary/unique.js';
|
|
40
|
+
export { indexed } from './vocabulary/indexed.js';
|
|
41
|
+
export { readOnly } from './vocabulary/readOnly.js';
|
|
42
|
+
export { writeOnly } from './vocabulary/writeOnly.js';
|
|
43
|
+
export { json } from './vocabulary/json.js';
|
|
44
|
+
export { applyCreate, applyUpdate } from './axis/lifecycle/apply.js';
|
|
45
|
+
export { Visibility } from './projection/Visibility.js';
|
|
46
|
+
export { Card } from './card/Card.js';
|
|
47
|
+
export { Bundle } from './card/Bundle.js';
|
|
48
|
+
export type { Change, Diff, DiffOptions, SetDiff, SetDiffOptions, RenameCandidate, TypeSet } from './card/diff.js';
|
|
49
|
+
export { EntityTypeSource, type EntityTypeSourceOptions } from './card/EntityTypeSource.js';
|
|
50
|
+
export { FacadeTypeSource, type FacadeTypeSourceOptions, type OpDescriptor } from './card/FacadeTypeSource.js';
|
|
51
|
+
export { type SchemaBundle, type SchemaDescriptor, type FieldDescriptor, type FieldExtension, type RoleDescriptor, type RelationDescriptor } from './card/Descriptor.js';
|
|
52
|
+
export { type SchemaOrCard, schemaOf, fieldsOf } from './projection/SchemaOrCard.js';
|
|
53
|
+
export type { StandardSchemaV1 } from './projection/standard.js';
|
|
54
|
+
export { entity } from './entity.js';
|
|
55
|
+
export { FieldJudge } from './judge/FieldJudge.js';
|
|
56
|
+
export { ValueJudge } from './judge/ValueJudge.js';
|
|
57
|
+
export { RowJudge } from './judge/RowJudge.js';
|
|
58
|
+
export { type ValidateOptions } from './judge/options.js';
|
|
59
|
+
export { type ValidationError, type ValidationResult, type Checked } from './judge/result.js';
|
|
38
60
|
//# sourceMappingURL=index.d.ts.map
|