34 lines
947 B
TypeScript
34 lines
947 B
TypeScript
import { existsSync } from 'fs';
|
|
import { basename, join, resolve } from 'path';
|
|
|
|
let cachedDir: string | null = null;
|
|
|
|
export function getDataDir(): string {
|
|
const fromEnv = (process.env.DATA_DIR || '').trim();
|
|
if (fromEnv) return fromEnv;
|
|
|
|
if (cachedDir) return cachedDir;
|
|
|
|
const cwd = process.cwd();
|
|
const cwdBase = basename(cwd);
|
|
const parentDir = join(cwd, '..');
|
|
const parentLooksLikeRoot = [
|
|
join(parentDir, 'docker-compose.yml'),
|
|
join(parentDir, 'Dockerfile'),
|
|
join(parentDir, '.env'),
|
|
].some((marker) => existsSync(marker));
|
|
const candidates = cwdBase === 'orchestrator' && parentLooksLikeRoot
|
|
? [join(parentDir, 'data'), join(cwd, 'data')]
|
|
: [join(cwd, 'data'), join(parentDir, 'data')];
|
|
|
|
for (const candidate of candidates) {
|
|
if (existsSync(candidate)) {
|
|
cachedDir = resolve(candidate);
|
|
return cachedDir;
|
|
}
|
|
}
|
|
|
|
cachedDir = resolve(join(cwd, 'data'));
|
|
return cachedDir;
|
|
}
|