UNPKG

typescript-transform-path-rewrite

Version:

Transform generated javascript import/require paths using typescript standard config

182 lines 10.6 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _Resolver_matchers, _Resolver_ts, _Resolver_compilerOptions, _Resolver_cachedPackageJson; Object.defineProperty(exports, "__esModule", { value: true }); exports.Resolver = void 0; const posix_1 = __importDefault(require("node:path/posix")); const debug_1 = __importDefault(require("debug")); const typescript_1 = require("typescript"); const constants_1 = require("./constants"); const node_fs_1 = require("node:fs"); /* eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call*/ const log = (0, debug_1.default)(constants_1.PROJECT_NAME); function isParentDir(dir, parentToTest) { const diff = posix_1.default.relative(parentToTest, dir); return diff.length === 0 || (!diff.startsWith('..') && !posix_1.default.isAbsolute(diff)); } class Resolver { constructor(ts, compilerOptions, alias) { _Resolver_matchers.set(this, void 0); _Resolver_ts.set(this, void 0); _Resolver_compilerOptions.set(this, void 0); _Resolver_cachedPackageJson.set(this, void 0); __classPrivateFieldSet(this, _Resolver_ts, ts, "f"); __classPrivateFieldSet(this, _Resolver_compilerOptions, compilerOptions, "f"); __classPrivateFieldSet(this, _Resolver_cachedPackageJson, {}, "f"); // Build matchers from compiler options __classPrivateFieldSet(this, _Resolver_matchers, [ (moduleName, sourceFileName) => { const retVal = this.resolveModule(sourceFileName, moduleName); if (retVal) { log(`${sourceFileName}: Rewrite module ${moduleName} to ${retVal}`); return retVal; } return undefined; }, ], "f"); if (alias) { // Build matchers from alias property of the plugin __classPrivateFieldGet(this, _Resolver_matchers, "f").push(...Object.entries(alias).map(([from, to]) => { const fromRegex = new RegExp(from); return function (moduleName, sourceFileName) { if (fromRegex.test(moduleName)) { const retVal = moduleName.replace(fromRegex, to); log(`${sourceFileName}: Rewrite module ${moduleName} to ${retVal} with regex /${from}/ => ${to}`); return retVal; } return undefined; }; })); } } resolve(moduleName, sourceFileName) { let retVal; __classPrivateFieldGet(this, _Resolver_matchers, "f").forEach(function (matcher) { const result = matcher(moduleName, sourceFileName); if (result != null) { retVal = result; } }); return retVal; } resolveModule(sourceFilePath, moduleName) { const { resolvedModule } = __classPrivateFieldGet(this, _Resolver_ts, "f").resolveModuleName(moduleName, sourceFilePath, __classPrivateFieldGet(this, _Resolver_compilerOptions, "f"), __classPrivateFieldGet(this, _Resolver_ts, "f").sys); if (!resolvedModule || resolvedModule.packageId) { return undefined; } let resolvedFileDir = posix_1.default.dirname(resolvedModule.resolvedFileName); const resolvedFileExt = resolvedModule.extension; const resolvedFileBaseWithoutExt = resolvedModule.resolvedFileName.substring(resolvedFileDir.length + 1, resolvedModule.resolvedFileName.length - resolvedFileExt.length); const originalSourceFileDir = posix_1.default.dirname(sourceFilePath); let sourceFileDir = originalSourceFileDir; if (__classPrivateFieldGet(this, _Resolver_compilerOptions, "f").rootDirs) { let fileRootDir; let moduleRootDir; __classPrivateFieldGet(this, _Resolver_compilerOptions, "f").rootDirs.forEach(function (rootDir) { if (isParentDir(resolvedFileDir, rootDir) && (!moduleRootDir || rootDir.length > moduleRootDir.length)) { moduleRootDir = rootDir; } if (isParentDir(sourceFileDir, rootDir) && (!fileRootDir || rootDir.length > fileRootDir.length)) { fileRootDir = rootDir; } }); if (fileRootDir && moduleRootDir) { sourceFileDir = posix_1.default.relative(fileRootDir, sourceFileDir); resolvedFileDir = posix_1.default.relative(moduleRootDir, resolvedFileDir); } } const normalisedResolvedFileDir = posix_1.default.relative(sourceFileDir, resolvedFileDir); let normalisedResolvedFileBase = resolvedFileBaseWithoutExt; if (resolvedFileExt === '.mts') { normalisedResolvedFileBase += '.mjs'; } else if (resolvedFileExt === '.cts') { normalisedResolvedFileBase += '.cjs'; } else if (resolvedFileExt === '.ts' || resolvedFileExt === '.d.ts') { // Only add .js if is in ESM mode if (this.isESM(originalSourceFileDir)) { normalisedResolvedFileBase += '.js'; } } else { normalisedResolvedFileBase += resolvedFileExt; } let normalisedResolvedFilePath = posix_1.default.join(normalisedResolvedFileDir, normalisedResolvedFileBase); if (!normalisedResolvedFilePath.startsWith('.')) { normalisedResolvedFilePath = `./${normalisedResolvedFilePath}`; } return normalisedResolvedFilePath; } isESM(sourceFileDir) { if (__classPrivateFieldGet(this, _Resolver_compilerOptions, "f").module === typescript_1.ModuleKind.Node16 || __classPrivateFieldGet(this, _Resolver_compilerOptions, "f").module === typescript_1.ModuleKind.NodeNext) { const pkg = this.findNearestPackageJson(sourceFileDir); return pkg.found && pkg.type === 'module'; } return (__classPrivateFieldGet(this, _Resolver_compilerOptions, "f").module !== typescript_1.ModuleKind.None && __classPrivateFieldGet(this, _Resolver_compilerOptions, "f").module !== typescript_1.ModuleKind.CommonJS && __classPrivateFieldGet(this, _Resolver_compilerOptions, "f").module !== typescript_1.ModuleKind.AMD && __classPrivateFieldGet(this, _Resolver_compilerOptions, "f").module !== typescript_1.ModuleKind.UMD && __classPrivateFieldGet(this, _Resolver_compilerOptions, "f").module !== typescript_1.ModuleKind.System); } findNearestPackageJson(srcDir) { if (!__classPrivateFieldGet(this, _Resolver_cachedPackageJson, "f")[srcDir]) { let oldSrcDir = srcDir; let currenSrcDir = srcDir; while (!__classPrivateFieldGet(this, _Resolver_cachedPackageJson, "f")[srcDir]) { // Try to read the package.json const pkgJsonPath = posix_1.default.resolve(currenSrcDir, 'package.json'); try { if ((0, node_fs_1.existsSync)(pkgJsonPath)) { const data = JSON.parse((0, node_fs_1.readFileSync)(pkgJsonPath, 'utf-8')); if (typeof data === 'object' && (data.type == null || data.type.toLowerCase() === 'commonjs' || data.type.toLowerCase() === 'module')) { __classPrivateFieldGet(this, _Resolver_cachedPackageJson, "f")[srcDir] = __classPrivateFieldGet(this, _Resolver_cachedPackageJson, "f")[currenSrcDir] = { found: true, type: data.type ? data.type.toLowerCase() : 'commonjs', }; } } /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ } catch (err) { // Ignore error } if (!__classPrivateFieldGet(this, _Resolver_cachedPackageJson, "f")[srcDir]) { // Go to parent directory oldSrcDir = currenSrcDir; currenSrcDir = posix_1.default.resolve(currenSrcDir, '..'); if (__classPrivateFieldGet(this, _Resolver_cachedPackageJson, "f")[currenSrcDir]) { // In the cache __classPrivateFieldGet(this, _Resolver_cachedPackageJson, "f")[srcDir] = __classPrivateFieldGet(this, _Resolver_cachedPackageJson, "f")[currenSrcDir]; break; } if (currenSrcDir === oldSrcDir) { // Cannot go any further __classPrivateFieldGet(this, _Resolver_cachedPackageJson, "f")[srcDir] = __classPrivateFieldGet(this, _Resolver_cachedPackageJson, "f")[currenSrcDir] = { found: false, }; break; } } } } return __classPrivateFieldGet(this, _Resolver_cachedPackageJson, "f")[srcDir]; } } exports.Resolver = Resolver; _Resolver_matchers = new WeakMap(), _Resolver_ts = new WeakMap(), _Resolver_compilerOptions = new WeakMap(), _Resolver_cachedPackageJson = new WeakMap(); //# sourceMappingURL=resolver.js.map