This repository was archived by the owner on Sep 21, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathtest-set.ts
More file actions
77 lines (61 loc) · 2.11 KB
/
Copy pathtest-set.ts
File metadata and controls
77 lines (61 loc) · 2.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
'use strict';
const globExtra = require('glob-extra');
const _ = require('lodash');
const mm = require('micromatch');
const path = require('path');
const Promise = require('bluebird');
const fs = Promise.promisifyAll(require('fs'));
module.exports = class TestSet {
static create(set) {
return new TestSet(set);
}
constructor(set) {
this._set = _.clone(set);
}
expandFiles(expandOpts, globOpts = {}) {
const {files, ignoreFiles = []} = this._set;
globOpts = _.clone(globOpts);
globOpts.ignore = []
.concat(globOpts.ignore || [], ignoreFiles)
.map((p) => path.resolve(expandOpts.root, p));
return globExtra.expandPaths(files, expandOpts, globOpts)
.then((expandedFiles) => this._set = _.extend(this._set, {files: expandedFiles}));
}
transformDirsToMasks() {
return Promise.map(this._set.files, (file) => {
if (globExtra.isMask(file)) {
return file;
}
return fs.statAsync(file)
.then((stat) => stat.isDirectory() ? path.join(file, '**') : file)
.catch(() => Promise.reject(new Error(`Cannot read such file or directory: '${file}'`)));
})
.then((files) => this._set.files = files);
}
resolveFiles(projectRoot) {
this._set.files = this._set.files.map((file) => path.resolve(projectRoot, file));
}
getFiles() {
return this._set.files;
}
getBrowsers() {
return this._set.browsers;
}
getFilesForBrowser(browser) {
return _.includes(this._set.browsers, browser) ? this._set.files : [];
}
getBrowsersForFile(file) {
return _.includes(this._set.files, file) ? this._set.browsers : [];
}
useFiles(files) {
if (_.isEmpty(files)) {
return;
}
this._set.files = _.isEmpty(this._set.files) ? files : mm(files, this._set.files);
}
useBrowsers(browsers) {
this._set.browsers = _.isEmpty(browsers)
? this._set.browsers
: _.intersection(this._set.browsers, browsers);
}
};