json-as 0.9.29 → 1.0.0-alpha.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/.github/workflows/nodejs.yml +0 -3
- package/.prettierrc.json +3 -2
- package/CHANGELOG +13 -0
- package/LICENSE +1 -1
- package/README.md +22 -7
- package/as-test.config.json +1 -1
- package/asconfig.json +2 -2
- package/assembly/__benches__/misc.bench.ts +17 -32
- package/assembly/__tests__/bool.spec.ts +1 -1
- package/assembly/__tests__/simd/string.spec.ts +32 -0
- package/assembly/custom/memory.ts +25 -0
- package/assembly/custom/util.ts +14 -92
- package/assembly/deserialize/simd/string.ts +103 -0
- package/assembly/deserialize/simple/arbitrary.ts +17 -0
- package/assembly/deserialize/simple/array/arbitrary.ts +113 -0
- package/assembly/deserialize/simple/array/array.ts +18 -0
- package/assembly/deserialize/simple/array/bool.ts +17 -0
- package/assembly/deserialize/simple/array/float.ts +28 -0
- package/assembly/deserialize/simple/array/integer.ts +27 -0
- package/assembly/deserialize/simple/array/map.ts +18 -0
- package/assembly/deserialize/simple/array/object.ts +18 -0
- package/assembly/deserialize/simple/array/string.ts +22 -0
- package/assembly/deserialize/simple/array.ts +48 -0
- package/assembly/deserialize/simple/bool.ts +9 -0
- package/assembly/deserialize/simple/date.ts +11 -0
- package/assembly/deserialize/simple/float.ts +10 -0
- package/assembly/deserialize/simple/integer.ts +5 -0
- package/assembly/deserialize/simple/map.ts +154 -0
- package/assembly/deserialize/simple/object.ts +159 -0
- package/assembly/deserialize/simple/string.ts +48 -0
- package/assembly/globals/tables.ts +417 -0
- package/assembly/index.d.ts +9 -13
- package/assembly/index.ts +266 -146
- package/assembly/serialize/simd/string.ts +176 -0
- package/assembly/serialize/simple/arbitrary.ts +36 -0
- package/assembly/serialize/simple/array.ts +32 -0
- package/assembly/serialize/simple/bool.ts +19 -0
- package/assembly/serialize/simple/date.ts +13 -0
- package/assembly/serialize/simple/float.ts +7 -0
- package/assembly/serialize/simple/integer.ts +7 -0
- package/assembly/serialize/simple/map.ts +43 -0
- package/assembly/serialize/simple/object.ts +7 -0
- package/assembly/serialize/simple/string.ts +48 -0
- package/assembly/test.ts +41 -27
- package/assembly/tsconfig.json +2 -91
- package/assembly/types.ts +0 -0
- package/assembly/util/atoi.ts +35 -0
- package/assembly/util/bytes.ts +12 -0
- package/assembly/util/concat.ts +9 -0
- package/assembly/util/getArrayDepth.ts +17 -0
- package/assembly/util/index.ts +5 -0
- package/assembly/util/isSpace.ts +4 -0
- package/assembly/util/nextPowerOf2.ts +4 -0
- package/assembly/util/ptrToStr.ts +7 -0
- package/assembly/util/snp.ts +69 -0
- package/bench.js +5 -5
- package/modules/bs/index.ts +167 -0
- package/modules/tsconfig.json +8 -0
- package/package.json +42 -48
- package/transform/lib/builder.js +1353 -0
- package/transform/lib/builder.js.map +1 -0
- package/transform/lib/index.js +497 -332
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/index.old.js +404 -0
- package/transform/lib/index.old.js.map +1 -0
- package/transform/lib/linker.js +18 -0
- package/transform/lib/linker.js.map +1 -0
- package/transform/lib/types.js +25 -0
- package/transform/lib/types.js.map +1 -0
- package/transform/lib/util.js +47 -0
- package/transform/lib/util.js.map +1 -0
- package/transform/lib/visitor.js +529 -446
- package/transform/lib/visitor.js.map +1 -0
- package/transform/package.json +1 -34
- package/transform/src/builder.ts +1371 -0
- package/transform/src/index.ts +564 -341
- package/transform/src/linker.ts +21 -0
- package/transform/src/types.ts +27 -0
- package/transform/src/util.ts +56 -0
- package/transform/src/visitor.ts +531 -0
- package/transform/tsconfig.json +3 -1
- package/assembly/__benches__/as-tral.d.ts +0 -1
- package/assembly/__tests__/date.spec.ts +0 -12
- package/assembly/custom/bs.ts +0 -202
- package/assembly/deserialize/array/array.ts +0 -31
- package/assembly/deserialize/array/bool.ts +0 -19
- package/assembly/deserialize/array/float.ts +0 -24
- package/assembly/deserialize/array/integer.ts +0 -24
- package/assembly/deserialize/array/map.ts +0 -27
- package/assembly/deserialize/array/object.ts +0 -27
- package/assembly/deserialize/array/string.ts +0 -29
- package/assembly/deserialize/array.ts +0 -46
- package/assembly/deserialize/bool.ts +0 -34
- package/assembly/deserialize/date.ts +0 -19
- package/assembly/deserialize/float.ts +0 -21
- package/assembly/deserialize/integer.ts +0 -16
- package/assembly/deserialize/map.ts +0 -139
- package/assembly/deserialize/object.ts +0 -211
- package/assembly/deserialize/string.ts +0 -149
- package/assembly/serialize/array.ts +0 -44
- package/assembly/serialize/bool.ts +0 -10
- package/assembly/serialize/date.ts +0 -4
- package/assembly/serialize/float.ts +0 -4
- package/assembly/serialize/integer.ts +0 -5
- package/assembly/serialize/map.ts +0 -24
- package/assembly/serialize/object.ts +0 -13
- package/assembly/serialize/string.ts +0 -284
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { OBJECT, TOTAL_OVERHEAD } from "rt/common";
|
|
2
|
+
|
|
3
|
+
let maxOffset: usize = __new(0, idof<ArrayBuffer>());
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Central buffer namespace for managing memory operations.
|
|
7
|
+
*/
|
|
8
|
+
export namespace bs {
|
|
9
|
+
/** Current buffer pointer. */
|
|
10
|
+
export let buffer: usize = maxOffset;
|
|
11
|
+
|
|
12
|
+
/** Current offset within the buffer. */
|
|
13
|
+
export let offset: usize = maxOffset;
|
|
14
|
+
|
|
15
|
+
/** Byte length of the buffer. */
|
|
16
|
+
export let byteLength: usize = 0;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Sets the buffer to a given data object and initializes related properties.
|
|
20
|
+
* @param data - The data object to set as the buffer.
|
|
21
|
+
*/
|
|
22
|
+
// @ts-ignore: Decorator valid here
|
|
23
|
+
@inline export function setBuffer<T>(data: T, byteLength: usize = bytes(data)): void {
|
|
24
|
+
buffer = changetype<usize>(data);
|
|
25
|
+
offset = changetype<usize>(data);
|
|
26
|
+
byteLength = byteLength;
|
|
27
|
+
maxOffset = byteLength + buffer;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Ensures the buffer has sufficient capacity for a given size.
|
|
32
|
+
* If necessary, reallocates the buffer to accommodate the new size.
|
|
33
|
+
* @param size - The size to ensure capacity for.
|
|
34
|
+
*/
|
|
35
|
+
// @ts-ignore: Decorator valid here
|
|
36
|
+
@inline export function ensureCapacity(size: u32): void {
|
|
37
|
+
const newSize = offset + size;
|
|
38
|
+
if (newSize > maxOffset) {
|
|
39
|
+
const newPtr = __renew(buffer, (byteLength = nextPowerOf2(newSize - buffer)));
|
|
40
|
+
offset = offset - buffer + newPtr;
|
|
41
|
+
maxOffset = newPtr + byteLength;
|
|
42
|
+
buffer = newPtr;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Ensures the buffer size is sufficient for a given size.
|
|
48
|
+
* If necessary, reallocates the buffer to the exact new size.
|
|
49
|
+
* @param size - The size to ensure.
|
|
50
|
+
*/
|
|
51
|
+
// @ts-ignore: Decorator valid here
|
|
52
|
+
@inline export function ensureSize(size: u32): void {
|
|
53
|
+
const newSize = offset + size;
|
|
54
|
+
if (newSize > maxOffset) {
|
|
55
|
+
const newPtr = __renew(buffer, (byteLength = newSize - buffer));
|
|
56
|
+
offset = offset - buffer + newPtr;
|
|
57
|
+
maxOffset = newPtr + byteLength;
|
|
58
|
+
buffer = newPtr;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Resizes the buffer to the specified size.
|
|
64
|
+
* @param newSize - The new buffer size.
|
|
65
|
+
*/
|
|
66
|
+
// @ts-ignore: Decorator valid here
|
|
67
|
+
@inline export function resize(newSize: u32): void {
|
|
68
|
+
const newPtr = __renew(buffer, newSize);
|
|
69
|
+
byteLength = newSize;
|
|
70
|
+
buffer = newPtr;
|
|
71
|
+
offset = buffer + newSize;
|
|
72
|
+
maxOffset = buffer + byteLength;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Gets the remaining space available in the buffer.
|
|
77
|
+
* @returns The number of bytes remaining.
|
|
78
|
+
*/
|
|
79
|
+
// @ts-ignore: Decorator valid here
|
|
80
|
+
@inline export function getRemainingSize(): usize {
|
|
81
|
+
return maxOffset - offset;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Clears data from a specified offset onward.
|
|
86
|
+
* @param fromOffset - The starting offset to clear from.
|
|
87
|
+
*/
|
|
88
|
+
// @ts-ignore: Decorator valid here
|
|
89
|
+
@inline export function clearFromOffset(fromOffset: usize): void {
|
|
90
|
+
if (fromOffset < offset) {
|
|
91
|
+
memory.fill(fromOffset, 0, offset - fromOffset);
|
|
92
|
+
offset = fromOffset;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Shrinks the buffer to fit the current offset.
|
|
98
|
+
*/
|
|
99
|
+
// @ts-ignore: Decorator valid here
|
|
100
|
+
@inline export function shrink(): void {
|
|
101
|
+
if (offset > maxOffset) {
|
|
102
|
+
byteLength = offset - buffer;
|
|
103
|
+
buffer = __renew(buffer, byteLength);
|
|
104
|
+
maxOffset = byteLength + buffer;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Shrinks the buffer and resets the offset, returning the buffer as a specified type.
|
|
110
|
+
* @returns The buffer cast to the specified type.
|
|
111
|
+
*/
|
|
112
|
+
// @ts-ignore: Decorator valid here
|
|
113
|
+
@inline export function shrinkTo<T>(): T {
|
|
114
|
+
shrink();
|
|
115
|
+
offset = buffer;
|
|
116
|
+
return changetype<T>(buffer);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Copies the buffer's content to a new object of a specified type.
|
|
121
|
+
* Optionally shrinks the buffer after copying.
|
|
122
|
+
* @param s - Whether to shrink the buffer after copying.
|
|
123
|
+
* @returns The new object containing the buffer's content.
|
|
124
|
+
*/
|
|
125
|
+
// @ts-ignore: Decorator valid here
|
|
126
|
+
@inline export function out<T>(s: bool = false): T {
|
|
127
|
+
const len = offset - buffer;
|
|
128
|
+
const _out = __new(len, idof<T>());
|
|
129
|
+
memory.copy(_out, buffer, len);
|
|
130
|
+
if (s) shrink();
|
|
131
|
+
offset = buffer;
|
|
132
|
+
return changetype<T>(_out);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Copies the buffer's content to a given destination pointer.
|
|
137
|
+
* Optionally shrinks the buffer after copying.
|
|
138
|
+
* @param dst - The destination pointer.
|
|
139
|
+
* @param s - Whether to shrink the buffer after copying.
|
|
140
|
+
* @returns The destination pointer cast to the specified type.
|
|
141
|
+
*/
|
|
142
|
+
// @ts-ignore: Decorator valid here
|
|
143
|
+
@inline export function outTo<T>(dst: usize, s: bool = false): T {
|
|
144
|
+
const len = offset - buffer;
|
|
145
|
+
if (len != changetype<OBJECT>(dst - TOTAL_OVERHEAD).rtSize) __renew(len, idof<T>());
|
|
146
|
+
memory.copy(dst, buffer, len);
|
|
147
|
+
if (s) shrink();
|
|
148
|
+
offset = buffer;
|
|
149
|
+
return changetype<T>(dst);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// @ts-ignore: Decorator valid here
|
|
154
|
+
@inline function nextPowerOf2(n: u32): u32 {
|
|
155
|
+
return 1 << (32 - clz(n - 1));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// @ts-ignore: Decorator valid here
|
|
159
|
+
@inline function bytes<T>(o: T): i32 {
|
|
160
|
+
if (isInteger<T>() || isFloat<T>()) {
|
|
161
|
+
return sizeof<T>();
|
|
162
|
+
} else if (isManaged<T>() || isReference<T>()) {
|
|
163
|
+
return changetype<OBJECT>(changetype<usize>(o) - TOTAL_OVERHEAD).rtSize;
|
|
164
|
+
} else {
|
|
165
|
+
ERROR("Cannot convert type " + nameof<T>() + " to bytes!");
|
|
166
|
+
}
|
|
167
|
+
}
|
package/package.json
CHANGED
|
@@ -1,59 +1,41 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "json-as",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "The only JSON library you'll need for AssemblyScript. SIMD enabled",
|
|
5
|
-
"types": "assembly/index.ts",
|
|
3
|
+
"version": "1.0.0-alpha.1",
|
|
6
4
|
"author": "Jairus Tanaka",
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"Derek Barrera",
|
|
11
|
-
"Frankk Taylor",
|
|
12
|
-
"lekiano",
|
|
13
|
-
"Florian Guitton",
|
|
14
|
-
"Matt Johnson-Pint",
|
|
15
|
-
"Tomáš Hromada"
|
|
16
|
-
],
|
|
17
|
-
"license": "MIT",
|
|
18
|
-
"scripts": {
|
|
19
|
-
"test": "ast test && rm -rf ./build/",
|
|
20
|
-
"pretest": "rm -rf ./build/ && ast build",
|
|
21
|
-
"bench": "astral --enable simd --runtime stub",
|
|
22
|
-
"build:test": "rm -rf ./build/ && JSON_DEBUG=true asc assembly/test.ts --transform ./transform -o ./build/test.wasm",
|
|
23
|
-
"build:transform": "tsc -p ./transform",
|
|
24
|
-
"test:wasmtime": "wasmtime ./build/test.wasm",
|
|
25
|
-
"test:wavm": "wavm run ./build/test.wasm",
|
|
26
|
-
"test:lunatic": "lunatic ./build/test.wasm",
|
|
27
|
-
"test:wasm3": "wasm3 ./build/test.wasm",
|
|
28
|
-
"prettier": "prettier -w ."
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/JairusSW/as-json.git"
|
|
29
8
|
},
|
|
9
|
+
"main": "transform/lib/index.js",
|
|
30
10
|
"devDependencies": {
|
|
31
11
|
"@as-tral/cli": "^3.0.2",
|
|
32
12
|
"@assemblyscript/wasi-shim": "^0.1.0",
|
|
33
|
-
"@types/node": "
|
|
13
|
+
"@types/node": "latest",
|
|
34
14
|
"as-bench": "^0.0.0-alpha",
|
|
35
15
|
"as-console": "^7.0.0",
|
|
36
|
-
"as-test": "0.3.
|
|
37
|
-
"assemblyscript": "^0.27.
|
|
16
|
+
"as-test": "^0.3.5",
|
|
17
|
+
"assemblyscript": "^0.27.31",
|
|
38
18
|
"assemblyscript-prettier": "^3.0.1",
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"prettier": "^3.3.3",
|
|
43
|
-
"tinybench": "^2.8.0",
|
|
44
|
-
"typescript": "^5.5.4",
|
|
19
|
+
"minimatch": "^10.0.1",
|
|
20
|
+
"prettier": "^3.4.2",
|
|
21
|
+
"typescript": "latest",
|
|
45
22
|
"visitor-as": "^0.11.4"
|
|
46
23
|
},
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
},
|
|
50
|
-
"overrides": {
|
|
51
|
-
"assemblyscript": "$assemblyscript"
|
|
52
|
-
},
|
|
53
|
-
"repository": {
|
|
54
|
-
"type": "git",
|
|
55
|
-
"url": "git+https://github.com/JairusSW/as-json.git"
|
|
24
|
+
"bugs": {
|
|
25
|
+
"url": "https://github.com/JairusSW/as-json/issues"
|
|
56
26
|
},
|
|
27
|
+
"contributors": [
|
|
28
|
+
"DogWhich",
|
|
29
|
+
"Romdotdog",
|
|
30
|
+
"Derek Barrera",
|
|
31
|
+
"Frankk Taylor",
|
|
32
|
+
"lekiano",
|
|
33
|
+
"Florian Guitton",
|
|
34
|
+
"Matt Johnson-Pint",
|
|
35
|
+
"Tomáš Hromada"
|
|
36
|
+
],
|
|
37
|
+
"description": "The only JSON library you'll need for AssemblyScript. SIMD enabled",
|
|
38
|
+
"homepage": "https://github.com/JairusSW/as-json#readme",
|
|
57
39
|
"keywords": [
|
|
58
40
|
"assemblyscript",
|
|
59
41
|
"json",
|
|
@@ -66,12 +48,24 @@
|
|
|
66
48
|
"fast",
|
|
67
49
|
"algorithm"
|
|
68
50
|
],
|
|
69
|
-
"
|
|
70
|
-
|
|
51
|
+
"license": "MIT",
|
|
52
|
+
"overrides": {
|
|
53
|
+
"assemblyscript": "$assemblyscript"
|
|
71
54
|
},
|
|
72
|
-
"homepage": "https://github.com/JairusSW/as-json#readme",
|
|
73
|
-
"type": "module",
|
|
74
55
|
"publishConfig": {
|
|
75
56
|
"@JairusSW:registry": "https://npm.pkg.github.com"
|
|
76
|
-
}
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"test": "rm -rf ./build/ && ast test",
|
|
60
|
+
"build:bench": "rm -rf ./build/ && asc assembly/__benches__/misc.bench.ts -o ./build/bench.wasm --textFile ./build/bench.wat --transform ./transform --optimizeLevel 3 --shrinkLevel 0 --converge --noAssert --uncheckedBehavior always --runtime incremental --enable simd --enable bulk-memory",
|
|
61
|
+
"build:test": "rm -rf ./build/ && JSON_DEBUG=true asc assembly/test.ts --transform ./transform -o ./build/test.wasm --textFile ./build/test.wat --optimizeLevel 3 --shrinkLevel 0 --enable simd --runtime stub",
|
|
62
|
+
"build:test:simd": "rm -rf ./build/ && JSON_DEBUG=true asc assembly/test.ts --transform ./transform -o ./build/test.wasm --textFile ./build/test.wat --optimizeLevel 3 --shrinkLevel 0 --enable simd --runtime stub",
|
|
63
|
+
"test:wasmtime": "wasmtime ./build/test.wasm",
|
|
64
|
+
"test:wasmer": "wasmer ./build/test.wasm",
|
|
65
|
+
"build:transform": "tsc -p ./transform",
|
|
66
|
+
"bench:wasmer": "wasmer ./build/bench.wasm --llvm",
|
|
67
|
+
"prettier": "prettier -w ."
|
|
68
|
+
},
|
|
69
|
+
"type": "module",
|
|
70
|
+
"types": "assembly/index.ts"
|
|
77
71
|
}
|