UNPKG

@orbit/identity-map

Version:

Orbit identity map to manage model instances.

68 lines 7.84 kB
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