json-as 0.9.8 → 0.9.9-a
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 +9 -10
- package/CHANGELOG +13 -1
- package/README.md +56 -8
- package/asconfig.json +24 -3
- package/assembly/__tests__/test.spec.ts +564 -0
- package/assembly/__tests__/types.ts +82 -0
- package/assembly/{src/chars.ts → chars.ts} +36 -36
- package/assembly/deserialize/array/array.ts +4 -4
- package/assembly/deserialize/array/bool.ts +4 -4
- package/assembly/deserialize/array/float.ts +4 -4
- package/assembly/deserialize/array/integer.ts +4 -4
- package/assembly/deserialize/array/map.ts +4 -4
- package/assembly/deserialize/array/object.ts +4 -4
- package/assembly/deserialize/array/string.ts +4 -4
- package/assembly/deserialize/array.ts +5 -4
- package/assembly/deserialize/bool.ts +4 -4
- package/assembly/deserialize/date.ts +2 -2
- package/assembly/deserialize/float.ts +2 -2
- package/assembly/deserialize/integer.ts +3 -3
- package/assembly/deserialize/map.ts +6 -4
- package/assembly/deserialize/mpz.ts +12 -0
- package/assembly/deserialize/object.ts +4 -4
- package/assembly/deserialize/string.ts +5 -5
- package/assembly/index.ts +25 -23
- package/assembly/serialize/array.ts +6 -5
- package/assembly/serialize/bool.ts +2 -2
- package/assembly/serialize/date.ts +2 -2
- package/assembly/serialize/float.ts +2 -2
- package/assembly/serialize/integer.ts +2 -2
- package/assembly/serialize/map.ts +8 -7
- package/assembly/serialize/mpz.ts +6 -0
- package/assembly/serialize/object.ts +2 -2
- package/assembly/serialize/string.ts +5 -5
- package/assembly/serialize/unknown.ts +5 -5
- package/assembly/test.ts +70 -43
- package/assembly/types.ts +4 -0
- package/assembly/{src/util.ts → util.ts} +3 -3
- package/bench/benchmark.ts +1 -1
- package/build/test.spec.wasm +0 -0
- package/build/test.spec.wasm.map +1 -0
- package/build/test.spec.wat +112683 -0
- package/build/test.wasm +0 -0
- package/build/test.wasm.map +1 -0
- package/build/test.wat +30110 -0
- package/package.json +13 -13
- package/transform/lib/index.js +26 -0
- package/transform/lib/visitor.js +516 -0
- package/transform/package.json +1 -1
- package/transform/src/index.ts +24 -0
- package/transform/src/visitor.ts +543 -0
- package/transform/tsconfig.json +23 -63
- package/tsconfig.json +13 -13
- package/as-pect.asconfig.json +0 -24
- package/as-pect.config.js +0 -30
- package/assembly/__tests__/deserialize.spec.ts +0 -301
- package/assembly/__tests__/serialize.spec.ts +0 -398
- package/assembly/deserialize/box.ts +0 -17
- package/assembly/serialize/box.ts +0 -11
- package/develop/assembly/serialize/unknown.ts +0 -46
- package/transform/lib/index.old.js +0 -257
- package/transform/lib/types.js +0 -17
- package/transform/src/index.old.ts +0 -312
- /package/assembly/{src/sink.ts → sink.ts} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: Bun/Wasmtime CI
|
|
2
2
|
|
|
3
3
|
on: [push, pull_request]
|
|
4
4
|
|
|
@@ -14,15 +14,14 @@ jobs:
|
|
|
14
14
|
- name: Install Wasmtime
|
|
15
15
|
uses: jcbhmr/setup-wasmtime@v2
|
|
16
16
|
|
|
17
|
-
- name: Setup
|
|
18
|
-
uses:
|
|
17
|
+
- name: Setup Bun
|
|
18
|
+
uses: oven-sh/setup-bun@v1
|
|
19
19
|
|
|
20
|
-
- name: Install
|
|
21
|
-
|
|
22
|
-
run: yarn
|
|
20
|
+
- name: Install Dependencies
|
|
21
|
+
run: bun install
|
|
23
22
|
|
|
24
|
-
- name: Build
|
|
25
|
-
run:
|
|
23
|
+
- name: Build Tests
|
|
24
|
+
run: bun run pretest
|
|
26
25
|
|
|
27
|
-
- name:
|
|
28
|
-
run:
|
|
26
|
+
- name: Run Tests
|
|
27
|
+
run: bun run test
|
package/CHANGELOG
CHANGED
|
@@ -13,5 +13,17 @@ v0.9.5 - Fix #46
|
|
|
13
13
|
v0.9.6 - Fix bugs
|
|
14
14
|
v0.9.7 - Update testing framework and readme logo
|
|
15
15
|
v0.9.8 - Update dependencies
|
|
16
|
+
v0.9.8a - Fix #80 - Empty Maps were not serialized to {}, instead, threw memory out of bounds
|
|
17
|
+
v0.9.8b - Fix #81 - Revert transform
|
|
18
|
+
v0.9.9 - Fix #82 - Initialize maps
|
|
19
|
+
v0.9.9a - Remove extraneous logs from transform
|
|
16
20
|
|
|
17
|
-
[UNRELEASED]
|
|
21
|
+
[UNRELEASED] v1.0.0
|
|
22
|
+
- Allow nullable primitives
|
|
23
|
+
- Port over JSON.Value
|
|
24
|
+
- Performance improvements
|
|
25
|
+
- Add SIMD support
|
|
26
|
+
- Introduce options
|
|
27
|
+
- Custom serializers
|
|
28
|
+
- Support arbitrary-length integers (@hypercubed/as-mpz)
|
|
29
|
+
- Remove as-container (Box<T>)
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
__| || __|| || | | ___ | _ || __|
|
|
4
4
|
| | ||__ || | || | | ||___|| ||__ |
|
|
5
5
|
|_____||_____||_____||_|___| |__|__||_____|
|
|
6
|
-
v0.9.
|
|
6
|
+
v0.9.9a
|
|
7
7
|
</pre>
|
|
8
8
|
</h5>
|
|
9
9
|
|
|
@@ -118,6 +118,53 @@ const serialized = JSON.stringify(arr);
|
|
|
118
118
|
const parsed = JSON.parse<Base[]>(serialized);
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
+
It also supports arbitrary-length integers with [@hypercubed/as-mpz](https://github.com/Hypercubed/as-mpz)
|
|
122
|
+
|
|
123
|
+
```js
|
|
124
|
+
import { MpZ } from "@hypercubed/as-mpz";
|
|
125
|
+
|
|
126
|
+
const a = MpZ.from(18448972);
|
|
127
|
+
const b = MpZ.from('7881297289452930');
|
|
128
|
+
const c = a.add(b);
|
|
129
|
+
|
|
130
|
+
const serialized = JSON.stringify(c);
|
|
131
|
+
// 7881297307901902
|
|
132
|
+
const parsed = JSON.parse<MpZ>(serialized);
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
It also supports nullable primitive types, something that AssemblyScript usually can't do
|
|
136
|
+
|
|
137
|
+
```js
|
|
138
|
+
@json
|
|
139
|
+
class Vec2 {
|
|
140
|
+
x: f64 | null = 1.0;
|
|
141
|
+
y: f32 | null = 2.0;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const vec: Vec2 = {
|
|
145
|
+
x: 1.0,
|
|
146
|
+
y: null
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
vec.y = 2.0;
|
|
150
|
+
|
|
151
|
+
if (vec.y) {
|
|
152
|
+
// do something
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
NOTE: There are a few quirks to using nullable primitives. First, you'll get a warning about usize (ignore it, its fine) and secondly, you'll get a wasm validation error if you do not have a `!` operator after accessing an element. Eg. `console.log(vec.y.toString())` fails, but `console.log(vec.y!.toString())` works.
|
|
157
|
+
|
|
158
|
+
You can also add it to your `asconfig.json`
|
|
159
|
+
|
|
160
|
+
{
|
|
161
|
+
// ...
|
|
162
|
+
"options": {
|
|
163
|
+
"transform": ["json-as/transform"],
|
|
164
|
+
"disableWarning": [226]
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
121
168
|
If you use this project in your codebase, consider dropping a [star](https://github.com/JairusSW/as-json). I would really appreciate it!
|
|
122
169
|
|
|
123
170
|
## Notes
|
|
@@ -140,16 +187,17 @@ Below are benchmark results comparing JavaScript's built-in JSON implementation
|
|
|
140
187
|
|
|
141
188
|
My library beats JSON (written in C++) on all counts *and*, I see many places where I can pull at least a 60% uplift in performance if I implement it.
|
|
142
189
|
|
|
190
|
+
Note: SIMD is in-development and only available on the `v1` branch on GitHub
|
|
143
191
|
|
|
144
192
|
Serialization Benchmarks:
|
|
145
193
|
|
|
146
|
-
| Value | JavaScript (ops/s) | JSON-
|
|
147
|
-
|
|
148
|
-
| "hello world" |
|
|
149
|
-
| 12345 |
|
|
150
|
-
| 1.2345 |
|
|
151
|
-
| [[],[[]],[[],[[]]]] |
|
|
152
|
-
| { x: f64, y: f64, z: f64 } |
|
|
194
|
+
| Value | JavaScript (ops/s) | JSON-AS (ops/s) | JSON-AS (Pages) | JSON-AS (SIMD+Pages)| Max Throughput |
|
|
195
|
+
|----------------------------|--------------------|--------------------|---------------------|---------------------|----------------|
|
|
196
|
+
| "hello world" | 7,124,361 | 44,290,480 (6.2x) | 73,601,235 (10.3x) | NOT IMPLEMENTED | 1.91 GB/s |
|
|
197
|
+
| 12345 | 9,611,677 | 66,900,642 (6.9x) | 145,924,333 (15.2x) | NOT IMPLEMENTED | 0.58 GB/s |
|
|
198
|
+
| 1.2345 | 7,227,259 | 20,322,939 (2.8x) | NOT IMPLEMENTED | NOT IMPLEMENTED | 0.16 GB/s |
|
|
199
|
+
| [[],[[]],[[],[[]]]] | 5,655,429 | 34,453,102 (6.0x) | NOT IMPLEMENTED | NOT IMPLEMENTED | 1.32 GB/s |
|
|
200
|
+
| { x: f64, y: f64, z: f64 } | 3,878,604 | 44,557,996 (11.5x) | 113,203,242 (29.2x) | 172,023,231 (44.4x) | 8.61 GB/s |
|
|
153
201
|
|
|
154
202
|
|
|
155
203
|
|
package/asconfig.json
CHANGED
|
@@ -1,15 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"targets": {
|
|
3
3
|
"test": {
|
|
4
|
+
"outFile": "build/test.spec.wasm",
|
|
5
|
+
"textFile": "build/test.spec.wat",
|
|
6
|
+
"sourceMap": true,
|
|
7
|
+
"optimizeLevel": 0,
|
|
8
|
+
"shrinkLevel": 0,
|
|
9
|
+
"converge": false,
|
|
10
|
+
"noAssert": false
|
|
11
|
+
},
|
|
12
|
+
"debug": {
|
|
4
13
|
"outFile": "build/test.wasm",
|
|
5
|
-
"
|
|
14
|
+
"textFile": "build/test.wat",
|
|
15
|
+
"sourceMap": true,
|
|
6
16
|
"optimizeLevel": 0,
|
|
7
17
|
"shrinkLevel": 0,
|
|
8
18
|
"converge": false,
|
|
9
19
|
"noAssert": false
|
|
20
|
+
},
|
|
21
|
+
"bench": {
|
|
22
|
+
"outFile": "build/bench.wasm",
|
|
23
|
+
"textFile": "build/bench.wat",
|
|
24
|
+
"sourceMap": true,
|
|
25
|
+
"optimizeLevel": 3,
|
|
26
|
+
"shrinkLevel": 0,
|
|
27
|
+
"converge": true,
|
|
28
|
+
"noAssert": true
|
|
10
29
|
}
|
|
11
30
|
},
|
|
12
31
|
"options": {
|
|
13
|
-
"transform": ["./transform"]
|
|
14
|
-
|
|
32
|
+
"transform": ["./transform", "as-test/transform"],
|
|
33
|
+
"disableWarning": [226]
|
|
34
|
+
},
|
|
35
|
+
"extends": "./node_modules/@assemblyscript/wasi-shim/asconfig.json"
|
|
15
36
|
}
|