Skip to content

Commit da45a41

Browse files
refactor(json): enhance serialization and deserialization utilities
1 parent 279426f commit da45a41

File tree

2 files changed

+31
-26
lines changed

2 files changed

+31
-26
lines changed

package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@
3131
"workspaces": [
3232
"packages/operators",
3333
"packages/observables",
34-
"packages/playground",
35-
"packages/poc"
34+
"packages/playground"
3635
],
3736
"devDependencies": {
3837
"@commitlint/config-conventional": "19.6.0",
@@ -64,4 +63,4 @@
6463
"dependencies": {
6564
"@edge-runtime/vm": "^5.0.0"
6665
}
67-
}
66+
}

packages/operators/src/json.js

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,6 @@ import { concatAll, concatMap, from, map, Observable, of, toArray } from 'rxjs';
33
import { createAsyncReplacer, createSyncReplacer } from './json/replacer.js';
44
import { createAsyncReviver, createSyncReviver } from './json/reviver.js';
55

6-
export const serialize = (asyncTransforms, syncTransforms) => source =>
7-
source.pipe(
8-
traverse(createAsyncReplacer(asyncTransforms)),
9-
toJSONString(createSyncReplacer(syncTransforms))
10-
//
11-
);
12-
13-
export const deserialize = (asyncTransforms, syncTransforms) => source =>
14-
source.pipe(
15-
fromJSONString(createSyncReviver(syncTransforms)),
16-
traverse(createAsyncReviver(asyncTransforms))
17-
//
18-
);
19-
20-
const traverse = transforms => source =>
21-
source.pipe(
22-
concatMap(data => of(data).pipe(getOperator(data)(transforms))),
23-
transform(transforms)
24-
//
25-
);
26-
27-
const getOperator = data => traverseInstructions[data.constructor] || (() => source => source);
28-
296
const traverseInstructions = {
307
[Object]: transforms => source =>
318
source.pipe(
@@ -53,6 +30,35 @@ const traverseInstructions = {
5330
)
5431
};
5532

33+
export const serialize = (asyncTransforms, syncTransforms) => source =>
34+
source.pipe(
35+
traverse(createAsyncReplacer(asyncTransforms)),
36+
stringify(syncTransforms)
37+
//
38+
);
39+
40+
export const deserialize = (asyncTransforms, syncTransforms) => source =>
41+
source.pipe(
42+
parse(syncTransforms),
43+
traverse(createAsyncReviver(asyncTransforms))
44+
//
45+
);
46+
47+
export const stringify = syncTransforms => source =>
48+
source.pipe(toJSONString(createSyncReplacer(syncTransforms)));
49+
50+
export const parse = syncTransforms => source =>
51+
source.pipe(fromJSONString(createSyncReviver(syncTransforms)));
52+
53+
const traverse = transforms => source =>
54+
source.pipe(
55+
concatMap(data => of(data).pipe(getOperator(data)(transforms))),
56+
transform(transforms)
57+
//
58+
);
59+
60+
const getOperator = data => traverseInstructions[data.constructor] || (() => source => source);
61+
5662
const transform = transforms => source =>
5763
source.pipe(concatMap(data => of(data).pipe(findTransform(transforms, data).handler())));
5864

0 commit comments

Comments
 (0)