UNPKG

tsc-path-fix

Version:

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

67 lines 3.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = replaceImportStatement; const normalizePath = require("normalize-path"); const path_1 = require("path"); const utils_1 = require("../utils"); function escapeSpecialChars(str) { return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); } function getAliasPrefixRegExp(alias) { return new RegExp(`(?:^${escapeSpecialChars(alias.prefix)})|(?:\\.(js|ts|json)$)`, 'g'); } function removeAliasPrefix(requiredModule, alias) { return requiredModule.replace(getAliasPrefixRegExp(alias), ''); } function replaceImportStatement({ orig, file, config }) { var _a, _b; const requiredModule = (_b = (_a = orig.match((0, utils_1.newStringRegex)())) === null || _a === void 0 ? void 0 : _a.groups) === null || _b === void 0 ? void 0 : _b.path; config.output.debug('default replacer - requiredModule: ', requiredModule); config.output.assert(typeof requiredModule == 'string', `Unexpected import statement pattern ${orig}`); const alias = config.aliasTrie.search(requiredModule); config.output.debug('default replacer - alias: ', alias); if (!alias) return orig; const isAlias = alias.shouldPrefixMatchWildly ? requiredModule.startsWith(alias.prefix) && requiredModule !== alias.prefix : requiredModule === alias.prefix || requiredModule.startsWith(alias.prefix + '/'); if (isAlias) { for (let i = 0; i < alias.paths.length; i++) { let absoluteAliasPath = config.pathCache.getAbsoluteAliasPath(alias.paths[i].basePath, alias.paths[i].path); config.output.debug('default replacer - absoluteAliasPath: ', absoluteAliasPath); if (absoluteAliasPath.startsWith('---')) { if (i === alias.paths.length - 1) { absoluteAliasPath = absoluteAliasPath.replace('---', ''); } else { continue; } } if (!config.pathCache.existsResolvedAlias(alias.prefix.length == requiredModule.length ? normalizePath(absoluteAliasPath) : normalizePath(`${absoluteAliasPath}/${removeAliasPrefix(requiredModule, alias)}`))) { config.output.debug('default replacer - Invalid path'); continue; } let relativeAliasPath = normalizePath((0, path_1.relative)((0, path_1.dirname)(file), absoluteAliasPath)); if (!relativeAliasPath.startsWith('.')) { relativeAliasPath = './' + relativeAliasPath; } config.output.debug('default replacer - relativeAliasPath: ', relativeAliasPath); const index = orig.indexOf(alias.prefix); const newImportScript = orig.substring(0, index) + relativeAliasPath + '/' + orig.substring(index + alias.prefix.length); config.output.debug('default replacer - newImportScript: ', newImportScript); const modulePath = newImportScript.match((0, utils_1.newStringRegex)()).groups.path; config.output.debug('default replacer - modulePath: ', modulePath); return newImportScript.replace(modulePath, normalizePath(modulePath)); } } return orig; } //# sourceMappingURL=default.replacer.js.map