@hyperscale0/udl 1.0.0 → 1.0.123
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/CHANGELOG.md +5 -216
- package/LICENSE.md +356 -0
- package/NOTICE.md +8 -0
- package/README.md +14 -106
- package/dist/canonical.d.ts.map +1 -1
- package/dist/canonical.js +1 -29
- package/dist/canonical.js.map +1 -1
- package/dist/diagnostics.d.ts +13 -165
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +33 -157
- package/dist/diagnostics.js.map +1 -1
- package/dist/field-value.d.ts +5 -0
- package/dist/field-value.d.ts.map +1 -0
- package/dist/field-value.js +85 -0
- package/dist/field-value.js.map +1 -0
- package/dist/finance.d.ts +10 -53
- package/dist/finance.d.ts.map +1 -1
- package/dist/finance.js +252 -536
- package/dist/finance.js.map +1 -1
- package/dist/index.d.ts +9 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/json.d.ts +2 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +30 -0
- package/dist/json.js.map +1 -0
- package/dist/limits.d.ts +3 -28
- package/dist/limits.d.ts.map +1 -1
- package/dist/limits.js +5 -31
- package/dist/limits.js.map +1 -1
- package/dist/object-contract.d.ts +140 -0
- package/dist/object-contract.d.ts.map +1 -0
- package/dist/object-contract.js +314 -0
- package/dist/object-contract.js.map +1 -0
- package/dist/object-semantics-schema.d.ts +5710 -0
- package/dist/object-semantics-schema.d.ts.map +1 -0
- package/dist/object-semantics-schema.js +119 -0
- package/dist/object-semantics-schema.js.map +1 -0
- package/dist/object-semantics.d.ts +6 -0
- package/dist/object-semantics.d.ts.map +1 -0
- package/dist/object-semantics.js +279 -0
- package/dist/object-semantics.js.map +1 -0
- package/dist/object-structures.d.ts +4 -0
- package/dist/object-structures.d.ts.map +1 -0
- package/dist/object-structures.js +134 -0
- package/dist/object-structures.js.map +1 -0
- package/dist/reporting-validation.d.ts +8 -0
- package/dist/reporting-validation.d.ts.map +1 -0
- package/dist/reporting-validation.js +252 -0
- package/dist/reporting-validation.js.map +1 -0
- package/dist/reporting.d.ts +477 -0
- package/dist/reporting.d.ts.map +1 -0
- package/dist/reporting.js +169 -0
- package/dist/reporting.js.map +1 -0
- package/dist/schema.d.ts +5572 -2710
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +444 -1121
- package/dist/schema.js.map +1 -1
- package/dist/validation.d.ts +10 -73
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +1109 -2569
- package/dist/validation.js.map +1 -1
- package/docs/assets/brand/manifest.json +30 -0
- package/docs/assets/brand/udl-horizontal-white.svg +1 -0
- package/docs/assets/brand/udl-horizontal.svg +1 -0
- package/docs/assets/brand/udl-stacked-white.svg +1 -0
- package/docs/assets/brand/udl-stacked.svg +1 -0
- package/docs/assets/udl.svg +11 -0
- package/package.json +13 -22
- package/spec/README.md +300 -172
- package/spec/cars.udl.json +249 -0
- package/spec/udl.schema.json +3066 -2242
- package/src/canonical.ts +1 -35
- package/src/diagnostics.ts +76 -209
- package/src/field-value.ts +87 -0
- package/src/finance.ts +327 -832
- package/src/index.ts +18 -95
- package/src/json.ts +34 -0
- package/src/limits.ts +5 -31
- package/src/object-contract.ts +559 -0
- package/src/object-semantics-schema.ts +148 -0
- package/src/object-semantics.ts +378 -0
- package/src/object-structures.ts +255 -0
- package/src/reporting-validation.ts +383 -0
- package/src/reporting.ts +178 -0
- package/src/schema.ts +510 -1277
- package/src/validation.ts +1630 -4545
- package/LICENSE +0 -661
- package/LICENSING.md +0 -51
- package/TRADEMARKS.md +0 -35
- package/conformance/README.md +0 -82
- package/conformance/evolution/action-contract.expected.json +0 -10
- package/conformance/evolution/action-contract.live.udl +0 -44
- package/conformance/evolution/action-contract.next.udl +0 -45
- package/conformance/evolution/product-identity.expected.json +0 -10
- package/conformance/evolution/product-identity.live.udl +0 -55
- package/conformance/evolution/product-identity.next.udl +0 -55
- package/conformance/evolution/version-required.expected.json +0 -10
- package/conformance/evolution/version-required.live.udl +0 -55
- package/conformance/evolution/version-required.next.udl +0 -58
- package/conformance/invalid/action-without-transition.expected.json +0 -10
- package/conformance/invalid/action-without-transition.udl +0 -60
- package/conformance/invalid/agent-description-too-long.expected.json +0 -10
- package/conformance/invalid/agent-description-too-long.udl +0 -57
- package/conformance/invalid/blank-title.expected.json +0 -10
- package/conformance/invalid/blank-title.udl +0 -54
- package/conformance/invalid/composition-dial-duplicate-key.expected.json +0 -10
- package/conformance/invalid/composition-dial-duplicate-key.udl +0 -73
- package/conformance/invalid/depth-budget.expected.json +0 -10
- package/conformance/invalid/depth-budget.udl +0 -49
- package/conformance/invalid/duplicate-subject.expected.json +0 -10
- package/conformance/invalid/duplicate-subject.udl +0 -230
- package/conformance/invalid/forged-effects.expected.json +0 -10
- package/conformance/invalid/forged-effects.udl +0 -76
- package/conformance/invalid/format-version.expected.json +0 -10
- package/conformance/invalid/format-version.udl +0 -54
- package/conformance/invalid/instrument-id-not-snake-case.expected.json +0 -10
- package/conformance/invalid/instrument-id-not-snake-case.udl +0 -54
- package/conformance/invalid/invalid-aggregate-gate-shape.expected.json +0 -10
- package/conformance/invalid/invalid-aggregate-gate-shape.udl +0 -1819
- package/conformance/invalid/invalid-check-duration.expected.json +0 -10
- package/conformance/invalid/invalid-check-duration.udl +0 -219
- package/conformance/invalid/invalid-dial-anchor.expected.json +0 -10
- package/conformance/invalid/invalid-dial-anchor.udl +0 -219
- package/conformance/invalid/invalid-exception-parent-ref.expected.json +0 -10
- package/conformance/invalid/invalid-exception-parent-ref.udl +0 -2487
- package/conformance/invalid/invalid-exposure-shape.expected.json +0 -10
- package/conformance/invalid/invalid-exposure-shape.udl +0 -1819
- package/conformance/invalid/invalid-remainder.expected.json +0 -10
- package/conformance/invalid/invalid-remainder.udl +0 -220
- package/conformance/invalid/invalid-schema-keyword.expected.json +0 -10
- package/conformance/invalid/invalid-schema-keyword.udl +0 -220
- package/conformance/invalid/invalid-utf8.expected.json +0 -10
- package/conformance/invalid/invalid-utf8.udl +0 -1
- package/conformance/invalid/malformed-json.expected.json +0 -10
- package/conformance/invalid/malformed-json.udl +0 -1
- package/conformance/invalid/missing-create-action.expected.json +0 -10
- package/conformance/invalid/missing-create-action.udl +0 -48
- package/conformance/invalid/missing-exception-amount-field.expected.json +0 -10
- package/conformance/invalid/missing-exception-amount-field.udl +0 -2487
- package/conformance/invalid/missing-exception-contract.expected.json +0 -14
- package/conformance/invalid/missing-exception-contract.udl +0 -2523
- package/conformance/invalid/missing-exception-reason-field.expected.json +0 -10
- package/conformance/invalid/missing-exception-reason-field.udl +0 -2487
- package/conformance/invalid/not-an-object.expected.json +0 -10
- package/conformance/invalid/not-an-object.udl +0 -1
- package/conformance/invalid/payout-reconcile-not-a-bank-debit.expected.json +0 -10
- package/conformance/invalid/payout-reconcile-not-a-bank-debit.udl +0 -259
- package/conformance/invalid/quote-freeze-set-incomplete.expected.json +0 -10
- package/conformance/invalid/quote-freeze-set-incomplete.udl +0 -261
- package/conformance/invalid/quote-named-reference-gate.expected.json +0 -10
- package/conformance/invalid/quote-named-reference-gate.udl +0 -50
- package/conformance/invalid/reconcile-named-reference-gate.expected.json +0 -10
- package/conformance/invalid/reconcile-named-reference-gate.udl +0 -50
- package/conformance/invalid/unknown-key.expected.json +0 -10
- package/conformance/invalid/unknown-key.udl +0 -55
- package/conformance/invalid/unknown-reference-gate-field.expected.json +0 -10
- package/conformance/invalid/unknown-reference-gate-field.udl +0 -1819
- package/conformance/invalid/unknown-required-field.expected.json +0 -10
- package/conformance/invalid/unknown-required-field.udl +0 -220
- package/conformance/invalid/unreachable-state.expected.json +0 -10
- package/conformance/invalid/unreachable-state.udl +0 -55
- package/conformance/invalid/wrong-exception-amount-field.expected.json +0 -10
- package/conformance/invalid/wrong-exception-amount-field.udl +0 -2487
- package/conformance/invalid/wrong-exception-reason-field.expected.json +0 -10
- package/conformance/invalid/wrong-exception-reason-field.udl +0 -2487
- package/conformance/valid/agent-description.expected.json +0 -6
- package/conformance/valid/agent-description.udl +0 -66
- package/conformance/valid/cards.expected.json +0 -6
- package/conformance/valid/cards.udl +0 -1579
- package/conformance/valid/commerce-escrow.expected.json +0 -6
- package/conformance/valid/commerce-escrow.udl +0 -1512
- package/conformance/valid/compiled-crowdfunding.expected.json +0 -6
- package/conformance/valid/compiled-crowdfunding.udl +0 -1843
- package/conformance/valid/compiled-watch-club.expected.json +0 -6
- package/conformance/valid/compiled-watch-club.udl +0 -2486
- package/conformance/valid/complete-contract.expected.json +0 -6
- package/conformance/valid/complete-contract.udl +0 -218
- package/conformance/valid/effect-signatures.expected.json +0 -6
- package/conformance/valid/effect-signatures.udl +0 -75
- package/conformance/valid/hand-edited.expected.json +0 -6
- package/conformance/valid/hand-edited.udl +0 -1
- package/conformance/valid/insured-car-marketplace.expected.json +0 -6
- package/conformance/valid/insured-car-marketplace.udl +0 -1050
- package/conformance/valid/insured-travel.expected.json +0 -6
- package/conformance/valid/insured-travel.udl +0 -3469
- package/conformance/valid/minimal.expected.json +0 -6
- package/conformance/valid/minimal.udl +0 -54
- package/conformance/valid/protection.expected.json +0 -6
- package/conformance/valid/protection.udl +0 -1551
- package/conformance/valid/string-escaping.expected.json +0 -6
- package/conformance/valid/string-escaping.udl +0 -54
- package/dist/check-profiles.d.ts +0 -57
- package/dist/check-profiles.d.ts.map +0 -1
- package/dist/check-profiles.js +0 -62
- package/dist/check-profiles.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -184
- package/dist/cli.js.map +0 -1
- package/dist/effects.d.ts +0 -41
- package/dist/effects.d.ts.map +0 -1
- package/dist/effects.js +0 -110
- package/dist/effects.js.map +0 -1
- package/dist/evolution.d.ts +0 -120
- package/dist/evolution.d.ts.map +0 -1
- package/dist/evolution.js +0 -567
- package/dist/evolution.js.map +0 -1
- package/dist/parser.d.ts +0 -4
- package/dist/parser.d.ts.map +0 -1
- package/dist/parser.js +0 -44
- package/dist/parser.js.map +0 -1
- package/docs/README.md +0 -14
- package/docs/guide/01-a-document.md +0 -37
- package/docs/guide/02-money-steps.md +0 -23
- package/docs/guide/03-laws.md +0 -18
- package/docs/guide/04-fees-and-remainder.md +0 -15
- package/docs/guide/05-checks-updates-dials.md +0 -7
- package/docs/guide/06-effects.md +0 -11
- package/docs/guide/07-evolution.md +0 -11
- package/docs/guide/08-implementing.md +0 -13
- package/docs/llms-full.txt +0 -1241
- package/docs/llms.txt +0 -14
- package/docs/reference/canonical.md +0 -16
- package/docs/reference/clauses.md +0 -986
- package/docs/reference/cli.md +0 -22
- package/docs/reference/diagnostics.md +0 -32
- package/skills/udl/SKILL.md +0 -28
- package/src/check-profiles.ts +0 -80
- package/src/cli.ts +0 -196
- package/src/effects.ts +0 -163
- package/src/evolution.ts +0 -965
- package/src/parser.ts +0 -58
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"instruments": [
|
|
3
|
-
{
|
|
4
|
-
"actionOrder": [
|
|
5
|
-
"close",
|
|
6
|
-
"create"
|
|
7
|
-
],
|
|
8
|
-
"actions": {
|
|
9
|
-
"close": {
|
|
10
|
-
"moves": [],
|
|
11
|
-
"steps": [],
|
|
12
|
-
"summary": "Close the note."
|
|
13
|
-
},
|
|
14
|
-
"create": {
|
|
15
|
-
"moves": [],
|
|
16
|
-
"steps": [],
|
|
17
|
-
"summary": "File the note."
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
"fields": {
|
|
21
|
-
"reference": {
|
|
22
|
-
"type": "string"
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
"id": "note",
|
|
26
|
-
"idPrefix": "note",
|
|
27
|
-
"lifecycle": {
|
|
28
|
-
"initial": "open",
|
|
29
|
-
"states": [
|
|
30
|
-
"open",
|
|
31
|
-
"closed"
|
|
32
|
-
],
|
|
33
|
-
"transitions": {
|
|
34
|
-
"close": {
|
|
35
|
-
"from": [
|
|
36
|
-
"open"
|
|
37
|
-
],
|
|
38
|
-
"to": "closed"
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"required": [
|
|
43
|
-
"reference"
|
|
44
|
-
],
|
|
45
|
-
"summary": "A lone surrogate \ud800 stays escaped; U+2028
and U+007F stay literal.",
|
|
46
|
-
"title": "Canonical string escaping"
|
|
47
|
-
}
|
|
48
|
-
],
|
|
49
|
-
"product": "canonical_string_escaping",
|
|
50
|
-
"subjects": [],
|
|
51
|
-
"title": "Canonical string escaping",
|
|
52
|
-
"udl": 1,
|
|
53
|
-
"version": 1
|
|
54
|
-
}
|
package/dist/check-profiles.d.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Evidence profiles that an instrument action may require before it runs.
|
|
3
|
-
* The public grammar and the runtime both read this table. A pair absent here
|
|
4
|
-
* cannot gate an action.
|
|
5
|
-
*/
|
|
6
|
-
export interface UdlCheckEvidenceProfile {
|
|
7
|
-
readonly family: string;
|
|
8
|
-
readonly checkKind: string;
|
|
9
|
-
readonly kindField?: string;
|
|
10
|
-
readonly statusField: string;
|
|
11
|
-
readonly statuses: readonly string[];
|
|
12
|
-
}
|
|
13
|
-
export declare const udlCheckEvidenceProfiles: readonly [{
|
|
14
|
-
readonly family: "national_identity";
|
|
15
|
-
readonly checkKind: "identity_verification";
|
|
16
|
-
readonly kindField: "checkKind";
|
|
17
|
-
readonly statusField: "verificationStatus";
|
|
18
|
-
readonly statuses: readonly ["requested", "waiting", "completed", "rejected", "expired", "error"];
|
|
19
|
-
}, {
|
|
20
|
-
readonly family: "national_identity";
|
|
21
|
-
readonly checkKind: "contact_ownership_verification";
|
|
22
|
-
readonly kindField: "checkKind";
|
|
23
|
-
readonly statusField: "matchResult";
|
|
24
|
-
readonly statuses: readonly ["match", "no_match"];
|
|
25
|
-
}, {
|
|
26
|
-
readonly family: "credit_bureau";
|
|
27
|
-
readonly checkKind: "consumer_inquiry";
|
|
28
|
-
readonly kindField: "inquiryType";
|
|
29
|
-
readonly statusField: "bureauStatus";
|
|
30
|
-
readonly statuses: readonly ["returned", "acknowledged", "correction_required"];
|
|
31
|
-
}, {
|
|
32
|
-
readonly family: "credit_bureau";
|
|
33
|
-
readonly checkKind: "commercial_inquiry";
|
|
34
|
-
readonly kindField: "inquiryType";
|
|
35
|
-
readonly statusField: "bureauStatus";
|
|
36
|
-
readonly statuses: readonly ["returned", "acknowledged", "correction_required"];
|
|
37
|
-
}, {
|
|
38
|
-
readonly family: "credit_bureau";
|
|
39
|
-
readonly checkKind: "facility_report";
|
|
40
|
-
readonly kindField: "inquiryType";
|
|
41
|
-
readonly statusField: "bureauStatus";
|
|
42
|
-
readonly statuses: readonly ["returned", "acknowledged", "correction_required"];
|
|
43
|
-
}, {
|
|
44
|
-
readonly family: "sanctions_screening";
|
|
45
|
-
readonly checkKind: "screen";
|
|
46
|
-
readonly kindField: "checkKind";
|
|
47
|
-
readonly statusField: "screeningStatus";
|
|
48
|
-
readonly statuses: readonly ["clear", "hit", "manual_review"];
|
|
49
|
-
}, {
|
|
50
|
-
readonly family: "enforcement_instrument";
|
|
51
|
-
readonly checkKind: "note_request";
|
|
52
|
-
readonly statusField: "requestStatus";
|
|
53
|
-
readonly statuses: readonly ["debtor_approved", "debtor_rejected", "auto_cancelled"];
|
|
54
|
-
}];
|
|
55
|
-
/** Returns the tenant-gateable evidence profile for one family and check. */
|
|
56
|
-
export declare function udlCheckEvidenceProfile(family: string, checkKind: string): UdlCheckEvidenceProfile | undefined;
|
|
57
|
-
//# sourceMappingURL=check-profiles.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check-profiles.d.ts","sourceRoot":"","sources":["../src/check-profiles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwDkB,CAAC;AAExD,6EAA6E;AAC7E,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,uBAAuB,GAAG,SAAS,CAIrC"}
|
package/dist/check-profiles.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
export const udlCheckEvidenceProfiles = [
|
|
2
|
-
{
|
|
3
|
-
family: "national_identity",
|
|
4
|
-
checkKind: "identity_verification",
|
|
5
|
-
kindField: "checkKind",
|
|
6
|
-
statusField: "verificationStatus",
|
|
7
|
-
statuses: [
|
|
8
|
-
"requested",
|
|
9
|
-
"waiting",
|
|
10
|
-
"completed",
|
|
11
|
-
"rejected",
|
|
12
|
-
"expired",
|
|
13
|
-
"error",
|
|
14
|
-
],
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
family: "national_identity",
|
|
18
|
-
checkKind: "contact_ownership_verification",
|
|
19
|
-
kindField: "checkKind",
|
|
20
|
-
statusField: "matchResult",
|
|
21
|
-
statuses: ["match", "no_match"],
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
family: "credit_bureau",
|
|
25
|
-
checkKind: "consumer_inquiry",
|
|
26
|
-
kindField: "inquiryType",
|
|
27
|
-
statusField: "bureauStatus",
|
|
28
|
-
statuses: ["returned", "acknowledged", "correction_required"],
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
family: "credit_bureau",
|
|
32
|
-
checkKind: "commercial_inquiry",
|
|
33
|
-
kindField: "inquiryType",
|
|
34
|
-
statusField: "bureauStatus",
|
|
35
|
-
statuses: ["returned", "acknowledged", "correction_required"],
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
family: "credit_bureau",
|
|
39
|
-
checkKind: "facility_report",
|
|
40
|
-
kindField: "inquiryType",
|
|
41
|
-
statusField: "bureauStatus",
|
|
42
|
-
statuses: ["returned", "acknowledged", "correction_required"],
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
family: "sanctions_screening",
|
|
46
|
-
checkKind: "screen",
|
|
47
|
-
kindField: "checkKind",
|
|
48
|
-
statusField: "screeningStatus",
|
|
49
|
-
statuses: ["clear", "hit", "manual_review"],
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
family: "enforcement_instrument",
|
|
53
|
-
checkKind: "note_request",
|
|
54
|
-
statusField: "requestStatus",
|
|
55
|
-
statuses: ["debtor_approved", "debtor_rejected", "auto_cancelled"],
|
|
56
|
-
},
|
|
57
|
-
];
|
|
58
|
-
/** Returns the tenant-gateable evidence profile for one family and check. */
|
|
59
|
-
export function udlCheckEvidenceProfile(family, checkKind) {
|
|
60
|
-
return udlCheckEvidenceProfiles.find((profile) => profile.family === family && profile.checkKind === checkKind);
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=check-profiles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"check-profiles.js","sourceRoot":"","sources":["../src/check-profiles.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC;QACE,MAAM,EAAE,mBAAmB;QAC3B,SAAS,EAAE,uBAAuB;QAClC,SAAS,EAAE,WAAW;QACtB,WAAW,EAAE,oBAAoB;QACjC,QAAQ,EAAE;YACR,WAAW;YACX,SAAS;YACT,WAAW;YACX,UAAU;YACV,SAAS;YACT,OAAO;SACR;KACF;IACD;QACE,MAAM,EAAE,mBAAmB;QAC3B,SAAS,EAAE,gCAAgC;QAC3C,SAAS,EAAE,WAAW;QACtB,WAAW,EAAE,aAAa;QAC1B,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;KAChC;IACD;QACE,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,kBAAkB;QAC7B,SAAS,EAAE,aAAa;QACxB,WAAW,EAAE,cAAc;QAC3B,QAAQ,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,qBAAqB,CAAC;KAC9D;IACD;QACE,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,oBAAoB;QAC/B,SAAS,EAAE,aAAa;QACxB,WAAW,EAAE,cAAc;QAC3B,QAAQ,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,qBAAqB,CAAC;KAC9D;IACD;QACE,MAAM,EAAE,eAAe;QACvB,SAAS,EAAE,iBAAiB;QAC5B,SAAS,EAAE,aAAa;QACxB,WAAW,EAAE,cAAc;QAC3B,QAAQ,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,qBAAqB,CAAC;KAC9D;IACD;QACE,MAAM,EAAE,qBAAqB;QAC7B,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,WAAW;QACtB,WAAW,EAAE,iBAAiB;QAC9B,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC;KAC5C;IACD;QACE,MAAM,EAAE,wBAAwB;QAChC,SAAS,EAAE,cAAc;QACzB,WAAW,EAAE,eAAe;QAC5B,QAAQ,EAAE,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;KACnE;CACoD,CAAC;AAExD,6EAA6E;AAC7E,MAAM,UAAU,uBAAuB,CACrC,MAAc,EACd,SAAiB;IAEjB,OAAO,wBAAwB,CAAC,IAAI,CAClC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,CAC1E,CAAC;AACJ,CAAC"}
|
package/dist/cli.d.ts
DELETED
package/dist/cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* The `udl` command. Actions over the same library the compiler uses:
|
|
4
|
-
* `validate` answers whether a document is admissible, `fmt` writes the
|
|
5
|
-
* canonical bytes, and `diff` answers whether a change is legal against a
|
|
6
|
-
* document that already has live instances.
|
|
7
|
-
*/
|
|
8
|
-
import { readFile, writeFile } from "node:fs/promises";
|
|
9
|
-
import { canonicalizeUdl, canonicalDigest, diffValidatedUdlEvolution, parseUdl, UdlError, udlDiagnostic, } from "./index.js";
|
|
10
|
-
const USAGE = `udl - the Universal Domain Language toolchain
|
|
11
|
-
|
|
12
|
-
usage:
|
|
13
|
-
udl validate <file> parse <file> and report every issue found
|
|
14
|
-
udl fmt <file> [--write] print the canonical form, or rewrite the file
|
|
15
|
-
udl canon <file> [--digest] print canonical bytes, or their SHA-256 digest
|
|
16
|
-
udl diff <live> <next> check <next> against the append-only law
|
|
17
|
-
udl explain UDL#### explain one stable diagnostic code
|
|
18
|
-
udl help print this
|
|
19
|
-
|
|
20
|
-
exit codes:
|
|
21
|
-
0 the document is admissible, or the change is additive
|
|
22
|
-
1 the document was refused, or the change breaks the append-only law
|
|
23
|
-
2 the command line was wrong, or a file could not be read`;
|
|
24
|
-
async function main(argv) {
|
|
25
|
-
const [command, ...rest] = argv;
|
|
26
|
-
switch (command) {
|
|
27
|
-
case "help":
|
|
28
|
-
case "-h":
|
|
29
|
-
case "--help":
|
|
30
|
-
console.log(USAGE);
|
|
31
|
-
return 0;
|
|
32
|
-
case "validate":
|
|
33
|
-
return validateCommand(rest);
|
|
34
|
-
case "fmt":
|
|
35
|
-
return formatCommand(rest);
|
|
36
|
-
case "canon":
|
|
37
|
-
return canonCommand(rest);
|
|
38
|
-
case "diff":
|
|
39
|
-
return diffCommand(rest);
|
|
40
|
-
case "explain":
|
|
41
|
-
return explainCommand(rest);
|
|
42
|
-
case undefined:
|
|
43
|
-
return usageError("udl: no command given");
|
|
44
|
-
default:
|
|
45
|
-
return usageError(`udl: unknown command ${command}`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
async function canonCommand(args) {
|
|
49
|
-
const digest = args.includes("--digest");
|
|
50
|
-
const [file, ...extra] = args.filter((argument) => argument !== "--digest");
|
|
51
|
-
if (file === undefined || extra.length > 0) {
|
|
52
|
-
return usageError("usage: udl canon <file> [--digest]");
|
|
53
|
-
}
|
|
54
|
-
const bytes = await readDocument(file);
|
|
55
|
-
if (bytes === null)
|
|
56
|
-
return 2;
|
|
57
|
-
let document;
|
|
58
|
-
try {
|
|
59
|
-
document = parseUdl(bytes);
|
|
60
|
-
}
|
|
61
|
-
catch (error) {
|
|
62
|
-
return reportIssues(file, error);
|
|
63
|
-
}
|
|
64
|
-
if (digest)
|
|
65
|
-
console.log(await canonicalDigest(document));
|
|
66
|
-
else
|
|
67
|
-
process.stdout.write(canonicalizeUdl(bytes));
|
|
68
|
-
return 0;
|
|
69
|
-
}
|
|
70
|
-
function explainCommand(args) {
|
|
71
|
-
const [code, ...extra] = args;
|
|
72
|
-
if (code === undefined || extra.length > 0) {
|
|
73
|
-
return usageError("usage: udl explain UDL####");
|
|
74
|
-
}
|
|
75
|
-
const diagnostic = udlDiagnostic(code);
|
|
76
|
-
if (!diagnostic) {
|
|
77
|
-
return usageError(`udl: unknown diagnostic code ${code}`);
|
|
78
|
-
}
|
|
79
|
-
console.log(`${code} ${diagnostic.title}`);
|
|
80
|
-
console.log(`category: ${diagnostic.category}`);
|
|
81
|
-
console.log(`family: ${diagnostic.family}`);
|
|
82
|
-
console.log(`fix: ${diagnostic.fix}`);
|
|
83
|
-
return 0;
|
|
84
|
-
}
|
|
85
|
-
async function validateCommand(args) {
|
|
86
|
-
const [file, ...extra] = args;
|
|
87
|
-
if (file === undefined || extra.length > 0) {
|
|
88
|
-
return usageError("usage: udl validate <file>");
|
|
89
|
-
}
|
|
90
|
-
const bytes = await readDocument(file);
|
|
91
|
-
if (bytes === null)
|
|
92
|
-
return 2;
|
|
93
|
-
if (parseDocument(file, bytes) === null)
|
|
94
|
-
return 1;
|
|
95
|
-
console.log(`${file}: ok`);
|
|
96
|
-
return 0;
|
|
97
|
-
}
|
|
98
|
-
async function formatCommand(args) {
|
|
99
|
-
const write = args.includes("--write");
|
|
100
|
-
const [file, ...extra] = args.filter((argument) => argument !== "--write");
|
|
101
|
-
if (file === undefined || extra.length > 0) {
|
|
102
|
-
return usageError("usage: udl fmt <file> [--write]");
|
|
103
|
-
}
|
|
104
|
-
const bytes = await readDocument(file);
|
|
105
|
-
if (bytes === null)
|
|
106
|
-
return 2;
|
|
107
|
-
let canonical;
|
|
108
|
-
try {
|
|
109
|
-
canonical = canonicalizeUdl(bytes);
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
return reportIssues(file, error);
|
|
113
|
-
}
|
|
114
|
-
if (!write) {
|
|
115
|
-
process.stdout.write(canonical);
|
|
116
|
-
return 0;
|
|
117
|
-
}
|
|
118
|
-
// The bytes decoded cleanly already: canonicalizeUdl refuses anything else.
|
|
119
|
-
if (new TextDecoder().decode(bytes) === canonical)
|
|
120
|
-
return 0;
|
|
121
|
-
await writeFile(file, canonical);
|
|
122
|
-
console.log(`${file}: formatted`);
|
|
123
|
-
return 0;
|
|
124
|
-
}
|
|
125
|
-
async function diffCommand(args) {
|
|
126
|
-
const [livePath, nextPath, ...extra] = args;
|
|
127
|
-
if (livePath === undefined || nextPath === undefined || extra.length > 0) {
|
|
128
|
-
return usageError("usage: udl diff <live> <next>");
|
|
129
|
-
}
|
|
130
|
-
const liveBytes = await readDocument(livePath);
|
|
131
|
-
const nextBytes = await readDocument(nextPath);
|
|
132
|
-
if (liveBytes === null || nextBytes === null)
|
|
133
|
-
return 2;
|
|
134
|
-
const live = parseDocument(livePath, liveBytes);
|
|
135
|
-
const next = parseDocument(nextPath, nextBytes);
|
|
136
|
-
if (live === null || next === null)
|
|
137
|
-
return 1;
|
|
138
|
-
// `parseDocument` already validated both, so take the door that does not
|
|
139
|
-
// validate a second time.
|
|
140
|
-
const violations = diffValidatedUdlEvolution(live, next);
|
|
141
|
-
if (violations.length === 0) {
|
|
142
|
-
console.log(`${nextPath}: additive`);
|
|
143
|
-
return 0;
|
|
144
|
-
}
|
|
145
|
-
for (const violation of violations) {
|
|
146
|
-
console.error(`${nextPath}: ${violation.code} ${violation.path}: ${violation.message}`);
|
|
147
|
-
}
|
|
148
|
-
return 1;
|
|
149
|
-
}
|
|
150
|
-
async function readDocument(file) {
|
|
151
|
-
try {
|
|
152
|
-
return await readFile(file);
|
|
153
|
-
}
|
|
154
|
-
catch (error) {
|
|
155
|
-
const reason = error instanceof Error ? error.message : String(error);
|
|
156
|
-
console.error(`udl: cannot read ${file}: ${reason}`);
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
/** Parses one document, printing its issues. Null means the document was refused. */
|
|
161
|
-
function parseDocument(file, bytes) {
|
|
162
|
-
try {
|
|
163
|
-
return parseUdl(bytes);
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
reportIssues(file, error);
|
|
167
|
-
return null;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
function reportIssues(file, error) {
|
|
171
|
-
if (!(error instanceof UdlError))
|
|
172
|
-
throw error;
|
|
173
|
-
for (const issue of error.issues) {
|
|
174
|
-
console.error(`${file}: ${issue.code} ${issue.path}: ${issue.message}`);
|
|
175
|
-
}
|
|
176
|
-
return 1;
|
|
177
|
-
}
|
|
178
|
-
function usageError(message) {
|
|
179
|
-
console.error(message);
|
|
180
|
-
console.error(USAGE);
|
|
181
|
-
return 2;
|
|
182
|
-
}
|
|
183
|
-
process.exitCode = await main(process.argv.slice(2));
|
|
184
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/effects.d.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
export declare const udlEffectKinds: readonly ["decides", "holds", "moves", "notifies", "reads", "schedules"];
|
|
2
|
-
export type UdlEffectKind = (typeof udlEffectKinds)[number];
|
|
3
|
-
type EffectDescriptor = {
|
|
4
|
-
readonly kind: UdlEffectKind;
|
|
5
|
-
readonly per: "clause" | "element";
|
|
6
|
-
readonly signature: {
|
|
7
|
-
readonly fixed: string;
|
|
8
|
-
} | {
|
|
9
|
-
readonly fromField: string;
|
|
10
|
-
} | {
|
|
11
|
-
readonly movementClass: true;
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
type ActionClauseDescriptor = {
|
|
15
|
-
readonly effects?: readonly EffectDescriptor[];
|
|
16
|
-
readonly scope: "action" | "instrument";
|
|
17
|
-
readonly target: string;
|
|
18
|
-
};
|
|
19
|
-
type EffectRow = {
|
|
20
|
-
readonly channel?: string;
|
|
21
|
-
readonly role?: string;
|
|
22
|
-
readonly signature: string;
|
|
23
|
-
readonly source: string;
|
|
24
|
-
};
|
|
25
|
-
export type DerivedUdlEffects = Partial<Readonly<Record<UdlEffectKind, readonly EffectRow[]>>>;
|
|
26
|
-
export type UdlMovementClass = "collection.pay_in" | "deposit.attributed" | "payout.external" | "transfer.internal";
|
|
27
|
-
interface Movement {
|
|
28
|
-
readonly bind?: Readonly<Record<string, unknown>>;
|
|
29
|
-
readonly operation: string;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Maps a UDL money operation to the meter and pricing class that owns it.
|
|
33
|
-
* Internal-transfer endpoint bindings are product accounts by construction.
|
|
34
|
-
* External collection, deposit, and payout operations carry their role in the
|
|
35
|
-
* operation family because their remote endpoint is not a UDL account binding.
|
|
36
|
-
*/
|
|
37
|
-
export declare function movementClass(move: Movement): UdlMovementClass;
|
|
38
|
-
/** Derive the ABI effect rows declared by the action-clause vocabulary. */
|
|
39
|
-
export declare function deriveUdlActionEffects(action: Readonly<Record<string, unknown>>, vocabulary: readonly ActionClauseDescriptor[]): DerivedUdlEffects;
|
|
40
|
-
export {};
|
|
41
|
-
//# sourceMappingURL=effects.d.ts.map
|
package/dist/effects.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../src/effects.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,0EAOjB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,KAAK,gBAAgB,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,SAAS,EACd;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAC1B;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAC9B;QAAE,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAA;KAAE,CAAC;CACtC,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,YAAY,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,OAAO,CACrC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,SAAS,EAAE,CAAC,CAAC,CACtD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,mBAAmB,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,mBAAmB,CAAC;AAExB,UAAU,QAAQ;IAChB,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AASD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,CAsB9D;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,UAAU,EAAE,SAAS,sBAAsB,EAAE,GAC5C,iBAAiB,CAqCnB"}
|
package/dist/effects.js
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
export const udlEffectKinds = [
|
|
2
|
-
"decides",
|
|
3
|
-
"holds",
|
|
4
|
-
"moves",
|
|
5
|
-
"notifies",
|
|
6
|
-
"reads",
|
|
7
|
-
"schedules",
|
|
8
|
-
];
|
|
9
|
-
function boundPath(move, endpoint) {
|
|
10
|
-
const binding = move.bind?.[endpoint];
|
|
11
|
-
if (binding === null || typeof binding !== "object")
|
|
12
|
-
return undefined;
|
|
13
|
-
const path = binding.path;
|
|
14
|
-
return typeof path === "string" ? path : undefined;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Maps a UDL money operation to the meter and pricing class that owns it.
|
|
18
|
-
* Internal-transfer endpoint bindings are product accounts by construction.
|
|
19
|
-
* External collection, deposit, and payout operations carry their role in the
|
|
20
|
-
* operation family because their remote endpoint is not a UDL account binding.
|
|
21
|
-
*/
|
|
22
|
-
export function movementClass(move) {
|
|
23
|
-
if (move.operation.startsWith("internal_transfer.")) {
|
|
24
|
-
const source = boundPath(move, "sourceAccountId");
|
|
25
|
-
const destination = boundPath(move, "destinationAccountId");
|
|
26
|
-
if (source?.startsWith("fields.") &&
|
|
27
|
-
destination === "refs.escrowAccountId") {
|
|
28
|
-
return "collection.pay_in";
|
|
29
|
-
}
|
|
30
|
-
return "transfer.internal";
|
|
31
|
-
}
|
|
32
|
-
if (move.operation.startsWith("collection.pay_in.")) {
|
|
33
|
-
return "collection.pay_in";
|
|
34
|
-
}
|
|
35
|
-
if (move.operation.startsWith("deposit.")) {
|
|
36
|
-
return "deposit.attributed";
|
|
37
|
-
}
|
|
38
|
-
if (move.operation.startsWith("payout.")) {
|
|
39
|
-
return "payout.external";
|
|
40
|
-
}
|
|
41
|
-
throw new Error(`cannot classify UDL movement operation ${move.operation}`);
|
|
42
|
-
}
|
|
43
|
-
/** Derive the ABI effect rows declared by the action-clause vocabulary. */
|
|
44
|
-
export function deriveUdlActionEffects(action, vocabulary) {
|
|
45
|
-
const effects = {};
|
|
46
|
-
for (const clause of vocabulary) {
|
|
47
|
-
if (clause.scope !== "action" || !clause.effects)
|
|
48
|
-
continue;
|
|
49
|
-
const value = actionClauseValue(action, clause.target);
|
|
50
|
-
if (value === undefined)
|
|
51
|
-
continue;
|
|
52
|
-
for (const descriptor of clause.effects) {
|
|
53
|
-
const values = descriptor.per === "element" && Array.isArray(value) ? value : [value];
|
|
54
|
-
for (const [index, candidate] of values.entries()) {
|
|
55
|
-
const object = recordValue(candidate);
|
|
56
|
-
if (descriptor.kind === "holds" &&
|
|
57
|
-
"fixed" in descriptor.signature &&
|
|
58
|
-
descriptor.signature.fixed === "reserve" &&
|
|
59
|
-
object?.operation !== "internal_transfer.reserve") {
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
const suffix = effectSignatureSuffix(descriptor, object);
|
|
63
|
-
if (!suffix)
|
|
64
|
-
continue;
|
|
65
|
-
(effects[descriptor.kind] ??= []).push({
|
|
66
|
-
signature: `${descriptor.kind}.${suffix}`,
|
|
67
|
-
source: descriptor.per === "element"
|
|
68
|
-
? `${clause.target}[${index}]`
|
|
69
|
-
: clause.target,
|
|
70
|
-
...(descriptor.kind === "notifies" &&
|
|
71
|
-
typeof object?.channel === "string" &&
|
|
72
|
-
typeof object.role === "string"
|
|
73
|
-
? { channel: object.channel, role: object.role }
|
|
74
|
-
: {}),
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
return effects;
|
|
80
|
-
}
|
|
81
|
-
function actionClauseValue(action, target) {
|
|
82
|
-
const [head, tail] = target.split(".");
|
|
83
|
-
if (!head)
|
|
84
|
-
return undefined;
|
|
85
|
-
const value = action[head];
|
|
86
|
-
if (!tail)
|
|
87
|
-
return value;
|
|
88
|
-
return recordValue(value)?.[tail];
|
|
89
|
-
}
|
|
90
|
-
function effectSignatureSuffix(descriptor, value) {
|
|
91
|
-
if ("fixed" in descriptor.signature)
|
|
92
|
-
return descriptor.signature.fixed;
|
|
93
|
-
if ("fromField" in descriptor.signature) {
|
|
94
|
-
const field = value?.[descriptor.signature.fromField];
|
|
95
|
-
return typeof field === "string" ? field : undefined;
|
|
96
|
-
}
|
|
97
|
-
if (!value || !("movementClass" in descriptor.signature))
|
|
98
|
-
return undefined;
|
|
99
|
-
const operation = value.operation;
|
|
100
|
-
const bind = recordValue(value.bind);
|
|
101
|
-
return typeof operation === "string"
|
|
102
|
-
? movementClass({ ...(bind ? { bind } : {}), operation })
|
|
103
|
-
: undefined;
|
|
104
|
-
}
|
|
105
|
-
function recordValue(value) {
|
|
106
|
-
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
107
|
-
? value
|
|
108
|
-
: undefined;
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=effects.js.map
|
package/dist/effects.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effects.js","sourceRoot":"","sources":["../src/effects.ts"],"names":[],"mappings":"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"}
|