typescript-transform-paths
Version:
Transforms module resolution paths using TypeScript path mapping and/or custom paths
37 lines • 2.26 kB
JavaScript
import path from "node:path";
/* ****************************************************************************************************************** */
// region: TS Helpers
/* ****************************************************************************************************************** */
/** Determine output file path for source file */
export function getOutputDirForSourceFile(context, sourceFile) {
const { tsInstance, emitHost, outputFileNamesCache, compilerOptions, tsInstance: { getOwnEmitOutputFilePath, getOutputExtension }, } = context;
if (outputFileNamesCache.has(sourceFile))
return outputFileNamesCache.get(sourceFile);
// Note: In project references, resolved path is different from path. In that case, our output path is already
// determined in resolvedPath
const outputPath = sourceFile.path && sourceFile.resolvedPath && sourceFile.path !== sourceFile.resolvedPath
? sourceFile.resolvedPath
: getOwnEmitOutputFilePath(sourceFile.fileName, emitHost, getOutputExtension(sourceFile.fileName, compilerOptions));
if (!outputPath)
throw new Error(`Could not resolve output path for ${sourceFile.fileName}. Please report a GH issue at: ` +
`https://github.com/LeDDGroup/typescript-transform-paths/issues`);
const res = path.dirname(outputPath);
outputFileNamesCache.set(sourceFile, res);
return tsInstance.normalizePath(res);
}
/** Determine if moduleName matches config in paths */
export function isModulePathsMatch(context, moduleName) {
const { pathsPatterns, tsInstance: { matchPatternOrExact }, } = context;
return !!(pathsPatterns && matchPatternOrExact(pathsPatterns, moduleName));
}
/** Create barebones EmitHost (for no-Program transform) */
export function createSyntheticEmitHost(compilerOptions, tsInstance, getCanonicalFileName, fileNames) {
return {
getCompilerOptions: () => compilerOptions,
getCurrentDirectory: tsInstance.sys.getCurrentDirectory,
getCommonSourceDirectory: () => tsInstance.getCommonSourceDirectoryOfConfig({ options: compilerOptions, fileNames: fileNames }, !tsInstance.sys.useCaseSensitiveFileNames),
getCanonicalFileName,
};
}
// endregion
//# sourceMappingURL=ts-helpers.js.map