json-as 1.2.6 → 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.
- package/.as-test/coverage/naive/coverage.arbitrary.spec.ts.log.json +5628 -0
- package/.as-test/coverage/naive/coverage.array.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.bool.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.box.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.custom.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.date.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.enum.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.float.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.generics.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.hierarchy.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.integer.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.map.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.namespace.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.null.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.raw.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.resolving.spec.ts.log.json +5628 -0
- package/.as-test/coverage/naive/coverage.set.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.staticarray.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.string.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.struct.spec.ts.log.json +5187 -0
- package/.as-test/coverage/naive/coverage.types.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.arbitrary.spec.ts.log.json +5628 -0
- package/.as-test/coverage/simd/coverage.array.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.bool.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.box.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.custom.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.date.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.enum.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.float.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.generics.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.hierarchy.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.integer.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.map.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.namespace.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.null.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.raw.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.resolving.spec.ts.log.json +5628 -0
- package/.as-test/coverage/simd/coverage.set.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.staticarray.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.string.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.struct.spec.ts.log.json +5187 -0
- package/.as-test/coverage/simd/coverage.types.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.arbitrary.spec.ts.log.json +5628 -0
- package/.as-test/coverage/swar/coverage.array.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.bool.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.box.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.custom.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.date.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.enum.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.float.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.generics.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.hierarchy.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.integer.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.map.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.namespace.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.null.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.raw.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.resolving.spec.ts.log.json +5628 -0
- package/.as-test/coverage/swar/coverage.set.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.staticarray.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.string.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.struct.spec.ts.log.json +5187 -0
- package/.as-test/coverage/swar/coverage.types.spec.ts.log.json +5187 -0
- package/.as-test/logs/naive/run.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/naive/run.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/naive/run.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/naive/run.box.spec.ts.log.json +353 -0
- package/.as-test/logs/naive/run.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/naive/run.date.spec.ts.log.json +397 -0
- package/.as-test/logs/naive/run.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/naive/run.float.spec.ts.log.json +453 -0
- package/.as-test/logs/naive/run.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/naive/run.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/naive/run.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/naive/run.map.spec.ts.log.json +247 -0
- package/.as-test/logs/naive/run.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/naive/run.null.spec.ts.log.json +273 -0
- package/.as-test/logs/naive/run.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/naive/run.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/naive/run.set.spec.ts.log.json +733 -0
- package/.as-test/logs/naive/run.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/naive/run.string.spec.ts.log.json +2289 -0
- package/.as-test/logs/naive/run.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/naive/run.types.spec.ts.log.json +273 -0
- package/.as-test/logs/naive/test.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/naive/test.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/naive/test.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/naive/test.box.spec.ts.log.json +353 -0
- package/.as-test/logs/naive/test.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/naive/test.date.spec.ts.log.json +397 -0
- package/.as-test/logs/naive/test.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/naive/test.float.spec.ts.log.json +453 -0
- package/.as-test/logs/naive/test.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/naive/test.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/naive/test.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/naive/test.log.json +2289 -0
- package/.as-test/logs/naive/test.map.spec.ts.log.json +247 -0
- package/.as-test/logs/naive/test.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/naive/test.null.spec.ts.log.json +273 -0
- package/.as-test/logs/naive/test.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/naive/test.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/naive/test.set.spec.ts.log.json +733 -0
- package/.as-test/logs/naive/test.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/naive/test.string.spec.ts.log.json +2345 -0
- package/.as-test/logs/naive/test.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/naive/test.types.spec.ts.log.json +273 -0
- package/.as-test/logs/simd/run.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/simd/run.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/simd/run.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/simd/run.box.spec.ts.log.json +353 -0
- package/.as-test/logs/simd/run.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/simd/run.date.spec.ts.log.json +397 -0
- package/.as-test/logs/simd/run.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/simd/run.float.spec.ts.log.json +453 -0
- package/.as-test/logs/simd/run.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/simd/run.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/simd/run.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/simd/run.map.spec.ts.log.json +247 -0
- package/.as-test/logs/simd/run.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/simd/run.null.spec.ts.log.json +273 -0
- package/.as-test/logs/simd/run.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/simd/run.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/simd/run.set.spec.ts.log.json +733 -0
- package/.as-test/logs/simd/run.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/simd/run.string.spec.ts.log.json +2289 -0
- package/.as-test/logs/simd/run.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/simd/run.types.spec.ts.log.json +273 -0
- package/.as-test/logs/simd/test.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/simd/test.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/simd/test.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/simd/test.box.spec.ts.log.json +353 -0
- package/.as-test/logs/simd/test.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/simd/test.date.spec.ts.log.json +397 -0
- package/.as-test/logs/simd/test.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/simd/test.float.spec.ts.log.json +453 -0
- package/.as-test/logs/simd/test.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/simd/test.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/simd/test.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/simd/test.log.json +11371 -0
- package/.as-test/logs/simd/test.map.spec.ts.log.json +247 -0
- package/.as-test/logs/simd/test.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/simd/test.null.spec.ts.log.json +273 -0
- package/.as-test/logs/simd/test.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/simd/test.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/simd/test.set.spec.ts.log.json +733 -0
- package/.as-test/logs/simd/test.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/simd/test.string.spec.ts.log.json +2345 -0
- package/.as-test/logs/simd/test.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/simd/test.types.spec.ts.log.json +273 -0
- package/.as-test/logs/swar/run.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/swar/run.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/swar/run.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/swar/run.box.spec.ts.log.json +353 -0
- package/.as-test/logs/swar/run.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/swar/run.date.spec.ts.log.json +397 -0
- package/.as-test/logs/swar/run.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/swar/run.float.spec.ts.log.json +453 -0
- package/.as-test/logs/swar/run.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/swar/run.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/swar/run.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/swar/run.map.spec.ts.log.json +247 -0
- package/.as-test/logs/swar/run.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/swar/run.null.spec.ts.log.json +273 -0
- package/.as-test/logs/swar/run.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/swar/run.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/swar/run.set.spec.ts.log.json +733 -0
- package/.as-test/logs/swar/run.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/swar/run.string.spec.ts.log.json +2289 -0
- package/.as-test/logs/swar/run.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/swar/run.types.spec.ts.log.json +273 -0
- package/.as-test/logs/swar/test.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/swar/test.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/swar/test.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/swar/test.box.spec.ts.log.json +353 -0
- package/.as-test/logs/swar/test.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/swar/test.date.spec.ts.log.json +397 -0
- package/.as-test/logs/swar/test.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/swar/test.float.spec.ts.log.json +453 -0
- package/.as-test/logs/swar/test.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/swar/test.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/swar/test.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/swar/test.log.json +11371 -0
- package/.as-test/logs/swar/test.map.spec.ts.log.json +247 -0
- package/.as-test/logs/swar/test.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/swar/test.null.spec.ts.log.json +273 -0
- package/.as-test/logs/swar/test.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/swar/test.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/swar/test.set.spec.ts.log.json +733 -0
- package/.as-test/logs/swar/test.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/swar/test.string.spec.ts.log.json +2345 -0
- package/.as-test/logs/swar/test.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/swar/test.types.spec.ts.log.json +273 -0
- package/.as-test/logs/test.arbitrary.spec.ts.log.json +943 -0
- package/.as-test/logs/test.array.spec.ts.log.json +1053 -0
- package/.as-test/logs/test.bool.spec.ts.log.json +257 -0
- package/.as-test/logs/test.box.spec.ts.log.json +353 -0
- package/.as-test/logs/test.custom.spec.ts.log.json +309 -0
- package/.as-test/logs/test.date.spec.ts.log.json +397 -0
- package/.as-test/logs/test.enum.spec.ts.log.json +343 -0
- package/.as-test/logs/test.float.spec.ts.log.json +453 -0
- package/.as-test/logs/test.generics.spec.ts.log.json +393 -0
- package/.as-test/logs/test.hierarchy.spec.ts.log.json +325 -0
- package/.as-test/logs/test.integer.spec.ts.log.json +373 -0
- package/.as-test/logs/test.log.json +11371 -0
- package/.as-test/logs/test.map.spec.ts.log.json +247 -0
- package/.as-test/logs/test.namespace.spec.ts.log.json +361 -0
- package/.as-test/logs/test.null.spec.ts.log.json +273 -0
- package/.as-test/logs/test.raw.spec.ts.log.json +309 -0
- package/.as-test/logs/test.resolving.spec.ts.log.json +273 -0
- package/.as-test/logs/test.set.spec.ts.log.json +733 -0
- package/.as-test/logs/test.staticarray.spec.ts.log.json +931 -0
- package/.as-test/logs/test.string.spec.ts.log.json +2289 -0
- package/.as-test/logs/test.struct.spec.ts.log.json +523 -0
- package/.as-test/logs/test.types.spec.ts.log.json +273 -0
- package/.as-test/runners/default.bindings.js +68 -0
- package/.as-test/runners/default.wasi.js +38 -0
- package/ARCHITECTURE.md +6 -3
- package/CONTRIBUTING.md +9 -3
- package/README.md +39 -22
- package/as-test.config.json +40 -0
- package/assembly/custom/util.ts +24 -70
- package/assembly/deserialize/float.ts +181 -0
- package/assembly/deserialize/helpers/uint.ts +12 -0
- package/assembly/deserialize/index/arbitrary.ts +25 -0
- package/assembly/deserialize/index/array.ts +61 -0
- package/assembly/deserialize/index/bool.ts +1 -0
- package/assembly/deserialize/index/date.ts +1 -0
- package/assembly/deserialize/index/float.ts +1 -0
- package/assembly/deserialize/index/integer.ts +1 -0
- package/assembly/deserialize/index/map.ts +1 -0
- package/assembly/deserialize/index/object.ts +1 -0
- package/assembly/deserialize/index/raw.ts +1 -0
- package/assembly/deserialize/index/set.ts +1 -0
- package/assembly/deserialize/index/staticarray.ts +1 -0
- package/assembly/deserialize/index/string.ts +15 -0
- package/assembly/deserialize/index/struct.ts +1 -0
- package/assembly/deserialize/index/typedarray.ts +1 -0
- package/assembly/deserialize/index/unsigned.ts +1 -0
- package/assembly/deserialize/index.ts +14 -0
- package/assembly/deserialize/integer.ts +42 -0
- package/assembly/deserialize/simd/array/integer.ts +307 -0
- package/assembly/deserialize/simd/string.ts +129 -10
- package/assembly/deserialize/simple/arbitrary.ts +5 -12
- package/assembly/deserialize/simple/array/arbitrary.ts +12 -36
- package/assembly/deserialize/simple/array/array.ts +2 -8
- package/assembly/deserialize/simple/array/bool.ts +2 -8
- package/assembly/deserialize/simple/array/box.ts +2 -8
- package/assembly/deserialize/simple/array/float.ts +2 -8
- package/assembly/deserialize/simple/array/integer.ts +2 -8
- package/assembly/deserialize/simple/array/map.ts +6 -26
- package/assembly/deserialize/simple/array/object.ts +6 -26
- package/assembly/deserialize/simple/array/raw.ts +18 -61
- package/assembly/deserialize/simple/array/string.ts +5 -10
- package/assembly/deserialize/simple/array/struct.ts +6 -26
- package/assembly/deserialize/simple/array.ts +2 -5
- package/assembly/deserialize/simple/bool.ts +2 -6
- package/assembly/deserialize/simple/map.ts +29 -102
- package/assembly/deserialize/simple/object.ts +24 -81
- package/assembly/deserialize/simple/raw.ts +1 -4
- package/assembly/deserialize/simple/set.ts +11 -37
- package/assembly/deserialize/simple/staticarray/array.ts +1 -1
- package/assembly/deserialize/simple/staticarray/bool.ts +1 -1
- package/assembly/deserialize/simple/staticarray/float.ts +1 -1
- package/assembly/deserialize/simple/staticarray/integer.ts +1 -1
- package/assembly/deserialize/simple/staticarray/string.ts +7 -14
- package/assembly/deserialize/simple/staticarray/struct.ts +1 -1
- package/assembly/deserialize/simple/staticarray.ts +57 -21
- package/assembly/deserialize/simple/string.ts +2 -8
- package/assembly/deserialize/simple/struct.ts +25 -121
- package/assembly/deserialize/simple/typedarray.ts +94 -0
- package/assembly/deserialize/swar/array/arbitrary.ts +8 -0
- package/assembly/deserialize/swar/array/array.ts +39 -0
- package/assembly/deserialize/swar/array/bool.ts +47 -0
- package/assembly/deserialize/swar/array/box.ts +8 -0
- package/assembly/deserialize/swar/array/float.ts +39 -0
- package/assembly/deserialize/swar/array/integer.ts +461 -0
- package/assembly/deserialize/swar/array/map.ts +7 -0
- package/assembly/deserialize/swar/array/object.ts +44 -0
- package/assembly/deserialize/swar/array/raw.ts +8 -0
- package/assembly/deserialize/swar/array/shared.ts +96 -0
- package/assembly/deserialize/swar/array/string.ts +39 -0
- package/assembly/deserialize/swar/array/struct.ts +44 -0
- package/assembly/deserialize/swar/array.ts +49 -0
- package/assembly/deserialize/swar/string.ts +650 -14
- package/assembly/deserialize/unsigned.ts +75 -0
- package/assembly/index.d.ts +1 -3
- package/assembly/index.ts +251 -265
- package/assembly/serialize/index/arbitrary.ts +70 -0
- package/assembly/serialize/index/array.ts +1 -0
- package/assembly/serialize/index/bool.ts +1 -0
- package/assembly/serialize/index/date.ts +1 -0
- package/assembly/serialize/index/float.ts +1 -0
- package/assembly/serialize/index/integer.ts +1 -0
- package/assembly/serialize/index/map.ts +1 -0
- package/assembly/serialize/index/object.ts +46 -0
- package/assembly/serialize/index/raw.ts +1 -0
- package/assembly/serialize/index/set.ts +1 -0
- package/assembly/serialize/index/staticarray.ts +1 -0
- package/assembly/serialize/index/string.ts +15 -0
- package/assembly/serialize/index/struct.ts +1 -0
- package/assembly/serialize/index/typedarray.ts +1 -0
- package/assembly/serialize/index.ts +13 -0
- package/assembly/serialize/simd/string.ts +1 -2
- package/assembly/serialize/simple/raw.ts +1 -5
- package/assembly/serialize/simple/typedarray.ts +63 -0
- package/assembly/serialize/swar/string.ts +3 -10
- package/assembly/test.ts +21 -27
- package/assembly/util/concat.ts +1 -5
- package/assembly/util/index.ts +1 -0
- package/assembly/util/masks.ts +12 -18
- package/assembly/util/memory.ts +0 -0
- package/assembly/util/snp.ts +1 -4
- package/assembly/util/stringScan.ts +24 -0
- package/assembly/util/swar.ts +1 -6
- package/eslint.config.js +21 -13
- package/lib/as-bs.ts +69 -78
- package/package.json +8 -5
- package/test.ts +99 -0
- package/tools/assemblyscript-eslint-local.js +1 -24
- package/tools/assemblyscript-eslint.js +38 -14
- package/tools/assemblyscript-prettier-plugin.js +33 -0
- package/tools/replacer.js +63 -0
- package/transform/lib/builder.d.ts.map +1 -1
- package/transform/lib/builder.js +5 -13
- package/transform/lib/builder.js.map +1 -1
- package/transform/lib/index.d.ts.map +1 -1
- package/transform/lib/index.js +529 -735
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/linkers/alias.d.ts.map +1 -1
- package/transform/lib/linkers/alias.js.map +1 -1
- package/transform/lib/linkers/custom.d.ts.map +1 -1
- package/transform/lib/linkers/custom.js +4 -9
- package/transform/lib/linkers/custom.js.map +1 -1
- package/transform/lib/linkers/imports.d.ts.map +1 -1
- package/transform/lib/linkers/imports.js.map +1 -1
- package/transform/lib/types.d.ts +4 -0
- package/transform/lib/types.d.ts.map +1 -1
- package/transform/lib/types.js +70 -21
- package/transform/lib/types.js.map +1 -1
- package/transform/lib/util.d.ts.map +1 -1
- package/transform/lib/util.js +1 -1
- package/transform/lib/util.js.map +1 -1
- package/transform/lib/visitor.d.ts.map +1 -1
- package/transform/lib/visitor.js +1 -2
- package/transform/lib/visitor.js.map +1 -1
- package/.prettierrc +0 -3
- package/assembly/deserialize/simple/float.ts +0 -11
- package/assembly/deserialize/simple/integer.ts +0 -9
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"file": "assembly/__tests__/types.spec.ts",
|
|
4
|
+
"suites": [
|
|
5
|
+
{
|
|
6
|
+
"file": "types.spec.ts",
|
|
7
|
+
"order": 1,
|
|
8
|
+
"time": {
|
|
9
|
+
"start": 24563168.395059,
|
|
10
|
+
"end": 24563168.738608
|
|
11
|
+
},
|
|
12
|
+
"description": "Should serialize with type aliases",
|
|
13
|
+
"depth": 0,
|
|
14
|
+
"suites": [],
|
|
15
|
+
"tests": [
|
|
16
|
+
{
|
|
17
|
+
"order": 0,
|
|
18
|
+
"type": "",
|
|
19
|
+
"verdict": "ok",
|
|
20
|
+
"left": "{\"foo\":\"bar\"}",
|
|
21
|
+
"right": "{\"foo\":\"bar\"}",
|
|
22
|
+
"instr": "toBe",
|
|
23
|
+
"message": "",
|
|
24
|
+
"location": "22:3"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"logs": [],
|
|
28
|
+
"kind": "describe",
|
|
29
|
+
"verdict": "ok"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"file": "types.spec.ts",
|
|
33
|
+
"order": 1,
|
|
34
|
+
"time": {
|
|
35
|
+
"start": 24563168.79409,
|
|
36
|
+
"end": 24563168.974308
|
|
37
|
+
},
|
|
38
|
+
"description": "Should deserialize with type aliases",
|
|
39
|
+
"depth": 0,
|
|
40
|
+
"suites": [],
|
|
41
|
+
"tests": [
|
|
42
|
+
{
|
|
43
|
+
"order": 0,
|
|
44
|
+
"type": "",
|
|
45
|
+
"verdict": "ok",
|
|
46
|
+
"left": "{\"foo\":\"bar\"}",
|
|
47
|
+
"right": "{\"foo\":\"bar\"}",
|
|
48
|
+
"instr": "toBe",
|
|
49
|
+
"message": "",
|
|
50
|
+
"location": "26:3"
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"logs": [],
|
|
54
|
+
"kind": "describe",
|
|
55
|
+
"verdict": "ok"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"file": "types.spec.ts",
|
|
59
|
+
"order": 6,
|
|
60
|
+
"time": {
|
|
61
|
+
"start": 24563169.012157,
|
|
62
|
+
"end": 24563169.688812
|
|
63
|
+
},
|
|
64
|
+
"description": "Additional regression coverage - primitives and arrays",
|
|
65
|
+
"depth": 0,
|
|
66
|
+
"suites": [],
|
|
67
|
+
"tests": [
|
|
68
|
+
{
|
|
69
|
+
"order": 0,
|
|
70
|
+
"type": "",
|
|
71
|
+
"verdict": "ok",
|
|
72
|
+
"left": "\"regression\"",
|
|
73
|
+
"right": "\"regression\"",
|
|
74
|
+
"instr": "toBe",
|
|
75
|
+
"message": "",
|
|
76
|
+
"location": "30:3"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"order": 1,
|
|
80
|
+
"type": "",
|
|
81
|
+
"verdict": "ok",
|
|
82
|
+
"left": "-42",
|
|
83
|
+
"right": "-42",
|
|
84
|
+
"instr": "toBe",
|
|
85
|
+
"message": "",
|
|
86
|
+
"location": "31:3"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"order": 2,
|
|
90
|
+
"type": "",
|
|
91
|
+
"verdict": "ok",
|
|
92
|
+
"left": "false",
|
|
93
|
+
"right": "false",
|
|
94
|
+
"instr": "toBe",
|
|
95
|
+
"message": "",
|
|
96
|
+
"location": "32:3"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"order": 3,
|
|
100
|
+
"type": "",
|
|
101
|
+
"verdict": "ok",
|
|
102
|
+
"left": "3.5",
|
|
103
|
+
"right": "3.5",
|
|
104
|
+
"instr": "toBe",
|
|
105
|
+
"message": "",
|
|
106
|
+
"location": "33:3"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"order": 4,
|
|
110
|
+
"type": "",
|
|
111
|
+
"verdict": "ok",
|
|
112
|
+
"left": "[1,2,3,4]",
|
|
113
|
+
"right": "[1,2,3,4]",
|
|
114
|
+
"instr": "toBe",
|
|
115
|
+
"message": "",
|
|
116
|
+
"location": "34:3"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"order": 5,
|
|
120
|
+
"type": "",
|
|
121
|
+
"verdict": "ok",
|
|
122
|
+
"left": "[\"a\",\"b\",\"c\"]",
|
|
123
|
+
"right": "[\"a\",\"b\",\"c\"]",
|
|
124
|
+
"instr": "toBe",
|
|
125
|
+
"message": "",
|
|
126
|
+
"location": "35:3"
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"logs": [],
|
|
130
|
+
"kind": "describe",
|
|
131
|
+
"verdict": "ok"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"file": "types.spec.ts",
|
|
135
|
+
"order": 2,
|
|
136
|
+
"time": {
|
|
137
|
+
"start": 24563169.72887,
|
|
138
|
+
"end": 24563169.834605
|
|
139
|
+
},
|
|
140
|
+
"description": "Should handle additional alias instances",
|
|
141
|
+
"depth": 0,
|
|
142
|
+
"suites": [],
|
|
143
|
+
"tests": [
|
|
144
|
+
{
|
|
145
|
+
"order": 0,
|
|
146
|
+
"type": "",
|
|
147
|
+
"verdict": "ok",
|
|
148
|
+
"left": "{\"foo\":\"\"}",
|
|
149
|
+
"right": "{\"foo\":\"\"}",
|
|
150
|
+
"instr": "toBe",
|
|
151
|
+
"message": "",
|
|
152
|
+
"location": "39:3"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"order": 1,
|
|
156
|
+
"type": "",
|
|
157
|
+
"verdict": "ok",
|
|
158
|
+
"left": "{\"foo\":\"symbols-!@#\"}",
|
|
159
|
+
"right": "{\"foo\":\"symbols-!@#\"}",
|
|
160
|
+
"instr": "toBe",
|
|
161
|
+
"message": "",
|
|
162
|
+
"location": "40:3"
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
"logs": [],
|
|
166
|
+
"kind": "describe",
|
|
167
|
+
"verdict": "ok"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"file": "types.spec.ts",
|
|
171
|
+
"order": 2,
|
|
172
|
+
"time": {
|
|
173
|
+
"start": 24563169.865938,
|
|
174
|
+
"end": 24563169.990183
|
|
175
|
+
},
|
|
176
|
+
"description": "Should deserialize additional alias payloads",
|
|
177
|
+
"depth": 0,
|
|
178
|
+
"suites": [],
|
|
179
|
+
"tests": [
|
|
180
|
+
{
|
|
181
|
+
"order": 0,
|
|
182
|
+
"type": "",
|
|
183
|
+
"verdict": "ok",
|
|
184
|
+
"left": "",
|
|
185
|
+
"right": "",
|
|
186
|
+
"instr": "toBe",
|
|
187
|
+
"message": "",
|
|
188
|
+
"location": "44:3"
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"order": 1,
|
|
192
|
+
"type": "",
|
|
193
|
+
"verdict": "ok",
|
|
194
|
+
"left": "multi word value",
|
|
195
|
+
"right": "multi word value",
|
|
196
|
+
"instr": "toBe",
|
|
197
|
+
"message": "",
|
|
198
|
+
"location": "45:3"
|
|
199
|
+
}
|
|
200
|
+
],
|
|
201
|
+
"logs": [],
|
|
202
|
+
"kind": "describe",
|
|
203
|
+
"verdict": "ok"
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"file": "types.spec.ts",
|
|
207
|
+
"order": 5,
|
|
208
|
+
"time": {
|
|
209
|
+
"start": 24563170.034756,
|
|
210
|
+
"end": 24563170.386557
|
|
211
|
+
},
|
|
212
|
+
"description": "Extended regression coverage - nested and escaped payloads",
|
|
213
|
+
"depth": 0,
|
|
214
|
+
"suites": [],
|
|
215
|
+
"tests": [
|
|
216
|
+
{
|
|
217
|
+
"order": 0,
|
|
218
|
+
"type": "",
|
|
219
|
+
"verdict": "ok",
|
|
220
|
+
"left": "0",
|
|
221
|
+
"right": "0",
|
|
222
|
+
"instr": "toBe",
|
|
223
|
+
"message": "",
|
|
224
|
+
"location": "49:3"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"order": 1,
|
|
228
|
+
"type": "",
|
|
229
|
+
"verdict": "ok",
|
|
230
|
+
"left": "true",
|
|
231
|
+
"right": "true",
|
|
232
|
+
"instr": "toBe",
|
|
233
|
+
"message": "",
|
|
234
|
+
"location": "50:3"
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"order": 2,
|
|
238
|
+
"type": "",
|
|
239
|
+
"verdict": "ok",
|
|
240
|
+
"left": "-0.125",
|
|
241
|
+
"right": "-0.125",
|
|
242
|
+
"instr": "toBe",
|
|
243
|
+
"message": "",
|
|
244
|
+
"location": "51:3"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"order": 3,
|
|
248
|
+
"type": "",
|
|
249
|
+
"verdict": "ok",
|
|
250
|
+
"left": "[[1],[2,3],[]]",
|
|
251
|
+
"right": "[[1],[2,3],[]]",
|
|
252
|
+
"instr": "toBe",
|
|
253
|
+
"message": "",
|
|
254
|
+
"location": "52:3"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"order": 4,
|
|
258
|
+
"type": "",
|
|
259
|
+
"verdict": "ok",
|
|
260
|
+
"left": "\"line\\nbreak\"",
|
|
261
|
+
"right": "\"line\\nbreak\"",
|
|
262
|
+
"instr": "toBe",
|
|
263
|
+
"message": "",
|
|
264
|
+
"location": "53:3"
|
|
265
|
+
}
|
|
266
|
+
],
|
|
267
|
+
"logs": [],
|
|
268
|
+
"kind": "describe",
|
|
269
|
+
"verdict": "ok"
|
|
270
|
+
}
|
|
271
|
+
]
|
|
272
|
+
}
|
|
273
|
+
]
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { pathToFileURL } from "url";
|
|
4
|
+
|
|
5
|
+
let patched = false;
|
|
6
|
+
|
|
7
|
+
function readExact(length) {
|
|
8
|
+
const out = Buffer.alloc(length);
|
|
9
|
+
let offset = 0;
|
|
10
|
+
while (offset < length) {
|
|
11
|
+
let read = 0;
|
|
12
|
+
try {
|
|
13
|
+
read = fs.readSync(0, out, offset, length - offset, null);
|
|
14
|
+
} catch (error) {
|
|
15
|
+
if (error && error.code === "EAGAIN") {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
if (!read) break;
|
|
21
|
+
offset += read;
|
|
22
|
+
}
|
|
23
|
+
const view = out.subarray(0, offset);
|
|
24
|
+
return view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function writeRaw(data) {
|
|
28
|
+
const view = Buffer.from(data);
|
|
29
|
+
fs.writeSync(1, view);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function withNodeIo(imports = {}) {
|
|
33
|
+
if (!patched) {
|
|
34
|
+
patched = true;
|
|
35
|
+
const originalWrite = process.stdout.write.bind(process.stdout);
|
|
36
|
+
process.stdout.write = (chunk, ...args) => {
|
|
37
|
+
if (chunk instanceof ArrayBuffer) {
|
|
38
|
+
writeRaw(chunk);
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
return originalWrite(chunk, ...args);
|
|
42
|
+
};
|
|
43
|
+
process.stdin.read = (size) => readExact(Number(size ?? 0));
|
|
44
|
+
}
|
|
45
|
+
return imports;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const wasmPathArg = process.argv[2];
|
|
49
|
+
if (!wasmPathArg) {
|
|
50
|
+
process.stderr.write("usage: node ./.as-test/runners/default.bindings.js <file.wasm>\n");
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const wasmPath = path.resolve(process.cwd(), wasmPathArg);
|
|
55
|
+
const jsPath = wasmPath.replace(/\.wasm$/, ".js");
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
const binary = fs.readFileSync(wasmPath);
|
|
59
|
+
const module = new WebAssembly.Module(binary);
|
|
60
|
+
const mod = await import(pathToFileURL(jsPath).href);
|
|
61
|
+
if (typeof mod.instantiate !== "function") {
|
|
62
|
+
throw new Error("bindings helper missing instantiate export");
|
|
63
|
+
}
|
|
64
|
+
mod.instantiate(module, withNodeIo({}));
|
|
65
|
+
} catch (error) {
|
|
66
|
+
process.stderr.write("failed to run bindings module: " + String(error) + "\n");
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { readFileSync } from "fs";
|
|
2
|
+
import { WASI } from "wasi";
|
|
3
|
+
|
|
4
|
+
const originalEmitWarning = process.emitWarning.bind(process);
|
|
5
|
+
process.emitWarning = (warning, ...args) => {
|
|
6
|
+
const type = typeof args[0] == "string" ? args[0] : "";
|
|
7
|
+
const name = typeof warning?.name == "string" ? warning.name : type;
|
|
8
|
+
const message = typeof warning == "string" ? warning : String(warning?.message ?? "");
|
|
9
|
+
if (name == "ExperimentalWarning" && message.includes("WASI is an experimental feature")) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
return originalEmitWarning(warning, ...args);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const wasmPath = process.argv[2];
|
|
16
|
+
if (!wasmPath) {
|
|
17
|
+
process.stderr.write("usage: node ./.as-test/runners/default.wasi.js <file.wasm>\n");
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
const wasi = new WASI({
|
|
23
|
+
version: "preview1",
|
|
24
|
+
args: [wasmPath],
|
|
25
|
+
env: process.env,
|
|
26
|
+
preopens: {},
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const binary = readFileSync(wasmPath);
|
|
30
|
+
const module = new WebAssembly.Module(binary);
|
|
31
|
+
const instance = new WebAssembly.Instance(module, {
|
|
32
|
+
wasi_snapshot_preview1: wasi.wasiImport,
|
|
33
|
+
});
|
|
34
|
+
wasi.start(instance);
|
|
35
|
+
} catch (error) {
|
|
36
|
+
process.stderr.write("failed to run WASI module: " + String(error) + "\n");
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
package/ARCHITECTURE.md
CHANGED
|
@@ -58,9 +58,9 @@ The transform (`transform/src/`) is an AssemblyScript compiler plugin that runs
|
|
|
58
58
|
- Decorator metadata (@alias, @omit, @omitnull, @omitif)
|
|
59
59
|
- Inheritance relationships
|
|
60
60
|
- Type dependencies
|
|
61
|
-
3. **Code Generation**: Generates
|
|
61
|
+
3. **Code Generation**: Generates methods for each class:
|
|
62
62
|
- `__SERIALIZE(ptr: usize): void` - Writes JSON to the buffer
|
|
63
|
-
- `__DESERIALIZE<T>(srcStart, srcEnd, out):
|
|
63
|
+
- `__DESERIALIZE<T>(srcStart, srcEnd, out): usize` - Parses JSON into `out` and returns the advanced source pointer
|
|
64
64
|
|
|
65
65
|
### Key Files
|
|
66
66
|
|
|
@@ -91,9 +91,10 @@ __SERIALIZE(ptr: usize): void {
|
|
|
91
91
|
bs.offset += 2;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
__DESERIALIZE<T>(srcStart: usize, srcEnd: usize, out: T):
|
|
94
|
+
__DESERIALIZE<T>(srcStart: usize, srcEnd: usize, out: T): usize {
|
|
95
95
|
// Key matching and value parsing logic
|
|
96
96
|
// Uses switch statements on key length for efficiency
|
|
97
|
+
return srcStart;
|
|
97
98
|
}
|
|
98
99
|
```
|
|
99
100
|
|
|
@@ -286,12 +287,14 @@ For `@json` decorated classes, the generated `__DESERIALIZE` method:
|
|
|
286
287
|
4. Compares key bytes directly (often as `u32` or `u64` for short keys)
|
|
287
288
|
5. Deserializes value to appropriate type
|
|
288
289
|
6. Stores in output object at correct offset
|
|
290
|
+
7. Returns the updated source pointer after the parsed value
|
|
289
291
|
|
|
290
292
|
## Environment Variables
|
|
291
293
|
|
|
292
294
|
| Variable | Default | Description |
|
|
293
295
|
|----------|---------|-------------|
|
|
294
296
|
| `JSON_MODE` | SWAR | Optimization mode: NAIVE, SWAR, SIMD |
|
|
297
|
+
| `JSON_USE_FAST_PATH` | 0 | When set to `1`, emit the fast struct `__DESERIALIZE` body and helper; otherwise emit only the slow path |
|
|
295
298
|
| `JSON_DEBUG` | 0 | Debug level 0-3 (prints generated code) |
|
|
296
299
|
| `JSON_WRITE` | "" | Comma-separated files to output after transform |
|
|
297
300
|
| `JSON_CACHE` | 0 | Enable string caching (set to 1) |
|
package/CONTRIBUTING.md
CHANGED
|
@@ -60,7 +60,7 @@ npm test
|
|
|
60
60
|
Run a specific test file:
|
|
61
61
|
|
|
62
62
|
```bash
|
|
63
|
-
|
|
63
|
+
npm test string # Runs string.spec.ts
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
### Running Benchmarks
|
|
@@ -79,17 +79,23 @@ npm run bench:js
|
|
|
79
79
|
|
|
80
80
|
```
|
|
81
81
|
json-as/
|
|
82
|
-
├──
|
|
82
|
+
├── .as-test/ # As-test configuration and runners
|
|
83
|
+
├── assembly/ # AssemblyScript runtime implementation
|
|
83
84
|
│ ├── index.ts # Main entry point (JSON namespace)
|
|
84
85
|
│ ├── serialize/ # Serialization implementations
|
|
86
|
+
│ │ ├── index/ # Indexer of all methods
|
|
85
87
|
│ │ ├── simple/ # Naive implementation
|
|
86
88
|
│ │ ├── swar/ # SWAR-optimized
|
|
87
89
|
│ │ └── simd/ # SIMD-optimized
|
|
88
90
|
│ ├── deserialize/ # Deserialization implementations
|
|
91
|
+
│ │ ├── index/ # Indexer of all methods
|
|
92
|
+
│ │ ├── simple/ # Naive implementation
|
|
93
|
+
│ │ ├── swar/ # SWAR-optimized
|
|
94
|
+
│ │ └── simd/ # SIMD-optimized
|
|
89
95
|
│ ├── util/ # Utility functions
|
|
90
96
|
│ ├── custom/ # Constants and character codes
|
|
91
97
|
│ └── __tests__/ # Test files
|
|
92
|
-
├── transform/
|
|
98
|
+
├── transform/ # TypeScript compiler transform
|
|
93
99
|
│ └── src/ # Transform source code
|
|
94
100
|
├── lib/ # Shared utilities (buffer system)
|
|
95
101
|
├── bench/ # Benchmark suite
|
package/README.md
CHANGED
|
@@ -36,7 +36,7 @@ npm install json-as
|
|
|
36
36
|
Add the `--transform` to your `asc` command (e.g. in package.json)
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
--transform json-as
|
|
39
|
+
--transform json-as
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
Optionally, for additional performance, also add:
|
|
@@ -50,7 +50,7 @@ Alternatively, add it to your `asconfig.json`
|
|
|
50
50
|
```typescript
|
|
51
51
|
{
|
|
52
52
|
"options": {
|
|
53
|
-
"transform": ["json-as
|
|
53
|
+
"transform": ["json-as"]
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
```
|
|
@@ -400,15 +400,15 @@ This allows custom serialization while maintaining a generic interface for the l
|
|
|
400
400
|
|
|
401
401
|
The `json-as` library is engineered for **multi-GB/s processing speeds**, leveraging SIMD and SWAR optimizations along with highly efficient transformations. The charts below highlight key performance metrics such as build time, operations-per-second, and throughput.
|
|
402
402
|
|
|
403
|
-
You can **re-run the benchmarks** at any time by clicking the button below. After the workflow completes, refresh this page to view updated results.
|
|
404
|
-
|
|
405
|
-
[](https://github.com/JairusSW/json-as/actions/workflows/benchmark.yml)
|
|
406
|
-
|
|
407
403
|
### Comparison to JavaScript
|
|
408
404
|
|
|
409
|
-
The following charts compare JSON-AS (both SWAR and SIMD variants) against JavaScript's native `JSON` implementation.
|
|
405
|
+
The following charts compare JSON-AS (both SWAR and SIMD variants) against JavaScript's native `JSON` implementation. The published charts are generated locally and pushed to the `docs` branch.
|
|
410
406
|
|
|
411
407
|
> Note: Benchmarks reflect the **latest version**. Older versions may show different performance.
|
|
408
|
+
>
|
|
409
|
+
> Current local benchmark machine: AMD Ryzen 7 7800X3D (8 cores, 8 threads), 96 MB L3 cache, 32 GB RAM.
|
|
410
|
+
>
|
|
411
|
+
> Benchmark results include normal end-to-end work such as allocating the destination object or array before deserializing into it. Raw parser throughput is higher than the published figures because these numbers intentionally include that allocation/setup cost.
|
|
412
412
|
|
|
413
413
|
<img src="https://raw.githubusercontent.com/JairusSW/json-as/refs/heads/docs/charts/chart01.svg" alt="Performance Chart 1">
|
|
414
414
|
|
|
@@ -418,9 +418,9 @@ The following charts compare JSON-AS (both SWAR and SIMD variants) against JavaS
|
|
|
418
418
|
|
|
419
419
|
<img src="https://raw.githubusercontent.com/JairusSW/json-as/refs/heads/docs/charts/chart04.png" alt="Performance Chart 4">
|
|
420
420
|
|
|
421
|
-
|
|
421
|
+
<img src="https://raw.githubusercontent.com/JairusSW/json-as/refs/heads/docs/charts/chart05.png" alt="Performance Chart 5">
|
|
422
422
|
|
|
423
|
-
|
|
423
|
+
<img src="https://raw.githubusercontent.com/JairusSW/json-as/refs/heads/docs/charts/chart06.png" alt="Performance Chart 6">
|
|
424
424
|
|
|
425
425
|
### Performance Tuning
|
|
426
426
|
|
|
@@ -433,46 +433,63 @@ Here's a short list:
|
|
|
433
433
|
|
|
434
434
|
**JSON_MODE** (default: SWAR) - Selects which mode should be used. Can be `NAIVE,SWAR,SIMD`. Note that `--enable simd` may be required.
|
|
435
435
|
|
|
436
|
+
**JSON_USE_FAST_PATH** (default: 0) - When set to `1`, the transform emits the fast `__DESERIALIZE` implementation for generated structs. When unset or `0`, it emits only the slow path.
|
|
437
|
+
|
|
436
438
|
**JSON_WRITE** (default: "") - Select a series of files to output after transform and optimization passes have completed for easy inspection. Usage: `JSON_WRITE=.path-to-file-a.ts,./path-to-file-b.ts`
|
|
437
439
|
|
|
438
|
-
### Running
|
|
440
|
+
### Running Benchmarks Locally
|
|
439
441
|
|
|
440
|
-
Benchmarks are run directly on top of v8 for
|
|
442
|
+
Benchmarks are run directly on top of `v8` for tighter control over the engine configuration.
|
|
441
443
|
|
|
442
|
-
1.
|
|
444
|
+
1. Install the local benchmark prerequisites:
|
|
443
445
|
|
|
444
446
|
```bash
|
|
445
|
-
npm install
|
|
447
|
+
npm install -g jsvu
|
|
448
|
+
jsvu --engines=v8
|
|
446
449
|
```
|
|
447
450
|
|
|
448
|
-
2.
|
|
451
|
+
2. Add `~/.jsvu/bin` to your `PATH` and make sure `wasm-opt` is installed:
|
|
449
452
|
|
|
450
453
|
```bash
|
|
451
454
|
export PATH="${HOME}/.jsvu/bin:${PATH}"
|
|
455
|
+
sudo apt-get install -y binaryen
|
|
452
456
|
```
|
|
453
457
|
|
|
454
|
-
3.
|
|
458
|
+
3. Install project dependencies:
|
|
455
459
|
|
|
456
460
|
```bash
|
|
457
|
-
|
|
461
|
+
npm install
|
|
458
462
|
```
|
|
459
463
|
|
|
460
|
-
4.
|
|
464
|
+
4. Run either benchmark suite directly:
|
|
461
465
|
|
|
462
466
|
```bash
|
|
463
|
-
|
|
467
|
+
./run-bench.as.sh
|
|
468
|
+
./run-bench.js.sh
|
|
464
469
|
```
|
|
465
470
|
|
|
466
|
-
5.
|
|
471
|
+
5. Build charts from the latest local logs:
|
|
467
472
|
|
|
468
473
|
```bash
|
|
469
|
-
./
|
|
474
|
+
./build-charts.sh
|
|
470
475
|
```
|
|
471
476
|
|
|
472
|
-
|
|
477
|
+
6. Publish benchmark charts to the `docs` branch:
|
|
473
478
|
|
|
474
479
|
```bash
|
|
475
|
-
./
|
|
480
|
+
./publish-benchmarks.sh
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
If you already have fresh logs and only want to rebuild charts and push them:
|
|
484
|
+
|
|
485
|
+
```bash
|
|
486
|
+
./publish-benchmarks.sh --no-run
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
Or run the full local publish flow in one step:
|
|
490
|
+
|
|
491
|
+
```bash
|
|
492
|
+
npm run bench:publish
|
|
476
493
|
```
|
|
477
494
|
|
|
478
495
|
## Debugging
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./node_modules/as-test/as-test.config.schema.json",
|
|
3
|
+
"input": ["./assembly/__tests__/*.spec.ts"],
|
|
4
|
+
"outDir": "./.as-test/build",
|
|
5
|
+
"logs": "./.as-test/logs",
|
|
6
|
+
"coverageDir": "./.as-test/coverage",
|
|
7
|
+
"snapshotDir": "./.as-test/snapshots",
|
|
8
|
+
"config": "none",
|
|
9
|
+
"coverage": true,
|
|
10
|
+
"buildOptions": {
|
|
11
|
+
"args": ["--transform ./transform", "--debug"],
|
|
12
|
+
"target": "wasi"
|
|
13
|
+
},
|
|
14
|
+
"runOptions": {
|
|
15
|
+
"runtime": {
|
|
16
|
+
"cmd": "wasmtime <file>"
|
|
17
|
+
},
|
|
18
|
+
"reporter": "default"
|
|
19
|
+
},
|
|
20
|
+
"modes": {
|
|
21
|
+
"naive": {
|
|
22
|
+
"env": {
|
|
23
|
+
"JSON_MODE": "NAIVE"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"swar": {
|
|
27
|
+
"env": {
|
|
28
|
+
"JSON_MODE": "SWAR"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"simd": {
|
|
32
|
+
"env": {
|
|
33
|
+
"JSON_MODE": "SIMD"
|
|
34
|
+
},
|
|
35
|
+
"buildOptions": {
|
|
36
|
+
"args": ["--enable simd"]
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|