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
@@ -1,6 +1,6 @@
1
1
  import { JSON } from "../..";
2
2
  import { BACK_SLASH, COMMA, CHAR_F, BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE, BRACE_RIGHT, BRACKET_RIGHT, CHAR_T, COLON } from "../../custom/chars";
3
- import { isSpace } from "../../util";
3
+ import { isSpace, isUnescapedQuote, scanStringEnd } from "../../util";
4
4
 
5
5
  // @ts-ignore: Decorator is valid here
6
6
  @inline function normalizeQuotes<T>(start: usize, end: usize): T {
@@ -30,7 +30,7 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
30
30
  while (srcStart < srcEnd) {
31
31
  let code = load<u16>(srcStart); // while (isSpace(code)) code = load<u16>(srcStart += 2);
32
32
  if (keyStart == 0) {
33
- if (code == QUOTE && load<u16>(srcStart - 2) !== BACK_SLASH) {
33
+ if (code == QUOTE && isUnescapedQuote(srcStart)) {
34
34
  if (isKey) {
35
35
  keyStart = lastIndex;
36
36
  keyEnd = srcStart;
@@ -50,21 +50,13 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
50
50
  } else {
51
51
  if (code == QUOTE) {
52
52
  lastIndex = srcStart;
53
+ srcStart = scanStringEnd(srcStart, srcEnd);
54
+ if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
55
+ // @ts-ignore: type
56
+ out.set(normalizeQuotes<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, srcStart + 2));
53
57
  srcStart += 2;
54
- while (srcStart < srcEnd) {
55
- const code = load<u16>(srcStart);
56
- if (code == QUOTE && load<u16>(srcStart - 2) !== BACK_SLASH) {
57
- // console.log("Value (string): " + ptrToStr(lastIndex, srcStart + 2));
58
- // @ts-ignore: type
59
- out.set(normalizeQuotes<indexof<T>>(keyStart, keyEnd), JSON.__deserialize<valueof<T>>(lastIndex, srcStart + 2));
60
- // while (isSpace(load<u16>(srcStart))) srcStart += 2;
61
- srcStart += 4;
62
- // console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
63
- keyStart = 0;
64
- break;
65
- }
66
- srcStart += 2;
67
- }
58
+ keyStart = 0;
59
+ continue;
68
60
  } else if (code - 48 <= 9 || code == 45) {
69
61
  lastIndex = srcStart;
70
62
  srcStart += 2;
@@ -91,8 +83,8 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
91
83
  while (srcStart < srcEnd) {
92
84
  const code = load<u16>(srcStart);
93
85
  if (code == QUOTE) {
94
- srcStart += 2;
95
- while (!(load<u16>(srcStart) == QUOTE && load<u16>(srcStart - 2) != BACK_SLASH)) srcStart += 2;
86
+ srcStart = scanStringEnd(srcStart, srcEnd);
87
+ if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
96
88
  } else if (code == BRACE_RIGHT) {
97
89
  if (--depth == 0) {
98
90
  // console.log("Value (object): " + ptrToStr(lastIndex, srcStart + 2));
@@ -114,7 +106,10 @@ export function deserializeMap<T extends Map<any, any>>(srcStart: usize, srcEnd:
114
106
  srcStart += 2;
115
107
  while (srcStart < srcEnd) {
116
108
  const code = load<u16>(srcStart);
117
- if (code == BRACKET_RIGHT) {
109
+ if (code == QUOTE) {
110
+ srcStart = scanStringEnd(srcStart, srcEnd);
111
+ if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
112
+ } else if (code == BRACKET_RIGHT) {
118
113
  if (--depth == 0) {
119
114
  // console.log("Value (array): " + ptrToStr(lastIndex, srcStart + 2));
120
115
  // @ts-ignore: type
@@ -1,13 +1,13 @@
1
1
  import { JSON } from "../..";
2
2
  import { bs } from "../../../lib/as-bs";
3
3
  import { BACK_SLASH, COMMA, CHAR_F, BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE, BRACE_RIGHT, BRACKET_RIGHT, CHAR_T, COLON } from "../../custom/chars";
4
- import { isSpace } from "../../util";
4
+ import { isSpace, isUnescapedQuote, scanStringEnd } from "../../util";
5
5
  import { ptrToStr } from "../../util/ptrToStr";
6
6
  import { deserializeString_SWAR } from "../swar/string";
7
7
  import { deserializeArbitrary } from "./arbitrary";
8
8
  import { deserializeArray } from "./array";
9
9
  import { deserializeBoolean } from "./bool";
10
- import { deserializeFloat } from "./float";
10
+ import { deserializeFloat } from "../float";
11
11
  import { deserializeString } from "./string";
12
12
 
13
13
  export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): JSON.Obj {
@@ -30,7 +30,7 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
30
30
  while (srcStart < srcEnd) {
31
31
  let code = load<u16>(srcStart); // while (isSpace(code)) code = load<u16>(srcStart += 2);
32
32
  if (keyStart == 0) {
33
- if (code == QUOTE && load<u16>(srcStart - 2) !== BACK_SLASH) {
33
+ if (code == QUOTE && isUnescapedQuote(srcStart)) {
34
34
  if (isKey) {
35
35
  keyStart = lastIndex;
36
36
  keyEnd = srcStart;
@@ -50,20 +50,12 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
50
50
  } else {
51
51
  if (code == QUOTE) {
52
52
  lastIndex = srcStart;
53
+ srcStart = scanStringEnd(srcStart, srcEnd);
54
+ if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
55
+ out.set(ptrToStr(keyStart, keyEnd), deserializeString(lastIndex, srcStart + 2));
53
56
  srcStart += 2;
54
- while (srcStart < srcEnd) {
55
- const code = load<u16>(srcStart);
56
- if (code == QUOTE && load<u16>(srcStart - 2) !== BACK_SLASH) {
57
- // console.log("Value (string):-" + deserializeString_SWAR(lastIndex, srcStart + 2, 0) + "-");
58
- out.set(ptrToStr(keyStart, keyEnd), deserializeString(lastIndex, srcStart + 2));
59
- // while (isSpace(load<u16>(srcStart))) srcStart += 2;
60
- srcStart += 4;
61
- // console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
62
- keyStart = 0;
63
- break;
64
- }
65
- srcStart += 2;
66
- }
57
+ keyStart = 0;
58
+ continue;
67
59
  } else if (code - 48 <= 9 || code == 45) {
68
60
  lastIndex = srcStart;
69
61
  srcStart += 2;
@@ -89,8 +81,8 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
89
81
  while (srcStart < srcEnd) {
90
82
  const code = load<u16>(srcStart);
91
83
  if (code == QUOTE) {
92
- srcStart += 2;
93
- while (!(load<u16>(srcStart) == QUOTE && load<u16>(srcStart - 2) != BACK_SLASH)) srcStart += 2;
84
+ srcStart = scanStringEnd(srcStart, srcEnd);
85
+ if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
94
86
  } else if (code == BRACE_RIGHT) {
95
87
  if (--depth == 0) {
96
88
  // console.log("Value (object): " + ptrToStr(lastIndex, srcStart + 2));
@@ -111,7 +103,10 @@ export function deserializeObject(srcStart: usize, srcEnd: usize, dst: usize): J
111
103
  srcStart += 2;
112
104
  while (srcStart < srcEnd) {
113
105
  const code = load<u16>(srcStart);
114
- if (code == BRACKET_RIGHT) {
106
+ if (code == QUOTE) {
107
+ srcStart = scanStringEnd(srcStart, srcEnd);
108
+ if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
109
+ } else if (code == BRACKET_RIGHT) {
115
110
  if (--depth == 0) {
116
111
  // console.log("Value (array): " + ptrToStr(lastIndex, srcStart + 2));
117
112
  out.set(ptrToStr(keyStart, keyEnd), deserializeArray<JSON.Value[]>(lastIndex, (srcStart += 2), 0));
@@ -1,6 +1,6 @@
1
1
  import { JSON } from "../..";
2
2
  import { BACK_SLASH, BRACKET_LEFT, BRACKET_RIGHT, BRACE_LEFT, BRACE_RIGHT, CHAR_F, CHAR_N, CHAR_T, COMMA, QUOTE } from "../../custom/chars";
3
- import { isSpace, atoi } from "../../util";
3
+ import { isSpace, atoi, isUnescapedQuote, scanStringEnd } from "../../util";
4
4
 
5
5
  export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
6
6
  const out = changetype<nonnull<T>>(dst || changetype<usize>(instantiate<T>()));
@@ -25,7 +25,7 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
25
25
  srcStart += 2;
26
26
  while (srcStart < srcEnd) {
27
27
  const c = load<u16>(srcStart);
28
- if (c == QUOTE && load<u16>(srcStart - 2) != BACK_SLASH) {
28
+ if (c == QUOTE && isUnescapedQuote(srcStart)) {
29
29
  // @ts-ignore: type
30
30
  out.add(JSON.__deserialize<indexof<T>>(lastIndex, srcStart + 2));
31
31
  srcStart += 2;
@@ -34,7 +34,7 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
34
34
  srcStart += 2;
35
35
  }
36
36
  }
37
- // @ts-ignore: type
37
+ // @ts-ignore: type
38
38
  } else if (isBoolean<indexof<T>>()) {
39
39
  if (code == CHAR_T) {
40
40
  // @ts-ignore: type
@@ -45,7 +45,7 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
45
45
  out.add(<indexof<T>>false);
46
46
  srcStart += 10;
47
47
  }
48
- // @ts-ignore: type
48
+ // @ts-ignore: type
49
49
  } else if (isInteger<indexof<T>>()) {
50
50
  if (code - 48 <= 9 || code == 45) {
51
51
  const lastIndex = srcStart;
@@ -60,7 +60,7 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
60
60
  srcStart += 2;
61
61
  }
62
62
  }
63
- // @ts-ignore: type
63
+ // @ts-ignore: type
64
64
  } else if (isFloat<indexof<T>>()) {
65
65
  if (code - 48 <= 9 || code == 45) {
66
66
  const lastIndex = srcStart;
@@ -75,7 +75,7 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
75
75
  srcStart += 2;
76
76
  }
77
77
  }
78
- // @ts-ignore: type
78
+ // @ts-ignore: type
79
79
  } else if (isManaged<indexof<T>>() || isReference<indexof<T>>()) {
80
80
  // @ts-ignore: type
81
81
  const type = changetype<nonnull<indexof<T>>>(0);
@@ -87,8 +87,8 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
87
87
  while (srcStart < srcEnd) {
88
88
  const c = load<u16>(srcStart);
89
89
  if (c == QUOTE) {
90
- srcStart += 2;
91
- while (!(load<u16>(srcStart) == QUOTE && load<u16>(srcStart - 2) != BACK_SLASH)) srcStart += 2;
90
+ srcStart = scanStringEnd(srcStart, srcEnd);
91
+ if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON set");
92
92
  } else if (c == BRACE_RIGHT) {
93
93
  if (--depth == 0) {
94
94
  srcStart += 2;
@@ -127,7 +127,7 @@ export function deserializeSet<T extends Set<any>>(srcStart: usize, srcEnd: usiz
127
127
  srcStart += 2;
128
128
  while (srcStart < srcEnd) {
129
129
  const c = load<u16>(srcStart);
130
- if (c == QUOTE && load<u16>(srcStart - 2) != BACK_SLASH) {
130
+ if (c == QUOTE && isUnescapedQuote(srcStart)) {
131
131
  // @ts-ignore: type
132
132
  out.add(JSON.__deserialize<indexof<T>>(lastIndex, srcStart + 2));
133
133
  srcStart += 2;
@@ -1,7 +1,11 @@
1
1
  import { BRACKET_LEFT, BRACKET_RIGHT } from "../../../custom/chars";
2
2
  import { JSON } from "../../../";
3
3
 
4
- export function deserializeStaticArrayArray<T extends StaticArray<any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
4
+ export function deserializeStaticArrayArray<T extends StaticArray<any>>(
5
+ srcStart: usize,
6
+ srcEnd: usize,
7
+ dst: usize,
8
+ ): T {
5
9
  let count: i32 = 0;
6
10
  let depth: u32 = 0;
7
11
  let ptr = srcStart + 2;
@@ -15,7 +19,7 @@ export function deserializeStaticArrayArray<T extends StaticArray<any>>(srcStart
15
19
  ptr += 2;
16
20
  }
17
21
 
18
- const outSize = <usize>count << alignof<valueof<T>>();
22
+ const outSize = count << (alignof<valueof<T>>());
19
23
  const out = changetype<nonnull<T>>(dst || __new(outSize, idof<T>()));
20
24
 
21
25
  // Second pass: populate values
@@ -28,7 +32,12 @@ export function deserializeStaticArrayArray<T extends StaticArray<any>>(srcStart
28
32
  if (code == BRACKET_LEFT && depth++ == 0) {
29
33
  lastIndex = srcStart;
30
34
  } else if (code == BRACKET_RIGHT && --depth == 0) {
31
- unchecked((out[index++] = JSON.__deserialize<valueof<T>>(lastIndex, srcStart + 2)));
35
+ unchecked(
36
+ (out[index++] = JSON.__deserialize<valueof<T>>(
37
+ lastIndex,
38
+ srcStart + 2,
39
+ )),
40
+ );
32
41
  }
33
42
  srcStart += 2;
34
43
  }
@@ -1,4 +1,8 @@
1
- export function deserializeStaticArrayBoolean<T extends StaticArray<any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
1
+ export function deserializeStaticArrayBoolean<T extends StaticArray<any>>(
2
+ srcStart: usize,
3
+ srcEnd: usize,
4
+ dst: usize,
5
+ ): T {
2
6
  // First pass: count elements using same logic as Array deserializer
3
7
  let count: i32 = 0;
4
8
  let ptr = srcStart + 2; // skip [
@@ -16,7 +20,7 @@ export function deserializeStaticArrayBoolean<T extends StaticArray<any>>(srcSta
16
20
  }
17
21
 
18
22
  // Allocate StaticArray with correct size
19
- const outSize = <usize>count << alignof<valueof<T>>();
23
+ const outSize = count << (alignof<valueof<T>>());
20
24
  const out = changetype<nonnull<T>>(dst || __new(outSize, idof<T>()));
21
25
 
22
26
  // Second pass: populate values
@@ -2,7 +2,11 @@ import { isSpace } from "../../../util";
2
2
  import { COMMA, BRACKET_RIGHT } from "../../../custom/chars";
3
3
  import { JSON } from "../../..";
4
4
 
5
- export function deserializeStaticArrayFloat<T extends StaticArray<any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
5
+ export function deserializeStaticArrayFloat<T extends StaticArray<any>>(
6
+ srcStart: usize,
7
+ srcEnd: usize,
8
+ dst: usize,
9
+ ): T {
6
10
  let count: i32 = 0;
7
11
  let ptr = srcStart;
8
12
  while (ptr < srcEnd) {
@@ -19,7 +23,7 @@ export function deserializeStaticArrayFloat<T extends StaticArray<any>>(srcStart
19
23
  ptr += 2;
20
24
  }
21
25
 
22
- const outSize = <usize>count << alignof<valueof<T>>();
26
+ const outSize = count << (alignof<valueof<T>>());
23
27
  const out = changetype<nonnull<T>>(dst || __new(outSize, idof<T>()));
24
28
 
25
29
  let index = 0;
@@ -31,7 +35,12 @@ export function deserializeStaticArrayFloat<T extends StaticArray<any>>(srcStart
31
35
  while (srcStart < srcEnd) {
32
36
  const code = load<u16>(srcStart);
33
37
  if (code == COMMA || code == BRACKET_RIGHT || isSpace(code)) {
34
- unchecked((out[index++] = JSON.__deserialize<valueof<T>>(lastIndex, srcStart)));
38
+ unchecked(
39
+ (out[index++] = JSON.__deserialize<valueof<T>>(
40
+ lastIndex,
41
+ srcStart,
42
+ )),
43
+ );
35
44
  break;
36
45
  }
37
46
  srcStart += 2;
@@ -1,7 +1,11 @@
1
1
  import { atoi, isSpace } from "../../../util";
2
2
  import { COMMA, BRACKET_RIGHT } from "../../../custom/chars";
3
3
 
4
- export function deserializeStaticArrayInteger<T extends StaticArray<any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
4
+ export function deserializeStaticArrayInteger<T extends StaticArray<any>>(
5
+ srcStart: usize,
6
+ srcEnd: usize,
7
+ dst: usize,
8
+ ): T {
5
9
  let count: i32 = 0;
6
10
  let ptr = srcStart;
7
11
  while (ptr < srcEnd) {
@@ -18,7 +22,7 @@ export function deserializeStaticArrayInteger<T extends StaticArray<any>>(srcSta
18
22
  ptr += 2;
19
23
  }
20
24
 
21
- const outSize = <usize>count << alignof<valueof<T>>();
25
+ const outSize = count << (alignof<valueof<T>>());
22
26
  const out = changetype<nonnull<T>>(dst || __new(outSize, idof<T>()));
23
27
 
24
28
  // Second pass: populate values
@@ -1,5 +1,6 @@
1
1
  import { JSON } from "../../..";
2
- import { BACK_SLASH, QUOTE } from "../../../custom/chars";
2
+ import { QUOTE } from "../../../custom/chars";
3
+ import { isUnescapedQuote } from "../../../util";
3
4
 
4
5
  export function deserializeStaticArrayString(srcStart: usize, srcEnd: usize, dst: usize): StaticArray<string> {
5
6
  // First pass: count elements using same logic as Array deserializer
@@ -11,7 +12,7 @@ export function deserializeStaticArrayString(srcStart: usize, srcEnd: usize, dst
11
12
  if (code == QUOTE) {
12
13
  if (!inString) {
13
14
  inString = true;
14
- } else if (load<u16>(ptr - 2) != BACK_SLASH) {
15
+ } else if (isUnescapedQuote(ptr)) {
15
16
  count++;
16
17
  inString = false;
17
18
  }
@@ -20,7 +21,7 @@ export function deserializeStaticArrayString(srcStart: usize, srcEnd: usize, dst
20
21
  }
21
22
 
22
23
  // Allocate StaticArray with correct size
23
- const outSize = <usize>count << alignof<string>();
24
+ const outSize = (<usize>count) << alignof<string>();
24
25
  const out = changetype<StaticArray<string>>(dst || __new(outSize, idof<StaticArray<string>>()));
25
26
 
26
27
  // Second pass: populate values
@@ -33,7 +34,7 @@ export function deserializeStaticArrayString(srcStart: usize, srcEnd: usize, dst
33
34
  if (!inString) {
34
35
  inString = true;
35
36
  lastPos = srcStart;
36
- } else if (load<u16>(srcStart - 2) != BACK_SLASH) {
37
+ } else if (isUnescapedQuote(srcStart)) {
37
38
  unchecked((out[index++] = JSON.__deserialize<string>(lastPos, srcStart + 2)));
38
39
  inString = false;
39
40
  }
@@ -1,15 +1,33 @@
1
- import { BRACE_LEFT, BRACE_RIGHT, BRACKET_LEFT, BRACKET_RIGHT } from "../../../custom/chars";
1
+ import {
2
+ BRACE_LEFT,
3
+ BRACE_RIGHT,
4
+ BRACKET_LEFT,
5
+ BRACKET_RIGHT,
6
+ } from "../../../custom/chars";
2
7
  import { JSON } from "../../..";
3
8
  import { isSpace } from "util/string";
4
9
 
5
- export function deserializeStaticArrayStruct<T extends StaticArray<any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
10
+ export function deserializeStaticArrayStruct<T extends StaticArray<any>>(
11
+ srcStart: usize,
12
+ srcEnd: usize,
13
+ dst: usize,
14
+ ): T {
6
15
  while (srcStart < srcEnd && isSpace(load<u16>(srcStart))) srcStart += 2;
7
16
  while (srcEnd > srcStart && isSpace(load<u16>(srcEnd - 2))) srcEnd -= 2;
8
17
 
9
- if (srcStart - srcEnd == 0) throw new Error("Input string had zero length or was all whitespace");
18
+ if (srcStart - srcEnd == 0)
19
+ throw new Error("Input string had zero length or was all whitespace");
10
20
 
11
- if (load<u16>(srcStart) != BRACKET_LEFT) throw new Error("Expected '[' at start of object at position " + (srcEnd - srcStart).toString());
12
- if (load<u16>(srcEnd - 2) != BRACKET_RIGHT) throw new Error("Expected ']' at end of object at position " + (srcEnd - srcStart).toString());
21
+ if (load<u16>(srcStart) != BRACKET_LEFT)
22
+ throw new Error(
23
+ "Expected '[' at start of object at position " +
24
+ (srcEnd - srcStart).toString(),
25
+ );
26
+ if (load<u16>(srcEnd - 2) != BRACKET_RIGHT)
27
+ throw new Error(
28
+ "Expected ']' at end of object at position " +
29
+ (srcEnd - srcStart).toString(),
30
+ );
13
31
 
14
32
  // First pass: count elements using same logic as Array deserializer
15
33
  let count: i32 = 0;
@@ -26,7 +44,7 @@ export function deserializeStaticArrayStruct<T extends StaticArray<any>>(srcStar
26
44
  }
27
45
 
28
46
  // Allocate StaticArray with correct size
29
- const outSize = <usize>count << alignof<valueof<T>>();
47
+ const outSize = count << (alignof<valueof<T>>());
30
48
  const out = changetype<nonnull<T>>(dst || __new(outSize, idof<T>()));
31
49
 
32
50
  // Second pass: populate values
@@ -38,7 +56,12 @@ export function deserializeStaticArrayStruct<T extends StaticArray<any>>(srcStar
38
56
  if (code == BRACE_LEFT && depth++ == 0) {
39
57
  lastIndex = srcStart;
40
58
  } else if (code == BRACE_RIGHT && --depth == 0) {
41
- unchecked((out[index++] = JSON.__deserialize<valueof<T>>(lastIndex, (srcStart += 2))));
59
+ unchecked(
60
+ (out[index++] = JSON.__deserialize<valueof<T>>(
61
+ lastIndex,
62
+ (srcStart += 2),
63
+ )),
64
+ );
42
65
  }
43
66
  srcStart += 2;
44
67
  }
@@ -1,28 +1,72 @@
1
- import { deserializeStaticArrayInteger } from "./staticarray/integer";
2
- import { deserializeStaticArrayFloat } from "./staticarray/float";
1
+ import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
2
+ import { JSON } from "../..";
3
+ import { deserializeArbitraryArray } from "./array/arbitrary";
4
+ import { deserializeArrayArray } from "./array/array";
5
+ import { deserializeBooleanArray } from "./array/bool";
6
+ import { deserializeBoxArray } from "./array/box";
7
+ import { deserializeFloatArray } from "./array/float";
8
+ import { deserializeIntegerArray } from "./array/integer";
9
+ import { deserializeMapArray } from "./array/map";
10
+ import { deserializeObjectArray } from "./array/object";
11
+ import { deserializeRawArray } from "./array/raw";
12
+ import { deserializeStructArray } from "./array/struct";
13
+ import { deserializeStringArray } from "./array/string";
3
14
  import { deserializeStaticArrayBoolean } from "./staticarray/bool";
15
+ import { deserializeStaticArrayFloat } from "./staticarray/float";
16
+ import { deserializeStaticArrayInteger } from "./staticarray/integer";
4
17
  import { deserializeStaticArrayString } from "./staticarray/string";
5
- import { deserializeStaticArrayArray } from "./staticarray/array";
6
- import { deserializeStaticArrayStruct } from "./staticarray/struct";
18
+
19
+
20
+ @inline function materializeStaticArray<T extends StaticArray<any>>(src: valueof<T>[], dst: usize): T {
21
+ const byteLength = <usize>src.length * sizeof<valueof<T>>();
22
+ let out = dst;
23
+
24
+ if (!out) {
25
+ out = __new(byteLength, idof<T>());
26
+ } else if (changetype<OBJECT>(out - TOTAL_OVERHEAD).rtSize != byteLength) {
27
+ out = __renew(out, byteLength);
28
+ }
29
+
30
+ const typed = changetype<T>(out);
31
+ for (let i = 0; i < src.length; i++) {
32
+ unchecked((typed[i] = unchecked(src[i])));
33
+ }
34
+ return typed;
35
+ }
7
36
 
8
37
  export function deserializeStaticArray<T extends StaticArray<any>>(srcStart: usize, srcEnd: usize, dst: usize): T {
9
38
  if (isString<valueof<T>>()) {
10
- return <T>deserializeStaticArrayString(srcStart, srcEnd, dst);
39
+ return changetype<T>(deserializeStaticArrayString(srcStart, srcEnd, dst));
11
40
  } else if (isBoolean<valueof<T>>()) {
12
41
  return deserializeStaticArrayBoolean<T>(srcStart, srcEnd, dst);
13
42
  } else if (isInteger<valueof<T>>()) {
14
43
  return deserializeStaticArrayInteger<T>(srcStart, srcEnd, dst);
15
44
  } else if (isFloat<valueof<T>>()) {
16
45
  return deserializeStaticArrayFloat<T>(srcStart, srcEnd, dst);
17
- } else if (isArrayLike<valueof<T>>()) {
18
- return deserializeStaticArrayArray<T>(srcStart, srcEnd, dst);
46
+ } else if (isArray<valueof<T>>()) {
47
+ return materializeStaticArray<T>(deserializeArrayArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
19
48
  } else if (isManaged<valueof<T>>() || isReference<valueof<T>>()) {
20
49
  const type = changetype<nonnull<valueof<T>>>(0);
21
- if (isDefined(type.__DESERIALIZE)) {
22
- return deserializeStaticArrayStruct<T>(srcStart, srcEnd, dst);
50
+ if (type instanceof StaticArray) {
51
+ return materializeStaticArray<T>(deserializeArrayArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
52
+ } else if (type instanceof JSON.Value) {
53
+ return materializeStaticArray<T>(changetype<valueof<T>[]>(deserializeArbitraryArray(srcStart, srcEnd, 0)), dst);
54
+ } else if (type instanceof JSON.Box) {
55
+ return materializeStaticArray<T>(changetype<valueof<T>[]>(deserializeBoxArray<valueof<T>[]>(srcStart, srcEnd, 0)), dst);
56
+ } else if (type instanceof JSON.Obj) {
57
+ return materializeStaticArray<T>(deserializeObjectArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
58
+ } else if (type instanceof JSON.Raw) {
59
+ return materializeStaticArray<T>(changetype<valueof<T>[]>(deserializeRawArray(srcStart, srcEnd, 0)), dst);
60
+ } else if (type instanceof Map) {
61
+ return materializeStaticArray<T>(deserializeMapArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
62
+ // @ts-ignore: supplied by transform
63
+ } else if (isDefined(type.__DESERIALIZE_CUSTOM)) {
64
+ return materializeStaticArray<T>(deserializeStructArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
65
+ // @ts-ignore: supplied by transform
66
+ } else if (isDefined(type.__DESERIALIZE)) {
67
+ return materializeStaticArray<T>(deserializeStructArray<valueof<T>[]>(srcStart, srcEnd, 0), dst);
23
68
  }
24
- throw new Error("Could not parse static array of type " + nameof<T>() + "!");
25
- } else {
26
- throw new Error("Could not parse static array of type " + nameof<T>() + "!");
27
69
  }
70
+
71
+ throw new Error("Could not parse static array of type " + nameof<T>() + "!");
28
72
  }
@@ -15,7 +15,7 @@ import { hex4_to_u16_swar } from "../../util/swar";
15
15
  srcStart += 2;
16
16
 
17
17
  // Early exit
18
- if (block !== 0x5C) {
18
+ if (block !== 0x5c) {
19
19
  bs.offset += 2;
20
20
  continue;
21
21
  }
@@ -1,5 +1,5 @@
1
1
  import { BACK_SLASH, COMMA, CHAR_F, BRACE_LEFT, BRACKET_LEFT, CHAR_N, QUOTE, BRACE_RIGHT, BRACKET_RIGHT, CHAR_T, COLON } from "../../custom/chars";
2
- import { isSpace } from "../../util";
2
+ import { isSpace, isUnescapedQuote, scanStringEnd } from "../../util";
3
3
 
4
4
  export function deserializeStruct<T>(srcStart: usize, srcEnd: usize, dst: usize): T {
5
5
  const out = changetype<nonnull<T>>(dst || __new(offsetof<T>(), idof<T>()));
@@ -24,7 +24,7 @@ export function deserializeStruct<T>(srcStart: usize, srcEnd: usize, dst: usize)
24
24
  while (srcStart < srcEnd) {
25
25
  let code = load<u16>(srcStart); // while (isSpace(code)) code = load<u16>(srcStart += 2);
26
26
  if (keyStart == 0) {
27
- if (code == QUOTE && load<u16>(srcStart - 2) !== BACK_SLASH) {
27
+ if (code == QUOTE && isUnescapedQuote(srcStart)) {
28
28
  if (isKey) {
29
29
  keyStart = lastIndex;
30
30
  keyEnd = srcStart;
@@ -44,21 +44,13 @@ export function deserializeStruct<T>(srcStart: usize, srcEnd: usize, dst: usize)
44
44
  } else {
45
45
  if (code == QUOTE) {
46
46
  lastIndex = srcStart;
47
+ srcStart = scanStringEnd(srcStart, srcEnd);
48
+ if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
49
+ // @ts-ignore: exists
50
+ out.__DESERIALIZE(keyStart, keyEnd, lastIndex, srcStart + 2, changetype<usize>(out));
47
51
  srcStart += 2;
48
- while (srcStart < srcEnd) {
49
- const code = load<u16>(srcStart);
50
- if (code == QUOTE && load<u16>(srcStart - 2) !== BACK_SLASH) {
51
- // console.log("Value (string): " + ptrToStr(lastIndex, srcStart + 2));
52
- // @ts-ignore: exists
53
- out.__DESERIALIZE(keyStart, keyEnd, lastIndex, srcStart + 2, changetype<usize>(out));
54
- // while (isSpace(load<u16>(srcStart))) srcStart += 2;
55
- srcStart += 4;
56
- // console.log("Next: " + String.fromCharCode(load<u16>(srcStart)));
57
- keyStart = 0;
58
- break;
59
- }
60
- srcStart += 2;
61
- }
52
+ keyStart = 0;
53
+ continue;
62
54
  } else if (code - 48 <= 9 || code == 45) {
63
55
  lastIndex = srcStart;
64
56
  srcStart += 2;
@@ -85,8 +77,8 @@ export function deserializeStruct<T>(srcStart: usize, srcEnd: usize, dst: usize)
85
77
  while (srcStart < srcEnd) {
86
78
  const code = load<u16>(srcStart);
87
79
  if (code == QUOTE) {
88
- srcStart += 2;
89
- while (!(load<u16>(srcStart) == QUOTE && load<u16>(srcStart - 2) != BACK_SLASH)) srcStart += 2;
80
+ srcStart = scanStringEnd(srcStart, srcEnd);
81
+ if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
90
82
  } else if (code == BRACE_RIGHT) {
91
83
  if (--depth == 0) {
92
84
  // console.log("Value (object): " + ptrToStr(lastIndex, srcStart + 2));
@@ -109,8 +101,8 @@ export function deserializeStruct<T>(srcStart: usize, srcEnd: usize, dst: usize)
109
101
  while (srcStart < srcEnd) {
110
102
  const code = load<u16>(srcStart);
111
103
  if (code == QUOTE) {
112
- srcStart += 2;
113
- while (!(load<u16>(srcStart) == QUOTE && load<u16>(srcStart - 2) != BACK_SLASH)) srcStart += 2;
104
+ srcStart = scanStringEnd(srcStart, srcEnd);
105
+ if (srcStart >= srcEnd) throw new Error("Unterminated string in JSON object");
114
106
  } else if (code == BRACKET_RIGHT) {
115
107
  if (--depth == 0) {
116
108
  // console.log("Value (array): " + ptrToStr(lastIndex, srcStart + 2));