Skip to content

Commit 01d1bf9

Browse files
committed
Fix(*): Make sure peerDependencies of deps are hoisted through each package.
Fixes #1584
1 parent 2f5518d commit 01d1bf9

File tree

19 files changed

+125
-0
lines changed

19 files changed

+125
-0
lines changed
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// @ts-check
2+
3+
import { writeFileSync } from 'node:fs';
4+
import Module from 'node:module';
5+
const require = Module.createRequire(import.meta.url);
6+
7+
/**
8+
* @param {string} target
9+
*/
10+
export function fixPeerDeps(target) {
11+
const pkg = require(`${target}/package.json`);
12+
13+
for (const name of Object.keys(pkg.dependencies ?? {})) {
14+
// Import the dependency package.json file and parse it
15+
let depPkg;
16+
try {
17+
depPkg = require(`${name}/package.json`);
18+
} catch {
19+
// If the sub package doesn't expose their package.json; skip it.
20+
console.error(`Could not find package.json for ${name}. Skipping...`);
21+
continue;
22+
}
23+
24+
for (const [peerName, peerVersion] of Object.entries(depPkg.peerDependencies ?? {})) {
25+
// If the peer dependency is not already a dependency, add it
26+
if (!pkg.dependencies[peerName]) {
27+
pkg.peerDependencies = pkg.peerDependencies ?? {};
28+
pkg.peerDependencies[peerName] = peerVersion;
29+
}
30+
}
31+
}
32+
33+
// Write the updated package.json file
34+
writeFileSync(`${target}/package.json`, JSON.stringify(pkg, null, 2) + '\n');
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"name": "@repo/hoist-peer-dependencies",
3+
"version": "0.0.0",
4+
"private": true,
5+
"type": "module",
6+
"main": "index.js",
7+
"engines": {
8+
"node": ">=18"
9+
}
10+
}

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
},
7272
"devDependencies": {
7373
"@eslint/js": "^9.13.0",
74+
"@repo/hoist-peer-dependencies": "workspace:*",
7475
"@repo/tsconfig": "workspace:*",
7576
"@types/node": "^22.8.0",
7677
"@vitest/coverage-v8": "^2.1.3",

packages/checkbox/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -100,5 +100,8 @@
100100
"./package.json": "./package.json",
101101
".": "./src/index.ts"
102102
}
103+
},
104+
"peerDependencies": {
105+
"@types/node": ">=18"
103106
}
104107
}

packages/confirm/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,8 @@
9797
"./package.json": "./package.json",
9898
".": "./src/index.ts"
9999
}
100+
},
101+
"peerDependencies": {
102+
"@types/node": ">=18"
100103
}
101104
}

packages/demo/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,8 @@
9797
"./package.json": "./package.json",
9898
".": "./src/index.ts"
9999
}
100+
},
101+
"peerDependencies": {
102+
"@types/node": ">=18"
100103
}
101104
}

packages/editor/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -98,5 +98,8 @@
9898
"./package.json": "./package.json",
9999
".": "./src/index.ts"
100100
}
101+
},
102+
"peerDependencies": {
103+
"@types/node": ">=18"
101104
}
102105
}

packages/expand/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -98,5 +98,8 @@
9898
"./package.json": "./package.json",
9999
".": "./src/index.ts"
100100
}
101+
},
102+
"peerDependencies": {
103+
"@types/node": ">=18"
101104
}
102105
}

packages/input/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,8 @@
9797
"./package.json": "./package.json",
9898
".": "./src/index.ts"
9999
}
100+
},
101+
"peerDependencies": {
102+
"@types/node": ">=18"
100103
}
101104
}

packages/inquirer/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -99,5 +99,8 @@
9999
"./package.json": "./package.json",
100100
".": "./src/index.ts"
101101
}
102+
},
103+
"peerDependencies": {
104+
"@types/node": ">=18"
102105
}
103106
}

packages/number/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,8 @@
9797
"./package.json": "./package.json",
9898
".": "./src/index.ts"
9999
}
100+
},
101+
"peerDependencies": {
102+
"@types/node": ">=18"
100103
}
101104
}

packages/password/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -98,5 +98,8 @@
9898
"./package.json": "./package.json",
9999
".": "./src/index.ts"
100100
}
101+
},
102+
"peerDependencies": {
103+
"@types/node": ">=18"
101104
}
102105
}

packages/prompts/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,8 @@
104104
"./package.json": "./package.json",
105105
".": "./src/index.ts"
106106
}
107+
},
108+
"peerDependencies": {
109+
"@types/node": ">=18"
107110
}
108111
}

packages/rawlist/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -98,5 +98,8 @@
9898
"./package.json": "./package.json",
9999
".": "./src/index.ts"
100100
}
101+
},
102+
"peerDependencies": {
103+
"@types/node": ">=18"
101104
}
102105
}

packages/search/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -99,5 +99,8 @@
9999
"./package.json": "./package.json",
100100
".": "./src/index.ts"
101101
}
102+
},
103+
"peerDependencies": {
104+
"@types/node": ">=18"
102105
}
103106
}

packages/select/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -100,5 +100,8 @@
100100
"./package.json": "./package.json",
101101
".": "./src/index.ts"
102102
}
103+
},
104+
"peerDependencies": {
105+
"@types/node": ">=18"
103106
}
104107
}

packages/testing/package.json

+3
Original file line numberDiff line numberDiff line change
@@ -100,5 +100,8 @@
100100
"./package.json": "./package.json",
101101
".": "./src/index.ts"
102102
}
103+
},
104+
"peerDependencies": {
105+
"@types/node": ">=18"
103106
}
104107
}

tools/setup-packages.mjs

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import path from 'node:path';
22
import fs from 'node:fs/promises';
33
import { globby } from 'globby';
4+
import { fixPeerDeps } from '@repo/hoist-peer-dependencies';
45

56
function readFile(filepath) {
67
return fs.readFile(filepath, 'utf8');
@@ -39,6 +40,7 @@ Promise.all(
3940
).then((packages) =>
4041
packages.forEach(async ([pkgPath, pkg]) => {
4142
const dir = path.dirname(pkgPath);
43+
fixPeerDeps(path.resolve(path.join(dir)));
4244

4345
const isTS = await fileExists(path.join(dir, 'src/index.ts'));
4446
const hasReadme = await fileExists(path.join(dir, 'README.md'));

yarn.lock

+35
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,8 @@ __metadata:
465465
ansi-escapes: "npm:^4.3.2"
466466
tshy: "npm:^3.0.2"
467467
yoctocolors-cjs: "npm:^2.1.2"
468+
peerDependencies:
469+
"@types/node": ">=18"
468470
languageName: unknown
469471
linkType: soft
470472

@@ -489,6 +491,8 @@ __metadata:
489491
"@inquirer/type": "npm:^3.0.0"
490492
"@repo/tsconfig": "workspace:*"
491493
tshy: "npm:^3.0.2"
494+
peerDependencies:
495+
"@types/node": ">=18"
492496
languageName: unknown
493497
linkType: soft
494498

@@ -526,6 +530,8 @@ __metadata:
526530
"@types/node": "npm:^22.8.0"
527531
tshy: "npm:^3.0.2"
528532
yoctocolors-cjs: "npm:^2.1.2"
533+
peerDependencies:
534+
"@types/node": ">=18"
529535
bin:
530536
inquirer-demo: ./dist/esm/index.js
531537
languageName: unknown
@@ -542,6 +548,8 @@ __metadata:
542548
"@repo/tsconfig": "workspace:*"
543549
external-editor: "npm:^3.1.0"
544550
tshy: "npm:^3.0.2"
551+
peerDependencies:
552+
"@types/node": ">=18"
545553
languageName: unknown
546554
linkType: soft
547555

@@ -567,6 +575,8 @@ __metadata:
567575
"@repo/tsconfig": "workspace:*"
568576
tshy: "npm:^3.0.2"
569577
yoctocolors-cjs: "npm:^2.1.2"
578+
peerDependencies:
579+
"@types/node": ">=18"
570580
languageName: unknown
571581
linkType: soft
572582

@@ -590,6 +600,8 @@ __metadata:
590600
"@inquirer/type": "npm:^3.0.0"
591601
"@repo/tsconfig": "workspace:*"
592602
tshy: "npm:^3.0.2"
603+
peerDependencies:
604+
"@types/node": ">=18"
593605
languageName: unknown
594606
linkType: soft
595607

@@ -603,6 +615,8 @@ __metadata:
603615
"@inquirer/type": "npm:^3.0.0"
604616
"@repo/tsconfig": "workspace:*"
605617
tshy: "npm:^3.0.2"
618+
peerDependencies:
619+
"@types/node": ">=18"
606620
languageName: unknown
607621
linkType: soft
608622

@@ -617,6 +631,8 @@ __metadata:
617631
"@repo/tsconfig": "workspace:*"
618632
ansi-escapes: "npm:^4.3.2"
619633
tshy: "npm:^3.0.2"
634+
peerDependencies:
635+
"@types/node": ">=18"
620636
languageName: unknown
621637
linkType: soft
622638

@@ -638,6 +654,8 @@ __metadata:
638654
"@inquirer/type": "npm:^3.0.0"
639655
"@repo/tsconfig": "workspace:*"
640656
tshy: "npm:^3.0.2"
657+
peerDependencies:
658+
"@types/node": ">=18"
641659
languageName: unknown
642660
linkType: soft
643661

@@ -652,6 +670,8 @@ __metadata:
652670
"@repo/tsconfig": "workspace:*"
653671
tshy: "npm:^3.0.2"
654672
yoctocolors-cjs: "npm:^2.1.2"
673+
peerDependencies:
674+
"@types/node": ">=18"
655675
languageName: unknown
656676
linkType: soft
657677

@@ -660,6 +680,7 @@ __metadata:
660680
resolution: "@inquirer/root@workspace:."
661681
dependencies:
662682
"@eslint/js": "npm:^9.13.0"
683+
"@repo/hoist-peer-dependencies": "workspace:*"
663684
"@repo/tsconfig": "workspace:*"
664685
"@types/node": "npm:^22.8.0"
665686
"@vitest/coverage-v8": "npm:^2.1.3"
@@ -695,6 +716,8 @@ __metadata:
695716
"@repo/tsconfig": "workspace:*"
696717
tshy: "npm:^3.0.2"
697718
yoctocolors-cjs: "npm:^2.1.2"
719+
peerDependencies:
720+
"@types/node": ">=18"
698721
languageName: unknown
699722
linkType: soft
700723

@@ -711,6 +734,8 @@ __metadata:
711734
ansi-escapes: "npm:^4.3.2"
712735
tshy: "npm:^3.0.2"
713736
yoctocolors-cjs: "npm:^2.1.2"
737+
peerDependencies:
738+
"@types/node": ">=18"
714739
languageName: unknown
715740
linkType: soft
716741

@@ -727,6 +752,8 @@ __metadata:
727752
mute-stream: "npm:^2.0.0"
728753
strip-ansi: "npm:^6.0.1"
729754
tshy: "npm:^3.0.2"
755+
peerDependencies:
756+
"@types/node": ">=18"
730757
languageName: unknown
731758
linkType: soft
732759

@@ -1436,6 +1463,12 @@ __metadata:
14361463
languageName: node
14371464
linkType: hard
14381465

1466+
"@repo/hoist-peer-dependencies@workspace:*, @repo/hoist-peer-dependencies@workspace:internals/hoist-peer-dependencies":
1467+
version: 0.0.0-use.local
1468+
resolution: "@repo/hoist-peer-dependencies@workspace:internals/hoist-peer-dependencies"
1469+
languageName: unknown
1470+
linkType: soft
1471+
14391472
"@repo/tsconfig@workspace:*, @repo/tsconfig@workspace:internals/tsconfig":
14401473
version: 0.0.0-use.local
14411474
resolution: "@repo/tsconfig@workspace:internals/tsconfig"
@@ -4819,6 +4852,8 @@ __metadata:
48194852
run-async: "npm:^3.0.0"
48204853
rxjs: "npm:^7.8.1"
48214854
tshy: "npm:^3.0.2"
4855+
peerDependencies:
4856+
"@types/node": ">=18"
48224857
languageName: unknown
48234858
linkType: soft
48244859

0 commit comments

Comments
 (0)