@giveback007/util-lib 2.1.3 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/@state.types.d.ts +16 -0
- package/dist/@state.types.js +3 -0
- package/dist/@state.types.js.map +1 -0
- package/dist/@types.d.ts +10 -11
- package/dist/general.d.ts +0 -2
- package/dist/general.js +1 -4
- package/dist/general.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/number.d.ts +1 -8
- package/dist/number.js +3 -11
- package/dist/number.js.map +1 -1
- package/dist/state-manager.d.ts +74 -0
- package/dist/state-manager.js +227 -0
- package/dist/state-manager.js.map +1 -0
- package/dist/time.d.ts +134 -3
- package/dist/time.js +48 -8
- package/dist/time.js.map +1 -1
- package/package.json +1 -1
- package/src/@state.types.ts +19 -0
- package/src/@types.ts +28 -18
- package/src/general.ts +0 -4
- package/src/index.ts +4 -2
- package/src/number.ts +2 -11
- package/src/state-manager.ts +301 -0
- package/src/time.ts +50 -8
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type Immutable<T> = {
|
|
2
|
+
readonly [K in keyof T]: Immutable<T[K]>;
|
|
3
|
+
};
|
|
4
|
+
export type Action<T extends string, D = undefined> = Readonly<D extends undefined ? {
|
|
5
|
+
type: T;
|
|
6
|
+
} : {
|
|
7
|
+
type: T;
|
|
8
|
+
data: D;
|
|
9
|
+
}>;
|
|
10
|
+
export type stateSubFct<S> = (s: S, prev: S | null) => any;
|
|
11
|
+
export type actSubFct<A extends Action<any, any>, S = any> = (a: A, s: S) => any;
|
|
12
|
+
export type lsOptions<P> = {
|
|
13
|
+
id: string;
|
|
14
|
+
useKeys?: P[];
|
|
15
|
+
ignoreKeys?: P[];
|
|
16
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"@state.types.js","sourceRoot":"","sources":["../src/@state.types.ts"],"names":[],"mappings":""}
|
package/dist/@types.d.ts
CHANGED
|
@@ -53,17 +53,16 @@ export type TimeObj = {
|
|
|
53
53
|
ms: num;
|
|
54
54
|
wDay: DayOfWeek;
|
|
55
55
|
};
|
|
56
|
-
export type
|
|
57
|
-
y: num
|
|
58
|
-
m?: num
|
|
59
|
-
d?: num
|
|
60
|
-
h?: num
|
|
61
|
-
min?: num
|
|
62
|
-
sec?: num
|
|
63
|
-
ms?: num
|
|
64
|
-
|
|
65
|
-
export type
|
|
66
|
-
export type AnyDate = string | number | Date | TimeObj | PartialTimeObj | TimeArr;
|
|
56
|
+
export type TimeArr = [
|
|
57
|
+
y: num,
|
|
58
|
+
m?: num,
|
|
59
|
+
d?: num,
|
|
60
|
+
h?: num,
|
|
61
|
+
min?: num,
|
|
62
|
+
sec?: num,
|
|
63
|
+
ms?: num
|
|
64
|
+
];
|
|
65
|
+
export type AnyDate = string | number | Date | TimeObj | TimeArr;
|
|
67
66
|
export type Dict<T> = {
|
|
68
67
|
[id: string]: T;
|
|
69
68
|
};
|
package/dist/general.d.ts
CHANGED
|
@@ -17,8 +17,6 @@ maxTimes?: number) => {
|
|
|
17
17
|
/** Stop the interval */
|
|
18
18
|
stop: () => void;
|
|
19
19
|
};
|
|
20
|
-
/** A promise that waits `ms` amount of milliseconds to execute */
|
|
21
|
-
export declare const wait: (ms: number) => Promise<void>;
|
|
22
20
|
export declare function unsubAll(objOrArr: AnyObj | any[], unsubName?: string): void;
|
|
23
21
|
/**
|
|
24
22
|
* Alternative to console.log in that it will clone the obj.
|
package/dist/general.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.debounceById = exports.debounce = exports.randomColorHex = exports.uuid = exports.cloneLog = exports.
|
|
3
|
+
exports.debounceById = exports.debounce = exports.randomColorHex = exports.uuid = exports.cloneLog = exports.interval = void 0;
|
|
4
4
|
exports.unsubAll = unsubAll;
|
|
5
5
|
exports.type = type;
|
|
6
6
|
exports.assertType = assertType;
|
|
@@ -41,9 +41,6 @@ maxTimes = Infinity) => {
|
|
|
41
41
|
};
|
|
42
42
|
};
|
|
43
43
|
exports.interval = interval;
|
|
44
|
-
/** A promise that waits `ms` amount of milliseconds to execute */
|
|
45
|
-
const wait = (ms) => new Promise((res) => setTimeout(() => res(), ms));
|
|
46
|
-
exports.wait = wait;
|
|
47
44
|
const usubAllFunct = (x, unsubName = 'unsubscribe') => (0, _1.isType)(x, 'object')
|
|
48
45
|
&&
|
|
49
46
|
(0, _1.hasKey)(x, unsubName) ? x[unsubName]() : null;
|
package/dist/general.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"general.js","sourceRoot":"","sources":["../src/general.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"general.js","sourceRoot":"","sources":["../src/general.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
export * from './@types';
|
|
2
|
+
export * from './@state.types';
|
|
2
3
|
export * from './array';
|
|
3
4
|
export * from './clone';
|
|
4
5
|
export * from './equality';
|
|
5
6
|
export * from './general';
|
|
7
|
+
export * from './http';
|
|
6
8
|
export * from './iterate';
|
|
7
9
|
export * from './number';
|
|
8
10
|
export * from './object';
|
|
11
|
+
export * from './state-manager';
|
|
9
12
|
export * from './string';
|
|
10
13
|
export * from './test';
|
|
11
14
|
export * from './time';
|
|
12
|
-
export * from './http';
|
package/dist/index.js
CHANGED
|
@@ -15,15 +15,17 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./@types"), exports);
|
|
18
|
+
__exportStar(require("./@state.types"), exports);
|
|
18
19
|
__exportStar(require("./array"), exports);
|
|
19
20
|
__exportStar(require("./clone"), exports);
|
|
20
21
|
__exportStar(require("./equality"), exports);
|
|
21
22
|
__exportStar(require("./general"), exports);
|
|
23
|
+
__exportStar(require("./http"), exports);
|
|
22
24
|
__exportStar(require("./iterate"), exports);
|
|
23
25
|
__exportStar(require("./number"), exports);
|
|
24
26
|
__exportStar(require("./object"), exports);
|
|
27
|
+
__exportStar(require("./state-manager"), exports);
|
|
25
28
|
__exportStar(require("./string"), exports);
|
|
26
29
|
__exportStar(require("./test"), exports);
|
|
27
30
|
__exportStar(require("./time"), exports);
|
|
28
|
-
__exportStar(require("./http"), exports);
|
|
29
31
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,0CAAwB;AACxB,0CAAwB;AACxB,6CAA2B;AAC3B,4CAA0B;AAC1B,4CAA0B;AAC1B,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,yCAAuB;AACvB,yCAAuB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,iDAA8B;AAC9B,0CAAwB;AACxB,0CAAwB;AACxB,6CAA2B;AAC3B,4CAA0B;AAC1B,yCAAuB;AACvB,4CAA0B;AAC1B,2CAAyB;AACzB,2CAAyB;AACzB,kDAAgC;AAChC,2CAAyB;AACzB,yCAAuB;AACvB,yCAAuB"}
|
package/dist/number.d.ts
CHANGED
|
@@ -18,14 +18,7 @@ export declare const average: (nArr: number[]) => number;
|
|
|
18
18
|
* decPlaces(1.1276, 2) //=> 1.13
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
|
-
export declare const
|
|
22
|
-
/**
|
|
23
|
-
* @example
|
|
24
|
-
* ```js
|
|
25
|
-
* numberWithCommas(1000000) //=> '1,000,000'
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
export declare const numberWithCommas: (n: number | string) => string;
|
|
21
|
+
export declare const numFixed: (n: number, fractionDigits: number) => number;
|
|
29
22
|
/**
|
|
30
23
|
* Takes a number || number[] and min & max, will generate a
|
|
31
24
|
* new random number.
|
package/dist/number.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.numFixed = exports.average = exports.rand = exports.randInt = void 0;
|
|
4
4
|
exports.newNum = newNum;
|
|
5
5
|
const _1 = require(".");
|
|
6
6
|
/**
|
|
@@ -26,16 +26,8 @@ exports.average = average;
|
|
|
26
26
|
* decPlaces(1.1276, 2) //=> 1.13
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
|
29
|
-
const
|
|
30
|
-
exports.
|
|
31
|
-
/**
|
|
32
|
-
* @example
|
|
33
|
-
* ```js
|
|
34
|
-
* numberWithCommas(1000000) //=> '1,000,000'
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
const numberWithCommas = (n) => n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
38
|
-
exports.numberWithCommas = numberWithCommas;
|
|
29
|
+
const numFixed = (n, fractionDigits) => parseFloat(n.toFixed(fractionDigits));
|
|
30
|
+
exports.numFixed = numFixed;
|
|
39
31
|
/**
|
|
40
32
|
* Takes a number || number[] and min & max, will generate a
|
|
41
33
|
* new random number.
|
package/dist/number.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number.js","sourceRoot":"","sources":["../src/number.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"number.js","sourceRoot":"","sources":["../src/number.ts"],"names":[],"mappings":";;;AAmCA,wBAmBC;AAtDD,wBAAgD;AAEhD;;;;;;GAMG;AACI,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAChD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAD3C,QAAA,OAAO,WACoC;AAEjD,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAC7C,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AADzB,QAAA,IAAI,QACqB;AAEtC,sDAAsD;AAC/C,MAAM,OAAO,GAAG,CAAC,IAAc,EAAE,EAAE,CACtC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAD7C,QAAA,OAAO,WACsC;AAE1D;;;;;;;;GAQG;AACI,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,cAAsB,EAAE,EAAE,CAC1D,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;AAD7B,QAAA,QAAQ,YACqB;AAE1C;;;GAGG;AACH,SAAgB,MAAM,CAClB,OAA0B,EAAE,GAAW,EAAE,GAAW;IAEpD,IAAI,GAAG,CAAC;IACR,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,IAAI,GAAkB,IAAA,SAAM,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAClD,IAAA,gBAAa,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;IAEjD,GAAG,CAAC;QACA,GAAG,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxB,IAAI,EAAE,CAAC;QAEP,IAAI,IAAI,GAAG,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;IAEpB,OAAO,GAAG,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { Action, actSubFct, lsOptions, stateSubFct } from './@state.types';
|
|
2
|
+
import { KeysOfValueType } from '.';
|
|
3
|
+
export declare class StateManager<State extends {}, Act extends Action<any, any> = Action<any, any>, Key extends Extract<keyof State, string> = Extract<keyof State, string>> {
|
|
4
|
+
private prevState;
|
|
5
|
+
private emittedState;
|
|
6
|
+
private state;
|
|
7
|
+
private readonly useLS;
|
|
8
|
+
private stateSubDict;
|
|
9
|
+
private actionSubDict;
|
|
10
|
+
private stateWasUpdated;
|
|
11
|
+
private keysChanged;
|
|
12
|
+
private throttledState;
|
|
13
|
+
private throttlersRunning;
|
|
14
|
+
/**
|
|
15
|
+
* The local storage takes an id, this id
|
|
16
|
+
* should be unique in order to ensure that the
|
|
17
|
+
* storage is unique to the given state object
|
|
18
|
+
*/
|
|
19
|
+
constructor(initialState: State, useLocalStorage?: lsOptions<Key>);
|
|
20
|
+
getState: () => State;
|
|
21
|
+
setState: (updateState: Partial<State>) => Promise<State>;
|
|
22
|
+
action: <A extends Act = Act>(action: A | A["type"]) => A | A["type"];
|
|
23
|
+
/**
|
|
24
|
+
* Aggregates state updates by this method over the course of
|
|
25
|
+
* `msCycle` time and sets the state only once per `msCycle` time.
|
|
26
|
+
*
|
|
27
|
+
* Different `msCycle` timings run on separate loops, therefore can
|
|
28
|
+
* run multiple `msCycle` at the same time.
|
|
29
|
+
*
|
|
30
|
+
* To keep state consistent and to prevent bugs, any key run-ins set
|
|
31
|
+
* in previous `msCycle`(s) will be overwritten by latest
|
|
32
|
+
* `throttledSetState()` call.
|
|
33
|
+
*
|
|
34
|
+
* Will wait the full designated time in `msCycle` on first run.
|
|
35
|
+
*/
|
|
36
|
+
throttledSetState: (msCycle: number, updateState: Partial<State>) => Promise<void>;
|
|
37
|
+
private throttledStateSetter;
|
|
38
|
+
/**
|
|
39
|
+
* Will execute the given function on state change. Subscribe to
|
|
40
|
+
* specific key(s) changes in state by setting keys to the desired
|
|
41
|
+
* key(s) to sub to. Set `keys: true` to sub to all state changes.
|
|
42
|
+
*/
|
|
43
|
+
stateSub: <K extends Key = Key>(keys: true | K[] | K, fct: stateSubFct<State>, fireOnInitSub?: boolean) => {
|
|
44
|
+
unsubscribe: () => boolean;
|
|
45
|
+
};
|
|
46
|
+
/** set `true` if to subscribe to all actions */
|
|
47
|
+
actionSub: <T extends Act["type"] = Act["type"], A extends Extract<Act, {
|
|
48
|
+
type: T;
|
|
49
|
+
}> = Extract<Act, {
|
|
50
|
+
type: T;
|
|
51
|
+
}>>(actions: true | T | T[], fct: actSubFct<A, State>) => {
|
|
52
|
+
unsubscribe: () => boolean;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Allows you to toggle any key with a boolean value true/false.
|
|
56
|
+
*/
|
|
57
|
+
toggle: (key: KeysOfValueType<State, boolean>) => Promise<State>;
|
|
58
|
+
/**
|
|
59
|
+
* Erases local storage managed by this instance of StateManager,
|
|
60
|
+
* & removes all properties/methods on the object. (This way any
|
|
61
|
+
* attempts of accessing the object should return an error);
|
|
62
|
+
*
|
|
63
|
+
* (For debugging purposes):
|
|
64
|
+
* Object will have this appearance afterwards:
|
|
65
|
+
* ```js
|
|
66
|
+
* { type: 'StateManager', destroyed: true }
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
destroy: () => void;
|
|
70
|
+
cloneKey: <K extends Key>(key: K) => State[K];
|
|
71
|
+
private stateChanged;
|
|
72
|
+
private stateFromLS;
|
|
73
|
+
private updateLocalStorage;
|
|
74
|
+
}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StateManager = void 0;
|
|
4
|
+
const _1 = require(".");
|
|
5
|
+
class StateManager {
|
|
6
|
+
prevState = null;
|
|
7
|
+
emittedState = null;
|
|
8
|
+
state;
|
|
9
|
+
useLS = false;
|
|
10
|
+
stateSubDict = {};
|
|
11
|
+
actionSubDict = {};
|
|
12
|
+
stateWasUpdated = true;
|
|
13
|
+
keysChanged = {};
|
|
14
|
+
throttledState = {};
|
|
15
|
+
throttlersRunning = {};
|
|
16
|
+
/**
|
|
17
|
+
* The local storage takes an id, this id
|
|
18
|
+
* should be unique in order to ensure that the
|
|
19
|
+
* storage is unique to the given state object
|
|
20
|
+
*/
|
|
21
|
+
constructor(initialState, useLocalStorage) {
|
|
22
|
+
let state = {};
|
|
23
|
+
if (useLocalStorage) {
|
|
24
|
+
const { useKeys, ignoreKeys, id } = useLocalStorage;
|
|
25
|
+
if (useKeys && ignoreKeys)
|
|
26
|
+
throw Error('"useKeys" & "ignoreKeys" are mutually '
|
|
27
|
+
+ 'exclusive, only use one or the other.');
|
|
28
|
+
this.useLS = useLocalStorage;
|
|
29
|
+
const lsId = this.useLS.id = id + '-utilStateManager';
|
|
30
|
+
state = {
|
|
31
|
+
...initialState,
|
|
32
|
+
...this.stateFromLS(),
|
|
33
|
+
};
|
|
34
|
+
addEventListener('storage', (e) => {
|
|
35
|
+
if (e.key !== lsId)
|
|
36
|
+
return;
|
|
37
|
+
let fromLS = this.stateFromLS();
|
|
38
|
+
if (useKeys)
|
|
39
|
+
fromLS = (0, _1.objExtract)(fromLS, useKeys);
|
|
40
|
+
else if (ignoreKeys)
|
|
41
|
+
ignoreKeys.forEach((key) => delete fromLS[key]);
|
|
42
|
+
if ((0, _1.equal)(this.state, { ...this.state, ...fromLS }))
|
|
43
|
+
return;
|
|
44
|
+
this.setState(fromLS);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
state = initialState;
|
|
49
|
+
}
|
|
50
|
+
this.state = state;
|
|
51
|
+
this.setState(state);
|
|
52
|
+
}
|
|
53
|
+
getState = () => this.state;
|
|
54
|
+
setState = async (updateState) => {
|
|
55
|
+
// Do this, otherwise you are mutating the value.
|
|
56
|
+
// (Would make bugs in this case)
|
|
57
|
+
this.state = { ...this.state, ...updateState };
|
|
58
|
+
this.stateWasUpdated = true;
|
|
59
|
+
await this.stateChanged();
|
|
60
|
+
return this.getState();
|
|
61
|
+
};
|
|
62
|
+
action = (action) => {
|
|
63
|
+
if ((0, _1.isType)(action, 'string'))
|
|
64
|
+
action = { type: action };
|
|
65
|
+
const state = this.getState();
|
|
66
|
+
for (const k in this.actionSubDict)
|
|
67
|
+
this.actionSubDict[k]?.(action, state);
|
|
68
|
+
return action;
|
|
69
|
+
};
|
|
70
|
+
// -- State Set Throttler -- //
|
|
71
|
+
/**
|
|
72
|
+
* Aggregates state updates by this method over the course of
|
|
73
|
+
* `msCycle` time and sets the state only once per `msCycle` time.
|
|
74
|
+
*
|
|
75
|
+
* Different `msCycle` timings run on separate loops, therefore can
|
|
76
|
+
* run multiple `msCycle` at the same time.
|
|
77
|
+
*
|
|
78
|
+
* To keep state consistent and to prevent bugs, any key run-ins set
|
|
79
|
+
* in previous `msCycle`(s) will be overwritten by latest
|
|
80
|
+
* `throttledSetState()` call.
|
|
81
|
+
*
|
|
82
|
+
* Will wait the full designated time in `msCycle` on first run.
|
|
83
|
+
*/
|
|
84
|
+
throttledSetState = async (msCycle, updateState) => {
|
|
85
|
+
if (!this.throttledState[msCycle])
|
|
86
|
+
this.throttledState[msCycle] = {};
|
|
87
|
+
const tsKeys = (0, _1.objKeys)(this.throttledState);
|
|
88
|
+
for (const k in updateState) {
|
|
89
|
+
this.throttledState[msCycle][k] = updateState[k];
|
|
90
|
+
tsKeys.forEach((tsKey) => // To keep state consistent
|
|
91
|
+
this.throttledState[tsKey][k] = updateState[k]);
|
|
92
|
+
}
|
|
93
|
+
this.throttledStateSetter(msCycle);
|
|
94
|
+
};
|
|
95
|
+
throttledStateSetter = async (msCycle) => {
|
|
96
|
+
if (this.throttlersRunning[msCycle])
|
|
97
|
+
return;
|
|
98
|
+
this.throttlersRunning[msCycle] = true;
|
|
99
|
+
await (0, _1.wait)(msCycle);
|
|
100
|
+
while (this.throttledState[msCycle]) {
|
|
101
|
+
this.setState(this.throttledState[msCycle]);
|
|
102
|
+
delete this.throttledState[msCycle];
|
|
103
|
+
await (0, _1.wait)(msCycle);
|
|
104
|
+
}
|
|
105
|
+
this.throttlersRunning[msCycle] = false;
|
|
106
|
+
};
|
|
107
|
+
// -- State Set Throttler -- //
|
|
108
|
+
/**
|
|
109
|
+
* Will execute the given function on state change. Subscribe to
|
|
110
|
+
* specific key(s) changes in state by setting keys to the desired
|
|
111
|
+
* key(s) to sub to. Set `keys: true` to sub to all state changes.
|
|
112
|
+
*/
|
|
113
|
+
stateSub = (keys, fct, fireOnInitSub = false) => {
|
|
114
|
+
if ((0, _1.isType)(keys, 'array') && keys.length === 1)
|
|
115
|
+
keys = keys[0];
|
|
116
|
+
let f = fct;
|
|
117
|
+
if ((0, _1.isType)(keys, 'string'))
|
|
118
|
+
f = (s, prev) => {
|
|
119
|
+
if (this.keysChanged[keys])
|
|
120
|
+
return fct(s, prev);
|
|
121
|
+
};
|
|
122
|
+
else if ((0, _1.isType)(keys, 'array'))
|
|
123
|
+
f = (s, prev) => {
|
|
124
|
+
for (const k of keys)
|
|
125
|
+
if (this.keysChanged[k])
|
|
126
|
+
return fct(s, prev);
|
|
127
|
+
};
|
|
128
|
+
if (fireOnInitSub)
|
|
129
|
+
(0, _1.wait)(0).then(() => fct(this.state, this.prevState));
|
|
130
|
+
const id = Math.random();
|
|
131
|
+
this.stateSubDict[id] = f;
|
|
132
|
+
return { unsubscribe: () => delete this.stateSubDict[id] };
|
|
133
|
+
};
|
|
134
|
+
/** set `true` if to subscribe to all actions */
|
|
135
|
+
actionSub = (actions, fct) => {
|
|
136
|
+
if ((0, _1.isType)(actions, 'array') && actions.length === 1)
|
|
137
|
+
actions = actions[0];
|
|
138
|
+
let f = fct;
|
|
139
|
+
if ((0, _1.isType)(actions, 'string'))
|
|
140
|
+
f = (a, s) => {
|
|
141
|
+
if (a.type === actions)
|
|
142
|
+
return fct(a, s);
|
|
143
|
+
};
|
|
144
|
+
else if ((0, _1.isType)(actions, 'array'))
|
|
145
|
+
f = (a, s) => {
|
|
146
|
+
for (const act of actions)
|
|
147
|
+
if (a.type === act)
|
|
148
|
+
return fct(a, s);
|
|
149
|
+
};
|
|
150
|
+
const id = Math.random();
|
|
151
|
+
this.actionSubDict[id] = f;
|
|
152
|
+
return { unsubscribe: () => delete this.actionSubDict[id] };
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Allows you to toggle any key with a boolean value true/false.
|
|
156
|
+
*/
|
|
157
|
+
toggle = (key) => this.setState({ [key]: (!this.getState()[key]) });
|
|
158
|
+
/**
|
|
159
|
+
* Erases local storage managed by this instance of StateManager,
|
|
160
|
+
* & removes all properties/methods on the object. (This way any
|
|
161
|
+
* attempts of accessing the object should return an error);
|
|
162
|
+
*
|
|
163
|
+
* (For debugging purposes):
|
|
164
|
+
* Object will have this appearance afterwards:
|
|
165
|
+
* ```js
|
|
166
|
+
* { type: 'StateManager', destroyed: true }
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
destroy = () => {
|
|
170
|
+
if (this.useLS)
|
|
171
|
+
localStorage.removeItem(this.useLS.id);
|
|
172
|
+
(0, _1.objKeys)(this).forEach(k => delete this[k]);
|
|
173
|
+
this.type = 'StateManager';
|
|
174
|
+
this.destroyed = true;
|
|
175
|
+
};
|
|
176
|
+
cloneKey = (key) => (0, _1.clone)(this.state[key]);
|
|
177
|
+
stateChanged = async () => {
|
|
178
|
+
// Ensures to run only after all sync code updates the state.
|
|
179
|
+
await (0, _1.wait)(0);
|
|
180
|
+
if (!this.stateWasUpdated)
|
|
181
|
+
return false;
|
|
182
|
+
let stateDidNotChange = true;
|
|
183
|
+
(0, _1.objKeys)(this.state).forEach((k) => {
|
|
184
|
+
const em = this.emittedState || {};
|
|
185
|
+
if ( // only check equality if not already changed.
|
|
186
|
+
!this.keysChanged[k] && (0, _1.equal)(this.state[k], em[k]))
|
|
187
|
+
return;
|
|
188
|
+
stateDidNotChange = false;
|
|
189
|
+
this.keysChanged[k] = true;
|
|
190
|
+
});
|
|
191
|
+
if (stateDidNotChange)
|
|
192
|
+
return this.stateWasUpdated = false;
|
|
193
|
+
this.updateLocalStorage();
|
|
194
|
+
// these 3 need to be set before iterating over subs
|
|
195
|
+
// else prevState wont be accurately emitted
|
|
196
|
+
this.prevState = this.emittedState;
|
|
197
|
+
this.emittedState = this.state;
|
|
198
|
+
this.state = { ...this.state }; // use obj spread (or get bugs)!
|
|
199
|
+
for (const k in this.stateSubDict)
|
|
200
|
+
this.stateSubDict[k]?.(this.state, this.prevState);
|
|
201
|
+
this.keysChanged = {};
|
|
202
|
+
this.stateWasUpdated = false;
|
|
203
|
+
return true;
|
|
204
|
+
};
|
|
205
|
+
stateFromLS = () => {
|
|
206
|
+
if (!this.useLS)
|
|
207
|
+
return;
|
|
208
|
+
const { id } = this.useLS;
|
|
209
|
+
const strState = localStorage.getItem(id);
|
|
210
|
+
if (!strState)
|
|
211
|
+
return {};
|
|
212
|
+
return JSON.parse(strState);
|
|
213
|
+
};
|
|
214
|
+
updateLocalStorage = () => {
|
|
215
|
+
if (!this.useLS)
|
|
216
|
+
return;
|
|
217
|
+
const { id, ignoreKeys, useKeys } = this.useLS;
|
|
218
|
+
let state = { ...this.state };
|
|
219
|
+
if (ignoreKeys)
|
|
220
|
+
ignoreKeys.forEach((key) => delete state[key]);
|
|
221
|
+
else if (useKeys)
|
|
222
|
+
state = (0, _1.objExtract)(state, useKeys);
|
|
223
|
+
localStorage.setItem(id, JSON.stringify(state));
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
exports.StateManager = StateManager;
|
|
227
|
+
//# sourceMappingURL=state-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../src/state-manager.ts"],"names":[],"mappings":"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"}
|