@muze-nl/od-jsontag 0.1.5 → 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.5",
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) {
@@ -25,9 +34,6 @@ export default function parse(input, meta, immutable=true)
25
34
  if (!meta.baseURL) {
26
35
  meta.baseURL = 'http://localhost/'
27
36
  }
28
- if (!meta.access) {
29
- meta.access = () => true
30
- }
31
37
  let at, ch, value, result;
32
38
  let escapee = {
33
39
  '"': '"',
@@ -690,17 +696,17 @@ export default function parse(input, meta, immutable=true)
690
696
  } else if (prop===isChanged) {
691
697
  return true
692
698
  } else {
693
- if (!meta.access(target, prop)) {
699
+ if (meta.access && !meta.access(target, prop)) {
694
700
  return undefined
695
701
  }
696
702
  if (Array.isArray(target[prop])) {
697
- return new Proxy(target[prop], handlers.newArrayHandler)
703
+ return JSONTagProxy(target[prop], handlers.newArrayHandler)
698
704
  }
699
705
  return target[prop]
700
706
  }
701
707
  },
702
708
  set(target, prop, value) {
703
- if (!meta.access(target, prop)) {
709
+ if (meta.access && !meta.access(target, prop)) {
704
710
  return undefined
705
711
  }
706
712
  if (JSONTag.getType(value)==='object' && !value[isProxy]) {
@@ -735,18 +741,18 @@ export default function parse(input, meta, immutable=true)
735
741
  return true
736
742
  break
737
743
  default:
738
- if (!meta.access(target, prop, 'get')) {
744
+ if (meta.access && !meta.access(target, prop, 'get')) {
739
745
  return undefined
740
746
  }
741
747
  if (Array.isArray(target[prop])) {
742
- return new Proxy(target[prop], handlers.newArrayHandler)
748
+ return JSONTagProxy(target[prop], handlers.newArrayHandler)
743
749
  }
744
750
  return target[prop]
745
751
  break
746
752
  }
747
753
  },
748
754
  set(target, prop, value) {
749
- if (!meta.access(target, prop, 'set')) {
755
+ if (meta.access && !meta.access(target, prop, 'set')) {
750
756
  return undefined
751
757
  }
752
758
  if (JSONTag.getType(value)==='object' && !value[isProxy]) {
@@ -778,12 +784,12 @@ export default function parse(input, meta, immutable=true)
778
784
  } else if (prop===isChanged) {
779
785
  return target[parent][isChanged]
780
786
  } else {
781
- if (!meta.access(target, prop, 'get')) {
787
+ if (meta.access && !meta.access(target, prop, 'get')) {
782
788
  return undefined
783
789
  }
784
790
  if (Array.isArray(target[prop])) {
785
791
  target[prop][parent] = target[parent]
786
- return new Proxy(target[prop], handlers.arrayHandler)
792
+ return JSONTagProxy(target[prop], handlers.arrayHandler)
787
793
  }
788
794
  return target[prop]
789
795
  }
@@ -792,7 +798,7 @@ export default function parse(input, meta, immutable=true)
792
798
  if (immutable) {
793
799
  throw new Error('dataspace is immutable')
794
800
  }
795
- if (!meta.access(target, prop, 'set')) {
801
+ if (meta.access && !meta.access(target, prop, 'set')) {
796
802
  return undefined
797
803
  }
798
804
  if (JSONTag.getType(value)==='object' && !value[isProxy]) {
@@ -806,7 +812,7 @@ export default function parse(input, meta, immutable=true)
806
812
  if (immutable) {
807
813
  throw new Error('dataspace is immutable')
808
814
  }
809
- if (!meta.access(target, prop, 'deleteProperty')) {
815
+ if (meta.access && !meta.access(target, prop, 'deleteProperty')) {
810
816
  return undefined
811
817
  }
812
818
  //FIXME: if target[prop] was the last reference to an object
@@ -822,7 +828,7 @@ export default function parse(input, meta, immutable=true)
822
828
  firstParse(target)
823
829
  switch(prop) {
824
830
  case source:
825
- if (!meta.access(target, prop, 'get')) {
831
+ if (meta.access && !meta.access(target, prop, 'get')) {
826
832
  return undefined
827
833
  }
828
834
  return target
@@ -849,12 +855,12 @@ export default function parse(input, meta, immutable=true)
849
855
  return target[isChanged]
850
856
  break
851
857
  default:
852
- if (!meta.access(target, prop, 'get')) {
858
+ if (meta.access && !meta.access(target, prop, 'get')) {
853
859
  return undefined
854
860
  }
855
861
  if (Array.isArray(target[prop])) {
856
862
  target[prop][parent] = target
857
- return new Proxy(target[prop], handlers.arrayHandler)
863
+ return JSONTagProxy(target[prop], handlers.arrayHandler)
858
864
  }
859
865
  return target[prop]
860
866
  break
@@ -866,7 +872,7 @@ export default function parse(input, meta, immutable=true)
866
872
  }
867
873
  firstParse(target)
868
874
  if (prop!==isChanged) {
869
- if (prop!=resultSet && !meta.access(target, prop, 'set')) {
875
+ if (prop!=resultSet && meta.access && !meta.access(target, prop, 'set')) {
870
876
  return undefined
871
877
  }
872
878
  if (JSONTag.getType(value)==='object' && !value[isProxy]) {
@@ -881,7 +887,7 @@ export default function parse(input, meta, immutable=true)
881
887
  if (immutable) {
882
888
  throw new Error('dataspace is immutable')
883
889
  }
884
- if (!meta.access(target, prop, 'deleteProperty')) {
890
+ if (meta.access && !meta.access(target, prop, 'deleteProperty')) {
885
891
  return undefined
886
892
  }
887
893
  firstParse(target)
@@ -901,14 +907,14 @@ export default function parse(input, meta, immutable=true)
901
907
  if (immutable) {
902
908
  throw new Error('dataspace is immutable')
903
909
  }
904
- if (!meta.access(target, prop, 'defineProperty')) {
910
+ if (meta.access && !meta.access(target, prop, 'defineProperty')) {
905
911
  return undefined
906
912
  }
907
913
  firstParse(target)
908
914
  Object.defineProperty(target, prop, descriptor)
909
915
  },
910
916
  has(target, prop) {
911
- if (!meta.access(target, prop, 'has')) {
917
+ if (meta.access && !meta.access(target, prop, 'has')) {
912
918
  return false
913
919
  }
914
920
  firstParse()
@@ -932,7 +938,7 @@ export default function parse(input, meta, immutable=true)
932
938
  resultArray.push('')
933
939
  value[getIndex] = index
934
940
  makeChildProxies(value)
935
- let result = new Proxy(value, handlers.newValueHandler)
941
+ let result = JSONTagProxy(value, handlers.newValueHandler)
936
942
  resultArray[index] = result
937
943
  return result
938
944
  }
@@ -952,7 +958,7 @@ export default function parse(input, meta, immutable=true)
952
958
  next()
953
959
  // newValueHandler makes sure that value[getBuffer] runs stringify
954
960
  // arrayHandler makes sure that changes in the array set targetIsChanged to true
955
- return new Proxy(cache, handlers.handler)
961
+ return JSONTagProxy(cache, handlers.handler)
956
962
  }
957
963
 
958
964
  value = function(ob={})