@hyperscale0/hsx 1.0.128 → 1.0.130
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cli.js +1 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/compile.d.ts.map +1 -1
- package/dist/src/compile.js +96 -10
- package/dist/src/compile.js.map +1 -1
- package/dist/src/examples-bundle.js +3 -3
- package/dist/src/examples-bundle.js.map +1 -1
- package/dist/src/parse.js +4 -1
- package/dist/src/parse.js.map +1 -1
- package/dist/src/std-bundle.js +5 -5
- package/dist/src/std-bundle.js.map +1 -1
- package/docs/README.md +45 -20
- package/examples/cards.hsx +4 -0
- package/examples/collections.hsx +4 -0
- package/examples/cost-table.json +80 -56
- package/examples/insurance.hsx +2 -1
- package/package.json +4 -4
- package/src/cli.ts +1 -1
- package/src/compile.ts +146 -10
- package/src/examples-bundle.ts +3 -3
- package/src/parse.ts +4 -1
- package/src/std-bundle.ts +5 -5
- package/std/booking.hsx +1 -1
- package/std/cards.hsx +5 -3
- package/std/escrow.hsx +18 -9
- package/std/financing.hsx +81 -16
- package/std/wallet.hsx +3 -3
package/dist/src/cli.js
CHANGED
|
@@ -75,7 +75,7 @@ export async function runCli(argv, io) {
|
|
|
75
75
|
else {
|
|
76
76
|
const result = compile(source, { standardLibrary });
|
|
77
77
|
for (const d of result.diagnostics)
|
|
78
|
-
io.err(`${d.source && d.source !== "program" ? d.source : file}:${d.line}:${d.column}: ${d.code} ${d.message
|
|
78
|
+
io.err(`${d.source && d.source !== "program" ? d.source : file}:${d.line}:${d.column}: ${d.code} ${d.message.replace(/[^.?!]$/, "$&.")} ${d.fix}`);
|
|
79
79
|
if (!result.artifacts || result.verdict !== "valid")
|
|
80
80
|
return 1;
|
|
81
81
|
if (command === "check")
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AAOA,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAgBL,KAAK,WAAW,EAQjB,MAAM,kBAAkB,CAAC;AAU1B,OAAO,EAIL,KAAK,UAAU,EAKf,KAAK,IAAI,EACV,MAAM,UAAU,CAAC;AAClB,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;CACpC;AACD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,aAAa,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E;AACD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,WAAW,cAAc;IAC7B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;CAClE;AACD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE;QACV,QAAQ,EAAE,WAAW,CAAC;QACtB,YAAY,EAAE,eAAe,CAAC;QAC9B,SAAS,EAAE,qBAAqB,EAAE,CAAC;KACpC,CAAC;CACH;AAqTD,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,aAAa,
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AAOA,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAgBL,KAAK,WAAW,EAQjB,MAAM,kBAAkB,CAAC;AAU1B,OAAO,EAIL,KAAK,UAAU,EAKf,KAAK,IAAI,EACV,MAAM,UAAU,CAAC;AAClB,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;CACpC;AACD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,aAAa,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E;AACD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,WAAW,cAAc;IAC7B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC;CAClE;AACD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE;QACV,QAAQ,EAAE,WAAW,CAAC;QACtB,YAAY,EAAE,eAAe,CAAC;QAC9B,SAAS,EAAE,qBAAqB,EAAE,CAAC;KACpC,CAAC;CACH;AAqTD,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,aAAa,CA6zHf"}
|
package/dist/src/compile.js
CHANGED
|
@@ -710,6 +710,21 @@ export function compile(source, options = {}) {
|
|
|
710
710
|
(!!attachmentInfo &&
|
|
711
711
|
subjectPartyRoles.includes(name));
|
|
712
712
|
const resolvedParties = new Set();
|
|
713
|
+
// A party of a sibling attachment this one references, such as the
|
|
714
|
+
// borrower of `self.plan`, binds here the way it binds there.
|
|
715
|
+
const reachedParty = (name) => {
|
|
716
|
+
if (!attachmentInfo)
|
|
717
|
+
return;
|
|
718
|
+
const targets = fields.flatMap((field) => field.type === "ref" && field.targetKind === "instrument"
|
|
719
|
+
? [field.target].flat()
|
|
720
|
+
: []);
|
|
721
|
+
const bindings = attachmentInfo.attachments.flatMap((attachment) => targets.some((target) => target === attachment.instrument ||
|
|
722
|
+
target.startsWith(`${attachment.instrument}_`)) && attachment.parties[name]
|
|
723
|
+
? [attachment.parties[name]]
|
|
724
|
+
: []);
|
|
725
|
+
const distinct = new Set(bindings.map((item) => JSON.stringify(item)));
|
|
726
|
+
return distinct.size === 1 ? bindings[0] : undefined;
|
|
727
|
+
};
|
|
713
728
|
const resolve = (expr, seen = new Set(), partyBinding = false) => {
|
|
714
729
|
if (expr.kind === "call" &&
|
|
715
730
|
["object", "all", "party"].includes(expr.name)) {
|
|
@@ -739,6 +754,15 @@ export function compile(source, options = {}) {
|
|
|
739
754
|
const local = (name) => attachmentSubjects.has(name)
|
|
740
755
|
? name.slice(attachmentInfo.subjectKindId.length + 1)
|
|
741
756
|
: `${name} (program)`;
|
|
757
|
+
const elsewhere = [...assignments.values()]
|
|
758
|
+
.filter((assignment) => assignment.target === type &&
|
|
759
|
+
attachmentSubjects.has(assignment.name) &&
|
|
760
|
+
attachmentSubjects.get(assignment.name) !==
|
|
761
|
+
attachmentInfo.subjectKindId)
|
|
762
|
+
.map((assignment) => {
|
|
763
|
+
const subject = attachmentSubjects.get(assignment.name);
|
|
764
|
+
return `\`${subject}.${assignment.name.slice(subject.length + 1)}\``;
|
|
765
|
+
});
|
|
742
766
|
const target = templates.get(type);
|
|
743
767
|
const required = target?.parameters
|
|
744
768
|
.filter((p) => p.value.kind !== "default" &&
|
|
@@ -748,7 +772,7 @@ export function compile(source, options = {}) {
|
|
|
748
772
|
? `No \`${type}\` attachment exists on \`${attachmentInfo.subjectKindId}\`.`
|
|
749
773
|
: `Several \`${type}\` attachments match on \`${attachmentInfo.subjectKindId}\`: ${matches.map(local).join(", ")}.`}`, matches.length
|
|
750
774
|
? `Bind \`${parameter}\` explicitly to one of: ${matches.map(local).join(", ")}.`
|
|
751
|
-
: `
|
|
775
|
+
: `Attach \`${type}\` to \`${attachmentInfo.subjectKindId}\` and bind \`${parameter}\` to that attachment's name. Choose ${required.map((name) => (name.startsWith("per_") ? `its ${name.slice(4).replaceAll("_", " ")} limit` : `\`${name}\``)).join(", ") || "its required bindings"} explicitly.${elsewhere.length ? ` ${elsewhere.join(", ")} ${elsewhere.length === 1 ? "is" : "are"} on another object, which this binding cannot reach.` : ""}`);
|
|
752
776
|
}
|
|
753
777
|
if (expr.name !== "all" && matches.length !== 1)
|
|
754
778
|
failWithCode(expr, partyBinding ? "subject_party_unbound" : "HSX1001", `${id} needs ${expr.name === "all" ? "at least one" : "exactly one"} ${type}`, "declare the required object or supply this tunable explicitly");
|
|
@@ -1059,6 +1083,19 @@ export function compile(source, options = {}) {
|
|
|
1059
1083
|
value: `${id}_${key}`,
|
|
1060
1084
|
span: origin,
|
|
1061
1085
|
});
|
|
1086
|
+
// A subject role only has money here when this attachment binds it.
|
|
1087
|
+
const moneyPath = (expr) => {
|
|
1088
|
+
const lowered = path(expr);
|
|
1089
|
+
const role = lowered.slice("party.".length);
|
|
1090
|
+
if (attachmentInfo &&
|
|
1091
|
+
lowered.startsWith("party.") &&
|
|
1092
|
+
subjectPartyRoles.includes(role) &&
|
|
1093
|
+
!Object.values(attachmentInfo.parties).some((binding) => "role" in binding && binding.role === role))
|
|
1094
|
+
failWithCode(expr, "subject_party_unbound", `\`${role}\` has no money account in \`${decl.name}\``, role === "operator"
|
|
1095
|
+
? "Use `programOperator` for the company's own account."
|
|
1096
|
+
: `Add a party parameter to \`${decl.name}\` and bind it to \`${role}\` where you attach it.`);
|
|
1097
|
+
return lowered;
|
|
1098
|
+
};
|
|
1062
1099
|
const fields = [];
|
|
1063
1100
|
const calculations = [];
|
|
1064
1101
|
let currentAction;
|
|
@@ -1780,9 +1817,17 @@ export function compile(source, options = {}) {
|
|
|
1780
1817
|
"pass_through",
|
|
1781
1818
|
].includes(purposeName))
|
|
1782
1819
|
fail(purpose, `unknown economic purpose ${purposeName}`, "choose a declared economic purpose");
|
|
1783
|
-
|
|
1820
|
+
let sourcePartyName = sourceParty
|
|
1784
1821
|
? String(data(sourceParty))
|
|
1785
1822
|
: undefined;
|
|
1823
|
+
const reached = sourcePartyName && !isParty(sourcePartyName)
|
|
1824
|
+
? reachedParty(sourcePartyName)
|
|
1825
|
+
: undefined;
|
|
1826
|
+
if (reached) {
|
|
1827
|
+
attachmentInfo.parties[sourcePartyName] = reached;
|
|
1828
|
+
sourcePartyName =
|
|
1829
|
+
"role" in reached ? reached.role : reached.party;
|
|
1830
|
+
}
|
|
1786
1831
|
if (sourcePartyName && !isParty(sourcePartyName))
|
|
1787
1832
|
fail(sourceParty, `unknown source party ${sourcePartyName}`, "bind an authored party");
|
|
1788
1833
|
return economicsParts
|
|
@@ -1869,7 +1914,7 @@ export function compile(source, options = {}) {
|
|
|
1869
1914
|
operation: "internal_transfer.create",
|
|
1870
1915
|
...(economics ? { economics } : {}),
|
|
1871
1916
|
amount: piece,
|
|
1872
|
-
from:
|
|
1917
|
+
from: moneyPath(from),
|
|
1873
1918
|
to: `party.${recipient.value}`,
|
|
1874
1919
|
});
|
|
1875
1920
|
}
|
|
@@ -1889,8 +1934,8 @@ export function compile(source, options = {}) {
|
|
|
1889
1934
|
? { capture: String(data(parts.get("capture"))) }
|
|
1890
1935
|
: {}),
|
|
1891
1936
|
amount: val(amount),
|
|
1892
|
-
from:
|
|
1893
|
-
to:
|
|
1937
|
+
from: moneyPath(from),
|
|
1938
|
+
to: moneyPath(to),
|
|
1894
1939
|
};
|
|
1895
1940
|
const fee = parts.get("fee");
|
|
1896
1941
|
if (!fee)
|
|
@@ -2094,6 +2139,20 @@ export function compile(source, options = {}) {
|
|
|
2094
2139
|
message: `${id}.${name}.subject.${requirement.field.name}`,
|
|
2095
2140
|
});
|
|
2096
2141
|
}
|
|
2142
|
+
// A parent actor over an empty all() names no instrument that could
|
|
2143
|
+
// invoke the action. A std action then does not exist in this program;
|
|
2144
|
+
// in user code the all() is a mistake.
|
|
2145
|
+
if (typeof a.actor === "object" &&
|
|
2146
|
+
"parent" in a.actor &&
|
|
2147
|
+
Array.isArray(a.actor.parent) &&
|
|
2148
|
+
!a.actor.parent.length) {
|
|
2149
|
+
if ((declarationSources.get(decl) ?? "program") === "program") {
|
|
2150
|
+
const parent = entries(asBlock(slots.get("actor"))).get("parent");
|
|
2151
|
+
fail(parent ?? row, `${parent?.kind === "call" ? `${parent.name}(${text(parent.args[0])})` : `the parent actor of ${name}`} matches no instrument`, "name an instrument this program declares or attaches");
|
|
2152
|
+
}
|
|
2153
|
+
delete lifecycle.transitions[name];
|
|
2154
|
+
continue;
|
|
2155
|
+
}
|
|
2097
2156
|
inst.actions[name] = a;
|
|
2098
2157
|
inst.actionOrder.push(name);
|
|
2099
2158
|
}
|
|
@@ -2706,7 +2765,7 @@ export function compile(source, options = {}) {
|
|
|
2706
2765
|
// A family member drops an optional reference field its binding left
|
|
2707
2766
|
// unset (a borrower-funded plan has no `funds`), so it cannot match and
|
|
2708
2767
|
// leaves the selection. The header must still declare the field.
|
|
2709
|
-
const
|
|
2768
|
+
const declaredMembers = (selection) => {
|
|
2710
2769
|
const members = [selection.instrument].flat();
|
|
2711
2770
|
const header = selection.family
|
|
2712
2771
|
? templates.get(`${selection.family.module}.${selection.family.exportPath}`)
|
|
@@ -2716,12 +2775,33 @@ export function compile(source, options = {}) {
|
|
|
2716
2775
|
return members;
|
|
2717
2776
|
return members.filter((id) => resolveField(document, byId.get(id), `self.${selection.reference}`));
|
|
2718
2777
|
};
|
|
2778
|
+
// A member whose reference points at another attachment of the anchor's
|
|
2779
|
+
// own template (the plan funding another object's escrow) cannot match
|
|
2780
|
+
// either, so each object only selects what can reference it.
|
|
2781
|
+
const kin = (a, b) => {
|
|
2782
|
+
const left = byId.get(a);
|
|
2783
|
+
const right = byId.get(b);
|
|
2784
|
+
return (!!left && !!right && declarations.get(left) === declarations.get(right));
|
|
2785
|
+
};
|
|
2786
|
+
const matchable = (selection, inst, action) => declaredMembers(selection).filter((id) => {
|
|
2787
|
+
const member = byId.get(id);
|
|
2788
|
+
if (!member)
|
|
2789
|
+
return true;
|
|
2790
|
+
const anchor = resolveField(document, inst, selection.anchor, action?.input, action);
|
|
2791
|
+
const reference = resolveField(document, member, `self.${selection.reference}`);
|
|
2792
|
+
if (anchor?.type !== "ref" || reference?.type !== "ref")
|
|
2793
|
+
return true;
|
|
2794
|
+
const targets = [anchor.target].flat();
|
|
2795
|
+
const candidates = [reference.target].flat();
|
|
2796
|
+
return !candidates.every((candidate) => !targets.includes(candidate) &&
|
|
2797
|
+
targets.some((target) => kin(target, candidate)));
|
|
2798
|
+
});
|
|
2719
2799
|
// A count over no matchable member is zero.
|
|
2720
2800
|
for (const inst of document.instruments)
|
|
2721
2801
|
for (const action of Object.values(inst.actions))
|
|
2722
2802
|
action.requires = action.requires.map((requirement) => requirement.kind === "aggregate" &&
|
|
2723
2803
|
requirement.measure === "count" &&
|
|
2724
|
-
!matchable(requirement.selection).length
|
|
2804
|
+
!matchable(requirement.selection, inst, action).length
|
|
2725
2805
|
? {
|
|
2726
2806
|
kind: "compare",
|
|
2727
2807
|
left: { literal: 0 },
|
|
@@ -2730,9 +2810,10 @@ export function compile(source, options = {}) {
|
|
|
2730
2810
|
}
|
|
2731
2811
|
: requirement);
|
|
2732
2812
|
const checkSelection = (selection, at, scope) => {
|
|
2813
|
+
walk(selection.overlaps, "overlaps", site(selection, "overlaps", at), scope);
|
|
2733
2814
|
walk(selection.anchor, "anchor", site(selection, "anchor", at), scope);
|
|
2734
2815
|
walk(selection.where, "where", site(selection, "where", at), scope);
|
|
2735
|
-
const members = matchable(selection);
|
|
2816
|
+
const members = matchable(selection, scope.inst, scope.action);
|
|
2736
2817
|
if (members.length &&
|
|
2737
2818
|
members.length < [selection.instrument].flat().length)
|
|
2738
2819
|
selection.instrument = members;
|
|
@@ -2744,6 +2825,9 @@ export function compile(source, options = {}) {
|
|
|
2744
2825
|
member(key, keySite(selection.where, key, at));
|
|
2745
2826
|
member(selection.reference, site(selection, "reference", at));
|
|
2746
2827
|
selection.order?.forEach((key, index) => member(key, site(selection.order, index, at)));
|
|
2828
|
+
if (selection.overlaps)
|
|
2829
|
+
for (const key of ["start", "end"])
|
|
2830
|
+
member(selection.overlaps[key], site(selection.overlaps, key, at));
|
|
2747
2831
|
if (selection.window)
|
|
2748
2832
|
member(selection.window.field, site(selection.window, "field", at));
|
|
2749
2833
|
}
|
|
@@ -2969,12 +3053,14 @@ export function compile(source, options = {}) {
|
|
|
2969
3053
|
?.find((binding) => binding.defaultState === stranded.state &&
|
|
2970
3054
|
instrument.actions[binding.action]?.moves.some((move) => "amount" in move &&
|
|
2971
3055
|
stranded.accounts.some((account) => move.from === `self.${account}`)));
|
|
3056
|
+
const reaching = stranded.actions.at(-1);
|
|
3057
|
+
const drain = `move ${stranded.accounts.map((account) => `\`self.${account}.balance\``).join(" and ")} out in ${reaching ? `\`${reaching}\`` : "the action that reaches it"}, or add an action from \`${stranded.state}\` that does`;
|
|
2972
3058
|
return diagnostic({
|
|
2973
3059
|
code: i.code,
|
|
2974
3060
|
message: `\`${attachment?.name ?? instrument.id}\` can reach \`${stranded.state}\` with money in ${stranded.accounts.map((account) => `\`${account}\``).join(", ")}, but no action leaves that state and disposes of the balance.`,
|
|
2975
3061
|
fix: binding
|
|
2976
|
-
? `Restore \`${binding.parameter}: ${stranded.state}\`, or
|
|
2977
|
-
:
|
|
3062
|
+
? `Restore \`${binding.parameter}: ${stranded.state}\`, or ${drain}.`
|
|
3063
|
+
: `${drain[0].toUpperCase()}${drain.slice(1)}.`,
|
|
2978
3064
|
span: binding?.span ?? origin?.span ?? program.span,
|
|
2979
3065
|
related: stranded.accounts.map((account) => ({
|
|
2980
3066
|
source: "program",
|