UNPKG

@yolkai/nx-workspace

Version:

Extensible Dev Tools for Monorepos

41 lines (40 loc) 2.01 kB
"use strict"; 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 }; }