@hyperscale0/hsx 1.0.0 → 1.0.124
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 +5 -256
- package/LICENSE.md +356 -0
- package/NOTICE.md +8 -0
- package/README.md +44 -44
- package/bin/hsx.ts +0 -7
- package/dist/bin/hsx.d.ts +0 -4
- package/dist/bin/hsx.d.ts.map +1 -1
- package/dist/bin/hsx.js +0 -6
- package/dist/bin/hsx.js.map +1 -1
- package/dist/src/ast.d.ts +113 -308
- package/dist/src/ast.d.ts.map +1 -1
- package/dist/src/ast.js +7 -71
- package/dist/src/ast.js.map +1 -1
- package/dist/src/attachment-economics.d.ts +5 -0
- package/dist/src/attachment-economics.d.ts.map +1 -0
- package/dist/src/attachment-economics.js +55 -0
- package/dist/src/attachment-economics.js.map +1 -0
- 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/cli.d.ts +4 -19
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +89 -276
- package/dist/src/cli.js.map +1 -1
- package/dist/src/compile.d.ts +34 -66
- package/dist/src/compile.d.ts.map +1 -1
- package/dist/src/compile.js +2949 -117
- package/dist/src/compile.js.map +1 -1
- package/dist/src/cost.d.ts +8 -75
- package/dist/src/cost.d.ts.map +1 -1
- package/dist/src/cost.js +54 -364
- package/dist/src/cost.js.map +1 -1
- package/dist/src/diagnostics.d.ts +14 -9
- package/dist/src/diagnostics.d.ts.map +1 -1
- package/dist/src/diagnostics.js +39 -416
- package/dist/src/diagnostics.js.map +1 -1
- package/dist/src/examples-bundle.d.ts +3 -0
- package/dist/src/examples-bundle.d.ts.map +1 -0
- package/dist/src/examples-bundle.js +18 -0
- package/dist/src/examples-bundle.js.map +1 -0
- package/dist/src/examples.d.ts +10 -0
- package/dist/src/examples.d.ts.map +1 -0
- package/dist/src/examples.js +2 -0
- package/dist/src/examples.js.map +1 -0
- package/dist/src/format.d.ts +8 -7
- package/dist/src/format.d.ts.map +1 -1
- package/dist/src/format.js +9 -175
- package/dist/src/format.js.map +1 -1
- package/dist/src/header-source.d.ts +3 -0
- package/dist/src/header-source.d.ts.map +1 -0
- package/dist/src/header-source.js +41 -0
- package/dist/src/header-source.js.map +1 -0
- package/dist/src/headers.d.ts +64 -0
- package/dist/src/headers.d.ts.map +1 -0
- package/dist/src/headers.js +167 -0
- package/dist/src/headers.js.map +1 -0
- package/dist/src/index.d.ts +7 -11
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -9
- package/dist/src/index.js.map +1 -1
- package/dist/src/keywords.d.ts +56 -0
- package/dist/src/keywords.d.ts.map +1 -0
- package/dist/src/keywords.js +133 -0
- package/dist/src/keywords.js.map +1 -0
- package/dist/src/language.d.ts +26 -0
- package/dist/src/language.d.ts.map +1 -0
- package/dist/src/language.js +440 -0
- package/dist/src/language.js.map +1 -0
- package/dist/src/lex.d.ts +13 -28
- package/dist/src/lex.d.ts.map +1 -1
- package/dist/src/lex.js +119 -145
- package/dist/src/lex.js.map +1 -1
- package/dist/src/parse.d.ts +4 -17
- package/dist/src/parse.d.ts.map +1 -1
- package/dist/src/parse.js +484 -1036
- package/dist/src/parse.js.map +1 -1
- package/dist/src/std-bundle.d.ts.map +1 -1
- package/dist/src/std-bundle.js +11 -84
- package/dist/src/std-bundle.js.map +1 -1
- package/dist/src/std-library.d.ts +1 -1
- package/dist/src/std-library.d.ts.map +1 -1
- package/dist/src/std-library.js +1 -5
- package/dist/src/std-library.js.map +1 -1
- package/dist/src/tunables.d.ts +7 -0
- package/dist/src/tunables.d.ts.map +1 -0
- package/dist/src/tunables.js +27 -0
- package/dist/src/tunables.js.map +1 -0
- package/docs/README.md +528 -26
- package/docs/assets/brand/hsx-horizontal-white.svg +1 -0
- package/docs/assets/brand/hsx-horizontal.svg +1 -0
- package/docs/assets/brand/hsx-stacked-white.svg +1 -0
- package/docs/assets/brand/hsx-stacked.svg +1 -0
- package/docs/assets/brand/manifest.json +30 -0
- package/docs/assets/hsx.svg +11 -0
- package/examples/cards.hsx +34 -0
- package/examples/collections.hsx +37 -0
- package/examples/cost-table.json +633 -385
- package/examples/escrow.hsx +24 -0
- package/examples/financing.hsx +32 -0
- package/examples/insurance.hsx +30 -0
- package/examples/lending.hsx +57 -0
- package/examples/library.hsx +15 -0
- package/examples/marketplace.hsx +32 -0
- package/examples/money.hsx +19 -0
- package/examples/rental-deposit.hsx +60 -0
- package/examples/repair-approval.hsx +44 -0
- package/examples/reporting.hsx +28 -0
- package/examples/savings.hsx +21 -0
- package/examples/serviced.hsx +25 -0
- package/examples/wallet.hsx +24 -0
- package/package.json +25 -23
- package/src/ast.ts +83 -440
- package/src/attachment-economics.ts +103 -0
- package/src/binding-contract.ts +104 -0
- package/src/cli.ts +95 -325
- package/src/compile.ts +4063 -209
- package/src/cost.ts +71 -574
- package/src/diagnostics.ts +57 -437
- package/src/examples-bundle.ts +19 -0
- package/src/examples.ts +9 -0
- package/src/format.ts +12 -256
- package/src/header-source.ts +54 -0
- package/src/headers.ts +195 -0
- package/src/index.ts +18 -33
- package/src/keywords.ts +134 -0
- package/src/language.ts +629 -0
- package/src/lex.ts +131 -192
- package/src/parse.ts +489 -1195
- package/src/std-bundle.ts +12 -88
- package/src/std-library.ts +2 -7
- package/src/tunables.ts +36 -0
- package/std/cards.hsx +85 -0
- package/std/collections.hsx +90 -0
- package/std/escrow.hsx +73 -0
- package/std/financing.hsx +683 -0
- package/std/insurance.hsx +89 -0
- package/std/lending.hsx +138 -0
- package/std/marketplace.hsx +123 -0
- package/std/money.hsx +173 -0
- package/std/reporting.hsx +753 -0
- package/std/savings.hsx +68 -0
- package/std/wallet.hsx +57 -0
- package/LICENSE +0 -661
- package/LICENSING.md +0 -52
- package/TRADEMARKS.md +0 -35
- package/dist/src/emit.d.ts +0 -34
- package/dist/src/emit.d.ts.map +0 -1
- package/dist/src/emit.js +0 -137
- package/dist/src/emit.js.map +0 -1
- package/dist/src/entry-overrides.d.ts +0 -58
- package/dist/src/entry-overrides.d.ts.map +0 -1
- package/dist/src/entry-overrides.js +0 -284
- package/dist/src/entry-overrides.js.map +0 -1
- package/dist/src/ir.d.ts +0 -66
- package/dist/src/ir.d.ts.map +0 -1
- package/dist/src/ir.js +0 -15
- package/dist/src/ir.js.map +0 -1
- package/dist/src/limits.d.ts +0 -21
- package/dist/src/limits.d.ts.map +0 -1
- package/dist/src/limits.js +0 -21
- package/dist/src/limits.js.map +0 -1
- package/dist/src/lsp/server.d.ts +0 -32
- package/dist/src/lsp/server.d.ts.map +0 -1
- package/dist/src/lsp/server.js +0 -391
- package/dist/src/lsp/server.js.map +0 -1
- package/dist/src/modules.d.ts +0 -38
- package/dist/src/modules.d.ts.map +0 -1
- package/dist/src/modules.js +0 -368
- package/dist/src/modules.js.map +0 -1
- package/dist/src/typecheck.d.ts +0 -8
- package/dist/src/typecheck.d.ts.map +0 -1
- package/dist/src/typecheck.js +0 -2958
- package/dist/src/typecheck.js.map +0 -1
- package/dist/src/version.d.ts +0 -5
- package/dist/src/version.d.ts.map +0 -1
- package/dist/src/version.js +0 -5
- package/dist/src/version.js.map +0 -1
- package/docs/guide/01-first-program.md +0 -24
- package/docs/guide/02-money.md +0 -25
- package/docs/guide/03-instruments.md +0 -22
- package/docs/guide/04-lifecycles.md +0 -25
- package/docs/guide/05-fees-and-splits.md +0 -45
- package/docs/guide/06-schedules.md +0 -22
- package/docs/guide/07-composition.md +0 -46
- package/docs/guide/08-writing-a-module.md +0 -26
- package/docs/guide/09-cost.md +0 -24
- package/docs/guide/10-diagnostics.md +0 -27
- package/docs/llms-full.txt +0 -1739
- package/docs/llms.txt +0 -45
- package/docs/playground.md +0 -54
- package/docs/reference/cli.md +0 -35
- package/docs/reference/diagnostics.md +0 -619
- package/docs/reference/grammar.md +0 -39
- package/docs/reference/std/advance.md +0 -35
- package/docs/reference/std/cancellable_booking.md +0 -35
- package/docs/reference/std/captured_payment.md +0 -43
- package/docs/reference/std/conditional_disbursement.md +0 -33
- package/docs/reference/std/credit_facility.md +0 -35
- package/docs/reference/std/held_payment.md +0 -64
- package/docs/reference/std/instant_transfer.md +0 -30
- package/docs/reference/std/metered.md +0 -27
- package/docs/reference/std/pooled_split.md +0 -26
- package/docs/reference/std/premium_forward.md +0 -39
- package/docs/reference/std/reconciled_payout.md +0 -33
- package/docs/reference/std/recurring_collection.md +0 -25
- package/docs/reference/std/rotating_pool.md +0 -42
- package/docs/reference/std/scheduled.md +0 -51
- package/docs/reference/std/security_deposit.md +0 -46
- package/docs/reference/std/settlement_batch.md +0 -42
- package/docs/reference/std/swap.md +0 -46
- package/docs/reference/std/threshold_pool.md +0 -47
- package/docs/reference/std/weighted_distribution.md +0 -39
- package/docs/reference/types.md +0 -20
- package/docs/reference/udl-output.md +0 -13
- package/docs/sessions/2026-09-02-two-instruments.hsx +0 -21
- package/docs/sessions/2026-09-02-two-instruments.md +0 -41
- package/examples/01-first-program/README.md +0 -45
- package/examples/01-first-program/tip-jar.hsx +0 -17
- package/examples/02-imports-and-archetypes/README.md +0 -96
- package/examples/02-imports-and-archetypes/photo-booth.hsx +0 -37
- package/examples/03-diagnostics/README.md +0 -68
- package/examples/03-diagnostics/corner-shop-fixed.hsx +0 -22
- package/examples/03-diagnostics/corner-shop.hsx +0 -19
- package/examples/04-complete-product/README.md +0 -84
- package/examples/04-complete-product/study-hall.hsx +0 -67
- package/examples/05-watch-club/README.md +0 -9
- package/examples/05-watch-club/watch-club.hsx +0 -124
- package/examples/README.md +0 -18
- package/examples/advance/README.md +0 -3
- package/examples/advance/advance.hsx +0 -13
- package/examples/advance/advance.udl +0 -339
- package/examples/cancellable_booking/README.md +0 -3
- package/examples/cancellable_booking/cancellable_booking.hsx +0 -14
- package/examples/cancellable_booking/cancellable_booking.udl +0 -391
- package/examples/captured_payment/README.md +0 -3
- package/examples/captured_payment/captured_payment.hsx +0 -21
- package/examples/captured_payment/captured_payment.udl +0 -677
- package/examples/conditional_disbursement/README.md +0 -3
- package/examples/conditional_disbursement/conditional_disbursement.hsx +0 -17
- package/examples/conditional_disbursement/conditional_disbursement.udl +0 -412
- package/examples/credit_facility/README.md +0 -3
- package/examples/credit_facility/credit_facility.hsx +0 -27
- package/examples/credit_facility/credit_facility.udl +0 -1373
- package/examples/held_payment/README.md +0 -3
- package/examples/held_payment/held_payment.hsx +0 -13
- package/examples/held_payment/held_payment.udl +0 -507
- package/examples/instant_transfer/README.md +0 -3
- package/examples/instant_transfer/instant_transfer.hsx +0 -16
- package/examples/instant_transfer/instant_transfer.udl +0 -364
- package/examples/metered/README.md +0 -3
- package/examples/metered/metered.hsx +0 -13
- package/examples/metered/metered.udl +0 -247
- package/examples/pooled_split/README.md +0 -3
- package/examples/pooled_split/pooled_split.hsx +0 -15
- package/examples/pooled_split/pooled_split.udl +0 -425
- package/examples/premium_forward/README.md +0 -3
- package/examples/premium_forward/premium_forward.hsx +0 -19
- package/examples/premium_forward/premium_forward.udl +0 -594
- package/examples/reconciled_payout/README.md +0 -3
- package/examples/reconciled_payout/reconciled_payout.hsx +0 -13
- package/examples/reconciled_payout/reconciled_payout.udl +0 -303
- package/examples/recurring_collection/README.md +0 -3
- package/examples/recurring_collection/recurring_collection.hsx +0 -21
- package/examples/recurring_collection/recurring_collection.udl +0 -1130
- package/examples/rotating_pool/README.md +0 -3
- package/examples/rotating_pool/rotating_pool.hsx +0 -18
- package/examples/rotating_pool/rotating_pool.udl +0 -4352
- package/examples/scheduled/README.md +0 -3
- package/examples/scheduled/scheduled.hsx +0 -12
- package/examples/scheduled/scheduled.udl +0 -335
- package/examples/security_deposit/README.md +0 -3
- package/examples/security_deposit/security_deposit.hsx +0 -21
- package/examples/security_deposit/security_deposit.udl +0 -293
- package/examples/settlement_batch/README.md +0 -3
- package/examples/settlement_batch/settlement_batch.hsx +0 -19
- package/examples/settlement_batch/settlement_batch.udl +0 -753
- package/examples/swap/README.md +0 -3
- package/examples/swap/swap.hsx +0 -19
- package/examples/swap/swap.udl +0 -876
- package/examples/threshold_pool/README.md +0 -3
- package/examples/threshold_pool/threshold_pool.hsx +0 -16
- package/examples/threshold_pool/threshold_pool.udl +0 -667
- package/examples/weighted_distribution/README.md +0 -3
- package/examples/weighted_distribution/weighted_distribution.hsx +0 -20
- package/examples/weighted_distribution/weighted_distribution.udl +0 -337
- package/skills/hsx/SKILL.md +0 -483
- package/src/emit.ts +0 -201
- package/src/entry-overrides.ts +0 -428
- package/src/ir.ts +0 -99
- package/src/limits.ts +0 -20
- package/src/lsp/server.ts +0 -460
- package/src/modules.ts +0 -446
- package/src/typecheck.ts +0 -3876
- package/src/version.ts +0 -5
- package/std/SEMANTICS.md +0 -130
- package/std/settlements/advance.hsx +0 -177
- package/std/settlements/cancellable_booking.hsx +0 -87
- package/std/settlements/captured_payment.hsx +0 -144
- package/std/settlements/conditional_disbursement.hsx +0 -185
- package/std/settlements/credit_facility.hsx +0 -167
- package/std/settlements/held_payment.hsx +0 -578
- package/std/settlements/index.hsx +0 -3
- package/std/settlements/instant_transfer.hsx +0 -190
- package/std/settlements/metered.hsx +0 -67
- package/std/settlements/pooled_split.hsx +0 -68
- package/std/settlements/premium_forward.hsx +0 -257
- package/std/settlements/reconciled_payout.hsx +0 -77
- package/std/settlements/recurring_collection.hsx +0 -27
- package/std/settlements/rotating_pool.hsx +0 -252
- package/std/settlements/scheduled.hsx +0 -641
- package/std/settlements/security_deposit.hsx +0 -166
- package/std/settlements/settlement_batch.hsx +0 -122
- package/std/settlements/swap.hsx +0 -1114
- package/std/settlements/threshold_pool.hsx +0 -221
- package/std/settlements/weighted_distribution.hsx +0 -141
package/README.md
CHANGED
|
@@ -1,60 +1,60 @@
|
|
|
1
1
|
# HSX
|
|
2
2
|
|
|
3
|
-
HSX is
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
```hsx
|
|
9
|
-
program held_sale "Held sale"
|
|
10
|
-
import { held_payment } from "std/settlements"
|
|
11
|
-
party buyer: person
|
|
12
|
-
party seller: business
|
|
13
|
-
settlement sale = held_payment {
|
|
14
|
-
payer: buyer
|
|
15
|
-
payee: seller
|
|
16
|
-
amount: price: money(SAR)
|
|
17
|
-
release: port accept_delivery
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
port accept_delivery { allowed: [buyer] }
|
|
21
|
-
```
|
|
3
|
+
HSX is a typed composition language for a company's objects, agreements and
|
|
4
|
+
actions. Programs can model a repair approval, a rental deposit or a financing
|
|
5
|
+
plan. The compiler produces canonical UDL for an executor. It executes no actions.
|
|
6
|
+
This release supports SAR.
|
|
22
7
|
|
|
23
|
-
|
|
24
|
-
npm install @hyperscale0/hsx @hyperscale0/udl
|
|
25
|
-
npx hsx check product.hsx
|
|
26
|
-
```
|
|
8
|
+
## Start here
|
|
27
9
|
|
|
28
|
-
|
|
10
|
+
Install the published package locally with `npm install @hyperscale0/hsx`.
|
|
11
|
+
Its `hsx` executable requires Node.js 22 or later. Use `npx hsx` for a local install:
|
|
29
12
|
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
13
|
+
```sh
|
|
14
|
+
npx hsx check rental.hsx
|
|
15
|
+
npx hsx build rental.hsx --out rental.udl.json
|
|
16
|
+
npx hsx cost rental.hsx
|
|
34
17
|
```
|
|
35
18
|
|
|
36
|
-
|
|
19
|
+
Start with the [first program and rental guide](docs/README.md). Save the
|
|
20
|
+
[rental source](examples/rental-deposit.hsx) as `rental.hsx` for these commands.
|
|
21
|
+
It holds 1,000 SAR, charges a one-time 50 SAR late fee, and returns the remainder.
|
|
22
|
+
The guide explains the fixed business binding and the host needed to execute it.
|
|
37
23
|
|
|
38
|
-
`
|
|
24
|
+
`npx hsx headers` prints every std instrument and its tunables from the bundled
|
|
25
|
+
headers. The [samples](examples/) include both complete action paths and
|
|
26
|
+
compositions that still need child-record actions or adapter bindings. A compile
|
|
27
|
+
pass does not prove that a flow is publicly executable or funded.
|
|
39
28
|
|
|
40
|
-
|
|
29
|
+
## Browser language service
|
|
41
30
|
|
|
42
|
-
|
|
31
|
+
```ts
|
|
32
|
+
import { highlight, describe } from "@hyperscale0/hsx/language";
|
|
33
|
+
import { examples } from "@hyperscale0/hsx/examples";
|
|
43
34
|
|
|
44
|
-
|
|
35
|
+
const source = examples[0]!.source;
|
|
36
|
+
const spans = highlight(source);
|
|
37
|
+
const hover = describe(source, source.indexOf("program"));
|
|
38
|
+
```
|
|
45
39
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
40
|
+
Both functions accept incomplete source and need no Node or editor framework.
|
|
41
|
+
Spans use half-open UTF-16 offsets. Whitespace has no span; unknown hover targets
|
|
42
|
+
return `null`. Pass a `StandardLibrary` as the last argument for custom headers.
|
|
43
|
+
Header signatures and bounds come from compiler metadata. Bounds use minor
|
|
44
|
+
currency units, basis points and milliseconds.
|
|
50
45
|
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
Examples have `id`, `title`, `summary`, `headers` and `source`. The ID is the
|
|
47
|
+
filename without `.hsx`; leading comments supply the summary. The array is sorted
|
|
48
|
+
by filename and contains no filesystem imports. Workspace imports use
|
|
49
|
+
`@hyperscale0/hsx` instead of the published `@hyperscale0/hsx` name.
|
|
53
50
|
|
|
54
|
-
|
|
55
|
-
artifact, then run `code --install-extension hsx.vsix`.
|
|
51
|
+
## Working from source
|
|
56
52
|
|
|
57
|
-
|
|
53
|
+
Run `bun install` and `bun run build` in this package's public source checkout.
|
|
54
|
+
Run `bun bin/hsx.ts check examples/rental-deposit.hsx` to use the source CLI.
|
|
55
|
+
`bun run check` checks types, compiles bundled examples and checks bundle freshness.
|
|
58
56
|
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
Edit prose in `docs/README.md`, programs in `examples/`, and header comments in
|
|
58
|
+
`std/`. Run `bun run generate` after changing these inputs. It emits the header
|
|
59
|
+
and example bundles.
|
|
60
|
+
`bun run build` also builds the browser playground.
|
package/bin/hsx.ts
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* The `hsx` executable. Everything it does lives in `runCli`; this file only
|
|
4
|
-
* binds that function to the real filesystem and the real streams.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
2
|
import { readFile, writeFile } from "node:fs/promises";
|
|
8
3
|
import { runCli } from "../src/cli.ts";
|
|
9
4
|
|
|
@@ -11,7 +6,5 @@ process.exitCode = await runCli(process.argv.slice(2), {
|
|
|
11
6
|
err: (line) => process.stderr.write(`${line}\n`),
|
|
12
7
|
out: (line) => process.stdout.write(`${line}\n`),
|
|
13
8
|
readFile: (path) => readFile(path, "utf8"),
|
|
14
|
-
stdin: process.stdin,
|
|
15
|
-
stdout: process.stdout,
|
|
16
9
|
writeFile: (path, contents) => writeFile(path, contents, "utf8"),
|
|
17
10
|
});
|
package/dist/bin/hsx.d.ts
CHANGED
package/dist/bin/hsx.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hsx.d.ts","sourceRoot":"","sources":["../../bin/hsx.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hsx.d.ts","sourceRoot":"","sources":["../../bin/hsx.ts"],"names":[],"mappings":""}
|
package/dist/bin/hsx.js
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* The `hsx` executable. Everything it does lives in `runCli`; this file only
|
|
4
|
-
* binds that function to the real filesystem and the real streams.
|
|
5
|
-
*/
|
|
6
2
|
import { readFile, writeFile } from "node:fs/promises";
|
|
7
3
|
import { runCli } from "../src/cli.js";
|
|
8
4
|
process.exitCode = await runCli(process.argv.slice(2), {
|
|
9
5
|
err: (line) => process.stderr.write(`${line}\n`),
|
|
10
6
|
out: (line) => process.stdout.write(`${line}\n`),
|
|
11
7
|
readFile: (path) => readFile(path, "utf8"),
|
|
12
|
-
stdin: process.stdin,
|
|
13
|
-
stdout: process.stdout,
|
|
14
8
|
writeFile: (path, contents) => writeFile(path, contents, "utf8"),
|
|
15
9
|
});
|
|
16
10
|
//# sourceMappingURL=hsx.js.map
|
package/dist/bin/hsx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hsx.js","sourceRoot":"","sources":["../../bin/hsx.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"hsx.js","sourceRoot":"","sources":["../../bin/hsx.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACrD,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;IAChD,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;IAChD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC1C,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;CACjE,CAAC,CAAC"}
|
package/dist/src/ast.d.ts
CHANGED
|
@@ -1,315 +1,120 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The HSX abstract syntax tree.
|
|
3
|
-
*
|
|
4
|
-
* Every node carries a byte-offset span into the original source. Spans are
|
|
5
|
-
* the compiler's source-mapping currency: diagnostics at every later stage
|
|
6
|
-
* (typecheck, lowering, verdicts) point at source coordinates, never at
|
|
7
|
-
* lowered IR paths. Offsets convert to line/column via `lineColAt`.
|
|
8
|
-
*/
|
|
9
1
|
export interface Span {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
/** Exclusive end byte offset into the source text. */
|
|
13
|
-
readonly end: number;
|
|
2
|
+
start: number;
|
|
3
|
+
end: number;
|
|
14
4
|
}
|
|
15
|
-
export interface
|
|
16
|
-
|
|
17
|
-
readonly
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
readonly raw: string;
|
|
64
|
-
readonly span: Span;
|
|
65
|
-
}
|
|
66
|
-
export interface BooleanExpr {
|
|
67
|
-
readonly kind: "boolean";
|
|
68
|
-
readonly span: Span;
|
|
69
|
-
readonly value: boolean;
|
|
70
|
-
}
|
|
71
|
-
/** A currency-indexed literal. The checker converts it to integer minor units. */
|
|
72
|
-
export interface MoneyExpr {
|
|
73
|
-
readonly currency: IdentExpr;
|
|
74
|
-
readonly kind: "money";
|
|
75
|
-
readonly raw: string;
|
|
76
|
-
readonly span: Span;
|
|
77
|
-
}
|
|
78
|
-
/** A dotted name used for modules, UDL operations, and field paths. */
|
|
79
|
-
export interface PathExpr {
|
|
80
|
-
readonly kind: "path";
|
|
81
|
-
readonly parts: readonly IdentExpr[];
|
|
82
|
-
readonly span: Span;
|
|
83
|
-
}
|
|
84
|
-
/** A nominal type application such as `money<SAR>` or `ref<invoice>`. */
|
|
85
|
-
export interface TypeApplyExpr {
|
|
86
|
-
readonly args: readonly Expr[];
|
|
87
|
-
readonly callee: IdentExpr;
|
|
88
|
-
readonly kind: "type_apply";
|
|
89
|
-
readonly span: Span;
|
|
90
|
-
}
|
|
91
|
-
/** A general instrument or constant application, with optional type arguments. */
|
|
92
|
-
export interface ApplyExpr {
|
|
93
|
-
readonly args: readonly Expr[];
|
|
94
|
-
readonly callee: PathExpr;
|
|
95
|
-
readonly kind: "apply";
|
|
96
|
-
readonly span: Span;
|
|
97
|
-
readonly typeArgs: readonly Expr[];
|
|
98
|
-
}
|
|
99
|
-
export interface PercentExpr {
|
|
100
|
-
/** Exact basis points: 99.5% is 9950. Percents never round. */
|
|
101
|
-
readonly bps: number;
|
|
102
|
-
readonly kind: "percent";
|
|
103
|
-
readonly raw: string;
|
|
104
|
-
readonly span: Span;
|
|
105
|
-
}
|
|
106
|
-
/** A type or constructor application: `money(SAR)`, `id(vehicle)`. */
|
|
107
|
-
export interface CallExpr {
|
|
108
|
-
readonly args: readonly Expr[];
|
|
109
|
-
readonly callee: IdentExpr;
|
|
110
|
-
readonly kind: "call";
|
|
111
|
-
readonly span: Span;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* An exit amount chosen by a decision port and bounded by stored money:
|
|
115
|
-
* `decided { field: damageAmount, bound: depositAmount, remainder: return }`.
|
|
116
|
-
*/
|
|
117
|
-
export interface DecidedAmountExpr {
|
|
118
|
-
readonly body: BlockExpr;
|
|
119
|
-
readonly kind: "decided_amount";
|
|
120
|
-
readonly span: Span;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* A reference to a decision port, optionally bounded (`port dispute within
|
|
124
|
-
* P14D`) or carrying the date that decides when the port has not
|
|
125
|
-
* (`port approve_release | at(releaseDueAt)`).
|
|
126
|
-
*/
|
|
127
|
-
export interface PortRefExpr {
|
|
128
|
-
/** `| at(<field>)`, the stored date field that resolves an undecided hold. */
|
|
129
|
-
readonly deadline?: IdentExpr;
|
|
130
|
-
readonly kind: "port_ref";
|
|
131
|
-
readonly name: IdentExpr;
|
|
132
|
-
readonly span: Span;
|
|
133
|
-
readonly within?: IdentExpr;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* `retention.release`, one settlement naming another settlement's declared
|
|
137
|
-
* referenceable exit. The checker resolves it wholly before lowering.
|
|
138
|
-
*/
|
|
139
|
-
export interface SettlementRefExpr {
|
|
140
|
-
readonly kind: "settlement_ref";
|
|
141
|
-
/** The exit named on the owner, e.g. `release`. */
|
|
142
|
-
readonly member: IdentExpr;
|
|
143
|
-
/** The settlement being referenced. */
|
|
144
|
-
readonly owner: IdentExpr;
|
|
145
|
-
readonly span: Span;
|
|
146
|
-
}
|
|
147
|
-
export interface ListExpr {
|
|
148
|
-
readonly items: readonly Expr[];
|
|
149
|
-
readonly kind: "list";
|
|
150
|
-
readonly span: Span;
|
|
151
|
-
}
|
|
152
|
-
/** A brace block of entries: `{ buyer: 1%, seller: 2% }`. */
|
|
153
|
-
export interface BlockExpr {
|
|
154
|
-
readonly entries: readonly Entry[];
|
|
155
|
-
readonly kind: "block";
|
|
156
|
-
readonly span: Span;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* A named typed binding inside an expression position:
|
|
160
|
-
* `amount: price: money(SAR)` binds the field name `price` to type
|
|
161
|
-
* `money(SAR)`: the entry key is `amount`, the value is this binding.
|
|
162
|
-
*/
|
|
163
|
-
export interface BindingExpr {
|
|
164
|
-
readonly kind: "binding";
|
|
165
|
-
readonly name: IdentExpr;
|
|
166
|
-
readonly span: Span;
|
|
167
|
-
readonly type: Expr;
|
|
168
|
-
}
|
|
169
|
-
export type Expr = ApplyExpr | BindingExpr | BlockExpr | BooleanExpr | CallExpr | DecidedAmountExpr | IdentExpr | ListExpr | MoneyExpr | NumberExpr | PathExpr | PercentExpr | PortRefExpr | SettlementRefExpr | StringExpr | TypeApplyExpr;
|
|
170
|
-
/**
|
|
171
|
-
* One keyed entry inside a declaration body. Three surface shapes normalize
|
|
172
|
-
* here: `payer: buyer` (key + value), `fees { ... }` (key + block value),
|
|
173
|
-
* and `on_cancel(funded) { ... }` (key + qualifiers + block value).
|
|
174
|
-
*/
|
|
5
|
+
export interface Diagnostic {
|
|
6
|
+
source?: string;
|
|
7
|
+
related?: readonly {
|
|
8
|
+
source: string;
|
|
9
|
+
span: Span;
|
|
10
|
+
message: string;
|
|
11
|
+
}[];
|
|
12
|
+
code: string;
|
|
13
|
+
message: string;
|
|
14
|
+
fix: string;
|
|
15
|
+
span: Span;
|
|
16
|
+
}
|
|
17
|
+
export type Expr = {
|
|
18
|
+
kind: "name" | "text" | "number" | "money" | "percent" | "duration" | "date";
|
|
19
|
+
value: string;
|
|
20
|
+
span: Span;
|
|
21
|
+
} | {
|
|
22
|
+
kind: "list";
|
|
23
|
+
items: Expr[];
|
|
24
|
+
span: Span;
|
|
25
|
+
} | {
|
|
26
|
+
kind: "block";
|
|
27
|
+
entries: Entry[];
|
|
28
|
+
span: Span;
|
|
29
|
+
} | {
|
|
30
|
+
kind: "call";
|
|
31
|
+
name: string;
|
|
32
|
+
args: Expr[];
|
|
33
|
+
span: Span;
|
|
34
|
+
} | {
|
|
35
|
+
kind: "type";
|
|
36
|
+
name: string;
|
|
37
|
+
target?: string;
|
|
38
|
+
owner?: string;
|
|
39
|
+
optional: boolean;
|
|
40
|
+
many?: boolean;
|
|
41
|
+
span: Span;
|
|
42
|
+
} | {
|
|
43
|
+
kind: "default";
|
|
44
|
+
type: Expr;
|
|
45
|
+
value: Expr;
|
|
46
|
+
span: Span;
|
|
47
|
+
} | {
|
|
48
|
+
kind: "capped";
|
|
49
|
+
rate: Expr;
|
|
50
|
+
cap: Expr;
|
|
51
|
+
span: Span;
|
|
52
|
+
};
|
|
175
53
|
export interface Entry {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
readonly bound: Expr;
|
|
180
|
-
};
|
|
181
|
-
readonly key: IdentExpr;
|
|
182
|
-
readonly qualifiers: readonly IdentExpr[];
|
|
183
|
-
readonly span: Span;
|
|
184
|
-
readonly value: Expr;
|
|
54
|
+
key: string;
|
|
55
|
+
value: Expr;
|
|
56
|
+
span: Span;
|
|
185
57
|
}
|
|
186
|
-
/** `program used_car_escrow "Used-car escrow"` names the company program. */
|
|
187
|
-
export interface ProgramDecl {
|
|
188
|
-
readonly kind: "program";
|
|
189
|
-
readonly name: IdentExpr;
|
|
190
|
-
readonly span: Span;
|
|
191
|
-
readonly title?: StringExpr;
|
|
192
|
-
}
|
|
193
|
-
/** `use held_settlement` selects one published catalog instrument. */
|
|
194
|
-
export interface UseDecl {
|
|
195
|
-
readonly instrument: IdentExpr;
|
|
196
|
-
readonly kind: "use";
|
|
197
|
-
readonly span: Span;
|
|
198
|
-
}
|
|
199
|
-
/** `expose held_settlement.release as releaseFunds` names a public action. */
|
|
200
|
-
export interface ExposeDecl {
|
|
201
|
-
readonly action: IdentExpr;
|
|
202
|
-
readonly instrument: IdentExpr;
|
|
203
|
-
readonly kind: "expose";
|
|
204
|
-
readonly publicName: IdentExpr;
|
|
205
|
-
readonly span: Span;
|
|
206
|
-
}
|
|
207
|
-
/** `import { held_payment } from "std/settlements"`. */
|
|
208
|
-
export interface ImportDecl {
|
|
209
|
-
readonly from: StringExpr;
|
|
210
|
-
readonly kind: "import";
|
|
211
|
-
readonly names: readonly IdentExpr[];
|
|
212
|
-
readonly span: Span;
|
|
213
|
-
}
|
|
214
|
-
/** `party buyer: person` with an optional attribute block. */
|
|
215
|
-
export interface PartyDecl {
|
|
216
|
-
readonly attrs?: BlockExpr;
|
|
217
|
-
readonly kind: "party";
|
|
218
|
-
readonly name: IdentExpr;
|
|
219
|
-
readonly partyKind: IdentExpr;
|
|
220
|
-
readonly span: Span;
|
|
221
|
-
}
|
|
222
|
-
/** `asset vehicle: good { title_transfer: off_platform }`. */
|
|
223
|
-
export interface AssetDecl {
|
|
224
|
-
readonly assetKind: IdentExpr;
|
|
225
|
-
readonly attrs?: BlockExpr;
|
|
226
|
-
readonly kind: "asset";
|
|
227
|
-
readonly name: IdentExpr;
|
|
228
|
-
readonly span: Span;
|
|
229
|
-
}
|
|
230
|
-
/** A full UDL subject-kind declaration. `asset` remains shorthand for this form. */
|
|
231
|
-
export interface SubjectDecl {
|
|
232
|
-
readonly body: BlockExpr;
|
|
233
|
-
readonly kind: "subject";
|
|
234
|
-
readonly name: IdentExpr;
|
|
235
|
-
readonly span: Span;
|
|
236
|
-
}
|
|
237
|
-
/** `port confirm_handover { allowed: [buyer], ... }`. */
|
|
238
|
-
export interface PortDecl {
|
|
239
|
-
readonly body: BlockExpr;
|
|
240
|
-
readonly kind: "port";
|
|
241
|
-
readonly name: IdentExpr;
|
|
242
|
-
readonly span: Span;
|
|
243
|
-
}
|
|
244
|
-
/** `module std.settlements` gives a file its importable module name. */
|
|
245
|
-
export interface ModuleDecl {
|
|
246
|
-
readonly kind: "module";
|
|
247
|
-
readonly name: PathExpr;
|
|
248
|
-
readonly span: Span;
|
|
249
|
-
}
|
|
250
|
-
export interface TypeParameter {
|
|
251
|
-
readonly name: IdentExpr;
|
|
252
|
-
readonly span: Span;
|
|
253
|
-
}
|
|
254
|
-
export interface Parameter {
|
|
255
|
-
readonly name: IdentExpr;
|
|
256
|
-
readonly span: Span;
|
|
257
|
-
readonly type: Expr;
|
|
258
|
-
}
|
|
259
|
-
/** The single general instrument definition form. */
|
|
260
58
|
export interface InstrumentDecl {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
59
|
+
kind: "instrument";
|
|
60
|
+
name: string;
|
|
61
|
+
parameters: Entry[];
|
|
62
|
+
body: Extract<Expr, {
|
|
63
|
+
kind: "block";
|
|
64
|
+
}>;
|
|
65
|
+
span: Span;
|
|
66
|
+
}
|
|
67
|
+
export interface AssignmentDecl {
|
|
68
|
+
kind: "assignment";
|
|
69
|
+
name: string;
|
|
70
|
+
target: string;
|
|
71
|
+
body: Extract<Expr, {
|
|
72
|
+
kind: "block";
|
|
73
|
+
}>;
|
|
74
|
+
span: Span;
|
|
75
|
+
}
|
|
76
|
+
export interface ObjectDecl {
|
|
77
|
+
kind: "object";
|
|
78
|
+
name: string;
|
|
79
|
+
title: string;
|
|
80
|
+
body: Extract<Expr, {
|
|
81
|
+
kind: "block";
|
|
82
|
+
}>;
|
|
83
|
+
span: Span;
|
|
84
|
+
}
|
|
85
|
+
export type Decl = InstrumentDecl | AssignmentDecl | ObjectDecl | {
|
|
86
|
+
kind: "party";
|
|
87
|
+
name: string;
|
|
88
|
+
partyKind: string;
|
|
89
|
+
role?: string;
|
|
90
|
+
span: Span;
|
|
91
|
+
} | {
|
|
92
|
+
kind: "use";
|
|
93
|
+
name: string;
|
|
94
|
+
span: Span;
|
|
95
|
+
} | {
|
|
96
|
+
kind: "expose";
|
|
97
|
+
target: string;
|
|
98
|
+
name: string;
|
|
99
|
+
span: Span;
|
|
100
|
+
} | {
|
|
101
|
+
kind: "hide";
|
|
102
|
+
target: string;
|
|
103
|
+
span: Span;
|
|
104
|
+
};
|
|
301
105
|
export interface Program {
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
export
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
106
|
+
name: string;
|
|
107
|
+
title: string;
|
|
108
|
+
currency: string;
|
|
109
|
+
header: boolean;
|
|
110
|
+
decls: Decl[];
|
|
111
|
+
span: Span;
|
|
112
|
+
}
|
|
113
|
+
export declare const lineColAt: (source: string, offset: number) => {
|
|
114
|
+
line: number;
|
|
115
|
+
column: number;
|
|
116
|
+
};
|
|
117
|
+
export type BlockExpr = Extract<Expr, {
|
|
118
|
+
kind: "block";
|
|
119
|
+
}>;
|
|
315
120
|
//# sourceMappingURL=ast.d.ts.map
|
package/dist/src/ast.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"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"}
|