zkjson 0.1.20 → 0.1.22

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.
Files changed (4) hide show
  1. package/encoder.js +74 -74
  2. package/package.json +1 -1
  3. package/parse.js +161 -162
  4. package/uint.js +255 -203
package/parse.js CHANGED
@@ -1,152 +1,121 @@
1
- const { length, next, arr: _arr, push, pop, last } = require("./uint")
1
+ const {
2
+ toArray,
3
+ concat,
4
+ sum,
5
+ get,
6
+ popArray,
7
+ pushArray,
8
+ length,
9
+ next,
10
+ arr: _arr,
11
+ push,
12
+ pop,
13
+ last,
14
+ bn,
15
+ } = require("./uint")
2
16
  const _null_ = [110, 117, 108, 108]
3
17
  const _true_ = [116, 114, 117, 101]
4
18
  const _false_ = [102, 97, 108, 115, 101]
5
19
 
6
- const eql = (a, b) => {
7
- if (a.length != b.length) return 0
8
- for (let i = 0; i < b.length; i++) {
9
- if (a[i] != b[i]) return 0
10
- }
11
- return 1
12
- }
13
-
14
- const eql2 = (a, b, blen, size = 100) => {
20
+ function eql(a, b, blen, size) {
15
21
  var alen = length(a, size)
16
22
  if (alen != blen) return 0
17
23
  var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
18
- for (let i = 0; i < blen; i++) {
24
+ for (var i = 0; i < blen; i++) {
19
25
  c = next(a, c)
20
26
  if (c[0] != b[i]) return 0
21
27
  }
22
28
  return 1
23
29
  }
24
30
 
25
- const constVal = (_v, type) => {
26
- let val = []
27
- val.push(type)
28
- if (type == 1) {
29
- if (eql(_v, _true_) == 1) {
30
- val.push(1)
31
- } else {
32
- val.push(0)
33
- }
34
- } else if (type == 3) {
35
- val.push(_v.length)
36
- for (let v of _v) {
37
- val.push(v)
38
- }
39
- } else if (type == 2) {
40
- if (_v[0] == 45) {
41
- val.push(0)
42
- } else {
43
- val.push(1)
44
- }
45
- let after = 0
46
- let right = 0
47
- let digits = 0
48
- for (let v of _v) {
49
- if (v == 46) {
50
- after = 1
51
- } else if (v != 45) {
52
- if (after == 1) right += 1
53
- digits = digits * 10 + (v - 48)
54
- }
55
- }
56
- val.push(right)
57
- val.push(digits)
58
- }
59
- return val
60
- }
61
-
62
- const constVal2 = (_v, type, size) => {
31
+ const constVal = (_v, type, size, digit = 9) => {
63
32
  var val = _arr(size)
64
- push(val, size, 9, type)
33
+ val = push(val, size, digit, type)
65
34
  if (type == 1) {
66
- if (eql2(_v, _true_, 4, size) == 1) {
67
- push(val, size, 9, 1)
35
+ if (eql(_v, _true_, 4, size) == 1) {
36
+ val = push(val, size, digit, 1)
68
37
  } else {
69
- push(val, size, 9, 0)
38
+ val = push(val, size, digit, 0)
70
39
  }
71
40
  } else if (type == 3) {
72
- push(length(_v, size))
73
- var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
41
+ val = push(val, size, digit, length(_v, size))
42
+ var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
74
43
  while (c[5] == 0) {
75
44
  c = next(_v, c)
76
- push(val, size, 9, c[0])
45
+ val = push(val, size, digit, c[0])
77
46
  }
78
47
  } else if (type == 2) {
79
- if (_v[0] == 45) {
80
- push(val, size, 9, 0)
48
+ if (get(_v, size, 0) == 45) {
49
+ val = push(val, size, digit, 0)
81
50
  } else {
82
- push(val, size, 9, 1)
51
+ val = push(val, size, digit, 1)
83
52
  }
84
- let after = 0
85
- let right = 0
86
- let digits = 0
87
- var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
53
+ var after = 0n
54
+ var right = 0n
55
+ var digits = 0n
56
+ var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
88
57
  while (c[5] == 0) {
89
58
  c = next(_v, c)
90
59
  if (c[0] == 46) {
91
60
  after = 1
92
61
  } else if (c[0] != 45) {
93
- if (after == 1) right += 1
94
- digits = digits * 10 + (c[0] - 48)
62
+ if (after == 1) right += 1n
63
+ digits = digits * 10n + (c[0] - 48n)
95
64
  }
96
65
  }
97
- push(val, size, 9, right)
98
- push(val, size, 9, digits)
66
+ val = push(val, size, digit, right)
67
+ val = push(val, size, digit, digits)
99
68
  }
100
69
  return val
101
70
  }
102
71
 
103
- const constPath = p => {
104
- let pth = [p.length]
105
- for (let _v of p) {
106
- if (Array.isArray(_v)) {
107
- pth.push(_v.length)
108
- for (let v2 of _v) pth.push(v2)
72
+ const constPath = (p, size, digit = 9) => {
73
+ var pth2 = _arr(size)
74
+ var len = get(p, size, 0)
75
+ pth2 = push(pth2, size, digit, len)
76
+ for (var i = 0n; i < len; i++) {
77
+ var len2 = get(p, size, i + 1n)
78
+ var _sum = sum(p, size, digit, 1, 1n + i)
79
+ var first = get(p, size, 1n + len + _sum)
80
+ if (first == 0) {
81
+ pth2 = push(pth2, size, digit, 0)
109
82
  } else {
110
- pth.push(0)
111
- pth.push(0)
112
- pth.push(_v)
83
+ pth2 = push(pth2, size, digit, len2)
84
+ }
85
+ for (var i2 = 0n; i2 < len2; i2++) {
86
+ var v = get(p, size, 1n + len + _sum + i2)
87
+ pth2 = push(pth2, size, digit, v)
113
88
  }
114
89
  }
115
- return pth
90
+ return pth2
116
91
  }
117
92
 
118
- const constPath2 = (p, size) => {
119
- let pth = [p.length]
120
- var pth2 = _arr(size)
121
- for (let _v of p) {
122
- if (Array.isArray(_v)) {
123
- pth.push(_v.length)
124
- for (let v2 of _v) pth.push(v2)
125
- } else {
126
- pth.push(0)
127
- pth.push(0)
128
- pth.push(_v)
129
- }
93
+ const isNumber = (val, size, digit) => {
94
+ var len = length(val, size)
95
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
96
+ while (c[5] == 0) {
97
+ c = next(val, c)
98
+ if (c[0] == 47 || c[0] < 45 || c[0] > 57) return 0
130
99
  }
131
- return pth2
100
+
101
+ return 1
132
102
  }
133
103
 
134
- const parse = (str, size = 100) => {
135
- var val = []
136
- var val2 = _arr(size)
104
+ const parse = (str, size = 100, digit = 9) => {
105
+ str = bn(str)
106
+ var val = _arr(size)
137
107
  var inVal = 0
138
108
  var isNum = 0
139
109
  var esc = 0
140
110
  var nextKey = 0
141
111
  var arr = 0
142
112
  var obj = 0
143
- var path = []
144
- var path2 = _arr(size)
113
+ var path = _arr(size)
145
114
  var ao = _arr(5)
146
115
  var ind = _arr(5)
147
116
  var err = 0
148
- var json = []
149
- let c = [0, size, 0, 0, 0, 0, 0, 0, 0]
117
+ var json = _arr(size)
118
+ var c = bn([0, size, 0, 0, 0, 0, 0, 0, 0])
150
119
  while (c[5] == 0) {
151
120
  c = next(str, c)
152
121
  var s = c[0]
@@ -155,84 +124,101 @@ const parse = (str, size = 100) => {
155
124
  esc = 1
156
125
  } else if (s == 34) {
157
126
  if (esc == 1) {
158
- val.push(s)
159
- push(val2, size, 9, s)
127
+ val = push(val, size, digit, s)
160
128
  } else {
161
129
  inVal = 0
162
130
  if (nextKey == 1 && last(ao, 5) == 1) {
163
- path.push(val) // val push
131
+ path = pushArray(path, size, digit, val, size)
164
132
  } else {
165
133
  if (last(ao, 5) == 2) {
166
134
  var _ind = last(ind, 5)
167
- path.push(_ind)
135
+ var __ind = _arr(size)
136
+ __ind = push(__ind, size, digit, 0)
137
+ __ind = push(__ind, size, digit, _ind)
138
+ path = pushArray(path, size, digit, __ind, size)
168
139
  ind = pop(ind, 5)
169
- push(ind, 5, 9, _ind + 1)
140
+ ind = push(ind, 5, digit, _ind + 1)
170
141
  }
171
- // console.log("val: ", `< ${path.join(".")} >`, val)
172
- //console.log(constVal2(val2, 3, size))
173
- json.push([constPath(path), constVal(val, 3)])
174
- path.pop()
142
+ json = concat(
143
+ json,
144
+ concat(
145
+ constPath(path, size, digit),
146
+ constVal(val, 3, size, digit),
147
+ size,
148
+ digit,
149
+ ),
150
+ size,
151
+ digit,
152
+ )
153
+ path = popArray(path, size, digit)
175
154
  }
176
155
 
177
- val = []
178
- val2 = _arr(size)
156
+ val = _arr(size)
179
157
  nextKey = 0
180
158
  }
181
159
  esc = 0
182
160
  } else {
183
- val.push(s)
184
- push(val2, size, 9, s)
161
+ val = push(val, size, digit, s)
185
162
  esc = 0
186
163
  }
187
164
  } else if (isNum == 1) {
188
165
  if (s == 44 || s == 32 || s == 125 || s == 93) {
189
166
  if (last(ao, 5) == 2) {
190
167
  var _ind = last(ind, 5)
191
- path.push(_ind)
168
+ var __ind = _arr(size)
169
+ __ind = push(__ind, size, digit, 0)
170
+ __ind = push(__ind, size, digit, _ind)
171
+ path = pushArray(path, size, digit, __ind, size)
192
172
  ind = pop(ind, 5)
193
- push(ind, 5, 9, _ind + 1)
173
+ ind = push(ind, 5, digit, _ind + 1n)
194
174
  }
195
175
  if (
196
- eql2(val2, _true_, 4, size) == 0 &&
197
- eql2(val2, _false_, 5, size) == 0 &&
198
- eql2(val2, _null_, 4, size) == 0 &&
199
- Number.isNaN(+val)
176
+ eql(val, _true_, 4, size) == 0 &&
177
+ eql(val, _false_, 5, size) == 0 &&
178
+ eql(val, _null_, 4, size) == 0 &&
179
+ isNumber(val, size, digit) == 0
200
180
  ) {
201
181
  err = 1
202
182
  }
203
- // console.log("val: ", `< ${path.join(".")} >`, val)
204
183
  var type = 2
205
- if (eql2(val2, _null_, 4, size) == 1) {
184
+ if (eql(val, _null_, 4, size) == 1) {
206
185
  type = 0
207
186
  } else if (
208
- eql2(val2, _true_, 4, size) == 1 ||
209
- eql2(val2, _false_, 5, size)
187
+ eql(val, _true_, 4, size) == 1 ||
188
+ eql(val, _false_, 5, size) == 1
210
189
  ) {
211
190
  type = 1
212
191
  }
213
- //console.log(constVal2(val2, type, size))
214
- json.push([constPath(path), constVal(val, type)])
215
- path.pop()
192
+ json = concat(
193
+ json,
194
+ concat(
195
+ constPath(path, size, digit),
196
+ constVal(val, type, size, digit),
197
+ size,
198
+ digit,
199
+ ),
200
+ size,
201
+ digit,
202
+ )
203
+ path = popArray(path, size, digit)
216
204
  if (s == 93) {
217
205
  if (last(ao, 5) != 2) err = 1
218
- ao.pop()
219
- path.pop()
206
+ ao = pop(ao, 5)
207
+ path = popArray(path, size, digit)
220
208
  arr--
221
- pop(ind, 5)
209
+ ind = pop(ind, 5)
222
210
  }
223
211
  if (s == 125) {
224
212
  if (last(ao, 5) != 1) err = 1
225
- pop(ao, 5)
226
- path.pop()
213
+ ao = pop(ao, 5)
214
+ path = popArray(path, size, digit)
227
215
  obj--
228
216
  }
229
217
  isNum = 0
230
- val = []
231
- val2 = _arr(size)
218
+ val = _arr(size)
232
219
  if (s == 44) nextKey = 1
233
220
  } else {
234
- val.push(s)
235
- push(val2, size, 9, s)
221
+ val = push(val, size, digit, s)
236
222
  }
237
223
  } else if (s == 34) {
238
224
  inVal = 1
@@ -246,69 +232,82 @@ const parse = (str, size = 100) => {
246
232
  s != 125
247
233
  ) {
248
234
  isNum = 1
249
- val.push(s)
250
- push(val2, size, 9, s)
235
+ val = push(val, size, digit, s)
251
236
  } else {
252
237
  if (s != 32) {
253
238
  if (s == 123 || s == 44) nextKey = 1
254
239
  if (s == 123) {
255
240
  if (last(ao, 5) == 2) {
256
241
  var _ind = last(ind, 5)
257
- path.push(_ind)
242
+ var __ind = _arr(size)
243
+ __ind = push(__ind, size, digit, 0)
244
+ __ind = push(__ind, size, digit, _ind)
245
+ path = pushArray(path, size, digit, __ind, size)
258
246
  ind = pop(ind, 5)
259
- push(ind, 5, 9, _ind + 1)
247
+ ind = push(ind, 5, digit, _ind + 1)
260
248
  }
261
- push(ao, 5, 9, 1)
249
+ ao = push(ao, 5, digit, 1)
262
250
  obj++
263
251
  }
264
252
  if (s == 125) {
265
253
  if (last(ao, 5) != 1) err = 1
266
- pop(ao, 5)
267
- path.pop()
254
+ ao = pop(ao, 5)
255
+ path = popArray(path, size, digit)
268
256
  obj--
269
257
  }
270
258
  if (s == 91) {
271
259
  if (last(ao, 5) == 2) {
272
260
  var _ind = last(ind, 5)
273
- path.push(_ind)
261
+ var __ind = _arr(size)
262
+ __ind = push(__ind, size, digit, 0)
263
+ __ind = push(__ind, size, digit, _ind)
264
+ path = pushArray(path, size, digit, __ind, size)
274
265
  ind = pop(ind, 5)
275
- push(ind, 5, 9, _ind + 1)
266
+ ind = push(ind, 5, digit, _ind + 1)
276
267
  }
277
- push(ind, 5, 9, 0)
278
- push(ao, 5, 9, 2)
268
+ ind = push(ind, 5, digit, 0)
269
+ ao = push(ao, 5, digit, 2)
279
270
  arr++
280
271
  }
281
272
  if (s == 93) {
282
273
  if (last(ao, 5) != 2) err = 1
283
- pop(ao, 5)
284
- pop(ind, 5)
285
- path.pop()
274
+ ao = pop(ao, 5)
275
+ ind = pop(ind, 5)
276
+ path = popArray(path, size, digit)
286
277
  arr--
287
278
  }
288
279
  }
289
280
  }
290
281
  }
291
-
292
- if (length(val2, size)) {
293
- isNum = 0
294
- // maybe need type this is only for bare values
295
- //console.log(constVal2(val2, type, size))
296
- json.push([constPath(path), constVal(val)])
297
- //for (var v of path) json[json.length - 1][0].push(v)
282
+ if (length(val, size) != 0) {
283
+ var type = 4
284
+ if (eql(val, _null_, 4, size) == 1) {
285
+ type = 0
286
+ isNum = 0
287
+ } else if (eql(val, _true_, 4, size) == 1 || eql(val, _false_, 5, size)) {
288
+ type = 1
289
+ isNum = 0
290
+ } else if (isNumber(val, size, digit) == 1) {
291
+ type = 2
292
+ isNum = 0
293
+ }
294
+ json = concat(
295
+ json,
296
+ concat(
297
+ constPath(path, size, digit),
298
+ constVal(val, type, size, digit),
299
+ size,
300
+ digit,
301
+ ),
302
+ size,
303
+ digit,
304
+ )
298
305
  }
299
306
  if (ao.length > 0) err = 1
300
307
  if (ind.length > 0) err = 1
301
308
  if (inVal) err = 1
302
309
  if (isNum) err = 1
303
- var j = _arr(size)
304
- for (var v of json) {
305
- for (var v2 of v) {
306
- for (var v3 of v2) {
307
- j = push(j, size, 9, v3)
308
- }
309
- }
310
- }
311
- return j
310
+ return json
312
311
  }
313
312
 
314
313
  module.exports = { parse }