@hyperscale0/hsx 4.3.0 → 5.0.1
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 +23 -0
- package/README.md +5 -4
- package/dist/src/binding-contract.d.ts +22 -0
- package/dist/src/binding-contract.d.ts.map +1 -0
- package/dist/src/binding-contract.js +74 -0
- package/dist/src/binding-contract.js.map +1 -0
- package/dist/src/compile.d.ts.map +1 -1
- package/dist/src/compile.js +340 -112
- package/dist/src/compile.js.map +1 -1
- package/dist/src/examples-bundle.d.ts.map +1 -1
- package/dist/src/examples-bundle.js +2 -1
- package/dist/src/examples-bundle.js.map +1 -1
- package/dist/src/headers.d.ts +13 -0
- package/dist/src/headers.d.ts.map +1 -1
- package/dist/src/headers.js +3 -0
- package/dist/src/headers.js.map +1 -1
- package/dist/src/std-bundle.js +8 -8
- package/dist/src/std-bundle.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/docs/README.md +78 -3
- package/docs/examples.md +3 -2
- package/docs/headers.md +2 -2
- package/examples/lending.hsx +14 -3
- package/examples/repair-approval.hsx +43 -0
- package/package.json +3 -3
- package/src/binding-contract.ts +104 -0
- package/src/compile.ts +476 -171
- package/src/examples-bundle.ts +2 -1
- package/src/headers.ts +8 -0
- package/src/std-bundle.ts +8 -8
- package/src/version.ts +1 -1
- package/std/collections.hsx +1 -1
- package/std/escrow.hsx +1 -1
- package/std/financing.hsx +37 -23
- package/std/lending.hsx +6 -6
- package/std/marketplace.hsx +3 -3
- package/std/money.hsx +6 -6
- package/std/savings.hsx +1 -1
- package/std/travel.hsx +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,26 @@
|
|
|
1
|
+
# HSX 5.0.1
|
|
2
|
+
|
|
3
|
+
Per-action subject evidence compiles: `fields { price: money = subject.price }`
|
|
4
|
+
and `set: { x: { field: subject.y } }` accept requirements declared on the
|
|
5
|
+
action alone (UDL 4.2.1).
|
|
6
|
+
|
|
7
|
+
# HSX 5.0.0
|
|
8
|
+
|
|
9
|
+
Money moves refuse a zero amount unless the action declares `allowZero: true`,
|
|
10
|
+
so a program that moved zero before now fails at compile or at execution. The
|
|
11
|
+
standard library declares the permission on calculated pieces (repayment
|
|
12
|
+
slices, floored fees, rounding remainders) and keeps a positive requirement on
|
|
13
|
+
authored totals. Pools refuse a contribution above the remaining target and
|
|
14
|
+
fee collection posts the exact fee that was billed.
|
|
15
|
+
|
|
16
|
+
Headers carry binding contracts: `dependencies` name a binding that only
|
|
17
|
+
applies under one enum choice of another, and `parameterDiagnostics` explain
|
|
18
|
+
why a typed parameter refuses a policy shape. Ten diagnostics were rewritten
|
|
19
|
+
to name the failing construct and the repair; each carries a compiler witness.
|
|
20
|
+
Worked programs open with a one-line intent comment and `repair-approval.hsx`
|
|
21
|
+
joins the examples. Header docs, README and llms-full.txt correct sixteen
|
|
22
|
+
stale claims. Package, compiler and VS Code versions are aligned at 5.0.0.
|
|
23
|
+
|
|
1
24
|
# HSX 4.2.0
|
|
2
25
|
|
|
3
26
|
Adds the browser-safe `language` export with semantic highlights and hover
|
package/README.md
CHANGED
|
@@ -42,11 +42,11 @@ modified without changing later results.
|
|
|
42
42
|
|
|
43
43
|
## Sample programs
|
|
44
44
|
|
|
45
|
-
The [sample index](docs/examples.md) lists
|
|
45
|
+
The [sample index](docs/examples.md) lists fifteen programs. Twelve introduce
|
|
46
46
|
the standard headers through small businesses: tutoring, freelance work, used
|
|
47
47
|
devices, prepaid workshops, tuition lending, community lending, device cover,
|
|
48
48
|
collections, travel, employee cards, a savings circle and equipment loan reports.
|
|
49
|
-
The two longer-standing examples show a minimal financed car sale and servicing
|
|
49
|
+
The authored repair approval example builds its lifecycle and evidence requirements directly. The two longer-standing examples show a minimal financed car sale and servicing
|
|
50
50
|
with late charges and reminders.
|
|
51
51
|
|
|
52
52
|
```ts
|
|
@@ -71,7 +71,8 @@ and exercises highlighting and hover at every sample offset. A stale bundle
|
|
|
71
71
|
fails the check; regenerate after an example edit.
|
|
72
72
|
|
|
73
73
|
The insurance and travel samples name ADL adapter bindings. Compilation preserves
|
|
74
|
-
unbound declarations
|
|
75
|
-
|
|
74
|
+
unbound declarations, but Product creation and recomposition reject unresolved
|
|
75
|
+
or changed adapter dependencies during Build admission. Execution checks the
|
|
76
|
+
frozen declaration too, including adapter unavailability after a Build was saved. Dates, agreement inputs and declared business parties still
|
|
76
77
|
need values when the product runs. A compiled sample is not a connected provider
|
|
77
78
|
or a funded agreement.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Entry, InstrumentDecl } from "./ast.ts";
|
|
2
|
+
export declare class BindingContractError extends Error {
|
|
3
|
+
readonly entry: Entry;
|
|
4
|
+
constructor(entry: Entry, message: string);
|
|
5
|
+
}
|
|
6
|
+
/** Conditional requirements are header data, independent of module names. */
|
|
7
|
+
export declare function bindingDependencies(decl: InstrumentDecl): {
|
|
8
|
+
binding: string;
|
|
9
|
+
when: string;
|
|
10
|
+
is: string;
|
|
11
|
+
message: string;
|
|
12
|
+
fix: string;
|
|
13
|
+
span: import("./ast.ts").Span;
|
|
14
|
+
}[];
|
|
15
|
+
/** A header explains why a typed parameter cannot encode a proposed policy. */
|
|
16
|
+
export declare function parameterDiagnostics(decl: InstrumentDecl): {
|
|
17
|
+
parameter: string;
|
|
18
|
+
accepts: string;
|
|
19
|
+
percentage: string;
|
|
20
|
+
fix: string;
|
|
21
|
+
}[];
|
|
22
|
+
//# sourceMappingURL=binding-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-contract.d.ts","sourceRoot":"","sources":["../../src/binding-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAQ,cAAc,EAAE,MAAM,UAAU,CAAC;AAE5D,qBAAa,oBAAqB,SAAQ,KAAK;IAE3C,QAAQ,CAAC,KAAK,EAAE,KAAK;IADvB,YACW,KAAK,EAAE,KAAK,EACrB,OAAO,EAAE,MAAM,EAGhB;CACF;AAkDD,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc;;;;;;;IA8BvD;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc;;;;;IAUxD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export class BindingContractError extends Error {
|
|
2
|
+
entry;
|
|
3
|
+
constructor(entry, message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.entry = entry;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
function rows(value) {
|
|
9
|
+
if (value.kind === "block")
|
|
10
|
+
return value.entries;
|
|
11
|
+
throw new BindingContractError({ key: "contract", value, span: value.span }, "Binding contract needs a block.");
|
|
12
|
+
}
|
|
13
|
+
function properties(entry, allowed) {
|
|
14
|
+
const result = new Map();
|
|
15
|
+
for (const slot of rows(entry.value)) {
|
|
16
|
+
if (!allowed.includes(slot.key) ||
|
|
17
|
+
result.has(slot.key) ||
|
|
18
|
+
(slot.value.kind !== "text" && slot.value.kind !== "name"))
|
|
19
|
+
throw new BindingContractError(slot, "Invalid binding contract property.");
|
|
20
|
+
result.set(slot.key, slot.value.value);
|
|
21
|
+
}
|
|
22
|
+
if (allowed.some((key) => !result.get(key)))
|
|
23
|
+
throw new BindingContractError(entry, `Binding contract needs ${allowed.join(", ")}.`);
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
function contractEntries(decl, name) {
|
|
27
|
+
const blocks = decl.body.entries.filter((entry) => entry.key === name);
|
|
28
|
+
if (blocks.length > 1)
|
|
29
|
+
throw new BindingContractError(blocks[1], `Duplicate ${name}.`);
|
|
30
|
+
const entries = blocks[0] ? rows(blocks[0].value) : [];
|
|
31
|
+
const seen = new Set();
|
|
32
|
+
for (const entry of entries) {
|
|
33
|
+
if (seen.has(entry.key) ||
|
|
34
|
+
!decl.parameters.some((parameter) => parameter.key === entry.key))
|
|
35
|
+
throw new BindingContractError(entry, "Binding contract must name each declared tunable once.");
|
|
36
|
+
seen.add(entry.key);
|
|
37
|
+
}
|
|
38
|
+
return entries;
|
|
39
|
+
}
|
|
40
|
+
/** Conditional requirements are header data, independent of module names. */
|
|
41
|
+
export function bindingDependencies(decl) {
|
|
42
|
+
return contractEntries(decl, "dependencies").map((entry) => {
|
|
43
|
+
const values = properties(entry, ["selector", "is", "message", "fix"]);
|
|
44
|
+
const selector = decl.parameters.find((parameter) => parameter.key === values.get("selector"));
|
|
45
|
+
const type = selector?.value.kind === "default"
|
|
46
|
+
? selector.value.type
|
|
47
|
+
: selector?.value;
|
|
48
|
+
if (type?.kind !== "call" ||
|
|
49
|
+
type.name !== "enum" ||
|
|
50
|
+
!type.args.some((arg) => arg.kind === "name" && arg.value === values.get("is")))
|
|
51
|
+
throw new BindingContractError(entry, "Dependency must select a declared enum choice.");
|
|
52
|
+
return {
|
|
53
|
+
binding: entry.key,
|
|
54
|
+
when: values.get("selector"),
|
|
55
|
+
is: values.get("is"),
|
|
56
|
+
message: values.get("message"),
|
|
57
|
+
fix: values.get("fix"),
|
|
58
|
+
span: entry.span,
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/** A header explains why a typed parameter cannot encode a proposed policy. */
|
|
63
|
+
export function parameterDiagnostics(decl) {
|
|
64
|
+
return contractEntries(decl, "parameterDiagnostics").map((entry) => {
|
|
65
|
+
const values = properties(entry, ["accepts", "percentage", "fix"]);
|
|
66
|
+
return {
|
|
67
|
+
parameter: entry.key,
|
|
68
|
+
accepts: values.get("accepts"),
|
|
69
|
+
percentage: values.get("percentage"),
|
|
70
|
+
fix: values.get("fix"),
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=binding-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding-contract.js","sourceRoot":"","sources":["../../src/binding-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAcL,KAAK,WAAW,EAOjB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAcL,KAAK,WAAW,EAOjB,MAAM,kBAAkB,CAAC;AAQ1B,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;CAC/C;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;AA2TD,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAiyFf"}
|