@fougere/schema 0.3.0-alpha.0 → 0.4.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/EntityAdapters.d.ts +26 -0
- package/dist/EntityAdapters.d.ts.map +1 -0
- package/dist/EntityAdapters.js +71 -0
- package/dist/EntityAdapters.js.map +1 -0
- package/dist/EntityDeclarations.d.ts +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 +8 -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 +23 -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 +2 -2
- package/dist/projection/standard.d.ts.map +1 -1
- package/dist/{Schema.d.ts → schema/Schema.d.ts} +30 -34
- package/dist/schema/Schema.d.ts.map +1 -0
- package/dist/{Schema.js → schema/Schema.js} +25 -48
- package/dist/schema/Schema.js.map +1 -0
- package/dist/schema/SchemaDefinition.d.ts +46 -0
- package/dist/schema/SchemaDefinition.d.ts.map +1 -0
- package/dist/schema/SchemaDefinition.js +64 -0
- package/dist/schema/SchemaDefinition.js.map +1 -0
- package/dist/schema/SchemaDerivation.d.ts +28 -0
- package/dist/schema/SchemaDerivation.d.ts.map +1 -0
- package/dist/schema/SchemaDerivation.js +37 -0
- package/dist/schema/SchemaDerivation.js.map +1 -0
- package/dist/schema/SchemaView.d.ts +23 -0
- package/dist/schema/SchemaView.d.ts.map +1 -0
- package/dist/{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 +8 -4
- package/src/EntityAdapters.ts +95 -0
- package/src/EntityDeclarations.ts +19 -0
- package/src/axis/Axis.ts +25 -0
- package/src/axis/Meta.ts +3 -0
- package/src/axis/boundary/Boundaries.ts +44 -0
- package/src/axis/boundary/Boundary.ts +69 -0
- package/src/axis/boundary/BoundaryAxis.ts +32 -0
- package/src/axis/lifecycle/Clock.ts +26 -0
- package/src/axis/lifecycle/Generators.ts +46 -0
- package/src/axis/lifecycle/Lifecycle.ts +53 -0
- package/src/axis/lifecycle/LifecycleAxis.ts +49 -0
- package/src/axis/lifecycle/apply.ts +38 -0
- package/src/axis/role/Relation.ts +31 -0
- package/src/axis/role/Role.ts +56 -0
- package/src/axis/role/RoleAxis.ts +115 -0
- package/src/axis/shape/Formats.ts +22 -0
- package/src/axis/shape/Shape.ts +91 -0
- package/src/card/Bundle.ts +80 -0
- package/src/card/Card.ts +256 -0
- package/src/card/Descriptor.ts +68 -0
- package/src/card/EntityTypeSource.ts +90 -0
- package/src/card/FacadeTypeSource.ts +55 -0
- package/src/card/admission.ts +25 -0
- package/src/card/diff.ts +56 -0
- package/src/constraint/FieldGroup.ts +91 -0
- package/src/constraint/Unique.ts +3 -0
- package/src/entity.ts +15 -0
- package/src/fields/Field.ts +80 -0
- package/src/fields/FieldSet.ts +62 -0
- package/src/index.ts +64 -0
- package/src/judge/Cases.ts +139 -0
- package/src/judge/FieldJudge.ts +61 -0
- package/src/judge/RowJudge.ts +84 -0
- package/src/judge/RowRefusal.ts +17 -0
- package/src/judge/ValueForm.ts +7 -0
- package/src/judge/ValueJudge.ts +72 -0
- package/src/judge/options.ts +3 -0
- package/src/judge/result.ts +10 -0
- package/src/projection/SchemaOrCard.ts +18 -0
- package/src/projection/Visibility.ts +47 -0
- package/src/projection/standard.ts +47 -0
- package/src/schema/Schema.ts +167 -0
- package/src/schema/SchemaDefinition.ts +87 -0
- package/src/schema/SchemaDerivation.ts +46 -0
- package/src/schema/SchemaView.ts +25 -0
- package/src/utils.ts +13 -0
- package/src/vocabulary/bool.ts +9 -0
- package/src/vocabulary/created.ts +8 -0
- package/src/vocabulary/date.ts +5 -0
- package/src/vocabulary/email.ts +6 -0
- package/src/vocabulary/immutable.ts +6 -0
- package/src/vocabulary/indexed.ts +4 -0
- package/src/vocabulary/json.ts +22 -0
- package/src/vocabulary/list.ts +13 -0
- package/src/vocabulary/many.ts +9 -0
- package/src/vocabulary/nullable.ts +7 -0
- package/src/vocabulary/number.ts +17 -0
- package/src/vocabulary/oneOf.ts +24 -0
- package/src/vocabulary/optional.ts +8 -0
- package/src/vocabulary/primary.ts +33 -0
- package/src/vocabulary/readOnly.ts +7 -0
- package/src/vocabulary/ref.ts +13 -0
- package/src/vocabulary/text.ts +19 -0
- package/src/vocabulary/unique.ts +10 -0
- package/src/vocabulary/updated.ts +7 -0
- package/src/vocabulary/url.ts +6 -0
- package/src/vocabulary/vocabulary.ts +40 -0
- package/src/vocabulary/writeOnly.ts +7 -0
- package/dist/Field.d.ts +0 -21
- package/dist/Field.d.ts.map +0 -1
- package/dist/Field.js.map +0 -1
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"EntityTypeSource.js","sourceRoot":"","sources":["../../src/card/EntityTypeSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SchemaDescriptor } from './Descriptor.js';
|
|
2
|
+
export interface FacadeTypeSourceOptions {
|
|
3
|
+
name?: string;
|
|
4
|
+
exported?: boolean;
|
|
5
|
+
rowType?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface OpDescriptor {
|
|
8
|
+
name: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
output?: SchemaDescriptor;
|
|
11
|
+
cardinality?: 'one' | 'maybe' | 'many' | 'page' | 'none';
|
|
12
|
+
}
|
|
13
|
+
export declare class FacadeTypeSource {
|
|
14
|
+
private readonly operations;
|
|
15
|
+
private constructor();
|
|
16
|
+
static of(operations: readonly OpDescriptor[]): FacadeTypeSource;
|
|
17
|
+
render(options?: FacadeTypeSourceOptions): string;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=FacadeTypeSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FacadeTypeSource.d.ts","sourceRoot":"","sources":["../../src/card/FacadeTypeSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,WAAW,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAC1D;AAsBD,qBAAa,gBAAgB;IACP,OAAO,CAAC,QAAQ,CAAC,UAAU;IAA/C,OAAO,eAAqE;IAE5E,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,YAAY,EAAE,GAAG,gBAAgB,CAE/D;IAED,MAAM,CAAC,OAAO,GAAE,uBAA4B,GAAG,MAAM,CAWpD;CACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
function propertyKey(name) {
|
|
2
|
+
return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name) ? name : JSON.stringify(name);
|
|
3
|
+
}
|
|
4
|
+
function docCommentOf(text, indent) {
|
|
5
|
+
if (!text)
|
|
6
|
+
return '';
|
|
7
|
+
return `${indent}/** ${text.replace(/\*\//g, '*\\/')} */\n`;
|
|
8
|
+
}
|
|
9
|
+
function returnTypeOf(op, rowType) {
|
|
10
|
+
switch (op.cardinality) {
|
|
11
|
+
case 'many': return `${rowType}[]`;
|
|
12
|
+
case 'page': return `${rowType}[] & { total?: number; endCursor?: string; hasMore?: boolean }`;
|
|
13
|
+
case 'maybe': return `${rowType} | undefined`;
|
|
14
|
+
case 'one': return rowType;
|
|
15
|
+
case 'none': return 'unknown';
|
|
16
|
+
default: return 'unknown';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class FacadeTypeSource {
|
|
20
|
+
operations;
|
|
21
|
+
constructor(operations) {
|
|
22
|
+
this.operations = operations;
|
|
23
|
+
}
|
|
24
|
+
static of(operations) {
|
|
25
|
+
return new FacadeTypeSource(operations);
|
|
26
|
+
}
|
|
27
|
+
render(options = {}) {
|
|
28
|
+
const name = options.name ?? 'Facade';
|
|
29
|
+
const exported = options.exported === false ? '' : 'export ';
|
|
30
|
+
const rowType = options.rowType ?? 'unknown';
|
|
31
|
+
const members = this.operations.map((operation) => {
|
|
32
|
+
const doc = docCommentOf(operation.description, ' ');
|
|
33
|
+
return `${doc} ${propertyKey(operation.name)}(invocation?: Invocation): Promise<${returnTypeOf(operation, rowType)}>;`;
|
|
34
|
+
});
|
|
35
|
+
if (members.length === 0)
|
|
36
|
+
return `${exported}interface ${name} {}`;
|
|
37
|
+
return `${exported}interface ${name} {\n${members.join('\n')}\n}`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=FacadeTypeSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FacadeTypeSource.js","sourceRoot":"","sources":["../../src/card/FacadeTypeSource.ts"],"names":[],"mappings":"AAeA,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,YAAY,CAAC,IAAwB,EAAE,MAAc;IAC5D,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,GAAG,MAAM,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED,SAAS,YAAY,CAAC,EAAgB,EAAE,OAAe;IACrD,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,MAAM,EAAE,OAAO,GAAG,OAAO,IAAI,CAAC;QACnC,KAAK,MAAM,EAAE,OAAO,GAAG,OAAO,gEAAgE,CAAC;QAC/F,KAAK,OAAO,EAAE,OAAO,GAAG,OAAO,cAAc,CAAC;QAC9C,KAAK,KAAK,EAAE,OAAO,OAAO,CAAC;QAC3B,KAAK,MAAM,EAAE,OAAO,SAAS,CAAC;QAC9B,SAAS,OAAO,SAAS,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,MAAM,OAAO,gBAAgB;IACU,UAAU;IAA/C,YAAqC,UAAmC;0BAAnC,UAAU;IAA4B,CAAC;IAE5E,MAAM,CAAC,EAAE,CAAC,UAAmC;QAC3C,OAAO,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,OAAO,GAA4B,EAAE;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAChD,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACtD,OAAO,GAAG,GAAG,KAAK,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,sCAAsC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC;QAC1H,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,QAAQ,aAAa,IAAI,KAAK,CAAC;QACnE,OAAO,GAAG,QAAQ,aAAa,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACpE,CAAC;CACF"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { ValidationError } from '
|
|
2
|
-
export declare const isObject: (value: unknown) => value is Record<string, unknown>;
|
|
1
|
+
import type { ValidationError } from '../judge/result.js';
|
|
3
2
|
/** A card is refused by naming what is wrong AND the remedy — never by a bare throw. */
|
|
4
3
|
export declare function refuse(what: string, fix: string): never;
|
|
5
4
|
/**
|
|
@@ -7,5 +6,4 @@ export declare function refuse(what: string, fix: string): never;
|
|
|
7
6
|
* forms are the same value, which `describe: v => v` states.
|
|
8
7
|
*/
|
|
9
8
|
export declare function admitWire(judge: (value: unknown, errors: ValidationError[]) => void, value: unknown, slot: string): void;
|
|
10
|
-
|
|
11
|
-
//# sourceMappingURL=form.d.ts.map
|
|
9
|
+
//# sourceMappingURL=admission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../../src/card/admission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,wFAAwF;AACxF,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,CAEvD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,IAAI,EAC1D,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,GACX,IAAI,CASN"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
export const isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
2
1
|
/** A card is refused by naming what is wrong AND the remedy — never by a bare throw. */
|
|
3
2
|
export function refuse(what, fix) {
|
|
4
3
|
throw new Error(`This card cannot be read: ${what}.\n ${fix}`);
|
|
@@ -14,5 +13,4 @@ export function admitWire(judge, value, slot) {
|
|
|
14
13
|
refuse(`${slot} is malformed — ${errors.map((e) => `${e.path}: ${e.message}`).join('; ')}`, 'A card states an axis the way a declaration does.');
|
|
15
14
|
}
|
|
16
15
|
}
|
|
17
|
-
|
|
18
|
-
//# sourceMappingURL=form.js.map
|
|
16
|
+
//# sourceMappingURL=admission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admission.js","sourceRoot":"","sources":["../../src/card/admission.ts"],"names":[],"mappings":"AAEA,wFAAwF;AACxF,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,GAAW;IAC9C,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,QAAQ,GAAG,EAAE,CAAC,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,KAA0D,EAC1D,KAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,CACJ,GAAG,IAAI,mBAAmB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACnF,mDAAmD,CACpD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/card/diff.d.ts
CHANGED
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What changed between two shapes — the one calculation three readers share.
|
|
3
|
-
*
|
|
4
|
-
* A DDL applies it ONCE to the rows (a migration), a codec applies it at EVERY call
|
|
5
|
-
* (an old API version still being served), and a boot reads it to refuse a version that
|
|
6
|
-
* can no longer produce a valid row. Writing it three times would let the three disagree
|
|
7
|
-
* about the same two shapes.
|
|
8
|
-
*
|
|
9
|
-
* It knows no engine and no protocol: a `Change` is a fact about descriptors, and the
|
|
10
|
-
* dialect stays where the dialect belongs.
|
|
11
|
-
*
|
|
12
|
-
* **It never guesses a rename.** A field gone plus a field appeared is either a rename or
|
|
13
|
-
* a drop-and-add, and the two produce opposite DDL — one keeps the data, the other throws
|
|
14
|
-
* it away. The intent lives in the transition and no pair of snapshots holds it, so it is
|
|
15
|
-
* an input here (`renamed`) and what is left over is REPORTED rather than resolved.
|
|
16
|
-
*/
|
|
17
1
|
import type { BoundaryRef } from '../axis/boundary/Boundary.js';
|
|
18
2
|
import type { LifecycleRules } from '../axis/lifecycle/Lifecycle.js';
|
|
19
|
-
import type { FieldDescriptor, RoleDescriptor
|
|
3
|
+
import type { FieldDescriptor, RoleDescriptor } from './Descriptor.js';
|
|
20
4
|
/** One named difference, at one place. Each kind exists because a reader asks for it. */
|
|
21
5
|
export type Change =
|
|
22
6
|
/** DDL: add the column. Codec: the old caller never sends it. Boot: refuse when required. */
|
|
@@ -33,7 +17,7 @@ export type Change =
|
|
|
33
17
|
from: FieldDescriptor;
|
|
34
18
|
required: boolean;
|
|
35
19
|
}
|
|
36
|
-
/** DDL: rename the column. Codec and ORM: one more entry in the field
|
|
20
|
+
/** DDL: rename the column. Codec and ORM: one more entry in the field-to-column map. */
|
|
37
21
|
| {
|
|
38
22
|
kind: 'renamed';
|
|
39
23
|
from: string;
|
|
@@ -47,7 +31,7 @@ export type Change =
|
|
|
47
31
|
from: TypeSet;
|
|
48
32
|
to: TypeSet;
|
|
49
33
|
}
|
|
50
|
-
/** Same type, different bounds
|
|
34
|
+
/** Same type, different bounds: a CHECK moves, and a value legal yesterday may not be. */
|
|
51
35
|
| {
|
|
52
36
|
kind: 'reshaped';
|
|
53
37
|
field: string;
|
|
@@ -61,15 +45,7 @@ export type Change =
|
|
|
61
45
|
from: boolean;
|
|
62
46
|
to: boolean;
|
|
63
47
|
}
|
|
64
|
-
/**
|
|
65
|
-
* An axis other than shape was restated — `axis` names which, so a reader switches on
|
|
66
|
-
* it rather than re-comparing the descriptor it was handed.
|
|
67
|
-
*
|
|
68
|
-
* One kind for three axes and three kinds for shape is not lopsided: shape is the half
|
|
69
|
-
* a JSON Schema reader honours, and its differences mean different things to a table.
|
|
70
|
-
* A field is FOUR axes, and a comparison that reads one of them answers a quarter of
|
|
71
|
-
* the question — measured, and every reader of `diff` was blind the same way.
|
|
72
|
-
*/
|
|
48
|
+
/** An axis other than shape was restated. */
|
|
73
49
|
| {
|
|
74
50
|
kind: 'restated';
|
|
75
51
|
field: string;
|
|
@@ -89,52 +65,32 @@ export type Change =
|
|
|
89
65
|
from?: BoundaryRef;
|
|
90
66
|
to?: BoundaryRef;
|
|
91
67
|
};
|
|
92
|
-
/** A field's declared
|
|
68
|
+
/** A field's declared types, always represented as a set. */
|
|
93
69
|
export type TypeSet = string[];
|
|
94
|
-
/** A removal and an addition that could be one rename
|
|
70
|
+
/** A removal and an addition that could be one rename: same shape, different name. */
|
|
95
71
|
export interface RenameCandidate {
|
|
96
72
|
removed: string;
|
|
97
73
|
added: string;
|
|
98
74
|
}
|
|
99
75
|
export interface Diff {
|
|
100
76
|
changes: Change[];
|
|
101
|
-
/**
|
|
102
|
-
* What the calculation refuses to decide. Empty means the answer is complete; anything
|
|
103
|
-
* here has to be settled by whoever made the change, while they still remember.
|
|
104
|
-
*/
|
|
77
|
+
/** Questions the comparison refuses to decide without an explicit rename declaration. */
|
|
105
78
|
ambiguous: RenameCandidate[];
|
|
106
79
|
}
|
|
107
80
|
export interface DiffOptions {
|
|
108
|
-
/** Renames as declared at the time
|
|
81
|
+
/** Renames as declared at the time: old name to new name. */
|
|
109
82
|
renamed?: Record<string, string>;
|
|
110
83
|
}
|
|
111
|
-
/**
|
|
112
|
-
* What separates two shapes.
|
|
113
|
-
*
|
|
114
|
-
* `from` is the older one — a frozen version, or the state a migration starts at. The
|
|
115
|
-
* changes read as instructions to get from it to `to`.
|
|
116
|
-
*/
|
|
117
|
-
export declare function diff(from: SchemaDescriptor, to: SchemaDescriptor, options?: DiffOptions): Diff;
|
|
118
|
-
/**
|
|
119
|
-
* What separates two BUNDLES — the dual of `describeSet`, and the shape a freeze
|
|
120
|
-
* actually compares: a version is a set of entities, not one.
|
|
121
|
-
*
|
|
122
|
-
* An entity that appeared or left is reported by name and nothing more. Renaming an
|
|
123
|
-
* ENTITY is deliberately not modelled here: the field-level ambiguity has a declaration
|
|
124
|
-
* to resolve it (`renamed`), and inventing a second one before anything asks would be
|
|
125
|
-
* two mechanisms for one question.
|
|
126
|
-
*/
|
|
127
84
|
export interface SetDiff {
|
|
128
|
-
/** Entities
|
|
85
|
+
/** Entities the target bundle has and the source bundle had not. */
|
|
129
86
|
entitiesAdded: string[];
|
|
130
|
-
/** Entities
|
|
87
|
+
/** Entities the source bundle had and the target bundle has not. */
|
|
131
88
|
entitiesRemoved: string[];
|
|
132
|
-
/**
|
|
89
|
+
/** Differences for entities present in both bundles; unchanged entities are absent. */
|
|
133
90
|
entities: Record<string, Diff>;
|
|
134
91
|
}
|
|
135
92
|
export interface SetDiffOptions {
|
|
136
93
|
/** Declared renames, per entity: `{ post: { body: 'content' } }`. */
|
|
137
94
|
renamed?: Record<string, Record<string, string>>;
|
|
138
95
|
}
|
|
139
|
-
export declare function diffSet(from: SchemaBundle, to: SchemaBundle, options?: SetDiffOptions): SetDiff;
|
|
140
96
|
//# sourceMappingURL=diff.d.ts.map
|
package/dist/card/diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/card/diff.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/card/diff.ts"],"names":[],"mappings":"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"}
|
package/dist/card/diff.js
CHANGED
|
@@ -1,123 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/** The three axes `shapeOf` sets aside, compared one by one. */
|
|
3
|
-
const AXES = ['role', 'lifecycle', 'boundary'];
|
|
4
|
-
/**
|
|
5
|
-
* What moved on the axes a JSON Schema reader cannot see.
|
|
6
|
-
*
|
|
7
|
-
* Compared as VALUES: every axis is normal-form data by construction — that is what makes
|
|
8
|
-
* a descriptor travel — so equality is the whole test and no axis needs its own reader.
|
|
9
|
-
*/
|
|
10
|
-
function restated(field, before, after) {
|
|
11
|
-
return AXES.filter((axis) => !same(before?.[axis], after?.[axis])).map((axis) => ({ kind: 'restated', field, axis, from: before?.[axis], to: after?.[axis] }));
|
|
12
|
-
}
|
|
13
|
-
/** The shape half of a descriptor: everything a JSON Schema reader would honour. */
|
|
14
|
-
function shapeOf(descriptor) {
|
|
15
|
-
const { 'x-fougere': _extension, ...shape } = descriptor;
|
|
16
|
-
return shape;
|
|
17
|
-
}
|
|
18
|
-
/** Its type, always as a set — `'string'` and `['string', 'null']` compare as sets. */
|
|
19
|
-
function typesOf(descriptor) {
|
|
20
|
-
const type = descriptor.type;
|
|
21
|
-
if (type === undefined)
|
|
22
|
-
return [];
|
|
23
|
-
return (Array.isArray(type) ? [...type] : [type]).sort();
|
|
24
|
-
}
|
|
25
|
-
/** Everything but the type — the bounds, the format, the value list. */
|
|
26
|
-
function boundsOf(descriptor) {
|
|
27
|
-
const { type: _type, ...rest } = shapeOf(descriptor);
|
|
28
|
-
return rest;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* What separates two shapes.
|
|
32
|
-
*
|
|
33
|
-
* `from` is the older one — a frozen version, or the state a migration starts at. The
|
|
34
|
-
* changes read as instructions to get from it to `to`.
|
|
35
|
-
*/
|
|
36
|
-
export function diff(from, to, options = {}) {
|
|
37
|
-
const changes = [];
|
|
38
|
-
const renamed = options.renamed ?? {};
|
|
39
|
-
const before = from.properties ?? {};
|
|
40
|
-
const after = to.properties ?? {};
|
|
41
|
-
const requiredBefore = new Set(from.required ?? []);
|
|
42
|
-
const requiredAfter = new Set(to.required ?? []);
|
|
43
|
-
// A declared rename is applied FIRST: past this point the field is compared under its
|
|
44
|
-
// new name, so a rename plus a type change reads as two changes and not as a
|
|
45
|
-
// drop-and-add that happens to look alike.
|
|
46
|
-
const nameAfter = (field) => renamed[field] ?? field;
|
|
47
|
-
const removed = [];
|
|
48
|
-
for (const [field, descriptor] of Object.entries(before)) {
|
|
49
|
-
const now = nameAfter(field);
|
|
50
|
-
const target = after[now];
|
|
51
|
-
if (target === undefined) {
|
|
52
|
-
removed.push(field);
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
if (now !== field)
|
|
56
|
-
changes.push({ kind: 'renamed', from: field, to: now, field: target });
|
|
57
|
-
const wasType = typesOf(descriptor);
|
|
58
|
-
const isType = typesOf(target);
|
|
59
|
-
if (!same(wasType, isType))
|
|
60
|
-
changes.push({ kind: 'retyped', field: now, from: wasType, to: isType });
|
|
61
|
-
else if (!same(boundsOf(descriptor), boundsOf(target))) {
|
|
62
|
-
changes.push({ kind: 'reshaped', field: now, from: descriptor, to: target });
|
|
63
|
-
}
|
|
64
|
-
const wasRequired = requiredBefore.has(field);
|
|
65
|
-
const isRequired = requiredAfter.has(now);
|
|
66
|
-
if (wasRequired !== isRequired) {
|
|
67
|
-
changes.push({ kind: 'required', field: now, from: wasRequired, to: isRequired });
|
|
68
|
-
}
|
|
69
|
-
changes.push(...restated(now, descriptor['x-fougere'], target['x-fougere']));
|
|
70
|
-
}
|
|
71
|
-
const claimed = new Set(Object.values(renamed));
|
|
72
|
-
const added = Object.keys(after).filter((field) => !(field in before) && !claimed.has(field));
|
|
73
|
-
for (const field of removed) {
|
|
74
|
-
changes.push({ kind: 'removed', field, from: before[field], required: requiredBefore.has(field) });
|
|
75
|
-
}
|
|
76
|
-
for (const field of added) {
|
|
77
|
-
changes.push({ kind: 'added', field, to: after[field], required: requiredAfter.has(field) });
|
|
78
|
-
}
|
|
79
|
-
return { changes, ambiguous: candidates(removed, added, before, after) };
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Which removal could be which addition. Paired on an identical shape, because that is
|
|
83
|
-
* the whole of what a snapshot knows: two fields carrying the same declaration under two
|
|
84
|
-
* names is exactly what a rename leaves behind.
|
|
85
|
-
*
|
|
86
|
-
* Reported, never applied — including when there is only one pair. A confident guess is
|
|
87
|
-
* still a guess, and being wrong here drops a column of live data.
|
|
88
|
-
*/
|
|
89
|
-
function candidates(removed, added, before, after) {
|
|
90
|
-
const found = [];
|
|
91
|
-
for (const gone of removed) {
|
|
92
|
-
for (const appeared of added) {
|
|
93
|
-
if (same(shapeOf(before[gone]), shapeOf(after[appeared])))
|
|
94
|
-
found.push({ removed: gone, added: appeared });
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
// Nearest first: a rename usually leaves the field where it was, so the declaration's
|
|
98
|
-
// own order ranks the pairs. It ORDERS them and decides nothing — the list is whole.
|
|
99
|
-
const was = Object.keys(before);
|
|
100
|
-
const now = Object.keys(after);
|
|
101
|
-
const apart = ({ removed: gone, added: appeared }) => Math.abs(now.indexOf(appeared) - was.indexOf(gone));
|
|
102
|
-
return found.sort((a, b) => apart(a) - apart(b));
|
|
103
|
-
}
|
|
104
|
-
export function diffSet(from, to, options = {}) {
|
|
105
|
-
const before = from.$defs ?? {};
|
|
106
|
-
const after = to.$defs ?? {};
|
|
107
|
-
const entities = {};
|
|
108
|
-
for (const [name, descriptor] of Object.entries(before)) {
|
|
109
|
-
const target = after[name];
|
|
110
|
-
if (target === undefined)
|
|
111
|
-
continue;
|
|
112
|
-
const answer = diff(descriptor, target, { renamed: options.renamed?.[name] ?? {} });
|
|
113
|
-
// An entity that did not move says nothing — a freeze records differences, not a census.
|
|
114
|
-
if (answer.changes.length > 0 || answer.ambiguous.length > 0)
|
|
115
|
-
entities[name] = answer;
|
|
116
|
-
}
|
|
117
|
-
return {
|
|
118
|
-
entitiesAdded: Object.keys(after).filter((name) => !(name in before)),
|
|
119
|
-
entitiesRemoved: Object.keys(before).filter((name) => !(name in after)),
|
|
120
|
-
entities,
|
|
121
|
-
};
|
|
122
|
-
}
|
|
1
|
+
export {};
|
|
123
2
|
//# sourceMappingURL=diff.js.map
|
package/dist/card/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/card/diff.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/card/diff.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Field, Fields } from "../Field.js";
|
|
1
|
+
import type { Field, Fields } from "../fields/Field.js";
|
|
2
2
|
export declare abstract class FieldGroup {
|
|
3
3
|
readonly members: readonly string[];
|
|
4
4
|
constructor(members: readonly string[]);
|
|
@@ -10,7 +10,7 @@ export declare abstract class FieldGroup {
|
|
|
10
10
|
onto(fields: Fields): Fields;
|
|
11
11
|
rename(map: (key: string) => string | undefined): this | null;
|
|
12
12
|
toJSON(): string[];
|
|
13
|
-
static normalize<R extends FieldGroup>(groups:
|
|
13
|
+
static normalize<R extends FieldGroup>(groups: readonly (R | readonly string[])[] | undefined, make: (members: readonly string[]) => R): readonly R[] | undefined;
|
|
14
14
|
static on<R extends FieldGroup>(field: Field, kind: Function & {
|
|
15
15
|
prototype: R;
|
|
16
16
|
}): R[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldGroup.d.ts","sourceRoot":"","sources":["../../src/constraint/FieldGroup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"FieldGroup.d.ts","sourceRoot":"","sources":["../../src/constraint/FieldGroup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAExD,8BAAsB,UAAU;IAClB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;IAA/C,YAAqB,OAAO,EAAE,SAAS,MAAM,EAAE,EAAI;IAEnD,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAItD;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE/B;IAED,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3B;IAED,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAMjC;IAED,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgB3B;IAED,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAM5D;IAED,MAAM,IAAI,MAAM,EAAE,CAEjB;IAED,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,UAAU,EACnC,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC,EAAE,GAAG,SAAS,EACtD,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,CAAC,GACtC,SAAS,CAAC,EAAE,GAAG,SAAS,CAK1B;IAED,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,UAAU,EAC5B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,QAAQ,GAAG;QAAE,SAAS,EAAE,CAAC,CAAA;KAAE,GAChC,CAAC,EAAE,CAIL;IAED,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,UAAU,EAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,GAAG;QAAE,SAAS,EAAE,CAAC,CAAA;KAAE,GAChC,CAAC,EAAE,CAML;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldGroup.js","sourceRoot":"","sources":["../../src/constraint/FieldGroup.ts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,UAAU;IACT,OAAO;IAA5B,YAAqB,OAA0B;uBAA1B,OAAO;IAAsB,CAAC;IAEzC,WAAW,CAAC,OAA0B;QAC9C,OAAO,IAAK,IAAI,CAAC,WAAwD,CACvE,OAAO,CACR,CAAC;IACJ,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,UAAU,CAAC,MAAc;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,KAAiB;QACtB,OAAO,CACL,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;YACtC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM;YAC5C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAC/D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAc;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,MAAM;YAChB,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU;gBAC3E,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC,CACnF,CAAC;QAEJ,MAAM,GAAG,GAAW,EAAE,GAAG,MAAM,EAAE,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAE,CAAC;YACxB,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;gBACpB,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE;aACrE,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,GAAwC;QAC7C,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC;YAC7D,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAC3B,CAAC,CAAC,IAAI,CAAC;IACX,CAAC;IAED,MAAM;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,SAAS,CACd,
|
|
1
|
+
{"version":3,"file":"FieldGroup.js","sourceRoot":"","sources":["../../src/constraint/FieldGroup.ts"],"names":[],"mappings":"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"}
|
package/dist/entity.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type Fields } from './Field.js';
|
|
1
|
+
import { type Fields } from './fields/Field.js';
|
|
2
2
|
import { type EntityDeclarations } from './EntityDeclarations.js';
|
|
3
|
-
import { type SchemaConstructor } from './Schema.js';
|
|
4
|
-
export declare function entity<TFields extends Fields>(originalFields: TFields,
|
|
3
|
+
import { type SchemaConstructor } from './schema/Schema.js';
|
|
4
|
+
export declare function entity<TFields extends Fields>(originalFields: TFields, { unique, adapters, previous }?: EntityDeclarations<TFields>): SchemaConstructor<TFields>;
|
|
5
5
|
//# sourceMappingURL=entity.d.ts.map
|
package/dist/entity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEpE,wBAAgB,MAAM,CAAC,OAAO,SAAS,MAAM,EAC3C,cAAc,EAAE,OAAO,EACvB,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAE,kBAAkB,CAAC,OAAO,CAAM,GAC/D,iBAAiB,CAAC,OAAO,CAAC,CAM5B"}
|
package/dist/entity.js
CHANGED
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
fields = new Unique(group).onto(fields);
|
|
10
|
-
const schema = Schema.of(fields, undefined, declarations?.hints, {});
|
|
11
|
-
if (declarations?.previous)
|
|
12
|
-
Object.assign(schema, { previous: declarations.previous });
|
|
13
|
-
return schema;
|
|
1
|
+
import { FieldSet } from './fields/FieldSet.js';
|
|
2
|
+
import { Schema } from './schema/Schema.js';
|
|
3
|
+
export function entity(originalFields, { unique, adapters, previous } = {}) {
|
|
4
|
+
return Schema.of({
|
|
5
|
+
fields: FieldSet.declared(originalFields, unique),
|
|
6
|
+
adapters,
|
|
7
|
+
previous,
|
|
8
|
+
});
|
|
14
9
|
}
|
|
15
10
|
//# sourceMappingURL=entity.js.map
|
package/dist/entity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../src/entity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAA0B,MAAM,oBAAoB,CAAC;AAEpE,MAAM,UAAU,MAAM,CACpB,cAAuB,EACvB,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAgC,EAAE;IAEhE,OAAO,MAAM,CAAC,EAAE,CAAC;QACf,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QACjD,QAAQ;QACR,QAAQ;KACT,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Shape } from "../axis/shape/Shape.js";
|
|
2
|
+
import { type RoleRules } from "../axis/role/Role.js";
|
|
3
|
+
import type { LifecycleRules } from "../axis/lifecycle/Lifecycle.js";
|
|
4
|
+
import type { BoundaryRef } from "../axis/boundary/Boundary.js";
|
|
5
|
+
import type { Meta } from "../axis/Meta.js";
|
|
6
|
+
import type { Axis } from "../axis/Axis.js";
|
|
7
|
+
export type Fields = Record<string, Field>;
|
|
8
|
+
/** A key of a field set — the name a declaration addresses a field by. */
|
|
9
|
+
export type FieldName<TFields extends Fields> = Extract<keyof TFields, string>;
|
|
10
|
+
/** The carrier, the three extension axes, the annotation — the five the judge reads. */
|
|
11
|
+
export type FieldDeclaration = Pick<Field, "shape" | Axis["slot"] | "meta">;
|
|
12
|
+
export declare class Field<T = unknown> {
|
|
13
|
+
readonly shape: Shape;
|
|
14
|
+
readonly role?: RoleRules;
|
|
15
|
+
readonly lifecycle?: LifecycleRules;
|
|
16
|
+
readonly boundary?: BoundaryRef;
|
|
17
|
+
readonly meta?: Meta;
|
|
18
|
+
readonly _type?: T;
|
|
19
|
+
constructor(init: FieldDeclaration, key?: string);
|
|
20
|
+
static is(value: unknown): value is Field;
|
|
21
|
+
with<U = T>(overrides: Partial<FieldDeclaration>): Field<U>;
|
|
22
|
+
rename(map: (key: string) => string | undefined): Field<T>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=Field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../../src/fields/Field.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE3C,0EAA0E;AAC1E,MAAM,MAAM,SAAS,CAAC,OAAO,SAAS,MAAM,IAAI,OAAO,CAAC,MAAM,OAAO,EAAE,MAAM,CAAC,CAAC;AAE/E,wFAAwF;AACxF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAE5E,qBAAa,KAAK,CAAC,CAAC,GAAG,OAAO;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAErB,SAAiB,KAAK,CAAC,EAAE,CAAC,CAAC;IAE3B,YAAY,IAAI,EAAE,gBAAgB,EAAE,GAAG,CAAC,EAAE,MAAM,EAyB/C;IAED,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAExC;IAED,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAE1D;IAED,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAgBzD;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { Role } from "../axis/role/Role.js";
|
|
2
|
+
import { FieldJudge } from "../judge/FieldJudge.js";
|
|
3
|
+
import { ValueJudge } from "../judge/ValueJudge.js";
|
|
4
4
|
export class Field {
|
|
5
5
|
shape;
|
|
6
6
|
role;
|
|
@@ -8,24 +8,27 @@ export class Field {
|
|
|
8
8
|
boundary;
|
|
9
9
|
meta;
|
|
10
10
|
constructor(init, key) {
|
|
11
|
-
const verdict =
|
|
11
|
+
const verdict = FieldJudge.of(init).verdict;
|
|
12
12
|
if (!verdict.success) {
|
|
13
13
|
throw new Error(`${key ? `Field '${key}': ` : ""}` +
|
|
14
14
|
verdict.errors.map((e) => `${e.path}: ${e.message}`).join("; "));
|
|
15
15
|
}
|
|
16
16
|
this.shape = init.shape;
|
|
17
|
-
this.role =
|
|
17
|
+
this.role = Role.resolvedOn(init.role, key);
|
|
18
18
|
this.lifecycle = init.lifecycle;
|
|
19
19
|
this.boundary = init.boundary;
|
|
20
20
|
this.meta = init.meta;
|
|
21
21
|
const create = this.lifecycle?.create;
|
|
22
22
|
if (typeof create === "object" && create !== null && "value" in create) {
|
|
23
|
-
const checked =
|
|
23
|
+
const checked = ValueJudge.of(this).check(create.value);
|
|
24
24
|
if ("error" in checked)
|
|
25
25
|
throw new Error(`${key ? `Field '${key}': ` : ""}the declared default ${JSON.stringify(create.value)} ` +
|
|
26
26
|
`is not a legal value for it — ${checked.error}.`);
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
+
static is(value) {
|
|
30
|
+
return FieldJudge.of(value).verdict.success;
|
|
31
|
+
}
|
|
29
32
|
with(overrides) {
|
|
30
33
|
return new Field({ ...this, ...overrides });
|
|
31
34
|
}
|
|
@@ -33,18 +36,17 @@ export class Field {
|
|
|
33
36
|
const rules = this.role?.rules;
|
|
34
37
|
if (!rules?.length)
|
|
35
38
|
return this;
|
|
36
|
-
const carried = rules
|
|
37
|
-
|
|
39
|
+
const carried = rules
|
|
40
|
+
.map((group) => group.rename(map))
|
|
41
|
+
.filter((group) => group !== null);
|
|
42
|
+
const unchanged = carried.length === rules.length &&
|
|
43
|
+
carried.every((group, i) => group.equals(rules[i]));
|
|
38
44
|
if (unchanged)
|
|
39
45
|
return this;
|
|
40
46
|
const { rules: _dropped, ...rest } = this.role;
|
|
41
|
-
return this.with({
|
|
47
|
+
return this.with({
|
|
48
|
+
role: carried.length ? { ...rest, rules: carried } : rest,
|
|
49
|
+
});
|
|
42
50
|
}
|
|
43
51
|
}
|
|
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
52
|
//# sourceMappingURL=Field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../../src/fields/Field.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { CompositeUnique } from '../EntityDeclarations.js';
|
|
2
|
+
import { type FieldName, type Fields } from './Field.js';
|
|
3
|
+
export declare class FieldSet<TFields extends Fields = Fields> {
|
|
4
|
+
private readonly fields;
|
|
5
|
+
private constructor();
|
|
6
|
+
static of<TFields extends Fields>(fields: TFields): FieldSet<TFields>;
|
|
7
|
+
/**
|
|
8
|
+
* Every entry through the field door, then the groups declared over several of them.
|
|
9
|
+
* A group written here names its members; one written on a field named itself, and the
|
|
10
|
+
* key it sat under resolved it.
|
|
11
|
+
*/
|
|
12
|
+
static declared<TFields extends Fields>(declared: TFields, unique?: CompositeUnique<TFields>): TFields;
|
|
13
|
+
/**
|
|
14
|
+
* The name of the field that carries `primary`, or `undefined` when none does.
|
|
15
|
+
*
|
|
16
|
+
* `Role.of(field).isPrimary` answers about ONE field; this answers about a shape, which
|
|
17
|
+
* is the question every reader actually had. It was the same three lines spelled five
|
|
18
|
+
* times — a mirror's key, a form's row identity, GraphQL's node id, the DDL's primary
|
|
19
|
+
* key and the ORM's `findById` column — so a shape with two primaries meant whichever
|
|
20
|
+
* one that loop happened to see first, five times over.
|
|
21
|
+
*
|
|
22
|
+
* The absence is answered and not defaulted: `'id'` is a fine fallback for a form and a
|
|
23
|
+
* lie for a DDL, so the caller decides.
|
|
24
|
+
*/
|
|
25
|
+
get primary(): FieldName<TFields> | undefined;
|
|
26
|
+
get uniqueGroups(): CompositeUnique<TFields> | undefined;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=FieldSet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldSet.d.ts","sourceRoot":"","sources":["../../src/fields/FieldSet.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAS,KAAK,SAAS,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAEhE,qBAAa,QAAQ,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAA3C,OAAO,eAAiD;IAExD,MAAM,CAAC,EAAE,CAAC,OAAO,SAAS,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAEpE;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,SAAS,MAAM,EACpC,QAAQ,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GAChC,OAAO,CAKT;IAED;;;;;;;;;;;OAWG;IACH,IAAI,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAa5C;IAED,IAAI,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,SAAS,CAKvD;CACF"}
|