Skip to content

Commit 86d1385

Browse files
committed
fix(cli): avoid resolving protocol package.json in preflight
1 parent 6ddd730 commit 86d1385

2 files changed

Lines changed: 53 additions & 11 deletions

File tree

apps/cli/bin/happier.mjs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,24 @@ import { createRequire } from 'module';
77

88
function preflightRequiredDependencies(projectRoot) {
99
const cliRequire = createRequire(import.meta.url);
10-
let protocolPackageJsonPath;
10+
let protocolEntryPath;
1111
try {
12-
protocolPackageJsonPath = cliRequire.resolve('@happier-dev/protocol/package.json');
12+
protocolEntryPath = cliRequire.resolve('@happier-dev/protocol');
1313
} catch (error) {
14-
if (error && typeof error === 'object' && 'code' in error && error.code === 'MODULE_NOT_FOUND') {
14+
if (
15+
error &&
16+
typeof error === 'object' &&
17+
'code' in error &&
18+
(error.code === 'MODULE_NOT_FOUND' || error.code === 'ERR_PACKAGE_PATH_NOT_EXPORTED')
19+
) {
1520
console.error('Missing bundled package: @happier-dev/protocol');
1621
console.error('Reinstall @happier-dev/cli to repair your installation.');
1722
process.exit(1);
1823
}
1924
throw error;
2025
}
2126

22-
const protocolRequire = createRequire(protocolPackageJsonPath);
27+
const protocolRequire = createRequire(protocolEntryPath);
2328

2429
// `tweetnacl` is a direct runtime dependency of the CLI.
2530
// `base64-js` and `@noble/hashes/*` are runtime dependencies of `@happier-dev/protocol` and may be

apps/cli/scripts/__tests__/happierDependencyPreflight.test.ts

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ describe('happier bin preflight', () => {
1414

1515
mkdirSync(resolve(tempRoot, 'bin'), { recursive: true });
1616
mkdirSync(resolve(tempRoot, 'dist'), { recursive: true });
17+
mkdirSync(resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol', 'dist'), { recursive: true });
1718

1819
// Global-install / packed layout:
1920
// - protocol is present as a bundled workspace package
@@ -32,7 +33,19 @@ describe('happier bin preflight', () => {
3233

3334
writeFileSync(
3435
resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol', 'package.json'),
35-
JSON.stringify({ name: '@happier-dev/protocol', version: '0.0.0' }),
36+
JSON.stringify({
37+
name: '@happier-dev/protocol',
38+
version: '0.0.0',
39+
type: 'module',
40+
exports: {
41+
'.': './dist/index.js',
42+
},
43+
}),
44+
'utf8',
45+
);
46+
writeFileSync(
47+
resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol', 'dist', 'index.js'),
48+
'export {};\n',
3649
'utf8',
3750
);
3851
writeFileSync(
@@ -90,15 +103,23 @@ describe('happier bin preflight', () => {
90103

91104
mkdirSync(resolve(tempRoot, 'bin'), { recursive: true });
92105
mkdirSync(resolve(tempRoot, 'dist'), { recursive: true });
93-
mkdirSync(resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol'), { recursive: true });
106+
mkdirSync(resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol', 'dist'), { recursive: true });
94107

95108
cpSync(resolve(repoRoot, 'apps', 'cli', 'bin', 'happier.mjs'), resolve(tempRoot, 'bin', 'happier.mjs'));
96109

97110
writeFileSync(
98111
resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol', 'package.json'),
99-
JSON.stringify({ name: '@happier-dev/protocol', version: '0.0.0' }),
112+
JSON.stringify({
113+
name: '@happier-dev/protocol',
114+
version: '0.0.0',
115+
type: 'module',
116+
exports: {
117+
'.': './dist/index.js',
118+
},
119+
}),
100120
'utf8',
101121
);
122+
writeFileSync(resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol', 'dist', 'index.js'), 'export {};\n', 'utf8');
102123
writeFileSync(
103124
resolve(tempRoot, 'dist', 'index.mjs'),
104125
"console.log('ok');\n",
@@ -124,16 +145,24 @@ describe('happier bin preflight', () => {
124145

125146
mkdirSync(resolve(tempRoot, 'bin'), { recursive: true });
126147
mkdirSync(resolve(tempRoot, 'dist'), { recursive: true });
127-
mkdirSync(resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol'), { recursive: true });
148+
mkdirSync(resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol', 'dist'), { recursive: true });
128149
mkdirSync(resolve(tempRoot, 'node_modules', 'tweetnacl'), { recursive: true });
129150

130151
cpSync(resolve(repoRoot, 'apps', 'cli', 'bin', 'happier.mjs'), resolve(tempRoot, 'bin', 'happier.mjs'));
131152

132153
writeFileSync(
133154
resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol', 'package.json'),
134-
JSON.stringify({ name: '@happier-dev/protocol', version: '0.0.0' }),
155+
JSON.stringify({
156+
name: '@happier-dev/protocol',
157+
version: '0.0.0',
158+
type: 'module',
159+
exports: {
160+
'.': './dist/index.js',
161+
},
162+
}),
135163
'utf8',
136164
);
165+
writeFileSync(resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol', 'dist', 'index.js'), 'export {};\n', 'utf8');
137166
writeFileSync(
138167
resolve(tempRoot, 'node_modules', 'tweetnacl', 'package.json'),
139168
JSON.stringify({ name: 'tweetnacl', version: '0.0.0', main: 'index.js' }),
@@ -162,17 +191,25 @@ describe('happier bin preflight', () => {
162191

163192
mkdirSync(resolve(tempRoot, 'bin'), { recursive: true });
164193
mkdirSync(resolve(tempRoot, 'dist'), { recursive: true });
165-
mkdirSync(resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol'), { recursive: true });
194+
mkdirSync(resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol', 'dist'), { recursive: true });
166195
mkdirSync(resolve(tempRoot, 'node_modules', 'tweetnacl'), { recursive: true });
167196
mkdirSync(resolve(tempRoot, 'node_modules', 'base64-js'), { recursive: true });
168197

169198
cpSync(resolve(repoRoot, 'apps', 'cli', 'bin', 'happier.mjs'), resolve(tempRoot, 'bin', 'happier.mjs'));
170199

171200
writeFileSync(
172201
resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol', 'package.json'),
173-
JSON.stringify({ name: '@happier-dev/protocol', version: '0.0.0' }),
202+
JSON.stringify({
203+
name: '@happier-dev/protocol',
204+
version: '0.0.0',
205+
type: 'module',
206+
exports: {
207+
'.': './dist/index.js',
208+
},
209+
}),
174210
'utf8',
175211
);
212+
writeFileSync(resolve(tempRoot, 'node_modules', '@happier-dev', 'protocol', 'dist', 'index.js'), 'export {};\n', 'utf8');
176213
writeFileSync(
177214
resolve(tempRoot, 'node_modules', 'tweetnacl', 'package.json'),
178215
JSON.stringify({ name: 'tweetnacl', version: '0.0.0', main: 'index.js' }),

0 commit comments

Comments
 (0)