UNPKG

find-workspace-root

Version:

Find the root of a multi-package repo with Yarn workspaces

34 lines 4.12 kB
"use strict"; 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==