functionalscript 0.2.0 → 0.2.2

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,67 @@
1
+ // @ts-self-types="./module.f.d.mts"
2
+ import * as list from '../../types/list/module.f.mjs';
3
+ const { flat, reduce, empty } = list;
4
+ import * as O from '../../types/object/module.f.mjs';
5
+ import * as Operator from '../../types/function/operator/module.f.mjs';
6
+ /**
7
+ * @template T
8
+ * @typedef {{
9
+ * readonly [k in string]: Unknown<T>
10
+ * }} Obj<T>
11
+ */
12
+ /**
13
+ * @template T
14
+ * @typedef {readonly Unknown<T>[]} Arr<T>
15
+ */
16
+ /**
17
+ * @typedef {|
18
+ * boolean |
19
+ * string |
20
+ * number |
21
+ * null
22
+ * } Primitive
23
+ */
24
+ /**
25
+ * @template T
26
+ * @typedef {|
27
+ * Arr<T>|
28
+ * Obj<T>|
29
+ * null|
30
+ * T
31
+ * } Unknown<T>
32
+ */
33
+ const jsonStringify = JSON.stringify;
34
+ /** @type {(_: string) => list.List<string>} */
35
+ export const stringSerialize = input => [jsonStringify(input)];
36
+ /** @type {(_: number) => list.List<string>} */
37
+ export const numberSerialize = input => [jsonStringify(input)];
38
+ export const nullSerialize = ['null'];
39
+ const trueSerialize = ['true'];
40
+ const falseSerialize = ['false'];
41
+ /** @type {(_: boolean) => list.List<string>} */
42
+ export const boolSerialize = value => value ? trueSerialize : falseSerialize;
43
+ const comma = [','];
44
+ /** @type {Operator.Reduce<list.List<string>>} */
45
+ const joinOp = b => prior => flat([prior, comma, b]);
46
+ /** @type {(input: list.List<list.List<string>>) => list.List<string>} */
47
+ const join = reduce(joinOp)(empty);
48
+ /** @type {(open: string) => (close: string) => (input: list.List<list.List<string>>) => list.List<string>} */
49
+ const wrap = open => close => {
50
+ const seqOpen = [open];
51
+ const seqClose = [close];
52
+ return input => flat([seqOpen, join(input), seqClose]);
53
+ };
54
+ export const objectWrap = wrap('{')('}');
55
+ export const arrayWrap = wrap('[')(']');
56
+ /**
57
+ * @template T
58
+ * @typedef {O.Entry<Unknown<T>>} Entry<T>
59
+ */
60
+ /**
61
+ * @template T
62
+ * @typedef {(list.List<Entry<T>>)} Entries<T>
63
+ */
64
+ /**
65
+ * @template T
66
+ * @typedef {(entries: Entries<T>) => Entries<T>} MapEntries<T>
67
+ */
@@ -0,0 +1,87 @@
1
+ import * as _ from './module.f.mjs';
2
+ import * as list from '../../types/list/module.f.mjs';
3
+ const { toArray } = list;
4
+ export default {
5
+ arrayWrap: [
6
+ () => {
7
+ const result = JSON.stringify(toArray(_.arrayWrap(null)));
8
+ if (result !== '["[","]"]') {
9
+ throw result;
10
+ }
11
+ },
12
+ () => {
13
+ const result = JSON.stringify(toArray(_.arrayWrap([['a', 'b']])));
14
+ if (result !== '["[","a","b","]"]') {
15
+ throw result;
16
+ }
17
+ },
18
+ () => {
19
+ const result = JSON.stringify(toArray(_.arrayWrap([['a'], ['b']])));
20
+ if (result !== '["[","a",",","b","]"]') {
21
+ throw result;
22
+ }
23
+ }
24
+ ],
25
+ objectWrap: [
26
+ () => {
27
+ const result = JSON.stringify(toArray(_.objectWrap(null)));
28
+ if (result !== '["{","}"]') {
29
+ throw result;
30
+ }
31
+ },
32
+ () => {
33
+ const result = JSON.stringify(toArray(_.objectWrap([['a', 'b']])));
34
+ if (result !== '["{","a","b","}"]') {
35
+ throw result;
36
+ }
37
+ },
38
+ () => {
39
+ const result = JSON.stringify(toArray(_.objectWrap([['a'], ['b']])));
40
+ if (result !== '["{","a",",","b","}"]') {
41
+ throw result;
42
+ }
43
+ }
44
+ ],
45
+ stringSerialize: [
46
+ () => {
47
+ const result = JSON.stringify(toArray(_.stringSerialize('abc')));
48
+ if (result !== '["\\"abc\\""]') {
49
+ throw result;
50
+ }
51
+ },
52
+ () => {
53
+ const result = JSON.stringify(toArray(_.stringSerialize('123')));
54
+ if (result !== '["\\"123\\""]') {
55
+ throw result;
56
+ }
57
+ }
58
+ ],
59
+ numberSerialize: [
60
+ () => {
61
+ const result = JSON.stringify(toArray(_.numberSerialize(123)));
62
+ if (result !== '["123"]') {
63
+ throw result;
64
+ }
65
+ },
66
+ () => {
67
+ const result = JSON.stringify(toArray(_.numberSerialize(10e20)));
68
+ if (result !== '["1e+21"]') {
69
+ throw result;
70
+ }
71
+ }
72
+ ],
73
+ boolSerialize: [
74
+ () => {
75
+ const result = JSON.stringify(toArray(_.boolSerialize(false)));
76
+ if (result !== '["false"]') {
77
+ throw result;
78
+ }
79
+ },
80
+ () => {
81
+ const result = JSON.stringify(toArray(_.boolSerialize(true)));
82
+ if (result !== '["true"]') {
83
+ throw result;
84
+ }
85
+ }
86
+ ]
87
+ };
@@ -0,0 +1,61 @@
1
+ import * as json from './module.f.mjs';
2
+ import * as o from '../types/object/module.f.mjs';
3
+ const { sort } = o;
4
+ import * as f from '../types/function/module.f.mjs';
5
+ const { identity } = f;
6
+ export default {
7
+ setProperty: () => {
8
+ if (json.setProperty("Hello")([])({}) !== "Hello") {
9
+ throw 'error';
10
+ }
11
+ },
12
+ stringify: [
13
+ {
14
+ sort: () => {
15
+ const r = json.setProperty("Hello")(['a'])({});
16
+ const x = json.stringify(sort)(r);
17
+ if (x !== '{"a":"Hello"}') {
18
+ throw x;
19
+ }
20
+ },
21
+ identity: () => {
22
+ const x = json.stringify(identity)(json.setProperty("Hello")(['a'])({}));
23
+ if (x !== '{"a":"Hello"}') {
24
+ throw x;
25
+ }
26
+ },
27
+ },
28
+ {
29
+ sort: () => {
30
+ const x = json.stringify(sort)(json.setProperty("Hello")(['a'])({ c: [], b: 12 }));
31
+ if (x !== '{"a":"Hello","b":12,"c":[]}') {
32
+ throw x;
33
+ }
34
+ },
35
+ identity: () => {
36
+ const x = json.stringify(identity)(json.setProperty("Hello")(['a'])({ c: [], b: 12 }));
37
+ if (x !== '{"c":[],"b":12,"a":"Hello"}') {
38
+ throw x;
39
+ }
40
+ },
41
+ },
42
+ {
43
+ sort: () => {
44
+ const _0 = { a: { y: [24] }, c: [], b: 12 };
45
+ const _1 = json.setProperty("Hello")(['a', 'x'])(_0);
46
+ const _2 = json.stringify(sort)(_1);
47
+ if (_2 !== '{"a":{"x":"Hello","y":[24]},"b":12,"c":[]}') {
48
+ throw _2;
49
+ }
50
+ },
51
+ identity: () => {
52
+ const _0 = { a: { y: [24] }, c: [], b: 12 };
53
+ const _1 = json.setProperty("Hello")(['a', 'x'])(_0);
54
+ const _2 = json.stringify(identity)(_1);
55
+ if (_2 !== '{"a":{"y":[24],"x":"Hello"},"c":[],"b":12}') {
56
+ throw _2;
57
+ }
58
+ }
59
+ }
60
+ ]
61
+ };
@@ -0,0 +1,78 @@
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
+ * } JsonToken
16
+ */
17
+ /**
18
+ * @typedef {|
19
+ * {readonly kind: 'def' | '-' }
20
+ * } ScanState
21
+ */
22
+ /**
23
+ * @typedef {|
24
+ * jsTokenizer.JsToken | null
25
+ * } ScanInput
26
+ */
27
+ /** @type {(input: jsTokenizer.JsToken) => list.List<JsonToken>} */
28
+ const mapToken = input => {
29
+ switch (input.kind) {
30
+ case '{':
31
+ case '}':
32
+ case ':':
33
+ case ',':
34
+ case '[':
35
+ case ']':
36
+ case 'true':
37
+ case 'false':
38
+ case 'null':
39
+ case 'string':
40
+ case 'number':
41
+ case 'error': return [input];
42
+ case 'ws':
43
+ case 'nl': return empty;
44
+ default: return [{ kind: 'error', message: 'invalid token' }];
45
+ }
46
+ };
47
+ /** @type {(input: ScanInput) => readonly [list.List<JsonToken>, ScanState]} */
48
+ const parseDefaultState = input => {
49
+ if (input === null)
50
+ return [empty, { kind: 'def' }];
51
+ switch (input.kind) {
52
+ case '-': return [empty, { kind: '-' }];
53
+ default: return [mapToken(input), { kind: 'def' }];
54
+ }
55
+ };
56
+ /** @type {(input: ScanInput) => readonly [list.List<JsonToken>, ScanState]} */
57
+ const parseMinusState = input => {
58
+ if (input === null)
59
+ return [[{ kind: 'error', message: 'invalid token' }], { kind: 'def' }];
60
+ switch (input.kind) {
61
+ case '-': return [[{ kind: 'error', message: 'invalid token' }], { kind: '-' }];
62
+ case 'number': return [[{ kind: 'number', bf: multiply(input.bf)(-1n), value: `-${input.value}` }], { kind: 'def' }];
63
+ default: return [{ first: { kind: 'error', message: 'invalid token' }, tail: mapToken(input) }, { kind: 'def' }];
64
+ }
65
+ };
66
+ /** @type {Operator.StateScan<ScanInput, ScanState, list.List<JsonToken>>} */
67
+ const scanToken = state => input => {
68
+ switch (state.kind) {
69
+ case '-': return parseMinusState(input);
70
+ default: return parseDefaultState(input);
71
+ }
72
+ };
73
+ /** @type {(input: list.List<number>) => list.List<JsonToken>} */
74
+ export const tokenize = input => {
75
+ /** @type {list.List<ScanInput>} */
76
+ const jsTokens = jsTokenizer.tokenize(input);
77
+ return flat(stateScan(scanToken)({ kind: 'def' })(list.concat(jsTokens)([null])));
78
+ };