UNPKG

koconut

Version:

Provide interchainable array, set, map and etc supporting both normal and async callbacks as their action arguments.

820 lines (818 loc) 30.4 kB
'use strict'; var _interopRequireDefault = require('@babel/runtime/helpers/interopRequireDefault'); Object.defineProperty(exports, '__esModule', { value: true, }); exports.Sequence = exports.KoconutSequence = void 0; var _regenerator = _interopRequireDefault( require('@babel/runtime/regenerator'), ); var _inherits2 = _interopRequireDefault( require('@babel/runtime/helpers/inherits'), ); var _possibleConstructorReturn2 = _interopRequireDefault( require('@babel/runtime/helpers/possibleConstructorReturn'), ); var _getPrototypeOf2 = _interopRequireDefault( require('@babel/runtime/helpers/getPrototypeOf'), ); var _asyncToGenerator2 = _interopRequireDefault( require('@babel/runtime/helpers/asyncToGenerator'), ); var _classCallCheck2 = _interopRequireDefault( require('@babel/runtime/helpers/classCallCheck'), ); var _createClass2 = _interopRequireDefault( require('@babel/runtime/helpers/createClass'), ); var _classPrivateFieldSet2 = _interopRequireDefault( require('@babel/runtime/helpers/classPrivateFieldSet'), ); var _classPrivateFieldGet2 = _interopRequireDefault( require('@babel/runtime/helpers/classPrivateFieldGet'), ); var _module = require('../../../../module'); var _Symbol$iterator; function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2['default'])(Derived); var result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2['default'])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2['default'])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === 'undefined' || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === 'function') return true; try { Boolean.prototype.valueOf.call( Reflect.construct(Boolean, [], function () {}), ); return true; } catch (e) { return false; } } function _createForOfIteratorHelper(o, allowArrayLike) { var it = (typeof Symbol !== 'undefined' && o[Symbol.iterator]) || o['@@iterator']; if (!it) { if ( Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || (allowArrayLike && o && typeof o.length === 'number') ) { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F, }; } throw new TypeError( 'Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.', ); } var normalCompletion = true; var didErr = false; var err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it['return'] != null) it['return'](); } finally { if (didErr) throw err; } }, }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === 'string') return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === 'Object' && o.constructor) n = o.constructor.name; if (n === 'Map' || n === 'Set') return Array.from(o); if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); } function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError( 'Cannot initialize the same private elements twice on an object', ); } } ('use strict'); var _mIsFinished = new WeakMap(); var _mLastPrevIndex = new WeakMap(); var _mParentSequence = new WeakMap(); var _mTransformer = new WeakMap(); var _mInnerDataArray = new WeakMap(); _Symbol$iterator = Symbol.iterator; var Sequence = (function () { function Sequence() { var srcSequence = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; (0, _classCallCheck2['default'])(this, Sequence); _classPrivateFieldInitSpec(this, _mIsFinished, { writable: true, value: false, }); _classPrivateFieldInitSpec(this, _mLastPrevIndex, { writable: true, value: 0, }); _classPrivateFieldInitSpec(this, _mParentSequence, { writable: true, value: null, }); _classPrivateFieldInitSpec(this, _mTransformer, { writable: true, value: null, }); _classPrivateFieldInitSpec(this, _mInnerDataArray, { writable: true, value: new Array(), }); if (srcSequence != null) { var _iterator = _createForOfIteratorHelper(srcSequence); var _step; try { for (_iterator.s(); !(_step = _iterator.n()).done; ) { var eachDatum = _step.value; (0, _classPrivateFieldGet2['default'])(this, _mInnerDataArray).push( eachDatum, ); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } } (0, _createClass2['default'])( Sequence, [ { key: _Symbol$iterator, value: function value() { return (0, _classPrivateFieldGet2['default'])(this, _mInnerDataArray)[ Symbol.iterator ](); }, }, { key: 'done', value: (function () { var _done = (0, _asyncToGenerator2['default'])( _regenerator['default'].mark(function _callee() { var index; return _regenerator['default'].wrap( function _callee$(_context) { while (1) { switch ((_context.prev = _context.next)) { case 0: index = 0; if ( (0, _classPrivateFieldGet2['default'])( this, _mParentSequence, ) ) (0, _classPrivateFieldSet2['default'])( (0, _classPrivateFieldGet2['default'])( this, _mParentSequence, ), _mIsFinished, false, ); case 2: if ( (0, _classPrivateFieldGet2['default'])( this, _mIsFinished, ) ) { _context.next = 7; break; } _context.next = 5; return this.getDatum(index++); case 5: _context.next = 2; break; case 7: (0, _classPrivateFieldSet2['default'])( this, _mParentSequence, null, ); (0, _classPrivateFieldSet2['default'])( this, _mTransformer, null, ); (0, _classPrivateFieldSet2['default'])( this, _mLastPrevIndex, 0, ); return _context.abrupt('return', this); case 11: case 'end': return _context.stop(); } } }, _callee, this, ); }), ); function done() { return _done.apply(this, arguments); } return done; })(), }, { key: 'getDatum', value: (function () { var _getDatum = (0, _asyncToGenerator2['default'])( _regenerator['default'].mark(function _callee2(index) { var fetchedResult; var _this$mLastPrevIndex; var _this$mLastPrevIndex2; var result; return _regenerator['default'].wrap( function _callee2$(_context2) { while (1) { switch ((_context2.prev = _context2.next)) { case 0: if ( !( (0, _classPrivateFieldGet2['default'])( this, _mParentSequence, ) == null ) ) { _context2.next = 5; break; } if ( index == (0, _classPrivateFieldGet2['default'])( this, _mInnerDataArray, ).length - 1 ) (0, _classPrivateFieldSet2['default'])( this, _mIsFinished, true, ); return _context2.abrupt( 'return', (0, _classPrivateFieldGet2['default'])( this, _mInnerDataArray, )[index], ); case 5: _context2.next = 7; return (0, _classPrivateFieldGet2['default'])( this, _mParentSequence, ).getDatum(index); case 7: fetchedResult = _context2.sent; if (!fetchedResult) { _context2.next = 15; break; } _context2.next = 11; return (0, _classPrivateFieldGet2['default'])( this, _mTransformer, )( ((0, _classPrivateFieldSet2['default'])( this, _mLastPrevIndex, ((_this$mLastPrevIndex = (0, _classPrivateFieldGet2['default'])( this, _mLastPrevIndex, )), (_this$mLastPrevIndex2 = _this$mLastPrevIndex++), _this$mLastPrevIndex), ), _this$mLastPrevIndex2), fetchedResult, ); case 11: result = _context2.sent; if ( (0, _classPrivateFieldGet2['default'])( (0, _classPrivateFieldGet2['default'])( this, _mParentSequence, ), _mIsFinished, ) ) (0, _classPrivateFieldSet2['default'])( this, _mIsFinished, true, ); if (result) (0, _classPrivateFieldGet2['default'])( this, _mInnerDataArray, ).push(result); return _context2.abrupt('return', result); case 15: case 'end': return _context2.stop(); } } }, _callee2, this, ); }), ); function getDatum(_x) { return _getDatum.apply(this, arguments); } return getDatum; })(), }, { key: 'chainSequence', value: function chainSequence(prevSequence, transformer) { (0, _classPrivateFieldSet2['default'])( prevSequence, _mIsFinished, false, ); (0, _classPrivateFieldSet2['default'])( this, _mParentSequence, prevSequence, ); (0, _classPrivateFieldSet2['default'])( this, _mTransformer, transformer, ); return this; }, }, ], [ { key: 'of', value: function of() { for ( var _len = arguments.length, srcSequence = new Array(_len), _key = 0; _key < _len; _key++ ) { srcSequence[_key] = arguments[_key]; } return new Sequence(srcSequence); }, }, { key: 'from', value: function from() { var srcSequence = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; return new Sequence(srcSequence); }, }, ], ); return Sequence; })(); exports.Sequence = Sequence; var KoconutSequence = (function (_KoconutCollection) { (0, _inherits2['default'])(KoconutSequence, _KoconutCollection); var _super = _createSuper(KoconutSequence); function KoconutSequence() { var _this; var srcSequence = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; (0, _classCallCheck2['default'])(this, KoconutSequence); _this = _super.call(this); _this.data = new Sequence(srcSequence); return _this; } (0, _createClass2['default'])( KoconutSequence, [ { key: 'onEach', value: function onEach(action) { var _this2 = this; var thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; action.bind(thisArg); var koconutToReturn = new KoconutSequence(); koconutToReturn.setPrevYieldable(this).setProcessor( (0, _asyncToGenerator2['default'])( _regenerator['default'].mark(function _callee4() { var continueProcess; return _regenerator['default'].wrap(function _callee4$( _context4, ) { while (1) { switch ((_context4.prev = _context4.next)) { case 0: continueProcess = true; return _context4.abrupt( 'return', new Sequence()['chainSequence']( _this2.data, (function () { var _ref2 = (0, _asyncToGenerator2['default'])( _regenerator['default'].mark(function _callee3( _, srcDatum, ) { var signal; return _regenerator['default'].wrap( function _callee3$(_context3) { while (1) { switch ( (_context3.prev = _context3.next) ) { case 0: if (!continueProcess) { _context3.next = 5; break; } _context3.next = 3; return action(srcDatum); case 3: signal = _context3.sent; if ( signal == false || signal == _module.KoconutLoopSignal.BREAK ) continueProcess = false; case 5: return _context3.abrupt( 'return', srcDatum, ); case 6: case 'end': return _context3.stop(); } } }, _callee3, ); }), ); return function (_x2, _x3) { return _ref2.apply(this, arguments); }; })(), ), ); case 2: case 'end': return _context4.stop(); } } }, _callee4); }), ), ); return koconutToReturn; }, }, { key: 'onEachIndexed', value: function onEachIndexed(action) { var _this3 = this; var thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; action.bind(thisArg); var koconutToReturn = new KoconutSequence(); koconutToReturn.setPrevYieldable(this).setProcessor( (0, _asyncToGenerator2['default'])( _regenerator['default'].mark(function _callee6() { var continueProcess; return _regenerator['default'].wrap(function _callee6$( _context6, ) { while (1) { switch ((_context6.prev = _context6.next)) { case 0: continueProcess = true; return _context6.abrupt( 'return', new Sequence()['chainSequence']( _this3.data, (function () { var _ref4 = (0, _asyncToGenerator2['default'])( _regenerator['default'].mark(function _callee5( index, srcDatum, ) { var signal; return _regenerator['default'].wrap( function _callee5$(_context5) { while (1) { switch ( (_context5.prev = _context5.next) ) { case 0: if (!continueProcess) { _context5.next = 5; break; } _context5.next = 3; return action(index, srcDatum); case 3: signal = _context5.sent; if ( signal == false || signal == _module.KoconutLoopSignal.BREAK ) continueProcess = false; case 5: return _context5.abrupt( 'return', srcDatum, ); case 6: case 'end': return _context5.stop(); } } }, _callee5, ); }), ); return function (_x4, _x5) { return _ref4.apply(this, arguments); }; })(), ), ); case 2: case 'end': return _context6.stop(); } } }, _callee6); }), ), ); return koconutToReturn; }, }, { key: 'filter', value: function filter(predicate) { var _this4 = this; var thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; predicate = predicate.bind(thisArg); var koconutToReturn = new KoconutSequence(); koconutToReturn.setPrevYieldable(this).setProcessor( (0, _asyncToGenerator2['default'])( _regenerator['default'].mark(function _callee8() { return _regenerator['default'].wrap(function _callee8$( _context8, ) { while (1) { switch ((_context8.prev = _context8.next)) { case 0: return _context8.abrupt( 'return', new Sequence()['chainSequence']( _this4.data, (function () { var _ref6 = (0, _asyncToGenerator2['default'])( _regenerator['default'].mark(function _callee7( _, srcDatum, ) { return _regenerator['default'].wrap( function _callee7$(_context7) { while (1) { switch ( (_context7.prev = _context7.next) ) { case 0: _context7.next = 2; return predicate(srcDatum); case 2: if (!_context7.sent) { _context7.next = 4; break; } return _context7.abrupt( 'return', srcDatum, ); case 4: case 'end': return _context7.stop(); } } }, _callee7, ); }), ); return function (_x6, _x7) { return _ref6.apply(this, arguments); }; })(), ), ); case 1: case 'end': return _context8.stop(); } } }, _callee8); }), ), ); return koconutToReturn; }, }, { key: 'filterIndexed', value: function filterIndexed(predicate) { var _this5 = this; var thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; predicate = predicate.bind(thisArg); var koconutToReturn = new KoconutSequence(); koconutToReturn.setPrevYieldable(this).setProcessor( (0, _asyncToGenerator2['default'])( _regenerator['default'].mark(function _callee10() { return _regenerator['default'].wrap(function _callee10$( _context10, ) { while (1) { switch ((_context10.prev = _context10.next)) { case 0: return _context10.abrupt( 'return', new Sequence()['chainSequence']( _this5.data, (function () { var _ref8 = (0, _asyncToGenerator2['default'])( _regenerator['default'].mark(function _callee9( index, srcDatum, ) { return _regenerator['default'].wrap( function _callee9$(_context9) { while (1) { switch ( (_context9.prev = _context9.next) ) { case 0: _context9.next = 2; return predicate(index, srcDatum); case 2: if (!_context9.sent) { _context9.next = 4; break; } return _context9.abrupt( 'return', srcDatum, ); case 4: case 'end': return _context9.stop(); } } }, _callee9, ); }), ); return function (_x8, _x9) { return _ref8.apply(this, arguments); }; })(), ), ); case 1: case 'end': return _context10.stop(); } } }, _callee10); }), ), ); return koconutToReturn; }, }, ], [ { key: 'of', value: function of() { for ( var _len2 = arguments.length, srcSequence = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++ ) { srcSequence[_key2] = arguments[_key2]; } return new KoconutSequence(srcSequence); }, }, { key: 'from', value: function from() { var srcSequence = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; return new KoconutSequence(srcSequence); }, }, ], ); return KoconutSequence; })(_module.KoconutCollection); exports.KoconutSequence = KoconutSequence;