gun-flint
Version:
Micro-framework for building Gun adapters
125 lines (92 loc) • 4.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _baseExtension = require('./../base-extension');
var _baseExtension2 = _interopRequireDefault(_baseExtension);
var _util = require('./../util');
var _util2 = _interopRequireDefault(_util);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var BaseMiddleware = function (_BaseExtension) {
(0, _inherits3.default)(BaseMiddleware, _BaseExtension);
function BaseMiddleware(middleware) {
var _ret;
(0, _classCallCheck3.default)(this, BaseMiddleware);
var _this2 = (0, _possibleConstructorReturn3.default)(this, (BaseMiddleware.__proto__ || (0, _getPrototypeOf2.default)(BaseMiddleware)).call(this));
_this2.outerContext = {};
_this2._opt = middleware.opt ? middleware.opt.bind(_this2.outerContext) : _this2.noop;
_this2._beforeGet = middleware.beforeGet ? middleware.beforeGet.bind(_this2.outerContext) : _this2.noop;
_this2._beforePut = middleware.beforePut ? middleware.beforePut.bind(_this2.outerContext) : _this2.noop;
for (var methodName in middleware) {
if ({}.hasOwnProperty.call(middleware, methodName) && ['opt', 'beforeGet', 'beforePut'].indexOf(methodName === -1)) {
if (typeof middleware[methodName] === 'function') {
_this2.outerContext[methodName] = middleware[methodName].bind(_this2.outerContext);
} else {
_this2.outerContext[methodName] = middleware[methodName];
}
}
}
_this2._read = _this2._read.bind(_this2);
_this2._write = _this2._write.bind(_this2);
return _ret = _this2, (0, _possibleConstructorReturn3.default)(_this2, _ret);
}
(0, _createClass3.default)(BaseMiddleware, [{
key: 'bootstrap',
value: function bootstrap(Gun) {
var _this = this;
this.Gun = Gun || require('gun/gun');
this.Gun.on('opt', function (context) {
this.to.next(context);
_this._opt.call(this.outerContext, context, context.opt, !context.once);
if (context.once) {
return;
}
// Allows other plugins to respond after middleware does it's work
var pluginInterop = function pluginInterop(middleware) {
return function (context) {
var _this3 = this;
var done = function done(postContext) {
_this3.to.next(postContext);
};
return middleware(context, done);
};
};
// Register the driver.
context.on('get', pluginInterop(_this._read));
context.on('put', pluginInterop(_this._write));
});
}
}, {
key: 'noop',
value: function noop() {
var _to;
(_to = this.to).next.apply(_to, arguments);
}
}, {
key: '_read',
value: function _read(context, done) {
this._beforeGet(context, function (postContext) {
done(postContext || context);
});
}
}, {
key: '_write',
value: function _write(context, done) {
this._beforePut(context, function (postContext) {
done(postContext || context);
});
}
}]);
return BaseMiddleware;
}(_baseExtension2.default);
exports.default = BaseMiddleware;