Skip to content

Commit

Permalink
general: app.register throws with original module error
Browse files Browse the repository at this point in the history
  • Loading branch information
ilfroloff committed Aug 15, 2019
1 parent 9fc5bb8 commit 26164b3
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 32 deletions.
16 changes: 9 additions & 7 deletions core/Application.js
Expand Up @@ -9,7 +9,7 @@ var Diread = require('diread');
var toArray = require('./helper/toArray');
var deepFreeze = require('./helper/deepFreeze');
var pathWithoutExtension = require('./helper/pathWithoutExtension');
var tryCatch = require('./helper/tryCatch');
var requireWithSkippingOfMissedModuleError = require('./helper/requireWithSkippingOfMissedModuleError');

var debug = require('debug')('ifnode:application'); // eslint-disable-line
var Log = require('./Log');
Expand Down Expand Up @@ -465,19 +465,21 @@ Application.prototype._initialize_controllers = function _initialize_controllers
Application.prototype._require_module = function(module_name) {
var Module;

Module = tryCatch(function() {
return require(module_name);
});
Module = requireWithSkippingOfMissedModuleError(module_name);

if(Module) {
return Module;
}

var self = this;

Module = tryCatch(function() {
return self.extension(module_name);
});
try {
Module = this.extension(module_name);
} catch (error) {
if (!/Cannot\sfind\sextension/.test(error.message)) {
throw error;
}
}

if(Module) {
return Module;
Expand Down
14 changes: 6 additions & 8 deletions core/application/Extension.js
@@ -1,6 +1,7 @@
'use strict';

var Path = require('path');
var requireWithSkippingOfMissedModuleError = require('./../helper/requireWithSkippingOfMissedModuleError');
var Log = require('./../Log');

/**
Expand All @@ -20,16 +21,13 @@ function Extension(start_load_point) {
*/
Extension.prototype.require = function(id) {
var extension_path = Path.resolve(this._start_load_point, id);
var extension = requireWithSkippingOfMissedModuleError(extension_path);

try {
return require(extension_path);
} catch(error) {
if(error.message.indexOf(extension_path) === -1) {
throw error;
} else {
Log.error('extensions', 'Cannot find extension by [' + id + '].');
}
if(!extension) {
Log.error('extensions', 'Cannot find extension by [' + id + '].');
}

return extension;
};

module.exports = Extension;
22 changes: 22 additions & 0 deletions core/helper/requireWithSkippingOfMissedModuleError.js
@@ -0,0 +1,22 @@
/**
*
* @param {function} path
* @returns {*}
* @throws {Error}
*/
function requireWithSkippingOfMissedModuleError(path) {
try {
return require(path);
} catch (error) {
if (
error instanceof Error &&
error.code === 'MODULE_NOT_FOUND'
) {
return undefined;
} else {
throw error;
}
}
}

module.exports = requireWithSkippingOfMissedModuleError;
15 changes: 0 additions & 15 deletions core/helper/tryCatch.js

This file was deleted.

@@ -0,0 +1 @@
var 123some_syntax_error;
17 changes: 15 additions & 2 deletions test/01. application.js
@@ -1,5 +1,6 @@
'use strict';

var assert = require('assert');
var Path = require('path');
var Should = require('should');
var IFNode = require('../');
Expand Down Expand Up @@ -95,9 +96,21 @@ describe('Application', function() {
it('shouldn\'t load non-exists plugin', function() {
var app = IFNode();

(function() {
try {
app.register('non-exists-plugin');
}).should.throw();
} catch (error) {
assert.ok(/Cannot\sfind\snode\smodule\sor\sextension/.test(error.message));
}
});

it('should throw original error', function() {
var app = require('../examples/extensions/app');

try {
app.register('with-syntax-error');
} catch (error) {
assert.ok(error instanceof SyntaxError);
}
});

it('load by extension name', function(done) {
Expand Down

0 comments on commit 26164b3

Please sign in to comment.