@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/dist/axis/role/Role.d.ts
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { EntityConstructor, Relation } from "./Relation.js";
|
|
1
|
+
import type { EntityConstructor, Relation } from './Relation.js';
|
|
3
2
|
export interface RoleRules {
|
|
4
3
|
primary?: boolean;
|
|
5
4
|
index?: boolean;
|
|
5
|
+
unique?: boolean;
|
|
6
6
|
relation?: Relation;
|
|
7
|
-
rules?: readonly FieldGroup[];
|
|
8
7
|
}
|
|
9
8
|
export declare class Role implements RoleRules {
|
|
10
9
|
readonly primary?: boolean;
|
|
11
10
|
readonly index?: boolean;
|
|
11
|
+
readonly unique?: boolean;
|
|
12
12
|
readonly relation?: Relation;
|
|
13
|
-
readonly rules?: readonly FieldGroup[];
|
|
14
13
|
private constructor();
|
|
15
14
|
static of(field: {
|
|
16
15
|
role?: RoleRules;
|
|
17
16
|
}): Role;
|
|
18
|
-
/** A group written with no members means "this field": only the key it is declared under resolves it. */
|
|
19
|
-
static resolvedOn(role: RoleRules | undefined, key?: string): RoleRules | undefined;
|
|
20
17
|
get isPrimary(): boolean;
|
|
21
18
|
get isIndexed(): boolean;
|
|
19
|
+
/** A field unique on its own. A group spanning several belongs to the schema. */
|
|
20
|
+
get isUnique(): boolean;
|
|
22
21
|
get isCollection(): boolean;
|
|
23
22
|
get isReference(): boolean;
|
|
23
|
+
/** Calls `() => Post` so no caller has to. */
|
|
24
24
|
get target(): EntityConstructor | undefined;
|
|
25
25
|
}
|
|
26
26
|
//# sourceMappingURL=Role.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Role.d.ts","sourceRoot":"","sources":["../../../src/axis/role/Role.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Role.d.ts","sourceRoot":"","sources":["../../../src/axis/role/Role.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEjE,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,qBAAa,IAAK,YAAW,SAAS;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAE7B,OAAO,eAKN;IAED,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI,CAE3C;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,iFAAiF;IACjF,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,8CAA8C;IAC9C,IAAI,MAAM,IAAI,iBAAiB,GAAG,SAAS,CAE1C;CACF"}
|
package/dist/axis/role/Role.js
CHANGED
|
@@ -1,38 +1,34 @@
|
|
|
1
|
-
import { FieldGroup } from "../../constraint/FieldGroup.js";
|
|
2
|
-
import { Unique } from "../../constraint/Unique.js";
|
|
3
1
|
export class Role {
|
|
4
2
|
primary;
|
|
5
3
|
index;
|
|
4
|
+
unique;
|
|
6
5
|
relation;
|
|
7
|
-
rules
|
|
8
|
-
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
11
|
-
this.relation =
|
|
12
|
-
this.rules = declared.rules;
|
|
6
|
+
constructor(rules = {}) {
|
|
7
|
+
this.primary = rules.primary;
|
|
8
|
+
this.index = rules.index;
|
|
9
|
+
this.unique = rules.unique;
|
|
10
|
+
this.relation = rules.relation;
|
|
13
11
|
}
|
|
14
12
|
static of(field) {
|
|
15
13
|
return new Role(field.role);
|
|
16
14
|
}
|
|
17
|
-
/** A group written with no members means "this field": only the key it is declared under resolves it. */
|
|
18
|
-
static resolvedOn(role, key) {
|
|
19
|
-
let rules = FieldGroup.normalize(role?.rules, (members) => new Unique(members));
|
|
20
|
-
if (rules && key !== undefined && rules.some((group) => group.isSelf))
|
|
21
|
-
rules = rules.map((group) => group.resolvedOn(key));
|
|
22
|
-
return rules === role?.rules ? role : { ...role, rules };
|
|
23
|
-
}
|
|
24
15
|
get isPrimary() {
|
|
25
16
|
return this.primary === true;
|
|
26
17
|
}
|
|
27
18
|
get isIndexed() {
|
|
28
19
|
return this.index === true;
|
|
29
20
|
}
|
|
21
|
+
/** A field unique on its own. A group spanning several belongs to the schema. */
|
|
22
|
+
get isUnique() {
|
|
23
|
+
return this.unique === true;
|
|
24
|
+
}
|
|
30
25
|
get isCollection() {
|
|
31
|
-
return this.relation?.kind ===
|
|
26
|
+
return this.relation?.kind === 'many';
|
|
32
27
|
}
|
|
33
28
|
get isReference() {
|
|
34
|
-
return this.relation?.kind ===
|
|
29
|
+
return this.relation?.kind === 'one';
|
|
35
30
|
}
|
|
31
|
+
/** Calls `() => Post` so no caller has to. */
|
|
36
32
|
get target() {
|
|
37
33
|
return this.relation?.to();
|
|
38
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Role.js","sourceRoot":"","sources":["../../../src/axis/role/Role.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Role.js","sourceRoot":"","sources":["../../../src/axis/role/Role.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,IAAI;IACN,OAAO,CAAW;IAClB,KAAK,CAAW;IAChB,MAAM,CAAW;IACjB,QAAQ,CAAY;IAE7B,YAAoB,KAAK,GAAc,EAAE;QACvC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,KAA2B;QACnC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;IAC/B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;IAC7B,CAAC;IAED,iFAAiF;IACjF,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAC9B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,MAAM,CAAC;IACxC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC;IACvC,CAAC;IAED,8CAA8C;IAC9C,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Axis } from '../Axis.js';
|
|
2
2
|
import { type RoleRules } from './Role.js';
|
|
3
|
-
import type { RoleDescriptor } from '../../card/Descriptor.js';
|
|
3
|
+
import type { RoleDescriptor } from '../../projection/card/Descriptor.js';
|
|
4
4
|
export declare const roleAxis: Axis<RoleRules, RoleDescriptor>;
|
|
5
5
|
//# sourceMappingURL=RoleAxis.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoleAxis.d.ts","sourceRoot":"","sources":["../../../src/axis/role/RoleAxis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,YAAY,CAAC;AAKjD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"RoleAxis.d.ts","sourceRoot":"","sources":["../../../src/axis/role/RoleAxis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,YAAY,CAAC;AAKjD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAE1E,eAAO,MAAM,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAgEpD,CAAC"}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import { refuse } from '../../card/admission.js';
|
|
2
|
-
import { isObject,
|
|
1
|
+
import { refuse, oneOfTokens } from '../../projection/card/admission.js';
|
|
2
|
+
import { isObject, lowerFirst } from '../../lib/utils.js';
|
|
3
3
|
import { ON_DELETE, RELATION_KINDS } from './Relation.js';
|
|
4
|
-
import { FieldGroup } from '../../constraint/FieldGroup.js';
|
|
5
|
-
import { Unique } from '../../constraint/Unique.js';
|
|
6
|
-
import { lowerFirst } from '../../utils.js';
|
|
7
4
|
export const roleAxis = {
|
|
8
5
|
slot: 'role',
|
|
9
|
-
|
|
6
|
+
validator(value, errors) {
|
|
10
7
|
if (!isObject(value)) {
|
|
11
8
|
errors.push({ path: 'role', message: `Expected an object — got ${JSON.stringify(value)}` });
|
|
12
9
|
return;
|
|
13
10
|
}
|
|
14
|
-
for (const flag of ['primary', 'index']) {
|
|
11
|
+
for (const flag of ['primary', 'index', 'unique']) {
|
|
15
12
|
if (value[flag] !== undefined && typeof value[flag] !== 'boolean') {
|
|
16
13
|
errors.push({
|
|
17
14
|
path: `role.${flag}`,
|
|
@@ -19,49 +16,38 @@ export const roleAxis = {
|
|
|
19
16
|
});
|
|
20
17
|
}
|
|
21
18
|
}
|
|
22
|
-
if (value.rules !== undefined) {
|
|
23
|
-
const legal = Array.isArray(value.rules) &&
|
|
24
|
-
value.rules.every((rule) => rule instanceof FieldGroup ||
|
|
25
|
-
(Array.isArray(rule) && rule.every((member) => typeof member === 'string')));
|
|
26
|
-
if (!legal) {
|
|
27
|
-
errors.push({
|
|
28
|
-
path: 'role.rules',
|
|
29
|
-
message: 'Expected field groups, or the member lists they denote — string[][]',
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
19
|
if (value.relation !== undefined)
|
|
34
|
-
|
|
20
|
+
validateRelation(value.relation, errors);
|
|
35
21
|
},
|
|
22
|
+
/** A card carries the target's NAME: a class cannot cross a process boundary. */
|
|
36
23
|
describe(role, key) {
|
|
37
|
-
const
|
|
24
|
+
const descriptor = {};
|
|
38
25
|
if (role.primary)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
out.unique = unique.map((rule) => [...rule.resolvedOn(key).members]);
|
|
26
|
+
descriptor.primary = true;
|
|
27
|
+
if (role.unique)
|
|
28
|
+
descriptor.unique = [[key]];
|
|
43
29
|
if (role.index)
|
|
44
|
-
|
|
30
|
+
descriptor.index = true;
|
|
45
31
|
if (role.relation) {
|
|
46
32
|
const target = role.relation.to();
|
|
47
|
-
|
|
33
|
+
descriptor.relation = {
|
|
48
34
|
to: lowerFirst(target.name ?? ''),
|
|
49
35
|
kind: role.relation.kind,
|
|
50
36
|
...(role.relation.onDelete ? { onDelete: role.relation.onDelete } : {}),
|
|
51
37
|
};
|
|
52
38
|
}
|
|
53
|
-
return Object.keys(
|
|
39
|
+
return Object.keys(descriptor).length ? descriptor : undefined;
|
|
54
40
|
},
|
|
55
41
|
reconstruct(wire, resolve) {
|
|
56
|
-
const
|
|
42
|
+
const rules = {};
|
|
57
43
|
if (wire.primary)
|
|
58
|
-
|
|
59
|
-
if (wire.unique?.length)
|
|
60
|
-
|
|
44
|
+
rules.primary = true;
|
|
45
|
+
if (wire.unique?.some((group) => group.length === 1))
|
|
46
|
+
rules.unique = true;
|
|
61
47
|
if (wire.index)
|
|
62
|
-
|
|
48
|
+
rules.index = true;
|
|
63
49
|
if (wire.relation) {
|
|
64
|
-
// `
|
|
50
|
+
// `validator` cannot serve here: it demands `() => Post` where a card carries a name.
|
|
65
51
|
if (!oneOfTokens(wire.relation.kind, RELATION_KINDS)) {
|
|
66
52
|
refuse(`role.relation.kind is ${JSON.stringify(wire.relation.kind)}`, `Expected one of ${RELATION_KINDS.join(', ')}.`);
|
|
67
53
|
}
|
|
@@ -69,16 +55,21 @@ export const roleAxis = {
|
|
|
69
55
|
refuse(`role.relation.onDelete is ${JSON.stringify(wire.relation.onDelete)}`, `Expected one of ${ON_DELETE.join(', ')}.`);
|
|
70
56
|
}
|
|
71
57
|
const name = wire.relation.to;
|
|
72
|
-
|
|
58
|
+
rules.relation = {
|
|
73
59
|
to: () => (resolve?.(name) ?? { name }),
|
|
74
60
|
kind: wire.relation.kind,
|
|
75
61
|
...(wire.relation.onDelete ? { onDelete: wire.relation.onDelete } : {}),
|
|
76
62
|
};
|
|
77
63
|
}
|
|
78
|
-
return
|
|
64
|
+
return rules;
|
|
79
65
|
},
|
|
80
66
|
};
|
|
81
|
-
|
|
67
|
+
/**
|
|
68
|
+
* So a relation is validated where `() => Post` is required — a card carries a name.
|
|
69
|
+
* FR : pour qu'une relation soit jugée là où `() => Post` est exigé, contrairement à une carte.
|
|
70
|
+
* `{ to: User, kind: 'one' }` → error `Expected a function returning the target entity, such as () => Post`
|
|
71
|
+
*/
|
|
72
|
+
function validateRelation(relation, errors) {
|
|
82
73
|
if (!isObject(relation)) {
|
|
83
74
|
errors.push({ path: 'role.relation', message: `Expected an object — got ${JSON.stringify(relation)}` });
|
|
84
75
|
return;
|
|
@@ -90,7 +81,7 @@ function judgeRelation(relation, errors) {
|
|
|
90
81
|
});
|
|
91
82
|
}
|
|
92
83
|
if (typeof relation.to !== 'function') {
|
|
93
|
-
errors.push({ path: 'role.relation.to', message: 'Expected a
|
|
84
|
+
errors.push({ path: 'role.relation.to', message: 'Expected a function returning the target entity, such as () => Post' });
|
|
94
85
|
}
|
|
95
86
|
if (relation.onDelete !== undefined && !oneOfTokens(relation.onDelete, ON_DELETE)) {
|
|
96
87
|
errors.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoleAxis.js","sourceRoot":"","sources":["../../../src/axis/role/RoleAxis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"RoleAxis.js","sourceRoot":"","sources":["../../../src/axis/role/RoleAxis.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { Registry } from '../../lib/Registry.js';
|
|
1
2
|
export type StringFormat = 'date-time' | 'date' | 'time' | 'email' | 'uuid' | 'uri' | (string & {});
|
|
2
3
|
export type FormatPredicate = (value: string) => boolean;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
4
|
+
/**
|
|
5
|
+
* String formats the JSON Schema engine does not know. `find` answers `undefined` for
|
|
6
|
+
* `email` or `uuid`, which it validates on its own.
|
|
7
|
+
* FR : les formats de chaîne que le moteur ignore ; `find` rend `undefined` pour les siens.
|
|
8
|
+
* `Formats.register('siret', (v) => /^\d{14}$/.test(v))`
|
|
9
|
+
*/
|
|
10
|
+
export declare const Formats: Registry<FormatPredicate>;
|
|
8
11
|
//# sourceMappingURL=Formats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Formats.d.ts","sourceRoot":"","sources":["../../../src/axis/shape/Formats.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,KAAK,GACL,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAEzD
|
|
1
|
+
{"version":3,"file":"Formats.d.ts","sourceRoot":"","sources":["../../../src/axis/shape/Formats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,KAAK,GACL,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,OAAO,2BAA0C,CAAC"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
1
|
+
import { Registry } from '../../lib/Registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* String formats the JSON Schema engine does not know. `find` answers `undefined` for
|
|
4
|
+
* `email` or `uuid`, which it validates on its own.
|
|
5
|
+
* FR : les formats de chaîne que le moteur ignore ; `find` rend `undefined` pour les siens.
|
|
6
|
+
* `Formats.register('siret', (v) => /^\d{14}$/.test(v))`
|
|
7
|
+
*/
|
|
8
|
+
export const Formats = new Registry('format');
|
|
10
9
|
//# sourceMappingURL=Formats.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Formats.js","sourceRoot":"","sources":["../../../src/axis/shape/Formats.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Formats.js","sourceRoot":"","sources":["../../../src/axis/shape/Formats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAajD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,QAAQ,CAAkB,QAAQ,CAAC,CAAC"}
|
|
@@ -19,6 +19,8 @@ interface ArrayConstraints {
|
|
|
19
19
|
interface ObjectConstraints {
|
|
20
20
|
properties?: Record<string, unknown>;
|
|
21
21
|
required?: readonly string[];
|
|
22
|
+
additionalProperties?: boolean | Shape;
|
|
23
|
+
propertyNames?: Shape;
|
|
22
24
|
}
|
|
23
25
|
export type Shape = ({
|
|
24
26
|
type: Nullably<'string'>;
|
|
@@ -42,16 +44,16 @@ type BaseShape = ({
|
|
|
42
44
|
} & ArrayConstraints) | ({
|
|
43
45
|
type: 'object';
|
|
44
46
|
} & ObjectConstraints);
|
|
45
|
-
interface
|
|
47
|
+
interface ShapeParts {
|
|
46
48
|
base?: BaseShape;
|
|
47
49
|
nullable: boolean;
|
|
48
50
|
}
|
|
49
|
-
export declare class
|
|
51
|
+
export declare class Shapes {
|
|
50
52
|
static is(value: unknown): value is Shape;
|
|
51
53
|
static nullable(shape: Shape): Shape;
|
|
52
54
|
private static readonly cache;
|
|
53
55
|
private static readonly none;
|
|
54
|
-
static of(shape?: Shape):
|
|
56
|
+
static of(shape?: Shape): ShapeParts;
|
|
55
57
|
static isNullable(shape?: Shape): boolean;
|
|
56
58
|
}
|
|
57
59
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shape.d.ts","sourceRoot":"","sources":["../../../src/axis/shape/Shape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAE3D,UAAU,iBAAiB;IAAG,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAAE;AAClJ,UAAU,kBAAkB;IAAG,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AACnE,UAAU,gBAAgB;IAAG,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AAClF,UAAU,iBAAiB;IAAG,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;
|
|
1
|
+
{"version":3,"file":"Shape.d.ts","sourceRoot":"","sources":["../../../src/axis/shape/Shape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAE3D,UAAU,iBAAiB;IAAG,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAAE;AAClJ,UAAU,kBAAkB;IAAG,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;AACnE,UAAU,gBAAgB;IAAG,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE;AAClF,UAAU,iBAAiB;IAAG,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,oBAAoB,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAAC,aAAa,CAAC,EAAE,KAAK,CAAA;CAAE;AAEjK,MAAM,MAAM,KAAK,GACb,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;CAAE,GAAG,iBAAiB,CAAC,GAClD,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAA;CAAE,GAAG,kBAAkB,CAAC,GACzE;IAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;CAAE,GAC7B,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;CAAE,GAAG,gBAAgB,CAAC,GAChD,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;CAAE,GAAG,iBAAiB,CAAC,CAAC;AAcvD,KAAK,SAAS,GACV,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,iBAAiB,CAAC,GACxC,CAAC;IAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,GAAG,kBAAkB,CAAC,GACrD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB,CAAC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,gBAAgB,CAAC,GACtC,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAAG,iBAAiB,CAAC,CAAC;AAW7C,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,MAAM;IACjB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAExC;IAED,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAEnC;IAED,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAClE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAoD;IAEhF,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,UAAU,CAiBnC;IAED,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAExC;CACF"}
|
package/dist/axis/shape/Shape.js
CHANGED
|
@@ -2,21 +2,21 @@ const SHAPE_TYPES = ['string', 'number', 'integer', 'boolean', 'array', 'object'
|
|
|
2
2
|
function isShapeImpl(value) {
|
|
3
3
|
if (typeof value !== 'object' || value === null)
|
|
4
4
|
return false;
|
|
5
|
-
const
|
|
6
|
-
const names = Array.isArray(
|
|
5
|
+
const type = value.type;
|
|
6
|
+
const names = Array.isArray(type) ? type : [type];
|
|
7
7
|
return (names.some((name) => SHAPE_TYPES.includes(name)) &&
|
|
8
8
|
names.every((name) => name === 'null' || SHAPE_TYPES.includes(name)));
|
|
9
9
|
}
|
|
10
10
|
function nullableShapeImpl(shape) {
|
|
11
11
|
if (Array.isArray(shape.type))
|
|
12
12
|
return shape;
|
|
13
|
-
const
|
|
14
|
-
if ('enum' in
|
|
15
|
-
|
|
13
|
+
const nullable = { ...shape, type: [shape.type, 'null'] };
|
|
14
|
+
if ('enum' in nullable && nullable.enum && !nullable.enum.includes(null)) {
|
|
15
|
+
nullable.enum = [...nullable.enum, null];
|
|
16
16
|
}
|
|
17
|
-
return
|
|
17
|
+
return nullable;
|
|
18
18
|
}
|
|
19
|
-
export class
|
|
19
|
+
export class Shapes {
|
|
20
20
|
static is(value) {
|
|
21
21
|
return isShapeImpl(value);
|
|
22
22
|
}
|
|
@@ -28,22 +28,22 @@ export class Anatomy {
|
|
|
28
28
|
static of(shape) {
|
|
29
29
|
if (!shape)
|
|
30
30
|
return this.none;
|
|
31
|
-
let
|
|
32
|
-
if (!
|
|
31
|
+
let parts = this.cache.get(shape);
|
|
32
|
+
if (!parts) {
|
|
33
33
|
if (Array.isArray(shape.type)) {
|
|
34
34
|
const baseType = shape.type.find((t) => t !== 'null');
|
|
35
35
|
const base = { ...shape, type: baseType };
|
|
36
36
|
if ('enum' in base && base.enum) {
|
|
37
37
|
base.enum = base.enum.filter((v) => v !== null);
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
parts = { base, nullable: true };
|
|
40
40
|
}
|
|
41
41
|
else {
|
|
42
|
-
|
|
42
|
+
parts = { base: shape, nullable: false };
|
|
43
43
|
}
|
|
44
|
-
this.cache.set(shape,
|
|
44
|
+
this.cache.set(shape, parts);
|
|
45
45
|
}
|
|
46
|
-
return
|
|
46
|
+
return parts;
|
|
47
47
|
}
|
|
48
48
|
static isNullable(shape) {
|
|
49
49
|
return this.of(shape).nullable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../src/axis/shape/Shape.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAE3F,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,
|
|
1
|
+
{"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../src/axis/shape/Shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Fields } from '../field/Field.js';
|
|
2
|
+
import type { EntityAdapters } from './EntityAdapters.js';
|
|
3
|
+
export declare class EntityAdapterSet {
|
|
4
|
+
readonly adapters: EntityAdapters<Fields>;
|
|
5
|
+
/**
|
|
6
|
+
* `{ sql: { body: { columnType: { pg: 'tsvector' } } } }`
|
|
7
|
+
*/
|
|
8
|
+
private constructor();
|
|
9
|
+
/**
|
|
10
|
+
* Stops a malformed declaration from propagating, by checking its two levels.
|
|
11
|
+
* `of({ sql: { body: 3 } })` → passes; `of({ sql: 'oops' })` → throws, naming `adapters.sql`
|
|
12
|
+
*/
|
|
13
|
+
static of(adapters?: EntityAdapters<Fields>): EntityAdapterSet;
|
|
14
|
+
/** Folds several into one, a later field entry replacing the earlier. Takes sets only, so */
|
|
15
|
+
static merged(adapterSets: readonly EntityAdapterSet[]): EntityAdapterSet;
|
|
16
|
+
private get entries();
|
|
17
|
+
/** Collects every field addressed, so a declaration aimed at a missing field is caught. */
|
|
18
|
+
get fieldNames(): string[];
|
|
19
|
+
/** Follows a derivation — `pick`, `omit` and `rename` are one gesture: what remains, and */
|
|
20
|
+
rename(transform: (key: string) => string | undefined): EntityAdapterSet;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=EntityAdapterSet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityAdapterSet.d.ts","sourceRoot":"","sources":["../../src/entity/EntityAdapterSet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D,qBAAa,gBAAgB;IAIP,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC;IAH7D;;OAEG;IACH,OAAO,eAA0D;IAEjE;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAmB7D;IAED,6FAA6F;IAC7F,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,GAAG,gBAAgB,CAQxE;IAED,OAAO,KAAK,OAAO,GAElB;IAED,2FAA2F;IAC3F,IAAI,UAAU,IAAI,MAAM,EAAE,CAIzB;IAED,4FAA4F;IAC5F,MAAM,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAkBvE;CACF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { isObject } from '../lib/utils.js';
|
|
2
|
+
export class EntityAdapterSet {
|
|
3
|
+
adapters;
|
|
4
|
+
/**
|
|
5
|
+
* `{ sql: { body: { columnType: { pg: 'tsvector' } } } }`
|
|
6
|
+
*/
|
|
7
|
+
constructor(adapters) {
|
|
8
|
+
this.adapters = adapters;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Stops a malformed declaration from propagating, by checking its two levels.
|
|
12
|
+
* `of({ sql: { body: 3 } })` → passes; `of({ sql: 'oops' })` → throws, naming `adapters.sql`
|
|
13
|
+
*/
|
|
14
|
+
static of(adapters) {
|
|
15
|
+
if (!adapters)
|
|
16
|
+
return new EntityAdapterSet({});
|
|
17
|
+
if (!isObject(adapters)) {
|
|
18
|
+
throw new Error(`adapters: expected an object keyed by adapter name, got ${typeof adapters}.`);
|
|
19
|
+
}
|
|
20
|
+
for (const [adapter, fields] of Object.entries(adapters)) {
|
|
21
|
+
if (!isObject(fields)) {
|
|
22
|
+
throw new Error(`adapters.${adapter}: expected an object keyed by field name, got ${typeof fields}. ` +
|
|
23
|
+
`What an adapter is handed is addressed by the field it applies to.`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return new EntityAdapterSet(adapters);
|
|
27
|
+
}
|
|
28
|
+
/** Folds several into one, a later field entry replacing the earlier. Takes sets only, so */
|
|
29
|
+
static merged(adapterSets) {
|
|
30
|
+
const configurations = {};
|
|
31
|
+
for (const adapterSet of adapterSets)
|
|
32
|
+
for (const [adapter, configuration] of adapterSet.entries)
|
|
33
|
+
configurations[adapter] = { ...configurations[adapter], ...configuration };
|
|
34
|
+
return new EntityAdapterSet(configurations);
|
|
35
|
+
}
|
|
36
|
+
get entries() {
|
|
37
|
+
return Object.entries(this.adapters);
|
|
38
|
+
}
|
|
39
|
+
/** Collects every field addressed, so a declaration aimed at a missing field is caught. */
|
|
40
|
+
get fieldNames() {
|
|
41
|
+
return [
|
|
42
|
+
...new Set(this.entries.flatMap(([, configuration]) => Object.keys(configuration))),
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
/** Follows a derivation — `pick`, `omit` and `rename` are one gesture: what remains, and */
|
|
46
|
+
rename(transform) {
|
|
47
|
+
const renamed = {};
|
|
48
|
+
for (const [adapter, configuration] of this.entries) {
|
|
49
|
+
const mapped = {};
|
|
50
|
+
for (const [key, entry] of Object.entries(configuration)) {
|
|
51
|
+
const newName = transform(key);
|
|
52
|
+
if (newName !== undefined)
|
|
53
|
+
mapped[newName] = entry;
|
|
54
|
+
}
|
|
55
|
+
// Drop an adapter left with no field. `Post.pick('id')` would otherwise answer
|
|
56
|
+
// `{ sql: {} }` — a line the entity never wrote.
|
|
57
|
+
if (Object.keys(mapped).length)
|
|
58
|
+
renamed[adapter] = mapped;
|
|
59
|
+
}
|
|
60
|
+
return new EntityAdapterSet(renamed);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=EntityAdapterSet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityAdapterSet.js","sourceRoot":"","sources":["../../src/entity/EntityAdapterSet.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAM3C,MAAM,OAAO,gBAAgB;IAIE,QAAQ;IAHrC;;OAEG;IACH,YAA6B,QAAgC;wBAAhC,QAAQ;IAA2B,CAAC;IAEjE;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,QAAiC;QACzC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,2DAA2D,OAAO,QAAQ,GAAG,CAC9E,CAAC;QACJ,CAAC;QAED,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,YAAY,OAAO,iDAAiD,OAAO,MAAM,IAAI;oBACnF,oEAAoE,CACvE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,6FAA6F;IAC7F,MAAM,CAAC,MAAM,CAAC,WAAwC;QACpD,MAAM,cAAc,GAA0B,EAAE,CAAC;QAEjD,KAAK,MAAM,UAAU,IAAI,WAAW;YAClC,KAAK,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO;gBACvD,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC;QAE/E,OAAO,IAAI,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC9C,CAAC;IAED,IAAY,OAAO;QACjB,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,2FAA2F;IAC3F,IAAI,UAAU;QACZ,OAAO;YACL,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;SACpF,CAAC;IACJ,CAAC;IAED,4FAA4F;IAC5F,MAAM,CAAC,SAA8C;QACnD,MAAM,OAAO,GAA0B,EAAE,CAAC;QAE1C,KAAK,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpD,MAAM,MAAM,GAAyB,EAAE,CAAC;YAExC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gBAE/B,IAAI,OAAO,KAAK,SAAS;oBAAE,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YACrD,CAAC;YAED,+EAA+E;YAC/E,iDAAiD;YACjD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;gBAAE,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FieldName, Fields } from '../field/Field.js';
|
|
2
|
+
export interface FougereEntityAdapters<K extends string> {
|
|
3
|
+
}
|
|
4
|
+
export type EntityAdapters<TFields extends Fields> = Readonly<Partial<FougereEntityAdapters<FieldName<TFields>>>>;
|
|
5
|
+
//# sourceMappingURL=EntityAdapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityAdapters.d.ts","sourceRoot":"","sources":["../../src/entity/EntityAdapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3D,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,MAAM;CAAI;AAE3D,MAAM,MAAM,cAAc,CAAC,OAAO,SAAS,MAAM,IAAI,QAAQ,CAC3D,OAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityAdapters.js","sourceRoot":"","sources":["../../src/entity/EntityAdapters.ts"],"names":[],"mappings":""}
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import type { FieldName, Fields } from '
|
|
1
|
+
import type { FieldName, Fields } from '../field/Field.js';
|
|
2
2
|
import type { EntityAdapters } from './EntityAdapters.js';
|
|
3
3
|
export type CompositeUnique<TFields extends Fields> = readonly (readonly FieldName<TFields>[])[];
|
|
4
|
-
/** New name to old name: the field states what it WAS, which is how a human writes it. */
|
|
5
4
|
export type PreviousNames<TFields extends Fields> = Readonly<Partial<Record<FieldName<TFields>, string>>>;
|
|
6
5
|
export interface EntityDeclarations<TFields extends Fields> {
|
|
7
|
-
unique?: CompositeUnique<TFields>;
|
|
8
6
|
adapters?: EntityAdapters<TFields>;
|
|
9
|
-
/**
|
|
10
|
-
* What a field used to be called — read by `fougere freeze` and by nothing else.
|
|
11
|
-
* It answers the one question two shapes cannot, and is meant to be deleted after.
|
|
12
|
-
*/
|
|
13
7
|
previous?: PreviousNames<TFields>;
|
|
8
|
+
unique?: CompositeUnique<TFields>;
|
|
14
9
|
}
|
|
15
10
|
//# sourceMappingURL=EntityDeclarations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityDeclarations.d.ts","sourceRoot":"","sources":["../../src/entity/EntityDeclarations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,MAAM,IAChD,SAAS,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;AAE7C,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,MAAM,IAAI,QAAQ,CAC1D,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAC5C,CAAC;AAEF,MAAM,WAAW,kBAAkB,CAAC,OAAO,SAAS,MAAM;IACxD,QAAQ,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IACnC,QAAQ,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityDeclarations.js","sourceRoot":"","sources":["../../src/entity/EntityDeclarations.ts"],"names":[],"mappings":""}
|
package/dist/entity.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import { type Fields } from './
|
|
2
|
-
import { type EntityDeclarations } from './EntityDeclarations.js';
|
|
3
|
-
import { type SchemaConstructor } from './
|
|
1
|
+
import { type Fields } from './field/Field.js';
|
|
2
|
+
import { type EntityDeclarations } from './entity/EntityDeclarations.js';
|
|
3
|
+
import { type SchemaConstructor } from './Schema.js';
|
|
4
|
+
/**
|
|
5
|
+
* So the whole framework starts from one call: fields, and what they say about themselves.
|
|
6
|
+
* FR : pour que tout parte d'un appel : les champs, et ce qu'ils disent d'eux-mêmes.
|
|
7
|
+
* `class Post extends entity({ id: primary(), title: text() }, { unique: [['title']] }) {}`
|
|
8
|
+
*/
|
|
4
9
|
export declare function entity<TFields extends Fields>(fields: TFields, declarations?: EntityDeclarations<TFields>): SchemaConstructor<TFields>;
|
|
5
10
|
//# 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,EAAE,KAAK,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE7D;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,OAAO,SAAS,MAAM,EAC3C,MAAM,EAAE,OAAO,EACf,YAAY,GAAE,kBAAkB,CAAC,OAAO,CAAM,GAC7C,iBAAiB,CAAC,OAAO,CAAC,CAE5B"}
|
package/dist/entity.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import { Schema } from './
|
|
1
|
+
import { Schema } from './Schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* So the whole framework starts from one call: fields, and what they say about themselves.
|
|
4
|
+
* FR : pour que tout parte d'un appel : les champs, et ce qu'ils disent d'eux-mêmes.
|
|
5
|
+
* `class Post extends entity({ id: primary(), title: text() }, { unique: [['title']] }) {}`
|
|
6
|
+
*/
|
|
2
7
|
export function entity(fields, declarations = {}) {
|
|
3
8
|
return Schema.of({ fields }).declares(declarations);
|
|
4
9
|
}
|
package/dist/entity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAA0B,MAAM,
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAA0B,MAAM,aAAa,CAAC;AAE7D;;;;GAIG;AACH,MAAM,UAAU,MAAM,CACpB,MAAe,EACf,YAAY,GAAgC,EAAE;IAE9C,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACtD,CAAC"}
|