functionalscript 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/{types → fs}/asn.1/module.f.d.ts +1 -1
  2. package/{types → fs}/asn.1/module.f.js +3 -3
  3. package/{types → fs}/asn.1/test.f.js +2 -2
  4. package/{types → fs}/base128/module.f.d.ts +1 -1
  5. package/{types → fs}/base128/module.f.js +1 -1
  6. package/{types → fs}/base128/test.f.js +2 -2
  7. package/{bnf → fs/bnf}/data/module.f.d.ts +1 -1
  8. package/{cas → fs/cas}/module.f.d.ts +4 -4
  9. package/{cas → fs/cas}/module.f.js +1 -1
  10. package/{types → fs}/cbase32/module.f.d.ts +2 -2
  11. package/{types → fs}/cbase32/module.f.js +1 -1
  12. package/{types → fs}/cbase32/test.f.js +1 -1
  13. package/fs/ci/bun/module.f.d.ts +2 -0
  14. package/fs/ci/bun/module.f.js +20 -0
  15. package/fs/ci/common/module.f.d.ts +43 -0
  16. package/fs/ci/common/module.f.js +32 -0
  17. package/fs/ci/config/module.f.d.ts +25 -0
  18. package/fs/ci/config/module.f.js +34 -0
  19. package/fs/ci/deno/module.f.d.ts +2 -0
  20. package/fs/ci/deno/module.f.js +13 -0
  21. package/fs/ci/module.f.js +40 -0
  22. package/fs/ci/node/module.f.d.ts +6 -0
  23. package/fs/ci/node/module.f.js +36 -0
  24. package/fs/ci/playwright/module.f.d.ts +2 -0
  25. package/fs/ci/playwright/module.f.js +23 -0
  26. package/fs/ci/rust/module.f.d.ts +2 -0
  27. package/fs/ci/rust/module.f.js +49 -0
  28. package/{crypto → fs/crypto}/secp/module.f.d.ts +1 -2
  29. package/{dev → fs/dev}/module.f.d.ts +2 -0
  30. package/{dev → fs/dev}/module.f.js +5 -0
  31. package/{dev → fs/dev}/tf/all.test.js +7 -5
  32. package/{dev → fs/dev}/tf/module.f.d.ts +1 -1
  33. package/{dev → fs/dev}/tf/module.f.js +12 -9
  34. package/fs/dev/tf/test.f.d.ts +16 -0
  35. package/fs/dev/tf/test.f.js +22 -0
  36. package/fs/dev/version/module.f.d.ts +3 -0
  37. package/{djs → fs/djs}/tokenizer/module.f.js +3 -3
  38. package/{djs/parser-new → fs/djs/tokenizer-new}/test.f.d.ts +2 -1
  39. package/fs/djs/tokenizer-new/test.f.js +894 -0
  40. package/{html → fs/html}/module.f.d.ts +14 -0
  41. package/{html → fs/html}/module.f.js +21 -2
  42. package/{js → fs/js}/tokenizer/module.f.js +34 -34
  43. package/{json → fs/json}/tokenizer/module.f.js +1 -1
  44. package/{path → fs/path}/module.f.d.ts +1 -1
  45. package/fs/sul/id/module.f.d.ts +33 -0
  46. package/fs/sul/id/module.f.js +94 -0
  47. package/fs/sul/id/test.f.d.ts +21 -0
  48. package/fs/sul/id/test.f.js +75 -0
  49. package/fs/sul/level/hash/module.f.d.ts +38 -0
  50. package/fs/sul/level/hash/module.f.js +43 -0
  51. package/fs/sul/level/hash/test.f.d.ts +14 -0
  52. package/fs/sul/level/hash/test.f.js +112 -0
  53. package/fs/sul/level/literal/module.f.d.ts +64 -0
  54. package/fs/sul/level/literal/module.f.js +88 -0
  55. package/fs/sul/level/literal/test.f.d.ts +12 -0
  56. package/fs/sul/level/literal/test.f.js +722 -0
  57. package/fs/sul/module.f.d.ts +23 -0
  58. package/fs/sul/module.f.js +46 -0
  59. package/fs/sul/test.f.d.ts +10 -0
  60. package/fs/sul/test.f.js +47 -0
  61. package/{text → fs/text}/module.f.d.ts +1 -1
  62. package/{text → fs/text}/utf16/module.f.js +8 -8
  63. package/{text → fs/text}/utf8/module.f.js +2 -2
  64. package/{types → fs/types}/bit_vec/module.f.d.ts +13 -1
  65. package/{types → fs/types}/bit_vec/module.f.js +33 -15
  66. package/{types → fs/types}/effects/module.f.d.ts +1 -0
  67. package/{types → fs/types}/effects/node/virtual/module.f.d.ts +3 -3
  68. package/{types → fs/types}/function/operator/module.f.d.ts +1 -1
  69. package/{types → fs/types}/function/operator/module.f.js +1 -1
  70. package/{types → fs/types}/list/module.f.js +1 -1
  71. package/fs/types/patricia_trie/module.f.d.ts +25 -0
  72. package/fs/types/patricia_trie/module.f.js +35 -0
  73. package/fs/types/patricia_trie/test.f.d.ts +8 -0
  74. package/fs/types/patricia_trie/test.f.js +121 -0
  75. package/fs/types/rtti/parse/module.f.d.ts +32 -0
  76. package/fs/types/rtti/parse/module.f.js +113 -0
  77. package/fs/types/rtti/parse/test.f.d.ts +104 -0
  78. package/fs/types/rtti/parse/test.f.js +316 -0
  79. package/fs/types/rtti/validate/module.f.d.ts +74 -0
  80. package/{types → fs/types}/rtti/validate/module.f.js +26 -24
  81. package/{types → fs/types}/rtti/validate/test.f.d.ts +11 -0
  82. package/{types → fs/types}/rtti/validate/test.f.js +38 -0
  83. package/{types → fs/types}/uint8array/module.f.d.ts +2 -2
  84. package/fs/website/module.f.d.ts +4 -0
  85. package/fs/website/module.f.js +15 -0
  86. package/package.json +8 -8
  87. package/ci/module.f.js +0 -183
  88. package/dev/tf/test.f.d.ts +0 -4
  89. package/dev/tf/test.f.js +0 -5
  90. package/dev/version/module.f.d.ts +0 -3
  91. package/djs/parser-new/test.f.js +0 -202
  92. package/types/rtti/validate/module.f.d.ts +0 -50
  93. package/website/module.f.d.ts +0 -4
  94. package/website/module.f.js +0 -19
  95. /package/{types → fs}/asn.1/test.f.d.ts +0 -0
  96. /package/{cas → fs/base128}/test.f.d.ts +0 -0
  97. /package/{bnf → fs/bnf}/data/module.f.js +0 -0
  98. /package/{bnf → fs/bnf}/data/test.f.d.ts +0 -0
  99. /package/{bnf → fs/bnf}/data/test.f.js +0 -0
  100. /package/{bnf → fs/bnf}/module.f.d.ts +0 -0
  101. /package/{bnf → fs/bnf}/module.f.js +0 -0
  102. /package/{bnf → fs/bnf}/test.f.d.ts +0 -0
  103. /package/{bnf → fs/bnf}/test.f.js +0 -0
  104. /package/{bnf → fs/bnf}/testlib.f.d.ts +0 -0
  105. /package/{bnf → fs/bnf}/testlib.f.js +0 -0
  106. /package/{types/base128 → fs/cas}/test.f.d.ts +0 -0
  107. /package/{cas → fs/cas}/test.f.js +0 -0
  108. /package/{types → fs}/cbase32/test.f.d.ts +0 -0
  109. /package/{ci → fs/ci}/module.f.d.ts +0 -0
  110. /package/{crypto → fs/crypto}/hmac/module.f.d.ts +0 -0
  111. /package/{crypto → fs/crypto}/hmac/module.f.js +0 -0
  112. /package/{crypto → fs/crypto}/hmac/test.f.d.ts +0 -0
  113. /package/{crypto → fs/crypto}/hmac/test.f.js +0 -0
  114. /package/{crypto → fs/crypto}/secp/module.f.js +0 -0
  115. /package/{crypto → fs/crypto}/secp/test.f.d.ts +0 -0
  116. /package/{crypto → fs/crypto}/secp/test.f.js +0 -0
  117. /package/{crypto → fs/crypto}/sha2/module.f.d.ts +0 -0
  118. /package/{crypto → fs/crypto}/sha2/module.f.js +0 -0
  119. /package/{crypto → fs/crypto}/sha2/test.f.d.ts +0 -0
  120. /package/{crypto → fs/crypto}/sha2/test.f.js +0 -0
  121. /package/{crypto → fs/crypto}/sign/module.f.d.ts +0 -0
  122. /package/{crypto → fs/crypto}/sign/module.f.js +0 -0
  123. /package/{crypto → fs/crypto}/sign/test.f.d.ts +0 -0
  124. /package/{crypto → fs/crypto}/sign/test.f.js +0 -0
  125. /package/{dev → fs/dev}/index/module.f.d.ts +0 -0
  126. /package/{dev → fs/dev}/index/module.f.js +0 -0
  127. /package/{dev → fs/dev}/test.f.d.ts +0 -0
  128. /package/{dev → fs/dev}/test.f.js +0 -0
  129. /package/{dev → fs/dev}/tf/all.test.d.ts +0 -0
  130. /package/{dev → fs/dev}/version/module.f.js +0 -0
  131. /package/{dev → fs/dev}/version/test.f.d.ts +0 -0
  132. /package/{dev → fs/dev}/version/test.f.js +0 -0
  133. /package/{djs → fs/djs}/ast/module.f.d.ts +0 -0
  134. /package/{djs → fs/djs}/ast/module.f.js +0 -0
  135. /package/{djs → fs/djs}/ast/test.f.d.ts +0 -0
  136. /package/{djs → fs/djs}/ast/test.f.js +0 -0
  137. /package/{djs → fs/djs}/examples/input.f.d.ts +0 -0
  138. /package/{djs → fs/djs}/examples/input.f.js +0 -0
  139. /package/{djs → fs/djs}/examples/m.f.d.ts +0 -0
  140. /package/{djs → fs/djs}/examples/m.f.js +0 -0
  141. /package/{djs → fs/djs}/module.f.d.ts +0 -0
  142. /package/{djs → fs/djs}/module.f.js +0 -0
  143. /package/{djs → fs/djs}/parser/module.f.d.ts +0 -0
  144. /package/{djs → fs/djs}/parser/module.f.js +0 -0
  145. /package/{djs → fs/djs}/parser/test.f.d.ts +0 -0
  146. /package/{djs → fs/djs}/parser/test.f.js +0 -0
  147. /package/{djs → fs/djs}/serializer/module.f.d.ts +0 -0
  148. /package/{djs → fs/djs}/serializer/module.f.js +0 -0
  149. /package/{djs → fs/djs}/serializer/test.f.d.ts +0 -0
  150. /package/{djs → fs/djs}/serializer/test.f.js +0 -0
  151. /package/{djs → fs/djs}/tokenizer/module.f.d.ts +0 -0
  152. /package/{djs → fs/djs}/tokenizer/test.f.d.ts +0 -0
  153. /package/{djs → fs/djs}/tokenizer/test.f.js +0 -0
  154. /package/{djs/parser-new → fs/djs/tokenizer-new}/module.f.d.ts +0 -0
  155. /package/{djs/parser-new → fs/djs/tokenizer-new}/module.f.js +0 -0
  156. /package/{djs → fs/djs}/transpiler/module.f.d.ts +0 -0
  157. /package/{djs → fs/djs}/transpiler/module.f.js +0 -0
  158. /package/{djs → fs/djs}/transpiler/test.f.d.ts +0 -0
  159. /package/{djs → fs/djs}/transpiler/test.f.js +0 -0
  160. /package/{fjs → fs/fjs}/module.d.ts +0 -0
  161. /package/{fjs → fs/fjs}/module.f.d.ts +0 -0
  162. /package/{fjs → fs/fjs}/module.f.js +0 -0
  163. /package/{fjs → fs/fjs}/module.js +0 -0
  164. /package/{fsc → fs/fsc}/bnf.f.d.ts +0 -0
  165. /package/{fsc → fs/fsc}/bnf.f.js +0 -0
  166. /package/{fsc → fs/fsc}/json.f.d.ts +0 -0
  167. /package/{fsc → fs/fsc}/json.f.js +0 -0
  168. /package/{fsc → fs/fsc}/module.f.d.ts +0 -0
  169. /package/{fsc → fs/fsc}/module.f.js +0 -0
  170. /package/{fsc → fs/fsc}/test.f.d.ts +0 -0
  171. /package/{fsc → fs/fsc}/test.f.js +0 -0
  172. /package/{fsm → fs/fsm}/module.f.d.ts +0 -0
  173. /package/{fsm → fs/fsm}/module.f.js +0 -0
  174. /package/{fsm → fs/fsm}/test.f.d.ts +0 -0
  175. /package/{fsm → fs/fsm}/test.f.js +0 -0
  176. /package/{html → fs/html}/test.f.d.ts +0 -0
  177. /package/{html → fs/html}/test.f.js +0 -0
  178. /package/{io → fs/io}/module.d.ts +0 -0
  179. /package/{io → fs/io}/module.f.d.ts +0 -0
  180. /package/{io → fs/io}/module.f.js +0 -0
  181. /package/{io → fs/io}/module.js +0 -0
  182. /package/{io → fs/io}/virtual/module.f.d.ts +0 -0
  183. /package/{io → fs/io}/virtual/module.f.js +0 -0
  184. /package/{js → fs/js}/tokenizer/module.f.d.ts +0 -0
  185. /package/{js → fs/js}/tokenizer/test.f.d.ts +0 -0
  186. /package/{js → fs/js}/tokenizer/test.f.js +0 -0
  187. /package/{json → fs/json}/module.f.d.ts +0 -0
  188. /package/{json → fs/json}/module.f.js +0 -0
  189. /package/{json → fs/json}/parser/module.f.d.ts +0 -0
  190. /package/{json → fs/json}/parser/module.f.js +0 -0
  191. /package/{json → fs/json}/parser/test.f.d.ts +0 -0
  192. /package/{json → fs/json}/parser/test.f.js +0 -0
  193. /package/{json → fs/json}/serializer/module.f.d.ts +0 -0
  194. /package/{json → fs/json}/serializer/module.f.js +0 -0
  195. /package/{json → fs/json}/serializer/test.f.d.ts +0 -0
  196. /package/{json → fs/json}/serializer/test.f.js +0 -0
  197. /package/{json → fs/json}/test.f.d.ts +0 -0
  198. /package/{json → fs/json}/test.f.js +0 -0
  199. /package/{json → fs/json}/tokenizer/module.f.d.ts +0 -0
  200. /package/{json → fs/json}/tokenizer/test.f.d.ts +0 -0
  201. /package/{json → fs/json}/tokenizer/test.f.js +0 -0
  202. /package/{path → fs/path}/module.f.js +0 -0
  203. /package/{path → fs/path}/test.f.d.ts +0 -0
  204. /package/{path → fs/path}/test.f.js +0 -0
  205. /package/{text → fs/text}/ascii/module.f.d.ts +0 -0
  206. /package/{text → fs/text}/ascii/module.f.js +0 -0
  207. /package/{text → fs/text}/ascii/test.f.d.ts +0 -0
  208. /package/{text → fs/text}/ascii/test.f.js +0 -0
  209. /package/{text → fs/text}/module.f.js +0 -0
  210. /package/{text → fs/text}/sgr/module.f.d.ts +0 -0
  211. /package/{text → fs/text}/sgr/module.f.js +0 -0
  212. /package/{text → fs/text}/sgr/test.f.d.ts +0 -0
  213. /package/{text → fs/text}/sgr/test.f.js +0 -0
  214. /package/{text → fs/text}/test.f.d.ts +0 -0
  215. /package/{text → fs/text}/test.f.js +0 -0
  216. /package/{text → fs/text}/utf16/module.f.d.ts +0 -0
  217. /package/{text → fs/text}/utf16/test.f.d.ts +0 -0
  218. /package/{text → fs/text}/utf16/test.f.js +0 -0
  219. /package/{text → fs/text}/utf8/module.f.d.ts +0 -0
  220. /package/{text → fs/text}/utf8/test.f.d.ts +0 -0
  221. /package/{text → fs/text}/utf8/test.f.js +0 -0
  222. /package/{types → fs/types}/array/module.f.d.ts +0 -0
  223. /package/{types → fs/types}/array/module.f.js +0 -0
  224. /package/{types → fs/types}/array/test.f.d.ts +0 -0
  225. /package/{types → fs/types}/array/test.f.js +0 -0
  226. /package/{types → fs/types}/bigfloat/module.f.d.ts +0 -0
  227. /package/{types → fs/types}/bigfloat/module.f.js +0 -0
  228. /package/{types → fs/types}/bigfloat/test.f.d.ts +0 -0
  229. /package/{types → fs/types}/bigfloat/test.f.js +0 -0
  230. /package/{types → fs/types}/bigint/module.f.d.ts +0 -0
  231. /package/{types → fs/types}/bigint/module.f.js +0 -0
  232. /package/{types → fs/types}/bigint/test.f.d.ts +0 -0
  233. /package/{types → fs/types}/bigint/test.f.js +0 -0
  234. /package/{types → fs/types}/bit_vec/test.f.d.ts +0 -0
  235. /package/{types → fs/types}/bit_vec/test.f.js +0 -0
  236. /package/{types → fs/types}/btree/find/module.f.d.ts +0 -0
  237. /package/{types → fs/types}/btree/find/module.f.js +0 -0
  238. /package/{types → fs/types}/btree/find/test.f.d.ts +0 -0
  239. /package/{types → fs/types}/btree/find/test.f.js +0 -0
  240. /package/{types → fs/types}/btree/module.f.d.ts +0 -0
  241. /package/{types → fs/types}/btree/module.f.js +0 -0
  242. /package/{types → fs/types}/btree/remove/module.f.d.ts +0 -0
  243. /package/{types → fs/types}/btree/remove/module.f.js +0 -0
  244. /package/{types → fs/types}/btree/remove/test.f.d.ts +0 -0
  245. /package/{types → fs/types}/btree/remove/test.f.js +0 -0
  246. /package/{types → fs/types}/btree/set/module.f.d.ts +0 -0
  247. /package/{types → fs/types}/btree/set/module.f.js +0 -0
  248. /package/{types → fs/types}/btree/set/test.f.d.ts +0 -0
  249. /package/{types → fs/types}/btree/set/test.f.js +0 -0
  250. /package/{types → fs/types}/btree/test.f.d.ts +0 -0
  251. /package/{types → fs/types}/btree/test.f.js +0 -0
  252. /package/{types → fs/types}/btree/types/module.f.d.ts +0 -0
  253. /package/{types → fs/types}/btree/types/module.f.js +0 -0
  254. /package/{types → fs/types}/byte_set/module.f.d.ts +0 -0
  255. /package/{types → fs/types}/byte_set/module.f.js +0 -0
  256. /package/{types → fs/types}/byte_set/test.f.d.ts +0 -0
  257. /package/{types → fs/types}/byte_set/test.f.js +0 -0
  258. /package/{types → fs/types}/effects/mock/module.f.d.ts +0 -0
  259. /package/{types → fs/types}/effects/mock/module.f.js +0 -0
  260. /package/{types → fs/types}/effects/module.d.ts +0 -0
  261. /package/{types → fs/types}/effects/module.f.js +0 -0
  262. /package/{types → fs/types}/effects/module.js +0 -0
  263. /package/{types → fs/types}/effects/node/module.f.d.ts +0 -0
  264. /package/{types → fs/types}/effects/node/module.f.js +0 -0
  265. /package/{types → fs/types}/effects/node/test.f.d.ts +0 -0
  266. /package/{types → fs/types}/effects/node/test.f.js +0 -0
  267. /package/{types → fs/types}/effects/node/virtual/module.f.js +0 -0
  268. /package/{types → fs/types}/function/compare/module.f.d.ts +0 -0
  269. /package/{types → fs/types}/function/compare/module.f.js +0 -0
  270. /package/{types → fs/types}/function/compare/test.f.d.ts +0 -0
  271. /package/{types → fs/types}/function/compare/test.f.js +0 -0
  272. /package/{types → fs/types}/function/module.f.d.ts +0 -0
  273. /package/{types → fs/types}/function/module.f.js +0 -0
  274. /package/{types → fs/types}/function/test.f.d.ts +0 -0
  275. /package/{types → fs/types}/function/test.f.js +0 -0
  276. /package/{types → fs/types}/list/module.f.d.ts +0 -0
  277. /package/{types → fs/types}/list/test.f.d.ts +0 -0
  278. /package/{types → fs/types}/list/test.f.js +0 -0
  279. /package/{types → fs/types}/map/module.f.d.ts +0 -0
  280. /package/{types → fs/types}/map/module.f.js +0 -0
  281. /package/{types → fs/types}/map/test.f.d.ts +0 -0
  282. /package/{types → fs/types}/map/test.f.js +0 -0
  283. /package/{types → fs/types}/monoid/module.f.d.ts +0 -0
  284. /package/{types → fs/types}/monoid/module.f.js +0 -0
  285. /package/{types → fs/types}/monoid/test.f.d.ts +0 -0
  286. /package/{types → fs/types}/monoid/test.f.js +0 -0
  287. /package/{types → fs/types}/nibble_set/module.f.d.ts +0 -0
  288. /package/{types → fs/types}/nibble_set/module.f.js +0 -0
  289. /package/{types → fs/types}/nibble_set/test.f.d.ts +0 -0
  290. /package/{types → fs/types}/nibble_set/test.f.js +0 -0
  291. /package/{types → fs/types}/nominal/module.f.d.ts +0 -0
  292. /package/{types → fs/types}/nominal/module.f.js +0 -0
  293. /package/{types → fs/types}/nominal/test.f.d.ts +0 -0
  294. /package/{types → fs/types}/nominal/test.f.js +0 -0
  295. /package/{types → fs/types}/nullable/module.f.d.ts +0 -0
  296. /package/{types → fs/types}/nullable/module.f.js +0 -0
  297. /package/{types → fs/types}/nullable/test.f.d.ts +0 -0
  298. /package/{types → fs/types}/nullable/test.f.js +0 -0
  299. /package/{types → fs/types}/number/module.f.d.ts +0 -0
  300. /package/{types → fs/types}/number/module.f.js +0 -0
  301. /package/{types → fs/types}/number/test.f.d.ts +0 -0
  302. /package/{types → fs/types}/number/test.f.js +0 -0
  303. /package/{types → fs/types}/object/module.f.d.ts +0 -0
  304. /package/{types → fs/types}/object/module.f.js +0 -0
  305. /package/{types → fs/types}/object/test.f.d.ts +0 -0
  306. /package/{types → fs/types}/object/test.f.js +0 -0
  307. /package/{types → fs/types}/option/module.f.d.ts +0 -0
  308. /package/{types → fs/types}/option/module.f.js +0 -0
  309. /package/{types → fs/types}/ordered_map/module.f.d.ts +0 -0
  310. /package/{types → fs/types}/ordered_map/module.f.js +0 -0
  311. /package/{types → fs/types}/ordered_map/test.f.d.ts +0 -0
  312. /package/{types → fs/types}/ordered_map/test.f.js +0 -0
  313. /package/{types → fs/types}/prime_field/module.f.d.ts +0 -0
  314. /package/{types → fs/types}/prime_field/module.f.js +0 -0
  315. /package/{types → fs/types}/prime_field/test.f.d.ts +0 -0
  316. /package/{types → fs/types}/prime_field/test.f.js +0 -0
  317. /package/{types → fs/types}/range/module.f.d.ts +0 -0
  318. /package/{types → fs/types}/range/module.f.js +0 -0
  319. /package/{types → fs/types}/range/test.f.d.ts +0 -0
  320. /package/{types → fs/types}/range/test.f.js +0 -0
  321. /package/{types → fs/types}/range_map/module.f.d.ts +0 -0
  322. /package/{types → fs/types}/range_map/module.f.js +0 -0
  323. /package/{types → fs/types}/range_map/test.f.d.ts +0 -0
  324. /package/{types → fs/types}/range_map/test.f.js +0 -0
  325. /package/{types → fs/types}/result/module.d.ts +0 -0
  326. /package/{types → fs/types}/result/module.f.d.ts +0 -0
  327. /package/{types → fs/types}/result/module.f.js +0 -0
  328. /package/{types → fs/types}/result/module.js +0 -0
  329. /package/{types → fs/types}/result/test.f.d.ts +0 -0
  330. /package/{types → fs/types}/result/test.f.js +0 -0
  331. /package/{types → fs/types}/rtti/module.f.d.ts +0 -0
  332. /package/{types → fs/types}/rtti/module.f.js +0 -0
  333. /package/{types → fs/types}/rtti/test.f.d.ts +0 -0
  334. /package/{types → fs/types}/rtti/test.f.js +0 -0
  335. /package/{types → fs/types}/rtti/ts/module.f.d.ts +0 -0
  336. /package/{types → fs/types}/rtti/ts/module.f.js +0 -0
  337. /package/{types → fs/types}/rtti/ts/test.f.d.ts +0 -0
  338. /package/{types → fs/types}/rtti/ts/test.f.js +0 -0
  339. /package/{types → fs/types}/sorted_list/module.f.d.ts +0 -0
  340. /package/{types → fs/types}/sorted_list/module.f.js +0 -0
  341. /package/{types → fs/types}/sorted_list/test.f.d.ts +0 -0
  342. /package/{types → fs/types}/sorted_list/test.f.js +0 -0
  343. /package/{types → fs/types}/sorted_set/module.f.d.ts +0 -0
  344. /package/{types → fs/types}/sorted_set/module.f.js +0 -0
  345. /package/{types → fs/types}/sorted_set/test.f.d.ts +0 -0
  346. /package/{types → fs/types}/sorted_set/test.f.js +0 -0
  347. /package/{types → fs/types}/string/module.f.d.ts +0 -0
  348. /package/{types → fs/types}/string/module.f.js +0 -0
  349. /package/{types → fs/types}/string/test.f.d.ts +0 -0
  350. /package/{types → fs/types}/string/test.f.js +0 -0
  351. /package/{types → fs/types}/string_set/module.f.d.ts +0 -0
  352. /package/{types → fs/types}/string_set/module.f.js +0 -0
  353. /package/{types → fs/types}/string_set/test.f.d.ts +0 -0
  354. /package/{types → fs/types}/string_set/test.f.js +0 -0
  355. /package/{types → fs/types}/ts/module.f.d.ts +0 -0
  356. /package/{types → fs/types}/ts/module.f.js +0 -0
  357. /package/{types → fs/types}/uint8array/module.f.js +0 -0
  358. /package/{types → fs/types}/uint8array/test.f.d.ts +0 -0
  359. /package/{types → fs/types}/uint8array/test.f.js +0 -0
@@ -1,41 +1,42 @@
1
- import { isTag1 } from "../module.f.js";
1
+ import {} from "../module.f.js";
2
2
  import { error, ok } from "../../result/module.f.js";
3
3
  import { isArray as commonIsArray } from "../../array/module.f.js";
4
4
  import { isObject as commonIsObject } from "../../object/module.f.js";
5
- import { identity } from "../../function/module.f.js";
5
+ /** Builds an error result with empty path and the given message. */
6
+ export const verror = (message) => error({ path: [], message });
7
+ /** Prepends `key` to the error's path, used to build the path bottom-up. */
8
+ export const prependPath = (key, r) => error({ path: [key, ...r[1].path], message: r[1].message });
6
9
  /**
7
10
  * Builds a validator for `array` or `record` schemas.
8
11
  * The inner item validator is instantiated lazily (only when the container is
9
12
  * non-empty) to avoid infinite recursion with recursive schemas.
10
13
  */
11
- const containerValidate = (isContainer, getItems) => (item) => value => {
14
+ const containerValidate = (isContainer, getEntries) => (item) => value => {
12
15
  if (!isContainer(value)) {
13
- return error('unexpected value');
16
+ return verror('unexpected value');
14
17
  }
15
- const items = getItems(value);
16
- if (items.length === 0) {
18
+ const entries = getEntries(value);
19
+ if (entries.length === 0) {
17
20
  return ok(value);
18
21
  }
19
- // Note: we shouldn't instantiate `itemValidate` until we make sure `items` is not empty.
22
+ // Note: we shouldn't instantiate `itemValidate` until we make sure `entries` is not empty.
20
23
  // Otherwise, we can get infinite recursion on empty arrays and objects
21
24
  const itemValidate = validate(item);
22
- for (const i of items) {
23
- const r = itemValidate(i);
25
+ for (const [k, v] of entries) {
26
+ const r = itemValidate(v);
24
27
  if (r[0] === 'error') {
25
- return r;
28
+ return prependPath(k, r);
26
29
  }
27
30
  }
28
31
  return ok(value);
29
32
  };
30
33
  const isArray = value => commonIsArray(value);
31
- const arrayValidate = containerValidate(isArray, identity);
34
+ const arrayEntries = (value) => value.map((v, i) => [String(i), v]);
35
+ const arrayValidate = containerValidate(isArray, arrayEntries);
32
36
  const isObject = value => commonIsObject(value);
33
- const recordValidate = containerValidate(isObject, Object.values);
34
- const tag1Validate = ([tag, item]) => tag === 'array'
35
- ? arrayValidate(item)
36
- : recordValidate(item);
37
+ const recordValidate = containerValidate(isObject, Object.entries);
37
38
  /** Validates a `Tag0` primitive schema using `typeof`. */
38
- const primitive0Validate = (tag) => value => typeof value === tag ? ok(value) : error('unexpected value');
39
+ export const primitive0Validate = (tag) => value => typeof value === tag ? ok(value) : verror('unexpected value');
39
40
  /**
40
41
  * Builds a validator for `Tuple` or `Struct` const schemas.
41
42
  * Iterates over the schema's entries and validates each corresponding
@@ -43,13 +44,13 @@ const primitive0Validate = (tag) => value => typeof value === tag ? ok(value) :
43
44
  */
44
45
  const constContainerValidate = (isContainer, getItem) => (rtti) => value => {
45
46
  if (!isContainer(value)) {
46
- return error('unexpected value');
47
+ return verror('unexpected value');
47
48
  }
48
49
  for (const [k, v] of Object.entries(rtti)) {
49
50
  const item = getItem(value, k);
50
51
  const r = validate(v)(item);
51
52
  if (r[0] === 'error') {
52
- return r;
53
+ return prependPath(k, r);
53
54
  }
54
55
  }
55
56
  return ok(value);
@@ -60,9 +61,9 @@ const constObjectValidate = (rtti) => commonIsArray(rtti)
60
61
  ? tupleValidate(rtti)
61
62
  : structValidate(rtti);
62
63
  /** Validates a primitive `Const` schema using strict equality (`===`). */
63
- const constPrimitiveValidate = (rtti) => value => rtti === value
64
+ export const constPrimitiveValidate = (rtti) => value => rtti === value
64
65
  ? ok(value)
65
- : error('unexpected value');
66
+ : verror('unexpected value');
66
67
  const constValidate = (rtti) => typeof rtti === 'object' && rtti !== null
67
68
  ? constObjectValidate(rtti)
68
69
  : constPrimitiveValidate(rtti);
@@ -75,7 +76,7 @@ const orValidate = (rtti) => {
75
76
  return r;
76
77
  }
77
78
  }
78
- return error('no match');
79
+ return verror('no match');
79
80
  };
80
81
  };
81
82
  /**
@@ -84,13 +85,14 @@ const orValidate = (rtti) => {
84
85
  * @param rtti - A schema `Type`: a `Thunk` for tag-based schemas, or a `Const`
85
86
  * (primitive literal, tuple, or struct) for exact-value schemas.
86
87
  * @returns A `Validate<T>` function that checks an unknown value and returns
87
- * `['ok', value]` or `['error', message]`.
88
+ * `['ok', value]` or `['error', { path, message }]`.
88
89
  *
89
90
  * @example
90
91
  * ```ts
91
92
  * const v = validate(array(number))
92
- * v([1, 2, 3]) // ['ok', [1, 2, 3]]
93
- * v(['a', 'b']) // ['error', 'unexpected value']
93
+ * v([1, 2, 3]) // ['ok', [1, 2, 3]]
94
+ * v([1, 'two']) // ['error', { path: ['1'], message: 'unexpected value' }]
95
+ * v(['a']) // ['error', { path: ['0'], message: 'unexpected value' }]
94
96
  * ```
95
97
  */
96
98
  export const validate = (rtti) => {
@@ -86,6 +86,17 @@ declare const _default: {
86
86
  ok: () => void;
87
87
  error: () => void;
88
88
  };
89
+ path: {
90
+ rootMismatch: () => void;
91
+ arrayIndex: () => void;
92
+ recordKey: () => void;
93
+ nestedArray: () => void;
94
+ tupleIndex: () => void;
95
+ structKey: () => void;
96
+ deepStruct: () => void;
97
+ recursiveSchema: () => void;
98
+ orRoot: () => void;
99
+ };
89
100
  recursive: {
90
101
  arrayOfArrays: () => void;
91
102
  recordOfRecords: () => void;
@@ -6,6 +6,20 @@ const assertOk = ([k]) => { if (k !== 'ok') {
6
6
  const assertError = ([k]) => { if (k !== 'error') {
7
7
  throw 'expected error';
8
8
  } };
9
+ const assertErrorPath = (expected) => (r) => {
10
+ if (r[0] !== 'error') {
11
+ throw 'expected error';
12
+ }
13
+ const e = r[1];
14
+ if (e.path.length !== expected.length) {
15
+ throw `path length ${e.path.length} != ${expected.length}`;
16
+ }
17
+ for (let i = 0; i < expected.length; i++) {
18
+ if (e.path[i] !== expected[i]) {
19
+ throw `path[${i}] ${e.path[i]} != ${expected[i]}`;
20
+ }
21
+ }
22
+ };
9
23
  export default {
10
24
  boolean: {
11
25
  ok: () => {
@@ -207,6 +221,30 @@ export default {
207
221
  assertError(validate(t)('42'));
208
222
  },
209
223
  },
224
+ path: {
225
+ rootMismatch: () => assertErrorPath([])(validate(number)('not a number')),
226
+ arrayIndex: () => assertErrorPath(['1'])(validate(array(number))([1, 'two', 3])),
227
+ recordKey: () => {
228
+ const r = validate(record(number))({ a: 1, b: 'two', c: 3 });
229
+ // record iteration order matches Object.entries; 'b' is the failing key
230
+ assertErrorPath(['b'])(r);
231
+ },
232
+ nestedArray: () => assertErrorPath(['0', '1'])(validate(array(array(number)))([[1, 'x'], [2, 3]])),
233
+ tupleIndex: () => assertErrorPath(['1'])(validate([number, number])([1, 'two'])),
234
+ structKey: () => assertErrorPath(['b'])(validate({ a: number, b: number })({ a: 1, b: 'two' })),
235
+ deepStruct: () => {
236
+ const schema = { user: { name: string, age: number } };
237
+ const r = validate(schema)({ user: { name: 'A', age: 'old' } });
238
+ assertErrorPath(['user', 'age'])(r);
239
+ },
240
+ recursiveSchema: () => {
241
+ const list = () => ['array', list];
242
+ // [[[42]]] — innermost element 42 is a number, not an array
243
+ const r = validate(list)([[[42]]]);
244
+ assertErrorPath(['0', '0', '0'])(r);
245
+ },
246
+ orRoot: () => assertErrorPath([])(validate(or(number, string))(true)),
247
+ },
210
248
  recursive: {
211
249
  arrayOfArrays: () => {
212
250
  // self-referential schema: an array whose elements are also arrays of the same type
@@ -1,5 +1,5 @@
1
- import { type Vec } from "../bit_vec/module.f.ts";
2
- import { type List } from "../list/module.f.ts";
1
+ import { type Vec } from '../bit_vec/module.f.ts';
2
+ import { type List } from '../list/module.f.ts';
3
3
  /**
4
4
  * Converts a Uint8Array into an MSB-first bit vector.
5
5
  */
@@ -0,0 +1,4 @@
1
+ import { type WriteFile } from '../types/effects/node/module.f.ts';
2
+ import { type Effect } from '../types/effects/module.f.ts';
3
+ declare const _default: () => Effect<WriteFile, number>;
4
+ export default _default;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Static website generation program for project landing content.
3
+ *
4
+ * @module
5
+ */
6
+ import { htmlUtf8 } from "../html/module.f.js";
7
+ import { writeFile } from "../types/effects/node/module.f.js";
8
+ import { pure } from "../types/effects/module.f.js";
9
+ const html = htmlUtf8()(['a',
10
+ { href: 'https://github.com/functionalscript/functionalscript' },
11
+ 'GitHub Repository'
12
+ ]);
13
+ const program = writeFile('index.html', html)
14
+ .step(() => pure(0));
15
+ export default () => program;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "functionalscript",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "**/*.js",
@@ -11,18 +11,18 @@
11
11
  "prepack": "tsc --NoEmit false",
12
12
  "test20": "npm run prepack && node --test",
13
13
  "test": "tsc && node --test --experimental-strip-types --experimental-test-coverage --test-coverage-include=**/module.f.ts",
14
- "index": "node ./fjs/module.ts r ./dev/index/module.f.ts",
15
- "fst": "node ./fjs/module.ts t",
16
- "start": "node ./fjs/module.ts",
17
- "ci-update": "node ./fjs/module.ts r ./ci/module.f.ts",
18
- "update": "git clean -fdx && npm install && npm run index && npm run ci-update",
19
- "website": "node --experimental-strip-types ./fjs/module.ts r ./website/module.f.ts"
14
+ "index": "node ./fs/fjs/module.ts r ./fs/dev/index/module.f.ts",
15
+ "fst": "node ./fs/fjs/module.ts t",
16
+ "start": "node ./fs/fjs/module.ts",
17
+ "ci-update": "node ./fs/fjs/module.ts r ./fs/ci/module.f.ts",
18
+ "update": "npm install && npm run index && npm run ci-update",
19
+ "website": "node --experimental-strip-types ./fs/fjs/module.ts r ./fs/website/module.f.ts"
20
20
  },
21
21
  "engines": {
22
22
  "node": ">=20"
23
23
  },
24
24
  "bin": {
25
- "fjs": "fjs/module.js"
25
+ "fjs": "fs/fjs/module.js"
26
26
  },
27
27
  "repository": {
28
28
  "type": "git",
package/ci/module.f.js DELETED
@@ -1,183 +0,0 @@
1
- /**
2
- * Continuous integration helper commands for repository automation tasks.
3
- *
4
- * @module
5
- */
6
- import { utf8 } from "../text/module.f.js";
7
- import { begin, pure } from "../types/effects/module.f.js";
8
- import { writeFile } from "../types/effects/node/module.f.js";
9
- const os = ['ubuntu', 'macos', 'windows'];
10
- const architecture = ['intel', 'arm'];
11
- // https://docs.github.com/en/actions/reference/runners/github-hosted-runners#standard-github-hosted-runners-for-public-repositories
12
- const images = {
13
- ubuntu: {
14
- intel: 'ubuntu-24.04',
15
- arm: 'ubuntu-24.04-arm'
16
- },
17
- macos: {
18
- intel: 'macos-26-intel',
19
- arm: 'macos-26'
20
- },
21
- windows: {
22
- intel: 'windows-2025',
23
- arm: 'windows-11-arm',
24
- }
25
- };
26
- const install = (step) => ({ type: 'install', step });
27
- const test = (step) => ({ type: 'test', step });
28
- const installOnWindowsArm = ({ def, name, path }) => (v) => (a) => install(v === 'windows' && a === 'arm'
29
- ? { run: `irm ${path}/install.ps1 | iex; "$env:USERPROFILE\\.${name}\\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append` }
30
- : def);
31
- const installBun = installOnWindowsArm({
32
- def: { uses: 'oven-sh/setup-bun@v1' },
33
- name: 'bun',
34
- path: 'bun.sh'
35
- });
36
- const installDeno = install({ uses: 'denoland/setup-deno@v2', with: { 'deno-version': '2' } });
37
- const cargoTest = (target, config) => {
38
- const to = target ? ` --target ${target}` : '';
39
- const co = config ? ` --config ${config}` : '';
40
- const main = `cargo test${to}${co}`;
41
- return [
42
- test({ run: main }),
43
- test({ run: `${main} --release` })
44
- ];
45
- };
46
- const customTarget = (target) => [
47
- { type: 'rust', target },
48
- ...cargoTest(target)
49
- ];
50
- const wasmTarget = (target) => [
51
- ...customTarget(target),
52
- ...cargoTest(target, '.cargo/config.wasmer.toml')
53
- ];
54
- const clean = (steps) => [
55
- ...steps,
56
- test({ run: 'git reset --hard HEAD && git clean -fdx' })
57
- ];
58
- const installNode = (version) => ({ uses: 'actions/setup-node@v6', with: { 'node-version': version } });
59
- const basicNode = (version) => (extra) => clean([
60
- install(installNode(version)),
61
- test({ run: 'npm ci' }),
62
- ...extra,
63
- ]);
64
- const node = (version) => (extra) => basicNode(version)([
65
- test({ run: 'npm test' }),
66
- test({ run: 'npm run fst' }),
67
- ...extra,
68
- ]);
69
- const findTgz = (v) => v === 'windows' ? '(Get-ChildItem *.tgz).FullName' : './*.tgz';
70
- const playwrightVersion = '1.58.2';
71
- const playwrightAndVersion = `playwright@${playwrightVersion}`;
72
- const rustToolchain = '1.95.0';
73
- const toSteps = (m) => {
74
- const filter = (st) => m.flatMap((mt) => mt.type === st ? [mt.step] : []);
75
- const aptGet = m.flatMap(v => v.type === 'apt-get' ? [v.package] : []).join(' ');
76
- const rust = m.find(v => v.type === 'rust') !== undefined;
77
- const targets = m.flatMap(v => v.type === 'rust' && v.target !== undefined ? [v.target] : []).join(',');
78
- return [
79
- ...(aptGet !== '' ? [{ run: `sudo apt-get update && sudo apt-get install -y ${aptGet}` }] : []),
80
- ...(rust ? [{
81
- uses: `dtolnay/rust-toolchain@${rustToolchain}`,
82
- with: {
83
- components: 'rustfmt,clippy',
84
- targets
85
- }
86
- }] : []),
87
- ...filter('install'),
88
- { uses: 'actions/checkout@v5' },
89
- ...filter('test'),
90
- ];
91
- };
92
- const nodes = ['20', '22', '25'];
93
- const nodeTest = (v) => v === '20' ? 'run test20' : 'test';
94
- const nodeSteps = (v) => [
95
- install(installNode(v)),
96
- test({ run: 'npm ci' }),
97
- test({ run: `npm ${nodeTest(v)}` }),
98
- ];
99
- const ubuntu = (ms) => ({
100
- 'runs-on': 'ubuntu-24.04',
101
- steps: toSteps(ms)
102
- });
103
- const nodeVersions = Object.fromEntries(nodes.map(v => [`node${v}`, ubuntu(nodeSteps(v))]));
104
- const defaultNodeVersion = '24';
105
- const playwright = ubuntu(basicNode(defaultNodeVersion)([
106
- //install({ uses: 'actions/cache@v4', with: { path: '~/.cache/ms-playwright', key: `${images.ubuntu.intel}-${playwrightAndVersion}` } }),
107
- install({ run: `npm install -g ${playwrightAndVersion}` }),
108
- install({ run: 'playwright install --with-deps' }),
109
- // we have to use `npx` to make sure that we respect `@playwright/test` version from
110
- // the `package.json`.
111
- ...['chromium', 'firefox', 'webkit'].map(browser => test({ run: `npx playwright test --browser=${browser}` })),
112
- ]));
113
- const i686 = (a, v) => {
114
- if (a === 'intel') {
115
- switch (v) {
116
- case 'windows': return customTarget('i686-pc-windows-msvc');
117
- case 'ubuntu': return [
118
- { type: 'apt-get', package: 'libc6-dev-i386' },
119
- ...customTarget('i686-unknown-linux-gnu'),
120
- ];
121
- }
122
- }
123
- return [];
124
- };
125
- const job = (v) => (a) => {
126
- const id = `${v}-${a}`;
127
- const image = images[v][a];
128
- const result = [
129
- // Rust
130
- test({ run: 'cargo fmt -- --check' }),
131
- test({ run: 'cargo clippy -- -D warnings' }),
132
- ...cargoTest(),
133
- install({ uses: 'bytecodealliance/actions/wasmtime/setup@v1' }),
134
- install({ uses: 'wasmerio/setup-wasmer@v1' }),
135
- ...wasmTarget('wasm32-wasip1'),
136
- ...wasmTarget('wasm32-wasip2'),
137
- ...wasmTarget('wasm32-unknown-unknown'),
138
- ...wasmTarget('wasm32-wasip1-threads'),
139
- ...i686(a, v),
140
- // Node.js
141
- ...node(defaultNodeVersion)([
142
- // TypeScript Preview
143
- install({ run: 'npm install -g @typescript/native-preview' }),
144
- test({ run: 'tsgo' }),
145
- // publishing
146
- test({ run: 'npm pack' }),
147
- test({ run: `npm install -g ${findTgz(v)}` }),
148
- test({ run: 'fjs compile issues/demo/data/tree.json _tree.f.js' }),
149
- test({ run: 'fjs t' }),
150
- test({ run: 'npm uninstall functionalscript -g' }),
151
- ]),
152
- // Deno
153
- ...clean([
154
- installDeno,
155
- test({ run: 'deno install' }),
156
- test({ run: 'deno task test' }),
157
- test({ run: 'deno task fjs compile issues/demo/data/tree.json _tree.f.js' }),
158
- test({ run: 'deno task fjs t' }),
159
- test({ run: 'deno publish --dry-run' }),
160
- ]),
161
- // Bun
162
- ...clean([
163
- installBun(v)(a),
164
- test({ run: 'bun test --timeout 20000' }),
165
- test({ run: 'bun ./fjs/module.ts t' }),
166
- ]),
167
- ];
168
- return [id, { 'runs-on': image, steps: toSteps(result) }];
169
- };
170
- const jobs = {
171
- ...Object.fromEntries(os.flatMap(v => architecture.map(job(v)))),
172
- ...nodeVersions,
173
- playwright,
174
- };
175
- const gha = {
176
- name: 'CI',
177
- on: { pull_request: {} },
178
- jobs,
179
- };
180
- export const effect = begin
181
- .step(() => writeFile('.github/workflows/ci.yml', utf8(JSON.stringify(gha, null, ' '))))
182
- .step(() => pure(0));
183
- export default () => effect;
@@ -1,4 +0,0 @@
1
- declare const _default: {
2
- throw: () => never;
3
- };
4
- export default _default;
package/dev/tf/test.f.js DELETED
@@ -1,5 +0,0 @@
1
- export default {
2
- throw: () => {
3
- throw [() => { }, () => { }];
4
- }
5
- };
@@ -1,3 +0,0 @@
1
- import { type Effect } from "../../types/effects/module.f.ts";
2
- import { type All, type ReadFile, type WriteFile } from "../../types/effects/node/module.f.ts";
3
- export declare const updateVersion: Effect<ReadFile | WriteFile | All, number>;
@@ -1,202 +0,0 @@
1
- import { descentParser } from "../../bnf/data/module.f.js";
2
- import { stringToCodePointList } from "../../text/utf16/module.f.js";
3
- import { map, toArray } from "../../types/list/module.f.js";
4
- import { jsGrammar } from "./module.f.js";
5
- const mapCodePoint = (cp) => [cp, undefined];
6
- const descentParserCpOnly = (m, name, cp) => {
7
- const cpm = toArray(map(mapCodePoint)(cp));
8
- return m(name, cpm);
9
- };
10
- export default {
11
- isValid: [() => {
12
- const m = descentParser(jsGrammar());
13
- const expect = (s, expected) => {
14
- const cp = toArray(stringToCodePointList(s));
15
- const mr = descentParserCpOnly(m, '', cp);
16
- const success = mr[1] && mr[2] === cp.length;
17
- if (success !== expected) {
18
- throw JSON.stringify([s, mr]);
19
- }
20
- };
21
- expect('"', false);
22
- expect(' true ', true);
23
- expect(' tr2ue ', true);
24
- expect(' 2true ', true);
25
- expect(' true" ', false);
26
- expect(' "Hello" ', true);
27
- expect(' "Hello ', false);
28
- expect(' "Hello\\n\\r\\"" ', true);
29
- expect(' 56.7e+5 ', true);
30
- expect(' -56.7e+5 ', true);
31
- expect(' h-56.7e+5 ', true);
32
- expect(' -56.7e+5 3', true);
33
- expect(' [] ', true);
34
- expect(' {} ', true);
35
- expect(' [[[]]] ', true);
36
- expect(' [1] ', true);
37
- expect(' [ 12, false, "a"] ', true);
38
- expect(' [ 12, false2, "a"] ', true);
39
- expect(' { "q": [ 12, false, [{"b" : "c"}], "a"] } ', true);
40
- expect(' { "q": [ 12, false, [{}], "a"] } ', true);
41
- expect(' { "q": [ 12, false, [}], "a"] } ', true);
42
- expect(' [{ "q": [ 12, false, [{}], "a"] }] ', true);
43
- expect(' [{ "q": [ 12, false, [}], "a"] }] ', true);
44
- expect('. + ++ +=', true);
45
- expect('//12\n', true);
46
- expect('/*12*/', true);
47
- expect('/* 1*2 */', true);
48
- }
49
- ],
50
- parser: [
51
- () => {
52
- const m = descentParser(jsGrammar());
53
- const cp = toArray(stringToCodePointList('tr'));
54
- const mr = descentParserCpOnly(m, '', cp);
55
- const seq = mr[0].sequence[0];
56
- if (seq instanceof Array)
57
- throw JSON.stringify(mr);
58
- if (seq.tag !== 'id')
59
- throw JSON.stringify(mr);
60
- },
61
- () => {
62
- const m = descentParser(jsGrammar());
63
- const cp = toArray(stringToCodePointList('"tr"'));
64
- const mr = descentParserCpOnly(m, '', cp);
65
- const seq = mr[0].sequence[0];
66
- if (seq instanceof Array)
67
- throw JSON.stringify(mr);
68
- if (seq.tag !== 'string')
69
- throw JSON.stringify(mr);
70
- },
71
- () => {
72
- const m = descentParser(jsGrammar());
73
- const cp = toArray(stringToCodePointList('56.7e+5'));
74
- const mr = descentParserCpOnly(m, '', cp);
75
- const seq = mr[0].sequence[0];
76
- if (seq instanceof Array)
77
- throw JSON.stringify(mr);
78
- if (seq.tag !== 'number')
79
- throw JSON.stringify(mr);
80
- },
81
- () => {
82
- const m = descentParser(jsGrammar());
83
- const cp = toArray(stringToCodePointList('56n'));
84
- const mr = descentParserCpOnly(m, '', cp);
85
- const seq = mr[0].sequence[0];
86
- if (seq instanceof Array)
87
- throw JSON.stringify(mr);
88
- if (seq.tag !== 'number')
89
- throw JSON.stringify(mr);
90
- },
91
- () => {
92
- const m = descentParser(jsGrammar());
93
- const cp = toArray(stringToCodePointList('*'));
94
- const mr = descentParserCpOnly(m, '', cp);
95
- const seq = mr[0].sequence[0];
96
- if (seq instanceof Array)
97
- throw JSON.stringify(mr);
98
- if (seq.tag !== '*')
99
- throw JSON.stringify(mr);
100
- },
101
- () => {
102
- const m = descentParser(jsGrammar());
103
- const cp = toArray(stringToCodePointList('**'));
104
- const mr = descentParserCpOnly(m, '', cp);
105
- const seq = mr[0].sequence[0];
106
- if (seq instanceof Array)
107
- throw JSON.stringify(mr);
108
- if (seq.tag !== '**')
109
- throw JSON.stringify(mr);
110
- },
111
- () => {
112
- const m = descentParser(jsGrammar());
113
- const cp = toArray(stringToCodePointList('=>'));
114
- const mr = descentParserCpOnly(m, '', cp);
115
- const seq = mr[0].sequence[0];
116
- if (seq instanceof Array)
117
- throw JSON.stringify(mr);
118
- if (seq.tag !== '=>')
119
- throw JSON.stringify(mr);
120
- },
121
- () => {
122
- const m = descentParser(jsGrammar());
123
- const cp = toArray(stringToCodePointList('=='));
124
- const mr = descentParserCpOnly(m, '', cp);
125
- const seq = mr[0].sequence[0];
126
- if (seq instanceof Array)
127
- throw JSON.stringify(mr);
128
- if (seq.tag !== '==')
129
- throw JSON.stringify(mr);
130
- },
131
- () => {
132
- const m = descentParser(jsGrammar());
133
- const cp = toArray(stringToCodePointList('==='));
134
- const mr = descentParserCpOnly(m, '', cp);
135
- const seq = mr[0].sequence[0];
136
- if (seq instanceof Array)
137
- throw JSON.stringify(mr);
138
- if (seq.tag !== '===')
139
- throw JSON.stringify(mr);
140
- },
141
- () => {
142
- const m = descentParser(jsGrammar());
143
- const cp = toArray(stringToCodePointList('='));
144
- const mr = descentParserCpOnly(m, '', cp);
145
- const seq = mr[0].sequence[0];
146
- if (seq instanceof Array)
147
- throw JSON.stringify(mr);
148
- if (seq.tag !== '=')
149
- throw JSON.stringify(mr);
150
- },
151
- () => {
152
- const m = descentParser(jsGrammar());
153
- const cp = toArray(stringToCodePointList(' '));
154
- const mr = descentParserCpOnly(m, '', cp);
155
- const seq = mr[0].sequence[0];
156
- if (seq instanceof Array)
157
- throw JSON.stringify(mr);
158
- if (seq.tag !== ' ')
159
- throw JSON.stringify(mr);
160
- },
161
- () => {
162
- const m = descentParser(jsGrammar());
163
- const cp = toArray(stringToCodePointList('\n'));
164
- const mr = descentParserCpOnly(m, '', cp);
165
- const seq = mr[0].sequence[0];
166
- if (seq instanceof Array)
167
- throw JSON.stringify(mr);
168
- if (seq.tag !== '\n')
169
- throw JSON.stringify(mr);
170
- },
171
- () => {
172
- const m = descentParser(jsGrammar());
173
- const cp = toArray(stringToCodePointList('/\n'));
174
- const mr = descentParserCpOnly(m, '', cp);
175
- const seq = mr[0].sequence[0];
176
- if (seq instanceof Array)
177
- throw JSON.stringify(mr);
178
- if (seq.tag !== '/')
179
- throw JSON.stringify(mr);
180
- },
181
- () => {
182
- const m = descentParser(jsGrammar());
183
- const cp = toArray(stringToCodePointList('//\n'));
184
- const mr = descentParserCpOnly(m, '', cp);
185
- const seq = mr[0].sequence[0];
186
- if (seq instanceof Array)
187
- throw JSON.stringify(mr);
188
- if (seq.tag !== 'comment')
189
- throw JSON.stringify(mr);
190
- },
191
- () => {
192
- const m = descentParser(jsGrammar());
193
- const cp = toArray(stringToCodePointList('/*1*/'));
194
- const mr = descentParserCpOnly(m, '', cp);
195
- const seq = mr[0].sequence[0];
196
- if (seq instanceof Array)
197
- throw JSON.stringify(mr);
198
- if (seq.tag !== 'comment')
199
- throw JSON.stringify(mr);
200
- }
201
- ]
202
- };