find-workspace-root
Version:
Find the root of a multi-package repo with Yarn workspaces
34 lines • 4.12 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const micromatch_1 = __importDefault(require("micromatch"));
const cwd = process.cwd();
const readPackageJson = async (cwd) => {
const loc = path_1.default.join(cwd, 'package.json');
if (await fs_extra_1.default.pathExists(loc)) {
return fs_extra_1.default.readJSON(loc);
}
return null;
};
exports.default = async (initial = cwd) => {
let previous = null;
let current = path_1.default.normalize(initial);
do {
const pkgJson = await readPackageJson(current);
if (pkgJson === null || pkgJson === void 0 ? void 0 : pkgJson.workspaces) {
const relativePath = path_1.default.relative(current, initial);
return relativePath === '' ||
micromatch_1.default([relativePath], pkgJson.workspaces).length > 0
? current
: null;
}
previous = current;
current = path_1.default.dirname(current);
} while (current !== previous);
return null;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC13b3Jrc3BhY2Utcm9vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9maW5kLXdvcmtzcGFjZS1yb290LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsd0RBQTBCO0FBQzFCLGdEQUF3QjtBQUN4Qiw0REFBb0M7QUFFcEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBSTFCLE1BQU0sZUFBZSxHQUFHLEtBQUssRUFBRSxHQUFXLEVBQStCLEVBQUU7SUFDekUsTUFBTSxHQUFHLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDM0MsSUFBSSxNQUFNLGtCQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzVCLE9BQU8sa0JBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDekI7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLGtCQUFlLEtBQUssRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUEwQixFQUFFO0lBQzdELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztJQUNwQixJQUFJLE9BQU8sR0FBRyxjQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXRDLEdBQUc7UUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUvQyxJQUFJLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxVQUFVLEVBQUU7WUFDdkIsTUFBTSxZQUFZLEdBQUcsY0FBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFckQsT0FBTyxZQUFZLEtBQUssRUFBRTtnQkFDeEIsb0JBQVUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDekQsQ0FBQyxDQUFDLE9BQU87Z0JBQ1QsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUNWO1FBRUQsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUNuQixPQUFPLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNqQyxRQUFRLE9BQU8sS0FBSyxRQUFRLEVBQUU7SUFFL0IsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgbWljcm9tYXRjaCBmcm9tICdtaWNyb21hdGNoJztcblxuY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxudHlwZSBQYWNrYWdlSnNvbiA9IHsgd29ya3NwYWNlcz86IHN0cmluZyB8IHN0cmluZ1tdIH07XG5cbmNvbnN0IHJlYWRQYWNrYWdlSnNvbiA9IGFzeW5jIChjd2Q6IHN0cmluZyk6IFByb21pc2U8UGFja2FnZUpzb24gfCBudWxsPiA9PiB7XG4gIGNvbnN0IGxvYyA9IHBhdGguam9pbihjd2QsICdwYWNrYWdlLmpzb24nKTtcbiAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMobG9jKSkge1xuICAgIHJldHVybiBmcy5yZWFkSlNPTihsb2MpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgKGluaXRpYWwgPSBjd2QpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+ID0+IHtcbiAgbGV0IHByZXZpb3VzID0gbnVsbDtcbiAgbGV0IGN1cnJlbnQgPSBwYXRoLm5vcm1hbGl6ZShpbml0aWFsKTtcblxuICBkbyB7XG4gICAgY29uc3QgcGtnSnNvbiA9IGF3YWl0IHJlYWRQYWNrYWdlSnNvbihjdXJyZW50KTtcblxuICAgIGlmIChwa2dKc29uPy53b3Jrc3BhY2VzKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKGN1cnJlbnQsIGluaXRpYWwpO1xuXG4gICAgICByZXR1cm4gcmVsYXRpdmVQYXRoID09PSAnJyB8fFxuICAgICAgICBtaWNyb21hdGNoKFtyZWxhdGl2ZVBhdGhdLCBwa2dKc29uLndvcmtzcGFjZXMpLmxlbmd0aCA+IDBcbiAgICAgICAgPyBjdXJyZW50XG4gICAgICAgIDogbnVsbDtcbiAgICB9XG5cbiAgICBwcmV2aW91cyA9IGN1cnJlbnQ7XG4gICAgY3VycmVudCA9IHBhdGguZGlybmFtZShjdXJyZW50KTtcbiAgfSB3aGlsZSAoY3VycmVudCAhPT0gcHJldmlvdXMpO1xuXG4gIHJldHVybiBudWxsO1xufTtcbiJdfQ==
;