Skip to content

Commit 632eef4

Browse files
authoredMay 24, 2023
fix(vite-node): circular import stuck (#3418)
1 parent e6792a9 commit 632eef4

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed
 

‎examples/mocks/src/main.js

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import { funcA } from './A'
2+
import { funcB } from './B'
23

34
export function main() {
45
return funcA()
56
}
7+
8+
export function mainB() {
9+
return funcB()
10+
}

‎examples/mocks/test/circular.spec.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,27 @@
11
import { expect, test, vi } from 'vitest'
2-
import { main } from '../src/main.js'
2+
import { main, mainB } from '../src/main.js'
33
import x from '../src/export-default-circle-index'
44

55
vi.mock('../src/A', async () => ({
66
...(await vi.importActual<any>('../src/A')),
77
funcA: () => 'mockedA',
88
}))
99

10+
vi.mock('../src/B', async () => ({
11+
...(await vi.importActual<any>('../src/B')),
12+
funcB: () => 'mockedB',
13+
}))
14+
1015
vi.mock('../src/export-default-circle-b')
1116

1217
test('can import actual inside mock factory', () => {
1318
expect(main()).toBe('mockedA')
1419
})
1520

21+
test('can import in top level and inside mock factory', () => {
22+
expect(mainB()).toBe('mockedB')
23+
})
24+
1625
test('can mock a circular dependency', () => {
1726
expect(x()).toBe(undefined)
1827
})

‎packages/vite-node/src/client.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ export class ViteNodeRunner {
193193
const getStack = () => `stack:\n${[...callstack, fsPath].reverse().map(p => ` - ${p}`).join('\n')}`
194194

195195
// check circular dependency
196-
if (callstack.includes(fsPath) || callstack.some(c => this.moduleCache.get(c).importers?.has(fsPath))) {
196+
if (callstack.includes(fsPath) || callstack.some(c => this.moduleCache.get(c).importers?.has(fsPath)) || mod.importers.has(importee)) {
197197
if (mod.exports)
198198
return mod.exports
199199
}

0 commit comments

Comments
 (0)
Please sign in to comment.