UNPKG

wal

Version:

An implementation of write-ahead logging (WAL) for nodejs.

100 lines (78 loc) 5.97 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var $queue = Symbol('queue'); var $offset = Symbol('offset'); /** * A simple queue class. * * This is an obvious es6 dirivative of [Stephen Morley's queue implementation](http://code.stephenmorley.org/javascript/queues/). */ var Queue = function () { /** * Creates a new instance. */ function Queue() { _classCallCheck(this, Queue); this[$queue] = []; this[$offset] = 0; } /** * @type {number} The queue's length. */ _createClass(Queue, [{ key: 'enqueue', /** * Enqueues the specified item. * @param item - An item to put on the queue. */ value: function enqueue(item) { this[$queue].push(item); } /** * Dequeues the item at the head of the queue, removing the item. * @return The item at the head of the queue or `undefined` if the queue is empty. */ }, { key: 'dequeue', value: function dequeue() { if (this.length === 0) { return undefined; } var item = this[$queue][this[$offset]]; if (++this[$offset] * 2 >= this[$queue].length) { this[$queue] = this[$queue].slice(this[$offset]); this[$offset] = 0; } return item; } /** * Peeks at the item at the head of the queue without removing it. * @return The item at the head of the queue or `undefined` if the queue is empty. */ }, { key: 'peek', value: function peek() { return this.length > 0 ? this[$queue][this[$offset]] : undefined; } }, { key: 'length', get: function get() { return this[$queue].length - this[$offset]; } /** * @type {boolean} Indicates whether the queue is empty. */ }, { key: 'isEmpty', get: function get() { return this.length === 0; } }]); return Queue; }(); exports.default = Queue; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9xdWV1ZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztBQUVBLElBQU0sU0FBUyxPQUFPLE9BQVAsQ0FBZjtBQUNBLElBQU0sVUFBVSxPQUFPLFFBQVAsQ0FBaEI7Ozs7Ozs7O0lBT00sSzs7Ozs7O0FBS0osbUJBQWM7QUFBQTs7QUFDWixTQUFLLE1BQUwsSUFBZSxFQUFmO0FBQ0EsU0FBSyxPQUFMLElBQWdCLENBQWhCO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs0QkFvQk8sSSxFQUFNO0FBQ1osV0FBSyxNQUFMLEVBQWEsSUFBYixDQUFrQixJQUFsQjtBQUNEOzs7Ozs7Ozs7OEJBTVM7QUFDUixVQUFJLEtBQUssTUFBTCxLQUFnQixDQUFwQixFQUF1QjtBQUNyQixlQUFPLFNBQVA7QUFDRDtBQUNELFVBQUksT0FBTyxLQUFLLE1BQUwsRUFBYSxLQUFLLE9BQUwsQ0FBYixDQUFYO0FBQ0EsVUFBSSxFQUFFLEtBQUssT0FBTCxDQUFGLEdBQWtCLENBQWxCLElBQXVCLEtBQUssTUFBTCxFQUFhLE1BQXhDLEVBQWdEO0FBQzlDLGFBQUssTUFBTCxJQUFlLEtBQUssTUFBTCxFQUFhLEtBQWIsQ0FBbUIsS0FBSyxPQUFMLENBQW5CLENBQWY7QUFDQSxhQUFLLE9BQUwsSUFBZ0IsQ0FBaEI7QUFDRDtBQUNELGFBQU8sSUFBUDtBQUNEOzs7Ozs7Ozs7MkJBTU07QUFDTCxhQUFRLEtBQUssTUFBTCxHQUFjLENBQWQsR0FBa0IsS0FBSyxNQUFMLEVBQWEsS0FBSyxPQUFMLENBQWIsQ0FBbEIsR0FBZ0QsU0FBeEQ7QUFDRDs7O3dCQXpDWTtBQUNYLGFBQVEsS0FBSyxNQUFMLEVBQWEsTUFBYixHQUFzQixLQUFLLE9BQUwsQ0FBOUI7QUFDRDs7Ozs7Ozs7d0JBS2E7QUFDWixhQUFRLEtBQUssTUFBTCxLQUFnQixDQUF4QjtBQUNEOzs7Ozs7a0JBbUNZLEsiLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmNvbnN0ICRxdWV1ZSA9IFN5bWJvbCgncXVldWUnKTtcbmNvbnN0ICRvZmZzZXQgPSBTeW1ib2woJ29mZnNldCcpO1xuXG4vKipcbiAqIEEgc2ltcGxlIHF1ZXVlIGNsYXNzLlxuICpcbiAqIFRoaXMgaXMgYW4gb2J2aW91cyBlczYgZGlyaXZhdGl2ZSBvZiBbU3RlcGhlbiBNb3JsZXkncyBxdWV1ZSBpbXBsZW1lbnRhdGlvbl0oaHR0cDovL2NvZGUuc3RlcGhlbm1vcmxleS5vcmcvamF2YXNjcmlwdC9xdWV1ZXMvKS5cbiAqL1xuY2xhc3MgUXVldWUge1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpc1skcXVldWVdID0gW107XG4gICAgdGhpc1skb2Zmc2V0XSA9IDA7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge251bWJlcn0gVGhlIHF1ZXVlJ3MgbGVuZ3RoLlxuICAgKi9cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gKHRoaXNbJHF1ZXVlXS5sZW5ndGggLSB0aGlzWyRvZmZzZXRdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgKi9cbiAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuICh0aGlzLmxlbmd0aCA9PT0gMCk7XG4gIH1cblxuICAvKipcbiAgICogRW5xdWV1ZXMgdGhlIHNwZWNpZmllZCBpdGVtLlxuICAgKiBAcGFyYW0gaXRlbSAtIEFuIGl0ZW0gdG8gcHV0IG9uIHRoZSBxdWV1ZS5cbiAgICovXG4gIGVucXVldWUoaXRlbSkge1xuICAgIHRoaXNbJHF1ZXVlXS5wdXNoKGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcXVldWVzIHRoZSBpdGVtIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZSwgcmVtb3ZpbmcgdGhlIGl0ZW0uXG4gICAqIEByZXR1cm4gVGhlIGl0ZW0gYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eS5cbiAgICovXG4gIGRlcXVldWUoKSB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXQgaXRlbSA9IHRoaXNbJHF1ZXVlXVt0aGlzWyRvZmZzZXRdXTtcbiAgICBpZiAoKyt0aGlzWyRvZmZzZXRdICogMiA+PSB0aGlzWyRxdWV1ZV0ubGVuZ3RoKSB7XG4gICAgICB0aGlzWyRxdWV1ZV0gPSB0aGlzWyRxdWV1ZV0uc2xpY2UodGhpc1skb2Zmc2V0XSk7XG4gICAgICB0aGlzWyRvZmZzZXRdID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICAvKipcbiAgICogUGVla3MgYXQgdGhlIGl0ZW0gYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIHdpdGhvdXQgcmVtb3ZpbmcgaXQuXG4gICAqIEByZXR1cm4gVGhlIGl0ZW0gYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eS5cbiAgICovXG4gIHBlZWsoKSB7XG4gICAgcmV0dXJuICh0aGlzLmxlbmd0aCA+IDAgPyB0aGlzWyRxdWV1ZV1bdGhpc1skb2Zmc2V0XV0gOiB1bmRlZmluZWQpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFF1ZXVlO1xuIl19