mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-15 02:20:38 +09:00
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
|
|
import path from "node:path";
|
||
|
|
import {
|
||
|
|
expandHomePrefix,
|
||
|
|
resolveDefaultConfigPath,
|
||
|
|
resolveDefaultContextPath,
|
||
|
|
resolvePaperclipInstanceId,
|
||
|
|
} from "./home.js";
|
||
|
|
|
||
|
|
export interface DataDirOptionLike {
|
||
|
|
dataDir?: string;
|
||
|
|
config?: string;
|
||
|
|
context?: string;
|
||
|
|
instance?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface DataDirCommandSupport {
|
||
|
|
hasConfigOption?: boolean;
|
||
|
|
hasContextOption?: boolean;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function applyDataDirOverride(
|
||
|
|
options: DataDirOptionLike,
|
||
|
|
support: DataDirCommandSupport = {},
|
||
|
|
): string | null {
|
||
|
|
const rawDataDir = options.dataDir?.trim();
|
||
|
|
if (!rawDataDir) return null;
|
||
|
|
|
||
|
|
const resolvedDataDir = path.resolve(expandHomePrefix(rawDataDir));
|
||
|
|
process.env.PAPERCLIP_HOME = resolvedDataDir;
|
||
|
|
|
||
|
|
if (support.hasConfigOption) {
|
||
|
|
const hasConfigOverride = Boolean(options.config?.trim()) || Boolean(process.env.PAPERCLIP_CONFIG?.trim());
|
||
|
|
if (!hasConfigOverride) {
|
||
|
|
const instanceId = resolvePaperclipInstanceId(options.instance);
|
||
|
|
process.env.PAPERCLIP_INSTANCE_ID = instanceId;
|
||
|
|
process.env.PAPERCLIP_CONFIG = resolveDefaultConfigPath(instanceId);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (support.hasContextOption) {
|
||
|
|
const hasContextOverride = Boolean(options.context?.trim()) || Boolean(process.env.PAPERCLIP_CONTEXT?.trim());
|
||
|
|
if (!hasContextOverride) {
|
||
|
|
process.env.PAPERCLIP_CONTEXT = resolveDefaultContextPath();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return resolvedDataDir;
|
||
|
|
}
|