Skip to content

Commit 5256b3c

Browse files
authored
fix: respect root package.json during pruning (#54)
1 parent 32c16d0 commit 5256b3c

14 files changed

Lines changed: 213 additions & 12 deletions

File tree

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"name": "update-ts-references",
3-
"version": "5.0.0",
3+
"version": "5.0.1",
44
"description": "Updates TypeScript references automatically while using workspaces",
55
"bin": "src/index.js",
66
"scripts": {
77
"lint": "eslint src tests",
8-
"test": "scripts/prepareTests.sh && vitest run",
9-
"vitest": "vitest run"
8+
"test": "scripts/prepareTests.sh && vitest run --no-file-parallelism",
9+
"vitest": "vitest run --no-file-parallelism"
1010
},
1111
"contributors": [
1212
{

src/update-ts-references.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ const getAllPackageJsons = async (workspaces, cwd) => {
4141
});
4242

4343
return Promise.all(
44-
workspaceGlobs.map((workspace) => fastGlob(`${workspace}/${PACKAGE_JSON}`, { cwd, onlyFiles: true }))
44+
workspaceGlobs.map((workspace) =>
45+
fastGlob(`${workspace}/${PACKAGE_JSON}`, { cwd, onlyFiles: true }).then((files) => files.sort())
46+
)
4547
)
4648
.then((allPackages) =>
4749
allPackages.reduce(
@@ -109,6 +111,16 @@ const getPackageNamesAndPackageDir = (packageFilePaths, cwd) =>
109111
return map;
110112
}, new Map());
111113

114+
const getDependencyNamesFromPackageJson = ({
115+
dependencies = {},
116+
peerDependencies = {},
117+
devDependencies = {},
118+
} = {}) => Object.keys({
119+
...dependencies,
120+
...peerDependencies,
121+
...devDependencies,
122+
});
123+
112124
const getReferencesFromDependencies = (
113125
configName,
114126
{ packageDir },
@@ -325,8 +337,8 @@ const execute = async ({
325337

326338
let tsconfigMap = {}
327339
let jsconfigMap = {}
328-
const referencesMap = {}
329340
const referencedPackageNames = new Set()
341+
const explicitRootReferenceNames = new Set(getDependencyNamesFromPackageJson(packageJson))
330342
const rootReferenceCandidates = []
331343
packagesMap.forEach((packageEntry, packageName) => {
332344
const detectedConfig = detectTSConfig(packageEntry.packageDir, configName, packageEntry.hasTsEntry && createTsConfig, cwd)
@@ -379,7 +391,6 @@ const execute = async ({
379391
packagesMap,
380392
verbose
381393
) || []).map(ensurePosixPathStyle);
382-
referencesMap[packageName] = references
383394
references.forEach(({ name }) => referencedPackageNames.add(name))
384395

385396
const paths = getPathsFromReferences(references, tsconfigMap, jsconfigMap, ignorePathMappings)
@@ -406,7 +417,9 @@ const execute = async ({
406417
}
407418
});
408419

409-
const rootReferences = rootReferenceCandidates.filter(({ name }) => !referencedPackageNames.has(name));
420+
const rootReferences = rootReferenceCandidates.filter(({ name }) =>
421+
explicitRootReferenceNames.has(name) || !referencedPackageNames.has(name)
422+
);
410423
const rootPaths = getPathsFromReferences(rootReferences, tsconfigMap, {}, ignorePathMappings)
411424

412425
if (verbose) {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"name": "prune-minimal-workspace",
3+
"version": "0.0.1",
4+
"private": true,
5+
"workspaces": [
6+
"workspace-a",
7+
"workspace-b"
8+
],
9+
"devDependencies": {
10+
"typescript": "latest"
11+
}
12+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"files": [],
3+
"compilerOptions": {
4+
"composite": true
5+
}
6+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"name": "workspace-a",
3+
"version": "1.0.0",
4+
"dependencies": {
5+
"workspace-b": "1.0.0"
6+
}
7+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"compilerOptions": {
3+
"outDir": "dist",
4+
"rootDir": "src"
5+
}
6+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"name": "workspace-b",
3+
"version": "1.0.0"
4+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"compilerOptions": {
3+
"outDir": "dist",
4+
"rootDir": "src"
5+
}
6+
}

test-scenarios/ts-paths/package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,14 @@
88
"shared/*",
99
"utils/**/"
1010
],
11+
"dependencies": {
12+
"workspace-b": "1.0.0"
13+
},
1114
"devDependencies": {
15+
"foo-a": "1.0.0",
1216
"typescript": "latest"
17+
},
18+
"peerDependencies": {
19+
"foo-b": "1.0.0"
1320
}
1421
}

test-scenarios/yarn-ws-check-no-changes/package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,14 @@
88
"shared/*",
99
"utils/**"
1010
],
11+
"dependencies": {
12+
"workspace-b": "1.0.0"
13+
},
1114
"devDependencies": {
15+
"foo-a": "1.0.0",
1216
"typescript": "latest"
17+
},
18+
"peerDependencies": {
19+
"workspace-c": "1.0.0"
1320
}
1421
}

0 commit comments

Comments
 (0)