@weborigami/async-tree 0.0.52 → 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.52",
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.52"
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 (const tree of trees) {
20
- const value = await tree.get(key);
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.push(value);
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 (const tree of trees) {
33
- if (await Tree.isKeyForSubtree(tree, key)) {
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);
@@ -20,8 +20,9 @@ export default function merge(...sources) {
20
20
  description: "merge",
21
21
 
22
22
  async get(key) {
23
- for (const tree of trees) {
24
- const value = await tree.get(key);
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 (const tree of trees) {
34
- if (await Tree.isKeyForSubtree(tree, key)) {
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: 1,
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: 0, // Will be obscured by `b` above
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
- Tree.from({
9
+ {
10
10
  a: 1,
11
+ // Will be obscured by `b` that follows
11
12
  b: {
12
13
  c: 2,
13
14
  },
14
- }),
15
- Tree.from({
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
- c: 2,
29
+ d: 3,
30
30
  },
31
31
  e: {
32
32
  f: 4,
33
33
  },
34
34
  });
35
35
 
36
- const d = await Tree.traverse(fixture, "b", "d");
37
- assert.equal(d, undefined);
36
+ const c = await Tree.traverse(fixture, "b", "c");
37
+ assert.equal(c, undefined);
38
38
  });
39
39
  });