From cbb8456e0273505d1ba237060aaebb7b79c26112 Mon Sep 17 00:00:00 2001 From: Blaine Bublitz Date: Thu, 25 Apr 2019 16:27:25 +0200 Subject: [PATCH] feat!: Rename events to be more specific --- README.md | 46 ++++++++++++++++--- index.js | 6 +-- lib/register_loader.js | 4 +- test/fixtures/respawn_and_require.js | 4 +- test/index.js | 45 +++++++++---------- test/lib/register_loader.js | 66 ++++++++++++++-------------- 6 files changed, 100 insertions(+), 71 deletions(-) diff --git a/README.md b/README.md index 81d94f3..ffdf7d2 100644 --- a/README.md +++ b/README.md @@ -446,24 +446,24 @@ A function called after your application is executed. When invoked, `this` will ### events -#### beforeRequire(name) +#### `on('preload:before', function(name) {})` Emitted before a module is pre-load. (But for only a module which is specified by `opts.require`.) ```js var Hacker = new Liftoff({name:'hacker', require:'coffee-script'}); -Hacker.on('beforeRequire', function (name) { +Hacker.on('preload:before', function (name) { console.log('Requiring external module: '+name+'...'); }); ``` -#### require(name, module) +#### `on('preload:success', function(name, module) {})` Emitted when a module has been pre-loaded. ```js var Hacker = new Liftoff({name:'hacker'}); -Hacker.on('require', function (name, module) { +Hacker.on('preload:success', function (name, module) { console.log('Required external module: '+name+'...'); // automatically register coffee-script extensions if (name === 'coffee-script') { @@ -472,18 +472,50 @@ Hacker.on('require', function (name, module) { }); ``` -#### requireFail(name, err) +#### `on('preload:failure', function(name, err) {})` Emitted when a requested module cannot be preloaded. ```js var Hacker = new Liftoff({name:'hacker'}); -Hacker.on('requireFail', function (name, err) { +Hacker.on('preload:failure', function (name, err) { console.log('Unable to load:', name, err); }); ``` -#### respawn(flags, child) +#### `on('loader:success, function(name, module) {})` + +Emitted when a loader that matches an extension has been loaded. + +```js +var Hacker = new Liftoff({ + name: 'hacker', + extensions: { + '.ts': 'ts-node/register' + } +}); +Hacker.on('loader:success', function (name, module) { + console.log('Required external module: '+name+'...'); +}); +``` + +#### `on('loader:failure', function(name, err) {})` + +Emitted when no loader for an extension can be loaded. Emits an error for each failed loader. + +```js +var Hacker = new Liftoff({ + name: 'hacker', + extensions: { + '.ts': 'ts-node/register' + } +}); +Hacker.on('loader:failure', function (name, err) { + console.log('Unable to load:', name, err); +}); +``` + +#### `on('respawn', function(flags, child) {})` Emitted when Liftoff re-spawns your process (when a [`v8flags`](#optsv8flags) is detected). diff --git a/index.js b/index.js index caf3697..559634f 100644 --- a/index.js +++ b/index.js @@ -26,12 +26,12 @@ util.inherits(Liftoff, EE); Liftoff.prototype.requireLocal = function(module, basedir) { try { - this.emit('beforeRequire', module); + this.emit('preload:before', module); var result = require(resolve.sync(module, { basedir: basedir })); - this.emit('require', module, result); + this.emit('preload:success', module, result); return result; } catch (e) { - this.emit('requireFail', module, e); + this.emit('preload:failure', module, e); } }; diff --git a/lib/register_loader.js b/lib/register_loader.js index a7dfb6e..683f4e0 100644 --- a/lib/register_loader.js +++ b/lib/register_loader.js @@ -10,7 +10,7 @@ module.exports = function(eventEmitter, extensions, configPath, cwd) { var autoloads = rechoir.prepare(extensions, configPath, cwd, true); if (autoloads instanceof Error) { // Only errors autoloads.failures.forEach(function(failed) { - eventEmitter.emit('requireFail', failed.moduleName, failed.error); + eventEmitter.emit('loader:failure', failed.moduleName, failed.error); }); return; } @@ -20,5 +20,5 @@ module.exports = function(eventEmitter, extensions, configPath, cwd) { } var succeeded = autoloads[autoloads.length - 1]; - eventEmitter.emit('require', succeeded.moduleName, succeeded.module); + eventEmitter.emit('loader:success', succeeded.moduleName, succeeded.module); }; diff --git a/test/fixtures/respawn_and_require.js b/test/fixtures/respawn_and_require.js index 60c6fef..bc9ef19 100644 --- a/test/fixtures/respawn_and_require.js +++ b/test/fixtures/respawn_and_require.js @@ -9,8 +9,8 @@ Test.on('respawn', function(flags, proc) { console.log('saw respawn', flags); }); -Test.on('require', function(name) { - console.log('require', name); +Test.on('preload:success', function(name) { + console.log('preload:success', name); }); Test.prepare({ diff --git a/test/index.js b/test/index.js index ea33d88..38f4e66 100644 --- a/test/index.js +++ b/test/index.js @@ -274,18 +274,18 @@ describe('Liftoff', function() { it('should attempt pre-loading local modules if they are requested', function(done) { var app = new Liftoff({ name: 'test' }); var logs = []; - app.on('require', function(moduleName, module) { + app.on('preload:success', function(moduleName, module) { expect(moduleName).to.equal('coffeescript/register'); expect(module).to.equal(require('coffeescript/register')); - logs.push('require'); + logs.push('preload:success'); }); - app.on('requireFail', function(moduleName, err) { + app.on('preload:failure', function(moduleName, err) { done(err); }); app.prepare({ require: ['coffeescript/register'] }, function(env) { app.execute(env, function(env) { expect(env.require).to.deep.equal(['coffeescript/register']); - expect(logs).to.deep.equal(['require']); + expect(logs).to.deep.equal(['preload:success']); done(); }); }); @@ -294,18 +294,18 @@ describe('Liftoff', function() { it('should attempt pre-loading a local module if it is requested', function(done) { var app = new Liftoff({ name: 'test' }); var logs = []; - app.on('require', function(moduleName, module) { + app.on('preload:success', function(moduleName, module) { expect(moduleName).to.equal('coffeescript/register'); expect(module).to.equal(require('coffeescript/register')); - logs.push('require'); + logs.push('preload:success'); }); - app.on('requireFail', function(moduleName, err) { + app.on('preload:failure', function(moduleName, err) { done(err); }); app.prepare({ require: 'coffeescript/register' }, function(env) { app.execute(env, function(env) { expect(env.require).to.deep.equal(['coffeescript/register']); - expect(logs).to.deep.equal(['require']); + expect(logs).to.deep.equal(['preload:success']); done(); }); }); @@ -314,18 +314,15 @@ describe('Liftoff', function() { it('should attempt pre-loading local modules but fail', function(done) { var app = new Liftoff({ name: 'test' }); var logs = []; - app.on('require', function(/* moduleName, module */) { - done(); - }); - app.on('requireFail', function(moduleName, err) { + app.on('preload:failure', function(moduleName, err) { expect(moduleName).to.equal('badmodule'); expect(err).to.not.equal(null); - logs.push('requireFail'); + logs.push('preload:failure'); }); app.prepare({ require: 'badmodule' }, function(env) { app.execute(env, function(env) { expect(env.require).to.deep.equal(['badmodule']); - expect(logs).to.deep.equal(['requireFail']); + expect(logs).to.deep.equal(['preload:failure']); done(); }); }); @@ -340,21 +337,21 @@ describe('Liftoff', function() { expect(stderr).to.equal(''); expect(stdout).to.equal( 'saw respawn [ \'--lazy\' ]\n' + - 'require coffeescript/register\n' + + 'preload:success coffeescript/register\n' + 'execute\n' + ''); done(); } }); - it('should emit `beforeRequire` and `require` with the name of the module and the required module', function(done) { + it('should emit `preload:before` and `preload:success` with the name of the module and the required module', function(done) { var requireTest = new Liftoff({ name: 'require' }); var isEmittedBeforeRequired = false; - requireTest.on('beforeRequire', function(name) { + requireTest.on('preload:before', function(name) { expect(name).to.equal('mocha'); isEmittedBeforeRequired = true; }); - requireTest.on('require', function(name, module) { + requireTest.on('preload:success', function(name, module) { expect(name).to.equal('mocha'); expect(module).to.equal(require('mocha')); expect(isEmittedBeforeRequired).to.equal(true); @@ -363,14 +360,14 @@ describe('Liftoff', function() { requireTest.requireLocal('mocha', __dirname); }); - it('should emit `beforeRequire` and `requireFail` with an error if a module can\'t be found.', function(done) { - var requireFailTest = new Liftoff({ name: 'requireFail' }); + it('should emit `preload:before` and `preload:failure` with an error if a module can\'t be found.', function(done) { + var requireFailTest = new Liftoff({ name: 'preload:failure' }); var isEmittedBeforeRequired = false; - requireFailTest.on('beforeRequire', function(name) { + requireFailTest.on('preload:before', function(name) { expect(name).to.equal('badmodule'); isEmittedBeforeRequired = true; }); - requireFailTest.on('requireFail', function(name) { + requireFailTest.on('preload:failure', function(name) { expect(name).to.equal('badmodule'); expect(isEmittedBeforeRequired).to.equal(true); done(); @@ -550,10 +547,10 @@ describe('Liftoff', function() { }, }, }); - app.on('requireFail', function(moduleName, error) { + app.on('loader:failure', function(moduleName, error) { logFailure.push({ moduleName: moduleName, error: error }); }); - app.on('require', function(moduleName, module) { + app.on('loader:success', function(moduleName, module) { logRequire.push({ moduleName: moduleName, module: module }); }); app.prepare({}, function(env) { diff --git a/test/lib/register_loader.js b/test/lib/register_loader.js index db405e3..6937ff2 100644 --- a/test/lib/register_loader.js +++ b/test/lib/register_loader.js @@ -24,34 +24,34 @@ describe('registerLoader', function() { var extensions = { '.cfg': loaderPath }; var app = new App(); - app.on('require', function(moduleName /* , module */) { + app.on('loader:success', function(moduleName /* , module */) { expect(moduleName).to.be.equal(loaderPath); expect(require(configPath)).to.equal('Load app.cfg by require-cfg'); done(); }); - app.on('requireFail', handlerNotEmit); + app.on('loader:failure', handlerNotEmit); registerLoader(app, extensions, configPath); }); - it('Should emit only a "require" event when registering loader failed and succeeds', function(done) { + it('Should emit only a "loader:success" event when registering loader failed and succeeds', function(done) { var loaderPath = path.join(testDir, 'require-conf.js'); var configPath = path.join(testDir, 'app.conf'); var extensions = { '.conf': ['xxx', loaderPath] }; var app = new App(); - app.on('require', function(moduleName /* , module */) { + app.on('loader:success', function(moduleName /* , module */) { expect(moduleName).to.be.equal(loaderPath); expect(require(configPath)).to.equal('Load app.conf by require-conf'); done(); }); - app.on('requireFail', handlerNotEmit); + app.on('loader:failure', handlerNotEmit); registerLoader(app, extensions, configPath); }); - it('Should emit a "requireFail" event when loader is not found', function(done) { + it('Should emit a "loader:failure" event when loader is not found', function(done) { var loaderPath = path.join(testDir, 'require-tmp.js'); var configPath = path.join(testDir, 'app.tmp'); @@ -59,7 +59,7 @@ describe('registerLoader', function() { var app = new App(); var index = 0; - app.on('requireFail', function(moduleName, error) { + app.on('loader:failure', function(moduleName, error) { if (index === 0) { expect(moduleName).to.be.equal('xxx'); expect(error).to.be.an('error'); @@ -74,24 +74,24 @@ describe('registerLoader', function() { } index++; }); - app.on('require', handlerNotEmit); + app.on('loader:success', handlerNotEmit); registerLoader(app, extensions, configPath); }); - it('Should emit a "requireFail" event when registering loader failed', function(done) { + it('Should emit a "loader:failure" event when registering loader failed', function(done) { var loaderPath = path.join(testDir, 'require-fail.js'); var configPath = path.join(testDir, 'app.tmp'); var extensions = { '.tmp': loaderPath }; var app = new App(); - app.on('requireFail', function(moduleName, error) { + app.on('loader:failure', function(moduleName, error) { expect(moduleName).to.be.equal(loaderPath); expect(error).to.be.an('error'); expect(error.message).to.contain('Fail to register!'); done(); }); - app.on('require', handlerNotEmit); + app.on('loader:success', handlerNotEmit); registerLoader(app, extensions, configPath); }); @@ -105,13 +105,13 @@ describe('registerLoader', function() { var extensions = { '.rc': loaderPath }; var app = new App(); - app.on('require', function(moduleName /* , module */) { + app.on('loader:success', function(moduleName /* , module */) { expect(moduleName).to.be.equal(loaderPath); var loadedFile = path.join(testDir, configPath); expect(require(loadedFile)).to.equal('Load app.rc by require-rc'); done(); }); - app.on('requireFail', handlerNotEmit); + app.on('loader:failure', handlerNotEmit); registerLoader(app, extensions, configPath, testDir); }); @@ -120,8 +120,8 @@ describe('registerLoader', function() { describe('extensions', function() { it('Should do nothing when extensions is null', function(done) { var app = new App(); - app.on('require', handlerNotEmit); - app.on('requireFail', handlerNotEmit); + app.on('loader:success', handlerNotEmit); + app.on('loader:failure', handlerNotEmit); registerLoader(app); @@ -136,8 +136,8 @@ describe('registerLoader', function() { it('Should do nothing when extensions is illegal type', function(done) { var app = new App(); - app.on('require', handlerNotEmit); - app.on('requireFail', handlerNotEmit); + app.on('loader:success', handlerNotEmit); + app.on('loader:failure', handlerNotEmit); registerLoader(app, 123, 'aaa/bbb.cfg'); registerLoader(app, true, 'aaa/bbb.cfg'); @@ -154,8 +154,8 @@ describe('registerLoader', function() { it('Should do nothing when extensions is a string', function(done) { var app = new App(); - app.on('require', handlerNotEmit); - app.on('requireFail', handlerNotEmit); + app.on('loader:success', handlerNotEmit); + app.on('loader:failure', handlerNotEmit); registerLoader(app, '.cfg', 'aaa/bbb.cfg'); registerLoader(app, '.js', 'aaa/bbb.js'); @@ -174,8 +174,8 @@ describe('registerLoader', function() { }; var app = new App(); - app.on('require', handlerNotEmit); - app.on('requireFail', handlerNotEmit); + app.on('loader:success', handlerNotEmit); + app.on('loader:failure', handlerNotEmit); registerLoader(app, extensions0); registerLoader(app, extensions1); @@ -194,8 +194,8 @@ describe('registerLoader', function() { }; var app = new App(); - app.on('require', handlerNotEmit); - app.on('requireFail', handlerNotEmit); + app.on('loader:success', handlerNotEmit); + app.on('loader:failure', handlerNotEmit); registerLoader(app, extensions0, 123); registerLoader(app, extensions0, ['aaa', 'bbb']); @@ -210,8 +210,8 @@ describe('registerLoader', function() { var extensions = { '.cfg': loaderPath }; var app = new App(); - app.on('require', handlerNotEmit); - app.on('requireFail', handlerNotEmit); + app.on('loader:success', handlerNotEmit); + app.on('loader:failure', handlerNotEmit); registerLoader(app, extensions, configPath); done(); @@ -223,8 +223,8 @@ describe('registerLoader', function() { var extensions = { '.cfg': loaderPath }; var app = new App(); - app.on('require', handlerNotEmit); - app.on('requireFail', handlerNotEmit); + app.on('loader:success', handlerNotEmit); + app.on('loader:failure', handlerNotEmit); registerLoader(app, extensions, configPath); done(); @@ -238,8 +238,8 @@ describe('registerLoader', function() { var extensions = { '.b': loaderPath }; var app = new App(); - app.on('requireFail', handlerNotEmit); - app.on('require', function(moduleName /* , module */) { + app.on('loader:failure', handlerNotEmit); + app.on('loader:success', function(moduleName /* , module */) { expect(moduleName).to.be.equal(loaderPath); expect(require(configPath)).to.equal('Load file.a.b by require-file-b'); done(); @@ -254,8 +254,8 @@ describe('registerLoader', function() { var extensions = { '.b.c': loaderPath }; var app = new App(); - app.on('requireFail', handlerNotEmit); - app.on('require', function(moduleName /* , module */) { + app.on('loader:failure', handlerNotEmit); + app.on('loader:success', function(moduleName /* , module */) { expect(moduleName).to.be.equal(loaderPath); expect(require(configPath)).to.equal('Load file.a.b.c by require-file-bc'); done(); @@ -284,8 +284,8 @@ describe('registerLoader', function() { var count = 0; var app = new App(); - app.on('requireFail', handlerNotEmit); - app.on('require', function(moduleName /* , module */) { + app.on('loader:failure', handlerNotEmit); + app.on('loader:success', function(moduleName /* , module */) { switch (count) { case 0: { expect(moduleName).to.be.equal(loaderPathCD);