socket-function 1.1.20 → 1.1.22
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/hot/HotReloadController.ts +1 -1
- package/package.json +1 -1
- package/src/JSONLACKS/JSONLACKS.ts +19 -29
package/package.json
CHANGED
|
@@ -48,41 +48,34 @@ export class JSONLACKS {
|
|
|
48
48
|
public static EXTENDED_PARSER = false;
|
|
49
49
|
public static IGNORE_MISSING_REFERENCES = false;
|
|
50
50
|
|
|
51
|
-
@measureFnc
|
|
52
51
|
public static stringify(obj: unknown, config?: JSONLACKS_StringifyConfig): string {
|
|
53
52
|
let serialized = JSONLACKS.escapeSpecialObjects(obj, config);
|
|
54
|
-
return
|
|
53
|
+
return JSON.stringify(serialized);
|
|
55
54
|
}
|
|
56
55
|
/** Is useful when serializing an array to a file with one object per line */
|
|
57
|
-
@measureFnc
|
|
58
56
|
public static async stringifyFile(obj: unknown[], config?: JSONLACKS_StringifyConfig): Promise<Buffer> {
|
|
59
57
|
let serialized = JSONLACKS.escapeSpecialObjects(obj, config) as unknown[];
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return Buffer.concat(buffers);
|
|
69
|
-
});
|
|
58
|
+
let buffers: Buffer[] = [];
|
|
59
|
+
for (let i = 0; i < serialized.length; i += SERIALIZE_OBJECT_BATCH_COUNT) {
|
|
60
|
+
let str = serialized.slice(i, i + SERIALIZE_OBJECT_BATCH_COUNT).map(x => JSON.stringify(x) + "\n").join("");
|
|
61
|
+
buffers.push(Buffer.from(str));
|
|
62
|
+
await delay("immediate");
|
|
63
|
+
}
|
|
64
|
+
// Break up into chunks, as string => Buffer i
|
|
65
|
+
return Buffer.concat(buffers);
|
|
70
66
|
}
|
|
71
67
|
public static stringifyFileSync(obj: unknown[], config?: JSONLACKS_StringifyConfig): Buffer {
|
|
72
68
|
let serialized = JSONLACKS.escapeSpecialObjects(obj, config) as unknown[];
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return Buffer.concat(buffers);
|
|
81
|
-
});
|
|
69
|
+
let buffers: Buffer[] = [];
|
|
70
|
+
for (let i = 0; i < serialized.length; i += SERIALIZE_OBJECT_BATCH_COUNT) {
|
|
71
|
+
let str = serialized.slice(i, i + SERIALIZE_OBJECT_BATCH_COUNT).map(x => JSON.stringify(x) + "\n").join("");
|
|
72
|
+
buffers.push(Buffer.from(str));
|
|
73
|
+
}
|
|
74
|
+
// Break up into chunks, as string => Buffer i
|
|
75
|
+
return Buffer.concat(buffers);
|
|
82
76
|
}
|
|
83
77
|
// TIMING: Seems to be about 40X slower than JSON.parse unless extended is set to false,
|
|
84
78
|
// then it is about 2X slower (although it depends on the size and complexity of the objects!)
|
|
85
|
-
@measureFnc
|
|
86
79
|
public static parse<T>(text: string, config?: JSONLACKS_ParseConfig, hydrateState?: HydrateState): T {
|
|
87
80
|
// Empty string should parse to SOMETHING
|
|
88
81
|
if (text.trim() === "") return undefined as T;
|
|
@@ -91,18 +84,17 @@ export class JSONLACKS {
|
|
|
91
84
|
let extendedParsing = config?.extended ?? JSONLACKS.EXTENDED_PARSER;
|
|
92
85
|
|
|
93
86
|
if (extendedParsing) {
|
|
94
|
-
obj =
|
|
87
|
+
obj = parser.parse(text);
|
|
95
88
|
} else {
|
|
96
89
|
try {
|
|
97
|
-
obj =
|
|
90
|
+
obj = JSON.parse(text);
|
|
98
91
|
} catch {
|
|
99
|
-
obj =
|
|
92
|
+
obj = parser.parse(text);
|
|
100
93
|
}
|
|
101
94
|
}
|
|
102
95
|
|
|
103
96
|
return JSONLACKS.hydrateSpecialObjects(obj, hydrateState, config) as T;
|
|
104
97
|
}
|
|
105
|
-
@measureFnc
|
|
106
98
|
public static async parseLines<T>(buffer: Buffer, config?: JSONLACKS_ParseConfig): Promise<T[]> {
|
|
107
99
|
let output: T[] = [];
|
|
108
100
|
let pos = 0;
|
|
@@ -176,7 +168,6 @@ export class JSONLACKS {
|
|
|
176
168
|
return output;
|
|
177
169
|
}
|
|
178
170
|
|
|
179
|
-
@measureFnc
|
|
180
171
|
private static escapeSpecialObjects(obj: unknown, config?: JSONLACKS_StringifyConfig): unknown {
|
|
181
172
|
// I think iterating twice for references is the fastest way to do it?
|
|
182
173
|
let objects = new Set<unknown>();
|
|
@@ -265,7 +256,6 @@ export class JSONLACKS {
|
|
|
265
256
|
}
|
|
266
257
|
}
|
|
267
258
|
|
|
268
|
-
@measureFnc
|
|
269
259
|
private static hydrateSpecialObjects(obj: unknown, hydrateState?: HydrateState, config?: JSONLACKS_ParseConfig): unknown {
|
|
270
260
|
let references = hydrateState?.references || new Map<string, unknown>();
|
|
271
261
|
let visited = hydrateState?.visited || new Set<unknown>();
|