@alexaegis/workspace-tools
Version:
Tools for working with javascript workspaces
95 lines (94 loc) • 3.56 kB
JavaScript
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