-
-
Notifications
You must be signed in to change notification settings - Fork 26.9k
/
Copy pathworkspaceUtils.js
54 lines (49 loc) · 1.37 KB
/
workspaceUtils.js
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
/**
* Copyright (c) 2018-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
const fs = require('fs');
const path = require('path');
const findPkg = require('find-pkg');
const globby = require('globby');
const findPkgs = (rootPath, globPatterns) => {
if (!globPatterns) {
return [];
}
const globOpts = {
cwd: rootPath,
strict: true,
absolute: true,
};
return globPatterns
.reduce(
(pkgs, pattern) =>
pkgs.concat(globby.sync(path.join(pattern, 'package.json'), globOpts)),
[]
)
.map(f => path.dirname(path.normalize(f)));
};
const findMonorepo = appDir => {
const monoPkgPath = findPkg.sync(path.resolve(appDir, '..'));
const monoPkg = monoPkgPath && require(monoPkgPath);
const workspaces = monoPkg && monoPkg.workspaces;
const patterns = (workspaces && workspaces.packages) || workspaces;
const isYarnWs = Boolean(patterns);
const allPkgs = patterns && findPkgs(path.dirname(monoPkgPath), patterns);
const isIncluded = dir => allPkgs && allPkgs.indexOf(dir) !== -1;
const isAppIncluded = isIncluded(appDir);
const pkgs = allPkgs
? allPkgs.filter(f => fs.realpathSync(f) !== appDir)
: [];
return {
isAppIncluded,
isYarnWs,
pkgs,
};
};
module.exports = {
findMonorepo,
};