-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtools.js
More file actions
103 lines (88 loc) · 3 KB
/
tools.js
File metadata and controls
103 lines (88 loc) · 3 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
const bolt = require('bolt');
const path = require('path');
const { exists } = require('./fs');
async function getPackagesInfo(cwd, opts) {
let project = await bolt.getProject({ cwd });
let packages = await bolt.getWorkspaces({ cwd, ...opts });
return await Promise.all(packages.map(pkg => getPackageInfo(pkg, project)));
}
async function getPackageInfo(pkg, project) {
let resolvedProject = project || (await bolt.getProject({ cwd }));
let relativeDir = path.relative(resolvedProject.dir, pkg.dir);
let srcExists = await exists(path.join(pkg.dir, 'src'));
let tsConfigExists = await exists(path.join(pkg.dir, 'tsconfig.json'));
let tsConfigCliExists = await exists(
path.join(pkg.dir, 'build', 'cli', 'tsconfig.json'),
);
let testBrowserExists = await exists(path.join(pkg.dir, '__tests-karma__'));
let testWebdriverExists = await exists(
path.join(pkg.dir, 'src', '__tests__', 'integration'),
);
let testVisualRegressionExists = await exists(
path.join(pkg.dir, 'src', '__tests__', 'visual-regression'),
);
let isBrowserPackage = !relativeDir.startsWith('build');
let isWebsitePackage = relativeDir.startsWith('website');
let allDependencies = Object.assign(
{},
pkg.config.dependencies,
pkg.config.devDependencies,
pkg.config.peerDependencies,
);
let hasKarmaDep = !!allDependencies.karma;
let isTypeScriptCLI = tsConfigCliExists;
let isTypeScript = tsConfigExists && !isWebsitePackage; // The website does not need to be built
let isBabel = srcExists && !isTypeScript && !isWebsitePackage;
let isFlow = isBabel || isWebsitePackage;
let isESLint = srcExists || isWebsitePackage || !isBrowserPackage;
let isKarma = testBrowserExists || hasKarmaDep;
let isBrowserStack = isKarma;
let isStylelint = srcExists && isBrowserPackage;
let isWebdriver = testWebdriverExists;
let isVisualRegression = testVisualRegressionExists;
return {
dir: pkg.dir,
name: pkg.name,
config: pkg.config,
relativeDir,
isTypeScript,
isTypeScriptCLI,
isBabel,
isFlow,
isESLint,
isKarma,
isBrowserStack,
isStylelint,
isWebdriver,
isVisualRegression,
isBrowserPackage,
};
}
const TOOL_NAME_TO_FILTERS /*: { [key: string]: (pkg: Object) => boolean } */ = {
typescript: pkg => pkg.isTypeScript,
typescriptcli: pkg => pkg.isTypeScriptCLI,
babel: pkg => pkg.isBabel,
flow: pkg => pkg.isFlow,
eslint: pkg => pkg.isESLint,
karma: pkg => pkg.isKarma,
browserstack: pkg => pkg.isBrowserStack,
stylelint: pkg => pkg.isStylelint,
webdriver: pkg => pkg.isWebdriver,
vr: pkg => pkg.isVisualRegression,
};
async function getPackageDirsForTools(cwd) {
let packages = await getPackagesInfo(cwd);
let toolGroups = {};
Object.keys(TOOL_NAME_TO_FILTERS).map(toolName => {
toolGroups[toolName] = packages
.filter(TOOL_NAME_TO_FILTERS[toolName])
.map(pkg => pkg.relativeDir);
});
return toolGroups;
}
module.exports = {
getPackageInfo,
getPackagesInfo,
getPackageDirsForTools,
TOOL_NAME_TO_FILTERS,
};