functionalscript 0.2.0 → 0.2.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 (248) hide show
  1. package/dev/module.mjs +1 -1
  2. package/jsr.json +59 -59
  3. package/out/com/cpp/module.f.mjs +123 -0
  4. package/out/com/cpp/test.f.mjs +40 -0
  5. package/out/com/cpp/testlib.f.mjs +7 -0
  6. package/out/com/cs/module.f.mjs +95 -0
  7. package/out/com/cs/test.f.mjs +43 -0
  8. package/out/com/cs/testlib.f.mjs +7 -0
  9. package/out/com/rust/module.f.mjs +213 -0
  10. package/out/com/rust/test.f.mjs +123 -0
  11. package/out/com/rust/testlib.f.mjs +7 -0
  12. package/out/com/test/build.f.mjs +98 -0
  13. package/out/com/test/build.mjs +40 -0
  14. package/out/com/types/module.f.mjs +51 -0
  15. package/out/com/types/testlib.f.mjs +30 -0
  16. package/out/commonjs/build/module.f.mjs +107 -0
  17. package/out/commonjs/build/test.f.mjs +102 -0
  18. package/out/commonjs/module/function/module.f.mjs +15 -0
  19. package/out/commonjs/module/module.f.mjs +48 -0
  20. package/out/commonjs/module.f.mjs +10 -0
  21. package/out/commonjs/module.mjs +26 -0
  22. package/out/commonjs/package/dependencies/module.f.mjs +21 -0
  23. package/out/commonjs/package/dependencies/test.f.mjs +15 -0
  24. package/out/commonjs/package/module.f.mjs +40 -0
  25. package/out/commonjs/package/test.f.mjs +27 -0
  26. package/out/commonjs/path/module.f.mjs +171 -0
  27. package/out/commonjs/path/test.f.mjs +231 -0
  28. package/out/commonjs/test.mjs +87 -0
  29. package/out/dev/index.mjs +2 -0
  30. package/out/dev/module.f.mjs +2 -0
  31. package/out/dev/module.mjs +167 -0
  32. package/out/dev/test/module.f.mjs +134 -0
  33. package/out/dev/test.f.mjs +58 -0
  34. package/out/dev/test.mjs +52 -0
  35. package/out/djs/module.f.mjs +75 -0
  36. package/out/djs/parser/module.f.mjs +432 -0
  37. package/out/djs/parser/test.f.mjs +535 -0
  38. package/out/djs/test.f.mjs +84 -0
  39. package/out/djs/tokenizer/module.f.mjs +87 -0
  40. package/out/djs/tokenizer/test.f.mjs +480 -0
  41. package/out/fsc/module.f.mjs +105 -0
  42. package/out/fsc/test.f.mjs +19 -0
  43. package/out/fsm/module.f.mjs +80 -0
  44. package/out/fsm/test.f.mjs +138 -0
  45. package/out/html/module.f.mjs +94 -0
  46. package/out/html/test.f.mjs +45 -0
  47. package/out/issues/test.f.mjs +66 -0
  48. package/out/js/tokenizer/module.f.mjs +686 -0
  49. package/out/js/tokenizer/test.f.mjs +844 -0
  50. package/out/json/module.f.mjs +89 -0
  51. package/out/json/parser/module.f.mjs +224 -0
  52. package/out/json/parser/test.f.mjs +321 -0
  53. package/out/json/serializer/module.f.mjs +67 -0
  54. package/out/json/serializer/test.f.mjs +87 -0
  55. package/out/json/test.f.mjs +61 -0
  56. package/out/json/tokenizer/module.f.mjs +78 -0
  57. package/out/json/tokenizer/test.f.mjs +420 -0
  58. package/out/nanvm-lib/tests/test.f.mjs +87 -0
  59. package/out/nodejs/version/main.mjs +3 -0
  60. package/out/nodejs/version/module.f.mjs +34 -0
  61. package/out/nodejs/version/test.f.mjs +97 -0
  62. package/out/prime_field/module.f.mjs +87 -0
  63. package/out/prime_field/test.f.mjs +145 -0
  64. package/out/secp/module.f.mjs +113 -0
  65. package/out/secp/test.f.mjs +63 -0
  66. package/out/sha2/module.f.mjs +172 -0
  67. package/out/sha2/test.f.mjs +86 -0
  68. package/out/text/ascii/module.f.mjs +154 -0
  69. package/out/text/ascii/test.f.mjs +14 -0
  70. package/out/text/module.f.mjs +19 -0
  71. package/out/text/sgr/module.f.mjs +17 -0
  72. package/out/text/test.f.mjs +19 -0
  73. package/out/text/utf16/module.f.mjs +86 -0
  74. package/out/text/utf16/test.f.mjs +145 -0
  75. package/out/text/utf8/module.f.mjs +126 -0
  76. package/out/text/utf8/test.f.mjs +175 -0
  77. package/out/types/array/module.f.mjs +95 -0
  78. package/out/types/array/test.f.mjs +116 -0
  79. package/out/types/bigfloat/module.f.mjs +77 -0
  80. package/out/types/bigfloat/test.f.mjs +349 -0
  81. package/out/types/bigint/module.f.mjs +114 -0
  82. package/out/types/bigint/test.f.mjs +192 -0
  83. package/out/types/btree/find/module.f.mjs +137 -0
  84. package/out/types/btree/find/test.f.mjs +156 -0
  85. package/out/types/btree/module.f.mjs +34 -0
  86. package/out/types/btree/remove/module.f.mjs +209 -0
  87. package/out/types/btree/remove/test.f.mjs +638 -0
  88. package/out/types/btree/set/module.f.mjs +114 -0
  89. package/out/types/btree/set/test.f.mjs +390 -0
  90. package/out/types/btree/test.f.mjs +83 -0
  91. package/out/types/btree/types/module.f.mjs +50 -0
  92. package/out/types/byte_set/module.f.mjs +42 -0
  93. package/out/types/byte_set/test.f.mjs +123 -0
  94. package/out/types/function/compare/module.f.mjs +22 -0
  95. package/out/types/function/compare/test.f.mjs +8 -0
  96. package/out/types/function/module.f.mjs +44 -0
  97. package/out/types/function/operator/module.f.mjs +60 -0
  98. package/out/types/function/test.f.mjs +15 -0
  99. package/out/types/list/module.f.mjs +269 -0
  100. package/out/types/list/test.f.mjs +401 -0
  101. package/out/types/map/module.f.mjs +54 -0
  102. package/out/types/map/test.f.mjs +115 -0
  103. package/out/types/nibble_set/module.f.mjs +19 -0
  104. package/out/types/nibble_set/test.f.mjs +90 -0
  105. package/out/types/nullable/module.f.mjs +9 -0
  106. package/out/types/nullable/test.f.mjs +12 -0
  107. package/out/types/number/module.f.mjs +12 -0
  108. package/out/types/number/test.f.mjs +126 -0
  109. package/out/types/object/module.f.mjs +27 -0
  110. package/out/types/object/test.f.mjs +17 -0
  111. package/out/types/range/module.f.mjs +6 -0
  112. package/out/types/range/test.f.mjs +18 -0
  113. package/out/types/range_map/module.f.mjs +84 -0
  114. package/out/types/range_map/test.f.mjs +201 -0
  115. package/out/types/result/module.f.mjs +25 -0
  116. package/out/types/result/module.mjs +16 -0
  117. package/out/types/sorted_list/module.f.mjs +102 -0
  118. package/out/types/sorted_list/test.f.mjs +66 -0
  119. package/out/types/sorted_set/module.f.mjs +29 -0
  120. package/out/types/sorted_set/test.f.mjs +80 -0
  121. package/out/types/string/module.f.mjs +17 -0
  122. package/out/types/string/test.f.mjs +58 -0
  123. package/out/types/string_set/module.f.mjs +29 -0
  124. package/out/types/string_set/test.f.mjs +65 -0
  125. package/package.json +5 -4
  126. package/tsconfig.json +2 -2
  127. /package/{com → out/com}/cpp/module.f.d.mts +0 -0
  128. /package/{com → out/com}/cpp/test.f.d.mts +0 -0
  129. /package/{com → out/com}/cpp/testlib.f.d.mts +0 -0
  130. /package/{com → out/com}/cs/module.f.d.mts +0 -0
  131. /package/{com → out/com}/cs/test.f.d.mts +0 -0
  132. /package/{com → out/com}/cs/testlib.f.d.mts +0 -0
  133. /package/{com → out/com}/rust/module.f.d.mts +0 -0
  134. /package/{com → out/com}/rust/test.f.d.mts +0 -0
  135. /package/{com → out/com}/rust/testlib.f.d.mts +0 -0
  136. /package/{com → out/com}/test/build.d.mts +0 -0
  137. /package/{com → out/com}/test/build.f.d.mts +0 -0
  138. /package/{com → out/com}/types/module.f.d.mts +0 -0
  139. /package/{com → out/com}/types/testlib.f.d.mts +0 -0
  140. /package/{commonjs → out/commonjs}/build/module.f.d.mts +0 -0
  141. /package/{commonjs → out/commonjs}/build/test.f.d.mts +0 -0
  142. /package/{commonjs → out/commonjs}/module/function/module.f.d.mts +0 -0
  143. /package/{commonjs → out/commonjs}/module/module.f.d.mts +0 -0
  144. /package/{commonjs → out/commonjs}/module.d.mts +0 -0
  145. /package/{commonjs → out/commonjs}/module.f.d.mts +0 -0
  146. /package/{commonjs → out/commonjs}/package/dependencies/module.f.d.mts +0 -0
  147. /package/{commonjs → out/commonjs}/package/dependencies/test.f.d.mts +0 -0
  148. /package/{commonjs → out/commonjs}/package/module.f.d.mts +0 -0
  149. /package/{commonjs → out/commonjs}/package/test.f.d.mts +0 -0
  150. /package/{commonjs → out/commonjs}/path/module.f.d.mts +0 -0
  151. /package/{commonjs → out/commonjs}/path/test.f.d.mts +0 -0
  152. /package/{commonjs → out/commonjs}/test.d.mts +0 -0
  153. /package/{dev → out/dev}/index.d.mts +0 -0
  154. /package/{dev → out/dev}/module.d.mts +0 -0
  155. /package/{dev → out/dev}/module.f.d.mts +0 -0
  156. /package/{dev → out/dev}/test/module.f.d.mts +0 -0
  157. /package/{dev → out/dev}/test.d.mts +0 -0
  158. /package/{dev → out/dev}/test.f.d.mts +0 -0
  159. /package/{djs → out/djs}/module.f.d.mts +0 -0
  160. /package/{djs → out/djs}/parser/module.f.d.mts +0 -0
  161. /package/{djs → out/djs}/parser/test.f.d.mts +0 -0
  162. /package/{djs → out/djs}/test.f.d.mts +0 -0
  163. /package/{djs → out/djs}/tokenizer/module.f.d.mts +0 -0
  164. /package/{djs → out/djs}/tokenizer/test.f.d.mts +0 -0
  165. /package/{fsc → out/fsc}/module.f.d.mts +0 -0
  166. /package/{fsc → out/fsc}/test.f.d.mts +0 -0
  167. /package/{fsm → out/fsm}/module.f.d.mts +0 -0
  168. /package/{fsm → out/fsm}/test.f.d.mts +0 -0
  169. /package/{html → out/html}/module.f.d.mts +0 -0
  170. /package/{html → out/html}/test.f.d.mts +0 -0
  171. /package/{issues → out/issues}/test.f.d.mts +0 -0
  172. /package/{js → out/js}/tokenizer/module.f.d.mts +0 -0
  173. /package/{js → out/js}/tokenizer/test.f.d.mts +0 -0
  174. /package/{json → out/json}/module.f.d.mts +0 -0
  175. /package/{json → out/json}/parser/module.f.d.mts +0 -0
  176. /package/{json → out/json}/parser/test.f.d.mts +0 -0
  177. /package/{json → out/json}/serializer/module.f.d.mts +0 -0
  178. /package/{json → out/json}/serializer/test.f.d.mts +0 -0
  179. /package/{json → out/json}/test.f.d.mts +0 -0
  180. /package/{json → out/json}/tokenizer/module.f.d.mts +0 -0
  181. /package/{json → out/json}/tokenizer/test.f.d.mts +0 -0
  182. /package/{nanvm-lib → out/nanvm-lib}/tests/test.f.d.mts +0 -0
  183. /package/{nodejs → out/nodejs}/version/main.d.mts +0 -0
  184. /package/{nodejs → out/nodejs}/version/module.f.d.mts +0 -0
  185. /package/{nodejs → out/nodejs}/version/test.f.d.mts +0 -0
  186. /package/{prime_field → out/prime_field}/module.f.d.mts +0 -0
  187. /package/{prime_field → out/prime_field}/test.f.d.mts +0 -0
  188. /package/{secp → out/secp}/module.f.d.mts +0 -0
  189. /package/{secp → out/secp}/test.f.d.mts +0 -0
  190. /package/{sha2 → out/sha2}/module.f.d.mts +0 -0
  191. /package/{sha2 → out/sha2}/test.f.d.mts +0 -0
  192. /package/{text → out/text}/ascii/module.f.d.mts +0 -0
  193. /package/{text → out/text}/ascii/test.f.d.mts +0 -0
  194. /package/{text → out/text}/module.f.d.mts +0 -0
  195. /package/{text → out/text}/sgr/module.f.d.mts +0 -0
  196. /package/{text → out/text}/test.f.d.mts +0 -0
  197. /package/{text → out/text}/utf16/module.f.d.mts +0 -0
  198. /package/{text → out/text}/utf16/test.f.d.mts +0 -0
  199. /package/{text → out/text}/utf8/module.f.d.mts +0 -0
  200. /package/{text → out/text}/utf8/test.f.d.mts +0 -0
  201. /package/{types → out/types}/array/module.f.d.mts +0 -0
  202. /package/{types → out/types}/array/test.f.d.mts +0 -0
  203. /package/{types → out/types}/bigfloat/module.f.d.mts +0 -0
  204. /package/{types → out/types}/bigfloat/test.f.d.mts +0 -0
  205. /package/{types → out/types}/bigint/module.f.d.mts +0 -0
  206. /package/{types → out/types}/bigint/test.f.d.mts +0 -0
  207. /package/{types → out/types}/btree/find/module.f.d.mts +0 -0
  208. /package/{types → out/types}/btree/find/test.f.d.mts +0 -0
  209. /package/{types → out/types}/btree/module.f.d.mts +0 -0
  210. /package/{types → out/types}/btree/remove/module.f.d.mts +0 -0
  211. /package/{types → out/types}/btree/remove/test.f.d.mts +0 -0
  212. /package/{types → out/types}/btree/set/module.f.d.mts +0 -0
  213. /package/{types → out/types}/btree/set/test.f.d.mts +0 -0
  214. /package/{types → out/types}/btree/test.f.d.mts +0 -0
  215. /package/{types → out/types}/btree/types/module.f.d.mts +0 -0
  216. /package/{types → out/types}/byte_set/module.f.d.mts +0 -0
  217. /package/{types → out/types}/byte_set/test.f.d.mts +0 -0
  218. /package/{types → out/types}/function/compare/module.f.d.mts +0 -0
  219. /package/{types → out/types}/function/compare/test.f.d.mts +0 -0
  220. /package/{types → out/types}/function/module.f.d.mts +0 -0
  221. /package/{types → out/types}/function/operator/module.f.d.mts +0 -0
  222. /package/{types → out/types}/function/test.f.d.mts +0 -0
  223. /package/{types → out/types}/list/module.f.d.mts +0 -0
  224. /package/{types → out/types}/list/test.f.d.mts +0 -0
  225. /package/{types → out/types}/map/module.f.d.mts +0 -0
  226. /package/{types → out/types}/map/test.f.d.mts +0 -0
  227. /package/{types → out/types}/nibble_set/module.f.d.mts +0 -0
  228. /package/{types → out/types}/nibble_set/test.f.d.mts +0 -0
  229. /package/{types → out/types}/nullable/module.f.d.mts +0 -0
  230. /package/{types → out/types}/nullable/test.f.d.mts +0 -0
  231. /package/{types → out/types}/number/module.f.d.mts +0 -0
  232. /package/{types → out/types}/number/test.f.d.mts +0 -0
  233. /package/{types → out/types}/object/module.f.d.mts +0 -0
  234. /package/{types → out/types}/object/test.f.d.mts +0 -0
  235. /package/{types → out/types}/range/module.f.d.mts +0 -0
  236. /package/{types → out/types}/range/test.f.d.mts +0 -0
  237. /package/{types → out/types}/range_map/module.f.d.mts +0 -0
  238. /package/{types → out/types}/range_map/test.f.d.mts +0 -0
  239. /package/{types → out/types}/result/module.d.mts +0 -0
  240. /package/{types → out/types}/result/module.f.d.mts +0 -0
  241. /package/{types → out/types}/sorted_list/module.f.d.mts +0 -0
  242. /package/{types → out/types}/sorted_list/test.f.d.mts +0 -0
  243. /package/{types → out/types}/sorted_set/module.f.d.mts +0 -0
  244. /package/{types → out/types}/sorted_set/test.f.d.mts +0 -0
  245. /package/{types → out/types}/string/module.f.d.mts +0 -0
  246. /package/{types → out/types}/string/test.f.d.mts +0 -0
  247. /package/{types → out/types}/string_set/module.f.d.mts +0 -0
  248. /package/{types → out/types}/string_set/test.f.d.mts +0 -0
@@ -0,0 +1,420 @@
1
+ import * as tokenizer from './module.f.mjs';
2
+ import * as list from '../../types/list/module.f.mjs';
3
+ const { toArray } = list;
4
+ import * as djs from '../../djs/module.f.mjs';
5
+ import * as o from '../../types/object/module.f.mjs';
6
+ const { sort } = o;
7
+ import * as encoding from '../../text/utf16/module.f.mjs';
8
+ /** @type {(s: string) => readonly tokenizer.JsonToken[]} */
9
+ const tokenizeString = s => toArray(tokenizer.tokenize(encoding.stringToList(s)));
10
+ const stringify = djs.stringify(sort);
11
+ export default {
12
+ json: [
13
+ () => {
14
+ const result = tokenizeString('');
15
+ if (result.length !== 0) {
16
+ throw result;
17
+ }
18
+ },
19
+ () => {
20
+ const result = stringify(tokenizeString('{'));
21
+ if (result !== '[{"kind":"{"}]') {
22
+ throw result;
23
+ }
24
+ },
25
+ () => {
26
+ const result = stringify(tokenizeString('}'));
27
+ if (result !== '[{"kind":"}"}]') {
28
+ throw result;
29
+ }
30
+ },
31
+ () => {
32
+ const result = stringify(tokenizeString(':'));
33
+ if (result !== '[{"kind":":"}]') {
34
+ throw result;
35
+ }
36
+ },
37
+ () => {
38
+ const result = stringify(tokenizeString(','));
39
+ if (result !== '[{"kind":","}]') {
40
+ throw result;
41
+ }
42
+ },
43
+ () => {
44
+ const result = stringify(tokenizeString('['));
45
+ if (result !== '[{"kind":"["}]') {
46
+ throw result;
47
+ }
48
+ },
49
+ () => {
50
+ const result = stringify(tokenizeString(']'));
51
+ if (result !== '[{"kind":"]"}]') {
52
+ throw result;
53
+ }
54
+ },
55
+ () => {
56
+ const result = stringify(tokenizeString('ᄑ'));
57
+ if (result !== '[{"kind":"error","message":"unexpected character"}]') {
58
+ throw result;
59
+ }
60
+ },
61
+ () => {
62
+ const result = stringify(tokenizeString('{ \t\n\r}'));
63
+ if (result !== '[{"kind":"{"},{"kind":"}"}]') {
64
+ throw result;
65
+ }
66
+ },
67
+ () => {
68
+ const result = stringify(tokenizeString('""'));
69
+ if (result !== '[{"kind":"string","value":""}]') {
70
+ throw result;
71
+ }
72
+ },
73
+ () => {
74
+ const result = stringify(tokenizeString('"value"'));
75
+ if (result !== '[{"kind":"string","value":"value"}]') {
76
+ throw result;
77
+ }
78
+ },
79
+ () => {
80
+ const result = stringify(tokenizeString('"value'));
81
+ if (result !== '[{"kind":"error","message":"\\" are missing"}]') {
82
+ throw result;
83
+ }
84
+ },
85
+ () => {
86
+ const result = stringify(tokenizeString('"value1" "value2"'));
87
+ if (result !== '[{"kind":"string","value":"value1"},{"kind":"string","value":"value2"}]') {
88
+ throw result;
89
+ }
90
+ },
91
+ () => {
92
+ const result = stringify(tokenizeString('"'));
93
+ if (result !== '[{"kind":"error","message":"\\" are missing"}]') {
94
+ throw result;
95
+ }
96
+ },
97
+ () => {
98
+ const result = stringify(tokenizeString('"\\\\"'));
99
+ if (result !== '[{"kind":"string","value":"\\\\"}]') {
100
+ throw result;
101
+ }
102
+ },
103
+ () => {
104
+ const result = stringify(tokenizeString('"\\""'));
105
+ if (result !== '[{"kind":"string","value":"\\""}]') {
106
+ throw result;
107
+ }
108
+ },
109
+ () => {
110
+ const result = stringify(tokenizeString('"\\/"'));
111
+ if (result !== '[{"kind":"string","value":"/"}]') {
112
+ throw result;
113
+ }
114
+ },
115
+ () => {
116
+ const result = stringify(tokenizeString('"\\x"'));
117
+ if (result !== '[{"kind":"error","message":"unescaped character"},{"kind":"string","value":"x"}]') {
118
+ throw result;
119
+ }
120
+ },
121
+ () => {
122
+ const result = stringify(tokenizeString('"\\'));
123
+ if (result !== '[{"kind":"error","message":"\\" are missing"}]') {
124
+ throw result;
125
+ }
126
+ },
127
+ () => {
128
+ const result = stringify(tokenizeString('"\\b\\f\\n\\r\\t"'));
129
+ if (result !== '[{"kind":"string","value":"\\b\\f\\n\\r\\t"}]') {
130
+ throw result;
131
+ }
132
+ },
133
+ () => {
134
+ const result = stringify(tokenizeString('"\\u1234"'));
135
+ if (result !== '[{"kind":"string","value":"ሴ"}]') {
136
+ throw result;
137
+ }
138
+ },
139
+ () => {
140
+ const result = stringify(tokenizeString('"\\uaBcDEeFf"'));
141
+ if (result !== '[{"kind":"string","value":"ꯍEeFf"}]') {
142
+ throw result;
143
+ }
144
+ },
145
+ () => {
146
+ const result = stringify(tokenizeString('"\\uEeFg"'));
147
+ if (result !== '[{"kind":"error","message":"invalid hex value"},{"kind":"string","value":"g"}]') {
148
+ throw result;
149
+ }
150
+ },
151
+ () => {
152
+ const result = stringify(tokenizeString('0'));
153
+ if (result !== '[{"bf":[0n,0],"kind":"number","value":"0"}]') {
154
+ throw result;
155
+ }
156
+ },
157
+ () => {
158
+ const result = stringify(tokenizeString('[0]'));
159
+ if (result !== '[{"kind":"["},{"bf":[0n,0],"kind":"number","value":"0"},{"kind":"]"}]') {
160
+ throw result;
161
+ }
162
+ },
163
+ () => {
164
+ const result = stringify(tokenizeString('00'));
165
+ if (result !== '[{"kind":"error","message":"invalid number"}]') {
166
+ throw result;
167
+ }
168
+ },
169
+ () => {
170
+ const result = stringify(tokenizeString('0abc,'));
171
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"error","message":"invalid token"},{"kind":","}]') {
172
+ throw result;
173
+ }
174
+ },
175
+ () => {
176
+ const result = stringify(tokenizeString('123456789012345678901234567890'));
177
+ if (result !== '[{"bf":[123456789012345678901234567890n,0],"kind":"number","value":"123456789012345678901234567890"}]') {
178
+ throw result;
179
+ }
180
+ },
181
+ () => {
182
+ const result = stringify(tokenizeString('{90}'));
183
+ if (result !== '[{"kind":"{"},{"bf":[90n,0],"kind":"number","value":"90"},{"kind":"}"}]') {
184
+ throw result;
185
+ }
186
+ },
187
+ () => {
188
+ const result = stringify(tokenizeString('1 2'));
189
+ if (result !== '[{"bf":[1n,0],"kind":"number","value":"1"},{"bf":[2n,0],"kind":"number","value":"2"}]') {
190
+ throw result;
191
+ }
192
+ },
193
+ () => {
194
+ const result = stringify(tokenizeString('0. 2'));
195
+ if (result !== '[{"kind":"error","message":"invalid number"},{"bf":[2n,0],"kind":"number","value":"2"}]') {
196
+ throw result;
197
+ }
198
+ },
199
+ () => {
200
+ const result = stringify(tokenizeString('10-0'));
201
+ if (result !== '[{"bf":[10n,0],"kind":"number","value":"10"},{"bf":[0n,0],"kind":"number","value":"-0"}]') {
202
+ throw result;
203
+ }
204
+ },
205
+ () => {
206
+ const result = stringify(tokenizeString('9a:'));
207
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"error","message":"invalid token"},{"kind":":"}]') {
208
+ throw result;
209
+ }
210
+ },
211
+ () => {
212
+ const result = stringify(tokenizeString('-10'));
213
+ if (result !== '[{"bf":[-10n,0],"kind":"number","value":"-10"}]') {
214
+ throw result;
215
+ }
216
+ },
217
+ () => {
218
+ const result = stringify(tokenizeString('-'));
219
+ if (result !== '[{"kind":"error","message":"invalid token"}]') {
220
+ throw result;
221
+ }
222
+ },
223
+ () => {
224
+ const result = stringify(tokenizeString('--'));
225
+ if (result !== '[{"kind":"error","message":"invalid token"}]') {
226
+ throw result;
227
+ }
228
+ },
229
+ () => {
230
+ const result = stringify(tokenizeString('---'));
231
+ if (result !== '[{"kind":"error","message":"invalid token"},{"kind":"error","message":"invalid token"}]') {
232
+ throw result;
233
+ }
234
+ },
235
+ () => {
236
+ const result = stringify(tokenizeString('-0'));
237
+ if (result !== '[{"bf":[0n,0],"kind":"number","value":"-0"}]') {
238
+ throw result;
239
+ }
240
+ },
241
+ () => {
242
+ const result = stringify(tokenizeString('-00'));
243
+ if (result !== '[{"kind":"error","message":"invalid token"},{"kind":"error","message":"invalid number"}]') {
244
+ throw result;
245
+ }
246
+ },
247
+ () => {
248
+ const result = stringify(tokenizeString('-.123'));
249
+ if (result !== '[{"kind":"error","message":"invalid token"},{"kind":"error","message":"invalid token"},{"bf":[123n,0],"kind":"number","value":"123"}]') {
250
+ throw result;
251
+ }
252
+ },
253
+ () => {
254
+ const result = stringify(tokenizeString('0.01'));
255
+ if (result !== '[{"bf":[1n,-2],"kind":"number","value":"0.01"}]') {
256
+ throw result;
257
+ }
258
+ },
259
+ () => {
260
+ const result = stringify(tokenizeString('-0.9'));
261
+ if (result !== '[{"bf":[-9n,-1],"kind":"number","value":"-0.9"}]') {
262
+ throw result;
263
+ }
264
+ },
265
+ () => {
266
+ const result = stringify(tokenizeString('-0.'));
267
+ if (result !== '[{"kind":"error","message":"invalid token"},{"kind":"error","message":"invalid number"}]') {
268
+ throw result;
269
+ }
270
+ },
271
+ () => {
272
+ const result = stringify(tokenizeString('-0.]'));
273
+ if (result !== '[{"kind":"error","message":"invalid token"},{"kind":"error","message":"invalid number"},{"kind":"]"}]') {
274
+ throw result;
275
+ }
276
+ },
277
+ () => {
278
+ const result = stringify(tokenizeString('12.34'));
279
+ if (result !== '[{"bf":[1234n,-2],"kind":"number","value":"12.34"}]') {
280
+ throw result;
281
+ }
282
+ },
283
+ () => {
284
+ const result = stringify(tokenizeString('-12.00'));
285
+ if (result !== '[{"bf":[-1200n,-2],"kind":"number","value":"-12.00"}]') {
286
+ throw result;
287
+ }
288
+ },
289
+ () => {
290
+ const result = stringify(tokenizeString('-12.'));
291
+ if (result !== '[{"kind":"error","message":"invalid token"},{"kind":"error","message":"invalid number"}]') {
292
+ throw result;
293
+ }
294
+ },
295
+ () => {
296
+ const result = stringify(tokenizeString('12.]'));
297
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"]"}]') {
298
+ throw result;
299
+ }
300
+ },
301
+ () => {
302
+ const result = stringify(tokenizeString('0e1'));
303
+ if (result !== '[{"bf":[0n,1],"kind":"number","value":"0e1"}]') {
304
+ throw result;
305
+ }
306
+ },
307
+ () => {
308
+ const result = stringify(tokenizeString('0e+2'));
309
+ if (result !== '[{"bf":[0n,2],"kind":"number","value":"0e+2"}]') {
310
+ throw result;
311
+ }
312
+ },
313
+ () => {
314
+ const result = stringify(tokenizeString('0e-0'));
315
+ if (result !== '[{"bf":[0n,0],"kind":"number","value":"0e-0"}]') {
316
+ throw result;
317
+ }
318
+ },
319
+ () => {
320
+ const result = stringify(tokenizeString('12e0000'));
321
+ if (result !== '[{"bf":[12n,0],"kind":"number","value":"12e0000"}]') {
322
+ throw result;
323
+ }
324
+ },
325
+ () => {
326
+ const result = stringify(tokenizeString('-12e-0001'));
327
+ if (result !== '[{"bf":[-12n,-1],"kind":"number","value":"-12e-0001"}]') {
328
+ throw result;
329
+ }
330
+ },
331
+ () => {
332
+ const result = stringify(tokenizeString('-12.34e1234'));
333
+ if (result !== '[{"bf":[-1234n,1232],"kind":"number","value":"-12.34e1234"}]') {
334
+ throw result;
335
+ }
336
+ },
337
+ () => {
338
+ const result = stringify(tokenizeString('0e'));
339
+ if (result !== '[{"kind":"error","message":"invalid number"}]') {
340
+ throw result;
341
+ }
342
+ },
343
+ () => {
344
+ const result = stringify(tokenizeString('0e-'));
345
+ if (result !== '[{"kind":"error","message":"invalid number"}]') {
346
+ throw result;
347
+ }
348
+ },
349
+ () => {
350
+ const result = stringify(tokenizeString('1234567890n'));
351
+ if (result !== '[{"kind":"error","message":"invalid token"}]') {
352
+ throw result;
353
+ }
354
+ },
355
+ () => {
356
+ const result = stringify(tokenizeString('0n'));
357
+ if (result !== '[{"kind":"error","message":"invalid token"}]') {
358
+ throw result;
359
+ }
360
+ },
361
+ () => {
362
+ const result = stringify(tokenizeString('[-1234567890n]'));
363
+ if (result !== '[{"kind":"["},{"kind":"error","message":"invalid token"},{"kind":"error","message":"invalid token"},{"kind":"]"}]') {
364
+ throw result;
365
+ }
366
+ },
367
+ ],
368
+ id: [
369
+ () => {
370
+ const result = stringify(tokenizeString('err'));
371
+ if (result !== '[{"kind":"error","message":"invalid token"}]') {
372
+ throw result;
373
+ }
374
+ },
375
+ () => {
376
+ const result = stringify(tokenizeString('{e}'));
377
+ if (result !== '[{"kind":"{"},{"kind":"error","message":"invalid token"},{"kind":"}"}]') {
378
+ throw result;
379
+ }
380
+ },
381
+ () => {
382
+ const result = stringify(tokenizeString('tru'));
383
+ if (result !== '[{"kind":"error","message":"invalid token"}]') {
384
+ throw result;
385
+ }
386
+ },
387
+ () => {
388
+ const result = stringify(tokenizeString('break'));
389
+ if (result !== '[{"kind":"error","message":"invalid token"}]') {
390
+ throw result;
391
+ }
392
+ },
393
+ ],
394
+ keywords: [
395
+ () => {
396
+ const result = stringify(tokenizeString('true'));
397
+ if (result !== '[{"kind":"true"}]') {
398
+ throw result;
399
+ }
400
+ },
401
+ () => {
402
+ const result = stringify(tokenizeString('false'));
403
+ if (result !== '[{"kind":"false"}]') {
404
+ throw result;
405
+ }
406
+ },
407
+ () => {
408
+ const result = stringify(tokenizeString('null'));
409
+ if (result !== '[{"kind":"null"}]') {
410
+ throw result;
411
+ }
412
+ },
413
+ () => {
414
+ const result = stringify(tokenizeString('[null]'));
415
+ if (result !== '[{"kind":"["},{"kind":"null"},{"kind":"]"}]') {
416
+ throw result;
417
+ }
418
+ },
419
+ ]
420
+ };
@@ -0,0 +1,87 @@
1
+ /** @type {(a: unknown) => (b: unknown) => void} */
2
+ const e = a => b => {
3
+ if (a === b) { }
4
+ else {
5
+ throw [a, '===', b];
6
+ }
7
+ };
8
+ /** @type {(a: unknown) => (b: unknown) => void} */
9
+ const n = a => b => {
10
+ if (a !== b) { }
11
+ else {
12
+ throw [a, '!==', b];
13
+ }
14
+ };
15
+ export default {
16
+ eq: {
17
+ nullish: () => {
18
+ e(null)(null);
19
+ e(undefined)(undefined);
20
+ n(null)(undefined);
21
+ },
22
+ boolean: {
23
+ boolean: () => {
24
+ e(true)(true);
25
+ e(false)(false);
26
+ n(true)(false);
27
+ },
28
+ nullish: () => {
29
+ n(false)(undefined);
30
+ }
31
+ },
32
+ number: {
33
+ number: () => {
34
+ e(2.3)(2.3);
35
+ n(2.3)(-5.4);
36
+ n(NaN)(NaN);
37
+ e(0)(-0);
38
+ if (!Object.is(-0, -0)) {
39
+ throw -0;
40
+ }
41
+ if (Object.is(0, -0)) {
42
+ throw -0;
43
+ }
44
+ e(Infinity)(Infinity);
45
+ e(-Infinity)(-Infinity);
46
+ n(Infinity)(-Infinity);
47
+ },
48
+ nullish: () => {
49
+ n(undefined)(NaN);
50
+ n(undefined)(0);
51
+ }
52
+ },
53
+ string: {
54
+ string: () => {
55
+ e("hello")("hello");
56
+ n("hello")("world");
57
+ },
58
+ number: () => {
59
+ n(0)("0");
60
+ }
61
+ },
62
+ bigint: {
63
+ bigint: () => {
64
+ e(12n)(12n);
65
+ n(12n)(-12n);
66
+ n(12n)(13n);
67
+ }
68
+ },
69
+ array: {
70
+ array: () => {
71
+ /** @type {any} */
72
+ const a = [];
73
+ e(a)(a);
74
+ n([])([]);
75
+ const a0 = ['0'];
76
+ e(a0)(a0);
77
+ }
78
+ },
79
+ object: {
80
+ object: () => {
81
+ const o = { '0': '0' };
82
+ e(o)(o);
83
+ n(o)({ '0': '0' });
84
+ }
85
+ }
86
+ }
87
+ };
@@ -0,0 +1,3 @@
1
+ import * as _ from './module.f.mjs';
2
+ import fs from 'node:fs';
3
+ _.updateVersion({ fs });
@@ -0,0 +1,34 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ /** @typedef {{}} Buffer */
3
+ /**
4
+ * @template T
5
+ * @typedef {{
6
+ * readonly readFileSync: (name: string) => Buffer
7
+ * readonly writeFileSync: (name: string, content: string) => T
8
+ * }} Fs
9
+ */
10
+ /**
11
+ * @template T
12
+ * @typedef {{
13
+ * readonly fs: Fs<T>
14
+ * }} Node
15
+ */
16
+ const { stringify, parse } = JSON;
17
+ /** @type {<T>(fs: Fs<T>) => string} */
18
+ export const getVersion = fs => readJson(fs)('package').version;
19
+ const jsonFile = (/** @type {string} */ jsonFile) => `${jsonFile}.json`;
20
+ /** @type {<T>(node: Fs<T>) => (name: string) => any} */
21
+ const readJson = fs => name => parse(fs.readFileSync(jsonFile(name)).toString());
22
+ /** @type {<T>(node: Node<T>) => readonly[T, T]} */
23
+ export const updateVersion = ({ fs }) => {
24
+ const f = (/** @type {string} */ name) => {
25
+ return fs.writeFileSync(jsonFile(name), stringify({
26
+ ...readJson(fs)(name),
27
+ version: getVersion(fs)
28
+ }, null, 2));
29
+ };
30
+ return [
31
+ f('package'),
32
+ f('jsr')
33
+ ];
34
+ };
@@ -0,0 +1,97 @@
1
+ import * as _ from './module.f.mjs';
2
+ const version = '0.3.0';
3
+ /**
4
+ * @type {{
5
+ * readonly[k in string]: unknown
6
+ * }}
7
+ */
8
+ const x = {
9
+ 'package.json': {
10
+ "name": "functionalscript",
11
+ version,
12
+ "description": "FunctionalScript is a functional subset of JavaScript",
13
+ "main": "module.f.cjs",
14
+ "scripts": {
15
+ "tsc": "tsc",
16
+ "test": "tsc && npm run test-only",
17
+ "version": "node ./nodejs/version/main.cjs",
18
+ "test-only": "node --trace-uncaught ./test.f.cjs"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/functionalscript/functionalscript.git"
23
+ },
24
+ "author": "NatFoam",
25
+ "license": "MIT",
26
+ "keywords": [
27
+ "lambda",
28
+ "functional-programming",
29
+ "closure",
30
+ "pure-functional",
31
+ "typescript",
32
+ "programming-language",
33
+ "lazy-evaluation"
34
+ ],
35
+ "bugs": {
36
+ "url": "https://github.com/functionalscript/functionalscript/issues"
37
+ },
38
+ "homepage": "https://github.com/functionalscript/functionalscript#readme",
39
+ "devDependencies": {
40
+ "@types/node": "^18.6.2",
41
+ "typescript": "^4.7.4"
42
+ }
43
+ },
44
+ "jsr.json": {}
45
+ };
46
+ const e = '{\n' +
47
+ ' "name": "functionalscript",\n' +
48
+ ` "version": "${version}",\n` +
49
+ ' "description": "FunctionalScript is a functional subset of JavaScript",\n' +
50
+ ' "main": "module.f.cjs",\n' +
51
+ ' "scripts": {\n' +
52
+ ' "tsc": "tsc",\n' +
53
+ ' "test": "tsc && npm run test-only",\n' +
54
+ ' "version": "node ./nodejs/version/main.cjs",\n' +
55
+ ' "test-only": "node --trace-uncaught ./test.f.cjs"\n' +
56
+ ' },\n' +
57
+ ' "repository": {\n' +
58
+ ' "type": "git",\n' +
59
+ ' "url": "git+https://github.com/functionalscript/functionalscript.git"\n' +
60
+ ' },\n' +
61
+ ' "author": "NatFoam",\n' +
62
+ ' "license": "MIT",\n' +
63
+ ' "keywords": [\n' +
64
+ ' "lambda",\n' +
65
+ ' "functional-programming",\n' +
66
+ ' "closure",\n' +
67
+ ' "pure-functional",\n' +
68
+ ' "typescript",\n' +
69
+ ' "programming-language",\n' +
70
+ ' "lazy-evaluation"\n' +
71
+ ' ],\n' +
72
+ ' "bugs": {\n' +
73
+ ' "url": "https://github.com/functionalscript/functionalscript/issues"\n' +
74
+ ' },\n' +
75
+ ' "homepage": "https://github.com/functionalscript/functionalscript#readme",\n' +
76
+ ' "devDependencies": {\n' +
77
+ ' "@types/node": "^18.6.2",\n' +
78
+ ' "typescript": "^4.7.4"\n' +
79
+ ' }\n' +
80
+ '}';
81
+ /** @type {(s: string) => _.Buffer} */
82
+ const buffer = s => ({
83
+ toString: () => s
84
+ });
85
+ export default () => {
86
+ /** @type {_.Node<string>} */
87
+ const node = {
88
+ fs: {
89
+ readFileSync: n => buffer(JSON.stringify(x[n])),
90
+ writeFileSync: (_, content) => content
91
+ }
92
+ };
93
+ const [n, d] = _.updateVersion(node);
94
+ if (n !== e) {
95
+ throw [n, e];
96
+ }
97
+ };