zkjson 0.1.18 → 0.1.20

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zkjson",
3
- "version": "0.1.18",
3
+ "version": "0.1.20",
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,537 @@
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
+
30
+ const arrPush = (json, size, digit, index, val) => {
31
+ var len = get(json, size, 0)
32
+ var _sum = sum(json, size, digit, 1, index + 2)
33
+ var at = _sum + 1 + len
34
+ json = insert(json, size, digit, at, val)
35
+ var alen = get(json, size, index + 1)
36
+ json = replace(json, size, digit, index + 1, alen + 1)
37
+ return json
38
+ }
39
+
40
+ const arrGet = (json, size, digit, index, index2) => {
41
+ var len = get(json, size, 0)
42
+ var _sum = sum(json, size, digit, 1, index + 1)
43
+ var at = _sum + 1 + len + index2
44
+ return get(json, size, at)
45
+ }
46
+
47
+ const pushArray = (json, size, digit, _arr, asize) => {
48
+ var jlen = length(json,size)
49
+ var alen = 0
50
+ if(jlen == 0) {
51
+ json = push(json, size, digit, 1)
52
+ }else{
53
+ alen = get(json, size, 0)
54
+ json = replace(json, size, digit, 0, alen + 1)
55
+ }
56
+ var len = length(_arr,size)
57
+ json = insert(json, size, digit, alen + 1, len)
58
+ var c = [0, asize, 0, 0, 0, 0, 0, 0, 0]
59
+ while (c[5] == 0) {
60
+ c = next(_arr, c)
61
+ json = push(json, size, digit, c[0])
62
+ }
63
+ return json
64
+ }
65
+
66
+ const popArray = (json, size, digit) => {
67
+ var jlen = length(json,size)
68
+ var alen = 0
69
+ if(jlen == 0) {
70
+ throw Error()
71
+ }else{
72
+ alen = get(json, size, 0)
73
+ }
74
+ if(alen == 1) return []
75
+ var len = get(json, size, alen)
76
+ json = replace(json, size, digit, 0, alen - 1)
77
+ var _sum = sum(json, size, digit, 1, alen)
78
+ var start = alen + 1 +_sum
79
+ var end = start + len + 1
80
+ json = remove(json, size, digit, start, end)
81
+ json = remove(json, size, digit, alen, alen + 1)
82
+ return json
83
+ }
84
+
85
+
86
+ const length = (json, size) => {
87
+ var _len = 0
88
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
89
+ var nonzero = 0
90
+ while (c[5] == 0) {
91
+ c = next(json, c)
92
+ if (c[0] > 0) nonzero = 1
93
+ _len++
94
+ }
95
+ if (nonzero) {
96
+ return _len
97
+ } else {
98
+ return 0
99
+ }
100
+ }
101
+
102
+ const sum = (json, size, digit, start, end) =>{
103
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
104
+ var _sum = 0
105
+ var i = 0
106
+ while (c[5] == 0) {
107
+ c = next(json, c)
108
+ if (i >= start && i < end) _sum += c[0]
109
+ i++
110
+ }
111
+ return _sum
112
+ }
113
+
114
+ const mul = (json, size, digit, start, end) =>{
115
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
116
+ var _mul = 0
117
+ var i = 0
118
+ while (c[5] == 0) {
119
+ c = next(json, c)
120
+ if (i >= start && i < end) _mul *= c[0]
121
+ i++
122
+ }
123
+ return _mul
124
+ }
125
+
126
+ const remove = (json, size, digit, start, end) =>{
127
+ var _arr = arr(size)
128
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
129
+ var i = 0
130
+ while (c[5] == 0) {
131
+ c = next(json, c)
132
+ if (i < start || i >= end) push(_arr, size, digit, c[0])
133
+ i++
134
+ }
135
+ return _arr
136
+ }
137
+
138
+ const slice = (json, size, digit, start, end) =>{
139
+ var _arr = arr(size)
140
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
141
+ var i = 0
142
+ while (c[5] == 0) {
143
+ c = next(json, c)
144
+ if (i >= start && i < end) push(_arr, size, digit, c[0])
145
+ i++
146
+ }
147
+ return _arr
148
+ }
149
+
150
+ const get = (json,size,index) =>{
151
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
152
+ var i = 0
153
+ while (c[5] == 0) {
154
+ c = next(json, c)
155
+ if(i == index) return c[0]
156
+ i++
157
+ }
158
+ throw Error()
159
+ }
160
+
161
+ const insert = (json, size, digit, at, val) =>{
162
+ var _arr = arr(size)
163
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
164
+ var i = 0
165
+ if(at == 0) {
166
+ _arr = push(_arr, size, digit, val)
167
+ }
168
+ while (c[5] == 0) {
169
+ c = next(json, c)
170
+ push(_arr, size, digit, c[0])
171
+ i++
172
+ if(at == i) push(_arr, size, digit, val)
173
+ }
174
+ return _arr
175
+ }
176
+
177
+ const replace = (json, size, digit, at, val) =>{
178
+ var _arr = arr(size)
179
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
180
+ var i = 0
181
+ while (c[5] == 0) {
182
+ c = next(json, c)
183
+ if(at == i) {
184
+ _arr = push(_arr, size, digit, val)
185
+ }else{
186
+ push(_arr, size, digit, c[0])
187
+ }
188
+ i++
189
+ }
190
+ return _arr
191
+ }
192
+
193
+ const last = (json, size) => {
194
+ var val = 0
195
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
196
+ while (c[5] == 0) {
197
+ c = next(json, c)
198
+ val = c[0]
199
+ }
200
+ return val
201
+ }
202
+ const lastRow = (json, size) => {
203
+ var v = 0
204
+ for (var j = 0; j < size; j++) {
205
+ if (json[j] != 0) v = j
206
+ }
207
+ return v
208
+ }
209
+
210
+ const shift = (json, size, digit) => {
211
+ var _arr = arr(size)
212
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
213
+ var i = 0
214
+ while (c[5] == 0) {
215
+ c = next(json, c)
216
+ if (i > 0) push(_arr, size, digit, c[0])
217
+ i++
218
+ }
219
+ return _arr
220
+ }
221
+
222
+ const unshift = (json, size, digit, num) => {
223
+ var _arr = arr(size)
224
+ push(_arr, size, digit, num)
225
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
226
+ var i = 0
227
+ if (json[0] !== 0) {
228
+ while (c[5] == 0) {
229
+ c = next(json, c)
230
+ push(_arr, size, digit, c[0])
231
+ i++
232
+ }
233
+ }
234
+ return _arr
235
+ }
236
+
237
+ const pop = (json, size, overflow = 3) => {
238
+ var l = 0
239
+ var ll = 0
240
+ var lnum = 0
241
+ var series = 0
242
+ var snum = 0
243
+ var link = 0
244
+ var _l = 0
245
+ var _d = 0
246
+ for (var l2 = 0; l2 < size; l2++) {
247
+ if (json[l2] != 0) {
248
+ _l = l2
249
+ var x = json[l2]
250
+ var d = digits(x)
251
+ var p = d
252
+ var on = 0
253
+ var i = 0
254
+ while (x > 0) {
255
+ var n = (x / 10 ** (p - 1)) >> 0 // var n = x \ 10 ** (p - 1)
256
+ x -= 10 ** (p - 1) * n
257
+ p--
258
+ i++
259
+ if (on == 0) {
260
+ on = 1
261
+ } else {
262
+ var len = n
263
+ if (link == 0) {
264
+ ll = i - 1
265
+ l = l2
266
+ _d = d
267
+ }
268
+ lnum = len
269
+ snum = 0
270
+ if (len == 0) {
271
+ var n = (x / 10 ** (p - 1)) >> 0 // var n = x \ 10 ** (p - 1)
272
+ var len2 = (x / 10 ** (p - 1)) >> 0 // var n = x \ 10 ** (p - 1)
273
+ series = len2
274
+ x -= 10 ** (p - 1) * n
275
+ p--
276
+ i++
277
+ for (var i2 = 0; i2 < len2; i2++) {
278
+ var n = (x / 10 ** (p - 1)) >> 0 // var n = x \ 10 ** (p - 1)
279
+ snum = snum * 10 + n
280
+ x -= 10 ** (p - 1) * n
281
+ p--
282
+ i++
283
+ }
284
+ } else {
285
+ var _len = len
286
+ if (len == overflow + 1) {
287
+ link = 2
288
+ _len = overflow
289
+ } else if (link > 0) {
290
+ link--
291
+ }
292
+ series = 0
293
+ for (var i2 = 0; i2 < _len; i2++) {
294
+ var n = (x / 10 ** (p - 1)) >> 0 // var n = x \ 10 ** (p - 1)
295
+ x -= 10 ** (p - 1) * n
296
+ p--
297
+ i++
298
+ }
299
+ }
300
+ }
301
+ }
302
+ }
303
+ }
304
+
305
+ if (link == 1) {
306
+ for (var i = l + 1; i <= _l; i++) {
307
+ json[i] = 0
308
+ }
309
+ if (ll < 2) {
310
+ json[l] = 0
311
+ } else {
312
+ json[l] = (json[l] / 10 ** (_d - ll)) >> 0
313
+ }
314
+ } else if (series != 0) {
315
+ if (series == 3) {
316
+ json[l] = (json[l] / 10 ** (d - ll)) >> 0
317
+ json[l] = json[l] * 10 + 1
318
+ var n = (snum / 10 ** 2) >> 0
319
+ json[l] = json[l] * 10 + n
320
+ json[l] = json[l] * 10 + 1
321
+ var n2 = ((snum / 10) >> 0) - n * 10
322
+ json[l] = json[l] * 10 + n2
323
+ } else {
324
+ json[l] = (json[l] / 10 ** (d - ll - 1)) >> 0
325
+ json[l] = json[l] * 10 + (series - 1)
326
+ snum = (snum / 10) >> 0
327
+ json[l] = json[l] * 10 ** (series - 1) + snum
328
+ }
329
+ } else if (ll < 2) {
330
+ json[l] = 0
331
+ } else {
332
+ json[l] = (json[l] / 10 ** (d - ll)) >> 0
333
+ }
334
+ return json
335
+ }
336
+
337
+ const push = (json, size, digit, c, overflow = 3) => {
338
+ var i4 = 0
339
+ var init = 0
340
+ while (c > 0 || init == 0) {
341
+ init = 1
342
+ var len = digits(c)
343
+ var _len = len
344
+ var _len2 = len
345
+ var _c = c
346
+ if (overflow < len) {
347
+ _len = overflow
348
+ _len2 = overflow + 1
349
+ _c = (c / 10 ** (len - overflow)) >> 0 // _c = c \ 10 ** (len - overflow)
350
+ c -= _c * 10 ** (len - overflow)
351
+ } else {
352
+ c = 0
353
+ }
354
+ var appended = 0
355
+ for (var i = i4; i < size; i++) {
356
+ var d = digits(json[i])
357
+ var one = 0
358
+ var ones = 0
359
+ var nums = 0
360
+ if (_len == 1 && digit > d) {
361
+ var x = json[i] - 10 ** (d - 1)
362
+ var i2 = 1
363
+ while (i2 < d) {
364
+ var len = (x / 10 ** (d - i2 - 1)) >> 0
365
+ x = x - len * 10 ** (d - i2 - 1)
366
+ if (len == 1) {
367
+ if (ones == 0) one = i2
368
+ ones++
369
+ } else if (len !== 0) {
370
+ ones = 0
371
+ nums = 0
372
+ } else {
373
+ one = i2
374
+ }
375
+ i2++
376
+ if (len == 0) {
377
+ var len3 = (x / 10 ** (d - i2 - 1)) >> 0
378
+ x = x - len3 * 10 ** (d - i2 - 1)
379
+ i2++
380
+ ones = len3
381
+ for (var i3 = 0; i3 < len3; i3++) {
382
+ var len2 = (x / 10 ** (d - i2 - 1)) >> 0
383
+ x = x - len2 * 10 ** (d - i2 - 1)
384
+ nums = nums * 10 + len2
385
+ i2++
386
+ }
387
+ } else {
388
+ for (var i3 = 0; i3 < len; i3++) {
389
+ var len2 = (x / 10 ** (d - i2 - 1)) >> 0
390
+ x = x - len2 * 10 ** (d - i2 - 1)
391
+ if (len == 1) nums = nums * 10 + len2
392
+ i2++
393
+ }
394
+ }
395
+ }
396
+ if (ones == 2) nums = nums * 10 + _c
397
+ }
398
+ if (ones > 2) {
399
+ var x = (json[i] / 10 ** (d - one - 1)) >> 0
400
+ x = x * 10 + ones + 1
401
+ x = x * 10 ** ones + nums
402
+ x = x * 10 + _c
403
+ json[i] = x
404
+ i4 = i
405
+ appended = 1
406
+ } else if (ones == 2) {
407
+ var x = (json[i] / 10 ** (d - one)) >> 0
408
+ x = x * 10 + 0
409
+ x = x * 10 + ones + 1
410
+ x = x * 10 ** (ones + 1) + nums
411
+ json[i] = x
412
+ i4 = i
413
+ appended = 1
414
+ } else if (digit > d + _len && appended == 0) {
415
+ if (json[i] == 0) json[i] = 1
416
+ json[i] = json[i] * 10 + _len2
417
+ json[i] = json[i] * 10 ** _len + _c
418
+ i4 = i
419
+ appended = 1
420
+ }
421
+ }
422
+ }
423
+ return json
424
+ }
425
+
426
+ const next = (json, c) => {
427
+ if (c[5] == 1) {
428
+ return [0, c[1], 0, 0, 0, 1, c[6], c[7], c[8]]
429
+ }
430
+ var prev = 0
431
+ for (var j = c[2]; j < c[1]; j++) {
432
+ var d = digits(json[j])
433
+ if (json[j] > 0) {
434
+ var p = c[4] == 0 ? digits(json[j]) : c[4]
435
+ var x = c[4] == 0 ? json[j] : c[3]
436
+ var cur = 0
437
+ var num = 0
438
+ var on = c[4] == 0 ? 0 : c[7]
439
+ var len = c[4] == 0 ? 0 : c[8]
440
+ while (p > 0) {
441
+ var n = (x / 10 ** (p - 1)) >> 0 // var n = x \ 10 ** (p - 1)
442
+ if (on == 0) {
443
+ on = 1
444
+ } else if (on == 1) {
445
+ if (n == 0) {
446
+ on = 4
447
+ } else {
448
+ if (n == 9) {
449
+ len = 8
450
+ on = 3
451
+ } else {
452
+ on = 2
453
+ len = n
454
+ }
455
+ cur = 0
456
+ }
457
+ } else if (on == 4) {
458
+ on = 5
459
+ len = n
460
+ } else {
461
+ num += n * 10 ** (len - cur - 1)
462
+ cur++
463
+ if (on == 5) {
464
+ num = n
465
+ len--
466
+ x -= 10 ** (p - 1) * n
467
+ p--
468
+ var done = 0
469
+ if (p == 0) {
470
+ j++
471
+ if (c[1] == j || json[j] == 0) {
472
+ x = 0
473
+ done = 1
474
+ } else {
475
+ x = json[j]
476
+ }
477
+ }
478
+ if (len == 0) on = 1
479
+ return [num, c[1], j, x, p, done, c[6], on, len]
480
+ } else if (cur == len) {
481
+ prev *= 10 ** len
482
+ if (on == 3) {
483
+ prev += num
484
+ } else {
485
+ num += prev
486
+ x -= 10 ** (p - 1) * n
487
+ p--
488
+ var done = 0
489
+ if (p == 0) {
490
+ j++
491
+ if (c[1] == j || json[j] == 0) {
492
+ x = 0
493
+ done = 1
494
+ } else {
495
+ x = json[j]
496
+ }
497
+ }
498
+ return [num, c[1], j, x, p, done, c[6], 1, len]
499
+ }
500
+ cur = 0
501
+ on = 1
502
+ len = 0
503
+ num = 0
504
+ }
505
+ }
506
+ x -= 10 ** (p - 1) * n
507
+ p--
508
+ }
509
+ } else {
510
+ return [0, c[1], 0, 0, 0, 1, c[6], 0, 0]
511
+ }
512
+ }
513
+ return [0, c[1], 0, 0, 0, 1, c[6], 0, 0]
514
+ }
515
+
516
+ module.exports = {
517
+ next,
518
+ arr,
519
+ push,
520
+ length,
521
+ last,
522
+ pop,
523
+ toArray,
524
+ shift,
525
+ unshift,
526
+ slice,
527
+ insert,
528
+ replace,
529
+ get,
530
+ pushArray,
531
+ arrPush,
532
+ sum,
533
+ mul,
534
+ arrGet,
535
+ remove,
536
+ popArray
537
+ }