filehound 2.0.0-beta.2 → 2.0.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.
Files changed (212) hide show
  1. package/README.md +39 -11
  2. package/dist/arrays.d.ts +1 -0
  3. package/dist/arrays.js +4 -0
  4. package/dist/file.d.ts +108 -0
  5. package/dist/file.js +184 -0
  6. package/dist/filehound.d.ts +356 -0
  7. package/dist/filehound.js +498 -0
  8. package/dist/files.d.ts +4 -0
  9. package/dist/files.js +37 -0
  10. package/dist/filetype.d.ts +10 -0
  11. package/dist/filetype.js +9 -0
  12. package/dist/index.d.ts +5 -0
  13. package/dist/index.js +6 -0
  14. package/dist/matchers.d.ts +324 -0
  15. package/dist/matchers.js +419 -0
  16. package/dist/walker/async.d.ts +4 -0
  17. package/dist/walker/async.js +237 -0
  18. package/dist/walker/heap.d.ts +7 -0
  19. package/dist/walker/heap.js +49 -0
  20. package/dist/walker/sync.d.ts +4 -0
  21. package/dist/walker/sync.js +66 -0
  22. package/dist/walker/walk.d.ts +33 -0
  23. package/dist/walker/walk.js +80 -0
  24. package/package.json +45 -48
  25. package/.github/stale.yml +0 -42
  26. package/.travis.yml +0 -8
  27. package/.vscode/launch.json +0 -21
  28. package/.vscode/settings.json +0 -3
  29. package/CONTRIBUTING.md +0 -8
  30. package/_config.yml +0 -1
  31. package/coverage/coverage.raw.json +0 -1
  32. package/coverage/lcov-report/arrays.ts.html +0 -98
  33. package/coverage/lcov-report/base.css +0 -212
  34. package/coverage/lcov-report/filehound.ts.html +0 -2078
  35. package/coverage/lcov-report/files.ts.html +0 -260
  36. package/coverage/lcov-report/functions.ts.html +0 -122
  37. package/coverage/lcov-report/index.html +0 -132
  38. package/coverage/lcov-report/prettify.css +0 -1
  39. package/coverage/lcov-report/prettify.js +0 -1
  40. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  41. package/coverage/lcov-report/sorter.js +0 -158
  42. package/coverage/lcov.info +0 -378
  43. package/dist/src/arrays.js +0 -15
  44. package/dist/src/arrays.js.map +0 -1
  45. package/dist/src/asyncWalker.js +0 -59
  46. package/dist/src/asyncWalker.js.map +0 -1
  47. package/dist/src/bind.js +0 -15
  48. package/dist/src/bind.js.map +0 -1
  49. package/dist/src/filehound.js +0 -597
  50. package/dist/src/filehound.js.map +0 -1
  51. package/dist/src/files.js +0 -60
  52. package/dist/src/files.js.map +0 -1
  53. package/dist/src/matcher.js +0 -51
  54. package/dist/src/matcher.js.map +0 -1
  55. package/dist/src/syncWalker.js +0 -47
  56. package/dist/src/syncWalker.js.map +0 -1
  57. package/dist/src/walkAsync.js +0 -33
  58. package/dist/src/walkAsync.js.map +0 -1
  59. package/dist/src/walkSync.js +0 -21
  60. package/dist/src/walkSync.js.map +0 -1
  61. package/dist/src/walker/walk.js +0 -68
  62. package/dist/src/walker/walk.js.map +0 -1
  63. package/dist/src/walker/walkAsync.js +0 -33
  64. package/dist/src/walker/walkAsync.js.map +0 -1
  65. package/dist/src/walker/walkSync.js +0 -21
  66. package/dist/src/walker/walkSync.js.map +0 -1
  67. package/dist/test/filehound.js +0 -872
  68. package/dist/test/filehound.js.map +0 -1
  69. package/dist/test/files.js +0 -29
  70. package/dist/test/files.js.map +0 -1
  71. package/docconfig/jsdoc.json +0 -26
  72. package/docconfig/template/LICENSE +0 -61
  73. package/docconfig/template/README.md +0 -86
  74. package/docconfig/template/package.json +0 -22
  75. package/docconfig/template/publish.js +0 -676
  76. package/docconfig/template/static/fonts/OpenSans-Bold-webfont.eot +0 -0
  77. package/docconfig/template/static/fonts/OpenSans-Bold-webfont.svg +0 -1830
  78. package/docconfig/template/static/fonts/OpenSans-Bold-webfont.woff +0 -0
  79. package/docconfig/template/static/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  80. package/docconfig/template/static/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  81. package/docconfig/template/static/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  82. package/docconfig/template/static/fonts/OpenSans-Italic-webfont.eot +0 -0
  83. package/docconfig/template/static/fonts/OpenSans-Italic-webfont.svg +0 -1830
  84. package/docconfig/template/static/fonts/OpenSans-Italic-webfont.woff +0 -0
  85. package/docconfig/template/static/fonts/OpenSans-Light-webfont.eot +0 -0
  86. package/docconfig/template/static/fonts/OpenSans-Light-webfont.svg +0 -1831
  87. package/docconfig/template/static/fonts/OpenSans-Light-webfont.woff +0 -0
  88. package/docconfig/template/static/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  89. package/docconfig/template/static/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  90. package/docconfig/template/static/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  91. package/docconfig/template/static/fonts/OpenSans-Regular-webfont.eot +0 -0
  92. package/docconfig/template/static/fonts/OpenSans-Regular-webfont.svg +0 -1831
  93. package/docconfig/template/static/fonts/OpenSans-Regular-webfont.woff +0 -0
  94. package/docconfig/template/static/fonts/OpenSans-Semibold-webfont.eot +0 -0
  95. package/docconfig/template/static/fonts/OpenSans-Semibold-webfont.svg +0 -1830
  96. package/docconfig/template/static/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  97. package/docconfig/template/static/fonts/OpenSans-Semibold-webfont.woff +0 -0
  98. package/docconfig/template/static/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  99. package/docconfig/template/static/fonts/OpenSans-SemiboldItalic-webfont.svg +0 -1830
  100. package/docconfig/template/static/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  101. package/docconfig/template/static/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  102. package/docconfig/template/static/scripts/linenumber.js +0 -25
  103. package/docconfig/template/static/scripts/prettify/Apache-License-2.0.txt +0 -202
  104. package/docconfig/template/static/scripts/prettify/lang-css.js +0 -2
  105. package/docconfig/template/static/scripts/prettify/prettify.js +0 -28
  106. package/docconfig/template/static/styles/jsdoc-default.css +0 -605
  107. package/docconfig/template/static/styles/prettify-jsdoc.css +0 -111
  108. package/docconfig/template/static/styles/prettify-tomorrow.css +0 -132
  109. package/docconfig/template/tmpl/augments.tmpl +0 -10
  110. package/docconfig/template/tmpl/container.tmpl +0 -183
  111. package/docconfig/template/tmpl/details.tmpl +0 -143
  112. package/docconfig/template/tmpl/example.tmpl +0 -2
  113. package/docconfig/template/tmpl/examples.tmpl +0 -13
  114. package/docconfig/template/tmpl/exceptions.tmpl +0 -32
  115. package/docconfig/template/tmpl/layout.tmpl +0 -47
  116. package/docconfig/template/tmpl/mainpage.tmpl +0 -10
  117. package/docconfig/template/tmpl/members.tmpl +0 -38
  118. package/docconfig/template/tmpl/method.tmpl +0 -105
  119. package/docconfig/template/tmpl/params.tmpl +0 -124
  120. package/docconfig/template/tmpl/properties.tmpl +0 -108
  121. package/docconfig/template/tmpl/returns.tmpl +0 -19
  122. package/docconfig/template/tmpl/source.tmpl +0 -8
  123. package/docconfig/template/tmpl/tutorial.tmpl +0 -19
  124. package/docconfig/template/tmpl/type.tmpl +0 -7
  125. package/docs/FileHound.html +0 -3079
  126. package/docs/FileHound_modified.html +0 -245
  127. package/docs/_config.yml +0 -1
  128. package/docs/filehound.js.html +0 -697
  129. package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  130. package/docs/fonts/OpenSans-Bold-webfont.svg +0 -1830
  131. package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  132. package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  133. package/docs/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  134. package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  135. package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  136. package/docs/fonts/OpenSans-Italic-webfont.svg +0 -1830
  137. package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  138. package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
  139. package/docs/fonts/OpenSans-Light-webfont.svg +0 -1831
  140. package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
  141. package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  142. package/docs/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  143. package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  144. package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  145. package/docs/fonts/OpenSans-Regular-webfont.svg +0 -1831
  146. package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  147. package/docs/fonts/OpenSans-Semibold-webfont.eot +0 -0
  148. package/docs/fonts/OpenSans-Semibold-webfont.svg +0 -1830
  149. package/docs/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  150. package/docs/fonts/OpenSans-Semibold-webfont.woff +0 -0
  151. package/docs/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  152. package/docs/fonts/OpenSans-SemiboldItalic-webfont.svg +0 -1830
  153. package/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  154. package/docs/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  155. package/docs/global.html +0 -288
  156. package/docs/index.html +0 -154
  157. package/docs/scripts/linenumber.js +0 -25
  158. package/docs/scripts/prettify/Apache-License-2.0.txt +0 -202
  159. package/docs/scripts/prettify/lang-css.js +0 -2
  160. package/docs/scripts/prettify/prettify.js +0 -28
  161. package/docs/styles/jsdoc-default.css +0 -605
  162. package/docs/styles/prettify-jsdoc.css +0 -111
  163. package/docs/styles/prettify-tomorrow.css +0 -132
  164. package/docs.md +0 -164
  165. package/index.js +0 -1
  166. package/issue_template.md +0 -6
  167. package/test/filehound.ts +0 -1076
  168. package/test/files.ts +0 -29
  169. package/test/fixtures/custom/failed.txt +0 -0
  170. package/test/fixtures/custom/passed.txt +0 -0
  171. package/test/fixtures/deeplyNested/c.json +0 -0
  172. package/test/fixtures/deeplyNested/d.json +0 -0
  173. package/test/fixtures/deeplyNested/mydir/e.json +0 -0
  174. package/test/fixtures/deeplyNested/mydir/mydir2/f.json +0 -0
  175. package/test/fixtures/deeplyNested/mydir/mydir2/mydir3/mydir4/failed.json +0 -0
  176. package/test/fixtures/deeplyNested/mydir/mydir2/mydir3/z.json +0 -0
  177. package/test/fixtures/deeplyNested/mydir/mydir2/y.json +0 -0
  178. package/test/fixtures/deeplyNestedWithHiddenDir/c.json +0 -0
  179. package/test/fixtures/deeplyNestedWithHiddenDir/d.json +0 -0
  180. package/test/fixtures/deeplyNestedWithHiddenDir/mydir/e.json +0 -0
  181. package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/f.json +0 -0
  182. package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/mydir3/mydir4/.mydir5/.keep +0 -0
  183. package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/mydir3/mydir4/failed.json +0 -0
  184. package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/mydir3/z.json +0 -0
  185. package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/y.json +0 -0
  186. package/test/fixtures/ext/Dummy.java +0 -0
  187. package/test/fixtures/ext/Dumpy.go +0 -0
  188. package/test/fixtures/ext/dummy.json +0 -0
  189. package/test/fixtures/ext/dummy.txt +0 -0
  190. package/test/fixtures/justFiles/a.json +0 -0
  191. package/test/fixtures/justFiles/b.json +0 -0
  192. package/test/fixtures/justFiles/dummy.txt +0 -0
  193. package/test/fixtures/mixed/a.json +0 -0
  194. package/test/fixtures/mixed/aabbcc.json +0 -0
  195. package/test/fixtures/mixed/ab.json +0 -0
  196. package/test/fixtures/mixed/z.json +0 -0
  197. package/test/fixtures/nested/.hidden1/bad.txt +0 -0
  198. package/test/fixtures/nested/c.json +0 -0
  199. package/test/fixtures/nested/d.json +0 -0
  200. package/test/fixtures/nested/mydir/e.json +0 -0
  201. package/test/fixtures/sizes/10b.txt +0 -0
  202. package/test/fixtures/sizes/1b.txt +0 -0
  203. package/test/fixtures/sizes/1k.txt +0 -0
  204. package/test/fixtures/sizes/2k.txt +0 -0
  205. package/test/fixtures/visibility/.hidden/.hidden.json +0 -0
  206. package/test/fixtures/visibility/.hidden/visible.json +0 -3
  207. package/test/fixtures/visibility/.hidden.json +0 -3
  208. package/test/fixtures/visibility/visible/.hidden.json +0 -3
  209. package/test/fixtures/visibility/visible.json +0 -3
  210. package/test/mocha.opts +0 -4
  211. package/tsconfig.json +0 -16
  212. package/tslint.json +0 -44
@@ -0,0 +1,49 @@
1
+ // A binary min-heap: pop returns the item that comes first by precedes
2
+ export class Heap {
3
+ #items = [];
4
+ #precedes;
5
+ constructor(precedes) {
6
+ this.#precedes = precedes;
7
+ }
8
+ get size() {
9
+ return this.#items.length;
10
+ }
11
+ push(item) {
12
+ const items = this.#items;
13
+ let i = items.push(item) - 1;
14
+ while (i > 0) {
15
+ const parent = (i - 1) >> 1;
16
+ if (!this.#precedes(items[i], items[parent])) {
17
+ break;
18
+ }
19
+ [items[i], items[parent]] = [items[parent], items[i]];
20
+ i = parent;
21
+ }
22
+ }
23
+ pop() {
24
+ const items = this.#items;
25
+ const first = items[0];
26
+ const last = items.pop();
27
+ if (items.length > 0 && last !== undefined) {
28
+ items[0] = last;
29
+ let i = 0;
30
+ for (;;) {
31
+ const left = 2 * i + 1;
32
+ const right = left + 1;
33
+ let next = i;
34
+ if (left < items.length && this.#precedes(items[left], items[next])) {
35
+ next = left;
36
+ }
37
+ if (right < items.length && this.#precedes(items[right], items[next])) {
38
+ next = right;
39
+ }
40
+ if (next === i) {
41
+ break;
42
+ }
43
+ [items[i], items[next]] = [items[next], items[i]];
44
+ i = next;
45
+ }
46
+ }
47
+ return first;
48
+ }
49
+ }
@@ -0,0 +1,4 @@
1
+ import { File } from '../file.js';
2
+ import type { FilePredicate } from '../matchers.js';
3
+ import { type WalkOptions } from './walk.js';
4
+ export declare function walkSync(dir: string, matcher: FilePredicate, opts: WalkOptions): File[];
@@ -0,0 +1,66 @@
1
+ import * as fs from 'node:fs';
2
+ import { File, getChildrenSync, getKnownKind } from '../file.js';
3
+ import { ancestorsOf, assertDirectory, byName, createPathError, EntryType, typeOf, Walk } from './walk.js';
4
+ // A linked directory that resolves to one of its own ancestors would be walked forever
5
+ function isCyclicLink(link) {
6
+ const target = fs.realpathSync(link.getName());
7
+ return ancestorsOf(link).some(ancestor => fs.realpathSync(ancestor) === target);
8
+ }
9
+ // Broken links are skipped, as are all links when ignoreSymlinks is set
10
+ function isVisitableLink(link, walk) {
11
+ if (walk.ignoreSymlinks) {
12
+ return false;
13
+ }
14
+ try {
15
+ return !(link.isDirectorySync() && isCyclicLink(link));
16
+ }
17
+ catch {
18
+ return false;
19
+ }
20
+ }
21
+ // Links have no known kind, so need a stat
22
+ function visitUntyped(file, walk, depth, matches) {
23
+ return visitTyped(file, typeOf(file.getStatsSync()), walk, depth, matches);
24
+ }
25
+ function visitLink(link, walk, depth, matches) {
26
+ return isVisitableLink(link, walk) ? visitUntyped(link, walk, depth, matches) : matches;
27
+ }
28
+ // Entries are visited depth first in name order, adding to a single list of matches
29
+ function visitTyped(file, type, walk, depth, matches) {
30
+ if (type === EntryType.DIRECTORY && walk.shouldSkipDirectory(file)) {
31
+ return matches;
32
+ }
33
+ if (walk.isCandidate(file, type) && walk.matcher.testSync(file)) {
34
+ matches.push(file);
35
+ }
36
+ if (type === EntryType.DIRECTORY && walk.canDescend(depth)) {
37
+ visitChildren(file, walk, depth + 1, matches);
38
+ }
39
+ return matches;
40
+ }
41
+ // Children always have a dirent, so only links lack a known kind
42
+ function visitChildren(dir, walk, depth, matches) {
43
+ for (const child of getChildrenSync(dir).sort(byName)) {
44
+ const kind = getKnownKind(child);
45
+ if (kind) {
46
+ visitTyped(child, typeOf(kind), walk, depth, matches);
47
+ }
48
+ else {
49
+ visitLink(child, walk, depth, matches);
50
+ }
51
+ }
52
+ return matches;
53
+ }
54
+ export function walkSync(dir, matcher, opts) {
55
+ const root = new File(dir);
56
+ let stats;
57
+ try {
58
+ stats = root.getStatsSync();
59
+ }
60
+ catch (error) {
61
+ throw createPathError(dir, error);
62
+ }
63
+ assertDirectory(dir, stats);
64
+ // The root is never a match, only the place to search, so the walk starts at its children
65
+ return visitChildren(root, new Walk(matcher, opts), 1, []);
66
+ }
@@ -0,0 +1,33 @@
1
+ import type { File, FileKind } from '../file.js';
2
+ import { FileType } from '../filetype.js';
3
+ import { type FilePredicate } from '../matchers.js';
4
+ export type WalkOptions = {
5
+ maxDepth?: number;
6
+ ignoreHiddenFiles: boolean;
7
+ ignoreHiddenDirectories: boolean;
8
+ ignoreSymlinks: boolean;
9
+ fileTypes: FileType[];
10
+ skipDirectories: readonly string[];
11
+ signal?: AbortSignal;
12
+ };
13
+ export declare const EntryType: {
14
+ readonly OTHER: "other";
15
+ readonly REGULAR: "regular";
16
+ readonly DIRECTORY: "directory";
17
+ };
18
+ export type EntryType = typeof EntryType[keyof typeof EntryType];
19
+ export declare function createPathError(name: string, cause: unknown): Error;
20
+ export declare function assertDirectory(name: string, stats: FileKind): void;
21
+ export declare class Walk {
22
+ #private;
23
+ readonly matcher: FilePredicate;
24
+ readonly isSyncMatcher: boolean;
25
+ constructor(matcher: FilePredicate, opts: WalkOptions);
26
+ get ignoreSymlinks(): boolean;
27
+ isCandidate(file: File, type: EntryType): boolean;
28
+ shouldSkipDirectory(dir: File): boolean;
29
+ canDescend(depth: number): boolean;
30
+ }
31
+ export declare function typeOf(kind: FileKind): EntryType;
32
+ export declare function byName(a: File, b: File): number;
33
+ export declare function ancestorsOf(file: File): string[];
@@ -0,0 +1,80 @@
1
+ import { basename, dirname, matchesGlob, resolve } from 'node:path';
2
+ import { FileType } from '../filetype.js';
3
+ import { isSyncPredicate } from '../matchers.js';
4
+ // Every entry has one. FileType is the public subset; anything else, such as a
5
+ // socket or FIFO, is OTHER and never matched.
6
+ export const EntryType = { ...FileType, OTHER: 'other' };
7
+ export function createPathError(name, cause) {
8
+ return new Error(`'${name}' is not a valid path`, { cause });
9
+ }
10
+ // Search paths are where to search, so must be directories
11
+ export function assertDirectory(name, stats) {
12
+ if (!stats.isDirectory()) {
13
+ throw new Error(`'${name}' is not a directory`);
14
+ }
15
+ }
16
+ // State shared by a walk. The async and sync walks (async.ts and sync.ts) share
17
+ // everything except the calls that touch the file system, and both return
18
+ // matches in name order.
19
+ export class Walk {
20
+ matcher;
21
+ // Checked once, as combined predicates work it out from their parts
22
+ isSyncMatcher;
23
+ #opts;
24
+ constructor(matcher, opts) {
25
+ this.matcher = matcher;
26
+ this.isSyncMatcher = isSyncPredicate(matcher);
27
+ this.#opts = opts;
28
+ }
29
+ get ignoreSymlinks() {
30
+ return this.#opts.ignoreSymlinks;
31
+ }
32
+ isCandidate(file, type) {
33
+ switch (type) {
34
+ case EntryType.DIRECTORY:
35
+ return this.#typeEnabled(type);
36
+ case EntryType.REGULAR:
37
+ return this.#typeEnabled(type) && !(this.#opts.ignoreHiddenFiles && file.isHiddenSync());
38
+ case EntryType.OTHER:
39
+ return false;
40
+ }
41
+ }
42
+ // Hidden directories, when ignored, and those named by skipDirectories are
43
+ // neither returned nor walked. Only names are tested, so the async walk
44
+ // can skip a directory before reading it ahead.
45
+ shouldSkipDirectory(dir) {
46
+ return (this.#opts.ignoreHiddenDirectories && dir.isHiddenSync()) || this.#isSkippedName(dir);
47
+ }
48
+ // depth counts levels below the root, which is 0. A directory beyond
49
+ // maxDepth is still returned, like any other entry at its level, but not walked.
50
+ canDescend(depth) {
51
+ return this.#opts.maxDepth === undefined || depth <= this.#opts.maxDepth;
52
+ }
53
+ #isSkippedName(dir) {
54
+ const skip = this.#opts.skipDirectories;
55
+ if (skip.length === 0) {
56
+ return false;
57
+ }
58
+ const name = basename(dir.getName());
59
+ return skip.some(pattern => matchesGlob(name, pattern));
60
+ }
61
+ #typeEnabled(type) {
62
+ return this.#opts.fileTypes.includes(type);
63
+ }
64
+ }
65
+ export function typeOf(kind) {
66
+ return kind.isDirectory() ? EntryType.DIRECTORY : kind.isFile() ? EntryType.REGULAR : EntryType.OTHER;
67
+ }
68
+ export function byName(a, b) {
69
+ return a.getName() < b.getName() ? -1 : a.getName() > b.getName() ? 1 : 0;
70
+ }
71
+ export function ancestorsOf(file) {
72
+ const ancestors = [];
73
+ let ancestor = dirname(resolve(file.getName()));
74
+ while (dirname(ancestor) !== ancestor) {
75
+ ancestors.push(ancestor);
76
+ ancestor = dirname(ancestor);
77
+ }
78
+ ancestors.push(ancestor);
79
+ return ancestors;
80
+ }
package/package.json CHANGED
@@ -1,30 +1,45 @@
1
1
  {
2
2
  "name": "filehound",
3
- "version": "2.0.0-beta.2",
3
+ "version": "2.0.0",
4
4
  "description": "Find files the easy way",
5
- "main": "index.js",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "engines": {
18
+ "node": ">=24"
19
+ },
6
20
  "scripts": {
7
- "jsdoc": "jsdoc -c ./docconfig/jsdoc.json",
21
+ "docs": "typedoc",
8
22
  "build": "tsc",
23
+ "typecheck": "tsc -p tsconfig.test.json",
9
24
  "watch": "tsc --watch",
10
- "clean": "rm -fr dist/*",
11
- "prepublish": "npm run build",
12
- "prepublishOnly": "tsc -p ./ --outDir dist",
13
- "test": "mocha -r ts-node/register test/*.ts",
25
+ "clean": "node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"",
26
+ "prepublishOnly": "npm run clean && npm run build",
27
+ "test": "mocha",
14
28
  "posttest": "npm run lint",
15
- "lint": "tslint --project tsconfig.json",
16
- "coverage": "nyc mocha && nyc report --reporter=html && nyc report --reporter=json-summary"
29
+ "lint": "eslint src test bench examples scripts",
30
+ "coverage": "c8 mocha",
31
+ "bench": "npm run build && node bench/bench.mjs",
32
+ "examples": "npm run build && node scripts/run-examples.mjs"
17
33
  },
18
34
  "repository": {
19
35
  "type": "git",
20
- "url": "https://github.com/nspragg/filehound.git"
36
+ "url": "git+https://github.com/nspragg/filehound.git"
21
37
  },
22
38
  "keywords": [
23
39
  "file",
24
40
  "recursive",
25
41
  "search",
26
42
  "filehound",
27
- "file",
28
43
  "hound",
29
44
  "lister",
30
45
  "find",
@@ -36,48 +51,30 @@
36
51
  "fs",
37
52
  "file system"
38
53
  ],
54
+ "author": "nspragg <nspragg@gmail.com>",
39
55
  "license": "MIT",
40
56
  "bugs": {
41
57
  "url": "https://github.com/nspragg/filehound/issues"
42
58
  },
43
59
  "homepage": "https://github.com/nspragg/filehound",
44
- "devDependencies": {
45
- "@types/mocha": "^2.2.43",
46
- "@types/node": "^8.0.33",
47
- "@types/typescript": "^2.0.0",
48
- "eslint-config-iplayer-base": "^1.0.0",
49
- "chai": "^4.1.2",
50
- "coveralls": "^2.11.9",
51
- "eslint": "^3.11.1",
52
- "istanbul": "1.1.0-alpha.1",
53
- "jsdoc": "^3.4.3",
54
- "mocha": "^5.0.5",
55
- "sinon": "^2.1.0",
56
- "ts-node": "^3.3.0",
57
- "tslint": "^5.8.0",
58
- "tslint-config-airbnb": "^5.3.1",
59
- "tslint-eslint-rules": "^4.1.1",
60
- "typescript": "^2.6.1"
61
- },
62
- "nyc": {
63
- "include": [
64
- "src/**/*.ts"
65
- ],
66
- "extension": [
67
- ".ts"
68
- ],
69
- "require": [
70
- "ts-node/register"
71
- ],
72
- "sourceMap": true,
73
- "instrument": true
74
- },
75
60
  "dependencies": {
76
- "file-js": "0.3.0",
77
- "lodash": "^4.17.5",
78
- "minimatch": "^3.0.4",
79
- "moment": "^2.22.0",
80
- "npm": "^5.8.0",
81
- "unit-compare": "^1.0.1"
61
+ "unit-compare": "^2.0.0"
62
+ },
63
+ "devDependencies": {
64
+ "@eslint/js": "^10.0.1",
65
+ "@stylistic/eslint-plugin": "^5.10.0",
66
+ "@types/chai": "^5.2.3",
67
+ "@types/mocha": "^10.0.10",
68
+ "@types/node": "^24.19.2",
69
+ "@types/sinon": "^22.0.2",
70
+ "c8": "^12.0.0",
71
+ "chai": "^6.3.0",
72
+ "eslint": "^10.13.0",
73
+ "mocha": "^12.0.3",
74
+ "sinon": "^22.1.0",
75
+ "tsx": "^4.23.15",
76
+ "typedoc": "^0.28.20",
77
+ "typescript": "~6.0",
78
+ "typescript-eslint": "^8.72.1"
82
79
  }
83
80
  }
package/.github/stale.yml DELETED
@@ -1,42 +0,0 @@
1
- # Configuration for probot-stale - https://github.com/probot/stale
2
-
3
- # Number of days of inactivity before an Issue or Pull Request becomes stale
4
- daysUntilStale: 5
5
- # Number of days of inactivity before a stale Issue or Pull Request is closed.
6
- # Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
7
- daysUntilClose: 7
8
- # Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
9
- exemptLabels:
10
- - pinned
11
- - security
12
- - "[Status] Maybe Later"
13
- # Set to true to ignore issues in a project (defaults to false)
14
- exemptProjects: false
15
- # Set to true to ignore issues in a milestone (defaults to false)
16
- exemptMilestones: false
17
- # Label to use when marking as stale
18
- staleLabel: wontfix
19
- # Comment to post when marking as stale. Set to `false` to disable
20
- markComment: >
21
- This issue has been automatically marked as stale because it has not had
22
- recent activity. It will be closed if no further activity occurs. Thank you
23
- for your contributions.
24
- # Comment to post when removing the stale label. Set to `false` to disable
25
- unmarkComment: false
26
- # Comment to post when closing a stale Issue or Pull Request. Set to `false` to disable
27
- closeComment: false
28
- # Limit the number of actions per hour, from 1-30. Default is 30
29
- limitPerRun: 30
30
- # Limit to only `issues` or `pulls`
31
- # only: issues
32
- #
33
- # Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
34
- # pulls:
35
- # daysUntilStale: 30
36
- # markComment: >
37
- # This pull request has been automatically marked as stale because it has not had
38
- # recent activity. It will be closed if no further activity occurs. Thank you
39
- # for your contributions.
40
- # issues:
41
- # exemptLabels:
42
- # - confirmed
package/.travis.yml DELETED
@@ -1,8 +0,0 @@
1
- language: node_js
2
- os:
3
- - linux
4
- node_js:
5
- - "8"
6
- after_script:
7
- - npm run coverage
8
- - cat coverage/lcov.info | node_modules/.bin/coveralls
@@ -1,21 +0,0 @@
1
- {
2
- // Use IntelliSense to learn about possible Node.js debug attributes.
3
- // Hover to view descriptions of existing attributes.
4
- // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
- "version": "0.2.0",
6
- "configurations": [
7
- {
8
- "type": "node",
9
- "request": "launch",
10
- "name": "Launch Program",
11
- "program": "${workspaceRoot}/index.js"
12
- },
13
- {
14
- "type": "node",
15
- "request": "attach",
16
- "name": "Attach to Process",
17
- "address": "localhost",
18
- "port": 5858
19
- }
20
- ]
21
- }
@@ -1,3 +0,0 @@
1
- // Place your settings in this file to overwrite default and user settings.
2
- {
3
- }
package/CONTRIBUTING.md DELETED
@@ -1,8 +0,0 @@
1
- ## Contributing
2
-
3
- * If you're unsure if a feature would make a good addition, you can always [create an issue](https://github.com/nspragg/filehound/issues/new) first.
4
- * We aim for 100% test coverage. Please write tests for any new functionality or changes.
5
- * Any API changes should be fully documented.
6
- * Make sure your code meets our linting standards. Run `npm run lint` to check your code.
7
- * Maintain the existing coding style. There are some settings in `.jsbeautifyrc` to help.
8
- * Be mindful of others when making suggestions and/or code reviewing.
package/_config.yml DELETED
@@ -1 +0,0 @@
1
- theme: jekyll-theme-slate
@@ -1 +0,0 @@
1
- {"/Users/spragn01/workspace/node/filehound/src/filehound.ts":{"path":"/Users/spragn01/workspace/node/filehound/src/filehound.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":10},"end":{"line":3,"column":27}},"2":{"start":{"line":4,"column":19},"end":{"line":4,"column":38}},"3":{"start":{"line":5,"column":13},"end":{"line":5,"column":28}},"4":{"start":{"line":6,"column":13},"end":{"line":6,"column":31}},"5":{"start":{"line":7,"column":20},"end":{"line":7,"column":42}},"6":{"start":{"line":8,"column":16},"end":{"line":8,"column":34}},"7":{"start":{"line":9,"column":17},"end":{"line":9,"column":36}},"8":{"start":{"line":10,"column":23},"end":{"line":10,"column":46}},"9":{"start":{"line":11,"column":17},"end":{"line":11,"column":34}},"10":{"start":{"line":13,"column":4},"end":{"line":13,"column":31}},"11":{"start":{"line":16,"column":4},"end":{"line":16,"column":23}},"12":{"start":{"line":19,"column":4},"end":{"line":19,"column":26}},"13":{"start":{"line":22,"column":4},"end":{"line":24,"column":6}},"14":{"start":{"line":23,"column":8},"end":{"line":23,"column":56}},"15":{"start":{"line":27,"column":4},"end":{"line":29,"column":5}},"16":{"start":{"line":28,"column":8},"end":{"line":28,"column":28}},"17":{"start":{"line":30,"column":4},"end":{"line":30,"column":15}},"18":{"start":{"line":35,"column":8},"end":{"line":35,"column":16}},"19":{"start":{"line":36,"column":8},"end":{"line":36,"column":26}},"20":{"start":{"line":37,"column":8},"end":{"line":37,"column":30}},"21":{"start":{"line":38,"column":8},"end":{"line":38,"column":45}},"22":{"start":{"line":39,"column":8},"end":{"line":39,"column":32}},"23":{"start":{"line":40,"column":8},"end":{"line":40,"column":30}},"24":{"start":{"line":41,"column":8},"end":{"line":41,"column":26}},"25":{"start":{"line":42,"column":8},"end":{"line":42,"column":37}},"26":{"start":{"line":58,"column":8},"end":{"line":58,"column":31}},"27":{"start":{"line":75,"column":22},"end":{"line":75,"column":41}},"28":{"start":{"line":76,"column":8},"end":{"line":76,"column":65}},"29":{"start":{"line":96,"column":8},"end":{"line":99,"column":11}},"30":{"start":{"line":97,"column":29},"end":{"line":97,"column":52}},"31":{"start":{"line":98,"column":12},"end":{"line":98,"column":67}},"32":{"start":{"line":100,"column":8},"end":{"line":100,"column":20}},"33":{"start":{"line":120,"column":8},"end":{"line":123,"column":11}},"34":{"start":{"line":121,"column":29},"end":{"line":121,"column":52}},"35":{"start":{"line":122,"column":12},"end":{"line":122,"column":67}},"36":{"start":{"line":124,"column":8},"end":{"line":124,"column":20}},"37":{"start":{"line":145,"column":8},"end":{"line":148,"column":11}},"38":{"start":{"line":146,"column":28},"end":{"line":146,"column":50}},"39":{"start":{"line":147,"column":12},"end":{"line":147,"column":66}},"40":{"start":{"line":149,"column":8},"end":{"line":149,"column":20}},"41":{"start":{"line":169,"column":8},"end":{"line":169,"column":34}},"42":{"start":{"line":170,"column":8},"end":{"line":170,"column":20}},"43":{"start":{"line":191,"column":8},"end":{"line":191,"column":75}},"44":{"start":{"line":192,"column":8},"end":{"line":192,"column":20}},"45":{"start":{"line":213,"column":8},"end":{"line":213,"column":32}},"46":{"start":{"line":234,"column":25},"end":{"line":234,"column":44}},"47":{"start":{"line":235,"column":8},"end":{"line":237,"column":11}},"48":{"start":{"line":236,"column":12},"end":{"line":236,"column":71}},"49":{"start":{"line":238,"column":8},"end":{"line":238,"column":20}},"50":{"start":{"line":273,"column":27},"end":{"line":273,"column":66}},"51":{"start":{"line":274,"column":8},"end":{"line":276,"column":11}},"52":{"start":{"line":275,"column":12},"end":{"line":275,"column":67}},"53":{"start":{"line":277,"column":8},"end":{"line":277,"column":20}},"54":{"start":{"line":298,"column":8},"end":{"line":301,"column":11}},"55":{"start":{"line":299,"column":25},"end":{"line":299,"column":40}},"56":{"start":{"line":300,"column":12},"end":{"line":300,"column":72}},"57":{"start":{"line":302,"column":8},"end":{"line":302,"column":20}},"58":{"start":{"line":323,"column":8},"end":{"line":323,"column":21}},"59":{"start":{"line":324,"column":8},"end":{"line":324,"column":20}},"60":{"start":{"line":345,"column":8},"end":{"line":345,"column":39}},"61":{"start":{"line":352,"column":8},"end":{"line":354,"column":11}},"62":{"start":{"line":353,"column":12},"end":{"line":353,"column":45}},"63":{"start":{"line":355,"column":8},"end":{"line":355,"column":20}},"64":{"start":{"line":377,"column":8},"end":{"line":377,"column":34}},"65":{"start":{"line":378,"column":8},"end":{"line":378,"column":20}},"66":{"start":{"line":398,"column":8},"end":{"line":400,"column":11}},"67":{"start":{"line":399,"column":12},"end":{"line":399,"column":40}},"68":{"start":{"line":401,"column":8},"end":{"line":401,"column":20}},"69":{"start":{"line":421,"column":8},"end":{"line":421,"column":31}},"70":{"start":{"line":422,"column":8},"end":{"line":422,"column":20}},"71":{"start":{"line":442,"column":8},"end":{"line":442,"column":36}},"72":{"start":{"line":443,"column":8},"end":{"line":443,"column":20}},"73":{"start":{"line":463,"column":8},"end":{"line":465,"column":11}},"74":{"start":{"line":464,"column":12},"end":{"line":464,"column":35}},"75":{"start":{"line":466,"column":8},"end":{"line":466,"column":20}},"76":{"start":{"line":487,"column":8},"end":{"line":487,"column":30}},"77":{"start":{"line":488,"column":8},"end":{"line":488,"column":20}},"78":{"start":{"line":517,"column":8},"end":{"line":517,"column":28}},"79":{"start":{"line":518,"column":28},"end":{"line":518,"column":56}},"80":{"start":{"line":519,"column":25},"end":{"line":519,"column":83}},"81":{"start":{"line":520,"column":8},"end":{"line":529,"column":11}},"82":{"start":{"line":524,"column":12},"end":{"line":524,"column":34}},"83":{"start":{"line":525,"column":12},"end":{"line":525,"column":20}},"84":{"start":{"line":528,"column":12},"end":{"line":528,"column":29}},"85":{"start":{"line":548,"column":8},"end":{"line":548,"column":28}},"86":{"start":{"line":549,"column":27},"end":{"line":549,"column":54}},"87":{"start":{"line":550,"column":8},"end":{"line":553,"column":30}},"88":{"start":{"line":556,"column":22},"end":{"line":556,"column":62}},"89":{"start":{"line":557,"column":8},"end":{"line":557,"column":65}},"90":{"start":{"line":560,"column":8},"end":{"line":560,"column":88}},"91":{"start":{"line":563,"column":24},"end":{"line":563,"column":57}},"92":{"start":{"line":564,"column":8},"end":{"line":566,"column":9}},"93":{"start":{"line":565,"column":12},"end":{"line":565,"column":47}},"94":{"start":{"line":567,"column":8},"end":{"line":567,"column":23}},"95":{"start":{"line":570,"column":8},"end":{"line":570,"column":42}},"96":{"start":{"line":573,"column":8},"end":{"line":573,"column":25}},"97":{"start":{"line":574,"column":21},"end":{"line":574,"column":37}},"98":{"start":{"line":575,"column":29},"end":{"line":575,"column":31}},"99":{"start":{"line":576,"column":22},"end":{"line":576,"column":60}},"100":{"start":{"line":577,"column":8},"end":{"line":577,"column":80}},"101":{"start":{"line":580,"column":21},"end":{"line":580,"column":37}},"102":{"start":{"line":581,"column":29},"end":{"line":581,"column":31}},"103":{"start":{"line":582,"column":24},"end":{"line":582,"column":62}},"104":{"start":{"line":583,"column":8},"end":{"line":590,"column":11}},"105":{"start":{"line":584,"column":12},"end":{"line":585,"column":57}},"106":{"start":{"line":585,"column":16},"end":{"line":585,"column":57}},"107":{"start":{"line":586,"column":12},"end":{"line":588,"column":15}},"108":{"start":{"line":587,"column":16},"end":{"line":587,"column":51}},"109":{"start":{"line":589,"column":12},"end":{"line":589,"column":25}},"110":{"start":{"line":593,"column":8},"end":{"line":594,"column":22}},"111":{"start":{"line":594,"column":12},"end":{"line":594,"column":22}},"112":{"start":{"line":595,"column":25},"end":{"line":597,"column":38}},"113":{"start":{"line":598,"column":8},"end":{"line":608,"column":34}},"114":{"start":{"line":600,"column":12},"end":{"line":604,"column":13}},"115":{"start":{"line":601,"column":16},"end":{"line":602,"column":44}},"116":{"start":{"line":602,"column":20},"end":{"line":602,"column":44}},"117":{"start":{"line":603,"column":16},"end":{"line":603,"column":62}},"118":{"start":{"line":605,"column":12},"end":{"line":605,"column":24}},"119":{"start":{"line":611,"column":22},"end":{"line":613,"column":51}},"120":{"start":{"line":614,"column":8},"end":{"line":614,"column":36}},"121":{"start":{"line":617,"column":0},"end":{"line":617,"column":28}}},"fnMap":{"0":{"name":"isDefined","decl":{"start":{"line":12,"column":9},"end":{"line":12,"column":18}},"loc":{"start":{"line":12,"column":26},"end":{"line":14,"column":1}},"line":12},"1":{"name":"flatten","decl":{"start":{"line":15,"column":9},"end":{"line":15,"column":16}},"loc":{"start":{"line":15,"column":23},"end":{"line":17,"column":1}},"line":15},"2":{"name":"getFilename","decl":{"start":{"line":18,"column":9},"end":{"line":18,"column":20}},"loc":{"start":{"line":18,"column":27},"end":{"line":20,"column":1}},"line":18},"3":{"name":"isRegExpMatch","decl":{"start":{"line":21,"column":9},"end":{"line":21,"column":22}},"loc":{"start":{"line":21,"column":32},"end":{"line":25,"column":1}},"line":21},"4":{"name":"(anonymous_4)","decl":{"start":{"line":22,"column":11},"end":{"line":22,"column":12}},"loc":{"start":{"line":22,"column":19},"end":{"line":24,"column":5}},"line":22},"5":{"name":"cleanExtension","decl":{"start":{"line":26,"column":9},"end":{"line":26,"column":23}},"loc":{"start":{"line":26,"column":29},"end":{"line":31,"column":1}},"line":26},"6":{"name":"(anonymous_6)","decl":{"start":{"line":34,"column":4},"end":{"line":34,"column":5}},"loc":{"start":{"line":34,"column":18},"end":{"line":43,"column":5}},"line":34},"7":{"name":"(anonymous_7)","decl":{"start":{"line":57,"column":4},"end":{"line":57,"column":5}},"loc":{"start":{"line":57,"column":20},"end":{"line":59,"column":5}},"line":57},"8":{"name":"(anonymous_8)","decl":{"start":{"line":74,"column":4},"end":{"line":74,"column":5}},"loc":{"start":{"line":74,"column":24},"end":{"line":77,"column":5}},"line":74},"9":{"name":"(anonymous_9)","decl":{"start":{"line":95,"column":4},"end":{"line":95,"column":5}},"loc":{"start":{"line":95,"column":22},"end":{"line":101,"column":5}},"line":95},"10":{"name":"(anonymous_10)","decl":{"start":{"line":96,"column":23},"end":{"line":96,"column":24}},"loc":{"start":{"line":96,"column":31},"end":{"line":99,"column":9}},"line":96},"11":{"name":"(anonymous_11)","decl":{"start":{"line":119,"column":4},"end":{"line":119,"column":5}},"loc":{"start":{"line":119,"column":22},"end":{"line":125,"column":5}},"line":119},"12":{"name":"(anonymous_12)","decl":{"start":{"line":120,"column":23},"end":{"line":120,"column":24}},"loc":{"start":{"line":120,"column":31},"end":{"line":123,"column":9}},"line":120},"13":{"name":"(anonymous_13)","decl":{"start":{"line":144,"column":4},"end":{"line":144,"column":5}},"loc":{"start":{"line":144,"column":21},"end":{"line":150,"column":5}},"line":144},"14":{"name":"(anonymous_14)","decl":{"start":{"line":145,"column":23},"end":{"line":145,"column":24}},"loc":{"start":{"line":145,"column":31},"end":{"line":148,"column":9}},"line":145},"15":{"name":"(anonymous_15)","decl":{"start":{"line":168,"column":4},"end":{"line":168,"column":5}},"loc":{"start":{"line":168,"column":22},"end":{"line":171,"column":5}},"line":168},"16":{"name":"(anonymous_16)","decl":{"start":{"line":190,"column":4},"end":{"line":190,"column":5}},"loc":{"start":{"line":190,"column":19},"end":{"line":193,"column":5}},"line":190},"17":{"name":"(anonymous_17)","decl":{"start":{"line":212,"column":4},"end":{"line":212,"column":5}},"loc":{"start":{"line":212,"column":15},"end":{"line":214,"column":5}},"line":212},"18":{"name":"(anonymous_18)","decl":{"start":{"line":233,"column":4},"end":{"line":233,"column":5}},"loc":{"start":{"line":233,"column":21},"end":{"line":239,"column":5}},"line":233},"19":{"name":"(anonymous_19)","decl":{"start":{"line":235,"column":25},"end":{"line":235,"column":26}},"loc":{"start":{"line":235,"column":36},"end":{"line":237,"column":9}},"line":235},"20":{"name":"(anonymous_20)","decl":{"start":{"line":272,"column":4},"end":{"line":272,"column":5}},"loc":{"start":{"line":272,"column":17},"end":{"line":278,"column":5}},"line":272},"21":{"name":"(anonymous_21)","decl":{"start":{"line":274,"column":23},"end":{"line":274,"column":24}},"loc":{"start":{"line":274,"column":31},"end":{"line":276,"column":9}},"line":274},"22":{"name":"(anonymous_22)","decl":{"start":{"line":297,"column":4},"end":{"line":297,"column":5}},"loc":{"start":{"line":297,"column":25},"end":{"line":303,"column":5}},"line":297},"23":{"name":"(anonymous_23)","decl":{"start":{"line":298,"column":23},"end":{"line":298,"column":24}},"loc":{"start":{"line":298,"column":31},"end":{"line":301,"column":9}},"line":298},"24":{"name":"(anonymous_24)","decl":{"start":{"line":322,"column":4},"end":{"line":322,"column":5}},"loc":{"start":{"line":322,"column":14},"end":{"line":325,"column":5}},"line":322},"25":{"name":"(anonymous_25)","decl":{"start":{"line":344,"column":4},"end":{"line":344,"column":5}},"loc":{"start":{"line":344,"column":22},"end":{"line":346,"column":5}},"line":344},"26":{"name":"(anonymous_26)","decl":{"start":{"line":351,"column":4},"end":{"line":351,"column":5}},"loc":{"start":{"line":351,"column":23},"end":{"line":356,"column":5}},"line":351},"27":{"name":"(anonymous_27)","decl":{"start":{"line":352,"column":23},"end":{"line":352,"column":24}},"loc":{"start":{"line":352,"column":31},"end":{"line":354,"column":9}},"line":352},"28":{"name":"(anonymous_28)","decl":{"start":{"line":376,"column":4},"end":{"line":376,"column":5}},"loc":{"start":{"line":376,"column":10},"end":{"line":379,"column":5}},"line":376},"29":{"name":"(anonymous_29)","decl":{"start":{"line":397,"column":4},"end":{"line":397,"column":5}},"loc":{"start":{"line":397,"column":24},"end":{"line":402,"column":5}},"line":397},"30":{"name":"(anonymous_30)","decl":{"start":{"line":398,"column":23},"end":{"line":398,"column":24}},"loc":{"start":{"line":398,"column":31},"end":{"line":400,"column":9}},"line":398},"31":{"name":"(anonymous_31)","decl":{"start":{"line":420,"column":4},"end":{"line":420,"column":5}},"loc":{"start":{"line":420,"column":30},"end":{"line":423,"column":5}},"line":420},"32":{"name":"(anonymous_32)","decl":{"start":{"line":441,"column":4},"end":{"line":441,"column":5}},"loc":{"start":{"line":441,"column":16},"end":{"line":444,"column":5}},"line":441},"33":{"name":"(anonymous_33)","decl":{"start":{"line":462,"column":4},"end":{"line":462,"column":5}},"loc":{"start":{"line":462,"column":13},"end":{"line":467,"column":5}},"line":462},"34":{"name":"(anonymous_34)","decl":{"start":{"line":463,"column":23},"end":{"line":463,"column":24}},"loc":{"start":{"line":463,"column":31},"end":{"line":465,"column":9}},"line":463},"35":{"name":"(anonymous_35)","decl":{"start":{"line":486,"column":4},"end":{"line":486,"column":5}},"loc":{"start":{"line":486,"column":17},"end":{"line":489,"column":5}},"line":486},"36":{"name":"(anonymous_36)","decl":{"start":{"line":516,"column":4},"end":{"line":516,"column":5}},"loc":{"start":{"line":516,"column":11},"end":{"line":530,"column":5}},"line":516},"37":{"name":"(anonymous_37)","decl":{"start":{"line":523,"column":19},"end":{"line":523,"column":20}},"loc":{"start":{"line":523,"column":24},"end":{"line":526,"column":9}},"line":523},"38":{"name":"(anonymous_38)","decl":{"start":{"line":527,"column":21},"end":{"line":527,"column":22}},"loc":{"start":{"line":527,"column":27},"end":{"line":529,"column":9}},"line":527},"39":{"name":"(anonymous_39)","decl":{"start":{"line":547,"column":4},"end":{"line":547,"column":5}},"loc":{"start":{"line":547,"column":15},"end":{"line":554,"column":5}},"line":547},"40":{"name":"(anonymous_40)","decl":{"start":{"line":555,"column":4},"end":{"line":555,"column":5}},"loc":{"start":{"line":555,"column":27},"end":{"line":558,"column":5}},"line":555},"41":{"name":"(anonymous_41)","decl":{"start":{"line":559,"column":4},"end":{"line":559,"column":5}},"loc":{"start":{"line":559,"column":38},"end":{"line":561,"column":5}},"line":559},"42":{"name":"(anonymous_42)","decl":{"start":{"line":562,"column":4},"end":{"line":562,"column":5}},"loc":{"start":{"line":562,"column":18},"end":{"line":568,"column":5}},"line":562},"43":{"name":"(anonymous_43)","decl":{"start":{"line":569,"column":4},"end":{"line":569,"column":5}},"loc":{"start":{"line":569,"column":19},"end":{"line":571,"column":5}},"line":569},"44":{"name":"(anonymous_44)","decl":{"start":{"line":572,"column":4},"end":{"line":572,"column":5}},"loc":{"start":{"line":572,"column":21},"end":{"line":578,"column":5}},"line":572},"45":{"name":"(anonymous_45)","decl":{"start":{"line":579,"column":4},"end":{"line":579,"column":5}},"loc":{"start":{"line":579,"column":22},"end":{"line":591,"column":5}},"line":579},"46":{"name":"(anonymous_46)","decl":{"start":{"line":583,"column":28},"end":{"line":583,"column":29}},"loc":{"start":{"line":583,"column":37},"end":{"line":590,"column":9}},"line":583},"47":{"name":"(anonymous_47)","decl":{"start":{"line":586,"column":26},"end":{"line":586,"column":27}},"loc":{"start":{"line":586,"column":34},"end":{"line":588,"column":13}},"line":586},"48":{"name":"(anonymous_48)","decl":{"start":{"line":592,"column":4},"end":{"line":592,"column":5}},"loc":{"start":{"line":592,"column":38},"end":{"line":609,"column":5}},"line":592},"49":{"name":"(anonymous_49)","decl":{"start":{"line":599,"column":17},"end":{"line":599,"column":18}},"loc":{"start":{"line":599,"column":25},"end":{"line":606,"column":9}},"line":599},"50":{"name":"(anonymous_50)","decl":{"start":{"line":610,"column":4},"end":{"line":610,"column":5}},"loc":{"start":{"line":610,"column":21},"end":{"line":615,"column":5}},"line":610}},"branchMap":{"0":{"loc":{"start":{"line":27,"column":4},"end":{"line":29,"column":5}},"type":"if","locations":[{"start":{"line":27,"column":4},"end":{"line":29,"column":5}},{"start":{"line":27,"column":4},"end":{"line":29,"column":5}}],"line":27},"1":{"loc":{"start":{"line":557,"column":15},"end":{"line":557,"column":64}},"type":"binary-expr","locations":[{"start":{"line":557,"column":15},"end":{"line":557,"column":39}},{"start":{"line":557,"column":43},"end":{"line":557,"column":64}}],"line":557},"2":{"loc":{"start":{"line":560,"column":16},"end":{"line":560,"column":86}},"type":"binary-expr","locations":[{"start":{"line":560,"column":16},"end":{"line":560,"column":43}},{"start":{"line":560,"column":48},"end":{"line":560,"column":63}},{"start":{"line":560,"column":67},"end":{"line":560,"column":85}}],"line":560},"3":{"loc":{"start":{"line":564,"column":8},"end":{"line":566,"column":9}},"type":"if","locations":[{"start":{"line":564,"column":8},"end":{"line":566,"column":9}},{"start":{"line":564,"column":8},"end":{"line":566,"column":9}}],"line":564},"4":{"loc":{"start":{"line":577,"column":15},"end":{"line":577,"column":79}},"type":"cond-expr","locations":[{"start":{"line":577,"column":38},"end":{"line":577,"column":71}},{"start":{"line":577,"column":74},"end":{"line":577,"column":79}}],"line":577},"5":{"loc":{"start":{"line":584,"column":12},"end":{"line":585,"column":57}},"type":"if","locations":[{"start":{"line":584,"column":12},"end":{"line":585,"column":57}},{"start":{"line":584,"column":12},"end":{"line":585,"column":57}}],"line":584},"6":{"loc":{"start":{"line":593,"column":8},"end":{"line":594,"column":22}},"type":"if","locations":[{"start":{"line":593,"column":8},"end":{"line":594,"column":22}},{"start":{"line":593,"column":8},"end":{"line":594,"column":22}}],"line":593},"7":{"loc":{"start":{"line":595,"column":25},"end":{"line":597,"column":38}},"type":"cond-expr","locations":[{"start":{"line":596,"column":14},"end":{"line":596,"column":42}},{"start":{"line":597,"column":14},"end":{"line":597,"column":38}}],"line":595},"8":{"loc":{"start":{"line":600,"column":12},"end":{"line":604,"column":13}},"type":"if","locations":[{"start":{"line":600,"column":12},"end":{"line":604,"column":13}},{"start":{"line":600,"column":12},"end":{"line":604,"column":13}}],"line":600},"9":{"loc":{"start":{"line":601,"column":16},"end":{"line":602,"column":44}},"type":"if","locations":[{"start":{"line":601,"column":16},"end":{"line":602,"column":44}},{"start":{"line":601,"column":16},"end":{"line":602,"column":44}}],"line":601},"10":{"loc":{"start":{"line":611,"column":22},"end":{"line":613,"column":51}},"type":"cond-expr","locations":[{"start":{"line":612,"column":14},"end":{"line":612,"column":30}},{"start":{"line":613,"column":14},"end":{"line":613,"column":51}}],"line":611}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":197,"11":264,"12":131,"13":8,"14":28,"15":8,"16":3,"17":5,"18":61,"19":61,"20":61,"21":61,"22":61,"23":61,"24":61,"25":61,"26":61,"27":1,"28":1,"29":3,"30":15,"31":15,"32":3,"33":3,"34":15,"35":15,"36":3,"37":3,"38":15,"39":15,"40":3,"41":44,"42":44,"43":61,"44":61,"45":6,"46":6,"47":6,"48":8,"49":6,"50":6,"51":6,"52":20,"53":6,"54":10,"55":37,"56":37,"57":10,"58":1,"59":1,"60":1,"61":7,"62":64,"63":7,"64":4,"65":4,"66":2,"67":9,"68":2,"69":2,"70":2,"71":4,"72":4,"73":1,"74":1,"75":1,"76":4,"77":4,"78":55,"79":55,"80":55,"81":55,"82":2,"83":1,"84":55,"85":3,"86":3,"87":3,"88":137,"89":135,"90":137,"91":58,"92":58,"93":4,"94":54,"95":58,"96":3,"97":3,"98":3,"99":3,"100":3,"101":58,"102":58,"103":58,"104":56,"105":56,"106":3,"107":53,"108":113,"109":53,"110":99,"111":7,"112":90,"113":90,"114":259,"115":38,"116":31,"117":38,"118":221,"119":62,"120":62,"121":1},"f":{"0":197,"1":264,"2":131,"3":8,"4":28,"5":8,"6":61,"7":61,"8":1,"9":3,"10":15,"11":3,"12":15,"13":3,"14":15,"15":44,"16":61,"17":6,"18":6,"19":8,"20":6,"21":20,"22":10,"23":37,"24":1,"25":1,"26":7,"27":64,"28":4,"29":2,"30":9,"31":2,"32":4,"33":1,"34":1,"35":4,"36":55,"37":2,"38":55,"39":3,"40":137,"41":137,"42":58,"43":58,"44":3,"45":58,"46":56,"47":113,"48":99,"49":259,"50":62},"b":{"0":[3,5],"1":[135,23],"2":[137,125,16],"3":[4,54],"4":[1,2],"5":[3,53],"6":[7,90],"7":[7,83],"8":[38,221],"9":[31,7],"10":[4,58]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"52cae3c25abf1fc81f5caf5d54e66ae92c29b1b2"},"/Users/spragn01/workspace/node/filehound/src/functions.ts":{"path":"/Users/spragn01/workspace/node/filehound/src/functions.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":10},"end":{"line":3,"column":27}},"2":{"start":{"line":5,"column":4},"end":{"line":7,"column":6}},"3":{"start":{"line":6,"column":8},"end":{"line":6,"column":25}},"4":{"start":{"line":9,"column":0},"end":{"line":9,"column":24}},"5":{"start":{"line":11,"column":22},"end":{"line":11,"column":71}},"6":{"start":{"line":12,"column":4},"end":{"line":18,"column":6}},"7":{"start":{"line":13,"column":20},"end":{"line":13,"column":24}},"8":{"start":{"line":14,"column":8},"end":{"line":16,"column":9}},"9":{"start":{"line":15,"column":12},"end":{"line":15,"column":48}},"10":{"start":{"line":17,"column":8},"end":{"line":17,"column":21}},"11":{"start":{"line":20,"column":0},"end":{"line":20,"column":26}}},"fnMap":{"0":{"name":"negate","decl":{"start":{"line":4,"column":9},"end":{"line":4,"column":15}},"loc":{"start":{"line":4,"column":20},"end":{"line":8,"column":1}},"line":4},"1":{"name":"(anonymous_1)","decl":{"start":{"line":5,"column":11},"end":{"line":5,"column":12}},"loc":{"start":{"line":5,"column":27},"end":{"line":7,"column":5}},"line":5},"2":{"name":"compose","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":16}},"loc":{"start":{"line":10,"column":23},"end":{"line":19,"column":1}},"line":10},"3":{"name":"(anonymous_3)","decl":{"start":{"line":12,"column":11},"end":{"line":12,"column":12}},"loc":{"start":{"line":12,"column":19},"end":{"line":18,"column":5}},"line":12}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":22},"end":{"line":11,"column":71}},"type":"cond-expr","locations":[{"start":{"line":11,"column":43},"end":{"line":11,"column":64}},{"start":{"line":11,"column":67},"end":{"line":11,"column":71}}],"line":11},"1":{"loc":{"start":{"line":15,"column":20},"end":{"line":15,"column":47}},"type":"binary-expr","locations":[{"start":{"line":15,"column":20},"end":{"line":15,"column":25}},{"start":{"line":15,"column":29},"end":{"line":15,"column":47}}],"line":15}},"s":{"0":1,"1":1,"2":12,"3":81,"4":1,"5":58,"6":58,"7":301,"8":301,"9":208,"10":301,"11":1},"f":{"0":12,"1":81,"2":58,"3":301},"b":{"0":[0,58],"1":[208,206]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"51e2abc662f50a320b96a9bb3df8001104e9c307"},"/Users/spragn01/workspace/node/filehound/src/files.ts":{"path":"/Users/spragn01/workspace/node/filehound/src/files.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":10},"end":{"line":3,"column":27}},"2":{"start":{"line":4,"column":13},"end":{"line":4,"column":28}},"3":{"start":{"line":5,"column":11},"end":{"line":5,"column":24}},"4":{"start":{"line":7,"column":4},"end":{"line":7,"column":23}},"5":{"start":{"line":10,"column":17},"end":{"line":10,"column":32}},"6":{"start":{"line":11,"column":4},"end":{"line":11,"column":57}},"7":{"start":{"line":14,"column":4},"end":{"line":14,"column":29}},"8":{"start":{"line":17,"column":4},"end":{"line":19,"column":19}},"9":{"start":{"line":21,"column":0},"end":{"line":21,"column":26}},"10":{"start":{"line":23,"column":4},"end":{"line":25,"column":7}},"11":{"start":{"line":24,"column":8},"end":{"line":24,"column":69}},"12":{"start":{"line":28,"column":4},"end":{"line":32,"column":29}},"13":{"start":{"line":30,"column":8},"end":{"line":30,"column":46}},"14":{"start":{"line":34,"column":0},"end":{"line":34,"column":48}},"15":{"start":{"line":36,"column":4},"end":{"line":38,"column":6}},"16":{"start":{"line":37,"column":8},"end":{"line":37,"column":42}},"17":{"start":{"line":40,"column":0},"end":{"line":40,"column":42}},"18":{"start":{"line":42,"column":17},"end":{"line":42,"column":26}},"19":{"start":{"line":43,"column":4},"end":{"line":48,"column":5}},"20":{"start":{"line":44,"column":8},"end":{"line":46,"column":9}},"21":{"start":{"line":45,"column":12},"end":{"line":45,"column":24}},"22":{"start":{"line":47,"column":8},"end":{"line":47,"column":35}},"23":{"start":{"line":49,"column":4},"end":{"line":49,"column":17}},"24":{"start":{"line":51,"column":0},"end":{"line":51,"column":40}},"25":{"start":{"line":53,"column":4},"end":{"line":55,"column":5}},"26":{"start":{"line":54,"column":8},"end":{"line":54,"column":27}},"27":{"start":{"line":56,"column":20},"end":{"line":56,"column":58}},"28":{"start":{"line":57,"column":4},"end":{"line":57,"column":56}},"29":{"start":{"line":59,"column":0},"end":{"line":59,"column":34}}},"fnMap":{"0":{"name":"flatten","decl":{"start":{"line":6,"column":9},"end":{"line":6,"column":16}},"loc":{"start":{"line":6,"column":23},"end":{"line":8,"column":1}},"line":6},"1":{"name":"hasParent","decl":{"start":{"line":9,"column":9},"end":{"line":9,"column":18}},"loc":{"start":{"line":9,"column":27},"end":{"line":12,"column":1}},"line":9},"2":{"name":"getParent","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":18}},"loc":{"start":{"line":13,"column":24},"end":{"line":15,"column":1}},"line":13},"3":{"name":"getRoot","decl":{"start":{"line":16,"column":9},"end":{"line":16,"column":16}},"loc":{"start":{"line":16,"column":22},"end":{"line":20,"column":1}},"line":16},"4":{"name":"getSubDirectories","decl":{"start":{"line":22,"column":9},"end":{"line":22,"column":26}},"loc":{"start":{"line":22,"column":43},"end":{"line":26,"column":1}},"line":22},"5":{"name":"(anonymous_5)","decl":{"start":{"line":23,"column":27},"end":{"line":23,"column":28}},"loc":{"start":{"line":23,"column":40},"end":{"line":25,"column":5}},"line":23},"6":{"name":"findSubDirectories","decl":{"start":{"line":27,"column":9},"end":{"line":27,"column":27}},"loc":{"start":{"line":27,"column":35},"end":{"line":33,"column":1}},"line":27},"7":{"name":"(anonymous_7)","decl":{"start":{"line":29,"column":13},"end":{"line":29,"column":14}},"loc":{"start":{"line":29,"column":21},"end":{"line":31,"column":5}},"line":29},"8":{"name":"notSubDirectory","decl":{"start":{"line":35,"column":9},"end":{"line":35,"column":24}},"loc":{"start":{"line":35,"column":34},"end":{"line":39,"column":1}},"line":35},"9":{"name":"(anonymous_9)","decl":{"start":{"line":36,"column":11},"end":{"line":36,"column":12}},"loc":{"start":{"line":36,"column":19},"end":{"line":38,"column":5}},"line":36},"10":{"name":"isSubDirectory","decl":{"start":{"line":41,"column":9},"end":{"line":41,"column":23}},"loc":{"start":{"line":41,"column":41},"end":{"line":50,"column":1}},"line":41},"11":{"name":"reducePaths","decl":{"start":{"line":52,"column":9},"end":{"line":52,"column":20}},"loc":{"start":{"line":52,"column":34},"end":{"line":58,"column":1}},"line":52}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":11},"end":{"line":11,"column":56}},"type":"binary-expr","locations":[{"start":{"line":11,"column":11},"end":{"line":11,"column":17}},{"start":{"line":11,"column":22},"end":{"line":11,"column":37}},{"start":{"line":11,"column":41},"end":{"line":11,"column":55}}],"line":11},"1":{"loc":{"start":{"line":17,"column":11},"end":{"line":19,"column":18}},"type":"cond-expr","locations":[{"start":{"line":18,"column":10},"end":{"line":18,"column":43}},{"start":{"line":19,"column":10},"end":{"line":19,"column":18}}],"line":17},"2":{"loc":{"start":{"line":24,"column":15},"end":{"line":24,"column":68}},"type":"binary-expr","locations":[{"start":{"line":24,"column":15},"end":{"line":24,"column":33}},{"start":{"line":24,"column":37},"end":{"line":24,"column":68}}],"line":24},"3":{"loc":{"start":{"line":44,"column":8},"end":{"line":46,"column":9}},"type":"if","locations":[{"start":{"line":44,"column":8},"end":{"line":46,"column":9}},{"start":{"line":44,"column":8},"end":{"line":46,"column":9}}],"line":44},"4":{"loc":{"start":{"line":53,"column":4},"end":{"line":55,"column":5}},"type":"if","locations":[{"start":{"line":53,"column":4},"end":{"line":55,"column":5}},{"start":{"line":53,"column":4},"end":{"line":55,"column":5}}],"line":53}},"s":{"0":1,"1":1,"2":1,"3":1,"4":14,"5":158,"6":158,"7":130,"8":159,"9":1,"10":14,"11":42,"12":5,"13":14,"14":1,"15":7,"16":16,"17":1,"18":28,"19":28,"20":132,"21":2,"22":130,"23":26,"24":1,"25":58,"26":53,"27":5,"28":5,"29":1},"f":{"0":14,"1":158,"2":130,"3":159,"4":14,"5":42,"6":5,"7":14,"8":7,"9":16,"10":28,"11":58},"b":{"0":[158,158,144],"1":[0,159],"2":[42,28],"3":[2,130],"4":[53,5]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"508d9581314b142d979cd5ce56b62b1780a97d49"},"/Users/spragn01/workspace/node/filehound/src/arrays.ts":{"path":"/Users/spragn01/workspace/node/filehound/src/arrays.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":10},"end":{"line":3,"column":27}},"2":{"start":{"line":5,"column":4},"end":{"line":5,"column":30}},"3":{"start":{"line":7,"column":0},"end":{"line":7,"column":20}},"4":{"start":{"line":9,"column":4},"end":{"line":10,"column":23}},"5":{"start":{"line":10,"column":8},"end":{"line":10,"column":23}},"6":{"start":{"line":11,"column":4},"end":{"line":11,"column":44}},"7":{"start":{"line":13,"column":0},"end":{"line":13,"column":20}}},"fnMap":{"0":{"name":"copy","decl":{"start":{"line":4,"column":9},"end":{"line":4,"column":13}},"loc":{"start":{"line":4,"column":21},"end":{"line":6,"column":1}},"line":4},"1":{"name":"from","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":13}},"loc":{"start":{"line":8,"column":20},"end":{"line":12,"column":1}},"line":8}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":4},"end":{"line":10,"column":23}},"type":"if","locations":[{"start":{"line":9,"column":4},"end":{"line":10,"column":23}},{"start":{"line":9,"column":4},"end":{"line":10,"column":23}}],"line":9}},"s":{"0":1,"1":1,"2":62,"3":1,"4":74,"5":3,"6":71,"7":1},"f":{"0":62,"1":74},"b":{"0":[3,71]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"06a0013cad6298f216215ed7ac66c2ccc5abe412"}}