@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 +1 -1
- package/src/jsontag.mjs +3 -0
- package/src/parse.mjs +28 -22
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@muze-nl/od-jsontag",
|
|
3
|
-
"version": "0.1.
|
|
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
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
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
961
|
+
return JSONTagProxy(cache, handlers.handler)
|
|
956
962
|
}
|
|
957
963
|
|
|
958
964
|
value = function(ob={})
|