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.
- package/README.md +39 -11
- package/dist/arrays.d.ts +1 -0
- package/dist/arrays.js +4 -0
- package/dist/file.d.ts +108 -0
- package/dist/file.js +184 -0
- package/dist/filehound.d.ts +356 -0
- package/dist/filehound.js +498 -0
- package/dist/files.d.ts +4 -0
- package/dist/files.js +37 -0
- package/dist/filetype.d.ts +10 -0
- package/dist/filetype.js +9 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +6 -0
- package/dist/matchers.d.ts +324 -0
- package/dist/matchers.js +419 -0
- package/dist/walker/async.d.ts +4 -0
- package/dist/walker/async.js +237 -0
- package/dist/walker/heap.d.ts +7 -0
- package/dist/walker/heap.js +49 -0
- package/dist/walker/sync.d.ts +4 -0
- package/dist/walker/sync.js +66 -0
- package/dist/walker/walk.d.ts +33 -0
- package/dist/walker/walk.js +80 -0
- package/package.json +45 -48
- package/.github/stale.yml +0 -42
- package/.travis.yml +0 -8
- package/.vscode/launch.json +0 -21
- package/.vscode/settings.json +0 -3
- package/CONTRIBUTING.md +0 -8
- package/_config.yml +0 -1
- package/coverage/coverage.raw.json +0 -1
- package/coverage/lcov-report/arrays.ts.html +0 -98
- package/coverage/lcov-report/base.css +0 -212
- package/coverage/lcov-report/filehound.ts.html +0 -2078
- package/coverage/lcov-report/files.ts.html +0 -260
- package/coverage/lcov-report/functions.ts.html +0 -122
- package/coverage/lcov-report/index.html +0 -132
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -1
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -158
- package/coverage/lcov.info +0 -378
- package/dist/src/arrays.js +0 -15
- package/dist/src/arrays.js.map +0 -1
- package/dist/src/asyncWalker.js +0 -59
- package/dist/src/asyncWalker.js.map +0 -1
- package/dist/src/bind.js +0 -15
- package/dist/src/bind.js.map +0 -1
- package/dist/src/filehound.js +0 -597
- package/dist/src/filehound.js.map +0 -1
- package/dist/src/files.js +0 -60
- package/dist/src/files.js.map +0 -1
- package/dist/src/matcher.js +0 -51
- package/dist/src/matcher.js.map +0 -1
- package/dist/src/syncWalker.js +0 -47
- package/dist/src/syncWalker.js.map +0 -1
- package/dist/src/walkAsync.js +0 -33
- package/dist/src/walkAsync.js.map +0 -1
- package/dist/src/walkSync.js +0 -21
- package/dist/src/walkSync.js.map +0 -1
- package/dist/src/walker/walk.js +0 -68
- package/dist/src/walker/walk.js.map +0 -1
- package/dist/src/walker/walkAsync.js +0 -33
- package/dist/src/walker/walkAsync.js.map +0 -1
- package/dist/src/walker/walkSync.js +0 -21
- package/dist/src/walker/walkSync.js.map +0 -1
- package/dist/test/filehound.js +0 -872
- package/dist/test/filehound.js.map +0 -1
- package/dist/test/files.js +0 -29
- package/dist/test/files.js.map +0 -1
- package/docconfig/jsdoc.json +0 -26
- package/docconfig/template/LICENSE +0 -61
- package/docconfig/template/README.md +0 -86
- package/docconfig/template/package.json +0 -22
- package/docconfig/template/publish.js +0 -676
- package/docconfig/template/static/fonts/OpenSans-Bold-webfont.eot +0 -0
- package/docconfig/template/static/fonts/OpenSans-Bold-webfont.svg +0 -1830
- package/docconfig/template/static/fonts/OpenSans-Bold-webfont.woff +0 -0
- package/docconfig/template/static/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
- package/docconfig/template/static/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
- package/docconfig/template/static/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
- package/docconfig/template/static/fonts/OpenSans-Italic-webfont.eot +0 -0
- package/docconfig/template/static/fonts/OpenSans-Italic-webfont.svg +0 -1830
- package/docconfig/template/static/fonts/OpenSans-Italic-webfont.woff +0 -0
- package/docconfig/template/static/fonts/OpenSans-Light-webfont.eot +0 -0
- package/docconfig/template/static/fonts/OpenSans-Light-webfont.svg +0 -1831
- package/docconfig/template/static/fonts/OpenSans-Light-webfont.woff +0 -0
- package/docconfig/template/static/fonts/OpenSans-LightItalic-webfont.eot +0 -0
- package/docconfig/template/static/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
- package/docconfig/template/static/fonts/OpenSans-LightItalic-webfont.woff +0 -0
- package/docconfig/template/static/fonts/OpenSans-Regular-webfont.eot +0 -0
- package/docconfig/template/static/fonts/OpenSans-Regular-webfont.svg +0 -1831
- package/docconfig/template/static/fonts/OpenSans-Regular-webfont.woff +0 -0
- package/docconfig/template/static/fonts/OpenSans-Semibold-webfont.eot +0 -0
- package/docconfig/template/static/fonts/OpenSans-Semibold-webfont.svg +0 -1830
- package/docconfig/template/static/fonts/OpenSans-Semibold-webfont.ttf +0 -0
- package/docconfig/template/static/fonts/OpenSans-Semibold-webfont.woff +0 -0
- package/docconfig/template/static/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
- package/docconfig/template/static/fonts/OpenSans-SemiboldItalic-webfont.svg +0 -1830
- package/docconfig/template/static/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
- package/docconfig/template/static/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
- package/docconfig/template/static/scripts/linenumber.js +0 -25
- package/docconfig/template/static/scripts/prettify/Apache-License-2.0.txt +0 -202
- package/docconfig/template/static/scripts/prettify/lang-css.js +0 -2
- package/docconfig/template/static/scripts/prettify/prettify.js +0 -28
- package/docconfig/template/static/styles/jsdoc-default.css +0 -605
- package/docconfig/template/static/styles/prettify-jsdoc.css +0 -111
- package/docconfig/template/static/styles/prettify-tomorrow.css +0 -132
- package/docconfig/template/tmpl/augments.tmpl +0 -10
- package/docconfig/template/tmpl/container.tmpl +0 -183
- package/docconfig/template/tmpl/details.tmpl +0 -143
- package/docconfig/template/tmpl/example.tmpl +0 -2
- package/docconfig/template/tmpl/examples.tmpl +0 -13
- package/docconfig/template/tmpl/exceptions.tmpl +0 -32
- package/docconfig/template/tmpl/layout.tmpl +0 -47
- package/docconfig/template/tmpl/mainpage.tmpl +0 -10
- package/docconfig/template/tmpl/members.tmpl +0 -38
- package/docconfig/template/tmpl/method.tmpl +0 -105
- package/docconfig/template/tmpl/params.tmpl +0 -124
- package/docconfig/template/tmpl/properties.tmpl +0 -108
- package/docconfig/template/tmpl/returns.tmpl +0 -19
- package/docconfig/template/tmpl/source.tmpl +0 -8
- package/docconfig/template/tmpl/tutorial.tmpl +0 -19
- package/docconfig/template/tmpl/type.tmpl +0 -7
- package/docs/FileHound.html +0 -3079
- package/docs/FileHound_modified.html +0 -245
- package/docs/_config.yml +0 -1
- package/docs/filehound.js.html +0 -697
- package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Bold-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
- package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Italic-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Light-webfont.svg +0 -1831
- package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
- package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
- package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Regular-webfont.svg +0 -1831
- package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Semibold-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Semibold-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-Semibold-webfont.ttf +0 -0
- package/docs/fonts/OpenSans-Semibold-webfont.woff +0 -0
- package/docs/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-SemiboldItalic-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
- package/docs/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
- package/docs/global.html +0 -288
- package/docs/index.html +0 -154
- package/docs/scripts/linenumber.js +0 -25
- package/docs/scripts/prettify/Apache-License-2.0.txt +0 -202
- package/docs/scripts/prettify/lang-css.js +0 -2
- package/docs/scripts/prettify/prettify.js +0 -28
- package/docs/styles/jsdoc-default.css +0 -605
- package/docs/styles/prettify-jsdoc.css +0 -111
- package/docs/styles/prettify-tomorrow.css +0 -132
- package/docs.md +0 -164
- package/index.js +0 -1
- package/issue_template.md +0 -6
- package/test/filehound.ts +0 -1076
- package/test/files.ts +0 -29
- package/test/fixtures/custom/failed.txt +0 -0
- package/test/fixtures/custom/passed.txt +0 -0
- package/test/fixtures/deeplyNested/c.json +0 -0
- package/test/fixtures/deeplyNested/d.json +0 -0
- package/test/fixtures/deeplyNested/mydir/e.json +0 -0
- package/test/fixtures/deeplyNested/mydir/mydir2/f.json +0 -0
- package/test/fixtures/deeplyNested/mydir/mydir2/mydir3/mydir4/failed.json +0 -0
- package/test/fixtures/deeplyNested/mydir/mydir2/mydir3/z.json +0 -0
- package/test/fixtures/deeplyNested/mydir/mydir2/y.json +0 -0
- package/test/fixtures/deeplyNestedWithHiddenDir/c.json +0 -0
- package/test/fixtures/deeplyNestedWithHiddenDir/d.json +0 -0
- package/test/fixtures/deeplyNestedWithHiddenDir/mydir/e.json +0 -0
- package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/f.json +0 -0
- package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/mydir3/mydir4/.mydir5/.keep +0 -0
- package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/mydir3/mydir4/failed.json +0 -0
- package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/mydir3/z.json +0 -0
- package/test/fixtures/deeplyNestedWithHiddenDir/mydir/mydir2/y.json +0 -0
- package/test/fixtures/ext/Dummy.java +0 -0
- package/test/fixtures/ext/Dumpy.go +0 -0
- package/test/fixtures/ext/dummy.json +0 -0
- package/test/fixtures/ext/dummy.txt +0 -0
- package/test/fixtures/justFiles/a.json +0 -0
- package/test/fixtures/justFiles/b.json +0 -0
- package/test/fixtures/justFiles/dummy.txt +0 -0
- package/test/fixtures/mixed/a.json +0 -0
- package/test/fixtures/mixed/aabbcc.json +0 -0
- package/test/fixtures/mixed/ab.json +0 -0
- package/test/fixtures/mixed/z.json +0 -0
- package/test/fixtures/nested/.hidden1/bad.txt +0 -0
- package/test/fixtures/nested/c.json +0 -0
- package/test/fixtures/nested/d.json +0 -0
- package/test/fixtures/nested/mydir/e.json +0 -0
- package/test/fixtures/sizes/10b.txt +0 -0
- package/test/fixtures/sizes/1b.txt +0 -0
- package/test/fixtures/sizes/1k.txt +0 -0
- package/test/fixtures/sizes/2k.txt +0 -0
- package/test/fixtures/visibility/.hidden/.hidden.json +0 -0
- package/test/fixtures/visibility/.hidden/visible.json +0 -3
- package/test/fixtures/visibility/.hidden.json +0 -3
- package/test/fixtures/visibility/visible/.hidden.json +0 -3
- package/test/fixtures/visibility/visible.json +0 -3
- package/test/mocha.opts +0 -4
- package/tsconfig.json +0 -16
- package/tslint.json +0 -44
package/dist/test/filehound.js
DELETED
|
@@ -1,872 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
const chai_1 = require("chai");
|
|
12
|
-
const fs = require("fs");
|
|
13
|
-
const path = require("path");
|
|
14
|
-
const moment = require("moment");
|
|
15
|
-
const sinon = require("sinon");
|
|
16
|
-
const File = require("file-js");
|
|
17
|
-
const bluebird = require("bluebird");
|
|
18
|
-
const filehound_1 = require("../src/filehound");
|
|
19
|
-
const justFiles = qualifyNames([
|
|
20
|
-
'/justFiles/a.json',
|
|
21
|
-
'/justFiles/b.json',
|
|
22
|
-
'/justFiles/dummy.txt'
|
|
23
|
-
]);
|
|
24
|
-
const nestedFiles = qualifyNames([
|
|
25
|
-
'/nested/.hidden1/bad.txt',
|
|
26
|
-
'/nested/c.json',
|
|
27
|
-
'nested/d.json',
|
|
28
|
-
'/nested/mydir/e.json'
|
|
29
|
-
]);
|
|
30
|
-
const textFiles = qualifyNames(['/justFiles/dummy.txt']);
|
|
31
|
-
const mixedExtensions = qualifyNames(['/ext/dummy.json', '/ext/dummy.txt']);
|
|
32
|
-
const matchFiles = qualifyNames(['/mixed/aabbcc.json', '/mixed/ab.json']);
|
|
33
|
-
const sandbox = sinon.sandbox.create();
|
|
34
|
-
function getAbsolutePath(file) {
|
|
35
|
-
return path.join(__dirname + '/fixtures/', file);
|
|
36
|
-
}
|
|
37
|
-
function qualifyNames(names) {
|
|
38
|
-
return names.map(getAbsolutePath);
|
|
39
|
-
}
|
|
40
|
-
function createFile(fname, opts) {
|
|
41
|
-
const time = new Date(moment()
|
|
42
|
-
.subtract(opts.duration, opts.modifier)
|
|
43
|
-
.format());
|
|
44
|
-
const fd = fs.openSync(fname, 'w+');
|
|
45
|
-
fs.futimesSync(fd, time, time);
|
|
46
|
-
fs.closeSync(fd);
|
|
47
|
-
}
|
|
48
|
-
function deleteFile(fname) {
|
|
49
|
-
return fs.unlinkSync(fname);
|
|
50
|
-
}
|
|
51
|
-
describe('FileHound', () => __awaiter(this, void 0, void 0, function* () {
|
|
52
|
-
const fixtureDir = __dirname + '/fixtures';
|
|
53
|
-
describe('.socket', () => __awaiter(this, void 0, void 0, function* () {
|
|
54
|
-
const file = {
|
|
55
|
-
isSocket: () => {
|
|
56
|
-
return true;
|
|
57
|
-
},
|
|
58
|
-
isDirectorySync: () => {
|
|
59
|
-
return false;
|
|
60
|
-
},
|
|
61
|
-
isDirectory: () => {
|
|
62
|
-
return bluebird.resolve(false);
|
|
63
|
-
},
|
|
64
|
-
getName: () => {
|
|
65
|
-
return getAbsolutePath('/types/socket1');
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
beforeEach(() => {
|
|
69
|
-
const root = {
|
|
70
|
-
isDirectorySync: () => {
|
|
71
|
-
return true;
|
|
72
|
-
},
|
|
73
|
-
isDirectory: () => __awaiter(this, void 0, void 0, function* () {
|
|
74
|
-
return true;
|
|
75
|
-
}),
|
|
76
|
-
getDepthSync: () => {
|
|
77
|
-
return 0;
|
|
78
|
-
},
|
|
79
|
-
getFiles: () => {
|
|
80
|
-
return bluebird.resolve()
|
|
81
|
-
.then(() => {
|
|
82
|
-
return [file];
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
sandbox.stub(File, 'create')
|
|
87
|
-
.returns(root);
|
|
88
|
-
});
|
|
89
|
-
afterEach(() => {
|
|
90
|
-
sandbox.restore();
|
|
91
|
-
});
|
|
92
|
-
it('filters by socket type files', () => __awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
const sockets = yield filehound_1.default.create()
|
|
94
|
-
.paths(fixtureDir + '/types')
|
|
95
|
-
.socket()
|
|
96
|
-
.find();
|
|
97
|
-
chai_1.assert.deepEqual(sockets, [file.getName()]);
|
|
98
|
-
}));
|
|
99
|
-
}));
|
|
100
|
-
describe('.directory', () => {
|
|
101
|
-
it('returns sub-directories of a given directory', () => {
|
|
102
|
-
const expectedDirectories = qualifyNames([
|
|
103
|
-
'/deeplyNested/mydir',
|
|
104
|
-
'/deeplyNested/mydir/mydir2',
|
|
105
|
-
'/deeplyNested/mydir/mydir2/mydir3',
|
|
106
|
-
'/deeplyNested/mydir/mydir2/mydir3/mydir4'
|
|
107
|
-
]);
|
|
108
|
-
const query = filehound_1.default.create()
|
|
109
|
-
.paths(fixtureDir + '/deeplyNested')
|
|
110
|
-
.directory()
|
|
111
|
-
.find();
|
|
112
|
-
return query.then((directories) => {
|
|
113
|
-
chai_1.assert.deepEqual(directories, expectedDirectories);
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
it('ignores hidden directories', () => {
|
|
117
|
-
const expectedDirectories = qualifyNames([
|
|
118
|
-
'/deeplyNestedWithHiddenDir/mydir',
|
|
119
|
-
'/deeplyNestedWithHiddenDir/mydir/mydir2',
|
|
120
|
-
'/deeplyNestedWithHiddenDir/mydir/mydir2/mydir3',
|
|
121
|
-
'/deeplyNestedWithHiddenDir/mydir/mydir2/mydir3/mydir4'
|
|
122
|
-
]);
|
|
123
|
-
const query = filehound_1.default.create()
|
|
124
|
-
.paths(fixtureDir + '/deeplyNestedWithHiddenDir')
|
|
125
|
-
.directory()
|
|
126
|
-
.ignoreHiddenDirectories()
|
|
127
|
-
.find();
|
|
128
|
-
return query.then((directories) => {
|
|
129
|
-
chai_1.assert.deepEqual(directories, expectedDirectories);
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
it('filters matching directories', () => {
|
|
133
|
-
const expectedDirectories = qualifyNames([
|
|
134
|
-
'/deeplyNested/mydir',
|
|
135
|
-
'/deeplyNested/mydir/mydir2',
|
|
136
|
-
'/deeplyNested/mydir/mydir2/mydir3'
|
|
137
|
-
]);
|
|
138
|
-
const query = filehound_1.default.create()
|
|
139
|
-
.paths(fixtureDir + '/deeplyNested')
|
|
140
|
-
.directory()
|
|
141
|
-
.match('*dir4*')
|
|
142
|
-
.not()
|
|
143
|
-
.find();
|
|
144
|
-
return query.then((directories) => {
|
|
145
|
-
chai_1.assert.deepEqual(directories, expectedDirectories);
|
|
146
|
-
});
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
describe('.depth', () => {
|
|
150
|
-
it('only returns files in the current directory', () => {
|
|
151
|
-
const query = filehound_1.default.create()
|
|
152
|
-
.paths(fixtureDir + '/deeplyNested')
|
|
153
|
-
.depth(0)
|
|
154
|
-
.find();
|
|
155
|
-
return query.then((files) => {
|
|
156
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/deeplyNested/c.json', 'deeplyNested/d.json']));
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
it('only returns files one level deep', () => {
|
|
160
|
-
const query = filehound_1.default.create()
|
|
161
|
-
.paths(fixtureDir + '/deeplyNested')
|
|
162
|
-
.depth(1)
|
|
163
|
-
.find();
|
|
164
|
-
return query.then((files) => {
|
|
165
|
-
chai_1.assert.deepEqual(files, qualifyNames([
|
|
166
|
-
'/deeplyNested/c.json',
|
|
167
|
-
'deeplyNested/d.json',
|
|
168
|
-
'deeplyNested/mydir/e.json'
|
|
169
|
-
]));
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
|
-
it('returns files n level deep', () => {
|
|
173
|
-
const query = filehound_1.default.create()
|
|
174
|
-
.paths(fixtureDir + '/deeplyNested')
|
|
175
|
-
.depth(3)
|
|
176
|
-
.find();
|
|
177
|
-
return query.then((files) => {
|
|
178
|
-
files.sort();
|
|
179
|
-
chai_1.assert.deepEqual(files, qualifyNames([
|
|
180
|
-
'deeplyNested/c.json',
|
|
181
|
-
'deeplyNested/d.json',
|
|
182
|
-
'deeplyNested/mydir/e.json',
|
|
183
|
-
'deeplyNested/mydir/mydir2/f.json',
|
|
184
|
-
'deeplyNested/mydir/mydir2/mydir3/z.json',
|
|
185
|
-
'deeplyNested/mydir/mydir2/y.json'
|
|
186
|
-
]));
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
it('returns files n level deep relative to path', () => {
|
|
190
|
-
const query = filehound_1.default.create()
|
|
191
|
-
.paths(fixtureDir + '/deeplyNested', fixtureDir + '/deeplyNested/mydir')
|
|
192
|
-
.depth(0)
|
|
193
|
-
.find();
|
|
194
|
-
return query.then((files) => {
|
|
195
|
-
files.sort();
|
|
196
|
-
chai_1.assert.deepEqual(files, qualifyNames([
|
|
197
|
-
'deeplyNested/c.json',
|
|
198
|
-
'deeplyNested/d.json',
|
|
199
|
-
'deeplyNested/mydir/e.json'
|
|
200
|
-
]));
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
describe('.path', () => {
|
|
205
|
-
it('returns all files in a given directory', () => {
|
|
206
|
-
const query = filehound_1.default.create()
|
|
207
|
-
.path(fixtureDir + '/justFiles')
|
|
208
|
-
.find();
|
|
209
|
-
return query.then((files) => {
|
|
210
|
-
chai_1.assert.deepEqual(files, justFiles);
|
|
211
|
-
});
|
|
212
|
-
});
|
|
213
|
-
it('ignores all paths except the first', () => {
|
|
214
|
-
const location1 = fixtureDir + '/justFiles';
|
|
215
|
-
const query = filehound_1.default.create()
|
|
216
|
-
.path(location1)
|
|
217
|
-
.find();
|
|
218
|
-
return query.then((files) => {
|
|
219
|
-
chai_1.assert.deepEqual(files, justFiles);
|
|
220
|
-
});
|
|
221
|
-
});
|
|
222
|
-
it('returns an error when a given path is invalid', () => {
|
|
223
|
-
const badLocation = fixtureDir + '/justBad';
|
|
224
|
-
const query = filehound_1.default.create()
|
|
225
|
-
.path(badLocation)
|
|
226
|
-
.find();
|
|
227
|
-
return query.catch((err) => {
|
|
228
|
-
chai_1.assert.ok(err);
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
describe('.paths', () => {
|
|
233
|
-
it('returns all files in a given directory', () => {
|
|
234
|
-
const query = filehound_1.default.create()
|
|
235
|
-
.paths(fixtureDir + '/justFiles')
|
|
236
|
-
.find();
|
|
237
|
-
return query.then((files) => {
|
|
238
|
-
chai_1.assert.deepEqual(files, justFiles);
|
|
239
|
-
});
|
|
240
|
-
});
|
|
241
|
-
it('returns files performing a recursive search', () => {
|
|
242
|
-
const query = filehound_1.default.create()
|
|
243
|
-
.paths(fixtureDir + '/nested')
|
|
244
|
-
.find();
|
|
245
|
-
return query.then((files) => {
|
|
246
|
-
chai_1.assert.deepEqual(files, nestedFiles);
|
|
247
|
-
});
|
|
248
|
-
});
|
|
249
|
-
it('returns matching files from multiple search paths', () => {
|
|
250
|
-
const location1 = fixtureDir + '/nested';
|
|
251
|
-
const location2 = fixtureDir + '/justFiles';
|
|
252
|
-
const query = filehound_1.default.create()
|
|
253
|
-
.paths(location1, location2)
|
|
254
|
-
.find();
|
|
255
|
-
return query.then((files) => {
|
|
256
|
-
const expected = nestedFiles.concat(justFiles)
|
|
257
|
-
.sort();
|
|
258
|
-
chai_1.assert.deepEqual(files, expected);
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
it('returns matching files given a array of paths', () => {
|
|
262
|
-
const location1 = fixtureDir + '/nested';
|
|
263
|
-
const location2 = fixtureDir + '/justFiles';
|
|
264
|
-
const query = filehound_1.default.create()
|
|
265
|
-
.paths([location1, location2])
|
|
266
|
-
.find();
|
|
267
|
-
return query.then((files) => {
|
|
268
|
-
const expected = nestedFiles.concat(justFiles)
|
|
269
|
-
.sort();
|
|
270
|
-
chai_1.assert.deepEqual(files, expected);
|
|
271
|
-
});
|
|
272
|
-
});
|
|
273
|
-
it('removes duplicate paths', () => {
|
|
274
|
-
const location1 = fixtureDir + '/nested';
|
|
275
|
-
const fh = filehound_1.default.create();
|
|
276
|
-
fh.paths(location1, location1);
|
|
277
|
-
chai_1.assert.deepEqual(fh.getSearchPaths(), [location1]);
|
|
278
|
-
});
|
|
279
|
-
it('returns a defensive copy of the search directories', () => {
|
|
280
|
-
const fh = filehound_1.default.create();
|
|
281
|
-
fh.paths('a', 'b', 'c');
|
|
282
|
-
const directories = fh.getSearchPaths();
|
|
283
|
-
directories.push('d');
|
|
284
|
-
chai_1.assert.equal(fh.getSearchPaths().length, 3);
|
|
285
|
-
});
|
|
286
|
-
it('normalises paths', () => {
|
|
287
|
-
const location1 = fixtureDir + '/nested';
|
|
288
|
-
const location2 = fixtureDir + '/nested/mydir';
|
|
289
|
-
const location3 = fixtureDir + '/justFiles/moreFiles';
|
|
290
|
-
const location4 = fixtureDir + '/justFiles';
|
|
291
|
-
const fh = filehound_1.default.create();
|
|
292
|
-
fh.paths(location2, location1, location4, location3);
|
|
293
|
-
chai_1.assert.deepEqual(fh.getSearchPaths(), [location4, location1]);
|
|
294
|
-
});
|
|
295
|
-
});
|
|
296
|
-
describe('.discard', () => {
|
|
297
|
-
it('ignores matching sub-directories', () => {
|
|
298
|
-
const query = filehound_1.default.create()
|
|
299
|
-
.paths(fixtureDir + '/nested')
|
|
300
|
-
.discard('mydir')
|
|
301
|
-
.find();
|
|
302
|
-
const expected = nestedFiles.filter(f => !/mydir/.test(f));
|
|
303
|
-
return query.then((files) => {
|
|
304
|
-
chai_1.assert.deepEqual(files, expected);
|
|
305
|
-
});
|
|
306
|
-
});
|
|
307
|
-
it('ignores files', () => {
|
|
308
|
-
const query = filehound_1.default.create()
|
|
309
|
-
.paths(fixtureDir + '/nested')
|
|
310
|
-
.discard('c.json')
|
|
311
|
-
.find();
|
|
312
|
-
const expected = nestedFiles.filter(f => !/c.json/.test(f));
|
|
313
|
-
return query.then((files) => {
|
|
314
|
-
chai_1.assert.deepEqual(files, expected);
|
|
315
|
-
});
|
|
316
|
-
});
|
|
317
|
-
it('ignores everything using a greedy match', () => {
|
|
318
|
-
const query = filehound_1.default.create()
|
|
319
|
-
.paths(fixtureDir + '/nested')
|
|
320
|
-
.discard('.*')
|
|
321
|
-
.find();
|
|
322
|
-
return query.then((files) => {
|
|
323
|
-
chai_1.assert.deepEqual(files, []);
|
|
324
|
-
});
|
|
325
|
-
});
|
|
326
|
-
it('matches all files after being negated', () => {
|
|
327
|
-
const query = filehound_1.default.create()
|
|
328
|
-
.paths(fixtureDir + '/nested')
|
|
329
|
-
.discard('.*')
|
|
330
|
-
.not()
|
|
331
|
-
.find();
|
|
332
|
-
return query.then((files) => {
|
|
333
|
-
chai_1.assert.deepEqual(files, nestedFiles);
|
|
334
|
-
});
|
|
335
|
-
});
|
|
336
|
-
it('applies multiple discard filters as variable aruments', () => {
|
|
337
|
-
const query = filehound_1.default.create()
|
|
338
|
-
.paths(fixtureDir + '/mixed')
|
|
339
|
-
.discard('a.json', 'z.json')
|
|
340
|
-
.find();
|
|
341
|
-
return query.then((files) => {
|
|
342
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/mixed/aabbcc.json', '/mixed/ab.json']));
|
|
343
|
-
});
|
|
344
|
-
});
|
|
345
|
-
it('applies an array of discard filters', () => {
|
|
346
|
-
const query = filehound_1.default.create()
|
|
347
|
-
.paths(fixtureDir + '/mixed')
|
|
348
|
-
.discard(['a.json', 'z.json'])
|
|
349
|
-
.find();
|
|
350
|
-
return query.then((files) => {
|
|
351
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/mixed/aabbcc.json', '/mixed/ab.json']));
|
|
352
|
-
});
|
|
353
|
-
});
|
|
354
|
-
});
|
|
355
|
-
describe('.findSync', () => {
|
|
356
|
-
it('returns an array of matching files', () => {
|
|
357
|
-
const files = filehound_1.default.create()
|
|
358
|
-
.paths(fixtureDir + '/justFiles')
|
|
359
|
-
.findSync();
|
|
360
|
-
chai_1.assert.deepEqual(files, justFiles);
|
|
361
|
-
});
|
|
362
|
-
it('filters matching directories', () => {
|
|
363
|
-
const expectedDirectories = qualifyNames([
|
|
364
|
-
'/deeplyNested/mydir',
|
|
365
|
-
'/deeplyNested/mydir/mydir2',
|
|
366
|
-
'/deeplyNested/mydir/mydir2/mydir3'
|
|
367
|
-
]);
|
|
368
|
-
const directories = filehound_1.default.create()
|
|
369
|
-
.paths(fixtureDir + '/deeplyNested')
|
|
370
|
-
.directory()
|
|
371
|
-
.match('*dir4*')
|
|
372
|
-
.not()
|
|
373
|
-
.findSync();
|
|
374
|
-
chai_1.assert.deepEqual(directories, expectedDirectories);
|
|
375
|
-
});
|
|
376
|
-
it('filters matching files', () => {
|
|
377
|
-
const files = filehound_1.default.create()
|
|
378
|
-
.paths(fixtureDir + '/justFiles')
|
|
379
|
-
.ext('txt')
|
|
380
|
-
.findSync();
|
|
381
|
-
chai_1.assert.deepEqual(files, textFiles);
|
|
382
|
-
});
|
|
383
|
-
});
|
|
384
|
-
describe('.ext', () => {
|
|
385
|
-
it('returns files for a given ext', () => {
|
|
386
|
-
const query = filehound_1.default.create()
|
|
387
|
-
.ext('txt')
|
|
388
|
-
.paths(fixtureDir + '/justFiles')
|
|
389
|
-
.find();
|
|
390
|
-
return query.then((files) => {
|
|
391
|
-
chai_1.assert.deepEqual(files, textFiles);
|
|
392
|
-
});
|
|
393
|
-
});
|
|
394
|
-
it('returns files for a given ext including a period', () => {
|
|
395
|
-
const query = filehound_1.default.create()
|
|
396
|
-
.ext('.txt')
|
|
397
|
-
.paths(fixtureDir + '/justFiles')
|
|
398
|
-
.find();
|
|
399
|
-
return query.then((files) => {
|
|
400
|
-
chai_1.assert.deepEqual(files, textFiles);
|
|
401
|
-
});
|
|
402
|
-
});
|
|
403
|
-
it('returns files for all matching extensions', () => {
|
|
404
|
-
const query = filehound_1.default.create()
|
|
405
|
-
.ext(['txt', '.json'])
|
|
406
|
-
.paths(fixtureDir + '/ext')
|
|
407
|
-
.find();
|
|
408
|
-
return query.then((files) => {
|
|
409
|
-
chai_1.assert.deepEqual(files, mixedExtensions);
|
|
410
|
-
});
|
|
411
|
-
});
|
|
412
|
-
it('supports var args', () => {
|
|
413
|
-
const query = filehound_1.default.create()
|
|
414
|
-
.ext('.txt', 'json')
|
|
415
|
-
.paths(fixtureDir + '/ext')
|
|
416
|
-
.find();
|
|
417
|
-
return query.then((files) => {
|
|
418
|
-
chai_1.assert.deepEqual(files, mixedExtensions);
|
|
419
|
-
});
|
|
420
|
-
});
|
|
421
|
-
});
|
|
422
|
-
describe('.match', () => {
|
|
423
|
-
it('returns files for given match name', () => {
|
|
424
|
-
const query = filehound_1.default.create()
|
|
425
|
-
.match('*ab*.json')
|
|
426
|
-
.paths(fixtureDir + '/mixed')
|
|
427
|
-
.find();
|
|
428
|
-
return query.then((files) => {
|
|
429
|
-
chai_1.assert.deepEqual(files.sort(), matchFiles);
|
|
430
|
-
});
|
|
431
|
-
});
|
|
432
|
-
it('returns files using glob method', () => {
|
|
433
|
-
const query = filehound_1.default.create()
|
|
434
|
-
.glob('*ab*.json')
|
|
435
|
-
.paths(fixtureDir + '/mixed')
|
|
436
|
-
.find();
|
|
437
|
-
return query.then((files) => {
|
|
438
|
-
chai_1.assert.deepEqual(files.sort(), matchFiles);
|
|
439
|
-
});
|
|
440
|
-
});
|
|
441
|
-
it('performs recursive search using matching on a given pattern', () => {
|
|
442
|
-
const query = filehound_1.default.create()
|
|
443
|
-
.paths(fixtureDir + '/nested')
|
|
444
|
-
.match('*.json')
|
|
445
|
-
.find();
|
|
446
|
-
const expected = nestedFiles.filter(f => /\.json$/.test(f));
|
|
447
|
-
return query.then((files) => {
|
|
448
|
-
chai_1.assert.deepEqual(files.sort(), expected);
|
|
449
|
-
});
|
|
450
|
-
});
|
|
451
|
-
});
|
|
452
|
-
describe('.not', () => {
|
|
453
|
-
it('returns files not matching the given query', () => {
|
|
454
|
-
const notJsonStartingWithZ = filehound_1.default.create()
|
|
455
|
-
.match('*.json')
|
|
456
|
-
.paths(fixtureDir + '/justFiles')
|
|
457
|
-
.not()
|
|
458
|
-
.find();
|
|
459
|
-
return notJsonStartingWithZ.then((files) => {
|
|
460
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/justFiles/dummy.txt']));
|
|
461
|
-
});
|
|
462
|
-
});
|
|
463
|
-
});
|
|
464
|
-
describe('.any', () => {
|
|
465
|
-
it('returns matching files for any query', () => {
|
|
466
|
-
const jsonStartingWithZ = filehound_1.default.create()
|
|
467
|
-
.match('*.json')
|
|
468
|
-
.paths(fixtureDir + '/justFiles');
|
|
469
|
-
// .find();
|
|
470
|
-
const onlyTextFles = filehound_1.default.create()
|
|
471
|
-
.ext('txt')
|
|
472
|
-
.paths(fixtureDir + '/justFiles');
|
|
473
|
-
// .find();
|
|
474
|
-
const results = filehound_1.default.any(jsonStartingWithZ, onlyTextFles);
|
|
475
|
-
return results.then((files) => {
|
|
476
|
-
chai_1.assert.deepEqual(files, justFiles);
|
|
477
|
-
});
|
|
478
|
-
});
|
|
479
|
-
});
|
|
480
|
-
describe('.size', () => {
|
|
481
|
-
it('returns files matched using the equality operator by default', () => {
|
|
482
|
-
const sizeFile10Bytes = filehound_1.default.create()
|
|
483
|
-
.size(20)
|
|
484
|
-
.paths(fixtureDir + '/justFiles')
|
|
485
|
-
.find();
|
|
486
|
-
return sizeFile10Bytes.then((files) => {
|
|
487
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/justFiles/b.json']));
|
|
488
|
-
});
|
|
489
|
-
});
|
|
490
|
-
it('returns files that equal a given number of bytes', () => {
|
|
491
|
-
const sizeFile10Bytes = filehound_1.default.create()
|
|
492
|
-
.size('==20')
|
|
493
|
-
.paths(fixtureDir + '/justFiles')
|
|
494
|
-
.find();
|
|
495
|
-
return sizeFile10Bytes.then((files) => {
|
|
496
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/justFiles/b.json']));
|
|
497
|
-
});
|
|
498
|
-
});
|
|
499
|
-
it('returns files greater than a given size', () => {
|
|
500
|
-
const sizeGreaterThan1k = filehound_1.default.create()
|
|
501
|
-
.size('>1024')
|
|
502
|
-
.paths(fixtureDir + '/sizes')
|
|
503
|
-
.find();
|
|
504
|
-
return sizeGreaterThan1k.then((files) => {
|
|
505
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/sizes/2k.txt']));
|
|
506
|
-
});
|
|
507
|
-
});
|
|
508
|
-
it('returns files less than a given size', () => {
|
|
509
|
-
const sizeLessThan1k = filehound_1.default.create()
|
|
510
|
-
.size('<1024')
|
|
511
|
-
.paths(fixtureDir + '/sizes')
|
|
512
|
-
.find();
|
|
513
|
-
return sizeLessThan1k.then((files) => {
|
|
514
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/sizes/10b.txt', '/sizes/1b.txt']));
|
|
515
|
-
});
|
|
516
|
-
});
|
|
517
|
-
it('returns files using file size units', () => {
|
|
518
|
-
const sizeLessThan15bytes = filehound_1.default.create()
|
|
519
|
-
.size('<15b')
|
|
520
|
-
.paths(fixtureDir + '/sizes')
|
|
521
|
-
.find();
|
|
522
|
-
return sizeLessThan15bytes.then((files) => {
|
|
523
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/sizes/10b.txt', '/sizes/1b.txt']));
|
|
524
|
-
});
|
|
525
|
-
});
|
|
526
|
-
it('returns files less than or equal to a given size', () => {
|
|
527
|
-
const lessThanOrEqualTo1k = filehound_1.default.create()
|
|
528
|
-
.size('<=1024')
|
|
529
|
-
.paths(fixtureDir + '/sizes')
|
|
530
|
-
.find();
|
|
531
|
-
return lessThanOrEqualTo1k.then((files) => {
|
|
532
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/sizes/10b.txt', '/sizes/1b.txt', '/sizes/1k.txt']));
|
|
533
|
-
});
|
|
534
|
-
});
|
|
535
|
-
it('returns files greater than or equal to a given size', () => {
|
|
536
|
-
const greaterThanOrEqualTo1k = filehound_1.default.create()
|
|
537
|
-
.size('>=1024')
|
|
538
|
-
.paths(fixtureDir + '/sizes')
|
|
539
|
-
.find();
|
|
540
|
-
return greaterThanOrEqualTo1k.then((files) => {
|
|
541
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/sizes/1k.txt', '/sizes/2k.txt']));
|
|
542
|
-
});
|
|
543
|
-
});
|
|
544
|
-
it('returns files within a given size range', () => {
|
|
545
|
-
const range = filehound_1.default.create()
|
|
546
|
-
.size('>0')
|
|
547
|
-
.size('<=1024')
|
|
548
|
-
.paths(fixtureDir + '/sizes')
|
|
549
|
-
.find();
|
|
550
|
-
return range.then((files) => {
|
|
551
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/sizes/10b.txt', '/sizes/1b.txt', '/sizes/1k.txt']));
|
|
552
|
-
});
|
|
553
|
-
});
|
|
554
|
-
});
|
|
555
|
-
describe('.isEmpty()', () => {
|
|
556
|
-
it('returns zero length files', () => {
|
|
557
|
-
const allEmpty = filehound_1.default.create()
|
|
558
|
-
.isEmpty()
|
|
559
|
-
.paths(fixtureDir + '/justFiles')
|
|
560
|
-
.find();
|
|
561
|
-
return allEmpty.then((files) => {
|
|
562
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/justFiles/a.json', '/justFiles/dummy.txt']));
|
|
563
|
-
});
|
|
564
|
-
});
|
|
565
|
-
});
|
|
566
|
-
describe('.ignoreHiddenFiles()', () => {
|
|
567
|
-
it('ignores hidden files', () => {
|
|
568
|
-
const noHiddenFiles = filehound_1.default.create()
|
|
569
|
-
.ignoreHiddenFiles()
|
|
570
|
-
.paths(fixtureDir + '/visibility')
|
|
571
|
-
.find();
|
|
572
|
-
noHiddenFiles.then((files) => {
|
|
573
|
-
chai_1.assert.equal(files.length, 2);
|
|
574
|
-
chai_1.assert.deepEqual(files, qualifyNames([
|
|
575
|
-
'/visibility/.hidden/visible.json',
|
|
576
|
-
'/visibility/visible.json'
|
|
577
|
-
]));
|
|
578
|
-
});
|
|
579
|
-
});
|
|
580
|
-
it('ignores files within hidden directories', () => {
|
|
581
|
-
const noHiddenFiles = filehound_1.default.create()
|
|
582
|
-
.ignoreHiddenDirectories()
|
|
583
|
-
.ignoreHiddenFiles()
|
|
584
|
-
.paths(fixtureDir + '/visibility')
|
|
585
|
-
.find();
|
|
586
|
-
noHiddenFiles.then((files) => {
|
|
587
|
-
chai_1.assert.equal(files.length, 1);
|
|
588
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/visibility/visible.json']));
|
|
589
|
-
});
|
|
590
|
-
});
|
|
591
|
-
});
|
|
592
|
-
describe('.addFilter', () => {
|
|
593
|
-
it('returns files based on a custom filter', () => {
|
|
594
|
-
const customFilter = filehound_1.default.create()
|
|
595
|
-
.addFilter((file) => {
|
|
596
|
-
return file.sizeSync() === 1024;
|
|
597
|
-
})
|
|
598
|
-
.paths(fixtureDir + '/custom')
|
|
599
|
-
.find();
|
|
600
|
-
return customFilter.then((files) => {
|
|
601
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/custom/passed.txt']));
|
|
602
|
-
});
|
|
603
|
-
});
|
|
604
|
-
});
|
|
605
|
-
describe('.modified', () => {
|
|
606
|
-
before(() => {
|
|
607
|
-
fs.mkdirSync(getAbsolutePath('dates'));
|
|
608
|
-
});
|
|
609
|
-
after(() => {
|
|
610
|
-
fs.rmdirSync(getAbsolutePath('dates'));
|
|
611
|
-
});
|
|
612
|
-
const files = [
|
|
613
|
-
{
|
|
614
|
-
name: getAbsolutePath('dates/a.txt'),
|
|
615
|
-
modified: 10
|
|
616
|
-
},
|
|
617
|
-
{
|
|
618
|
-
name: getAbsolutePath('dates/w.txt'),
|
|
619
|
-
modified: 9
|
|
620
|
-
},
|
|
621
|
-
{
|
|
622
|
-
name: getAbsolutePath('dates/x.txt'),
|
|
623
|
-
modified: 2
|
|
624
|
-
},
|
|
625
|
-
{
|
|
626
|
-
name: getAbsolutePath('dates/y.txt'),
|
|
627
|
-
modified: 1
|
|
628
|
-
},
|
|
629
|
-
{
|
|
630
|
-
name: getAbsolutePath('dates/z.txt'),
|
|
631
|
-
modified: 0
|
|
632
|
-
}
|
|
633
|
-
];
|
|
634
|
-
beforeEach(() => {
|
|
635
|
-
files.forEach((file) => {
|
|
636
|
-
createFile(file.name, {
|
|
637
|
-
duration: file.modified,
|
|
638
|
-
modifier: 'days'
|
|
639
|
-
});
|
|
640
|
-
});
|
|
641
|
-
});
|
|
642
|
-
afterEach(() => {
|
|
643
|
-
files.forEach((file) => {
|
|
644
|
-
deleteFile(file.name);
|
|
645
|
-
});
|
|
646
|
-
});
|
|
647
|
-
it('returns files modified exactly n days', () => {
|
|
648
|
-
const modifiedNDaysAgo = filehound_1.default.create()
|
|
649
|
-
.paths(fixtureDir + '/dates')
|
|
650
|
-
.modified(10)
|
|
651
|
-
.find();
|
|
652
|
-
return modifiedNDaysAgo.then((files) => {
|
|
653
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/dates/a.txt']));
|
|
654
|
-
});
|
|
655
|
-
});
|
|
656
|
-
it('returns files greater than n days', () => {
|
|
657
|
-
const modifiedNDaysAgo = filehound_1.default.create()
|
|
658
|
-
.paths(fixtureDir + '/dates')
|
|
659
|
-
.modified('>2 days')
|
|
660
|
-
.find();
|
|
661
|
-
return modifiedNDaysAgo.then((files) => {
|
|
662
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/dates/a.txt', '/dates/w.txt']));
|
|
663
|
-
});
|
|
664
|
-
});
|
|
665
|
-
it('returns files less than n days', () => {
|
|
666
|
-
const modifiedNDaysAgo = filehound_1.default.create()
|
|
667
|
-
.paths(fixtureDir + '/dates')
|
|
668
|
-
.modified('<10 days')
|
|
669
|
-
.find();
|
|
670
|
-
return modifiedNDaysAgo.then((files) => {
|
|
671
|
-
chai_1.assert.deepEqual(files, qualifyNames([
|
|
672
|
-
'/dates/w.txt',
|
|
673
|
-
'/dates/x.txt',
|
|
674
|
-
'/dates/y.txt',
|
|
675
|
-
'/dates/z.txt'
|
|
676
|
-
]));
|
|
677
|
-
});
|
|
678
|
-
});
|
|
679
|
-
});
|
|
680
|
-
describe('.accessed', () => {
|
|
681
|
-
before(() => {
|
|
682
|
-
fs.mkdirSync(getAbsolutePath('dates'));
|
|
683
|
-
});
|
|
684
|
-
after(() => {
|
|
685
|
-
fs.rmdirSync(getAbsolutePath('dates'));
|
|
686
|
-
});
|
|
687
|
-
const files = [
|
|
688
|
-
{
|
|
689
|
-
name: getAbsolutePath('dates/a.txt'),
|
|
690
|
-
accessed: 10
|
|
691
|
-
},
|
|
692
|
-
{
|
|
693
|
-
name: getAbsolutePath('dates/w.txt'),
|
|
694
|
-
accessed: 9
|
|
695
|
-
},
|
|
696
|
-
{
|
|
697
|
-
name: getAbsolutePath('dates/x.txt'),
|
|
698
|
-
accessed: 2
|
|
699
|
-
},
|
|
700
|
-
{
|
|
701
|
-
name: getAbsolutePath('dates/y.txt'),
|
|
702
|
-
accessed: 1
|
|
703
|
-
},
|
|
704
|
-
{
|
|
705
|
-
name: getAbsolutePath('dates/z.txt'),
|
|
706
|
-
accessed: 0
|
|
707
|
-
}
|
|
708
|
-
];
|
|
709
|
-
beforeEach(() => {
|
|
710
|
-
files.forEach((file) => {
|
|
711
|
-
createFile(file.name, {
|
|
712
|
-
duration: file.accessed,
|
|
713
|
-
modifier: 'hours'
|
|
714
|
-
});
|
|
715
|
-
});
|
|
716
|
-
});
|
|
717
|
-
afterEach(() => {
|
|
718
|
-
files.forEach((file) => {
|
|
719
|
-
deleteFile(file.name);
|
|
720
|
-
});
|
|
721
|
-
});
|
|
722
|
-
it('returns files accessed > 8 hours ago', () => {
|
|
723
|
-
const accessedFiles = filehound_1.default.create()
|
|
724
|
-
.paths(fixtureDir + '/dates')
|
|
725
|
-
.accessed('>8h')
|
|
726
|
-
.find();
|
|
727
|
-
return accessedFiles.then((files) => {
|
|
728
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/dates/a.txt', '/dates/w.txt']));
|
|
729
|
-
});
|
|
730
|
-
});
|
|
731
|
-
it('returns files accessed < 3 hours ago', () => {
|
|
732
|
-
const accessedFiles = filehound_1.default.create()
|
|
733
|
-
.paths(fixtureDir + '/dates')
|
|
734
|
-
.accessed('<3h')
|
|
735
|
-
.find();
|
|
736
|
-
return accessedFiles.then((files) => {
|
|
737
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/dates/x.txt', '/dates/y.txt', '/dates/z.txt']));
|
|
738
|
-
});
|
|
739
|
-
});
|
|
740
|
-
it('returns files accessed 1 hour ago', () => {
|
|
741
|
-
const accessedFiles = filehound_1.default.create()
|
|
742
|
-
.paths(fixtureDir + '/dates')
|
|
743
|
-
.accessed('=1h')
|
|
744
|
-
.find();
|
|
745
|
-
return accessedFiles.then((files) => {
|
|
746
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/dates/y.txt']));
|
|
747
|
-
});
|
|
748
|
-
});
|
|
749
|
-
});
|
|
750
|
-
describe('.changed', () => {
|
|
751
|
-
const sandbox = sinon.sandbox.create();
|
|
752
|
-
let statSync;
|
|
753
|
-
before(() => {
|
|
754
|
-
fs.mkdirSync(getAbsolutePath('dates'));
|
|
755
|
-
statSync = sandbox.stub(fs, 'statSync');
|
|
756
|
-
statSync.returns({
|
|
757
|
-
isDirectory() {
|
|
758
|
-
return true;
|
|
759
|
-
}
|
|
760
|
-
});
|
|
761
|
-
});
|
|
762
|
-
after(() => {
|
|
763
|
-
fs.rmdirSync(getAbsolutePath('dates'));
|
|
764
|
-
sandbox.restore();
|
|
765
|
-
});
|
|
766
|
-
const files = [
|
|
767
|
-
{
|
|
768
|
-
name: getAbsolutePath('dates/a.txt'),
|
|
769
|
-
changed: 10
|
|
770
|
-
},
|
|
771
|
-
{
|
|
772
|
-
name: getAbsolutePath('dates/w.txt'),
|
|
773
|
-
changed: 9
|
|
774
|
-
},
|
|
775
|
-
{
|
|
776
|
-
name: getAbsolutePath('dates/x.txt'),
|
|
777
|
-
changed: 2
|
|
778
|
-
},
|
|
779
|
-
{
|
|
780
|
-
name: getAbsolutePath('dates/y.txt'),
|
|
781
|
-
changed: 1
|
|
782
|
-
},
|
|
783
|
-
{
|
|
784
|
-
name: getAbsolutePath('dates/z.txt'),
|
|
785
|
-
changed: 0
|
|
786
|
-
}
|
|
787
|
-
];
|
|
788
|
-
beforeEach(() => {
|
|
789
|
-
files.forEach((file) => {
|
|
790
|
-
createFile(file.name, {
|
|
791
|
-
duration: file.changed,
|
|
792
|
-
modifier: 'hours'
|
|
793
|
-
});
|
|
794
|
-
statSync.withArgs(file.name)
|
|
795
|
-
.returns({
|
|
796
|
-
ctime: moment()
|
|
797
|
-
.subtract(file.changed, 'hours'),
|
|
798
|
-
isDirectory() {
|
|
799
|
-
return false;
|
|
800
|
-
}
|
|
801
|
-
});
|
|
802
|
-
});
|
|
803
|
-
});
|
|
804
|
-
afterEach(() => {
|
|
805
|
-
files.forEach((file) => {
|
|
806
|
-
deleteFile(file.name);
|
|
807
|
-
});
|
|
808
|
-
});
|
|
809
|
-
it('returns files changed > 8 hours ago', () => {
|
|
810
|
-
const changedFiles = filehound_1.default.create()
|
|
811
|
-
.paths(fixtureDir + '/dates')
|
|
812
|
-
.changed('>8h')
|
|
813
|
-
.find();
|
|
814
|
-
return changedFiles.then((files) => {
|
|
815
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/dates/a.txt', '/dates/w.txt']));
|
|
816
|
-
});
|
|
817
|
-
});
|
|
818
|
-
it('returns files changed < 3 hours ago', () => {
|
|
819
|
-
const changedFiles = filehound_1.default.create()
|
|
820
|
-
.paths(fixtureDir + '/dates')
|
|
821
|
-
.changed('<3h')
|
|
822
|
-
.find();
|
|
823
|
-
return changedFiles.then((files) => {
|
|
824
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/dates/x.txt', '/dates/y.txt', '/dates/z.txt']));
|
|
825
|
-
});
|
|
826
|
-
});
|
|
827
|
-
it('returns files changed 1 hour ago', () => {
|
|
828
|
-
const changedFiles = filehound_1.default.create()
|
|
829
|
-
.paths(fixtureDir + '/dates')
|
|
830
|
-
.changed('=1h')
|
|
831
|
-
.find();
|
|
832
|
-
return changedFiles.then((files) => {
|
|
833
|
-
chai_1.assert.deepEqual(files, qualifyNames(['/dates/y.txt']));
|
|
834
|
-
});
|
|
835
|
-
});
|
|
836
|
-
});
|
|
837
|
-
it('emits a match event for each file matched', () => {
|
|
838
|
-
const fh = filehound_1.default.create();
|
|
839
|
-
fh.path(fixtureDir + '/justFiles');
|
|
840
|
-
const spy = sinon.spy();
|
|
841
|
-
fh.on('match', spy);
|
|
842
|
-
const query = fh.find();
|
|
843
|
-
return query.then(() => {
|
|
844
|
-
sinon.assert.callCount(spy, 3);
|
|
845
|
-
sinon.assert.calledWithMatch(spy, 'dummy.txt');
|
|
846
|
-
sinon.assert.calledWithMatch(spy, 'a.json');
|
|
847
|
-
sinon.assert.calledWithMatch(spy, 'b.json');
|
|
848
|
-
});
|
|
849
|
-
});
|
|
850
|
-
it('emits an end event when the search is complete', () => {
|
|
851
|
-
const fh = filehound_1.default.create();
|
|
852
|
-
fh.path(fixtureDir + '/justFiles');
|
|
853
|
-
const spy = sinon.spy();
|
|
854
|
-
fh.on('end', spy);
|
|
855
|
-
const query = fh.find();
|
|
856
|
-
return query.then(() => {
|
|
857
|
-
sinon.assert.callCount(spy, 1);
|
|
858
|
-
});
|
|
859
|
-
});
|
|
860
|
-
it('emits an error event', () => {
|
|
861
|
-
const fh = filehound_1.default.create();
|
|
862
|
-
fh.path(fixtureDir + '/justBad');
|
|
863
|
-
const spy = sinon.spy();
|
|
864
|
-
fh.on('error', spy);
|
|
865
|
-
const query = fh.find();
|
|
866
|
-
return query.catch((e) => {
|
|
867
|
-
chai_1.assert.ok(e);
|
|
868
|
-
sinon.assert.callCount(spy, 1);
|
|
869
|
-
});
|
|
870
|
-
});
|
|
871
|
-
}));
|
|
872
|
-
//# sourceMappingURL=filehound.js.map
|