@yolkai/nx-workspace
Version:
41 lines (40 loc) • 2.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const typescript_import_locator_1 = require("./typescript-import-locator");
const ts = require("typescript");
const app_root_1 = require("../../../utils/app-root");
const typescript_1 = require("../../../utils/typescript");
let compilerHost;
function buildExplicitTypeScriptDependencies(ctx, nodes, addDependency, fileRead) {
const importLocator = new typescript_import_locator_1.TypeScriptImportLocator(fileRead);
Object.keys(ctx.fileMap).forEach(source => {
Object.values(ctx.fileMap[source]).forEach(f => {
importLocator.fromFile(f.file, (importExpr, filePath, type) => {
const target = findTargetProject(importExpr, nodes, f.file);
if (source && target) {
addDependency(type, source, target);
}
});
});
});
function findTargetProject(importExpr, nodes, filePath) {
compilerHost = compilerHost || getCompilerHost();
const { options, host, moduleResolutionCache } = compilerHost;
importExpr = importExpr.split('#')[0];
const { resolvedModule } = ts.resolveModuleName(importExpr, filePath, options, host, moduleResolutionCache);
// module was not found in the workspace - return
if (!resolvedModule) {
return;
}
return Object.keys(nodes).find(projectName => resolvedModule.resolvedFileName
.replace(app_root_1.appRootPath, '')
.includes(nodes[projectName].data.root));
}
}
exports.buildExplicitTypeScriptDependencies = buildExplicitTypeScriptDependencies;
function getCompilerHost() {
const { options } = typescript_1.readTsConfig(`${app_root_1.appRootPath}/tsconfig.json`);
const host = ts.createCompilerHost(options, true);
const moduleResolutionCache = ts.createModuleResolutionCache(app_root_1.appRootPath, host.getCanonicalFileName);
return { options, host, moduleResolutionCache };
}