Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | 30x 30x 30x 678x 30x 185x 185x 2x 2x 185x 67x 67x 1x 66x 67x 185x 30x 27x 27x 27x 27x 27x 17x 27x | import Path
from 'path';
/**
* Regex that matches on any path separator
*/
const pathSepRegex = /[/\\]/g;
/**
* Converts path separators from either forward slash or backslash to whatever format is preferred by the local filesystem.
* @param path Path to fix
* @returns path with all separators aligned to the local filesystem
*/
export function fixPathSeparators(path: string): string {
return path.replace(pathSepRegex, Path.sep);
}
/**
* Resolves the pipeline-local path to targetPath from sourcePath, or the project root if sourcePath is not specified.
* If targetPath begins with "@/", then the path will be resolved from the project root even if sourcePath is specified.
* If targetPath is absolute, then it will not be modified and will be returned as-is.
* If sourcePath is a directory path, then it will be used as-is.
* If sourcePath is a file path, then the directory will be extracted and used.
*
* This function will normalize "/" and "\" to the system path delimiter.
*
* @param targetPath Resource path to resolve
* @param sourcePath Optional relative source
* @returns Resolved path to resPath
*/
export function resolveResPath(targetPath: string, sourcePath?: string): string {
// convert path separators
targetPath = fixPathSeparators(targetPath);
// treat "@" paths as relative to root
if (targetPath.startsWith(`@${ Path.sep }`)) {
// strip the leading @/
targetPath = targetPath.slice(2);
// remove basePath to force relative to root
sourcePath = undefined;
}
// Manually normalize relative paths
if (!Path.isAbsolute(targetPath) && sourcePath !== undefined) {
sourcePath = fixPathSeparators(sourcePath);
// extract directory name from base path
if (sourcePath.endsWith(Path.sep)) {
// for directory paths, strip trailing /
sourcePath = sourcePath.substring(0, sourcePath.length - 1);
} else {
// for file paths, strip filename
sourcePath = Path.dirname(sourcePath);
}
// generate path
targetPath = Path.join(sourcePath, targetPath);
}
// normalize path
return Path.normalize(targetPath);
}
/**
* Computes the relative resource path from sourceResPath to targetResPath.
* Both parameters will be normalized and path separators will be converted the local platform.
* If sourceResPath points to a directory, then it MUST end with a path separator.
* Otherwise, it will be treated as a path to a file.
* When sourceResPath points to a file, then {@link Path.dirname} is used to extract the folder name.
*
* @param sourceResPath Path to the source resource
* @param targetResPath Path to the target resource
* @returns Relative path from sourcePath to targetPath
*/
export function computeRelativeResPath(sourceResPath: string, targetResPath: string): string {
sourceResPath = fixPathSeparators(sourceResPath);
targetResPath = fixPathSeparators(targetResPath);
sourceResPath = Path.normalize(sourceResPath);
targetResPath = Path.normalize(targetResPath);
if (!sourceResPath.endsWith(Path.sep)) {
sourceResPath = Path.dirname(sourceResPath);
}
return Path.relative(sourceResPath, targetResPath);
} |