UNPKG

@orbit/core

Version:

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

83 lines 9.59 kB
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; }; import { evented } from './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 ], Bucket); export { Bucket }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1Y2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFXLE1BQU0sV0FBVyxDQUFDO0FBOEI3Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxJQUFzQixNQUFNLEdBQTVCLE1BQXNCLE1BQU07SUFLMUIsWUFBWSxXQUEyQixFQUFFO1FBQ3ZDLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDbEMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7U0FDdEI7UUFFRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ3BDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBc0JEOztPQUVHO0lBQ0gsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLFdBQTJCLEVBQUU7UUFDbkMsSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUNsQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUNwQyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ08sS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUF3QjtRQUNyRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztTQUM1QjtRQUNELElBQUksUUFBUSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7U0FDbEM7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQTFGcUIsTUFBTTtJQUQzQixPQUFPO0dBQ2MsTUFBTSxDQTBGM0I7U0ExRnFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBldmVudGVkLCBFdmVudGVkIH0gZnJvbSAnLi9ldmVudGVkJztcblxuLyoqXG4gKiBTZXR0aW5ncyB1c2VkIHRvIGluc3RhbnRpYXRlIGFuZC9vciB1cGdyYWRlIGEgYEJ1Y2tldGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0U2V0dGluZ3Mge1xuICAvKipcbiAgICogTmFtZSB1c2VkIGZvciB0cmFja2luZyBhbmQgZGVidWdnaW5nIGEgYnVja2V0IGluc3RhbmNlLlxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWVzcGFjZSB1c2VkIGJ5IHRoZSBidWNrZXQgd2hlbiBhY2Nlc3NpbmcgYW55IGl0ZW1zLlxuICAgKlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggb25lIGJ1Y2tldCdzIGNvbnRlbnRzIGZyb20gYW5vdGhlci5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgYnVja2V0LlxuICAgKlxuICAgKiBVc2VkIHRvIGlkZW50aWZ5IHRoZSB2ZXJzaW9uIG9mIHRoZSBidWNrZXQncyBzY2hlbWEgYW5kIHRodXMgbWlncmF0ZSBpdFxuICAgKiBhcyBuZWVkZWQuXG4gICAqL1xuICB2ZXJzaW9uPzogbnVtYmVyO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldDxJdGVtPiBleHRlbmRzIEV2ZW50ZWQ8J3VwZ3JhZGUnPiB7fVxuXG4vKipcbiAqIEJ1Y2tldHMgY2FuIHBlcnNpc3Qgc3RhdGUuIFRoZSBiYXNlIGBCdWNrZXRgIGNsYXNzIGlzIGFic3RyYWN0IGFuZCBzaG91bGQgYmVcbiAqIGV4dGVuZGVkIHRvIGNyZWF0ZSBidWNrZXRzIHdpdGggZGlmZmVyZW50IHBlcnNpc3RlbmNlIHN0cmF0ZWdpZXMuXG4gKlxuICogQnVja2V0cyBoYXZlIGEgc2ltcGxlIG1hcC1saWtlIGludGVyZmFjZSB3aXRoIG1ldGhvZHMgbGlrZSBgZ2V0SXRlbWAsXG4gKiBgc2V0SXRlbWAsIGFuZCBgcmVtb3ZlSXRlbWAuIEFsbCBtZXRob2RzIHJldHVybiBwcm9taXNlcyB0byBlbmFibGUgdXNhZ2Ugd2l0aFxuICogYXN5bmNocm9ub3VzIHN0b3JlcyBsaWtlIEluZGV4ZWREQi5cbiAqXG4gKiBCdWNrZXRzIGNhbiBiZSBhc3NpZ25lZCBhIHVuaXF1ZSBgbmFtZXNwYWNlYCBpbiBvcmRlciB0byBhdm9pZCBjb2xsaXNpb25zLlxuICpcbiAqIEJ1Y2tldHMgY2FuIGJlIGFzc2lnbmVkIGEgdmVyc2lvbiwgYW5kIGNhbiBiZSBcInVwZ3JhZGVkXCIgdG8gYSBuZXcgdmVyc2lvbi5cbiAqIFRoZSB1cGdyYWRlIHByb2Nlc3MgYWxsb3dzIGJ1Y2tldHMgdG8gbWlncmF0ZSB0aGVpciBkYXRhIGJldHdlZW4gdmVyc2lvbnMuXG4gKi9cbkBldmVudGVkXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnVja2V0PEl0ZW0gPSB1bmtub3duPiB7XG4gIHByaXZhdGUgX25hbWU/OiBzdHJpbmc7XG4gIHByaXZhdGUgX25hbWVzcGFjZSE6IHN0cmluZztcbiAgcHJpdmF0ZSBfdmVyc2lvbiE6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihzZXR0aW5nczogQnVja2V0U2V0dGluZ3MgPSB7fSkge1xuICAgIGlmIChzZXR0aW5ncy52ZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNldHRpbmdzLnZlcnNpb24gPSAxO1xuICAgIH1cblxuICAgIGlmIChzZXR0aW5ncy5uYW1lc3BhY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0dGluZ3MubmFtZXNwYWNlID0gJ29yYml0LWJ1Y2tldCc7XG4gICAgfVxuXG4gICAgdGhpcy5fYXBwbHlTZXR0aW5ncyhzZXR0aW5ncyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFuIGl0ZW0gZnJvbSB0aGUgYnVja2V0LlxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0SXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8SXRlbT47XG5cbiAgLyoqXG4gICAqIFN0b3JlcyBhbiBpdGVtIGluIHRoZSBidWNrZXQuXG4gICAqL1xuICBhYnN0cmFjdCBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogSXRlbSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYW4gaXRlbSBmcm9tIHRoZSBidWNrZXQuXG4gICAqL1xuICBhYnN0cmFjdCByZW1vdmVJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBpdGVtcyBmcm9tIHRoZSBidWNrZXQuXG4gICAqL1xuICBhYnN0cmFjdCBjbGVhcigpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBOYW1lIHVzZWQgZm9yIHRyYWNraW5nIGFuZCBkZWJ1Z2dpbmcgYSBidWNrZXQgaW5zdGFuY2UuXG4gICAqL1xuICBnZXQgbmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lc3BhY2UgdXNlZCBieSB0aGUgYnVja2V0IHdoZW4gYWNjZXNzaW5nIGFueSBpdGVtcy5cbiAgICpcbiAgICogVGhpcyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIG9uZSBidWNrZXQncyBjb250ZW50cyBmcm9tIGFub3RoZXIuXG4gICAqL1xuICBnZXQgbmFtZXNwYWNlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWVzcGFjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBidWNrZXQuXG4gICAqXG4gICAqIFRoaXMgaXMgcmVhZC1vbmx5LiBUbyBjaGFuZ2UgdmVyc2lvbnMsIGB1cGdyYWRlYCBzaG91bGQgYmUgaW52b2tlZC5cbiAgICovXG4gIGdldCB2ZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3ZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogVXBncmFkZXMgQnVja2V0IHRvIGEgbmV3IHZlcnNpb24gd2l0aCBuZXcgc2V0dGluZ3MuXG4gICAqXG4gICAqIFNldHRpbmdzLCBiZXlvbmQgYHZlcnNpb25gLCBhcmUgYnVja2V0LXNwZWNpZmljLlxuICAgKi9cbiAgdXBncmFkZShzZXR0aW5nczogQnVja2V0U2V0dGluZ3MgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChzZXR0aW5ncy52ZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHNldHRpbmdzLnZlcnNpb24gPSB0aGlzLl92ZXJzaW9uICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2FwcGx5U2V0dGluZ3Moc2V0dGluZ3MpLnRoZW4oKCkgPT5cbiAgICAgIHRoaXMuZW1pdCgndXBncmFkZScsIHRoaXMuX3ZlcnNpb24pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHNldHRpbmdzIHBhc3NlZCBmcm9tIGEgYGNvbnN0cnVjdG9yYCBvciBgdXBncmFkZWAuXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgX2FwcGx5U2V0dGluZ3Moc2V0dGluZ3M6IEJ1Y2tldFNldHRpbmdzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHNldHRpbmdzLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fbmFtZSA9IHNldHRpbmdzLm5hbWU7XG4gICAgfVxuICAgIGlmIChzZXR0aW5ncy5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fbmFtZXNwYWNlID0gc2V0dGluZ3MubmFtZXNwYWNlO1xuICAgIH1cbiAgICBpZiAoc2V0dGluZ3MudmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl92ZXJzaW9uID0gc2V0dGluZ3MudmVyc2lvbjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==