zkjson 0.1.17 → 0.1.19

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/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
+ }