ember-legacy-class-transform
Version:
The default blueprint for ember-cli addons.
160 lines (159 loc) • 14.5 kB
JavaScript
"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