UNPKG

@orbit/core

Version:

Core library for Orbit - a flexible data access and synchronization layer.

86 lines 9.68 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Bucket = void 0; const evented_1 = require("./evented"); /** * Buckets can persist state. The base `Bucket` class is abstract and should be * extended to create buckets with different persistence strategies. * * Buckets have a simple map-like interface with methods like `getItem`, * `setItem`, and `removeItem`. All methods return promises to enable usage with * asynchronous stores like IndexedDB. * * Buckets can be assigned a unique `namespace` in order to avoid collisions. * * Buckets can be assigned a version, and can be "upgraded" to a new version. * The upgrade process allows buckets to migrate their data between versions. */ let Bucket = class Bucket { constructor(settings = {}) { if (settings.version === undefined) { settings.version = 1; } if (settings.namespace === undefined) { settings.namespace = 'orbit-bucket'; } this._applySettings(settings); } /** * Name used for tracking and debugging a bucket instance. */ get name() { return this._name; } /** * The namespace used by the bucket when accessing any items. * * This is used to distinguish one bucket's contents from another. */ get namespace() { return this._namespace; } /** * The current version of the bucket. * * This is read-only. To change versions, `upgrade` should be invoked. */ get version() { return this._version; } /** * Upgrades Bucket to a new version with new settings. * * Settings, beyond `version`, are bucket-specific. */ upgrade(settings = {}) { if (settings.version === undefined) { settings.version = this._version + 1; } return this._applySettings(settings).then(() => this.emit('upgrade', this._version)); } /** * Applies settings passed from a `constructor` or `upgrade`. */ async _applySettings(settings) { if (settings.name !== undefined) { this._name = settings.name; } if (settings.namespace !== undefined) { this._namespace = settings.namespace; } if (settings.version !== undefined) { this._version = settings.version; } } }; Bucket = __decorate([ evented_1.evented ], Bucket); exports.Bucket = Bucket; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1Y2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSx1Q0FBNkM7QUE4QjdDOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILElBQXNCLE1BQU0sR0FBNUIsTUFBc0IsTUFBTTtJQUsxQixZQUFZLFdBQTJCLEVBQUU7UUFDdkMsSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUNsQyxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUVELElBQUksUUFBUSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDcEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7U0FDckM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFzQkQ7O09BRUc7SUFDSCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsV0FBMkIsRUFBRTtRQUNuQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQ2xDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7U0FDdEM7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ3BDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDTyxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQXdCO1FBQ3JELElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7U0FDdEM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztTQUNsQztJQUNILENBQUM7Q0FDRixDQUFBO0FBMUZxQixNQUFNO0lBRDNCLGlCQUFPO0dBQ2MsTUFBTSxDQTBGM0I7QUExRnFCLHdCQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXZlbnRlZCwgRXZlbnRlZCB9IGZyb20gJy4vZXZlbnRlZCc7XG5cbi8qKlxuICogU2V0dGluZ3MgdXNlZCB0byBpbnN0YW50aWF0ZSBhbmQvb3IgdXBncmFkZSBhIGBCdWNrZXRgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIE5hbWUgdXNlZCBmb3IgdHJhY2tpbmcgYW5kIGRlYnVnZ2luZyBhIGJ1Y2tldCBpbnN0YW5jZS5cbiAgICovXG4gIG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2UgdXNlZCBieSB0aGUgYnVja2V0IHdoZW4gYWNjZXNzaW5nIGFueSBpdGVtcy5cbiAgICpcbiAgICogVGhpcyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIG9uZSBidWNrZXQncyBjb250ZW50cyBmcm9tIGFub3RoZXIuXG4gICAqL1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGJ1Y2tldC5cbiAgICpcbiAgICogVXNlZCB0byBpZGVudGlmeSB0aGUgdmVyc2lvbiBvZiB0aGUgYnVja2V0J3Mgc2NoZW1hIGFuZCB0aHVzIG1pZ3JhdGUgaXRcbiAgICogYXMgbmVlZGVkLlxuICAgKi9cbiAgdmVyc2lvbj86IG51bWJlcjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBCdWNrZXQ8SXRlbT4gZXh0ZW5kcyBFdmVudGVkPCd1cGdyYWRlJz4ge31cblxuLyoqXG4gKiBCdWNrZXRzIGNhbiBwZXJzaXN0IHN0YXRlLiBUaGUgYmFzZSBgQnVja2V0YCBjbGFzcyBpcyBhYnN0cmFjdCBhbmQgc2hvdWxkIGJlXG4gKiBleHRlbmRlZCB0byBjcmVhdGUgYnVja2V0cyB3aXRoIGRpZmZlcmVudCBwZXJzaXN0ZW5jZSBzdHJhdGVnaWVzLlxuICpcbiAqIEJ1Y2tldHMgaGF2ZSBhIHNpbXBsZSBtYXAtbGlrZSBpbnRlcmZhY2Ugd2l0aCBtZXRob2RzIGxpa2UgYGdldEl0ZW1gLFxuICogYHNldEl0ZW1gLCBhbmQgYHJlbW92ZUl0ZW1gLiBBbGwgbWV0aG9kcyByZXR1cm4gcHJvbWlzZXMgdG8gZW5hYmxlIHVzYWdlIHdpdGhcbiAqIGFzeW5jaHJvbm91cyBzdG9yZXMgbGlrZSBJbmRleGVkREIuXG4gKlxuICogQnVja2V0cyBjYW4gYmUgYXNzaWduZWQgYSB1bmlxdWUgYG5hbWVzcGFjZWAgaW4gb3JkZXIgdG8gYXZvaWQgY29sbGlzaW9ucy5cbiAqXG4gKiBCdWNrZXRzIGNhbiBiZSBhc3NpZ25lZCBhIHZlcnNpb24sIGFuZCBjYW4gYmUgXCJ1cGdyYWRlZFwiIHRvIGEgbmV3IHZlcnNpb24uXG4gKiBUaGUgdXBncmFkZSBwcm9jZXNzIGFsbG93cyBidWNrZXRzIHRvIG1pZ3JhdGUgdGhlaXIgZGF0YSBiZXR3ZWVuIHZlcnNpb25zLlxuICovXG5AZXZlbnRlZFxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJ1Y2tldDxJdGVtID0gdW5rbm93bj4ge1xuICBwcml2YXRlIF9uYW1lPzogc3RyaW5nO1xuICBwcml2YXRlIF9uYW1lc3BhY2UhOiBzdHJpbmc7XG4gIHByaXZhdGUgX3ZlcnNpb24hOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Ioc2V0dGluZ3M6IEJ1Y2tldFNldHRpbmdzID0ge30pIHtcbiAgICBpZiAoc2V0dGluZ3MudmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXR0aW5ncy52ZXJzaW9uID0gMTtcbiAgICB9XG5cbiAgICBpZiAoc2V0dGluZ3MubmFtZXNwYWNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNldHRpbmdzLm5hbWVzcGFjZSA9ICdvcmJpdC1idWNrZXQnO1xuICAgIH1cblxuICAgIHRoaXMuX2FwcGx5U2V0dGluZ3Moc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbiBpdGVtIGZyb20gdGhlIGJ1Y2tldC5cbiAgICovXG4gIGFic3RyYWN0IGdldEl0ZW0oa2V5OiBzdHJpbmcpOiBQcm9taXNlPEl0ZW0+O1xuXG4gIC8qKlxuICAgKiBTdG9yZXMgYW4gaXRlbSBpbiB0aGUgYnVja2V0LlxuICAgKi9cbiAgYWJzdHJhY3Qgc2V0SXRlbShrZXk6IHN0cmluZywgdmFsdWU6IEl0ZW0pOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuIGl0ZW0gZnJvbSB0aGUgYnVja2V0LlxuICAgKi9cbiAgYWJzdHJhY3QgcmVtb3ZlSXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgaXRlbXMgZnJvbSB0aGUgYnVja2V0LlxuICAgKi9cbiAgYWJzdHJhY3QgY2xlYXIoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogTmFtZSB1c2VkIGZvciB0cmFja2luZyBhbmQgZGVidWdnaW5nIGEgYnVja2V0IGluc3RhbmNlLlxuICAgKi9cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZXNwYWNlIHVzZWQgYnkgdGhlIGJ1Y2tldCB3aGVuIGFjY2Vzc2luZyBhbnkgaXRlbXMuXG4gICAqXG4gICAqIFRoaXMgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBvbmUgYnVja2V0J3MgY29udGVudHMgZnJvbSBhbm90aGVyLlxuICAgKi9cbiAgZ2V0IG5hbWVzcGFjZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9uYW1lc3BhY2U7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgYnVja2V0LlxuICAgKlxuICAgKiBUaGlzIGlzIHJlYWQtb25seS4gVG8gY2hhbmdlIHZlcnNpb25zLCBgdXBncmFkZWAgc2hvdWxkIGJlIGludm9rZWQuXG4gICAqL1xuICBnZXQgdmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92ZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZ3JhZGVzIEJ1Y2tldCB0byBhIG5ldyB2ZXJzaW9uIHdpdGggbmV3IHNldHRpbmdzLlxuICAgKlxuICAgKiBTZXR0aW5ncywgYmV5b25kIGB2ZXJzaW9uYCwgYXJlIGJ1Y2tldC1zcGVjaWZpYy5cbiAgICovXG4gIHVwZ3JhZGUoc2V0dGluZ3M6IEJ1Y2tldFNldHRpbmdzID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoc2V0dGluZ3MudmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXR0aW5ncy52ZXJzaW9uID0gdGhpcy5fdmVyc2lvbiArIDE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hcHBseVNldHRpbmdzKHNldHRpbmdzKS50aGVuKCgpID0+XG4gICAgICB0aGlzLmVtaXQoJ3VwZ3JhZGUnLCB0aGlzLl92ZXJzaW9uKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBzZXR0aW5ncyBwYXNzZWQgZnJvbSBhIGBjb25zdHJ1Y3RvcmAgb3IgYHVwZ3JhZGVgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIF9hcHBseVNldHRpbmdzKHNldHRpbmdzOiBCdWNrZXRTZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChzZXR0aW5ncy5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX25hbWUgPSBzZXR0aW5ncy5uYW1lO1xuICAgIH1cbiAgICBpZiAoc2V0dGluZ3MubmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX25hbWVzcGFjZSA9IHNldHRpbmdzLm5hbWVzcGFjZTtcbiAgICB9XG4gICAgaWYgKHNldHRpbmdzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fdmVyc2lvbiA9IHNldHRpbmdzLnZlcnNpb247XG4gICAgfVxuICB9XG59XG4iXX0=