@weborigami/async-tree 0.0.45 → 0.0.47
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/index.ts +18 -1
- package/main.js +4 -5
- package/package.json +4 -4
- package/src/BrowserFileTree.js +1 -1
- package/src/DeepMapTree.js +1 -1
- package/src/DeepObjectTree.js +1 -2
- package/src/DeferredTree.js +22 -9
- package/src/FileTree.js +24 -20
- package/src/FunctionTree.js +0 -4
- package/src/MapTree.js +1 -1
- package/src/ObjectTree.js +1 -1
- package/src/SetTree.js +1 -1
- package/src/SiteTree.js +1 -6
- package/src/Tree.d.ts +2 -1
- package/src/Tree.js +56 -45
- package/src/internal.js +15 -0
- package/src/keysJson.js +1 -1
- package/src/operations/cache.js +9 -5
- package/src/operations/mergeDeep.js +1 -1
- package/src/symbols.js +1 -0
- package/src/transforms/{cachedKeyMaps.js → cachedKeyFunctions.js} +10 -10
- package/src/transforms/groupBy.js +4 -4
- package/src/transforms/{keyMapsForExtensions.js → keyFunctionsForExtensions.js} +4 -4
- package/src/transforms/map.js +29 -28
- package/src/transforms/regExpKeys.js +3 -2
- package/src/transforms/sort.js +4 -1
- package/src/transforms/sortBy.js +4 -1
- package/src/utilities.d.ts +3 -1
- package/src/utilities.js +37 -9
- package/test/BrowserFileTree.test.js +1 -1
- package/test/DeepObjectTree.test.js +1 -2
- package/test/DeferredTree.test.js +1 -2
- package/test/FileTree.test.js +1 -1
- package/test/FunctionTree.test.js +0 -6
- package/test/ObjectTree.test.js +1 -2
- package/test/SetTree.test.js +1 -1
- package/test/SiteTree.test.js +1 -1
- package/test/Tree.test.js +12 -22
- package/test/operations/cache.test.js +1 -2
- package/test/operations/merge.test.js +1 -1
- package/test/operations/mergeDeep.test.js +1 -2
- package/test/transforms/cachedKeyMaps.test.js +13 -13
- package/test/transforms/groupBy.test.js +1 -1
- package/test/transforms/keyMapsForExtensions.test.js +20 -21
- package/test/transforms/map.test.js +36 -41
- package/test/transforms/regExpKeys.test.js +1 -2
- package/test/transforms/sort.test.js +1 -1
- package/test/transforms/sortBy.test.js +1 -1
- package/test/transforms/sortNatural.test.js +1 -1
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
import assert from "node:assert";
|
|
2
2
|
import { describe, test } from "node:test";
|
|
3
|
-
import DeepObjectTree from "../../src/DeepObjectTree.js";
|
|
4
3
|
import FunctionTree from "../../src/FunctionTree.js";
|
|
5
|
-
import ObjectTree from "../../src/
|
|
6
|
-
import * as Tree from "../../src/Tree.js";
|
|
4
|
+
import { DeepObjectTree, ObjectTree, Tree } from "../../src/internal.js";
|
|
7
5
|
import map from "../../src/transforms/map.js";
|
|
8
6
|
|
|
9
7
|
describe("map", () => {
|
|
10
|
-
test("returns identity graph if no
|
|
11
|
-
const tree =
|
|
8
|
+
test("returns identity graph if no key or value", async () => {
|
|
9
|
+
const tree = {
|
|
12
10
|
a: "letter a",
|
|
13
11
|
b: "letter b",
|
|
14
|
-
}
|
|
15
|
-
const mapped = map(
|
|
12
|
+
};
|
|
13
|
+
const mapped = map()(tree);
|
|
16
14
|
assert.deepEqual(await Tree.plain(mapped), {
|
|
17
15
|
a: "letter a",
|
|
18
16
|
b: "letter b",
|
|
@@ -26,7 +24,7 @@ describe("map", () => {
|
|
|
26
24
|
c: undefined, // Won't be mapped
|
|
27
25
|
});
|
|
28
26
|
const uppercaseValues = map({
|
|
29
|
-
|
|
27
|
+
value: (sourceValue, sourceKey, innerTree) => {
|
|
30
28
|
assert(sourceKey === "a" || sourceKey === "b");
|
|
31
29
|
assert.equal(innerTree, tree);
|
|
32
30
|
return sourceValue.toUpperCase();
|
|
@@ -41,13 +39,12 @@ describe("map", () => {
|
|
|
41
39
|
});
|
|
42
40
|
|
|
43
41
|
test("interprets a single function argument as the value function", async () => {
|
|
44
|
-
const tree =
|
|
42
|
+
const tree = {
|
|
45
43
|
a: "letter a",
|
|
46
44
|
b: "letter b",
|
|
47
|
-
}
|
|
48
|
-
const uppercaseValues = map((sourceValue, sourceKey,
|
|
45
|
+
};
|
|
46
|
+
const uppercaseValues = map((sourceValue, sourceKey, tree) => {
|
|
49
47
|
assert(sourceKey === "a" || sourceKey === "b");
|
|
50
|
-
assert.equal(innerTree, tree);
|
|
51
48
|
return sourceValue.toUpperCase();
|
|
52
49
|
});
|
|
53
50
|
const mapped = uppercaseValues(tree);
|
|
@@ -57,14 +54,14 @@ describe("map", () => {
|
|
|
57
54
|
});
|
|
58
55
|
});
|
|
59
56
|
|
|
60
|
-
test("maps keys using
|
|
61
|
-
const tree =
|
|
57
|
+
test("maps keys using key and inverseKey", async () => {
|
|
58
|
+
const tree = {
|
|
62
59
|
a: "letter a",
|
|
63
60
|
b: "letter b",
|
|
64
|
-
}
|
|
61
|
+
};
|
|
65
62
|
const doubleKeys = map({
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
key: async (sourceKey, tree) => `_${sourceKey}`,
|
|
64
|
+
inverseKey: async (resultKey, tree) => resultKey.slice(1),
|
|
68
65
|
});
|
|
69
66
|
const mapped = doubleKeys(tree);
|
|
70
67
|
assert.deepEqual(await Tree.plain(mapped), {
|
|
@@ -74,15 +71,14 @@ describe("map", () => {
|
|
|
74
71
|
});
|
|
75
72
|
|
|
76
73
|
test("maps keys and values", async () => {
|
|
77
|
-
const tree =
|
|
74
|
+
const tree = {
|
|
78
75
|
a: "letter a",
|
|
79
76
|
b: "letter b",
|
|
80
|
-
}
|
|
77
|
+
};
|
|
81
78
|
const doubleKeysUppercaseValues = map({
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
sourceValue.toUpperCase(),
|
|
79
|
+
key: async (sourceKey, tree) => `_${sourceKey}`,
|
|
80
|
+
inverseKey: async (resultKey, tree) => resultKey.slice(1),
|
|
81
|
+
value: async (sourceValue, sourceKey, tree) => sourceValue.toUpperCase(),
|
|
86
82
|
});
|
|
87
83
|
const mapped = doubleKeysUppercaseValues(tree);
|
|
88
84
|
assert.deepEqual(await Tree.plain(mapped), {
|
|
@@ -92,16 +88,16 @@ describe("map", () => {
|
|
|
92
88
|
});
|
|
93
89
|
|
|
94
90
|
test("a shallow map is applied to async subtrees too", async () => {
|
|
95
|
-
const tree =
|
|
91
|
+
const tree = {
|
|
96
92
|
a: "letter a",
|
|
97
93
|
more: {
|
|
98
94
|
b: "letter b",
|
|
99
95
|
},
|
|
100
|
-
}
|
|
96
|
+
};
|
|
101
97
|
const doubleKeys = map({
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
98
|
+
key: async (sourceKey, tree) => `_${sourceKey}`,
|
|
99
|
+
inverseKey: async (resultKey, tree) => resultKey.slice(1),
|
|
100
|
+
value: async (sourceValue, sourceKey, tree) => sourceKey,
|
|
105
101
|
});
|
|
106
102
|
const mapped = doubleKeys(tree);
|
|
107
103
|
assert.deepEqual(await Tree.plain(mapped), {
|
|
@@ -110,14 +106,14 @@ describe("map", () => {
|
|
|
110
106
|
});
|
|
111
107
|
});
|
|
112
108
|
|
|
113
|
-
test("
|
|
109
|
+
test("value can provide a default key and inverse key functions", async () => {
|
|
114
110
|
const uppercase = (s) => s.toUpperCase();
|
|
115
|
-
uppercase.
|
|
116
|
-
uppercase.
|
|
117
|
-
const tree =
|
|
111
|
+
uppercase.key = (sourceKey) => `_${sourceKey}`;
|
|
112
|
+
uppercase.inverseKey = (resultKey) => resultKey.slice(1);
|
|
113
|
+
const tree = {
|
|
118
114
|
a: "letter a",
|
|
119
115
|
b: "letter b",
|
|
120
|
-
}
|
|
116
|
+
};
|
|
121
117
|
const mapped = map(uppercase)(tree);
|
|
122
118
|
assert.deepEqual(await Tree.plain(mapped), {
|
|
123
119
|
_a: "LETTER A",
|
|
@@ -134,7 +130,7 @@ describe("map", () => {
|
|
|
134
130
|
});
|
|
135
131
|
const uppercaseValues = map({
|
|
136
132
|
deep: true,
|
|
137
|
-
|
|
133
|
+
value: (sourceValue, sourceKey, tree) => sourceValue.toUpperCase(),
|
|
138
134
|
});
|
|
139
135
|
const mapped = uppercaseValues(tree);
|
|
140
136
|
assert.deepEqual(await Tree.plain(mapped), {
|
|
@@ -154,8 +150,8 @@ describe("map", () => {
|
|
|
154
150
|
});
|
|
155
151
|
const doubleKeys = map({
|
|
156
152
|
deep: true,
|
|
157
|
-
|
|
158
|
-
|
|
153
|
+
key: async (sourceKey, tree) => `_${sourceKey}`,
|
|
154
|
+
inverseKey: async (resultKey, tree) => resultKey.slice(1),
|
|
159
155
|
});
|
|
160
156
|
const mapped = doubleKeys(tree);
|
|
161
157
|
assert.deepEqual(await Tree.plain(mapped), {
|
|
@@ -175,10 +171,9 @@ describe("map", () => {
|
|
|
175
171
|
});
|
|
176
172
|
const doubleKeysUppercaseValues = map({
|
|
177
173
|
deep: true,
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
sourceValue.toUpperCase(),
|
|
174
|
+
key: async (sourceKey, tree) => `_${sourceKey}`,
|
|
175
|
+
inverseKey: async (resultKey, tree) => resultKey.slice(1),
|
|
176
|
+
value: async (sourceValue, sourceKey, tree) => sourceValue.toUpperCase(),
|
|
182
177
|
});
|
|
183
178
|
const mapped = doubleKeysUppercaseValues(tree);
|
|
184
179
|
assert.deepEqual(await Tree.plain(mapped), {
|
|
@@ -196,7 +191,7 @@ describe("map", () => {
|
|
|
196
191
|
}, ["a", "b", "c"]);
|
|
197
192
|
const mapped = map({
|
|
198
193
|
needsSourceValue: false,
|
|
199
|
-
|
|
194
|
+
value: () => "X",
|
|
200
195
|
})(tree);
|
|
201
196
|
assert.deepEqual(await Tree.plain(mapped), {
|
|
202
197
|
a: "X",
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import assert from "node:assert";
|
|
2
2
|
import { describe, test } from "node:test";
|
|
3
|
-
import DeepObjectTree from "../../src/
|
|
4
|
-
import * as Tree from "../../src/Tree.js";
|
|
3
|
+
import { DeepObjectTree, Tree } from "../../src/internal.js";
|
|
5
4
|
import regExpKeys from "../../src/transforms/regExpKeys.js";
|
|
6
5
|
|
|
7
6
|
describe("regExpKeys", () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import assert from "node:assert";
|
|
2
2
|
import { describe, test } from "node:test";
|
|
3
|
-
import
|
|
3
|
+
import { Tree } from "../../src/internal.js";
|
|
4
4
|
import sortBy from "../../src/transforms/sortBy.js";
|
|
5
5
|
|
|
6
6
|
describe("sortBy transform", () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import assert from "node:assert";
|
|
2
2
|
import { describe, test } from "node:test";
|
|
3
|
-
import
|
|
3
|
+
import { Tree } from "../../src/internal.js";
|
|
4
4
|
import sortNatural from "../../src/transforms/sortNatural.js";
|
|
5
5
|
|
|
6
6
|
describe("sortNatural transform", () => {
|