@clossys/launcher 0.3.1 → 0.5.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 +1373 -60
- package/contracts/conversation-contract.md +2 -2
- package/contracts/product-ci-workflow.yml +74 -0
- package/contracts/repository-inventory.json +53 -0
- package/dist/admission-fixture.d.ts +168 -0
- package/dist/admission-fixture.d.ts.map +1 -0
- package/dist/admission-fixture.js +467 -0
- package/dist/admission-fixture.js.map +1 -0
- package/dist/admission.d.ts +124 -0
- package/dist/admission.d.ts.map +1 -0
- package/dist/admission.js +804 -0
- package/dist/admission.js.map +1 -0
- package/dist/agents-guide.d.ts +9 -0
- package/dist/agents-guide.d.ts.map +1 -0
- package/dist/agents-guide.js +26 -0
- package/dist/agents-guide.js.map +1 -0
- package/dist/apply-command-options.check.d.ts +12 -0
- package/dist/apply-command-options.check.d.ts.map +1 -0
- package/dist/apply-command-options.check.js +20 -0
- package/dist/apply-command-options.check.js.map +1 -0
- package/dist/apply-plan-cli.d.ts +39 -1
- package/dist/apply-plan-cli.d.ts.map +1 -1
- package/dist/apply-plan-cli.js +432 -15
- package/dist/apply-plan-cli.js.map +1 -1
- package/dist/apply-plan.d.ts +46 -59
- package/dist/apply-plan.d.ts.map +1 -1
- package/dist/apply-plan.js +112 -97
- package/dist/apply-plan.js.map +1 -1
- package/dist/apply-step-fixture.d.ts +87 -0
- package/dist/apply-step-fixture.d.ts.map +1 -0
- package/dist/apply-step-fixture.js +199 -0
- package/dist/apply-step-fixture.js.map +1 -0
- package/dist/apply-store.d.ts +93 -0
- package/dist/apply-store.d.ts.map +1 -0
- package/dist/apply-store.js +625 -0
- package/dist/apply-store.js.map +1 -0
- package/dist/approval-sheet.d.ts +21 -0
- package/dist/approval-sheet.d.ts.map +1 -0
- package/dist/approval-sheet.js +163 -0
- package/dist/approval-sheet.js.map +1 -0
- package/dist/body-command.d.ts +42 -0
- package/dist/body-command.d.ts.map +1 -0
- package/dist/body-command.js +143 -0
- package/dist/body-command.js.map +1 -0
- package/dist/change-set-contract.d.ts +403 -0
- package/dist/change-set-contract.d.ts.map +1 -0
- package/dist/change-set-contract.js +781 -0
- package/dist/change-set-contract.js.map +1 -0
- package/dist/change-set-digest.d.ts +28 -0
- package/dist/change-set-digest.d.ts.map +1 -0
- package/dist/change-set-digest.js +65 -0
- package/dist/change-set-digest.js.map +1 -0
- package/dist/check-cli.d.ts.map +1 -1
- package/dist/check-cli.js +14 -3
- package/dist/check-cli.js.map +1 -1
- package/dist/cli.d.ts +17 -6
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +84 -23
- package/dist/cli.js.map +1 -1
- package/dist/core.d.ts +79 -22
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +843 -268
- package/dist/core.js.map +1 -1
- package/dist/dry-materialize.d.ts +63 -0
- package/dist/dry-materialize.d.ts.map +1 -0
- package/dist/dry-materialize.js +330 -0
- package/dist/dry-materialize.js.map +1 -0
- package/dist/existing-declaration-adoption.check.d.ts +2 -0
- package/dist/existing-declaration-adoption.check.d.ts.map +1 -0
- package/dist/existing-declaration-adoption.check.js +10 -0
- package/dist/existing-declaration-adoption.check.js.map +1 -0
- package/dist/generated/contract-schema.generated.d.ts +97 -0
- package/dist/generated/contract-schema.generated.d.ts.map +1 -0
- package/dist/generated/contract-schema.generated.js +496 -0
- package/dist/generated/contract-schema.generated.js.map +1 -0
- package/dist/generated/package-scope.generated.d.ts +6 -0
- package/dist/generated/package-scope.generated.d.ts.map +1 -0
- package/dist/generated/package-scope.generated.js +10 -0
- package/dist/generated/package-scope.generated.js.map +1 -0
- package/dist/generated/plan-contracts.generated.d.ts +3 -0
- package/dist/generated/plan-contracts.generated.d.ts.map +1 -0
- package/dist/generated/plan-contracts.generated.js +3101 -0
- package/dist/generated/plan-contracts.generated.js.map +1 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +11 -0
- package/dist/host.js.map +1 -1
- package/dist/identity.d.ts +15 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +48 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +35 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -2
- package/dist/index.js.map +1 -1
- package/dist/inventory-adoption.d.ts +24 -5
- package/dist/inventory-adoption.d.ts.map +1 -1
- package/dist/inventory-adoption.js +70 -25
- package/dist/inventory-adoption.js.map +1 -1
- package/dist/inventory-choice.d.ts +40 -0
- package/dist/inventory-choice.d.ts.map +1 -0
- package/dist/inventory-choice.js +156 -0
- package/dist/inventory-choice.js.map +1 -0
- package/dist/inventory-contract.d.ts +89 -0
- package/dist/inventory-contract.d.ts.map +1 -0
- package/dist/inventory-contract.js +121 -0
- package/dist/inventory-contract.js.map +1 -0
- package/dist/key-editor.d.ts +30 -0
- package/dist/key-editor.d.ts.map +1 -0
- package/dist/key-editor.js +445 -0
- package/dist/key-editor.js.map +1 -0
- package/dist/ledger-contract.d.ts +190 -0
- package/dist/ledger-contract.d.ts.map +1 -0
- package/dist/ledger-contract.js +555 -0
- package/dist/ledger-contract.js.map +1 -0
- package/dist/ledger-trust.d.ts +90 -0
- package/dist/ledger-trust.d.ts.map +1 -0
- package/dist/ledger-trust.js +203 -0
- package/dist/ledger-trust.js.map +1 -0
- package/dist/lockfile-invariants.d.ts +48 -0
- package/dist/lockfile-invariants.d.ts.map +1 -0
- package/dist/lockfile-invariants.js +375 -0
- package/dist/lockfile-invariants.js.map +1 -0
- package/dist/lockfile-readers.d.ts +72 -0
- package/dist/lockfile-readers.d.ts.map +1 -0
- package/dist/lockfile-readers.js +713 -0
- package/dist/lockfile-readers.js.map +1 -0
- package/dist/lockfile-regen.d.ts +106 -0
- package/dist/lockfile-regen.d.ts.map +1 -0
- package/dist/lockfile-regen.js +760 -0
- package/dist/lockfile-regen.js.map +1 -0
- package/dist/lockfile-tool-env.d.ts +29 -0
- package/dist/lockfile-tool-env.d.ts.map +1 -0
- package/dist/lockfile-tool-env.js +111 -0
- package/dist/lockfile-tool-env.js.map +1 -0
- package/dist/materialize.d.ts +113 -0
- package/dist/materialize.d.ts.map +1 -0
- package/dist/materialize.js +881 -0
- package/dist/materialize.js.map +1 -0
- package/dist/observe-repository.d.ts +90 -0
- package/dist/observe-repository.d.ts.map +1 -0
- package/dist/observe-repository.js +1367 -0
- package/dist/observe-repository.js.map +1 -0
- package/dist/plan-bundle-setup-fixture.d.ts +68 -0
- package/dist/plan-bundle-setup-fixture.d.ts.map +1 -0
- package/dist/plan-bundle-setup-fixture.js +167 -0
- package/dist/plan-bundle-setup-fixture.js.map +1 -0
- package/dist/plan-bundle.d.ts +256 -0
- package/dist/plan-bundle.d.ts.map +1 -0
- package/dist/plan-bundle.js +882 -0
- package/dist/plan-bundle.js.map +1 -0
- package/dist/plan-command.d.ts +29 -0
- package/dist/plan-command.d.ts.map +1 -0
- package/dist/plan-command.js +523 -0
- package/dist/plan-command.js.map +1 -0
- package/dist/plan-contract.d.ts +153 -0
- package/dist/plan-contract.d.ts.map +1 -0
- package/dist/plan-contract.js +61 -0
- package/dist/plan-contract.js.map +1 -0
- package/dist/plan-digest.d.ts +25 -0
- package/dist/plan-digest.d.ts.map +1 -0
- package/dist/plan-digest.js +106 -0
- package/dist/plan-digest.js.map +1 -0
- package/dist/plan-rules.d.ts +23 -0
- package/dist/plan-rules.d.ts.map +1 -0
- package/dist/plan-rules.js +177 -0
- package/dist/plan-rules.js.map +1 -0
- package/dist/planned-bundle.d.ts +20 -0
- package/dist/planned-bundle.d.ts.map +1 -0
- package/dist/planned-bundle.js +191 -0
- package/dist/planned-bundle.js.map +1 -0
- package/dist/product-repository.d.ts +4 -0
- package/dist/product-repository.d.ts.map +1 -1
- package/dist/product-repository.js +9 -1
- package/dist/product-repository.js.map +1 -1
- package/dist/provenance-gate.d.ts +48 -0
- package/dist/provenance-gate.d.ts.map +1 -0
- package/dist/provenance-gate.js +324 -0
- package/dist/provenance-gate.js.map +1 -0
- package/dist/pull-request-body.d.ts +45 -0
- package/dist/pull-request-body.d.ts.map +1 -0
- package/dist/pull-request-body.js +232 -0
- package/dist/pull-request-body.js.map +1 -0
- package/dist/registry-snapshot.d.ts +141 -0
- package/dist/registry-snapshot.d.ts.map +1 -0
- package/dist/registry-snapshot.js +483 -0
- package/dist/registry-snapshot.js.map +1 -0
- package/dist/release-age-edit.d.ts +52 -0
- package/dist/release-age-edit.d.ts.map +1 -0
- package/dist/release-age-edit.js +413 -0
- package/dist/release-age-edit.js.map +1 -0
- package/dist/root-entries.d.ts +36 -0
- package/dist/root-entries.d.ts.map +1 -0
- package/dist/root-entries.js +80 -0
- package/dist/root-entries.js.map +1 -0
- package/dist/setup-template-scripts.d.ts +36 -0
- package/dist/setup-template-scripts.d.ts.map +1 -0
- package/dist/setup-template-scripts.js +568 -0
- package/dist/setup-template-scripts.js.map +1 -0
- package/dist/setup-templates.d.ts +55 -0
- package/dist/setup-templates.d.ts.map +1 -0
- package/dist/setup-templates.js +438 -0
- package/dist/setup-templates.js.map +1 -0
- package/dist/skills.d.ts +34 -1
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +129 -17
- package/dist/skills.js.map +1 -1
- package/dist/status.d.ts +63 -0
- package/dist/status.d.ts.map +1 -0
- package/dist/status.js +539 -0
- package/dist/status.js.map +1 -0
- package/dist/types.d.ts +151 -13
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/skeleton/README.md +14 -9
- package/skeleton/package.json +2 -1
- package/skill/SKILL.md +23 -7
- package/skill-catalogue/advisor/SKILL.md +59 -6
- package/skill-catalogue/architect/SKILL.md +2 -2
- package/skill-catalogue/bouncer/SKILL.md +2 -2
- package/skill-catalogue/builder/SKILL.md +2 -2
- package/skill-catalogue/butler/SKILL.md +2 -2
- package/skill-catalogue/controller/SKILL.md +2 -2
- package/skill-catalogue/customer/SKILL.md +2 -2
- package/skill-catalogue/designer/SKILL.md +4 -2
- package/skill-catalogue/giver/SKILL.md +2 -2
- package/skill-catalogue/influencer/SKILL.md +2 -2
- package/skill-catalogue/inspector/SKILL.md +2 -2
- package/skill-catalogue/integrator/SKILL.md +2 -2
- package/skill-catalogue/keeper/SKILL.md +2 -2
- package/skill-catalogue/launcher/SKILL.md +23 -7
- package/skill-catalogue/locksmith/SKILL.md +2 -2
- package/skill-catalogue/messenger/SKILL.md +2 -2
- package/skill-catalogue/observer/SKILL.md +2 -2
- package/skill-catalogue/publisher/SKILL.md +2 -2
- package/skill-catalogue/starter/SKILL.md +3 -2
- package/skill-catalogue/strategist/SKILL.md +12 -4
- package/skill-catalogue/writer/SKILL.md +2 -2
- package/src/admission-fixture.ts +585 -0
- package/src/admission.ts +819 -0
- package/src/agents-guide.ts +29 -0
- package/src/apply-command-options.check.ts +27 -0
- package/src/apply-plan-cli.ts +454 -14
- package/src/apply-plan.ts +112 -124
- package/src/apply-step-fixture.ts +236 -0
- package/src/apply-store.ts +584 -0
- package/src/approval-sheet.ts +170 -0
- package/src/body-command.ts +162 -0
- package/src/change-set-contract.ts +987 -0
- package/src/change-set-digest.ts +70 -0
- package/src/check-cli.ts +14 -3
- package/src/cli.ts +90 -22
- package/src/core.ts +973 -275
- package/src/dry-materialize.ts +353 -0
- package/src/existing-declaration-adoption.check.ts +12 -0
- package/src/generated/contract-schema.generated.ts +520 -0
- package/src/generated/package-scope.generated.ts +10 -0
- package/src/generated/plan-contracts.generated.ts +3101 -0
- package/src/host.ts +10 -0
- package/src/identity.ts +51 -0
- package/src/index.ts +74 -3
- package/src/inventory-adoption.ts +107 -29
- package/src/inventory-choice.ts +172 -0
- package/src/inventory-contract.ts +166 -0
- package/src/key-editor.ts +446 -0
- package/src/ledger-contract.ts +660 -0
- package/src/ledger-trust.ts +272 -0
- package/src/lockfile-invariants.ts +421 -0
- package/src/lockfile-readers.ts +749 -0
- package/src/lockfile-regen.ts +851 -0
- package/src/lockfile-tool-env.ts +131 -0
- package/src/materialize.ts +915 -0
- package/src/observe-repository.ts +1365 -0
- package/src/plan-bundle-setup-fixture.ts +200 -0
- package/src/plan-bundle.ts +1014 -0
- package/src/plan-command.ts +532 -0
- package/src/plan-contract.ts +179 -0
- package/src/plan-digest.ts +102 -0
- package/src/plan-rules.ts +188 -0
- package/src/planned-bundle.ts +211 -0
- package/src/product-repository.ts +10 -1
- package/src/provenance-gate.ts +352 -0
- package/src/pull-request-body.ts +261 -0
- package/src/registry-snapshot.ts +534 -0
- package/src/release-age-edit.ts +430 -0
- package/src/root-entries.ts +81 -0
- package/src/setup-template-scripts.ts +580 -0
- package/src/setup-templates.ts +479 -0
- package/src/skills.ts +161 -18
- package/src/status.ts +557 -0
- package/src/types.ts +148 -13
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
// AUTO-GENERATED by this package's build-time packer (issue #1475).
|
|
2
|
+
// Do not edit by hand -- edits are overwritten on the next `npm run build`.
|
|
3
|
+
// A byte-identical copy of the contract checker in @clossys/advisor (its
|
|
4
|
+
// source file is not shipped in this package), the one implementation, for a
|
|
5
|
+
// package that has no runtime dependency on @clossys/advisor.
|
|
6
|
+
const ANNOTATIONS = new Set(["$schema", "$id", "title", "description"]);
|
|
7
|
+
const IMPLEMENTED = new Set([
|
|
8
|
+
"$ref", "type", "const", "enum", "required", "properties", "additionalProperties",
|
|
9
|
+
"items", "minItems", "maxItems", "contains", "minLength", "pattern", "format", "oneOf", "allOf", "not", "definitions",
|
|
10
|
+
]);
|
|
11
|
+
/**
|
|
12
|
+
* The `format` values this checker asserts (JSON Schema leaves `format`
|
|
13
|
+
* optional to assert; these contracts require it). Both are ISO 8601 as
|
|
14
|
+
* RFC 3339 profiles it, checked field by field rather than by shape alone:
|
|
15
|
+
*
|
|
16
|
+
* - `date`: `YYYY-MM-DD`, with month 01-12 and a day that exists in that
|
|
17
|
+
* month of that year (leap years included, so `2028-02-29` is a date and
|
|
18
|
+
* `2026-02-29` is not).
|
|
19
|
+
* - `date-time`: a `date`, then `T`, then `hh:mm` with optional `:ss` and
|
|
20
|
+
* fraction, then `Z` or `+hh:mm` / `-hh:mm`; hours 00-23, minutes 00-59,
|
|
21
|
+
* seconds 00-59 (no leap second), offset hours 00-23 and offset minutes
|
|
22
|
+
* 00-59.
|
|
23
|
+
*
|
|
24
|
+
* Either must also give a finite `Date.parse`, so a time that validates can
|
|
25
|
+
* always be ordered.
|
|
26
|
+
*/
|
|
27
|
+
const FORMATS = new Set(["date", "date-time"]);
|
|
28
|
+
const DATE_TIME = /^(\d{4})-(\d{2})-(\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.\d+)?)?(?:Z|[+-](\d{2}):(\d{2})))?$/;
|
|
29
|
+
function inRange(text, low, high) {
|
|
30
|
+
if (text === undefined)
|
|
31
|
+
return true;
|
|
32
|
+
const value = Number(text);
|
|
33
|
+
return value >= low && value <= high;
|
|
34
|
+
}
|
|
35
|
+
function daysInMonth(year, month) {
|
|
36
|
+
if (month === 2)
|
|
37
|
+
return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28;
|
|
38
|
+
return [4, 6, 9, 11].includes(month) ? 30 : 31;
|
|
39
|
+
}
|
|
40
|
+
function matchesFormat(format, value) {
|
|
41
|
+
const match = DATE_TIME.exec(value);
|
|
42
|
+
if (match === null)
|
|
43
|
+
return false;
|
|
44
|
+
const [, year, month, day, hour, minute, second, offsetHour, offsetMinute] = match;
|
|
45
|
+
const isDateTime = hour !== undefined;
|
|
46
|
+
if (isDateTime !== (format === "date-time"))
|
|
47
|
+
return false;
|
|
48
|
+
if (!inRange(month, 1, 12))
|
|
49
|
+
return false;
|
|
50
|
+
if (!inRange(day, 1, daysInMonth(Number(year), Number(month))))
|
|
51
|
+
return false;
|
|
52
|
+
if (!inRange(hour, 0, 23) || !inRange(minute, 0, 59) || !inRange(second, 0, 59))
|
|
53
|
+
return false;
|
|
54
|
+
if (!inRange(offsetHour, 0, 23) || !inRange(offsetMinute, 0, 59))
|
|
55
|
+
return false;
|
|
56
|
+
return Number.isFinite(Date.parse(value));
|
|
57
|
+
}
|
|
58
|
+
/** Throws on any keyword, or keyword form, this checker does not implement -- for this node only. */
|
|
59
|
+
function assertImplementedNode(schema, at) {
|
|
60
|
+
for (const key of Object.keys(schema)) {
|
|
61
|
+
if (!ANNOTATIONS.has(key) && !IMPLEMENTED.has(key))
|
|
62
|
+
throw new Error(`contract checker does not implement "${key}" (at ${at})`);
|
|
63
|
+
}
|
|
64
|
+
if (Object.hasOwn(schema, "type") && typeof schema.type !== "string")
|
|
65
|
+
throw new Error(`contract checker implements only a string "type" (at ${at})`);
|
|
66
|
+
if (Object.hasOwn(schema, "additionalProperties") && typeof schema.additionalProperties !== "boolean") {
|
|
67
|
+
throw new Error(`contract checker implements only a boolean "additionalProperties" (at ${at})`);
|
|
68
|
+
}
|
|
69
|
+
if (Object.hasOwn(schema, "items") && Array.isArray(schema.items))
|
|
70
|
+
throw new Error(`contract checker does not implement tuple "items" (at ${at})`);
|
|
71
|
+
if (Object.hasOwn(schema, "format") && !FORMATS.has(schema.format)) {
|
|
72
|
+
throw new Error(`contract checker does not implement format ${JSON.stringify(schema.format)} (at ${at})`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** Walks every subschema of `schema`, visited by a value or not, and throws on the first keyword this checker does not implement. */
|
|
76
|
+
export function assertImplementedContract(schema, at = "#") {
|
|
77
|
+
assertImplementedNode(schema, at);
|
|
78
|
+
for (const key of ["properties", "definitions"]) {
|
|
79
|
+
for (const [name, child] of Object.entries((schema[key] ?? {})))
|
|
80
|
+
assertImplementedContract(child, `${at}/${key}/${name}`);
|
|
81
|
+
}
|
|
82
|
+
for (const key of ["items", "contains", "not"])
|
|
83
|
+
if (Object.hasOwn(schema, key))
|
|
84
|
+
assertImplementedContract(schema[key], `${at}/${key}`);
|
|
85
|
+
for (const key of ["oneOf", "allOf"]) {
|
|
86
|
+
(Array.isArray(schema[key]) ? schema[key] : []).forEach((child, index) => assertImplementedContract(child, `${at}/${key}/${index}`));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/** Whether an array has a hole: an index below its length with no own element. JSON never produces one. */
|
|
90
|
+
function hasHoles(value) {
|
|
91
|
+
for (let index = 0; index < value.length; index += 1)
|
|
92
|
+
if (!Object.hasOwn(value, index))
|
|
93
|
+
return true;
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* The JSON type of a value. An array with holes (`[1, , 3]`, or one whose
|
|
98
|
+
* length was set past its last element) is "sparse array", not "array": code
|
|
99
|
+
* that walks it with forEach skips the holes while an indexed loop reads
|
|
100
|
+
* undefined, so two readers could judge it differently. No JSON text
|
|
101
|
+
* produces one, so a document read from a file is never affected.
|
|
102
|
+
*/
|
|
103
|
+
function typeOf(value) {
|
|
104
|
+
if (value === null)
|
|
105
|
+
return "null";
|
|
106
|
+
if (Array.isArray(value))
|
|
107
|
+
return hasHoles(value) ? "sparse array" : "array";
|
|
108
|
+
if (typeof value === "number")
|
|
109
|
+
return Number.isInteger(value) ? "integer" : "number";
|
|
110
|
+
return typeof value;
|
|
111
|
+
}
|
|
112
|
+
/** With the `u` flag a surrogate pair is one code point, so this matches only a lone surrogate. */
|
|
113
|
+
const LONE_SURROGATE = /[\uD800-\uDFFF]/u;
|
|
114
|
+
const NOT_WELL_FORMED = "must be well-formed Unicode, and contains a lone surrogate";
|
|
115
|
+
/**
|
|
116
|
+
* The path of a field the contract declares: `path.name`, or `path["name"]`
|
|
117
|
+
* for a name that is not identifier-like. `name` is always the contract's
|
|
118
|
+
* own text (a `properties` or `required` entry), never a key read only
|
|
119
|
+
* from the document: an undeclared key never reaches this function.
|
|
120
|
+
*/
|
|
121
|
+
function declaredPath(path, name) {
|
|
122
|
+
if (!/^[A-Za-z_$][A-Za-z0-9_$-]*$/.test(name))
|
|
123
|
+
return `${path}[${JSON.stringify(name)}]`;
|
|
124
|
+
return path === "" ? name : `${path}.${name}`;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Each object's keys in the order the file wrote them, for a value
|
|
128
|
+
* `readContractDocument()` returned. A JavaScript object enumerates
|
|
129
|
+
* array-index keys ("0", "7") first, whatever order they were written in,
|
|
130
|
+
* so without this a key ordinal could differ from the file's.
|
|
131
|
+
*/
|
|
132
|
+
const WRITTEN_KEY_ORDER = new WeakMap();
|
|
133
|
+
/**
|
|
134
|
+
* `record`'s keys in the order the checker visits them, which is also the
|
|
135
|
+
* order their 1-based positions count in: as the file wrote them when
|
|
136
|
+
* `record` came from `readContractDocument()` and still has exactly the keys
|
|
137
|
+
* it was read with, else the object's own key order (JavaScript's, which
|
|
138
|
+
* lists array-index keys such as "7" first). Linear in the number of keys.
|
|
139
|
+
*/
|
|
140
|
+
function keyOrder(record) {
|
|
141
|
+
const own = Object.keys(record);
|
|
142
|
+
const written = WRITTEN_KEY_ORDER.get(record);
|
|
143
|
+
if (written !== undefined && written.length === own.length) {
|
|
144
|
+
const writtenSet = new Set(written);
|
|
145
|
+
if (own.every((key) => writtenSet.has(key)))
|
|
146
|
+
return written;
|
|
147
|
+
}
|
|
148
|
+
return own;
|
|
149
|
+
}
|
|
150
|
+
const TYPE_NOUNS = {
|
|
151
|
+
object: "an object", array: "an array", string: "a string", number: "a number", integer: "an integer", boolean: "a boolean", null: "null",
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* What a value must be, for a type mismatch. A `title` that is already a
|
|
155
|
+
* description ("a string with ...") is used as it is; one that names a
|
|
156
|
+
* document ("Advisor plan") is added after the type: "an object (the
|
|
157
|
+
* Advisor plan)".
|
|
158
|
+
*/
|
|
159
|
+
function describeType(type, title) {
|
|
160
|
+
if (typeof title !== "string")
|
|
161
|
+
return TYPE_NOUNS[type] ?? `of type ${type}`;
|
|
162
|
+
if (/^(a|an) /.test(title))
|
|
163
|
+
return title;
|
|
164
|
+
return `${TYPE_NOUNS[type] ?? `of type ${type}`} (the ${title})`;
|
|
165
|
+
}
|
|
166
|
+
function resolveRef(ref, scope, at) {
|
|
167
|
+
const [file = "", pointer = ""] = ref.split("#");
|
|
168
|
+
const docRoot = file === "" ? scope.root : scope.load(file);
|
|
169
|
+
let target = docRoot;
|
|
170
|
+
for (const segment of pointer.split("/").filter(Boolean)) {
|
|
171
|
+
if (typeof target !== "object" || target === null || !Object.hasOwn(target, segment))
|
|
172
|
+
throw new Error(`unresolvable $ref ${ref} (at ${at})`);
|
|
173
|
+
target = target[segment];
|
|
174
|
+
}
|
|
175
|
+
return { schema: target, scope: { root: docRoot, load: scope.load } };
|
|
176
|
+
}
|
|
177
|
+
/** Follows `$ref` chains to the node that actually carries keywords. */
|
|
178
|
+
function dereference(schema, scope, at) {
|
|
179
|
+
let current = { schema, scope };
|
|
180
|
+
while (typeof current.schema.$ref === "string")
|
|
181
|
+
current = resolveRef(current.schema.$ref, current.scope, at);
|
|
182
|
+
return current;
|
|
183
|
+
}
|
|
184
|
+
/** An undeclared field, by its 1-based position in its object -- never its name. */
|
|
185
|
+
function undeclaredFieldMessage(ordinal) {
|
|
186
|
+
return `has a field the contract does not declare (key ${ordinal} of this object), and unknown fields are refused`;
|
|
187
|
+
}
|
|
188
|
+
function check(input, value, inputScope, path) {
|
|
189
|
+
// Draft-07: $ref replaces every sibling keyword (siblings are annotations only).
|
|
190
|
+
const { schema, scope } = dereference(input, inputScope, path);
|
|
191
|
+
assertImplementedNode(schema, path);
|
|
192
|
+
const kind = typeOf(value);
|
|
193
|
+
const expected = schema.type;
|
|
194
|
+
if (typeof expected === "string" && !(expected === kind || (expected === "number" && kind === "integer"))) {
|
|
195
|
+
return [{ path, message: `must be ${describeType(expected, schema.title)}, got ${kind}` }];
|
|
196
|
+
}
|
|
197
|
+
// A schema node with no `type` still never accepts an array with holes.
|
|
198
|
+
if (kind === "sparse array")
|
|
199
|
+
return [{ path, message: "must not be an array with holes" }];
|
|
200
|
+
const violations = [];
|
|
201
|
+
if (Object.hasOwn(schema, "const") && JSON.stringify(schema.const) !== JSON.stringify(value))
|
|
202
|
+
violations.push({ path, message: `must equal ${JSON.stringify(schema.const)}` });
|
|
203
|
+
if (Array.isArray(schema.enum) && !schema.enum.some((option) => JSON.stringify(option) === JSON.stringify(value))) {
|
|
204
|
+
violations.push({ path, message: `must be one of: ${schema.enum.map((option) => JSON.stringify(option)).join(", ")}` });
|
|
205
|
+
}
|
|
206
|
+
if (typeof value === "string") {
|
|
207
|
+
if (LONE_SURROGATE.test(value))
|
|
208
|
+
violations.push({ path, message: NOT_WELL_FORMED });
|
|
209
|
+
if (typeof schema.minLength === "number" && value.length < schema.minLength)
|
|
210
|
+
violations.push({ path, message: `must be at least ${schema.minLength} character(s) long` });
|
|
211
|
+
if (typeof schema.pattern === "string" && !new RegExp(schema.pattern, "u").test(value)) {
|
|
212
|
+
violations.push({ path, message: typeof schema.title === "string" ? `must be ${schema.title}` : `must match the pattern ${schema.pattern}` });
|
|
213
|
+
}
|
|
214
|
+
if (typeof schema.format === "string" && !matchesFormat(schema.format, value)) {
|
|
215
|
+
violations.push({ path, message: typeof schema.title === "string" ? `must be ${schema.title}` : `must be a valid ${schema.format}` });
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (kind === "array") {
|
|
219
|
+
const items = value;
|
|
220
|
+
if (typeof schema.minItems === "number" && items.length < schema.minItems)
|
|
221
|
+
violations.push({ path, message: `must have at least ${schema.minItems} item(s)` });
|
|
222
|
+
if (typeof schema.maxItems === "number" && items.length > schema.maxItems)
|
|
223
|
+
violations.push({ path, message: `must have at most ${schema.maxItems} item(s)` });
|
|
224
|
+
if (schema.items !== undefined)
|
|
225
|
+
items.forEach((item, index) => violations.push(...check(schema.items, item, scope, `${path}[${index}]`)));
|
|
226
|
+
if (schema.contains !== undefined && !items.some((item, index) => check(schema.contains, item, scope, `${path}[${index}]`).length === 0)) {
|
|
227
|
+
violations.push({ path, message: `must contain an item matching ${JSON.stringify(schema.contains)}` });
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (kind === "object") {
|
|
231
|
+
const record = value;
|
|
232
|
+
const properties = (schema.properties ?? {});
|
|
233
|
+
for (const name of (schema.required ?? [])) {
|
|
234
|
+
if (!Object.hasOwn(record, name))
|
|
235
|
+
violations.push({ path: declaredPath(path, name), message: "is required" });
|
|
236
|
+
}
|
|
237
|
+
keyOrder(record).forEach((name, index) => {
|
|
238
|
+
const child = record[name];
|
|
239
|
+
if (LONE_SURROGATE.test(name)) {
|
|
240
|
+
// The key itself is never echoed (see the header), and this one cannot even be written as UTF-8.
|
|
241
|
+
violations.push({ path, message: `has a key that ${NOT_WELL_FORMED}` });
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (Object.hasOwn(properties, name))
|
|
245
|
+
violations.push(...check(properties[name], child, scope, declaredPath(path, name)));
|
|
246
|
+
// The key is document text, so it is never named: the violation is
|
|
247
|
+
// placed at the object that holds it, with the key's position there.
|
|
248
|
+
else if (schema.additionalProperties === false)
|
|
249
|
+
violations.push({ path, message: undeclaredFieldMessage(index + 1) });
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
if (Array.isArray(schema.oneOf))
|
|
253
|
+
violations.push(...checkOneOf(schema.oneOf, value, scope, path, schema.title));
|
|
254
|
+
if (Array.isArray(schema.allOf))
|
|
255
|
+
for (const branch of schema.allOf)
|
|
256
|
+
violations.push(...check(branch, value, scope, path));
|
|
257
|
+
if (schema.not !== undefined && check(schema.not, value, scope, path).length === 0)
|
|
258
|
+
violations.push({ path, message: `must not match ${JSON.stringify(schema.not)}` });
|
|
259
|
+
return violations;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Exactly one branch must pass. When none does, the violations of the one
|
|
263
|
+
* closest branch are reported -- the branch whose `type` fits the value, or
|
|
264
|
+
* failing that the unique branch with the fewest violations -- so a refusal
|
|
265
|
+
* names the actual field at fault rather than only "no branch matched".
|
|
266
|
+
* When no single branch is closest, the node's own `title` says what the
|
|
267
|
+
* value must be, if it has one.
|
|
268
|
+
*/
|
|
269
|
+
function checkOneOf(branches, value, scope, path, title) {
|
|
270
|
+
const results = branches.map((branch) => check(branch, value, scope, path));
|
|
271
|
+
const passing = results.filter((result) => result.length === 0).length;
|
|
272
|
+
if (passing === 1)
|
|
273
|
+
return [];
|
|
274
|
+
if (passing > 1)
|
|
275
|
+
return [{ path, message: `matches ${passing} of the ${branches.length} allowed forms, and must match exactly one` }];
|
|
276
|
+
const kind = typeOf(value);
|
|
277
|
+
const typed = branches
|
|
278
|
+
.map((branch, index) => ({ index, type: dereference(branch, scope, path).schema.type }))
|
|
279
|
+
.filter((entry) => entry.type === kind || (entry.type === "number" && kind === "integer"));
|
|
280
|
+
if (typed.length === 1)
|
|
281
|
+
return results[typed[0].index];
|
|
282
|
+
const fewest = Math.min(...results.map((result) => result.length));
|
|
283
|
+
const closest = results.filter((result) => result.length === fewest);
|
|
284
|
+
if (closest.length === 1)
|
|
285
|
+
return closest[0];
|
|
286
|
+
if (typeof title === "string")
|
|
287
|
+
return [{ path, message: `must be ${title}` }];
|
|
288
|
+
return [{ path, message: `does not match any of the ${branches.length} allowed forms` }];
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Every violation of `value` against `contract`; empty when it conforms. A
|
|
292
|
+
* type mismatch stops there and returns alone, since every other keyword
|
|
293
|
+
* assumes the value is already the right type. Otherwise, on an object, any
|
|
294
|
+
* `const` or `enum` violation of the object itself comes before a missing
|
|
295
|
+
* required field, which comes before each present key's violations in the
|
|
296
|
+
* order the keys were written (see `keyOrder()`), then any from `oneOf`,
|
|
297
|
+
* `allOf` and `not`. Never throws for a bad value. Throws only when the
|
|
298
|
+
* contract itself uses a keyword this checker does not implement, or a
|
|
299
|
+
* `$ref` it cannot resolve -- a defect in the contract, not in the value.
|
|
300
|
+
*/
|
|
301
|
+
export function validateAgainstContract(contract, value, load) {
|
|
302
|
+
return check(contract, value, { root: contract, load }, "");
|
|
303
|
+
}
|
|
304
|
+
/** `label.path message` (for example `plan.blockers[0].capabilityId is required`), or `label message` for the document itself. */
|
|
305
|
+
export function formatContractViolation(label, violation) {
|
|
306
|
+
const where = violation.path === "" ? label : violation.path.startsWith("[") ? `${label}${violation.path}` : `${label}.${violation.path}`;
|
|
307
|
+
return `${where} ${violation.message}`;
|
|
308
|
+
}
|
|
309
|
+
// ignoreBOM keeps a leading byte order mark in the text, so it is refused below rather than silently stripped.
|
|
310
|
+
const STRICT_UTF8 = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true });
|
|
311
|
+
const JSON_WHITESPACE = " \t\n\r";
|
|
312
|
+
const JSON_NUMBER = /-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/y;
|
|
313
|
+
const JSON_ESCAPE = /\\(?:["\\/bfnrt]|u[0-9a-fA-F]{4})/y;
|
|
314
|
+
/**
|
|
315
|
+
* Why `readContractDocument()` refused a file, as data a caller can act on
|
|
316
|
+
* without parsing the message: `reason` says which rule failed, and
|
|
317
|
+
* `position` (never file text) is set only for a syntax error or a leading
|
|
318
|
+
* byte order mark. The message carries no file text either: a repeated key
|
|
319
|
+
* is named by its 1-based position in its object, and that object as the
|
|
320
|
+
* top-level object or by its position, never by any key.
|
|
321
|
+
*
|
|
322
|
+
* A position, here and in every message, is a 0-based index into the
|
|
323
|
+
* decoded text in UTF-16 code units: JavaScript's string index. It equals
|
|
324
|
+
* the byte offset only for ASCII text; a character outside the Basic
|
|
325
|
+
* Multilingual Plane (an emoji, say) counts as two.
|
|
326
|
+
*/
|
|
327
|
+
export class ContractDocumentError extends Error {
|
|
328
|
+
reason;
|
|
329
|
+
position;
|
|
330
|
+
constructor(message, reason, position) {
|
|
331
|
+
super(message);
|
|
332
|
+
this.reason = reason;
|
|
333
|
+
this.position = position;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Checks that `text` is exactly one JSON value (RFC 8259 grammar) with no
|
|
338
|
+
* object that repeats a key, at any depth. Keys are compared after
|
|
339
|
+
* unescaping, so `"a"` and `"\u0061"` are the same key. Every refusal is
|
|
340
|
+
* by position only, never with a snippet of the text or a key, because a
|
|
341
|
+
* plan or brief can carry founder prose and a key can carry anything.
|
|
342
|
+
*
|
|
343
|
+
* Returns every object's keys in the order written, one list per object in
|
|
344
|
+
* document (pre-)order, for `recordWrittenKeyOrder()`.
|
|
345
|
+
*/
|
|
346
|
+
function checkStrictJson(text) {
|
|
347
|
+
const keyOrders = [];
|
|
348
|
+
let index = 0;
|
|
349
|
+
const syntaxError = () => {
|
|
350
|
+
throw new ContractDocumentError(`is not valid JSON at position ${index}`, "syntax", index);
|
|
351
|
+
};
|
|
352
|
+
const skipWhitespace = () => {
|
|
353
|
+
while (index < text.length && JSON_WHITESPACE.includes(text[index]))
|
|
354
|
+
index += 1;
|
|
355
|
+
};
|
|
356
|
+
const expect = (character) => {
|
|
357
|
+
if (text[index] !== character)
|
|
358
|
+
syntaxError();
|
|
359
|
+
index += 1;
|
|
360
|
+
};
|
|
361
|
+
const readString = () => {
|
|
362
|
+
const start = index;
|
|
363
|
+
expect('"');
|
|
364
|
+
for (;;) {
|
|
365
|
+
if (index >= text.length)
|
|
366
|
+
syntaxError();
|
|
367
|
+
const unit = text.charCodeAt(index);
|
|
368
|
+
if (unit === 0x22)
|
|
369
|
+
break;
|
|
370
|
+
if (unit < 0x20)
|
|
371
|
+
syntaxError();
|
|
372
|
+
if (unit === 0x5c) {
|
|
373
|
+
JSON_ESCAPE.lastIndex = index;
|
|
374
|
+
if (!JSON_ESCAPE.test(text))
|
|
375
|
+
syntaxError();
|
|
376
|
+
index = JSON_ESCAPE.lastIndex;
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
index += 1;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
index += 1;
|
|
383
|
+
return JSON.parse(text.slice(start, index));
|
|
384
|
+
};
|
|
385
|
+
const scan = (topLevel) => {
|
|
386
|
+
skipWhitespace();
|
|
387
|
+
const opening = text[index];
|
|
388
|
+
if (opening === "{" || opening === "[") {
|
|
389
|
+
const closing = opening === "{" ? "}" : "]";
|
|
390
|
+
const where = topLevel ? "the top-level object" : `the object at position ${index}`;
|
|
391
|
+
const keys = [];
|
|
392
|
+
if (opening === "{")
|
|
393
|
+
keyOrders.push(keys);
|
|
394
|
+
const seen = new Set();
|
|
395
|
+
index += 1;
|
|
396
|
+
skipWhitespace();
|
|
397
|
+
if (text[index] === closing) {
|
|
398
|
+
index += 1;
|
|
399
|
+
return;
|
|
400
|
+
}
|
|
401
|
+
for (;;) {
|
|
402
|
+
if (opening === "{") {
|
|
403
|
+
skipWhitespace();
|
|
404
|
+
const key = readString();
|
|
405
|
+
keys.push(key);
|
|
406
|
+
if (seen.has(key)) {
|
|
407
|
+
// Never the key itself: it is document text, and may be written to be read as an instruction.
|
|
408
|
+
throw new ContractDocumentError(`repeats a key (key ${keys.length} of ${where}); every key may appear once`, "repeated-key");
|
|
409
|
+
}
|
|
410
|
+
seen.add(key);
|
|
411
|
+
skipWhitespace();
|
|
412
|
+
expect(":");
|
|
413
|
+
}
|
|
414
|
+
scan(false);
|
|
415
|
+
skipWhitespace();
|
|
416
|
+
if (text[index] === ",") {
|
|
417
|
+
index += 1;
|
|
418
|
+
continue;
|
|
419
|
+
}
|
|
420
|
+
expect(closing);
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
if (opening === '"') {
|
|
425
|
+
readString();
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
for (const literal of ["true", "false", "null"]) {
|
|
429
|
+
if (text.startsWith(literal, index)) {
|
|
430
|
+
index += literal.length;
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
JSON_NUMBER.lastIndex = index;
|
|
435
|
+
if (!JSON_NUMBER.test(text))
|
|
436
|
+
syntaxError();
|
|
437
|
+
index = JSON_NUMBER.lastIndex;
|
|
438
|
+
};
|
|
439
|
+
scan(true);
|
|
440
|
+
skipWhitespace();
|
|
441
|
+
if (index !== text.length)
|
|
442
|
+
syntaxError();
|
|
443
|
+
return keyOrders;
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Records, for each object in `value`, the key order `checkStrictJson()`
|
|
447
|
+
* read for it. `keyOrders` lists objects in document order, which is the
|
|
448
|
+
* order this walk meets them in: each object, then its members in the order
|
|
449
|
+
* written. Keys are unique (a repeat was already refused), so each names
|
|
450
|
+
* exactly one own property; `value[key]` reads an own `__proto__` too,
|
|
451
|
+
* because JSON.parse defines it as an own property that shadows the
|
|
452
|
+
* inherited accessor.
|
|
453
|
+
*/
|
|
454
|
+
function recordWrittenKeyOrder(value, keyOrders, next) {
|
|
455
|
+
if (typeof value !== "object" || value === null)
|
|
456
|
+
return;
|
|
457
|
+
if (Array.isArray(value)) {
|
|
458
|
+
for (const item of value)
|
|
459
|
+
recordWrittenKeyOrder(item, keyOrders, next);
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
const keys = keyOrders[next.index];
|
|
463
|
+
next.index += 1;
|
|
464
|
+
WRITTEN_KEY_ORDER.set(value, keys);
|
|
465
|
+
for (const key of keys)
|
|
466
|
+
recordWrittenKeyOrder(value[key], keyOrders, next);
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Reads a plan or brief file's bytes as strict JSON: UTF-8 that decodes
|
|
470
|
+
* without error (never silently replaced with U+FFFD) and does not start
|
|
471
|
+
* with a byte order mark, exactly one JSON value, and no object that repeats a key at any depth -- the I-JSON rules
|
|
472
|
+
* RFC 8785 canonicalization assumes. Refuses bytes that break a rule with a
|
|
473
|
+
* ContractDocumentError whose message says which rule, by position only: a
|
|
474
|
+
* syntax error by its position (a UTF-16 code-unit index, see
|
|
475
|
+
* ContractDocumentError), a repeated key by its 1-based position in its
|
|
476
|
+
* object and that object's position (or "the top-level object") -- never
|
|
477
|
+
* any text from the file. It does not validate the value against a contract; call
|
|
478
|
+
* `validateAgainstContract()` next, which then numbers an undeclared field
|
|
479
|
+
* by its position as written in the file.
|
|
480
|
+
*/
|
|
481
|
+
export function readContractDocument(bytes) {
|
|
482
|
+
let text;
|
|
483
|
+
try {
|
|
484
|
+
text = STRICT_UTF8.decode(bytes);
|
|
485
|
+
}
|
|
486
|
+
catch {
|
|
487
|
+
throw new ContractDocumentError("is not valid UTF-8", "encoding");
|
|
488
|
+
}
|
|
489
|
+
if (text.charCodeAt(0) === 0xfeff)
|
|
490
|
+
throw new ContractDocumentError("is not valid JSON at position 0: it starts with a byte order mark, which strict JSON refuses", "syntax", 0);
|
|
491
|
+
const keyOrders = checkStrictJson(text);
|
|
492
|
+
const value = JSON.parse(text);
|
|
493
|
+
recordWrittenKeyOrder(value, keyOrders, { index: 0 });
|
|
494
|
+
return value;
|
|
495
|
+
}
|
|
496
|
+
//# sourceMappingURL=contract-schema.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-schema.generated.js","sourceRoot":"","sources":["../../src/generated/contract-schema.generated.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-scope.generated.d.ts","sourceRoot":"","sources":["../../src/generated/package-scope.generated.ts"],"names":[],"mappings":"AAKA,qFAAqF;AACrF,eAAO,MAAM,aAAa,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAG9E,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// AUTO-GENERATED by this package's build-time packer (issue #1178).
|
|
2
|
+
// Do not edit by hand -- edits are overwritten on the next `npm run build`.
|
|
3
|
+
// Source of truth: the one file in this package's source repository that sets
|
|
4
|
+
// the publishing scope and registry (not shipped in this package).
|
|
5
|
+
/** The publishing scope and the registry packages are published to and read from. */
|
|
6
|
+
export const PACKAGE_SCOPE = {
|
|
7
|
+
"scope": "@clossys",
|
|
8
|
+
"registry": "https://registry.npmjs.org"
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=package-scope.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-scope.generated.js","sourceRoot":"","sources":["../../src/generated/package-scope.generated.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,4EAA4E;AAC5E,8EAA8E;AAC9E,mEAAmE;AAEnE,qFAAqF;AACrF,MAAM,CAAC,MAAM,aAAa,GAA0D;IAClF,OAAO,EAAE,UAAU;IACnB,UAAU,EAAE,4BAA4B;CACzC,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** The shared plan, brief, inventory and registry snapshot contracts, and the change-set, bundle and ledger contracts, keyed by their file name in docs/contracts/. */
|
|
2
|
+
export declare const PLAN_CONTRACTS: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
|
|
3
|
+
//# sourceMappingURL=plan-contracts.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-contracts.generated.d.ts","sourceRoot":"","sources":["../../src/generated/plan-contracts.generated.ts"],"names":[],"mappings":"AASA,uKAAuK;AACvK,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAkhGtF,CAAC"}
|