@hyperscale0/hsx 3.3.0 → 4.0.1

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 (51) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +1 -1
  3. package/dist/src/ast.d.ts +17 -2
  4. package/dist/src/ast.d.ts.map +1 -1
  5. package/dist/src/ast.js.map +1 -1
  6. package/dist/src/cli.js +1 -1
  7. package/dist/src/compile.d.ts +6 -0
  8. package/dist/src/compile.d.ts.map +1 -1
  9. package/dist/src/compile.js +1171 -101
  10. package/dist/src/compile.js.map +1 -1
  11. package/dist/src/headers.d.ts +2 -2
  12. package/dist/src/headers.d.ts.map +1 -1
  13. package/dist/src/headers.js +2 -3
  14. package/dist/src/headers.js.map +1 -1
  15. package/dist/src/index.d.ts +3 -2
  16. package/dist/src/index.d.ts.map +1 -1
  17. package/dist/src/index.js.map +1 -1
  18. package/dist/src/lex.d.ts +1 -1
  19. package/dist/src/lex.d.ts.map +1 -1
  20. package/dist/src/lex.js +5 -0
  21. package/dist/src/lex.js.map +1 -1
  22. package/dist/src/parse.js +87 -3
  23. package/dist/src/parse.js.map +1 -1
  24. package/dist/src/std-bundle.d.ts.map +1 -1
  25. package/dist/src/std-bundle.js +8 -9
  26. package/dist/src/std-bundle.js.map +1 -1
  27. package/dist/src/version.d.ts +2 -2
  28. package/dist/src/version.js +2 -2
  29. package/docs/README.md +45 -27
  30. package/docs/headers.md +43 -44
  31. package/examples/cost-table.json +8 -324
  32. package/examples/library.hsx +12 -64
  33. package/package.json +7 -5
  34. package/src/ast.ts +11 -1
  35. package/src/cli.ts +1 -1
  36. package/src/compile.ts +1607 -118
  37. package/src/headers.ts +2 -3
  38. package/src/index.ts +12 -1
  39. package/src/lex.ts +5 -0
  40. package/src/parse.ts +84 -3
  41. package/src/std-bundle.ts +8 -9
  42. package/src/version.ts +2 -2
  43. package/std/approvals.hsx +3 -3
  44. package/std/escrow.hsx +16 -14
  45. package/std/financing.hsx +59 -17
  46. package/std/insurance.hsx +4 -5
  47. package/std/lending.hsx +7 -8
  48. package/std/marketplace.hsx +2 -5
  49. package/std/money.hsx +15 -49
  50. package/std/travel.hsx +5 -6
  51. package/std/vehicles.hsx +0 -34
@@ -3,24 +3,13 @@
3
3
  "currency": "SAR",
4
4
  "declaredMeters": [
5
5
  "account.active_month",
6
- "collection.pay_in.count",
7
- "collection.pay_in.volume_sar",
8
- "deposit.attributed.count",
9
- "deposit.attributed.volume_sar",
10
- "financial_address.active_month",
11
- "financial_address.issued.count",
12
6
  "instrument.event.count",
13
7
  "kyb.application.review",
14
- "payout.external.count",
15
- "payout.external.volume_sar",
16
8
  "transfer.internal.count",
17
9
  "transfer.internal.volume_sar",
18
- "verification.kyb.count",
19
- "verification.kyc.basic.count",
20
- "verification.kyc.investment.count",
21
- "verification.kyc.standard.count"
10
+ "verification.kyb.count"
22
11
  ],
23
- "effectiveTableDigest": "92a2b90130954fe1ff685dde716b295ce0f5ad4ee9769a10aa04f3807fc64dc9",
12
+ "effectiveTableDigest": "dae11d13d84dc4c66ae4f3ec61e26259fb45b25bd29f96a14e0378662e485da0",
24
13
  "fixed": {
25
14
  "activationBaseMinor": "500000",
26
15
  "activationPerPointMinor": "100000",
@@ -33,7 +22,6 @@
33
22
  "instrument": 3,
34
23
  "move": 3,
35
24
  "provider_decision": 5,
36
- "subject_kind": 2,
37
25
  "timer": 1,
38
26
  "unwind": 4
39
27
  }
@@ -71,30 +59,6 @@
71
59
  "settlement": "invoice",
72
60
  "signature": "decides.kyb"
73
61
  },
74
- {
75
- "bps": 0,
76
- "meter": "verification.kyc.basic.count",
77
- "payer": "product",
78
- "perEventMinor": "2500",
79
- "settlement": "invoice",
80
- "signature": "decides.kyc.basic"
81
- },
82
- {
83
- "bps": 0,
84
- "meter": "verification.kyc.investment.count",
85
- "payer": "product",
86
- "perEventMinor": "7500",
87
- "settlement": "invoice",
88
- "signature": "decides.kyc.investment"
89
- },
90
- {
91
- "bps": 0,
92
- "meter": "verification.kyc.standard.count",
93
- "payer": "product",
94
- "perEventMinor": "4000",
95
- "settlement": "invoice",
96
- "signature": "decides.kyc.standard"
97
- },
98
62
  {
99
63
  "bps": 0,
100
64
  "meter": "instrument.event.count",
@@ -127,22 +91,6 @@
127
91
  "settlement": "invoice",
128
92
  "signature": "meters.billing.invoice.settlement"
129
93
  },
130
- {
131
- "bps": 0,
132
- "meter": "financial_address.active_month",
133
- "payer": "product",
134
- "perEventMinor": "800",
135
- "settlement": "invoice",
136
- "signature": "meters.financial_address.active_month"
137
- },
138
- {
139
- "bps": 0,
140
- "meter": "financial_address.issued.count",
141
- "payer": "product",
142
- "perEventMinor": "2000",
143
- "settlement": "invoice",
144
- "signature": "meters.financial_address.issued.count"
145
- },
146
94
  {
147
95
  "bps": 0,
148
96
  "meter": "instrument.event.count",
@@ -159,33 +107,6 @@
159
107
  "settlement": "invoice",
160
108
  "signature": "meters.kyb.application.review"
161
109
  },
162
- {
163
- "bps": 8,
164
- "meter": "collection.pay_in.count",
165
- "payer": "end_customer",
166
- "perEventMinor": "250",
167
- "settlement": "per_event",
168
- "signature": "moves.collection.pay_in",
169
- "volumeMeter": "collection.pay_in.volume_sar"
170
- },
171
- {
172
- "bps": 3,
173
- "meter": "deposit.attributed.count",
174
- "payer": "end_customer",
175
- "perEventMinor": "150",
176
- "settlement": "per_event",
177
- "signature": "moves.deposit.attributed",
178
- "volumeMeter": "deposit.attributed.volume_sar"
179
- },
180
- {
181
- "bps": 5,
182
- "meter": "payout.external.count",
183
- "payer": "product",
184
- "perEventMinor": "400",
185
- "settlement": "per_event",
186
- "signature": "moves.payout.external",
187
- "volumeMeter": "payout.external.volume_sar"
188
- },
189
110
  {
190
111
  "bps": 6,
191
112
  "meter": "transfer.internal.count",
@@ -274,24 +195,13 @@
274
195
  "currency": "USD",
275
196
  "declaredMeters": [
276
197
  "account.active_month",
277
- "collection.pay_in.count",
278
- "collection.pay_in.volume_usd",
279
- "deposit.attributed.count",
280
- "deposit.attributed.volume_usd",
281
- "financial_address.active_month",
282
- "financial_address.issued.count",
283
198
  "instrument.event.count",
284
199
  "kyb.application.review",
285
- "payout.external.count",
286
- "payout.external.volume_usd",
287
200
  "transfer.internal.count",
288
201
  "transfer.internal.volume_usd",
289
- "verification.kyb.count",
290
- "verification.kyc.basic.count",
291
- "verification.kyc.investment.count",
292
- "verification.kyc.standard.count"
202
+ "verification.kyb.count"
293
203
  ],
294
- "effectiveTableDigest": "b9b790c53a6f993c11b27dc06d9373ed5e865846343ab4893fd39ea2945dc520",
204
+ "effectiveTableDigest": "6c96c3fb4174551132edfbab439b1ca709fa2d75a029d7a6da7e584726cb7ba3",
295
205
  "fixed": {
296
206
  "activationBaseMinor": "133300",
297
207
  "activationPerPointMinor": "26700",
@@ -304,7 +214,6 @@
304
214
  "instrument": 3,
305
215
  "move": 3,
306
216
  "provider_decision": 5,
307
- "subject_kind": 2,
308
217
  "timer": 1,
309
218
  "unwind": 4
310
219
  }
@@ -342,30 +251,6 @@
342
251
  "settlement": "invoice",
343
252
  "signature": "decides.kyb"
344
253
  },
345
- {
346
- "bps": 0,
347
- "meter": "verification.kyc.basic.count",
348
- "payer": "product",
349
- "perEventMinor": "667",
350
- "settlement": "invoice",
351
- "signature": "decides.kyc.basic"
352
- },
353
- {
354
- "bps": 0,
355
- "meter": "verification.kyc.investment.count",
356
- "payer": "product",
357
- "perEventMinor": "2000",
358
- "settlement": "invoice",
359
- "signature": "decides.kyc.investment"
360
- },
361
- {
362
- "bps": 0,
363
- "meter": "verification.kyc.standard.count",
364
- "payer": "product",
365
- "perEventMinor": "1067",
366
- "settlement": "invoice",
367
- "signature": "decides.kyc.standard"
368
- },
369
254
  {
370
255
  "bps": 0,
371
256
  "meter": "instrument.event.count",
@@ -398,22 +283,6 @@
398
283
  "settlement": "invoice",
399
284
  "signature": "meters.billing.invoice.settlement"
400
285
  },
401
- {
402
- "bps": 0,
403
- "meter": "financial_address.active_month",
404
- "payer": "product",
405
- "perEventMinor": "213",
406
- "settlement": "invoice",
407
- "signature": "meters.financial_address.active_month"
408
- },
409
- {
410
- "bps": 0,
411
- "meter": "financial_address.issued.count",
412
- "payer": "product",
413
- "perEventMinor": "533",
414
- "settlement": "invoice",
415
- "signature": "meters.financial_address.issued.count"
416
- },
417
286
  {
418
287
  "bps": 0,
419
288
  "meter": "instrument.event.count",
@@ -430,33 +299,6 @@
430
299
  "settlement": "invoice",
431
300
  "signature": "meters.kyb.application.review"
432
301
  },
433
- {
434
- "bps": 8,
435
- "meter": "collection.pay_in.count",
436
- "payer": "end_customer",
437
- "perEventMinor": "67",
438
- "settlement": "per_event",
439
- "signature": "moves.collection.pay_in",
440
- "volumeMeter": "collection.pay_in.volume_usd"
441
- },
442
- {
443
- "bps": 3,
444
- "meter": "deposit.attributed.count",
445
- "payer": "end_customer",
446
- "perEventMinor": "40",
447
- "settlement": "per_event",
448
- "signature": "moves.deposit.attributed",
449
- "volumeMeter": "deposit.attributed.volume_usd"
450
- },
451
- {
452
- "bps": 5,
453
- "meter": "payout.external.count",
454
- "payer": "product",
455
- "perEventMinor": "107",
456
- "settlement": "per_event",
457
- "signature": "moves.payout.external",
458
- "volumeMeter": "payout.external.volume_usd"
459
- },
460
302
  {
461
303
  "bps": 6,
462
304
  "meter": "transfer.internal.count",
@@ -545,24 +387,13 @@
545
387
  "currency": "EUR",
546
388
  "declaredMeters": [
547
389
  "account.active_month",
548
- "collection.pay_in.count",
549
- "collection.pay_in.volume_eur",
550
- "deposit.attributed.count",
551
- "deposit.attributed.volume_eur",
552
- "financial_address.active_month",
553
- "financial_address.issued.count",
554
390
  "instrument.event.count",
555
391
  "kyb.application.review",
556
- "payout.external.count",
557
- "payout.external.volume_eur",
558
392
  "transfer.internal.count",
559
393
  "transfer.internal.volume_eur",
560
- "verification.kyb.count",
561
- "verification.kyc.basic.count",
562
- "verification.kyc.investment.count",
563
- "verification.kyc.standard.count"
394
+ "verification.kyb.count"
564
395
  ],
565
- "effectiveTableDigest": "83ea8337ea1d8a9301156fec28df5ba941388cba1d83599b878f1f41d67d7af4",
396
+ "effectiveTableDigest": "302de8af1672e643a0e173c4e1fedbcc90fd59b120897ab41b29daf123ee619b",
566
397
  "fixed": {
567
398
  "activationBaseMinor": "125000",
568
399
  "activationPerPointMinor": "25000",
@@ -575,7 +406,6 @@
575
406
  "instrument": 3,
576
407
  "move": 3,
577
408
  "provider_decision": 5,
578
- "subject_kind": 2,
579
409
  "timer": 1,
580
410
  "unwind": 4
581
411
  }
@@ -613,30 +443,6 @@
613
443
  "settlement": "invoice",
614
444
  "signature": "decides.kyb"
615
445
  },
616
- {
617
- "bps": 0,
618
- "meter": "verification.kyc.basic.count",
619
- "payer": "product",
620
- "perEventMinor": "625",
621
- "settlement": "invoice",
622
- "signature": "decides.kyc.basic"
623
- },
624
- {
625
- "bps": 0,
626
- "meter": "verification.kyc.investment.count",
627
- "payer": "product",
628
- "perEventMinor": "1875",
629
- "settlement": "invoice",
630
- "signature": "decides.kyc.investment"
631
- },
632
- {
633
- "bps": 0,
634
- "meter": "verification.kyc.standard.count",
635
- "payer": "product",
636
- "perEventMinor": "1000",
637
- "settlement": "invoice",
638
- "signature": "decides.kyc.standard"
639
- },
640
446
  {
641
447
  "bps": 0,
642
448
  "meter": "instrument.event.count",
@@ -669,22 +475,6 @@
669
475
  "settlement": "invoice",
670
476
  "signature": "meters.billing.invoice.settlement"
671
477
  },
672
- {
673
- "bps": 0,
674
- "meter": "financial_address.active_month",
675
- "payer": "product",
676
- "perEventMinor": "200",
677
- "settlement": "invoice",
678
- "signature": "meters.financial_address.active_month"
679
- },
680
- {
681
- "bps": 0,
682
- "meter": "financial_address.issued.count",
683
- "payer": "product",
684
- "perEventMinor": "500",
685
- "settlement": "invoice",
686
- "signature": "meters.financial_address.issued.count"
687
- },
688
478
  {
689
479
  "bps": 0,
690
480
  "meter": "instrument.event.count",
@@ -701,33 +491,6 @@
701
491
  "settlement": "invoice",
702
492
  "signature": "meters.kyb.application.review"
703
493
  },
704
- {
705
- "bps": 8,
706
- "meter": "collection.pay_in.count",
707
- "payer": "end_customer",
708
- "perEventMinor": "63",
709
- "settlement": "per_event",
710
- "signature": "moves.collection.pay_in",
711
- "volumeMeter": "collection.pay_in.volume_eur"
712
- },
713
- {
714
- "bps": 3,
715
- "meter": "deposit.attributed.count",
716
- "payer": "end_customer",
717
- "perEventMinor": "38",
718
- "settlement": "per_event",
719
- "signature": "moves.deposit.attributed",
720
- "volumeMeter": "deposit.attributed.volume_eur"
721
- },
722
- {
723
- "bps": 5,
724
- "meter": "payout.external.count",
725
- "payer": "product",
726
- "perEventMinor": "100",
727
- "settlement": "per_event",
728
- "signature": "moves.payout.external",
729
- "volumeMeter": "payout.external.volume_eur"
730
- },
731
494
  {
732
495
  "bps": 6,
733
496
  "meter": "transfer.internal.count",
@@ -816,24 +579,13 @@
816
579
  "currency": "GBP",
817
580
  "declaredMeters": [
818
581
  "account.active_month",
819
- "collection.pay_in.count",
820
- "collection.pay_in.volume_gbp",
821
- "deposit.attributed.count",
822
- "deposit.attributed.volume_gbp",
823
- "financial_address.active_month",
824
- "financial_address.issued.count",
825
582
  "instrument.event.count",
826
583
  "kyb.application.review",
827
- "payout.external.count",
828
- "payout.external.volume_gbp",
829
584
  "transfer.internal.count",
830
585
  "transfer.internal.volume_gbp",
831
- "verification.kyb.count",
832
- "verification.kyc.basic.count",
833
- "verification.kyc.investment.count",
834
- "verification.kyc.standard.count"
586
+ "verification.kyb.count"
835
587
  ],
836
- "effectiveTableDigest": "5f24fe864b81b4d801353549381e7b17a73210ece0323db2328f0f794b554152",
588
+ "effectiveTableDigest": "1620e8016c6dcd451d220e024ef66852528ce6aef20038810bcfdb10a03ea70e",
837
589
  "fixed": {
838
590
  "activationBaseMinor": "104200",
839
591
  "activationPerPointMinor": "20800",
@@ -846,7 +598,6 @@
846
598
  "instrument": 3,
847
599
  "move": 3,
848
600
  "provider_decision": 5,
849
- "subject_kind": 2,
850
601
  "timer": 1,
851
602
  "unwind": 4
852
603
  }
@@ -884,30 +635,6 @@
884
635
  "settlement": "invoice",
885
636
  "signature": "decides.kyb"
886
637
  },
887
- {
888
- "bps": 0,
889
- "meter": "verification.kyc.basic.count",
890
- "payer": "product",
891
- "perEventMinor": "521",
892
- "settlement": "invoice",
893
- "signature": "decides.kyc.basic"
894
- },
895
- {
896
- "bps": 0,
897
- "meter": "verification.kyc.investment.count",
898
- "payer": "product",
899
- "perEventMinor": "1563",
900
- "settlement": "invoice",
901
- "signature": "decides.kyc.investment"
902
- },
903
- {
904
- "bps": 0,
905
- "meter": "verification.kyc.standard.count",
906
- "payer": "product",
907
- "perEventMinor": "833",
908
- "settlement": "invoice",
909
- "signature": "decides.kyc.standard"
910
- },
911
638
  {
912
639
  "bps": 0,
913
640
  "meter": "instrument.event.count",
@@ -940,22 +667,6 @@
940
667
  "settlement": "invoice",
941
668
  "signature": "meters.billing.invoice.settlement"
942
669
  },
943
- {
944
- "bps": 0,
945
- "meter": "financial_address.active_month",
946
- "payer": "product",
947
- "perEventMinor": "167",
948
- "settlement": "invoice",
949
- "signature": "meters.financial_address.active_month"
950
- },
951
- {
952
- "bps": 0,
953
- "meter": "financial_address.issued.count",
954
- "payer": "product",
955
- "perEventMinor": "417",
956
- "settlement": "invoice",
957
- "signature": "meters.financial_address.issued.count"
958
- },
959
670
  {
960
671
  "bps": 0,
961
672
  "meter": "instrument.event.count",
@@ -972,33 +683,6 @@
972
683
  "settlement": "invoice",
973
684
  "signature": "meters.kyb.application.review"
974
685
  },
975
- {
976
- "bps": 8,
977
- "meter": "collection.pay_in.count",
978
- "payer": "end_customer",
979
- "perEventMinor": "52",
980
- "settlement": "per_event",
981
- "signature": "moves.collection.pay_in",
982
- "volumeMeter": "collection.pay_in.volume_gbp"
983
- },
984
- {
985
- "bps": 3,
986
- "meter": "deposit.attributed.count",
987
- "payer": "end_customer",
988
- "perEventMinor": "31",
989
- "settlement": "per_event",
990
- "signature": "moves.deposit.attributed",
991
- "volumeMeter": "deposit.attributed.volume_gbp"
992
- },
993
- {
994
- "bps": 5,
995
- "meter": "payout.external.count",
996
- "payer": "product",
997
- "perEventMinor": "83",
998
- "settlement": "per_event",
999
- "signature": "moves.payout.external",
1000
- "volumeMeter": "payout.external.volume_gbp"
1001
- },
1002
686
  {
1003
687
  "bps": 6,
1004
688
  "meter": "transfer.internal.count",
@@ -1,66 +1,14 @@
1
- program library "Standard library"
2
- use money
3
- use marketplace
4
- use vehicles
1
+ program cars "Cars"
5
2
  use escrow
6
- use wallet
7
3
  use financing
8
- use lending
9
- use insurance
10
- use approvals
11
- use collections
12
- use travel
13
- use cards
14
- use savings
15
- use reporting
16
- party buyer: person
17
- party seller: business
18
- party officer: staff role credit_underwriter
19
- party carrier: business role insurance_carrier
20
- party merchant: business
21
-
22
- transfer = money.transfer { payer: buyer, payee: seller, amount: 100 SAR }
23
- hold = money.hold { payer: buyer, payee: seller, amount: 100 SAR }
24
- split = money.split { payer: buyer, amount: 100 SAR, shares { seller: 70%, merchant: 30% } }
25
- schedule = money.schedule { payer: buyer, payee: seller, amount: 100 SAR, count: 3 }
26
- pool = money.pool { payer: buyer, payee: seller, target: 100 SAR, closes: 2030-01-01 }
27
- swap = money.swap { first: buyer, second: seller, first_amount: 100 SAR, second_amount: 50 SAR, expires: 2030-01-01 }
28
- deposit = money.deposit { payer: buyer, payee: seller, amount: 100 SAR, expires: 2030-01-01, approval: officer }
29
- payout = money.payout { payer: seller, payee: buyer, amount: 100 SAR, reconcile_within: 3d }
30
- metered = money.metered { payer: buyer, payee: seller, unit_price: 10 SAR, units: 2 }
31
- batch = money.batch { payer: buyer, payee: seller, closes: 2030-01-01, approval: officer }
32
- listing = marketplace.listing { seller: seller, vehicle_facts: required }
33
- order = marketplace.order { listing: listing, buyer: buyer }
34
- sale = escrow.hold { payer: buyer, payee: seller, for: order, fee { seller: 1% cap 750 SAR, tax: 15% }, dispute { refund_after: return_verified } }
35
- purse = wallet.balance { holder: buyer, spend_limit: 1000 SAR }
36
- spend = wallet.spend { wallet: purse, payee: seller }
37
- limits = financing.limits { per_borrower: 10000 SAR, portfolio: 100000 SAR, borrower: buyer }
38
- plan = financing.installments { months: 3, profit: 3%, funds: sale, approval: officer }
39
- plan_schedule = financing.installments { months: 6, profit: 3%, funds: sale, approval: officer, disburse_to: borrower, profit_earned: by_schedule, apply: principal_profit, payoff_rebate: 50% }
40
- plan_upfront = financing.installments { months: 3, profit: 3%, funds: sale, approval: officer, disburse_to: funds, profit_earned: at_disbursement, apply: pro_rata, payoff_rebate: 0% }
41
- late = financing.late_charge { on: [plan, plan_schedule, plan_upfront], approval: officer, fines_to: seller, costs_to: seller }
42
- line = financing.credit_line { borrower: buyer, lender: seller, limit: 1000 SAR, expires: 2030-01-01 }
43
- advance = financing.advance { line: line, amount: 100 SAR }
44
- round = lending.round { borrower: buyer, capital: seller, plan: plan }
45
- ticket = lending.commitment { round: round, wallet: purse }
46
- distribution = lending.distribution { round: round, receipt: plan.settlement, residual_to: seller }
47
- cover = insurance.cover { holder: buyer, insurer: carrier, covers: sale, commission: 10% }
48
- claim = insurance.claim { cover: cover, approved_by: carrier }
49
- decision = approvals.decision { for: transfer, approved_by: officer, action: "pay" }
50
- case = collections.case { on: [plan, plan_schedule, plan_upfront], agency: seller, fee: 20% }
51
- contact = collections.contact { case: case, agency: seller }
52
- reminder = collections.reminder { on: plan }
53
- package = travel.package { price: 1000 SAR, supplier_cost: 700 SAR, departure: 2030-01-01 }
54
- booking = travel.booking { package: package, buyer: buyer, supplier: seller, cover: travel_cover }
55
- cardholder = cards.cardholder { holder: buyer }
56
- card = cards.card { holder: cardholder, spend_limit: 100 SAR }
57
- authorization = cards.authorization { card: card, merchant: merchant, approval: officer }
58
- transaction = cards.transaction { authorization: authorization }
59
- dispute = cards.dispute { transaction: transaction, approved_by: officer }
60
- circle = savings.circle { contribution: 100 SAR, members: 3, starts: 2030-01-01 }
61
- membership = savings.membership { circle: circle, member: buyer }
62
- travel_cover = insurance.cover { holder: buyer, insurer: carrier, commission: 10%, covers: booking }
63
-
64
- reports = reporting.portfolio { on: [plan, plan_schedule, plan_upfront] }
65
- vehicle = vehicles.vehicle { listing: listing, seller: seller }
66
- reservation = marketplace.reservation { listing: listing, funds: sale, plans: [plan, plan_schedule, plan_upfront], converters: [sale, plan, plan_schedule, plan_upfront], buyer: buyer, seller: seller }
4
+ party underwriter: staff role credit_underwriter
5
+ object car "Cars" {
6
+ fields { make: text, model: text, year: integer }
7
+ attach sale = escrow.hold { payer: actor, payee: owner, expose fund as sell }
8
+ attach limits = financing.limits { borrower: actor, per_borrower: 60000 SAR, portfolio: 1500000 SAR }
9
+ attach plan = financing.installments {
10
+ borrower: actor, capital: operator, share: 25%, approval: underwriter
11
+ months: 3, profit: 2.5%, funds: sale, limits: limits
12
+ expose create as finance
13
+ }
14
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyperscale0/hsx",
3
- "version": "3.3.0",
3
+ "version": "4.0.1",
4
4
  "description": "The strictly typed HSX language: compile total financial programs into canonical UDL.",
5
5
  "keywords": [
6
6
  "hsx",
@@ -64,7 +64,7 @@
64
64
  "access": "public"
65
65
  },
66
66
  "scripts": {
67
- "build": "tsc -p tsconfig.build.json",
67
+ "build": "bun run generate && tsc -p tsconfig.build.json && tsc -p playground/tsconfig.json && bun scripts/build-playground.ts",
68
68
  "typecheck": "tsc -p tsconfig.json",
69
69
  "test": "bun test test",
70
70
  "docs:build": "bun scripts/docs.ts",
@@ -73,10 +73,12 @@
73
73
  "std:bundle": "bun scripts/bundle-std.ts",
74
74
  "generate": "bun run std:bundle && bun run docs:build",
75
75
  "prepare": "bun run std:bundle",
76
- "check": "bun run generate && bun run typecheck && bun run build && tsc -p playground/tsconfig.json && bun scripts/build-playground.ts && bun test test"
76
+ "check": "bun run typecheck && tsc -p playground/tsconfig.json && bun test test"
77
77
  },
78
78
  "dependencies": {
79
- "@hyperscale0/udl": "3.2.0"
79
+ "@hyperscale0/adl": "1.0.0-beta.8",
80
+ "@hyperscale0/udl": "4.0.0",
81
+ "fast-sha256": "1.3.0"
80
82
  },
81
83
  "devDependencies": {
82
84
  "bun-types": "1.4.2",
@@ -87,5 +89,5 @@
87
89
  "Amir Ayub",
88
90
  "Sara AlBakaawi"
89
91
  ],
90
- "gitHead": "6f9f3c0315ec07edeafca09596d3cf92c53a25fd"
92
+ "gitHead": "c92dd30d045d931359607fd986c323299dcd61b6"
91
93
  }
package/src/ast.ts CHANGED
@@ -3,6 +3,8 @@ export interface Span {
3
3
  end: number;
4
4
  }
5
5
  export interface Diagnostic {
6
+ source?: string;
7
+ related?: readonly { source: string; span: Span; message: string }[];
6
8
  code: string;
7
9
  message: string;
8
10
  fix: string;
@@ -47,15 +49,23 @@ export interface InstrumentDecl {
47
49
  body: Extract<Expr, { kind: "block" }>;
48
50
  span: Span;
49
51
  }
52
+ export interface AssignmentDecl {
53
+ kind: "assignment";
54
+ name: string;
55
+ target: string;
56
+ body: Extract<Expr, { kind: "block" }>;
57
+ span: Span;
58
+ }
50
59
  export interface ObjectDecl {
51
60
  kind: "object";
52
61
  name: string;
53
- object: string;
62
+ title: string;
54
63
  body: Extract<Expr, { kind: "block" }>;
55
64
  span: Span;
56
65
  }
57
66
  export type Decl =
58
67
  | InstrumentDecl
68
+ | AssignmentDecl
59
69
  | ObjectDecl
60
70
  | {
61
71
  kind: "party";
package/src/cli.ts CHANGED
@@ -38,7 +38,7 @@ export async function runCli(argv: readonly string[], io: Io): Promise<number> {
38
38
  return 0;
39
39
  }
40
40
  if (command === "--version") {
41
- io.out(`${HSX_VERSION} (UDL 3)`);
41
+ io.out(`${HSX_VERSION} (UDL 4)`);
42
42
  return 0;
43
43
  }
44
44
  if (