mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-10-19 01:31:09 -05:00
37 lines
1.5 KiB
TypeScript
37 lines
1.5 KiB
TypeScript
import { path } from "@vrtmrz/livesync-commonlib/node";
|
|
import type { CLICommand } from "./types";
|
|
|
|
export function getForceRequirementError(command: CLICommand, force = false): string | undefined {
|
|
if (force) return undefined;
|
|
if (command === "rebuild") {
|
|
return "Command 'rebuild' requires --force because it replaces the local and remote databases.";
|
|
}
|
|
if (command === "fetch") {
|
|
return "Command 'fetch' requires --force because it replaces the local database with remote state.";
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
export function toArrayBuffer(data: Buffer): ArrayBuffer {
|
|
return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer;
|
|
}
|
|
|
|
export function toDatabaseRelativePath(inputPath: string, databasePath: string): string {
|
|
const stripped = inputPath.replace(/^[/\\]+/, "");
|
|
if (!path.isAbsolute(inputPath)) {
|
|
const normalized = stripped.replace(/\\/g, "/");
|
|
const resolved = path.resolve(databasePath, normalized);
|
|
const rel = path.relative(databasePath, resolved);
|
|
if (rel.startsWith("..") || path.isAbsolute(rel)) {
|
|
throw new Error(`Path ${inputPath} is outside of the local database directory`);
|
|
}
|
|
return rel.replace(/\\/g, "/");
|
|
}
|
|
const resolved = path.resolve(inputPath);
|
|
const rel = path.relative(databasePath, resolved);
|
|
if (rel.startsWith("..") || path.isAbsolute(rel)) {
|
|
throw new Error(`Path ${inputPath} is outside of the local database directory`);
|
|
}
|
|
return rel.replace(/\\/g, "/");
|
|
}
|