diff --git a/package.json b/package.json index 148dcb1..b2d176e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "update-ts-references", - "version": "3.4.0", + "version": "3.5.0", "description": "Updates TypeScript references automatically while using workspaces", "bin": "src/index.js", "scripts": { @@ -39,6 +39,7 @@ "license": "MIT", "keywords": [ "typescript", + "intellisense", "project references", "tool", "util", @@ -49,7 +50,8 @@ "monorepo", "packages", "npm", - "automatic" + "automatic", + "update" ], "repository": { "type": "git", diff --git a/src/update-ts-references.js b/src/update-ts-references.js index 53168c7..33286ff 100644 --- a/src/update-ts-references.js +++ b/src/update-ts-references.js @@ -225,11 +225,13 @@ const updateTsConfig = ( } }; -function getPathsFromReferences(references) { - return references.reduce((paths, ref) => ({ +function getPathsFromReferences(references, tsconfigMap) { + return references.reduce((paths, ref) => { + const rootFolder= tsconfigMap[ref.name]?.compilerOptions?.rootDir ?? 'src' + return { ...paths, - [`${ref.name}`]: [`${ref.folder}/src`] - }), {}); + [`${ref.name}`]: [`${ref.folder}${rootFolder === '.' ? '' : `/${rootFolder}`}`], + }}, {}); } const execute = async ({ @@ -305,9 +307,26 @@ const execute = async ({ let rootReferences = []; let rootPaths = []; + let tsconfigMap = {} packagesMap.forEach((packageEntry, packageName) => { const detectedConfig = detectTSConfig(packageEntry.packageDir, configName, packageEntry.hasTsEntry && createTsConfig, cwd) + if (detectedConfig) { + const compilerOptions = parse(fs.readFileSync(path.join(packageEntry.packageDir, detectedConfig)).toString()).compilerOptions + + tsconfigMap = { + ...tsconfigMap, + [packageName]: { + detectedConfig, + compilerOptions + } + } + } + }); + + packagesMap.forEach((packageEntry, packageName) => { + const detectedConfig = tsconfigMap[packageName]?.detectedConfig + if (detectedConfig) { rootReferences.push({ name: packageName, @@ -322,7 +341,7 @@ const execute = async ({ verbose ) || []).map(ensurePosixPathStyle); - const paths = getPathsFromReferences(references) + const paths = getPathsFromReferences(references, tsconfigMap) if (verbose) { console.log(`references of ${packageName}`, references); @@ -350,7 +369,7 @@ const execute = async ({ }); rootReferences = (rootReferences || []).map(ensurePosixPathStyle); - rootPaths = getPathsFromReferences((rootPaths || []).map(ensurePosixPathStyle)) + rootPaths = getPathsFromReferences((rootReferences || []).map(ensurePosixPathStyle), tsconfigMap) if (verbose) { console.log('rootReferences', rootReferences); diff --git a/test-scenarios/ts-paths/workspace-b/tsconfig.json b/test-scenarios/ts-paths/workspace-b/tsconfig.json index 1dd8e13..57ff9da 100644 --- a/test-scenarios/ts-paths/workspace-b/tsconfig.json +++ b/test-scenarios/ts-paths/workspace-b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { "outDir": "dist", - "rootDir": "src" + "rootDir": "." } } diff --git a/tests/update-ts-references.test.js b/tests/update-ts-references.test.js index 1746c9a..f7c76a8 100644 --- a/tests/update-ts-references.test.js +++ b/tests/update-ts-references.test.js @@ -228,7 +228,7 @@ test('create paths mappings ', async () => { { compilerOptions: { composite: true, - paths: { "foo-c": ["utils/foos/foo-c/src"] } + paths: { "foo-a": ["utils/foos/foo-a/src"] ,"foo-b": ["utils/foos/foo-b/src"] ,"workspace-a": ["workspace-a/src"],"workspace-b": ["workspace-b"] } }, files: [], references: [ @@ -253,7 +253,7 @@ test('create paths mappings ', async () => { { compilerOptions: { ...compilerOptions, - paths: {"foo-a": ["../utils/foos/foo-a/src"], "workspace-b": ["../workspace-b/src"]} + paths: {"foo-a": ["../utils/foos/foo-a/src"], "workspace-b": ["../workspace-b"]} }, references: [ { @@ -269,7 +269,7 @@ test('create paths mappings ', async () => { const wsBTsConfig = [ './workspace-b', { - compilerOptions: {...compilerOptions, paths: {"foo-b": ["../utils/foos/foo-b/src"]}}, + compilerOptions: {...compilerOptions,rootDir: '.', paths: {"foo-b": ["../utils/foos/foo-b/src"]}}, references: [ { path: '../utils/foos/foo-b', diff --git a/tests/update-ts-references.yaml.test.js b/tests/update-ts-references.yaml.test.js index 731d737..c0870e1 100644 --- a/tests/update-ts-references.yaml.test.js +++ b/tests/update-ts-references.yaml.test.js @@ -184,7 +184,8 @@ test('receive options via the config', async () => { { compilerOptions: { composite: true, - }, + paths:{"workspace-a": ["workspace-a/src"],"workspace-b": ["workspace-b/src"]} +}, files: [], references: [ { @@ -240,6 +241,7 @@ test('receive options for a different usecase', async () => { { compilerOptions: { composite: true, + paths:{"workspace-a": ["workspace-a/src"],"workspace-b": ["workspace-b/src"]} }, files: [], references: [