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.
- 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 +40 -21
- package/as-test.config.json +40 -0
- 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 +131 -10
- package/assembly/deserialize/simple/arbitrary.ts +2 -2
- package/assembly/deserialize/simple/array/arbitrary.ts +13 -20
- package/assembly/deserialize/simple/array/raw.ts +14 -21
- package/assembly/deserialize/simple/array/string.ts +3 -2
- package/assembly/deserialize/simple/array.ts +1 -0
- package/assembly/deserialize/simple/map.ts +14 -19
- package/assembly/deserialize/simple/object.ts +14 -19
- package/assembly/deserialize/simple/set.ts +9 -9
- package/assembly/deserialize/simple/staticarray/array.ts +12 -3
- package/assembly/deserialize/simple/staticarray/bool.ts +6 -2
- package/assembly/deserialize/simple/staticarray/float.ts +12 -3
- package/assembly/deserialize/simple/staticarray/integer.ts +6 -2
- package/assembly/deserialize/simple/staticarray/string.ts +5 -4
- package/assembly/deserialize/simple/staticarray/struct.ts +30 -7
- package/assembly/deserialize/simple/staticarray.ts +56 -12
- package/assembly/deserialize/simple/string.ts +1 -1
- package/assembly/deserialize/simple/struct.ts +12 -20
- 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 +653 -14
- package/assembly/deserialize/unsigned.ts +75 -0
- package/assembly/index.d.ts +2 -2
- package/assembly/index.ts +214 -132
- 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 +68 -68
- package/assembly/serialize/simple/string.ts +9 -10
- package/assembly/serialize/simple/typedarray.ts +63 -0
- package/assembly/serialize/swar/string.ts +26 -32
- package/assembly/test.ts +20 -20
- package/assembly/tsconfig.json +16 -1
- package/assembly/util/index.ts +1 -0
- package/assembly/util/masks.ts +17 -24
- package/assembly/util/memory.ts +0 -0
- package/assembly/util/stringScan.ts +24 -0
- package/assembly/util/swar.ts +2 -9
- package/eslint.config.js +43 -52
- package/lib/as-bs.ts +72 -77
- package/package.json +13 -9
- package/test.ts +99 -0
- package/tools/assemblyscript-eslint-local.js +6 -0
- package/tools/assemblyscript-eslint.js +53 -0
- package/tools/assemblyscript-prettier-plugin.js +33 -0
- package/tools/replacer.js +63 -0
- package/transform/lib/index.d.ts.map +1 -1
- package/transform/lib/index.js +397 -64
- package/transform/lib/index.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 +62 -0
- package/transform/lib/types.js.map +1 -1
- package/transform/tsconfig.json +2 -6
- package/.claude/settings.local.json +0 -9
- package/assembly/deserialize/simple/float.ts +0 -11
- package/assembly/deserialize/simple/integer.ts +0 -6
|
@@ -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,7 +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
|
+
|
|
423
|
+
<img src="https://raw.githubusercontent.com/JairusSW/json-as/refs/heads/docs/charts/chart06.png" alt="Performance Chart 6">
|
|
422
424
|
|
|
423
425
|
### Performance Tuning
|
|
424
426
|
|
|
@@ -431,46 +433,63 @@ Here's a short list:
|
|
|
431
433
|
|
|
432
434
|
**JSON_MODE** (default: SWAR) - Selects which mode should be used. Can be `NAIVE,SWAR,SIMD`. Note that `--enable simd` may be required.
|
|
433
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
|
+
|
|
434
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`
|
|
435
439
|
|
|
436
|
-
### Running
|
|
440
|
+
### Running Benchmarks Locally
|
|
437
441
|
|
|
438
|
-
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.
|
|
439
443
|
|
|
440
|
-
1.
|
|
444
|
+
1. Install the local benchmark prerequisites:
|
|
441
445
|
|
|
442
446
|
```bash
|
|
443
|
-
npm install
|
|
447
|
+
npm install -g jsvu
|
|
448
|
+
jsvu --engines=v8
|
|
444
449
|
```
|
|
445
450
|
|
|
446
|
-
2.
|
|
451
|
+
2. Add `~/.jsvu/bin` to your `PATH` and make sure `wasm-opt` is installed:
|
|
447
452
|
|
|
448
453
|
```bash
|
|
449
454
|
export PATH="${HOME}/.jsvu/bin:${PATH}"
|
|
455
|
+
sudo apt-get install -y binaryen
|
|
450
456
|
```
|
|
451
457
|
|
|
452
|
-
3.
|
|
458
|
+
3. Install project dependencies:
|
|
453
459
|
|
|
454
460
|
```bash
|
|
455
|
-
|
|
461
|
+
npm install
|
|
456
462
|
```
|
|
457
463
|
|
|
458
|
-
4.
|
|
464
|
+
4. Run either benchmark suite directly:
|
|
459
465
|
|
|
460
466
|
```bash
|
|
461
|
-
|
|
467
|
+
./run-bench.as.sh
|
|
468
|
+
./run-bench.js.sh
|
|
462
469
|
```
|
|
463
470
|
|
|
464
|
-
5.
|
|
471
|
+
5. Build charts from the latest local logs:
|
|
465
472
|
|
|
466
473
|
```bash
|
|
467
|
-
./
|
|
474
|
+
./build-charts.sh
|
|
468
475
|
```
|
|
469
476
|
|
|
470
|
-
|
|
477
|
+
6. Publish benchmark charts to the `docs` branch:
|
|
471
478
|
|
|
472
479
|
```bash
|
|
473
|
-
./
|
|
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
|
|
474
493
|
```
|
|
475
494
|
|
|
476
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
|
+
}
|