json-as 0.2.1 → 0.2.5

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.
@@ -0,0 +1,29 @@
1
+ import { unknown } from "./unknown"
2
+
3
+ /**
4
+ * Provides functionality common to all JavaScript objects.
5
+ */
6
+ export class DynamicObject {
7
+ [key: string]: any
8
+ // Having it marked as 'any' is for intellisense only
9
+ protected __data: Map<string, unknown> = new Map<string, unknown>()
10
+ set(path: string, value: unknown): void {
11
+ this.__data.set(path, value)
12
+ }
13
+ get<T = unknown>(path: string): T {
14
+ let type!: T
15
+ if (type instanceof unknown) {
16
+ // @ts-ignore
17
+ return this.__data.get(path)
18
+ } else {
19
+ // @ts-ignore
20
+ return this.__data.get(path).get<T>()
21
+ }
22
+ }
23
+ static keys(o: DynamicObject): string[] {
24
+ return o.__data.keys()
25
+ }
26
+ static values(o: DynamicObject): unknown[] {
27
+ return o.__data.values()
28
+ }
29
+ }
package/assembly/bench.ts CHANGED
@@ -2,12 +2,12 @@ import 'wasi'
2
2
 
3
3
  import { Date } from 'as-wasi'
4
4
 
5
- import { JSON } from './json'
5
+ import { JSON } from '.'
6
6
 
7
7
  import * as asJSON from "assemblyscript-json"
8
8
 
9
9
  import { unknown } from './unknown'
10
- import { Object } from './Object'
10
+ import { DynamicObject } from './DynamicObject'
11
11
 
12
12
  // @ts-ignore
13
13
  @json
@@ -19,7 +19,7 @@ const jsonData: JSONSchema = {
19
19
  hello: 'world'
20
20
  }
21
21
 
22
- const o = new Object()
22
+ const o = new DynamicObject()
23
23
 
24
24
  o['hello'] = unknown.wrap('world')
25
25
 
@@ -86,11 +86,11 @@ bench('AS-JSON Parse Object', () => {
86
86
  })
87
87
 
88
88
  bench('AS-JSON Stringify Dynamic Object', () => {
89
- JSON.stringify<Object>(o)
89
+ JSON.stringify<DynamicObject>(o)
90
90
  })
91
91
 
92
92
  bench('AS-JSON Parse Object', () => {
93
- JSON.parse<Object>('{"hello":"world"}')
93
+ JSON.parse<DynamicObject>('{"hello":"world"}')
94
94
  })
95
95
 
96
96
  bench('AS-JSON Stringify Dynamic Array', () => {
@@ -116,7 +116,7 @@ bench('AssemblyScript-JSON Stringify String', () => {
116
116
  String.UTF8.decode(binary.buffer)
117
117
  // Its odd. Not encoded in UTF16 Strings.
118
118
  // Since AS-JSON returns a string, so does assemblyscript-json in this bench.
119
- // Or else, the bench is biased.
119
+ // Or else, the bench is biased.
120
120
  })
121
121
 
122
122
  bench('AssemblyScript-JSON Parse String', () => {
@@ -1,8 +1,9 @@
1
+ import { console, stringify } from '../node_modules/as-console/assembly/wasi'
1
2
  import { StringSink } from 'as-string-sink'
2
- import { Object } from './Object'
3
+ import { DynamicObject } from './DynamicObject'
3
4
  import { unknown, unknownTypes } from './unknown'
4
5
  export { unknown, unknownTypes } from './unknown'
5
- export { Object } from './Object'
6
+ export { DynamicObject as Object } from './DynamicObject'
6
7
 
7
8
  @global
8
9
  export class Nullable { }
@@ -29,7 +30,7 @@ const f_charCode: u16 = 116// "t"
29
30
  const nCode: u16 = 110// "n"
30
31
  const unknownId = idof<unknown>()
31
32
  const stringId = idof<string>()
32
- const objectId = idof<Object>()
33
+ const objectId = idof<DynamicObject>()
33
34
  const arrayStringId = idof<string[]>()
34
35
  const arrayBooleanId = idof<boolean[]>()
35
36
  const arrayBoolId = idof<bool[]>()
@@ -52,6 +53,8 @@ const WS5code = '\u0009'.charCodeAt(0)
52
53
  const unknownTrue = unknown.wrap(true)
53
54
  const unknownFalse = unknown.wrap(false)
54
55
  const unknownNull = unknown.wrap(null)
56
+ const fwd_slash = "\\"
57
+ const empty_stringCode = " ".charCodeAt(0)
55
58
 
56
59
  /**
57
60
  * JSON Encoder/Decoder for AssemblyScript
@@ -81,7 +84,7 @@ export namespace JSON {
81
84
  return serializeArray<T>(data)
82
85
  } else if (data instanceof unknown) {
83
86
  return serializeUnknown(data)
84
- } else if (data instanceof Object) {
87
+ } else if (data instanceof DynamicObject) {
85
88
  return serializeDynamicObject(data)
86
89
  }
87
90
 
@@ -115,16 +118,16 @@ export namespace JSON {
115
118
  // @ts-ignore
116
119
  else if (type instanceof unknown) return parseUnknown(data)
117
120
  // @ts-ignore
118
- else if (type instanceof Object) return parseDynamicObject(data)
121
+ else if (type instanceof DynamicObject) return parseDynamicObject(data)
119
122
  // @ts-ignore
120
123
  return parseObject<T>(data)
121
124
  }
122
125
  }
123
126
 
124
- export function serializeDynamicObject(data: Object): string {
127
+ export function serializeDynamicObject(data: DynamicObject): string {
125
128
  const result = new StringSink(lcbracket)
126
- const keys = Object.keys(data)
127
- const values = Object.values(data)
129
+ const keys = DynamicObject.keys(data)
130
+ const values = DynamicObject.values(data)
128
131
  const len: u32 = keys.length - 1
129
132
  if (len === -1) return '{}'
130
133
  for (let i: u32 = 0; i < len; i++) {
@@ -150,134 +153,134 @@ export function serializeUnknown(data: unknown): string {
150
153
  return serializeString(data.get<string>())
151
154
  }
152
155
  // @ts-ignore
153
- else if (data.type === objectId) {
156
+ else if (data.type === unknownTypes.boolean) {
154
157
  // @ts-ignore
155
- return serializeDynamicObject(data.get<Object>())
158
+ return serializeBoolean(data.get<boolean>())
156
159
  }
157
160
  // @ts-ignore
158
- else if (data.type === arrayUnknownId) {
161
+ else if (data.type === unknownTypes.i8) {
159
162
  // @ts-ignore
160
- return serializeUnknownArray(data.get<unknown[]>())
163
+ return data.get<i8>().toString()
161
164
  }
162
165
  // @ts-ignore
163
- else if (data.type === arrayBoolId) {
166
+ else if (data.type === unknownTypes.i16) {
164
167
  // @ts-ignore
165
- return serializeBooleanArray(data.get<bool[]>())
168
+ return data.get<i16>().toString()
166
169
  }
167
170
  // @ts-ignore
168
- else if (data.type === arrayBooleanId) {
171
+ else if (data.type === unknownTypes.i32) {
169
172
  // @ts-ignore
170
- return serializeBooleanArray(data.get<boolean[]>())
173
+ return data.get<i32>().toString()
171
174
  }
172
175
  // @ts-ignore
173
- else if (data.type === arrayF32Id) {
176
+ else if (data.type === unknownTypes.i64) {
174
177
  // @ts-ignore
175
- return serializeNumberArray<f32[]>(data.get<f32[]>())
178
+ return data.get<i64>().toString()
176
179
  }
177
180
  // @ts-ignore
178
- else if (data.type === arrayF64Id) {
181
+ else if (data.type === unknownTypes.u8) {
179
182
  // @ts-ignore
180
- return serializeNumberArray<f64[]>(data.get<f64[]>())
183
+ return data.get<u8>().toString()
181
184
  }
182
185
  // @ts-ignore
183
- else if (data.type === arrayU8Id) {
186
+ else if (data.type === unknownTypes.u16) {
184
187
  // @ts-ignore
185
- return serializeNumberArray<u8[]>(data.get<u8[]>())
188
+ return data.get<u16>().toString()
186
189
  }
187
190
  // @ts-ignore
188
- else if (data.type === arrayU16Id) {
191
+ else if (data.type === unknownTypes.u32) {
189
192
  // @ts-ignore
190
- return serializeNumberArray<u16[]>(data.get<u16[]>())
193
+ return data.get<u32>().toString()
191
194
  }
192
195
  // @ts-ignore
193
- else if (data.type === arrayU32Id) {
196
+ else if (data.type === unknownTypes.u64) {
194
197
  // @ts-ignore
195
- return serializeNumberArray<u32[]>(data.get<u32[]>())
198
+ return data.get<u64>().toString()
196
199
  }
197
200
  // @ts-ignore
198
- else if (data.type === arrayU64Id) {
201
+ else if (data.type === unknownTypes.f32) {
199
202
  // @ts-ignore
200
- return serializeNumberArray<u64[]>(data.get<u64[]>())
203
+ return data.get<f32>().toString()
201
204
  }
202
205
  // @ts-ignore
203
- else if (data.type === arrayI8Id) {
206
+ else if (data.type === unknownTypes.f64) {
204
207
  // @ts-ignore
205
- return serializeNumberArray<i8[]>(data.get<i8[]>())
208
+ return data.get<f64>().toString()
206
209
  }
207
210
  // @ts-ignore
208
- else if (data.type === arrayI16Id) {
211
+ else if (data.type === objectId) {
209
212
  // @ts-ignore
210
- return serializeNumberArray<i16[]>(data.get<i16[]>())
213
+ return serializeDynamicObject(data.get<DynamicObject>())
211
214
  }
212
215
  // @ts-ignore
213
- else if (data.type === arrayI32Id) {
216
+ else if (data.type === arrayUnknownId) {
214
217
  // @ts-ignore
215
- return serializeNumberArray<i32[]>(data.get<i32[]>())
218
+ return serializeUnknownArray(data.get<unknown[]>())
216
219
  }
217
220
  // @ts-ignore
218
- else if (data.type === arrayI64Id) {
221
+ else if (data.type === arrayBoolId) {
219
222
  // @ts-ignore
220
- return serializeNumberArray<i64[]>(data.get<i64[]>())
223
+ return serializeBooleanArray(data.get<bool[]>())
221
224
  }
222
225
  // @ts-ignore
223
- else if (data.type === arrayStringId) {
226
+ else if (data.type === arrayBooleanId) {
224
227
  // @ts-ignore
225
- return serializeStringArray(data.get<string[]>())
228
+ return serializeBooleanArray(data.get<boolean[]>())
226
229
  }
227
230
  // @ts-ignore
228
- else if (data.type === unknownTypes.boolean) {
231
+ else if (data.type === arrayF32Id) {
229
232
  // @ts-ignore
230
- return serializeBoolean(data.get<boolean>())
233
+ return serializeNumberArray<f32[]>(data.get<f32[]>())
231
234
  }
232
235
  // @ts-ignore
233
- else if (data.type === unknownTypes.i8) {
236
+ else if (data.type === arrayF64Id) {
234
237
  // @ts-ignore
235
- return data.get<i8>().toString()
238
+ return serializeNumberArray<f64[]>(data.get<f64[]>())
236
239
  }
237
240
  // @ts-ignore
238
- else if (data.type === unknownTypes.i16) {
241
+ else if (data.type === arrayU8Id) {
239
242
  // @ts-ignore
240
- return data.get<i16>().toString()
243
+ return serializeNumberArray<u8[]>(data.get<u8[]>())
241
244
  }
242
245
  // @ts-ignore
243
- else if (data.type === unknownTypes.i32) {
246
+ else if (data.type === arrayU16Id) {
244
247
  // @ts-ignore
245
- return data.get<i32>().toString()
248
+ return serializeNumberArray<u16[]>(data.get<u16[]>())
246
249
  }
247
250
  // @ts-ignore
248
- else if (data.type === unknownTypes.i64) {
251
+ else if (data.type === arrayU32Id) {
249
252
  // @ts-ignore
250
- return data.get<i64>().toString()
253
+ return serializeNumberArray<u32[]>(data.get<u32[]>())
251
254
  }
252
255
  // @ts-ignore
253
- else if (data.type === unknownTypes.u8) {
256
+ else if (data.type === arrayU64Id) {
254
257
  // @ts-ignore
255
- return data.get<u8>().toString()
258
+ return serializeNumberArray<u64[]>(data.get<u64[]>())
256
259
  }
257
260
  // @ts-ignore
258
- else if (data.type === unknownTypes.u16) {
261
+ else if (data.type === arrayI8Id) {
259
262
  // @ts-ignore
260
- return data.get<u16>().toString()
263
+ return serializeNumberArray<i8[]>(data.get<i8[]>())
261
264
  }
262
265
  // @ts-ignore
263
- else if (data.type === unknownTypes.u32) {
266
+ else if (data.type === arrayI16Id) {
264
267
  // @ts-ignore
265
- return data.get<u32>().toString()
268
+ return serializeNumberArray<i16[]>(data.get<i16[]>())
266
269
  }
267
270
  // @ts-ignore
268
- else if (data.type === unknownTypes.u64) {
271
+ else if (data.type === arrayI32Id) {
269
272
  // @ts-ignore
270
- return data.get<u64>().toString()
273
+ return serializeNumberArray<i32[]>(data.get<i32[]>())
271
274
  }
272
275
  // @ts-ignore
273
- else if (data.type === unknownTypes.f32) {
276
+ else if (data.type === arrayI64Id) {
274
277
  // @ts-ignore
275
- return data.get<f32>().toString()
278
+ return serializeNumberArray<i64[]>(data.get<i64[]>())
276
279
  }
277
280
  // @ts-ignore
278
- else if (data.type === unknownTypes.f64) {
281
+ else if (data.type === arrayStringId) {
279
282
  // @ts-ignore
280
- return data.get<f64>().toString()
283
+ return serializeStringArray(data.get<string[]>())
281
284
  }
282
285
  // @ts-ignore
283
286
  else {
@@ -377,7 +380,7 @@ function serializeObjectArray<T extends Array<any>>(data: T): string {
377
380
  return result.toString()
378
381
  }
379
382
 
380
- function serializeDynamicObjectArray(data: Object[]): string {
383
+ function serializeDynamicObjectArray(data: DynamicObject[]): string {
381
384
  const result = new StringSink(lbracket)
382
385
  const len: u32 = data.length - 1
383
386
  for (let i: u32 = 0; i < len; i++) {
@@ -436,7 +439,7 @@ export function serializeArray<T extends Array<any>>(data: T): string {
436
439
  result.writeCodePoint(rbracketCode)
437
440
  return result.toString()
438
441
  // @ts-ignore
439
- } else if (type instanceof Object) {
442
+ } else if (type instanceof DynamicObject) {
440
443
  for (let i = 0; i < len; i++) {
441
444
  result.write(serializeDynamicObject(unchecked(data[i])))
442
445
  result.writeCodePoint(commaCode)
@@ -667,6 +670,7 @@ export function parseArrayArray<T extends Array<unknown>>(data: string): T {
667
670
 
668
671
  export function parseObject<T>(data: string): T {
669
672
  //console.log('Data ' + data)
673
+ data = removeJSONWhitespace(data)
670
674
  const len: u32 = data.length - 1
671
675
  let schema: T
672
676
  const result = new Map<string, string>()
@@ -684,7 +688,7 @@ export function parseObject<T>(data: string): T {
684
688
  if (char === rcbracketCode || char === rbracketCode) fdepth++
685
689
  }
686
690
  if (depth !== 0 && depth === fdepth) {
687
- //console.log(`Deep: ${prependType(data.slice(lastPos + 1, i + 1))}`)
691
+ //console.log(`Deep: ${data.slice(lastPos + 1, i + 1)}`)
688
692
  result.set(key, data.slice(lastPos + 1, i + 1).trim())
689
693
  // Reset the depth
690
694
  depth = 0
@@ -694,27 +698,29 @@ export function parseObject<T>(data: string): T {
694
698
  }
695
699
  if (depth === 0) {
696
700
  if (char === colonCode) {
697
- //console.log(`Key: ${prependType(data.slice(lastPos + 1, i - 1))}`)
701
+ //console.log(`Key: ${data.slice(lastPos + 1, i - 1)}`)
698
702
  key = data.slice(lastPos + 1, i - 1).trim()
699
703
  lastPos = i
700
704
  }
701
705
  else if (char === commaCode) {
702
- //console.log(`Value: ${prependType(data.slice(lastPos + 1, i))}`)
706
+ //console.log(`Value: ${data.slice(lastPos + 1, i)}`)
703
707
  if ((i - lastPos) > 0) result.set(key, data.slice(lastPos + 1, i).trim())
704
708
  lastPos = i + 1
705
709
  }
706
710
  }
707
711
  }
708
- //console.log(`Trailing: ${prependType(data.slice(lastPos + 1, len))}\n\t\sValid: ${data.slice(lastPos + 1, len).length > 0}`)
712
+ //console.log(`Trailing: ${data.slice(lastPos + 1, len)}\n\t\sValid: ${data.slice(lastPos + 1, len).length > 0}`)
709
713
 
710
714
  if ((len - lastPos) > 0) result.set(key, data.slice(lastPos + 1, len).trim())
715
+ console.log(result.keys())
716
+ console.log(result.values())
711
717
  // @ts-ignore
712
718
  return schema.__decode(result)
713
719
  }
714
720
 
715
- export function parseDynamicObject(data: string): Object {
721
+ export function parseDynamicObject(data: string): DynamicObject {
716
722
  const len: u32 = data.length - 1
717
- if (len === 1) return new Object()
723
+ if (len === 1) return new DynamicObject()
718
724
  const result = new Map<string, unknown>()
719
725
  let lastPos: u32 = 1
720
726
  let key: string = ''
@@ -750,8 +756,26 @@ export function parseDynamicObject(data: string): Object {
750
756
  }
751
757
 
752
758
  if ((len - lastPos) > 0) result.set(key, unknown.wrap(data.slice(lastPos + 1, len - 1).trim()))
753
- const o = new Object()
759
+ const o = new DynamicObject()
754
760
  // @ts-ignore
755
761
  o.__data = result
756
762
  return o
763
+ }
764
+
765
+ export function removeJSONWhitespace(data: string): string {
766
+ let result = new StringSink()
767
+ let instr = false
768
+ let char = 0
769
+ for (let i = 0; i < data.length; i++) {
770
+ char = data.charCodeAt(i)
771
+ if (char === quoteCode && data.charCodeAt(i - 1) === fwd_slashCode) {
772
+ instr = !instr
773
+ }
774
+ if (instr === true) {
775
+ result.writeCodePoint(char)
776
+ } else if (instr === false && char !== empty_stringCode) {
777
+ result.writeCodePoint(char)
778
+ }
779
+ }
780
+ return result.toString()
757
781
  }
package/assembly/test.ts CHANGED
@@ -2,10 +2,10 @@ import { unknown, unknownTypes } from './unknown'
2
2
 
3
3
  import { console, stringify } from "../node_modules/as-console/assembly/wasi"
4
4
 
5
- import { JSON, parseDynamicObject, parseUnknown, parseUnknownArray } from './json'
6
-
7
- import { Object } from './Object'
5
+ import { JSON, parseDynamicObject, parseUnknown, parseUnknownArray, removeJSONWhitespace } from '.'
8
6
 
7
+ import { DynamicObject } from './DynamicObject'
8
+ /*
9
9
  // Not inlining results in an error for some reason
10
10
  // @ts-ignore
11
11
  @inline
@@ -180,3 +180,28 @@ check<string[][]>('Encode/Decode string[][]', [['Hey'], ['ha'], ['ho']])
180
180
  check<JSONSchema>('Encode/Decode object', obj)
181
181
 
182
182
  check<EmptySchema>('Encode/Decode object', emptyObj)
183
+ */
184
+ // Unknown
185
+ //check<unknown[]>('Encode/Decode unknown[]', ["Welcome to dynamic arrays", ["Very", ["Deep", ["Array"]]], "It also supports nulls"])
186
+
187
+ //console.log(JSON.stringify(["Welcome to dynamic arrays", 3.14, ["Very", ["Deep", ["Array"]]], true, "It also supports nulls", null]))
188
+
189
+ //console.log(JSON.stringify(JSON.parse<unknown[]>('["Welcome to dynamic arrays",3.14,["Very",["Deep",["Array"]]],true,"It also supports nulls",null]')))
190
+ //const foo = new Map()
191
+
192
+ //console.log(JSON.stringify(parseDynamicObject('{"hello":"world"}')))
193
+ // @ts-ignore
194
+ @json
195
+ class Test {
196
+ stuff: string
197
+ things: i32
198
+ }
199
+
200
+ const test: Test = {
201
+ stuff: "hi",
202
+ things: 42
203
+ }
204
+
205
+ console.log(stringify(JSON.stringify(test)))
206
+ console.log(removeJSONWhitespace('{"stuff":"hi", "things":42}'))
207
+ console.log(stringify(JSON.stringify(JSON.parse<Test>('{"stuff":"hi", "things":42}'))))
package/package.json CHANGED
@@ -1,61 +1,60 @@
1
- {
2
- "name": "json-as",
3
- "version": "0.2.1",
4
- "description": "JSON encoder/decoder for AssemblyScript",
5
- "types": "assembly/json.ts",
6
- "ascMain": "assembly/json.ts",
7
- "author": "JairusSW",
8
- "license": "MIT",
9
- "scripts": {
10
- "build:transform": "tsc -w -p ./transform",
11
- "build:test": "asc assembly/test.ts --transform ./transform --target test --explicitStart",
12
- "test": "node --experimental-wasi-unstable-preview1 ./tests/test",
13
- "bench:build": "asc assembly/bench.ts --runtime incremental --transform ./transform --target bench --explicitStart",
14
- "bench:node": "node --experimental-wasi-unstable-preview1 ./bench/bench",
15
- "bench:wasmtime": "wasmtime ./bench/output/bench.wasm",
16
- "bench:lunatic": "lunatic ./bench/output/bench.wasm",
17
- "asbuild:untouched": "asc assembly/index.ts --target debug",
18
- "asbuild:optimized": "asc assembly/index.ts --target release",
19
- "asbuild": "yarn asbuild:untouched && yarn asbuild:optimized"
20
- },
21
- "devDependencies": {
22
- "@as-pect/cli": "^6.2.4",
23
- "@assemblyscript/loader": "^0.19.10",
24
- "@serial-as/json": "^1.0.2",
25
- "@types/jest": "^27.0.2",
26
- "@types/line-column": "^1.0.0",
27
- "as-base64": "^0.2.0",
28
- "as-bignum": "^0.2.18",
29
- "as-console": "^6.0.2",
30
- "as-string-sink": "^0.4.2",
31
- "as-variant": "^0.2.1",
32
- "as-wasi": "^0.4.6",
33
- "asbuild": "^0.2.0",
34
- "assemblyscript": "^0.19.10",
35
- "assemblyscript-json": "^1.1.0",
36
- "jest": "^27.0.6",
37
- "kati": "^0.6.1",
38
- "lerna": "^4.0.0",
39
- "rimraf": "^3.0.2",
40
- "ts-jest": "^27.0.4",
41
- "ts-node": "^10.1.0",
42
- "typescript": "^4.3.5"
43
- },
44
- "dependencies": {
45
- "@assemblyscript/loader": "^0.19.17"
46
- },
47
- "repository": {
48
- "type": "git",
49
- "url": "git+https://github.com/aspkg/as-json.git"
50
- },
51
- "keywords": [
52
- "assemblyscript",
53
- "json",
54
- "serialize",
55
- "deserialize"
56
- ],
57
- "bugs": {
58
- "url": "https://github.com/aspkg/as-json/issues"
59
- },
60
- "homepage": "https://github.com/aspkg/as-json#readme"
61
- }
1
+ {
2
+ "name": "json-as",
3
+ "version": "0.2.5",
4
+ "description": "JSON encoder/decoder for AssemblyScript",
5
+ "types": "assembly/index.ts",
6
+ "ascMain": "assembly/index.ts",
7
+ "author": "JairusSW",
8
+ "license": "MIT",
9
+ "scripts": {
10
+ "build:transform": "tsc -w -p ./transform",
11
+ "build:test": "asc assembly/test.ts --transform ./transform --target test --explicitStart",
12
+ "test": "node --experimental-wasi-unstable-preview1 ./tests/test",
13
+ "bench:build": "asc assembly/bench.ts --runtime incremental --transform ./transform --target bench --explicitStart",
14
+ "bench:node": "node --experimental-wasi-unstable-preview1 ./bench/bench",
15
+ "bench:wasmtime": "wasmtime ./bench/output/bench.wasm",
16
+ "bench:lunatic": "lunatic ./bench/output/bench.wasm",
17
+ "asbuild:untouched": "asc assembly/index.ts --target debug",
18
+ "asbuild:optimized": "asc assembly/index.ts --target release",
19
+ "asbuild": "yarn asbuild:untouched && yarn asbuild:optimized"
20
+ },
21
+ "devDependencies": {
22
+ "@as-pect/cli": "^6.2.4",
23
+ "@assemblyscript/loader": "^0.19.10",
24
+ "@serial-as/json": "^1.0.2",
25
+ "@types/jest": "^27.0.2",
26
+ "@types/line-column": "^1.0.0",
27
+ "as-base64": "^0.2.0",
28
+ "as-bignum": "^0.2.18",
29
+ "as-console": "^6.0.2",
30
+ "as-variant": "^0.2.1",
31
+ "as-wasi": "^0.4.6",
32
+ "asbuild": "^0.2.0",
33
+ "assemblyscript": "^0.19.18",
34
+ "assemblyscript-json": "^1.1.0",
35
+ "jest": "^27.3.1",
36
+ "kati": "^0.6.2",
37
+ "lerna": "^4.0.0",
38
+ "rimraf": "^3.0.2",
39
+ "ts-jest": "^27.0.7",
40
+ "ts-node": "^10.4.0",
41
+ "typescript": "^4.4.4"
42
+ },
43
+ "dependencies": {
44
+ "as-string-sink": "^0.4.2"
45
+ },
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "git+https://github.com/aspkg/as-json.git"
49
+ },
50
+ "keywords": [
51
+ "assemblyscript",
52
+ "json",
53
+ "serialize",
54
+ "deserialize"
55
+ ],
56
+ "bugs": {
57
+ "url": "https://github.com/aspkg/as-json/issues"
58
+ },
59
+ "homepage": "https://github.com/aspkg/as-json#readme"
60
+ }
package/tests/index.js ADDED
@@ -0,0 +1,4 @@
1
+ const assert = require("assert");
2
+ const myModule = require("..");
3
+ assert.strictEqual(myModule.add(1, 2), 3);
4
+ console.log("ok");
package/tests/test.js ADDED
@@ -0,0 +1,10 @@
1
+ const fs = require("fs");
2
+ const loader = require("@assemblyscript/loader");
3
+ const { WASI } = require('wasi')
4
+ const wasiOptions = {}
5
+ const wasi = new WASI(wasiOptions)
6
+ const imports = {
7
+ wasi_snapshot_preview1: wasi.wasiImport
8
+ };
9
+ const wasmModule = loader.instantiateSync(fs.readFileSync(__dirname + "/output/test.wasm"), imports);
10
+ wasi.start(wasmModule)
@@ -95,6 +95,7 @@ class JSONTransformer extends BaseVisitor {
95
95
  const className = this.currentClass!.name.text
96
96
  if (!this.encodeStmts.has(className)) this.encodeStmts.set(className, [])
97
97
  if (!this.decodeCode.has(className)) this.decodeCode.set(className, [])
98
+ // TODO: fix later
98
99
  // @ts-ignore
99
100
  this.encodeStmts.get(className).push(
100
101
  `this.__encoded += '' + '"' + '${name}' + '"' + ':' + JSON.stringify<${type}>(this.${name}) + ',';`
@@ -3,7 +3,7 @@ const as_1 = require("visitor-as/as");
3
3
  const visitor_as_1 = require("visitor-as");
4
4
  const utils_1 = require("visitor-as/dist/utils");
5
5
  function getTypeName(type) {
6
- let _type = utils_1.getName(type);
6
+ let _type = (0, utils_1.getName)(type);
7
7
  const OR_NULL = /\|.*null/;
8
8
  if (type.isNullable && !OR_NULL.test(_type)) {
9
9
  _type = `${_type} | null`;
@@ -29,9 +29,9 @@ class JSONTransformer extends visitor_as_1.BaseVisitor {
29
29
  }
30
30
  visitElementAccessExpression(node) {
31
31
  super.visitElementAccessExpression(node);
32
- if (utils_1.toString(node.expression) === 'o') {
32
+ if ((0, utils_1.toString)(node.expression) === 'o') {
33
33
  // Should be like if (node.expression.type.text === "Object") {
34
- const replacer = visitor_as_1.SimpleParser.parseExpression(`u32(changetype<usize>(${utils_1.toString(node.elementExpression)}))`);
34
+ const replacer = visitor_as_1.SimpleParser.parseExpression(`u32(changetype<usize>(${(0, utils_1.toString)(node.elementExpression)}))`);
35
35
  node.elementExpression = replacer;
36
36
  this.sources.push(replacer.range.source);
37
37
  }
@@ -49,7 +49,7 @@ class JSONTransformer extends visitor_as_1.BaseVisitor {
49
49
  this.convertToAnyArray(expr.elementExpressions);
50
50
  }
51
51
  // @ts-ignore
52
- replacement = visitor_as_1.SimpleParser.parseExpression(`unknown.wrap(${utils_1.toString(expr)})`);
52
+ replacement = visitor_as_1.SimpleParser.parseExpression(`unknown.wrap(${(0, utils_1.toString)(expr)})`);
53
53
  node.elementExpressions[i] = replacement;
54
54
  this.sources.push(replacement.range.source);
55
55
  }
@@ -66,14 +66,14 @@ class JSONTransformer extends visitor_as_1.BaseVisitor {
66
66
  this.convertToAnyArray(expr.elementExpressions);
67
67
  }
68
68
  // @ts-ignore
69
- replacement = visitor_as_1.SimpleParser.parseExpression(`unknown.wrap(${utils_1.toString(expr)})`);
69
+ replacement = visitor_as_1.SimpleParser.parseExpression(`unknown.wrap(${(0, utils_1.toString)(expr)})`);
70
70
  exprs[i] = replacement;
71
71
  this.sources.push(replacement.range.source);
72
72
  }
73
73
  }
74
74
  visitFieldDeclaration(node) {
75
75
  super.visitFieldDeclaration(node);
76
- const name = utils_1.toString(node.name);
76
+ const name = (0, utils_1.toString)(node.name);
77
77
  if (!node.type) {
78
78
  throw new Error(`Field ${name} is missing a type declaration`);
79
79
  }
@@ -96,7 +96,7 @@ class JSONTransformer extends visitor_as_1.BaseVisitor {
96
96
  return;
97
97
  }
98
98
  this.currentClass = node;
99
- const name = utils_1.getName(node);
99
+ const name = (0, utils_1.getName)(node);
100
100
  this.encodeStmts.delete(name);
101
101
  this.decodeCode.delete(name);
102
102
  this.visit(node.members);
@@ -146,10 +146,10 @@ function isanyArray(node) {
146
146
  if (node.elementExpressions.length === 0)
147
147
  return false;
148
148
  const firstKind = node.elementExpressions[0]?.kind;
149
- const isBoolean = (utils_1.toString(node.elementExpressions[0]) === 'true' || utils_1.toString(node.elementExpressions[0]) === 'false');
149
+ const isBoolean = ((0, utils_1.toString)(node.elementExpressions[0]) === 'true' || (0, utils_1.toString)(node.elementExpressions[0]) === 'false');
150
150
  for (const chunk of node.elementExpressions) {
151
151
  if (isBoolean) {
152
- if (utils_1.toString(chunk) !== 'true' || utils_1.toString(chunk) !== 'false')
152
+ if ((0, utils_1.toString)(chunk) !== 'true' || (0, utils_1.toString)(chunk) !== 'false')
153
153
  true;
154
154
  }
155
155
  else if (chunk.kind !== firstKind)
@@ -1,28 +0,0 @@
1
- import { unknown } from "./unknown"
2
-
3
- /**
4
- * Provides functionality common to all JavaScript objects.
5
- */
6
- export class Object {
7
- [key: string]: any
8
- // Having it marked as 'any' is for intellisense only
9
- protected __data: Map<string, unknown> = new Map<string, unknown>()
10
- @operator('[]')
11
- private __getKeyOp(key: usize): unknown {
12
- if (this.__data.has(changetype<string>(key))) {
13
- return this.__data.get(changetype<string>(key))
14
- } else {
15
- return unknown.wrap(null)
16
- }
17
- }
18
- @operator('[]=')
19
- private __setKeyOp(key: usize, value: unknown): void {
20
- this.__data.set(changetype<string>(key), value)
21
- }
22
- static keys(o: Object): string[] {
23
- return o.__data.keys()
24
- }
25
- static values(o: Object): unknown[] {
26
- return o.__data.values()
27
- }
28
- }