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
@@ -3,6 +3,21 @@
3
3
  "include": ["./**/*.ts"],
4
4
  "compilerOptions": {
5
5
  "experimentalDecorators": true,
6
- "emitDecoratorMetadata": true
6
+ "emitDecoratorMetadata": true,
7
+
8
+ "strict": true,
9
+ "noImplicitAny": true,
10
+ "strictNullChecks": false,
11
+ "strictFunctionTypes": true,
12
+ "strictBindCallApply": true,
13
+ "strictPropertyInitialization": false,
14
+ "noImplicitThis": true,
15
+ "alwaysStrict": true,
16
+
17
+ "noUnusedLocals": false,
18
+ "noUnusedParameters": false,
19
+ "noImplicitReturns": true,
20
+ "noFallthroughCasesInSwitch": true,
21
+ "noUncheckedIndexedAccess": false
7
22
  }
8
23
  }
@@ -3,3 +3,4 @@ export * from "./atoi";
3
3
  export * from "./concat";
4
4
  export * from "./bytes";
5
5
  export * from "./nextPowerOf2";
6
+ export * from "./stringScan";
@@ -1,9 +1,9 @@
1
1
  export function mask_to_string(mask: u64): string {
2
2
  let result = "0x";
3
3
  for (let i = 7; i >= 0; i--) {
4
- const byte = u8((mask >> (i * 8)) & 0xFF);
5
- const hi = (byte >> 4) & 0xF;
6
- const lo = byte & 0xF;
4
+ const byte = u8((mask >> (i * 8)) & 0xff);
5
+ const hi = (byte >> 4) & 0xf;
6
+ const lo = byte & 0xf;
7
7
  result += String.fromCharCode(hi < 10 ? 48 + hi : 55 + hi);
8
8
  result += String.fromCharCode(lo < 10 ? 48 + lo : 55 + lo);
9
9
  result += " ";
@@ -11,32 +11,26 @@ export function mask_to_string(mask: u64): string {
11
11
  return result;
12
12
  }
13
13
 
14
+ export function block_to_string(block: u64): string {
15
+ let result = " ";
16
+ const buf = changetype<usize>(new ArrayBuffer(8));
17
+ store<u64>(buf, block);
18
+ result += String.fromCharCode(load<u16>(buf, 6)) + " ";
19
+ result += String.fromCharCode(load<u16>(buf, 4)) + " ";
20
+ result += String.fromCharCode(load<u16>(buf, 2)) + " ";
21
+ result += String.fromCharCode(load<u16>(buf, 0)) + " ";
22
+ return result;
23
+ }
24
+
14
25
  export function mask_to_string_v128(vec: v128): string {
15
26
  let result = "0x";
16
27
 
17
- const lanes: i8[] = [
18
- i8x16.extract_lane_s(vec, 0),
19
- i8x16.extract_lane_s(vec, 1),
20
- i8x16.extract_lane_s(vec, 2),
21
- i8x16.extract_lane_s(vec, 3),
22
- i8x16.extract_lane_s(vec, 4),
23
- i8x16.extract_lane_s(vec, 5),
24
- i8x16.extract_lane_s(vec, 6),
25
- i8x16.extract_lane_s(vec, 7),
26
- i8x16.extract_lane_s(vec, 8),
27
- i8x16.extract_lane_s(vec, 9),
28
- i8x16.extract_lane_s(vec, 10),
29
- i8x16.extract_lane_s(vec, 11),
30
- i8x16.extract_lane_s(vec, 12),
31
- i8x16.extract_lane_s(vec, 13),
32
- i8x16.extract_lane_s(vec, 14),
33
- i8x16.extract_lane_s(vec, 15),
34
- ];
28
+ const lanes: i8[] = [i8x16.extract_lane_s(vec, 0), i8x16.extract_lane_s(vec, 1), i8x16.extract_lane_s(vec, 2), i8x16.extract_lane_s(vec, 3), i8x16.extract_lane_s(vec, 4), i8x16.extract_lane_s(vec, 5), i8x16.extract_lane_s(vec, 6), i8x16.extract_lane_s(vec, 7), i8x16.extract_lane_s(vec, 8), i8x16.extract_lane_s(vec, 9), i8x16.extract_lane_s(vec, 10), i8x16.extract_lane_s(vec, 11), i8x16.extract_lane_s(vec, 12), i8x16.extract_lane_s(vec, 13), i8x16.extract_lane_s(vec, 14), i8x16.extract_lane_s(vec, 15)];
35
29
 
36
30
  for (let i = 15; i >= 0; i--) {
37
31
  const byte = lanes[i];
38
- const hi = (byte >> 4) & 0xF;
39
- const lo = byte & 0xF;
32
+ const hi = (byte >> 4) & 0xf;
33
+ const lo = byte & 0xf;
40
34
  result += String.fromCharCode(hi < 10 ? 48 + hi : 55 + hi);
41
35
  result += String.fromCharCode(lo < 10 ? 48 + lo : 55 + lo);
42
36
  result += " ";
@@ -44,4 +38,3 @@ export function mask_to_string_v128(vec: v128): string {
44
38
 
45
39
  return result;
46
40
  }
47
-
File without changes
@@ -0,0 +1,24 @@
1
+ import { BACK_SLASH, QUOTE } from "../custom/chars";
2
+
3
+ // @ts-ignore
4
+ @inline export function isUnescapedQuote(ptr: usize): bool {
5
+ if (load<u16>(ptr) != QUOTE) return false;
6
+
7
+ let escaped = false;
8
+ while (ptr >= 2 && load<u16>(ptr - 2) == BACK_SLASH) {
9
+ escaped = !escaped;
10
+ ptr -= 2;
11
+ }
12
+
13
+ return !escaped;
14
+ }
15
+
16
+ // @ts-ignore
17
+ @inline export function scanStringEnd(ptr: usize, end: usize): usize {
18
+ ptr += 2;
19
+ while (ptr < end) {
20
+ if (load<u16>(ptr) == QUOTE && isUnescapedQuote(ptr)) return ptr;
21
+ ptr += 2;
22
+ }
23
+ return end;
24
+ }
@@ -1,14 +1,7 @@
1
-
2
1
  // @ts-expect-error: @inline is a valid decorator
3
2
  @inline export function hex4_to_u16_swar(block: u64): u16 {
4
3
  // (c & 0xF) + 9 * (c >> 6)
5
- block = (block & 0x0F000F000F000F)
6
- + ((block >> 6) & 0x03000300030003) * 9;
4
+ block = (block & 0x0f000f000f000f) + ((block >> 6) & 0x03000300030003) * 9;
7
5
 
8
- return <u16>(
9
- ((block >> 0)) << 12 |
10
- ((block >> 16)) << 8 |
11
- ((block >> 32)) << 4 |
12
- ((block >> 48))
13
- );
6
+ return <u16>(((block >> 0) << 12) | ((block >> 16) << 8) | ((block >> 32) << 4) | (block >> 48));
14
7
  }
package/eslint.config.js CHANGED
@@ -1,77 +1,68 @@
1
- import js from "@eslint/js";
2
- import { defineConfig, globalIgnores } from "eslint/config";
3
- import tseslint from "typescript-eslint";
4
- import globals from "globals";
5
-
6
- export default defineConfig(
7
- globalIgnores(["**/node_modules/**", "**/build/**", "**/lib/**", "**/dist/**", "**/*.wasm", "**/*.wat", "assembly/**"]),
1
+ // @ts-check
8
2
 
9
- js.configs.recommended,
10
-
11
- tseslint.configs.recommended,
3
+ import eslint from "@eslint/js";
4
+ import tseslint from "typescript-eslint";
5
+ import aseslint from "./tools/assemblyscript-eslint-local.js";
12
6
 
7
+ export default tseslint.config(
13
8
  {
14
- files: ["transform/src/**/*.ts"],
9
+ ignores: ["bin/**", "templates/**", "tests/**/*.js", "transform/lib/**", "build/**", ".as-test/**", "assembly/**/*.tmp.ts"],
10
+ },
11
+ eslint.configs.recommended,
12
+ ...tseslint.configs.recommended,
13
+ aseslint.config,
14
+ {
15
+ files: ["**/*.{js,mjs,cjs,ts}"],
15
16
  languageOptions: {
16
- parserOptions: {
17
- project: "./transform/tsconfig.json",
17
+ globals: {
18
+ Buffer: "readonly",
19
+ WebAssembly: "readonly",
20
+ console: "readonly",
21
+ process: "readonly",
18
22
  },
19
23
  },
24
+ },
25
+ {
26
+ files: ["**/*.ts"],
20
27
  rules: {
21
- "@typescript-eslint/no-unused-vars": [
22
- "error",
23
- {
24
- argsIgnorePattern: "^_",
25
- varsIgnorePattern: "^_",
26
- },
27
- ],
28
- "@typescript-eslint/explicit-function-return-type": "off",
29
- "@typescript-eslint/no-explicit-any": "warn",
30
- "@typescript-eslint/no-non-null-assertion": "off",
31
-
32
- "no-console": "off",
33
- "prefer-const": "error",
34
- "no-var": "error",
28
+ "@typescript-eslint/no-namespace": "off",
29
+ "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_", varsIgnorePattern: "^_" }],
35
30
  },
36
31
  },
37
-
38
32
  {
39
- files: ["**/*.js", "**/*.mjs"],
40
- languageOptions: {
41
- globals: {
42
- ...globals.node,
43
- },
44
- },
33
+ files: ["assembly/**/*.ts", "lib/**/*.ts"],
45
34
  rules: {
46
- "no-unused-vars": [
47
- "error",
48
- {
49
- argsIgnorePattern: "^_",
50
- varsIgnorePattern: "^_",
51
- },
52
- ],
35
+ "@typescript-eslint/ban-ts-comment": "off",
36
+ "@typescript-eslint/no-explicit-any": "off",
37
+ "@typescript-eslint/no-unsafe-function-type": "off",
38
+ "@typescript-eslint/no-unused-vars": "off",
39
+ "@typescript-eslint/triple-slash-reference": "off",
40
+ "no-constant-condition": "off",
41
+ "no-empty": "off",
42
+ "no-dupe-else-if": "off",
43
+ "no-loss-of-precision": "off",
44
+ "no-useless-escape": "off",
45
+ "prefer-const": "off",
53
46
  },
54
47
  },
55
-
56
48
  {
57
- files: ["bench/runners/**/*.js"],
49
+ files: ["bench/runners/assemblyscript.js"],
58
50
  languageOptions: {
59
51
  globals: {
52
+ arguments: "readonly",
53
+ performance: "readonly",
60
54
  readbuffer: "readonly",
61
55
  writeFile: "readonly",
62
- arguments: "readonly",
63
- ...globals.browser,
64
56
  },
65
57
  },
66
- rules: {
67
- "no-console": "off",
68
- },
69
58
  },
70
-
71
59
  {
72
- files: ["bench/**/*.js"],
73
- rules: {
74
- "no-console": "off",
60
+ files: ["bench/lib/bench.js"],
61
+ languageOptions: {
62
+ globals: {
63
+ performance: "readonly",
64
+ writeFile: "readonly",
65
+ },
75
66
  },
76
67
  },
77
68
  );
package/lib/as-bs.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
2
+ import { heap } from "memory";
2
3
 
3
4
  // Buffer management constants
4
- const SHRINK_EVERY_N: usize = 200;
5
+ const SHRINK_EVERY_N_MASK: usize = 255; // check every 256 outputs
5
6
  const MIN_BUFFER_SIZE: usize = 128;
6
7
 
7
8
  // Exponential moving average smoothing factor (0.0 to 1.0)
@@ -13,11 +14,11 @@ const EMA_ALPHA_SHIFT: usize = 3; // 1/8 = 0.125
13
14
  * Central buffer namespace for managing memory operations.
14
15
  */
15
16
  export namespace bs {
16
- /** Current buffer pointer. */
17
- export let buffer: ArrayBuffer = new ArrayBuffer(i32(MIN_BUFFER_SIZE));
17
+ /** Current unmanaged backing store pointer. */
18
+ export let buffer: usize = heap.alloc(MIN_BUFFER_SIZE);
18
19
 
19
20
  /** Current offset within the buffer. */
20
- export let offset: usize = changetype<usize>(buffer);
21
+ export let offset: usize = buffer;
21
22
 
22
23
  /** Byte length of the buffer. */
23
24
  let bufferSize: usize = MIN_BUFFER_SIZE;
@@ -46,15 +47,50 @@ export namespace bs {
46
47
  typicalSize += (newSize - typicalSize) >> EMA_ALPHA_SHIFT;
47
48
  }
48
49
 
50
+ // @ts-expect-error: @inline is a valid decorator
51
+ @inline function renewBuffer(newSize: usize): void {
52
+ const oldPtr = buffer;
53
+ const newPtr = heap.realloc(oldPtr, newSize);
54
+ const delta = newPtr - oldPtr;
55
+ offset += delta;
56
+ if (pauseOffset != 0) pauseOffset += delta;
57
+ buffer = newPtr;
58
+ bufferSize = newSize;
59
+ }
60
+
61
+ // @ts-expect-error: @inline is a valid decorator
62
+ @inline function reserve(requiredSize: usize, extra: usize): void {
63
+ if (requiredSize <= bufferSize) return;
64
+ // Grow aggressively (2x) to minimize realloc frequency in hot serialization paths.
65
+ let next = bufferSize << 1;
66
+ const minNext = requiredSize + extra;
67
+ if (next < minNext) next = minNext;
68
+ renewBuffer(next);
69
+ }
70
+
71
+ // @ts-expect-error: @inline is a valid decorator
72
+ @inline function finalizeDynamicOutput(len: usize): void {
73
+ counter += 1;
74
+ updateTypicalSize(len);
75
+ if ((counter & SHRINK_EVERY_N_MASK) == 0 && bufferSize > typicalSize << 2) {
76
+ resize(u32(typicalSize << 1));
77
+ }
78
+ offset = buffer;
79
+ stackSize = 0;
80
+ }
81
+
49
82
  export let cacheOutput: usize = 0;
50
83
  export let cacheOutputLen: usize = 0;
51
84
 
52
85
  // @ts-expect-error: @inline is a valid decorator
53
86
  @inline export function digestArena(): void {
54
87
  if (cacheOutput === 0) return;
55
- proposeSize(cacheOutputLen);
56
- memory.copy(bs.offset, cacheOutput, cacheOutputLen);
88
+ const len = cacheOutputLen;
89
+ proposeSize(<u32>len);
90
+ memory.copy(offset, cacheOutput, len);
91
+ offset += len;
57
92
  bs.cacheOutput = 0;
93
+ bs.cacheOutputLen = 0;
58
94
  }
59
95
  /**
60
96
  * Stores the state of the buffer, allowing further changes to be reset
@@ -93,14 +129,7 @@ export namespace bs {
93
129
  */
94
130
  // @ts-expect-error: @inline is a valid decorator
95
131
  @inline export function ensureSize(size: u32): void {
96
- if (offset + usize(size) > bufferSize + changetype<usize>(buffer)) {
97
- const deltaBytes = usize(size) + MIN_BUFFER_SIZE;
98
- bufferSize += deltaBytes;
99
- // @ts-expect-error: __renew is a runtime builtin
100
- const newPtr = changetype<ArrayBuffer>(__renew(changetype<usize>(buffer), bufferSize));
101
- offset = offset + changetype<usize>(newPtr) - changetype<usize>(buffer);
102
- buffer = newPtr;
103
- }
132
+ reserve(offset - buffer + usize(size), MIN_BUFFER_SIZE);
104
133
  }
105
134
 
106
135
  /**
@@ -110,14 +139,8 @@ export namespace bs {
110
139
  */
111
140
  // @ts-expect-error: @inline is a valid decorator
112
141
  @inline export function proposeSize(size: u32): void {
113
- if ((stackSize += size) > bufferSize) {
114
- const deltaBytes = size;
115
- bufferSize += deltaBytes;
116
- // @ts-expect-error: __renew is a runtime builtin
117
- const newPtr = changetype<ArrayBuffer>(__renew(changetype<usize>(buffer), bufferSize));
118
- offset = offset + changetype<usize>(newPtr) - changetype<usize>(buffer);
119
- buffer = newPtr;
120
- }
142
+ stackSize += size;
143
+ reserve(stackSize, 0);
121
144
  }
122
145
 
123
146
  /**
@@ -127,14 +150,8 @@ export namespace bs {
127
150
  */
128
151
  // @ts-expect-error: @inline is a valid decorator
129
152
  @inline export function growSize(size: u32): void {
130
- if ((stackSize += size) > bufferSize) {
131
- const deltaBytes = usize(size) + MIN_BUFFER_SIZE;
132
- bufferSize += deltaBytes;
133
- // @ts-expect-error: __renew is a runtime builtin
134
- const newPtr = changetype<ArrayBuffer>(__renew(changetype<usize>(buffer), bufferSize));
135
- offset = offset + changetype<usize>(newPtr) - changetype<usize>(buffer);
136
- buffer = newPtr;
137
- }
153
+ stackSize += size;
154
+ reserve(stackSize, MIN_BUFFER_SIZE);
138
155
  }
139
156
 
140
157
  /**
@@ -143,12 +160,14 @@ export namespace bs {
143
160
  */
144
161
  // @ts-expect-error: @inline is a valid decorator
145
162
  @inline export function resize(newSize: u32): void {
146
- // @ts-expect-error: __renew is a runtime builtin
147
- const newPtr = changetype<ArrayBuffer>(__renew(changetype<usize>(buffer), newSize));
148
- bufferSize = newSize;
149
- offset = changetype<usize>(newPtr);
150
- buffer = newPtr;
151
- stackSize = 0;
163
+ const oldPtr = buffer;
164
+ const newPtr = heap.realloc(buffer, newSize);
165
+ const delta = newPtr - oldPtr;
166
+ if (pauseOffset != 0) pauseOffset += delta;
167
+ buffer = newPtr;
168
+ bufferSize = newSize;
169
+ offset = buffer;
170
+ stackSize = 0;
152
171
  }
153
172
 
154
173
  /**
@@ -158,10 +177,10 @@ export namespace bs {
158
177
  // @ts-expect-error: @inline is a valid decorator
159
178
  @inline export function cpyOut<T>(): T {
160
179
  if (pauseOffset == 0) {
161
- const len = offset - changetype<usize>(buffer);
180
+ const len = offset - buffer;
162
181
  // @ts-expect-error: __new is a runtime builtin
163
182
  const _out = __new(len, idof<T>());
164
- memory.copy(_out, changetype<usize>(buffer), len);
183
+ memory.copy(_out, buffer, len);
165
184
  return changetype<T>(_out);
166
185
  } else {
167
186
  const len = offset - pauseOffset;
@@ -183,19 +202,11 @@ export namespace bs {
183
202
  @inline export function out<T>(): T {
184
203
  let out: usize;
185
204
  if (cacheOutput === 0) {
186
- const len = offset - changetype<usize>(buffer);
205
+ const len = offset - buffer;
187
206
  // @ts-expect-error: __new is a runtime builtin
188
207
  out = __new(len, idof<T>());
189
- memory.copy(out, changetype<usize>(buffer), len);
190
-
191
- counter++;
192
- // Use exponential moving average for smoother size tracking
193
- updateTypicalSize(len);
194
- if (counter >= SHRINK_EVERY_N) {
195
- // Shrink if buffer is 4x larger than typical, resize to 2x typical
196
- if (bufferSize > (typicalSize << 2)) resize(u32(typicalSize << 1));
197
- counter = 0;
198
- }
208
+ memory.copy(out, buffer, len);
209
+ finalizeDynamicOutput(len);
199
210
  } else {
200
211
  // zero-copy path
201
212
  // @ts-expect-error: __new is a runtime builtin
@@ -203,24 +214,23 @@ export namespace bs {
203
214
  memory.copy(out, cacheOutput, cacheOutputLen);
204
215
  // reset arena flag
205
216
  cacheOutput = 0;
217
+ cacheOutputLen = 0;
218
+ offset = buffer;
219
+ stackSize = 0;
206
220
  }
207
-
208
- offset = changetype<usize>(buffer);
209
- stackSize = 0;
210
221
  return changetype<T>(out);
211
222
  }
212
223
 
213
-
214
224
  /**
215
225
  * Copies the buffer's content to a new object of a specified type.
216
226
  * @returns The new object containing the buffer's content.
217
227
  */
218
228
  // @ts-expect-error: @inline is a valid decorator
219
229
  @inline export function view<T>(): T {
220
- const len = offset - changetype<usize>(buffer);
230
+ const len = offset - buffer;
221
231
  // @ts-expect-error: __new is a runtime builtin
222
232
  const _out = __new(len, idof<T>());
223
- memory.copy(_out, changetype<usize>(buffer), len);
233
+ memory.copy(_out, buffer, len);
224
234
  return changetype<T>(_out);
225
235
  }
226
236
 
@@ -232,25 +242,14 @@ export namespace bs {
232
242
  */
233
243
  // @ts-expect-error: @inline is a valid decorator
234
244
  @inline export function outTo<T>(dst: usize): T {
235
- const len = offset - changetype<usize>(buffer);
236
- // @ts-expect-error: __renew is a runtime builtin
237
- if (len != changetype<OBJECT>(dst - TOTAL_OVERHEAD).rtSize) __renew(len, idof<T>());
238
- memory.copy(dst, changetype<usize>(buffer), len);
239
-
240
- counter++;
241
- // Use exponential moving average for smoother size tracking
242
- updateTypicalSize(len);
243
-
244
- if (counter >= SHRINK_EVERY_N) {
245
- // Shrink if buffer is 4x larger than typical, resize to 2x typical
246
- if (bufferSize > (typicalSize << 2)) {
247
- resize(typicalSize << 1);
248
- }
249
- counter = 0;
245
+ const len = offset - buffer;
246
+ if (len != changetype<OBJECT>(dst - TOTAL_OVERHEAD).rtSize) {
247
+ // @ts-expect-error: __renew is a runtime builtin
248
+ dst = __renew(dst, len);
250
249
  }
250
+ memory.copy(dst, buffer, len);
251
251
 
252
- offset = changetype<usize>(buffer);
253
- stackSize = 0;
252
+ finalizeDynamicOutput(len);
254
253
  return changetype<T>(dst);
255
254
  }
256
255
  }
@@ -372,11 +371,7 @@ export namespace sc {
372
371
  * @param start - Start of serialized output to cache
373
372
  * @param len - Length of serialized output
374
373
  */
375
- export function insertCached(
376
- str: usize,
377
- start: usize,
378
- len: usize
379
- ): void {
374
+ export function insertCached(str: usize, start: usize, len: usize): void {
380
375
  if (len < MIN_CACHE_LEN) return;
381
376
  if (arenaPtr + len > arenaEnd) {
382
377
  // Wrap around to beginning of arena (circular buffer)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "json-as",
3
- "version": "1.2.5",
3
+ "version": "1.3.0",
4
4
  "author": "Jairus Tanaka",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,14 +12,13 @@
12
12
  "@assemblyscript/wasi-shim": "^0.1.0",
13
13
  "@eslint/js": "^9.0.0",
14
14
  "@types/node": "^25.0.10",
15
- "as-heap-analyzer": "^1.2.0",
15
+ "as-test": "^1.0.1",
16
16
  "assemblyscript": "^0.28.9",
17
17
  "assemblyscript-prettier": "^3.0.1",
18
18
  "chartjs-node-canvas": "^5.0.0",
19
19
  "chartjs-plugin-datalabels": "^2.2.0",
20
- "eslint": "^9.0.0",
21
- "globals": "^17.0.0",
22
- "prettier": "^3.7.4",
20
+ "eslint": "^10.0.0",
21
+ "prettier": "3.8.1",
23
22
  "tinybench": "^6.0.0",
24
23
  "typescript": "^5.9.3",
25
24
  "typescript-eslint": "^8.0.0"
@@ -37,7 +36,8 @@
37
36
  "Matt Johnson-Pint",
38
37
  "Tomáš Hromada",
39
38
  "Loredana Cirstea",
40
- "Accipiter Nisus"
39
+ "Accipiter Nisus",
40
+ "Deon Groenewald"
41
41
  ],
42
42
  "description": "The only JSON library you'll need for AssemblyScript with SIMD and SWAR",
43
43
  "homepage": "https://github.com/JairusSW/json-as#readme",
@@ -62,9 +62,13 @@
62
62
  },
63
63
  "scripts": {
64
64
  "ci": "act",
65
- "test": "bash ./run-tests.sh",
65
+ "test": "ast test --disable coverage --disable try-as",
66
+ "test:ci": "ast test --disable coverage --clean",
67
+ "test:coverage": "ast test --enable coverage",
68
+ "bench": "npm run bench:as && npm run bench:js && ./build-charts.sh",
66
69
  "bench:as": "bash ./run-bench.as.sh",
67
70
  "bench:js": "bash ./run-bench.js.sh",
71
+ "bench:publish": "bash ./publish-benchmarks.sh",
68
72
  "build:test": "JSON_DEBUG=0 JSON_WRITE=assembly/test.ts asc assembly/test.ts --transform ./transform -o ./build/test.wasm --textFile ./build/test.wat --enable simd --debug --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json",
69
73
  "build:tmp:test": "JSON_DEBUG=1 asc assembly/test.tmp.ts -o ./build/test.wasm --textFile ./build/test.wat --enable simd --debug --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json",
70
74
  "build:test:wine": "JSON_DEBUG=1 JSON_WRITE=assembly/test.ts NODE_SKIP_PLATFORM_CHECK=1 wine ~/.win-bin/node/node.exe ./node_modules/assemblyscript/bin/asc.js assembly/test.ts --transform ./transform -o ./build/test.wasm --textFile ./build/test.wat --debug --config ./node_modules/@assemblyscript/wasi-shim/asconfig.json",
@@ -73,8 +77,8 @@
73
77
  "build:transform": "tsc -p ./transform",
74
78
  "bench:wasmer": "wasmer ./build/bench.wasm --llvm",
75
79
  "format": "prettier -w .",
76
- "lint": "eslint .",
77
- "lint:fix": "eslint . --fix",
80
+ "lint": "eslint . --no-warn-ignored",
81
+ "lint:fix": "eslint . --fix --no-warn-ignored",
78
82
  "typecheck": "tsc -p ./transform --noEmit",
79
83
  "clean": "rm -rf build/ transform/lib/",
80
84
  "prebuild": "npm run clean",
package/test.ts ADDED
@@ -0,0 +1,99 @@
1
+ class UserPreferences {
2
+ theme!: string;
3
+ notifications!: boolean;
4
+ language!: string;
5
+ timezone!: string;
6
+ privacy_level!: string;
7
+ two_factor_enabled!: boolean;
8
+ }
9
+
10
+ class RecentActivity {
11
+ action!: string;
12
+ timestamp!: string;
13
+ target!: string;
14
+ }
15
+
16
+ class MediumAPIResponse {
17
+ id!: number;
18
+ username!: string;
19
+ full_name!: string;
20
+ email!: string;
21
+ avatar_url!: string;
22
+ bio!: string;
23
+ website!: string;
24
+ location!: string;
25
+ joined_at!: string;
26
+ is_verified!: boolean;
27
+ is_premium!: boolean;
28
+ follower_count!: number;
29
+ following_count!: number;
30
+
31
+ preferences!: UserPreferences;
32
+ tags!: string[];
33
+
34
+ recent_activity!: RecentActivity[];
35
+ }
36
+
37
+ const v1 = new MediumAPIResponse();
38
+ const prefs = new UserPreferences();
39
+
40
+ prefs.theme = "dark";
41
+ prefs.notifications = true;
42
+ prefs.language = "en-US";
43
+ prefs.timezone = "America/Los_Angeles";
44
+ prefs.privacy_level = "friends_only";
45
+ prefs.two_factor_enabled = false;
46
+
47
+ v1.id = 42;
48
+ v1.username = "jairus";
49
+ v1.full_name = "Jairus Tanaka";
50
+ v1.email = "me@jairus.dev";
51
+ v1.avatar_url = "https://avatars.githubusercontent.com/u/123456?v=4";
52
+ v1.bio = "I like compilers, elegant algorithms, bare metal, simd, and wasm.";
53
+ v1.website = "https://jairus.dev/";
54
+ v1.location = "Seattle, WA";
55
+ v1.joined_at = "2020-01-15T08:30:00Z";
56
+ v1.is_verified = true;
57
+ v1.is_premium = true;
58
+ v1.follower_count = 61;
59
+ v1.following_count = 39;
60
+
61
+ v1.preferences = prefs;
62
+
63
+ v1.tags = ["typescript", "webassembly", "performance", "rust", "assemblyscript", "json"];
64
+
65
+ v1.recent_activity = new Array<RecentActivity>(5);
66
+
67
+ const act0 = new RecentActivity();
68
+ act0.action = "starred";
69
+ act0.timestamp = "2025-12-22T10:15:00Z";
70
+ act0.target = "assemblyscript/json-as";
71
+ v1.recent_activity[0] = act0;
72
+
73
+ const act1 = new RecentActivity();
74
+ act1.action = "commented";
75
+ act1.timestamp = "2025-12-22T09:42:00Z";
76
+ act1.target = "issue #142";
77
+ v1.recent_activity[1] = act1;
78
+
79
+ const act2 = new RecentActivity();
80
+ act2.action = "pushed";
81
+ act2.timestamp = "2025-12-21T23:58:00Z";
82
+ act2.target = "main branch";
83
+ v1.recent_activity[2] = act2;
84
+
85
+ const act3 = new RecentActivity();
86
+ act3.action = "forked";
87
+ act3.timestamp = "2025-12-21T18:20:00Z";
88
+ act3.target = "fast-json-wasm";
89
+ v1.recent_activity[3] = act3;
90
+
91
+ const act4 = new RecentActivity();
92
+ act4.action = "created";
93
+ act4.timestamp = "2025-12-21T14:10:00Z";
94
+ act4.target = "new benchmark suite";
95
+ v1.recent_activity[4] = act4;
96
+
97
+ const serialized = JSON.stringify(v1);
98
+
99
+ console.log(serialized);