@weborigami/async-tree 0.0.72 → 0.1.0
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/browser.js +2 -11
- package/index.ts +9 -0
- package/main.js +3 -37
- package/package.json +2 -2
- package/shared.js +32 -0
- package/src/Tree.d.ts +2 -2
- package/src/Tree.js +13 -16
- package/src/{BrowserFileTree.js → drivers/BrowserFileTree.js} +3 -3
- package/src/{DeepMapTree.js → drivers/DeepMapTree.js} +1 -1
- package/src/{DeepObjectTree.js → drivers/DeepObjectTree.js} +2 -2
- package/src/{DeferredTree.js → drivers/DeferredTree.js} +5 -3
- package/src/{FileTree.js → drivers/FileTree.js} +3 -3
- package/src/{FunctionTree.js → drivers/FunctionTree.js} +1 -1
- package/src/{MapTree.js → drivers/MapTree.js} +3 -3
- package/src/{ObjectTree.js → drivers/ObjectTree.js} +4 -4
- package/src/{SetTree.js → drivers/SetTree.js} +1 -1
- package/src/{SiteTree.js → drivers/SiteTree.js} +2 -2
- package/src/{calendarTree.js → drivers/calendarTree.js} +1 -1
- package/src/extension.js +140 -0
- package/src/internal.js +3 -2
- package/src/{transforms → operations}/deepReverse.js +1 -1
- package/src/operations/deepTake.js +30 -3
- package/src/operations/group.js +44 -3
- package/src/operations/keyFunctionsForExtensions.js +48 -0
- package/src/operations/map.js +118 -3
- package/src/operations/sort.js +45 -2
- package/src/operations/take.js +19 -2
- package/src/symbols.js +1 -0
- package/test/Tree.test.js +25 -2
- package/test/{BrowserFileTree.test.js → drivers/BrowserFileTree.test.js} +2 -2
- package/test/{DeepMapTree.test.js → drivers/DeepMapTree.test.js} +2 -2
- package/test/{DeepObjectTree.test.js → drivers/DeepObjectTree.test.js} +1 -1
- package/test/{DeferredTree.test.js → drivers/DeferredTree.test.js} +2 -2
- package/test/{ExplorableSiteTree.test.js → drivers/ExplorableSiteTree.test.js} +6 -3
- package/test/{FileTree.test.js → drivers/FileTree.test.js} +6 -5
- package/test/{FunctionTree.test.js → drivers/FunctionTree.test.js} +1 -1
- package/test/{MapTree.test.js → drivers/MapTree.test.js} +2 -2
- package/test/{ObjectTree.test.js → drivers/ObjectTree.test.js} +2 -2
- package/test/{SetTree.test.js → drivers/SetTree.test.js} +2 -2
- package/test/{SiteTree.test.js → drivers/SiteTree.test.js} +1 -1
- package/test/{calendarTree.test.js → drivers/calendarTree.test.js} +5 -5
- package/test/extension.test.js +41 -0
- package/test/{transforms → operations}/cachedKeyFunctions.test.js +1 -1
- package/test/operations/concat.test.js +1 -1
- package/test/{transforms → operations}/deepReverse.test.js +1 -1
- package/test/operations/{deepTakeFn.test.js → deepTake.test.js} +3 -3
- package/test/{transforms/groupFn.test.js → operations/group.test.js} +4 -4
- package/test/{transforms → operations}/invokeFunctions.test.js +1 -1
- package/test/{transforms → operations}/keyFunctionsForExtensions.test.js +21 -12
- package/test/{transforms/mapFn.test.js → operations/map.test.js} +23 -31
- package/test/{transforms → operations}/regExpKeys.test.js +1 -1
- package/test/{transforms → operations}/reverse.test.js +1 -1
- package/test/{transforms/sortFn.test.js → operations/sort.test.js} +6 -7
- package/test/{transforms/takeFn.test.js → operations/take.test.js} +3 -3
- package/src/operations/deepTakeFn.js +0 -43
- package/src/operations/groupFn.js +0 -57
- package/src/transforms/keyFunctionsForExtensions.js +0 -78
- package/src/transforms/mapFn.js +0 -126
- package/src/transforms/sortFn.js +0 -71
- package/src/transforms/takeFn.js +0 -31
- /package/src/{ExplorableSiteTree.js → drivers/ExplorableSiteTree.js} +0 -0
- /package/src/{transforms → operations}/cachedKeyFunctions.js +0 -0
- /package/src/{transforms → operations}/invokeFunctions.js +0 -0
- /package/src/{transforms → operations}/regExpKeys.js +0 -0
- /package/src/{transforms → operations}/reverse.js +0 -0
- /package/test/{fixtures → drivers/fixtures}/markdown/Alice.md +0 -0
- /package/test/{fixtures → drivers/fixtures}/markdown/Bob.md +0 -0
- /package/test/{fixtures → drivers/fixtures}/markdown/Carol.md +0 -0
- /package/test/{fixtures → drivers/fixtures}/markdown/subfolder/README.md +0 -0
package/src/transforms/sortFn.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { Tree } from "../internal.js";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Return a transform function that sorts a tree's keys using a comparison
|
|
5
|
-
* function.
|
|
6
|
-
*
|
|
7
|
-
* If the `options` include a `sortKey` function, that will be invoked for each
|
|
8
|
-
* key in the tree to produce a sort key. If no `sortKey` function is provided,
|
|
9
|
-
* the original keys will be used as sort keys.
|
|
10
|
-
*
|
|
11
|
-
* If the `options` include a `compare` function, that will be used to compare
|
|
12
|
-
* sort keys.
|
|
13
|
-
*
|
|
14
|
-
* @typedef {import("@weborigami/types").AsyncTree} AsyncTree
|
|
15
|
-
* @typedef {(key: any, tree: AsyncTree) => any} SortKeyFn
|
|
16
|
-
* @typedef {{ compare?: (a: any, b: any) => number, sortKey?: SortKeyFn }}
|
|
17
|
-
* SortOptions
|
|
18
|
-
*
|
|
19
|
-
* @param {SortOptions} [options]
|
|
20
|
-
*/
|
|
21
|
-
export default function sortFn(options) {
|
|
22
|
-
const sortKey = options?.sortKey;
|
|
23
|
-
let compare = options?.compare;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* @type {import("../../index.ts").TreeTransform}
|
|
27
|
-
*/
|
|
28
|
-
return function sort(treelike) {
|
|
29
|
-
if (!treelike) {
|
|
30
|
-
const error = new TypeError(`sort: The tree to sort isn't defined.`);
|
|
31
|
-
/** @type {any} */ (error).position = 0;
|
|
32
|
-
throw error;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const tree = Tree.from(treelike);
|
|
36
|
-
const transformed = Object.create(tree);
|
|
37
|
-
transformed.keys = async () => {
|
|
38
|
-
const keys = Array.from(await tree.keys());
|
|
39
|
-
|
|
40
|
-
if (sortKey) {
|
|
41
|
-
// Invoke the async sortKey function to get sort keys.
|
|
42
|
-
// Create { key, sortKey } tuples.
|
|
43
|
-
const tuples = await Promise.all(
|
|
44
|
-
keys.map(async (key) => {
|
|
45
|
-
const sort = await sortKey(key, tree);
|
|
46
|
-
if (sort === undefined) {
|
|
47
|
-
throw new Error(
|
|
48
|
-
`sortKey function returned undefined for key ${key}`
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
return { key, sort };
|
|
52
|
-
})
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
// Wrap the comparison function so it applies to sort keys.
|
|
56
|
-
const defaultCompare = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
|
|
57
|
-
const originalCompare = compare ?? defaultCompare;
|
|
58
|
-
// Sort by the sort key.
|
|
59
|
-
tuples.sort((a, b) => originalCompare(a.sort, b.sort));
|
|
60
|
-
// Map back to the original keys.
|
|
61
|
-
const sorted = tuples.map((pair) => pair.key);
|
|
62
|
-
return sorted;
|
|
63
|
-
} else {
|
|
64
|
-
// Use original keys as sort keys.
|
|
65
|
-
// If compare is undefined, this uses default sort order.
|
|
66
|
-
return keys.slice().sort(compare);
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
return transformed;
|
|
70
|
-
};
|
|
71
|
-
}
|
package/src/transforms/takeFn.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { Tree } from "../internal.js";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Limit the number of keys to the indicated count.
|
|
5
|
-
*
|
|
6
|
-
* @param {number} count
|
|
7
|
-
*/
|
|
8
|
-
export default function take(count) {
|
|
9
|
-
/**
|
|
10
|
-
* @type {import("../../index.ts").TreeTransform}
|
|
11
|
-
*/
|
|
12
|
-
return (treelike) => {
|
|
13
|
-
if (!treelike) {
|
|
14
|
-
const error = new TypeError(`take: The tree to take from isn't defined.`);
|
|
15
|
-
/** @type {any} */ (error).position = 0;
|
|
16
|
-
throw error;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const tree = Tree.from(treelike);
|
|
20
|
-
return {
|
|
21
|
-
async keys() {
|
|
22
|
-
const keys = Array.from(await tree.keys());
|
|
23
|
-
return keys.slice(0, count);
|
|
24
|
-
},
|
|
25
|
-
|
|
26
|
-
async get(key) {
|
|
27
|
-
return tree.get(key);
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|