@hyperscale0/hsx 1.0.0-rc.1 → 1.0.123

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