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/index.ts
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
/// <reference path="./index.d.ts" />
|
|
2
2
|
|
|
3
3
|
import { bs } from "../lib/as-bs";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
4
|
+
import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
5
|
+
import { serializeArray } from "./serialize/index/array";
|
|
6
|
+
import { serializeMap } from "./serialize/index/map";
|
|
7
|
+
import { serializeDate } from "./serialize/index/date";
|
|
8
|
+
import { deserializeBoolean } from "./deserialize/index/bool";
|
|
9
|
+
import { deserializeArray } from "./deserialize/index/array";
|
|
10
|
+
import { deserializeFloat } from "./deserialize/index/float";
|
|
11
|
+
import { deserializeMap } from "./deserialize/index/map";
|
|
12
|
+
import { deserializeDate } from "./deserialize/index/date";
|
|
13
|
+
import { deserializeInteger } from "./deserialize/index/integer";
|
|
14
|
+
import { deserializeUnsigned } from "./deserialize/index/unsigned";
|
|
15
|
+
import { serializeArbitrary } from "./serialize/index/arbitrary";
|
|
16
|
+
import { serializeSet } from "./serialize/index/set";
|
|
17
|
+
import { deserializeSet } from "./deserialize/index/set";
|
|
18
|
+
import { serializeStaticArray } from "./serialize/index/staticarray";
|
|
19
|
+
import { deserializeStaticArray } from "./deserialize/index/staticarray";
|
|
18
20
|
|
|
19
21
|
import { NULL_WORD, QUOTE, NULL_WORD_U64, TRUE_WORD_U64, FALSE_WORD_U64 } from "./custom/chars";
|
|
20
22
|
import { dtoa_buffered, itoa_buffered } from "util/number";
|
|
21
|
-
import { serializeBool } from "./serialize/
|
|
22
|
-
import { serializeInteger } from "./serialize/
|
|
23
|
-
import { serializeFloat } from "./serialize/
|
|
24
|
-
import { serializeStruct } from "./serialize/
|
|
23
|
+
import { serializeBool } from "./serialize/index/bool";
|
|
24
|
+
import { serializeInteger } from "./serialize/index/integer";
|
|
25
|
+
import { serializeFloat } from "./serialize/index/float";
|
|
26
|
+
import { serializeStruct } from "./serialize/index/struct";
|
|
25
27
|
import { ptrToStr } from "./util/ptrToStr";
|
|
26
28
|
import { atoi, bytes } from "./util";
|
|
27
|
-
import { deserializeArbitrary } from "./deserialize/
|
|
28
|
-
import { serializeObject } from "./serialize/
|
|
29
|
-
import { deserializeObject } from "./deserialize/
|
|
30
|
-
import { serializeRaw } from "./serialize/
|
|
31
|
-
import { deserializeRaw } from "./deserialize/
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import { serializeString } from "./serialize/simple/string";
|
|
37
|
-
import { deserializeString_SIMD } from "./deserialize/simd/string";
|
|
29
|
+
import { deserializeArbitrary } from "./deserialize/index/arbitrary";
|
|
30
|
+
import { serializeObject } from "./serialize/index/object";
|
|
31
|
+
import { deserializeObject } from "./deserialize/index/object";
|
|
32
|
+
import { serializeRaw } from "./serialize/index/raw";
|
|
33
|
+
import { deserializeRaw } from "./deserialize/index/raw";
|
|
34
|
+
import { deserializeString } from "./deserialize/index/string";
|
|
35
|
+
import { serializeString } from "./serialize/index/string";
|
|
36
|
+
import { deserializeArrayBuffer, deserializeTypedArray } from "./deserialize/index/typedarray";
|
|
37
|
+
import { serializeArrayBufferUnsafe, serializeTypedArray } from "./serialize/index/typedarray";
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* Offset of the 'storage' property in the JSON.Value class.
|
|
@@ -96,7 +96,6 @@ export namespace JSON {
|
|
|
96
96
|
if (out) {
|
|
97
97
|
out = changetype<string>(__renew(changetype<usize>(out), sizeof<T>() << 3));
|
|
98
98
|
|
|
99
|
-
// @ts-expect-error
|
|
100
99
|
const bytes = itoa_buffered(changetype<usize>(out), data) << 1;
|
|
101
100
|
return (out = changetype<string>(__renew(changetype<usize>(out), bytes)));
|
|
102
101
|
}
|
|
@@ -105,12 +104,10 @@ export namespace JSON {
|
|
|
105
104
|
if (out) {
|
|
106
105
|
out = changetype<string>(__renew(changetype<usize>(out), 64));
|
|
107
106
|
|
|
108
|
-
// @ts-expect-error
|
|
109
107
|
const bytes = dtoa_buffered(changetype<usize>(out), data) << 1;
|
|
110
108
|
return (out = changetype<string>(__renew(changetype<usize>(out), bytes)));
|
|
111
109
|
}
|
|
112
110
|
return data.toString();
|
|
113
|
-
// @ts-expect-error: Function is generated by transform
|
|
114
111
|
} else if (isNullable<T>() && changetype<usize>(data) == <usize>0) {
|
|
115
112
|
if (out) {
|
|
116
113
|
out = changetype<string>(__renew(changetype<usize>(out), 8));
|
|
@@ -118,22 +115,14 @@ export namespace JSON {
|
|
|
118
115
|
return out;
|
|
119
116
|
}
|
|
120
117
|
return NULL_WORD;
|
|
121
|
-
// @ts-expect-error
|
|
122
118
|
} else if (isString<nonnull<T>>()) {
|
|
123
|
-
|
|
124
|
-
serializeString_SIMD(data as string);
|
|
125
|
-
} else if (JSON_MODE === JSONMode.SWAR) {
|
|
126
|
-
serializeString_SWAR(data as string);
|
|
127
|
-
} else {
|
|
128
|
-
serializeString(data as string);
|
|
129
|
-
}
|
|
119
|
+
serializeString(data as string);
|
|
130
120
|
return bs.out<string>();
|
|
131
121
|
// @ts-expect-error: Supplied by transform
|
|
132
122
|
} else if (isDefined(data.__SERIALIZE)) {
|
|
133
123
|
// @ts-expect-error
|
|
134
124
|
inline.always(data.__SERIALIZE(changetype<usize>(data)));
|
|
135
125
|
return bs.out<string>();
|
|
136
|
-
// @ts-expect-error: Supplied by transform
|
|
137
126
|
} else if (data instanceof Date) {
|
|
138
127
|
out = out ? changetype<string>(__renew(changetype<usize>(out), 52)) : changetype<string>(__new(52, idof<string>()));
|
|
139
128
|
|
|
@@ -149,6 +138,39 @@ export namespace JSON {
|
|
|
149
138
|
// @ts-expect-error
|
|
150
139
|
inline.always(serializeStaticArray(changetype<nonnull<T>>(data)));
|
|
151
140
|
return bs.out<string>();
|
|
141
|
+
} else if (data instanceof Int8Array) {
|
|
142
|
+
inline.always(serializeTypedArray<Int8Array>(data));
|
|
143
|
+
return bs.out<string>();
|
|
144
|
+
} else if (data instanceof Uint8Array) {
|
|
145
|
+
inline.always(serializeTypedArray<Uint8Array>(data));
|
|
146
|
+
return bs.out<string>();
|
|
147
|
+
} else if (data instanceof Uint8ClampedArray) {
|
|
148
|
+
inline.always(serializeTypedArray<Uint8ClampedArray>(data));
|
|
149
|
+
return bs.out<string>();
|
|
150
|
+
} else if (data instanceof Int16Array) {
|
|
151
|
+
inline.always(serializeTypedArray<Int16Array>(data));
|
|
152
|
+
return bs.out<string>();
|
|
153
|
+
} else if (data instanceof Uint16Array) {
|
|
154
|
+
inline.always(serializeTypedArray<Uint16Array>(data));
|
|
155
|
+
return bs.out<string>();
|
|
156
|
+
} else if (data instanceof Int32Array) {
|
|
157
|
+
inline.always(serializeTypedArray<Int32Array>(data));
|
|
158
|
+
return bs.out<string>();
|
|
159
|
+
} else if (data instanceof Uint32Array) {
|
|
160
|
+
inline.always(serializeTypedArray<Uint32Array>(data));
|
|
161
|
+
return bs.out<string>();
|
|
162
|
+
} else if (data instanceof Int64Array) {
|
|
163
|
+
inline.always(serializeTypedArray<Int64Array>(data));
|
|
164
|
+
return bs.out<string>();
|
|
165
|
+
} else if (data instanceof Uint64Array) {
|
|
166
|
+
inline.always(serializeTypedArray<Uint64Array>(data));
|
|
167
|
+
return bs.out<string>();
|
|
168
|
+
} else if (data instanceof Float32Array) {
|
|
169
|
+
inline.always(serializeTypedArray<Float32Array>(data));
|
|
170
|
+
return bs.out<string>();
|
|
171
|
+
} else if (data instanceof Float64Array) {
|
|
172
|
+
inline.always(serializeTypedArray<Float64Array>(data));
|
|
173
|
+
return bs.out<string>();
|
|
152
174
|
} else if (data instanceof Set) {
|
|
153
175
|
// @ts-expect-error
|
|
154
176
|
inline.always(serializeSet(changetype<nonnull<T>>(data)));
|
|
@@ -169,14 +191,16 @@ export namespace JSON {
|
|
|
169
191
|
} else if (data instanceof JSON.Box) {
|
|
170
192
|
return JSON.stringify(data.value);
|
|
171
193
|
} else {
|
|
172
|
-
throw new Error(
|
|
173
|
-
`Could not serialize data of type '${nameof<T>()}'. ` +
|
|
174
|
-
`If this is a custom class, add the @json decorator: @json class ${nameof<T>()} { ... }. ` +
|
|
175
|
-
`Supported types: primitives, string, Array, Map, Date, and @json decorated classes.`
|
|
176
|
-
);
|
|
194
|
+
throw new Error(`Could not serialize data of type '${nameof<T>()}'. ` + `If this is a custom class, add the @json decorator: @json class ${nameof<T>()} { ... }. ` + `Supported types: primitives, string, Array, StaticArray, TypedArray, Map, Date, and @json decorated classes. ` + `For ArrayBuffer, use JSON.stringifyArrayBuffer(changetype<usize>(...)).`);
|
|
177
195
|
}
|
|
178
196
|
}
|
|
179
197
|
|
|
198
|
+
|
|
199
|
+
@inline export function stringifyArrayBuffer(dataStart: usize): string {
|
|
200
|
+
serializeArrayBufferUnsafe(dataStart, changetype<OBJECT>(dataStart - TOTAL_OVERHEAD).rtSize);
|
|
201
|
+
return bs.out<string>();
|
|
202
|
+
}
|
|
203
|
+
|
|
180
204
|
/**
|
|
181
205
|
* Parses valid JSON strings into their original format
|
|
182
206
|
* ```js
|
|
@@ -192,23 +216,13 @@ export namespace JSON {
|
|
|
192
216
|
if (isBoolean<T>()) {
|
|
193
217
|
return deserializeBoolean(dataPtr, dataPtr + dataSize) as T;
|
|
194
218
|
} else if (isInteger<T>()) {
|
|
195
|
-
return deserializeInteger<T>(dataPtr, dataPtr + dataSize);
|
|
219
|
+
return isSigned<T>() ? deserializeInteger<T>(dataPtr, dataPtr + dataSize) : deserializeUnsigned<T>(dataPtr, dataPtr + dataSize);
|
|
196
220
|
} else if (isFloat<T>()) {
|
|
197
221
|
return deserializeFloat<T>(dataPtr, dataPtr + dataSize);
|
|
198
222
|
} else if (isNullable<T>() && dataSize == 8 && load<u64>(dataPtr) == NULL_WORD_U64) {
|
|
199
|
-
// @ts-expect-error
|
|
200
223
|
return null;
|
|
201
224
|
} else if (isString<T>()) {
|
|
202
|
-
|
|
203
|
-
// @ts-expect-error: type
|
|
204
|
-
return deserializeString(dataPtr, dataPtr + dataSize);
|
|
205
|
-
} else if (JSON_MODE === JSONMode.SWAR) {
|
|
206
|
-
// @ts-expect-error: type
|
|
207
|
-
return deserializeString_SWAR(dataPtr, dataPtr + dataSize);
|
|
208
|
-
} else if (JSON_MODE === JSONMode.SIMD) {
|
|
209
|
-
// @ts-expect-error: type
|
|
210
|
-
return deserializeString_SIMD(dataPtr, dataPtr + dataSize);
|
|
211
|
-
}
|
|
225
|
+
return deserializeString(dataPtr, dataPtr + dataSize) as T;
|
|
212
226
|
} else {
|
|
213
227
|
let type: nonnull<T> = changetype<nonnull<T>>(0);
|
|
214
228
|
if (type instanceof StaticArray) {
|
|
@@ -217,16 +231,41 @@ export namespace JSON {
|
|
|
217
231
|
} else if (type instanceof Array) {
|
|
218
232
|
// @ts-expect-error
|
|
219
233
|
return inline.always(deserializeArray<nonnull<T>>(dataPtr, dataPtr + dataSize, changetype<usize>(instantiate<T>())));
|
|
220
|
-
}
|
|
234
|
+
} else if (type instanceof Int8Array) {
|
|
235
|
+
return deserializeTypedArray<Int8Array>(dataPtr, dataPtr + dataSize, 0) as T;
|
|
236
|
+
} else if (type instanceof Uint8Array) {
|
|
237
|
+
return deserializeTypedArray<Uint8Array>(dataPtr, dataPtr + dataSize, 0) as T;
|
|
238
|
+
} else if (type instanceof Uint8ClampedArray) {
|
|
239
|
+
return deserializeTypedArray<Uint8ClampedArray>(dataPtr, dataPtr + dataSize, 0) as T;
|
|
240
|
+
} else if (type instanceof Int16Array) {
|
|
241
|
+
return deserializeTypedArray<Int16Array>(dataPtr, dataPtr + dataSize, 0) as T;
|
|
242
|
+
} else if (type instanceof Uint16Array) {
|
|
243
|
+
return deserializeTypedArray<Uint16Array>(dataPtr, dataPtr + dataSize, 0) as T;
|
|
244
|
+
} else if (type instanceof Int32Array) {
|
|
245
|
+
return deserializeTypedArray<Int32Array>(dataPtr, dataPtr + dataSize, 0) as T;
|
|
246
|
+
} else if (type instanceof Uint32Array) {
|
|
247
|
+
return deserializeTypedArray<Uint32Array>(dataPtr, dataPtr + dataSize, 0) as T;
|
|
248
|
+
} else if (type instanceof Int64Array) {
|
|
249
|
+
return deserializeTypedArray<Int64Array>(dataPtr, dataPtr + dataSize, 0) as T;
|
|
250
|
+
} else if (type instanceof Uint64Array) {
|
|
251
|
+
return deserializeTypedArray<Uint64Array>(dataPtr, dataPtr + dataSize, 0) as T;
|
|
252
|
+
} else if (type instanceof Float32Array) {
|
|
253
|
+
return deserializeTypedArray<Float32Array>(dataPtr, dataPtr + dataSize, 0) as T;
|
|
254
|
+
} else if (type instanceof Float64Array) {
|
|
255
|
+
return deserializeTypedArray<Float64Array>(dataPtr, dataPtr + dataSize, 0) as T;
|
|
256
|
+
} else if (type instanceof ArrayBuffer) {
|
|
257
|
+
return deserializeArrayBuffer(dataPtr, dataPtr + dataSize, 0) as T;
|
|
258
|
+
} else if (type instanceof Set) {
|
|
221
259
|
// @ts-expect-error
|
|
222
260
|
return inline.always(deserializeSet<nonnull<T>>(dataPtr, dataPtr + dataSize, 0));
|
|
223
|
-
|
|
261
|
+
// @ts-expect-error: Defined by transform
|
|
224
262
|
} else if (isDefined(type.__DESERIALIZE)) {
|
|
225
263
|
const out = changetype<nonnull<T>>(__new(offsetof<nonnull<T>>(), idof<nonnull<T>>()));
|
|
226
264
|
// @ts-expect-error: Defined by transform
|
|
227
265
|
if (isDefined(type.__INITIALIZE)) out.__INITIALIZE();
|
|
228
266
|
// @ts-expect-error
|
|
229
|
-
|
|
267
|
+
out.__DESERIALIZE(dataPtr, dataPtr + dataSize, out);
|
|
268
|
+
return out;
|
|
230
269
|
} else if (type instanceof Map) {
|
|
231
270
|
// @ts-expect-error
|
|
232
271
|
return inline.always(deserializeMap<nonnull<T>>(dataPtr, dataPtr + dataSize, 0));
|
|
@@ -246,11 +285,7 @@ export namespace JSON {
|
|
|
246
285
|
// @ts-expect-error
|
|
247
286
|
return new JSON.Box(parseBox(data, changetype<nonnull<T>>(0).value));
|
|
248
287
|
} else {
|
|
249
|
-
throw new Error(
|
|
250
|
-
`Could not deserialize JSON to type '${nameof<T>()}'. ` +
|
|
251
|
-
`If this is a custom class, ensure it has the @json decorator: @json class ${nameof<T>()} { ... }. ` +
|
|
252
|
-
`Input: "${data.length > 50 ? data.slice(0, 50) + '...' : data}"`
|
|
253
|
-
);
|
|
288
|
+
throw new Error(`Could not deserialize JSON to type '${nameof<T>()}'. ` + `If this is a custom class, ensure it has the @json decorator: @json class ${nameof<T>()} { ... }. ` + `Input: "${data.length > 50 ? data.slice(0, 50) + "..." : data}"`);
|
|
254
289
|
}
|
|
255
290
|
}
|
|
256
291
|
}
|
|
@@ -353,13 +388,11 @@ export namespace JSON {
|
|
|
353
388
|
* @param data - A valid JSON string
|
|
354
389
|
* @returns A new Raw instance
|
|
355
390
|
*/
|
|
356
|
-
// @ts-expect-error: inline
|
|
357
391
|
@inline static from(data: string): JSON.Raw {
|
|
358
392
|
return new JSON.Raw(data);
|
|
359
393
|
}
|
|
360
394
|
}
|
|
361
395
|
|
|
362
|
-
|
|
363
396
|
/**
|
|
364
397
|
* Dynamic value container that can hold any JSON-compatible type at runtime.
|
|
365
398
|
*
|
|
@@ -427,14 +460,14 @@ export namespace JSON {
|
|
|
427
460
|
// @ts-expect-error: can assume that T is ArrayLike based on previous condition
|
|
428
461
|
if (isArray<T>() && idof<valueof<T>>() == idof<JSON.Value>()) return JSON.Types.Array;
|
|
429
462
|
if (value instanceof JSON.Box) return this.getType(value.value);
|
|
430
|
-
if (value instanceof u8 || value instanceof i8) return JSON.Types.U8;
|
|
431
|
-
if (value instanceof u16 || value instanceof i16) return JSON.Types.U16;
|
|
432
|
-
if (value instanceof u32 || value instanceof i32) return JSON.Types.U32;
|
|
433
|
-
if (value instanceof u64 || value instanceof i64) return JSON.Types.U64;
|
|
434
463
|
if (value instanceof i8) return JSON.Types.I8;
|
|
435
464
|
if (value instanceof i16) return JSON.Types.I16;
|
|
436
465
|
if (value instanceof i32) return JSON.Types.I32;
|
|
437
466
|
if (value instanceof i64) return JSON.Types.I64;
|
|
467
|
+
if (value instanceof u8) return JSON.Types.U8;
|
|
468
|
+
if (value instanceof u16) return JSON.Types.U16;
|
|
469
|
+
if (value instanceof u32) return JSON.Types.U32;
|
|
470
|
+
if (value instanceof u64) return JSON.Types.U64;
|
|
438
471
|
if (value instanceof f32) return JSON.Types.F32;
|
|
439
472
|
if (value instanceof f64) return JSON.Types.F64;
|
|
440
473
|
if (value instanceof Map) return JSON.Types.Map;
|
|
@@ -468,13 +501,11 @@ export namespace JSON {
|
|
|
468
501
|
} else if (isDefined(value.__SERIALIZE) && isManaged<T>(value)) {
|
|
469
502
|
// @ts-expect-error
|
|
470
503
|
if (!JSON.Value.METHODS.has(idof<T>())) JSON.Value.METHODS.set(idof<T>(), value.__SERIALIZE.index);
|
|
471
|
-
// @ts-expect-error
|
|
472
504
|
store<usize>(changetype<usize>(this), changetype<usize>(value), STORAGE);
|
|
473
505
|
} else if (value instanceof JSON.Obj) {
|
|
474
506
|
store<T>(changetype<usize>(this), value, STORAGE);
|
|
475
507
|
// @ts-expect-error
|
|
476
508
|
} else if (isArray<T>() && idof<valueof<T>>() == idof<JSON.Value>()) {
|
|
477
|
-
// @ts-expect-error: T satisfies constraints of any[]
|
|
478
509
|
store<T>(changetype<usize>(this), value, STORAGE);
|
|
479
510
|
}
|
|
480
511
|
}
|
|
@@ -522,6 +553,14 @@ export namespace JSON {
|
|
|
522
553
|
return this.get<u32>().toString();
|
|
523
554
|
case JSON.Types.U64:
|
|
524
555
|
return this.get<u64>().toString();
|
|
556
|
+
case JSON.Types.I8:
|
|
557
|
+
return this.get<i8>().toString();
|
|
558
|
+
case JSON.Types.I16:
|
|
559
|
+
return this.get<i16>().toString();
|
|
560
|
+
case JSON.Types.I32:
|
|
561
|
+
return this.get<i32>().toString();
|
|
562
|
+
case JSON.Types.I64:
|
|
563
|
+
return this.get<i64>().toString();
|
|
525
564
|
case JSON.Types.F32:
|
|
526
565
|
return this.get<f32>().toString();
|
|
527
566
|
case JSON.Types.F64:
|
|
@@ -560,6 +599,7 @@ export namespace JSON {
|
|
|
560
599
|
}
|
|
561
600
|
}
|
|
562
601
|
|
|
602
|
+
|
|
563
603
|
@unsafe private __visit(cookie: u32): void {
|
|
564
604
|
if (this.type >= JSON.Types.String) {
|
|
565
605
|
__visit(load<usize>(changetype<usize>(this), STORAGE), cookie);
|
|
@@ -588,15 +628,13 @@ export namespace JSON {
|
|
|
588
628
|
*/
|
|
589
629
|
export class Obj {
|
|
590
630
|
/** Internal storage map */
|
|
591
|
-
// @ts-expect-error: type
|
|
592
631
|
storage: Map<string, JSON.Value> = new Map<string, JSON.Value>();
|
|
593
632
|
|
|
594
|
-
constructor() {
|
|
633
|
+
constructor() {}
|
|
595
634
|
|
|
596
635
|
/**
|
|
597
636
|
* Gets the number of key-value pairs in the object.
|
|
598
637
|
*/
|
|
599
|
-
// @ts-expect-error: decorator
|
|
600
638
|
@inline get size(): i32 {
|
|
601
639
|
return this.storage.size;
|
|
602
640
|
}
|
|
@@ -606,7 +644,6 @@ export namespace JSON {
|
|
|
606
644
|
* @param key - The string key
|
|
607
645
|
* @param value - The value (will be wrapped in JSON.Value)
|
|
608
646
|
*/
|
|
609
|
-
// @ts-expect-error: decorator
|
|
610
647
|
@inline set<T>(key: string, value: T): void {
|
|
611
648
|
this.storage.set(key, JSON.Value.from<T>(value));
|
|
612
649
|
}
|
|
@@ -616,7 +653,6 @@ export namespace JSON {
|
|
|
616
653
|
* @param key - The key to look up
|
|
617
654
|
* @returns The JSON.Value or null if not found
|
|
618
655
|
*/
|
|
619
|
-
// @ts-expect-error: decorator
|
|
620
656
|
@inline get(key: string): JSON.Value | null {
|
|
621
657
|
if (!this.storage.has(key)) return null;
|
|
622
658
|
return this.storage.get(key);
|
|
@@ -627,7 +663,6 @@ export namespace JSON {
|
|
|
627
663
|
* @param key - The key to check
|
|
628
664
|
* @returns true if the key exists
|
|
629
665
|
*/
|
|
630
|
-
// @ts-expect-error: decorator
|
|
631
666
|
@inline has(key: string): bool {
|
|
632
667
|
return this.storage.has(key);
|
|
633
668
|
}
|
|
@@ -637,7 +672,6 @@ export namespace JSON {
|
|
|
637
672
|
* @param key - The key to delete
|
|
638
673
|
* @returns true if the key was found and deleted
|
|
639
674
|
*/
|
|
640
|
-
// @ts-expect-error: decorator
|
|
641
675
|
@inline delete(key: string): bool {
|
|
642
676
|
return this.storage.delete(key);
|
|
643
677
|
}
|
|
@@ -646,7 +680,6 @@ export namespace JSON {
|
|
|
646
680
|
* Gets all keys in the object.
|
|
647
681
|
* @returns Array of string keys
|
|
648
682
|
*/
|
|
649
|
-
// @ts-expect-error: decorator
|
|
650
683
|
@inline keys(): string[] {
|
|
651
684
|
return this.storage.keys();
|
|
652
685
|
}
|
|
@@ -655,7 +688,6 @@ export namespace JSON {
|
|
|
655
688
|
* Gets all values in the object.
|
|
656
689
|
* @returns Array of JSON.Value instances
|
|
657
690
|
*/
|
|
658
|
-
// @ts-expect-error: decorator
|
|
659
691
|
@inline values(): JSON.Value[] {
|
|
660
692
|
return this.storage.values();
|
|
661
693
|
}
|
|
@@ -664,7 +696,6 @@ export namespace JSON {
|
|
|
664
696
|
* Serializes the object to a JSON string.
|
|
665
697
|
* @returns JSON string representation
|
|
666
698
|
*/
|
|
667
|
-
// @ts-expect-error: decorator
|
|
668
699
|
@inline toString(): string {
|
|
669
700
|
return JSON.stringify(this);
|
|
670
701
|
}
|
|
@@ -674,14 +705,27 @@ export namespace JSON {
|
|
|
674
705
|
* @param value - The value to convert
|
|
675
706
|
* @returns A new JSON.Obj instance
|
|
676
707
|
*/
|
|
677
|
-
// @ts-expect-error: decorator
|
|
678
708
|
@inline static from<T>(value: T): JSON.Obj {
|
|
679
709
|
if (value instanceof JSON.Obj) return value;
|
|
680
|
-
const out = new JSON.Obj();
|
|
681
|
-
|
|
682
710
|
if (value instanceof Map) {
|
|
711
|
+
const out = new JSON.Obj();
|
|
712
|
+
if (!isString<indexof<T>>()) {
|
|
713
|
+
throw new Error("JSON.Obj.from only supports maps with string keys");
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
const keys = value.keys();
|
|
717
|
+
const values = value.values();
|
|
718
|
+
for (let i = 0; i < keys.length; i++) {
|
|
719
|
+
out.set(unchecked(keys[i]), unchecked(values[i]));
|
|
720
|
+
}
|
|
721
|
+
return out;
|
|
683
722
|
}
|
|
684
|
-
|
|
723
|
+
|
|
724
|
+
const parsed = JSON.parse<JSON.Value>(JSON.stringify(value));
|
|
725
|
+
if (parsed.type != JSON.Types.Object) {
|
|
726
|
+
throw new Error("JSON.Obj.from expects a value that serializes to a JSON object");
|
|
727
|
+
}
|
|
728
|
+
return parsed.get<JSON.Obj>();
|
|
685
729
|
}
|
|
686
730
|
}
|
|
687
731
|
/**
|
|
@@ -689,7 +733,7 @@ export namespace JSON {
|
|
|
689
733
|
*/
|
|
690
734
|
export class Box<T> {
|
|
691
735
|
constructor(public value: T) {
|
|
692
|
-
if (!isInteger<T>() && !isFloat<T>()) ERROR("JSON.Box should only hold primitive types!");
|
|
736
|
+
if (!isInteger<T>() && !isFloat<T>() && !isBoolean<T>()) ERROR("JSON.Box should only hold primitive types!");
|
|
693
737
|
}
|
|
694
738
|
/**
|
|
695
739
|
* Set the internal value of Box to new value
|
|
@@ -716,7 +760,7 @@ export namespace JSON {
|
|
|
716
760
|
if (value.type === JSON.Types.Null) return null;
|
|
717
761
|
const v = value.type === JSON.Types.F64 ? value.get<f64>() : value.get<T>();
|
|
718
762
|
// @ts-expect-error
|
|
719
|
-
return new Box(isInteger<T>() || isFloat<T>() ? <T>
|
|
763
|
+
return new Box(isInteger<T>() || isFloat<T>() ? <T>v : v);
|
|
720
764
|
}
|
|
721
765
|
/**
|
|
722
766
|
* Creates a reference to a primitive type
|
|
@@ -758,19 +802,12 @@ export namespace JSON {
|
|
|
758
802
|
} else if (isFloat<T>(data)) {
|
|
759
803
|
// @ts-expect-error
|
|
760
804
|
serializeFloat<T>(data);
|
|
761
|
-
// @ts-expect-error: Function is generated by transform
|
|
762
805
|
} else if (isNullable<T>() && changetype<usize>(data) == <usize>0) {
|
|
763
806
|
bs.proposeSize(8);
|
|
764
807
|
store<u64>(bs.offset, NULL_WORD_U64);
|
|
765
808
|
bs.offset += 8;
|
|
766
809
|
} else if (isString<nonnull<T>>()) {
|
|
767
|
-
|
|
768
|
-
serializeString_SIMD(data as string);
|
|
769
|
-
} else if (JSON_MODE === JSONMode.SWAR) {
|
|
770
|
-
serializeString_SWAR(data as string);
|
|
771
|
-
} else {
|
|
772
|
-
serializeString(data as string);
|
|
773
|
-
}
|
|
810
|
+
serializeString(data as string);
|
|
774
811
|
// @ts-expect-error: Supplied by transform
|
|
775
812
|
} else if (isDefined(data.__SERIALIZE_CUSTOM)) {
|
|
776
813
|
// @ts-expect-error
|
|
@@ -788,6 +825,28 @@ export namespace JSON {
|
|
|
788
825
|
} else if (data instanceof StaticArray) {
|
|
789
826
|
// @ts-expect-error
|
|
790
827
|
serializeStaticArray(changetype<nonnull<T>>(data));
|
|
828
|
+
} else if (data instanceof Int8Array) {
|
|
829
|
+
serializeTypedArray<Int8Array>(data);
|
|
830
|
+
} else if (data instanceof Uint8Array) {
|
|
831
|
+
serializeTypedArray<Uint8Array>(data);
|
|
832
|
+
} else if (data instanceof Uint8ClampedArray) {
|
|
833
|
+
serializeTypedArray<Uint8ClampedArray>(data);
|
|
834
|
+
} else if (data instanceof Int16Array) {
|
|
835
|
+
serializeTypedArray<Int16Array>(data);
|
|
836
|
+
} else if (data instanceof Uint16Array) {
|
|
837
|
+
serializeTypedArray<Uint16Array>(data);
|
|
838
|
+
} else if (data instanceof Int32Array) {
|
|
839
|
+
serializeTypedArray<Int32Array>(data);
|
|
840
|
+
} else if (data instanceof Uint32Array) {
|
|
841
|
+
serializeTypedArray<Uint32Array>(data);
|
|
842
|
+
} else if (data instanceof Int64Array) {
|
|
843
|
+
serializeTypedArray<Int64Array>(data);
|
|
844
|
+
} else if (data instanceof Uint64Array) {
|
|
845
|
+
serializeTypedArray<Uint64Array>(data);
|
|
846
|
+
} else if (data instanceof Float32Array) {
|
|
847
|
+
serializeTypedArray<Float32Array>(data);
|
|
848
|
+
} else if (data instanceof Float64Array) {
|
|
849
|
+
serializeTypedArray<Float64Array>(data);
|
|
791
850
|
} else if (data instanceof Set) {
|
|
792
851
|
// @ts-expect-error
|
|
793
852
|
serializeSet(changetype<nonnull<T>>(data));
|
|
@@ -803,14 +862,33 @@ export namespace JSON {
|
|
|
803
862
|
} else if (data instanceof JSON.Box) {
|
|
804
863
|
__serialize(data.value);
|
|
805
864
|
} else {
|
|
806
|
-
throw new Error(
|
|
807
|
-
`Could not serialize data of type '${nameof<T>()}'. ` +
|
|
808
|
-
`If this is a custom class, add the @json decorator: @json class ${nameof<T>()} { ... }. ` +
|
|
809
|
-
`Supported types: primitives, string, Array, Map, Date, and @json decorated classes.`
|
|
810
|
-
);
|
|
865
|
+
throw new Error(`Could not serialize data of type '${nameof<T>()}'. ` + `If this is a custom class, add the @json decorator: @json class ${nameof<T>()} { ... }. ` + `Supported types: primitives, string, Array, StaticArray, TypedArray, Map, Date, and @json decorated classes. ` + `For ArrayBuffer, use JSON.stringifyArrayBuffer(changetype<usize>(...)).`);
|
|
811
866
|
}
|
|
812
867
|
}
|
|
813
868
|
|
|
869
|
+
|
|
870
|
+
@inline export function __serializeArrayBufferUnsafe(dataStart: usize): void {
|
|
871
|
+
serializeArrayBufferUnsafe(dataStart, changetype<OBJECT>(dataStart - TOTAL_OVERHEAD).rtSize);
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
|
|
875
|
+
@inline export function __serializeArrayBuffer(data: ArrayBuffer): void {
|
|
876
|
+
const dataStart = changetype<usize>(data);
|
|
877
|
+
serializeArrayBufferUnsafe(dataStart, changetype<OBJECT>(dataStart - TOTAL_OVERHEAD).rtSize);
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
|
|
881
|
+
@inline export function parseArrayBuffer(data: string): ArrayBuffer {
|
|
882
|
+
const dataSize = bytes(data);
|
|
883
|
+
const dataPtr = changetype<usize>(data);
|
|
884
|
+
return deserializeArrayBuffer(dataPtr, dataPtr + dataSize, 0);
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
|
|
888
|
+
@inline export function __deserializeArrayBuffer(srcStart: usize, srcEnd: usize, dst: usize = 0): ArrayBuffer {
|
|
889
|
+
return deserializeArrayBuffer(srcStart, srcEnd, dst);
|
|
890
|
+
}
|
|
891
|
+
|
|
814
892
|
/**
|
|
815
893
|
* Deserializes JSON data directly from the buffer.
|
|
816
894
|
* Should only be used if you know what you are doing.
|
|
@@ -824,16 +902,14 @@ export namespace JSON {
|
|
|
824
902
|
// @ts-expect-error: type
|
|
825
903
|
return deserializeBoolean(srcStart, srcEnd);
|
|
826
904
|
} else if (isInteger<T>()) {
|
|
827
|
-
return
|
|
905
|
+
return isSigned<T>() ? deserializeInteger<T>(srcStart, srcEnd) : deserializeUnsigned<T>(srcStart, srcEnd);
|
|
828
906
|
} else if (isFloat<T>()) {
|
|
829
907
|
return deserializeFloat<T>(srcStart, srcEnd);
|
|
830
908
|
} else if (isString<T>()) {
|
|
831
909
|
if (srcEnd - srcStart < 4) throw new Error("Cannot parse data as string because it was formatted incorrectly!");
|
|
832
910
|
|
|
833
|
-
|
|
834
|
-
return deserializeString(srcStart, srcEnd);
|
|
911
|
+
return deserializeString(srcStart, srcEnd) as T;
|
|
835
912
|
} else if (isNullable<T>() && srcEnd - srcStart == 8 && load<u64>(srcStart) == NULL_WORD_U64) {
|
|
836
|
-
// @ts-expect-error
|
|
837
913
|
return null;
|
|
838
914
|
} else {
|
|
839
915
|
let type: nonnull<T> = changetype<nonnull<T>>(0);
|
|
@@ -843,16 +919,41 @@ export namespace JSON {
|
|
|
843
919
|
} else if (type instanceof Array) {
|
|
844
920
|
// @ts-expect-error: type
|
|
845
921
|
return deserializeArray<T>(srcStart, srcEnd, dst);
|
|
922
|
+
} else if (type instanceof Int8Array) {
|
|
923
|
+
return deserializeTypedArray<Int8Array>(srcStart, srcEnd, dst) as T;
|
|
924
|
+
} else if (type instanceof Uint8Array) {
|
|
925
|
+
return deserializeTypedArray<Uint8Array>(srcStart, srcEnd, dst) as T;
|
|
926
|
+
} else if (type instanceof Uint8ClampedArray) {
|
|
927
|
+
return deserializeTypedArray<Uint8ClampedArray>(srcStart, srcEnd, dst) as T;
|
|
928
|
+
} else if (type instanceof Int16Array) {
|
|
929
|
+
return deserializeTypedArray<Int16Array>(srcStart, srcEnd, dst) as T;
|
|
930
|
+
} else if (type instanceof Uint16Array) {
|
|
931
|
+
return deserializeTypedArray<Uint16Array>(srcStart, srcEnd, dst) as T;
|
|
932
|
+
} else if (type instanceof Int32Array) {
|
|
933
|
+
return deserializeTypedArray<Int32Array>(srcStart, srcEnd, dst) as T;
|
|
934
|
+
} else if (type instanceof Uint32Array) {
|
|
935
|
+
return deserializeTypedArray<Uint32Array>(srcStart, srcEnd, dst) as T;
|
|
936
|
+
} else if (type instanceof Int64Array) {
|
|
937
|
+
return deserializeTypedArray<Int64Array>(srcStart, srcEnd, dst) as T;
|
|
938
|
+
} else if (type instanceof Uint64Array) {
|
|
939
|
+
return deserializeTypedArray<Uint64Array>(srcStart, srcEnd, dst) as T;
|
|
940
|
+
} else if (type instanceof Float32Array) {
|
|
941
|
+
return deserializeTypedArray<Float32Array>(srcStart, srcEnd, dst) as T;
|
|
942
|
+
} else if (type instanceof Float64Array) {
|
|
943
|
+
return deserializeTypedArray<Float64Array>(srcStart, srcEnd, dst) as T;
|
|
944
|
+
} else if (type instanceof ArrayBuffer) {
|
|
945
|
+
return deserializeArrayBuffer(srcStart, srcEnd, dst) as T;
|
|
846
946
|
} else if (type instanceof Set) {
|
|
847
947
|
// @ts-expect-error: type
|
|
848
948
|
return deserializeSet<T>(srcStart, srcEnd, dst);
|
|
849
|
-
|
|
949
|
+
// @ts-expect-error: Defined by transform
|
|
850
950
|
} else if (isDefined(type.__DESERIALIZE)) {
|
|
851
951
|
const out = changetype<nonnull<T>>(dst || __new(offsetof<nonnull<T>>(), idof<nonnull<T>>()));
|
|
852
952
|
// @ts-expect-error: Defined by transform
|
|
853
953
|
if (isDefined(type.__INITIALIZE)) out.__INITIALIZE();
|
|
854
954
|
// @ts-expect-error: Defined by transform
|
|
855
|
-
|
|
955
|
+
out.__DESERIALIZE(srcStart, srcEnd, out);
|
|
956
|
+
return out;
|
|
856
957
|
} else if (type instanceof Map) {
|
|
857
958
|
// @ts-expect-error: type
|
|
858
959
|
return deserializeMap<T>(srcStart, srcEnd, dst);
|
|
@@ -874,11 +975,7 @@ export namespace JSON {
|
|
|
874
975
|
}
|
|
875
976
|
}
|
|
876
977
|
const snippet = ptrToStr(srcStart, srcEnd);
|
|
877
|
-
throw new Error(
|
|
878
|
-
`Could not deserialize JSON to type '${nameof<T>()}'. ` +
|
|
879
|
-
`If this is a custom class, ensure it has the @json decorator: @json class ${nameof<T>()} { ... }. ` +
|
|
880
|
-
`Input: "${snippet.length > 50 ? snippet.slice(0, 50) + '...' : snippet}"`
|
|
881
|
-
);
|
|
978
|
+
throw new Error(`Could not deserialize JSON to type '${nameof<T>()}'. ` + `If this is a custom class, ensure it has the @json decorator: @json class ${nameof<T>()} { ... }. ` + `Input: "${snippet.length > 50 ? snippet.slice(0, 50) + "..." : snippet}"`);
|
|
882
979
|
}
|
|
883
980
|
export namespace Util {
|
|
884
981
|
// @ts-expect-error: decorator
|
|
@@ -929,7 +1026,6 @@ export namespace JSON {
|
|
|
929
1026
|
if (out) {
|
|
930
1027
|
out = changetype<string>(__renew(changetype<usize>(out), sizeof<T>() << 3));
|
|
931
1028
|
|
|
932
|
-
// @ts-expect-error
|
|
933
1029
|
const bytes = itoa_buffered(changetype<usize>(out), data) << 1;
|
|
934
1030
|
return (out = changetype<string>(__renew(changetype<usize>(out), bytes)));
|
|
935
1031
|
}
|
|
@@ -938,12 +1034,10 @@ export namespace JSON {
|
|
|
938
1034
|
if (out) {
|
|
939
1035
|
out = changetype<string>(__renew(changetype<usize>(out), 64));
|
|
940
1036
|
|
|
941
|
-
// @ts-expect-error
|
|
942
1037
|
const bytes = dtoa_buffered(changetype<usize>(out), data) << 1;
|
|
943
1038
|
return (out = changetype<string>(__renew(changetype<usize>(out), bytes)));
|
|
944
1039
|
}
|
|
945
1040
|
return data.toString();
|
|
946
|
-
// @ts-expect-error: Function is generated by transform
|
|
947
1041
|
} else if (isNullable<T>() && changetype<usize>(data) == <usize>0) {
|
|
948
1042
|
if (out) {
|
|
949
1043
|
out = changetype<string>(__renew(changetype<usize>(out), 8));
|
|
@@ -951,15 +1045,8 @@ export namespace JSON {
|
|
|
951
1045
|
return out;
|
|
952
1046
|
}
|
|
953
1047
|
return NULL_WORD;
|
|
954
|
-
// @ts-expect-error
|
|
955
1048
|
} else if (isString<nonnull<T>>()) {
|
|
956
|
-
|
|
957
|
-
serializeString_SIMD(data as string);
|
|
958
|
-
} else if (JSON_MODE === JSONMode.SWAR) {
|
|
959
|
-
serializeString_SWAR(data as string);
|
|
960
|
-
} else {
|
|
961
|
-
serializeString(data as string);
|
|
962
|
-
}
|
|
1049
|
+
serializeString(data as string);
|
|
963
1050
|
return bs.cpyOut<string>();
|
|
964
1051
|
// @ts-expect-error: Supplied by transform
|
|
965
1052
|
} else if (isDefined(data.__SERIALIZE)) {
|
|
@@ -967,7 +1054,6 @@ export namespace JSON {
|
|
|
967
1054
|
// @ts-expect-error
|
|
968
1055
|
inline.always(data.__SERIALIZE(changetype<usize>(data)));
|
|
969
1056
|
return bs.cpyOut<string>();
|
|
970
|
-
// @ts-expect-error: Supplied by transform
|
|
971
1057
|
} else if (data instanceof Date) {
|
|
972
1058
|
out = out ? changetype<string>(__renew(changetype<usize>(out), 52)) : changetype<string>(__new(52, idof<string>()));
|
|
973
1059
|
|
|
@@ -1010,11 +1096,7 @@ export namespace JSON {
|
|
|
1010
1096
|
} else if (data instanceof JSON.Box) {
|
|
1011
1097
|
return JSON.internal.stringify(data.value);
|
|
1012
1098
|
} else {
|
|
1013
|
-
throw new Error(
|
|
1014
|
-
`Could not serialize data of type '${nameof<T>()}'. ` +
|
|
1015
|
-
`If this is a custom class, add the @json decorator: @json class ${nameof<T>()} { ... }. ` +
|
|
1016
|
-
`Supported types: primitives, string, Array, Map, Date, and @json decorated classes.`
|
|
1017
|
-
);
|
|
1099
|
+
throw new Error(`Could not serialize data of type '${nameof<T>()}'. ` + `If this is a custom class, add the @json decorator: @json class ${nameof<T>()} { ... }. ` + `Supported types: primitives, string, Array, Map, Date, and @json decorated classes.`);
|
|
1018
1100
|
}
|
|
1019
1101
|
}
|
|
1020
1102
|
}
|
|
@@ -1023,7 +1105,7 @@ export namespace JSON {
|
|
|
1023
1105
|
export enum JSONMode {
|
|
1024
1106
|
SWAR = 0,
|
|
1025
1107
|
SIMD = 1,
|
|
1026
|
-
NAIVE = 2
|
|
1108
|
+
NAIVE = 2,
|
|
1027
1109
|
}
|
|
1028
1110
|
|
|
1029
1111
|
// @ts-expect-error: decorator
|