@orbit/core
Version:
Core library for Orbit - a flexible data access and synchronization layer.
86 lines • 9.68 kB
JavaScript
;
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=