UNPKG

gun-flint

Version:

Micro-framework for building Gun adapters

125 lines (92 loc) 4.35 kB
'use strict'; 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;