@muze-nl/od-jsontag 0.3.1 → 0.3.3
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/parse.mjs +30 -15
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@muze-nl/od-jsontag",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.3",
|
|
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/parse.mjs
CHANGED
|
@@ -698,7 +698,7 @@ export default function parse(input, meta, immutable=true)
|
|
|
698
698
|
Object.entries(parent).forEach(([key,entry]) => {
|
|
699
699
|
if (Array.isArray(entry)) {
|
|
700
700
|
makeChildProxies(entry)
|
|
701
|
-
} else if (JSONTag.getType(entry)==='object') {
|
|
701
|
+
} else if (entry && JSONTag.getType(entry)==='object') {
|
|
702
702
|
if (entry[isProxy]) {
|
|
703
703
|
// do nothing
|
|
704
704
|
} else {
|
|
@@ -814,13 +814,14 @@ export default function parse(input, meta, immutable=true)
|
|
|
814
814
|
}
|
|
815
815
|
},
|
|
816
816
|
arrayHandler: {
|
|
817
|
-
get(target, prop) {
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
}
|
|
817
|
+
get(target, prop, receiver) {
|
|
818
|
+
const value = target?.[prop]
|
|
819
|
+
if (value instanceof Function) {
|
|
820
|
+
// if (['copyWithin','fill','pop','push','reverse','shift','sort','splice','unshift'].indexOf(prop)!==-1) {
|
|
821
|
+
// if (immutable) {
|
|
822
|
+
// throw new Error('dataspace is immutable')
|
|
823
|
+
// }
|
|
824
|
+
// }
|
|
824
825
|
return (...args) => {
|
|
825
826
|
args = args.map(arg => {
|
|
826
827
|
if (JSONTag.getType(arg)==='object' && !arg[isProxy]) {
|
|
@@ -828,9 +829,7 @@ export default function parse(input, meta, immutable=true)
|
|
|
828
829
|
}
|
|
829
830
|
return arg
|
|
830
831
|
})
|
|
831
|
-
|
|
832
|
-
let result = target[prop].apply(target, args)
|
|
833
|
-
return result
|
|
832
|
+
return value.apply(receiver, args)
|
|
834
833
|
}
|
|
835
834
|
} else if (prop===isChanged) {
|
|
836
835
|
return target[isChanged] || target[parent][isChanged]
|
|
@@ -840,10 +839,10 @@ export default function parse(input, meta, immutable=true)
|
|
|
840
839
|
if (meta.access && !meta.access(target, prop, 'get')) {
|
|
841
840
|
return undefined
|
|
842
841
|
}
|
|
843
|
-
if (Array.isArray(
|
|
844
|
-
return getArrayProxy(
|
|
842
|
+
if (Array.isArray(value)) {
|
|
843
|
+
return getArrayProxy(value, target)
|
|
845
844
|
}
|
|
846
|
-
return
|
|
845
|
+
return value
|
|
847
846
|
}
|
|
848
847
|
},
|
|
849
848
|
set(target, prop, value) {
|
|
@@ -859,6 +858,9 @@ export default function parse(input, meta, immutable=true)
|
|
|
859
858
|
}
|
|
860
859
|
if (JSONTag.getType(value)==='object' && !value[isProxy]) {
|
|
861
860
|
value = getNewValueProxy(value)
|
|
861
|
+
}
|
|
862
|
+
if (target[prop] === value) {
|
|
863
|
+
return true
|
|
862
864
|
}
|
|
863
865
|
target[prop] = value
|
|
864
866
|
target[isChanged] = true
|
|
@@ -875,6 +877,9 @@ export default function parse(input, meta, immutable=true)
|
|
|
875
877
|
//FIXME: if target[prop] was the last reference to an object
|
|
876
878
|
//that object should be deleted so that its line will become empty
|
|
877
879
|
//when stringifying resultArray again
|
|
880
|
+
if (typeof target[prop] === 'undefined') {
|
|
881
|
+
return true
|
|
882
|
+
}
|
|
878
883
|
delete target[prop]
|
|
879
884
|
target[isChanged] = true
|
|
880
885
|
target[parent][isChanged] = true
|
|
@@ -952,9 +957,12 @@ export default function parse(input, meta, immutable=true)
|
|
|
952
957
|
if (meta.access && !meta.access(target, prop, 'set')) {
|
|
953
958
|
return undefined
|
|
954
959
|
}
|
|
955
|
-
if (JSONTag.getType(value)==='object' && !value[isProxy]) {
|
|
960
|
+
if (value && JSONTag.getType(value)==='object' && !value[isProxy]) {
|
|
956
961
|
value = getNewValueProxy(value)
|
|
957
962
|
}
|
|
963
|
+
if (target[prop] === value) {
|
|
964
|
+
return true
|
|
965
|
+
}
|
|
958
966
|
target[prop] = value
|
|
959
967
|
target[isChanged] = true
|
|
960
968
|
return true
|
|
@@ -967,6 +975,9 @@ export default function parse(input, meta, immutable=true)
|
|
|
967
975
|
return undefined
|
|
968
976
|
}
|
|
969
977
|
firstParse(target)
|
|
978
|
+
if (typeof target[prop] === 'undefined') {
|
|
979
|
+
return true
|
|
980
|
+
}
|
|
970
981
|
delete target[prop]
|
|
971
982
|
target[isChanged] = true
|
|
972
983
|
return true
|
|
@@ -987,6 +998,7 @@ export default function parse(input, meta, immutable=true)
|
|
|
987
998
|
return undefined
|
|
988
999
|
}
|
|
989
1000
|
firstParse(target)
|
|
1001
|
+
target[isChanged] = true
|
|
990
1002
|
return Object.defineProperty(target, prop, descriptor)
|
|
991
1003
|
},
|
|
992
1004
|
has(target, prop) {
|
|
@@ -1026,6 +1038,9 @@ export default function parse(input, meta, immutable=true)
|
|
|
1026
1038
|
}
|
|
1027
1039
|
|
|
1028
1040
|
const getNewValueProxy = function(value) {
|
|
1041
|
+
if (value === null) {
|
|
1042
|
+
return null
|
|
1043
|
+
}
|
|
1029
1044
|
let index = meta.resultArray.length
|
|
1030
1045
|
meta.resultArray.push('')
|
|
1031
1046
|
value[getIndex] = index
|