@muze-nl/od-jsontag 0.1.6 → 0.1.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@muze-nl/od-jsontag",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "On Demand JSONTag: parse/serialize large datastructures on demand, useful for sharing data between threads",
5
5
  "type": "module",
6
6
  "author": "Auke van Slooten <auke@muze.nl>",
package/src/jsontag.mjs CHANGED
@@ -45,3 +45,6 @@ export function removeAttribute(obj, attr) {
45
45
  return JSONTag.removeAttribute(obj?.[source] ?? obj, attr)
46
46
  }
47
47
 
48
+ export function clone(obj) {
49
+ return JSONTag.clone(obj?.[source] ?? obj)
50
+ }
package/src/parse.mjs CHANGED
@@ -14,6 +14,15 @@ function stringToSAB(strData) {
14
14
  return uint8sab
15
15
  }
16
16
 
17
+ function JSONTagProxy(target, handler) {
18
+ let p = new Proxy(target, handler)
19
+ let a = JSONTag.getAttributes(target)
20
+ JSONTag.setAttributes(target, a)
21
+ let t = JSONTag.getType(target)
22
+ JSONTag.setType(target, t)
23
+ return p
24
+ }
25
+
17
26
  export default function parse(input, meta, immutable=true)
18
27
  {
19
28
  if (!meta) {
@@ -691,7 +700,7 @@ export default function parse(input, meta, immutable=true)
691
700
  return undefined
692
701
  }
693
702
  if (Array.isArray(target[prop])) {
694
- return new Proxy(target[prop], handlers.newArrayHandler)
703
+ return JSONTagProxy(target[prop], handlers.newArrayHandler)
695
704
  }
696
705
  return target[prop]
697
706
  }
@@ -736,7 +745,7 @@ export default function parse(input, meta, immutable=true)
736
745
  return undefined
737
746
  }
738
747
  if (Array.isArray(target[prop])) {
739
- return new Proxy(target[prop], handlers.newArrayHandler)
748
+ return JSONTagProxy(target[prop], handlers.newArrayHandler)
740
749
  }
741
750
  return target[prop]
742
751
  break
@@ -780,7 +789,7 @@ export default function parse(input, meta, immutable=true)
780
789
  }
781
790
  if (Array.isArray(target[prop])) {
782
791
  target[prop][parent] = target[parent]
783
- return new Proxy(target[prop], handlers.arrayHandler)
792
+ return JSONTagProxy(target[prop], handlers.arrayHandler)
784
793
  }
785
794
  return target[prop]
786
795
  }
@@ -851,7 +860,7 @@ export default function parse(input, meta, immutable=true)
851
860
  }
852
861
  if (Array.isArray(target[prop])) {
853
862
  target[prop][parent] = target
854
- return new Proxy(target[prop], handlers.arrayHandler)
863
+ return JSONTagProxy(target[prop], handlers.arrayHandler)
855
864
  }
856
865
  return target[prop]
857
866
  break
@@ -929,7 +938,7 @@ export default function parse(input, meta, immutable=true)
929
938
  resultArray.push('')
930
939
  value[getIndex] = index
931
940
  makeChildProxies(value)
932
- let result = new Proxy(value, handlers.newValueHandler)
941
+ let result = JSONTagProxy(value, handlers.newValueHandler)
933
942
  resultArray[index] = result
934
943
  return result
935
944
  }
@@ -949,7 +958,7 @@ export default function parse(input, meta, immutable=true)
949
958
  next()
950
959
  // newValueHandler makes sure that value[getBuffer] runs stringify
951
960
  // arrayHandler makes sure that changes in the array set targetIsChanged to true
952
- return new Proxy(cache, handlers.handler)
961
+ return JSONTagProxy(cache, handlers.handler)
953
962
  }
954
963
 
955
964
  value = function(ob={})