Buckets:

imerfanrajabee's picture
download
raw
1.78 kB
/**
* @license
* Copyright 2021 Google LLC
* SPDX-License-Identifier: BSD-3-Clause
*/
/**
* A simple class which stores a value, and triggers registered callbacks when
* the value is changed via its setter.
*
* An implementor might use other observable patterns such as MobX or Redux to
* get behavior like this. But this is a pretty minimal approach that will
* likely work for a number of use cases.
*/
export class ValueNotifier {
get value() {
return this._value;
}
set value(v) {
this.setValue(v);
}
setValue(v, force = false) {
const update = force || !Object.is(v, this._value);
this._value = v;
if (update) {
this.updateObservers();
}
}
constructor(defaultValue) {
this.subscriptions = new Map();
this.updateObservers = () => {
for (const [callback, { disposer }] of this.subscriptions) {
callback(this._value, disposer);
}
};
if (defaultValue !== undefined) {
this.value = defaultValue;
}
}
addCallback(callback, consumerHost, subscribe) {
if (!subscribe) {
// just call the callback once and we're done
callback(this.value);
return;
}
if (!this.subscriptions.has(callback)) {
this.subscriptions.set(callback, {
disposer: () => {
this.subscriptions.delete(callback);
},
consumerHost,
});
}
const { disposer } = this.subscriptions.get(callback);
callback(this.value, disposer);
}
clearCallbacks() {
this.subscriptions.clear();
}
}
//# sourceMappingURL=value-notifier.js.map

Xet Storage Details

Size:
1.78 kB
·
Xet hash:
9447fe5909e299a3ebac9c0383ee23447cc59d96160ce7124ac9b13d2fb1d0d2

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.