astro-ghostcms/.pnpm-store/v3/files/64/bc4fb4d4d806b0ef5e2ab9bb9f8...

88 lines
3.0 KiB
Plaintext

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.readPackageJSON = exports.extractWorkspaces = exports.isMatchWorkspaces = exports.checkWorkspaces = exports.findWorkspaceRoot = void 0;
const path_1 = __importDefault(require("path"));
const pkg_dir_1 = __importDefault(require("pkg-dir"));
const fs_1 = require("fs");
const micromatch_1 = __importDefault(require("micromatch"));
/**
* Adapted from:
* https://github.com/yarnpkg/yarn/blob/ddf2f9ade211195372236c2f39a75b00fa18d4de/src/config.js#L612
* @param {string} [initial]
* @return {string|null}
*/
function findWorkspaceRoot(initial) {
if (!initial) {
initial = process.cwd();
}
let _pkg = pkg_dir_1.default.sync(initial);
if (!_pkg) {
return null;
}
initial = path_1.default.normalize(_pkg);
let previous = null;
let current = initial;
do {
const manifest = readPackageJSON(current);
const workspaces = extractWorkspaces(manifest);
let { done, found } = checkWorkspaces(current, initial);
if (done) {
return found;
}
previous = current;
current = path_1.default.dirname(current);
} while (current !== previous);
return null;
}
exports.findWorkspaceRoot = findWorkspaceRoot;
function checkWorkspaces(current, initial) {
const manifest = readPackageJSON(current);
const workspaces = extractWorkspaces(manifest);
let done = false;
let found;
let relativePath;
if (workspaces) {
done = true;
relativePath = path_1.default.relative(current, initial);
if (relativePath === '' || isMatchWorkspaces(relativePath, workspaces)) {
found = current;
}
else {
found = null;
}
}
return {
done,
found,
relativePath,
};
}
exports.checkWorkspaces = checkWorkspaces;
function isMatchWorkspaces(relativePath, workspaces) {
let ls = micromatch_1.default([relativePath], workspaces);
return ls.length > 0;
}
exports.isMatchWorkspaces = isMatchWorkspaces;
function extractWorkspaces(manifest) {
const workspaces = (manifest || {}).workspaces;
return (workspaces && workspaces.packages) || (Array.isArray(workspaces) ? workspaces : null);
}
exports.extractWorkspaces = extractWorkspaces;
function readPackageJSON(dir) {
const file = path_1.default.join(dir, 'package.json');
if (fs_1.existsSync(file)) {
return JSON.parse(fs_1.readFileSync(file, 'utf8'));
}
return null;
}
exports.readPackageJSON = readPackageJSON;
findWorkspaceRoot.findWorkspaceRoot = findWorkspaceRoot;
findWorkspaceRoot.readPackageJSON = readPackageJSON;
findWorkspaceRoot.extractWorkspaces = extractWorkspaces;
findWorkspaceRoot.isMatchWorkspaces = isMatchWorkspaces;
findWorkspaceRoot.default = findWorkspaceRoot;
exports.default = findWorkspaceRoot;
//# sourceMappingURL=core.js.map