123456789101112131415161718192021222324252627282930313233343536373839 |
- "use strict";
- const path = require("path");
-
- const looksLikeAbsolutePath = (maybeAbsolutePath) => {
- return /^(?:[a-z]:\\|\/)/i.test(maybeAbsolutePath);
- };
-
- const normalizePathSeparator = (p) => p.replace(/\\/g, "/");
-
- const _makePathsRelative = (context, identifier) => {
- return identifier
- .split(/([|! ])/)
- .map(str => looksLikeAbsolutePath(str) ?
- normalizePathSeparator(path.relative(context, str)) : str)
- .join("");
- };
-
- exports.makePathsRelative = (context, identifier, cache) => {
- if(!cache) return _makePathsRelative(context, identifier);
-
- const relativePaths = cache.relativePaths || (cache.relativePaths = new Map());
-
- let cachedResult;
- let contextCache = relativePaths.get(context);
- if(typeof contextCache === "undefined") {
- relativePaths.set(context, contextCache = new Map());
- } else {
- cachedResult = contextCache.get(identifier);
- }
-
- if(typeof cachedResult !== "undefined") {
- return cachedResult;
- } else {
- const relativePath = _makePathsRelative(context, identifier);
- contextCache.set(identifier, relativePath);
- return relativePath;
- }
- };
|