zkjson 0.1.17 → 0.1.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. package/encoder.js +108 -27
  2. package/package.json +1 -1
package/encoder.js CHANGED
@@ -395,7 +395,7 @@ function decode(arr) {
395
395
  return json
396
396
  }
397
397
 
398
- const str2id = str => {
398
+ const toIndex = str => {
399
399
  return (
400
400
  "1" +
401
401
  str
@@ -405,7 +405,7 @@ const str2id = str => {
405
405
  )
406
406
  }
407
407
 
408
- const id2str = id => {
408
+ const fromIndex = id => {
409
409
  let _id = id.toString().split("")
410
410
  _id.shift()
411
411
  return splitEvery(2, _id)
@@ -415,7 +415,7 @@ const id2str = id => {
415
415
  .join("")
416
416
  }
417
417
 
418
- function val2str(arr) {
418
+ function toSignal(arr) {
419
419
  const _arr = flatten(
420
420
  arr.map(n => {
421
421
  let str = splitEvery(8, n.toString().split(""))
@@ -428,30 +428,118 @@ function val2str(arr) {
428
428
  return str
429
429
  })
430
430
  )
431
- let arrs = []
432
- let len = 0
433
- let str = ""
431
+ let _arr2 = []
432
+ let one = 0
433
+ let i = 0
434
+ let start = null
434
435
  for (let v of _arr) {
435
- if (len + v.length > 76) {
436
- len = 0
437
- arrs.push(str)
438
- str = ""
436
+ _arr2.push(v)
437
+ if (v.length - 1 === 1) {
438
+ if (start === null) start = i
439
+ one += v.length - 1
440
+ if (one === 9) {
441
+ _arr2[start] = `0${one}${_arr2[start][1]}`
442
+ for (let i2 = start + 1; i2 <= i; i2++) _arr2[i2] = `${_arr2[i2][1]}`
443
+ one = 0
444
+ start = null
445
+ }
446
+ } else {
447
+ if (one > 2) {
448
+ _arr2[start] = `0${one}${_arr2[start][1]}`
449
+ for (let i2 = start + 1; i2 < i; i2++) _arr2[i2] = `${_arr2[i2][1]}`
450
+ }
451
+ one = 0
452
+ start = null
453
+ }
454
+ i++
455
+ }
456
+ if (one > 2) {
457
+ _arr2[start] = `0${one}${_arr2[start][1]}`
458
+ for (let i2 = start + 1; i2 <= i - 1; i2++) _arr2[i2] = `${_arr2[i2][1]}`
459
+ }
460
+ let _arr3 = []
461
+ let chain = null
462
+ let cur = 0
463
+ let num = ""
464
+ for (let v of _arr2) {
465
+ if (chain === null && +v[0] === 0) {
466
+ chain = +v[1]
467
+ cur = 1
468
+ num = v
469
+ } else if (chain !== null) {
470
+ num += v
471
+ cur++
472
+ if (chain == cur) {
473
+ _arr3.push(num)
474
+ chain = null
475
+ num = ""
476
+ cur = 0
477
+ }
478
+ } else {
479
+ _arr3.push(v)
439
480
  }
440
- len += v.length
441
- str += v
442
481
  }
443
- if (str !== "") arrs.push(str)
444
- return arrs
482
+ if (chain !== null) _arr3.push(num)
483
+ let arrs2 = []
484
+ let len2 = 0
485
+ let str2 = ""
486
+ for (let v of _arr3) {
487
+ if (len2 + v.length > 75) {
488
+ arrs2.push("1" + str2)
489
+ if (+v[0] === 0) {
490
+ let len3 = 75 - len2
491
+ if (len3 == 2 || len3 == 3) {
492
+ arrs2[arrs2.length - 1] += `1${v[2]}`
493
+ let new_len = +v[1] - 1
494
+ if (new_len === 2) {
495
+ v = `1${v[3]}1${v[4]}`
496
+ } else {
497
+ v = `0${new_len}${v.slice(3)}`
498
+ }
499
+ } else if (len3 > 3) {
500
+ let new_len = +v[1] - 2
501
+ let old_len = 2
502
+ if (len3 === 4) {
503
+ arrs2[arrs2.length - 1] += `1${v[2]}1${v[3]}`
504
+ } else {
505
+ old_len = len3 - 2
506
+ new_len = +v[1] - old_len
507
+ arrs2[arrs2.length - 1] += `0${old_len}${v.slice(2, 2 + old_len)}`
508
+ }
509
+ if (new_len === 1) {
510
+ v = `1${v[old_len + 2]}`
511
+ } else if (new_len === 2) {
512
+ v = `1${v[old_len + 2]}1${v[old_len + 3]}`
513
+ } else {
514
+ v = `0${new_len}${v.slice(old_len + 2)}`
515
+ }
516
+ }
517
+ }
518
+ len2 = 0
519
+ str2 = ""
520
+ }
521
+ len2 += v.length
522
+ str2 += v
523
+ }
524
+ if (str2 !== "") arrs2.push("1" + str2)
525
+ return arrs2
445
526
  }
446
527
 
447
- function str2val(arr) {
528
+ function fromSignal(arr) {
448
529
  let _arr = []
449
530
  let prev = ""
450
- for (const s of arr) {
531
+ for (let s of arr) {
532
+ s = s.slice(1)
451
533
  let str = s.split("")
452
534
  while (str.length > 0) {
453
535
  const len = +str.shift()
454
- if (len === 9) {
536
+ if (len === 0) {
537
+ const len2 = +str.shift()
538
+ for (let i2 = 0; i2 < len2; i2++) {
539
+ _arr.push(+str[i2])
540
+ }
541
+ str = str.slice(len2)
542
+ } else if (len === 9) {
455
543
  prev += str.slice(0, 8).join("")
456
544
  str = str.slice(8)
457
545
  } else {
@@ -465,13 +553,9 @@ function str2val(arr) {
465
553
  return _arr
466
554
  }
467
555
 
468
- const toSignal = val2str
469
- const fromSignal = str2val
470
- const toIndex = str2id
471
- const fromIndex = id2str
472
-
473
556
  const path = p => toSignal(encodePath(p))
474
557
  const val = v => toSignal(encodeVal(v))
558
+ const query = v => toSignal(encodeQuery(v))
475
559
 
476
560
  function encodeQuery(v) {
477
561
  if (!Array.isArray(v)) throw Error("query must be an array")
@@ -483,7 +567,7 @@ function encodeQuery(v) {
483
567
  function decodeQuery(v) {
484
568
  const op = opMap[v[0]]
485
569
  if (isNil(op)) throw Error("op doens't exist")
486
- return [op, ...decodeVal(v.slice(1))]
570
+ return [op, decodeVal(v.slice(1))]
487
571
  }
488
572
 
489
573
  module.exports = {
@@ -496,16 +580,13 @@ module.exports = {
496
580
  pad,
497
581
  _encode,
498
582
  flattenPath,
499
- str2id,
500
- val2str,
501
- str2val,
502
- id2str,
503
583
  toSignal,
504
584
  fromSignal,
505
585
  toIndex,
506
586
  fromIndex,
507
587
  path,
508
588
  val,
589
+ query,
509
590
  encodeQuery,
510
591
  decodeQuery,
511
592
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zkjson",
3
- "version": "0.1.17",
3
+ "version": "0.1.18",
4
4
  "description": "Zero Knowledge Provable JSON",
5
5
  "main": "index.js",
6
6
  "license": "MIT",