Don't re-freeze AsyncStore's state all the time
This commit is contained in:
parent
d593d24aea
commit
0ef6696c0a
1 changed files with 4 additions and 4 deletions
|
@ -42,7 +42,7 @@ export const UPDATE_EVENT = "update";
|
||||||
* help prevent lock conflicts.
|
* help prevent lock conflicts.
|
||||||
*/
|
*/
|
||||||
export abstract class AsyncStore<T extends Object> extends EventEmitter {
|
export abstract class AsyncStore<T extends Object> extends EventEmitter {
|
||||||
private storeState: T;
|
private storeState: Readonly<T>;
|
||||||
private lock = new AwaitLock();
|
private lock = new AwaitLock();
|
||||||
private readonly dispatcherRef: string;
|
private readonly dispatcherRef: string;
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ export abstract class AsyncStore<T extends Object> extends EventEmitter {
|
||||||
* The current state of the store. Cannot be mutated.
|
* The current state of the store. Cannot be mutated.
|
||||||
*/
|
*/
|
||||||
protected get state(): T {
|
protected get state(): T {
|
||||||
return Object.freeze(this.storeState);
|
return this.storeState;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -79,7 +79,7 @@ export abstract class AsyncStore<T extends Object> extends EventEmitter {
|
||||||
protected async updateState(newState: T | Object) {
|
protected async updateState(newState: T | Object) {
|
||||||
await this.lock.acquireAsync();
|
await this.lock.acquireAsync();
|
||||||
try {
|
try {
|
||||||
this.storeState = Object.assign(<T>{}, this.storeState, newState);
|
this.storeState = Object.freeze(Object.assign(<T>{}, this.storeState, newState));
|
||||||
this.emit(UPDATE_EVENT, this);
|
this.emit(UPDATE_EVENT, this);
|
||||||
} finally {
|
} finally {
|
||||||
await this.lock.release();
|
await this.lock.release();
|
||||||
|
@ -94,7 +94,7 @@ export abstract class AsyncStore<T extends Object> extends EventEmitter {
|
||||||
protected async reset(newState: T | Object = null, quiet = false) {
|
protected async reset(newState: T | Object = null, quiet = false) {
|
||||||
await this.lock.acquireAsync();
|
await this.lock.acquireAsync();
|
||||||
try {
|
try {
|
||||||
this.storeState = <T>(newState || {});
|
this.storeState = Object.freeze(<T>(newState || {}));
|
||||||
if (!quiet) this.emit(UPDATE_EVENT, this);
|
if (!quiet) this.emit(UPDATE_EVENT, this);
|
||||||
} finally {
|
} finally {
|
||||||
await this.lock.release();
|
await this.lock.release();
|
||||||
|
|
Loading…
Reference in a new issue