diff --git a/src/utils/example-imports.ts b/src/utils/example-imports.ts index b0af4edce..d007c9d26 100644 --- a/src/utils/example-imports.ts +++ b/src/utils/example-imports.ts @@ -128,6 +128,7 @@ export async function resolveExampleWorkspaceImports( for (const group of resolvedGroups) { for (const peerPackage of group.peerPackages) { if ( + !peerPackage.startsWith('@types/') && packageVersions.has(peerPackage) && !resolvedPackageNames.has(peerPackage) && !hasWorkspacePackageImport(workspaceImports, peerPackage) diff --git a/tests/example-imports.test.ts b/tests/example-imports.test.ts index a02671cf8..c84cb65a5 100644 --- a/tests/example-imports.test.ts +++ b/tests/example-imports.test.ts @@ -299,7 +299,7 @@ test('externalizes complete explicit peers that source code does not import', as }) }) -test('resolves declared peers that source code does not import', async () => { +test('resolves declared runtime peers but ignores type-only peers', async () => { const workspace = createExampleWorkspace({ entry: '/index.ts', files: { @@ -309,16 +309,20 @@ test('resolves declared peers that source code does not import', async () => { '@example/ui': '3.2.1', react: '18.3.1', }, + devDependencies: { '@types/react': '18.3.1' }, }), }, }) + const requests: Array = [] const metadataFetch = createMetadataFetch( - [], + requests, (url) => ({ version: url.includes('@example/ui') ? '3.2.1' : '18.3.1', }), (url): Record => - url.includes('@example/ui') ? { react: '^18.0.0' } : {}, + url.includes('@example/ui') + ? { '@types/react': '>=18.0.0', react: '^18.0.0' } + : {}, ) const imports = await resolveExampleWorkspaceImports( @@ -333,6 +337,10 @@ test('resolves declared peers that source code does not import', async () => { react: 'https://esm.sh/react@18.3.1', 'react/': 'https://esm.sh/react@18.3.1/', }) + assert.equal( + requests.some((url) => url.includes('@types/react')), + false, + ) }) test('stops before resolving packages when already aborted', async () => {