feat: workspace-level sidebar shortcuts with shortcut badges and desktop tabs extraction
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
interface BuildAbsoluteExplorerPathInput {
|
||||
workspaceRoot: string;
|
||||
entryPath: string;
|
||||
}
|
||||
|
||||
function isAbsolutePath(pathValue: string): boolean {
|
||||
return (
|
||||
pathValue.startsWith("/") ||
|
||||
pathValue.startsWith("\\\\") ||
|
||||
/^[A-Za-z]:[\\/]/.test(pathValue)
|
||||
);
|
||||
}
|
||||
|
||||
export function buildAbsoluteExplorerPath({
|
||||
workspaceRoot,
|
||||
entryPath,
|
||||
}: BuildAbsoluteExplorerPathInput): string {
|
||||
const normalizedWorkspaceRoot = workspaceRoot.trim().replace(/[\\/]+$/, "");
|
||||
const normalizedEntryPath = entryPath.trim();
|
||||
|
||||
if (!normalizedWorkspaceRoot) {
|
||||
return normalizedEntryPath;
|
||||
}
|
||||
|
||||
if (!normalizedEntryPath || normalizedEntryPath === ".") {
|
||||
return normalizedWorkspaceRoot;
|
||||
}
|
||||
|
||||
if (isAbsolutePath(normalizedEntryPath)) {
|
||||
return normalizedEntryPath;
|
||||
}
|
||||
|
||||
const separator = normalizedWorkspaceRoot.includes("\\") ? "\\" : "/";
|
||||
const segments = normalizedEntryPath.split(/[\\/]+/).filter(Boolean);
|
||||
if (segments.length === 0) {
|
||||
return normalizedWorkspaceRoot;
|
||||
}
|
||||
|
||||
return `${normalizedWorkspaceRoot}${separator}${segments.join(separator)}`;
|
||||
}
|
||||
Reference in New Issue
Block a user