@muze-nl/od-jsontag 0.3.2 → 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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/parse.mjs +25 -13
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@muze-nl/od-jsontag",
3
- "version": "0.3.2",
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
@@ -814,13 +814,14 @@ export default function parse(input, meta, immutable=true)
814
814
  }
815
815
  },
816
816
  arrayHandler: {
817
- get(target, prop) {
818
- if (target[prop] instanceof Function) {
819
- if (['copyWithin','fill','pop','push','reverse','shift','sort','splice','unshift'].indexOf(prop)!==-1) {
820
- if (immutable) {
821
- throw new Error('dataspace is immutable')
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
- target[parent][isChanged] = true // incorrect target for isChanged...
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(target[prop])) {
844
- return getArrayProxy(target[prop], target)
842
+ if (Array.isArray(value)) {
843
+ return getArrayProxy(value, target)
845
844
  }
846
- return target[prop]
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
@@ -955,6 +960,9 @@ export default function parse(input, meta, immutable=true)
955
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) {