- Extract database schema and migrations into @openreader/database - Extract startup and orchestration scripts into @openreader/bootstrap - Move compute-worker into packages/compute-worker - Remove runtime dependency on drizzle-kit - Update Dockerfile to deploy isolated packages without merging node_modules
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import fs from 'fs';
|
|
import path from 'path';
|
|
import ffmpegStatic from 'ffmpeg-static';
|
|
|
|
function findMonorepoRoot(startDir: string): string | null {
|
|
let current = path.resolve(startDir);
|
|
for (;;) {
|
|
const marker = path.join(current, 'pnpm-workspace.yaml');
|
|
if (fs.existsSync(marker)) return current;
|
|
const parent = path.dirname(current);
|
|
if (parent === current) return null;
|
|
current = parent;
|
|
}
|
|
}
|
|
|
|
function resolveDocstoreDir(): string {
|
|
const repoRoot = findMonorepoRoot(process.cwd());
|
|
if (repoRoot) return path.join(repoRoot, 'docstore');
|
|
return path.join(process.cwd(), 'docstore');
|
|
}
|
|
|
|
export const DOCSTORE_DIR = resolveDocstoreDir();
|
|
|
|
function normalizePath(value: unknown): string | null {
|
|
if (typeof value !== 'string') return null;
|
|
const trimmed = value.trim();
|
|
return trimmed.length > 0 ? trimmed : null;
|
|
}
|
|
|
|
function resolveBinary(envValue: string | null, bundledValue: string | null, envVarName: string, packageName: string): string {
|
|
if (envValue) {
|
|
if ((envValue.includes('/') || envValue.includes('\\')) && !fs.existsSync(envValue)) {
|
|
throw new Error(`${envVarName} points to a missing binary: ${envValue}`);
|
|
}
|
|
return envValue;
|
|
}
|
|
if (!bundledValue) {
|
|
throw new Error(`${packageName} binary is unavailable on this platform. Set ${envVarName} to an installed binary path.`);
|
|
}
|
|
if ((bundledValue.includes('/') || bundledValue.includes('\\')) && !fs.existsSync(bundledValue)) {
|
|
throw new Error(`${packageName} resolved to a missing binary path: ${bundledValue}`);
|
|
}
|
|
return bundledValue;
|
|
}
|
|
|
|
export function getFFmpegPath(): string {
|
|
return resolveBinary(
|
|
normalizePath(process.env.FFMPEG_BIN),
|
|
normalizePath(ffmpegStatic),
|
|
'FFMPEG_BIN',
|
|
'ffmpeg-static',
|
|
);
|
|
}
|