@muze-nl/od-jsontag 0.3.2 → 0.3.4
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 +2 -2
- package/src/parse.mjs +38 -23
- package/src/symbols.mjs +1 -0
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.4",
|
|
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>",
|
|
@@ -34,6 +34,6 @@
|
|
|
34
34
|
"LICENSE"
|
|
35
35
|
],
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@muze-nl/jsontag": "^0.9.
|
|
37
|
+
"@muze-nl/jsontag": "^0.9.11"
|
|
38
38
|
}
|
|
39
39
|
}
|
package/src/parse.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import JSONTag from '@muze-nl/jsontag';
|
|
2
2
|
import Null from '@muze-nl/jsontag/src/lib/Null.mjs'
|
|
3
3
|
import serialize from './serialize.mjs'
|
|
4
|
-
import {source,isProxy,proxyType,getBuffer,getIndex,isChanged,isParsed,position,parent,resultSet} from './symbols.mjs'
|
|
4
|
+
import {source,isProxy,proxyType,getBuffer,getIndex,isChanged,isParsed,isReceived,position,parent,resultSet} from './symbols.mjs'
|
|
5
5
|
|
|
6
6
|
const decoder = new TextDecoder()
|
|
7
7
|
const encoder = new TextEncoder()
|
|
@@ -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
|
|
@@ -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) {
|
|
@@ -1006,16 +1018,19 @@ export default function parse(input, meta, immutable=true)
|
|
|
1006
1018
|
if (!target[isParsed]) {
|
|
1007
1019
|
parseValue(target[position], target)
|
|
1008
1020
|
target[isParsed] = true
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1021
|
+
}
|
|
1022
|
+
if (receiver && !target[isReceived]) {
|
|
1023
|
+
//FIXME: this breaks on a Proxy without receiver param
|
|
1024
|
+
//e.g. odJSONTag and a call to ownKeys triggering the first parse
|
|
1025
|
+
let tag = JSONTag.getType(target)
|
|
1026
|
+
if (tag) {
|
|
1027
|
+
JSONTag.setType(receiver, tag)
|
|
1028
|
+
}
|
|
1029
|
+
let attributes = JSONTag.getAttributes(target)
|
|
1030
|
+
if (attributes) {
|
|
1031
|
+
JSONTag.setAttributes(receiver, attributes)
|
|
1018
1032
|
}
|
|
1033
|
+
target[isReceived] = true
|
|
1019
1034
|
}
|
|
1020
1035
|
}
|
|
1021
1036
|
|
package/src/symbols.mjs
CHANGED
|
@@ -5,6 +5,7 @@ export const getBuffer = Symbol('getBuffer')
|
|
|
5
5
|
export const getIndex = Symbol('getIndex')
|
|
6
6
|
export const isChanged = Symbol('isChanged')
|
|
7
7
|
export const isParsed = Symbol('isParsed')
|
|
8
|
+
export const isReceived = Symbol('isReceived')
|
|
8
9
|
export const getString = Symbol('getString')
|
|
9
10
|
export const position = Symbol('position')
|
|
10
11
|
export const parent = Symbol('parent')
|