zkjson 0.1.18 → 0.1.20

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