@orbit/identity-map
Version:
Orbit identity map to manage model instances.
68 lines • 7.84 kB
JavaScript
export class IdentityMap {
constructor(settings) {
this._serializer = settings.serializer;
this._map = new Map();
}
get(identity) {
const identifier = this._serializer.serialize(identity);
if (identifier !== undefined) {
return this._map.get(identifier);
}
}
set(identity, record) {
const identifier = this._serializer.serialize(identity);
if (identifier !== undefined) {
this._map.set(identifier, record);
}
return this;
}
has(identity) {
const identifier = this._serializer.serialize(identity);
if (identifier !== undefined) {
return this._map.has(identifier);
}
else {
return false;
}
}
delete(identity) {
const identifier = this._serializer.serialize(identity);
const result = this._map.has(identifier);
if (result) {
this._map.delete(identifier);
}
return result;
}
entries() {
return Array.from(this._map)
.map(([identifier, record]) => [
this._serializer.deserialize(identifier),
record
])[Symbol.iterator]();
}
keys() {
return Array.from(this)
.map(([identity]) => identity)[Symbol.iterator]();
}
values() {
return this._map.values();
}
[Symbol.iterator]() {
return this.entries();
}
clear() {
this._map.clear();
}
forEach(callbackFn, thisArg) {
for (let [identity, record] of this) {
callbackFn.call(thisArg, record, identity, this);
}
}
get size() {
return this._map.size;
}
get [Symbol.toStringTag]() {
return 'IdentityMap';
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktbWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2lkZW50aXR5LW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLE9BQU8sV0FBVztJQUl0QixZQUFZLFFBQXVDO1FBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELEdBQUcsQ0FBQyxRQUFrQjtRQUNwQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRCxHQUFHLENBQUMsUUFBa0IsRUFBRSxNQUFhO1FBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDbkM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxHQUFHLENBQUMsUUFBa0I7UUFDcEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEQsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQWtCO1FBQ3ZCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDOUI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFxQixFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ3hDLE1BQU07U0FDUCxDQUFDLENBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUk7UUFDRixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUM3QixNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxPQUFPLENBQ0wsVUFJUyxFQUNULE9BQWlCO1FBRWpCLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDbkMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN0QixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJZGVudGl0eVNlcmlhbGl6ZXIgfSBmcm9tICcuL2lkZW50aXR5LXNlcmlhbGl6ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5TWFwU2V0dGluZ3M8SWRlbnRpdHk+IHtcbiAgc2VyaWFsaXplcjogSWRlbnRpdHlTZXJpYWxpemVyPElkZW50aXR5Pjtcbn1cblxuZXhwb3J0IGNsYXNzIElkZW50aXR5TWFwPElkZW50aXR5LCBNb2RlbD4gaW1wbGVtZW50cyBNYXA8SWRlbnRpdHksIE1vZGVsPiB7XG4gIHByb3RlY3RlZCBfc2VyaWFsaXplcjogSWRlbnRpdHlTZXJpYWxpemVyPElkZW50aXR5PjtcbiAgcHJvdGVjdGVkIF9tYXA6IE1hcDxzdHJpbmcsIE1vZGVsPjtcblxuICBjb25zdHJ1Y3RvcihzZXR0aW5nczogSWRlbnRpdHlNYXBTZXR0aW5nczxJZGVudGl0eT4pIHtcbiAgICB0aGlzLl9zZXJpYWxpemVyID0gc2V0dGluZ3Muc2VyaWFsaXplcjtcbiAgICB0aGlzLl9tYXAgPSBuZXcgTWFwKCk7XG4gIH1cblxuICBnZXQoaWRlbnRpdHk6IElkZW50aXR5KTogTW9kZWwgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZShpZGVudGl0eSk7XG4gICAgaWYgKGlkZW50aWZpZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuX21hcC5nZXQoaWRlbnRpZmllcik7XG4gICAgfVxuICB9XG5cbiAgc2V0KGlkZW50aXR5OiBJZGVudGl0eSwgcmVjb3JkOiBNb2RlbCk6IHRoaXMge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZShpZGVudGl0eSk7XG4gICAgaWYgKGlkZW50aWZpZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fbWFwLnNldChpZGVudGlmaWVyLCByZWNvcmQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGhhcyhpZGVudGl0eTogSWRlbnRpdHkpOiBib29sZWFuIHtcbiAgICBjb25zdCBpZGVudGlmaWVyID0gdGhpcy5fc2VyaWFsaXplci5zZXJpYWxpemUoaWRlbnRpdHkpO1xuICAgIGlmIChpZGVudGlmaWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tYXAuaGFzKGlkZW50aWZpZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlKGlkZW50aXR5OiBJZGVudGl0eSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkZW50aWZpZXIgPSB0aGlzLl9zZXJpYWxpemVyLnNlcmlhbGl6ZShpZGVudGl0eSk7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fbWFwLmhhcyhpZGVudGlmaWVyKTtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICB0aGlzLl9tYXAuZGVsZXRlKGlkZW50aWZpZXIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZW50cmllcygpOiBJdGVyYWJsZUl0ZXJhdG9yPFtJZGVudGl0eSwgTW9kZWxdPiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fbWFwKVxuICAgICAgLm1hcCgoW2lkZW50aWZpZXIsIHJlY29yZF0pOiBbSWRlbnRpdHksIE1vZGVsXSA9PiBbXG4gICAgICAgIHRoaXMuX3NlcmlhbGl6ZXIuZGVzZXJpYWxpemUoaWRlbnRpZmllciksXG4gICAgICAgIHJlY29yZFxuICAgICAgXSlcbiAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICBrZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8SWRlbnRpdHk+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzKVxuICAgICAgLm1hcCgoW2lkZW50aXR5XSkgPT4gaWRlbnRpdHkpXG4gICAgICBbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdmFsdWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8TW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLnZhbHVlcygpO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmFibGVJdGVyYXRvcjxbSWRlbnRpdHksIE1vZGVsXT4ge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMoKTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuX21hcC5jbGVhcigpO1xuICB9XG5cbiAgZm9yRWFjaChcbiAgICBjYWxsYmFja0ZuOiAoXG4gICAgICByZWNvcmQ6IE1vZGVsLFxuICAgICAgaWRlbnRpdHk6IElkZW50aXR5LFxuICAgICAgbWFwOiBJZGVudGl0eU1hcDxJZGVudGl0eSwgTW9kZWw+XG4gICAgKSA9PiB2b2lkLFxuICAgIHRoaXNBcmc/OiB1bmtub3duXG4gICk6IHZvaWQge1xuICAgIGZvciAobGV0IFtpZGVudGl0eSwgcmVjb3JkXSBvZiB0aGlzKSB7XG4gICAgICBjYWxsYmFja0ZuLmNhbGwodGhpc0FyZywgcmVjb3JkLCBpZGVudGl0eSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLnNpemU7XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0lkZW50aXR5TWFwJztcbiAgfVxufVxuIl19