26 lines
747 B
TypeScript
26 lines
747 B
TypeScript
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
|
|
const WORKSPACE_MARKERS = ['pnpm-workspace.yaml'];
|
|
|
|
const hasWorkspaceMarker = (dir: string): boolean =>
|
|
WORKSPACE_MARKERS.some((marker) => fs.existsSync(path.join(dir, marker)));
|
|
|
|
export const resolveWorkspaceRoot = (
|
|
startDir: string = process.env.GATEWAY_WORKSPACE_ROOT ?? process.cwd(),
|
|
maxDepth = 6
|
|
): string => {
|
|
let current = path.resolve(startDir);
|
|
for (let depth = 0; depth <= maxDepth; depth += 1) {
|
|
if (hasWorkspaceMarker(current)) {
|
|
return current;
|
|
}
|
|
const parent = path.dirname(current);
|
|
if (parent === current) {
|
|
break;
|
|
}
|
|
current = parent;
|
|
}
|
|
return path.resolve(startDir);
|
|
};
|