You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
3.9 KiB
142 lines
3.9 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.getWatchFolders = getWatchFolders;
|
|
exports.globAllPackageJsonPaths = globAllPackageJsonPaths;
|
|
exports.resolveAllWorkspacePackageJsonPaths = resolveAllWorkspacePackageJsonPaths;
|
|
|
|
function _jsonFile() {
|
|
const data = _interopRequireDefault(require("@expo/json-file"));
|
|
|
|
_jsonFile = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _assert() {
|
|
const data = _interopRequireDefault(require("assert"));
|
|
|
|
_assert = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _glob() {
|
|
const data = require("glob");
|
|
|
|
_glob = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _path() {
|
|
const data = _interopRequireDefault(require("path"));
|
|
|
|
_path = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _getModulesPaths() {
|
|
const data = require("./getModulesPaths");
|
|
|
|
_getModulesPaths = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
/**
|
|
* @param workspaceProjectRoot Root file path for the yarn workspace
|
|
* @param linkedPackages List of folders that contain linked node modules, ex: `['packages/*', 'apps/*']`
|
|
* @returns List of valid package.json file paths, ex: `['/Users/me/app/apps/my-app/package.json', '/Users/me/app/packages/my-package/package.json']`
|
|
*/
|
|
function globAllPackageJsonPaths(workspaceProjectRoot, linkedPackages) {
|
|
return linkedPackages.map(glob => {
|
|
return (0, _glob().sync)(_path().default.join(glob, 'package.json').replace(/\\/g, '/'), {
|
|
cwd: workspaceProjectRoot,
|
|
absolute: true,
|
|
ignore: ['**/@(Carthage|Pods|node_modules)/**']
|
|
}).map(pkgPath => {
|
|
try {
|
|
_jsonFile().default.read(pkgPath);
|
|
|
|
return pkgPath;
|
|
} catch {// Skip adding path if the package.json is invalid or cannot be read.
|
|
}
|
|
|
|
return null;
|
|
});
|
|
}).flat().filter(Boolean).map(p => _path().default.join(p));
|
|
}
|
|
|
|
function getWorkspacePackagesArray({
|
|
workspaces
|
|
}) {
|
|
if (Array.isArray(workspaces)) {
|
|
return workspaces;
|
|
}
|
|
|
|
(0, _assert().default)(workspaces === null || workspaces === void 0 ? void 0 : workspaces.packages, 'Could not find a `workspaces` object in the root package.json');
|
|
return workspaces.packages;
|
|
}
|
|
/**
|
|
* @param workspaceProjectRoot root file path for a yarn workspace.
|
|
* @returns list of package.json file paths that are linked to the yarn workspace.
|
|
*/
|
|
|
|
|
|
function resolveAllWorkspacePackageJsonPaths(workspaceProjectRoot) {
|
|
try {
|
|
const rootPackageJsonFilePath = _path().default.join(workspaceProjectRoot, 'package.json'); // Could throw if package.json is invalid.
|
|
|
|
|
|
const rootPackageJson = _jsonFile().default.read(rootPackageJsonFilePath); // Extract the "packages" array or use "workspaces" as packages array (yarn workspaces spec).
|
|
|
|
|
|
const packages = getWorkspacePackagesArray(rootPackageJson); // Glob all package.json files and return valid paths.
|
|
|
|
return globAllPackageJsonPaths(workspaceProjectRoot, packages);
|
|
} catch {
|
|
return [];
|
|
}
|
|
}
|
|
/**
|
|
* @param projectRoot file path to app's project root
|
|
* @returns list of node module paths to watch in Metro bundler, ex: `['/Users/me/app/node_modules/', '/Users/me/app/apps/my-app/', '/Users/me/app/packages/my-package/']`
|
|
*/
|
|
|
|
|
|
function getWatchFolders(projectRoot) {
|
|
const workspaceRoot = (0, _getModulesPaths().getWorkspaceRoot)(_path().default.resolve(projectRoot)); // Rely on default behavior in standard projects.
|
|
|
|
if (!workspaceRoot) {
|
|
return [];
|
|
}
|
|
|
|
const packages = resolveAllWorkspacePackageJsonPaths(workspaceRoot);
|
|
|
|
if (!packages.length) {
|
|
return [];
|
|
}
|
|
|
|
return uniqueItems([_path().default.join(workspaceRoot, 'node_modules'), ...packages.map(pkg => _path().default.dirname(pkg))]);
|
|
}
|
|
|
|
function uniqueItems(items) {
|
|
return [...new Set(items)];
|
|
}
|
|
//# sourceMappingURL=getWatchFolders.js.map
|