@hyperscale0/hsx 3.2.0 → 4.0.0

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 (57) 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 +1194 -97
  10. package/dist/src/compile.js.map +1 -1
  11. package/dist/src/cost.d.ts +1 -1
  12. package/dist/src/cost.d.ts.map +1 -1
  13. package/dist/src/cost.js +52 -9
  14. package/dist/src/cost.js.map +1 -1
  15. package/dist/src/headers.d.ts +2 -2
  16. package/dist/src/headers.d.ts.map +1 -1
  17. package/dist/src/headers.js +3 -2
  18. package/dist/src/headers.js.map +1 -1
  19. package/dist/src/index.d.ts +3 -2
  20. package/dist/src/index.d.ts.map +1 -1
  21. package/dist/src/index.js.map +1 -1
  22. package/dist/src/lex.d.ts +1 -1
  23. package/dist/src/lex.d.ts.map +1 -1
  24. package/dist/src/lex.js +5 -0
  25. package/dist/src/lex.js.map +1 -1
  26. package/dist/src/parse.js +91 -5
  27. package/dist/src/parse.js.map +1 -1
  28. package/dist/src/std-bundle.d.ts.map +1 -1
  29. package/dist/src/std-bundle.js +10 -9
  30. package/dist/src/std-bundle.js.map +1 -1
  31. package/dist/src/version.d.ts +2 -2
  32. package/dist/src/version.js +2 -2
  33. package/docs/README.md +51 -27
  34. package/docs/headers.md +43 -40
  35. package/examples/cost-table.json +40 -324
  36. package/examples/library.hsx +12 -57
  37. package/package.json +7 -5
  38. package/src/ast.ts +11 -1
  39. package/src/cli.ts +1 -1
  40. package/src/compile.ts +1630 -114
  41. package/src/cost.ts +60 -16
  42. package/src/headers.ts +3 -2
  43. package/src/index.ts +12 -1
  44. package/src/lex.ts +5 -0
  45. package/src/parse.ts +87 -5
  46. package/src/std-bundle.ts +10 -9
  47. package/src/version.ts +2 -2
  48. package/std/approvals.hsx +3 -3
  49. package/std/collections.hsx +45 -4
  50. package/std/escrow.hsx +17 -8
  51. package/std/financing.hsx +292 -42
  52. package/std/insurance.hsx +4 -5
  53. package/std/lending.hsx +7 -8
  54. package/std/marketplace.hsx +90 -6
  55. package/std/money.hsx +15 -49
  56. package/std/reporting.hsx +1286 -0
  57. package/std/travel.hsx +5 -6
@@ -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": "3cb4eb8a2524c1012da7db029f9f7a9cdb06052c78abd2144760497dc3ba0a2b",
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",
@@ -195,6 +116,14 @@
195
116
  "signature": "moves.transfer.internal",
196
117
  "volumeMeter": "transfer.internal.volume_sar"
197
118
  },
119
+ {
120
+ "bps": 0,
121
+ "meter": "instrument.event.count",
122
+ "payer": "product",
123
+ "perEventMinor": "0",
124
+ "settlement": "invoice",
125
+ "signature": "reminder.email"
126
+ },
198
127
  {
199
128
  "bps": 0,
200
129
  "meter": "instrument.event.count",
@@ -266,24 +195,13 @@
266
195
  "currency": "USD",
267
196
  "declaredMeters": [
268
197
  "account.active_month",
269
- "collection.pay_in.count",
270
- "collection.pay_in.volume_usd",
271
- "deposit.attributed.count",
272
- "deposit.attributed.volume_usd",
273
- "financial_address.active_month",
274
- "financial_address.issued.count",
275
198
  "instrument.event.count",
276
199
  "kyb.application.review",
277
- "payout.external.count",
278
- "payout.external.volume_usd",
279
200
  "transfer.internal.count",
280
201
  "transfer.internal.volume_usd",
281
- "verification.kyb.count",
282
- "verification.kyc.basic.count",
283
- "verification.kyc.investment.count",
284
- "verification.kyc.standard.count"
202
+ "verification.kyb.count"
285
203
  ],
286
- "effectiveTableDigest": "70454efb5184bc9246896752e64e85eb0b616c41544469df083a2dc8014c0785",
204
+ "effectiveTableDigest": "6c96c3fb4174551132edfbab439b1ca709fa2d75a029d7a6da7e584726cb7ba3",
287
205
  "fixed": {
288
206
  "activationBaseMinor": "133300",
289
207
  "activationPerPointMinor": "26700",
@@ -296,7 +214,6 @@
296
214
  "instrument": 3,
297
215
  "move": 3,
298
216
  "provider_decision": 5,
299
- "subject_kind": 2,
300
217
  "timer": 1,
301
218
  "unwind": 4
302
219
  }
@@ -334,30 +251,6 @@
334
251
  "settlement": "invoice",
335
252
  "signature": "decides.kyb"
336
253
  },
337
- {
338
- "bps": 0,
339
- "meter": "verification.kyc.basic.count",
340
- "payer": "product",
341
- "perEventMinor": "667",
342
- "settlement": "invoice",
343
- "signature": "decides.kyc.basic"
344
- },
345
- {
346
- "bps": 0,
347
- "meter": "verification.kyc.investment.count",
348
- "payer": "product",
349
- "perEventMinor": "2000",
350
- "settlement": "invoice",
351
- "signature": "decides.kyc.investment"
352
- },
353
- {
354
- "bps": 0,
355
- "meter": "verification.kyc.standard.count",
356
- "payer": "product",
357
- "perEventMinor": "1067",
358
- "settlement": "invoice",
359
- "signature": "decides.kyc.standard"
360
- },
361
254
  {
362
255
  "bps": 0,
363
256
  "meter": "instrument.event.count",
@@ -390,22 +283,6 @@
390
283
  "settlement": "invoice",
391
284
  "signature": "meters.billing.invoice.settlement"
392
285
  },
393
- {
394
- "bps": 0,
395
- "meter": "financial_address.active_month",
396
- "payer": "product",
397
- "perEventMinor": "213",
398
- "settlement": "invoice",
399
- "signature": "meters.financial_address.active_month"
400
- },
401
- {
402
- "bps": 0,
403
- "meter": "financial_address.issued.count",
404
- "payer": "product",
405
- "perEventMinor": "533",
406
- "settlement": "invoice",
407
- "signature": "meters.financial_address.issued.count"
408
- },
409
286
  {
410
287
  "bps": 0,
411
288
  "meter": "instrument.event.count",
@@ -422,33 +299,6 @@
422
299
  "settlement": "invoice",
423
300
  "signature": "meters.kyb.application.review"
424
301
  },
425
- {
426
- "bps": 8,
427
- "meter": "collection.pay_in.count",
428
- "payer": "end_customer",
429
- "perEventMinor": "67",
430
- "settlement": "per_event",
431
- "signature": "moves.collection.pay_in",
432
- "volumeMeter": "collection.pay_in.volume_usd"
433
- },
434
- {
435
- "bps": 3,
436
- "meter": "deposit.attributed.count",
437
- "payer": "end_customer",
438
- "perEventMinor": "40",
439
- "settlement": "per_event",
440
- "signature": "moves.deposit.attributed",
441
- "volumeMeter": "deposit.attributed.volume_usd"
442
- },
443
- {
444
- "bps": 5,
445
- "meter": "payout.external.count",
446
- "payer": "product",
447
- "perEventMinor": "107",
448
- "settlement": "per_event",
449
- "signature": "moves.payout.external",
450
- "volumeMeter": "payout.external.volume_usd"
451
- },
452
302
  {
453
303
  "bps": 6,
454
304
  "meter": "transfer.internal.count",
@@ -458,6 +308,14 @@
458
308
  "signature": "moves.transfer.internal",
459
309
  "volumeMeter": "transfer.internal.volume_usd"
460
310
  },
311
+ {
312
+ "bps": 0,
313
+ "meter": "instrument.event.count",
314
+ "payer": "product",
315
+ "perEventMinor": "0",
316
+ "settlement": "invoice",
317
+ "signature": "reminder.email"
318
+ },
461
319
  {
462
320
  "bps": 0,
463
321
  "meter": "instrument.event.count",
@@ -529,24 +387,13 @@
529
387
  "currency": "EUR",
530
388
  "declaredMeters": [
531
389
  "account.active_month",
532
- "collection.pay_in.count",
533
- "collection.pay_in.volume_eur",
534
- "deposit.attributed.count",
535
- "deposit.attributed.volume_eur",
536
- "financial_address.active_month",
537
- "financial_address.issued.count",
538
390
  "instrument.event.count",
539
391
  "kyb.application.review",
540
- "payout.external.count",
541
- "payout.external.volume_eur",
542
392
  "transfer.internal.count",
543
393
  "transfer.internal.volume_eur",
544
- "verification.kyb.count",
545
- "verification.kyc.basic.count",
546
- "verification.kyc.investment.count",
547
- "verification.kyc.standard.count"
394
+ "verification.kyb.count"
548
395
  ],
549
- "effectiveTableDigest": "d782642a28ab9225c7967f865f73e9453a9683ca7b5b55c8df6e18a53bbdd8e7",
396
+ "effectiveTableDigest": "302de8af1672e643a0e173c4e1fedbcc90fd59b120897ab41b29daf123ee619b",
550
397
  "fixed": {
551
398
  "activationBaseMinor": "125000",
552
399
  "activationPerPointMinor": "25000",
@@ -559,7 +406,6 @@
559
406
  "instrument": 3,
560
407
  "move": 3,
561
408
  "provider_decision": 5,
562
- "subject_kind": 2,
563
409
  "timer": 1,
564
410
  "unwind": 4
565
411
  }
@@ -597,30 +443,6 @@
597
443
  "settlement": "invoice",
598
444
  "signature": "decides.kyb"
599
445
  },
600
- {
601
- "bps": 0,
602
- "meter": "verification.kyc.basic.count",
603
- "payer": "product",
604
- "perEventMinor": "625",
605
- "settlement": "invoice",
606
- "signature": "decides.kyc.basic"
607
- },
608
- {
609
- "bps": 0,
610
- "meter": "verification.kyc.investment.count",
611
- "payer": "product",
612
- "perEventMinor": "1875",
613
- "settlement": "invoice",
614
- "signature": "decides.kyc.investment"
615
- },
616
- {
617
- "bps": 0,
618
- "meter": "verification.kyc.standard.count",
619
- "payer": "product",
620
- "perEventMinor": "1000",
621
- "settlement": "invoice",
622
- "signature": "decides.kyc.standard"
623
- },
624
446
  {
625
447
  "bps": 0,
626
448
  "meter": "instrument.event.count",
@@ -653,22 +475,6 @@
653
475
  "settlement": "invoice",
654
476
  "signature": "meters.billing.invoice.settlement"
655
477
  },
656
- {
657
- "bps": 0,
658
- "meter": "financial_address.active_month",
659
- "payer": "product",
660
- "perEventMinor": "200",
661
- "settlement": "invoice",
662
- "signature": "meters.financial_address.active_month"
663
- },
664
- {
665
- "bps": 0,
666
- "meter": "financial_address.issued.count",
667
- "payer": "product",
668
- "perEventMinor": "500",
669
- "settlement": "invoice",
670
- "signature": "meters.financial_address.issued.count"
671
- },
672
478
  {
673
479
  "bps": 0,
674
480
  "meter": "instrument.event.count",
@@ -685,33 +491,6 @@
685
491
  "settlement": "invoice",
686
492
  "signature": "meters.kyb.application.review"
687
493
  },
688
- {
689
- "bps": 8,
690
- "meter": "collection.pay_in.count",
691
- "payer": "end_customer",
692
- "perEventMinor": "63",
693
- "settlement": "per_event",
694
- "signature": "moves.collection.pay_in",
695
- "volumeMeter": "collection.pay_in.volume_eur"
696
- },
697
- {
698
- "bps": 3,
699
- "meter": "deposit.attributed.count",
700
- "payer": "end_customer",
701
- "perEventMinor": "38",
702
- "settlement": "per_event",
703
- "signature": "moves.deposit.attributed",
704
- "volumeMeter": "deposit.attributed.volume_eur"
705
- },
706
- {
707
- "bps": 5,
708
- "meter": "payout.external.count",
709
- "payer": "product",
710
- "perEventMinor": "100",
711
- "settlement": "per_event",
712
- "signature": "moves.payout.external",
713
- "volumeMeter": "payout.external.volume_eur"
714
- },
715
494
  {
716
495
  "bps": 6,
717
496
  "meter": "transfer.internal.count",
@@ -721,6 +500,14 @@
721
500
  "signature": "moves.transfer.internal",
722
501
  "volumeMeter": "transfer.internal.volume_eur"
723
502
  },
503
+ {
504
+ "bps": 0,
505
+ "meter": "instrument.event.count",
506
+ "payer": "product",
507
+ "perEventMinor": "0",
508
+ "settlement": "invoice",
509
+ "signature": "reminder.email"
510
+ },
724
511
  {
725
512
  "bps": 0,
726
513
  "meter": "instrument.event.count",
@@ -792,24 +579,13 @@
792
579
  "currency": "GBP",
793
580
  "declaredMeters": [
794
581
  "account.active_month",
795
- "collection.pay_in.count",
796
- "collection.pay_in.volume_gbp",
797
- "deposit.attributed.count",
798
- "deposit.attributed.volume_gbp",
799
- "financial_address.active_month",
800
- "financial_address.issued.count",
801
582
  "instrument.event.count",
802
583
  "kyb.application.review",
803
- "payout.external.count",
804
- "payout.external.volume_gbp",
805
584
  "transfer.internal.count",
806
585
  "transfer.internal.volume_gbp",
807
- "verification.kyb.count",
808
- "verification.kyc.basic.count",
809
- "verification.kyc.investment.count",
810
- "verification.kyc.standard.count"
586
+ "verification.kyb.count"
811
587
  ],
812
- "effectiveTableDigest": "0da12e42a0d68444e2776ef0905473698d2437e0d4eea5b7e5f5fad9e8d3fbfb",
588
+ "effectiveTableDigest": "1620e8016c6dcd451d220e024ef66852528ce6aef20038810bcfdb10a03ea70e",
813
589
  "fixed": {
814
590
  "activationBaseMinor": "104200",
815
591
  "activationPerPointMinor": "20800",
@@ -822,7 +598,6 @@
822
598
  "instrument": 3,
823
599
  "move": 3,
824
600
  "provider_decision": 5,
825
- "subject_kind": 2,
826
601
  "timer": 1,
827
602
  "unwind": 4
828
603
  }
@@ -860,30 +635,6 @@
860
635
  "settlement": "invoice",
861
636
  "signature": "decides.kyb"
862
637
  },
863
- {
864
- "bps": 0,
865
- "meter": "verification.kyc.basic.count",
866
- "payer": "product",
867
- "perEventMinor": "521",
868
- "settlement": "invoice",
869
- "signature": "decides.kyc.basic"
870
- },
871
- {
872
- "bps": 0,
873
- "meter": "verification.kyc.investment.count",
874
- "payer": "product",
875
- "perEventMinor": "1563",
876
- "settlement": "invoice",
877
- "signature": "decides.kyc.investment"
878
- },
879
- {
880
- "bps": 0,
881
- "meter": "verification.kyc.standard.count",
882
- "payer": "product",
883
- "perEventMinor": "833",
884
- "settlement": "invoice",
885
- "signature": "decides.kyc.standard"
886
- },
887
638
  {
888
639
  "bps": 0,
889
640
  "meter": "instrument.event.count",
@@ -916,22 +667,6 @@
916
667
  "settlement": "invoice",
917
668
  "signature": "meters.billing.invoice.settlement"
918
669
  },
919
- {
920
- "bps": 0,
921
- "meter": "financial_address.active_month",
922
- "payer": "product",
923
- "perEventMinor": "167",
924
- "settlement": "invoice",
925
- "signature": "meters.financial_address.active_month"
926
- },
927
- {
928
- "bps": 0,
929
- "meter": "financial_address.issued.count",
930
- "payer": "product",
931
- "perEventMinor": "417",
932
- "settlement": "invoice",
933
- "signature": "meters.financial_address.issued.count"
934
- },
935
670
  {
936
671
  "bps": 0,
937
672
  "meter": "instrument.event.count",
@@ -948,33 +683,6 @@
948
683
  "settlement": "invoice",
949
684
  "signature": "meters.kyb.application.review"
950
685
  },
951
- {
952
- "bps": 8,
953
- "meter": "collection.pay_in.count",
954
- "payer": "end_customer",
955
- "perEventMinor": "52",
956
- "settlement": "per_event",
957
- "signature": "moves.collection.pay_in",
958
- "volumeMeter": "collection.pay_in.volume_gbp"
959
- },
960
- {
961
- "bps": 3,
962
- "meter": "deposit.attributed.count",
963
- "payer": "end_customer",
964
- "perEventMinor": "31",
965
- "settlement": "per_event",
966
- "signature": "moves.deposit.attributed",
967
- "volumeMeter": "deposit.attributed.volume_gbp"
968
- },
969
- {
970
- "bps": 5,
971
- "meter": "payout.external.count",
972
- "payer": "product",
973
- "perEventMinor": "83",
974
- "settlement": "per_event",
975
- "signature": "moves.payout.external",
976
- "volumeMeter": "payout.external.volume_gbp"
977
- },
978
686
  {
979
687
  "bps": 6,
980
688
  "meter": "transfer.internal.count",
@@ -984,6 +692,14 @@
984
692
  "signature": "moves.transfer.internal",
985
693
  "volumeMeter": "transfer.internal.volume_gbp"
986
694
  },
695
+ {
696
+ "bps": 0,
697
+ "meter": "instrument.event.count",
698
+ "payer": "product",
699
+ "perEventMinor": "0",
700
+ "settlement": "invoice",
701
+ "signature": "reminder.email"
702
+ },
987
703
  {
988
704
  "bps": 0,
989
705
  "meter": "instrument.event.count",
@@ -1,59 +1,14 @@
1
- program library "Standard library"
2
- use money
3
- use marketplace
1
+ program cars "Cars"
4
2
  use escrow
5
- use wallet
6
3
  use financing
7
- use lending
8
- use insurance
9
- use approvals
10
- use collections
11
- use travel
12
- use cards
13
- use savings
14
- party buyer: person
15
- party seller: business
16
- party officer: staff role credit_underwriter
17
- party carrier: business role insurance_carrier
18
- party merchant: business
19
-
20
- transfer = money.transfer { payer: buyer, payee: seller, amount: 100 SAR }
21
- hold = money.hold { payer: buyer, payee: seller, amount: 100 SAR }
22
- split = money.split { payer: buyer, amount: 100 SAR, shares { seller: 70%, merchant: 30% } }
23
- schedule = money.schedule { payer: buyer, payee: seller, amount: 100 SAR, count: 3 }
24
- pool = money.pool { payer: buyer, payee: seller, target: 100 SAR, closes: 2030-01-01 }
25
- swap = money.swap { first: buyer, second: seller, first_amount: 100 SAR, second_amount: 50 SAR, expires: 2030-01-01 }
26
- deposit = money.deposit { payer: buyer, payee: seller, amount: 100 SAR, expires: 2030-01-01, approval: officer }
27
- payout = money.payout { payer: seller, payee: buyer, amount: 100 SAR, reconcile_within: 3d }
28
- metered = money.metered { payer: buyer, payee: seller, unit_price: 10 SAR, units: 2 }
29
- batch = money.batch { payer: buyer, payee: seller, closes: 2030-01-01, approval: officer }
30
- listing = marketplace.listing { seller: seller }
31
- order = marketplace.order { listing: listing, buyer: buyer }
32
- sale = escrow.hold { payer: buyer, payee: seller, for: order, fee { seller: 1% cap 750 SAR, tax: 15% }, dispute { refund_after: return_verified } }
33
- purse = wallet.balance { holder: buyer, spend_limit: 1000 SAR }
34
- spend = wallet.spend { wallet: purse, payee: seller }
35
- limits = financing.limits { per_borrower: 10000 SAR, portfolio: 100000 SAR, borrower: buyer }
36
- plan = financing.installments { months: 3, profit: 3%, funds: sale, approval: officer }
37
- 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% }
38
- 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% }
39
- late = financing.late_charge { on: [plan, plan_schedule, plan_upfront], approval: officer, fines_to: seller, costs_to: seller }
40
- line = financing.credit_line { borrower: buyer, lender: seller, limit: 1000 SAR, expires: 2030-01-01 }
41
- advance = financing.advance { line: line, amount: 100 SAR }
42
- round = lending.round { borrower: buyer, capital: seller, plan: plan }
43
- ticket = lending.commitment { round: round, wallet: purse }
44
- distribution = lending.distribution { round: round, receipt: plan.settlement, residual_to: seller }
45
- cover = insurance.cover { holder: buyer, insurer: carrier, covers: sale, commission: 10% }
46
- claim = insurance.claim { cover: cover, approved_by: carrier }
47
- decision = approvals.decision { for: transfer, approved_by: officer, action: "pay" }
48
- case = collections.case { on: plan, agency: seller, fee: 20% }
49
- contact = collections.contact { case: case, agency: seller }
50
- package = travel.package { price: 1000 SAR, supplier_cost: 700 SAR, departure: 2030-01-01 }
51
- booking = travel.booking { package: package, buyer: buyer, supplier: seller, cover: travel_cover }
52
- cardholder = cards.cardholder { holder: buyer }
53
- card = cards.card { holder: cardholder, spend_limit: 100 SAR }
54
- authorization = cards.authorization { card: card, merchant: merchant, approval: officer }
55
- transaction = cards.transaction { authorization: authorization }
56
- dispute = cards.dispute { transaction: transaction, approved_by: officer }
57
- circle = savings.circle { contribution: 100 SAR, members: 3, starts: 2030-01-01 }
58
- membership = savings.membership { circle: circle, member: buyer }
59
- travel_cover = insurance.cover { holder: buyer, insurer: carrier, commission: 10%, covers: booking }
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.2.0",
3
+ "version": "4.0.0",
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.1.0"
79
+ "@hyperscale0/adl": "1.0.0-beta.7",
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": "575c103a43e80504b79fd138c0b0109cef574c0a"
92
+ "gitHead": "5fffb99534e07501367844e1453421605ee05566"
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";