@muze-nl/od-jsontag 0.2.6 → 0.2.8
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 +17 -18
- package/src/serialize.mjs +16 -7
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@muze-nl/od-jsontag",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
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
|
@@ -825,17 +825,10 @@ export default function parse(input, meta, immutable=true)
|
|
|
825
825
|
},
|
|
826
826
|
handler: {
|
|
827
827
|
get(target, prop, receiver) {
|
|
828
|
-
firstParse(target, receiver)
|
|
829
828
|
switch(prop) {
|
|
830
829
|
case resultSet:
|
|
831
830
|
return meta.resultArray
|
|
832
831
|
break;
|
|
833
|
-
case source:
|
|
834
|
-
if (meta.access && !meta.access(target, prop, 'get')) {
|
|
835
|
-
return undefined
|
|
836
|
-
}
|
|
837
|
-
return target
|
|
838
|
-
break
|
|
839
832
|
case isProxy:
|
|
840
833
|
return true
|
|
841
834
|
break
|
|
@@ -860,6 +853,15 @@ export default function parse(input, meta, immutable=true)
|
|
|
860
853
|
case isChanged:
|
|
861
854
|
return target[isChanged]
|
|
862
855
|
break
|
|
856
|
+
}
|
|
857
|
+
firstParse(target, receiver)
|
|
858
|
+
switch(prop) {
|
|
859
|
+
case source:
|
|
860
|
+
if (meta.access && !meta.access(target, prop, 'get')) {
|
|
861
|
+
return undefined
|
|
862
|
+
}
|
|
863
|
+
return target
|
|
864
|
+
break
|
|
863
865
|
default:
|
|
864
866
|
if (meta.access && !meta.access(target, prop, 'get')) {
|
|
865
867
|
return undefined
|
|
@@ -876,7 +878,6 @@ export default function parse(input, meta, immutable=true)
|
|
|
876
878
|
if (immutable && prop!==resultSet && prop!==source) {
|
|
877
879
|
throw new Error('dataspace is immutable')
|
|
878
880
|
}
|
|
879
|
-
firstParse(target, receiver)
|
|
880
881
|
switch(prop) {
|
|
881
882
|
case isChanged:
|
|
882
883
|
break
|
|
@@ -888,18 +889,16 @@ export default function parse(input, meta, immutable=true)
|
|
|
888
889
|
return true
|
|
889
890
|
break
|
|
890
891
|
case resultSet:
|
|
891
|
-
break
|
|
892
|
-
default:
|
|
893
|
-
if (meta.access && !meta.access(target, prop, 'set')) {
|
|
894
|
-
return undefined
|
|
895
|
-
}
|
|
896
|
-
if (JSONTag.getType(value)==='object' && !value[isProxy]) {
|
|
897
|
-
value = getNewValueProxy(value)
|
|
898
|
-
}
|
|
899
|
-
target[prop] = value
|
|
900
|
-
|
|
901
892
|
break
|
|
902
893
|
}
|
|
894
|
+
firstParse(target, receiver)
|
|
895
|
+
if (meta.access && !meta.access(target, prop, 'set')) {
|
|
896
|
+
return undefined
|
|
897
|
+
}
|
|
898
|
+
if (JSONTag.getType(value)==='object' && !value[isProxy]) {
|
|
899
|
+
value = getNewValueProxy(value)
|
|
900
|
+
}
|
|
901
|
+
target[prop] = value
|
|
903
902
|
target[isChanged] = true
|
|
904
903
|
return true
|
|
905
904
|
},
|
package/src/serialize.mjs
CHANGED
|
@@ -6,6 +6,7 @@ import * as odJSONTag from './jsontag.mjs'
|
|
|
6
6
|
//
|
|
7
7
|
const encoder = new TextEncoder()
|
|
8
8
|
const decoder = new TextDecoder()
|
|
9
|
+
const realJSON = JSON // in case someone redefines JSON as JSONTag later
|
|
9
10
|
|
|
10
11
|
function stringToSAB(strData) {
|
|
11
12
|
const buffer = encoder.encode(strData)
|
|
@@ -16,7 +17,7 @@ function stringToSAB(strData) {
|
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
export default function serialize(value, options={}) {
|
|
19
|
-
let resultArray =
|
|
20
|
+
let resultArray = false
|
|
20
21
|
let references = new WeakMap()
|
|
21
22
|
|
|
22
23
|
if (options.meta) {
|
|
@@ -26,6 +27,15 @@ export default function serialize(value, options={}) {
|
|
|
26
27
|
if (!options.meta.index.id) {
|
|
27
28
|
options.meta.index.id = new Map()
|
|
28
29
|
}
|
|
30
|
+
if (options.meta.resultArray) {
|
|
31
|
+
resultArray = options.meta.resultArray
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (!resultArray) {
|
|
35
|
+
resultArray = value[resultSet]
|
|
36
|
+
}
|
|
37
|
+
if (!resultArray) {
|
|
38
|
+
resultArray = []
|
|
29
39
|
}
|
|
30
40
|
|
|
31
41
|
function stringifyValue(value, inarray=false, current) {
|
|
@@ -52,7 +62,7 @@ export default function serialize(value, options={}) {
|
|
|
52
62
|
if (odJSONTag.isNull(value)) {
|
|
53
63
|
value = 'null'
|
|
54
64
|
} else {
|
|
55
|
-
value =
|
|
65
|
+
value = realJSON.stringify(''+value)
|
|
56
66
|
}
|
|
57
67
|
prop = typeString + value
|
|
58
68
|
break
|
|
@@ -75,7 +85,7 @@ export default function serialize(value, options={}) {
|
|
|
75
85
|
if (odJSONTag.isNull(value)) {
|
|
76
86
|
value = 'null'
|
|
77
87
|
} else {
|
|
78
|
-
value =
|
|
88
|
+
value = realJSON.stringify(value)
|
|
79
89
|
}
|
|
80
90
|
prop = typeString + value
|
|
81
91
|
break
|
|
@@ -129,7 +139,7 @@ export default function serialize(value, options={}) {
|
|
|
129
139
|
let value = object[key]
|
|
130
140
|
let prop = stringifyValue(value, false, current)
|
|
131
141
|
let enumerable = object.propertyIsEnumerable(key) ? '' : '#'
|
|
132
|
-
props.push(enumerable+
|
|
142
|
+
props.push(enumerable+realJSON.stringify(key)+':'+prop) //FIXME: how does key get escaped?
|
|
133
143
|
}
|
|
134
144
|
result = odJSONTag.getTypeString(object)+'{'+props.join(',')+'}'
|
|
135
145
|
return result
|
|
@@ -149,9 +159,7 @@ export default function serialize(value, options={}) {
|
|
|
149
159
|
return u8arr
|
|
150
160
|
}
|
|
151
161
|
|
|
152
|
-
if (value[resultSet]) {
|
|
153
|
-
resultArray = value[resultSet].slice()
|
|
154
|
-
} else {
|
|
162
|
+
if (!value[resultSet]) {
|
|
155
163
|
resultArray.push(value)
|
|
156
164
|
}
|
|
157
165
|
let currentSource = 0
|
|
@@ -185,6 +193,7 @@ export default function serialize(value, options={}) {
|
|
|
185
193
|
} else {
|
|
186
194
|
skipCount++
|
|
187
195
|
}
|
|
196
|
+
|
|
188
197
|
currentSource++
|
|
189
198
|
}
|
|
190
199
|
let arr = result.map(encode)
|