@alexaegis/workspace-tools
Version:
Tools for working with javascript workspaces
54 lines (53 loc) • 2.69 kB
JavaScript
import { join, normalize } from "node:path";
import { normalizeCwdOption, normalizeDirectoryDepthOption } from "@alexaegis/fs";
import { existsSync } from "node:fs";
//#region src/npm/collect-file-dirname-paths-up-directory-tree.function.options.ts
var normalizeCollectFileDirnamesUpDirectoryTreeOptions = (options) => {
return {
...normalizeCwdOption(options),
...normalizeDirectoryDepthOption(options),
maxPackages: options?.maxPackages ?? 2,
maxResults: options?.maxResults ?? Number.POSITIVE_INFINITY
};
};
//#endregion
//#region src/package-json/package-json.interface.ts
var PACKAGE_JSON_NAME = "package.json";
var PNPM_WORKSPACE_FILE_NAME = "pnpm-workspace.yaml";
var NODE_MODULES_DIRECTORY_NAME = "node_modules";
var PACKAGE_JSON_DEPENDENCY_FIELDS = [
"dependencies",
"devDependencies",
"optionalDependencies",
"peerDependencies"
];
//#endregion
//#region src/npm/collect-file-dirname-paths-up-directory-tree.function.ts
var collectFileDirnamePathsUpDirectoryTree = (fileName, rawOptions) => {
return collectFileDirnamePathsUpDirectoryTreeInternal(fileName, normalizeCollectFileDirnamesUpDirectoryTreeOptions(rawOptions), [], []);
};
var collectFileDirnamePathsUpDirectoryTreeInternal = (fileName, options, resultCollection, packageJsonCollection) => {
const path = normalize(options.cwd);
if (packageJsonCollection.length < options.maxPackages && resultCollection.length < options.maxResults && existsSync(join(path, fileName))) resultCollection.unshift(path);
if (packageJsonCollection.length < options.maxPackages && existsSync(join(path, "package.json"))) packageJsonCollection.unshift(path);
const parentPath = join(path, "..");
if (parentPath !== path && options.depth > 0 && packageJsonCollection.length < options.maxPackages && resultCollection.length < options.maxResults) return collectFileDirnamePathsUpDirectoryTreeInternal(fileName, {
...options,
depth: options.depth - 1,
cwd: parentPath
}, resultCollection, packageJsonCollection);
return resultCollection;
};
//#endregion
//#region src/npm/get-workspace-root.function.ts
/**
* Returns the furthest folder where a package.json file is present
*
* (If you're searching for the nearest, use the getWorkspaceRoot function)
*/
var getWorkspaceRoot = (rawOptions) => {
return collectFileDirnamePathsUpDirectoryTree(PACKAGE_JSON_NAME, rawOptions)[0];
};
//#endregion
export { PACKAGE_JSON_NAME as a, PACKAGE_JSON_DEPENDENCY_FIELDS as i, collectFileDirnamePathsUpDirectoryTree as n, PNPM_WORKSPACE_FILE_NAME as o, NODE_MODULES_DIRECTORY_NAME as r, normalizeCollectFileDirnamesUpDirectoryTreeOptions as s, getWorkspaceRoot as t };
//# sourceMappingURL=get-workspace-root.function-DnORClbN.js.map