@hyperscale0/hsx 1.0.342 → 1.0.347
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bases/cards.hsx +0 -1
- package/bases/collections.hsx +0 -2
- package/bases/escrow.hsx +0 -1
- package/bases/financing.hsx +0 -1
- package/bases/insurance.hsx +0 -1
- package/bases/lending.hsx +0 -3
- package/bases/marketplace.hsx +0 -2
- package/bases/money.hsx +0 -1
- package/bases/reporting.hsx +0 -2
- package/bases/savings.hsx +0 -1
- package/bases/wallet.hsx +0 -1
- package/dist/src/ast.d.ts +57 -7
- package/dist/src/ast.d.ts.map +1 -1
- package/dist/src/ast.js.map +1 -1
- package/dist/src/bases-bundle.js +11 -11
- package/dist/src/bases-bundle.js.map +1 -1
- package/dist/src/catalog-program.d.ts +1 -1
- package/dist/src/catalog-program.d.ts.map +1 -1
- package/dist/src/catalog-program.js +0 -13
- package/dist/src/catalog-program.js.map +1 -1
- package/dist/src/checks.d.ts +60 -0
- package/dist/src/checks.d.ts.map +1 -0
- package/dist/src/checks.js +240 -0
- package/dist/src/checks.js.map +1 -0
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +6 -25
- package/dist/src/cli.js.map +1 -1
- package/dist/src/compile.d.ts +29 -12
- package/dist/src/compile.d.ts.map +1 -1
- package/dist/src/compile.js +414 -316
- package/dist/src/compile.js.map +1 -1
- package/dist/src/diagnostics.d.ts +14 -1
- package/dist/src/diagnostics.d.ts.map +1 -1
- package/dist/src/diagnostics.js +31 -0
- package/dist/src/diagnostics.js.map +1 -1
- package/dist/src/examples-bundle.js +15 -15
- package/dist/src/examples-bundle.js.map +1 -1
- package/dist/src/header-source.d.ts +30 -0
- package/dist/src/header-source.d.ts.map +1 -1
- package/dist/src/header-source.js +120 -9
- package/dist/src/header-source.js.map +1 -1
- package/dist/src/headers.d.ts +9 -18
- package/dist/src/headers.d.ts.map +1 -1
- package/dist/src/headers.js +25 -23
- package/dist/src/headers.js.map +1 -1
- package/dist/src/index.d.ts +4 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/keywords.d.ts +2 -4
- package/dist/src/keywords.d.ts.map +1 -1
- package/dist/src/keywords.js +6 -5
- package/dist/src/keywords.js.map +1 -1
- package/dist/src/language.d.ts +3 -4
- package/dist/src/language.d.ts.map +1 -1
- package/dist/src/language.js +123 -60
- package/dist/src/language.js.map +1 -1
- package/dist/src/lex.d.ts +1 -1
- package/dist/src/lex.d.ts.map +1 -1
- package/dist/src/lex.js +3 -5
- package/dist/src/lex.js.map +1 -1
- package/dist/src/parse.d.ts +3 -1
- package/dist/src/parse.d.ts.map +1 -1
- package/dist/src/parse.js +234 -22
- package/dist/src/parse.js.map +1 -1
- package/dist/src/std-bundle.d.ts +2 -1
- package/dist/src/std-bundle.d.ts.map +1 -1
- package/dist/src/std-bundle.js +16 -15
- package/dist/src/std-bundle.js.map +1 -1
- package/dist/src/template-guide.d.ts +3 -9
- package/dist/src/template-guide.d.ts.map +1 -1
- package/dist/src/template-guide.js +16 -23
- package/dist/src/template-guide.js.map +1 -1
- package/dist/src/toolchain.d.ts +23 -0
- package/dist/src/toolchain.d.ts.map +1 -0
- package/dist/src/toolchain.js +29 -0
- package/dist/src/toolchain.js.map +1 -0
- package/docs/README.md +69 -28
- package/examples/camera-rental.hsx +0 -1
- package/examples/cards.hsx +0 -1
- package/examples/collections.hsx +0 -2
- package/examples/escrow.hsx +0 -1
- package/examples/financing.hsx +0 -1
- package/examples/insurance.hsx +0 -2
- package/examples/lending.hsx +0 -3
- package/examples/library.hsx +0 -3
- package/examples/marketplace.hsx +0 -2
- package/examples/money.hsx +0 -1
- package/examples/rental-hire.hsx +0 -1
- package/examples/reporting.hsx +0 -2
- package/examples/savings.hsx +0 -1
- package/examples/serviced.hsx +0 -4
- package/examples/wallet.hsx +0 -1
- package/package.json +4 -4
- package/src/ast.ts +56 -3
- package/src/bases-bundle.ts +11 -11
- package/src/catalog-program.ts +0 -13
- package/src/checks.ts +386 -0
- package/src/cli.ts +6 -25
- package/src/compile.ts +583 -438
- package/src/diagnostics.ts +49 -1
- package/src/examples-bundle.ts +15 -15
- package/src/header-source.ts +187 -11
- package/src/headers.ts +31 -32
- package/src/index.ts +10 -4
- package/src/keywords.ts +6 -5
- package/src/language.ts +153 -68
- package/src/lex.ts +3 -5
- package/src/parse.ts +216 -24
- package/src/std-bundle.ts +17 -15
- package/src/template-guide.ts +17 -34
- package/src/toolchain.ts +51 -0
- package/std/booking.hsx +14 -1
- package/std/collections.hsx +12 -2
- package/std/financing.hsx +10 -16
- package/std/money.hsx +2 -3
- package/std/reporting.hsx +10 -1
- package/dist/src/binding-contract.d.ts +0 -22
- package/dist/src/binding-contract.d.ts.map +0 -1
- package/dist/src/binding-contract.js +0 -80
- package/dist/src/binding-contract.js.map +0 -1
- package/dist/src/std-library.d.ts +0 -5
- package/dist/src/std-library.d.ts.map +0 -1
- package/dist/src/std-library.js +0 -5
- package/dist/src/std-library.js.map +0 -1
- package/src/binding-contract.ts +0 -111
- package/src/std-library.ts +0 -7
package/dist/src/headers.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { type StandardLibrary } from "./std-library.ts";
|
|
2
1
|
export declare const HEADER_NAMES: readonly ["money", "marketplace", "escrow", "booking", "wallet", "financing", "lending", "insurance", "collections", "cards", "savings", "reporting"];
|
|
2
|
+
/** The headers a program names through qualified names such as booking.reservation, in first-named order. */
|
|
3
|
+
export declare function namedHeaders(source: string, std?: ReadonlyMap<string, string>): string[];
|
|
3
4
|
/** The compiler frontend owns header metadata used by docs and catalogue consumers. */
|
|
4
|
-
export declare function headerManifest(
|
|
5
|
+
export declare function headerManifest(std?: ReadonlyMap<string, string>, names?: readonly string[]): {
|
|
5
6
|
version: number;
|
|
6
7
|
headers: {
|
|
7
8
|
name: string;
|
|
@@ -12,7 +13,6 @@ export declare function headerManifest(library?: StandardLibrary, names?: readon
|
|
|
12
13
|
states: string[];
|
|
13
14
|
summary: string;
|
|
14
15
|
authoringTemplate: {
|
|
15
|
-
requiredImport: string;
|
|
16
16
|
instancePlaceholder: string;
|
|
17
17
|
source: string;
|
|
18
18
|
requiredBindings: {
|
|
@@ -30,24 +30,15 @@ export declare function headerManifest(library?: StandardLibrary, names?: readon
|
|
|
30
30
|
required: boolean;
|
|
31
31
|
default?: string;
|
|
32
32
|
}[];
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
when
|
|
36
|
-
|
|
33
|
+
checks: {
|
|
34
|
+
rule: string;
|
|
35
|
+
when?: {
|
|
36
|
+
selector: string;
|
|
37
|
+
is: string;
|
|
38
|
+
};
|
|
37
39
|
message: string;
|
|
38
40
|
fix: string;
|
|
39
41
|
}[];
|
|
40
|
-
parameterDiagnostics: {
|
|
41
|
-
parameter: string;
|
|
42
|
-
accepts: string;
|
|
43
|
-
percentage: string;
|
|
44
|
-
fix: string;
|
|
45
|
-
}[];
|
|
46
|
-
constraints: {
|
|
47
|
-
tunable: string;
|
|
48
|
-
relation: string;
|
|
49
|
-
other: string;
|
|
50
|
-
}[];
|
|
51
42
|
parties: string[];
|
|
52
43
|
subject: {
|
|
53
44
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/headers.ts"],"names":[],"mappings":"AAMA,
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/headers.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,YACvB,OAAO,EACP,aAAa,EACb,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,WAAW,EACX,SAAS,EACT,WAAW,EACX,aAAa,EACb,OAAO,EACP,SAAS,EACT,WAAW,CACH,CAAC;AAEX,6GAA6G;AAC7G,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAwB,GACtD,MAAM,EAAE,CAaV;AAED,uFAAuF;AACvF,wBAAgB,cAAc,CAC5B,GAAG,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAwB,EACvD,KAAK,GAAE,SAAS,MAAM,EAAiB;IAGrC,OAAO;IACP,OAAO;;;;;;;;;gBAuGK,mBAAmB;gBACnB,MAAM;gBAON,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAtGT,MAAM;yBAAW,MAAM;uBAAS,MAAM;;;;EA+I5D"}
|
package/dist/src/headers.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { bindingDependencies, parameterDiagnostics, } from "./binding-contract.js";
|
|
2
1
|
import { tunableBounds } from "./tunables.js";
|
|
3
|
-
import { parseHeader } from "./header-source.js";
|
|
4
|
-
import {
|
|
2
|
+
import { instrumentChecks, parseHeader } from "./header-source.js";
|
|
3
|
+
import { defaultToolchain } from "./toolchain.js";
|
|
4
|
+
import { scan } from "./lex.js";
|
|
5
5
|
export const HEADER_NAMES = [
|
|
6
6
|
"money",
|
|
7
7
|
"marketplace",
|
|
@@ -16,12 +16,25 @@ export const HEADER_NAMES = [
|
|
|
16
16
|
"savings",
|
|
17
17
|
"reporting",
|
|
18
18
|
];
|
|
19
|
+
/** The headers a program names through qualified names such as booking.reservation, in first-named order. */
|
|
20
|
+
export function namedHeaders(source, std = defaultToolchain.std) {
|
|
21
|
+
const tokens = scan(source).tokens.filter((t) => t.kind !== "comment");
|
|
22
|
+
const named = new Set();
|
|
23
|
+
tokens.forEach((token, i) => {
|
|
24
|
+
if (token.kind === "name" &&
|
|
25
|
+
tokens[i + 1]?.text === "." &&
|
|
26
|
+
tokens[i - 1]?.text !== "." &&
|
|
27
|
+
std.has(token.text))
|
|
28
|
+
named.add(token.text);
|
|
29
|
+
});
|
|
30
|
+
return [...named];
|
|
31
|
+
}
|
|
19
32
|
/** The compiler frontend owns header metadata used by docs and catalogue consumers. */
|
|
20
|
-
export function headerManifest(
|
|
33
|
+
export function headerManifest(std = defaultToolchain.std, names = HEADER_NAMES) {
|
|
21
34
|
return {
|
|
22
35
|
version: 1,
|
|
23
36
|
headers: names.map((name) => {
|
|
24
|
-
const source =
|
|
37
|
+
const source = std.get(name);
|
|
25
38
|
if (!source)
|
|
26
39
|
throw new Error(`Missing standard header ${name}`);
|
|
27
40
|
const parsed = parseHeader(source, name);
|
|
@@ -105,7 +118,6 @@ export function headerManifest(library = bundledStandardLibrary, names = HEADER_
|
|
|
105
118
|
? summary.value
|
|
106
119
|
: decl.name.replaceAll("_", " "),
|
|
107
120
|
authoringTemplate: {
|
|
108
|
-
requiredImport: `use ${name}`,
|
|
109
121
|
instancePlaceholder: "${instance}",
|
|
110
122
|
source: "attach ${instance} = " +
|
|
111
123
|
`${name}.${decl.name} { ` +
|
|
@@ -120,23 +132,13 @@ export function headerManifest(library = bundledStandardLibrary, names = HEADER_
|
|
|
120
132
|
})),
|
|
121
133
|
},
|
|
122
134
|
tunables,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
entry.value.args.length !== 1)
|
|
131
|
-
throw new Error("invalid tunable constraint");
|
|
132
|
-
return {
|
|
133
|
-
tunable: entry.key,
|
|
134
|
-
relation: entry.value.name,
|
|
135
|
-
other: spelling(entry.value.args[0]),
|
|
136
|
-
};
|
|
137
|
-
})
|
|
138
|
-
: [];
|
|
139
|
-
})(),
|
|
135
|
+
// Each rule as written, scoped by its when, with its own words.
|
|
136
|
+
checks: instrumentChecks(decl).map((check) => ({
|
|
137
|
+
rule: spelling(check.rule),
|
|
138
|
+
...(check.when ? { when: check.when } : {}),
|
|
139
|
+
message: check.message,
|
|
140
|
+
fix: check.fix,
|
|
141
|
+
})),
|
|
140
142
|
parties: tunables
|
|
141
143
|
.filter((t) => t.type === "party")
|
|
142
144
|
.map((t) => t.name),
|
package/dist/src/headers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/headers.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO;IACP,aAAa;IACb,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,WAAW;IACX,SAAS;IACT,WAAW;IACX,aAAa;IACb,OAAO;IACP,SAAS;IACT,WAAW;CACH,CAAC;AAEX,6GAA6G;AAC7G,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,GAAG,GAAgC,gBAAgB,CAAC,GAAG;IAEvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC1B,IACE,KAAK,CAAC,IAAI,KAAK,MAAM;YACrB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,GAAG;YAC3B,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,KAAK,GAAG;YAC3B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAEnB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,cAAc,CAC5B,GAAG,GAAgC,gBAAgB,CAAC,GAAG,EACvD,KAAK,GAAsB,YAAY;IAEvC,OAAO;QACL,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,CAAC,UAAgB,EAAE,EAAE,CACpC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAClE,MAAM,OAAO,GAAG,CACd,IAAe,EACf,MAAM,GAAG,EAAE,EAC8C,EAAE;gBAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;qBACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;qBAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACb,MAAM,KAAK,GACT,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,KAAK,CAAC;oBAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,EAAE,KAAK,CAAC;oBAC1D,OAAO;wBACL,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;wBACjC,OAAO,EACL,OAAO,EAAE,IAAI,KAAK,MAAM;4BACtB,CAAC,CAAC,OAAO,CAAC,KAAK;4BACf,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;wBAC7C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ;qBAC1C,CAAC;gBACJ,CAAC,CAAC,CAAC;gBACL,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,KAAK,CAAC;gBACrE,IAAI,OAAO,EAAE,IAAI,KAAK,OAAO;oBAC3B,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO;wBAClC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO;4BAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBACvE,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;YACF,OAAO;gBACL,IAAI;gBACJ,OAAO,EAAE,MAAM,CAAC,KAAK;qBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;qBACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;wBACjD,MAAM,IAAI,GACR,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;4BAChC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI;4BACtB,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;wBACtB,MAAM,QAAQ,GACZ,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;4BAChC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK;4BACvB,CAAC,CAAC,SAAS,CAAC;wBAChB,OAAO;4BACL,IAAI,EAAE,SAAS,CAAC,GAAG;4BACnB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;4BACpB,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;gCAC9C,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gCACrC,CAAC,CAAC,EAAE,CAAC;4BACP,GAAG,aAAa,CAAC,IAAI,CAAC;4BACtB,QAAQ,EACN,CAAC,QAAQ;gCACT,CAAC,CACC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;oCAC9C,IAAI,CAAC,QAAQ,CACd;4BACH,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBACrD,CAAC;oBACJ,CAAC,CAAC,CAAC;oBACH,uEAAuE;oBACvE,wEAAwE;oBACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;wBAClD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAE,CAAC,KAAK,CAAC;wBAC5C,OAAO,CACL,OAAO,CAAC,QAAQ;4BAChB,OAAO,CAAC,IAAI,KAAK,MAAM;4BACvB,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;gCACvB,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM;gCAC3B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAClD,CAAC;oBACJ,CAAC,CAAC,CAAC;oBACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAC3B,EAAE,KAAK,CAAC;oBACT,OAAO;wBACL,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,aAAa,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;wBACrC,SAAS,EAAE,MAAM;6BACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;6BAC5C,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;6BAC7B,IAAI,EAAE;wBACT,MAAM,EAAE,CAAC,GAAG,EAAE;4BACZ,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CACtC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,CACrC,EAAE,KAAK,CAAC;4BACT,MAAM,MAAM,GACV,SAAS,EAAE,IAAI,KAAK,OAAO;gCACzB,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC;oCACvD,EAAE,KAAK;gCACX,CAAC,CAAC,SAAS,CAAC;4BAChB,OAAO,MAAM,EAAE,IAAI,KAAK,MAAM;gCAC5B,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;gCAC5B,CAAC,CAAC,EAAE,CAAC;wBACT,CAAC,CAAC,EAAE;wBACJ,OAAO,EACL,OAAO,EAAE,IAAI,KAAK,MAAM;4BACtB,CAAC,CAAC,OAAO,CAAC,KAAK;4BACf,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC;wBACpC,iBAAiB,EAAE;4BACjB,mBAAmB,EAAE,aAAa;4BAClC,MAAM,EACJ,uBAAuB;gCACvB,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK;gCACzB,QAAQ;qCACL,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;qCAC1C,IAAI,CAAC,IAAI,CAAC;gCACb,IAAI;4BACN,gBAAgB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gCACrC,IAAI,EAAE,CAAC,CAAC,IAAI;gCACZ,IAAI,EAAE,CAAC,CAAC,IAAI;gCACZ,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG;6BACjC,CAAC,CAAC;yBACJ;wBACD,QAAQ;wBACR,gEAAgE;wBAChE,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;4BAC7C,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;4BAC1B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC3C,OAAO,EAAE,KAAK,CAAC,OAAO;4BACtB,GAAG,EAAE,KAAK,CAAC,GAAG;yBACf,CAAC,CAAC;wBACH,OAAO,EAAE,QAAQ;6BACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;6BACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;wBACrB,8DAA8D;wBAC9D,0CAA0C;wBAC1C,OAAO,EAAE,CAAC,GAAG,EAAE;4BACb,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;4BACzC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gCACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;oCAAE,SAAS;gCAC/C,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO;oCAAE,SAAS;gCAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CACtC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,CACjC,EAAE,KAAK,CAAC;gCACT,IAAI,OAAO,EAAE,IAAI,KAAK,OAAO;oCAAE,SAAS;gCACxC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oCACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oCACnC,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;wCAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gCAC3D,CAAC;4BACH,CAAC;4BACD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;wBAC7D,CAAC,CAAC,EAAE;wBACJ,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;qBAC5B,CAAC;gBACJ,CAAC,CAAC;aACL,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
export { compile, type CompileDiagnostic, type
|
|
1
|
+
export { compile, type CompileDiagnostic, type CompileResult, type CompileWarning, type CompileOriginMapEntry, type CompileTerm, type CompileTermOverride, } from "./compile.ts";
|
|
2
|
+
export type { CompiledCheck, CompiledCheckStep } from "./checks.ts";
|
|
3
|
+
export { defaultToolchain, toolchain, type AdapterBindingTarget, type Toolchain, } from "./toolchain.ts";
|
|
2
4
|
export type { ProviderAdapter } from "@hyperscale0/adl";
|
|
3
5
|
export { parseProgram } from "./parse.ts";
|
|
4
6
|
export { lex, KEYWORDS } from "./lex.ts";
|
|
5
7
|
export { format } from "./format.ts";
|
|
6
|
-
export { bundledStandardLibrary, type StandardLibrary } from "./std-library.ts";
|
|
7
8
|
export { buildUdlCostManifest, type UdlCostManifest } from "./cost.ts";
|
|
8
9
|
export type { Program, Decl, AssignmentDecl, ObjectDecl, InstrumentDecl, Expr, Span, Diagnostic, } from "./ast.ts";
|
|
9
|
-
export { headerManifest, HEADER_NAMES } from "./headers.ts";
|
|
10
|
+
export { headerManifest, HEADER_NAMES, namedHeaders } from "./headers.ts";
|
|
10
11
|
export { templateGuide, templateIndex, type TemplateGuide, type TemplateIndexEntry, } from "./template-guide.ts";
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,iBAAiB,EACtB,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,KAAK,mBAAmB,GACzB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,KAAK,oBAAoB,EACzB,KAAK,SAAS,GACf,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AACvE,YAAY,EACV,OAAO,EACP,IAAI,EACJ,cAAc,EACd,UAAU,EACV,cAAc,EACd,IAAI,EACJ,IAAI,EACJ,UAAU,GACX,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,aAAa,EACb,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { compile, } from "./compile.js";
|
|
2
|
+
export { defaultToolchain, toolchain, } from "./toolchain.js";
|
|
2
3
|
export { parseProgram } from "./parse.js";
|
|
3
4
|
export { lex, KEYWORDS } from "./lex.js";
|
|
4
5
|
export { format } from "./format.js";
|
|
5
|
-
export { bundledStandardLibrary } from "./std-library.js";
|
|
6
6
|
export { buildUdlCostManifest } from "./cost.js";
|
|
7
|
-
export { headerManifest, HEADER_NAMES } from "./headers.js";
|
|
7
|
+
export { headerManifest, HEADER_NAMES, namedHeaders } from "./headers.js";
|
|
8
8
|
export { templateGuide, templateIndex, } from "./template-guide.js";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,GAOR,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,GAOR,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,gBAAgB,EAChB,SAAS,GAGV,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAwB,MAAM,WAAW,CAAC;AAYvE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,aAAa,EACb,aAAa,GAGd,MAAM,qBAAqB,CAAC"}
|
package/dist/src/keywords.d.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
export declare const KEYWORD_HELP: {
|
|
3
3
|
program: [string, string];
|
|
4
4
|
header: [string];
|
|
5
|
-
use: [string];
|
|
6
5
|
party: [string, string];
|
|
7
6
|
role: [string];
|
|
8
7
|
currency: [string];
|
|
@@ -11,12 +10,11 @@ export declare const KEYWORD_HELP: {
|
|
|
11
10
|
lifecycle: [string, string];
|
|
12
11
|
action: [string, string];
|
|
13
12
|
expose: [string, string];
|
|
14
|
-
hide: [string];
|
|
15
13
|
as: [string];
|
|
16
14
|
cap: [string, string];
|
|
17
15
|
of: [string];
|
|
18
16
|
when: [string];
|
|
19
|
-
|
|
17
|
+
checks: [string];
|
|
20
18
|
requires: [string, string];
|
|
21
19
|
invariants: [string, string];
|
|
22
20
|
moves: [string, string];
|
|
@@ -26,7 +24,7 @@ export declare const KEYWORD_HELP: {
|
|
|
26
24
|
is: [string];
|
|
27
25
|
has: [string];
|
|
28
26
|
family: [string];
|
|
29
|
-
check: [string];
|
|
27
|
+
check: [string, string];
|
|
30
28
|
result: [string];
|
|
31
29
|
maxAge: [string];
|
|
32
30
|
instruction: [string];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keywords.d.ts","sourceRoot":"","sources":["../../src/keywords.ts"],"names":[],"mappings":"AAEA,wDAAwD;AACxD,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"keywords.d.ts","sourceRoot":"","sources":["../../src/keywords.ts"],"names":[],"mappings":"AAEA,wDAAwD;AACxD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmIgD,CAAC"}
|
package/dist/src/keywords.js
CHANGED
|
@@ -5,7 +5,6 @@ export const KEYWORD_HELP = {
|
|
|
5
5
|
"Product contract",
|
|
6
6
|
],
|
|
7
7
|
header: ["Names a reusable library of instruments."],
|
|
8
|
-
use: ["Makes a header's instruments available to this program."],
|
|
9
8
|
party: [
|
|
10
9
|
"Declares a person, business or staff party. Staff authority requires a permission role.",
|
|
11
10
|
"Parties",
|
|
@@ -29,7 +28,6 @@ export const KEYWORD_HELP = {
|
|
|
29
28
|
"Makes an attached action available under a public name.",
|
|
30
29
|
"Object action bindings",
|
|
31
30
|
],
|
|
32
|
-
hide: ["Removes an action from the program's public actions."],
|
|
33
31
|
as: ["Gives an exposed action its public name."],
|
|
34
32
|
cap: ["Limits a percentage charge to a maximum money amount.", "Capped rate"],
|
|
35
33
|
of: [
|
|
@@ -38,8 +36,8 @@ export const KEYWORD_HELP = {
|
|
|
38
36
|
when: [
|
|
39
37
|
"Includes clauses for a selected enum value or a field present on a bound reference.",
|
|
40
38
|
],
|
|
41
|
-
|
|
42
|
-
"
|
|
39
|
+
checks: [
|
|
40
|
+
"Rules each attachment's tunables must pass, each with its own message and fix.",
|
|
43
41
|
],
|
|
44
42
|
requires: [
|
|
45
43
|
"Rejects an action unless the stated condition holds.",
|
|
@@ -64,7 +62,10 @@ export const KEYWORD_HELP = {
|
|
|
64
62
|
is: ["Selects rules for one named parameter choice."],
|
|
65
63
|
has: ["Selects clauses when a bound reference declares the named field."],
|
|
66
64
|
family: ["Names an instrument family or the family of an evidence check."],
|
|
67
|
-
check: [
|
|
65
|
+
check: [
|
|
66
|
+
"Declares a Build check: customers, steps and the balances they end on. Inside evidence, names the provider check the action requires.",
|
|
67
|
+
"Build checks",
|
|
68
|
+
],
|
|
68
69
|
result: ["Names the required outcome of an evidence check."],
|
|
69
70
|
maxAge: ["Limits how old the required evidence may be."],
|
|
70
71
|
instruction: ["Binds evidence to the captured boundary instruction."],
|
package/dist/src/keywords.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keywords.js","sourceRoot":"","sources":["../../src/keywords.ts"],"names":[],"mappings":"AAEA,wDAAwD;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE;QACP,mDAAmD;QACnD,kBAAkB;KACnB;IACD,MAAM,EAAE,CAAC,0CAA0C,CAAC;IACpD,
|
|
1
|
+
{"version":3,"file":"keywords.js","sourceRoot":"","sources":["../../src/keywords.ts"],"names":[],"mappings":"AAEA,wDAAwD;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE;QACP,mDAAmD;QACnD,kBAAkB;KACnB;IACD,MAAM,EAAE,CAAC,0CAA0C,CAAC;IACpD,KAAK,EAAE;QACL,yFAAyF;QACzF,SAAS;KACV;IACD,IAAI,EAAE,CAAC,gEAAgE,CAAC;IACxE,QAAQ,EAAE,CAAC,2DAA2D,CAAC;IACvE,UAAU,EAAE;QACV,8DAA8D;QAC9D,aAAa;KACd;IACD,MAAM,EAAE,CAAC,qDAAqD,EAAE,QAAQ,CAAC;IACzE,SAAS,EAAE;QACT,+DAA+D;QAC/D,WAAW;KACZ;IACD,MAAM,EAAE;QACN,kEAAkE;QAClE,SAAS;KACV;IACD,MAAM,EAAE;QACN,yDAAyD;QACzD,wBAAwB;KACzB;IACD,EAAE,EAAE,CAAC,0CAA0C,CAAC;IAChD,GAAG,EAAE,CAAC,uDAAuD,EAAE,aAAa,CAAC;IAC7E,EAAE,EAAE;QACF,2EAA2E;KAC5E;IACD,IAAI,EAAE;QACJ,qFAAqF;KACtF;IACD,MAAM,EAAE;QACN,gFAAgF;KACjF;IACD,QAAQ,EAAE;QACR,sDAAsD;QACtD,cAAc;KACf;IACD,UAAU,EAAE;QACV,qDAAqD;QACrD,YAAY;KACb;IACD,KAAK,EAAE;QACL,gEAAgE;QAChE,OAAO;KACR;IACD,IAAI,EAAE;QACJ,wEAAwE;KACzE;IACD,EAAE,EAAE,CAAC,iEAAiE,CAAC;IACvE,EAAE,EAAE;QACF,oEAAoE;QACpE,mBAAmB;KACpB;IACD,EAAE,EAAE,CAAC,+CAA+C,CAAC;IACrD,GAAG,EAAE,CAAC,kEAAkE,CAAC;IACzE,MAAM,EAAE,CAAC,gEAAgE,CAAC;IAC1E,KAAK,EAAE;QACL,uIAAuI;QACvI,cAAc;KACf;IACD,MAAM,EAAE,CAAC,kDAAkD,CAAC;IAC5D,MAAM,EAAE,CAAC,8CAA8C,CAAC;IACxD,WAAW,EAAE,CAAC,sDAAsD,CAAC;IACrE,QAAQ,EAAE,CAAC,yDAAyD,CAAC;IACrE,GAAG,EAAE,CAAC,iCAAiC,CAAC;IACxC,MAAM,EAAE;QACN,kEAAkE;QAClE,oBAAoB;KACrB;IACD,EAAE,EAAE,CAAC,wDAAwD,CAAC;IAC9D,KAAK,EAAE;QACL,6CAA6C;QAC7C,uBAAuB;KACxB;IACD,GAAG,EAAE;QACH,4DAA4D;QAC5D,uBAAuB;KACxB;IACD,KAAK,EAAE;QACL,sDAAsD;QACtD,mBAAmB;KACpB;IACD,OAAO,EAAE,CAAC,wDAAwD,CAAC;IACnE,GAAG,EAAE,CAAC,wDAAwD,CAAC;IAC/D,QAAQ,EAAE,CAAC,sDAAsD,CAAC;IAClE,QAAQ,EAAE;QACR,uEAAuE;QACvE,sBAAsB;KACvB;IACD,OAAO,EAAE;QACP,2CAA2C;QAC3C,2BAA2B;KAC5B;IACD,IAAI,EAAE,CAAC,2CAA2C,EAAE,wBAAwB,CAAC;IAC7E,IAAI,EAAE;QACJ,uEAAuE;QACvE,wBAAwB;KACzB;IACD,OAAO,EAAE,CAAC,+DAA+D,CAAC;IAC1E,GAAG,EAAE,CAAC,iDAAiD,EAAE,WAAW,CAAC;IACrE,MAAM,EAAE;QACN,uDAAuD;QACvD,aAAa;KACd;IACD,MAAM,EAAE;QACN,iEAAiE;QACjE,UAAU;KACX;IACD,MAAM,EAAE;QACN,2DAA2D;QAC3D,qBAAqB;KACtB;IACD,OAAO,EAAE;QACP,mEAAmE;QACnE,sBAAsB;KACvB;IACD,MAAM,EAAE;QACN,uDAAuD;QACvD,2BAA2B;KAC5B;IACD,OAAO,EAAE;QACP,gDAAgD;QAChD,sBAAsB;KACvB;CACsE,CAAC"}
|
package/dist/src/language.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { Span } from "./ast.ts";
|
|
2
|
-
import { type
|
|
3
|
-
export type { StandardLibrary } from "./std-library.ts";
|
|
2
|
+
import { type Toolchain } from "./toolchain.ts";
|
|
4
3
|
export type HsxTokenClass = "keyword" | "header" | "instrument" | "action" | "party" | "role" | "field" | "parameter" | "type" | "state" | "money" | "number" | "percent" | "duration" | "date" | "string" | "comment" | "operator" | "punctuation" | "name";
|
|
5
4
|
export interface HsxHighlight {
|
|
6
5
|
start: number;
|
|
@@ -20,7 +19,7 @@ export interface HsxHover {
|
|
|
20
19
|
header?: string;
|
|
21
20
|
}
|
|
22
21
|
/** Total, sorted, non-overlapping UTF-16 spans, including incomplete source. */
|
|
23
|
-
export declare function highlight(source: string,
|
|
22
|
+
export declare function highlight(source: string, toolchain?: Toolchain): HsxHighlight[];
|
|
24
23
|
/** Offsets use half-open UTF-16 spans. Whitespace and out-of-range offsets return null. */
|
|
25
|
-
export declare function describe(source: string, offset: number,
|
|
24
|
+
export declare function describe(source: string, offset: number, toolchain?: Toolchain): HsxHover | null;
|
|
26
25
|
//# sourceMappingURL=language.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../src/language.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../src/language.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA0B,IAAI,EAAE,MAAM,UAAU,CAAC;AAM7D,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAElE,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,QAAQ,GACR,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,MAAM,GACN,OAAO,GACP,WAAW,GACX,MAAM,GACN,OAAO,GACP,OAAO,GACP,QAAQ,GACR,SAAS,GACT,UAAU,GACV,MAAM,GACN,QAAQ,GACR,SAAS,GACT,UAAU,GACV,aAAa,GACb,MAAM,CAAC;AACX,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,aAAa,CAAC;CACtB;AACD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAolBD,gFAAgF;AAChF,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,SAA4B,GACtC,YAAY,EAAE,CAEhB;AA+BD,2FAA2F;AAC3F,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,SAA4B,GACtC,QAAQ,GAAG,IAAI,CAkCjB"}
|
package/dist/src/language.js
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
|
+
import { compile } from "./compile.js";
|
|
1
2
|
import { headerManifest } from "./headers.js";
|
|
2
3
|
import { KEYWORD_HELP } from "./keywords.js";
|
|
3
4
|
import { KEYWORDS, scan } from "./lex.js";
|
|
4
5
|
import { parseProgram } from "./parse.js";
|
|
5
|
-
import {
|
|
6
|
+
import { defaultToolchain } from "./toolchain.js";
|
|
6
7
|
const keywords = new Set(KEYWORDS);
|
|
8
|
+
const CHECK_WORDS = new Set([
|
|
9
|
+
"customer",
|
|
10
|
+
"organization",
|
|
11
|
+
"funded",
|
|
12
|
+
"binds",
|
|
13
|
+
"clock",
|
|
14
|
+
"until",
|
|
15
|
+
"record",
|
|
16
|
+
"close",
|
|
17
|
+
"remember",
|
|
18
|
+
"status",
|
|
19
|
+
"balances",
|
|
20
|
+
"expect",
|
|
21
|
+
"held",
|
|
22
|
+
"pending",
|
|
23
|
+
]);
|
|
24
|
+
const CHECK_HELP = "A check step. Promote runs every check in an isolated world and refuses a Build whose check fails.";
|
|
7
25
|
const types = new Set([
|
|
8
26
|
"money",
|
|
9
27
|
"account",
|
|
@@ -19,11 +37,11 @@ const types = new Set([
|
|
|
19
37
|
"list",
|
|
20
38
|
"policy",
|
|
21
39
|
]);
|
|
22
|
-
// Cache by source bytes, not
|
|
40
|
+
// Cache by source bytes, not toolchain identity: callers can edit their own headers.
|
|
23
41
|
const headerCache = new Map();
|
|
24
|
-
function header(name,
|
|
42
|
+
function header(name, toolchain) {
|
|
25
43
|
try {
|
|
26
|
-
const source =
|
|
44
|
+
const source = toolchain.std.get(name);
|
|
27
45
|
if (!source)
|
|
28
46
|
return;
|
|
29
47
|
const cached = headerCache.get(name);
|
|
@@ -31,7 +49,7 @@ function header(name, library) {
|
|
|
31
49
|
return cached.value;
|
|
32
50
|
let value;
|
|
33
51
|
try {
|
|
34
|
-
value = headerManifest(
|
|
52
|
+
value = headerManifest(new Map([[name, source]]), [name]).headers[0];
|
|
35
53
|
}
|
|
36
54
|
catch {
|
|
37
55
|
/* Half-written headers have no metadata yet. */
|
|
@@ -64,17 +82,33 @@ function instrumentHelp(object, owner) {
|
|
|
64
82
|
label: a.name,
|
|
65
83
|
value: `${a.summary} Actor: ${a.actor}`,
|
|
66
84
|
})),
|
|
85
|
+
...object.checks.map((check) => ({
|
|
86
|
+
label: "check",
|
|
87
|
+
value: `${check.rule}${check.when ? ` when ${check.when.selector} is ${check.when.is}` : ""}: ${check.message}`,
|
|
88
|
+
})),
|
|
67
89
|
],
|
|
68
90
|
};
|
|
69
91
|
}
|
|
70
|
-
function analyze(source,
|
|
92
|
+
function analyze(source, toolchain) {
|
|
71
93
|
const all = scan(source).tokens.filter((t) => t.kind !== "eof");
|
|
72
94
|
const tokens = all.filter((t) => t.kind !== "comment");
|
|
73
95
|
const helps = new Map();
|
|
74
96
|
const classes = new Map();
|
|
75
97
|
const bindings = new Map();
|
|
76
|
-
|
|
77
|
-
const headerHelp =
|
|
98
|
+
// A qualified name such as booking.reservation names its header directly.
|
|
99
|
+
const headerHelp = (value) => ({
|
|
100
|
+
kind: "header",
|
|
101
|
+
title: value.name,
|
|
102
|
+
header: value.name,
|
|
103
|
+
summary: value.objects
|
|
104
|
+
.map((o) => o.summary)
|
|
105
|
+
.slice(0, 2)
|
|
106
|
+
.join(" "),
|
|
107
|
+
details: value.objects.map((o) => ({
|
|
108
|
+
label: o.qualifiedName,
|
|
109
|
+
value: o.summary,
|
|
110
|
+
})),
|
|
111
|
+
});
|
|
78
112
|
const whole = { start: 0, end: source.length };
|
|
79
113
|
const text = (span) => source.slice(span.start, span.end);
|
|
80
114
|
const mark = (token, kind, help) => {
|
|
@@ -112,29 +146,6 @@ function analyze(source, library) {
|
|
|
112
146
|
for (let i = 0; i < tokens.length; i++) {
|
|
113
147
|
const token = tokens[i];
|
|
114
148
|
const previous = tokens[i - 1]?.text;
|
|
115
|
-
if (previous === "use") {
|
|
116
|
-
const value = header(token.text, library);
|
|
117
|
-
if (value)
|
|
118
|
-
imports.set(token.text, value);
|
|
119
|
-
mark(token, "header", value
|
|
120
|
-
? {
|
|
121
|
-
kind: "header",
|
|
122
|
-
title: value.name,
|
|
123
|
-
header: value.name,
|
|
124
|
-
summary: value.objects
|
|
125
|
-
.map((o) => o.summary)
|
|
126
|
-
.slice(0, 2)
|
|
127
|
-
.join(" "),
|
|
128
|
-
details: value.objects.map((o) => ({
|
|
129
|
-
label: o.qualifiedName,
|
|
130
|
-
value: o.summary,
|
|
131
|
-
})),
|
|
132
|
-
}
|
|
133
|
-
: undefined);
|
|
134
|
-
const help = helps.get(token.span.start);
|
|
135
|
-
if (help)
|
|
136
|
-
headerHelp.set(token.text, help);
|
|
137
|
-
}
|
|
138
149
|
if (previous === "program" ||
|
|
139
150
|
previous === "object" ||
|
|
140
151
|
previous === "header")
|
|
@@ -148,7 +159,6 @@ function analyze(source, library) {
|
|
|
148
159
|
previous === "action" ||
|
|
149
160
|
previous === "attach" ||
|
|
150
161
|
previous === "expose" ||
|
|
151
|
-
previous === "hide" ||
|
|
152
162
|
previous === "as")
|
|
153
163
|
mark(token, previous === "instrument" || previous === "attach"
|
|
154
164
|
? "instrument"
|
|
@@ -167,9 +177,7 @@ function analyze(source, library) {
|
|
|
167
177
|
}
|
|
168
178
|
const attachment = (target, scope) => {
|
|
169
179
|
const [owner, name] = target.split(".");
|
|
170
|
-
const object =
|
|
171
|
-
.get(owner ?? "")
|
|
172
|
-
?.objects.find((o) => o.name === name);
|
|
180
|
+
const object = header(owner ?? "", toolchain)?.objects.find((o) => o.name === name);
|
|
173
181
|
if (!object)
|
|
174
182
|
return;
|
|
175
183
|
for (const parameter of object.tunables)
|
|
@@ -282,6 +290,30 @@ function analyze(source, library) {
|
|
|
282
290
|
walk(expr.cap, scope);
|
|
283
291
|
}
|
|
284
292
|
};
|
|
293
|
+
const at = (span) => tokens[atStart.get(span.start) ?? -1];
|
|
294
|
+
// A check's step words are keywords inside the check alone.
|
|
295
|
+
const checkHelp = (check) => {
|
|
296
|
+
for (const token of tokens)
|
|
297
|
+
if (token.span.start > check.span.start &&
|
|
298
|
+
token.span.end < check.span.end &&
|
|
299
|
+
CHECK_WORDS.has(token.text))
|
|
300
|
+
mark(token, "keyword", {
|
|
301
|
+
kind: "keyword",
|
|
302
|
+
title: token.text,
|
|
303
|
+
summary: CHECK_HELP,
|
|
304
|
+
});
|
|
305
|
+
for (const statement of check.statements) {
|
|
306
|
+
if (statement.kind === "customer")
|
|
307
|
+
mark(at(statement.id.span), "party", declared(statement.id.name, "party", check.span, statement.id.span, `customer ${statement.id.name}`, `${statement.title}, a customer of check "${check.name}".`));
|
|
308
|
+
if (statement.kind === "action") {
|
|
309
|
+
mark(at(statement.action.span), "action");
|
|
310
|
+
if (statement.state)
|
|
311
|
+
mark(at(statement.state.span), "state");
|
|
312
|
+
}
|
|
313
|
+
if (statement.kind === "clock" && statement.until)
|
|
314
|
+
mark(at(statement.until.state.span), "state");
|
|
315
|
+
}
|
|
316
|
+
};
|
|
285
317
|
// The parser owns declarations and scopes. A parse failure leaves lexical context intact.
|
|
286
318
|
try {
|
|
287
319
|
const parsed = parseProgram(source);
|
|
@@ -308,6 +340,8 @@ function analyze(source, library) {
|
|
|
308
340
|
walk(decl.body, decl.span);
|
|
309
341
|
}
|
|
310
342
|
}
|
|
343
|
+
for (const check of parsed.program.checks)
|
|
344
|
+
checkHelp(check);
|
|
311
345
|
}
|
|
312
346
|
catch {
|
|
313
347
|
/* Arbitrary editor input must not interrupt typing. */
|
|
@@ -320,12 +354,13 @@ function analyze(source, library) {
|
|
|
320
354
|
const previous = tokens[i - 1]?.text;
|
|
321
355
|
const next = tokens[i + 1]?.text;
|
|
322
356
|
const owner = previous === "." ? tokens[i - 2]?.text : undefined;
|
|
323
|
-
const imported = owner ?
|
|
357
|
+
const imported = owner ? header(owner, toolchain) : undefined;
|
|
324
358
|
const object = imported?.objects.find((o) => o.name === token.text);
|
|
359
|
+
const named = next === "." ? header(token.text, toolchain) : undefined;
|
|
325
360
|
if (object && owner)
|
|
326
361
|
mark(token, "instrument", instrumentHelp(object, owner));
|
|
327
|
-
else if (
|
|
328
|
-
mark(token, "header", headerHelp
|
|
362
|
+
else if (named)
|
|
363
|
+
mark(token, "header", headerHelp(named));
|
|
329
364
|
else if (!helps.has(token.span.start)) {
|
|
330
365
|
const candidates = bindings
|
|
331
366
|
.get(token.text)
|
|
@@ -342,7 +377,6 @@ function analyze(source, library) {
|
|
|
342
377
|
const isReference = !keywords.has(token.text) ||
|
|
343
378
|
previous === "." ||
|
|
344
379
|
previous === "expose" ||
|
|
345
|
-
previous === "hide" ||
|
|
346
380
|
next === ":" ||
|
|
347
381
|
[":", "=", "fee", "moves", "from", "to", "(", ",", "["].includes(previous ?? "") ||
|
|
348
382
|
binding?.declaration === token.span.start;
|
|
@@ -406,36 +440,65 @@ function analyze(source, library) {
|
|
|
406
440
|
}
|
|
407
441
|
// One editor document is retained. Hovering never reparses the same keystroke.
|
|
408
442
|
let last;
|
|
409
|
-
function analysis(source,
|
|
410
|
-
//
|
|
411
|
-
if (
|
|
412
|
-
last?.source === source &&
|
|
413
|
-
last.library === library)
|
|
443
|
+
function analysis(source, toolchain) {
|
|
444
|
+
// A test toolchain may change its headers in place; the default never does.
|
|
445
|
+
if (toolchain === defaultToolchain && last?.source === source)
|
|
414
446
|
return last.result;
|
|
415
|
-
const result = analyze(source,
|
|
416
|
-
if (
|
|
417
|
-
last = { source,
|
|
447
|
+
const result = analyze(source, toolchain);
|
|
448
|
+
if (toolchain === defaultToolchain)
|
|
449
|
+
last = { source, result };
|
|
418
450
|
return result;
|
|
419
451
|
}
|
|
420
452
|
/** Total, sorted, non-overlapping UTF-16 spans, including incomplete source. */
|
|
421
|
-
export function highlight(source,
|
|
422
|
-
return analysis(source,
|
|
453
|
+
export function highlight(source, toolchain = defaultToolchain) {
|
|
454
|
+
return analysis(source, toolchain).highlights.map((span) => ({ ...span }));
|
|
423
455
|
}
|
|
456
|
+
// The terms of the attach line around an offset, from the last valid compile.
|
|
457
|
+
let compiled;
|
|
458
|
+
function termsAt(source, offset, toolchain) {
|
|
459
|
+
if (compiled?.source !== source || compiled.toolchain !== toolchain) {
|
|
460
|
+
const origins = compile(source, toolchain).artifacts?.originMap ?? [];
|
|
461
|
+
compiled = {
|
|
462
|
+
source,
|
|
463
|
+
toolchain,
|
|
464
|
+
// A record shares its attach line's span; the attach comes first.
|
|
465
|
+
terms: (at) => origins.find((entry) => entry.terms && entry.span.start <= at && at < entry.span.end)?.terms,
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
return compiled.terms(offset);
|
|
469
|
+
}
|
|
470
|
+
const inForce = (term) => `${term.text} (${term.from === "std" ? `${term.source} default` : term.from === "party" ? "the party of that name" : "set by the program"})`;
|
|
424
471
|
/** Offsets use half-open UTF-16 spans. Whitespace and out-of-range offsets return null. */
|
|
425
|
-
export function describe(source, offset,
|
|
472
|
+
export function describe(source, offset, toolchain = defaultToolchain) {
|
|
426
473
|
if (!Number.isInteger(offset) || offset < 0 || offset >= source.length)
|
|
427
474
|
return null;
|
|
428
|
-
const result = analysis(source,
|
|
475
|
+
const result = analysis(source, toolchain);
|
|
429
476
|
const span = result.highlights.find((s) => s.start <= offset && offset < s.end);
|
|
430
477
|
const hover = span && result.hovers.get(span.start);
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
:
|
|
478
|
+
if (!hover)
|
|
479
|
+
return null;
|
|
480
|
+
const details = hover.details?.map((d) => ({ ...d }));
|
|
481
|
+
// A std tunable and an attach line show the value in force and who set it.
|
|
482
|
+
const terms = (hover.kind === "parameter" && hover.header) ||
|
|
483
|
+
(hover.kind === "instrument" &&
|
|
484
|
+
source.lastIndexOf("attach", offset) > source.lastIndexOf("{", offset))
|
|
485
|
+
? termsAt(source, offset, toolchain)
|
|
486
|
+
: undefined;
|
|
487
|
+
const term = terms?.find((t) => t.name === hover.title);
|
|
488
|
+
const added = hover.kind === "parameter"
|
|
489
|
+
? term
|
|
490
|
+
? [{ label: "In force", value: inForce(term) }]
|
|
491
|
+
: []
|
|
492
|
+
: (terms ?? []).map((t) => ({
|
|
493
|
+
label: `${t.name} in force`,
|
|
494
|
+
value: inForce(t),
|
|
495
|
+
}));
|
|
496
|
+
return {
|
|
497
|
+
...hover,
|
|
498
|
+
span: { ...hover.span },
|
|
499
|
+
...(details || added.length
|
|
500
|
+
? { details: [...(details ?? []), ...added] }
|
|
501
|
+
: {}),
|
|
502
|
+
};
|
|
440
503
|
}
|
|
441
504
|
//# sourceMappingURL=language.js.map
|