zkjson 0.1.18 → 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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zkjson",
3
- "version": "0.1.18",
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
+ }