zkjson 0.1.19 → 0.1.21

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.
Files changed (3) hide show
  1. package/package.json +1 -1
  2. package/parse.js +107 -148
  3. package/uint.js +127 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zkjson",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "description": "Zero Knowledge Provable JSON",
5
5
  "main": "index.js",
6
6
  "license": "MIT",
package/parse.js CHANGED
@@ -1,17 +1,9 @@
1
- const { length, next, arr: _arr, push, pop, last } = require("./uint")
1
+ const { toArray,concat, sum, get, popArray, pushArray, length, next, arr: _arr, push, pop, last } = require("./uint")
2
2
  const _null_ = [110, 117, 108, 108]
3
3
  const _true_ = [116, 114, 117, 101]
4
4
  const _false_ = [102, 97, 108, 115, 101]
5
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) => {
6
+ const eql = (a, b, blen, size = 100) => {
15
7
  var alen = length(a, size)
16
8
  if (alen != blen) return 0
17
9
  var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
@@ -22,64 +14,28 @@ const eql2 = (a, b, blen, size = 100) => {
22
14
  return 1
23
15
  }
24
16
 
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
17
 
62
- const constVal2 = (_v, type, size) => {
18
+ const constVal = (_v, type, size) => {
63
19
  var val = _arr(size)
64
- push(val, size, 9, type)
20
+ val = push(val, size, 9, type)
65
21
  if (type == 1) {
66
- if (eql2(_v, _true_, 4, size) == 1) {
67
- push(val, size, 9, 1)
22
+ if (eql(_v, _true_, 4, size) == 1) {
23
+ val = push(val, size, 9, 1)
68
24
  } else {
69
- push(val, size, 9, 0)
25
+ val = push(val, size, 9, 0)
70
26
  }
71
27
  } else if (type == 3) {
72
- push(length(_v, size))
28
+ val = push(val, size, 9, length(_v, size))
73
29
  var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
74
30
  while (c[5] == 0) {
75
31
  c = next(_v, c)
76
- push(val, size, 9, c[0])
32
+ val = push(val, size, 9, c[0])
77
33
  }
78
34
  } else if (type == 2) {
79
- if (_v[0] == 45) {
80
- push(val, size, 9, 0)
35
+ if (get(_v, size, 0) == 45) {
36
+ val = push(val, size, 9, 0)
81
37
  } else {
82
- push(val, size, 9, 1)
38
+ val = push(val, size, 9, 1)
83
39
  }
84
40
  let after = 0
85
41
  let right = 0
@@ -94,58 +50,57 @@ const constVal2 = (_v, type, size) => {
94
50
  digits = digits * 10 + (c[0] - 48)
95
51
  }
96
52
  }
97
- push(val, size, 9, right)
98
- push(val, size, 9, digits)
53
+ val = push(val, size, 9, right)
54
+ val = push(val, size, 9, digits)
99
55
  }
100
56
  return val
101
57
  }
102
58
 
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)
59
+ const constPath = (p, size) => {
60
+ var pth2 = _arr(size)
61
+ var len = get(p,size,0);
62
+ pth2 = push(pth2,size,9,len)
63
+ for(var i = 0;i < len; i++){
64
+ var len2 = get(p,size,i + 1);
65
+ var _sum = sum(p, size, 9, 1, 1 + i)
66
+ var first = get(p, size, 1 + len + _sum)
67
+ if(first == 0){
68
+ pth2 = push(pth2,size,9,0)
69
+ }else{
70
+ pth2 = push(pth2,size,9,len2)
71
+ }
72
+ for(var i2 = 0;i2 < len2; i2++){
73
+ var v = get(p, size, 1 + len + _sum + i2)
74
+ pth2 = push(pth2,size,9,v)
113
75
  }
114
76
  }
115
- return pth
77
+ return pth2
116
78
  }
117
79
 
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)
80
+ const isNumber = (val,size, digit) =>{
81
+ var len = length(val, size)
82
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
83
+ while (c[5] == 0) {
84
+ c = next(val, c)
85
+ if(c[0] == 47 || c[0] < 45 || c[0] > 57) return false
129
86
  }
130
- }
131
- return pth2
87
+
88
+ return true
132
89
  }
133
90
 
134
91
  const parse = (str, size = 100) => {
135
- var val = []
136
- var val2 = _arr(size)
92
+ var val = _arr(size)
137
93
  var inVal = 0
138
94
  var isNum = 0
139
95
  var esc = 0
140
96
  var nextKey = 0
141
97
  var arr = 0
142
98
  var obj = 0
143
- var path = []
144
- var path2 = _arr(size)
99
+ var path = _arr(size)
145
100
  var ao = _arr(5)
146
101
  var ind = _arr(5)
147
102
  var err = 0
148
- var json = []
103
+ var json = _arr(size)
149
104
  let c = [0, size, 0, 0, 0, 0, 0, 0, 0]
150
105
  while (c[5] == 0) {
151
106
  c = next(str, c)
@@ -155,84 +110,82 @@ const parse = (str, size = 100) => {
155
110
  esc = 1
156
111
  } else if (s == 34) {
157
112
  if (esc == 1) {
158
- val.push(s)
159
- push(val2, size, 9, s)
113
+ val = push(val, size, 9, s)
160
114
  } else {
161
115
  inVal = 0
162
116
  if (nextKey == 1 && last(ao, 5) == 1) {
163
- path.push(val) // val push
117
+ path = pushArray(path,size,9,val,size)
164
118
  } else {
165
119
  if (last(ao, 5) == 2) {
166
120
  var _ind = last(ind, 5)
167
- path.push(_ind)
121
+ var __ind = _arr(size)
122
+ __ind = push(__ind, size, 9, 0)
123
+ __ind = push(__ind, size, 9, _ind)
124
+ path = pushArray(path, size, 9, __ind, size)
168
125
  ind = pop(ind, 5)
169
- push(ind, 5, 9, _ind + 1)
126
+ ind = push(ind, 5, 9, _ind + 1)
170
127
  }
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()
128
+ json = concat(json, concat(constPath(path, size),constVal(val,3,size),size,9), size,9);
129
+ popArray(path, size, 9)
175
130
  }
176
131
 
177
- val = []
178
- val2 = _arr(size)
132
+ val = _arr(size)
179
133
  nextKey = 0
180
134
  }
181
135
  esc = 0
182
136
  } else {
183
- val.push(s)
184
- push(val2, size, 9, s)
137
+ push(val, size, 9, s)
185
138
  esc = 0
186
139
  }
187
140
  } else if (isNum == 1) {
188
141
  if (s == 44 || s == 32 || s == 125 || s == 93) {
189
142
  if (last(ao, 5) == 2) {
190
143
  var _ind = last(ind, 5)
191
- path.push(_ind)
144
+ var __ind = _arr(size)
145
+ __ind = push(__ind, size, 9, 0)
146
+ __ind = push(__ind, size, 9, _ind)
147
+ path = pushArray(path, size, 9, __ind, size)
192
148
  ind = pop(ind, 5)
193
- push(ind, 5, 9, _ind + 1)
149
+ ind = push(ind, 5, 9, _ind + 1)
150
+
194
151
  }
195
152
  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)
153
+ eql(val, _true_, 4, size) == 0 &&
154
+ eql(val, _false_, 5, size) == 0 &&
155
+ eql(val, _null_, 4, size) == 0 &&
156
+ isNumber(val, size, 9) == 0
200
157
  ) {
201
158
  err = 1
202
159
  }
203
- // console.log("val: ", `< ${path.join(".")} >`, val)
204
160
  var type = 2
205
- if (eql2(val2, _null_, 4, size) == 1) {
161
+ if (eql(val, _null_, 4, size) == 1) {
206
162
  type = 0
207
163
  } else if (
208
- eql2(val2, _true_, 4, size) == 1 ||
209
- eql2(val2, _false_, 5, size)
164
+ eql(val, _true_, 4, size) == 1 ||
165
+ eql(val, _false_, 5, size) == 1
210
166
  ) {
211
167
  type = 1
212
168
  }
213
- //console.log(constVal2(val2, type, size))
214
- json.push([constPath(path), constVal(val, type)])
215
- path.pop()
169
+ json = concat(json, concat(constPath(path, size),constVal(val,type,size),size,9), size,9);
170
+ popArray(path, size, 9)
216
171
  if (s == 93) {
217
172
  if (last(ao, 5) != 2) err = 1
218
173
  ao.pop()
219
- path.pop()
174
+ popArray(path, size, 9)
220
175
  arr--
221
176
  pop(ind, 5)
222
177
  }
223
178
  if (s == 125) {
224
179
  if (last(ao, 5) != 1) err = 1
225
180
  pop(ao, 5)
226
- path.pop()
181
+ popArray(path, size, 9)
227
182
  obj--
228
183
  }
229
184
  isNum = 0
230
- val = []
231
- val2 = _arr(size)
185
+ val = _arr(size)
232
186
  if (s == 44) nextKey = 1
233
187
  } else {
234
- val.push(s)
235
- push(val2, size, 9, s)
188
+ val = push(val, size, 9, s)
236
189
  }
237
190
  } else if (s == 34) {
238
191
  inVal = 1
@@ -246,69 +199,75 @@ const parse = (str, size = 100) => {
246
199
  s != 125
247
200
  ) {
248
201
  isNum = 1
249
- val.push(s)
250
- push(val2, size, 9, s)
202
+ val = push(val, size, 9, s)
251
203
  } else {
252
204
  if (s != 32) {
253
205
  if (s == 123 || s == 44) nextKey = 1
254
206
  if (s == 123) {
255
207
  if (last(ao, 5) == 2) {
256
208
  var _ind = last(ind, 5)
257
- path.push(_ind)
209
+ var __ind = _arr(size)
210
+ __ind = push(__ind, size, 9, 0)
211
+ __ind = push(__ind, size, 9, _ind)
212
+ path = pushArray(path, size, 9, __ind, size)
258
213
  ind = pop(ind, 5)
259
- push(ind, 5, 9, _ind + 1)
214
+ ind = push(ind, 5, 9, _ind + 1)
260
215
  }
261
- push(ao, 5, 9, 1)
216
+ ao = push(ao, 5, 9, 1)
262
217
  obj++
263
218
  }
264
219
  if (s == 125) {
265
220
  if (last(ao, 5) != 1) err = 1
266
221
  pop(ao, 5)
267
- path.pop()
222
+ popArray(path, size, 9)
268
223
  obj--
269
224
  }
270
225
  if (s == 91) {
271
226
  if (last(ao, 5) == 2) {
272
227
  var _ind = last(ind, 5)
273
- path.push(_ind)
228
+ var __ind = _arr(size)
229
+ __ind = push(__ind, size, 9, 0)
230
+ __ind = push(__ind, size, 9, _ind)
231
+ path = pushArray(path, size, 9, __ind, size)
274
232
  ind = pop(ind, 5)
275
- push(ind, 5, 9, _ind + 1)
233
+ ind = push(ind, 5, 9, _ind + 1)
276
234
  }
277
- push(ind, 5, 9, 0)
278
- push(ao, 5, 9, 2)
235
+ ind = push(ind, 5, 9, 0)
236
+ ao = push(ao, 5, 9, 2)
279
237
  arr++
280
238
  }
281
239
  if (s == 93) {
282
240
  if (last(ao, 5) != 2) err = 1
283
- pop(ao, 5)
284
- pop(ind, 5)
285
- path.pop()
241
+ ao = pop(ao, 5)
242
+ ind = pop(ind, 5)
243
+ path = popArray(path, size, 9)
286
244
  arr--
287
245
  }
288
246
  }
289
247
  }
290
248
  }
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)
249
+ if (length(val, size) != 0) {
250
+ var type = 4
251
+ if(eql(val,_null_,4,size) == 1){
252
+ type = 0
253
+ isNum = 0
254
+ }else if(
255
+ eql(val, _true_, 4, size) == 1 ||
256
+ eql(val, _false_, 5, size)
257
+ ){
258
+ type = 1
259
+ isNum = 0
260
+ } else if (isNumber(val, size, 9) == 1){
261
+ type = 2
262
+ isNum = 0
263
+ }
264
+ json = concat(json, concat(constPath(path, size),constVal(val,type, size), size, 9), size,9);
298
265
  }
299
266
  if (ao.length > 0) err = 1
300
267
  if (ind.length > 0) err = 1
301
268
  if (inVal) err = 1
302
269
  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
270
+ return json
312
271
  }
313
272
 
314
273
  module.exports = { parse }
package/uint.js CHANGED
@@ -26,22 +26,113 @@ const toArray = (json, size) => {
26
26
  return j
27
27
  }
28
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
+
29
86
  const length = (json, size) => {
30
87
  var _len = 0
31
88
  var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
32
- var nonzero = 0
33
89
  while (c[5] == 0) {
34
90
  c = next(json, c)
35
- if (c[0] > 0) nonzero = 1
36
91
  _len++
37
92
  }
38
- if (nonzero) {
93
+ if (json[0] != 0) {
39
94
  return _len
40
95
  } else {
41
96
  return 0
42
97
  }
43
98
  }
44
99
 
100
+ const sum = (json, size, digit, start, end) =>{
101
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
102
+ var _sum = 0
103
+ var i = 0
104
+ while (c[5] == 0) {
105
+ c = next(json, c)
106
+ if (i >= start && i < end) _sum += c[0]
107
+ i++
108
+ }
109
+ return _sum
110
+ }
111
+
112
+ const mul = (json, size, digit, start, end) =>{
113
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
114
+ var _mul = 0
115
+ var i = 0
116
+ while (c[5] == 0) {
117
+ c = next(json, c)
118
+ if (i >= start && i < end) _mul *= c[0]
119
+ i++
120
+ }
121
+ return _mul
122
+ }
123
+
124
+ const remove = (json, size, digit, start, end) =>{
125
+ var _arr = arr(size)
126
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
127
+ var i = 0
128
+ while (c[5] == 0) {
129
+ c = next(json, c)
130
+ if (i < start || i >= end) push(_arr, size, digit, c[0])
131
+ i++
132
+ }
133
+ return _arr
134
+ }
135
+
45
136
  const slice = (json, size, digit, start, end) =>{
46
137
  var _arr = arr(size)
47
138
  var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
@@ -141,6 +232,18 @@ const unshift = (json, size, digit, num) => {
141
232
  return _arr
142
233
  }
143
234
 
235
+ const concat = (json, json2, size, digit) => {
236
+ var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
237
+ var i = 0
238
+ if (json2[0] !== 0) {
239
+ while (c[5] == 0) {
240
+ c = next(json2, c)
241
+ json = push(json, size, digit, c[0])
242
+ i++
243
+ }
244
+ }
245
+ return json
246
+ }
144
247
  const pop = (json, size, overflow = 3) => {
145
248
  var l = 0
146
249
  var ll = 0
@@ -421,5 +524,25 @@ const next = (json, c) => {
421
524
  }
422
525
 
423
526
  module.exports = {
424
- next, arr, push, length, last, pop, toArray, shift, unshift, slice, insert, replace,get
527
+ next,
528
+ arr,
529
+ push,
530
+ length,
531
+ last,
532
+ pop,
533
+ toArray,
534
+ shift,
535
+ unshift,
536
+ slice,
537
+ insert,
538
+ replace,
539
+ get,
540
+ pushArray,
541
+ arrPush,
542
+ sum,
543
+ mul,
544
+ arrGet,
545
+ remove,
546
+ popArray,
547
+ concat
425
548
  }