json-as 1.2.5 → 1.3.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 (321) hide show
  1. package/.as-test/coverage/naive/coverage.arbitrary.spec.ts.log.json +5628 -0
  2. package/.as-test/coverage/naive/coverage.array.spec.ts.log.json +5187 -0
  3. package/.as-test/coverage/naive/coverage.bool.spec.ts.log.json +5187 -0
  4. package/.as-test/coverage/naive/coverage.box.spec.ts.log.json +5187 -0
  5. package/.as-test/coverage/naive/coverage.custom.spec.ts.log.json +5187 -0
  6. package/.as-test/coverage/naive/coverage.date.spec.ts.log.json +5187 -0
  7. package/.as-test/coverage/naive/coverage.enum.spec.ts.log.json +5187 -0
  8. package/.as-test/coverage/naive/coverage.float.spec.ts.log.json +5187 -0
  9. package/.as-test/coverage/naive/coverage.generics.spec.ts.log.json +5187 -0
  10. package/.as-test/coverage/naive/coverage.hierarchy.spec.ts.log.json +5187 -0
  11. package/.as-test/coverage/naive/coverage.integer.spec.ts.log.json +5187 -0
  12. package/.as-test/coverage/naive/coverage.map.spec.ts.log.json +5187 -0
  13. package/.as-test/coverage/naive/coverage.namespace.spec.ts.log.json +5187 -0
  14. package/.as-test/coverage/naive/coverage.null.spec.ts.log.json +5187 -0
  15. package/.as-test/coverage/naive/coverage.raw.spec.ts.log.json +5187 -0
  16. package/.as-test/coverage/naive/coverage.resolving.spec.ts.log.json +5628 -0
  17. package/.as-test/coverage/naive/coverage.set.spec.ts.log.json +5187 -0
  18. package/.as-test/coverage/naive/coverage.staticarray.spec.ts.log.json +5187 -0
  19. package/.as-test/coverage/naive/coverage.string.spec.ts.log.json +5187 -0
  20. package/.as-test/coverage/naive/coverage.struct.spec.ts.log.json +5187 -0
  21. package/.as-test/coverage/naive/coverage.types.spec.ts.log.json +5187 -0
  22. package/.as-test/coverage/simd/coverage.arbitrary.spec.ts.log.json +5628 -0
  23. package/.as-test/coverage/simd/coverage.array.spec.ts.log.json +5187 -0
  24. package/.as-test/coverage/simd/coverage.bool.spec.ts.log.json +5187 -0
  25. package/.as-test/coverage/simd/coverage.box.spec.ts.log.json +5187 -0
  26. package/.as-test/coverage/simd/coverage.custom.spec.ts.log.json +5187 -0
  27. package/.as-test/coverage/simd/coverage.date.spec.ts.log.json +5187 -0
  28. package/.as-test/coverage/simd/coverage.enum.spec.ts.log.json +5187 -0
  29. package/.as-test/coverage/simd/coverage.float.spec.ts.log.json +5187 -0
  30. package/.as-test/coverage/simd/coverage.generics.spec.ts.log.json +5187 -0
  31. package/.as-test/coverage/simd/coverage.hierarchy.spec.ts.log.json +5187 -0
  32. package/.as-test/coverage/simd/coverage.integer.spec.ts.log.json +5187 -0
  33. package/.as-test/coverage/simd/coverage.map.spec.ts.log.json +5187 -0
  34. package/.as-test/coverage/simd/coverage.namespace.spec.ts.log.json +5187 -0
  35. package/.as-test/coverage/simd/coverage.null.spec.ts.log.json +5187 -0
  36. package/.as-test/coverage/simd/coverage.raw.spec.ts.log.json +5187 -0
  37. package/.as-test/coverage/simd/coverage.resolving.spec.ts.log.json +5628 -0
  38. package/.as-test/coverage/simd/coverage.set.spec.ts.log.json +5187 -0
  39. package/.as-test/coverage/simd/coverage.staticarray.spec.ts.log.json +5187 -0
  40. package/.as-test/coverage/simd/coverage.string.spec.ts.log.json +5187 -0
  41. package/.as-test/coverage/simd/coverage.struct.spec.ts.log.json +5187 -0
  42. package/.as-test/coverage/simd/coverage.types.spec.ts.log.json +5187 -0
  43. package/.as-test/coverage/swar/coverage.arbitrary.spec.ts.log.json +5628 -0
  44. package/.as-test/coverage/swar/coverage.array.spec.ts.log.json +5187 -0
  45. package/.as-test/coverage/swar/coverage.bool.spec.ts.log.json +5187 -0
  46. package/.as-test/coverage/swar/coverage.box.spec.ts.log.json +5187 -0
  47. package/.as-test/coverage/swar/coverage.custom.spec.ts.log.json +5187 -0
  48. package/.as-test/coverage/swar/coverage.date.spec.ts.log.json +5187 -0
  49. package/.as-test/coverage/swar/coverage.enum.spec.ts.log.json +5187 -0
  50. package/.as-test/coverage/swar/coverage.float.spec.ts.log.json +5187 -0
  51. package/.as-test/coverage/swar/coverage.generics.spec.ts.log.json +5187 -0
  52. package/.as-test/coverage/swar/coverage.hierarchy.spec.ts.log.json +5187 -0
  53. package/.as-test/coverage/swar/coverage.integer.spec.ts.log.json +5187 -0
  54. package/.as-test/coverage/swar/coverage.map.spec.ts.log.json +5187 -0
  55. package/.as-test/coverage/swar/coverage.namespace.spec.ts.log.json +5187 -0
  56. package/.as-test/coverage/swar/coverage.null.spec.ts.log.json +5187 -0
  57. package/.as-test/coverage/swar/coverage.raw.spec.ts.log.json +5187 -0
  58. package/.as-test/coverage/swar/coverage.resolving.spec.ts.log.json +5628 -0
  59. package/.as-test/coverage/swar/coverage.set.spec.ts.log.json +5187 -0
  60. package/.as-test/coverage/swar/coverage.staticarray.spec.ts.log.json +5187 -0
  61. package/.as-test/coverage/swar/coverage.string.spec.ts.log.json +5187 -0
  62. package/.as-test/coverage/swar/coverage.struct.spec.ts.log.json +5187 -0
  63. package/.as-test/coverage/swar/coverage.types.spec.ts.log.json +5187 -0
  64. package/.as-test/logs/naive/run.arbitrary.spec.ts.log.json +943 -0
  65. package/.as-test/logs/naive/run.array.spec.ts.log.json +1053 -0
  66. package/.as-test/logs/naive/run.bool.spec.ts.log.json +257 -0
  67. package/.as-test/logs/naive/run.box.spec.ts.log.json +353 -0
  68. package/.as-test/logs/naive/run.custom.spec.ts.log.json +309 -0
  69. package/.as-test/logs/naive/run.date.spec.ts.log.json +397 -0
  70. package/.as-test/logs/naive/run.enum.spec.ts.log.json +343 -0
  71. package/.as-test/logs/naive/run.float.spec.ts.log.json +453 -0
  72. package/.as-test/logs/naive/run.generics.spec.ts.log.json +393 -0
  73. package/.as-test/logs/naive/run.hierarchy.spec.ts.log.json +325 -0
  74. package/.as-test/logs/naive/run.integer.spec.ts.log.json +373 -0
  75. package/.as-test/logs/naive/run.map.spec.ts.log.json +247 -0
  76. package/.as-test/logs/naive/run.namespace.spec.ts.log.json +361 -0
  77. package/.as-test/logs/naive/run.null.spec.ts.log.json +273 -0
  78. package/.as-test/logs/naive/run.raw.spec.ts.log.json +309 -0
  79. package/.as-test/logs/naive/run.resolving.spec.ts.log.json +273 -0
  80. package/.as-test/logs/naive/run.set.spec.ts.log.json +733 -0
  81. package/.as-test/logs/naive/run.staticarray.spec.ts.log.json +931 -0
  82. package/.as-test/logs/naive/run.string.spec.ts.log.json +2289 -0
  83. package/.as-test/logs/naive/run.struct.spec.ts.log.json +523 -0
  84. package/.as-test/logs/naive/run.types.spec.ts.log.json +273 -0
  85. package/.as-test/logs/naive/test.arbitrary.spec.ts.log.json +943 -0
  86. package/.as-test/logs/naive/test.array.spec.ts.log.json +1053 -0
  87. package/.as-test/logs/naive/test.bool.spec.ts.log.json +257 -0
  88. package/.as-test/logs/naive/test.box.spec.ts.log.json +353 -0
  89. package/.as-test/logs/naive/test.custom.spec.ts.log.json +309 -0
  90. package/.as-test/logs/naive/test.date.spec.ts.log.json +397 -0
  91. package/.as-test/logs/naive/test.enum.spec.ts.log.json +343 -0
  92. package/.as-test/logs/naive/test.float.spec.ts.log.json +453 -0
  93. package/.as-test/logs/naive/test.generics.spec.ts.log.json +393 -0
  94. package/.as-test/logs/naive/test.hierarchy.spec.ts.log.json +325 -0
  95. package/.as-test/logs/naive/test.integer.spec.ts.log.json +373 -0
  96. package/.as-test/logs/naive/test.log.json +2289 -0
  97. package/.as-test/logs/naive/test.map.spec.ts.log.json +247 -0
  98. package/.as-test/logs/naive/test.namespace.spec.ts.log.json +361 -0
  99. package/.as-test/logs/naive/test.null.spec.ts.log.json +273 -0
  100. package/.as-test/logs/naive/test.raw.spec.ts.log.json +309 -0
  101. package/.as-test/logs/naive/test.resolving.spec.ts.log.json +273 -0
  102. package/.as-test/logs/naive/test.set.spec.ts.log.json +733 -0
  103. package/.as-test/logs/naive/test.staticarray.spec.ts.log.json +931 -0
  104. package/.as-test/logs/naive/test.string.spec.ts.log.json +2345 -0
  105. package/.as-test/logs/naive/test.struct.spec.ts.log.json +523 -0
  106. package/.as-test/logs/naive/test.types.spec.ts.log.json +273 -0
  107. package/.as-test/logs/simd/run.arbitrary.spec.ts.log.json +943 -0
  108. package/.as-test/logs/simd/run.array.spec.ts.log.json +1053 -0
  109. package/.as-test/logs/simd/run.bool.spec.ts.log.json +257 -0
  110. package/.as-test/logs/simd/run.box.spec.ts.log.json +353 -0
  111. package/.as-test/logs/simd/run.custom.spec.ts.log.json +309 -0
  112. package/.as-test/logs/simd/run.date.spec.ts.log.json +397 -0
  113. package/.as-test/logs/simd/run.enum.spec.ts.log.json +343 -0
  114. package/.as-test/logs/simd/run.float.spec.ts.log.json +453 -0
  115. package/.as-test/logs/simd/run.generics.spec.ts.log.json +393 -0
  116. package/.as-test/logs/simd/run.hierarchy.spec.ts.log.json +325 -0
  117. package/.as-test/logs/simd/run.integer.spec.ts.log.json +373 -0
  118. package/.as-test/logs/simd/run.map.spec.ts.log.json +247 -0
  119. package/.as-test/logs/simd/run.namespace.spec.ts.log.json +361 -0
  120. package/.as-test/logs/simd/run.null.spec.ts.log.json +273 -0
  121. package/.as-test/logs/simd/run.raw.spec.ts.log.json +309 -0
  122. package/.as-test/logs/simd/run.resolving.spec.ts.log.json +273 -0
  123. package/.as-test/logs/simd/run.set.spec.ts.log.json +733 -0
  124. package/.as-test/logs/simd/run.staticarray.spec.ts.log.json +931 -0
  125. package/.as-test/logs/simd/run.string.spec.ts.log.json +2289 -0
  126. package/.as-test/logs/simd/run.struct.spec.ts.log.json +523 -0
  127. package/.as-test/logs/simd/run.types.spec.ts.log.json +273 -0
  128. package/.as-test/logs/simd/test.arbitrary.spec.ts.log.json +943 -0
  129. package/.as-test/logs/simd/test.array.spec.ts.log.json +1053 -0
  130. package/.as-test/logs/simd/test.bool.spec.ts.log.json +257 -0
  131. package/.as-test/logs/simd/test.box.spec.ts.log.json +353 -0
  132. package/.as-test/logs/simd/test.custom.spec.ts.log.json +309 -0
  133. package/.as-test/logs/simd/test.date.spec.ts.log.json +397 -0
  134. package/.as-test/logs/simd/test.enum.spec.ts.log.json +343 -0
  135. package/.as-test/logs/simd/test.float.spec.ts.log.json +453 -0
  136. package/.as-test/logs/simd/test.generics.spec.ts.log.json +393 -0
  137. package/.as-test/logs/simd/test.hierarchy.spec.ts.log.json +325 -0
  138. package/.as-test/logs/simd/test.integer.spec.ts.log.json +373 -0
  139. package/.as-test/logs/simd/test.log.json +11371 -0
  140. package/.as-test/logs/simd/test.map.spec.ts.log.json +247 -0
  141. package/.as-test/logs/simd/test.namespace.spec.ts.log.json +361 -0
  142. package/.as-test/logs/simd/test.null.spec.ts.log.json +273 -0
  143. package/.as-test/logs/simd/test.raw.spec.ts.log.json +309 -0
  144. package/.as-test/logs/simd/test.resolving.spec.ts.log.json +273 -0
  145. package/.as-test/logs/simd/test.set.spec.ts.log.json +733 -0
  146. package/.as-test/logs/simd/test.staticarray.spec.ts.log.json +931 -0
  147. package/.as-test/logs/simd/test.string.spec.ts.log.json +2345 -0
  148. package/.as-test/logs/simd/test.struct.spec.ts.log.json +523 -0
  149. package/.as-test/logs/simd/test.types.spec.ts.log.json +273 -0
  150. package/.as-test/logs/swar/run.arbitrary.spec.ts.log.json +943 -0
  151. package/.as-test/logs/swar/run.array.spec.ts.log.json +1053 -0
  152. package/.as-test/logs/swar/run.bool.spec.ts.log.json +257 -0
  153. package/.as-test/logs/swar/run.box.spec.ts.log.json +353 -0
  154. package/.as-test/logs/swar/run.custom.spec.ts.log.json +309 -0
  155. package/.as-test/logs/swar/run.date.spec.ts.log.json +397 -0
  156. package/.as-test/logs/swar/run.enum.spec.ts.log.json +343 -0
  157. package/.as-test/logs/swar/run.float.spec.ts.log.json +453 -0
  158. package/.as-test/logs/swar/run.generics.spec.ts.log.json +393 -0
  159. package/.as-test/logs/swar/run.hierarchy.spec.ts.log.json +325 -0
  160. package/.as-test/logs/swar/run.integer.spec.ts.log.json +373 -0
  161. package/.as-test/logs/swar/run.map.spec.ts.log.json +247 -0
  162. package/.as-test/logs/swar/run.namespace.spec.ts.log.json +361 -0
  163. package/.as-test/logs/swar/run.null.spec.ts.log.json +273 -0
  164. package/.as-test/logs/swar/run.raw.spec.ts.log.json +309 -0
  165. package/.as-test/logs/swar/run.resolving.spec.ts.log.json +273 -0
  166. package/.as-test/logs/swar/run.set.spec.ts.log.json +733 -0
  167. package/.as-test/logs/swar/run.staticarray.spec.ts.log.json +931 -0
  168. package/.as-test/logs/swar/run.string.spec.ts.log.json +2289 -0
  169. package/.as-test/logs/swar/run.struct.spec.ts.log.json +523 -0
  170. package/.as-test/logs/swar/run.types.spec.ts.log.json +273 -0
  171. package/.as-test/logs/swar/test.arbitrary.spec.ts.log.json +943 -0
  172. package/.as-test/logs/swar/test.array.spec.ts.log.json +1053 -0
  173. package/.as-test/logs/swar/test.bool.spec.ts.log.json +257 -0
  174. package/.as-test/logs/swar/test.box.spec.ts.log.json +353 -0
  175. package/.as-test/logs/swar/test.custom.spec.ts.log.json +309 -0
  176. package/.as-test/logs/swar/test.date.spec.ts.log.json +397 -0
  177. package/.as-test/logs/swar/test.enum.spec.ts.log.json +343 -0
  178. package/.as-test/logs/swar/test.float.spec.ts.log.json +453 -0
  179. package/.as-test/logs/swar/test.generics.spec.ts.log.json +393 -0
  180. package/.as-test/logs/swar/test.hierarchy.spec.ts.log.json +325 -0
  181. package/.as-test/logs/swar/test.integer.spec.ts.log.json +373 -0
  182. package/.as-test/logs/swar/test.log.json +11371 -0
  183. package/.as-test/logs/swar/test.map.spec.ts.log.json +247 -0
  184. package/.as-test/logs/swar/test.namespace.spec.ts.log.json +361 -0
  185. package/.as-test/logs/swar/test.null.spec.ts.log.json +273 -0
  186. package/.as-test/logs/swar/test.raw.spec.ts.log.json +309 -0
  187. package/.as-test/logs/swar/test.resolving.spec.ts.log.json +273 -0
  188. package/.as-test/logs/swar/test.set.spec.ts.log.json +733 -0
  189. package/.as-test/logs/swar/test.staticarray.spec.ts.log.json +931 -0
  190. package/.as-test/logs/swar/test.string.spec.ts.log.json +2345 -0
  191. package/.as-test/logs/swar/test.struct.spec.ts.log.json +523 -0
  192. package/.as-test/logs/swar/test.types.spec.ts.log.json +273 -0
  193. package/.as-test/logs/test.arbitrary.spec.ts.log.json +943 -0
  194. package/.as-test/logs/test.array.spec.ts.log.json +1053 -0
  195. package/.as-test/logs/test.bool.spec.ts.log.json +257 -0
  196. package/.as-test/logs/test.box.spec.ts.log.json +353 -0
  197. package/.as-test/logs/test.custom.spec.ts.log.json +309 -0
  198. package/.as-test/logs/test.date.spec.ts.log.json +397 -0
  199. package/.as-test/logs/test.enum.spec.ts.log.json +343 -0
  200. package/.as-test/logs/test.float.spec.ts.log.json +453 -0
  201. package/.as-test/logs/test.generics.spec.ts.log.json +393 -0
  202. package/.as-test/logs/test.hierarchy.spec.ts.log.json +325 -0
  203. package/.as-test/logs/test.integer.spec.ts.log.json +373 -0
  204. package/.as-test/logs/test.log.json +11371 -0
  205. package/.as-test/logs/test.map.spec.ts.log.json +247 -0
  206. package/.as-test/logs/test.namespace.spec.ts.log.json +361 -0
  207. package/.as-test/logs/test.null.spec.ts.log.json +273 -0
  208. package/.as-test/logs/test.raw.spec.ts.log.json +309 -0
  209. package/.as-test/logs/test.resolving.spec.ts.log.json +273 -0
  210. package/.as-test/logs/test.set.spec.ts.log.json +733 -0
  211. package/.as-test/logs/test.staticarray.spec.ts.log.json +931 -0
  212. package/.as-test/logs/test.string.spec.ts.log.json +2289 -0
  213. package/.as-test/logs/test.struct.spec.ts.log.json +523 -0
  214. package/.as-test/logs/test.types.spec.ts.log.json +273 -0
  215. package/.as-test/runners/default.bindings.js +68 -0
  216. package/.as-test/runners/default.wasi.js +38 -0
  217. package/ARCHITECTURE.md +6 -3
  218. package/CONTRIBUTING.md +9 -3
  219. package/README.md +40 -21
  220. package/as-test.config.json +40 -0
  221. package/assembly/deserialize/float.ts +181 -0
  222. package/assembly/deserialize/helpers/uint.ts +12 -0
  223. package/assembly/deserialize/index/arbitrary.ts +25 -0
  224. package/assembly/deserialize/index/array.ts +61 -0
  225. package/assembly/deserialize/index/bool.ts +1 -0
  226. package/assembly/deserialize/index/date.ts +1 -0
  227. package/assembly/deserialize/index/float.ts +1 -0
  228. package/assembly/deserialize/index/integer.ts +1 -0
  229. package/assembly/deserialize/index/map.ts +1 -0
  230. package/assembly/deserialize/index/object.ts +1 -0
  231. package/assembly/deserialize/index/raw.ts +1 -0
  232. package/assembly/deserialize/index/set.ts +1 -0
  233. package/assembly/deserialize/index/staticarray.ts +1 -0
  234. package/assembly/deserialize/index/string.ts +15 -0
  235. package/assembly/deserialize/index/struct.ts +1 -0
  236. package/assembly/deserialize/index/typedarray.ts +1 -0
  237. package/assembly/deserialize/index/unsigned.ts +1 -0
  238. package/assembly/deserialize/index.ts +14 -0
  239. package/assembly/deserialize/integer.ts +42 -0
  240. package/assembly/deserialize/simd/array/integer.ts +307 -0
  241. package/assembly/deserialize/simd/string.ts +131 -10
  242. package/assembly/deserialize/simple/arbitrary.ts +2 -2
  243. package/assembly/deserialize/simple/array/arbitrary.ts +13 -20
  244. package/assembly/deserialize/simple/array/raw.ts +14 -21
  245. package/assembly/deserialize/simple/array/string.ts +3 -2
  246. package/assembly/deserialize/simple/array.ts +1 -0
  247. package/assembly/deserialize/simple/map.ts +14 -19
  248. package/assembly/deserialize/simple/object.ts +14 -19
  249. package/assembly/deserialize/simple/set.ts +9 -9
  250. package/assembly/deserialize/simple/staticarray/array.ts +12 -3
  251. package/assembly/deserialize/simple/staticarray/bool.ts +6 -2
  252. package/assembly/deserialize/simple/staticarray/float.ts +12 -3
  253. package/assembly/deserialize/simple/staticarray/integer.ts +6 -2
  254. package/assembly/deserialize/simple/staticarray/string.ts +5 -4
  255. package/assembly/deserialize/simple/staticarray/struct.ts +30 -7
  256. package/assembly/deserialize/simple/staticarray.ts +56 -12
  257. package/assembly/deserialize/simple/string.ts +1 -1
  258. package/assembly/deserialize/simple/struct.ts +12 -20
  259. package/assembly/deserialize/simple/typedarray.ts +94 -0
  260. package/assembly/deserialize/swar/array/arbitrary.ts +8 -0
  261. package/assembly/deserialize/swar/array/array.ts +39 -0
  262. package/assembly/deserialize/swar/array/bool.ts +47 -0
  263. package/assembly/deserialize/swar/array/box.ts +8 -0
  264. package/assembly/deserialize/swar/array/float.ts +39 -0
  265. package/assembly/deserialize/swar/array/integer.ts +461 -0
  266. package/assembly/deserialize/swar/array/map.ts +7 -0
  267. package/assembly/deserialize/swar/array/object.ts +44 -0
  268. package/assembly/deserialize/swar/array/raw.ts +8 -0
  269. package/assembly/deserialize/swar/array/shared.ts +96 -0
  270. package/assembly/deserialize/swar/array/string.ts +39 -0
  271. package/assembly/deserialize/swar/array/struct.ts +44 -0
  272. package/assembly/deserialize/swar/array.ts +49 -0
  273. package/assembly/deserialize/swar/string.ts +653 -14
  274. package/assembly/deserialize/unsigned.ts +75 -0
  275. package/assembly/index.d.ts +2 -2
  276. package/assembly/index.ts +214 -132
  277. package/assembly/serialize/index/arbitrary.ts +70 -0
  278. package/assembly/serialize/index/array.ts +1 -0
  279. package/assembly/serialize/index/bool.ts +1 -0
  280. package/assembly/serialize/index/date.ts +1 -0
  281. package/assembly/serialize/index/float.ts +1 -0
  282. package/assembly/serialize/index/integer.ts +1 -0
  283. package/assembly/serialize/index/map.ts +1 -0
  284. package/assembly/serialize/index/object.ts +46 -0
  285. package/assembly/serialize/index/raw.ts +1 -0
  286. package/assembly/serialize/index/set.ts +1 -0
  287. package/assembly/serialize/index/staticarray.ts +1 -0
  288. package/assembly/serialize/index/string.ts +15 -0
  289. package/assembly/serialize/index/struct.ts +1 -0
  290. package/assembly/serialize/index/typedarray.ts +1 -0
  291. package/assembly/serialize/index.ts +13 -0
  292. package/assembly/serialize/simd/string.ts +68 -68
  293. package/assembly/serialize/simple/string.ts +9 -10
  294. package/assembly/serialize/simple/typedarray.ts +63 -0
  295. package/assembly/serialize/swar/string.ts +26 -32
  296. package/assembly/test.ts +20 -20
  297. package/assembly/tsconfig.json +16 -1
  298. package/assembly/util/index.ts +1 -0
  299. package/assembly/util/masks.ts +17 -24
  300. package/assembly/util/memory.ts +0 -0
  301. package/assembly/util/stringScan.ts +24 -0
  302. package/assembly/util/swar.ts +2 -9
  303. package/eslint.config.js +43 -52
  304. package/lib/as-bs.ts +72 -77
  305. package/package.json +13 -9
  306. package/test.ts +99 -0
  307. package/tools/assemblyscript-eslint-local.js +6 -0
  308. package/tools/assemblyscript-eslint.js +53 -0
  309. package/tools/assemblyscript-prettier-plugin.js +33 -0
  310. package/tools/replacer.js +63 -0
  311. package/transform/lib/index.d.ts.map +1 -1
  312. package/transform/lib/index.js +397 -64
  313. package/transform/lib/index.js.map +1 -1
  314. package/transform/lib/types.d.ts +4 -0
  315. package/transform/lib/types.d.ts.map +1 -1
  316. package/transform/lib/types.js +62 -0
  317. package/transform/lib/types.js.map +1 -1
  318. package/transform/tsconfig.json +2 -6
  319. package/.claude/settings.local.json +0 -9
  320. package/assembly/deserialize/simple/float.ts +0 -11
  321. package/assembly/deserialize/simple/integer.ts +0 -6
package/assembly/index.ts CHANGED
@@ -1,40 +1,40 @@
1
1
  /// <reference path="./index.d.ts" />
2
2
 
3
3
  import { bs } from "../lib/as-bs";
4
- import { serializeArray } from "./serialize/simple/array";
5
- import { serializeMap } from "./serialize/simple/map";
6
- import { serializeDate } from "./serialize/simple/date";
7
- import { deserializeBoolean } from "./deserialize/simple/bool";
8
- import { deserializeArray } from "./deserialize/simple/array";
9
- import { deserializeFloat } from "./deserialize/simple/float";
10
- import { deserializeMap } from "./deserialize/simple/map";
11
- import { deserializeDate } from "./deserialize/simple/date";
12
- import { deserializeInteger } from "./deserialize/simple/integer";
13
- import { serializeArbitrary } from "./serialize/simple/arbitrary";
14
- import { serializeSet } from "./serialize/simple/set";
15
- import { deserializeSet } from "./deserialize/simple/set";
16
- import { serializeStaticArray } from "./serialize/simple/staticarray";
17
- import { deserializeStaticArray } from "./deserialize/simple/staticarray";
4
+ import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
5
+ import { serializeArray } from "./serialize/index/array";
6
+ import { serializeMap } from "./serialize/index/map";
7
+ import { serializeDate } from "./serialize/index/date";
8
+ import { deserializeBoolean } from "./deserialize/index/bool";
9
+ import { deserializeArray } from "./deserialize/index/array";
10
+ import { deserializeFloat } from "./deserialize/index/float";
11
+ import { deserializeMap } from "./deserialize/index/map";
12
+ import { deserializeDate } from "./deserialize/index/date";
13
+ import { deserializeInteger } from "./deserialize/index/integer";
14
+ import { deserializeUnsigned } from "./deserialize/index/unsigned";
15
+ import { serializeArbitrary } from "./serialize/index/arbitrary";
16
+ import { serializeSet } from "./serialize/index/set";
17
+ import { deserializeSet } from "./deserialize/index/set";
18
+ import { serializeStaticArray } from "./serialize/index/staticarray";
19
+ import { deserializeStaticArray } from "./deserialize/index/staticarray";
18
20
 
19
21
  import { NULL_WORD, QUOTE, NULL_WORD_U64, TRUE_WORD_U64, FALSE_WORD_U64 } from "./custom/chars";
20
22
  import { dtoa_buffered, itoa_buffered } from "util/number";
21
- import { serializeBool } from "./serialize/simple/bool";
22
- import { serializeInteger } from "./serialize/simple/integer";
23
- import { serializeFloat } from "./serialize/simple/float";
24
- import { serializeStruct } from "./serialize/simple/struct";
23
+ import { serializeBool } from "./serialize/index/bool";
24
+ import { serializeInteger } from "./serialize/index/integer";
25
+ import { serializeFloat } from "./serialize/index/float";
26
+ import { serializeStruct } from "./serialize/index/struct";
25
27
  import { ptrToStr } from "./util/ptrToStr";
26
28
  import { atoi, bytes } from "./util";
27
- import { deserializeArbitrary } from "./deserialize/simple/arbitrary";
28
- import { serializeObject } from "./serialize/simple/object";
29
- import { deserializeObject } from "./deserialize/simple/object";
30
- import { serializeRaw } from "./serialize/simple/raw";
31
- import { deserializeRaw } from "./deserialize/simple/raw";
32
- import { serializeString_SIMD } from "./serialize/simd/string";
33
- import { serializeString_SWAR } from "./serialize/swar/string";
34
- import { deserializeString_SWAR } from "./deserialize/swar/string";
35
- import { deserializeString } from "./deserialize/simple/string";
36
- import { serializeString } from "./serialize/simple/string";
37
- import { deserializeString_SIMD } from "./deserialize/simd/string";
29
+ import { deserializeArbitrary } from "./deserialize/index/arbitrary";
30
+ import { serializeObject } from "./serialize/index/object";
31
+ import { deserializeObject } from "./deserialize/index/object";
32
+ import { serializeRaw } from "./serialize/index/raw";
33
+ import { deserializeRaw } from "./deserialize/index/raw";
34
+ import { deserializeString } from "./deserialize/index/string";
35
+ import { serializeString } from "./serialize/index/string";
36
+ import { deserializeArrayBuffer, deserializeTypedArray } from "./deserialize/index/typedarray";
37
+ import { serializeArrayBufferUnsafe, serializeTypedArray } from "./serialize/index/typedarray";
38
38
 
39
39
  /**
40
40
  * Offset of the 'storage' property in the JSON.Value class.
@@ -96,7 +96,6 @@ export namespace JSON {
96
96
  if (out) {
97
97
  out = changetype<string>(__renew(changetype<usize>(out), sizeof<T>() << 3));
98
98
 
99
- // @ts-expect-error
100
99
  const bytes = itoa_buffered(changetype<usize>(out), data) << 1;
101
100
  return (out = changetype<string>(__renew(changetype<usize>(out), bytes)));
102
101
  }
@@ -105,12 +104,10 @@ export namespace JSON {
105
104
  if (out) {
106
105
  out = changetype<string>(__renew(changetype<usize>(out), 64));
107
106
 
108
- // @ts-expect-error
109
107
  const bytes = dtoa_buffered(changetype<usize>(out), data) << 1;
110
108
  return (out = changetype<string>(__renew(changetype<usize>(out), bytes)));
111
109
  }
112
110
  return data.toString();
113
- // @ts-expect-error: Function is generated by transform
114
111
  } else if (isNullable<T>() && changetype<usize>(data) == <usize>0) {
115
112
  if (out) {
116
113
  out = changetype<string>(__renew(changetype<usize>(out), 8));
@@ -118,22 +115,14 @@ export namespace JSON {
118
115
  return out;
119
116
  }
120
117
  return NULL_WORD;
121
- // @ts-expect-error
122
118
  } else if (isString<nonnull<T>>()) {
123
- if (JSON_MODE === JSONMode.SIMD) {
124
- serializeString_SIMD(data as string);
125
- } else if (JSON_MODE === JSONMode.SWAR) {
126
- serializeString_SWAR(data as string);
127
- } else {
128
- serializeString(data as string);
129
- }
119
+ serializeString(data as string);
130
120
  return bs.out<string>();
131
121
  // @ts-expect-error: Supplied by transform
132
122
  } else if (isDefined(data.__SERIALIZE)) {
133
123
  // @ts-expect-error
134
124
  inline.always(data.__SERIALIZE(changetype<usize>(data)));
135
125
  return bs.out<string>();
136
- // @ts-expect-error: Supplied by transform
137
126
  } else if (data instanceof Date) {
138
127
  out = out ? changetype<string>(__renew(changetype<usize>(out), 52)) : changetype<string>(__new(52, idof<string>()));
139
128
 
@@ -149,6 +138,39 @@ export namespace JSON {
149
138
  // @ts-expect-error
150
139
  inline.always(serializeStaticArray(changetype<nonnull<T>>(data)));
151
140
  return bs.out<string>();
141
+ } else if (data instanceof Int8Array) {
142
+ inline.always(serializeTypedArray<Int8Array>(data));
143
+ return bs.out<string>();
144
+ } else if (data instanceof Uint8Array) {
145
+ inline.always(serializeTypedArray<Uint8Array>(data));
146
+ return bs.out<string>();
147
+ } else if (data instanceof Uint8ClampedArray) {
148
+ inline.always(serializeTypedArray<Uint8ClampedArray>(data));
149
+ return bs.out<string>();
150
+ } else if (data instanceof Int16Array) {
151
+ inline.always(serializeTypedArray<Int16Array>(data));
152
+ return bs.out<string>();
153
+ } else if (data instanceof Uint16Array) {
154
+ inline.always(serializeTypedArray<Uint16Array>(data));
155
+ return bs.out<string>();
156
+ } else if (data instanceof Int32Array) {
157
+ inline.always(serializeTypedArray<Int32Array>(data));
158
+ return bs.out<string>();
159
+ } else if (data instanceof Uint32Array) {
160
+ inline.always(serializeTypedArray<Uint32Array>(data));
161
+ return bs.out<string>();
162
+ } else if (data instanceof Int64Array) {
163
+ inline.always(serializeTypedArray<Int64Array>(data));
164
+ return bs.out<string>();
165
+ } else if (data instanceof Uint64Array) {
166
+ inline.always(serializeTypedArray<Uint64Array>(data));
167
+ return bs.out<string>();
168
+ } else if (data instanceof Float32Array) {
169
+ inline.always(serializeTypedArray<Float32Array>(data));
170
+ return bs.out<string>();
171
+ } else if (data instanceof Float64Array) {
172
+ inline.always(serializeTypedArray<Float64Array>(data));
173
+ return bs.out<string>();
152
174
  } else if (data instanceof Set) {
153
175
  // @ts-expect-error
154
176
  inline.always(serializeSet(changetype<nonnull<T>>(data)));
@@ -169,14 +191,16 @@ export namespace JSON {
169
191
  } else if (data instanceof JSON.Box) {
170
192
  return JSON.stringify(data.value);
171
193
  } else {
172
- throw new Error(
173
- `Could not serialize data of type '${nameof<T>()}'. ` +
174
- `If this is a custom class, add the @json decorator: @json class ${nameof<T>()} { ... }. ` +
175
- `Supported types: primitives, string, Array, Map, Date, and @json decorated classes.`
176
- );
194
+ throw new Error(`Could not serialize data of type '${nameof<T>()}'. ` + `If this is a custom class, add the @json decorator: @json class ${nameof<T>()} { ... }. ` + `Supported types: primitives, string, Array, StaticArray, TypedArray, Map, Date, and @json decorated classes. ` + `For ArrayBuffer, use JSON.stringifyArrayBuffer(changetype<usize>(...)).`);
177
195
  }
178
196
  }
179
197
 
198
+
199
+ @inline export function stringifyArrayBuffer(dataStart: usize): string {
200
+ serializeArrayBufferUnsafe(dataStart, changetype<OBJECT>(dataStart - TOTAL_OVERHEAD).rtSize);
201
+ return bs.out<string>();
202
+ }
203
+
180
204
  /**
181
205
  * Parses valid JSON strings into their original format
182
206
  * ```js
@@ -192,23 +216,13 @@ export namespace JSON {
192
216
  if (isBoolean<T>()) {
193
217
  return deserializeBoolean(dataPtr, dataPtr + dataSize) as T;
194
218
  } else if (isInteger<T>()) {
195
- return deserializeInteger<T>(dataPtr, dataPtr + dataSize);
219
+ return isSigned<T>() ? deserializeInteger<T>(dataPtr, dataPtr + dataSize) : deserializeUnsigned<T>(dataPtr, dataPtr + dataSize);
196
220
  } else if (isFloat<T>()) {
197
221
  return deserializeFloat<T>(dataPtr, dataPtr + dataSize);
198
222
  } else if (isNullable<T>() && dataSize == 8 && load<u64>(dataPtr) == NULL_WORD_U64) {
199
- // @ts-expect-error
200
223
  return null;
201
224
  } else if (isString<T>()) {
202
- if (JSON_MODE === JSONMode.NAIVE) {
203
- // @ts-expect-error: type
204
- return deserializeString(dataPtr, dataPtr + dataSize);
205
- } else if (JSON_MODE === JSONMode.SWAR) {
206
- // @ts-expect-error: type
207
- return deserializeString_SWAR(dataPtr, dataPtr + dataSize);
208
- } else if (JSON_MODE === JSONMode.SIMD) {
209
- // @ts-expect-error: type
210
- return deserializeString_SIMD(dataPtr, dataPtr + dataSize);
211
- }
225
+ return deserializeString(dataPtr, dataPtr + dataSize) as T;
212
226
  } else {
213
227
  let type: nonnull<T> = changetype<nonnull<T>>(0);
214
228
  if (type instanceof StaticArray) {
@@ -217,16 +231,41 @@ export namespace JSON {
217
231
  } else if (type instanceof Array) {
218
232
  // @ts-expect-error
219
233
  return inline.always(deserializeArray<nonnull<T>>(dataPtr, dataPtr + dataSize, changetype<usize>(instantiate<T>())));
220
- } else if (type instanceof Set) {
234
+ } else if (type instanceof Int8Array) {
235
+ return deserializeTypedArray<Int8Array>(dataPtr, dataPtr + dataSize, 0) as T;
236
+ } else if (type instanceof Uint8Array) {
237
+ return deserializeTypedArray<Uint8Array>(dataPtr, dataPtr + dataSize, 0) as T;
238
+ } else if (type instanceof Uint8ClampedArray) {
239
+ return deserializeTypedArray<Uint8ClampedArray>(dataPtr, dataPtr + dataSize, 0) as T;
240
+ } else if (type instanceof Int16Array) {
241
+ return deserializeTypedArray<Int16Array>(dataPtr, dataPtr + dataSize, 0) as T;
242
+ } else if (type instanceof Uint16Array) {
243
+ return deserializeTypedArray<Uint16Array>(dataPtr, dataPtr + dataSize, 0) as T;
244
+ } else if (type instanceof Int32Array) {
245
+ return deserializeTypedArray<Int32Array>(dataPtr, dataPtr + dataSize, 0) as T;
246
+ } else if (type instanceof Uint32Array) {
247
+ return deserializeTypedArray<Uint32Array>(dataPtr, dataPtr + dataSize, 0) as T;
248
+ } else if (type instanceof Int64Array) {
249
+ return deserializeTypedArray<Int64Array>(dataPtr, dataPtr + dataSize, 0) as T;
250
+ } else if (type instanceof Uint64Array) {
251
+ return deserializeTypedArray<Uint64Array>(dataPtr, dataPtr + dataSize, 0) as T;
252
+ } else if (type instanceof Float32Array) {
253
+ return deserializeTypedArray<Float32Array>(dataPtr, dataPtr + dataSize, 0) as T;
254
+ } else if (type instanceof Float64Array) {
255
+ return deserializeTypedArray<Float64Array>(dataPtr, dataPtr + dataSize, 0) as T;
256
+ } else if (type instanceof ArrayBuffer) {
257
+ return deserializeArrayBuffer(dataPtr, dataPtr + dataSize, 0) as T;
258
+ } else if (type instanceof Set) {
221
259
  // @ts-expect-error
222
260
  return inline.always(deserializeSet<nonnull<T>>(dataPtr, dataPtr + dataSize, 0));
223
- // @ts-expect-error: Defined by transform
261
+ // @ts-expect-error: Defined by transform
224
262
  } else if (isDefined(type.__DESERIALIZE)) {
225
263
  const out = changetype<nonnull<T>>(__new(offsetof<nonnull<T>>(), idof<nonnull<T>>()));
226
264
  // @ts-expect-error: Defined by transform
227
265
  if (isDefined(type.__INITIALIZE)) out.__INITIALIZE();
228
266
  // @ts-expect-error
229
- return out.__DESERIALIZE(dataPtr, dataPtr + dataSize, out);
267
+ out.__DESERIALIZE(dataPtr, dataPtr + dataSize, out);
268
+ return out;
230
269
  } else if (type instanceof Map) {
231
270
  // @ts-expect-error
232
271
  return inline.always(deserializeMap<nonnull<T>>(dataPtr, dataPtr + dataSize, 0));
@@ -246,11 +285,7 @@ export namespace JSON {
246
285
  // @ts-expect-error
247
286
  return new JSON.Box(parseBox(data, changetype<nonnull<T>>(0).value));
248
287
  } else {
249
- throw new Error(
250
- `Could not deserialize JSON to type '${nameof<T>()}'. ` +
251
- `If this is a custom class, ensure it has the @json decorator: @json class ${nameof<T>()} { ... }. ` +
252
- `Input: "${data.length > 50 ? data.slice(0, 50) + '...' : data}"`
253
- );
288
+ throw new Error(`Could not deserialize JSON to type '${nameof<T>()}'. ` + `If this is a custom class, ensure it has the @json decorator: @json class ${nameof<T>()} { ... }. ` + `Input: "${data.length > 50 ? data.slice(0, 50) + "..." : data}"`);
254
289
  }
255
290
  }
256
291
  }
@@ -353,13 +388,11 @@ export namespace JSON {
353
388
  * @param data - A valid JSON string
354
389
  * @returns A new Raw instance
355
390
  */
356
- // @ts-expect-error: inline
357
391
  @inline static from(data: string): JSON.Raw {
358
392
  return new JSON.Raw(data);
359
393
  }
360
394
  }
361
395
 
362
-
363
396
  /**
364
397
  * Dynamic value container that can hold any JSON-compatible type at runtime.
365
398
  *
@@ -427,14 +460,14 @@ export namespace JSON {
427
460
  // @ts-expect-error: can assume that T is ArrayLike based on previous condition
428
461
  if (isArray<T>() && idof<valueof<T>>() == idof<JSON.Value>()) return JSON.Types.Array;
429
462
  if (value instanceof JSON.Box) return this.getType(value.value);
430
- if (value instanceof u8 || value instanceof i8) return JSON.Types.U8;
431
- if (value instanceof u16 || value instanceof i16) return JSON.Types.U16;
432
- if (value instanceof u32 || value instanceof i32) return JSON.Types.U32;
433
- if (value instanceof u64 || value instanceof i64) return JSON.Types.U64;
434
463
  if (value instanceof i8) return JSON.Types.I8;
435
464
  if (value instanceof i16) return JSON.Types.I16;
436
465
  if (value instanceof i32) return JSON.Types.I32;
437
466
  if (value instanceof i64) return JSON.Types.I64;
467
+ if (value instanceof u8) return JSON.Types.U8;
468
+ if (value instanceof u16) return JSON.Types.U16;
469
+ if (value instanceof u32) return JSON.Types.U32;
470
+ if (value instanceof u64) return JSON.Types.U64;
438
471
  if (value instanceof f32) return JSON.Types.F32;
439
472
  if (value instanceof f64) return JSON.Types.F64;
440
473
  if (value instanceof Map) return JSON.Types.Map;
@@ -468,13 +501,11 @@ export namespace JSON {
468
501
  } else if (isDefined(value.__SERIALIZE) && isManaged<T>(value)) {
469
502
  // @ts-expect-error
470
503
  if (!JSON.Value.METHODS.has(idof<T>())) JSON.Value.METHODS.set(idof<T>(), value.__SERIALIZE.index);
471
- // @ts-expect-error
472
504
  store<usize>(changetype<usize>(this), changetype<usize>(value), STORAGE);
473
505
  } else if (value instanceof JSON.Obj) {
474
506
  store<T>(changetype<usize>(this), value, STORAGE);
475
507
  // @ts-expect-error
476
508
  } else if (isArray<T>() && idof<valueof<T>>() == idof<JSON.Value>()) {
477
- // @ts-expect-error: T satisfies constraints of any[]
478
509
  store<T>(changetype<usize>(this), value, STORAGE);
479
510
  }
480
511
  }
@@ -522,6 +553,14 @@ export namespace JSON {
522
553
  return this.get<u32>().toString();
523
554
  case JSON.Types.U64:
524
555
  return this.get<u64>().toString();
556
+ case JSON.Types.I8:
557
+ return this.get<i8>().toString();
558
+ case JSON.Types.I16:
559
+ return this.get<i16>().toString();
560
+ case JSON.Types.I32:
561
+ return this.get<i32>().toString();
562
+ case JSON.Types.I64:
563
+ return this.get<i64>().toString();
525
564
  case JSON.Types.F32:
526
565
  return this.get<f32>().toString();
527
566
  case JSON.Types.F64:
@@ -560,6 +599,7 @@ export namespace JSON {
560
599
  }
561
600
  }
562
601
 
602
+
563
603
  @unsafe private __visit(cookie: u32): void {
564
604
  if (this.type >= JSON.Types.String) {
565
605
  __visit(load<usize>(changetype<usize>(this), STORAGE), cookie);
@@ -588,15 +628,13 @@ export namespace JSON {
588
628
  */
589
629
  export class Obj {
590
630
  /** Internal storage map */
591
- // @ts-expect-error: type
592
631
  storage: Map<string, JSON.Value> = new Map<string, JSON.Value>();
593
632
 
594
- constructor() { }
633
+ constructor() {}
595
634
 
596
635
  /**
597
636
  * Gets the number of key-value pairs in the object.
598
637
  */
599
- // @ts-expect-error: decorator
600
638
  @inline get size(): i32 {
601
639
  return this.storage.size;
602
640
  }
@@ -606,7 +644,6 @@ export namespace JSON {
606
644
  * @param key - The string key
607
645
  * @param value - The value (will be wrapped in JSON.Value)
608
646
  */
609
- // @ts-expect-error: decorator
610
647
  @inline set<T>(key: string, value: T): void {
611
648
  this.storage.set(key, JSON.Value.from<T>(value));
612
649
  }
@@ -616,7 +653,6 @@ export namespace JSON {
616
653
  * @param key - The key to look up
617
654
  * @returns The JSON.Value or null if not found
618
655
  */
619
- // @ts-expect-error: decorator
620
656
  @inline get(key: string): JSON.Value | null {
621
657
  if (!this.storage.has(key)) return null;
622
658
  return this.storage.get(key);
@@ -627,7 +663,6 @@ export namespace JSON {
627
663
  * @param key - The key to check
628
664
  * @returns true if the key exists
629
665
  */
630
- // @ts-expect-error: decorator
631
666
  @inline has(key: string): bool {
632
667
  return this.storage.has(key);
633
668
  }
@@ -637,7 +672,6 @@ export namespace JSON {
637
672
  * @param key - The key to delete
638
673
  * @returns true if the key was found and deleted
639
674
  */
640
- // @ts-expect-error: decorator
641
675
  @inline delete(key: string): bool {
642
676
  return this.storage.delete(key);
643
677
  }
@@ -646,7 +680,6 @@ export namespace JSON {
646
680
  * Gets all keys in the object.
647
681
  * @returns Array of string keys
648
682
  */
649
- // @ts-expect-error: decorator
650
683
  @inline keys(): string[] {
651
684
  return this.storage.keys();
652
685
  }
@@ -655,7 +688,6 @@ export namespace JSON {
655
688
  * Gets all values in the object.
656
689
  * @returns Array of JSON.Value instances
657
690
  */
658
- // @ts-expect-error: decorator
659
691
  @inline values(): JSON.Value[] {
660
692
  return this.storage.values();
661
693
  }
@@ -664,7 +696,6 @@ export namespace JSON {
664
696
  * Serializes the object to a JSON string.
665
697
  * @returns JSON string representation
666
698
  */
667
- // @ts-expect-error: decorator
668
699
  @inline toString(): string {
669
700
  return JSON.stringify(this);
670
701
  }
@@ -674,14 +705,27 @@ export namespace JSON {
674
705
  * @param value - The value to convert
675
706
  * @returns A new JSON.Obj instance
676
707
  */
677
- // @ts-expect-error: decorator
678
708
  @inline static from<T>(value: T): JSON.Obj {
679
709
  if (value instanceof JSON.Obj) return value;
680
- const out = new JSON.Obj();
681
-
682
710
  if (value instanceof Map) {
711
+ const out = new JSON.Obj();
712
+ if (!isString<indexof<T>>()) {
713
+ throw new Error("JSON.Obj.from only supports maps with string keys");
714
+ }
715
+
716
+ const keys = value.keys();
717
+ const values = value.values();
718
+ for (let i = 0; i < keys.length; i++) {
719
+ out.set(unchecked(keys[i]), unchecked(values[i]));
720
+ }
721
+ return out;
683
722
  }
684
- return out;
723
+
724
+ const parsed = JSON.parse<JSON.Value>(JSON.stringify(value));
725
+ if (parsed.type != JSON.Types.Object) {
726
+ throw new Error("JSON.Obj.from expects a value that serializes to a JSON object");
727
+ }
728
+ return parsed.get<JSON.Obj>();
685
729
  }
686
730
  }
687
731
  /**
@@ -689,7 +733,7 @@ export namespace JSON {
689
733
  */
690
734
  export class Box<T> {
691
735
  constructor(public value: T) {
692
- if (!isInteger<T>() && !isFloat<T>()) ERROR("JSON.Box should only hold primitive types!");
736
+ if (!isInteger<T>() && !isFloat<T>() && !isBoolean<T>()) ERROR("JSON.Box should only hold primitive types!");
693
737
  }
694
738
  /**
695
739
  * Set the internal value of Box to new value
@@ -716,7 +760,7 @@ export namespace JSON {
716
760
  if (value.type === JSON.Types.Null) return null;
717
761
  const v = value.type === JSON.Types.F64 ? value.get<f64>() : value.get<T>();
718
762
  // @ts-expect-error
719
- return new Box(isInteger<T>() || isFloat<T>() ? <T>(v) : v);
763
+ return new Box(isInteger<T>() || isFloat<T>() ? <T>v : v);
720
764
  }
721
765
  /**
722
766
  * Creates a reference to a primitive type
@@ -758,19 +802,12 @@ export namespace JSON {
758
802
  } else if (isFloat<T>(data)) {
759
803
  // @ts-expect-error
760
804
  serializeFloat<T>(data);
761
- // @ts-expect-error: Function is generated by transform
762
805
  } else if (isNullable<T>() && changetype<usize>(data) == <usize>0) {
763
806
  bs.proposeSize(8);
764
807
  store<u64>(bs.offset, NULL_WORD_U64);
765
808
  bs.offset += 8;
766
809
  } else if (isString<nonnull<T>>()) {
767
- if (JSON_MODE === JSONMode.SIMD) {
768
- serializeString_SIMD(data as string);
769
- } else if (JSON_MODE === JSONMode.SWAR) {
770
- serializeString_SWAR(data as string);
771
- } else {
772
- serializeString(data as string);
773
- }
810
+ serializeString(data as string);
774
811
  // @ts-expect-error: Supplied by transform
775
812
  } else if (isDefined(data.__SERIALIZE_CUSTOM)) {
776
813
  // @ts-expect-error
@@ -788,6 +825,28 @@ export namespace JSON {
788
825
  } else if (data instanceof StaticArray) {
789
826
  // @ts-expect-error
790
827
  serializeStaticArray(changetype<nonnull<T>>(data));
828
+ } else if (data instanceof Int8Array) {
829
+ serializeTypedArray<Int8Array>(data);
830
+ } else if (data instanceof Uint8Array) {
831
+ serializeTypedArray<Uint8Array>(data);
832
+ } else if (data instanceof Uint8ClampedArray) {
833
+ serializeTypedArray<Uint8ClampedArray>(data);
834
+ } else if (data instanceof Int16Array) {
835
+ serializeTypedArray<Int16Array>(data);
836
+ } else if (data instanceof Uint16Array) {
837
+ serializeTypedArray<Uint16Array>(data);
838
+ } else if (data instanceof Int32Array) {
839
+ serializeTypedArray<Int32Array>(data);
840
+ } else if (data instanceof Uint32Array) {
841
+ serializeTypedArray<Uint32Array>(data);
842
+ } else if (data instanceof Int64Array) {
843
+ serializeTypedArray<Int64Array>(data);
844
+ } else if (data instanceof Uint64Array) {
845
+ serializeTypedArray<Uint64Array>(data);
846
+ } else if (data instanceof Float32Array) {
847
+ serializeTypedArray<Float32Array>(data);
848
+ } else if (data instanceof Float64Array) {
849
+ serializeTypedArray<Float64Array>(data);
791
850
  } else if (data instanceof Set) {
792
851
  // @ts-expect-error
793
852
  serializeSet(changetype<nonnull<T>>(data));
@@ -803,14 +862,33 @@ export namespace JSON {
803
862
  } else if (data instanceof JSON.Box) {
804
863
  __serialize(data.value);
805
864
  } else {
806
- throw new Error(
807
- `Could not serialize data of type '${nameof<T>()}'. ` +
808
- `If this is a custom class, add the @json decorator: @json class ${nameof<T>()} { ... }. ` +
809
- `Supported types: primitives, string, Array, Map, Date, and @json decorated classes.`
810
- );
865
+ throw new Error(`Could not serialize data of type '${nameof<T>()}'. ` + `If this is a custom class, add the @json decorator: @json class ${nameof<T>()} { ... }. ` + `Supported types: primitives, string, Array, StaticArray, TypedArray, Map, Date, and @json decorated classes. ` + `For ArrayBuffer, use JSON.stringifyArrayBuffer(changetype<usize>(...)).`);
811
866
  }
812
867
  }
813
868
 
869
+
870
+ @inline export function __serializeArrayBufferUnsafe(dataStart: usize): void {
871
+ serializeArrayBufferUnsafe(dataStart, changetype<OBJECT>(dataStart - TOTAL_OVERHEAD).rtSize);
872
+ }
873
+
874
+
875
+ @inline export function __serializeArrayBuffer(data: ArrayBuffer): void {
876
+ const dataStart = changetype<usize>(data);
877
+ serializeArrayBufferUnsafe(dataStart, changetype<OBJECT>(dataStart - TOTAL_OVERHEAD).rtSize);
878
+ }
879
+
880
+
881
+ @inline export function parseArrayBuffer(data: string): ArrayBuffer {
882
+ const dataSize = bytes(data);
883
+ const dataPtr = changetype<usize>(data);
884
+ return deserializeArrayBuffer(dataPtr, dataPtr + dataSize, 0);
885
+ }
886
+
887
+
888
+ @inline export function __deserializeArrayBuffer(srcStart: usize, srcEnd: usize, dst: usize = 0): ArrayBuffer {
889
+ return deserializeArrayBuffer(srcStart, srcEnd, dst);
890
+ }
891
+
814
892
  /**
815
893
  * Deserializes JSON data directly from the buffer.
816
894
  * Should only be used if you know what you are doing.
@@ -824,16 +902,14 @@ export namespace JSON {
824
902
  // @ts-expect-error: type
825
903
  return deserializeBoolean(srcStart, srcEnd);
826
904
  } else if (isInteger<T>()) {
827
- return atoi<T>(srcStart, srcEnd);
905
+ return isSigned<T>() ? deserializeInteger<T>(srcStart, srcEnd) : deserializeUnsigned<T>(srcStart, srcEnd);
828
906
  } else if (isFloat<T>()) {
829
907
  return deserializeFloat<T>(srcStart, srcEnd);
830
908
  } else if (isString<T>()) {
831
909
  if (srcEnd - srcStart < 4) throw new Error("Cannot parse data as string because it was formatted incorrectly!");
832
910
 
833
- // @ts-expect-error: type
834
- return deserializeString(srcStart, srcEnd);
911
+ return deserializeString(srcStart, srcEnd) as T;
835
912
  } else if (isNullable<T>() && srcEnd - srcStart == 8 && load<u64>(srcStart) == NULL_WORD_U64) {
836
- // @ts-expect-error
837
913
  return null;
838
914
  } else {
839
915
  let type: nonnull<T> = changetype<nonnull<T>>(0);
@@ -843,16 +919,41 @@ export namespace JSON {
843
919
  } else if (type instanceof Array) {
844
920
  // @ts-expect-error: type
845
921
  return deserializeArray<T>(srcStart, srcEnd, dst);
922
+ } else if (type instanceof Int8Array) {
923
+ return deserializeTypedArray<Int8Array>(srcStart, srcEnd, dst) as T;
924
+ } else if (type instanceof Uint8Array) {
925
+ return deserializeTypedArray<Uint8Array>(srcStart, srcEnd, dst) as T;
926
+ } else if (type instanceof Uint8ClampedArray) {
927
+ return deserializeTypedArray<Uint8ClampedArray>(srcStart, srcEnd, dst) as T;
928
+ } else if (type instanceof Int16Array) {
929
+ return deserializeTypedArray<Int16Array>(srcStart, srcEnd, dst) as T;
930
+ } else if (type instanceof Uint16Array) {
931
+ return deserializeTypedArray<Uint16Array>(srcStart, srcEnd, dst) as T;
932
+ } else if (type instanceof Int32Array) {
933
+ return deserializeTypedArray<Int32Array>(srcStart, srcEnd, dst) as T;
934
+ } else if (type instanceof Uint32Array) {
935
+ return deserializeTypedArray<Uint32Array>(srcStart, srcEnd, dst) as T;
936
+ } else if (type instanceof Int64Array) {
937
+ return deserializeTypedArray<Int64Array>(srcStart, srcEnd, dst) as T;
938
+ } else if (type instanceof Uint64Array) {
939
+ return deserializeTypedArray<Uint64Array>(srcStart, srcEnd, dst) as T;
940
+ } else if (type instanceof Float32Array) {
941
+ return deserializeTypedArray<Float32Array>(srcStart, srcEnd, dst) as T;
942
+ } else if (type instanceof Float64Array) {
943
+ return deserializeTypedArray<Float64Array>(srcStart, srcEnd, dst) as T;
944
+ } else if (type instanceof ArrayBuffer) {
945
+ return deserializeArrayBuffer(srcStart, srcEnd, dst) as T;
846
946
  } else if (type instanceof Set) {
847
947
  // @ts-expect-error: type
848
948
  return deserializeSet<T>(srcStart, srcEnd, dst);
849
- // @ts-expect-error: Defined by transform
949
+ // @ts-expect-error: Defined by transform
850
950
  } else if (isDefined(type.__DESERIALIZE)) {
851
951
  const out = changetype<nonnull<T>>(dst || __new(offsetof<nonnull<T>>(), idof<nonnull<T>>()));
852
952
  // @ts-expect-error: Defined by transform
853
953
  if (isDefined(type.__INITIALIZE)) out.__INITIALIZE();
854
954
  // @ts-expect-error: Defined by transform
855
- return out.__DESERIALIZE(srcStart, srcEnd, out);
955
+ out.__DESERIALIZE(srcStart, srcEnd, out);
956
+ return out;
856
957
  } else if (type instanceof Map) {
857
958
  // @ts-expect-error: type
858
959
  return deserializeMap<T>(srcStart, srcEnd, dst);
@@ -874,11 +975,7 @@ export namespace JSON {
874
975
  }
875
976
  }
876
977
  const snippet = ptrToStr(srcStart, srcEnd);
877
- throw new Error(
878
- `Could not deserialize JSON to type '${nameof<T>()}'. ` +
879
- `If this is a custom class, ensure it has the @json decorator: @json class ${nameof<T>()} { ... }. ` +
880
- `Input: "${snippet.length > 50 ? snippet.slice(0, 50) + '...' : snippet}"`
881
- );
978
+ throw new Error(`Could not deserialize JSON to type '${nameof<T>()}'. ` + `If this is a custom class, ensure it has the @json decorator: @json class ${nameof<T>()} { ... }. ` + `Input: "${snippet.length > 50 ? snippet.slice(0, 50) + "..." : snippet}"`);
882
979
  }
883
980
  export namespace Util {
884
981
  // @ts-expect-error: decorator
@@ -929,7 +1026,6 @@ export namespace JSON {
929
1026
  if (out) {
930
1027
  out = changetype<string>(__renew(changetype<usize>(out), sizeof<T>() << 3));
931
1028
 
932
- // @ts-expect-error
933
1029
  const bytes = itoa_buffered(changetype<usize>(out), data) << 1;
934
1030
  return (out = changetype<string>(__renew(changetype<usize>(out), bytes)));
935
1031
  }
@@ -938,12 +1034,10 @@ export namespace JSON {
938
1034
  if (out) {
939
1035
  out = changetype<string>(__renew(changetype<usize>(out), 64));
940
1036
 
941
- // @ts-expect-error
942
1037
  const bytes = dtoa_buffered(changetype<usize>(out), data) << 1;
943
1038
  return (out = changetype<string>(__renew(changetype<usize>(out), bytes)));
944
1039
  }
945
1040
  return data.toString();
946
- // @ts-expect-error: Function is generated by transform
947
1041
  } else if (isNullable<T>() && changetype<usize>(data) == <usize>0) {
948
1042
  if (out) {
949
1043
  out = changetype<string>(__renew(changetype<usize>(out), 8));
@@ -951,15 +1045,8 @@ export namespace JSON {
951
1045
  return out;
952
1046
  }
953
1047
  return NULL_WORD;
954
- // @ts-expect-error
955
1048
  } else if (isString<nonnull<T>>()) {
956
- if (JSON_MODE === JSONMode.SIMD) {
957
- serializeString_SIMD(data as string);
958
- } else if (JSON_MODE === JSONMode.SWAR) {
959
- serializeString_SWAR(data as string);
960
- } else {
961
- serializeString(data as string);
962
- }
1049
+ serializeString(data as string);
963
1050
  return bs.cpyOut<string>();
964
1051
  // @ts-expect-error: Supplied by transform
965
1052
  } else if (isDefined(data.__SERIALIZE)) {
@@ -967,7 +1054,6 @@ export namespace JSON {
967
1054
  // @ts-expect-error
968
1055
  inline.always(data.__SERIALIZE(changetype<usize>(data)));
969
1056
  return bs.cpyOut<string>();
970
- // @ts-expect-error: Supplied by transform
971
1057
  } else if (data instanceof Date) {
972
1058
  out = out ? changetype<string>(__renew(changetype<usize>(out), 52)) : changetype<string>(__new(52, idof<string>()));
973
1059
 
@@ -1010,11 +1096,7 @@ export namespace JSON {
1010
1096
  } else if (data instanceof JSON.Box) {
1011
1097
  return JSON.internal.stringify(data.value);
1012
1098
  } else {
1013
- throw new Error(
1014
- `Could not serialize data of type '${nameof<T>()}'. ` +
1015
- `If this is a custom class, add the @json decorator: @json class ${nameof<T>()} { ... }. ` +
1016
- `Supported types: primitives, string, Array, Map, Date, and @json decorated classes.`
1017
- );
1099
+ throw new Error(`Could not serialize data of type '${nameof<T>()}'. ` + `If this is a custom class, add the @json decorator: @json class ${nameof<T>()} { ... }. ` + `Supported types: primitives, string, Array, Map, Date, and @json decorated classes.`);
1018
1100
  }
1019
1101
  }
1020
1102
  }
@@ -1023,7 +1105,7 @@ export namespace JSON {
1023
1105
  export enum JSONMode {
1024
1106
  SWAR = 0,
1025
1107
  SIMD = 1,
1026
- NAIVE = 2
1108
+ NAIVE = 2,
1027
1109
  }
1028
1110
 
1029
1111
  // @ts-expect-error: decorator