'use strict'; var __importDefault = (this && this.__importDefault) || function (mod) { return mod && mod.__esModule ? mod : { default: mod }; }; Object.defineProperty(exports, '__esModule', { value: true }); exports.toNormalizedRealPath = exports.removeUplevels = exports.stripSnapshot = exports.insideSnapshot = exports.snapshotify = exports.substituteDenominator = exports.retrieveDenominator = exports.isDotNODE = exports.isDotJSON = exports.isDotJS = exports.isPackageJson = exports.normalizePath = exports.isRootPath = exports.ALIAS_AS_RESOLVABLE = exports.ALIAS_AS_RELATIVE = exports.STORE_STAT = exports.STORE_LINKS = exports.STORE_CONTENT = exports.STORE_BLOB = void 0; const assert_1 = __importDefault(require('assert')); const fs_1 = __importDefault(require('fs')); const path_1 = __importDefault(require('path')); exports.STORE_BLOB = 0; exports.STORE_CONTENT = 1; exports.STORE_LINKS = 2; exports.STORE_STAT = 3; exports.ALIAS_AS_RELATIVE = 0; // require("./file.js") // file or directory exports.ALIAS_AS_RESOLVABLE = 1; // require("package") const win32 = process.platform === 'win32'; const hasURL = typeof URL !== 'undefined'; function uppercaseDriveLetter(f) { if (f.slice(1, 3) !== ':\\') return f; return f[0].toUpperCase() + f.slice(1); } function removeTrailingSlashes(f) { if (f === '/') { return f; // dont remove from "/" } if (f.slice(1) === ':\\') { return f; // dont remove from "D:\" } let last = f.length - 1; while (true) { const char = f.charAt(last); if (char === '\\') { f = f.slice(0, -1); last -= 1; } else if (char === '/') { f = f.slice(0, -1); last -= 1; } else { break; } } return f; } const isUrl = (p) => hasURL && p instanceof URL; function pathToString(p, win) { let result; if (Buffer.isBuffer(p)) { result = p.toString(); } else if (isUrl(p)) { result = win ? p.pathname.replace(/^\//, '') : p.pathname; } else { result = p; } return result; } function isRootPath(p) { let file = pathToString(p, false); if (file === '.') { file = path_1.default.resolve(file); } return path_1.default.dirname(file) === p; } exports.isRootPath = isRootPath; function normalizePath(f) { let file = pathToString(f, win32); if (!/^.:$/.test(file)) { file = path_1.default.normalize(file); } // 'c:' -> 'c:.' if (win32) { file = uppercaseDriveLetter(file); } return removeTrailingSlashes(file); } exports.normalizePath = normalizePath; function isPackageJson(file) { return path_1.default.basename(file) === 'package.json'; } exports.isPackageJson = isPackageJson; function isDotJS(file) { return path_1.default.extname(file) === '.js'; } exports.isDotJS = isDotJS; function isDotJSON(file) { return path_1.default.extname(file) === '.json'; } exports.isDotJSON = isDotJSON; function isDotNODE(file) { return path_1.default.extname(file) === '.node'; } exports.isDotNODE = isDotNODE; function replaceSlashes(file, slash) { if (/^.:\\/.test(file)) { if (slash === '/') { return file.slice(2).replace(/\\/g, '/'); } } else if (/^\//.test(file)) { if (slash === '\\') { return `C:${file.replace(/\//g, '\\')}`; } } return file; } function injectSnapshot(file) { if (/^.:\\/.test(file)) { // C:\path\to if (file.length === 3) { // C:\ file = file.slice(0, -1); } // by convention, on windows we use C:\\snapshot return `C:\\snapshot${file.slice(2)}`; } if (/^\//.test(file)) { // /home/user/project if (file.length === 1) { // / file = file.slice(0, -1); } return `/snapshot${file}`; } return file; } function longestCommonLength(s1, s2) { const length = Math.min(s1.length, s2.length); for (let i = 0; i < length; i += 1) { if (s1.charCodeAt(i) !== s2.charCodeAt(i)) { return i; } } return length; } function withoutNodeModules(file) { return file.split( `${path_1.default.sep}node_modules${path_1.default.sep}` )[0]; } function retrieveDenominator(files) { (0, assert_1.default)(files.length > 0); let s1 = withoutNodeModules(files[0]) + path_1.default.sep; for (let i = 1; i < files.length; i += 1) { const s2 = withoutNodeModules(files[i]) + path_1.default.sep; s1 = s1.slice(0, longestCommonLength(s1, s2)); } if (s1 === '') { return win32 ? 2 : 0; } return s1.lastIndexOf(path_1.default.sep); } exports.retrieveDenominator = retrieveDenominator; function substituteDenominator(f, denominator) { const rootLength = win32 ? 2 : 0; return f.slice(0, rootLength) + f.slice(denominator); } exports.substituteDenominator = substituteDenominator; function snapshotify(file, slash) { return injectSnapshot(replaceSlashes(file, slash)); } exports.snapshotify = snapshotify; function insideSnapshot(f) { f = pathToString(f, win32); if (typeof f !== 'string') { return false; } if (win32) { const slice112 = f.slice(1, 12); return ( slice112 === ':\\snapshot\\' || slice112 === ':/snapshot\\' || slice112 === ':\\snapshot/' || slice112 === ':/snapshot/' || slice112 === ':\\snapshot' || slice112 === ':/snapshot' ); } const slice010 = f.slice(0, 10); return slice010 === '/snapshot/' || slice010 === '/snapshot'; } exports.insideSnapshot = insideSnapshot; function stripSnapshot(f) { const file = normalizePath(f); if (/^.:\\snapshot$/.test(file)) { return `${file[0]}:\\**\\`; } if (/^.:\\snapshot\\/.test(file)) { return `${file[0]}:\\**${file.slice(11)}`; } if (/^\/snapshot$/.test(file)) { return '/**/'; } if (/^\/snapshot\//.test(file)) { return `/**${file.slice(9)}`; } return f; // not inside } exports.stripSnapshot = stripSnapshot; function removeUplevels(f) { if (win32) { while (true) { if (f.slice(0, 3) === '..\\') { f = f.slice(3); } else if (f === '..') { f = '.'; } else { break; } } return f; } while (true) { if (f.slice(0, 3) === '../') { f = f.slice(3); } else if (f === '..') { f = '.'; } else { break; } } return f; } exports.removeUplevels = removeUplevels; function toNormalizedRealPath(requestPath) { const file = normalizePath(requestPath); if (fs_1.default.existsSync(file)) { return fs_1.default.realpathSync(file); } return file; } exports.toNormalizedRealPath = toNormalizedRealPath; //# sourceMappingURL=common.js.map