Skip to content

Commit 6f61c8c

Browse files
committed
fix(virtual): support default imports with Node16 and NodeNext
1 parent 639f456 commit 6f61c8c

6 files changed

Lines changed: 84 additions & 3 deletions

File tree

‎packages/virtual/package.json‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,14 @@
1616
"main": "./dist/cjs/index.js",
1717
"module": "./dist/es/index.js",
1818
"exports": {
19-
"types": "./types/index.d.ts",
20-
"import": "./dist/es/index.js",
19+
"import": {
20+
"types": "./types/index.d.mts",
21+
"default": "./dist/es/index.js"
22+
},
23+
"require": {
24+
"types": "./types/index.d.ts",
25+
"default": "./dist/cjs/index.js"
26+
},
2127
"default": "./dist/cjs/index.js"
2228
},
2329
"engines": {
@@ -35,7 +41,7 @@
3541
"pretest": "pnpm build",
3642
"release": "pnpm --workspace-root package:release $(pwd)",
3743
"test": "vitest --config ../../.config/vitest.config.mts run",
38-
"test:ts": "tsc --noEmit"
44+
"test:ts": "tsc --noEmit && vitest --config ../../.config/vitest.config.mts run test/types.test.js"
3945
},
4046
"files": [
4147
"dist",
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import type { Plugin } from 'rollup';
2+
import virtual, { type RollupVirtualOptions } from '@rollup/plugin-virtual';
3+
4+
const modules: RollupVirtualOptions = { entry: 'export default 42' };
5+
const plugin: Plugin = virtual(modules);
6+
7+
export default plugin;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import type { Plugin } from 'rollup';
2+
import virtual, { type RollupVirtualOptions } from '@rollup/plugin-virtual';
3+
4+
const modules: RollupVirtualOptions = { entry: 'export default 42' };
5+
const plugin: Plugin = virtual(modules);
6+
7+
virtual({});
8+
9+
// @ts-expect-error Virtual module sources must be strings.
10+
virtual({ entry: 42 });
11+
12+
// @ts-expect-error A module map is required.
13+
virtual();
14+
15+
export default plugin;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import type { Plugin } from 'rollup';
2+
3+
import virtual, { type RollupVirtualOptions } from '../../..';
4+
5+
const modules: RollupVirtualOptions = { entry: 'export default 42' };
6+
const plugin: Plugin = virtual(modules);
7+
8+
export default plugin;
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
const path = require('path');
2+
3+
const ts = require('typescript');
4+
5+
const modes = [
6+
['Node16', ts.ModuleKind.Node16, ts.ModuleResolutionKind.Node16],
7+
['NodeNext', ts.ModuleKind.NodeNext, ts.ModuleResolutionKind.NodeNext]
8+
];
9+
10+
function diagnostics(fixture, module, moduleResolution) {
11+
const program = ts.createProgram([path.join(__dirname, 'fixtures', 'types', fixture)], {
12+
esModuleInterop: true,
13+
module,
14+
moduleResolution,
15+
noEmit: true,
16+
skipLibCheck: true,
17+
strict: true,
18+
target: ts.ScriptTarget.ES2019,
19+
types: []
20+
});
21+
22+
return ts
23+
.getPreEmitDiagnostics(program)
24+
.map((diagnostic) => ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n'));
25+
}
26+
27+
for (const [name, module, moduleResolution] of modes) {
28+
test(`supports default imports in ${name} ES modules`, () => {
29+
expect(diagnostics('esm.mts', module, moduleResolution)).toEqual([]);
30+
});
31+
32+
test(`supports default imports in ${name} CommonJS modules`, () => {
33+
expect(diagnostics('commonjs.cts', module, moduleResolution)).toEqual([]);
34+
});
35+
}
36+
37+
test('supports default imports with legacy Node resolution', () => {
38+
expect(diagnostics('legacy.ts', ts.ModuleKind.CommonJS, ts.ModuleResolutionKind.NodeJs)).toEqual(
39+
[]
40+
);
41+
});

‎packages/virtual/types/index.d.mts‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export type { RollupVirtualOptions } from './index.js';
2+
3+
declare const virtual: typeof import('./index.js').default;
4+
export default virtual;

0 commit comments

Comments
 (0)