@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
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Buyers fund a used device purchase, then accept delivery or raise a dispute before release.
|
|
2
|
+
program used_device_sales "Used device sales"
|
|
3
|
+
use escrow
|
|
4
|
+
|
|
5
|
+
object device "Device" {
|
|
6
|
+
fields {
|
|
7
|
+
model: text
|
|
8
|
+
condition: text
|
|
9
|
+
serialNumber: text
|
|
10
|
+
price: money
|
|
11
|
+
}
|
|
12
|
+
columns: [model, condition, price]
|
|
13
|
+
attach sale = escrow.hold {
|
|
14
|
+
expose create as create_sale
|
|
15
|
+
payer: actor, payee: owner
|
|
16
|
+
expose fund as pay_for_device
|
|
17
|
+
expose deliver as confirm_delivery
|
|
18
|
+
expose accept as accept_device
|
|
19
|
+
expose dispute as report_problem
|
|
20
|
+
expose verify_return as verify_return
|
|
21
|
+
expose refund as refund_buyer
|
|
22
|
+
expose cancel as cancel_sale
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// A tuition lender funds a student's fees over three interest-free instalments with borrowing limits.
|
|
2
|
+
program tuition_instalments "Tuition instalments"
|
|
3
|
+
use financing
|
|
4
|
+
|
|
5
|
+
object enrolment "Enrolment" {
|
|
6
|
+
fields { student: text, course: text, price: money }
|
|
7
|
+
columns: [student, course, price]
|
|
8
|
+
attach allowance = financing.limits {
|
|
9
|
+
expose create as create_allowance
|
|
10
|
+
borrower: owner, per_borrower: 12000 SAR
|
|
11
|
+
expose approve as approve_student
|
|
12
|
+
}
|
|
13
|
+
attach budget = financing.portfolio_limit {
|
|
14
|
+
expose create as create_budget
|
|
15
|
+
limit: 500000 SAR
|
|
16
|
+
expose approve as approve_budget
|
|
17
|
+
}
|
|
18
|
+
attach tuition = financing.installments {
|
|
19
|
+
expose create as create_tuition
|
|
20
|
+
borrower: owner, capital: operator
|
|
21
|
+
months: 3, profit: 0%, disburse_to: borrower
|
|
22
|
+
limits: allowance, portfolio: budget
|
|
23
|
+
expose sign as sign_tuition_plan
|
|
24
|
+
expose disburse as fund_tuition
|
|
25
|
+
expose payoff as repay_early
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
expose enrolment.tuition.payment.create as create_payment
|
|
30
|
+
expose enrolment.tuition.payment.pay as pay_instalment
|
|
31
|
+
expose enrolment.tuition.payment.refund as refund_payment
|
|
32
|
+
expose enrolment.tuition.payoff_quote.create as request_payoff_quote
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// A device retailer collects the purchase price and attaches cover with a claim review process.
|
|
2
|
+
program device_insurance "Device insurance"
|
|
3
|
+
use insurance
|
|
4
|
+
use money
|
|
5
|
+
party inspector: staff role claims
|
|
6
|
+
|
|
7
|
+
object device "Insured device" {
|
|
8
|
+
fields { model: text, serialNumber: text, purchaseDate: date }
|
|
9
|
+
columns: [model, serialNumber, purchaseDate]
|
|
10
|
+
attach purchase = money.transfer {
|
|
11
|
+
expose create as create_purchase
|
|
12
|
+
payer: owner, payee: operator
|
|
13
|
+
economics pay { purpose: earning, sourceParty: owner }
|
|
14
|
+
expose pay as pay_for_device
|
|
15
|
+
}
|
|
16
|
+
// Bind device_insurer to an ADL adapter before creating cover. Premiums net of commission go to its account.
|
|
17
|
+
attach protection = insurance.cover {
|
|
18
|
+
expose create as create_protection
|
|
19
|
+
holder: owner, adapter: "device_insurer", commission: 10%, covers: purchase
|
|
20
|
+
expose activate as activate_cover
|
|
21
|
+
expose cancel as cancel_cover
|
|
22
|
+
}
|
|
23
|
+
attach claim = insurance.claim {
|
|
24
|
+
expose create as create_claim
|
|
25
|
+
cover: protection, inspector: inspector
|
|
26
|
+
expose approve as approve_claim
|
|
27
|
+
expose deny as deny_claim
|
|
28
|
+
expose pay as pay_claim
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// A lending composition with limit approvals, wallet commitments and cash distribution transitions.
|
|
2
|
+
program community_business_lending "Community business lending"
|
|
3
|
+
use lending
|
|
4
|
+
use financing
|
|
5
|
+
use wallet
|
|
6
|
+
|
|
7
|
+
object business "Business funding" {
|
|
8
|
+
fields { businessName: text, purpose: text, price: money }
|
|
9
|
+
columns: [businessName, purpose, price]
|
|
10
|
+
attach allowance = financing.limits {
|
|
11
|
+
expose create as create_allowance
|
|
12
|
+
borrower: owner, per_borrower: 100000 SAR
|
|
13
|
+
expose approve as approve_borrower
|
|
14
|
+
}
|
|
15
|
+
attach budget = financing.portfolio_limit {
|
|
16
|
+
expose create as create_budget
|
|
17
|
+
limit: 2000000 SAR
|
|
18
|
+
expose approve as approve_budget
|
|
19
|
+
}
|
|
20
|
+
attach loan = financing.installments {
|
|
21
|
+
expose create as create_loan
|
|
22
|
+
borrower: owner, capital: operator
|
|
23
|
+
months: 12, profit: 6%, disburse_to: borrower
|
|
24
|
+
limits: allowance, portfolio: budget
|
|
25
|
+
expose sign as sign_loan
|
|
26
|
+
expose disburse as release_loan
|
|
27
|
+
expose payoff as repay_early
|
|
28
|
+
}
|
|
29
|
+
attach investor_balance = wallet.balance {
|
|
30
|
+
expose create as create_investor_balance
|
|
31
|
+
holder: actor
|
|
32
|
+
expose activate as open_wallet
|
|
33
|
+
expose topup as add_funds
|
|
34
|
+
}
|
|
35
|
+
attach funding = lending.round {
|
|
36
|
+
borrower: owner, plan: loan
|
|
37
|
+
expose create as open_funding
|
|
38
|
+
expose close as close_funding
|
|
39
|
+
}
|
|
40
|
+
attach investment = lending.commitment {
|
|
41
|
+
round: funding, wallet: investor_balance, investor: actor
|
|
42
|
+
expose create as invest
|
|
43
|
+
expose withdraw as withdraw_investment
|
|
44
|
+
}
|
|
45
|
+
attach returns = lending.distribution {
|
|
46
|
+
expose create as create_returns
|
|
47
|
+
round: funding, receipt: loan.settlement
|
|
48
|
+
expose prepare_cash as prepare_returns
|
|
49
|
+
expose distribute_cash as distribute_returns
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
expose business.loan.payment.create as create_payment
|
|
54
|
+
expose business.loan.payment.pay as pay_instalment
|
|
55
|
+
expose business.loan.payment.refund as refund_payment
|
|
56
|
+
expose business.loan.payoff_quote.create as request_payoff_quote
|
|
57
|
+
expose business.returns.share.create as create_return_share
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// A minimal financed car sale connects escrow to a three-instalment plan and lending limits.
|
|
2
|
+
program cars "Financed car sales"
|
|
3
|
+
use escrow
|
|
4
|
+
use financing
|
|
5
|
+
object car "Cars" {
|
|
6
|
+
fields { make: text, model: text, year: integer }
|
|
7
|
+
attach sale = escrow.hold { expose create as create_sale, payer: actor, payee: owner, expose fund as sell }
|
|
8
|
+
attach limits = financing.limits { expose create as create_limits, borrower: actor, per_borrower: 60000 SAR }
|
|
9
|
+
attach ceiling = financing.portfolio_limit { expose create as create_ceiling, limit: 1500000 SAR }
|
|
10
|
+
attach plan = financing.installments {
|
|
11
|
+
borrower: actor, capital: operator, share: 25%
|
|
12
|
+
months: 3, profit: 2.5%, funds: sale, limits: limits, portfolio: ceiling
|
|
13
|
+
expose create as finance
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Freelancers publish offers and clients place orders with funds held until work is accepted.
|
|
2
|
+
program freelance_marketplace "Freelance marketplace"
|
|
3
|
+
use marketplace
|
|
4
|
+
use escrow
|
|
5
|
+
|
|
6
|
+
object project "Project" {
|
|
7
|
+
fields { brief: text, deliverable: text, price: money }
|
|
8
|
+
columns: [brief, deliverable, price]
|
|
9
|
+
attach offer = marketplace.listing {
|
|
10
|
+
expose create as create_offer
|
|
11
|
+
seller: owner
|
|
12
|
+
expose publish as publish_offer
|
|
13
|
+
expose withdraw as withdraw_offer
|
|
14
|
+
}
|
|
15
|
+
attach order = marketplace.order {
|
|
16
|
+
expose create as create_order
|
|
17
|
+
listing: offer, buyer: actor
|
|
18
|
+
expose commit as place_order
|
|
19
|
+
expose fulfill as finish_order
|
|
20
|
+
}
|
|
21
|
+
attach payment = escrow.hold {
|
|
22
|
+
expose create as create_payment
|
|
23
|
+
payer: actor, payee: owner
|
|
24
|
+
expose fund as fund_project
|
|
25
|
+
expose deliver as submit_work
|
|
26
|
+
expose accept as accept_work
|
|
27
|
+
expose dispute as dispute_work
|
|
28
|
+
expose verify_return as verify_return
|
|
29
|
+
expose refund as refund_client
|
|
30
|
+
expose cancel as cancel_payment
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// A tutoring studio collects a fixed fee for each lesson and can cancel unpaid bookings.
|
|
2
|
+
program tutoring_studio "Tutoring studio"
|
|
3
|
+
use money
|
|
4
|
+
|
|
5
|
+
object lesson "Lesson" {
|
|
6
|
+
fields {
|
|
7
|
+
student: text
|
|
8
|
+
tutor: text
|
|
9
|
+
startsAt: date
|
|
10
|
+
}
|
|
11
|
+
columns: [student, tutor, startsAt]
|
|
12
|
+
attach payment = money.transfer {
|
|
13
|
+
expose create as create_payment
|
|
14
|
+
payer: actor, payee: operator, amount: 150 SAR
|
|
15
|
+
economics pay { purpose: earning, sourceParty: actor }
|
|
16
|
+
expose pay as pay_for_lesson
|
|
17
|
+
expose cancel as cancel_payment
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// A business rents equipment with a 1000 SAR deposit and a single 50 SAR late fee.
|
|
2
|
+
// On-time return refunds 1000 SAR; late return pays the operator 50 SAR and refunds 950 SAR.
|
|
3
|
+
program equipment_rental "Equipment rental"
|
|
4
|
+
party renter: business
|
|
5
|
+
|
|
6
|
+
// Program-local instruments have fixed terms and parties, not tunable parameters.
|
|
7
|
+
instrument deposit {
|
|
8
|
+
summary: "Hold a rental deposit, then return it less any fixed late fee."
|
|
9
|
+
fields {
|
|
10
|
+
renter: account of renter
|
|
11
|
+
held: account of self
|
|
12
|
+
amount: money = 1000 SAR
|
|
13
|
+
lateFee: money = 50 SAR
|
|
14
|
+
dueAt: date
|
|
15
|
+
refund: money?
|
|
16
|
+
}
|
|
17
|
+
lifecycle { states: [pending, funded, returned, cancelled], initial: pending }
|
|
18
|
+
action create {
|
|
19
|
+
actor: { party: renter }
|
|
20
|
+
requires self.dueAt > self.now
|
|
21
|
+
}
|
|
22
|
+
action fund {
|
|
23
|
+
from: pending, to: funded, actor: { party: renter }
|
|
24
|
+
deadline: { at: self.dueAt }
|
|
25
|
+
moves self.amount from self.renter to self.held
|
|
26
|
+
}
|
|
27
|
+
action return_on_time {
|
|
28
|
+
from: funded, to: returned, actor: { party: programOperator }
|
|
29
|
+
deadline: { at: self.dueAt }
|
|
30
|
+
subject { returnReference: text }
|
|
31
|
+
moves self.held.balance from self.held to self.renter
|
|
32
|
+
}
|
|
33
|
+
action return_late {
|
|
34
|
+
from: funded, to: returned, actor: { party: programOperator }
|
|
35
|
+
due: { at: self.dueAt }
|
|
36
|
+
subject { returnReference: text }
|
|
37
|
+
calculate: [{ target: refund, op: subtract, base: { field: self.held.balance }, subtract: [{ field: self.lateFee }] }]
|
|
38
|
+
moves self.lateFee from self.held to programOperator
|
|
39
|
+
moves self.refund from self.held to self.renter
|
|
40
|
+
}
|
|
41
|
+
action cancel { from: pending, to: cancelled, actor: { party: renter } }
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
object rental "Equipment rental" {
|
|
45
|
+
fields { equipment: text }
|
|
46
|
+
columns: [equipment, dueAt]
|
|
47
|
+
attach security = deposit {
|
|
48
|
+
expose create as agree_rental
|
|
49
|
+
expose fund as pay_deposit
|
|
50
|
+
expose return_on_time as return_equipment
|
|
51
|
+
expose return_late as return_equipment_late
|
|
52
|
+
expose cancel as cancel_rental
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
hide deposit.create
|
|
57
|
+
hide deposit.fund
|
|
58
|
+
hide deposit.return_on_time
|
|
59
|
+
hide deposit.return_late
|
|
60
|
+
hide deposit.cancel
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// A repair shop records inspection and approval evidence before it can complete a job.
|
|
2
|
+
program repair_shop "Repair approvals"
|
|
3
|
+
|
|
4
|
+
instrument assessment {
|
|
5
|
+
summary: "Inspect the repair, collect approval, then record completion."
|
|
6
|
+
fields { inspectedAt: date?, approvedAt: date? }
|
|
7
|
+
lifecycle { states: [submitted, inspected, approved, completed, rejected], initial: submitted }
|
|
8
|
+
action create {}
|
|
9
|
+
action inspect {
|
|
10
|
+
from: submitted, to: inspected, actor: { party: programOperator }
|
|
11
|
+
subject { inspectionNotes: text }
|
|
12
|
+
set: { inspectedAt: { field: self.now } }
|
|
13
|
+
}
|
|
14
|
+
action approve {
|
|
15
|
+
from: inspected, to: approved, actor: { party: programOperator }
|
|
16
|
+
subject { approvalReference: text }
|
|
17
|
+
set: { approvedAt: { field: self.now } }
|
|
18
|
+
}
|
|
19
|
+
action reject {
|
|
20
|
+
from: inspected, to: rejected, actor: { party: programOperator }
|
|
21
|
+
}
|
|
22
|
+
action complete {
|
|
23
|
+
from: approved, to: completed, actor: { party: programOperator }
|
|
24
|
+
subject { completionNotes: text }
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
object repair "Repair" {
|
|
29
|
+
fields { item: text, problem: text }
|
|
30
|
+
columns: [item, problem]
|
|
31
|
+
attach review = assessment {
|
|
32
|
+
expose create as create_review
|
|
33
|
+
expose inspect as inspect_repair
|
|
34
|
+
expose approve as approve_repair
|
|
35
|
+
expose reject as reject_repair
|
|
36
|
+
expose complete as complete_repair
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
hide assessment.create
|
|
41
|
+
hide assessment.inspect
|
|
42
|
+
hide assessment.approve
|
|
43
|
+
hide assessment.reject
|
|
44
|
+
hide assessment.complete
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// An equipment lender keeps an ageing report over its financed purchases and recorded repayments.
|
|
2
|
+
program equipment_loan_reports "Equipment loan reports"
|
|
3
|
+
use reporting
|
|
4
|
+
use financing
|
|
5
|
+
|
|
6
|
+
object purchase "Equipment loan" {
|
|
7
|
+
fields { businessName: text, equipment: text, price: money }
|
|
8
|
+
columns: [businessName, equipment, price]
|
|
9
|
+
attach allowance = financing.limits {
|
|
10
|
+
expose create as create_allowance
|
|
11
|
+
borrower: owner, per_borrower: 200000 SAR
|
|
12
|
+
expose approve as approve_business
|
|
13
|
+
}
|
|
14
|
+
attach budget = financing.portfolio_limit {
|
|
15
|
+
expose create as create_budget
|
|
16
|
+
limit: 5000000 SAR
|
|
17
|
+
expose approve as approve_budget
|
|
18
|
+
}
|
|
19
|
+
attach loan = financing.installments {
|
|
20
|
+
expose create as create_loan
|
|
21
|
+
borrower: owner, capital: operator
|
|
22
|
+
months: 12, profit: 6%, disburse_to: borrower
|
|
23
|
+
limits: allowance, portfolio: budget
|
|
24
|
+
expose sign as sign_purchase_loan
|
|
25
|
+
expose disburse as fund_purchase
|
|
26
|
+
}
|
|
27
|
+
attach reports = reporting.portfolio { expose create as create_reports, on: loan }
|
|
28
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Six members contribute to a shared pot and receive it in their agreed calendar order.
|
|
2
|
+
program neighbourhood_savings "Savings circle"
|
|
3
|
+
use savings
|
|
4
|
+
|
|
5
|
+
object group "Savings group" {
|
|
6
|
+
fields { groupName: text, purpose: text }
|
|
7
|
+
columns: [groupName, purpose]
|
|
8
|
+
attach circle = savings.circle {
|
|
9
|
+
expose create as create_circle
|
|
10
|
+
contribution: 500 SAR, members: 6, starts: 2027-01-01
|
|
11
|
+
expose disband as disband_circle
|
|
12
|
+
expose close as close_circle
|
|
13
|
+
}
|
|
14
|
+
attach membership = savings.membership {
|
|
15
|
+
expose create as create_membership
|
|
16
|
+
circle: circle, member: actor
|
|
17
|
+
expose activate as confirm_membership
|
|
18
|
+
expose withdraw as leave_circle
|
|
19
|
+
}
|
|
20
|
+
// Contributions and each member's payout follow the declared calendar.
|
|
21
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// A car finance company services loans with late charges, payment reminders and early repayment.
|
|
2
|
+
program car_financing "Car financing"
|
|
3
|
+
use escrow
|
|
4
|
+
use financing
|
|
5
|
+
use collections
|
|
6
|
+
object car "Car" {
|
|
7
|
+
fields { make: text, model: text, year: integer, vin: text, price: money }
|
|
8
|
+
columns: [make, model, year, vin, price]
|
|
9
|
+
attach sale = escrow.hold { expose create as create_sale, payer: actor, payee: operator, expose fund as purchase }
|
|
10
|
+
attach limits = financing.limits { expose create as create_limits, borrower: actor, per_borrower: 250000 SAR }
|
|
11
|
+
attach ceiling = financing.portfolio_limit { expose create as create_ceiling, limit: 10000000 SAR }
|
|
12
|
+
attach plan = financing.installments {
|
|
13
|
+
borrower: actor, capital: operator
|
|
14
|
+
months: 36, profit: 8.5%, down_payment: 10%
|
|
15
|
+
apply: fines_profit_principal, payoff_rebate: 100%, write_off_after: 90d
|
|
16
|
+
funds: sale, limits: limits, portfolio: ceiling
|
|
17
|
+
expose create as finance, expose sign as sign_contract, expose payoff as payoff
|
|
18
|
+
}
|
|
19
|
+
attach late = financing.late_charge {
|
|
20
|
+
expose create as create_late
|
|
21
|
+
on: plan, grace: 3d, fine: 50 SAR, cap: 25 SAR
|
|
22
|
+
fines_to: operator, costs_to: operator, borrower: actor
|
|
23
|
+
}
|
|
24
|
+
attach reminders = collections.reminder { expose create as create_reminders, on: plan, operator: operator, before_days: 3, overdue_days: 1 }
|
|
25
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Members prepay for workshop visits and the studio reserves each spend before charging it.
|
|
2
|
+
program workshop_credits "Workshop credits"
|
|
3
|
+
use wallet
|
|
4
|
+
|
|
5
|
+
object membership "Membership" {
|
|
6
|
+
fields { memberName: text, membershipNumber: text }
|
|
7
|
+
columns: [memberName, membershipNumber]
|
|
8
|
+
attach balance = wallet.balance {
|
|
9
|
+
expose create as create_balance
|
|
10
|
+
holder: owner
|
|
11
|
+
expose activate as open_balance
|
|
12
|
+
expose topup as add_credit
|
|
13
|
+
expose withdraw as withdraw_credit
|
|
14
|
+
expose close as close_balance
|
|
15
|
+
}
|
|
16
|
+
attach visit = wallet.spend {
|
|
17
|
+
expose create as create_visit
|
|
18
|
+
wallet: balance, payee: operator
|
|
19
|
+
economics pay { purpose: earning, sourceParty: owner }
|
|
20
|
+
expose reserve as reserve_visit
|
|
21
|
+
expose pay as charge_visit
|
|
22
|
+
expose cancel as cancel_visit
|
|
23
|
+
}
|
|
24
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hyperscale0/hsx",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.124",
|
|
4
4
|
"description": "The strictly typed HSX language: compile total financial programs into canonical UDL.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"hsx",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"type": "git",
|
|
22
22
|
"url": "git+https://github.com/hyperscale0/hyperscale-hsx.git"
|
|
23
23
|
},
|
|
24
|
-
"license": "
|
|
24
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
25
25
|
"author": "Hyperscale LLC",
|
|
26
26
|
"type": "module",
|
|
27
27
|
"sideEffects": false,
|
|
@@ -40,26 +40,28 @@
|
|
|
40
40
|
"types": "./dist/src/cost.d.ts",
|
|
41
41
|
"default": "./dist/src/cost.js"
|
|
42
42
|
},
|
|
43
|
-
"./
|
|
44
|
-
"types": "./dist/src/
|
|
45
|
-
"default": "./dist/src/
|
|
43
|
+
"./examples": {
|
|
44
|
+
"types": "./dist/src/examples.d.ts",
|
|
45
|
+
"default": "./dist/src/examples.js"
|
|
46
|
+
},
|
|
47
|
+
"./language": {
|
|
48
|
+
"types": "./dist/src/language.d.ts",
|
|
49
|
+
"default": "./dist/src/language.js"
|
|
46
50
|
},
|
|
47
51
|
"./package.json": "./package.json",
|
|
48
52
|
"./std/*": "./std/*"
|
|
49
53
|
},
|
|
50
54
|
"files": [
|
|
55
|
+
"LICENSE.md",
|
|
56
|
+
"NOTICE.md",
|
|
51
57
|
"AUTHORS",
|
|
52
58
|
"CHANGELOG.md",
|
|
53
|
-
"LICENSE",
|
|
54
|
-
"LICENSING.md",
|
|
55
59
|
"README.md",
|
|
56
60
|
"SECURITY.md",
|
|
57
|
-
"TRADEMARKS.md",
|
|
58
61
|
"bin",
|
|
59
62
|
"dist",
|
|
60
63
|
"docs",
|
|
61
64
|
"examples",
|
|
62
|
-
"skills",
|
|
63
65
|
"std",
|
|
64
66
|
"src"
|
|
65
67
|
],
|
|
@@ -70,30 +72,30 @@
|
|
|
70
72
|
"access": "public"
|
|
71
73
|
},
|
|
72
74
|
"scripts": {
|
|
73
|
-
"build": "tsc -p tsconfig.build.json",
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"docs:check": "bun scripts/docs/check.ts",
|
|
77
|
-
"examples:build": "bun scripts/examples/build.ts",
|
|
78
|
-
"playground:build": "bun scripts/build-playground.ts",
|
|
79
|
-
"playground:check": "bun scripts/build-playground.ts --check",
|
|
75
|
+
"build": "bun run generate && tsc -p tsconfig.build.json && tsc -p playground/tsconfig.json && bun scripts/build-playground.ts",
|
|
76
|
+
"typecheck": "tsc -p tsconfig.json",
|
|
77
|
+
"test": "bun test test",
|
|
80
78
|
"postpack": "bun scripts/pack-exports.ts restore",
|
|
81
79
|
"prepack": "bun run build && bun scripts/pack-exports.ts apply",
|
|
82
80
|
"std:bundle": "bun scripts/bundle-std.ts",
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
81
|
+
"generate": "bun run std:bundle && bun run examples:bundle",
|
|
82
|
+
"prepare": "bun run std:bundle && bun run examples:bundle",
|
|
83
|
+
"check": "bun run typecheck && tsc -p playground/tsconfig.json && bun test test",
|
|
84
|
+
"examples:bundle": "bun scripts/bundle-examples.ts"
|
|
86
85
|
},
|
|
87
86
|
"dependencies": {
|
|
88
|
-
"@hyperscale0/
|
|
87
|
+
"@hyperscale0/adl": "1.0.124",
|
|
88
|
+
"@hyperscale0/udl": "1.0.124",
|
|
89
|
+
"fast-sha256": "1.3.0"
|
|
89
90
|
},
|
|
90
91
|
"devDependencies": {
|
|
91
|
-
"
|
|
92
|
-
"typescript": "
|
|
92
|
+
"bun-types": "1.4.2",
|
|
93
|
+
"typescript": "7.0.2"
|
|
93
94
|
},
|
|
94
95
|
"contributors": [
|
|
95
96
|
"Meshael AlBakaawi",
|
|
96
97
|
"Amir Ayub",
|
|
97
98
|
"Sara AlBakaawi"
|
|
98
|
-
]
|
|
99
|
+
],
|
|
100
|
+
"gitHead": "8275c2a026b6cc8a628ab11198ce0eefb8568982"
|
|
99
101
|
}
|