123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /**
- * @fileoverview Common helpers for operations on filenames and paths
- * @author Ian VanSchooten
- */
- "use strict";
-
- //------------------------------------------------------------------------------
- // Requirements
- //------------------------------------------------------------------------------
-
- const path = require("path");
-
- //------------------------------------------------------------------------------
- // Private
- //------------------------------------------------------------------------------
-
- /**
- * Replace Windows with posix style paths
- *
- * @param {string} filepath Path to convert
- * @returns {string} Converted filepath
- */
- function convertPathToPosix(filepath) {
- const normalizedFilepath = path.normalize(filepath);
- const posixFilepath = normalizedFilepath.replace(/\\/g, "/");
-
- return posixFilepath;
- }
-
- /**
- * Converts an absolute filepath to a relative path from a given base path
- *
- * For example, if the filepath is `/my/awesome/project/foo.bar`,
- * and the base directory is `/my/awesome/project/`,
- * then this function should return `foo.bar`.
- *
- * path.relative() does something similar, but it requires a baseDir (`from` argument).
- * This function makes it optional and just removes a leading slash if the baseDir is not given.
- *
- * It does not take into account symlinks (for now).
- *
- * @param {string} filepath Path to convert to relative path. If already relative,
- * it will be assumed to be relative to process.cwd(),
- * converted to absolute, and then processed.
- * @param {string} [baseDir] Absolute base directory to resolve the filepath from.
- * If not provided, all this function will do is remove
- * a leading slash.
- * @returns {string} Relative filepath
- */
- function getRelativePath(filepath, baseDir) {
- const absolutePath = path.isAbsolute(filepath)
- ? filepath
- : path.resolve(filepath);
-
- if (baseDir) {
- if (!path.isAbsolute(baseDir)) {
- throw new Error(`baseDir should be an absolute path: ${baseDir}`);
- }
- return path.relative(baseDir, absolutePath);
- }
- return absolutePath.replace(/^\//, "");
-
- }
-
- //------------------------------------------------------------------------------
- // Public Interface
- //------------------------------------------------------------------------------
-
- module.exports = {
- convertPathToPosix,
- getRelativePath
- };
|