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
package/assembly/tsconfig.json
CHANGED
|
@@ -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
|
}
|
package/assembly/util/index.ts
CHANGED
package/assembly/util/masks.ts
CHANGED
|
@@ -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)) &
|
|
5
|
-
const hi = (byte >> 4) &
|
|
6
|
-
const lo = byte &
|
|
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) &
|
|
39
|
-
const lo = byte &
|
|
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
|
+
}
|
package/assembly/util/swar.ts
CHANGED
|
@@ -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 &
|
|
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
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17
|
-
|
|
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-
|
|
22
|
-
|
|
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: ["
|
|
40
|
-
languageOptions: {
|
|
41
|
-
globals: {
|
|
42
|
-
...globals.node,
|
|
43
|
-
},
|
|
44
|
-
},
|
|
33
|
+
files: ["assembly/**/*.ts", "lib/**/*.ts"],
|
|
45
34
|
rules: {
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
|
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
|
|
73
|
-
|
|
74
|
-
|
|
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
|
|
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
|
|
17
|
-
export let buffer:
|
|
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 =
|
|
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
|
-
|
|
56
|
-
|
|
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
|
-
|
|
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
|
-
|
|
114
|
-
|
|
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
|
-
|
|
131
|
-
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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 -
|
|
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,
|
|
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 -
|
|
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,
|
|
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 -
|
|
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,
|
|
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 -
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
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
|
-
|
|
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.
|
|
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-
|
|
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": "^
|
|
21
|
-
"
|
|
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": "
|
|
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);
|