Skip to content

Commit 465d170

Browse files
committedNov 11, 2023
Add some module resolutions in vitest plugin
1 parent af7a7bf commit 465d170

File tree

5 files changed

+27
-15
lines changed

5 files changed

+27
-15
lines changed
 

‎fixtures/plugins/vitest/vitest.config.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { defineConfig } from 'vitest/config';
33
export default defineConfig({
44
test: {
55
environment: 'happy-dom',
6-
setupFiles: ['./setup.js', './src/setupTests.ts'],
6+
setupFiles: ['setup.js', './src/setupTests.ts'],
77
coverage: {
88
reporter: ['html', 'lcov'],
99
provider: 'istanbul',

‎src/plugins/vite/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const findViteDependencies: GenericPluginCallback = async (configFilePath, optio
2020

2121
if (!localConfig) return [];
2222

23-
return findVitestDependencies(localConfig, options);
23+
return findVitestDependencies(configFilePath, localConfig, options);
2424
};
2525

2626
export const findDependencies = timerify(findViteDependencies);

‎src/plugins/vitest/index.ts

+20-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { compact } from '../../util/array.js';
2+
import { dirname, join } from '../../util/path.js';
23
import { timerify } from '../../util/Performance.js';
3-
import { hasDependency, load } from '../../util/plugin.js';
4+
import { hasDependency, load, tryResolve } from '../../util/plugin.js';
45
import { toEntryPattern } from '../../util/protocols.js';
56
import { getEnvPackageName, getExternalReporters } from './helpers.js';
67
import type { ViteConfigOrFn, VitestWorkspaceConfig, ViteConfig, MODE, COMMAND } from './types.js';
@@ -24,7 +25,11 @@ export const CONFIG_FILE_PATTERNS = ['vitest.config.ts', 'vitest.{workspace,proj
2425
/** @public */
2526
export const ENTRY_FILE_PATTERNS = ['**/*.{test,spec}.?(c|m)[jt]s?(x)'];
2627

27-
const findConfigDependencies = (localConfig: ViteConfig, options: GenericPluginCallbackOptions) => {
28+
const findConfigDependencies = (
29+
configFilePath: string,
30+
localConfig: ViteConfig,
31+
options: GenericPluginCallbackOptions
32+
) => {
2833
const { isProduction, config } = options;
2934
const testConfig = localConfig.test;
3035

@@ -35,28 +40,33 @@ const findConfigDependencies = (localConfig: ViteConfig, options: GenericPluginC
3540
const environments = testConfig.environment ? [getEnvPackageName(testConfig.environment)] : [];
3641
const reporters = getExternalReporters(testConfig.reporters);
3742
const coverage = testConfig.coverage ? [`@vitest/coverage-${testConfig.coverage.provider ?? 'v8'}`] : [];
38-
const setupFiles = testConfig.setupFiles ? [testConfig.setupFiles].flat() : [];
39-
const globalSetup = testConfig.globalSetup ? [testConfig.globalSetup].flat() : [];
43+
const toPath = (v: string) => tryResolve(join(dirname(configFilePath), v), configFilePath) ?? v;
44+
const setupFiles = (testConfig.setupFiles ? [testConfig.setupFiles].flat() : []).map(toPath);
45+
const globalSetup = (testConfig.globalSetup ? [testConfig.globalSetup].flat() : []).map(toPath);
4046
return [...entryPatterns, ...environments, ...reporters, ...coverage, ...setupFiles, ...globalSetup];
4147
};
4248

43-
export const findVitestDependencies = async (localConfig: ViteConfigOrFn, options: GenericPluginCallbackOptions) => {
49+
export const findVitestDependencies = async (
50+
configFilePath: string,
51+
localConfig: ViteConfigOrFn,
52+
options: GenericPluginCallbackOptions
53+
) => {
4454
if (!localConfig) return [];
4555

4656
if (typeof localConfig === 'function') {
4757
const dependencies = new Set<string>();
4858
for (const command of ['dev', 'serve', 'build'] as COMMAND[]) {
4959
for (const mode of ['development', 'production'] as MODE[]) {
5060
const config = await localConfig({ command, mode, ssrBuild: undefined });
51-
findConfigDependencies(config, options).forEach(dependency => dependencies.add(dependency));
61+
findConfigDependencies(configFilePath, config, options).forEach(dependency => dependencies.add(dependency));
5262
}
5363
}
5464
return Array.from(dependencies);
5565
}
5666

5767
if (!localConfig.test) return [];
5868

59-
return findConfigDependencies(localConfig, options);
69+
return findConfigDependencies(configFilePath, localConfig, options);
6070
};
6171

6272
const findVitestWorkspaceDependencies: GenericPluginCallback = async (configFilePath, options) => {
@@ -65,7 +75,9 @@ const findVitestWorkspaceDependencies: GenericPluginCallback = async (configFile
6575
const dependencies = new Set<string>();
6676
for (const config of [localConfig].flat()) {
6777
if (config && typeof config !== 'string') {
68-
(await findVitestDependencies(config, options)).forEach(dependency => dependencies.add(dependency));
78+
(await findVitestDependencies(configFilePath, config, options)).forEach(dependency =>
79+
dependencies.add(dependency)
80+
);
6981
}
7082
}
7183
return compact(dependencies);

‎src/util/plugin.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export { _load as load, _loadFile as loadFile } from './loader.js';
2+
export { _tryResolve as tryResolve } from './require.js';
23
import { arrayify } from './array.js';
34
import type { RawPluginConfiguration } from '../types/config.js';
45

‎test/plugins/vitest.test.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ test('Find dependencies in vitest configuration (vitest)', async () => {
1717
'entry:**/*.{test,spec}.?(c|m)[jt]s?(x)',
1818
'happy-dom',
1919
'@vitest/coverage-istanbul',
20-
'./setup.js',
21-
'./src/setupTests.ts',
20+
'setup.js',
21+
join(cwd, 'src/setupTests.ts'),
2222
]);
2323
});
2424

@@ -49,13 +49,12 @@ test('Find dependencies in vitest configuration', async () => {
4949
assert(issues.unlisted['vitest.workspace.ts']['@edge-runtime/vm']);
5050
assert(issues.unlisted['vitest.config.ts']['happy-dom']);
5151
assert(issues.unlisted['vitest.config.ts']['@vitest/coverage-istanbul']);
52-
assert(issues.unresolved['vitest.config.ts']['./setup.js']);
52+
assert(issues.unlisted['vitest.config.ts']['setup.js']);
5353

5454
assert.deepEqual(counters, {
5555
...baseCounters,
5656
files: 2,
57-
unlisted: 3,
58-
unresolved: 1,
57+
unlisted: 4,
5958
processed: 6,
6059
total: 6,
6160
});

0 commit comments

Comments
 (0)
Please sign in to comment.