UNPKG

ember-legacy-class-transform

Version:
160 lines (159 loc) 14.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class ListNode { constructor(value) { this.next = null; this.prev = null; this.value = value; } } exports.ListNode = ListNode; class LinkedList { constructor() { this.clear(); } static fromSlice(slice) { let list = new LinkedList(); slice.forEachNode(n => list.append(n.clone())); return list; } head() { return this._head; } tail() { return this._tail; } clear() { this._head = this._tail = null; } isEmpty() { return this._head === null; } toArray() { let out = []; this.forEachNode(n => out.push(n)); return out; } splice(start, end, reference) { let before; if (reference === null) { before = this._tail; this._tail = end; } else { before = reference.prev; end.next = reference; reference.prev = end; } if (before) { before.next = start; start.prev = before; } } nextNode(node) { return node.next; } prevNode(node) { return node.prev; } forEachNode(callback) { let node = this._head; while (node !== null) { callback(node); node = node.next; } } contains(needle) { let node = this._head; while (node !== null) { if (node === needle) return true; node = node.next; } return false; } insertBefore(node, reference = null) { if (reference === null) return this.append(node); if (reference.prev) reference.prev.next = node;else this._head = node; node.prev = reference.prev; node.next = reference; reference.prev = node; return node; } append(node) { let tail = this._tail; if (tail) { tail.next = node; node.prev = tail; node.next = null; } else { this._head = node; } return this._tail = node; } pop() { if (this._tail) return this.remove(this._tail); return null; } prepend(node) { if (this._head) return this.insertBefore(node, this._head); return this._head = this._tail = node; } remove(node) { if (node.prev) node.prev.next = node.next;else this._head = node.next; if (node.next) node.next.prev = node.prev;else this._tail = node.prev; return node; } } exports.LinkedList = LinkedList; class ListSlice { constructor(head, tail) { this._head = head; this._tail = tail; } static toList(slice) { let list = new LinkedList(); slice.forEachNode(n => list.append(n.clone())); return list; } forEachNode(callback) { let node = this._head; while (node !== null) { callback(node); node = this.nextNode(node); } } contains(needle) { let node = this._head; while (node !== null) { if (node === needle) return true; node = node.next; } return false; } head() { return this._head; } tail() { return this._tail; } toArray() { let out = []; this.forEachNode(n => out.push(n)); return out; } nextNode(node) { if (node === this._tail) return null; return node.next; } prevNode(node) { if (node === this._head) return null; return node.prev; } isEmpty() { return false; } } exports.ListSlice = ListSlice; const EMPTY_SLICE = exports.EMPTY_SLICE = new ListSlice(null, null); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9saXN0LXV0aWxzLmpzIl0sIm5hbWVzIjpbIkxpc3ROb2RlIiwiY29uc3RydWN0b3IiLCJ2YWx1ZSIsIm5leHQiLCJwcmV2IiwiTGlua2VkTGlzdCIsImNsZWFyIiwiZnJvbVNsaWNlIiwic2xpY2UiLCJsaXN0IiwiZm9yRWFjaE5vZGUiLCJuIiwiYXBwZW5kIiwiY2xvbmUiLCJoZWFkIiwiX2hlYWQiLCJ0YWlsIiwiX3RhaWwiLCJpc0VtcHR5IiwidG9BcnJheSIsIm91dCIsInB1c2giLCJzcGxpY2UiLCJzdGFydCIsImVuZCIsInJlZmVyZW5jZSIsImJlZm9yZSIsIm5leHROb2RlIiwibm9kZSIsInByZXZOb2RlIiwiY2FsbGJhY2siLCJjb250YWlucyIsIm5lZWRsZSIsImluc2VydEJlZm9yZSIsInBvcCIsInJlbW92ZSIsInByZXBlbmQiLCJMaXN0U2xpY2UiLCJ0b0xpc3QiLCJFTVBUWV9TTElDRSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxNQUFNQSxRQUFOLENBQWU7QUFDbEJDLGdCQUFZQyxLQUFaLEVBQW1CO0FBQ2YsYUFBS0MsSUFBTCxHQUFZLElBQVo7QUFDQSxhQUFLQyxJQUFMLEdBQVksSUFBWjtBQUNBLGFBQUtGLEtBQUwsR0FBYUEsS0FBYjtBQUNIO0FBTGlCO1FBQVRGLFEsR0FBQUEsUTtBQU9OLE1BQU1LLFVBQU4sQ0FBaUI7QUFDcEJKLGtCQUFjO0FBQ1YsYUFBS0ssS0FBTDtBQUNIO0FBQ0QsV0FBT0MsU0FBUCxDQUFpQkMsS0FBakIsRUFBd0I7QUFDcEIsWUFBSUMsT0FBTyxJQUFJSixVQUFKLEVBQVg7QUFDQUcsY0FBTUUsV0FBTixDQUFrQkMsS0FBS0YsS0FBS0csTUFBTCxDQUFZRCxFQUFFRSxLQUFGLEVBQVosQ0FBdkI7QUFDQSxlQUFPSixJQUFQO0FBQ0g7QUFDREssV0FBTztBQUNILGVBQU8sS0FBS0MsS0FBWjtBQUNIO0FBQ0RDLFdBQU87QUFDSCxlQUFPLEtBQUtDLEtBQVo7QUFDSDtBQUNEWCxZQUFRO0FBQ0os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RFcsV0FBTztBQUNILGVBQU8sS0FBS0MsS0FBWjtBQUNIO0FBQ0RDLFdBQU87QUFDSCxlQUFPLEtBQUtDLEtBQVo7QUFDSDtBQUNERSxjQUFVO0FBQ04sWUFBSUMsTUFBTSxFQUFWO0FBQ0EsYUFBS1YsV0FBTCxDQUFpQkMsS0FBS1MsSUFBSUMsSUFBSixDQUFTVixDQUFULENBQXRCO0FBQ0EsZUFBT1MsR0FBUDtBQUNIO0FBQ0RPLGFBQVNDLElBQVQsRUFBZTtBQUNYLFlBQUlBLFNBQVMsS0FBS1gsS0FBbEIsRUFBeUIsT0FBTyxJQUFQO0FBQ3pCLGVBQU9XLEtBQUt6QixJQUFaO0FBQ0g7QUFDRDBCLGFBQVNELElBQVQsRUFBZTtBQUNYLFlBQUlBLFNBQVMsS0FBS2IsS0FBbEIsRUFBeUIsT0FBTyxJQUFQO0FBQ3pCLGVBQU9hLEtBQUt4QixJQUFaO0FBQ0g7QUFDRGMsY0FBVTtBQUNOLGVBQU8sS0FBUDtBQUNIO0FBOUNrQjtRQUFWbUIsUyxHQUFBQSxTO0FBZ0ROLE1BQU1FLG9DQUFjLElBQUlGLFNBQUosQ0FBYyxJQUFkLEVBQW9CLElBQXBCLENBQXBCIiwiZmlsZSI6ImxpYi9saXN0LXV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIExpc3ROb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLm5leHQgPSBudWxsO1xuICAgICAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIExpbmtlZExpc3Qge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tU2xpY2Uoc2xpY2UpIHtcbiAgICAgICAgbGV0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xuICAgICAgICBzbGljZS5mb3JFYWNoTm9kZShuID0+IGxpc3QuYXBwZW5kKG4uY2xvbmUoKSkpO1xuICAgICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG4gICAgaGVhZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWQ7XG4gICAgfVxuICAgIHRhaWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWlsO1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5faGVhZCA9IHRoaXMuX3RhaWwgPSBudWxsO1xuICAgIH1cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVhZCA9PT0gbnVsbDtcbiAgICB9XG4gICAgdG9BcnJheSgpIHtcbiAgICAgICAgbGV0IG91dCA9IFtdO1xuICAgICAgICB0aGlzLmZvckVhY2hOb2RlKG4gPT4gb3V0LnB1c2gobikpO1xuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBzcGxpY2Uoc3RhcnQsIGVuZCwgcmVmZXJlbmNlKSB7XG4gICAgICAgIGxldCBiZWZvcmU7XG4gICAgICAgIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGJlZm9yZSA9IHRoaXMuX3RhaWw7XG4gICAgICAgICAgICB0aGlzLl90YWlsID0gZW5kO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYmVmb3JlID0gcmVmZXJlbmNlLnByZXY7XG4gICAgICAgICAgICBlbmQubmV4dCA9IHJlZmVyZW5jZTtcbiAgICAgICAgICAgIHJlZmVyZW5jZS5wcmV2ID0gZW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiZWZvcmUpIHtcbiAgICAgICAgICAgIGJlZm9yZS5uZXh0ID0gc3RhcnQ7XG4gICAgICAgICAgICBzdGFydC5wcmV2ID0gYmVmb3JlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5leHROb2RlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubmV4dDtcbiAgICB9XG4gICAgcHJldk5vZGUobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5wcmV2O1xuICAgIH1cbiAgICBmb3JFYWNoTm9kZShjYWxsYmFjaykge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuX2hlYWQ7XG4gICAgICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29udGFpbnMobmVlZGxlKSB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy5faGVhZDtcbiAgICAgICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChub2RlID09PSBuZWVkbGUpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGluc2VydEJlZm9yZShub2RlLCByZWZlcmVuY2UgPSBudWxsKSB7XG4gICAgICAgIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHJldHVybiB0aGlzLmFwcGVuZChub2RlKTtcbiAgICAgICAgaWYgKHJlZmVyZW5jZS5wcmV2KSByZWZlcmVuY2UucHJldi5uZXh0ID0gbm9kZTtlbHNlIHRoaXMuX2hlYWQgPSBub2RlO1xuICAgICAgICBub2RlLnByZXYgPSByZWZlcmVuY2UucHJldjtcbiAgICAgICAgbm9kZS5uZXh0ID0gcmVmZXJlbmNlO1xuICAgICAgICByZWZlcmVuY2UucHJldiA9IG5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBhcHBlbmQobm9kZSkge1xuICAgICAgICBsZXQgdGFpbCA9IHRoaXMuX3RhaWw7XG4gICAgICAgIGlmICh0YWlsKSB7XG4gICAgICAgICAgICB0YWlsLm5leHQgPSBub2RlO1xuICAgICAgICAgICAgbm9kZS5wcmV2ID0gdGFpbDtcbiAgICAgICAgICAgIG5vZGUubmV4dCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9oZWFkID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fdGFpbCA9IG5vZGU7XG4gICAgfVxuICAgIHBvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhaWwpIHJldHVybiB0aGlzLnJlbW92ZSh0aGlzLl90YWlsKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHByZXBlbmQobm9kZSkge1xuICAgICAgICBpZiAodGhpcy5faGVhZCkgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG5vZGUsIHRoaXMuX2hlYWQpO1xuICAgICAgICByZXR1cm4gdGhpcy5faGVhZCA9IHRoaXMuX3RhaWwgPSBub2RlO1xuICAgIH1cbiAgICByZW1vdmUobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5wcmV2KSBub2RlLnByZXYubmV4dCA9IG5vZGUubmV4dDtlbHNlIHRoaXMuX2hlYWQgPSBub2RlLm5leHQ7XG4gICAgICAgIGlmIChub2RlLm5leHQpIG5vZGUubmV4dC5wcmV2ID0gbm9kZS5wcmV2O2Vsc2UgdGhpcy5fdGFpbCA9IG5vZGUucHJldjtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIExpc3RTbGljZSB7XG4gICAgY29uc3RydWN0b3IoaGVhZCwgdGFpbCkge1xuICAgICAgICB0aGlzLl9oZWFkID0gaGVhZDtcbiAgICAgICAgdGhpcy5fdGFpbCA9IHRhaWw7XG4gICAgfVxuICAgIHN0YXRpYyB0b0xpc3Qoc2xpY2UpIHtcbiAgICAgICAgbGV0IGxpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xuICAgICAgICBzbGljZS5mb3JFYWNoTm9kZShuID0+IGxpc3QuYXBwZW5kKG4uY2xvbmUoKSkpO1xuICAgICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG4gICAgZm9yRWFjaE5vZGUoY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLl9oZWFkO1xuICAgICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgICAgICBub2RlID0gdGhpcy5uZXh0Tm9kZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb250YWlucyhuZWVkbGUpIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLl9oZWFkO1xuICAgICAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKG5vZGUgPT09IG5lZWRsZSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGVhZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWQ7XG4gICAgfVxuICAgIHRhaWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWlsO1xuICAgIH1cbiAgICB0b0FycmF5KCkge1xuICAgICAgICBsZXQgb3V0ID0gW107XG4gICAgICAgIHRoaXMuZm9yRWFjaE5vZGUobiA9PiBvdXQucHVzaChuKSk7XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIG5leHROb2RlKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT09IHRoaXMuX3RhaWwpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gbm9kZS5uZXh0O1xuICAgIH1cbiAgICBwcmV2Tm9kZShub2RlKSB7XG4gICAgICAgIGlmIChub2RlID09PSB0aGlzLl9oZWFkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIG5vZGUucHJldjtcbiAgICB9XG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBFTVBUWV9TTElDRSA9IG5ldyBMaXN0U2xpY2UobnVsbCwgbnVsbCk7Il19