@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.
Files changed (316) hide show
  1. package/CHANGELOG.md +5 -256
  2. package/LICENSE.md +356 -0
  3. package/NOTICE.md +8 -0
  4. package/README.md +44 -44
  5. package/bin/hsx.ts +0 -7
  6. package/dist/bin/hsx.d.ts +0 -4
  7. package/dist/bin/hsx.d.ts.map +1 -1
  8. package/dist/bin/hsx.js +0 -6
  9. package/dist/bin/hsx.js.map +1 -1
  10. package/dist/src/ast.d.ts +113 -308
  11. package/dist/src/ast.d.ts.map +1 -1
  12. package/dist/src/ast.js +7 -71
  13. package/dist/src/ast.js.map +1 -1
  14. package/dist/src/attachment-economics.d.ts +5 -0
  15. package/dist/src/attachment-economics.d.ts.map +1 -0
  16. package/dist/src/attachment-economics.js +55 -0
  17. package/dist/src/attachment-economics.js.map +1 -0
  18. package/dist/src/binding-contract.d.ts +22 -0
  19. package/dist/src/binding-contract.d.ts.map +1 -0
  20. package/dist/src/binding-contract.js +74 -0
  21. package/dist/src/binding-contract.js.map +1 -0
  22. package/dist/src/cli.d.ts +4 -19
  23. package/dist/src/cli.d.ts.map +1 -1
  24. package/dist/src/cli.js +89 -276
  25. package/dist/src/cli.js.map +1 -1
  26. package/dist/src/compile.d.ts +34 -66
  27. package/dist/src/compile.d.ts.map +1 -1
  28. package/dist/src/compile.js +2949 -117
  29. package/dist/src/compile.js.map +1 -1
  30. package/dist/src/cost.d.ts +8 -75
  31. package/dist/src/cost.d.ts.map +1 -1
  32. package/dist/src/cost.js +54 -364
  33. package/dist/src/cost.js.map +1 -1
  34. package/dist/src/diagnostics.d.ts +14 -9
  35. package/dist/src/diagnostics.d.ts.map +1 -1
  36. package/dist/src/diagnostics.js +39 -416
  37. package/dist/src/diagnostics.js.map +1 -1
  38. package/dist/src/examples-bundle.d.ts +3 -0
  39. package/dist/src/examples-bundle.d.ts.map +1 -0
  40. package/dist/src/examples-bundle.js +18 -0
  41. package/dist/src/examples-bundle.js.map +1 -0
  42. package/dist/src/examples.d.ts +10 -0
  43. package/dist/src/examples.d.ts.map +1 -0
  44. package/dist/src/examples.js +2 -0
  45. package/dist/src/examples.js.map +1 -0
  46. package/dist/src/format.d.ts +8 -7
  47. package/dist/src/format.d.ts.map +1 -1
  48. package/dist/src/format.js +9 -175
  49. package/dist/src/format.js.map +1 -1
  50. package/dist/src/header-source.d.ts +3 -0
  51. package/dist/src/header-source.d.ts.map +1 -0
  52. package/dist/src/header-source.js +41 -0
  53. package/dist/src/header-source.js.map +1 -0
  54. package/dist/src/headers.d.ts +64 -0
  55. package/dist/src/headers.d.ts.map +1 -0
  56. package/dist/src/headers.js +167 -0
  57. package/dist/src/headers.js.map +1 -0
  58. package/dist/src/index.d.ts +7 -11
  59. package/dist/src/index.d.ts.map +1 -1
  60. package/dist/src/index.js +4 -9
  61. package/dist/src/index.js.map +1 -1
  62. package/dist/src/keywords.d.ts +56 -0
  63. package/dist/src/keywords.d.ts.map +1 -0
  64. package/dist/src/keywords.js +133 -0
  65. package/dist/src/keywords.js.map +1 -0
  66. package/dist/src/language.d.ts +26 -0
  67. package/dist/src/language.d.ts.map +1 -0
  68. package/dist/src/language.js +440 -0
  69. package/dist/src/language.js.map +1 -0
  70. package/dist/src/lex.d.ts +13 -28
  71. package/dist/src/lex.d.ts.map +1 -1
  72. package/dist/src/lex.js +119 -145
  73. package/dist/src/lex.js.map +1 -1
  74. package/dist/src/parse.d.ts +4 -17
  75. package/dist/src/parse.d.ts.map +1 -1
  76. package/dist/src/parse.js +484 -1036
  77. package/dist/src/parse.js.map +1 -1
  78. package/dist/src/std-bundle.d.ts.map +1 -1
  79. package/dist/src/std-bundle.js +11 -84
  80. package/dist/src/std-bundle.js.map +1 -1
  81. package/dist/src/std-library.d.ts +1 -1
  82. package/dist/src/std-library.d.ts.map +1 -1
  83. package/dist/src/std-library.js +1 -5
  84. package/dist/src/std-library.js.map +1 -1
  85. package/dist/src/tunables.d.ts +7 -0
  86. package/dist/src/tunables.d.ts.map +1 -0
  87. package/dist/src/tunables.js +27 -0
  88. package/dist/src/tunables.js.map +1 -0
  89. package/docs/README.md +528 -26
  90. package/docs/assets/brand/hsx-horizontal-white.svg +1 -0
  91. package/docs/assets/brand/hsx-horizontal.svg +1 -0
  92. package/docs/assets/brand/hsx-stacked-white.svg +1 -0
  93. package/docs/assets/brand/hsx-stacked.svg +1 -0
  94. package/docs/assets/brand/manifest.json +30 -0
  95. package/docs/assets/hsx.svg +11 -0
  96. package/examples/cards.hsx +34 -0
  97. package/examples/collections.hsx +37 -0
  98. package/examples/cost-table.json +633 -385
  99. package/examples/escrow.hsx +24 -0
  100. package/examples/financing.hsx +32 -0
  101. package/examples/insurance.hsx +30 -0
  102. package/examples/lending.hsx +57 -0
  103. package/examples/library.hsx +15 -0
  104. package/examples/marketplace.hsx +32 -0
  105. package/examples/money.hsx +19 -0
  106. package/examples/rental-deposit.hsx +60 -0
  107. package/examples/repair-approval.hsx +44 -0
  108. package/examples/reporting.hsx +28 -0
  109. package/examples/savings.hsx +21 -0
  110. package/examples/serviced.hsx +25 -0
  111. package/examples/wallet.hsx +24 -0
  112. package/package.json +25 -23
  113. package/src/ast.ts +83 -440
  114. package/src/attachment-economics.ts +103 -0
  115. package/src/binding-contract.ts +104 -0
  116. package/src/cli.ts +95 -325
  117. package/src/compile.ts +4063 -209
  118. package/src/cost.ts +71 -574
  119. package/src/diagnostics.ts +57 -437
  120. package/src/examples-bundle.ts +19 -0
  121. package/src/examples.ts +9 -0
  122. package/src/format.ts +12 -256
  123. package/src/header-source.ts +54 -0
  124. package/src/headers.ts +195 -0
  125. package/src/index.ts +18 -33
  126. package/src/keywords.ts +134 -0
  127. package/src/language.ts +629 -0
  128. package/src/lex.ts +131 -192
  129. package/src/parse.ts +489 -1195
  130. package/src/std-bundle.ts +12 -88
  131. package/src/std-library.ts +2 -7
  132. package/src/tunables.ts +36 -0
  133. package/std/cards.hsx +85 -0
  134. package/std/collections.hsx +90 -0
  135. package/std/escrow.hsx +73 -0
  136. package/std/financing.hsx +683 -0
  137. package/std/insurance.hsx +89 -0
  138. package/std/lending.hsx +138 -0
  139. package/std/marketplace.hsx +123 -0
  140. package/std/money.hsx +173 -0
  141. package/std/reporting.hsx +753 -0
  142. package/std/savings.hsx +68 -0
  143. package/std/wallet.hsx +57 -0
  144. package/LICENSE +0 -661
  145. package/LICENSING.md +0 -52
  146. package/TRADEMARKS.md +0 -35
  147. package/dist/src/emit.d.ts +0 -34
  148. package/dist/src/emit.d.ts.map +0 -1
  149. package/dist/src/emit.js +0 -137
  150. package/dist/src/emit.js.map +0 -1
  151. package/dist/src/entry-overrides.d.ts +0 -58
  152. package/dist/src/entry-overrides.d.ts.map +0 -1
  153. package/dist/src/entry-overrides.js +0 -284
  154. package/dist/src/entry-overrides.js.map +0 -1
  155. package/dist/src/ir.d.ts +0 -66
  156. package/dist/src/ir.d.ts.map +0 -1
  157. package/dist/src/ir.js +0 -15
  158. package/dist/src/ir.js.map +0 -1
  159. package/dist/src/limits.d.ts +0 -21
  160. package/dist/src/limits.d.ts.map +0 -1
  161. package/dist/src/limits.js +0 -21
  162. package/dist/src/limits.js.map +0 -1
  163. package/dist/src/lsp/server.d.ts +0 -32
  164. package/dist/src/lsp/server.d.ts.map +0 -1
  165. package/dist/src/lsp/server.js +0 -391
  166. package/dist/src/lsp/server.js.map +0 -1
  167. package/dist/src/modules.d.ts +0 -38
  168. package/dist/src/modules.d.ts.map +0 -1
  169. package/dist/src/modules.js +0 -368
  170. package/dist/src/modules.js.map +0 -1
  171. package/dist/src/typecheck.d.ts +0 -8
  172. package/dist/src/typecheck.d.ts.map +0 -1
  173. package/dist/src/typecheck.js +0 -2958
  174. package/dist/src/typecheck.js.map +0 -1
  175. package/dist/src/version.d.ts +0 -5
  176. package/dist/src/version.d.ts.map +0 -1
  177. package/dist/src/version.js +0 -5
  178. package/dist/src/version.js.map +0 -1
  179. package/docs/guide/01-first-program.md +0 -24
  180. package/docs/guide/02-money.md +0 -25
  181. package/docs/guide/03-instruments.md +0 -22
  182. package/docs/guide/04-lifecycles.md +0 -25
  183. package/docs/guide/05-fees-and-splits.md +0 -45
  184. package/docs/guide/06-schedules.md +0 -22
  185. package/docs/guide/07-composition.md +0 -46
  186. package/docs/guide/08-writing-a-module.md +0 -26
  187. package/docs/guide/09-cost.md +0 -24
  188. package/docs/guide/10-diagnostics.md +0 -27
  189. package/docs/llms-full.txt +0 -1739
  190. package/docs/llms.txt +0 -45
  191. package/docs/playground.md +0 -54
  192. package/docs/reference/cli.md +0 -35
  193. package/docs/reference/diagnostics.md +0 -619
  194. package/docs/reference/grammar.md +0 -39
  195. package/docs/reference/std/advance.md +0 -35
  196. package/docs/reference/std/cancellable_booking.md +0 -35
  197. package/docs/reference/std/captured_payment.md +0 -43
  198. package/docs/reference/std/conditional_disbursement.md +0 -33
  199. package/docs/reference/std/credit_facility.md +0 -35
  200. package/docs/reference/std/held_payment.md +0 -64
  201. package/docs/reference/std/instant_transfer.md +0 -30
  202. package/docs/reference/std/metered.md +0 -27
  203. package/docs/reference/std/pooled_split.md +0 -26
  204. package/docs/reference/std/premium_forward.md +0 -39
  205. package/docs/reference/std/reconciled_payout.md +0 -33
  206. package/docs/reference/std/recurring_collection.md +0 -25
  207. package/docs/reference/std/rotating_pool.md +0 -42
  208. package/docs/reference/std/scheduled.md +0 -51
  209. package/docs/reference/std/security_deposit.md +0 -46
  210. package/docs/reference/std/settlement_batch.md +0 -42
  211. package/docs/reference/std/swap.md +0 -46
  212. package/docs/reference/std/threshold_pool.md +0 -47
  213. package/docs/reference/std/weighted_distribution.md +0 -39
  214. package/docs/reference/types.md +0 -20
  215. package/docs/reference/udl-output.md +0 -13
  216. package/docs/sessions/2026-09-02-two-instruments.hsx +0 -21
  217. package/docs/sessions/2026-09-02-two-instruments.md +0 -41
  218. package/examples/01-first-program/README.md +0 -45
  219. package/examples/01-first-program/tip-jar.hsx +0 -17
  220. package/examples/02-imports-and-archetypes/README.md +0 -96
  221. package/examples/02-imports-and-archetypes/photo-booth.hsx +0 -37
  222. package/examples/03-diagnostics/README.md +0 -68
  223. package/examples/03-diagnostics/corner-shop-fixed.hsx +0 -22
  224. package/examples/03-diagnostics/corner-shop.hsx +0 -19
  225. package/examples/04-complete-product/README.md +0 -84
  226. package/examples/04-complete-product/study-hall.hsx +0 -67
  227. package/examples/05-watch-club/README.md +0 -9
  228. package/examples/05-watch-club/watch-club.hsx +0 -124
  229. package/examples/README.md +0 -18
  230. package/examples/advance/README.md +0 -3
  231. package/examples/advance/advance.hsx +0 -13
  232. package/examples/advance/advance.udl +0 -339
  233. package/examples/cancellable_booking/README.md +0 -3
  234. package/examples/cancellable_booking/cancellable_booking.hsx +0 -14
  235. package/examples/cancellable_booking/cancellable_booking.udl +0 -391
  236. package/examples/captured_payment/README.md +0 -3
  237. package/examples/captured_payment/captured_payment.hsx +0 -21
  238. package/examples/captured_payment/captured_payment.udl +0 -677
  239. package/examples/conditional_disbursement/README.md +0 -3
  240. package/examples/conditional_disbursement/conditional_disbursement.hsx +0 -17
  241. package/examples/conditional_disbursement/conditional_disbursement.udl +0 -412
  242. package/examples/credit_facility/README.md +0 -3
  243. package/examples/credit_facility/credit_facility.hsx +0 -27
  244. package/examples/credit_facility/credit_facility.udl +0 -1373
  245. package/examples/held_payment/README.md +0 -3
  246. package/examples/held_payment/held_payment.hsx +0 -13
  247. package/examples/held_payment/held_payment.udl +0 -507
  248. package/examples/instant_transfer/README.md +0 -3
  249. package/examples/instant_transfer/instant_transfer.hsx +0 -16
  250. package/examples/instant_transfer/instant_transfer.udl +0 -364
  251. package/examples/metered/README.md +0 -3
  252. package/examples/metered/metered.hsx +0 -13
  253. package/examples/metered/metered.udl +0 -247
  254. package/examples/pooled_split/README.md +0 -3
  255. package/examples/pooled_split/pooled_split.hsx +0 -15
  256. package/examples/pooled_split/pooled_split.udl +0 -425
  257. package/examples/premium_forward/README.md +0 -3
  258. package/examples/premium_forward/premium_forward.hsx +0 -19
  259. package/examples/premium_forward/premium_forward.udl +0 -594
  260. package/examples/reconciled_payout/README.md +0 -3
  261. package/examples/reconciled_payout/reconciled_payout.hsx +0 -13
  262. package/examples/reconciled_payout/reconciled_payout.udl +0 -303
  263. package/examples/recurring_collection/README.md +0 -3
  264. package/examples/recurring_collection/recurring_collection.hsx +0 -21
  265. package/examples/recurring_collection/recurring_collection.udl +0 -1130
  266. package/examples/rotating_pool/README.md +0 -3
  267. package/examples/rotating_pool/rotating_pool.hsx +0 -18
  268. package/examples/rotating_pool/rotating_pool.udl +0 -4352
  269. package/examples/scheduled/README.md +0 -3
  270. package/examples/scheduled/scheduled.hsx +0 -12
  271. package/examples/scheduled/scheduled.udl +0 -335
  272. package/examples/security_deposit/README.md +0 -3
  273. package/examples/security_deposit/security_deposit.hsx +0 -21
  274. package/examples/security_deposit/security_deposit.udl +0 -293
  275. package/examples/settlement_batch/README.md +0 -3
  276. package/examples/settlement_batch/settlement_batch.hsx +0 -19
  277. package/examples/settlement_batch/settlement_batch.udl +0 -753
  278. package/examples/swap/README.md +0 -3
  279. package/examples/swap/swap.hsx +0 -19
  280. package/examples/swap/swap.udl +0 -876
  281. package/examples/threshold_pool/README.md +0 -3
  282. package/examples/threshold_pool/threshold_pool.hsx +0 -16
  283. package/examples/threshold_pool/threshold_pool.udl +0 -667
  284. package/examples/weighted_distribution/README.md +0 -3
  285. package/examples/weighted_distribution/weighted_distribution.hsx +0 -20
  286. package/examples/weighted_distribution/weighted_distribution.udl +0 -337
  287. package/skills/hsx/SKILL.md +0 -483
  288. package/src/emit.ts +0 -201
  289. package/src/entry-overrides.ts +0 -428
  290. package/src/ir.ts +0 -99
  291. package/src/limits.ts +0 -20
  292. package/src/lsp/server.ts +0 -460
  293. package/src/modules.ts +0 -446
  294. package/src/typecheck.ts +0 -3876
  295. package/src/version.ts +0 -5
  296. package/std/SEMANTICS.md +0 -130
  297. package/std/settlements/advance.hsx +0 -177
  298. package/std/settlements/cancellable_booking.hsx +0 -87
  299. package/std/settlements/captured_payment.hsx +0 -144
  300. package/std/settlements/conditional_disbursement.hsx +0 -185
  301. package/std/settlements/credit_facility.hsx +0 -167
  302. package/std/settlements/held_payment.hsx +0 -578
  303. package/std/settlements/index.hsx +0 -3
  304. package/std/settlements/instant_transfer.hsx +0 -190
  305. package/std/settlements/metered.hsx +0 -67
  306. package/std/settlements/pooled_split.hsx +0 -68
  307. package/std/settlements/premium_forward.hsx +0 -257
  308. package/std/settlements/reconciled_payout.hsx +0 -77
  309. package/std/settlements/recurring_collection.hsx +0 -27
  310. package/std/settlements/rotating_pool.hsx +0 -252
  311. package/std/settlements/scheduled.hsx +0 -641
  312. package/std/settlements/security_deposit.hsx +0 -166
  313. package/std/settlements/settlement_batch.hsx +0 -122
  314. package/std/settlements/swap.hsx +0 -1114
  315. package/std/settlements/threshold_pool.hsx +0 -221
  316. 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.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": "AGPL-3.0-only",
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
- "./lsp": {
44
- "types": "./dist/src/lsp/server.d.ts",
45
- "default": "./dist/src/lsp/server.js"
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
- "check": "bun test && bun run docs:check && bun run std:check && bun run playground:check && tsc -p tsconfig.json && bun run build && bun scripts/check-bin.ts",
75
- "docs:build": "bun scripts/docs/build.ts",
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
- "std:check": "bun scripts/bundle-std.ts --check",
84
- "test": "bun test",
85
- "typecheck": "tsc -p tsconfig.json"
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/udl": "1.0.0"
87
+ "@hyperscale0/adl": "1.0.124",
88
+ "@hyperscale0/udl": "1.0.124",
89
+ "fast-sha256": "1.3.0"
89
90
  },
90
91
  "devDependencies": {
91
- "@types/bun": "1.4.0",
92
- "typescript": "6.0.3"
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
  }