UNPKG

tsc-path-fix

Version:

Zero-runtime TypeScript path resolver - converts aliases to relative paths at compile time. Fast, lightweight, with native watch mode.

80 lines 2.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PathCache = void 0; const fs_1 = require("fs"); const path_1 = require("path"); class PathCache { constructor(useCache, fileExtensions) { this.fileExtensions = fileExtensions || [ 'js', 'json', 'jsx', 'cjs', 'mjs', 'd.ts', 'd.tsx', 'd.cts', 'd.mts' ]; this.useCache = useCache; if (useCache) { this.existsCache = new Map(); this.absoluteCache = new Map(); } } existsResolvedAlias(path) { if (!this.useCache) return this.exists(path); if (this.existsCache.has(path)) { return this.existsCache.get(path); } else { const result = this.exists(path); this.existsCache.set(path, result); return result; } } getAbsoluteAliasPath(basePath, aliasPath) { const request = { basePath, aliasPath }; if (!this.useCache) return this.getAAP(request); if (this.absoluteCache.has(this.getCacheKey(request))) { return this.absoluteCache.get(this.getCacheKey(request)); } else { const result = this.getAAP(request); this.absoluteCache.set(this.getCacheKey(request), result); return result; } } getCacheKey({ basePath, aliasPath }) { return `${basePath}___${aliasPath}`; } getAAP({ basePath, aliasPath }) { const aliasPathParts = aliasPath .split('/') .filter((part) => !part.match(/^\.$|^\s*$/)); let aliasPathPart = aliasPathParts.shift() || ''; let pathExists = false; while (!(pathExists = this.exists((0, path_1.join)(basePath, aliasPathPart))) && aliasPathParts.length) { aliasPathPart = aliasPathParts.shift(); } if (pathExists) { return (0, path_1.join)(basePath, aliasPathPart, aliasPathParts.join('/')); } return '---' + (0, path_1.join)(basePath, aliasPathParts.join('/')); } exists(path) { return ((0, fs_1.existsSync)(path) || this.fileExtensions.some((extension) => (0, fs_1.existsSync)(`${path}.${extension}`))); } clearCache() { if (this.useCache) { this.existsCache.clear(); this.absoluteCache.clear(); } } } exports.PathCache = PathCache; //# sourceMappingURL=path-cache.js.map