Skip to content

Commit 7867731

Browse files
authored
Merge pull request #2 from log4js-node/ignore-missing-submodules
Ignore missing submodules
2 parents 5f3cac4 + 35add1d commit 7867731

5 files changed

Lines changed: 30 additions & 13 deletions

File tree

lib/sandboxed_module.js

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,11 @@ SandboxedModule.prototype._createRecursiveRequireProxy = function() {
169169
cache[this.filename] = this.exports;
170170
var globals = this.globals;
171171

172-
var options;
172+
var options = {};
173173
if(!this._options.sourceTransformersSingleOnly && this._options.sourceTransformers){
174-
options = {
175-
sourceTransformers: this._options.sourceTransformers
176-
};
174+
options.sourceTransformers = this._options.sourceTransformers;
177175
}
176+
options.ignoreMissing = this._options.ignoreMissing;
178177

179178
function createInnerSandboxedModule(requestedFilename){
180179
// load nested dependency in sandboxed module
@@ -214,11 +213,17 @@ SandboxedModule.prototype._createRecursiveRequireProxy = function() {
214213
if (request in cache) return cache[request];
215214
return require(request);
216215
}
216+
217217
// cached modules
218-
var requestedFilename = requireLike(this.filename).resolve(request);
219-
if (requestedFilename in cache) return cache[requestedFilename];
220-
var sandboxedModule = createInnerSandboxedModule(requestedFilename)
221-
return sandboxedModule.exports;
218+
try {
219+
var requestedFilename = requireLike(this.filename).resolve(request);
220+
if (requestedFilename in cache) return cache[requestedFilename];
221+
var sandboxedModule = createInnerSandboxedModule(requestedFilename)
222+
return sandboxedModule.exports;
223+
} catch (e) {
224+
if (this._options.ignoreMissing && request in cache) return cache[request];
225+
throw e;
226+
}
222227
}
223228
return RecursiveRequireProxy.bind(this);
224229
}

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
],
1313
"license": "MIT",
1414
"version": "2.1.0",
15-
"repository": "log4js-node/node-sandboxed-module",
15+
"repository": {
16+
"type": "git",
17+
"url": "https://github.com/log4js-node/node-sandboxed-module.git"
18+
},
1619
"main": "./lib/sandboxed_module",
1720
"files": [
1821
"lib/"

test/fixture/loads-missing.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
exports.doesNotExist = require('doesNotExist');
2+
exports.alsoDoesNotExist = require('./alsoDoesNotExist');
3+
exports.subModule = require('./subModule');

test/fixture/subModule.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
exports.requiredFromSubModule = require('requiredFromSubModule');
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
var assert = require('assert');
22
var SandboxedModule = require('../..');
33

4-
var foo = SandboxedModule.require('../fixture/foo', {
5-
"requires": {"doesNotExist": {}},
4+
var foo = SandboxedModule.require('../fixture/loads-missing', {
5+
"requires": {
6+
"doesNotExist": { fake: true },
7+
"./alsoDoesNotExist": { cheese: 'gouda' },
8+
"requiredFromSubModule": { didItWork: 'yes' }
9+
},
610
"ignoreMissing": true
711
});
8-
assert.strictEqual(foo.foo, 'foo');
9-
assert.strictEqual(foo.bar, 'bar');
12+
assert.ok(foo.doesNotExist.fake);
13+
assert.strictEqual(foo.alsoDoesNotExist.cheese, 'gouda');
14+
assert.strictEqual(foo.subModule.requiredFromSubModule.didItWork, 'yes');

0 commit comments

Comments
 (0)