json-as 1.3.0 → 1.3.1
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 +417 -0
- package/README.md +96 -14
- package/assembly/deserialize/index/typedarray.ts +14 -0
- package/assembly/deserialize/simd/string.ts +3 -3
- package/assembly/deserialize/simple/string.ts +88 -2
- package/assembly/deserialize/swar/string.ts +8 -11
- package/assembly/index.ts +137 -181
- package/assembly/serialize/index/arbitrary.ts +5 -0
- package/assembly/serialize/index/typedarray.ts +65 -0
- package/assembly/serialize/simd/string.ts +3 -11
- package/assembly/serialize/simple/arbitrary.ts +6 -0
- package/assembly/serialize/simple/string.ts +3 -11
- package/assembly/serialize/swar/string.ts +3 -11
- package/assembly/util/swar.ts +49 -0
- package/lib/as-bs.ts +88 -69
- package/package.json +19 -1
- package/transform/lib/index.d.ts +1 -0
- package/transform/lib/index.d.ts.map +1 -1
- package/transform/lib/index.js +153 -32
- 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
|
@@ -7,6 +7,7 @@ import { serializeInteger } from "./integer";
|
|
|
7
7
|
import { serializeMap } from "./map";
|
|
8
8
|
import { serializeObject } from "./object";
|
|
9
9
|
import { serializeString } from "./string";
|
|
10
|
+
import { serializeDynamic } from "./typedarray";
|
|
10
11
|
|
|
11
12
|
export function serializeArbitrary(src: JSON.Value): void {
|
|
12
13
|
switch (src.type) {
|
|
@@ -60,6 +61,10 @@ export function serializeArbitrary(src: JSON.Value): void {
|
|
|
60
61
|
case JSON.Types.Map:
|
|
61
62
|
serializeMap(src.get<Map<string, JSON.Value>>());
|
|
62
63
|
break;
|
|
64
|
+
case JSON.Types.TypedArray:
|
|
65
|
+
case JSON.Types.ArrayBuffer:
|
|
66
|
+
serializeDynamic(src.type, src.get<usize>());
|
|
67
|
+
break;
|
|
63
68
|
default: {
|
|
64
69
|
const fn = JSON.Value.METHODS.get(src.type - JSON.Types.Struct);
|
|
65
70
|
const ptr = src.get<usize>();
|
|
@@ -1 +1,66 @@
|
|
|
1
|
+
import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
2
|
+
import { JSON } from "../..";
|
|
1
3
|
export { serializeArrayBufferUnsafe, serializeTypedArray } from "../simple/typedarray";
|
|
4
|
+
import { serializeArrayBufferUnsafe, serializeTypedArray } from "../simple/typedarray";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@inline export function serializeDynamic(type: u16, data: usize): void {
|
|
8
|
+
if (type == JSON.Types.ArrayBuffer) {
|
|
9
|
+
serializeArrayBufferUnsafe(data, changetype<OBJECT>(data - TOTAL_OVERHEAD).rtSize);
|
|
10
|
+
} else if (type == JSON.Types.TypedArray) {
|
|
11
|
+
const id = changetype<OBJECT>(data - TOTAL_OVERHEAD).rtId;
|
|
12
|
+
if (id == idof<Int8Array>()) {
|
|
13
|
+
serializeTypedArray<Int8Array>(changetype<Int8Array>(data));
|
|
14
|
+
} else if (id == idof<Uint8Array>()) {
|
|
15
|
+
serializeTypedArray<Uint8Array>(changetype<Uint8Array>(data));
|
|
16
|
+
} else if (id == idof<Uint8ClampedArray>()) {
|
|
17
|
+
serializeTypedArray<Uint8ClampedArray>(changetype<Uint8ClampedArray>(data));
|
|
18
|
+
} else if (id == idof<Int16Array>()) {
|
|
19
|
+
serializeTypedArray<Int16Array>(changetype<Int16Array>(data));
|
|
20
|
+
} else if (id == idof<Uint16Array>()) {
|
|
21
|
+
serializeTypedArray<Uint16Array>(changetype<Uint16Array>(data));
|
|
22
|
+
} else if (id == idof<Int32Array>()) {
|
|
23
|
+
serializeTypedArray<Int32Array>(changetype<Int32Array>(data));
|
|
24
|
+
} else if (id == idof<Uint32Array>()) {
|
|
25
|
+
serializeTypedArray<Uint32Array>(changetype<Uint32Array>(data));
|
|
26
|
+
} else if (id == idof<Int64Array>()) {
|
|
27
|
+
serializeTypedArray<Int64Array>(changetype<Int64Array>(data));
|
|
28
|
+
} else if (id == idof<Uint64Array>()) {
|
|
29
|
+
serializeTypedArray<Uint64Array>(changetype<Uint64Array>(data));
|
|
30
|
+
} else if (id == idof<Float32Array>()) {
|
|
31
|
+
serializeTypedArray<Float32Array>(changetype<Float32Array>(data));
|
|
32
|
+
} else if (id == idof<Float64Array>()) {
|
|
33
|
+
serializeTypedArray<Float64Array>(changetype<Float64Array>(data));
|
|
34
|
+
} else if (changetype<Int8Array>(data) instanceof Int8Array) {
|
|
35
|
+
serializeTypedArray<Int8Array>(changetype<Int8Array>(data));
|
|
36
|
+
} else if (changetype<Uint8Array>(data) instanceof Uint8Array) {
|
|
37
|
+
serializeTypedArray<Uint8Array>(changetype<Uint8Array>(data));
|
|
38
|
+
} else if (changetype<Uint8ClampedArray>(data) instanceof Uint8ClampedArray) {
|
|
39
|
+
serializeTypedArray<Uint8ClampedArray>(changetype<Uint8ClampedArray>(data));
|
|
40
|
+
} else if (changetype<Int16Array>(data) instanceof Int16Array) {
|
|
41
|
+
serializeTypedArray<Int16Array>(changetype<Int16Array>(data));
|
|
42
|
+
} else if (changetype<Uint16Array>(data) instanceof Uint16Array) {
|
|
43
|
+
serializeTypedArray<Uint16Array>(changetype<Uint16Array>(data));
|
|
44
|
+
} else if (changetype<Int32Array>(data) instanceof Int32Array) {
|
|
45
|
+
serializeTypedArray<Int32Array>(changetype<Int32Array>(data));
|
|
46
|
+
} else if (changetype<Uint32Array>(data) instanceof Uint32Array) {
|
|
47
|
+
serializeTypedArray<Uint32Array>(changetype<Uint32Array>(data));
|
|
48
|
+
} else if (changetype<Int64Array>(data) instanceof Int64Array) {
|
|
49
|
+
serializeTypedArray<Int64Array>(changetype<Int64Array>(data));
|
|
50
|
+
} else if (changetype<Uint64Array>(data) instanceof Uint64Array) {
|
|
51
|
+
serializeTypedArray<Uint64Array>(changetype<Uint64Array>(data));
|
|
52
|
+
} else if (changetype<Float32Array>(data) instanceof Float32Array) {
|
|
53
|
+
serializeTypedArray<Float32Array>(changetype<Float32Array>(data));
|
|
54
|
+
} else if (changetype<Float64Array>(data) instanceof Float64Array) {
|
|
55
|
+
serializeTypedArray<Float64Array>(changetype<Float64Array>(data));
|
|
56
|
+
} else {
|
|
57
|
+
throw new Error("Unsupported typed array in JSON.Value");
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@inline export function serializeArrayBuffer(data: ArrayBuffer): void {
|
|
64
|
+
const dataStart = changetype<usize>(data);
|
|
65
|
+
serializeArrayBufferUnsafe(dataStart, changetype<OBJECT>(dataStart - TOTAL_OVERHEAD).rtSize);
|
|
66
|
+
}
|
|
@@ -2,6 +2,7 @@ import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
|
2
2
|
import { bs, sc } from "../../../lib/as-bs";
|
|
3
3
|
import { BACK_SLASH } from "../../custom/chars";
|
|
4
4
|
import { SERIALIZE_ESCAPE_TABLE } from "../../globals/tables";
|
|
5
|
+
import { u16_to_hex4_swar } from "../../util/swar";
|
|
5
6
|
// @ts-expect-error: @lazy is a valid decorator
|
|
6
7
|
@lazy const U00_MARKER = 13511005048209500;
|
|
7
8
|
// @ts-expect-error: @lazy is a valid decorator
|
|
@@ -118,7 +119,7 @@ export function serializeString_SIMD(src: string): void {
|
|
|
118
119
|
// unpaired high/low surrogate
|
|
119
120
|
const dstIdx = bs.offset + laneIdx - 1;
|
|
120
121
|
store<u32>(dstIdx, U_MARKER); // \u
|
|
121
|
-
store<u64>(dstIdx,
|
|
122
|
+
store<u64>(dstIdx, u16_to_hex4_swar(code), 4);
|
|
122
123
|
// memory.copy(dstIdx + 12, srcIdx + 1, 15 - laneIdx);
|
|
123
124
|
store<v128>(dstIdx, load<v128>(srcIdx, 1), 12);
|
|
124
125
|
bs.offset += 10;
|
|
@@ -181,15 +182,6 @@ export function serializeString_SIMD(src: string): void {
|
|
|
181
182
|
@inline function write_u_escape(code: u16): void {
|
|
182
183
|
bs.growSize(10);
|
|
183
184
|
store<u32>(bs.offset, U_MARKER); // "\u"
|
|
184
|
-
|
|
185
|
-
store<u16>(bs.offset + 4, hexNibble((code >> 12) & 0xf));
|
|
186
|
-
store<u16>(bs.offset + 6, hexNibble((code >> 8) & 0xf));
|
|
187
|
-
store<u16>(bs.offset + 8, hexNibble((code >> 4) & 0xf));
|
|
188
|
-
store<u16>(bs.offset + 10, hexNibble(code & 0xf));
|
|
185
|
+
store<u64>(bs.offset, u16_to_hex4_swar(code), 4);
|
|
189
186
|
bs.offset += 12;
|
|
190
187
|
}
|
|
191
|
-
|
|
192
|
-
// @ts-expect-error: @inline is a valid decorator
|
|
193
|
-
@inline function hexNibble(n: u16): u16 {
|
|
194
|
-
return n < 10 ? 48 + n : 87 + n;
|
|
195
|
-
}
|
|
@@ -7,6 +7,7 @@ import { serializeInteger } from "./integer";
|
|
|
7
7
|
import { serializeMap } from "./map";
|
|
8
8
|
import { serializeObject } from "./object";
|
|
9
9
|
import { serializeString } from "./string";
|
|
10
|
+
import { serializeDynamic } from "../index/typedarray";
|
|
10
11
|
|
|
11
12
|
export function serializeArbitrary(src: JSON.Value): void {
|
|
12
13
|
switch (src.type) {
|
|
@@ -63,6 +64,11 @@ export function serializeArbitrary(src: JSON.Value): void {
|
|
|
63
64
|
serializeMap(src.get<Map<string, JSON.Value>>());
|
|
64
65
|
break;
|
|
65
66
|
}
|
|
67
|
+
case JSON.Types.TypedArray:
|
|
68
|
+
case JSON.Types.ArrayBuffer: {
|
|
69
|
+
serializeDynamic(src.type, src.get<usize>());
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
66
72
|
default: {
|
|
67
73
|
const fn = JSON.Value.METHODS.get(src.type - JSON.Types.Struct);
|
|
68
74
|
const ptr = src.get<usize>();
|
|
@@ -3,6 +3,7 @@ import { _intTo16 } from "../../custom/util";
|
|
|
3
3
|
import { bytes } from "../../util/bytes";
|
|
4
4
|
import { BACK_SLASH, QUOTE } from "../../custom/chars";
|
|
5
5
|
import { SERIALIZE_ESCAPE_TABLE } from "../../globals/tables";
|
|
6
|
+
import { u16_to_hex4_swar } from "../../util/swar";
|
|
6
7
|
import { serializeStruct } from "./struct";
|
|
7
8
|
|
|
8
9
|
// @ts-ignore: decorator allowed
|
|
@@ -68,7 +69,7 @@ import { serializeStruct } from "./struct";
|
|
|
68
69
|
// unpaired high/low surrogate
|
|
69
70
|
bs.growSize(10);
|
|
70
71
|
store<u32>(bs.offset, U_MARKER); // \u
|
|
71
|
-
store<u64>(bs.offset,
|
|
72
|
+
store<u64>(bs.offset, u16_to_hex4_swar(code), 4);
|
|
72
73
|
bs.offset += 12;
|
|
73
74
|
lastPtr = srcPtr;
|
|
74
75
|
continue;
|
|
@@ -84,15 +85,6 @@ import { serializeStruct } from "./struct";
|
|
|
84
85
|
@inline function write_u_escape(code: u16): void {
|
|
85
86
|
bs.growSize(10);
|
|
86
87
|
store<u32>(bs.offset, U_MARKER); // "\u"
|
|
87
|
-
|
|
88
|
-
store<u16>(bs.offset + 4, hexNibble((code >> 12) & 0xf));
|
|
89
|
-
store<u16>(bs.offset + 6, hexNibble((code >> 8) & 0xf));
|
|
90
|
-
store<u16>(bs.offset + 8, hexNibble((code >> 4) & 0xf));
|
|
91
|
-
store<u16>(bs.offset + 10, hexNibble(code & 0xf));
|
|
88
|
+
store<u64>(bs.offset, u16_to_hex4_swar(code), 4);
|
|
92
89
|
bs.offset += 12;
|
|
93
90
|
}
|
|
94
|
-
|
|
95
|
-
// @ts-ignore: inline
|
|
96
|
-
@inline function hexNibble(n: u16): u16 {
|
|
97
|
-
return n < 10 ? 48 + n : 87 + n;
|
|
98
|
-
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { bs, sc } from "../../../lib/as-bs";
|
|
2
2
|
import { BACK_SLASH } from "../../custom/chars";
|
|
3
3
|
import { SERIALIZE_ESCAPE_TABLE } from "../../globals/tables";
|
|
4
|
+
import { u16_to_hex4_swar } from "../../util/swar";
|
|
4
5
|
import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
5
6
|
|
|
6
7
|
// @ts-expect-error: @lazy is a valid decorator
|
|
@@ -89,7 +90,7 @@ export function serializeString_SWAR(src: string): void {
|
|
|
89
90
|
// unpaired high/low surrogate
|
|
90
91
|
const dstIdx = bs.offset + laneIdx - 1;
|
|
91
92
|
store<u32>(dstIdx, U_MARKER); // \u
|
|
92
|
-
store<u64>(dstIdx,
|
|
93
|
+
store<u64>(dstIdx, u16_to_hex4_swar(code), 4);
|
|
93
94
|
store<u64>(dstIdx, load<u64>(srcIdx, 1), 12);
|
|
94
95
|
bs.offset += 10;
|
|
95
96
|
} while (mask !== 0);
|
|
@@ -152,19 +153,10 @@ export function serializeString_SWAR(src: string): void {
|
|
|
152
153
|
@inline function write_u_escape(code: u16): void {
|
|
153
154
|
bs.growSize(10);
|
|
154
155
|
store<u32>(bs.offset, U_MARKER); // "\u"
|
|
155
|
-
|
|
156
|
-
store<u16>(bs.offset + 4, hexNibble((code >> 12) & 0xf));
|
|
157
|
-
store<u16>(bs.offset + 6, hexNibble((code >> 8) & 0xf));
|
|
158
|
-
store<u16>(bs.offset + 8, hexNibble((code >> 4) & 0xf));
|
|
159
|
-
store<u16>(bs.offset + 10, hexNibble(code & 0xf));
|
|
156
|
+
store<u64>(bs.offset, u16_to_hex4_swar(code), 4);
|
|
160
157
|
bs.offset += 12;
|
|
161
158
|
}
|
|
162
159
|
|
|
163
|
-
// @ts-expect-error: @inline is a valid decorator
|
|
164
|
-
@inline function hexNibble(n: u16): u16 {
|
|
165
|
-
return n < 10 ? 48 + n : 87 + n;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
160
|
// @ts-expect-error: @inline is a valid decorator
|
|
169
161
|
@inline export function detect_escapable_u64_swar_safe(block: u64): u64 {
|
|
170
162
|
const lo = block & 0x00ff_00ff_00ff_00ff;
|
package/assembly/util/swar.ts
CHANGED
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decode four lowercase ASCII hex digits packed into UTF-16 lanes into one `u16`.
|
|
3
|
+
*
|
|
4
|
+
* The input is a `u64` whose four 16-bit lanes each contain one ASCII hex code
|
|
5
|
+
* unit in the low byte:
|
|
6
|
+
*
|
|
7
|
+
* - lane 0: most-significant hex digit
|
|
8
|
+
* - lane 1: next hex digit
|
|
9
|
+
* - lane 2: next hex digit
|
|
10
|
+
* - lane 3: least-significant hex digit
|
|
11
|
+
*
|
|
12
|
+
* For example, `0x0034_0033_0032_0031` represents the UTF-16 string `"1234"`
|
|
13
|
+
* and decodes to `0x1234`.
|
|
14
|
+
*
|
|
15
|
+
* This helper assumes the digits are already valid lowercase hexadecimal
|
|
16
|
+
* characters in the ranges `0-9` or `a-f`.
|
|
17
|
+
*
|
|
18
|
+
* @param block Packed UTF-16 ASCII hex digits.
|
|
19
|
+
* @returns The decoded 16-bit value.
|
|
20
|
+
*/
|
|
1
21
|
// @ts-expect-error: @inline is a valid decorator
|
|
2
22
|
@inline export function hex4_to_u16_swar(block: u64): u16 {
|
|
3
23
|
// (c & 0xF) + 9 * (c >> 6)
|
|
@@ -5,3 +25,32 @@
|
|
|
5
25
|
|
|
6
26
|
return <u16>(((block >> 0) << 12) | ((block >> 16) << 8) | ((block >> 32) << 4) | (block >> 48));
|
|
7
27
|
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Encode one `u16` into four lowercase ASCII hex digits packed into UTF-16 lanes.
|
|
31
|
+
*
|
|
32
|
+
* The returned `u64` is laid out so it can be written directly as four UTF-16
|
|
33
|
+
* code units:
|
|
34
|
+
*
|
|
35
|
+
* - lane 0: most-significant hex digit
|
|
36
|
+
* - lane 1: next hex digit
|
|
37
|
+
* - lane 2: next hex digit
|
|
38
|
+
* - lane 3: least-significant hex digit
|
|
39
|
+
*
|
|
40
|
+
* Each lane stores the ASCII character in the low byte and zero in the high
|
|
41
|
+
* byte. For example, `0x1234` becomes `0x0034_0033_0032_0031`, which
|
|
42
|
+
* represents the UTF-16 string `"1234"`.
|
|
43
|
+
*
|
|
44
|
+
* This helper is the inverse of {@link hex4_to_u16_swar}.
|
|
45
|
+
*
|
|
46
|
+
* @param code The 16-bit value to encode.
|
|
47
|
+
* @returns Four packed UTF-16 ASCII hex digits.
|
|
48
|
+
*/
|
|
49
|
+
// @ts-expect-error: @inline is a valid decorator
|
|
50
|
+
@inline export function u16_to_hex4_swar(code: u16): u64 {
|
|
51
|
+
let block = (<u64>((code >> 12) & 0xf)) | ((<u64>((code >> 8) & 0xf)) << 16) | ((<u64>((code >> 4) & 0xf)) << 32) | ((<u64>(code & 0xf)) << 48);
|
|
52
|
+
|
|
53
|
+
const alphaMask = ((block + 0x0006_0006_0006_0006) >> 4) & 0x0001_0001_0001_0001;
|
|
54
|
+
block += 0x0030_0030_0030_0030 + alphaMask * 39;
|
|
55
|
+
return block;
|
|
56
|
+
}
|
package/lib/as-bs.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { 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,59 @@ export namespace bs {
|
|
|
192
190
|
}
|
|
193
191
|
}
|
|
194
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Copies the slice starting at a caller-provided relative buffer offset and restores
|
|
195
|
+
* `offset` back to that slice start.
|
|
196
|
+
*
|
|
197
|
+
* This is intended for deserializers that borrow `bs` as temporary scratch space and
|
|
198
|
+
* already know their local slice start as `bs.offset - bs.buffer`.
|
|
199
|
+
*
|
|
200
|
+
* Note: this restores only `offset`. Deserialization paths do not currently depend on
|
|
201
|
+
* `stackSize`, which is tracked for serialization growth heuristics.
|
|
202
|
+
*/
|
|
203
|
+
// @ts-expect-error: @inline is a valid decorator
|
|
204
|
+
@inline export function sliceOut<T>(start: usize): T {
|
|
205
|
+
const sliceStart = buffer + start;
|
|
206
|
+
const len = offset - sliceStart;
|
|
207
|
+
// @ts-expect-error: __new is a runtime builtin
|
|
208
|
+
const _out = __new(len, idof<T>());
|
|
209
|
+
memory.copy(_out, sliceStart, len);
|
|
210
|
+
offset = sliceStart;
|
|
211
|
+
return changetype<T>(_out);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Copies the slice starting at a caller-provided relative buffer offset into a string field
|
|
216
|
+
* and restores `offset` back to that slice start.
|
|
217
|
+
*/
|
|
218
|
+
// @ts-expect-error: @inline is a valid decorator
|
|
219
|
+
@inline export function toField(start: usize, dstFieldPtr: usize): void {
|
|
220
|
+
const sliceStart = buffer + start;
|
|
221
|
+
const byteLength = <u32>(offset - sliceStart);
|
|
222
|
+
if (byteLength == 0) {
|
|
223
|
+
store<usize>(dstFieldPtr, changetype<usize>(""));
|
|
224
|
+
offset = sliceStart;
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const current = load<usize>(dstFieldPtr);
|
|
229
|
+
let stringPtr: usize;
|
|
230
|
+
if (current != 0 && changetype<OBJECT>(current - TOTAL_OVERHEAD).rtSize == byteLength) {
|
|
231
|
+
stringPtr = current;
|
|
232
|
+
} else if (current != 0 && current != changetype<usize>("")) {
|
|
233
|
+
// @ts-expect-error: __renew is a runtime builtin
|
|
234
|
+
stringPtr = __renew(current, byteLength);
|
|
235
|
+
store<usize>(dstFieldPtr, stringPtr);
|
|
236
|
+
} else {
|
|
237
|
+
// @ts-expect-error: __new is a runtime builtin
|
|
238
|
+
stringPtr = __new(byteLength, idof<string>());
|
|
239
|
+
store<usize>(dstFieldPtr, stringPtr);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
memory.copy(stringPtr, sliceStart, byteLength);
|
|
243
|
+
offset = sliceStart;
|
|
244
|
+
}
|
|
245
|
+
|
|
195
246
|
/**
|
|
196
247
|
* Copies the buffer's content to a new object of a specified type.
|
|
197
248
|
* Uses exponential moving average to track typical output sizes for
|
|
@@ -220,38 +271,6 @@ export namespace bs {
|
|
|
220
271
|
}
|
|
221
272
|
return changetype<T>(out);
|
|
222
273
|
}
|
|
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
274
|
}
|
|
256
275
|
|
|
257
276
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "json-as",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"author": "Jairus Tanaka",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -41,6 +41,24 @@
|
|
|
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",
|
|
44
|
+
"files": [
|
|
45
|
+
"assembly/custom/",
|
|
46
|
+
"assembly/deserialize/",
|
|
47
|
+
"assembly/globals/",
|
|
48
|
+
"assembly/serialize/",
|
|
49
|
+
"assembly/util/",
|
|
50
|
+
"assembly/index.ts",
|
|
51
|
+
"assembly/index.d.ts",
|
|
52
|
+
"assembly/types.ts",
|
|
53
|
+
"assembly/tsconfig.json",
|
|
54
|
+
"lib/as-bs.ts",
|
|
55
|
+
"transform/lib/",
|
|
56
|
+
"transform/package.json",
|
|
57
|
+
"index.ts",
|
|
58
|
+
"README.md",
|
|
59
|
+
"CHANGELOG.md",
|
|
60
|
+
"LICENSE"
|
|
61
|
+
],
|
|
44
62
|
"keywords": [
|
|
45
63
|
"assemblyscript",
|
|
46
64
|
"json",
|
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;IA0yCnD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAItC,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IA6ClD,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAIjD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAuG9B,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"}
|