42 lines
1.7 KiB
JavaScript
42 lines
1.7 KiB
JavaScript
import { join, normalize, sep } from 'path';
|
|
import { URI } from 'vscode-uri';
|
|
export const isRelativePath = (path) => {
|
|
const relativePathRegex = /^(((\.\.?)|([\w-@. ]+))(\/|\\\\?))*[\w-. ]*\.[\w-]+$/i;
|
|
return relativePathRegex.test(path);
|
|
};
|
|
export const relativeToAbsolutePath = (workspaceFolders, workspaceRoot, uri) => {
|
|
// Iterate through all of the workspace root folders
|
|
for (const folder of workspaceFolders) {
|
|
// If the requested schema URI specifies a workspace root folder
|
|
// Convert it into an absolute path with the appropriate root folder path
|
|
if (uri.startsWith(folder.name)) {
|
|
const pathToFolder = URI.parse(folder.uri).fsPath;
|
|
const withoutFolderPrefix = uri.split(sep);
|
|
withoutFolderPrefix.shift();
|
|
return URI.file(join(pathToFolder, withoutFolderPrefix.join())).toString();
|
|
}
|
|
}
|
|
// If a root folder was not specified, resolve the relative URI
|
|
// Against the location of the workspace file instead
|
|
if (workspaceRoot) {
|
|
return URI.file(join(workspaceRoot.fsPath, uri)).toString();
|
|
}
|
|
// Fallback in case nothing could be applied
|
|
return normalize(uri);
|
|
};
|
|
export const workspaceFoldersChanged = (workspaceFolders, changedFolders) => {
|
|
workspaceFolders = workspaceFolders.filter((e) => {
|
|
return !changedFolders.removed.some((f) => {
|
|
return f.uri === e.uri;
|
|
});
|
|
});
|
|
workspaceFolders = workspaceFolders
|
|
.filter((e) => {
|
|
return !changedFolders.added.some((f) => {
|
|
return f.uri === e.uri;
|
|
});
|
|
})
|
|
.concat(changedFolders.added);
|
|
return workspaceFolders;
|
|
};
|
|
//# sourceMappingURL=paths.js.map
|