@fougere/schema 0.2.0-alpha.2 → 0.3.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/dist/EntityDeclarations.d.ts +22 -0
- package/dist/EntityDeclarations.d.ts.map +1 -0
- package/dist/{hints.js → EntityDeclarations.js} +1 -5
- package/dist/EntityDeclarations.js.map +1 -0
- package/dist/Field.d.ts +21 -0
- package/dist/Field.d.ts.map +1 -0
- package/dist/Field.js +50 -0
- package/dist/Field.js.map +1 -0
- package/dist/{schema/schema.d.ts → Schema.d.ts} +27 -34
- package/dist/Schema.d.ts.map +1 -0
- package/dist/{schema/schema.js → Schema.js} +49 -59
- package/dist/Schema.js.map +1 -0
- package/dist/SchemaView.d.ts +18 -0
- package/dist/SchemaView.d.ts.map +1 -0
- package/dist/SchemaView.js +2 -0
- package/dist/SchemaView.js.map +1 -0
- package/dist/axis/Axis.d.ts +10 -0
- package/dist/axis/Axis.d.ts.map +1 -0
- package/dist/axis/Axis.js +9 -0
- package/dist/axis/Axis.js.map +1 -0
- package/dist/axis/Meta.d.ts +4 -0
- package/dist/axis/Meta.d.ts.map +1 -0
- package/dist/axis/Meta.js +2 -0
- package/dist/axis/Meta.js.map +1 -0
- package/dist/axis/boundary/Boundaries.d.ts +20 -0
- package/dist/axis/boundary/Boundaries.d.ts.map +1 -0
- package/dist/axis/boundary/Boundaries.js +31 -0
- package/dist/axis/boundary/Boundaries.js.map +1 -0
- package/dist/axis/boundary/Boundary.d.ts +26 -0
- package/dist/axis/boundary/Boundary.d.ts.map +1 -0
- package/dist/axis/boundary/Boundary.js +53 -0
- package/dist/axis/boundary/Boundary.js.map +1 -0
- package/dist/axis/boundary/axis.d.ts +4 -0
- package/dist/axis/boundary/axis.d.ts.map +1 -0
- package/dist/axis/boundary/axis.js +29 -0
- package/dist/axis/boundary/axis.js.map +1 -0
- package/dist/axis/lifecycle/Generators.d.ts +4 -0
- package/dist/axis/lifecycle/Generators.d.ts.map +1 -0
- package/dist/axis/lifecycle/Generators.js +8 -0
- package/dist/axis/lifecycle/Generators.js.map +1 -0
- package/dist/axis/lifecycle/Lifecycle.d.ts +28 -0
- package/dist/axis/lifecycle/Lifecycle.d.ts.map +1 -0
- package/dist/axis/lifecycle/Lifecycle.js +38 -0
- package/dist/axis/lifecycle/Lifecycle.js.map +1 -0
- package/dist/axis/lifecycle/apply.d.ts +8 -0
- package/dist/axis/lifecycle/apply.d.ts.map +1 -0
- package/dist/axis/lifecycle/apply.js +72 -0
- package/dist/axis/lifecycle/apply.js.map +1 -0
- package/dist/axis/lifecycle/axis.d.ts +4 -0
- package/dist/axis/lifecycle/axis.d.ts.map +1 -0
- package/dist/axis/lifecycle/axis.js +46 -0
- package/dist/axis/lifecycle/axis.js.map +1 -0
- package/dist/axis/role/Relation.d.ts +10 -0
- package/dist/axis/role/Relation.d.ts.map +1 -0
- package/dist/axis/role/Relation.js +6 -0
- package/dist/axis/role/Relation.js.map +1 -0
- package/dist/axis/role/Role.d.ts +38 -0
- package/dist/axis/role/Role.d.ts.map +1 -0
- package/dist/axis/role/Role.js +50 -0
- package/dist/axis/role/Role.js.map +1 -0
- package/dist/axis/role/axis.d.ts +5 -0
- package/dist/axis/role/axis.d.ts.map +1 -0
- package/dist/axis/role/axis.js +101 -0
- package/dist/axis/role/axis.js.map +1 -0
- package/dist/axis/shape/Formats.d.ts +8 -0
- package/dist/axis/shape/Formats.d.ts.map +1 -0
- package/dist/axis/shape/Formats.js +10 -0
- package/dist/axis/shape/Formats.js.map +1 -0
- package/dist/axis/shape/Shape.d.ts +58 -0
- package/dist/axis/shape/Shape.d.ts.map +1 -0
- package/dist/{field/shape.js → axis/shape/Shape.js} +10 -25
- package/dist/axis/shape/Shape.js.map +1 -0
- package/dist/card/Descriptor.d.ts +55 -0
- package/dist/card/Descriptor.d.ts.map +1 -0
- package/dist/card/Descriptor.js +2 -0
- package/dist/card/Descriptor.js.map +1 -0
- package/dist/card/describe.d.ts +12 -0
- package/dist/card/describe.d.ts.map +1 -0
- package/dist/card/describe.js +83 -0
- package/dist/card/describe.js.map +1 -0
- package/dist/card/diff.d.ts +140 -0
- package/dist/card/diff.d.ts.map +1 -0
- package/dist/card/diff.js +123 -0
- package/dist/card/diff.js.map +1 -0
- package/dist/card/reconstruct.d.ts +11 -0
- package/dist/card/reconstruct.d.ts.map +1 -0
- package/dist/card/reconstruct.js +83 -0
- package/dist/card/reconstruct.js.map +1 -0
- package/dist/card/typescript.d.ts +17 -0
- package/dist/card/typescript.d.ts.map +1 -0
- package/dist/card/typescript.js +93 -0
- package/dist/card/typescript.js.map +1 -0
- package/dist/clean.d.ts +2 -0
- package/dist/clean.d.ts.map +1 -0
- package/dist/{projections/card.js → clean.js} +1 -2
- package/dist/clean.js.map +1 -0
- package/dist/constraint/FieldGroup.d.ts +21 -0
- package/dist/constraint/FieldGroup.d.ts.map +1 -0
- package/dist/constraint/FieldGroup.js +65 -0
- package/dist/constraint/FieldGroup.js.map +1 -0
- package/dist/constraint/Unique.d.ts +4 -0
- package/dist/constraint/Unique.d.ts.map +1 -0
- package/dist/constraint/Unique.js +4 -0
- package/dist/constraint/Unique.js.map +1 -0
- package/dist/entity.d.ts +4 -19
- package/dist/entity.d.ts.map +1 -1
- package/dist/entity.js +13 -39
- package/dist/entity.js.map +1 -1
- package/dist/index.d.ts +54 -37
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -48
- package/dist/index.js.map +1 -1
- package/dist/judge/Judge.d.ts +14 -0
- package/dist/judge/Judge.d.ts.map +1 -0
- package/dist/judge/Judge.js +161 -0
- package/dist/judge/Judge.js.map +1 -0
- package/dist/judge/cases.d.ts +50 -0
- package/dist/judge/cases.d.ts.map +1 -0
- package/dist/judge/cases.js +100 -0
- package/dist/judge/cases.js.map +1 -0
- package/dist/judge/form.d.ts +11 -0
- package/dist/judge/form.d.ts.map +1 -0
- package/dist/judge/form.js +18 -0
- package/dist/judge/form.js.map +1 -0
- package/dist/judge/options.d.ts +4 -0
- package/dist/judge/options.d.ts.map +1 -0
- package/dist/judge/options.js +2 -0
- package/dist/judge/options.js.map +1 -0
- package/dist/judge/result.d.ts +17 -0
- package/dist/judge/result.d.ts.map +1 -0
- package/dist/judge/result.js +2 -0
- package/dist/judge/result.js.map +1 -0
- package/dist/name.d.ts +1 -6
- package/dist/name.d.ts.map +1 -1
- package/dist/name.js +3 -6
- package/dist/name.js.map +1 -1
- package/dist/projection/encode.d.ts +3 -0
- package/dist/projection/encode.d.ts.map +1 -0
- package/dist/projection/encode.js +19 -0
- package/dist/projection/encode.js.map +1 -0
- package/dist/projection/io.d.ts +4 -0
- package/dist/projection/io.d.ts.map +1 -0
- package/dist/projection/io.js +29 -0
- package/dist/projection/io.js.map +1 -0
- package/dist/projection/source.d.ts +7 -0
- package/dist/projection/source.d.ts.map +1 -0
- package/dist/projection/source.js +11 -0
- package/dist/projection/source.js.map +1 -0
- package/dist/{projections → projection}/standard.d.ts +0 -8
- package/dist/projection/standard.d.ts.map +1 -0
- package/dist/projection/standard.js +2 -0
- package/dist/projection/standard.js.map +1 -0
- package/dist/same.d.ts +6 -0
- package/dist/same.d.ts.map +1 -0
- package/dist/same.js +35 -0
- package/dist/same.js.map +1 -0
- package/dist/vocabulary/bool.d.ts +1 -1
- package/dist/vocabulary/bool.d.ts.map +1 -1
- package/dist/vocabulary/bool.js +1 -1
- package/dist/vocabulary/bool.js.map +1 -1
- package/dist/vocabulary/created.d.ts +1 -5
- package/dist/vocabulary/created.d.ts.map +1 -1
- package/dist/vocabulary/created.js +1 -5
- package/dist/vocabulary/created.js.map +1 -1
- package/dist/vocabulary/date.d.ts +1 -1
- package/dist/vocabulary/date.d.ts.map +1 -1
- package/dist/vocabulary/date.js +1 -1
- package/dist/vocabulary/date.js.map +1 -1
- package/dist/vocabulary/email.d.ts +1 -2
- package/dist/vocabulary/email.d.ts.map +1 -1
- package/dist/vocabulary/email.js +0 -1
- package/dist/vocabulary/email.js.map +1 -1
- package/dist/vocabulary/immutable.d.ts +2 -6
- package/dist/vocabulary/immutable.d.ts.map +1 -1
- package/dist/vocabulary/immutable.js +4 -7
- package/dist/vocabulary/immutable.js.map +1 -1
- package/dist/vocabulary/indexed.d.ts +2 -7
- package/dist/vocabulary/indexed.d.ts.map +1 -1
- package/dist/vocabulary/indexed.js +2 -8
- package/dist/vocabulary/indexed.js.map +1 -1
- package/dist/vocabulary/json.d.ts +2 -10
- package/dist/vocabulary/json.d.ts.map +1 -1
- package/dist/vocabulary/json.js +10 -7
- package/dist/vocabulary/json.js.map +1 -1
- package/dist/vocabulary/list.d.ts +1 -12
- package/dist/vocabulary/list.d.ts.map +1 -1
- package/dist/vocabulary/list.js +1 -14
- package/dist/vocabulary/list.js.map +1 -1
- package/dist/vocabulary/many.d.ts +2 -5
- package/dist/vocabulary/many.d.ts.map +1 -1
- package/dist/vocabulary/many.js +2 -5
- package/dist/vocabulary/many.js.map +1 -1
- package/dist/vocabulary/nullable.d.ts +2 -6
- package/dist/vocabulary/nullable.d.ts.map +1 -1
- package/dist/vocabulary/nullable.js +5 -8
- package/dist/vocabulary/nullable.js.map +1 -1
- package/dist/vocabulary/number.d.ts +1 -1
- package/dist/vocabulary/number.d.ts.map +1 -1
- package/dist/vocabulary/number.js +1 -1
- package/dist/vocabulary/number.js.map +1 -1
- package/dist/vocabulary/oneOf.d.ts +1 -8
- package/dist/vocabulary/oneOf.d.ts.map +1 -1
- package/dist/vocabulary/oneOf.js +1 -1
- package/dist/vocabulary/oneOf.js.map +1 -1
- package/dist/vocabulary/optional.d.ts +2 -9
- package/dist/vocabulary/optional.d.ts.map +1 -1
- package/dist/vocabulary/optional.js +6 -14
- package/dist/vocabulary/optional.js.map +1 -1
- package/dist/vocabulary/primary.d.ts +2 -15
- package/dist/vocabulary/primary.d.ts.map +1 -1
- package/dist/vocabulary/primary.js +3 -9
- package/dist/vocabulary/primary.js.map +1 -1
- package/dist/vocabulary/readOnly.d.ts +2 -6
- package/dist/vocabulary/readOnly.d.ts.map +1 -1
- package/dist/vocabulary/readOnly.js +5 -8
- package/dist/vocabulary/readOnly.js.map +1 -1
- package/dist/vocabulary/ref.d.ts +2 -7
- package/dist/vocabulary/ref.d.ts.map +1 -1
- package/dist/vocabulary/ref.js +2 -7
- package/dist/vocabulary/ref.js.map +1 -1
- package/dist/vocabulary/text.d.ts +2 -2
- package/dist/vocabulary/text.d.ts.map +1 -1
- package/dist/vocabulary/text.js +1 -1
- package/dist/vocabulary/text.js.map +1 -1
- package/dist/vocabulary/unique.d.ts +2 -12
- package/dist/vocabulary/unique.d.ts.map +1 -1
- package/dist/vocabulary/unique.js +5 -13
- package/dist/vocabulary/unique.js.map +1 -1
- package/dist/vocabulary/updated.d.ts +1 -6
- package/dist/vocabulary/updated.d.ts.map +1 -1
- package/dist/vocabulary/updated.js +0 -5
- package/dist/vocabulary/updated.js.map +1 -1
- package/dist/vocabulary/url.d.ts +1 -2
- package/dist/vocabulary/url.d.ts.map +1 -1
- package/dist/vocabulary/url.js +0 -1
- package/dist/vocabulary/url.js.map +1 -1
- package/dist/vocabulary/vocabulary.d.ts +5 -0
- package/dist/vocabulary/vocabulary.d.ts.map +1 -0
- package/dist/vocabulary/vocabulary.js +31 -0
- package/dist/vocabulary/vocabulary.js.map +1 -0
- package/dist/vocabulary/writeOnly.d.ts +2 -6
- package/dist/vocabulary/writeOnly.d.ts.map +1 -1
- package/dist/vocabulary/writeOnly.js +5 -8
- package/dist/vocabulary/writeOnly.js.map +1 -1
- package/package.json +1 -1
- package/dist/field/boundary.d.ts +0 -69
- package/dist/field/boundary.d.ts.map +0 -1
- package/dist/field/boundary.js +0 -82
- package/dist/field/boundary.js.map +0 -1
- package/dist/field/field.d.ts +0 -21
- package/dist/field/field.d.ts.map +0 -1
- package/dist/field/field.js +0 -24
- package/dist/field/field.js.map +0 -1
- package/dist/field/format.d.ts +0 -29
- package/dist/field/format.d.ts.map +0 -1
- package/dist/field/format.js +0 -24
- package/dist/field/format.js.map +0 -1
- package/dist/field/index.d.ts +0 -8
- package/dist/field/index.d.ts.map +0 -1
- package/dist/field/index.js +0 -10
- package/dist/field/index.js.map +0 -1
- package/dist/field/lifecycle.d.ts +0 -31
- package/dist/field/lifecycle.d.ts.map +0 -1
- package/dist/field/lifecycle.js +0 -20
- package/dist/field/lifecycle.js.map +0 -1
- package/dist/field/meta.d.ts +0 -5
- package/dist/field/meta.d.ts.map +0 -1
- package/dist/field/meta.js +0 -5
- package/dist/field/meta.js.map +0 -1
- package/dist/field/role.d.ts +0 -47
- package/dist/field/role.d.ts.map +0 -1
- package/dist/field/role.js +0 -35
- package/dist/field/role.js.map +0 -1
- package/dist/field/shape.d.ts +0 -89
- package/dist/field/shape.d.ts.map +0 -1
- package/dist/field/shape.js.map +0 -1
- package/dist/hints.d.ts +0 -28
- package/dist/hints.d.ts.map +0 -1
- package/dist/hints.js.map +0 -1
- package/dist/projections/card.d.ts +0 -98
- package/dist/projections/card.d.ts.map +0 -1
- package/dist/projections/card.js.map +0 -1
- package/dist/projections/describe.d.ts +0 -25
- package/dist/projections/describe.d.ts.map +0 -1
- package/dist/projections/describe.js +0 -131
- package/dist/projections/describe.js.map +0 -1
- package/dist/projections/encode.d.ts +0 -11
- package/dist/projections/encode.d.ts.map +0 -1
- package/dist/projections/encode.js +0 -26
- package/dist/projections/encode.js.map +0 -1
- package/dist/projections/io.d.ts +0 -24
- package/dist/projections/io.d.ts.map +0 -1
- package/dist/projections/io.js +0 -46
- package/dist/projections/io.js.map +0 -1
- package/dist/projections/lifecycle.d.ts +0 -29
- package/dist/projections/lifecycle.d.ts.map +0 -1
- package/dist/projections/lifecycle.js +0 -93
- package/dist/projections/lifecycle.js.map +0 -1
- package/dist/projections/reconstruct.d.ts +0 -31
- package/dist/projections/reconstruct.d.ts.map +0 -1
- package/dist/projections/reconstruct.js +0 -146
- package/dist/projections/reconstruct.js.map +0 -1
- package/dist/projections/source.d.ts +0 -18
- package/dist/projections/source.d.ts.map +0 -1
- package/dist/projections/source.js +0 -18
- package/dist/projections/source.js.map +0 -1
- package/dist/projections/standard.d.ts.map +0 -1
- package/dist/projections/standard.js +0 -10
- package/dist/projections/standard.js.map +0 -1
- package/dist/projections/typescript.d.ts +0 -37
- package/dist/projections/typescript.d.ts.map +0 -1
- package/dist/projections/typescript.js +0 -157
- package/dist/projections/typescript.js.map +0 -1
- package/dist/schema/index.d.ts +0 -3
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -2
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/schema.d.ts.map +0 -1
- package/dist/schema/schema.js.map +0 -1
- package/dist/schema/view.d.ts +0 -26
- package/dist/schema/view.d.ts.map +0 -1
- package/dist/schema/view.js +0 -2
- package/dist/schema/view.js.map +0 -1
- package/dist/unique.d.ts +0 -40
- package/dist/unique.d.ts.map +0 -1
- package/dist/unique.js +0 -57
- package/dist/unique.js.map +0 -1
- package/dist/validation/index.d.ts +0 -4
- package/dist/validation/index.d.ts.map +0 -1
- package/dist/validation/index.js +0 -2
- package/dist/validation/index.js.map +0 -1
- package/dist/validation/judge.d.ts +0 -55
- package/dist/validation/judge.d.ts.map +0 -1
- package/dist/validation/judge.js +0 -351
- package/dist/validation/judge.js.map +0 -1
- package/dist/validation/options.d.ts +0 -6
- package/dist/validation/options.d.ts.map +0 -1
- package/dist/validation/options.js +0 -3
- package/dist/validation/options.js.map +0 -1
- package/dist/validation/result.d.ts +0 -20
- package/dist/validation/result.d.ts.map +0 -1
- package/dist/validation/result.js +0 -3
- package/dist/validation/result.js.map +0 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Fields } from './Field.js';
|
|
2
|
+
export type CompositeUnique<TFields extends Fields> = ReadonlyArray<ReadonlyArray<Extract<keyof TFields, string>>>;
|
|
3
|
+
export interface EntityDeclarations<TFields extends Fields> {
|
|
4
|
+
unique?: CompositeUnique<TFields>;
|
|
5
|
+
hints?: Hints<TFields>;
|
|
6
|
+
/**
|
|
7
|
+
* What a field used to be called — read by `fougere freeze` and by nothing else.
|
|
8
|
+
* It answers the one question two shapes cannot, and is meant to be deleted after.
|
|
9
|
+
*/
|
|
10
|
+
previous?: Previous<TFields>;
|
|
11
|
+
}
|
|
12
|
+
/** New name to old name: the field states what it WAS, which is how a human writes it. */
|
|
13
|
+
export type Previous<TFields extends Fields> = {
|
|
14
|
+
readonly [K in Extract<keyof TFields, string>]?: string;
|
|
15
|
+
};
|
|
16
|
+
export interface FougereHints<K extends string> {
|
|
17
|
+
}
|
|
18
|
+
export type Hints<TFields extends Fields> = {
|
|
19
|
+
[A in keyof FougereHints<Extract<keyof TFields, string>>]?: FougereHints<Extract<keyof TFields, string>>[A];
|
|
20
|
+
};
|
|
21
|
+
export declare function deriveHints(hints: Hints<Fields> | undefined, transform: (key: string) => string | undefined): Hints<Fields> | undefined;
|
|
22
|
+
//# sourceMappingURL=EntityDeclarations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityDeclarations.d.ts","sourceRoot":"","sources":["../src/EntityDeclarations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,MAAM,eAAe,CAAC,OAAO,SAAS,MAAM,IAAI,aAAa,CACjE,aAAa,CAAC,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,CAAC,CAC9C,CAAC;AAEF,MAAM,WAAW,kBAAkB,CAAC,OAAO,SAAS,MAAM;IACxD,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;CAC9B;AAED,0FAA0F;AAC1F,MAAM,MAAM,QAAQ,CAAC,OAAO,SAAS,MAAM,IAAI;IAC7C,QAAQ,EAAE,CAAC,IAAI,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM;CACxD,CAAC;AAGF,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM;CAAI;AAElD,MAAM,MAAM,KAAK,CAAC,OAAO,SAAS,MAAM,IAAI;KACzC,CAAC,IAAI,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CACtE,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,CAC/B,CAAC,CAAC,CAAC;CACL,CAAC;AAEF,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,EAChC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAC7C,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,CAa3B"}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Carry hints across a key transform — a derivation preserves what it does not change.
|
|
3
|
-
* `transform` maps an old key to its new name, or to `undefined` when the field is dropped.
|
|
4
|
-
*/
|
|
5
1
|
export function deriveHints(hints, transform) {
|
|
6
2
|
if (!hints)
|
|
7
3
|
return undefined;
|
|
@@ -20,4 +16,4 @@ export function deriveHints(hints, transform) {
|
|
|
20
16
|
}
|
|
21
17
|
return Object.keys(out).length ? out : undefined;
|
|
22
18
|
}
|
|
23
|
-
//# sourceMappingURL=
|
|
19
|
+
//# sourceMappingURL=EntityDeclarations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityDeclarations.js","sourceRoot":"","sources":["../src/EntityDeclarations.ts"],"names":[],"mappings":"AA8BA,MAAM,UAAU,WAAW,CACzB,KAAgC,EAChC,SAA8C;IAE9C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,GAAG,GAA4C,EAAE,CAAC;IACxD,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAA4D,CAAC,EAAE,CAAC;QAC/G,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,SAAS;QACxD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,IAAI,KAAK,SAAS;gBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC9C,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;IACxD,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,GAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC"}
|
package/dist/Field.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Shape } from './axis/shape/Shape.js';
|
|
2
|
+
import type { RoleRules } from './axis/role/Role.js';
|
|
3
|
+
import type { LifecycleRules } from './axis/lifecycle/Lifecycle.js';
|
|
4
|
+
import type { BoundaryRef } from './axis/boundary/Boundary.js';
|
|
5
|
+
import type { Meta } from './axis/Meta.js';
|
|
6
|
+
export declare class Field<T = unknown> {
|
|
7
|
+
readonly shape: Shape;
|
|
8
|
+
readonly role?: RoleRules;
|
|
9
|
+
readonly lifecycle?: LifecycleRules;
|
|
10
|
+
readonly boundary?: BoundaryRef;
|
|
11
|
+
readonly meta?: Meta;
|
|
12
|
+
readonly _type?: T;
|
|
13
|
+
constructor(init: FieldData, key?: string);
|
|
14
|
+
with<U = T>(overrides: Partial<FieldData>): Field<U>;
|
|
15
|
+
rename(map: (key: string) => string | undefined): Field<T>;
|
|
16
|
+
}
|
|
17
|
+
export type Fields = Record<string, Field>;
|
|
18
|
+
export type FieldData = {
|
|
19
|
+
[K in keyof Field as Field[K] extends (...args: never[]) => unknown ? never : K]: Field[K];
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=Field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../src/Field.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrB,SAAiB,KAAK,CAAC,EAAE,CAAC,CAAC;IAE3B,YAAY,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,EAyBxC;IAED,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAEnD;IAED,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAWzD;CACF;AASD,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE3C,MAAM,MAAM,SAAS,GAAG;KACrB,CAAC,IAAI,MAAM,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,GAC/D,KAAK,GACL,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;CACjB,CAAC"}
|
package/dist/Field.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Judge } from './judge/Judge.js';
|
|
2
|
+
import { FieldGroup } from './constraint/FieldGroup.js';
|
|
3
|
+
import { Unique } from './constraint/Unique.js';
|
|
4
|
+
export class Field {
|
|
5
|
+
shape;
|
|
6
|
+
role;
|
|
7
|
+
lifecycle;
|
|
8
|
+
boundary;
|
|
9
|
+
meta;
|
|
10
|
+
constructor(init, key) {
|
|
11
|
+
const verdict = Judge.field(init);
|
|
12
|
+
if (!verdict.success) {
|
|
13
|
+
throw new Error(`${key ? `Field '${key}': ` : ""}` +
|
|
14
|
+
verdict.errors.map((e) => `${e.path}: ${e.message}`).join("; "));
|
|
15
|
+
}
|
|
16
|
+
this.shape = init.shape;
|
|
17
|
+
this.role = normalizeRole(init.role, key);
|
|
18
|
+
this.lifecycle = init.lifecycle;
|
|
19
|
+
this.boundary = init.boundary;
|
|
20
|
+
this.meta = init.meta;
|
|
21
|
+
const create = this.lifecycle?.create;
|
|
22
|
+
if (typeof create === "object" && create !== null && "value" in create) {
|
|
23
|
+
const checked = Judge.value(this, create.value);
|
|
24
|
+
if ("error" in checked)
|
|
25
|
+
throw new Error(`${key ? `Field '${key}': ` : ""}the declared default ${JSON.stringify(create.value)} ` +
|
|
26
|
+
`is not a legal value for it — ${checked.error}.`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
with(overrides) {
|
|
30
|
+
return new Field({ ...this, ...overrides });
|
|
31
|
+
}
|
|
32
|
+
rename(map) {
|
|
33
|
+
const rules = this.role?.rules;
|
|
34
|
+
if (!rules?.length)
|
|
35
|
+
return this;
|
|
36
|
+
const carried = rules.map((group) => group.rename(map)).filter((group) => group !== null);
|
|
37
|
+
const unchanged = carried.length === rules.length && carried.every((group, i) => group.equals(rules[i]));
|
|
38
|
+
if (unchanged)
|
|
39
|
+
return this;
|
|
40
|
+
const { rules: _dropped, ...rest } = this.role;
|
|
41
|
+
return this.with({ role: carried.length ? { ...rest, rules: carried } : rest });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function normalizeRole(role, key) {
|
|
45
|
+
let rules = FieldGroup.normalize(role?.rules, (members) => new Unique(members));
|
|
46
|
+
if (rules && key !== undefined && rules.some((group) => group.isSelf))
|
|
47
|
+
rules = rules.map((group) => group.resolvedOn(key));
|
|
48
|
+
return rules === role?.rules ? role : { ...role, rules };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=Field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../src/Field.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,74 +1,67 @@
|
|
|
1
|
-
import { type Fields } from
|
|
2
|
-
import { type Hints } from
|
|
3
|
-
import { type CompositeUnique } from
|
|
4
|
-
import { type ValidateOptions } from '
|
|
5
|
-
import type { StandardSchemaV1 } from
|
|
6
|
-
import type { PartialRow, Row, SchemaView } from
|
|
7
|
-
/** The name a derivation carries when no class declaration named it. */
|
|
1
|
+
import { type Fields } from './Field.js';
|
|
2
|
+
import { type Hints } from './EntityDeclarations.js';
|
|
3
|
+
import { type CompositeUnique } from './EntityDeclarations.js';
|
|
4
|
+
import { type ValidateOptions } from './judge/options.js';
|
|
5
|
+
import type { StandardSchemaV1 } from './projection/standard.js';
|
|
6
|
+
import type { PartialRow, Row, SchemaView } from './SchemaView.js';
|
|
8
7
|
export declare const ANONYMOUS_SCHEMA_NAME = "Schema";
|
|
9
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* What a derivation kept, keyed by the ORIGIN's field names: the name a field
|
|
10
|
+
* carries here, or `undefined` when this view dropped it. `source` says what a
|
|
11
|
+
* view was cut from; this says what the cut left.
|
|
12
|
+
*/
|
|
13
|
+
export type Survived = Record<string, string | undefined>;
|
|
10
14
|
export interface SchemaConstructor<TFields extends Fields> extends SchemaView<TFields> {
|
|
11
15
|
new (data: PartialRow<TFields>): Row<TFields>;
|
|
12
16
|
readonly "~standard": StandardSchemaV1.Props<Record<string, unknown>, Row<TFields>>;
|
|
13
|
-
/** The Entity class this derivation came from — absent on a `compose()` result. */
|
|
14
17
|
readonly source?: abstract new (...args: never[]) => unknown;
|
|
18
|
+
readonly survived?: Survived;
|
|
19
|
+
readonly previous?: Readonly<Record<string, string>>;
|
|
15
20
|
from(data: Record<string, unknown>): Row<TFields>;
|
|
16
21
|
pick<K extends string & keyof TFields>(...keys: K[]): SchemaConstructor<Pick<TFields, K>>;
|
|
17
22
|
omit<K extends string & keyof TFields>(...keys: K[]): SchemaConstructor<Omit<TFields, K>>;
|
|
18
23
|
partial(): SchemaConstructor<TFields>;
|
|
19
24
|
extend<E extends Fields>(extra: E): SchemaConstructor<TFields & E>;
|
|
20
|
-
/** Give an anonymous derivation an explicit runtime name. */
|
|
21
25
|
named(name: string): SchemaConstructor<TFields>;
|
|
22
26
|
rename(mapping: Partial<Record<string & keyof TFields, string>>): SchemaConstructor<Fields>;
|
|
23
27
|
}
|
|
24
|
-
/**
|
|
25
|
-
* The carrier. Its data lives on the class, so `this` resolves it and a derivation is a
|
|
26
|
-
* subclass with a different map — `Post.pick('id')` reads `Post.fields`, not a closure.
|
|
27
|
-
*/
|
|
28
28
|
export declare class Schema {
|
|
29
29
|
static fields: Fields;
|
|
30
30
|
static hints: Hints<Fields> | undefined;
|
|
31
|
-
static unique: CompositeUnique<Fields> | undefined;
|
|
32
31
|
static opts: ValidateOptions;
|
|
33
32
|
static source: (abstract new (...args: never[]) => unknown) | undefined;
|
|
34
|
-
|
|
33
|
+
static survived: Survived | undefined;
|
|
34
|
+
static previous: Readonly<Record<string, string>> | undefined;
|
|
35
35
|
constructor(data?: Record<string, unknown>);
|
|
36
36
|
static getFields(): Fields;
|
|
37
37
|
static getHints(): Hints<Fields> | undefined;
|
|
38
38
|
static getUnique(): CompositeUnique<Fields> | undefined;
|
|
39
39
|
static getOpts(): ValidateOptions;
|
|
40
|
-
static validate(input: unknown): import("
|
|
41
|
-
/** Trusted: keeps known keys, decodes each through its boundary, leaves the rest. */
|
|
40
|
+
static validate(input: unknown): import("./index.js").ValidationResult<Record<string, unknown>>;
|
|
42
41
|
static from(data: Record<string, unknown>): Record<string, unknown>;
|
|
43
42
|
static get ["~standard"](): StandardSchemaV1.Props<Record<string, unknown>>;
|
|
44
43
|
static pick(...keys: string[]): SchemaConstructor<Fields>;
|
|
45
44
|
static omit(...keys: string[]): SchemaConstructor<Fields>;
|
|
46
45
|
static rename(mapping: Record<string, string>): SchemaConstructor<Fields>;
|
|
47
|
-
/** Patch mode: an unsent field is untouched. Moves the presence axis, never nullity. */
|
|
48
46
|
static partial(): SchemaConstructor<{
|
|
49
|
-
[x: string]: import("
|
|
47
|
+
[x: string]: import("./Field.js").Field<unknown>;
|
|
50
48
|
}>;
|
|
51
49
|
static extend(extra: Fields): SchemaConstructor<{
|
|
52
|
-
[x: string]: import("
|
|
50
|
+
[x: string]: import("./Field.js").Field<unknown>;
|
|
53
51
|
}>;
|
|
54
|
-
/**
|
|
55
|
-
* Renames in place, so it may only name what has no name — on a declared class it would
|
|
56
|
-
* silently retarget its table, its GraphQL type and its registration key.
|
|
57
|
-
*/
|
|
58
52
|
static named(name: string): typeof Schema;
|
|
59
|
-
|
|
60
|
-
static of<TFields extends Fields>(fields: TFields, source?: abstract new (...args: never[]) => unknown, hints?: Hints<TFields>, opts?: ValidateOptions,
|
|
61
|
-
/** A key transform applied to the fields, the hints and the unique groups at once. */
|
|
53
|
+
static compose<T extends SchemaView[]>(...sources: T): SchemaConstructor<Merged<T>>;
|
|
54
|
+
static of<TFields extends Fields>(fields: TFields, source?: abstract new (...args: never[]) => unknown, hints?: Hints<TFields>, opts?: ValidateOptions, survived?: Survived): SchemaConstructor<TFields>;
|
|
62
55
|
private static derive;
|
|
56
|
+
/**
|
|
57
|
+
* The trace, composed with the parent's — so `Post.pick(a, b).omit(b)` reports against
|
|
58
|
+
* `Post` and not against the intermediate, exactly as `source` skips it.
|
|
59
|
+
*/
|
|
60
|
+
private static trace;
|
|
63
61
|
}
|
|
64
62
|
type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
65
63
|
type Merged<T extends SchemaView[]> = UnionToIntersection<T[number] extends {
|
|
66
64
|
getFields(): infer F;
|
|
67
65
|
} ? F : Fields> & Fields;
|
|
68
|
-
/**
|
|
69
|
-
* Merge schemas into one — `class User extends compose(UserBase, Timestamps) {}`.
|
|
70
|
-
* Left to right, later sources win on conflict. Use `.rename()` first to avoid one.
|
|
71
|
-
*/
|
|
72
|
-
export declare function compose<T extends SchemaView[]>(...sources: T): SchemaConstructor<Merged<T>>;
|
|
73
66
|
export {};
|
|
74
|
-
//# sourceMappingURL=
|
|
67
|
+
//# sourceMappingURL=Schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAGlE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnE,eAAO,MAAM,qBAAqB,WAAW,CAAC;AAE9C;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE1D,MAAM,WAAW,iBAAiB,CAAC,OAAO,SAAS,MAAM,CAAE,SAAQ,UAAU,CAAC,OAAO,CAAC;IACpF,KAAK,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACpF,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;IAC7D,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1F,IAAI,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1F,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,iBAAiB,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,OAAO,EAAE,MAAM,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;CAC7F;AAED,qBAAa,MAAM;IACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAC3B,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAM;IAClC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IACxE,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IACtC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAE9D,YAAY,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAKzC;IAED,MAAM,CAAC,SAAS,WAA0B;IAC1C,MAAM,CAAC,QAAQ,8BAAyB;IACxC,MAAM,CAAC,SAAS,IAAI,eAAe,CAAC,MAAM,CAAC,GAAG,SAAS,CAGtD;IACD,MAAM,CAAC,OAAO,oBAAwB;IAEtC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,kEAE7B;IAED,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,2BAUxC;IAED,MAAM,KAAK,CAAC,WAAW,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAgB1E;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,6BAK5B;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,6BAK5B;IAED,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,6BAK5C;IAED,MAAM,CAAC,OAAO;;OAEb;IAED,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM;;OAG1B;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,iBASxB;IAED,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,UAAU,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAiBlF;IAED,MAAM,CAAC,EAAE,CAAC,OAAO,SAAS,MAAM,EAC9B,MAAM,EAAE,OAAO,EACf,MAAM,CAAC,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,EACnD,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,EACtB,IAAI,GAAE,eAAoB,EAC1B,QAAQ,CAAC,EAAE,QAAQ,GAClB,iBAAiB,CAAC,OAAO,CAAC,CAK5B;IAED,OAAO,CAAC,MAAM,CAAC,MAAM;IAMrB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,KAAK;CAMrB;AAWD,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;AACpH,KAAK,MAAM,CAAC,CAAC,SAAS,UAAU,EAAE,IAAI,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;IAAE,SAAS,IAAI,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC"}
|
|
@@ -1,37 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { deriveHints } from
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
1
|
+
import { Boundary } from './axis/boundary/Boundary.js';
|
|
2
|
+
import { deriveHints } from './EntityDeclarations.js';
|
|
3
|
+
import { FieldGroup } from './constraint/FieldGroup.js';
|
|
4
|
+
import { Unique } from './constraint/Unique.js';
|
|
5
|
+
import { Judge } from './judge/Judge.js';
|
|
6
6
|
export const ANONYMOUS_SCHEMA_NAME = "Schema";
|
|
7
|
-
/**
|
|
8
|
-
* The carrier. Its data lives on the class, so `this` resolves it and a derivation is a
|
|
9
|
-
* subclass with a different map — `Post.pick('id')` reads `Post.fields`, not a closure.
|
|
10
|
-
*/
|
|
11
7
|
export class Schema {
|
|
12
8
|
static fields = {};
|
|
13
9
|
static hints;
|
|
14
|
-
static unique;
|
|
15
10
|
static opts = {};
|
|
16
11
|
static source;
|
|
17
|
-
|
|
12
|
+
static survived;
|
|
13
|
+
static previous;
|
|
18
14
|
constructor(data) {
|
|
19
15
|
if (!data)
|
|
20
16
|
return;
|
|
21
|
-
// Define, never assign: `Object.assign` writes through [[Set]], so a `__proto__` key
|
|
22
|
-
// from a parsed JSON row fires the setter and replaces this instance's prototype.
|
|
23
17
|
for (const [key, value] of Object.entries(data)) {
|
|
24
18
|
Object.defineProperty(this, key, { value, writable: true, enumerable: true, configurable: true });
|
|
25
19
|
}
|
|
26
20
|
}
|
|
27
21
|
static getFields() { return this.fields; }
|
|
28
22
|
static getHints() { return this.hints; }
|
|
29
|
-
static getUnique() {
|
|
23
|
+
static getUnique() {
|
|
24
|
+
const groups = FieldGroup.groupsOf(this.fields, Unique);
|
|
25
|
+
return groups.length ? groups.map((group) => [...group.members]) : undefined;
|
|
26
|
+
}
|
|
30
27
|
static getOpts() { return this.opts; }
|
|
31
28
|
static validate(input) {
|
|
32
29
|
return Judge.row(this.fields, input, this.opts);
|
|
33
30
|
}
|
|
34
|
-
/** Trusted: keeps known keys, decodes each through its boundary, leaves the rest. */
|
|
35
31
|
static from(data) {
|
|
36
32
|
const out = {};
|
|
37
33
|
for (const [key, field] of Object.entries(this.fields)) {
|
|
@@ -42,7 +38,7 @@ export class Schema {
|
|
|
42
38
|
out[key] = value;
|
|
43
39
|
continue;
|
|
44
40
|
}
|
|
45
|
-
const decoded =
|
|
41
|
+
const decoded = Boundary.of(field).decode(value);
|
|
46
42
|
out[key] = "error" in decoded ? value : decoded.value;
|
|
47
43
|
}
|
|
48
44
|
return out;
|
|
@@ -56,8 +52,6 @@ export class Schema {
|
|
|
56
52
|
const result = Judge.row(fields, value, opts);
|
|
57
53
|
if (result.success)
|
|
58
54
|
return { value: result.data };
|
|
59
|
-
// ONE segment, not a split: a path is always a single field name until nested
|
|
60
|
-
// objects report their own, so splitting invented segments for a name like `a.b`.
|
|
61
55
|
return {
|
|
62
56
|
issues: result.errors.map((e) => ({
|
|
63
57
|
message: e.message,
|
|
@@ -67,9 +61,6 @@ export class Schema {
|
|
|
67
61
|
},
|
|
68
62
|
};
|
|
69
63
|
}
|
|
70
|
-
// ─── The derivation algebra ───
|
|
71
|
-
// Each derivation states its difference and keeps the rest. `source ?? this` records
|
|
72
|
-
// the ORIGIN once: a view of a view keeps it rather than the intermediate.
|
|
73
64
|
static pick(...keys) {
|
|
74
65
|
assertKnownKeys("pick", keys, this.fields);
|
|
75
66
|
const picked = {};
|
|
@@ -93,17 +84,13 @@ export class Schema {
|
|
|
93
84
|
renamed[mapping[key] ?? key] = field;
|
|
94
85
|
return this.derive(renamed, (k) => mapping[k] ?? k);
|
|
95
86
|
}
|
|
96
|
-
/** Patch mode: an unsent field is untouched. Moves the presence axis, never nullity. */
|
|
97
87
|
static partial() {
|
|
98
|
-
return Schema.of({ ...this.fields }, this.source ?? this, this.hints, { ...this.opts, patch: true }, this.
|
|
88
|
+
return Schema.of({ ...this.fields }, this.source ?? this, this.hints, { ...this.opts, patch: true }, this.survived);
|
|
99
89
|
}
|
|
100
90
|
static extend(extra) {
|
|
101
|
-
|
|
91
|
+
// The added fields have no origin, so the trace is unchanged: it speaks of the source.
|
|
92
|
+
return Schema.of({ ...this.fields, ...extra }, this.source ?? this, this.hints, this.opts, this.survived);
|
|
102
93
|
}
|
|
103
|
-
/**
|
|
104
|
-
* Renames in place, so it may only name what has no name — on a declared class it would
|
|
105
|
-
* silently retarget its table, its GraphQL type and its registration key.
|
|
106
|
-
*/
|
|
107
94
|
static named(name) {
|
|
108
95
|
if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name)) {
|
|
109
96
|
throw new Error(`named(): \`${name}\` is not a valid class name.`);
|
|
@@ -114,21 +101,47 @@ export class Schema {
|
|
|
114
101
|
Object.defineProperty(this, "name", { value: name, configurable: true });
|
|
115
102
|
return this;
|
|
116
103
|
}
|
|
117
|
-
|
|
118
|
-
|
|
104
|
+
static compose(...sources) {
|
|
105
|
+
const merged = {};
|
|
106
|
+
const mergedHints = {};
|
|
107
|
+
let mergedOpts = {};
|
|
108
|
+
for (const source of sources) {
|
|
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);
|
|
122
|
+
}
|
|
123
|
+
static of(fields, source, hints, opts = {}, survived) {
|
|
119
124
|
class Derived extends Schema {
|
|
120
125
|
}
|
|
121
|
-
Object.assign(Derived, { fields, source, hints, opts,
|
|
126
|
+
Object.assign(Derived, { fields, source, hints, opts, survived });
|
|
122
127
|
Object.defineProperty(Derived, "name", { value: ANONYMOUS_SCHEMA_NAME, configurable: true });
|
|
123
|
-
// TS sees an empty subclass and cannot prove it matches the precise map.
|
|
124
128
|
return Derived;
|
|
125
129
|
}
|
|
126
|
-
/** A key transform applied to the fields, the hints and the unique groups at once. */
|
|
127
130
|
static derive(fields, survives) {
|
|
128
|
-
|
|
131
|
+
const renamed = {};
|
|
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)]));
|
|
129
143
|
}
|
|
130
144
|
}
|
|
131
|
-
/** Refuse a key the schema does not carry — a typo in `pick`/`omit` used to be obeyed. */
|
|
132
145
|
function assertKnownKeys(operation, keys, fields) {
|
|
133
146
|
const strangers = keys.filter((key) => !(key in fields));
|
|
134
147
|
if (strangers.length === 0)
|
|
@@ -136,27 +149,4 @@ function assertKnownKeys(operation, keys, fields) {
|
|
|
136
149
|
throw new Error(`${operation}(): unknown field ${strangers.map((s) => `\`${s}\``).join(", ")}. ` +
|
|
137
150
|
`This schema carries ${Object.keys(fields).join(", ")}.`);
|
|
138
151
|
}
|
|
139
|
-
|
|
140
|
-
* Merge schemas into one — `class User extends compose(UserBase, Timestamps) {}`.
|
|
141
|
-
* Left to right, later sources win on conflict. Use `.rename()` first to avoid one.
|
|
142
|
-
*/
|
|
143
|
-
export function compose(...sources) {
|
|
144
|
-
const merged = {};
|
|
145
|
-
const mergedHints = {};
|
|
146
|
-
let mergedOpts = {};
|
|
147
|
-
for (const source of sources) {
|
|
148
|
-
Object.assign(merged, source.getFields());
|
|
149
|
-
const hints = source.getHints();
|
|
150
|
-
if (hints) {
|
|
151
|
-
for (const [adapter, perField] of Object.entries(hints)) {
|
|
152
|
-
if (!perField || typeof perField !== "object")
|
|
153
|
-
continue;
|
|
154
|
-
mergedHints[adapter] = { ...mergedHints[adapter], ...perField };
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
mergedOpts = { ...mergedOpts, ...source.getOpts() };
|
|
158
|
-
}
|
|
159
|
-
const hints = Object.keys(mergedHints).length ? mergedHints : undefined;
|
|
160
|
-
return Schema.of(merged, undefined, hints, mergedOpts);
|
|
161
|
-
}
|
|
162
|
-
//# sourceMappingURL=schema.js.map
|
|
152
|
+
//# sourceMappingURL=Schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Schema.js","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Field, Fields } from './Field.js';
|
|
2
|
+
import type { Hints } from './EntityDeclarations.js';
|
|
3
|
+
import type { CompositeUnique } from './EntityDeclarations.js';
|
|
4
|
+
import type { ValidationResult } from './judge/result.js';
|
|
5
|
+
import type { ValidateOptions } from './judge/options.js';
|
|
6
|
+
export type Row<TFields extends Fields> = {
|
|
7
|
+
[K in keyof TFields]: TFields[K] extends Field<infer T> ? T : never;
|
|
8
|
+
};
|
|
9
|
+
export type PartialRow<TFields extends Fields> = Partial<Row<TFields>>;
|
|
10
|
+
export interface SchemaView<TFields extends Fields = Fields> {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
getFields(): TFields;
|
|
13
|
+
getHints(): Hints<TFields> | undefined;
|
|
14
|
+
getUnique(): CompositeUnique<TFields> | undefined;
|
|
15
|
+
getOpts(): ValidateOptions;
|
|
16
|
+
validate(input: unknown): ValidationResult<Row<TFields>>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=SchemaView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaView.d.ts","sourceRoot":"","sources":["../src/SchemaView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,MAAM,GAAG,CAAC,OAAO,SAAS,MAAM,IAAI;KACvC,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CACpE,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,OAAO,SAAS,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAEvE,MAAM,WAAW,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,SAAS,IAAI,OAAO,CAAC;IACrB,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IACvC,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAClD,OAAO,IAAI,eAAe,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;CAC1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaView.js","sourceRoot":"","sources":["../src/SchemaView.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ValidationError } from '../judge/result.js';
|
|
2
|
+
export interface Axis<Declared = unknown, Wire = unknown> {
|
|
3
|
+
readonly slot: 'role' | 'lifecycle' | 'boundary';
|
|
4
|
+
judge(value: unknown, errors: ValidationError[]): void;
|
|
5
|
+
describe(value: Declared, key: string): Wire | undefined;
|
|
6
|
+
reconstruct(wire: Wire, resolve?: Resolver): Declared;
|
|
7
|
+
}
|
|
8
|
+
export type Resolver = (name: string) => (abstract new (...args: never[]) => unknown) | undefined;
|
|
9
|
+
export declare const EXTENSION_AXES: readonly Axis[];
|
|
10
|
+
//# sourceMappingURL=Axis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Axis.d.ts","sourceRoot":"","sources":["../../src/axis/Axis.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,WAAW,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IAEjD,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IAEvD,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAEzD,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACvD;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,QAAQ,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;AAElG,eAAO,MAAM,cAAc,EAAE,SAAS,IAAI,EAIzC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { roleAxis } from './role/axis.js';
|
|
2
|
+
import { lifecycleAxis } from './lifecycle/axis.js';
|
|
3
|
+
import { boundaryAxis } from './boundary/axis.js';
|
|
4
|
+
export const EXTENSION_AXES = [
|
|
5
|
+
roleAxis,
|
|
6
|
+
lifecycleAxis,
|
|
7
|
+
boundaryAxis,
|
|
8
|
+
];
|
|
9
|
+
//# sourceMappingURL=Axis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Axis.js","sourceRoot":"","sources":["../../src/axis/Axis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAelD,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,QAAQ;IACR,aAAa;IACb,YAAY;CACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Meta.d.ts","sourceRoot":"","sources":["../../src/axis/Meta.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Meta.js","sourceRoot":"","sources":["../../src/axis/Meta.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { BoundaryRules } from './Boundary.js';
|
|
2
|
+
export type Decoder = (value: unknown) => {
|
|
3
|
+
value: unknown;
|
|
4
|
+
} | {
|
|
5
|
+
error: string;
|
|
6
|
+
};
|
|
7
|
+
export type Encoder = (value: unknown) => unknown;
|
|
8
|
+
export declare class Boundaries {
|
|
9
|
+
private static readonly decoders;
|
|
10
|
+
private static readonly encoders;
|
|
11
|
+
private static readonly aliases;
|
|
12
|
+
static registerDecoder(name: string, fn: Decoder): void;
|
|
13
|
+
static registerEncoder(name: string, fn: Encoder): void;
|
|
14
|
+
static registerAlias(name: string, boundary: BoundaryRules): void;
|
|
15
|
+
static alias(name: string): BoundaryRules | undefined;
|
|
16
|
+
static decoder(name: string): Decoder;
|
|
17
|
+
static encoder(name: string): Encoder;
|
|
18
|
+
private static named;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=Boundaries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Boundaries.d.ts","sourceRoot":"","sources":["../../../src/axis/boundary/Boundaries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AACjF,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAElD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAEnE,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAAiC;IACxF,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAAiC;IAExF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAsC;IAEvG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAmC;IAExF,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAuD;IAC5F,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAuD;IAE5F,OAAO,CAAC,MAAM,CAAC,KAAK;CAUrB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export class Boundaries {
|
|
2
|
+
static decoders = new Map();
|
|
3
|
+
static encoders = new Map();
|
|
4
|
+
static aliases = new Map();
|
|
5
|
+
static registerDecoder(name, fn) { this.decoders.set(name, fn); }
|
|
6
|
+
static registerEncoder(name, fn) { this.encoders.set(name, fn); }
|
|
7
|
+
static registerAlias(name, boundary) { this.aliases.set(name, boundary); }
|
|
8
|
+
static alias(name) { return this.aliases.get(name); }
|
|
9
|
+
static decoder(name) { return this.named(this.decoders, name, 'decoder'); }
|
|
10
|
+
static encoder(name) { return this.named(this.encoders, name, 'encoder'); }
|
|
11
|
+
static named(registry, name, kind) {
|
|
12
|
+
const fn = registry.get(name);
|
|
13
|
+
if (!fn) {
|
|
14
|
+
throw new Error(`Unknown boundary ${kind}: '${name}'. Register it with ` +
|
|
15
|
+
`Boundaries.register${kind[0].toUpperCase()}${kind.slice(1)}('${name}', …).`);
|
|
16
|
+
}
|
|
17
|
+
return fn;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
Boundaries.registerDecoder('isoDate', (value) => {
|
|
21
|
+
if (value instanceof Date)
|
|
22
|
+
return { value };
|
|
23
|
+
if (typeof value === 'string') {
|
|
24
|
+
const d = new Date(value);
|
|
25
|
+
return Number.isNaN(d.getTime()) ? { error: 'Invalid date' } : { value: d };
|
|
26
|
+
}
|
|
27
|
+
return { error: 'Expected a date' };
|
|
28
|
+
});
|
|
29
|
+
Boundaries.registerEncoder('isoDate', (value) => value instanceof Date ? value.toISOString() : value);
|
|
30
|
+
Boundaries.registerAlias('isoDate', { in: { decode: 'isoDate' }, out: { encode: 'isoDate' } });
|
|
31
|
+
//# sourceMappingURL=Boundaries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Boundaries.js","sourceRoot":"","sources":["../../../src/axis/boundary/Boundaries.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,UAAU;IACb,MAAM,CAAU,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IACtD,MAAM,CAAU,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IACtD,MAAM,CAAU,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEnE,MAAM,CAAC,eAAe,CAAC,IAAY,EAAE,EAAW,IAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,MAAM,CAAC,eAAe,CAAC,IAAY,EAAE,EAAW,IAAU,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAExF,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,QAAuB,IAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEvG,MAAM,CAAC,KAAK,CAAC,IAAY,IAA+B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAExF,MAAM,CAAC,OAAO,CAAC,IAAY,IAAa,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,CAAC,OAAO,CAAC,IAAY,IAAa,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAEpF,MAAM,CAAC,KAAK,CAAI,QAAwB,EAAE,IAAY,EAAE,IAAY;QAC1E,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CACb,oBAAoB,IAAI,MAAM,IAAI,sBAAsB;gBACtD,sBAAsB,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,QAAQ,CAC/E,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED,UAAU,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;IAC9C,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;AACtC,CAAC,CAAC,CAAC;AACH,UAAU,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAC9C,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CACpD,CAAC;AACF,UAAU,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Decoder, Encoder } from './Boundaries.js';
|
|
2
|
+
import type { Field } from '../../Field.js';
|
|
3
|
+
import { type Shape } from '../shape/Shape.js';
|
|
4
|
+
export interface BoundaryRules {
|
|
5
|
+
in?: 'closed' | {
|
|
6
|
+
decode: string;
|
|
7
|
+
};
|
|
8
|
+
out?: 'closed' | {
|
|
9
|
+
encode: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export type BoundaryRef = 'isoDate' | (string & {}) | BoundaryRules;
|
|
13
|
+
export declare class Boundary implements BoundaryRules {
|
|
14
|
+
readonly in?: BoundaryRules['in'];
|
|
15
|
+
readonly out?: BoundaryRules['out'];
|
|
16
|
+
readonly decode: Decoder;
|
|
17
|
+
readonly encode: Encoder;
|
|
18
|
+
private constructor();
|
|
19
|
+
static declared(field: Field): Boundary;
|
|
20
|
+
static of(field: Field): Boundary;
|
|
21
|
+
static forShape(shape: Shape | undefined): Boundary;
|
|
22
|
+
with(overrides: BoundaryRules): Boundary;
|
|
23
|
+
get readOnly(): boolean;
|
|
24
|
+
get writeOnly(): boolean;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=Boundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Boundary.d.ts","sourceRoot":"","sources":["../../../src/axis/boundary/Boundary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,QAAQ,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,GAAG,CAAC,EAAE,QAAQ,GAAG;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACrC;AAED,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,aAAa,CAAC;AAKpE,qBAAa,QAAS,YAAW,aAAa;IAC5C,QAAQ,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEzB,OAAO,eAKN;IAED,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAQtC;IAED,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,CAQhC;IAED,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,CAMlD;IAED,IAAI,CAAC,SAAS,EAAE,aAAa,GAAG,QAAQ,CAEvC;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;CAEF"}
|