@fougere/schema 0.3.0-alpha.0 → 0.5.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/EntityAdapters.d.ts +28 -0
- package/dist/EntityAdapters.d.ts.map +1 -0
- package/dist/EntityAdapters.js +75 -0
- package/dist/EntityAdapters.js.map +1 -0
- package/dist/EntityDeclarations.d.ts +7 -14
- package/dist/EntityDeclarations.d.ts.map +1 -1
- package/dist/EntityDeclarations.js +1 -18
- package/dist/EntityDeclarations.js.map +1 -1
- package/dist/axis/Axis.d.ts +2 -0
- package/dist/axis/Axis.d.ts.map +1 -1
- package/dist/axis/Axis.js +5 -3
- package/dist/axis/Axis.js.map +1 -1
- package/dist/axis/boundary/Boundary.d.ts +1 -1
- package/dist/axis/boundary/Boundary.d.ts.map +1 -1
- package/dist/axis/boundary/{axis.d.ts → BoundaryAxis.d.ts} +1 -1
- package/dist/axis/boundary/BoundaryAxis.d.ts.map +1 -0
- package/dist/axis/boundary/{axis.js → BoundaryAxis.js} +3 -2
- package/dist/axis/boundary/BoundaryAxis.js.map +1 -0
- package/dist/axis/lifecycle/Clock.d.ts +18 -0
- package/dist/axis/lifecycle/Clock.d.ts.map +1 -0
- package/dist/axis/lifecycle/Clock.js +25 -0
- package/dist/axis/lifecycle/Clock.js.map +1 -0
- package/dist/axis/lifecycle/Generators.d.ts +16 -2
- package/dist/axis/lifecycle/Generators.d.ts.map +1 -1
- package/dist/axis/lifecycle/Generators.js +35 -5
- package/dist/axis/lifecycle/Generators.js.map +1 -1
- package/dist/axis/lifecycle/{axis.d.ts → LifecycleAxis.d.ts} +1 -1
- package/dist/axis/lifecycle/LifecycleAxis.d.ts.map +1 -0
- package/dist/axis/lifecycle/{axis.js → LifecycleAxis.js} +3 -2
- package/dist/axis/lifecycle/LifecycleAxis.js.map +1 -0
- package/dist/axis/lifecycle/apply.d.ts +1 -3
- package/dist/axis/lifecycle/apply.d.ts.map +1 -1
- package/dist/axis/lifecycle/apply.js +5 -43
- package/dist/axis/lifecycle/apply.js.map +1 -1
- package/dist/axis/role/Relation.d.ts +11 -1
- package/dist/axis/role/Relation.d.ts.map +1 -1
- package/dist/axis/role/Relation.js +18 -3
- package/dist/axis/role/Relation.js.map +1 -1
- package/dist/axis/role/Role.d.ts +5 -17
- package/dist/axis/role/Role.d.ts.map +1 -1
- package/dist/axis/role/Role.js +9 -19
- package/dist/axis/role/Role.js.map +1 -1
- package/dist/axis/role/{axis.d.ts → RoleAxis.d.ts} +1 -1
- package/dist/axis/role/RoleAxis.d.ts.map +1 -0
- package/dist/axis/role/{axis.js → RoleAxis.js} +5 -4
- package/dist/axis/role/RoleAxis.js.map +1 -0
- package/dist/card/Bundle.d.ts +15 -0
- package/dist/card/Bundle.d.ts.map +1 -0
- package/dist/card/Bundle.js +67 -0
- package/dist/card/Bundle.js.map +1 -0
- package/dist/card/Card.d.ts +27 -0
- package/dist/card/Card.d.ts.map +1 -0
- package/dist/card/Card.js +230 -0
- package/dist/card/Card.js.map +1 -0
- package/dist/card/EntityTypeSource.d.ts +12 -0
- package/dist/card/EntityTypeSource.d.ts.map +1 -0
- package/dist/card/{typescript.js → EntityTypeSource.js} +20 -35
- package/dist/card/EntityTypeSource.js.map +1 -0
- package/dist/card/FacadeTypeSource.d.ts +19 -0
- package/dist/card/FacadeTypeSource.d.ts.map +1 -0
- package/dist/card/FacadeTypeSource.js +40 -0
- package/dist/card/FacadeTypeSource.js.map +1 -0
- package/dist/{judge/form.d.ts → card/admission.d.ts} +2 -4
- package/dist/card/admission.d.ts.map +1 -0
- package/dist/{judge/form.js → card/admission.js} +1 -3
- package/dist/card/admission.js.map +1 -0
- package/dist/card/diff.d.ts +11 -55
- package/dist/card/diff.d.ts.map +1 -1
- package/dist/card/diff.js +1 -122
- package/dist/card/diff.js.map +1 -1
- package/dist/constraint/FieldGroup.d.ts +2 -2
- package/dist/constraint/FieldGroup.d.ts.map +1 -1
- package/dist/constraint/FieldGroup.js.map +1 -1
- package/dist/entity.d.ts +3 -3
- package/dist/entity.d.ts.map +1 -1
- package/dist/entity.js +3 -13
- package/dist/entity.js.map +1 -1
- package/dist/fields/Field.d.ts +24 -0
- package/dist/fields/Field.d.ts.map +1 -0
- package/dist/{Field.js → fields/Field.js} +17 -15
- package/dist/fields/Field.js.map +1 -0
- package/dist/fields/FieldSet.d.ts +28 -0
- package/dist/fields/FieldSet.d.ts.map +1 -0
- package/dist/fields/FieldSet.js +55 -0
- package/dist/fields/FieldSet.js.map +1 -0
- package/dist/index.d.ts +24 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -17
- package/dist/index.js.map +1 -1
- package/dist/judge/{cases.d.ts → Cases.d.ts} +22 -22
- package/dist/judge/Cases.d.ts.map +1 -0
- package/dist/judge/{cases.js → Cases.js} +35 -27
- package/dist/judge/Cases.js.map +1 -0
- package/dist/judge/FieldJudge.d.ts +9 -0
- package/dist/judge/FieldJudge.d.ts.map +1 -0
- package/dist/judge/FieldJudge.js +54 -0
- package/dist/judge/FieldJudge.js.map +1 -0
- package/dist/judge/RowJudge.d.ts +12 -0
- package/dist/judge/RowJudge.d.ts.map +1 -0
- package/dist/judge/RowJudge.js +81 -0
- package/dist/judge/RowJudge.js.map +1 -0
- package/dist/judge/RowRefusal.d.ts +17 -0
- package/dist/judge/RowRefusal.d.ts.map +1 -0
- package/dist/judge/RowRefusal.js +16 -0
- package/dist/judge/RowRefusal.js.map +1 -0
- package/dist/judge/ValueForm.d.ts +3 -0
- package/dist/judge/ValueForm.d.ts.map +1 -0
- package/dist/judge/ValueForm.js +3 -0
- package/dist/judge/ValueForm.js.map +1 -0
- package/dist/judge/ValueJudge.d.ts +12 -0
- package/dist/judge/ValueJudge.d.ts.map +1 -0
- package/dist/judge/ValueJudge.js +60 -0
- package/dist/judge/ValueJudge.js.map +1 -0
- package/dist/projection/SchemaOrCard.d.ts +7 -0
- package/dist/projection/SchemaOrCard.d.ts.map +1 -0
- package/dist/projection/{source.js → SchemaOrCard.js} +3 -3
- package/dist/projection/SchemaOrCard.js.map +1 -0
- package/dist/projection/Visibility.d.ts +10 -0
- package/dist/projection/Visibility.d.ts.map +1 -0
- package/dist/projection/Visibility.js +55 -0
- package/dist/projection/Visibility.js.map +1 -0
- package/dist/projection/standard.d.ts +11 -32
- package/dist/projection/standard.d.ts.map +1 -1
- package/dist/schema/Schema.d.ts +80 -0
- package/dist/schema/Schema.d.ts.map +1 -0
- package/dist/{Schema.js → schema/Schema.js} +46 -48
- package/dist/schema/Schema.js.map +1 -0
- package/dist/schema/SchemaDefinition.d.ts +60 -0
- package/dist/schema/SchemaDefinition.d.ts.map +1 -0
- package/dist/schema/SchemaDefinition.js +85 -0
- package/dist/schema/SchemaDefinition.js.map +1 -0
- package/dist/schema/SchemaDerivation.d.ts +34 -0
- package/dist/schema/SchemaDerivation.d.ts.map +1 -0
- package/dist/schema/SchemaDerivation.js +46 -0
- package/dist/schema/SchemaDerivation.js.map +1 -0
- package/dist/schema/SchemaView.d.ts +25 -0
- package/dist/schema/SchemaView.d.ts.map +1 -0
- package/dist/{SchemaView.js.map → schema/SchemaView.js.map} +1 -1
- package/dist/utils.d.ts +4 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +13 -0
- package/dist/utils.js.map +1 -0
- package/dist/vocabulary/bool.d.ts +1 -1
- package/dist/vocabulary/bool.d.ts.map +1 -1
- package/dist/vocabulary/bool.js +1 -1
- package/dist/vocabulary/bool.js.map +1 -1
- package/dist/vocabulary/created.d.ts +1 -1
- package/dist/vocabulary/created.d.ts.map +1 -1
- package/dist/vocabulary/date.d.ts +1 -1
- package/dist/vocabulary/date.d.ts.map +1 -1
- package/dist/vocabulary/date.js +1 -1
- package/dist/vocabulary/date.js.map +1 -1
- package/dist/vocabulary/email.d.ts +1 -1
- package/dist/vocabulary/email.d.ts.map +1 -1
- package/dist/vocabulary/immutable.d.ts +1 -1
- package/dist/vocabulary/immutable.d.ts.map +1 -1
- package/dist/vocabulary/indexed.d.ts +1 -1
- package/dist/vocabulary/indexed.d.ts.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 +6 -4
- package/dist/vocabulary/json.js.map +1 -1
- package/dist/vocabulary/list.d.ts +1 -1
- package/dist/vocabulary/list.d.ts.map +1 -1
- package/dist/vocabulary/list.js +1 -1
- package/dist/vocabulary/list.js.map +1 -1
- package/dist/vocabulary/many.d.ts +1 -1
- package/dist/vocabulary/many.d.ts.map +1 -1
- package/dist/vocabulary/many.js +3 -3
- package/dist/vocabulary/many.js.map +1 -1
- package/dist/vocabulary/nullable.d.ts +1 -1
- package/dist/vocabulary/nullable.d.ts.map +1 -1
- package/dist/vocabulary/number.d.ts +1 -1
- package/dist/vocabulary/number.d.ts.map +1 -1
- package/dist/vocabulary/number.js +1 -1
- package/dist/vocabulary/number.js.map +1 -1
- package/dist/vocabulary/oneOf.d.ts +1 -1
- package/dist/vocabulary/oneOf.d.ts.map +1 -1
- package/dist/vocabulary/oneOf.js +1 -1
- package/dist/vocabulary/oneOf.js.map +1 -1
- package/dist/vocabulary/optional.d.ts +1 -1
- package/dist/vocabulary/optional.d.ts.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 +4 -5
- package/dist/vocabulary/primary.js.map +1 -1
- package/dist/vocabulary/readOnly.d.ts +1 -1
- package/dist/vocabulary/readOnly.d.ts.map +1 -1
- package/dist/vocabulary/ref.d.ts +1 -1
- package/dist/vocabulary/ref.d.ts.map +1 -1
- package/dist/vocabulary/ref.js +3 -9
- package/dist/vocabulary/ref.js.map +1 -1
- package/dist/vocabulary/text.d.ts +1 -1
- package/dist/vocabulary/text.d.ts.map +1 -1
- package/dist/vocabulary/text.js +1 -1
- package/dist/vocabulary/text.js.map +1 -1
- package/dist/vocabulary/unique.d.ts +1 -1
- package/dist/vocabulary/unique.d.ts.map +1 -1
- package/dist/vocabulary/updated.d.ts +1 -1
- package/dist/vocabulary/updated.d.ts.map +1 -1
- package/dist/vocabulary/url.d.ts +1 -1
- package/dist/vocabulary/url.d.ts.map +1 -1
- package/dist/vocabulary/vocabulary.d.ts +2 -3
- package/dist/vocabulary/vocabulary.d.ts.map +1 -1
- package/dist/vocabulary/vocabulary.js +4 -4
- package/dist/vocabulary/vocabulary.js.map +1 -1
- package/dist/vocabulary/writeOnly.d.ts +1 -1
- package/dist/vocabulary/writeOnly.d.ts.map +1 -1
- package/package.json +9 -4
- package/src/EntityAdapters.ts +100 -0
- package/src/EntityDeclarations.ts +19 -0
- package/src/axis/Axis.ts +25 -0
- package/src/axis/Meta.ts +3 -0
- package/src/axis/boundary/Boundaries.ts +44 -0
- package/src/axis/boundary/Boundary.ts +69 -0
- package/src/axis/boundary/BoundaryAxis.ts +32 -0
- package/src/axis/lifecycle/Clock.ts +26 -0
- package/src/axis/lifecycle/Generators.ts +46 -0
- package/src/axis/lifecycle/Lifecycle.ts +53 -0
- package/src/axis/lifecycle/LifecycleAxis.ts +49 -0
- package/src/axis/lifecycle/apply.ts +38 -0
- package/src/axis/role/Relation.ts +31 -0
- package/src/axis/role/Role.ts +56 -0
- package/src/axis/role/RoleAxis.ts +115 -0
- package/src/axis/shape/Formats.ts +22 -0
- package/src/axis/shape/Shape.ts +91 -0
- package/src/card/Bundle.ts +80 -0
- package/src/card/Card.ts +256 -0
- package/src/card/Descriptor.ts +68 -0
- package/src/card/EntityTypeSource.ts +90 -0
- package/src/card/FacadeTypeSource.ts +55 -0
- package/src/card/admission.ts +25 -0
- package/src/card/diff.ts +56 -0
- package/src/constraint/FieldGroup.ts +91 -0
- package/src/constraint/Unique.ts +3 -0
- package/src/entity.ts +10 -0
- package/src/fields/Field.ts +80 -0
- package/src/fields/FieldSet.ts +62 -0
- package/src/index.ts +69 -0
- package/src/judge/Cases.ts +139 -0
- package/src/judge/FieldJudge.ts +61 -0
- package/src/judge/RowJudge.ts +84 -0
- package/src/judge/RowRefusal.ts +17 -0
- package/src/judge/ValueForm.ts +7 -0
- package/src/judge/ValueJudge.ts +72 -0
- package/src/judge/options.ts +3 -0
- package/src/judge/result.ts +10 -0
- package/src/projection/SchemaOrCard.ts +18 -0
- package/src/projection/Visibility.ts +47 -0
- package/src/projection/standard.ts +11 -0
- package/src/schema/Schema.ts +197 -0
- package/src/schema/SchemaDefinition.ts +120 -0
- package/src/schema/SchemaDerivation.ts +57 -0
- package/src/schema/SchemaView.ts +27 -0
- package/src/utils.ts +13 -0
- package/src/vocabulary/bool.ts +9 -0
- package/src/vocabulary/created.ts +8 -0
- package/src/vocabulary/date.ts +5 -0
- package/src/vocabulary/email.ts +6 -0
- package/src/vocabulary/immutable.ts +6 -0
- package/src/vocabulary/indexed.ts +4 -0
- package/src/vocabulary/json.ts +22 -0
- package/src/vocabulary/list.ts +13 -0
- package/src/vocabulary/many.ts +9 -0
- package/src/vocabulary/nullable.ts +7 -0
- package/src/vocabulary/number.ts +17 -0
- package/src/vocabulary/oneOf.ts +24 -0
- package/src/vocabulary/optional.ts +8 -0
- package/src/vocabulary/primary.ts +33 -0
- package/src/vocabulary/readOnly.ts +7 -0
- package/src/vocabulary/ref.ts +13 -0
- package/src/vocabulary/text.ts +19 -0
- package/src/vocabulary/unique.ts +10 -0
- package/src/vocabulary/updated.ts +7 -0
- package/src/vocabulary/url.ts +6 -0
- package/src/vocabulary/vocabulary.ts +40 -0
- package/src/vocabulary/writeOnly.ts +7 -0
- package/dist/Field.d.ts +0 -21
- package/dist/Field.d.ts.map +0 -1
- package/dist/Field.js.map +0 -1
- package/dist/Schema.d.ts +0 -67
- package/dist/Schema.d.ts.map +0 -1
- package/dist/Schema.js.map +0 -1
- package/dist/SchemaView.d.ts +0 -18
- package/dist/SchemaView.d.ts.map +0 -1
- package/dist/axis/boundary/axis.d.ts.map +0 -1
- package/dist/axis/boundary/axis.js.map +0 -1
- package/dist/axis/lifecycle/axis.d.ts.map +0 -1
- package/dist/axis/lifecycle/axis.js.map +0 -1
- package/dist/axis/role/axis.d.ts.map +0 -1
- package/dist/axis/role/axis.js.map +0 -1
- package/dist/card/describe.d.ts +0 -12
- package/dist/card/describe.d.ts.map +0 -1
- package/dist/card/describe.js +0 -83
- package/dist/card/describe.js.map +0 -1
- package/dist/card/reconstruct.d.ts +0 -11
- package/dist/card/reconstruct.d.ts.map +0 -1
- package/dist/card/reconstruct.js +0 -83
- package/dist/card/reconstruct.js.map +0 -1
- package/dist/card/typescript.d.ts +0 -17
- package/dist/card/typescript.d.ts.map +0 -1
- package/dist/card/typescript.js.map +0 -1
- package/dist/clean.d.ts +0 -2
- package/dist/clean.d.ts.map +0 -1
- package/dist/clean.js +0 -7
- package/dist/clean.js.map +0 -1
- package/dist/judge/Judge.d.ts +0 -14
- package/dist/judge/Judge.d.ts.map +0 -1
- package/dist/judge/Judge.js +0 -161
- package/dist/judge/Judge.js.map +0 -1
- package/dist/judge/cases.d.ts.map +0 -1
- package/dist/judge/cases.js.map +0 -1
- package/dist/judge/form.d.ts.map +0 -1
- package/dist/judge/form.js.map +0 -1
- package/dist/name.d.ts +0 -3
- package/dist/name.d.ts.map +0 -1
- package/dist/name.js +0 -7
- package/dist/name.js.map +0 -1
- package/dist/projection/encode.d.ts +0 -3
- package/dist/projection/encode.d.ts.map +0 -1
- package/dist/projection/encode.js +0 -19
- package/dist/projection/encode.js.map +0 -1
- package/dist/projection/io.d.ts +0 -4
- package/dist/projection/io.d.ts.map +0 -1
- package/dist/projection/io.js +0 -29
- package/dist/projection/io.js.map +0 -1
- package/dist/projection/source.d.ts +0 -7
- package/dist/projection/source.d.ts.map +0 -1
- package/dist/projection/source.js.map +0 -1
- package/dist/same.d.ts +0 -6
- package/dist/same.d.ts.map +0 -1
- package/dist/same.js +0 -35
- package/dist/same.js.map +0 -1
- /package/dist/{SchemaView.js → schema/SchemaView.js} +0 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Field } from '../fields/Field.js';
|
|
2
|
+
import type { Checked } from './result.js';
|
|
3
|
+
export declare class ValueJudge {
|
|
4
|
+
private readonly field;
|
|
5
|
+
private static readonly plans;
|
|
6
|
+
private constructor();
|
|
7
|
+
static of(field: Field): ValueJudge;
|
|
8
|
+
check(value: unknown): Checked;
|
|
9
|
+
private static planFor;
|
|
10
|
+
private static customFormatOf;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ValueJudge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValueJudge.d.ts","sourceRoot":"","sources":["../../src/judge/ValueJudge.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAQ3C,qBAAa,UAAU;IAGD,OAAO,CAAC,QAAQ,CAAC,KAAK;IAF1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAEjE,OAAO,eAA8C;IAErD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAElC;IAED,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAuB7B;IAED,OAAO,CAAC,MAAM,CAAC,OAAO;IAetB,OAAO,CAAC,MAAM,CAAC,cAAc;CAU9B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Validator, format as engineFormats } from '@cfworker/json-schema';
|
|
2
|
+
import { Formats } from '../axis/shape/Formats.js';
|
|
3
|
+
import { Anatomy } from '../axis/shape/Shape.js';
|
|
4
|
+
export class ValueJudge {
|
|
5
|
+
field;
|
|
6
|
+
static plans = new WeakMap();
|
|
7
|
+
constructor(field) {
|
|
8
|
+
this.field = field;
|
|
9
|
+
}
|
|
10
|
+
static of(field) {
|
|
11
|
+
return new ValueJudge(field);
|
|
12
|
+
}
|
|
13
|
+
check(value) {
|
|
14
|
+
const shape = this.field.shape;
|
|
15
|
+
const base = Anatomy.of(shape).base;
|
|
16
|
+
if (value !== null) {
|
|
17
|
+
if (base?.type === 'object' && !base.properties)
|
|
18
|
+
return { value };
|
|
19
|
+
if (base?.type === 'string' && base.format === 'date-time' && value instanceof Date) {
|
|
20
|
+
return Number.isNaN(value.getTime()) ? { error: 'Invalid date' } : { value };
|
|
21
|
+
}
|
|
22
|
+
if ((base?.type === 'number' || base?.type === 'integer') &&
|
|
23
|
+
typeof value === 'number' &&
|
|
24
|
+
Number.isNaN(value)) {
|
|
25
|
+
return { error: 'Expected a number' };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const plan = ValueJudge.planFor(shape);
|
|
29
|
+
const result = plan.validator.validate(value);
|
|
30
|
+
if (!result.valid)
|
|
31
|
+
return { error: result.errors[0]?.error ?? 'Invalid value' };
|
|
32
|
+
if (plan.custom && typeof value === 'string' && !plan.custom(value)) {
|
|
33
|
+
return { error: `String does not match format "${plan.formatName}".` };
|
|
34
|
+
}
|
|
35
|
+
return { value };
|
|
36
|
+
}
|
|
37
|
+
static planFor(shape) {
|
|
38
|
+
let plan = this.plans.get(shape);
|
|
39
|
+
if (!plan) {
|
|
40
|
+
const base = Anatomy.of(shape).base;
|
|
41
|
+
const formatName = base?.type === 'string' ? base.format : undefined;
|
|
42
|
+
plan = {
|
|
43
|
+
validator: new Validator(shape, '2020-12', true),
|
|
44
|
+
custom: formatName === undefined ? undefined : this.customFormatOf(formatName),
|
|
45
|
+
formatName,
|
|
46
|
+
};
|
|
47
|
+
this.plans.set(shape, plan);
|
|
48
|
+
}
|
|
49
|
+
return plan;
|
|
50
|
+
}
|
|
51
|
+
static customFormatOf(name) {
|
|
52
|
+
const custom = Formats.resolve(name);
|
|
53
|
+
if (!custom && !(name in engineFormats)) {
|
|
54
|
+
throw new Error(`Unknown format: '${name}'. Register it with Formats.register('${name}', …) — ` +
|
|
55
|
+
`the engine judges ${Object.keys(engineFormats).length} formats natively and this is not one of them.`);
|
|
56
|
+
}
|
|
57
|
+
return custom;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=ValueJudge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ValueJudge.js","sourceRoot":"","sources":["../../src/judge/ValueJudge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Fields } from '../fields/Field.js';
|
|
2
|
+
import type { SchemaView } from '../schema/SchemaView.js';
|
|
3
|
+
import type { SchemaDescriptor } from '../card/Descriptor.js';
|
|
4
|
+
export type SchemaOrCard = SchemaView | SchemaDescriptor;
|
|
5
|
+
export declare function schemaOf(source: SchemaOrCard): SchemaView;
|
|
6
|
+
export declare function fieldsOf(source: SchemaOrCard): Fields;
|
|
7
|
+
//# sourceMappingURL=SchemaOrCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaOrCard.d.ts","sourceRoot":"","sources":["../../src/projection/SchemaOrCard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAMzD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAEzD;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAErD"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Card } from '../card/Card.js';
|
|
2
2
|
function isDescriptor(source) {
|
|
3
3
|
return typeof source.getFields !== 'function';
|
|
4
4
|
}
|
|
5
5
|
export function schemaOf(source) {
|
|
6
|
-
return isDescriptor(source) ?
|
|
6
|
+
return isDescriptor(source) ? Card.fromDescriptor(source).toSchema() : source;
|
|
7
7
|
}
|
|
8
8
|
export function fieldsOf(source) {
|
|
9
9
|
return schemaOf(source).getFields();
|
|
10
10
|
}
|
|
11
|
-
//# sourceMappingURL=
|
|
11
|
+
//# sourceMappingURL=SchemaOrCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaOrCard.js","sourceRoot":"","sources":["../../src/projection/SchemaOrCard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAIvC,SAAS,YAAY,CAAC,MAAoB;IACxC,OAAO,OAAQ,MAAqB,CAAC,SAAS,KAAK,UAAU,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAoB;IAC3C,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAoB;IAC3C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Fields } from '../fields/Field.js';
|
|
2
|
+
export declare class Visibility {
|
|
3
|
+
private readonly fields;
|
|
4
|
+
private constructor();
|
|
5
|
+
static of(fields: Fields): Visibility;
|
|
6
|
+
get input(): Fields;
|
|
7
|
+
get output(): Fields;
|
|
8
|
+
encode(record: Record<string, unknown>): Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=Visibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Visibility.d.ts","sourceRoot":"","sources":["../../src/projection/Visibility.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,qBAAa,UAAU;IACD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAA3C,OAAO,eAAgD;IAEvD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAEpC;IAED,IAAI,KAAK,IAAI,MAAM,CAWlB;IAED,IAAI,MAAM,IAAI,MAAM,CAOnB;IAED,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAW/D;CACF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Boundary } from '../axis/boundary/Boundary.js';
|
|
2
|
+
import { Lifecycle } from '../axis/lifecycle/Lifecycle.js';
|
|
3
|
+
import { Role } from '../axis/role/Role.js';
|
|
4
|
+
export class Visibility {
|
|
5
|
+
fields;
|
|
6
|
+
constructor(fields) {
|
|
7
|
+
this.fields = fields;
|
|
8
|
+
}
|
|
9
|
+
static of(fields) {
|
|
10
|
+
return new Visibility(fields);
|
|
11
|
+
}
|
|
12
|
+
get input() {
|
|
13
|
+
const result = {};
|
|
14
|
+
for (const [name, field] of Object.entries(this.fields)) {
|
|
15
|
+
const role = Role.of(field);
|
|
16
|
+
if (role.isPrimary)
|
|
17
|
+
continue;
|
|
18
|
+
if (Lifecycle.of(field).create === 'now')
|
|
19
|
+
continue;
|
|
20
|
+
if (role.isCollection)
|
|
21
|
+
continue;
|
|
22
|
+
if (Boundary.of(field).readOnly)
|
|
23
|
+
continue;
|
|
24
|
+
result[name] = field;
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
get output() {
|
|
29
|
+
const result = {};
|
|
30
|
+
for (const [name, field] of Object.entries(this.fields)) {
|
|
31
|
+
if (Boundary.of(field).writeOnly)
|
|
32
|
+
continue;
|
|
33
|
+
result[name] = field;
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
encode(record) {
|
|
38
|
+
const out = { ...record };
|
|
39
|
+
for (const [key, field] of Object.entries(this.fields)) {
|
|
40
|
+
if (!(key in record))
|
|
41
|
+
continue;
|
|
42
|
+
const boundary = Boundary.of(field);
|
|
43
|
+
if (boundary.writeOnly) {
|
|
44
|
+
delete out[key];
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const value = record[key];
|
|
48
|
+
if (value === null || value === undefined)
|
|
49
|
+
continue;
|
|
50
|
+
out[key] = boundary.encode(value);
|
|
51
|
+
}
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=Visibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Visibility.js","sourceRoot":"","sources":["../../src/projection/Visibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAG5C,MAAM,OAAO,UAAU;IACgB,MAAM;IAA3C,YAAqC,MAAc;sBAAd,MAAM;IAAW,CAAC;IAEvD,MAAM,CAAC,EAAE,CAAC,MAAc;QACtB,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,KAAK;QACP,MAAM,MAAM,GAAW,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,SAAS;gBAAE,SAAS;YAC7B,IAAI,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,KAAK;gBAAE,SAAS;YACnD,IAAI,IAAI,CAAC,YAAY;gBAAE,SAAS;YAChC,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ;gBAAE,SAAS;YAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,MAAM;QACR,MAAM,MAAM,GAAW,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS;gBAAE,SAAS;YAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,MAA+B;QACpC,MAAM,GAAG,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;QACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC;gBAAE,SAAS;YAC/B,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACtD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YACpD,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -1,33 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
interface SuccessResult<Output> {
|
|
13
|
-
readonly value: Output;
|
|
14
|
-
readonly issues?: undefined;
|
|
15
|
-
}
|
|
16
|
-
interface FailureResult {
|
|
17
|
-
readonly issues: ReadonlyArray<Issue>;
|
|
18
|
-
}
|
|
19
|
-
interface Issue {
|
|
20
|
-
readonly message: string;
|
|
21
|
-
readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;
|
|
22
|
-
}
|
|
23
|
-
interface PathSegment {
|
|
24
|
-
readonly key: PropertyKey;
|
|
25
|
-
}
|
|
26
|
-
interface Types<Input = unknown, Output = Input> {
|
|
27
|
-
readonly input: Input;
|
|
28
|
-
readonly output: Output;
|
|
29
|
-
}
|
|
30
|
-
type InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema['~standard']['types']>['input'];
|
|
31
|
-
type InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema['~standard']['types']>['output'];
|
|
32
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* The Standard Schema interface, from the package that owns it.
|
|
3
|
+
*
|
|
4
|
+
* This file used to CARRY the spec — 47 lines of hand-copied interface — and the copy had
|
|
5
|
+
* silently fallen a version behind: v1.1 gave `Props` a base it extends (`StandardTypedV1`)
|
|
6
|
+
* and gave `validate` a second `options` parameter. Nothing broke, because a realization may
|
|
7
|
+
* ignore an optional argument, which is exactly why nobody noticed. A standard is owned by
|
|
8
|
+
* whoever publishes it; the package is types only (`index.js` is zero bytes), so importing
|
|
9
|
+
* it costs a browser nothing.
|
|
10
|
+
*/
|
|
11
|
+
export type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
33
12
|
//# sourceMappingURL=standard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard.d.ts","sourceRoot":"","sources":["../../src/projection/standard.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"standard.d.ts","sourceRoot":"","sources":["../../src/projection/standard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { type Fields } from '../fields/Field.js';
|
|
2
|
+
import { type CompositeUnique, type EntityDeclarations, type PreviousNames } from '../EntityDeclarations.js';
|
|
3
|
+
import { type EntityAdapters } from '../EntityAdapters.js';
|
|
4
|
+
import { SchemaDerivation } from './SchemaDerivation.js';
|
|
5
|
+
import { SchemaDefinition } from './SchemaDefinition.js';
|
|
6
|
+
import { type ValidateOptions } from '../judge/options.js';
|
|
7
|
+
import type { StandardSchemaV1 } from '../projection/standard.js';
|
|
8
|
+
import type { PartialRow, Row, SchemaView } from './SchemaView.js';
|
|
9
|
+
export declare const ANONYMOUS_SCHEMA_NAME = "Schema";
|
|
10
|
+
export interface SchemaConstructor<TFields extends Fields> extends SchemaView<TFields> {
|
|
11
|
+
new (data: PartialRow<TFields>): Row<TFields>;
|
|
12
|
+
readonly "~standard": StandardSchemaV1.Props<Record<string, unknown>, Row<TFields>>;
|
|
13
|
+
readonly derivation?: SchemaDerivation;
|
|
14
|
+
readonly previous?: PreviousNames<TFields>;
|
|
15
|
+
readonly anchored?: boolean;
|
|
16
|
+
from(data: Record<string, unknown>): Row<TFields>;
|
|
17
|
+
pick<K extends string & keyof TFields>(...keys: K[]): SchemaConstructor<Pick<TFields, K>>;
|
|
18
|
+
omit<K extends string & keyof TFields>(...keys: K[]): SchemaConstructor<Omit<TFields, K>>;
|
|
19
|
+
partial(): SchemaConstructor<TFields>;
|
|
20
|
+
extend<E extends Fields>(extra: E): SchemaConstructor<TFields & E>;
|
|
21
|
+
declares(declarations: EntityDeclarations<TFields>): SchemaConstructor<TFields>;
|
|
22
|
+
anchor(): SchemaConstructor<TFields>;
|
|
23
|
+
named(name: string): SchemaConstructor<TFields>;
|
|
24
|
+
rename(mapping: Partial<Record<string & keyof TFields, string>>): SchemaConstructor<Fields>;
|
|
25
|
+
}
|
|
26
|
+
export declare class Schema {
|
|
27
|
+
/** The one place a schema holds what it is. The readings below are its projections. */
|
|
28
|
+
static definition: SchemaDefinition;
|
|
29
|
+
static get fields(): Fields;
|
|
30
|
+
static get adapters(): EntityAdapters<Fields> | undefined;
|
|
31
|
+
static get opts(): ValidateOptions;
|
|
32
|
+
static get derivation(): SchemaDerivation | undefined;
|
|
33
|
+
static get previous(): PreviousNames<Fields> | undefined;
|
|
34
|
+
static get anchored(): boolean;
|
|
35
|
+
constructor(data?: Record<string, unknown>);
|
|
36
|
+
static getFields(): Fields;
|
|
37
|
+
static getAdapters(): Readonly<Partial<import("../EntityAdapters.js").FougereEntityAdapters<string>>> | undefined;
|
|
38
|
+
static getUnique(): CompositeUnique<Fields> | undefined;
|
|
39
|
+
static getOpts(): ValidateOptions;
|
|
40
|
+
static validate(input: unknown): import("../index.js").ValidationResult<Record<string, unknown>>;
|
|
41
|
+
static from(data: Record<string, unknown>): Record<string, unknown>;
|
|
42
|
+
static get ["~standard"](): StandardSchemaV1.Props<Record<string, unknown>>;
|
|
43
|
+
static pick(...keys: string[]): SchemaConstructor<Fields>;
|
|
44
|
+
static omit(...keys: string[]): SchemaConstructor<Fields>;
|
|
45
|
+
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
|
+
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
|
+
static anchor(): SchemaConstructor<Fields>;
|
|
59
|
+
static partial(): SchemaConstructor<Fields>;
|
|
60
|
+
static extend(extra: Fields): SchemaConstructor<Fields>;
|
|
61
|
+
static named(name: string): typeof Schema;
|
|
62
|
+
static compose<T extends SchemaView[]>(...sources: T): SchemaConstructor<Merged<T>>;
|
|
63
|
+
static of<TFields extends Fields>(stated: {
|
|
64
|
+
fields: TFields;
|
|
65
|
+
derivation?: SchemaDerivation;
|
|
66
|
+
adapters?: EntityAdapters<TFields>;
|
|
67
|
+
opts?: ValidateOptions;
|
|
68
|
+
previous?: PreviousNames<TFields>;
|
|
69
|
+
anchored?: boolean;
|
|
70
|
+
}): SchemaConstructor<TFields>;
|
|
71
|
+
/** The class a definition becomes. The one place a Schema subclass is born. */
|
|
72
|
+
private static subclass;
|
|
73
|
+
private static derive;
|
|
74
|
+
}
|
|
75
|
+
type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
76
|
+
type Merged<T extends SchemaView[]> = UnionToIntersection<T[number] extends {
|
|
77
|
+
getFields(): infer F;
|
|
78
|
+
} ? F : Fields> & Fields;
|
|
79
|
+
export {};
|
|
80
|
+
//# sourceMappingURL=Schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../src/schema/Schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
import { Boundary } from '
|
|
2
|
-
import {
|
|
3
|
-
import { FieldGroup } from '
|
|
4
|
-
import { Unique } from '
|
|
5
|
-
import {
|
|
1
|
+
import { Boundary } from '../axis/boundary/Boundary.js';
|
|
2
|
+
import { EntityAdapterSet } from '../EntityAdapters.js';
|
|
3
|
+
import { FieldGroup } from '../constraint/FieldGroup.js';
|
|
4
|
+
import { Unique } from '../constraint/Unique.js';
|
|
5
|
+
import { RowJudge } from '../judge/RowJudge.js';
|
|
6
|
+
import { SchemaDefinition } from './SchemaDefinition.js';
|
|
6
7
|
export const ANONYMOUS_SCHEMA_NAME = "Schema";
|
|
7
8
|
export class Schema {
|
|
8
|
-
|
|
9
|
-
static
|
|
10
|
-
static
|
|
11
|
-
static
|
|
12
|
-
static
|
|
13
|
-
static
|
|
9
|
+
/** The one place a schema holds what it is. The readings below are its projections. */
|
|
10
|
+
static definition = SchemaDefinition.stated({ fields: {} });
|
|
11
|
+
static get fields() { return this.definition.fields; }
|
|
12
|
+
static get adapters() { return this.definition.adapters; }
|
|
13
|
+
static get opts() { return this.definition.opts; }
|
|
14
|
+
static get derivation() { return this.definition.derivation; }
|
|
15
|
+
static get previous() { return this.definition.previous; }
|
|
16
|
+
static get anchored() { return this.definition.anchored; }
|
|
14
17
|
constructor(data) {
|
|
15
18
|
if (!data)
|
|
16
19
|
return;
|
|
@@ -19,14 +22,14 @@ export class Schema {
|
|
|
19
22
|
}
|
|
20
23
|
}
|
|
21
24
|
static getFields() { return this.fields; }
|
|
22
|
-
static
|
|
25
|
+
static getAdapters() { return this.adapters; }
|
|
23
26
|
static getUnique() {
|
|
24
27
|
const groups = FieldGroup.groupsOf(this.fields, Unique);
|
|
25
28
|
return groups.length ? groups.map((group) => [...group.members]) : undefined;
|
|
26
29
|
}
|
|
27
30
|
static getOpts() { return this.opts; }
|
|
28
31
|
static validate(input) {
|
|
29
|
-
return
|
|
32
|
+
return RowJudge.of(this.fields, this.opts).check(input);
|
|
30
33
|
}
|
|
31
34
|
static from(data) {
|
|
32
35
|
const out = {};
|
|
@@ -49,7 +52,7 @@ export class Schema {
|
|
|
49
52
|
version: 1,
|
|
50
53
|
vendor: "fougere",
|
|
51
54
|
validate(value) {
|
|
52
|
-
const result =
|
|
55
|
+
const result = RowJudge.of(fields, opts).check(value);
|
|
53
56
|
if (result.success)
|
|
54
57
|
return { value: result.data };
|
|
55
58
|
return {
|
|
@@ -84,12 +87,30 @@ export class Schema {
|
|
|
84
87
|
renamed[mapping[key] ?? key] = field;
|
|
85
88
|
return this.derive(renamed, (k) => mapping[k] ?? k);
|
|
86
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Everything a schema states about ITSELF, available wherever a schema is. `entity(fields, …)`
|
|
92
|
+
* is this same gesture at the declaration site; the fields do not move, so neither does the type.
|
|
93
|
+
*/
|
|
94
|
+
static declares(declarations) {
|
|
95
|
+
const addressed = EntityAdapterSet.of(declarations.adapters)?.fieldNames ?? [];
|
|
96
|
+
assertKnownKeys("declares", [...addressed, ...Object.keys(declarations.previous ?? {})], this.fields);
|
|
97
|
+
return Schema.subclass(this.definition.declaring(declarations));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* This schema holds rows of its own — every entity is one, and a derivation says so.
|
|
101
|
+
*
|
|
102
|
+
* An anchor is where a walk STOPS: `derivation.anchor` climbs to the nearest one, and what
|
|
103
|
+
* is cut from an anchor roots on it. Two anchors are two entities that happen to share a
|
|
104
|
+
* shape, never a hierarchy — nothing here subtypes, so a relation between them is `ref()`.
|
|
105
|
+
*/
|
|
106
|
+
static anchor() {
|
|
107
|
+
return Schema.subclass(this.definition.anchoring());
|
|
108
|
+
}
|
|
87
109
|
static partial() {
|
|
88
|
-
return Schema.
|
|
110
|
+
return Schema.subclass(this.definition.patched(this));
|
|
89
111
|
}
|
|
90
112
|
static extend(extra) {
|
|
91
|
-
|
|
92
|
-
return Schema.of({ ...this.fields, ...extra }, this.source ?? this, this.hints, this.opts, this.survived);
|
|
113
|
+
return Schema.subclass(this.definition.extended(extra, this));
|
|
93
114
|
}
|
|
94
115
|
static named(name) {
|
|
95
116
|
if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name)) {
|
|
@@ -102,44 +123,21 @@ export class Schema {
|
|
|
102
123
|
return this;
|
|
103
124
|
}
|
|
104
125
|
static compose(...sources) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
Object.assign(merged, source.getFields());
|
|
110
|
-
const hints = source.getHints();
|
|
111
|
-
if (hints) {
|
|
112
|
-
for (const [adapter, perField] of Object.entries(hints)) {
|
|
113
|
-
if (!perField || typeof perField !== "object")
|
|
114
|
-
continue;
|
|
115
|
-
mergedHints[adapter] = { ...mergedHints[adapter], ...perField };
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
mergedOpts = { ...mergedOpts, ...source.getOpts() };
|
|
119
|
-
}
|
|
120
|
-
const hints = Object.keys(mergedHints).length ? mergedHints : undefined;
|
|
121
|
-
return Schema.of(merged, undefined, hints, mergedOpts);
|
|
126
|
+
return Schema.subclass(SchemaDefinition.merged(sources));
|
|
127
|
+
}
|
|
128
|
+
static of(stated) {
|
|
129
|
+
return Schema.subclass(SchemaDefinition.stated(stated));
|
|
122
130
|
}
|
|
123
|
-
|
|
131
|
+
/** The class a definition becomes. The one place a Schema subclass is born. */
|
|
132
|
+
static subclass(definition) {
|
|
124
133
|
class Derived extends Schema {
|
|
125
134
|
}
|
|
126
|
-
|
|
135
|
+
Derived.definition = definition;
|
|
127
136
|
Object.defineProperty(Derived, "name", { value: ANONYMOUS_SCHEMA_NAME, configurable: true });
|
|
128
137
|
return Derived;
|
|
129
138
|
}
|
|
130
139
|
static derive(fields, survives) {
|
|
131
|
-
|
|
132
|
-
for (const [key, field] of Object.entries(fields))
|
|
133
|
-
renamed[key] = field.rename(survives);
|
|
134
|
-
return Schema.of(renamed, this.source ?? this, deriveHints(this.hints, survives), this.opts, this.trace(survives));
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* The trace, composed with the parent's — so `Post.pick(a, b).omit(b)` reports against
|
|
138
|
-
* `Post` and not against the intermediate, exactly as `source` skips it.
|
|
139
|
-
*/
|
|
140
|
-
static trace(survives) {
|
|
141
|
-
const parent = this.survived ?? Object.fromEntries(Object.keys(this.fields).map((k) => [k, k]));
|
|
142
|
-
return Object.fromEntries(Object.entries(parent).map(([origin, here]) => [origin, here === undefined ? undefined : survives(here)]));
|
|
140
|
+
return Schema.subclass(this.definition.cut(fields, survives, this));
|
|
143
141
|
}
|
|
144
142
|
}
|
|
145
143
|
function assertKnownKeys(operation, keys, fields) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Schema.js","sourceRoot":"","sources":["../../src/schema/Schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type Fields } from '../fields/Field.js';
|
|
2
|
+
import { type EntityDeclarations, type PreviousNames } from '../EntityDeclarations.js';
|
|
3
|
+
import { type EntityAdapters } from '../EntityAdapters.js';
|
|
4
|
+
import { SchemaDerivation } from './SchemaDerivation.js';
|
|
5
|
+
import { type ValidateOptions } from '../judge/options.js';
|
|
6
|
+
import type { SchemaView } from './SchemaView.js';
|
|
7
|
+
/**
|
|
8
|
+
* Everything a schema IS, apart from being a class whose instances are rows.
|
|
9
|
+
*
|
|
10
|
+
* The members used to be that many statics assigned side by side, and every derivation
|
|
11
|
+
* re-threaded them by hand — which is how one of them came to be dropped from a list
|
|
12
|
+
* without anyone noticing. A transformation here returns a COMPLETE definition or it does
|
|
13
|
+
* not compile, so no gesture can mix the fields of one with the options of another.
|
|
14
|
+
*
|
|
15
|
+
* Internal: it is not exported from the package and never appears on `SchemaConstructor`.
|
|
16
|
+
* A user derives with `Order.pick(…)`, never `Order.definition.pick(…)`.
|
|
17
|
+
*/
|
|
18
|
+
export declare class SchemaDefinition {
|
|
19
|
+
readonly fields: Fields;
|
|
20
|
+
readonly adapters: EntityAdapters<Fields> | undefined;
|
|
21
|
+
readonly opts: ValidateOptions;
|
|
22
|
+
readonly previous: PreviousNames<Fields> | undefined;
|
|
23
|
+
readonly derivation: SchemaDerivation | undefined;
|
|
24
|
+
readonly anchored: boolean;
|
|
25
|
+
private constructor();
|
|
26
|
+
static stated(said: {
|
|
27
|
+
fields: Fields;
|
|
28
|
+
adapters?: EntityAdapters<Fields>;
|
|
29
|
+
opts?: ValidateOptions;
|
|
30
|
+
previous?: PreviousNames<Fields>;
|
|
31
|
+
derivation?: SchemaDerivation;
|
|
32
|
+
anchored?: boolean;
|
|
33
|
+
}): SchemaDefinition;
|
|
34
|
+
/**
|
|
35
|
+
* What a schema states about ITSELF, folded into what it already states — one adapter
|
|
36
|
+
* entry per field wins the later spelling, and a unique group is stamped on its members.
|
|
37
|
+
*/
|
|
38
|
+
declaring(said: EntityDeclarations<Fields>): SchemaDefinition;
|
|
39
|
+
/**
|
|
40
|
+
* The same schema, holding rows of its own. A derivation is an answer until it says this.
|
|
41
|
+
*/
|
|
42
|
+
anchoring(): SchemaDefinition;
|
|
43
|
+
/**
|
|
44
|
+
* `pick`, `omit` and `rename` are one gesture: the fields that remain, and what became
|
|
45
|
+
* of each name. What each adapter was handed follows the same correspondence, and so does the origin.
|
|
46
|
+
*/
|
|
47
|
+
cut(fields: Fields, survives: (key: string) => string | undefined, root: SchemaView): SchemaDefinition;
|
|
48
|
+
/** The same fields, judged as an update. */
|
|
49
|
+
patched(root: SchemaView): SchemaDefinition;
|
|
50
|
+
/** The added fields have no origin, so the derivation is unchanged: it speaks of the root. */
|
|
51
|
+
extended(extra: Fields, root: SchemaView): SchemaDefinition;
|
|
52
|
+
/** Several views folded into one definition, which therefore has no single origin. */
|
|
53
|
+
static merged(views: readonly SchemaView[]): SchemaDefinition;
|
|
54
|
+
/**
|
|
55
|
+
* The origin this definition already carries, or the one `root` becomes. A schema that
|
|
56
|
+
* is an ANCHOR holds rows of its own, so what is cut from it roots on IT and not on its own origin.
|
|
57
|
+
*/
|
|
58
|
+
private origin;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=SchemaDefinition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaDefinition.d.ts","sourceRoot":"","sources":["../../src/schema/SchemaDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAEzB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,SAAS;IACrD,QAAQ,CAAC,IAAI,EAAE,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS;IACpD,QAAQ,CAAC,UAAU,EAAE,gBAAgB,GAAG,SAAS;IACjD,QAAQ,CAAC,QAAQ,EAAE,OAAO;IAN5B,OAAO,eAOH;IAEJ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAClB,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;KACpB,GAAG,gBAAgB,CAInB;IAED;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAS5D;IAED;;OAEG;IACH,SAAS,IAAI,gBAAgB,CAI5B;IAED;;;OAGG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAWrG;IAED,4CAA4C;IAC5C,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAI1C;IAED,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,gBAAgB,CAI1D;IAED,sFAAsF;IACtF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,gBAAgB,CAU5D;IAED;;;OAGG;IACH,OAAO,CAAC,MAAM;CAKf"}
|