zkjson 0.1.17 → 0.1.19

Sign up to get free protection for your applications and to get access to all the features.
package/collection.js CHANGED
@@ -1,5 +1,5 @@
1
1
  const newMemEmptyTrie = require("./circomlibjs").newMemEmptyTrie
2
- const { pad, str2val, val2str, id2str, encode, str2id } = require("./encoder")
2
+ const { pad, toSignal, id2str, encode, toIndex } = require("./encoder")
3
3
  const Doc = require("./doc")
4
4
 
5
5
  class Collection {
@@ -28,7 +28,7 @@ class Collection {
28
28
  val: doc_inputs.val,
29
29
  root: this.tree.F.toObject(this.tree.root).toString(),
30
30
  siblings,
31
- key: str2id(id),
31
+ key: toIndex(id),
32
32
  }
33
33
  }
34
34
  async init() {
@@ -36,24 +36,24 @@ class Collection {
36
36
  }
37
37
  async insert(_key, _val) {
38
38
  const doc = encode(_val)
39
- const id = str2id(_key)
40
- const val = pad(val2str(doc), this.size_json)
39
+ const id = toIndex(_key)
40
+ const val = pad(toSignal(doc), this.size_json)
41
41
  return await this.tree.insert(id, val)
42
42
  }
43
43
  async update(_key, _val) {
44
44
  const doc = encode(_val)
45
- const id = str2id(_key)
46
- const val = pad(val2str(doc), this.size_json)
45
+ const id = toIndex(_key)
46
+ const val = pad(toSignal(doc), this.size_json)
47
47
  return await this.tree.update(id, val)
48
48
  }
49
49
 
50
50
  async delete(_key) {
51
- const id = str2id(_key)
51
+ const id = toIndex(_key)
52
52
  return await this.tree.delete(id)
53
53
  }
54
54
 
55
55
  async get(_key) {
56
- const id = str2id(_key)
56
+ const id = toIndex(_key)
57
57
  return await this.tree.find(id)
58
58
  }
59
59
  }
package/encoder.js CHANGED
@@ -395,7 +395,7 @@ function decode(arr) {
395
395
  return json
396
396
  }
397
397
 
398
- const str2id = str => {
398
+ const toIndex = str => {
399
399
  return (
400
400
  "1" +
401
401
  str
@@ -405,7 +405,7 @@ const str2id = str => {
405
405
  )
406
406
  }
407
407
 
408
- const id2str = id => {
408
+ const fromIndex = id => {
409
409
  let _id = id.toString().split("")
410
410
  _id.shift()
411
411
  return splitEvery(2, _id)
@@ -415,7 +415,7 @@ const id2str = id => {
415
415
  .join("")
416
416
  }
417
417
 
418
- function val2str(arr) {
418
+ function toSignal(arr) {
419
419
  const _arr = flatten(
420
420
  arr.map(n => {
421
421
  let str = splitEvery(8, n.toString().split(""))
@@ -428,30 +428,118 @@ function val2str(arr) {
428
428
  return str
429
429
  })
430
430
  )
431
- let arrs = []
432
- let len = 0
433
- let str = ""
431
+ let _arr2 = []
432
+ let one = 0
433
+ let i = 0
434
+ let start = null
434
435
  for (let v of _arr) {
435
- if (len + v.length > 76) {
436
- len = 0
437
- arrs.push(str)
438
- str = ""
436
+ _arr2.push(v)
437
+ if (v.length - 1 === 1) {
438
+ if (start === null) start = i
439
+ one += v.length - 1
440
+ if (one === 9) {
441
+ _arr2[start] = `0${one}${_arr2[start][1]}`
442
+ for (let i2 = start + 1; i2 <= i; i2++) _arr2[i2] = `${_arr2[i2][1]}`
443
+ one = 0
444
+ start = null
445
+ }
446
+ } else {
447
+ if (one > 2) {
448
+ _arr2[start] = `0${one}${_arr2[start][1]}`
449
+ for (let i2 = start + 1; i2 < i; i2++) _arr2[i2] = `${_arr2[i2][1]}`
450
+ }
451
+ one = 0
452
+ start = null
453
+ }
454
+ i++
455
+ }
456
+ if (one > 2) {
457
+ _arr2[start] = `0${one}${_arr2[start][1]}`
458
+ for (let i2 = start + 1; i2 <= i - 1; i2++) _arr2[i2] = `${_arr2[i2][1]}`
459
+ }
460
+ let _arr3 = []
461
+ let chain = null
462
+ let cur = 0
463
+ let num = ""
464
+ for (let v of _arr2) {
465
+ if (chain === null && +v[0] === 0) {
466
+ chain = +v[1]
467
+ cur = 1
468
+ num = v
469
+ } else if (chain !== null) {
470
+ num += v
471
+ cur++
472
+ if (chain == cur) {
473
+ _arr3.push(num)
474
+ chain = null
475
+ num = ""
476
+ cur = 0
477
+ }
478
+ } else {
479
+ _arr3.push(v)
439
480
  }
440
- len += v.length
441
- str += v
442
481
  }
443
- if (str !== "") arrs.push(str)
444
- return arrs
482
+ if (chain !== null) _arr3.push(num)
483
+ let arrs2 = []
484
+ let len2 = 0
485
+ let str2 = ""
486
+ for (let v of _arr3) {
487
+ if (len2 + v.length > 75) {
488
+ arrs2.push("1" + str2)
489
+ if (+v[0] === 0) {
490
+ let len3 = 75 - len2
491
+ if (len3 == 2 || len3 == 3) {
492
+ arrs2[arrs2.length - 1] += `1${v[2]}`
493
+ let new_len = +v[1] - 1
494
+ if (new_len === 2) {
495
+ v = `1${v[3]}1${v[4]}`
496
+ } else {
497
+ v = `0${new_len}${v.slice(3)}`
498
+ }
499
+ } else if (len3 > 3) {
500
+ let new_len = +v[1] - 2
501
+ let old_len = 2
502
+ if (len3 === 4) {
503
+ arrs2[arrs2.length - 1] += `1${v[2]}1${v[3]}`
504
+ } else {
505
+ old_len = len3 - 2
506
+ new_len = +v[1] - old_len
507
+ arrs2[arrs2.length - 1] += `0${old_len}${v.slice(2, 2 + old_len)}`
508
+ }
509
+ if (new_len === 1) {
510
+ v = `1${v[old_len + 2]}`
511
+ } else if (new_len === 2) {
512
+ v = `1${v[old_len + 2]}1${v[old_len + 3]}`
513
+ } else {
514
+ v = `0${new_len}${v.slice(old_len + 2)}`
515
+ }
516
+ }
517
+ }
518
+ len2 = 0
519
+ str2 = ""
520
+ }
521
+ len2 += v.length
522
+ str2 += v
523
+ }
524
+ if (str2 !== "") arrs2.push("1" + str2)
525
+ return arrs2
445
526
  }
446
527
 
447
- function str2val(arr) {
528
+ function fromSignal(arr) {
448
529
  let _arr = []
449
530
  let prev = ""
450
- for (const s of arr) {
531
+ for (let s of arr) {
532
+ s = s.slice(1)
451
533
  let str = s.split("")
452
534
  while (str.length > 0) {
453
535
  const len = +str.shift()
454
- if (len === 9) {
536
+ if (len === 0) {
537
+ const len2 = +str.shift()
538
+ for (let i2 = 0; i2 < len2; i2++) {
539
+ _arr.push(+str[i2])
540
+ }
541
+ str = str.slice(len2)
542
+ } else if (len === 9) {
455
543
  prev += str.slice(0, 8).join("")
456
544
  str = str.slice(8)
457
545
  } else {
@@ -465,13 +553,9 @@ function str2val(arr) {
465
553
  return _arr
466
554
  }
467
555
 
468
- const toSignal = val2str
469
- const fromSignal = str2val
470
- const toIndex = str2id
471
- const fromIndex = id2str
472
-
473
556
  const path = p => toSignal(encodePath(p))
474
557
  const val = v => toSignal(encodeVal(v))
558
+ const query = v => toSignal(encodeQuery(v))
475
559
 
476
560
  function encodeQuery(v) {
477
561
  if (!Array.isArray(v)) throw Error("query must be an array")
@@ -483,7 +567,7 @@ function encodeQuery(v) {
483
567
  function decodeQuery(v) {
484
568
  const op = opMap[v[0]]
485
569
  if (isNil(op)) throw Error("op doens't exist")
486
- return [op, ...decodeVal(v.slice(1))]
570
+ return [op, decodeVal(v.slice(1))]
487
571
  }
488
572
 
489
573
  module.exports = {
@@ -496,16 +580,13 @@ module.exports = {
496
580
  pad,
497
581
  _encode,
498
582
  flattenPath,
499
- str2id,
500
- val2str,
501
- str2val,
502
- id2str,
503
583
  toSignal,
504
584
  fromSignal,
505
585
  toIndex,
506
586
  fromIndex,
507
587
  path,
508
588
  val,
589
+ query,
509
590
  encodeQuery,
510
591
  decodeQuery,
511
592
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zkjson",
3
- "version": "0.1.17",
3
+ "version": "0.1.19",
4
4
  "description": "Zero Knowledge Provable JSON",
5
5
  "main": "index.js",
6
6
  "license": "MIT",
package/parse.js ADDED
@@ -0,0 +1,314 @@
1
+ const { length, next, arr: _arr, push, pop, last } = require("./uint")
2
+ const _null_ = [110, 117, 108, 108]
3
+ const _true_ = [116, 114, 117, 101]
4
+ const _false_ = [102, 97, 108, 115, 101]
5
+
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) => {
15
+ var alen = length(a, size)
16
+ if (alen != blen) return 0
17
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
18
+ for (let i = 0; i < blen; i++) {
19
+ c = next(a, c)
20
+ if (c[0] != b[i]) return 0
21
+ }
22
+ return 1
23
+ }
24
+
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) => {
63
+ var val = _arr(size)
64
+ push(val, size, 9, type)
65
+ if (type == 1) {
66
+ if (eql2(_v, _true_, 4, size) == 1) {
67
+ push(val, size, 9, 1)
68
+ } else {
69
+ push(val, size, 9, 0)
70
+ }
71
+ } else if (type == 3) {
72
+ push(length(_v, size))
73
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
74
+ while (c[5] == 0) {
75
+ c = next(_v, c)
76
+ push(val, size, 9, c[0])
77
+ }
78
+ } else if (type == 2) {
79
+ if (_v[0] == 45) {
80
+ push(val, size, 9, 0)
81
+ } else {
82
+ push(val, size, 9, 1)
83
+ }
84
+ let after = 0
85
+ let right = 0
86
+ let digits = 0
87
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
88
+ while (c[5] == 0) {
89
+ c = next(_v, c)
90
+ if (c[0] == 46) {
91
+ after = 1
92
+ } else if (c[0] != 45) {
93
+ if (after == 1) right += 1
94
+ digits = digits * 10 + (c[0] - 48)
95
+ }
96
+ }
97
+ push(val, size, 9, right)
98
+ push(val, size, 9, digits)
99
+ }
100
+ return val
101
+ }
102
+
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)
109
+ } else {
110
+ pth.push(0)
111
+ pth.push(0)
112
+ pth.push(_v)
113
+ }
114
+ }
115
+ return pth
116
+ }
117
+
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
+ }
130
+ }
131
+ return pth2
132
+ }
133
+
134
+ const parse = (str, size = 100) => {
135
+ var val = []
136
+ var val2 = _arr(size)
137
+ var inVal = 0
138
+ var isNum = 0
139
+ var esc = 0
140
+ var nextKey = 0
141
+ var arr = 0
142
+ var obj = 0
143
+ var path = []
144
+ var path2 = _arr(size)
145
+ var ao = _arr(5)
146
+ var ind = _arr(5)
147
+ var err = 0
148
+ var json = []
149
+ let c = [0, size, 0, 0, 0, 0, 0, 0, 0]
150
+ while (c[5] == 0) {
151
+ c = next(str, c)
152
+ var s = c[0]
153
+ if (inVal == 1) {
154
+ if (s == 92) {
155
+ esc = 1
156
+ } else if (s == 34) {
157
+ if (esc == 1) {
158
+ val.push(s)
159
+ push(val2, size, 9, s)
160
+ } else {
161
+ inVal = 0
162
+ if (nextKey == 1 && last(ao, 5) == 1) {
163
+ path.push(val) // val push
164
+ } else {
165
+ if (last(ao, 5) == 2) {
166
+ var _ind = last(ind, 5)
167
+ path.push(_ind)
168
+ ind = pop(ind, 5)
169
+ push(ind, 5, 9, _ind + 1)
170
+ }
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()
175
+ }
176
+
177
+ val = []
178
+ val2 = _arr(size)
179
+ nextKey = 0
180
+ }
181
+ esc = 0
182
+ } else {
183
+ val.push(s)
184
+ push(val2, size, 9, s)
185
+ esc = 0
186
+ }
187
+ } else if (isNum == 1) {
188
+ if (s == 44 || s == 32 || s == 125 || s == 93) {
189
+ if (last(ao, 5) == 2) {
190
+ var _ind = last(ind, 5)
191
+ path.push(_ind)
192
+ ind = pop(ind, 5)
193
+ push(ind, 5, 9, _ind + 1)
194
+ }
195
+ 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)
200
+ ) {
201
+ err = 1
202
+ }
203
+ // console.log("val: ", `< ${path.join(".")} >`, val)
204
+ var type = 2
205
+ if (eql2(val2, _null_, 4, size) == 1) {
206
+ type = 0
207
+ } else if (
208
+ eql2(val2, _true_, 4, size) == 1 ||
209
+ eql2(val2, _false_, 5, size)
210
+ ) {
211
+ type = 1
212
+ }
213
+ //console.log(constVal2(val2, type, size))
214
+ json.push([constPath(path), constVal(val, type)])
215
+ path.pop()
216
+ if (s == 93) {
217
+ if (last(ao, 5) != 2) err = 1
218
+ ao.pop()
219
+ path.pop()
220
+ arr--
221
+ pop(ind, 5)
222
+ }
223
+ if (s == 125) {
224
+ if (last(ao, 5) != 1) err = 1
225
+ pop(ao, 5)
226
+ path.pop()
227
+ obj--
228
+ }
229
+ isNum = 0
230
+ val = []
231
+ val2 = _arr(size)
232
+ if (s == 44) nextKey = 1
233
+ } else {
234
+ val.push(s)
235
+ push(val2, size, 9, s)
236
+ }
237
+ } else if (s == 34) {
238
+ inVal = 1
239
+ } else if (
240
+ s != 123 &&
241
+ s != 58 &&
242
+ s != 32 &&
243
+ s != 44 &&
244
+ s != 91 &&
245
+ s != 93 &&
246
+ s != 125
247
+ ) {
248
+ isNum = 1
249
+ val.push(s)
250
+ push(val2, size, 9, s)
251
+ } else {
252
+ if (s != 32) {
253
+ if (s == 123 || s == 44) nextKey = 1
254
+ if (s == 123) {
255
+ if (last(ao, 5) == 2) {
256
+ var _ind = last(ind, 5)
257
+ path.push(_ind)
258
+ ind = pop(ind, 5)
259
+ push(ind, 5, 9, _ind + 1)
260
+ }
261
+ push(ao, 5, 9, 1)
262
+ obj++
263
+ }
264
+ if (s == 125) {
265
+ if (last(ao, 5) != 1) err = 1
266
+ pop(ao, 5)
267
+ path.pop()
268
+ obj--
269
+ }
270
+ if (s == 91) {
271
+ if (last(ao, 5) == 2) {
272
+ var _ind = last(ind, 5)
273
+ path.push(_ind)
274
+ ind = pop(ind, 5)
275
+ push(ind, 5, 9, _ind + 1)
276
+ }
277
+ push(ind, 5, 9, 0)
278
+ push(ao, 5, 9, 2)
279
+ arr++
280
+ }
281
+ if (s == 93) {
282
+ if (last(ao, 5) != 2) err = 1
283
+ pop(ao, 5)
284
+ pop(ind, 5)
285
+ path.pop()
286
+ arr--
287
+ }
288
+ }
289
+ }
290
+ }
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)
298
+ }
299
+ if (ao.length > 0) err = 1
300
+ if (ind.length > 0) err = 1
301
+ if (inVal) err = 1
302
+ 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
312
+ }
313
+
314
+ module.exports = { parse }
package/uint.js ADDED
@@ -0,0 +1,425 @@
1
+ function digits(x) {
2
+ if (x == 0) return 1
3
+ var p = 0
4
+ while (x > 0) {
5
+ x = (x / 10) >> 0 // x = x \ 10
6
+ p++
7
+ }
8
+ return p
9
+ }
10
+
11
+ const arr = row => {
12
+ var _arr = []
13
+ for (var i = 0; i < row; i++) {
14
+ _arr.push(0)
15
+ }
16
+ return _arr
17
+ }
18
+
19
+ const toArray = (json, size) => {
20
+ var j = []
21
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
22
+ while (c[5] == 0) {
23
+ c = next(json, c)
24
+ j.push(c[0])
25
+ }
26
+ return j
27
+ }
28
+
29
+ const length = (json, size) => {
30
+ var _len = 0
31
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
32
+ var nonzero = 0
33
+ while (c[5] == 0) {
34
+ c = next(json, c)
35
+ if (c[0] > 0) nonzero = 1
36
+ _len++
37
+ }
38
+ if (nonzero) {
39
+ return _len
40
+ } else {
41
+ return 0
42
+ }
43
+ }
44
+
45
+ const slice = (json, size, digit, start, end) =>{
46
+ var _arr = arr(size)
47
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
48
+ var i = 0
49
+ while (c[5] == 0) {
50
+ c = next(json, c)
51
+ if (i >= start && i < end) push(_arr, size, digit, c[0])
52
+ i++
53
+ }
54
+ return _arr
55
+ }
56
+
57
+ const get = (json,size,index) =>{
58
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
59
+ var i = 0
60
+ while (c[5] == 0) {
61
+ c = next(json, c)
62
+ if(i == index) return c[0]
63
+ i++
64
+ }
65
+ throw Error()
66
+ }
67
+
68
+ const insert = (json, size, digit, at, val) =>{
69
+ var _arr = arr(size)
70
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
71
+ var i = 0
72
+ if(at == 0) {
73
+ _arr = push(_arr, size, digit, val)
74
+ }
75
+ while (c[5] == 0) {
76
+ c = next(json, c)
77
+ push(_arr, size, digit, c[0])
78
+ i++
79
+ if(at == i) push(_arr, size, digit, val)
80
+ }
81
+ return _arr
82
+ }
83
+
84
+ const replace = (json, size, digit, at, val) =>{
85
+ var _arr = arr(size)
86
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
87
+ var i = 0
88
+ while (c[5] == 0) {
89
+ c = next(json, c)
90
+ if(at == i) {
91
+ _arr = push(_arr, size, digit, val)
92
+ }else{
93
+ push(_arr, size, digit, c[0])
94
+ }
95
+ i++
96
+ }
97
+ return _arr
98
+ }
99
+
100
+ const last = (json, size) => {
101
+ var val = 0
102
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
103
+ while (c[5] == 0) {
104
+ c = next(json, c)
105
+ val = c[0]
106
+ }
107
+ return val
108
+ }
109
+ const lastRow = (json, size) => {
110
+ var v = 0
111
+ for (var j = 0; j < size; j++) {
112
+ if (json[j] != 0) v = j
113
+ }
114
+ return v
115
+ }
116
+
117
+ const shift = (json, size, digit) => {
118
+ var _arr = arr(size)
119
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
120
+ var i = 0
121
+ while (c[5] == 0) {
122
+ c = next(json, c)
123
+ if (i > 0) push(_arr, size, digit, c[0])
124
+ i++
125
+ }
126
+ return _arr
127
+ }
128
+
129
+ const unshift = (json, size, digit, num) => {
130
+ var _arr = arr(size)
131
+ push(_arr, size, digit, num)
132
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
133
+ var i = 0
134
+ if (json[0] !== 0) {
135
+ while (c[5] == 0) {
136
+ c = next(json, c)
137
+ push(_arr, size, digit, c[0])
138
+ i++
139
+ }
140
+ }
141
+ return _arr
142
+ }
143
+
144
+ const pop = (json, size, overflow = 3) => {
145
+ var l = 0
146
+ var ll = 0
147
+ var lnum = 0
148
+ var series = 0
149
+ var snum = 0
150
+ var link = 0
151
+ var _l = 0
152
+ var _d = 0
153
+ for (var l2 = 0; l2 < size; l2++) {
154
+ if (json[l2] != 0) {
155
+ _l = l2
156
+ var x = json[l2]
157
+ var d = digits(x)
158
+ var p = d
159
+ var on = 0
160
+ var i = 0
161
+ while (x > 0) {
162
+ var n = (x / 10 ** (p - 1)) >> 0 // var n = x \ 10 ** (p - 1)
163
+ x -= 10 ** (p - 1) * n
164
+ p--
165
+ i++
166
+ if (on == 0) {
167
+ on = 1
168
+ } else {
169
+ var len = n
170
+ if (link == 0) {
171
+ ll = i - 1
172
+ l = l2
173
+ _d = d
174
+ }
175
+ lnum = len
176
+ snum = 0
177
+ if (len == 0) {
178
+ var n = (x / 10 ** (p - 1)) >> 0 // var n = x \ 10 ** (p - 1)
179
+ var len2 = (x / 10 ** (p - 1)) >> 0 // var n = x \ 10 ** (p - 1)
180
+ series = len2
181
+ x -= 10 ** (p - 1) * n
182
+ p--
183
+ i++
184
+ for (var i2 = 0; i2 < len2; i2++) {
185
+ var n = (x / 10 ** (p - 1)) >> 0 // var n = x \ 10 ** (p - 1)
186
+ snum = snum * 10 + n
187
+ x -= 10 ** (p - 1) * n
188
+ p--
189
+ i++
190
+ }
191
+ } else {
192
+ var _len = len
193
+ if (len == overflow + 1) {
194
+ link = 2
195
+ _len = overflow
196
+ } else if (link > 0) {
197
+ link--
198
+ }
199
+ series = 0
200
+ for (var i2 = 0; i2 < _len; i2++) {
201
+ var n = (x / 10 ** (p - 1)) >> 0 // var n = x \ 10 ** (p - 1)
202
+ x -= 10 ** (p - 1) * n
203
+ p--
204
+ i++
205
+ }
206
+ }
207
+ }
208
+ }
209
+ }
210
+ }
211
+
212
+ if (link == 1) {
213
+ for (var i = l + 1; i <= _l; i++) {
214
+ json[i] = 0
215
+ }
216
+ if (ll < 2) {
217
+ json[l] = 0
218
+ } else {
219
+ json[l] = (json[l] / 10 ** (_d - ll)) >> 0
220
+ }
221
+ } else if (series != 0) {
222
+ if (series == 3) {
223
+ json[l] = (json[l] / 10 ** (d - ll)) >> 0
224
+ json[l] = json[l] * 10 + 1
225
+ var n = (snum / 10 ** 2) >> 0
226
+ json[l] = json[l] * 10 + n
227
+ json[l] = json[l] * 10 + 1
228
+ var n2 = ((snum / 10) >> 0) - n * 10
229
+ json[l] = json[l] * 10 + n2
230
+ } else {
231
+ json[l] = (json[l] / 10 ** (d - ll - 1)) >> 0
232
+ json[l] = json[l] * 10 + (series - 1)
233
+ snum = (snum / 10) >> 0
234
+ json[l] = json[l] * 10 ** (series - 1) + snum
235
+ }
236
+ } else if (ll < 2) {
237
+ json[l] = 0
238
+ } else {
239
+ json[l] = (json[l] / 10 ** (d - ll)) >> 0
240
+ }
241
+ return json
242
+ }
243
+
244
+ const push = (json, size, digit, c, overflow = 3) => {
245
+ var i4 = 0
246
+ var init = 0
247
+ while (c > 0 || init == 0) {
248
+ init = 1
249
+ var len = digits(c)
250
+ var _len = len
251
+ var _len2 = len
252
+ var _c = c
253
+ if (overflow < len) {
254
+ _len = overflow
255
+ _len2 = overflow + 1
256
+ _c = (c / 10 ** (len - overflow)) >> 0 // _c = c \ 10 ** (len - overflow)
257
+ c -= _c * 10 ** (len - overflow)
258
+ } else {
259
+ c = 0
260
+ }
261
+ var appended = 0
262
+ for (var i = i4; i < size; i++) {
263
+ var d = digits(json[i])
264
+ var one = 0
265
+ var ones = 0
266
+ var nums = 0
267
+ if (_len == 1 && digit > d) {
268
+ var x = json[i] - 10 ** (d - 1)
269
+ var i2 = 1
270
+ while (i2 < d) {
271
+ var len = (x / 10 ** (d - i2 - 1)) >> 0
272
+ x = x - len * 10 ** (d - i2 - 1)
273
+ if (len == 1) {
274
+ if (ones == 0) one = i2
275
+ ones++
276
+ } else if (len !== 0) {
277
+ ones = 0
278
+ nums = 0
279
+ } else {
280
+ one = i2
281
+ }
282
+ i2++
283
+ if (len == 0) {
284
+ var len3 = (x / 10 ** (d - i2 - 1)) >> 0
285
+ x = x - len3 * 10 ** (d - i2 - 1)
286
+ i2++
287
+ ones = len3
288
+ for (var i3 = 0; i3 < len3; i3++) {
289
+ var len2 = (x / 10 ** (d - i2 - 1)) >> 0
290
+ x = x - len2 * 10 ** (d - i2 - 1)
291
+ nums = nums * 10 + len2
292
+ i2++
293
+ }
294
+ } else {
295
+ for (var i3 = 0; i3 < len; i3++) {
296
+ var len2 = (x / 10 ** (d - i2 - 1)) >> 0
297
+ x = x - len2 * 10 ** (d - i2 - 1)
298
+ if (len == 1) nums = nums * 10 + len2
299
+ i2++
300
+ }
301
+ }
302
+ }
303
+ if (ones == 2) nums = nums * 10 + _c
304
+ }
305
+ if (ones > 2) {
306
+ var x = (json[i] / 10 ** (d - one - 1)) >> 0
307
+ x = x * 10 + ones + 1
308
+ x = x * 10 ** ones + nums
309
+ x = x * 10 + _c
310
+ json[i] = x
311
+ i4 = i
312
+ appended = 1
313
+ } else if (ones == 2) {
314
+ var x = (json[i] / 10 ** (d - one)) >> 0
315
+ x = x * 10 + 0
316
+ x = x * 10 + ones + 1
317
+ x = x * 10 ** (ones + 1) + nums
318
+ json[i] = x
319
+ i4 = i
320
+ appended = 1
321
+ } else if (digit > d + _len && appended == 0) {
322
+ if (json[i] == 0) json[i] = 1
323
+ json[i] = json[i] * 10 + _len2
324
+ json[i] = json[i] * 10 ** _len + _c
325
+ i4 = i
326
+ appended = 1
327
+ }
328
+ }
329
+ }
330
+ return json
331
+ }
332
+
333
+ const next = (json, c) => {
334
+ if (c[5] == 1) {
335
+ return [0, c[1], 0, 0, 0, 1, c[6], c[7], c[8]]
336
+ }
337
+ var prev = 0
338
+ for (var j = c[2]; j < c[1]; j++) {
339
+ var d = digits(json[j])
340
+ if (json[j] > 0) {
341
+ var p = c[4] == 0 ? digits(json[j]) : c[4]
342
+ var x = c[4] == 0 ? json[j] : c[3]
343
+ var cur = 0
344
+ var num = 0
345
+ var on = c[4] == 0 ? 0 : c[7]
346
+ var len = c[4] == 0 ? 0 : c[8]
347
+ while (p > 0) {
348
+ var n = (x / 10 ** (p - 1)) >> 0 // var n = x \ 10 ** (p - 1)
349
+ if (on == 0) {
350
+ on = 1
351
+ } else if (on == 1) {
352
+ if (n == 0) {
353
+ on = 4
354
+ } else {
355
+ if (n == 9) {
356
+ len = 8
357
+ on = 3
358
+ } else {
359
+ on = 2
360
+ len = n
361
+ }
362
+ cur = 0
363
+ }
364
+ } else if (on == 4) {
365
+ on = 5
366
+ len = n
367
+ } else {
368
+ num += n * 10 ** (len - cur - 1)
369
+ cur++
370
+ if (on == 5) {
371
+ num = n
372
+ len--
373
+ x -= 10 ** (p - 1) * n
374
+ p--
375
+ var done = 0
376
+ if (p == 0) {
377
+ j++
378
+ if (c[1] == j || json[j] == 0) {
379
+ x = 0
380
+ done = 1
381
+ } else {
382
+ x = json[j]
383
+ }
384
+ }
385
+ if (len == 0) on = 1
386
+ return [num, c[1], j, x, p, done, c[6], on, len]
387
+ } else if (cur == len) {
388
+ prev *= 10 ** len
389
+ if (on == 3) {
390
+ prev += num
391
+ } else {
392
+ num += prev
393
+ x -= 10 ** (p - 1) * n
394
+ p--
395
+ var done = 0
396
+ if (p == 0) {
397
+ j++
398
+ if (c[1] == j || json[j] == 0) {
399
+ x = 0
400
+ done = 1
401
+ } else {
402
+ x = json[j]
403
+ }
404
+ }
405
+ return [num, c[1], j, x, p, done, c[6], 1, len]
406
+ }
407
+ cur = 0
408
+ on = 1
409
+ len = 0
410
+ num = 0
411
+ }
412
+ }
413
+ x -= 10 ** (p - 1) * n
414
+ p--
415
+ }
416
+ } else {
417
+ return [0, c[1], 0, 0, 0, 1, c[6], 0, 0]
418
+ }
419
+ }
420
+ return [0, c[1], 0, 0, 0, 1, c[6], 0, 0]
421
+ }
422
+
423
+ module.exports = {
424
+ next, arr, push, length, last, pop, toArray, shift, unshift, slice, insert, replace,get
425
+ }