@hyperscale0/hsx 1.0.0-beta.1 → 1.0.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/CHANGELOG.md +58 -9
- package/LICENSING.md +3 -3
- package/README.md +39 -149
- package/TRADEMARKS.md +4 -4
- package/bin/hsx.ts +2 -0
- package/dist/bin/hsx.js +2 -0
- package/dist/bin/hsx.js.map +1 -1
- package/dist/src/ast.d.ts +135 -10
- package/dist/src/ast.d.ts.map +1 -1
- package/dist/src/ast.js +24 -0
- package/dist/src/ast.js.map +1 -1
- package/dist/src/cli.d.ts +4 -1
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +172 -16
- package/dist/src/cli.js.map +1 -1
- package/dist/src/compile.d.ts +42 -7
- package/dist/src/compile.d.ts.map +1 -1
- package/dist/src/compile.js +82 -16
- package/dist/src/compile.js.map +1 -1
- package/dist/src/cost.d.ts +78 -0
- package/dist/src/cost.d.ts.map +1 -0
- package/dist/src/cost.js +369 -0
- package/dist/src/cost.js.map +1 -0
- package/dist/src/diagnostics.d.ts +11 -0
- package/dist/src/diagnostics.d.ts.map +1 -0
- package/dist/src/diagnostics.js +420 -0
- package/dist/src/diagnostics.js.map +1 -0
- package/dist/src/emit.d.ts +34 -0
- package/dist/src/emit.d.ts.map +1 -0
- package/dist/src/emit.js +137 -0
- package/dist/src/emit.js.map +1 -0
- package/dist/src/entry-overrides.d.ts +17 -3
- package/dist/src/entry-overrides.d.ts.map +1 -1
- package/dist/src/entry-overrides.js +180 -35
- package/dist/src/entry-overrides.js.map +1 -1
- package/dist/src/format.d.ts +10 -0
- package/dist/src/format.d.ts.map +1 -0
- package/dist/src/format.js +183 -0
- package/dist/src/format.js.map +1 -0
- package/dist/src/index.d.ts +11 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +10 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/ir.d.ts +66 -0
- package/dist/src/ir.d.ts.map +1 -0
- package/dist/src/ir.js +15 -0
- package/dist/src/ir.js.map +1 -0
- package/dist/src/lex.d.ts +9 -1
- package/dist/src/lex.d.ts.map +1 -1
- package/dist/src/lex.js +50 -4
- package/dist/src/lex.js.map +1 -1
- package/dist/src/limits.d.ts +2 -3
- package/dist/src/limits.d.ts.map +1 -1
- package/dist/src/limits.js +2 -3
- package/dist/src/limits.js.map +1 -1
- package/dist/src/lsp/server.d.ts +32 -0
- package/dist/src/lsp/server.d.ts.map +1 -0
- package/dist/src/lsp/server.js +391 -0
- package/dist/src/lsp/server.js.map +1 -0
- package/dist/src/modules.d.ts +38 -0
- package/dist/src/modules.d.ts.map +1 -0
- package/dist/src/modules.js +368 -0
- package/dist/src/modules.js.map +1 -0
- package/dist/src/parse.d.ts.map +1 -1
- package/dist/src/parse.js +590 -17
- package/dist/src/parse.js.map +1 -1
- package/dist/src/std-bundle.d.ts +2 -0
- package/dist/src/std-bundle.d.ts.map +1 -0
- package/dist/src/std-bundle.js +88 -0
- package/dist/src/std-bundle.js.map +1 -0
- package/dist/src/std-library.d.ts +5 -0
- package/dist/src/std-library.d.ts.map +1 -0
- package/dist/src/std-library.js +9 -0
- package/dist/src/std-library.js.map +1 -0
- package/dist/src/typecheck.d.ts +8 -0
- package/dist/src/typecheck.d.ts.map +1 -0
- package/dist/src/typecheck.js +2958 -0
- package/dist/src/typecheck.js.map +1 -0
- package/dist/src/version.d.ts +4 -15
- package/dist/src/version.d.ts.map +1 -1
- package/dist/src/version.js +4 -15
- package/dist/src/version.js.map +1 -1
- package/docs/README.md +26 -0
- package/docs/guide/01-first-program.md +24 -0
- package/docs/guide/02-money.md +25 -0
- package/docs/guide/03-instruments.md +22 -0
- package/docs/guide/04-lifecycles.md +25 -0
- package/docs/guide/05-fees-and-splits.md +45 -0
- package/docs/guide/06-schedules.md +22 -0
- package/docs/guide/07-composition.md +46 -0
- package/docs/guide/08-writing-a-module.md +26 -0
- package/docs/guide/09-cost.md +24 -0
- package/docs/guide/10-diagnostics.md +27 -0
- package/docs/llms-full.txt +1739 -0
- package/docs/llms.txt +45 -0
- package/docs/playground.md +54 -0
- package/docs/reference/cli.md +35 -0
- package/docs/reference/diagnostics.md +619 -0
- package/docs/reference/grammar.md +39 -0
- package/docs/reference/std/advance.md +35 -0
- package/docs/reference/std/cancellable_booking.md +35 -0
- package/docs/reference/std/captured_payment.md +43 -0
- package/docs/reference/std/conditional_disbursement.md +33 -0
- package/docs/reference/std/credit_facility.md +35 -0
- package/docs/reference/std/held_payment.md +64 -0
- package/docs/reference/std/instant_transfer.md +30 -0
- package/docs/reference/std/metered.md +27 -0
- package/docs/reference/std/pooled_split.md +26 -0
- package/docs/reference/std/premium_forward.md +39 -0
- package/docs/reference/std/reconciled_payout.md +33 -0
- package/docs/reference/std/recurring_collection.md +25 -0
- package/docs/reference/std/rotating_pool.md +42 -0
- package/docs/reference/std/scheduled.md +51 -0
- package/docs/reference/std/security_deposit.md +46 -0
- package/docs/reference/std/settlement_batch.md +42 -0
- package/docs/reference/std/swap.md +46 -0
- package/docs/reference/std/threshold_pool.md +47 -0
- package/docs/reference/std/weighted_distribution.md +39 -0
- package/docs/reference/types.md +20 -0
- package/docs/reference/udl-output.md +13 -0
- package/docs/sessions/2026-09-02-two-instruments.hsx +21 -0
- package/docs/sessions/2026-09-02-two-instruments.md +41 -0
- package/examples/01-first-program/README.md +45 -0
- package/examples/01-first-program/tip-jar.hsx +17 -0
- package/examples/02-imports-and-archetypes/README.md +96 -0
- package/examples/02-imports-and-archetypes/photo-booth.hsx +37 -0
- package/examples/03-diagnostics/README.md +68 -0
- package/examples/03-diagnostics/corner-shop-fixed.hsx +22 -0
- package/examples/03-diagnostics/corner-shop.hsx +19 -0
- package/examples/04-complete-product/README.md +84 -0
- package/examples/04-complete-product/study-hall.hsx +67 -0
- package/examples/05-watch-club/README.md +9 -0
- package/examples/05-watch-club/watch-club.hsx +124 -0
- package/examples/README.md +18 -0
- package/examples/advance/README.md +3 -0
- package/examples/advance/advance.hsx +13 -0
- package/examples/advance/advance.udl +339 -0
- package/examples/cancellable_booking/README.md +3 -0
- package/examples/cancellable_booking/cancellable_booking.hsx +14 -0
- package/examples/cancellable_booking/cancellable_booking.udl +391 -0
- package/examples/captured_payment/README.md +3 -0
- package/examples/captured_payment/captured_payment.hsx +21 -0
- package/examples/captured_payment/captured_payment.udl +677 -0
- package/examples/conditional_disbursement/README.md +3 -0
- package/examples/conditional_disbursement/conditional_disbursement.hsx +17 -0
- package/examples/conditional_disbursement/conditional_disbursement.udl +412 -0
- package/examples/cost-table.json +386 -0
- package/examples/credit_facility/README.md +3 -0
- package/examples/credit_facility/credit_facility.hsx +27 -0
- package/examples/credit_facility/credit_facility.udl +1373 -0
- package/examples/held_payment/README.md +3 -0
- package/examples/held_payment/held_payment.hsx +13 -0
- package/examples/held_payment/held_payment.udl +507 -0
- package/examples/instant_transfer/README.md +3 -0
- package/examples/instant_transfer/instant_transfer.hsx +16 -0
- package/examples/instant_transfer/instant_transfer.udl +364 -0
- package/examples/metered/README.md +3 -0
- package/examples/metered/metered.hsx +13 -0
- package/examples/metered/metered.udl +247 -0
- package/examples/pooled_split/README.md +3 -0
- package/examples/pooled_split/pooled_split.hsx +15 -0
- package/examples/pooled_split/pooled_split.udl +425 -0
- package/examples/premium_forward/README.md +3 -0
- package/examples/premium_forward/premium_forward.hsx +19 -0
- package/examples/premium_forward/premium_forward.udl +594 -0
- package/examples/reconciled_payout/README.md +3 -0
- package/examples/reconciled_payout/reconciled_payout.hsx +13 -0
- package/examples/reconciled_payout/reconciled_payout.udl +303 -0
- package/examples/recurring_collection/README.md +3 -0
- package/examples/recurring_collection/recurring_collection.hsx +21 -0
- package/examples/recurring_collection/recurring_collection.udl +1130 -0
- package/examples/rotating_pool/README.md +3 -0
- package/examples/rotating_pool/rotating_pool.hsx +18 -0
- package/examples/rotating_pool/rotating_pool.udl +4352 -0
- package/examples/scheduled/README.md +3 -0
- package/examples/scheduled/scheduled.hsx +12 -0
- package/examples/scheduled/scheduled.udl +335 -0
- package/examples/security_deposit/README.md +3 -0
- package/examples/security_deposit/security_deposit.hsx +21 -0
- package/examples/security_deposit/security_deposit.udl +293 -0
- package/examples/settlement_batch/README.md +3 -0
- package/examples/settlement_batch/settlement_batch.hsx +19 -0
- package/examples/settlement_batch/settlement_batch.udl +753 -0
- package/examples/swap/README.md +3 -0
- package/examples/swap/swap.hsx +19 -0
- package/examples/swap/swap.udl +876 -0
- package/examples/threshold_pool/README.md +3 -0
- package/examples/threshold_pool/threshold_pool.hsx +16 -0
- package/examples/threshold_pool/threshold_pool.udl +667 -0
- package/examples/weighted_distribution/README.md +3 -0
- package/examples/weighted_distribution/weighted_distribution.hsx +20 -0
- package/examples/weighted_distribution/weighted_distribution.udl +337 -0
- package/package.json +27 -6
- package/skills/hsx/SKILL.md +483 -0
- package/src/ast.ts +193 -9
- package/src/cli.ts +191 -20
- package/src/compile.ts +160 -23
- package/src/cost.ts +579 -0
- package/src/diagnostics.ts +442 -0
- package/src/emit.ts +201 -0
- package/src/entry-overrides.ts +263 -48
- package/src/format.ts +261 -0
- package/src/index.ts +34 -4
- package/src/ir.ts +99 -0
- package/src/lex.ts +59 -4
- package/src/limits.ts +2 -3
- package/src/lsp/server.ts +460 -0
- package/src/modules.ts +446 -0
- package/src/parse.ts +655 -21
- package/src/std-bundle.ts +91 -0
- package/src/std-library.ts +12 -0
- package/src/typecheck.ts +3876 -0
- package/src/version.ts +4 -16
- package/std/SEMANTICS.md +130 -0
- package/std/settlements/advance.hsx +177 -0
- package/std/settlements/cancellable_booking.hsx +87 -0
- package/std/settlements/captured_payment.hsx +144 -0
- package/std/settlements/conditional_disbursement.hsx +185 -0
- package/std/settlements/credit_facility.hsx +167 -0
- package/std/settlements/held_payment.hsx +578 -0
- package/std/settlements/index.hsx +3 -0
- package/std/settlements/instant_transfer.hsx +190 -0
- package/std/settlements/metered.hsx +67 -0
- package/std/settlements/pooled_split.hsx +68 -0
- package/std/settlements/premium_forward.hsx +257 -0
- package/std/settlements/reconciled_payout.hsx +77 -0
- package/std/settlements/recurring_collection.hsx +27 -0
- package/std/settlements/rotating_pool.hsx +252 -0
- package/std/settlements/scheduled.hsx +641 -0
- package/std/settlements/security_deposit.hsx +166 -0
- package/std/settlements/settlement_batch.hsx +122 -0
- package/std/settlements/swap.hsx +1114 -0
- package/std/settlements/threshold_pool.hsx +221 -0
- package/std/settlements/weighted_distribution.hsx +141 -0
- package/dist/src/archetypes.d.ts +0 -17
- package/dist/src/archetypes.d.ts.map +0 -1
- package/dist/src/archetypes.js +0 -327
- package/dist/src/archetypes.js.map +0 -1
- package/dist/src/check.d.ts +0 -12
- package/dist/src/check.d.ts.map +0 -1
- package/dist/src/check.js +0 -1910
- package/dist/src/check.js.map +0 -1
- package/dist/src/lower.d.ts +0 -146
- package/dist/src/lower.d.ts.map +0 -1
- package/dist/src/lower.js +0 -4570
- package/dist/src/lower.js.map +0 -1
- package/dist/src/model.d.ts +0 -467
- package/dist/src/model.d.ts.map +0 -1
- package/dist/src/model.js +0 -15
- package/dist/src/model.js.map +0 -1
- package/spec/hsx-ir.schema.json +0 -920
- package/src/archetypes.ts +0 -340
- package/src/check.ts +0 -2938
- package/src/lower.ts +0 -5416
- package/src/model.ts +0 -519
package/dist/src/ast.js
CHANGED
|
@@ -19,6 +19,30 @@ export function lineColAt(source, offset) {
|
|
|
19
19
|
}
|
|
20
20
|
return { column: clamped - lineStart + 1, line };
|
|
21
21
|
}
|
|
22
|
+
const utf8Encoder = new TextEncoder();
|
|
23
|
+
/**
|
|
24
|
+
* Convert a UTF-8 byte offset to a UTF-16 code-unit offset over a string.
|
|
25
|
+
* Walks Unicode code points, counting UTF-8 bytes and UTF-16 code units.
|
|
26
|
+
* Clamps to [0, source.length].
|
|
27
|
+
*/
|
|
28
|
+
export function byteOffsetToCodeUnit(source, byteOffset) {
|
|
29
|
+
if (byteOffset <= 0)
|
|
30
|
+
return 0;
|
|
31
|
+
let currentByte = 0;
|
|
32
|
+
let codeUnit = 0;
|
|
33
|
+
for (const char of source) {
|
|
34
|
+
const charBytes = utf8Encoder.encode(char).length;
|
|
35
|
+
if (currentByte + charBytes > byteOffset) {
|
|
36
|
+
return codeUnit;
|
|
37
|
+
}
|
|
38
|
+
currentByte += charBytes;
|
|
39
|
+
codeUnit += char.length;
|
|
40
|
+
if (currentByte === byteOffset) {
|
|
41
|
+
return codeUnit;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return source.length;
|
|
45
|
+
}
|
|
22
46
|
/** Scan a source once for the offset every line starts at. */
|
|
23
47
|
export function lineIndex(source) {
|
|
24
48
|
const starts = [0];
|
package/dist/src/ast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAgBH,iEAAiE;AACjE,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,MAAc;IACtD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAChD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,CAAC;YACV,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;AACnD,CAAC;AAeD,8DAA8D;AAC9D,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,KAAgB,EAAE,MAAc;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACnC,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,IAAK,KAAK,CAAC,MAAM,CAAC,MAAM,CAAY,IAAI,OAAO;YAAE,GAAG,GAAG,MAAM,CAAC;;YACzD,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,GAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAY,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;AAChF,CAAC"}
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The `hsx` command line
|
|
2
|
+
* The `hsx` command line over the one compiler entry point and catalog.
|
|
3
3
|
*
|
|
4
4
|
* `check` prints diagnostics and says nothing else; `build` writes the
|
|
5
5
|
* compiled artifacts as JSON. Neither reads the environment, neither touches
|
|
@@ -15,6 +15,9 @@ export interface Io {
|
|
|
15
15
|
readonly out: (line: string) => void;
|
|
16
16
|
readonly readFile: (path: string) => Promise<string>;
|
|
17
17
|
readonly writeFile: (path: string, contents: string) => Promise<void>;
|
|
18
|
+
readonly stdin?: NodeJS.ReadableStream;
|
|
19
|
+
readonly stdout?: NodeJS.WritableStream;
|
|
18
20
|
}
|
|
21
|
+
export declare const USAGE_TEXT = "hsx 1.0.0, the HSX compiler\n\nUsage:\n hsx check <file.hsx> [--strict]\n hsx build <file.hsx> [--out <file.json>] [--strict]\n hsx cost <file.hsx> [--json] [--out <file.json>] [--strict]\n hsx explain <HSX####>\n hsx format <file.hsx>\n hsx lsp\n hsx --version\n hsx --help\n\nCommands:\n check Compile and report diagnostics. Prints nothing when the program is clean.\n build Compile and write canonical UDL as JSON.\n cost Compile and print the version-pinned cost manifest as a table or JSON.\n explain Print one diagnostic title, fix, and source example.\n format Print the source in the one canonical HSX style.\n lsp Run the language server over stdin and stdout.\n\nOptions:\n --json Print the cost manifest as JSON instead of a table.\n --out <file> Write build or cost JSON to this path instead of stdout.\n --strict Treat warning-severity diagnostics as failures.\n\nExit codes:\n 0 the program compiled (verdict valid, or warning without --strict)\n 1 the program was refused (verdict invalid, or warning with --strict)\n 2 the command line or the input file could not be used";
|
|
19
22
|
export declare function runCli(argv: readonly string[], io: Io): Promise<number>;
|
|
20
23
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/src/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,kEAAkE;AAClE,MAAM,WAAW,EAAE;IACjB,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;CACzC;AAUD,eAAO,MAAM,UAAU,qnCA4BmC,CAAC;AAE3D,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAsG7E"}
|
package/dist/src/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The `hsx` command line
|
|
2
|
+
* The `hsx` command line over the one compiler entry point and catalog.
|
|
3
3
|
*
|
|
4
4
|
* `check` prints diagnostics and says nothing else; `build` writes the
|
|
5
5
|
* compiled artifacts as JSON. Neither reads the environment, neither touches
|
|
@@ -9,8 +9,12 @@
|
|
|
9
9
|
* spec drives the real code paths with an in-memory filesystem instead of
|
|
10
10
|
* asserting on a subprocess's scrollback.
|
|
11
11
|
*/
|
|
12
|
+
import { fileURLToPath } from "node:url";
|
|
12
13
|
import { compile } from "./compile.js";
|
|
13
|
-
import {
|
|
14
|
+
import { hsxDiagnostics } from "./diagnostics.js";
|
|
15
|
+
import { format } from "./format.js";
|
|
16
|
+
import { startLspServer } from "./lsp/server.js";
|
|
17
|
+
import { HSX_TARGET_UDL_VERSION, HSX_VERSION } from "./version.js";
|
|
14
18
|
/**
|
|
15
19
|
* Exit codes. `warning` exits 0 because a lint note is not a failure; pass
|
|
16
20
|
* `--strict` to make it one.
|
|
@@ -18,20 +22,29 @@ import { HSX_IR_VERSION, HSX_VERSION } from "./version.js";
|
|
|
18
22
|
const OK = 0;
|
|
19
23
|
const REFUSED = 1;
|
|
20
24
|
const USAGE = 2;
|
|
21
|
-
const USAGE_TEXT = `hsx ${HSX_VERSION}, the HSX compiler
|
|
25
|
+
export const USAGE_TEXT = `hsx ${HSX_VERSION}, the HSX compiler
|
|
22
26
|
|
|
23
27
|
Usage:
|
|
24
28
|
hsx check <file.hsx> [--strict]
|
|
25
29
|
hsx build <file.hsx> [--out <file.json>] [--strict]
|
|
30
|
+
hsx cost <file.hsx> [--json] [--out <file.json>] [--strict]
|
|
31
|
+
hsx explain <HSX####>
|
|
32
|
+
hsx format <file.hsx>
|
|
33
|
+
hsx lsp
|
|
26
34
|
hsx --version
|
|
27
35
|
hsx --help
|
|
28
36
|
|
|
29
37
|
Commands:
|
|
30
38
|
check Compile and report diagnostics. Prints nothing when the program is clean.
|
|
31
|
-
build Compile and write
|
|
39
|
+
build Compile and write canonical UDL as JSON.
|
|
40
|
+
cost Compile and print the version-pinned cost manifest as a table or JSON.
|
|
41
|
+
explain Print one diagnostic title, fix, and source example.
|
|
42
|
+
format Print the source in the one canonical HSX style.
|
|
43
|
+
lsp Run the language server over stdin and stdout.
|
|
32
44
|
|
|
33
45
|
Options:
|
|
34
|
-
--
|
|
46
|
+
--json Print the cost manifest as JSON instead of a table.
|
|
47
|
+
--out <file> Write build or cost JSON to this path instead of stdout.
|
|
35
48
|
--strict Treat warning-severity diagnostics as failures.
|
|
36
49
|
|
|
37
50
|
Exit codes:
|
|
@@ -45,10 +58,24 @@ export async function runCli(argv, io) {
|
|
|
45
58
|
return command === undefined ? USAGE : OK;
|
|
46
59
|
}
|
|
47
60
|
if (command === "--version" || command === "-v") {
|
|
48
|
-
io.out(`${HSX_VERSION} (
|
|
61
|
+
io.out(`${HSX_VERSION} (UDL version ${HSX_TARGET_UDL_VERSION})`);
|
|
49
62
|
return OK;
|
|
50
63
|
}
|
|
51
|
-
if (command
|
|
64
|
+
if (command === "explain")
|
|
65
|
+
return explainDiagnostic(rest, io);
|
|
66
|
+
if (command === "lsp") {
|
|
67
|
+
const input = io.stdin ?? process.stdin;
|
|
68
|
+
const output = io.stdout ?? process.stdout;
|
|
69
|
+
return new Promise((resolve) => {
|
|
70
|
+
startLspServer(input, output, {
|
|
71
|
+
onExit: resolve,
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (command !== "check" &&
|
|
76
|
+
command !== "build" &&
|
|
77
|
+
command !== "cost" &&
|
|
78
|
+
command !== "format") {
|
|
52
79
|
io.err(`hsx: unknown command "${command}"`);
|
|
53
80
|
io.err(USAGE_TEXT);
|
|
54
81
|
return USAGE;
|
|
@@ -66,7 +93,26 @@ export async function runCli(argv, io) {
|
|
|
66
93
|
io.err(`hsx: cannot read ${parsed.file}: ${messageOf(cause)}`);
|
|
67
94
|
return USAGE;
|
|
68
95
|
}
|
|
69
|
-
|
|
96
|
+
if (command === "format") {
|
|
97
|
+
const result = format(source);
|
|
98
|
+
if (!result.ok) {
|
|
99
|
+
for (const diagnostic of result.diagnostics) {
|
|
100
|
+
io.err(`${parsed.file}:1:1: error [parse] ${diagnostic.message}`);
|
|
101
|
+
}
|
|
102
|
+
return REFUSED;
|
|
103
|
+
}
|
|
104
|
+
io.out(result.formatted.trimEnd());
|
|
105
|
+
return OK;
|
|
106
|
+
}
|
|
107
|
+
let costTable;
|
|
108
|
+
try {
|
|
109
|
+
costTable = await readDefaultCostTable(io);
|
|
110
|
+
}
|
|
111
|
+
catch (cause) {
|
|
112
|
+
io.err(`hsx: cannot read the packaged cost table: ${messageOf(cause)}`);
|
|
113
|
+
return USAGE;
|
|
114
|
+
}
|
|
115
|
+
const result = compile(source, { costTable });
|
|
70
116
|
for (const line of diagnosticLines(parsed.file, result))
|
|
71
117
|
io.err(line);
|
|
72
118
|
const refused = result.verdict === "invalid" ||
|
|
@@ -76,10 +122,18 @@ export async function runCli(argv, io) {
|
|
|
76
122
|
}
|
|
77
123
|
if (!result.artifacts)
|
|
78
124
|
return REFUSED;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
125
|
+
if (command === "cost") {
|
|
126
|
+
const json = `${JSON.stringify(result.artifacts.costManifest, null, 2)}\n`;
|
|
127
|
+
if (parsed.out !== undefined) {
|
|
128
|
+
const writeCode = await writeOutput(parsed.out, json, io);
|
|
129
|
+
return writeCode === OK && refused ? REFUSED : writeCode;
|
|
130
|
+
}
|
|
131
|
+
io.out(parsed.json
|
|
132
|
+
? json.trimEnd()
|
|
133
|
+
: renderCostTable(result.artifacts.costManifest));
|
|
134
|
+
return refused ? REFUSED : OK;
|
|
135
|
+
}
|
|
136
|
+
const json = `${JSON.stringify(result.artifacts.document, null, 2)}\n`;
|
|
83
137
|
if (parsed.out === undefined) {
|
|
84
138
|
io.out(json.trimEnd());
|
|
85
139
|
}
|
|
@@ -96,17 +150,28 @@ export async function runCli(argv, io) {
|
|
|
96
150
|
}
|
|
97
151
|
function parseOptions(args, command) {
|
|
98
152
|
let file;
|
|
153
|
+
let json = false;
|
|
99
154
|
let out;
|
|
100
155
|
let strict = false;
|
|
101
156
|
for (let index = 0; index < args.length; index += 1) {
|
|
102
157
|
const argument = args[index];
|
|
103
158
|
if (argument === "--strict") {
|
|
159
|
+
if (command === "format") {
|
|
160
|
+
return { error: "hsx format has no style options" };
|
|
161
|
+
}
|
|
104
162
|
strict = true;
|
|
105
163
|
continue;
|
|
106
164
|
}
|
|
165
|
+
if (argument === "--json") {
|
|
166
|
+
if (command !== "cost")
|
|
167
|
+
return { error: "--json belongs to hsx cost" };
|
|
168
|
+
json = true;
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
107
171
|
if (argument === "--out") {
|
|
108
|
-
if (command !== "build")
|
|
109
|
-
return { error: "--out belongs to hsx build" };
|
|
172
|
+
if (command !== "build" && command !== "cost") {
|
|
173
|
+
return { error: "--out belongs to hsx build or hsx cost" };
|
|
174
|
+
}
|
|
110
175
|
const value = args[index + 1];
|
|
111
176
|
if (value === undefined || value.startsWith("--")) {
|
|
112
177
|
return { error: "--out needs a file path" };
|
|
@@ -125,13 +190,104 @@ function parseOptions(args, command) {
|
|
|
125
190
|
}
|
|
126
191
|
if (file === undefined)
|
|
127
192
|
return { error: `hsx ${command} needs a file` };
|
|
128
|
-
return { file, ...(out === undefined ? {} : { out }), strict };
|
|
193
|
+
return { file, json, ...(out === undefined ? {} : { out }), strict };
|
|
194
|
+
}
|
|
195
|
+
function explainDiagnostic(args, io) {
|
|
196
|
+
if (args.length !== 1 || args[0]?.startsWith("-")) {
|
|
197
|
+
io.err("hsx: explain needs one diagnostic code");
|
|
198
|
+
return USAGE;
|
|
199
|
+
}
|
|
200
|
+
const diagnostic = hsxDiagnostics.find(({ code }) => code === args[0]);
|
|
201
|
+
if (!diagnostic) {
|
|
202
|
+
io.err(`hsx: unknown diagnostic code ${args[0]}`);
|
|
203
|
+
return USAGE;
|
|
204
|
+
}
|
|
205
|
+
io.out([
|
|
206
|
+
`${diagnostic.code} ${diagnostic.title}`,
|
|
207
|
+
`Stage: ${diagnostic.stage}`,
|
|
208
|
+
`Fix: ${diagnostic.fix}`,
|
|
209
|
+
diagnostic.example === null
|
|
210
|
+
? "Example: unavailable from source alone"
|
|
211
|
+
: `Example:\n${diagnostic.example}`,
|
|
212
|
+
].join("\n"));
|
|
213
|
+
return OK;
|
|
214
|
+
}
|
|
215
|
+
function renderCostTable(manifest) {
|
|
216
|
+
const rows = [
|
|
217
|
+
`costTableVersion\t${manifest.costTableVersion}`,
|
|
218
|
+
"instrument.action\teffect\tunit\tcount\ttotal\tpayer",
|
|
219
|
+
];
|
|
220
|
+
for (const action of manifest.actions) {
|
|
221
|
+
for (const component of action.components) {
|
|
222
|
+
const fixed = BigInt(component.perEventMinor) * BigInt(component.count);
|
|
223
|
+
const unit = [
|
|
224
|
+
`${component.perEventMinor} ${manifest.currency} minor`,
|
|
225
|
+
component.bps > 0 ? `${component.bps} bps` : undefined,
|
|
226
|
+
]
|
|
227
|
+
.filter((part) => part !== undefined)
|
|
228
|
+
.join(" + ");
|
|
229
|
+
const total = component.bps === 0
|
|
230
|
+
? `${fixed} ${manifest.currency} minor`
|
|
231
|
+
: [
|
|
232
|
+
fixed === 0n ? undefined : `${fixed} ${manifest.currency} minor`,
|
|
233
|
+
`amount-dependent (${component.bps} bps)`,
|
|
234
|
+
]
|
|
235
|
+
.filter((part) => part !== undefined)
|
|
236
|
+
.join(" + ");
|
|
237
|
+
rows.push([
|
|
238
|
+
`${action.instrument}.${action.action}`,
|
|
239
|
+
component.signature,
|
|
240
|
+
unit,
|
|
241
|
+
component.count,
|
|
242
|
+
total,
|
|
243
|
+
component.payer,
|
|
244
|
+
].join("\t"));
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return rows.join("\n");
|
|
248
|
+
}
|
|
249
|
+
async function writeOutput(path, contents, io) {
|
|
250
|
+
try {
|
|
251
|
+
await io.writeFile(path, contents);
|
|
252
|
+
}
|
|
253
|
+
catch (cause) {
|
|
254
|
+
io.err(`hsx: cannot write ${path}: ${messageOf(cause)}`);
|
|
255
|
+
return USAGE;
|
|
256
|
+
}
|
|
257
|
+
return OK;
|
|
258
|
+
}
|
|
259
|
+
async function readDefaultCostTable(io) {
|
|
260
|
+
const candidates = [
|
|
261
|
+
fileURLToPath(new URL("../examples/cost-table.json", import.meta.url)),
|
|
262
|
+
fileURLToPath(new URL("../../examples/cost-table.json", import.meta.url)),
|
|
263
|
+
];
|
|
264
|
+
let lastError;
|
|
265
|
+
for (const path of candidates) {
|
|
266
|
+
try {
|
|
267
|
+
return JSON.parse(await io.readFile(path));
|
|
268
|
+
}
|
|
269
|
+
catch (cause) {
|
|
270
|
+
lastError = cause;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
throw lastError;
|
|
129
274
|
}
|
|
130
275
|
/** `file:line:col: severity [stage] message`, the shape editors already parse. */
|
|
131
276
|
function diagnosticLines(file, result) {
|
|
132
|
-
return result.diagnostics.map((diagnostic) => `${file}:${diagnostic.line}:${diagnostic.column}: ${diagnostic.severity} [${diagnostic.stage}] ${diagnostic.message}`);
|
|
277
|
+
return result.diagnostics.map((diagnostic) => `${diagnostic.file ?? file}:${diagnostic.line}:${diagnostic.column}: ${diagnostic.severity} [${diagnostic.stage}] ${diagnostic.message}`);
|
|
133
278
|
}
|
|
134
279
|
function messageOf(cause) {
|
|
135
280
|
return cause instanceof Error ? cause.message : String(cause);
|
|
136
281
|
}
|
|
282
|
+
if (import.meta.main) {
|
|
283
|
+
const { readFile, writeFile } = await import("node:fs/promises");
|
|
284
|
+
process.exitCode = await runCli(process.argv.slice(2), {
|
|
285
|
+
err: (line) => process.stderr.write(`${line}\n`),
|
|
286
|
+
out: (line) => process.stdout.write(`${line}\n`),
|
|
287
|
+
readFile: (path) => readFile(path, "utf8"),
|
|
288
|
+
writeFile: (path, contents) => writeFile(path, contents, "utf8"),
|
|
289
|
+
stdin: process.stdin,
|
|
290
|
+
stdout: process.stdout,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
137
293
|
//# sourceMappingURL=cli.js.map
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/src/compile.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The HSX compiler driver: source text in, three-verdict result out.
|
|
3
3
|
*
|
|
4
|
-
* - `valid`: the program lowers cleanly; the IR document
|
|
4
|
+
* - `valid`: the program lowers cleanly; the IR document is ready
|
|
5
5
|
* for the independent checker.
|
|
6
6
|
* - `warning`: the program lowers, and the compiler's lint voice has notes
|
|
7
7
|
* the author should read (the artifacts are still present and usable).
|
|
@@ -10,23 +10,58 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Every diagnostic points at SOURCE coordinates, never at lowered IR paths.
|
|
12
12
|
*/
|
|
13
|
+
import type { UdlIssueCode } from "@hyperscale0/udl";
|
|
14
|
+
import { type UdlCostManifest, type UdlCostTable } from "./cost.ts";
|
|
15
|
+
import { type HsxCompilerHost } from "./modules.ts";
|
|
13
16
|
type Json = Record<string, unknown>;
|
|
14
17
|
type CompileVerdict = "invalid" | "valid" | "warning";
|
|
15
|
-
interface CompileDiagnostic {
|
|
18
|
+
export interface CompileDiagnostic {
|
|
16
19
|
/** 1-indexed source column. */
|
|
17
20
|
readonly column: number;
|
|
21
|
+
/** Imported module file when the diagnostic belongs to module source. */
|
|
22
|
+
readonly file?: string;
|
|
18
23
|
/** 1-indexed source line. */
|
|
19
24
|
readonly line: number;
|
|
20
25
|
readonly message: string;
|
|
26
|
+
/** Source offsets in UTF-16 code units, matching parser and checker spans. */
|
|
27
|
+
readonly span: {
|
|
28
|
+
readonly end: number;
|
|
29
|
+
readonly start: number;
|
|
30
|
+
};
|
|
31
|
+
readonly code?: string;
|
|
32
|
+
readonly fix?: string;
|
|
33
|
+
/** Canonical UDL path when lowering rejected an emitted clause. */
|
|
34
|
+
readonly path?: string;
|
|
35
|
+
/** UDL validator category when the emitter rejected its candidate document. */
|
|
36
|
+
readonly udlCode?: UdlIssueCode;
|
|
21
37
|
readonly severity: "error" | "warning";
|
|
22
38
|
/** The stage that raised it: parse, check, or lower. */
|
|
23
|
-
readonly stage: "check" | "lower" | "parse";
|
|
39
|
+
readonly stage: "bind" | "check" | "lower" | "parse" | "typecheck";
|
|
24
40
|
}
|
|
25
41
|
interface CompileArtifacts {
|
|
26
|
-
/** The
|
|
42
|
+
/** The canonical UDL document. */
|
|
27
43
|
readonly document: Json;
|
|
28
|
-
/**
|
|
29
|
-
readonly
|
|
44
|
+
/** Canonical UDL paths bound to their narrowest authored source terms. */
|
|
45
|
+
readonly originMap: readonly CompileOriginMapEntry[];
|
|
46
|
+
/** Deterministic compile-time cost, pinned to one versioned table. */
|
|
47
|
+
readonly costManifest: UdlCostManifest;
|
|
48
|
+
}
|
|
49
|
+
export interface CompileOptions extends HsxCompilerHost {
|
|
50
|
+
readonly composesCatalogBlueprint?: boolean;
|
|
51
|
+
readonly costTable?: UdlCostTable;
|
|
52
|
+
}
|
|
53
|
+
export interface CompileOriginMapEntry {
|
|
54
|
+
readonly path: string;
|
|
55
|
+
readonly span: {
|
|
56
|
+
/** Exclusive UTF-8 byte offset. */
|
|
57
|
+
readonly end: number;
|
|
58
|
+
/** 1-indexed source column. */
|
|
59
|
+
readonly column: number;
|
|
60
|
+
/** 1-indexed source line. */
|
|
61
|
+
readonly line: number;
|
|
62
|
+
/** Inclusive UTF-8 byte offset. */
|
|
63
|
+
readonly start: number;
|
|
64
|
+
};
|
|
30
65
|
}
|
|
31
66
|
export interface CompileResult {
|
|
32
67
|
/** Present exactly when the verdict is not `invalid`. */
|
|
@@ -34,6 +69,6 @@ export interface CompileResult {
|
|
|
34
69
|
readonly diagnostics: readonly CompileDiagnostic[];
|
|
35
70
|
readonly verdict: CompileVerdict;
|
|
36
71
|
}
|
|
37
|
-
export declare function compile(source: string): CompileResult;
|
|
72
|
+
export declare function compile(source: string, options?: CompileOptions): CompileResult;
|
|
38
73
|
export {};
|
|
39
74
|
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,cAAc,CAAC;AAItB,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpC,KAAK,cAAc,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,CAAC;CACpE;AAED,UAAU,gBAAgB;IACxB,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACrD,sEAAsE;IACtE,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;CACxC;AAED,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE;QACb,mCAAmC;QACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,+BAA+B;QAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,6BAA6B;QAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,mCAAmC;QACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC;AAED,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAgIf"}
|
package/dist/src/compile.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The HSX compiler driver: source text in, three-verdict result out.
|
|
3
3
|
*
|
|
4
|
-
* - `valid`: the program lowers cleanly; the IR document
|
|
4
|
+
* - `valid`: the program lowers cleanly; the IR document is ready
|
|
5
5
|
* for the independent checker.
|
|
6
6
|
* - `warning`: the program lowers, and the compiler's lint voice has notes
|
|
7
7
|
* the author should read (the artifacts are still present and usable).
|
|
@@ -11,53 +11,119 @@
|
|
|
11
11
|
* Every diagnostic points at SOURCE coordinates, never at lowered IR paths.
|
|
12
12
|
*/
|
|
13
13
|
import { lineColIn, lineIndex } from "./ast.js";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
14
|
+
import { buildCostManifest, } from "./cost.js";
|
|
15
|
+
import { lowerGeneralProgram } from "./emit.js";
|
|
16
|
+
import { resolveProgramModules, } from "./modules.js";
|
|
16
17
|
import { parseProgram } from "./parse.js";
|
|
17
|
-
|
|
18
|
+
import { checkGeneralProgram } from "./typecheck.js";
|
|
19
|
+
export function compile(source, options = {}) {
|
|
18
20
|
const diagnostics = [];
|
|
19
21
|
// Scanned once here rather than per diagnostic: a source can carry one
|
|
20
22
|
// diagnostic per two bytes, and rescanning from offset zero for each one
|
|
21
23
|
// made a 128 KB file cost 2.4 seconds of coordinate arithmetic.
|
|
22
24
|
const lines = lineIndex(source);
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
+
const byteOffsets = utf8OffsetIndex(source);
|
|
26
|
+
const at = (stage, severity, message, span, details, origin) => {
|
|
27
|
+
const position = origin ?? lineColIn(lines, span.start);
|
|
25
28
|
diagnostics.push({
|
|
26
29
|
column: position.column,
|
|
30
|
+
...(origin ? { file: origin.moduleName } : {}),
|
|
27
31
|
line: position.line,
|
|
28
32
|
message,
|
|
33
|
+
span: { ...span },
|
|
34
|
+
...(details ? details : {}),
|
|
29
35
|
severity,
|
|
30
36
|
stage,
|
|
31
37
|
});
|
|
32
38
|
};
|
|
33
39
|
const parsed = parseProgram(source);
|
|
34
40
|
for (const diagnostic of parsed.diagnostics) {
|
|
35
|
-
at("parse", "error", diagnostic.message, diagnostic.span.
|
|
41
|
+
at("parse", "error", diagnostic.message, diagnostic.span, diagnostic.code && diagnostic.fix
|
|
42
|
+
? { code: diagnostic.code, fix: diagnostic.fix }
|
|
43
|
+
: undefined);
|
|
36
44
|
}
|
|
37
45
|
if (parsed.diagnostics.length > 0) {
|
|
38
46
|
return { diagnostics, verdict: "invalid" };
|
|
39
47
|
}
|
|
40
|
-
const
|
|
48
|
+
const resolved = resolveProgramModules(parsed.program, options);
|
|
49
|
+
if (!resolved.ok) {
|
|
50
|
+
for (const issue of resolved.issues) {
|
|
51
|
+
at("bind", "error", issue.message, issue.span, {
|
|
52
|
+
code: issue.code,
|
|
53
|
+
fix: issue.fix,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return { diagnostics, verdict: "invalid" };
|
|
57
|
+
}
|
|
58
|
+
const checked = checkGeneralProgram(resolved.program, options.publishedCatalog
|
|
59
|
+
? { publishedCatalog: options.publishedCatalog }
|
|
60
|
+
: {});
|
|
41
61
|
for (const diagnostic of checked.diagnostics) {
|
|
42
|
-
|
|
62
|
+
const moduleOrigin = resolved.origins.get(diagnostic.span);
|
|
63
|
+
at(diagnostic.code === "HSX1001" ? "bind" : "typecheck", diagnostic.severity, diagnostic.message, diagnostic.span, { code: diagnostic.code, fix: diagnostic.fix }, moduleOrigin);
|
|
43
64
|
}
|
|
44
|
-
if (!checked.program)
|
|
65
|
+
if (!checked.program)
|
|
66
|
+
return { diagnostics, verdict: "invalid" };
|
|
67
|
+
const cost = buildCostManifest(checked.program, options.costTable, options.composesCatalogBlueprint ?? false);
|
|
68
|
+
if (!cost.ok) {
|
|
69
|
+
for (const diagnostic of cost.diagnostics) {
|
|
70
|
+
at("typecheck", diagnostic.severity, diagnostic.message, diagnostic.span, { code: diagnostic.code, fix: diagnostic.fix });
|
|
71
|
+
}
|
|
45
72
|
return { diagnostics, verdict: "invalid" };
|
|
46
73
|
}
|
|
47
|
-
const
|
|
48
|
-
if (!
|
|
49
|
-
for (const issue of
|
|
50
|
-
at("lower", "error", issue.message, issue.span
|
|
74
|
+
const lowered = lowerGeneralProgram(checked.program);
|
|
75
|
+
if (!lowered.ok) {
|
|
76
|
+
for (const issue of lowered.issues) {
|
|
77
|
+
at("lower", "error", issue.message, issue.span, {
|
|
78
|
+
code: issue.code,
|
|
79
|
+
fix: issue.fix,
|
|
80
|
+
path: issue.path,
|
|
81
|
+
...(issue.udlCode ? { udlCode: issue.udlCode } : {}),
|
|
82
|
+
});
|
|
51
83
|
}
|
|
52
84
|
return { diagnostics, verdict: "invalid" };
|
|
53
85
|
}
|
|
86
|
+
const compileOrigin = (entry) => {
|
|
87
|
+
const position = lineColIn(lines, entry.span.start);
|
|
88
|
+
return {
|
|
89
|
+
path: entry.path,
|
|
90
|
+
span: {
|
|
91
|
+
column: position.column,
|
|
92
|
+
end: byteOffsets[entry.span.end] ?? byteOffsets[byteOffsets.length - 1],
|
|
93
|
+
line: position.line,
|
|
94
|
+
start: byteOffsets[entry.span.start] ?? 0,
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
};
|
|
54
98
|
return {
|
|
55
99
|
artifacts: {
|
|
56
|
-
document:
|
|
57
|
-
|
|
100
|
+
document: lowered.value.document,
|
|
101
|
+
costManifest: cost.manifest,
|
|
102
|
+
originMap: lowered.value.originMap.map(compileOrigin),
|
|
58
103
|
},
|
|
59
104
|
diagnostics,
|
|
60
105
|
verdict: diagnostics.length > 0 ? "warning" : "valid",
|
|
61
106
|
};
|
|
62
107
|
}
|
|
108
|
+
function utf8OffsetIndex(source) {
|
|
109
|
+
const offsets = new Uint32Array(source.length + 1);
|
|
110
|
+
let bytes = 0;
|
|
111
|
+
for (let index = 0; index < source.length; index += 1) {
|
|
112
|
+
offsets[index] = bytes;
|
|
113
|
+
const codePoint = source.codePointAt(index);
|
|
114
|
+
if (codePoint > 0xffff) {
|
|
115
|
+
offsets[index + 1] = bytes;
|
|
116
|
+
bytes += 4;
|
|
117
|
+
index += 1;
|
|
118
|
+
}
|
|
119
|
+
else if (codePoint > 0x7ff)
|
|
120
|
+
bytes += 3;
|
|
121
|
+
else if (codePoint > 0x7f)
|
|
122
|
+
bytes += 2;
|
|
123
|
+
else
|
|
124
|
+
bytes += 1;
|
|
125
|
+
}
|
|
126
|
+
offsets[source.length] = bytes;
|
|
127
|
+
return offsets;
|
|
128
|
+
}
|
|
63
129
|
//# sourceMappingURL=compile.js.map
|
package/dist/src/compile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"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"}
|