UNPKG

@alexaegis/workspace-tools

Version:

Tools for working with javascript workspaces

54 lines (53 loc) 2.69 kB
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