UNPKG

@orbit/immutable

Version:

Lightweight immutable library used by Orbit.js.

56 lines 5.33 kB
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