feathers
Version:
Build Better APIs, Faster than Ever.
79 lines (61 loc) • 2.39 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
exports.default = function (service) {
var app = this;
var isEmitter = typeof service.on === 'function' && typeof service.emit === 'function';
var emitter = service._rubberDuck = _rubberduck2.default.emitter(service);
if (typeof service.mixin === 'function' && !isEmitter) {
service.mixin(_events.EventEmitter.prototype);
}
service._serviceEvents = Array.isArray(service.events) ? service.events.slice() : [];
// Pass the Rubberduck error event through
// TODO deal with error events properly
emitter.on('error', function (errors) {
service.emit('serviceError', errors[0]);
});
(0, _keys2.default)(eventMappings).forEach(function (method) {
var event = eventMappings[method];
var alreadyEmits = service._serviceEvents.indexOf(event) !== -1;
if (typeof service[method] === 'function' && !alreadyEmits) {
// The Rubberduck event name (e.g. afterCreate, afterUpdate or afterDestroy)
var eventName = 'after' + upperCase(method);
service._serviceEvents.push(event);
// Punch the given method
emitter.punch(method, -1);
// Pass the event and error event through
emitter.on(eventName, function (results, args) {
if (!results[0]) {
// callback without error
var hook = hookObject(method, 'after', args);
var data = Array.isArray(results[1]) ? results[1] : [results[1]];
hook.app = app;
data.forEach(function (current) {
return service.emit(event, current, hook);
});
} else {
service.emit('serviceError', results[0]);
}
});
}
});
};
var _rubberduck = require('rubberduck');
var _rubberduck2 = _interopRequireDefault(_rubberduck);
var _events = require('events');
var _feathersCommons = require('feathers-commons');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var hookObject = _feathersCommons.hooks.hookObject;
var eventMappings = {
create: 'created',
update: 'updated',
remove: 'removed',
patch: 'patched'
};
function upperCase(name) {
return name.charAt(0).toUpperCase() + name.substring(1);
}
module.exports = exports['default'];
;