UNPKG

@alexaegis/workspace-tools

Version:

Tools for working with javascript workspaces

95 lines (94 loc) 3.56 kB
let node_path = require("node:path"); let _alexaegis_fs = require("@alexaegis/fs"); let node_fs = require("node:fs"); //#region src/npm/collect-file-dirname-paths-up-directory-tree.function.options.ts var normalizeCollectFileDirnamesUpDirectoryTreeOptions = (options) => { return { ...(0, _alexaegis_fs.normalizeCwdOption)(options), ...(0, _alexaegis_fs.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 = (0, node_path.normalize)(options.cwd); if (packageJsonCollection.length < options.maxPackages && resultCollection.length < options.maxResults && (0, node_fs.existsSync)((0, node_path.join)(path, fileName))) resultCollection.unshift(path); if (packageJsonCollection.length < options.maxPackages && (0, node_fs.existsSync)((0, node_path.join)(path, "package.json"))) packageJsonCollection.unshift(path); const parentPath = (0, node_path.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 Object.defineProperty(exports, "NODE_MODULES_DIRECTORY_NAME", { enumerable: true, get: function() { return NODE_MODULES_DIRECTORY_NAME; } }); Object.defineProperty(exports, "PACKAGE_JSON_DEPENDENCY_FIELDS", { enumerable: true, get: function() { return PACKAGE_JSON_DEPENDENCY_FIELDS; } }); Object.defineProperty(exports, "PACKAGE_JSON_NAME", { enumerable: true, get: function() { return PACKAGE_JSON_NAME; } }); Object.defineProperty(exports, "PNPM_WORKSPACE_FILE_NAME", { enumerable: true, get: function() { return PNPM_WORKSPACE_FILE_NAME; } }); Object.defineProperty(exports, "collectFileDirnamePathsUpDirectoryTree", { enumerable: true, get: function() { return collectFileDirnamePathsUpDirectoryTree; } }); Object.defineProperty(exports, "getWorkspaceRoot", { enumerable: true, get: function() { return getWorkspaceRoot; } }); Object.defineProperty(exports, "normalizeCollectFileDirnamesUpDirectoryTreeOptions", { enumerable: true, get: function() { return normalizeCollectFileDirnamesUpDirectoryTreeOptions; } }); //# sourceMappingURL=get-workspace-root.function-BKR-FeN5.cjs.map