Skip to content

Commit cfa3fc6

Browse files
committed
Fix resolver issue
1 parent 2f446e5 commit cfa3fc6

File tree

2 files changed

+28
-24
lines changed

2 files changed

+28
-24
lines changed

lib/resolver.js

+3-14
Original file line numberDiff line numberDiff line change
@@ -206,15 +206,8 @@ class DefaultResolver extends Resolver {
206206
}
207207

208208
loadJS(vm, mod, filename) {
209-
filename = this.pathResolve(filename);
210-
this.checkAccess(mod, filename);
211-
if (this.pathContext(filename, 'js') !== 'host') {
212-
const script = this.readScript(filename);
213-
vm.run(script, {filename, strict: this.isStrict(filename), module: mod, wrapper: 'none', dirname: mod.path});
214-
} else {
215-
const m = this.hostRequire(filename);
216-
mod.exports = vm.readonly(m);
217-
}
209+
const script = this.readScript(filename);
210+
vm.run(script, {filename, strict: this.isStrict(filename), module: mod, wrapper: 'none', dirname: mod.path});
218211
}
219212

220213
loadJSON(vm, mod, filename) {
@@ -223,11 +216,7 @@ class DefaultResolver extends Resolver {
223216
}
224217

225218
loadNode(vm, mod, filename) {
226-
filename = this.pathResolve(filename);
227-
this.checkAccess(mod, filename);
228-
if (this.pathContext(filename, 'node') !== 'host') throw new VMError('Native modules can be required only with context set to \'host\'.');
229-
const m = this.hostRequire(filename);
230-
mod.exports = vm.readonly(m);
219+
throw new VMError('Native modules can be required only with context set to \'host\'.');
231220
}
232221

233222
customResolve(x, path, extList) {

test/nodevm.js

+25-10
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ const {NodeVM, VMScript, makeResolverFromLegacyOptions} = require('..');
1212

1313
global.isHost = true;
1414

15+
function isVMProxy(obj) {
16+
const key = {};
17+
const proto = Object.getPrototypeOf(obj);
18+
if (!proto) return undefined;
19+
proto.isVMProxy = key;
20+
const proxy = obj.isVMProxy !== key;
21+
delete proto.isVMProxy;
22+
return proxy;
23+
}
24+
1525
describe('NodeVM', () => {
1626
let vm;
1727

@@ -228,7 +238,7 @@ describe('modules', () => {
228238
assert.ok(vm.run("require('module1')", __filename));
229239
});
230240

231-
it('allows choosing a context by path', () => {
241+
it('allows choosing a context by path legacy', () => {
232242
const vm = new NodeVM({
233243
require: {
234244
external: {
@@ -241,15 +251,20 @@ describe('modules', () => {
241251
}
242252
}
243253
});
244-
function isVMProxy(obj) {
245-
const key = {};
246-
const proto = Object.getPrototypeOf(obj);
247-
if (!proto) return undefined;
248-
proto.isVMProxy = key;
249-
const proxy = obj.isVMProxy !== key;
250-
delete proto.isVMProxy;
251-
return proxy;
252-
}
254+
assert.equal(isVMProxy(vm.run("module.exports = require('mocha')", __filename)), false, 'Mocha is a proxy');
255+
assert.equal(isVMProxy(vm.run("module.exports = require('module1')", __filename)), true, 'Module1 is not a proxy');
256+
});
257+
258+
it('allows choosing a context by path', () => {
259+
const vm = new NodeVM({
260+
require: {
261+
external: true,
262+
context(module) {
263+
if (module.includes('mocha')) return 'host';
264+
return 'sandbox';
265+
}
266+
}
267+
});
253268
assert.equal(isVMProxy(vm.run("module.exports = require('mocha')", __filename)), false, 'Mocha is a proxy');
254269
assert.equal(isVMProxy(vm.run("module.exports = require('module1')", __filename)), true, 'Module1 is not a proxy');
255270
});

0 commit comments

Comments
 (0)