@fougere/schema 0.5.0-alpha.1 → 0.7.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 +5 -4
- package/dist/{schema/Schema.d.ts → Schema.d.ts} +18 -28
- package/dist/Schema.d.ts.map +1 -0
- package/dist/Schema.js +136 -0
- package/dist/Schema.js.map +1 -0
- package/dist/SchemaDefinition.d.ts +73 -0
- package/dist/SchemaDefinition.d.ts.map +1 -0
- package/dist/SchemaDefinition.js +184 -0
- package/dist/SchemaDefinition.js.map +1 -0
- package/dist/SchemaDerivation.d.ts +16 -0
- package/dist/SchemaDerivation.d.ts.map +1 -0
- package/dist/SchemaDerivation.js +31 -0
- package/dist/SchemaDerivation.js.map +1 -0
- package/dist/{schema/SchemaView.d.ts → SchemaView.d.ts} +9 -9
- package/dist/SchemaView.d.ts.map +1 -0
- package/dist/{schema/SchemaView.js.map → SchemaView.js.map} +1 -1
- package/dist/axis/Axis.d.ts +2 -2
- package/dist/axis/Axis.d.ts.map +1 -1
- package/dist/axis/boundary/Boundaries.d.ts +13 -12
- package/dist/axis/boundary/Boundaries.d.ts.map +1 -1
- package/dist/axis/boundary/Boundaries.js +18 -24
- package/dist/axis/boundary/Boundaries.js.map +1 -1
- package/dist/axis/boundary/Boundary.d.ts +3 -1
- package/dist/axis/boundary/Boundary.d.ts.map +1 -1
- package/dist/axis/boundary/Boundary.js +16 -7
- package/dist/axis/boundary/Boundary.js.map +1 -1
- package/dist/axis/boundary/BoundaryAxis.js +4 -4
- package/dist/axis/boundary/BoundaryAxis.js.map +1 -1
- package/dist/axis/lifecycle/Clock.d.ts +1 -1
- package/dist/axis/lifecycle/Clock.d.ts.map +1 -1
- package/dist/axis/lifecycle/Clock.js +1 -1
- package/dist/axis/lifecycle/Clock.js.map +1 -1
- package/dist/axis/lifecycle/Generators.d.ts +6 -14
- package/dist/axis/lifecycle/Generators.d.ts.map +1 -1
- package/dist/axis/lifecycle/Generators.js +10 -28
- package/dist/axis/lifecycle/Generators.js.map +1 -1
- package/dist/axis/lifecycle/LifecycleAxis.js +11 -6
- package/dist/axis/lifecycle/LifecycleAxis.js.map +1 -1
- package/dist/axis/lifecycle/apply.d.ts +14 -5
- package/dist/axis/lifecycle/apply.d.ts.map +1 -1
- package/dist/axis/lifecycle/apply.js +26 -10
- package/dist/axis/lifecycle/apply.js.map +1 -1
- package/dist/axis/role/Relation.d.ts +3 -2
- package/dist/axis/role/Relation.d.ts.map +1 -1
- package/dist/axis/role/Relation.js +6 -5
- package/dist/axis/role/Relation.js.map +1 -1
- package/dist/axis/role/Role.d.ts +6 -6
- package/dist/axis/role/Role.d.ts.map +1 -1
- package/dist/axis/role/Role.js +13 -17
- package/dist/axis/role/Role.js.map +1 -1
- package/dist/axis/role/RoleAxis.d.ts +1 -1
- package/dist/axis/role/RoleAxis.d.ts.map +1 -1
- package/dist/axis/role/RoleAxis.js +28 -37
- package/dist/axis/role/RoleAxis.js.map +1 -1
- package/dist/axis/shape/Formats.d.ts +8 -5
- package/dist/axis/shape/Formats.d.ts.map +1 -1
- package/dist/axis/shape/Formats.js +8 -9
- package/dist/axis/shape/Formats.js.map +1 -1
- package/dist/axis/shape/Shape.d.ts +5 -3
- package/dist/axis/shape/Shape.d.ts.map +1 -1
- package/dist/axis/shape/Shape.js +13 -13
- package/dist/axis/shape/Shape.js.map +1 -1
- package/dist/entity/EntityAdapterSet.d.ts +22 -0
- package/dist/entity/EntityAdapterSet.d.ts.map +1 -0
- package/dist/entity/EntityAdapterSet.js +63 -0
- package/dist/entity/EntityAdapterSet.js.map +1 -0
- package/dist/entity/EntityAdapters.d.ts +5 -0
- package/dist/entity/EntityAdapters.d.ts.map +1 -0
- package/dist/entity/EntityAdapters.js +2 -0
- package/dist/entity/EntityAdapters.js.map +1 -0
- package/dist/{EntityDeclarations.d.ts → entity/EntityDeclarations.d.ts} +2 -7
- package/dist/entity/EntityDeclarations.d.ts.map +1 -0
- package/dist/entity/EntityDeclarations.js.map +1 -0
- package/dist/entity.d.ts +8 -3
- package/dist/entity.d.ts.map +1 -1
- package/dist/entity.js +6 -1
- package/dist/entity.js.map +1 -1
- package/dist/{fields → field}/Field.d.ts +8 -9
- package/dist/field/Field.d.ts.map +1 -0
- package/dist/field/Field.js +35 -0
- package/dist/field/Field.js.map +1 -0
- package/dist/field/FieldSet.d.ts +22 -0
- package/dist/field/FieldSet.d.ts.map +1 -0
- package/dist/field/FieldSet.js +58 -0
- package/dist/field/FieldSet.js.map +1 -0
- package/dist/index.d.ts +24 -28
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -21
- package/dist/index.js.map +1 -1
- package/dist/lib/Registry.d.ts +12 -0
- package/dist/lib/Registry.d.ts.map +1 -0
- package/dist/lib/Registry.js +29 -0
- package/dist/lib/Registry.js.map +1 -0
- package/dist/{utils.d.ts → lib/utils.d.ts} +1 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/{utils.js → lib/utils.js} +1 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/projection/Cases.d.ts +39 -0
- package/dist/projection/Cases.d.ts.map +1 -0
- package/dist/projection/Cases.js +146 -0
- package/dist/projection/Cases.js.map +1 -0
- package/dist/projection/Visibility.d.ts +2 -1
- package/dist/projection/Visibility.d.ts.map +1 -1
- package/dist/projection/Visibility.js +1 -0
- package/dist/projection/Visibility.js.map +1 -1
- package/dist/{card → projection/card}/Bundle.d.ts +1 -1
- package/dist/projection/card/Bundle.d.ts.map +1 -0
- package/dist/{card → projection/card}/Bundle.js +7 -7
- package/dist/projection/card/Bundle.js.map +1 -0
- package/dist/projection/card/Card.d.ts +21 -0
- package/dist/projection/card/Card.d.ts.map +1 -0
- package/dist/{card → projection/card}/Card.js +119 -58
- package/dist/projection/card/Card.js.map +1 -0
- package/dist/{card → projection/card}/Descriptor.d.ts +7 -7
- package/dist/projection/card/Descriptor.d.ts.map +1 -0
- package/dist/projection/card/Descriptor.js.map +1 -0
- package/dist/projection/card/admission.d.ts +20 -0
- package/dist/projection/card/admission.d.ts.map +1 -0
- package/dist/projection/card/admission.js +27 -0
- package/dist/projection/card/admission.js.map +1 -0
- package/dist/{card → projection/card}/diff.d.ts +3 -3
- package/dist/projection/card/diff.d.ts.map +1 -0
- package/dist/{card → projection/card}/diff.js.map +1 -1
- package/dist/{judge/result.d.ts → validation.d.ts} +1 -1
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +2 -0
- package/dist/validation.js.map +1 -0
- package/dist/validator/AdapterFieldValidator.d.ts +14 -0
- package/dist/validator/AdapterFieldValidator.d.ts.map +1 -0
- package/dist/validator/AdapterFieldValidator.js +36 -0
- package/dist/validator/AdapterFieldValidator.js.map +1 -0
- package/dist/validator/FieldDeclarationValidator.d.ts +9 -0
- package/dist/validator/FieldDeclarationValidator.d.ts.map +1 -0
- package/dist/{judge/FieldJudge.js → validator/FieldDeclarationValidator.js} +13 -13
- package/dist/validator/FieldDeclarationValidator.js.map +1 -0
- package/dist/validator/FieldValueValidator.d.ts +13 -0
- package/dist/validator/FieldValueValidator.d.ts.map +1 -0
- package/dist/{judge/ValueJudge.js → validator/FieldValueValidator.js} +14 -11
- package/dist/validator/FieldValueValidator.js.map +1 -0
- package/dist/{judge/RowRefusal.d.ts → validator/InputRefusal.d.ts} +3 -4
- package/dist/validator/InputRefusal.d.ts.map +1 -0
- package/dist/{judge/RowRefusal.js → validator/InputRefusal.js} +3 -3
- package/dist/validator/InputRefusal.js.map +1 -0
- package/dist/validator/InputValidator.d.ts +15 -0
- package/dist/validator/InputValidator.d.ts.map +1 -0
- package/dist/{judge/RowJudge.js → validator/InputValidator.js} +21 -17
- package/dist/validator/InputValidator.js.map +1 -0
- package/dist/vocabulary/bool.d.ts +6 -1
- package/dist/vocabulary/bool.d.ts.map +1 -1
- package/dist/vocabulary/bool.js +6 -1
- package/dist/vocabulary/bool.js.map +1 -1
- package/dist/vocabulary/created.d.ts +6 -1
- package/dist/vocabulary/created.d.ts.map +1 -1
- package/dist/vocabulary/created.js +6 -1
- package/dist/vocabulary/created.js.map +1 -1
- package/dist/vocabulary/date.d.ts +6 -1
- package/dist/vocabulary/date.d.ts.map +1 -1
- package/dist/vocabulary/date.js +6 -1
- package/dist/vocabulary/date.js.map +1 -1
- package/dist/vocabulary/email.d.ts +6 -1
- package/dist/vocabulary/email.d.ts.map +1 -1
- package/dist/vocabulary/email.js +5 -0
- package/dist/vocabulary/email.js.map +1 -1
- package/dist/vocabulary/immutable.d.ts +6 -1
- package/dist/vocabulary/immutable.d.ts.map +1 -1
- package/dist/vocabulary/immutable.js +5 -0
- package/dist/vocabulary/immutable.js.map +1 -1
- package/dist/vocabulary/indexed.d.ts +6 -1
- package/dist/vocabulary/indexed.d.ts.map +1 -1
- package/dist/vocabulary/indexed.js +8 -1
- package/dist/vocabulary/indexed.js.map +1 -1
- package/dist/vocabulary/json.d.ts +2 -2
- package/dist/vocabulary/json.d.ts.map +1 -1
- package/dist/vocabulary/json.js +9 -4
- package/dist/vocabulary/json.js.map +1 -1
- package/dist/vocabulary/list.d.ts +6 -1
- package/dist/vocabulary/list.d.ts.map +1 -1
- package/dist/vocabulary/list.js +6 -1
- package/dist/vocabulary/list.js.map +1 -1
- package/dist/vocabulary/many.d.ts +6 -1
- package/dist/vocabulary/many.d.ts.map +1 -1
- package/dist/vocabulary/many.js +6 -1
- package/dist/vocabulary/many.js.map +1 -1
- package/dist/vocabulary/nullable.d.ts +6 -1
- package/dist/vocabulary/nullable.d.ts.map +1 -1
- package/dist/vocabulary/nullable.js +7 -2
- package/dist/vocabulary/nullable.js.map +1 -1
- package/dist/vocabulary/number.d.ts +6 -1
- package/dist/vocabulary/number.d.ts.map +1 -1
- package/dist/vocabulary/number.js +11 -2
- package/dist/vocabulary/number.js.map +1 -1
- package/dist/vocabulary/oneOf.d.ts +1 -1
- package/dist/vocabulary/oneOf.d.ts.map +1 -1
- package/dist/vocabulary/oneOf.js +6 -1
- package/dist/vocabulary/oneOf.js.map +1 -1
- package/dist/vocabulary/optional.d.ts +6 -1
- package/dist/vocabulary/optional.d.ts.map +1 -1
- package/dist/vocabulary/optional.js +10 -3
- package/dist/vocabulary/optional.js.map +1 -1
- package/dist/vocabulary/primary.d.ts +1 -1
- package/dist/vocabulary/primary.d.ts.map +1 -1
- package/dist/vocabulary/primary.js +10 -5
- package/dist/vocabulary/primary.js.map +1 -1
- package/dist/vocabulary/readOnly.d.ts +6 -1
- package/dist/vocabulary/readOnly.d.ts.map +1 -1
- package/dist/vocabulary/readOnly.js +5 -0
- package/dist/vocabulary/readOnly.js.map +1 -1
- package/dist/vocabulary/ref.d.ts +6 -1
- package/dist/vocabulary/ref.d.ts.map +1 -1
- package/dist/vocabulary/ref.js +6 -1
- package/dist/vocabulary/ref.js.map +1 -1
- package/dist/vocabulary/text.d.ts +6 -1
- package/dist/vocabulary/text.d.ts.map +1 -1
- package/dist/vocabulary/text.js +13 -2
- package/dist/vocabulary/text.js.map +1 -1
- package/dist/vocabulary/unique.d.ts +6 -1
- package/dist/vocabulary/unique.d.ts.map +1 -1
- package/dist/vocabulary/unique.js +8 -4
- package/dist/vocabulary/unique.js.map +1 -1
- package/dist/vocabulary/updated.d.ts +6 -1
- package/dist/vocabulary/updated.d.ts.map +1 -1
- package/dist/vocabulary/updated.js +5 -0
- package/dist/vocabulary/updated.js.map +1 -1
- package/dist/vocabulary/url.d.ts +6 -1
- package/dist/vocabulary/url.d.ts.map +1 -1
- package/dist/vocabulary/url.js +5 -0
- package/dist/vocabulary/url.js.map +1 -1
- package/dist/vocabulary/vocabulary.d.ts +6 -1
- package/dist/vocabulary/vocabulary.d.ts.map +1 -1
- package/dist/vocabulary/vocabulary.js +21 -11
- package/dist/vocabulary/vocabulary.js.map +1 -1
- package/dist/vocabulary/writeOnly.d.ts +6 -1
- package/dist/vocabulary/writeOnly.d.ts.map +1 -1
- package/dist/vocabulary/writeOnly.js +5 -0
- package/dist/vocabulary/writeOnly.js.map +1 -1
- package/package.json +1 -1
- package/src/Schema.ts +208 -0
- package/src/SchemaDefinition.ts +257 -0
- package/src/SchemaDerivation.ts +44 -0
- package/src/{schema/SchemaView.ts → SchemaView.ts} +9 -9
- package/src/axis/Axis.ts +2 -2
- package/src/axis/boundary/Boundaries.ts +25 -32
- package/src/axis/boundary/Boundary.ts +23 -10
- package/src/axis/boundary/BoundaryAxis.ts +4 -4
- package/src/axis/lifecycle/Clock.ts +1 -1
- package/src/axis/lifecycle/Generators.ts +12 -29
- package/src/axis/lifecycle/LifecycleAxis.ts +12 -7
- package/src/axis/lifecycle/apply.ts +30 -15
- package/src/axis/role/Relation.ts +6 -5
- package/src/axis/role/Role.ts +16 -20
- package/src/axis/role/RoleAxis.ts +28 -41
- package/src/axis/shape/Formats.ts +9 -11
- package/src/axis/shape/Shape.ts +18 -18
- package/src/entity/EntityAdapterSet.ts +81 -0
- package/src/entity/EntityAdapters.ts +8 -0
- package/src/entity/EntityDeclarations.ts +16 -0
- package/src/entity.ts +8 -3
- package/src/field/Field.ts +61 -0
- package/src/field/FieldSet.ts +75 -0
- package/src/index.ts +50 -28
- package/src/lib/Registry.ts +37 -0
- package/src/{utils.ts → lib/utils.ts} +3 -0
- package/src/projection/Cases.ts +176 -0
- package/src/projection/Visibility.ts +6 -2
- package/src/{card → projection/card}/Bundle.ts +9 -9
- package/src/projection/card/Card.ts +342 -0
- package/src/{card → projection/card}/Descriptor.ts +7 -7
- package/src/projection/card/admission.ts +40 -0
- package/src/{card → projection/card}/diff.ts +3 -3
- package/src/validator/AdapterFieldValidator.ts +40 -0
- package/src/{judge/FieldJudge.ts → validator/FieldDeclarationValidator.ts} +15 -15
- package/src/{judge/ValueJudge.ts → validator/FieldValueValidator.ts} +18 -13
- package/src/{judge/RowRefusal.ts → validator/InputRefusal.ts} +2 -4
- package/src/{judge/RowJudge.ts → validator/InputValidator.ts} +27 -20
- package/src/vocabulary/bool.ts +8 -2
- package/src/vocabulary/created.ts +7 -2
- package/src/vocabulary/date.ts +6 -1
- package/src/vocabulary/email.ts +6 -1
- package/src/vocabulary/immutable.ts +12 -4
- package/src/vocabulary/indexed.ts +9 -2
- package/src/vocabulary/json.ts +13 -6
- package/src/vocabulary/list.ts +10 -2
- package/src/vocabulary/many.ts +9 -2
- package/src/vocabulary/nullable.ts +13 -5
- package/src/vocabulary/number.ts +13 -3
- package/src/vocabulary/oneOf.ts +11 -3
- package/src/vocabulary/optional.ts +16 -6
- package/src/vocabulary/primary.ts +10 -5
- package/src/vocabulary/readOnly.ts +12 -4
- package/src/vocabulary/ref.ts +10 -2
- package/src/vocabulary/text.ts +15 -3
- package/src/vocabulary/unique.ts +10 -9
- package/src/vocabulary/updated.ts +6 -1
- package/src/vocabulary/url.ts +6 -1
- package/src/vocabulary/vocabulary.ts +21 -12
- package/src/vocabulary/writeOnly.ts +12 -4
- package/dist/EntityAdapters.d.ts +0 -28
- package/dist/EntityAdapters.d.ts.map +0 -1
- package/dist/EntityAdapters.js +0 -75
- package/dist/EntityAdapters.js.map +0 -1
- package/dist/EntityDeclarations.d.ts.map +0 -1
- package/dist/EntityDeclarations.js.map +0 -1
- package/dist/card/Bundle.d.ts.map +0 -1
- package/dist/card/Bundle.js.map +0 -1
- package/dist/card/Card.d.ts +0 -27
- package/dist/card/Card.d.ts.map +0 -1
- package/dist/card/Card.js.map +0 -1
- package/dist/card/Descriptor.d.ts.map +0 -1
- package/dist/card/Descriptor.js.map +0 -1
- package/dist/card/EntityTypeSource.d.ts +0 -12
- package/dist/card/EntityTypeSource.d.ts.map +0 -1
- package/dist/card/EntityTypeSource.js +0 -78
- package/dist/card/EntityTypeSource.js.map +0 -1
- package/dist/card/FacadeTypeSource.d.ts +0 -19
- package/dist/card/FacadeTypeSource.d.ts.map +0 -1
- package/dist/card/FacadeTypeSource.js +0 -40
- package/dist/card/FacadeTypeSource.js.map +0 -1
- package/dist/card/admission.d.ts +0 -9
- package/dist/card/admission.d.ts.map +0 -1
- package/dist/card/admission.js +0 -16
- package/dist/card/admission.js.map +0 -1
- package/dist/card/diff.d.ts.map +0 -1
- package/dist/constraint/FieldGroup.d.ts +0 -21
- package/dist/constraint/FieldGroup.d.ts.map +0 -1
- package/dist/constraint/FieldGroup.js +0 -65
- package/dist/constraint/FieldGroup.js.map +0 -1
- package/dist/constraint/Unique.d.ts +0 -4
- package/dist/constraint/Unique.d.ts.map +0 -1
- package/dist/constraint/Unique.js +0 -4
- package/dist/constraint/Unique.js.map +0 -1
- package/dist/fields/Field.d.ts.map +0 -1
- package/dist/fields/Field.js +0 -52
- package/dist/fields/Field.js.map +0 -1
- package/dist/fields/FieldSet.d.ts +0 -28
- package/dist/fields/FieldSet.d.ts.map +0 -1
- package/dist/fields/FieldSet.js +0 -55
- package/dist/fields/FieldSet.js.map +0 -1
- package/dist/judge/Cases.d.ts +0 -50
- package/dist/judge/Cases.d.ts.map +0 -1
- package/dist/judge/Cases.js +0 -108
- package/dist/judge/Cases.js.map +0 -1
- package/dist/judge/FieldJudge.d.ts +0 -9
- package/dist/judge/FieldJudge.d.ts.map +0 -1
- package/dist/judge/FieldJudge.js.map +0 -1
- package/dist/judge/RowJudge.d.ts +0 -12
- package/dist/judge/RowJudge.d.ts.map +0 -1
- package/dist/judge/RowJudge.js.map +0 -1
- package/dist/judge/RowRefusal.d.ts.map +0 -1
- package/dist/judge/RowRefusal.js.map +0 -1
- package/dist/judge/ValueForm.d.ts +0 -3
- package/dist/judge/ValueForm.d.ts.map +0 -1
- package/dist/judge/ValueForm.js +0 -3
- package/dist/judge/ValueForm.js.map +0 -1
- package/dist/judge/ValueJudge.d.ts +0 -12
- package/dist/judge/ValueJudge.d.ts.map +0 -1
- package/dist/judge/ValueJudge.js.map +0 -1
- package/dist/judge/options.d.ts +0 -4
- package/dist/judge/options.d.ts.map +0 -1
- package/dist/judge/options.js +0 -2
- package/dist/judge/options.js.map +0 -1
- package/dist/judge/result.d.ts.map +0 -1
- package/dist/judge/result.js +0 -2
- package/dist/judge/result.js.map +0 -1
- package/dist/projection/SchemaOrCard.d.ts +0 -7
- package/dist/projection/SchemaOrCard.d.ts.map +0 -1
- package/dist/projection/SchemaOrCard.js +0 -11
- package/dist/projection/SchemaOrCard.js.map +0 -1
- package/dist/schema/Schema.d.ts.map +0 -1
- package/dist/schema/Schema.js +0 -150
- package/dist/schema/Schema.js.map +0 -1
- package/dist/schema/SchemaDefinition.d.ts +0 -60
- package/dist/schema/SchemaDefinition.d.ts.map +0 -1
- package/dist/schema/SchemaDefinition.js +0 -85
- package/dist/schema/SchemaDefinition.js.map +0 -1
- package/dist/schema/SchemaDerivation.d.ts +0 -34
- package/dist/schema/SchemaDerivation.d.ts.map +0 -1
- package/dist/schema/SchemaDerivation.js +0 -46
- package/dist/schema/SchemaDerivation.js.map +0 -1
- package/dist/schema/SchemaView.d.ts.map +0 -1
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js.map +0 -1
- package/src/EntityAdapters.ts +0 -100
- package/src/EntityDeclarations.ts +0 -19
- package/src/card/Card.ts +0 -256
- package/src/card/EntityTypeSource.ts +0 -90
- package/src/card/FacadeTypeSource.ts +0 -55
- package/src/card/admission.ts +0 -25
- package/src/constraint/FieldGroup.ts +0 -91
- package/src/constraint/Unique.ts +0 -3
- package/src/fields/Field.ts +0 -80
- package/src/fields/FieldSet.ts +0 -62
- package/src/judge/Cases.ts +0 -139
- package/src/judge/ValueForm.ts +0 -7
- package/src/judge/options.ts +0 -3
- package/src/projection/SchemaOrCard.ts +0 -18
- package/src/schema/Schema.ts +0 -197
- package/src/schema/SchemaDefinition.ts +0 -120
- package/src/schema/SchemaDerivation.ts +0 -57
- /package/dist/{schema/SchemaView.js → SchemaView.js} +0 -0
- /package/dist/{EntityDeclarations.js → entity/EntityDeclarations.js} +0 -0
- /package/dist/{card → projection/card}/Descriptor.js +0 -0
- /package/dist/{card → projection/card}/diff.js +0 -0
- /package/src/{judge/result.ts → validation.ts} +0 -0
package/README.md
CHANGED
|
@@ -35,13 +35,14 @@ PostDraft['~standard'].validate({ title: '' });
|
|
|
35
35
|
// → { issues: [{ message: 'String is too short (0 < 1).', path: [{ key: 'title' }] }] }
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
Validation is synchronous, and the spec types
|
|
39
|
-
|
|
38
|
+
Validation is synchronous, and the spec types come from the package that publishes them.
|
|
39
|
+
That package is types only — its `index.js` is zero bytes — so a browser pays nothing for
|
|
40
|
+
it.
|
|
40
41
|
|
|
41
|
-
One difference from most vendors, and it is deliberate: **the
|
|
42
|
+
One difference from most vendors, and it is deliberate: **the validator does not fill
|
|
42
43
|
defaults**. A field declared `bool({ default: false })` may be absent — that is legal,
|
|
43
44
|
and the value comes back without the key. Filling belongs to the storage, at the point
|
|
44
|
-
of persistence, so the same input
|
|
45
|
+
of persistence, so the same input validated twice never gains a field on the way through.
|
|
45
46
|
|
|
46
47
|
## Installation
|
|
47
48
|
```bash
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { type Fields } from '
|
|
2
|
-
import { type CompositeUnique, type EntityDeclarations, type PreviousNames } from '
|
|
3
|
-
import { type EntityAdapters } from '
|
|
1
|
+
import { type Fields } from './field/Field.js';
|
|
2
|
+
import { type CompositeUnique, type EntityDeclarations, type PreviousNames } from './entity/EntityDeclarations.js';
|
|
3
|
+
import { type EntityAdapters } from './entity/EntityAdapters.js';
|
|
4
4
|
import { SchemaDerivation } from './SchemaDerivation.js';
|
|
5
|
-
import { SchemaDefinition } from './SchemaDefinition.js';
|
|
6
|
-
import { type ValidateOptions } from '
|
|
7
|
-
import type { StandardSchemaV1 } from '
|
|
8
|
-
import type {
|
|
5
|
+
import { SchemaDefinition, type SchemaConstraints } from './SchemaDefinition.js';
|
|
6
|
+
import { type ValidateOptions } from './validator/InputValidator.js';
|
|
7
|
+
import type { StandardSchemaV1 } from './projection/standard.js';
|
|
8
|
+
import type { PartialValues, Values, SchemaView } from './SchemaView.js';
|
|
9
9
|
export declare const ANONYMOUS_SCHEMA_NAME = "Schema";
|
|
10
10
|
export interface SchemaConstructor<TFields extends Fields> extends SchemaView<TFields> {
|
|
11
|
-
new (data:
|
|
12
|
-
readonly
|
|
11
|
+
new (data: PartialValues<TFields>): Values<TFields>;
|
|
12
|
+
readonly '~standard': StandardSchemaV1.Props<Record<string, unknown>, Values<TFields>>;
|
|
13
13
|
readonly derivation?: SchemaDerivation;
|
|
14
14
|
readonly previous?: PreviousNames<TFields>;
|
|
15
15
|
readonly anchored?: boolean;
|
|
16
|
-
from(data: Record<string, unknown>):
|
|
16
|
+
from(data: Record<string, unknown>): Values<TFields>;
|
|
17
17
|
pick<K extends string & keyof TFields>(...keys: K[]): SchemaConstructor<Pick<TFields, K>>;
|
|
18
18
|
omit<K extends string & keyof TFields>(...keys: K[]): SchemaConstructor<Omit<TFields, K>>;
|
|
19
19
|
partial(): SchemaConstructor<TFields>;
|
|
@@ -27,50 +27,40 @@ export declare class Schema {
|
|
|
27
27
|
/** The one place a schema holds what it is. The readings below are its projections. */
|
|
28
28
|
static definition: SchemaDefinition;
|
|
29
29
|
static get fields(): Fields;
|
|
30
|
-
|
|
30
|
+
/** An entry survives every derivation that kept its field: `Post.pick('body').adapters`. */
|
|
31
|
+
static get adapters(): EntityAdapters<Fields>;
|
|
31
32
|
static get opts(): ValidateOptions;
|
|
32
33
|
static get derivation(): SchemaDerivation | undefined;
|
|
33
34
|
static get previous(): PreviousNames<Fields> | undefined;
|
|
35
|
+
/** An anchor holds rows of its own; a derivation borrows them. */
|
|
34
36
|
static get anchored(): boolean;
|
|
35
37
|
constructor(data?: Record<string, unknown>);
|
|
36
38
|
static getFields(): Fields;
|
|
37
|
-
static getAdapters(): Readonly<Partial<import("
|
|
39
|
+
static getAdapters(): Readonly<Partial<import("./entity/EntityAdapters.js").FougereEntityAdapters<string>>>;
|
|
38
40
|
static getUnique(): CompositeUnique<Fields> | undefined;
|
|
39
41
|
static getOpts(): ValidateOptions;
|
|
40
|
-
static validate(input: unknown): import("
|
|
42
|
+
static validate(input: unknown): import("./validation.js").ValidationResult<Record<string, unknown>>;
|
|
41
43
|
static from(data: Record<string, unknown>): Record<string, unknown>;
|
|
42
|
-
static get [
|
|
44
|
+
static get ['~standard'](): StandardSchemaV1.Props<Record<string, unknown>>;
|
|
43
45
|
static pick(...keys: string[]): SchemaConstructor<Fields>;
|
|
44
46
|
static omit(...keys: string[]): SchemaConstructor<Fields>;
|
|
45
47
|
static rename(mapping: Record<string, string>): SchemaConstructor<Fields>;
|
|
46
|
-
/**
|
|
47
|
-
* Everything a schema states about ITSELF, available wherever a schema is. `entity(fields, …)`
|
|
48
|
-
* is this same gesture at the declaration site; the fields do not move, so neither does the type.
|
|
49
|
-
*/
|
|
50
48
|
static declares(declarations: EntityDeclarations<Fields>): SchemaConstructor<Fields>;
|
|
51
|
-
/**
|
|
52
|
-
* This schema holds rows of its own — every entity is one, and a derivation says so.
|
|
53
|
-
*
|
|
54
|
-
* An anchor is where a walk STOPS: `derivation.anchor` climbs to the nearest one, and what
|
|
55
|
-
* is cut from an anchor roots on it. Two anchors are two entities that happen to share a
|
|
56
|
-
* shape, never a hierarchy — nothing here subtypes, so a relation between them is `ref()`.
|
|
57
|
-
*/
|
|
58
49
|
static anchor(): SchemaConstructor<Fields>;
|
|
59
50
|
static partial(): SchemaConstructor<Fields>;
|
|
60
51
|
static extend(extra: Fields): SchemaConstructor<Fields>;
|
|
61
52
|
static named(name: string): typeof Schema;
|
|
62
53
|
static compose<T extends SchemaView[]>(...sources: T): SchemaConstructor<Merged<T>>;
|
|
63
|
-
static of<TFields extends Fields>(
|
|
54
|
+
static of<TFields extends Fields>(declaration: {
|
|
64
55
|
fields: TFields;
|
|
65
56
|
derivation?: SchemaDerivation;
|
|
66
57
|
adapters?: EntityAdapters<TFields>;
|
|
67
58
|
opts?: ValidateOptions;
|
|
68
59
|
previous?: PreviousNames<TFields>;
|
|
69
60
|
anchored?: boolean;
|
|
61
|
+
constraints?: SchemaConstraints;
|
|
70
62
|
}): SchemaConstructor<TFields>;
|
|
71
|
-
/** The class a definition becomes. The one place a Schema subclass is born. */
|
|
72
63
|
private static subclass;
|
|
73
|
-
private static derive;
|
|
74
64
|
}
|
|
75
65
|
type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
76
66
|
type Merged<T extends SchemaView[]> = UnionToIntersection<T[number] extends {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
|
package/dist/Schema.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { Boundary } from './axis/boundary/Boundary.js';
|
|
2
|
+
import { InputValidator } from './validator/InputValidator.js';
|
|
3
|
+
import { SchemaDefinition } from './SchemaDefinition.js';
|
|
4
|
+
export const ANONYMOUS_SCHEMA_NAME = 'Schema';
|
|
5
|
+
export class Schema {
|
|
6
|
+
/** The one place a schema holds what it is. The readings below are its projections. */
|
|
7
|
+
static definition = SchemaDefinition.of({ fields: {} });
|
|
8
|
+
static get fields() {
|
|
9
|
+
return this.definition.fields;
|
|
10
|
+
}
|
|
11
|
+
/** An entry survives every derivation that kept its field: `Post.pick('body').adapters`. */
|
|
12
|
+
static get adapters() {
|
|
13
|
+
return this.definition.adapterSet.adapters;
|
|
14
|
+
}
|
|
15
|
+
static get opts() {
|
|
16
|
+
return this.definition.opts;
|
|
17
|
+
}
|
|
18
|
+
static get derivation() {
|
|
19
|
+
return this.definition.derivation;
|
|
20
|
+
}
|
|
21
|
+
static get previous() {
|
|
22
|
+
return this.definition.previous;
|
|
23
|
+
}
|
|
24
|
+
/** An anchor holds rows of its own; a derivation borrows them. */
|
|
25
|
+
static get anchored() {
|
|
26
|
+
return this.definition.anchored;
|
|
27
|
+
}
|
|
28
|
+
constructor(data) {
|
|
29
|
+
if (!data)
|
|
30
|
+
return;
|
|
31
|
+
for (const [key, value] of Object.entries(data)) {
|
|
32
|
+
Object.defineProperty(this, key, {
|
|
33
|
+
value,
|
|
34
|
+
writable: true,
|
|
35
|
+
enumerable: true,
|
|
36
|
+
configurable: true,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
static getFields() {
|
|
41
|
+
return this.fields;
|
|
42
|
+
}
|
|
43
|
+
static getAdapters() {
|
|
44
|
+
return this.adapters;
|
|
45
|
+
}
|
|
46
|
+
static getUnique() {
|
|
47
|
+
return this.definition.constraints.unique;
|
|
48
|
+
}
|
|
49
|
+
static getOpts() {
|
|
50
|
+
return this.opts;
|
|
51
|
+
}
|
|
52
|
+
static validate(input) {
|
|
53
|
+
return InputValidator.of(this.fields, this.opts).validate(input);
|
|
54
|
+
}
|
|
55
|
+
static from(data) {
|
|
56
|
+
const row = {};
|
|
57
|
+
for (const [key, field] of Object.entries(this.fields)) {
|
|
58
|
+
if (!(key in data))
|
|
59
|
+
continue;
|
|
60
|
+
const value = data[key];
|
|
61
|
+
if (value === null || value === undefined) {
|
|
62
|
+
row[key] = value;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const decoded = Boundary.of(field).decode(value);
|
|
66
|
+
row[key] = 'error' in decoded ? value : decoded.value;
|
|
67
|
+
}
|
|
68
|
+
return row;
|
|
69
|
+
}
|
|
70
|
+
static get ['~standard']() {
|
|
71
|
+
const { fields, opts } = this;
|
|
72
|
+
return {
|
|
73
|
+
version: 1,
|
|
74
|
+
vendor: 'fougere',
|
|
75
|
+
validate(value) {
|
|
76
|
+
const verdict = InputValidator.of(fields, opts).validate(value);
|
|
77
|
+
if (verdict.success)
|
|
78
|
+
return { value: verdict.data };
|
|
79
|
+
return {
|
|
80
|
+
issues: verdict.errors.map((e) => ({
|
|
81
|
+
message: e.message,
|
|
82
|
+
path: e.path && e.path !== '.' ? [{ key: e.path }] : undefined,
|
|
83
|
+
})),
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
static pick(...keys) {
|
|
89
|
+
return Schema.subclass(this.definition.pick(keys, this));
|
|
90
|
+
}
|
|
91
|
+
static omit(...keys) {
|
|
92
|
+
return Schema.subclass(this.definition.omit(keys, this));
|
|
93
|
+
}
|
|
94
|
+
static rename(mapping) {
|
|
95
|
+
return Schema.subclass(this.definition.rename(mapping, this));
|
|
96
|
+
}
|
|
97
|
+
static declares(declarations) {
|
|
98
|
+
return Schema.subclass(this.definition.declaring(declarations));
|
|
99
|
+
}
|
|
100
|
+
static anchor() {
|
|
101
|
+
return Schema.subclass(this.definition.anchoring());
|
|
102
|
+
}
|
|
103
|
+
static partial() {
|
|
104
|
+
return Schema.subclass(this.definition.patched(this));
|
|
105
|
+
}
|
|
106
|
+
static extend(extra) {
|
|
107
|
+
return Schema.subclass(this.definition.extended(extra, this));
|
|
108
|
+
}
|
|
109
|
+
static named(name) {
|
|
110
|
+
if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name)) {
|
|
111
|
+
throw new Error(`named(): \`${name}\` is not a valid class name.`);
|
|
112
|
+
}
|
|
113
|
+
if (this.name !== ANONYMOUS_SCHEMA_NAME) {
|
|
114
|
+
throw new Error(`named(): \`${this.name}\` is already named by its class declaration.`);
|
|
115
|
+
}
|
|
116
|
+
Object.defineProperty(this, 'name', { value: name, configurable: true });
|
|
117
|
+
return this;
|
|
118
|
+
}
|
|
119
|
+
static compose(...sources) {
|
|
120
|
+
return Schema.subclass(SchemaDefinition.merged(sources));
|
|
121
|
+
}
|
|
122
|
+
static of(declaration) {
|
|
123
|
+
return Schema.subclass(SchemaDefinition.of(declaration));
|
|
124
|
+
}
|
|
125
|
+
static subclass(definition) {
|
|
126
|
+
class Derived extends Schema {
|
|
127
|
+
}
|
|
128
|
+
Derived.definition = definition;
|
|
129
|
+
Object.defineProperty(Derived, 'name', {
|
|
130
|
+
value: ANONYMOUS_SCHEMA_NAME,
|
|
131
|
+
configurable: true,
|
|
132
|
+
});
|
|
133
|
+
return Derived;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=Schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Schema.js","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAQvD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAA0B,MAAM,uBAAuB,CAAC;AAKjF,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC;AAyB9C,MAAM,OAAO,MAAM;IACjB,uFAAuF;IACvF,MAAM,CAAC,UAAU,GAAqB,gBAAgB,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAE1E,MAAM,KAAK,MAAM;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAChC,CAAC;IACD,4FAA4F;IAC5F,MAAM,KAAK,QAAQ;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;IAC7C,CAAC;IACD,MAAM,KAAK,IAAI;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9B,CAAC;IACD,MAAM,KAAK,UAAU;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;IACpC,CAAC;IACD,MAAM,KAAK,QAAQ;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;IAClC,CAAC;IACD,kEAAkE;IAClE,MAAM,KAAK,QAAQ;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,YAAY,IAA8B;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE;gBAC/B,KAAK;gBACL,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,CAAC,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,MAAM,CAAC,SAAS;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC;IAC5C,CAAC;IACD,MAAM,CAAC,OAAO;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,KAAc;QAC5B,OAAO,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,IAA6B;QACvC,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;gBAAE,SAAS;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACjB,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjD,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QACxD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,KAAK,CAAC,WAAW,CAAC;QACtB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAC9B,OAAO;YACL,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,SAAS;YACjB,QAAQ,CAAC,KAAc;gBACrB,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAChE,IAAI,OAAO,CAAC,OAAO;oBAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;gBACpD,OAAO;oBACL,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACjC,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;qBAC/D,CAAC,CAAC;iBACJ,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,IAAc;QAC3B,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,IAAc;QAC3B,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAA+B;QAC3C,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,YAAwC;QACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,OAAO;QACZ,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAAa;QACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAY;QACvB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,+BAA+B,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,cAAc,IAAI,CAAC,IAAI,+CAA+C,CACvE,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,OAAO,CAAyB,GAAG,OAAU;QAClD,OAAO,MAAM,CAAC,QAAQ,CACpB,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CACU,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,EAAE,CAAyB,WAQjC;QACC,OAAO,MAAM,CAAC,QAAQ,CACpB,gBAAgB,CAAC,EAAE,CAAC,WAAW,CAAC,CACQ,CAAC;IAC7C,CAAC;IAEO,MAAM,CAAC,QAAQ,CAAC,UAA4B;QAClD,MAAM,OAAQ,SAAQ,MAAM;SAAG;QAC/B,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;QAChC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE;YACrC,KAAK,EAAE,qBAAqB;YAC5B,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,OAAO,OAA+C,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type Fields } from './field/Field.js';
|
|
2
|
+
import { type CompositeUnique, type EntityDeclarations, type PreviousNames } from './entity/EntityDeclarations.js';
|
|
3
|
+
import { type EntityAdapters } from './entity/EntityAdapters.js';
|
|
4
|
+
import { EntityAdapterSet } from './entity/EntityAdapterSet.js';
|
|
5
|
+
import { SchemaDerivation } from './SchemaDerivation.js';
|
|
6
|
+
import { type ValidateOptions } from './validator/InputValidator.js';
|
|
7
|
+
import type { SchemaView } from './SchemaView.js';
|
|
8
|
+
/**
|
|
9
|
+
* What a schema constrains beyond any single field.
|
|
10
|
+
*
|
|
11
|
+
* `unique` is the one member today. It sits under an owner rather than beside `fields`
|
|
12
|
+
* and `opts` because the next rule spanning two fields — a check, an exclusion — is a
|
|
13
|
+
* member here, not an eighth positional argument in a list that has already lost one.
|
|
14
|
+
*/
|
|
15
|
+
export interface SchemaConstraints<TFields extends Fields = Fields> {
|
|
16
|
+
readonly unique?: CompositeUnique<TFields>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Everything a schema IS, apart from being a class whose instances are rows.
|
|
20
|
+
*
|
|
21
|
+
* The members used to be that many statics assigned side by side, and every derivation
|
|
22
|
+
* re-threaded them by hand — which is how one of them came to be dropped from a list
|
|
23
|
+
* without anyone noticing. A transformation here returns a COMPLETE definition or it does
|
|
24
|
+
* not compile, so no gesture can mix the fields of one with the options of another.
|
|
25
|
+
*
|
|
26
|
+
* Internal: it is not exported from the package and never appears on `SchemaConstructor`.
|
|
27
|
+
* A user derives with `Order.pick(…)`, never `Order.definition.pick(…)`.
|
|
28
|
+
*/
|
|
29
|
+
export declare class SchemaDefinition {
|
|
30
|
+
readonly fields: Fields;
|
|
31
|
+
readonly adapterSet: EntityAdapterSet;
|
|
32
|
+
readonly opts: ValidateOptions;
|
|
33
|
+
readonly previous: PreviousNames<Fields> | undefined;
|
|
34
|
+
readonly derivation: SchemaDerivation | undefined;
|
|
35
|
+
readonly anchored: boolean;
|
|
36
|
+
readonly constraints: SchemaConstraints;
|
|
37
|
+
private constructor();
|
|
38
|
+
/** Built complete or not at all — no static assigned on the side. */
|
|
39
|
+
static of(declaration: {
|
|
40
|
+
fields: Fields;
|
|
41
|
+
adapters?: EntityAdapters<Fields>;
|
|
42
|
+
opts?: ValidateOptions;
|
|
43
|
+
previous?: PreviousNames<Fields>;
|
|
44
|
+
derivation?: SchemaDerivation;
|
|
45
|
+
anchored?: boolean;
|
|
46
|
+
constraints?: SchemaConstraints;
|
|
47
|
+
}): SchemaDefinition;
|
|
48
|
+
declaring(declarations: EntityDeclarations<Fields>): SchemaDefinition;
|
|
49
|
+
anchoring(): SchemaDefinition;
|
|
50
|
+
pick(keys: readonly string[], root: SchemaView): SchemaDefinition;
|
|
51
|
+
omit(keys: readonly string[], root: SchemaView): SchemaDefinition;
|
|
52
|
+
rename(mapping: Record<string, string>, root: SchemaView): SchemaDefinition;
|
|
53
|
+
/**
|
|
54
|
+
* `pick`, `omit` and `rename` are one gesture, and the renaming IS that gesture: the
|
|
55
|
+
* fields it keeps and everything else addressed by field name are both read from it.
|
|
56
|
+
*/
|
|
57
|
+
private renaming;
|
|
58
|
+
/** One member gone and the group is gone: it constrained a pair that no longer exists. */
|
|
59
|
+
private constraintsRenamed;
|
|
60
|
+
patched(root: SchemaView): SchemaDefinition;
|
|
61
|
+
/** An added field does not pretend to come from the root, which never declared it. */
|
|
62
|
+
extended(extra: Fields, root: SchemaView): SchemaDefinition;
|
|
63
|
+
/** Several schemas fold into one, which has no single origin to point at. */
|
|
64
|
+
static merged(views: readonly SchemaView[]): SchemaDefinition;
|
|
65
|
+
/**
|
|
66
|
+
* So a gesture naming a field that does not exist says so, and lists what there is.
|
|
67
|
+
* FR : pour qu'un geste nommant un champ inexistant le dise, et énumère ce qui existe.
|
|
68
|
+
* `pick('titel')` → `pick(): unknown field \`titel\`. This schema carries id, title, body.`
|
|
69
|
+
*/
|
|
70
|
+
private assertKnown;
|
|
71
|
+
private origin;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=SchemaDefinition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaDefinition.d.ts","sourceRoot":"","sources":["../src/SchemaDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IAChE,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;CAC5C;AAsBD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,UAAU,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAClD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IAExC,OAAO,eAQN;IAED,qEAAqE;IACrE,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,eAAe,CAAC;QACvB,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QACjC,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE,iBAAiB,CAAC;KACjC,GAAG,gBAAgB,CAUnB;IAED,SAAS,CAAC,YAAY,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAqBpE;IAED,SAAS,IAAI,gBAAgB,CAU5B;IAED,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAIhE;IAED,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAKhE;IAED,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAK1E;IAED;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAmBhB,0FAA0F;IAC1F,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAU1C;IAED,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAU1D;IAED,6EAA6E;IAC7E,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,gBAAgB,CAqB5D;IAED;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,MAAM;CAKf"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { FieldSet, deduplicated } from './field/FieldSet.js';
|
|
2
|
+
import { EntityAdapterSet } from './entity/EntityAdapterSet.js';
|
|
3
|
+
import { SchemaDerivation } from './SchemaDerivation.js';
|
|
4
|
+
/**
|
|
5
|
+
* Everything a schema IS, apart from being a class whose instances are rows.
|
|
6
|
+
*
|
|
7
|
+
* The members used to be that many statics assigned side by side, and every derivation
|
|
8
|
+
* re-threaded them by hand — which is how one of them came to be dropped from a list
|
|
9
|
+
* without anyone noticing. A transformation here returns a COMPLETE definition or it does
|
|
10
|
+
* not compile, so no gesture can mix the fields of one with the options of another.
|
|
11
|
+
*
|
|
12
|
+
* Internal: it is not exported from the package and never appears on `SchemaConstructor`.
|
|
13
|
+
* A user derives with `Order.pick(…)`, never `Order.definition.pick(…)`.
|
|
14
|
+
*/
|
|
15
|
+
export class SchemaDefinition {
|
|
16
|
+
fields;
|
|
17
|
+
adapterSet;
|
|
18
|
+
opts;
|
|
19
|
+
previous;
|
|
20
|
+
derivation;
|
|
21
|
+
anchored;
|
|
22
|
+
constraints;
|
|
23
|
+
constructor(state) {
|
|
24
|
+
this.fields = state.fields;
|
|
25
|
+
this.adapterSet = state.adapterSet;
|
|
26
|
+
this.opts = state.opts;
|
|
27
|
+
this.previous = state.previous;
|
|
28
|
+
this.derivation = state.derivation;
|
|
29
|
+
this.anchored = state.anchored;
|
|
30
|
+
this.constraints = state.constraints;
|
|
31
|
+
}
|
|
32
|
+
/** Built complete or not at all — no static assigned on the side. */
|
|
33
|
+
static of(declaration) {
|
|
34
|
+
return new SchemaDefinition({
|
|
35
|
+
fields: declaration.fields,
|
|
36
|
+
adapterSet: EntityAdapterSet.of(declaration.adapters),
|
|
37
|
+
opts: declaration.opts ?? {},
|
|
38
|
+
previous: declaration.previous,
|
|
39
|
+
derivation: declaration.derivation,
|
|
40
|
+
anchored: declaration.anchored ?? false,
|
|
41
|
+
constraints: declaration.constraints ?? {},
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
declaring(declarations) {
|
|
45
|
+
const addressed = EntityAdapterSet.of(declarations.adapters).fieldNames;
|
|
46
|
+
this.assertKnown('declares', [
|
|
47
|
+
...addressed,
|
|
48
|
+
...Object.keys(declarations.previous ?? {}),
|
|
49
|
+
]);
|
|
50
|
+
const declared = FieldSet.declaring(this.fields, declarations.unique);
|
|
51
|
+
return new SchemaDefinition({
|
|
52
|
+
fields: declared.fields,
|
|
53
|
+
adapterSet: EntityAdapterSet.merged([
|
|
54
|
+
this.adapterSet,
|
|
55
|
+
EntityAdapterSet.of(declarations.adapters),
|
|
56
|
+
]),
|
|
57
|
+
opts: this.opts,
|
|
58
|
+
previous: declarations.previous ?? this.previous,
|
|
59
|
+
derivation: this.derivation,
|
|
60
|
+
anchored: this.anchored,
|
|
61
|
+
constraints: declarations.unique === undefined ? this.constraints : { unique: declared.unique },
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
anchoring() {
|
|
65
|
+
return new SchemaDefinition({
|
|
66
|
+
fields: this.fields,
|
|
67
|
+
adapterSet: this.adapterSet,
|
|
68
|
+
opts: this.opts,
|
|
69
|
+
previous: this.previous,
|
|
70
|
+
derivation: this.derivation,
|
|
71
|
+
anchored: true,
|
|
72
|
+
constraints: this.constraints,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
pick(keys, root) {
|
|
76
|
+
this.assertKnown('pick', keys);
|
|
77
|
+
return this.renaming(new Map(keys.map((key) => [key, key])), root);
|
|
78
|
+
}
|
|
79
|
+
omit(keys, root) {
|
|
80
|
+
this.assertKnown('omit', keys);
|
|
81
|
+
const kept = Object.keys(this.fields).filter((key) => !keys.includes(key));
|
|
82
|
+
return this.renaming(new Map(kept.map((key) => [key, key])), root);
|
|
83
|
+
}
|
|
84
|
+
rename(mapping, root) {
|
|
85
|
+
this.assertKnown('rename', Object.keys(mapping));
|
|
86
|
+
const here = Object.keys(this.fields).map((key) => [key, mapping[key] ?? key]);
|
|
87
|
+
return this.renaming(new Map(here), root);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* `pick`, `omit` and `rename` are one gesture, and the renaming IS that gesture: the
|
|
91
|
+
* fields it keeps and everything else addressed by field name are both read from it.
|
|
92
|
+
*/
|
|
93
|
+
renaming(kept, root) {
|
|
94
|
+
const fields = {};
|
|
95
|
+
for (const [from, to] of kept) {
|
|
96
|
+
const field = this.fields[from];
|
|
97
|
+
if (field)
|
|
98
|
+
fields[to] = field;
|
|
99
|
+
}
|
|
100
|
+
const nameOf = (key) => kept.get(key);
|
|
101
|
+
return new SchemaDefinition({
|
|
102
|
+
fields,
|
|
103
|
+
adapterSet: this.adapterSet.rename(nameOf),
|
|
104
|
+
opts: this.opts,
|
|
105
|
+
previous: undefined,
|
|
106
|
+
derivation: this.origin(root).rename(nameOf),
|
|
107
|
+
anchored: false,
|
|
108
|
+
constraints: this.constraintsRenamed(nameOf),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/** One member gone and the group is gone: it constrained a pair that no longer exists. */
|
|
112
|
+
constraintsRenamed(transform) {
|
|
113
|
+
if (!this.constraints.unique)
|
|
114
|
+
return this.constraints;
|
|
115
|
+
const kept = [];
|
|
116
|
+
for (const group of this.constraints.unique) {
|
|
117
|
+
const renamed = group.map(transform);
|
|
118
|
+
if (renamed.every((key) => key !== undefined))
|
|
119
|
+
kept.push(renamed);
|
|
120
|
+
}
|
|
121
|
+
return { unique: deduplicated(kept) };
|
|
122
|
+
}
|
|
123
|
+
patched(root) {
|
|
124
|
+
return new SchemaDefinition({
|
|
125
|
+
fields: { ...this.fields },
|
|
126
|
+
adapterSet: this.adapterSet,
|
|
127
|
+
opts: { ...this.opts, patch: true },
|
|
128
|
+
previous: undefined,
|
|
129
|
+
derivation: this.origin(root),
|
|
130
|
+
anchored: false,
|
|
131
|
+
constraints: this.constraints,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/** An added field does not pretend to come from the root, which never declared it. */
|
|
135
|
+
extended(extra, root) {
|
|
136
|
+
return new SchemaDefinition({
|
|
137
|
+
fields: { ...this.fields, ...extra },
|
|
138
|
+
adapterSet: this.adapterSet,
|
|
139
|
+
opts: this.opts,
|
|
140
|
+
previous: undefined,
|
|
141
|
+
derivation: this.origin(root),
|
|
142
|
+
anchored: false,
|
|
143
|
+
constraints: this.constraints,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/** Several schemas fold into one, which has no single origin to point at. */
|
|
147
|
+
static merged(views) {
|
|
148
|
+
const fields = {};
|
|
149
|
+
let opts = {};
|
|
150
|
+
const groups = [];
|
|
151
|
+
for (const view of views) {
|
|
152
|
+
Object.assign(fields, view.getFields());
|
|
153
|
+
opts = { ...opts, ...view.getOpts() };
|
|
154
|
+
groups.push(...(view.getUnique() ?? []));
|
|
155
|
+
}
|
|
156
|
+
return new SchemaDefinition({
|
|
157
|
+
fields,
|
|
158
|
+
adapterSet: EntityAdapterSet.merged(views.map((view) => EntityAdapterSet.of(view.getAdapters()))),
|
|
159
|
+
opts,
|
|
160
|
+
previous: undefined,
|
|
161
|
+
derivation: undefined,
|
|
162
|
+
anchored: false,
|
|
163
|
+
constraints: { unique: deduplicated(groups) },
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* So a gesture naming a field that does not exist says so, and lists what there is.
|
|
168
|
+
* FR : pour qu'un geste nommant un champ inexistant le dise, et énumère ce qui existe.
|
|
169
|
+
* `pick('titel')` → `pick(): unknown field \`titel\`. This schema carries id, title, body.`
|
|
170
|
+
*/
|
|
171
|
+
assertKnown(operation, keys) {
|
|
172
|
+
const strangers = keys.filter((key) => !(key in this.fields));
|
|
173
|
+
if (strangers.length === 0)
|
|
174
|
+
return;
|
|
175
|
+
throw new Error(`${operation}(): unknown field ${strangers.map((s) => `\`${s}\``).join(', ')}. ` +
|
|
176
|
+
`This schema carries ${Object.keys(this.fields).join(', ')}.`);
|
|
177
|
+
}
|
|
178
|
+
origin(root) {
|
|
179
|
+
if (!this.anchored && this.derivation)
|
|
180
|
+
return this.derivation;
|
|
181
|
+
return SchemaDerivation.first(root, this.fields);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=SchemaDefinition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaDefinition.js","sourceRoot":"","sources":["../src/SchemaDefinition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Fields } from './field/Field.js';
|
|
2
|
+
import type { SchemaView } from './SchemaView.js';
|
|
3
|
+
/**
|
|
4
|
+
* The origin is the ROOT: `Post.pick(a, b).omit(b)` answers `Post`, never the intermediate.
|
|
5
|
+
*/
|
|
6
|
+
export declare class SchemaDerivation {
|
|
7
|
+
readonly source: SchemaView;
|
|
8
|
+
readonly nameOf: Readonly<Record<string, string | undefined>>;
|
|
9
|
+
private constructor();
|
|
10
|
+
static first(source: SchemaView, fields: Fields): SchemaDerivation;
|
|
11
|
+
rename(transform: (key: string) => string | undefined): SchemaDerivation;
|
|
12
|
+
get sourceName(): string;
|
|
13
|
+
/** Whose rows this one borrows, however many cuts away: `Post.pick('t').omit('t')` → `Post`. */
|
|
14
|
+
get anchor(): SchemaView;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=SchemaDerivation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaDerivation.d.ts","sourceRoot":"","sources":["../src/SchemaDerivation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,QAAQ,CAAC,MAAM,EAAE,UAAU;IAC3B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAF/D,OAAO,eAGH;IAEJ,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAKjE;IAED,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAUvE;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,gGAAgG;IAChG,IAAI,MAAM,IAAI,UAAU,CAMvB;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The origin is the ROOT: `Post.pick(a, b).omit(b)` answers `Post`, never the intermediate.
|
|
3
|
+
*/
|
|
4
|
+
export class SchemaDerivation {
|
|
5
|
+
source;
|
|
6
|
+
nameOf;
|
|
7
|
+
constructor(source, nameOf) {
|
|
8
|
+
this.source = source;
|
|
9
|
+
this.nameOf = nameOf;
|
|
10
|
+
}
|
|
11
|
+
static first(source, fields) {
|
|
12
|
+
return new SchemaDerivation(source, Object.fromEntries(Object.keys(fields).map((key) => [key, key])));
|
|
13
|
+
}
|
|
14
|
+
rename(transform) {
|
|
15
|
+
return new SchemaDerivation(this.source, Object.fromEntries(Object.entries(this.nameOf).map(([origin, here]) => [
|
|
16
|
+
origin,
|
|
17
|
+
here === undefined ? undefined : transform(here),
|
|
18
|
+
])));
|
|
19
|
+
}
|
|
20
|
+
get sourceName() {
|
|
21
|
+
return this.source.name;
|
|
22
|
+
}
|
|
23
|
+
/** Whose rows this one borrows, however many cuts away: `Post.pick('t').omit('t')` → `Post`. */
|
|
24
|
+
get anchor() {
|
|
25
|
+
const source = this.source;
|
|
26
|
+
return source.anchored !== undefined || !source.derivation
|
|
27
|
+
? source
|
|
28
|
+
: source.derivation.anchor;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=SchemaDerivation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaDerivation.js","sourceRoot":"","sources":["../src/SchemaDerivation.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAEhB,MAAM;IACN,MAAM;IAFjB,YACW,MAAkB,EAClB,MAAoD;sBADpD,MAAM;sBACN,MAAM;IACd,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,MAAkB,EAAE,MAAc;QAC7C,OAAO,IAAI,gBAAgB,CACzB,MAAM,EACN,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CACjE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,SAA8C;QACnD,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,MAAM,EACX,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM;YACN,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;SACjD,CAAC,CACH,CACF,CAAC;IACJ,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,gGAAgG;IAChG,IAAI,MAAM;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,UAAU;YACxD,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import type { Field, Fields } from '
|
|
2
|
-
import type { CompositeUnique, PreviousNames } from '
|
|
3
|
-
import type { EntityAdapters } from '
|
|
4
|
-
import type { ValidationResult } from '
|
|
5
|
-
import type { ValidateOptions } from '
|
|
1
|
+
import type { Field, Fields } from './field/Field.js';
|
|
2
|
+
import type { CompositeUnique, PreviousNames } from './entity/EntityDeclarations.js';
|
|
3
|
+
import type { EntityAdapters } from './entity/EntityAdapters.js';
|
|
4
|
+
import type { ValidationResult } from './validation.js';
|
|
5
|
+
import type { ValidateOptions } from './validator/InputValidator.js';
|
|
6
6
|
import type { SchemaDerivation } from './SchemaDerivation.js';
|
|
7
|
-
export type
|
|
7
|
+
export type Values<TFields extends Fields> = {
|
|
8
8
|
[K in keyof TFields]: TFields[K] extends Field<infer T> ? T : never;
|
|
9
9
|
};
|
|
10
|
-
export type
|
|
10
|
+
export type PartialValues<TFields extends Fields> = Partial<Values<TFields>>;
|
|
11
11
|
export interface SchemaView<TFields extends Fields = Fields> {
|
|
12
12
|
readonly name: string;
|
|
13
13
|
/** What this schema was cut from, when it was cut from anything. */
|
|
@@ -17,9 +17,9 @@ export interface SchemaView<TFields extends Fields = Fields> {
|
|
|
17
17
|
/** Does it hold rows of its own? False on a derivation means an answer. */
|
|
18
18
|
readonly anchored?: boolean;
|
|
19
19
|
getFields(): TFields;
|
|
20
|
-
getAdapters(): EntityAdapters<TFields
|
|
20
|
+
getAdapters(): EntityAdapters<TFields>;
|
|
21
21
|
getUnique(): CompositeUnique<TFields> | undefined;
|
|
22
22
|
getOpts(): ValidateOptions;
|
|
23
|
-
validate(input: unknown): ValidationResult<
|
|
23
|
+
validate(input: unknown): ValidationResult<Values<TFields>>;
|
|
24
24
|
}
|
|
25
25
|
//# sourceMappingURL=SchemaView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaView.d.ts","sourceRoot":"","sources":["../src/SchemaView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,MAAM,MAAM,CAAC,OAAO,SAAS,MAAM,IAAI;KAC1C,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CACpE,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7E,MAAM,WAAW,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IACvC,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,IAAI,OAAO,CAAC;IACrB,WAAW,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IACvC,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAClD,OAAO,IAAI,eAAe,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;CAC7D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaView.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"SchemaView.js","sourceRoot":"","sources":["../src/SchemaView.ts"],"names":[],"mappings":""}
|