json-as 1.3.0 → 1.3.2
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/CHANGELOG.md +400 -0
- package/README.md +137 -32
- package/assembly/deserialize/index/arbitrary.ts +1 -1
- package/assembly/deserialize/index/array.ts +6 -1
- package/assembly/deserialize/index/float.ts +1 -1
- package/assembly/deserialize/index/integer.ts +1 -1
- package/assembly/deserialize/index/typedarray.ts +14 -0
- package/assembly/deserialize/index/unsigned.ts +1 -1
- package/assembly/deserialize/simd/string.ts +20 -16
- package/assembly/deserialize/simple/arbitrary.ts +1 -1
- package/assembly/deserialize/simple/array/generic.ts +42 -0
- package/assembly/deserialize/simple/array.ts +8 -1
- package/assembly/deserialize/{float.ts → simple/float.ts} +22 -2
- package/assembly/deserialize/{integer.ts → simple/integer.ts} +3 -2
- package/assembly/deserialize/simple/map.ts +60 -12
- package/assembly/deserialize/simple/object.ts +1 -1
- package/assembly/deserialize/simple/set.ts +119 -134
- package/assembly/deserialize/simple/staticarray.ts +12 -1
- package/assembly/deserialize/simple/string.ts +93 -2
- package/assembly/deserialize/simple/struct.ts +7 -157
- package/assembly/deserialize/simple/typedarray.ts +1 -1
- package/assembly/deserialize/{unsigned.ts → simple/unsigned.ts} +3 -2
- package/assembly/deserialize/swar/array/array.ts +42 -7
- package/assembly/deserialize/swar/array/bool.ts +5 -2
- package/assembly/deserialize/swar/array/float.ts +7 -3
- package/assembly/deserialize/swar/array/generic.ts +40 -0
- package/assembly/deserialize/swar/array/integer.ts +7 -4
- package/assembly/deserialize/swar/array/object.ts +20 -4
- package/assembly/deserialize/swar/array/shared.ts +18 -4
- package/assembly/deserialize/swar/array/string.ts +5 -2
- package/assembly/deserialize/swar/array/struct.ts +20 -4
- package/assembly/deserialize/swar/array.ts +56 -2
- package/assembly/deserialize/swar/string.ts +245 -370
- package/assembly/index.ts +207 -194
- package/assembly/serialize/index/arbitrary.ts +8 -3
- package/assembly/serialize/index/float.ts +1 -1
- package/assembly/serialize/index/object.ts +1 -5
- package/assembly/serialize/index/typedarray.ts +65 -0
- package/assembly/serialize/simd/string.ts +7 -16
- package/assembly/serialize/simple/arbitrary.ts +9 -3
- package/assembly/serialize/simple/array.ts +17 -6
- package/assembly/serialize/simple/float.ts +18 -4
- package/assembly/serialize/simple/map.ts +10 -27
- package/assembly/serialize/simple/object.ts +1 -5
- package/assembly/serialize/simple/set.ts +3 -4
- package/assembly/serialize/simple/staticarray.ts +4 -3
- package/assembly/serialize/simple/string.ts +3 -11
- package/assembly/serialize/simple/typedarray.ts +9 -7
- package/assembly/serialize/swar/string.ts +3 -12
- package/assembly/tsconfig.json +3 -2
- package/assembly/util/dragonbox-cache.ts +1322 -0
- package/assembly/util/dragonbox.ts +596 -0
- package/assembly/util/swar.ts +49 -0
- package/lib/as-bs.ts +92 -70
- package/package.json +35 -10
- package/transform/lib/index.d.ts +1 -0
- package/transform/lib/index.d.ts.map +1 -1
- package/transform/lib/index.js +559 -221
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/linkers/custom.d.ts.map +1 -1
- package/transform/lib/linkers/custom.js +7 -3
- package/transform/lib/linkers/custom.js.map +1 -1
- package/transform/lib/types.d.ts +2 -0
- package/transform/lib/types.d.ts.map +1 -1
- package/transform/lib/types.js +13 -0
- package/transform/lib/types.js.map +1 -1
- package/.as-test/coverage/naive/coverage.arbitrary.spec.ts.log.json +0 -5628
- package/.as-test/coverage/naive/coverage.array.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.bool.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.box.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.custom.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.date.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.enum.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.float.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.generics.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.hierarchy.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.integer.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.map.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.namespace.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.null.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.raw.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.resolving.spec.ts.log.json +0 -5628
- package/.as-test/coverage/naive/coverage.set.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.staticarray.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.string.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.struct.spec.ts.log.json +0 -5187
- package/.as-test/coverage/naive/coverage.types.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.arbitrary.spec.ts.log.json +0 -5628
- package/.as-test/coverage/simd/coverage.array.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.bool.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.box.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.custom.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.date.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.enum.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.float.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.generics.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.hierarchy.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.integer.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.map.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.namespace.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.null.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.raw.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.resolving.spec.ts.log.json +0 -5628
- package/.as-test/coverage/simd/coverage.set.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.staticarray.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.string.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.struct.spec.ts.log.json +0 -5187
- package/.as-test/coverage/simd/coverage.types.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.arbitrary.spec.ts.log.json +0 -5628
- package/.as-test/coverage/swar/coverage.array.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.bool.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.box.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.custom.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.date.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.enum.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.float.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.generics.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.hierarchy.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.integer.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.map.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.namespace.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.null.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.raw.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.resolving.spec.ts.log.json +0 -5628
- package/.as-test/coverage/swar/coverage.set.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.staticarray.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.string.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.struct.spec.ts.log.json +0 -5187
- package/.as-test/coverage/swar/coverage.types.spec.ts.log.json +0 -5187
- package/.as-test/logs/naive/run.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/naive/run.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/naive/run.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/naive/run.box.spec.ts.log.json +0 -353
- package/.as-test/logs/naive/run.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/naive/run.date.spec.ts.log.json +0 -397
- package/.as-test/logs/naive/run.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/naive/run.float.spec.ts.log.json +0 -453
- package/.as-test/logs/naive/run.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/naive/run.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/naive/run.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/naive/run.map.spec.ts.log.json +0 -247
- package/.as-test/logs/naive/run.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/naive/run.null.spec.ts.log.json +0 -273
- package/.as-test/logs/naive/run.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/naive/run.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/naive/run.set.spec.ts.log.json +0 -733
- package/.as-test/logs/naive/run.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/naive/run.string.spec.ts.log.json +0 -2289
- package/.as-test/logs/naive/run.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/naive/run.types.spec.ts.log.json +0 -273
- package/.as-test/logs/naive/test.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/naive/test.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/naive/test.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/naive/test.box.spec.ts.log.json +0 -353
- package/.as-test/logs/naive/test.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/naive/test.date.spec.ts.log.json +0 -397
- package/.as-test/logs/naive/test.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/naive/test.float.spec.ts.log.json +0 -453
- package/.as-test/logs/naive/test.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/naive/test.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/naive/test.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/naive/test.log.json +0 -2289
- package/.as-test/logs/naive/test.map.spec.ts.log.json +0 -247
- package/.as-test/logs/naive/test.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/naive/test.null.spec.ts.log.json +0 -273
- package/.as-test/logs/naive/test.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/naive/test.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/naive/test.set.spec.ts.log.json +0 -733
- package/.as-test/logs/naive/test.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/naive/test.string.spec.ts.log.json +0 -2345
- package/.as-test/logs/naive/test.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/naive/test.types.spec.ts.log.json +0 -273
- package/.as-test/logs/simd/run.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/simd/run.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/simd/run.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/simd/run.box.spec.ts.log.json +0 -353
- package/.as-test/logs/simd/run.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/simd/run.date.spec.ts.log.json +0 -397
- package/.as-test/logs/simd/run.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/simd/run.float.spec.ts.log.json +0 -453
- package/.as-test/logs/simd/run.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/simd/run.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/simd/run.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/simd/run.map.spec.ts.log.json +0 -247
- package/.as-test/logs/simd/run.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/simd/run.null.spec.ts.log.json +0 -273
- package/.as-test/logs/simd/run.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/simd/run.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/simd/run.set.spec.ts.log.json +0 -733
- package/.as-test/logs/simd/run.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/simd/run.string.spec.ts.log.json +0 -2289
- package/.as-test/logs/simd/run.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/simd/run.types.spec.ts.log.json +0 -273
- package/.as-test/logs/simd/test.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/simd/test.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/simd/test.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/simd/test.box.spec.ts.log.json +0 -353
- package/.as-test/logs/simd/test.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/simd/test.date.spec.ts.log.json +0 -397
- package/.as-test/logs/simd/test.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/simd/test.float.spec.ts.log.json +0 -453
- package/.as-test/logs/simd/test.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/simd/test.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/simd/test.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/simd/test.log.json +0 -11371
- package/.as-test/logs/simd/test.map.spec.ts.log.json +0 -247
- package/.as-test/logs/simd/test.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/simd/test.null.spec.ts.log.json +0 -273
- package/.as-test/logs/simd/test.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/simd/test.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/simd/test.set.spec.ts.log.json +0 -733
- package/.as-test/logs/simd/test.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/simd/test.string.spec.ts.log.json +0 -2345
- package/.as-test/logs/simd/test.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/simd/test.types.spec.ts.log.json +0 -273
- package/.as-test/logs/swar/run.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/swar/run.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/swar/run.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/swar/run.box.spec.ts.log.json +0 -353
- package/.as-test/logs/swar/run.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/swar/run.date.spec.ts.log.json +0 -397
- package/.as-test/logs/swar/run.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/swar/run.float.spec.ts.log.json +0 -453
- package/.as-test/logs/swar/run.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/swar/run.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/swar/run.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/swar/run.map.spec.ts.log.json +0 -247
- package/.as-test/logs/swar/run.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/swar/run.null.spec.ts.log.json +0 -273
- package/.as-test/logs/swar/run.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/swar/run.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/swar/run.set.spec.ts.log.json +0 -733
- package/.as-test/logs/swar/run.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/swar/run.string.spec.ts.log.json +0 -2289
- package/.as-test/logs/swar/run.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/swar/run.types.spec.ts.log.json +0 -273
- package/.as-test/logs/swar/test.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/swar/test.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/swar/test.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/swar/test.box.spec.ts.log.json +0 -353
- package/.as-test/logs/swar/test.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/swar/test.date.spec.ts.log.json +0 -397
- package/.as-test/logs/swar/test.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/swar/test.float.spec.ts.log.json +0 -453
- package/.as-test/logs/swar/test.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/swar/test.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/swar/test.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/swar/test.log.json +0 -11371
- package/.as-test/logs/swar/test.map.spec.ts.log.json +0 -247
- package/.as-test/logs/swar/test.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/swar/test.null.spec.ts.log.json +0 -273
- package/.as-test/logs/swar/test.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/swar/test.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/swar/test.set.spec.ts.log.json +0 -733
- package/.as-test/logs/swar/test.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/swar/test.string.spec.ts.log.json +0 -2345
- package/.as-test/logs/swar/test.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/swar/test.types.spec.ts.log.json +0 -273
- package/.as-test/logs/test.arbitrary.spec.ts.log.json +0 -943
- package/.as-test/logs/test.array.spec.ts.log.json +0 -1053
- package/.as-test/logs/test.bool.spec.ts.log.json +0 -257
- package/.as-test/logs/test.box.spec.ts.log.json +0 -353
- package/.as-test/logs/test.custom.spec.ts.log.json +0 -309
- package/.as-test/logs/test.date.spec.ts.log.json +0 -397
- package/.as-test/logs/test.enum.spec.ts.log.json +0 -343
- package/.as-test/logs/test.float.spec.ts.log.json +0 -453
- package/.as-test/logs/test.generics.spec.ts.log.json +0 -393
- package/.as-test/logs/test.hierarchy.spec.ts.log.json +0 -325
- package/.as-test/logs/test.integer.spec.ts.log.json +0 -373
- package/.as-test/logs/test.log.json +0 -11371
- package/.as-test/logs/test.map.spec.ts.log.json +0 -247
- package/.as-test/logs/test.namespace.spec.ts.log.json +0 -361
- package/.as-test/logs/test.null.spec.ts.log.json +0 -273
- package/.as-test/logs/test.raw.spec.ts.log.json +0 -309
- package/.as-test/logs/test.resolving.spec.ts.log.json +0 -273
- package/.as-test/logs/test.set.spec.ts.log.json +0 -733
- package/.as-test/logs/test.staticarray.spec.ts.log.json +0 -931
- package/.as-test/logs/test.string.spec.ts.log.json +0 -2289
- package/.as-test/logs/test.struct.spec.ts.log.json +0 -523
- package/.as-test/logs/test.types.spec.ts.log.json +0 -273
- package/.as-test/runners/default.bindings.js +0 -68
- package/.as-test/runners/default.wasi.js +0 -38
- package/ARCHITECTURE.md +0 -323
- package/CONTRIBUTING.md +0 -244
- package/TODO +0 -1
- package/as-test.config.json +0 -40
- package/assembly/test.ts +0 -24
- package/eslint.config.js +0 -68
- package/lib/tsconfig.json +0 -8
- package/test.ts +0 -99
- package/tools/assemblyscript-eslint-local.js +0 -6
- package/tools/assemblyscript-eslint.js +0 -53
- package/tools/assemblyscript-prettier-plugin.js +0 -33
- package/tools/replacer.js +0 -63
- package/transform/tsconfig.json +0 -35
package/lib/as-bs.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
2
|
-
import { heap } from "memory";
|
|
2
|
+
import { __heap_base, heap } from "memory";
|
|
3
3
|
|
|
4
4
|
// Buffer management constants
|
|
5
5
|
const SHRINK_EVERY_N_MASK: usize = 255; // check every 256 outputs
|
|
6
|
-
const MIN_BUFFER_SIZE: usize =
|
|
6
|
+
const MIN_BUFFER_SIZE: usize = 1024;
|
|
7
7
|
|
|
8
8
|
// Exponential moving average smoothing factor (0.0 to 1.0)
|
|
9
9
|
// Higher values = more responsive to recent sizes, lower = more stable
|
|
@@ -26,8 +26,8 @@ export namespace bs {
|
|
|
26
26
|
/** Proposed size of output */
|
|
27
27
|
export let stackSize: usize = 0;
|
|
28
28
|
|
|
29
|
-
let
|
|
30
|
-
let
|
|
29
|
+
let pauseOffsets = new Array<usize>();
|
|
30
|
+
let pauseStackSizes = new Array<usize>();
|
|
31
31
|
|
|
32
32
|
// Exponential moving average of output sizes for adaptive buffer sizing
|
|
33
33
|
// This provides smoother adaptation than simple averaging
|
|
@@ -50,10 +50,9 @@ export namespace bs {
|
|
|
50
50
|
// @ts-expect-error: @inline is a valid decorator
|
|
51
51
|
@inline function renewBuffer(newSize: usize): void {
|
|
52
52
|
const oldPtr = buffer;
|
|
53
|
+
const relOffset = offset - oldPtr;
|
|
53
54
|
const newPtr = heap.realloc(oldPtr, newSize);
|
|
54
|
-
|
|
55
|
-
offset += delta;
|
|
56
|
-
if (pauseOffset != 0) pauseOffset += delta;
|
|
55
|
+
offset = newPtr + relOffset;
|
|
57
56
|
buffer = newPtr;
|
|
58
57
|
bufferSize = newSize;
|
|
59
58
|
}
|
|
@@ -81,24 +80,13 @@ export namespace bs {
|
|
|
81
80
|
|
|
82
81
|
export let cacheOutput: usize = 0;
|
|
83
82
|
export let cacheOutputLen: usize = 0;
|
|
84
|
-
|
|
85
|
-
// @ts-expect-error: @inline is a valid decorator
|
|
86
|
-
@inline export function digestArena(): void {
|
|
87
|
-
if (cacheOutput === 0) return;
|
|
88
|
-
const len = cacheOutputLen;
|
|
89
|
-
proposeSize(<u32>len);
|
|
90
|
-
memory.copy(offset, cacheOutput, len);
|
|
91
|
-
offset += len;
|
|
92
|
-
bs.cacheOutput = 0;
|
|
93
|
-
bs.cacheOutputLen = 0;
|
|
94
|
-
}
|
|
95
83
|
/**
|
|
96
84
|
* Stores the state of the buffer, allowing further changes to be reset
|
|
97
85
|
*/
|
|
98
86
|
// @ts-expect-error: @inline is a valid decorator
|
|
99
87
|
@inline export function saveState(): void {
|
|
100
|
-
|
|
101
|
-
|
|
88
|
+
pauseOffsets.push(offset - buffer);
|
|
89
|
+
pauseStackSizes.push(stackSize);
|
|
102
90
|
}
|
|
103
91
|
|
|
104
92
|
/**
|
|
@@ -107,19 +95,13 @@ export namespace bs {
|
|
|
107
95
|
*/
|
|
108
96
|
// @ts-expect-error: @inline is a valid decorator
|
|
109
97
|
@inline export function loadState(): void {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
*/
|
|
118
|
-
// @ts-expect-error: @inline is a valid decorator
|
|
119
|
-
@inline export function resetState(): void {
|
|
120
|
-
offset = pauseOffset;
|
|
121
|
-
stackSize = pauseStackSize;
|
|
122
|
-
pauseOffset = 0;
|
|
98
|
+
const length = pauseOffsets.length;
|
|
99
|
+
if (length == 0) return;
|
|
100
|
+
const index = length - 1;
|
|
101
|
+
offset = buffer + unchecked(pauseOffsets[index]);
|
|
102
|
+
stackSize = unchecked(pauseStackSizes[index]);
|
|
103
|
+
pauseOffsets.length = index;
|
|
104
|
+
pauseStackSizes.length = index;
|
|
123
105
|
}
|
|
124
106
|
|
|
125
107
|
/**
|
|
@@ -161,13 +143,28 @@ export namespace bs {
|
|
|
161
143
|
// @ts-expect-error: @inline is a valid decorator
|
|
162
144
|
@inline export function resize(newSize: u32): void {
|
|
163
145
|
const oldPtr = buffer;
|
|
146
|
+
const relOffset = offset - oldPtr;
|
|
164
147
|
const newPtr = heap.realloc(buffer, newSize);
|
|
165
|
-
const delta = newPtr - oldPtr;
|
|
166
|
-
if (pauseOffset != 0) pauseOffset += delta;
|
|
167
148
|
buffer = newPtr;
|
|
168
149
|
bufferSize = newSize;
|
|
169
|
-
offset = buffer;
|
|
170
|
-
|
|
150
|
+
offset = buffer + relOffset;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Shrinks the buffer using the same adaptive sizing policy as normal output
|
|
155
|
+
* finalization. Keeps enough capacity for the recent typical output size while
|
|
156
|
+
* releasing clearly excess memory.
|
|
157
|
+
*/
|
|
158
|
+
// @ts-expect-error: @inline is a valid decorator
|
|
159
|
+
@inline export function shrink(): void {
|
|
160
|
+
let next = typicalSize << 1;
|
|
161
|
+
if (next < MIN_BUFFER_SIZE) next = MIN_BUFFER_SIZE;
|
|
162
|
+
if (bufferSize > next) {
|
|
163
|
+
resize(u32(next));
|
|
164
|
+
} else {
|
|
165
|
+
offset = buffer;
|
|
166
|
+
stackSize = 0;
|
|
167
|
+
}
|
|
171
168
|
}
|
|
172
169
|
|
|
173
170
|
/**
|
|
@@ -176,13 +173,14 @@ export namespace bs {
|
|
|
176
173
|
*/
|
|
177
174
|
// @ts-expect-error: @inline is a valid decorator
|
|
178
175
|
@inline export function cpyOut<T>(): T {
|
|
179
|
-
if (
|
|
176
|
+
if (pauseOffsets.length == 0) {
|
|
180
177
|
const len = offset - buffer;
|
|
181
178
|
// @ts-expect-error: __new is a runtime builtin
|
|
182
179
|
const _out = __new(len, idof<T>());
|
|
183
180
|
memory.copy(_out, buffer, len);
|
|
184
181
|
return changetype<T>(_out);
|
|
185
182
|
} else {
|
|
183
|
+
const pauseOffset = buffer + unchecked(pauseOffsets[pauseOffsets.length - 1]);
|
|
186
184
|
const len = offset - pauseOffset;
|
|
187
185
|
// @ts-expect-error: __new is a runtime builtin
|
|
188
186
|
const _out = __new(len, idof<T>());
|
|
@@ -192,6 +190,62 @@ export namespace bs {
|
|
|
192
190
|
}
|
|
193
191
|
}
|
|
194
192
|
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Copies the slice starting at a caller-provided relative buffer offset and restores
|
|
196
|
+
* `offset` back to that slice start.
|
|
197
|
+
*
|
|
198
|
+
* This is intended for deserializers that borrow `bs` as temporary scratch space and
|
|
199
|
+
* already know their local slice start as `bs.offset - bs.buffer`.
|
|
200
|
+
*
|
|
201
|
+
* Note: this restores only `offset`. Deserialization paths do not currently depend on
|
|
202
|
+
* `stackSize`, which is tracked for serialization growth heuristics.
|
|
203
|
+
*/
|
|
204
|
+
// @ts-expect-error: @inline is a valid decorator
|
|
205
|
+
@inline export function sliceOut<T>(start: usize): T {
|
|
206
|
+
const sliceStart = buffer + start;
|
|
207
|
+
const len = offset - sliceStart;
|
|
208
|
+
// @ts-expect-error: __new is a runtime builtin
|
|
209
|
+
const _out = __new(len, idof<T>());
|
|
210
|
+
memory.copy(_out, sliceStart, len);
|
|
211
|
+
offset = sliceStart;
|
|
212
|
+
return changetype<T>(_out);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Copies the slice starting at a caller-provided relative buffer offset into a string field
|
|
217
|
+
* and restores `offset` back to that slice start.
|
|
218
|
+
*/
|
|
219
|
+
// @ts-expect-error: @inline is a valid decorator
|
|
220
|
+
@inline export function toField(start: usize, dstFieldPtr: usize): void {
|
|
221
|
+
const sliceStart = buffer + start;
|
|
222
|
+
const byteLength = <u32>(offset - sliceStart);
|
|
223
|
+
if (byteLength == 0) {
|
|
224
|
+
store<usize>(dstFieldPtr, changetype<usize>(""));
|
|
225
|
+
offset = sliceStart;
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
const current = load<usize>(dstFieldPtr);
|
|
230
|
+
let stringPtr: usize;
|
|
231
|
+
if (current >= __heap_base) {
|
|
232
|
+
if (changetype<OBJECT>(current - TOTAL_OVERHEAD).rtSize == byteLength) {
|
|
233
|
+
stringPtr = current;
|
|
234
|
+
} else {
|
|
235
|
+
// @ts-expect-error: __renew is a runtime builtin
|
|
236
|
+
stringPtr = __renew(current, byteLength);
|
|
237
|
+
store<usize>(dstFieldPtr, stringPtr);
|
|
238
|
+
}
|
|
239
|
+
} else {
|
|
240
|
+
// @ts-expect-error: __new is a runtime builtin
|
|
241
|
+
stringPtr = __new(byteLength, idof<string>());
|
|
242
|
+
store<usize>(dstFieldPtr, stringPtr);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
memory.copy(stringPtr, sliceStart, byteLength);
|
|
246
|
+
offset = sliceStart;
|
|
247
|
+
}
|
|
248
|
+
|
|
195
249
|
/**
|
|
196
250
|
* Copies the buffer's content to a new object of a specified type.
|
|
197
251
|
* Uses exponential moving average to track typical output sizes for
|
|
@@ -220,38 +274,6 @@ export namespace bs {
|
|
|
220
274
|
}
|
|
221
275
|
return changetype<T>(out);
|
|
222
276
|
}
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* Copies the buffer's content to a new object of a specified type.
|
|
226
|
-
* @returns The new object containing the buffer's content.
|
|
227
|
-
*/
|
|
228
|
-
// @ts-expect-error: @inline is a valid decorator
|
|
229
|
-
@inline export function view<T>(): T {
|
|
230
|
-
const len = offset - buffer;
|
|
231
|
-
// @ts-expect-error: __new is a runtime builtin
|
|
232
|
-
const _out = __new(len, idof<T>());
|
|
233
|
-
memory.copy(_out, buffer, len);
|
|
234
|
-
return changetype<T>(_out);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* Copies the buffer's content to a given destination pointer.
|
|
239
|
-
* Uses exponential moving average for adaptive buffer sizing.
|
|
240
|
-
* @param dst - The destination pointer.
|
|
241
|
-
* @returns The destination pointer cast to the specified type.
|
|
242
|
-
*/
|
|
243
|
-
// @ts-expect-error: @inline is a valid decorator
|
|
244
|
-
@inline export function outTo<T>(dst: usize): T {
|
|
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);
|
|
249
|
-
}
|
|
250
|
-
memory.copy(dst, buffer, len);
|
|
251
|
-
|
|
252
|
-
finalizeDynamicOutput(len);
|
|
253
|
-
return changetype<T>(dst);
|
|
254
|
-
}
|
|
255
277
|
}
|
|
256
278
|
|
|
257
279
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "json-as",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"author": "Jairus Tanaka",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,13 +12,14 @@
|
|
|
12
12
|
"@assemblyscript/wasi-shim": "^0.1.0",
|
|
13
13
|
"@eslint/js": "^9.0.0",
|
|
14
14
|
"@types/node": "^25.0.10",
|
|
15
|
-
"as-test": "^1.0.
|
|
15
|
+
"as-test": "^1.0.6",
|
|
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
20
|
"eslint": "^10.0.0",
|
|
21
21
|
"prettier": "3.8.1",
|
|
22
|
+
"serve": "^14.2.6",
|
|
22
23
|
"tinybench": "^6.0.0",
|
|
23
24
|
"typescript": "^5.9.3",
|
|
24
25
|
"typescript-eslint": "^8.0.0"
|
|
@@ -40,7 +41,25 @@
|
|
|
40
41
|
"Deon Groenewald"
|
|
41
42
|
],
|
|
42
43
|
"description": "The only JSON library you'll need for AssemblyScript with SIMD and SWAR",
|
|
43
|
-
"homepage": "https://
|
|
44
|
+
"homepage": "https://docs.jairus.dev/json-as",
|
|
45
|
+
"files": [
|
|
46
|
+
"assembly/custom/",
|
|
47
|
+
"assembly/deserialize/",
|
|
48
|
+
"assembly/globals/",
|
|
49
|
+
"assembly/serialize/",
|
|
50
|
+
"assembly/util/",
|
|
51
|
+
"assembly/index.ts",
|
|
52
|
+
"assembly/index.d.ts",
|
|
53
|
+
"assembly/types.ts",
|
|
54
|
+
"assembly/tsconfig.json",
|
|
55
|
+
"lib/as-bs.ts",
|
|
56
|
+
"transform/lib/",
|
|
57
|
+
"transform/package.json",
|
|
58
|
+
"index.ts",
|
|
59
|
+
"README.md",
|
|
60
|
+
"CHANGELOG.md",
|
|
61
|
+
"LICENSE"
|
|
62
|
+
],
|
|
44
63
|
"keywords": [
|
|
45
64
|
"assemblyscript",
|
|
46
65
|
"json",
|
|
@@ -62,16 +81,22 @@
|
|
|
62
81
|
},
|
|
63
82
|
"scripts": {
|
|
64
83
|
"ci": "act",
|
|
65
|
-
"test": "ast test --
|
|
66
|
-
"test:
|
|
84
|
+
"test": "ast test --parallel",
|
|
85
|
+
"test:fast": "npm run build:transform && JSON_USE_FAST_PATH=1 ast test --parallel --mode swar,simd",
|
|
86
|
+
"fuzz": "ast fuzz",
|
|
87
|
+
"test:fuzz": "ast test --fuzz --parallel",
|
|
88
|
+
"test:ci": "ast test --parallel --clean",
|
|
89
|
+
"test:ci:fast": "JSON_USE_FAST_PATH=1 ast test --parallel --clean",
|
|
67
90
|
"test:coverage": "ast test --enable coverage",
|
|
68
|
-
"bench": "npm run bench:as && npm run bench:js &&
|
|
69
|
-
"bench:as": "bash ./run-bench.as.sh",
|
|
70
|
-
"bench:js": "bash ./run-bench.js.sh",
|
|
71
|
-
"
|
|
91
|
+
"bench": "npm run bench:as && npm run bench:js && npm run charts:build",
|
|
92
|
+
"bench:as": "bash ./scripts/run-bench.as.sh",
|
|
93
|
+
"bench:js": "bash ./scripts/run-bench.js.sh",
|
|
94
|
+
"charts:build": "bash ./scripts/build-charts.sh",
|
|
95
|
+
"charts:publish": "bash ./scripts/publish-benchmarks.sh",
|
|
96
|
+
"charts:serve": "serve ./build/charts/",
|
|
72
97
|
"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",
|
|
73
98
|
"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",
|
|
74
|
-
"build:test:wine": "JSON_DEBUG=1 JSON_WRITE=assembly/test.ts NODE_SKIP_PLATFORM_CHECK=1
|
|
99
|
+
"build:test:wine": "JSON_DEBUG=1 JSON_WRITE=assembly/test.ts NODE_SKIP_PLATFORM_CHECK=1 wineconsole --backend=curses ~/.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",
|
|
75
100
|
"test:wasmtime": "wasmtime ./build/test.wasm",
|
|
76
101
|
"test:wasmer": "wasmer ./build/test.wasm",
|
|
77
102
|
"build:transform": "tsc -p ./transform",
|
package/transform/lib/index.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export declare class JSONTransform extends Visitor {
|
|
|
13
13
|
imports: ImportStatement[];
|
|
14
14
|
simdStatements: string[];
|
|
15
15
|
visitedClasses: Set<string>;
|
|
16
|
+
private collectInheritedFieldMembers;
|
|
16
17
|
visitClassDeclarationRef(node: ClassDeclaration): void;
|
|
17
18
|
resolveType(type: string, source: Src, visited?: Set<string>): string;
|
|
18
19
|
visitClassDeclaration(node: ClassDeclaration): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA4G,eAAe,EAA8G,MAAM,EAAE,OAAO,EAAS,MAAM,EAA6C,MAAM,uCAAuC,CAAC;AAC3X,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAK7D,OAAO,EAA2B,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAE7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA4G,eAAe,EAA8G,MAAM,EAAE,OAAO,EAAS,MAAM,EAA6C,MAAM,uCAAuC,CAAC;AAC3X,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAK7D,OAAO,EAA2B,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAE7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAkFvC,qBAAa,aAAc,SAAQ,OAAO;IACxC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAuB;IAExC,OAAO,EAAG,OAAO,CAAC;IAClB,OAAO,EAAG,MAAM,CAAC;IACjB,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAA+B;IAC7D,MAAM,EAAG,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAmB;IACrC,OAAO,EAAE,eAAe,EAAE,CAAM;IAChC,cAAc,EAAE,MAAM,EAAE,CAAM;IAE9B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAqB;IAEvD,OAAO,CAAC,4BAA4B;IA6CpC,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAYtD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,cAAoB,GAAG,MAAM;IAsC3E,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAy7CnD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAItC,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA4ClD,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAIjD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IA+J9B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,OAAe,GAAG,MAAM,EAAE;IA0BxD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO;CAc3D;AA4BD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAChD,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBvD,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;CAwDjC;AAoKD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO9C"}
|