@weborigami/async-tree 0.0.53 → 0.0.54
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
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weborigami/async-tree",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.54",
|
|
4
4
|
"description": "Asynchronous tree drivers based on standard JavaScript classes",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./main.js",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"typescript": "5.4.5"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@weborigami/types": "0.0.
|
|
14
|
+
"@weborigami/types": "0.0.54"
|
|
15
15
|
},
|
|
16
16
|
"scripts": {
|
|
17
17
|
"test": "node --test --test-reporter=spec",
|
|
@@ -16,10 +16,11 @@ export default function deepMerge(...sources) {
|
|
|
16
16
|
async get(key) {
|
|
17
17
|
const subtrees = [];
|
|
18
18
|
|
|
19
|
-
for
|
|
20
|
-
|
|
19
|
+
// Check trees for the indicated key in reverse order.
|
|
20
|
+
for (let index = trees.length - 1; index >= 0; index--) {
|
|
21
|
+
const value = await trees[index].get(key);
|
|
21
22
|
if (Tree.isAsyncTree(value)) {
|
|
22
|
-
subtrees.
|
|
23
|
+
subtrees.unshift(value);
|
|
23
24
|
} else if (value !== undefined) {
|
|
24
25
|
return value;
|
|
25
26
|
}
|
|
@@ -29,8 +30,9 @@ export default function deepMerge(...sources) {
|
|
|
29
30
|
},
|
|
30
31
|
|
|
31
32
|
async isKeyForSubtree(key) {
|
|
32
|
-
for
|
|
33
|
-
|
|
33
|
+
// Check trees for the indicated key in reverse order.
|
|
34
|
+
for (let index = trees.length - 1; index >= 0; index--) {
|
|
35
|
+
if (await Tree.isKeyForSubtree(trees[index], key)) {
|
|
34
36
|
return true;
|
|
35
37
|
}
|
|
36
38
|
}
|
|
@@ -39,6 +41,7 @@ export default function deepMerge(...sources) {
|
|
|
39
41
|
|
|
40
42
|
async keys() {
|
|
41
43
|
const keys = new Set();
|
|
44
|
+
// Collect keys in the order the trees were provided.
|
|
42
45
|
for (const tree of trees) {
|
|
43
46
|
for (const key of await tree.keys()) {
|
|
44
47
|
keys.add(key);
|
package/src/operations/merge.js
CHANGED
|
@@ -20,8 +20,9 @@ export default function merge(...sources) {
|
|
|
20
20
|
description: "merge",
|
|
21
21
|
|
|
22
22
|
async get(key) {
|
|
23
|
-
for
|
|
24
|
-
|
|
23
|
+
// Check trees for the indicated key in reverse order.
|
|
24
|
+
for (let index = trees.length - 1; index >= 0; index--) {
|
|
25
|
+
const value = await trees[index].get(key);
|
|
25
26
|
if (value !== undefined) {
|
|
26
27
|
return value;
|
|
27
28
|
}
|
|
@@ -30,8 +31,9 @@ export default function merge(...sources) {
|
|
|
30
31
|
},
|
|
31
32
|
|
|
32
33
|
async isKeyForSubtree(key) {
|
|
33
|
-
for
|
|
34
|
-
|
|
34
|
+
// Check trees for the indicated key in reverse order.
|
|
35
|
+
for (let index = trees.length - 1; index >= 0; index--) {
|
|
36
|
+
if (await Tree.isKeyForSubtree(trees[index], key)) {
|
|
35
37
|
return true;
|
|
36
38
|
}
|
|
37
39
|
}
|
|
@@ -40,6 +42,7 @@ export default function merge(...sources) {
|
|
|
40
42
|
|
|
41
43
|
async keys() {
|
|
42
44
|
const keys = new Set();
|
|
45
|
+
// Collect keys in the order the trees were provided.
|
|
43
46
|
for (const tree of trees) {
|
|
44
47
|
for (const key of await tree.keys()) {
|
|
45
48
|
keys.add(key);
|
|
@@ -8,7 +8,7 @@ describe("mergeDeep", () => {
|
|
|
8
8
|
const fixture = mergeDeep(
|
|
9
9
|
new DeepObjectTree({
|
|
10
10
|
a: {
|
|
11
|
-
b:
|
|
11
|
+
b: 0, // Will be obscured by `b` below
|
|
12
12
|
c: {
|
|
13
13
|
d: 2,
|
|
14
14
|
},
|
|
@@ -16,7 +16,7 @@ describe("mergeDeep", () => {
|
|
|
16
16
|
}),
|
|
17
17
|
new DeepObjectTree({
|
|
18
18
|
a: {
|
|
19
|
-
b:
|
|
19
|
+
b: 1,
|
|
20
20
|
c: {
|
|
21
21
|
e: 3,
|
|
22
22
|
},
|
|
@@ -6,34 +6,34 @@ import merge from "../../src/operations/merge.js";
|
|
|
6
6
|
describe("merge", () => {
|
|
7
7
|
test("performs a shallow merge", async () => {
|
|
8
8
|
const fixture = merge(
|
|
9
|
-
|
|
9
|
+
{
|
|
10
10
|
a: 1,
|
|
11
|
+
// Will be obscured by `b` that follows
|
|
11
12
|
b: {
|
|
12
13
|
c: 2,
|
|
13
14
|
},
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
// Will be obscured by `b` above
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
17
|
b: {
|
|
18
18
|
d: 3,
|
|
19
19
|
},
|
|
20
20
|
e: {
|
|
21
21
|
f: 4,
|
|
22
22
|
},
|
|
23
|
-
}
|
|
23
|
+
}
|
|
24
24
|
);
|
|
25
25
|
|
|
26
26
|
assert.deepEqual(await Tree.plain(fixture), {
|
|
27
27
|
a: 1,
|
|
28
28
|
b: {
|
|
29
|
-
|
|
29
|
+
d: 3,
|
|
30
30
|
},
|
|
31
31
|
e: {
|
|
32
32
|
f: 4,
|
|
33
33
|
},
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
-
const
|
|
37
|
-
assert.equal(
|
|
36
|
+
const c = await Tree.traverse(fixture, "b", "c");
|
|
37
|
+
assert.equal(c, undefined);
|
|
38
38
|
});
|
|
39
39
|
});
|