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,87 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as Operator from '../../types/function/operator/module.f.mjs';
3
+ import * as list from '../../types/list/module.f.mjs';
4
+ const { empty, flat, stateScan } = list;
5
+ import * as bf from '../../types/bigfloat/module.f.mjs';
6
+ const { multiply } = bf;
7
+ import * as jsTokenizer from '../../js/tokenizer/module.f.mjs';
8
+ /**
9
+ * @typedef {|
10
+ * {readonly kind: 'true' | 'false' | 'null'} |
11
+ * {readonly kind: '{' | '}' | ':' | ',' | '[' | ']' | '.' | '=' } |
12
+ * jsTokenizer.StringToken |
13
+ * jsTokenizer.NumberToken |
14
+ * jsTokenizer.ErrorToken |
15
+ * jsTokenizer.IdToken |
16
+ * jsTokenizer.BigIntToken |
17
+ * jsTokenizer.WhitespaceToken |
18
+ * jsTokenizer.NewLineToken
19
+ * } DjsToken
20
+ */
21
+ /**
22
+ * @typedef {|
23
+ * {readonly kind: 'def' | '-' }
24
+ * } ScanState
25
+ */
26
+ /**
27
+ * @typedef {|
28
+ * jsTokenizer.JsToken | null
29
+ * } ScanInput
30
+ */
31
+ /** @type {(input: jsTokenizer.JsToken) => list.List<DjsToken>} */
32
+ const mapToken = input => {
33
+ switch (input.kind) {
34
+ case 'id':
35
+ case 'bigint':
36
+ case '{':
37
+ case '}':
38
+ case ':':
39
+ case ',':
40
+ case '[':
41
+ case ']':
42
+ case '.':
43
+ case '=':
44
+ case 'true':
45
+ case 'false':
46
+ case 'null':
47
+ case 'string':
48
+ case 'number':
49
+ case 'ws':
50
+ case 'nl':
51
+ case 'error': return [input];
52
+ default: return jsTokenizer.isKeywordToken(input) ? [{ kind: 'id', value: input.kind }] : [{ kind: 'error', message: 'invalid token' }];
53
+ }
54
+ };
55
+ /** @type {(input: ScanInput) => readonly [list.List<DjsToken>, ScanState]} */
56
+ const parseDefaultState = input => {
57
+ if (input === null)
58
+ return [empty, { kind: 'def' }];
59
+ switch (input.kind) {
60
+ case '-': return [empty, { kind: '-' }];
61
+ default: return [mapToken(input), { kind: 'def' }];
62
+ }
63
+ };
64
+ /** @type {(input: ScanInput) => readonly [list.List<DjsToken>, ScanState]} */
65
+ const parseMinusState = input => {
66
+ if (input === null)
67
+ return [[{ kind: 'error', message: 'invalid token' }], { kind: 'def' }];
68
+ switch (input.kind) {
69
+ case '-': return [[{ kind: 'error', message: 'invalid token' }], { kind: '-' }];
70
+ case 'bigint': return [[{ kind: 'bigint', value: -1n * input.value }], { kind: 'def' }];
71
+ case 'number': return [[{ kind: 'number', bf: multiply(input.bf)(-1n), value: `-${input.value}` }], { kind: 'def' }];
72
+ default: return [{ first: { kind: 'error', message: 'invalid token' }, tail: mapToken(input) }, { kind: 'def' }];
73
+ }
74
+ };
75
+ /** @type {Operator.StateScan<ScanInput, ScanState, list.List<DjsToken>>} */
76
+ const scanToken = state => input => {
77
+ switch (state.kind) {
78
+ case '-': return parseMinusState(input);
79
+ default: return parseDefaultState(input);
80
+ }
81
+ };
82
+ /** @type {(input: list.List<number>) => list.List<DjsToken>} */
83
+ export const tokenize = input => {
84
+ /** @type {list.List<ScanInput>} */
85
+ const jsTokens = jsTokenizer.tokenize(input);
86
+ return flat(stateScan(scanToken)({ kind: 'def' })(list.concat(jsTokens)([null])));
87
+ };
@@ -0,0 +1,480 @@
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 '../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.DjsToken[]} */
9
+ const tokenizeString = s => toArray(tokenizer.tokenize(encoding.stringToList(s)));
10
+ const stringify = djs.stringify(sort);
11
+ export default {
12
+ djs: [
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":"nl"},{"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":"ws"},{"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":"id","value":"abc"},{"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"},{"kind":"ws"},{"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"},{"kind":"ws"},{"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":"id","value":"a"},{"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":"."},{"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('ABCdef1234567890$_'));
351
+ if (result !== '[{"kind":"id","value":"ABCdef1234567890$_"}]') {
352
+ throw result;
353
+ }
354
+ },
355
+ () => {
356
+ const result = stringify(tokenizeString('{ABCdef1234567890$_}'));
357
+ if (result !== '[{"kind":"{"},{"kind":"id","value":"ABCdef1234567890$_"},{"kind":"}"}]') {
358
+ throw result;
359
+ }
360
+ },
361
+ () => {
362
+ const result = stringify(tokenizeString('123 _123'));
363
+ if (result !== '[{"bf":[123n,0],"kind":"number","value":"123"},{"kind":"ws"},{"kind":"id","value":"_123"}]') {
364
+ throw result;
365
+ }
366
+ },
367
+ () => {
368
+ const result = stringify(tokenizeString('123 $123'));
369
+ if (result !== '[{"bf":[123n,0],"kind":"number","value":"123"},{"kind":"ws"},{"kind":"id","value":"$123"}]') {
370
+ throw result;
371
+ }
372
+ },
373
+ () => {
374
+ const result = stringify(tokenizeString('123_123'));
375
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"id","value":"_123"}]') {
376
+ throw result;
377
+ }
378
+ },
379
+ () => {
380
+ const result = stringify(tokenizeString('123$123'));
381
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"id","value":"$123"}]') {
382
+ throw result;
383
+ }
384
+ },
385
+ () => {
386
+ const result = stringify(tokenizeString('1234567890n'));
387
+ if (result !== '[{"kind":"bigint","value":1234567890n}]') {
388
+ throw result;
389
+ }
390
+ },
391
+ () => {
392
+ const result = stringify(tokenizeString('0n'));
393
+ if (result !== '[{"kind":"bigint","value":0n}]') {
394
+ throw result;
395
+ }
396
+ },
397
+ () => {
398
+ const result = stringify(tokenizeString('[-1234567890n]'));
399
+ if (result !== '[{"kind":"["},{"kind":"bigint","value":-1234567890n},{"kind":"]"}]') {
400
+ throw result;
401
+ }
402
+ },
403
+ () => {
404
+ const result = stringify(tokenizeString('123.456n'));
405
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"id","value":"n"}]') {
406
+ throw result;
407
+ }
408
+ },
409
+ () => {
410
+ const result = stringify(tokenizeString('123e456n'));
411
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"id","value":"n"}]') {
412
+ throw result;
413
+ }
414
+ },
415
+ () => {
416
+ const result = stringify(tokenizeString('1234567890na'));
417
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"id","value":"a"}]') {
418
+ throw result;
419
+ }
420
+ },
421
+ () => {
422
+ const result = stringify(tokenizeString('1234567890nn'));
423
+ if (result !== '[{"kind":"error","message":"invalid number"},{"kind":"id","value":"n"}]') {
424
+ throw result;
425
+ }
426
+ },
427
+ ],
428
+ id: [
429
+ () => {
430
+ const result = stringify(tokenizeString('err'));
431
+ if (result !== '[{"kind":"id","value":"err"}]') {
432
+ throw result;
433
+ }
434
+ },
435
+ () => {
436
+ const result = stringify(tokenizeString('{e}'));
437
+ if (result !== '[{"kind":"{"},{"kind":"id","value":"e"},{"kind":"}"}]') {
438
+ throw result;
439
+ }
440
+ },
441
+ () => {
442
+ const result = stringify(tokenizeString('tru'));
443
+ if (result !== '[{"kind":"id","value":"tru"}]') {
444
+ throw result;
445
+ }
446
+ },
447
+ () => {
448
+ const result = stringify(tokenizeString('break'));
449
+ if (result !== '[{"kind":"id","value":"break"}]') {
450
+ throw result;
451
+ }
452
+ },
453
+ ],
454
+ keywords: [
455
+ () => {
456
+ const result = stringify(tokenizeString('true'));
457
+ if (result !== '[{"kind":"true"}]') {
458
+ throw result;
459
+ }
460
+ },
461
+ () => {
462
+ const result = stringify(tokenizeString('false'));
463
+ if (result !== '[{"kind":"false"}]') {
464
+ throw result;
465
+ }
466
+ },
467
+ () => {
468
+ const result = stringify(tokenizeString('null'));
469
+ if (result !== '[{"kind":"null"}]') {
470
+ throw result;
471
+ }
472
+ },
473
+ () => {
474
+ const result = stringify(tokenizeString('[null]'));
475
+ if (result !== '[{"kind":"["},{"kind":"null"},{"kind":"]"}]') {
476
+ throw result;
477
+ }
478
+ },
479
+ ]
480
+ };
@@ -0,0 +1,105 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as operator from '../types/function/operator/module.f.mjs';
3
+ import * as rangeMap from '../types/range_map/module.f.mjs';
4
+ const { merge: rangeMapMerge, fromRange, get } = rangeMap;
5
+ import * as list from '../types/list/module.f.mjs';
6
+ const { reduce: listReduce } = list;
7
+ import * as ascii from '../text/ascii/module.f.mjs';
8
+ const { range: asciiRange } = ascii;
9
+ const { fromCharCode } = String;
10
+ import * as f from '../types/function/module.f.mjs';
11
+ const { fn } = f;
12
+ import * as _range from '../types/range/module.f.mjs';
13
+ const { one } = _range;
14
+ const { toArray, map } = list;
15
+ /** @typedef {readonly[readonly string[], ToResult]} Result */
16
+ /** @typedef {(codePoint: number) => Result} ToResult */
17
+ /**
18
+ * @template T
19
+ * @typedef {(state: T) => ToResult} CreateToResult
20
+ */
21
+ /**
22
+ * @template T
23
+ * @typedef {rangeMap.RangeMapArray<CreateToResult<T>>} State
24
+ */
25
+ /** @type {ToResult} */
26
+ const unexpectedSymbol = codePoint => [[`unexpected symbol ${codePoint}`], unexpectedSymbol];
27
+ /** @type {<T>(state: T) => ToResult} */
28
+ const def = () => unexpectedSymbol;
29
+ /** @type {<T>(a: CreateToResult<T>) => (b: CreateToResult<T>) => CreateToResult<T>} */
30
+ const union = a => b => {
31
+ if (a === def || a === b) {
32
+ return b;
33
+ }
34
+ if (b === def) {
35
+ return a;
36
+ }
37
+ throw [a, b];
38
+ };
39
+ /** @type {readonly never[]} */
40
+ const empty = [];
41
+ /** @type {<T>(a: list.List<State<T>>) => State<T>} */
42
+ const reduce = a => {
43
+ /** @typedef {typeof a extends list.List<State<infer T>> ? T : never} T */
44
+ /** @type {rangeMap.RangeMerge<CreateToResult<T>>} */
45
+ const merge = rangeMapMerge({
46
+ union,
47
+ equal: operator.strictEqual,
48
+ });
49
+ return toArray(listReduce(merge)(empty)(a));
50
+ };
51
+ const codePointRange = fromRange(def);
52
+ const range = fn(asciiRange).then(codePointRange).result;
53
+ /** @type {(l: readonly string[]) => <T>(f: CreateToResult<T>) => State<T>} */
54
+ const rangeSet = l => f => {
55
+ /** @typedef {typeof f extends CreateToResult<infer T> ? T : never} T */
56
+ /** @type {(a: _range.Range) => (f: CreateToResult<T>) => State<T>} */
57
+ const codePointRange = fromRange(def);
58
+ /** @type {(r: string) => State<T>} */
59
+ const g = r => codePointRange(asciiRange(r))(f);
60
+ return reduce(map(g)(l));
61
+ };
62
+ /** @type {<T>(a: list.List<State<T>>) => CreateToResult<T>} */
63
+ const create = a => {
64
+ /** @typedef {typeof a extends list.List<State<infer T>> ? T : never} T */
65
+ const i = reduce(a);
66
+ /** @type {(v: number) => (i: State<T>) => (v: T) => ToResult} */
67
+ const x = get(def);
68
+ return v => c => x(c)(i)(v)(c);
69
+ };
70
+ export const terminal = -1;
71
+ /** @type {() => ToResult} */
72
+ const toInit = () => () => [[], init];
73
+ export const init = create([
74
+ codePointRange(one(terminal))(toInit),
75
+ rangeSet(['\t', ' ', '\n', '\r'])(toInit),
76
+ range('!')(() => () => [['!'], unexpectedSymbol]),
77
+ range('"')(() => () => [['"'], unexpectedSymbol]),
78
+ rangeSet(['$', '_', 'AZ', 'az'])(() => c => [[fromCharCode(c)], unexpectedSymbol]),
79
+ range('%')(() => () => [['%'], unexpectedSymbol]),
80
+ range('&')(() => () => [['&'], unexpectedSymbol]),
81
+ range("'")(() => () => [["'"], unexpectedSymbol]),
82
+ range('(')(() => () => [['('], unexpectedSymbol]),
83
+ range(')')(() => () => [[')'], unexpectedSymbol]),
84
+ range('*')(() => () => [['*'], unexpectedSymbol]),
85
+ range('+')(() => () => [['+'], unexpectedSymbol]),
86
+ range(',')(() => () => [[','], unexpectedSymbol]),
87
+ range('-')(() => () => [['-'], unexpectedSymbol]),
88
+ range('.')(() => () => [['.'], unexpectedSymbol]),
89
+ range('/')(() => () => [['/'], unexpectedSymbol]),
90
+ range('09')(() => a => [[fromCharCode(a)], unexpectedSymbol]),
91
+ range(':')(() => () => [[':'], unexpectedSymbol]),
92
+ range(';')(() => () => [[';'], unexpectedSymbol]),
93
+ range('<')(() => () => [['<'], unexpectedSymbol]),
94
+ range('=')(() => () => [['='], unexpectedSymbol]),
95
+ range('>')(() => () => [['>'], unexpectedSymbol]),
96
+ range('?')(() => () => [['?'], unexpectedSymbol]),
97
+ range('[')(() => () => [['['], unexpectedSymbol]),
98
+ range(']')(() => () => [[']'], unexpectedSymbol]),
99
+ range('^')(() => () => [['^'], unexpectedSymbol]),
100
+ range('`')(() => () => [['`'], unexpectedSymbol]),
101
+ range('{')(() => () => [['{'], unexpectedSymbol]),
102
+ range('|')(() => () => [['|'], unexpectedSymbol]),
103
+ range('}')(() => () => [['}'], unexpectedSymbol]),
104
+ range('~')(() => () => [['~'], unexpectedSymbol]),
105
+ ])(undefined);