UNPKG

@orbit/coordinator

Version:

A coordinator and set of coordination strategies for managing data flow and keeping @orbit/data sources in sync.

59 lines 7.69 kB
import { Orbit, Assertion } from '@orbit/core'; const { assert } = Orbit; export class Strategy { constructor(options = {}) { this._sources = []; if (options.name) { this._name = options.name; } else { assert('Strategy requires a name', false); } this._sourceNames = options.sources; this._logPrefix = options.logPrefix || `[${this._name}]`; this._logLevel = this._customLogLevel = options.logLevel; } async activate(coordinator, options = {}) { this._coordinator = coordinator; if (this._customLogLevel === undefined) { this._logLevel = options.logLevel; } if (this._sourceNames) { this._sources = this._sourceNames.map((name) => coordinator.getSource(name)); } else { this._sources = coordinator.sources; } } async deactivate() { this._coordinator = undefined; } async beforeSourceActivation() { } async afterSourceActivation() { } async beforeSourceDeactivation() { } async afterSourceDeactivation() { } get name() { return this._name; } get coordinator() { return this._coordinator; } get sources() { return this._sources; } get logPrefix() { return this._logPrefix; } get logLevel() { return this._logLevel; } getSourceName(source) { if (source.name) { return source.name; } else { throw new Assertion(`Sources require a 'name' to be used by a coordination strategy.`); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJL0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztBQStCekIsTUFBTSxPQUFnQixRQUFRO0lBUzVCLFlBQVksVUFBMkIsRUFBRTtRQUwvQixhQUFRLEdBQWEsRUFBRSxDQUFDO1FBTWhDLElBQUksT0FBTyxDQUFDLElBQUksRUFBRTtZQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDM0I7YUFBTTtZQUNMLE1BQU0sQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMzQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUM7UUFDekQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDM0QsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQ1osV0FBd0IsRUFDeEIsVUFBNkIsRUFBRTtRQUUvQixJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztRQUVoQyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztTQUNuQztRQUVELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDN0MsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FDNUIsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQixLQUFtQixDQUFDO0lBQ2hELEtBQUssQ0FBQyxxQkFBcUIsS0FBbUIsQ0FBQztJQUUvQyxLQUFLLENBQUMsd0JBQXdCLEtBQW1CLENBQUM7SUFDbEQsS0FBSyxDQUFDLHVCQUF1QixLQUFtQixDQUFDO0lBRWpELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFUyxhQUFhLENBQUMsTUFBYztRQUNwQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDZixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDcEI7YUFBTTtZQUNMLE1BQU0sSUFBSSxTQUFTLENBQ2pCLGlFQUFpRSxDQUNsRSxDQUFDO1NBQ0g7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcmJpdCwgQXNzZXJ0aW9uIH0gZnJvbSAnQG9yYml0L2NvcmUnO1xuaW1wb3J0IHsgU291cmNlIH0gZnJvbSAnQG9yYml0L2RhdGEnO1xuaW1wb3J0IHsgQ29vcmRpbmF0b3IsIEFjdGl2YXRpb25PcHRpb25zLCBMb2dMZXZlbCB9IGZyb20gJy4vY29vcmRpbmF0b3InO1xuXG5jb25zdCB7IGFzc2VydCB9ID0gT3JiaXQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyYXRlZ3lPcHRpb25zIHtcbiAgLyoqXG4gICAqIE5hbWUgb2Ygc3RyYXRlZ3kuXG4gICAqXG4gICAqIFVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBzdHJhdGVneSBpbiBhIGNvb3JkaW5hdG9yJ3MgY29sbGVjdGlvbi5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lcyBvZiBzb3VyY2VzIHRvIGluY2x1ZGUgaW4gdGhpcyBzdHJhdGVneS4gTGVhdmUgdW5kZWZpbmVkXG4gICAqIHRvIGluY2x1ZGUgYWxsIHNvdXJjZXMgcmVnaXN0ZXJlZCB3aXRoIGEgY29vcmRpbmF0b3IuXG4gICAqL1xuICBzb3VyY2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdG8gdXNlIGZvciBsb2dnaW5nIGZyb20gdGhpcyBzdHJhdGVneS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYFske25hbWV9XWAuXG4gICAqL1xuICBsb2dQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lmaWMgbG9nIGxldmVsIGZvciB0aGlzIHN0cmF0ZWd5LlxuICAgKlxuICAgKiBPdmVycmlkZXMgdGhlIGxvZyBsZXZlbCB1c2VkIHdoZW4gYWN0aXZhdGluZyB0aGUgY29vcmRpbmF0b3IuXG4gICAqL1xuICBsb2dMZXZlbD86IExvZ0xldmVsO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3RyYXRlZ3kge1xuICBwcm90ZWN0ZWQgX25hbWUhOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfY29vcmRpbmF0b3I/OiBDb29yZGluYXRvcjtcbiAgcHJvdGVjdGVkIF9zb3VyY2VOYW1lcz86IHN0cmluZ1tdO1xuICBwcm90ZWN0ZWQgX3NvdXJjZXM6IFNvdXJjZVtdID0gW107XG4gIHByb3RlY3RlZCBfY3VzdG9tTG9nTGV2ZWw/OiBMb2dMZXZlbDtcbiAgcHJvdGVjdGVkIF9sb2dMZXZlbD86IExvZ0xldmVsO1xuICBwcm90ZWN0ZWQgX2xvZ1ByZWZpeDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFN0cmF0ZWd5T3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgdGhpcy5fbmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KCdTdHJhdGVneSByZXF1aXJlcyBhIG5hbWUnLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fc291cmNlTmFtZXMgPSBvcHRpb25zLnNvdXJjZXM7XG4gICAgdGhpcy5fbG9nUHJlZml4ID0gb3B0aW9ucy5sb2dQcmVmaXggfHwgYFske3RoaXMuX25hbWV9XWA7XG4gICAgdGhpcy5fbG9nTGV2ZWwgPSB0aGlzLl9jdXN0b21Mb2dMZXZlbCA9IG9wdGlvbnMubG9nTGV2ZWw7XG4gIH1cblxuICBhc3luYyBhY3RpdmF0ZShcbiAgICBjb29yZGluYXRvcjogQ29vcmRpbmF0b3IsXG4gICAgb3B0aW9uczogQWN0aXZhdGlvbk9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jb29yZGluYXRvciA9IGNvb3JkaW5hdG9yO1xuXG4gICAgaWYgKHRoaXMuX2N1c3RvbUxvZ0xldmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2xvZ0xldmVsID0gb3B0aW9ucy5sb2dMZXZlbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc291cmNlTmFtZXMpIHtcbiAgICAgIHRoaXMuX3NvdXJjZXMgPSB0aGlzLl9zb3VyY2VOYW1lcy5tYXAoKG5hbWUpID0+XG4gICAgICAgIGNvb3JkaW5hdG9yLmdldFNvdXJjZShuYW1lKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc291cmNlcyA9IGNvb3JkaW5hdG9yLnNvdXJjZXM7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVhY3RpdmF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jb29yZGluYXRvciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGJlZm9yZVNvdXJjZUFjdGl2YXRpb24oKTogUHJvbWlzZTx2b2lkPiB7fVxuICBhc3luYyBhZnRlclNvdXJjZUFjdGl2YXRpb24oKTogUHJvbWlzZTx2b2lkPiB7fVxuXG4gIGFzeW5jIGJlZm9yZVNvdXJjZURlYWN0aXZhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHt9XG4gIGFzeW5jIGFmdGVyU291cmNlRGVhY3RpdmF0aW9uKCk6IFByb21pc2U8dm9pZD4ge31cblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgZ2V0IGNvb3JkaW5hdG9yKCk6IENvb3JkaW5hdG9yIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fY29vcmRpbmF0b3I7XG4gIH1cblxuICBnZXQgc291cmNlcygpOiBTb3VyY2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXM7XG4gIH1cblxuICBnZXQgbG9nUHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ1ByZWZpeDtcbiAgfVxuXG4gIGdldCBsb2dMZXZlbCgpOiBMb2dMZXZlbCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ0xldmVsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNvdXJjZU5hbWUoc291cmNlOiBTb3VyY2UpOiBzdHJpbmcge1xuICAgIGlmIChzb3VyY2UubmFtZSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5uYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uKFxuICAgICAgICBgU291cmNlcyByZXF1aXJlIGEgJ25hbWUnIHRvIGJlIHVzZWQgYnkgYSBjb29yZGluYXRpb24gc3RyYXRlZ3kuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==