Skip to content

Commit 5a86675

Browse files
committed
Support conditional export resolution with custom resolver
1 parent e7828cf commit 5a86675

5 files changed

Lines changed: 31 additions & 2 deletions

File tree

lib/resolver-compat.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,13 @@ function resolverFromOptions(vm, options, override, compiler) {
322322
}
323323
const resolved = customResolver(x, path);
324324
if (!resolved) return undefined;
325-
if (externals) externals.push(new RegExp('^' + escapeRegExp(resolved)));
326-
return resolver.loadAsFileOrDirecotry(resolved, extList);
325+
if (typeof resolved === 'string') {
326+
if (externals) externals.push(new RegExp('^' + escapeRegExp(resolved)));
327+
return resolver.loadAsFileOrDirecotry(resolved, extList);
328+
}
329+
const {module=x, path: resolvedPath} = resolved;
330+
if (externals) externals.push(new RegExp('^' + escapeRegExp(resolvedPath)));
331+
return resolver.loadNodeModules(module, [resolvedPath], extList);
327332
};
328333
}
329334

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = {additional_cjs_module: true};
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default {additional_es_module: true};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"main": "index.js",
3+
"exports": {
4+
".": {
5+
"default": {
6+
"require": "./index.cjs",
7+
"default": "./index.js"
8+
}
9+
}
10+
}
11+
}

test/nodevm.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,17 @@ describe('modules', () => {
239239
assert.ok(vm.run("require('my-module')", __filename));
240240
});
241241

242+
it('can resolve conditional exports with a custom resolver', () => {
243+
const vm = new NodeVM({
244+
require: {
245+
external: ['my-es-module'],
246+
resolve: () => ({ path: path.resolve(__dirname, 'additional-modules') })
247+
}
248+
});
249+
250+
assert.ok(vm.run("require('my-es-module')", __filename));
251+
})
252+
242253
it('allows for multiple root folders', () => {
243254
const vm = new NodeVM({
244255
require: {

0 commit comments

Comments
 (0)