zkjson 0.1.20 → 0.1.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. package/package.json +1 -1
  2. package/parse.js +107 -148
  3. package/uint.js +15 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zkjson",
3
- "version": "0.1.20",
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
@@ -86,13 +86,11 @@ const popArray = (json, size, digit) => {
86
86
  const length = (json, size) => {
87
87
  var _len = 0
88
88
  var c = [0, size, 0, 0, 0, 0, 0, 0, 0]
89
- var nonzero = 0
90
89
  while (c[5] == 0) {
91
90
  c = next(json, c)
92
- if (c[0] > 0) nonzero = 1
93
91
  _len++
94
92
  }
95
- if (nonzero) {
93
+ if (json[0] != 0) {
96
94
  return _len
97
95
  } else {
98
96
  return 0
@@ -234,6 +232,18 @@ const unshift = (json, size, digit, num) => {
234
232
  return _arr
235
233
  }
236
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
+ }
237
247
  const pop = (json, size, overflow = 3) => {
238
248
  var l = 0
239
249
  var ll = 0
@@ -533,5 +543,6 @@ module.exports = {
533
543
  mul,
534
544
  arrGet,
535
545
  remove,
536
- popArray
546
+ popArray,
547
+ concat
537
548
  }