@muze-nl/simplystore 0.6.1 → 0.6.2

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/fastParse.mjs +44 -37
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@muze-nl/simplystore",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "main": "src/server.mjs",
5
5
  "type": "module",
6
6
  "scripts": {
package/src/fastParse.mjs CHANGED
@@ -599,7 +599,12 @@ export default function parse(input, meta, immutable=true)
599
599
  next(':')
600
600
  val = value()
601
601
  if (!enumerable) {
602
- Object.defineProperty(object,key, { value: val})
602
+ Object.defineProperty(object, key, {
603
+ configurable: true, //important, must be true, otherwise Proxies cannot use it
604
+ writable: true, // handle immutability in the Proxy traps
605
+ enumerable: false,
606
+ value: val
607
+ })
603
608
  } else {
604
609
  object[key] = val
605
610
  }
@@ -679,7 +684,6 @@ export default function parse(input, meta, immutable=true)
679
684
  return true
680
685
  } else {
681
686
  if (Array.isArray(target[prop])) {
682
- // console.log('proxying array with newArrayHandler')
683
687
  return new Proxy(target[prop], handlers.newArrayHandler)
684
688
  }
685
689
  return target[prop]
@@ -720,7 +724,6 @@ export default function parse(input, meta, immutable=true)
720
724
  break
721
725
  default:
722
726
  if (Array.isArray(target[prop])) {
723
- // console.log('proxying array with newArrayHandler')
724
727
  return new Proxy(target[prop], handlers.newArrayHandler)
725
728
  }
726
729
  return target[prop]
@@ -742,27 +745,22 @@ export default function parse(input, meta, immutable=true)
742
745
  if (immutable) {
743
746
  throw new Error('dataspace is immutable')
744
747
  }
745
- // console.log('getting array function '+prop)
746
748
  }
747
749
  return (...args) => {
748
- // console.log('calling array function '+prop)
749
750
  args = args.map(arg => {
750
751
  if (JSONTag.getType(arg)==='object' && !arg[isProxy]) {
751
- console.log('proxying arg')
752
752
  arg = getNewValueProxy(arg)
753
753
  }
754
754
  return arg
755
755
  })
756
756
  target[parent][isChanged] = true // incorrect target for isChanged...
757
757
  let result = target[prop].apply(target, args)
758
- // console.log('target',target,result)
759
758
  return result
760
759
  }
761
760
  } else if (prop===isChanged) {
762
761
  return target[parent][isChanged]
763
762
  } else {
764
- if (!immutable && Array.isArray(target[prop])) {
765
- // console.log('proxying array with arrayHandler')
763
+ if (Array.isArray(target[prop])) {
766
764
  target[prop][parent] = target[parent]
767
765
  return new Proxy(target[prop], handlers.arrayHandler)
768
766
  }
@@ -790,15 +788,6 @@ export default function parse(input, meta, immutable=true)
790
788
  delete target[prop]
791
789
  target[parent][isChanged] = true
792
790
  return true
793
- },
794
- ownKeys: (target) => {
795
- return Reflect.ownKeys(target)
796
- },
797
- getOwnPropertyDescriptor: (target, prop) => {
798
- return {
799
- enumerable: true,
800
- configurable: true
801
- }
802
791
  }
803
792
  },
804
793
  handler: {
@@ -832,8 +821,7 @@ export default function parse(input, meta, immutable=true)
832
821
  return target[isChanged]
833
822
  break
834
823
  default:
835
- if (!immutable && Array.isArray(target[prop])) {
836
- // console.log('proxying array with arrayHandler')
824
+ if (Array.isArray(target[prop])) {
837
825
  target[prop][parent] = target
838
826
  return new Proxy(target[prop], handlers.arrayHandler)
839
827
  }
@@ -842,32 +830,51 @@ export default function parse(input, meta, immutable=true)
842
830
  }
843
831
  },
844
832
  set(target, prop, value) {
845
- if (!immutable) {
846
- firstParse(target)
847
- if (prop!==isChanged) {
848
- if (JSONTag.getType(value)==='object' && !value[isProxy]) {
849
- value = getNewValueProxy(value)
850
- }
851
- target[prop] = value
833
+ if (immutable) {
834
+ throw new Error('dataspace is immutable')
835
+ }
836
+ firstParse(target)
837
+ if (prop!==isChanged) {
838
+ if (JSONTag.getType(value)==='object' && !value[isProxy]) {
839
+ value = getNewValueProxy(value)
852
840
  }
853
- target[isChanged] = true
854
- return true
841
+ target[prop] = value
855
842
  }
843
+ target[isChanged] = true
844
+ return true
856
845
  },
857
- deleteProperty: (target, prop) => {
858
- if (!immutable) {
859
- firstParse(target)
860
- delete target[prop]
861
- target[isChanged] = true
862
- return true
846
+ deleteProperty(target, prop) {
847
+ if (immutable) {
848
+ throw new Error('dataspace is immutable')
863
849
  }
850
+ firstParse(target)
851
+ delete target[prop]
852
+ target[isChanged] = true
853
+ return true
864
854
  },
865
- 'ownKeys': (target) => {
855
+ ownKeys(target) {
866
856
  firstParse(target)
867
857
  return Reflect.ownKeys(target)
858
+ },
859
+ getOwnPropertyDescriptor(target, prop) {
860
+ firstParse(target)
861
+ return Reflect.getOwnPropertyDescriptor(target, prop)
862
+ },
863
+ defineProperty(target, prop, descriptor) {
864
+ if (immutable) {
865
+ throw new Error('dataspace is immutable')
866
+ }
867
+ firstParse(target)
868
+ Object.defineProperty(target, prop, descriptor)
869
+ },
870
+ has(target, prop) {
871
+ firstParse()
872
+ return prop in target
873
+ },
874
+ setPrototypeOf(target,proto) {
875
+ throw new Error('changing prototypes is not supported')
868
876
  }
869
877
  }
870
-
871
878
  }
872
879
 
873
880
  const firstParse = function(target) {