@orbit/immutable
Version:
Lightweight immutable library used by Orbit.js.
56 lines • 5.33 kB
JavaScript
import { HAMTMap } from './utils/hamt';
export class ImmutableMap {
constructor(base) {
if (base) {
this._data = base.data;
}
else {
this._data = new HAMTMap();
}
}
get size() {
return this._data.size;
}
clear() {
this._data = new HAMTMap();
}
get(key) {
return this._data.get(key);
}
set(key, value) {
this._data = this._data.set(key, value);
}
setMany(entries) {
let data = this._data.beginMutation();
entries.forEach((entry) => {
data.set(entry[0], entry[1]);
});
this._data = data.endMutation();
}
remove(key) {
this._data = this._data.remove(key);
}
removeMany(keys) {
let data = this._data.beginMutation();
keys.forEach((key) => {
data.remove(key);
});
this._data = data.endMutation();
}
has(key) {
return this.get(key) !== undefined;
}
keys() {
return this._data.keys();
}
values() {
return this._data.values();
}
entries() {
return this._data.entries();
}
get data() {
return this._data;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1tdXRhYmxlLW1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbW11dGFibGUtbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdkMsTUFBTSxPQUFPLFlBQVk7SUFHdkIsWUFBWSxJQUF5QjtRQUNuQyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUN4QjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQU0sRUFBRSxLQUFRO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBaUI7UUFDdkIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQU07UUFDWCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBUztRQUNsQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBYyxJQUFJO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIQU1UTWFwIH0gZnJvbSAnLi91dGlscy9oYW10JztcblxuZXhwb3J0IGNsYXNzIEltbXV0YWJsZU1hcDxLLCBWPiB7XG4gIHByaXZhdGUgX2RhdGE6IEhBTVRNYXA7XG5cbiAgY29uc3RydWN0b3IoYmFzZT86IEltbXV0YWJsZU1hcDxLLCBWPikge1xuICAgIGlmIChiYXNlKSB7XG4gICAgICB0aGlzLl9kYXRhID0gYmFzZS5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kYXRhID0gbmV3IEhBTVRNYXAoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLnNpemU7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLl9kYXRhID0gbmV3IEhBTVRNYXAoKTtcbiAgfVxuXG4gIGdldChrZXk6IEspOiBWIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YS5nZXQoa2V5KTtcbiAgfVxuXG4gIHNldChrZXk6IEssIHZhbHVlOiBWKTogdm9pZCB7XG4gICAgdGhpcy5fZGF0YSA9IHRoaXMuX2RhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB9XG5cbiAgc2V0TWFueShlbnRyaWVzOiBbSywgVl1bXSk6IHZvaWQge1xuICAgIGxldCBkYXRhID0gdGhpcy5fZGF0YS5iZWdpbk11dGF0aW9uKCk7XG4gICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgZGF0YS5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgICB9KTtcbiAgICB0aGlzLl9kYXRhID0gZGF0YS5lbmRNdXRhdGlvbigpO1xuICB9XG5cbiAgcmVtb3ZlKGtleTogSyk6IHZvaWQge1xuICAgIHRoaXMuX2RhdGEgPSB0aGlzLl9kYXRhLnJlbW92ZShrZXkpO1xuICB9XG5cbiAgcmVtb3ZlTWFueShrZXlzOiBLW10pOiB2b2lkIHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuX2RhdGEuYmVnaW5NdXRhdGlvbigpO1xuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBkYXRhLnJlbW92ZShrZXkpO1xuICAgIH0pO1xuICAgIHRoaXMuX2RhdGEgPSBkYXRhLmVuZE11dGF0aW9uKCk7XG4gIH1cblxuICBoYXMoa2V5OiBLKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KGtleSkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGtleXMoKTogSXRlcmFibGVJdGVyYXRvcjxLPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEua2V5cygpO1xuICB9XG5cbiAgdmFsdWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8Vj4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLnZhbHVlcygpO1xuICB9XG5cbiAgZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFtLLCBWXT4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLmVudHJpZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgZGF0YSgpOiBIQU1UTWFwIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxufVxuIl19