57 lines
1.7 KiB
TypeScript
57 lines
1.7 KiB
TypeScript
import type { WorkspaceAccessMode, WorkspaceScopePayload } from "@/lib/types";
|
|||
|
|
|
||
|
|
export function scopeWithAccessMode(
|
||
|
|
scope: WorkspaceScopePayload,
|
||
|
|
accessMode: WorkspaceAccessMode,
|
||
|
|
): WorkspaceScopePayload {
|
||
|
|
return {
|
||
|
|
...scope,
|
||
|
|
access_mode: accessMode,
|
||
|
|
restrict_to_workspace: accessMode === "restricted",
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
export function projectNameFromPath(path: string): string {
|
||
|
|
const normalized = path.replace(/\\/g, "/").replace(/\/+$/, "");
|
||
|
|
return normalized.split("/").filter(Boolean).pop() || path;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function shortWorkspacePath(path: string): string {
|
||
|
|
const normalized = path.replace(/\\/g, "/");
|
||
|
|
const parts = normalized.split("/").filter(Boolean);
|
||
|
|
if (parts.length <= 3) return path;
|
||
|
|
return `.../${parts.slice(-3).join("/")}`;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function isAbsoluteWorkspacePath(path: string): boolean {
|
||
|
|
const trimmed = path.trim();
|
||
|
|
return (
|
||
|
|
trimmed === "~"
|
||
|
|
|| trimmed.startsWith("~/")
|
||
|
|
|| trimmed.startsWith("~\\")
|
||
|
|
|| trimmed.startsWith("/")
|
||
|
|
|| /^[A-Za-z]:[\\/]/.test(trimmed)
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function selectedProjectScope(
|
||
|
|
scope: WorkspaceScopePayload | null,
|
||
|
|
defaultScope: WorkspaceScopePayload | null,
|
||
|
|
): WorkspaceScopePayload | null {
|
||
|
|
if (!scope || !defaultScope) return null;
|
||
|
|
return sameWorkspacePath(scope.project_path, defaultScope.project_path) ? null : scope;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function normalizeWorkspacePath(path: string | null | undefined): string {
|
||
|
|
const normalized = (path ?? "").replace(/\\/g, "/").replace(/\/+$/, "");
|
||
|
|
return normalized || "/";
|
||
|
|
}
|
||
|
|
|
||
|
|
export function sameWorkspacePath(
|
||
|
|
a: string | null | undefined,
|
||
|
|
b: string | null | undefined,
|
||
|
|
): boolean {
|
||
|
|
if (!a || !b) return false;
|
||
|
|
return normalizeWorkspacePath(a) === normalizeWorkspacePath(b);
|
||
|
|
}
|