@giveback007/util-lib 2.1.2 → 2.2.0

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.
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=@state.types.js.map
@@ -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 PartialTimeObj = {
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 TimeArr = [y: num, m?: num, d?: num, h?: num, min?: num, sec?: num, ms?: num];
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.wait = exports.interval = void 0;
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;
@@ -1 +1 @@
1
- {"version":3,"file":"general.js","sourceRoot":"","sources":["../src/general.ts"],"names":[],"mappings":"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"}
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;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 decPlace: (n: number, places: number) => number;
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.numberWithCommas = exports.decPlace = exports.average = exports.rand = exports.randInt = void 0;
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 decPlace = (n, places) => parseFloat(n.toFixed(places));
30
- exports.decPlace = decPlace;
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.
@@ -1 +1 @@
1
- {"version":3,"file":"number.js","sourceRoot":"","sources":["../src/number.ts"],"names":[],"mappings":";;;AA4CA,wBAmBC;AA/DD,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,MAAc,EAAE,EAAE,CAClD,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AADrB,QAAA,QAAQ,YACa;AAElC;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,CAAC,CAAkB,EAAE,EAAE,CACnD,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;AAD1C,QAAA,gBAAgB,oBAC0B;AAEvD;;;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"}
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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"}
package/dist/time.d.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  import { Temporal } from '@js-temporal/polyfill';
2
2
  import { AnyDate, MsTime, num, str, TimeArr, TimeObj } from '.';
3
+ /** A promise that waits `ms` amount of milliseconds to execute */
4
+ export declare const wait: (ms: number) => Promise<void>;
5
+ /** Resolves after a given msEpoch passes. `msEpoch - Date.now()` */
6
+ export declare const waitUntil: (msEpoch: number) => Promise<void>;
3
7
  export declare const msTime: MsTime;
4
8
  export declare const weekTuple: readonly ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
5
9
  /**
@@ -35,6 +39,7 @@ export declare const time: {
35
39
  /** fnc(n) -> add min to now */
36
40
  readonly min: (n: num) => number;
37
41
  };
42
+ /** Convert ms into: */
38
43
  readonly msTo: {
39
44
  /** fnc(n) -> from ms to num of seconds */
40
45
  readonly sec: (ms: num) => number;
@@ -51,7 +56,10 @@ export declare const time: {
51
56
  };
52
57
  export declare const humanizedTime: (date: AnyDate) => string | null;
53
58
  /** A Date substitute, to make working with time easier and more versatile */
54
- export declare function getTime(t: TimeArr | num | str, timeZone?: str): {
59
+ export declare function getTime(t?: TimeArr | num | str,
60
+ /** For a list of available timeZone values run:
61
+ * `Intl.supportedValuesOf('timeZone');` */
62
+ timeZone?: str): {
55
63
  zonedTemporal: Temporal.ZonedDateTime;
56
64
  date: Date;
57
65
  tzOffsetMin: number;
package/dist/time.js CHANGED
@@ -1,11 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.timeObj = exports.humanizedTime = exports.time = exports.weekTuple = exports.msTime = void 0;
3
+ exports.timeObj = exports.humanizedTime = exports.time = exports.weekTuple = exports.msTime = exports.waitUntil = exports.wait = void 0;
4
4
  exports.dateTimeToString = dateTimeToString;
5
5
  exports.getTime = getTime;
6
6
  exports.parseDate = parseDate;
7
7
  const polyfill_1 = require("@js-temporal/polyfill");
8
8
  const _1 = require(".");
9
+ /** A promise that waits `ms` amount of milliseconds to execute */
10
+ const wait = (ms) => new Promise((res) => setTimeout(() => res(), ms));
11
+ exports.wait = wait;
12
+ /** Resolves after a given msEpoch passes. `msEpoch - Date.now()` */
13
+ const waitUntil = (msEpoch) => new Promise(res => setTimeout(res, msEpoch - Date.now()));
14
+ exports.waitUntil = waitUntil;
9
15
  exports.msTime = {
10
16
  s: 1000,
11
17
  m: 60000,
@@ -53,6 +59,7 @@ exports.time = {
53
59
  /** fnc(n) -> add min to now */
54
60
  min: (n) => Date.now() + n * exports.msTime.m,
55
61
  },
62
+ /** Convert ms into: */
56
63
  msTo: {
57
64
  /** fnc(n) -> from ms to num of seconds */
58
65
  sec: (ms) => ms / exports.msTime.s,
@@ -95,9 +102,13 @@ const humanizedTime = (date) => {
95
102
  }
96
103
  };
97
104
  exports.humanizedTime = humanizedTime;
98
- // Intl.supportedValuesOf('timeZone');
99
105
  /** A Date substitute, to make working with time easier and more versatile */
100
- function getTime(t, timeZone) {
106
+ function getTime(t,
107
+ /** For a list of available timeZone values run:
108
+ * `Intl.supportedValuesOf('timeZone');` */
109
+ timeZone) {
110
+ if (t === undefined)
111
+ t = Date.now();
101
112
  timeZone = timeZone || Intl.DateTimeFormat().resolvedOptions().timeZone;
102
113
  let zonedTemporal;
103
114
  let date;
@@ -151,7 +162,7 @@ const timeObj = (dt) => dt instanceof Date ? ({
151
162
  min: dt.minute,
152
163
  sec: dt.second,
153
164
  ms: dt.millisecond,
154
- wDay: exports.weekTuple[dt.dayOfWeek]
165
+ wDay: exports.weekTuple[dt.dayOfWeek - 1]
155
166
  });
156
167
  exports.timeObj = timeObj;
157
168
  function parseDate(d) {
package/dist/time.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"time.js","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":";;;AA8BA,4CAQC;AAuED,0BA4CC;AAsBD,8BAgBC;AA/LD,oDAAiD;AACjD,wBAAwE;AAExE,kEAAkE;AAC3D,MAAM,IAAI,GAAG,CAAC,EAAU,EAAiB,EAAE,CAC9C,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AADzC,QAAA,IAAI,QACqC;AAEtD,oEAAoE;AAC7D,MAAM,SAAS,GAAG,CAAC,OAAe,EAAiB,EAAE,CACxD,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AADhD,QAAA,SAAS,aACuC;AAEhD,QAAA,MAAM,GAAW;IAC1B,CAAC,EAAE,IAAI;IACP,CAAC,EAAE,KAAK;IACR,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,SAAS;CACf,CAAA;AAEY,QAAA,SAAS,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAEpF;;;;;;;;GAQG;AACH,SAAgB,gBAAgB,CAAC,EAAE,GAAG,IAAI,IAAI,EAAE;IAE5C,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AAClC,CAAC;AAEY,QAAA,IAAI,GAAG;IAChB,0BAA0B;IAC1B,GAAG,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC;IAC1B,0BAA0B;IAC1B,GAAG,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC;IAC3B,0BAA0B;IAC1B,GAAG,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,SAAS,GAAG,CAAC;IAC9B,0BAA0B;IAC1B,GAAG,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,UAAU,GAAG,CAAC;IAC/B,0BAA0B;IAC1B,GAAG,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,WAAW,GAAG,CAAC;IAEhC,4EAA4E;IAC5E,KAAK,EAAE,CAAC,IAAS,EAAE,KAAU,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI;IACrD,2EAA2E;IAC3E,KAAK,EAAE,CAAC,MAAW,EAAE,OAAY,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI;IAE7D,MAAM,EAAE;QACJ,+BAA+B;QAC/B,EAAE,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;QAC9B,gCAAgC;QAChC,GAAG,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,cAAM,CAAC,CAAC;QAC1C,gCAAgC;QAChC,GAAG,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,cAAM,CAAC,CAAC;KAC7C;IAED,uBAAuB;IACvB,IAAI,EAAE;QACF,2CAA2C;QAC3C,GAAG,EAAE,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,GAAG,cAAM,CAAC,CAAC;QAC/B,2CAA2C;QAC3C,GAAG,EAAE,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,GAAG,cAAM,CAAC,CAAC;QAC/B,yCAAyC;QACzC,GAAG,EAAE,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,GAAG,cAAM,CAAC,CAAC;QAC/B,wCAAwC;QACxC,GAAG,EAAE,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,GAAG,cAAM,CAAC,CAAC;QAC/B,yCAAyC;QACzC,GAAG,EAAE,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,GAAG,cAAM,CAAC,CAAC;KAClC;IAED,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;CAC1B,CAAC;AAEJ,MAAM,aAAa,GAAG,CAAC,IAAa,EAAE,EAAE;IAC3C,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,MAAM,GAAG,GAAG,YAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAErC,mBAAmB;IACnB,MAAM,CAAC,GAAG,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACV,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;SAAM,IAAI,GAAG,GAAG,YAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,YAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IACnC,CAAC;SAAM,IAAI,GAAG,GAAG,YAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IACnC,CAAC;SAAM,IAAI,GAAG,GAAG,YAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;QACrE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,YAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACtD,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAA;IACtE,CAAC;SAAM,CAAC;QACJ,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC;IAC/B,CAAC;AACL,CAAC,CAAA;AAvBY,QAAA,aAAa,iBAuBzB;AAED,6EAA6E;AAC7E,SAAgB,OAAO,CACnB,CAAuB;AACvB;2CAC2C;AAC3C,QAAc;IAEd,IAAI,CAAC,KAAK,SAAS;QAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;IAExE,IAAI,aAAqC,CAAC;IAC1C,IAAI,IAAU,CAAC;IACf,IAAI,MAAW,CAAC;IAEhB,IAAI,IAAA,SAAM,EAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;QACtB,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5B,aAAa,GAAG,mBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,GAAG,CAAC,CAAC;IAC1E,CAAC;SAAM,IAAI,IAAA,SAAM,EAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC7B,aAAa,GAAG,mBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,QAAQ,GAAG,CAAC,CAAA;IACpE,CAAC;SAAM,CAAC;QACJ,aAAa,GAAG,mBAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;YACxC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACV,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAChB,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACf,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjB,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjB,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtB,QAAQ;SACX,CAAC,CAAC;IACP,CAAC;IAED,IAAI,GAAG,IAAK,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAE1D,OAAO;QACH,aAAa;QACb,IAAI;QACJ,WAAW,EAAE,aAAa,CAAC,iBAAiB,GAAG,cAAc;QAC7D,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE;QAChC,OAAO,EAAE,IAAA,eAAO,EAAC,aAAa,CAAC;QAC/B,MAAM,EAAE,MAAO,IAAI,IAAI,CAAC,WAAW,EAAE;QACrC,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,aAAa,CAAC,iBAAiB;KAC3C,CAAA;AACL,CAAC;AAEM,MAAM,OAAO,GAAG,CAAC,EAAiC,EAAW,EAAE,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC,EAAE,EAAE,CAAC,WAAW,EAAE;IACnB,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE;IACf,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE;IAChB,GAAG,EAAE,EAAE,CAAC,UAAU,EAAE;IACpB,GAAG,EAAE,EAAE,CAAC,UAAU,EAAE;IACpB,EAAE,EAAE,EAAE,CAAC,eAAe,EAAE;IACxB,IAAI,EAAE,iBAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAE;CAChC,CAAC,CAAC,CAAC,CAAC,CAAC;IACF,CAAC,EAAE,EAAE,CAAC,IAAI;IACV,CAAC,EAAE,EAAE,CAAC,KAAK;IACX,CAAC,EAAE,EAAE,CAAC,GAAG;IACT,CAAC,EAAE,EAAE,CAAC,IAAI;IACV,GAAG,EAAE,EAAE,CAAC,MAAM;IACd,GAAG,EAAE,EAAE,CAAC,MAAM;IACd,EAAE,EAAE,EAAE,CAAC,WAAW;IAClB,IAAI,EAAE,iBAAS,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAE;CACrC,CAAC,CAAC;AAlBU,QAAA,OAAO,WAkBjB;AAEH,SAAgB,SAAS,CAAC,CAAU;IAChC,MAAM,EAAE,GACJ,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtF,CAAC;YACL,IAAA,SAAM,EAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;gBACzC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACrF,CAAC;oBACD,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,IAAI,KAAK,CAAC,EAAS,CAAC,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,iBAAiB,IAAA,SAAM,EAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChG,OAAO,IAAI,CAAA;IACf,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@giveback007/util-lib",
3
- "version": "2.1.2",
3
+ "version": "2.2.0",
4
4
  "description": "Utility library",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,19 @@
1
+ export type Immutable<T> = {
2
+ readonly [K in keyof T]: Immutable<T[K]>;
3
+ };
4
+
5
+ export type Action<T extends string, D = undefined> =
6
+ Readonly<D extends undefined ? {type: T} : { type: T; data: D; }>;
7
+
8
+ export type stateSubFct<S> = (s: S, prev: S | null) => any;
9
+
10
+ export type actSubFct<
11
+ A extends Action<any, any>,
12
+ S = any
13
+ > = (a: A, s: S) => any;
14
+
15
+ export type lsOptions<P> = {
16
+ id: string;
17
+ useKeys?: P[];
18
+ ignoreKeys?: P[];
19
+ };
package/src/@types.ts CHANGED
@@ -5,8 +5,9 @@ export type StrKeys<T> = Extract<keyof T, string>;
5
5
 
6
6
  export type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;
7
7
 
8
- export type Optional<T, K extends keyof T = keyof T> =
9
- { [P in K]?: T[P] };
8
+ export type Optional<
9
+ T, K extends keyof T = keyof T
10
+ > = { [P in K]?: T[P] };
10
11
 
11
12
  export type ResolvedValue<T> =
12
13
  T extends Promise <infer U> ? U : any;
@@ -62,9 +63,13 @@ export type MsTime = {
62
63
  * type Y => "k1" | "k3"
63
64
  * ```
64
65
  */
65
- export type KeysOfValueType<O, T> = { [I in keyof O]: O[I] extends T ? I : never }[keyof O];
66
+ export type KeysOfValueType<O, T> = {
67
+ [I in keyof O]: O[I] extends T ? I : never
68
+ }[keyof O];
66
69
 
67
- export type AwaitReturn<T extends AnyFnc<any | Promise<any>>> = Awaited<ReturnType<T>>;
70
+ export type AwaitReturn<
71
+ T extends AnyFnc<any | Promise<any>>
72
+ > = Awaited<ReturnType<T>>;
68
73
 
69
74
  export type num = number;
70
75
  export type str = string;
@@ -72,7 +77,14 @@ export type bol = boolean;
72
77
 
73
78
  export type AnyFnc<T = any> = (...args: any[]) => T;
74
79
 
75
- export type DayOfWeek = 'Sun' | 'Mon' | 'Tue' | 'Wed' | 'Thu' | 'Fri' | 'Sat';
80
+ export type DayOfWeek =
81
+ | 'Sun'
82
+ | 'Mon'
83
+ | 'Tue'
84
+ | 'Wed'
85
+ | 'Thu'
86
+ | 'Fri'
87
+ | 'Sat';
76
88
 
77
89
  export type TimeObj = {
78
90
  y: num;
@@ -85,18 +97,16 @@ export type TimeObj = {
85
97
  wDay: DayOfWeek;
86
98
  };
87
99
 
88
- export type PartialTimeObj = {
89
- y: num;
90
- m?: num;
91
- d?: num;
92
- h?: num;
93
- min?: num;
94
- sec?: num;
95
- ms?: num;
96
- };
97
-
98
- export type TimeArr = [y: num, m?: num, d?: num, h?: num, min?: num, sec?: num, ms?: num];
99
-
100
- export type AnyDate = string | number | Date | TimeObj | PartialTimeObj | TimeArr;
100
+ export type TimeArr = [
101
+ y: num,
102
+ m?: num,
103
+ d?: num,
104
+ h?: num,
105
+ min?: num,
106
+ sec?: num,
107
+ ms?: num
108
+ ];
109
+
110
+ export type AnyDate = string | number | Date | TimeObj | TimeArr;
101
111
 
102
112
  export type Dict<T> = { [id: string]: T };
package/src/general.ts CHANGED
@@ -39,10 +39,6 @@ export const interval = (
39
39
  };
40
40
  }
41
41
 
42
- /** A promise that waits `ms` amount of milliseconds to execute */
43
- export const wait = (ms: number): Promise<void> =>
44
- new Promise((res) => setTimeout(() => res(), ms));
45
-
46
42
  const usubAllFunct = (x: any, unsubName = 'unsubscribe') =>
47
43
  isType(x, 'object')
48
44
  &&
package/src/index.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
- export * from './time';
12
- export * from './http';
14
+ export * from './time';
package/src/number.ts CHANGED
@@ -26,17 +26,8 @@ export const average = (nArr: number[]) =>
26
26
  * decPlaces(1.1276, 2) //=> 1.13
27
27
  * ```
28
28
  */
29
- export const decPlace = (n: number, places: number) =>
30
- parseFloat(n.toFixed(places));
31
-
32
- /**
33
- * @example
34
- * ```js
35
- * numberWithCommas(1000000) //=> '1,000,000'
36
- * ```
37
- */
38
- export const numberWithCommas = (n: number | string) =>
39
- n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
29
+ export const numFixed = (n: number, fractionDigits: number) =>
30
+ parseFloat(n.toFixed(fractionDigits));
40
31
 
41
32
  /**
42
33
  * Takes a number || number[] and min & max, will generate a
@@ -0,0 +1,301 @@
1
+ import type {
2
+ Action, actSubFct, lsOptions, stateSubFct
3
+ } from './@state.types';
4
+
5
+ import {
6
+ Dict, KeysOfValueType
7
+ } from '.'
8
+
9
+ import {
10
+ wait, equal, objExtract,
11
+ isType, objKeys, clone
12
+ } from '.';
13
+
14
+ export class StateManager<
15
+ State extends {},
16
+ Act extends Action<any, any> = Action<any, any>,
17
+ Key extends Extract<keyof State, string> = Extract<keyof State, string>
18
+ > {
19
+
20
+ private prevState: State | null = null;
21
+ private emittedState: State | null = null;
22
+ private state: State;
23
+
24
+ private readonly useLS: lsOptions<Key> | false = false;
25
+
26
+ private stateSubDict: Dict<stateSubFct<State>> = {};
27
+ private actionSubDict: Dict<actSubFct<Act>> = {};
28
+
29
+ private stateWasUpdated = true;
30
+ private keysChanged: { [K in Key]?: true } = {};
31
+
32
+ private throttledState: Dict<Partial<State>> = {};
33
+ private throttlersRunning: Dict<boolean> = {};
34
+ /**
35
+ * The local storage takes an id, this id
36
+ * should be unique in order to ensure that the
37
+ * storage is unique to the given state object
38
+ */
39
+ constructor(
40
+ initialState: State,
41
+ useLocalStorage?: lsOptions<Key>
42
+ ) {
43
+ let state = {} as State;
44
+
45
+ if (useLocalStorage) {
46
+ const { useKeys, ignoreKeys, id } = useLocalStorage;
47
+
48
+ if (useKeys && ignoreKeys) throw Error(
49
+ '"useKeys" & "ignoreKeys" are mutually '
50
+ + 'exclusive, only use one or the other.'
51
+ );
52
+
53
+ this.useLS = useLocalStorage;
54
+ const lsId = this.useLS.id = id + '-utilStateManager';
55
+
56
+ state = {
57
+ ...initialState,
58
+ ...this.stateFromLS(),
59
+ };
60
+
61
+ addEventListener('storage', (e: StorageEvent) => {
62
+ if (e.key !== lsId) return;
63
+
64
+ let fromLS = this.stateFromLS();
65
+
66
+ if (useKeys)
67
+ fromLS = objExtract(fromLS, useKeys);
68
+ else if (ignoreKeys)
69
+ ignoreKeys.forEach((key) => delete fromLS[key]);
70
+
71
+ if (equal(this.state, { ...this.state, ...fromLS })) return;
72
+
73
+ this.setState(fromLS);
74
+ });
75
+ } else {
76
+ state = initialState;
77
+ }
78
+
79
+ this.state = state;
80
+ this.setState(state);
81
+ }
82
+
83
+ getState = () => this.state;
84
+
85
+ setState = async (updateState: Partial<State>) => {
86
+ // Do this, otherwise you are mutating the value.
87
+ // (Would make bugs in this case)
88
+ this.state = { ...this.state, ...updateState };
89
+
90
+ this.stateWasUpdated = true;
91
+ await this.stateChanged();
92
+ return this.getState();
93
+ }
94
+
95
+ action = <A extends Act = Act>(action: A | A['type']) => {
96
+ if (isType(action, 'string')) action = { type: action } as A;
97
+ const state = this.getState();
98
+
99
+ for (const k in this.actionSubDict)
100
+ this.actionSubDict[k]?.(action, state);
101
+
102
+ return action;
103
+ }
104
+
105
+ // -- State Set Throttler -- //
106
+ /**
107
+ * Aggregates state updates by this method over the course of
108
+ * `msCycle` time and sets the state only once per `msCycle` time.
109
+ *
110
+ * Different `msCycle` timings run on separate loops, therefore can
111
+ * run multiple `msCycle` at the same time.
112
+ *
113
+ * To keep state consistent and to prevent bugs, any key run-ins set
114
+ * in previous `msCycle`(s) will be overwritten by latest
115
+ * `throttledSetState()` call.
116
+ *
117
+ * Will wait the full designated time in `msCycle` on first run.
118
+ */
119
+ throttledSetState = async (
120
+ msCycle: number,
121
+ updateState: Partial<State>
122
+ ) => {
123
+ if (!this.throttledState[msCycle])
124
+ this.throttledState[msCycle] = {};
125
+
126
+ const tsKeys = objKeys(this.throttledState);
127
+ for (const k in updateState) {
128
+ this.throttledState[msCycle][k] = updateState[k];
129
+
130
+ tsKeys.forEach((tsKey) => // To keep state consistent
131
+ this.throttledState[tsKey]![k] = updateState[k]);
132
+ }
133
+
134
+ this.throttledStateSetter(msCycle);
135
+ }
136
+
137
+ private throttledStateSetter = async (msCycle: number) => {
138
+ if (this.throttlersRunning[msCycle]) return;
139
+ this.throttlersRunning[msCycle] = true;
140
+
141
+ await wait(msCycle);
142
+ while (this.throttledState[msCycle]) {
143
+ this.setState(this.throttledState[msCycle]);
144
+ delete this.throttledState[msCycle];
145
+ await wait(msCycle);
146
+ }
147
+
148
+ this.throttlersRunning[msCycle] = false;
149
+ }
150
+ // -- State Set Throttler -- //
151
+
152
+ /**
153
+ * Will execute the given function on state change. Subscribe to
154
+ * specific key(s) changes in state by setting keys to the desired
155
+ * key(s) to sub to. Set `keys: true` to sub to all state changes.
156
+ */
157
+ stateSub = <K extends Key = Key>(
158
+ keys: true | K[] | K,
159
+ fct: stateSubFct<State>,
160
+ fireOnInitSub = false
161
+ ) => {
162
+ if (isType(keys, 'array') && keys.length === 1)
163
+ keys = keys[0]!;
164
+
165
+ let f = fct;
166
+
167
+ if (isType(keys, 'string')) f = (s, prev) => {
168
+ if (this.keysChanged[keys as K]) return fct(s, prev);
169
+ }
170
+
171
+ else if (isType(keys, 'array')) f = (s, prev) => {
172
+ for (const k of keys as K[])
173
+ if (this.keysChanged[k]) return fct(s, prev);
174
+ }
175
+
176
+ if (fireOnInitSub)
177
+ wait(0).then(() => fct(this.state, this.prevState));
178
+
179
+ const id = Math.random();
180
+ this.stateSubDict[id] = f as any;
181
+ return { unsubscribe: () => delete this.stateSubDict[id] };
182
+ }
183
+
184
+ /** set `true` if to subscribe to all actions */
185
+ actionSub = <
186
+ T extends Act['type'] = Act['type'],
187
+ A extends Extract<Act, { type: T }> = Extract<Act, { type: T }>
188
+ >(
189
+ actions: true | T | T[],
190
+ fct: actSubFct<A, State>
191
+ ) => {
192
+ if (isType(actions, 'array') && actions.length === 1)
193
+ actions = actions[0]!;
194
+
195
+ let f = fct;
196
+
197
+ if (isType(actions, 'string')) f = (a, s) => {
198
+ if (a.type === actions) return fct(a, s);
199
+ }
200
+
201
+ else if (isType(actions, 'array')) f = (a, s) => {
202
+ for (const act of actions as T['type'][])
203
+ if (a.type === act) return fct(a, s);
204
+ }
205
+
206
+ const id = Math.random();
207
+ this.actionSubDict[id] = f as any;
208
+ return { unsubscribe: () => delete this.actionSubDict[id] };
209
+ }
210
+
211
+ /**
212
+ * Allows you to toggle any key with a boolean value true/false.
213
+ */
214
+ toggle = (key: KeysOfValueType<State, boolean>) =>
215
+ this.setState({ [key]: (!this.getState()[key]) } as any);
216
+
217
+ /**
218
+ * Erases local storage managed by this instance of StateManager,
219
+ * & removes all properties/methods on the object. (This way any
220
+ * attempts of accessing the object should return an error);
221
+ *
222
+ * (For debugging purposes):
223
+ * Object will have this appearance afterwards:
224
+ * ```js
225
+ * { type: 'StateManager', destroyed: true }
226
+ * ```
227
+ */
228
+ destroy = () => {
229
+ if (this.useLS)
230
+ localStorage.removeItem(this.useLS.id);
231
+
232
+ objKeys(this).forEach(k => delete this[k]);
233
+ (this as any).type = 'StateManager';
234
+ (this as any).destroyed = true;
235
+ }
236
+
237
+ cloneKey =
238
+ <K extends Key>(key: K): State[K] => clone(this.state[key]);
239
+
240
+ private stateChanged = async () => {
241
+ // Ensures to run only after all sync code updates the state.
242
+ await wait(0);
243
+ if (!this.stateWasUpdated) return false;
244
+
245
+ let stateDidNotChange = true;
246
+
247
+ objKeys(this.state).forEach((k) => {
248
+ const em = this.emittedState || {} as Partial<State>;
249
+
250
+ if (// only check equality if not already changed.
251
+ !this.keysChanged[k as Key] && equal(this.state[k], em[k])
252
+ ) return;
253
+
254
+ stateDidNotChange = false;
255
+ this.keysChanged[k as Key] = true;
256
+ });
257
+
258
+ if (stateDidNotChange)
259
+ return this.stateWasUpdated = false;
260
+
261
+ this.updateLocalStorage();
262
+
263
+ // these 3 need to be set before iterating over subs
264
+ // else prevState wont be accurately emitted
265
+ this.prevState = this.emittedState;
266
+ this.emittedState = this.state;
267
+ this.state = { ...this.state }; // use obj spread (or get bugs)!
268
+
269
+ for (const k in this.stateSubDict)
270
+ this.stateSubDict[k]?.(this.state, this.prevState as State);
271
+
272
+ this.keysChanged = {};
273
+ this.stateWasUpdated = false;
274
+ return true;
275
+ }
276
+
277
+ private stateFromLS = () => {
278
+ if (!this.useLS) return;
279
+
280
+ const { id } = this.useLS;
281
+ const strState = localStorage.getItem(id);
282
+ if (!strState) return {};
283
+
284
+ return JSON.parse(strState);
285
+ }
286
+
287
+ private updateLocalStorage = () => {
288
+ if (!this.useLS) return;
289
+
290
+ const { id, ignoreKeys, useKeys } = this.useLS;
291
+
292
+ let state = { ...this.state };
293
+
294
+ if (ignoreKeys)
295
+ ignoreKeys.forEach((key) => delete state[key]);
296
+ else if (useKeys)
297
+ state = objExtract(state, useKeys);
298
+
299
+ localStorage.setItem(id, JSON.stringify(state));
300
+ }
301
+ }
package/src/time.ts CHANGED
@@ -1,6 +1,14 @@
1
1
  import { Temporal } from '@js-temporal/polyfill';
2
2
  import { AnyDate, isType, MsTime, num, str, TimeArr, TimeObj } from '.';
3
3
 
4
+ /** A promise that waits `ms` amount of milliseconds to execute */
5
+ export const wait = (ms: number): Promise<void> =>
6
+ new Promise((res) => setTimeout(() => res(), ms));
7
+
8
+ /** Resolves after a given msEpoch passes. `msEpoch - Date.now()` */
9
+ export const waitUntil = (msEpoch: number): Promise<void> =>
10
+ new Promise(res => setTimeout(res, msEpoch - Date.now()))
11
+
4
12
  export const msTime: MsTime = {
5
13
  s: 1000,
6
14
  m: 60000,
@@ -56,6 +64,7 @@ export const time = {
56
64
  min: (n: num) => Date.now() + n * msTime.m,
57
65
  },
58
66
 
67
+ /** Convert ms into: */
59
68
  msTo: {
60
69
  /** fnc(n) -> from ms to num of seconds */
61
70
  sec: (ms: num) => ms / msTime.s,
@@ -97,13 +106,16 @@ export const humanizedTime = (date: AnyDate) => {
97
106
  }
98
107
  }
99
108
 
100
- // Intl.supportedValuesOf('timeZone');
101
109
  /** A Date substitute, to make working with time easier and more versatile */
102
110
  export function getTime(
103
- t: TimeArr | num | str,
111
+ t?: TimeArr | num | str,
112
+ /** For a list of available timeZone values run:
113
+ * `Intl.supportedValuesOf('timeZone');` */
104
114
  timeZone?: str
105
115
  ) {
116
+ if (t === undefined) t = Date.now();
106
117
  timeZone = timeZone || Intl.DateTimeFormat().resolvedOptions().timeZone;
118
+
107
119
  let zonedTemporal: Temporal.ZonedDateTime;
108
120
  let date: Date;
109
121
  let isoStr: str;
@@ -158,7 +170,7 @@ export const timeObj = (dt: Date | Temporal.ZonedDateTime): TimeObj => dt instan
158
170
  min: dt.minute,
159
171
  sec: dt.second,
160
172
  ms: dt.millisecond,
161
- wDay: weekTuple[dt.dayOfWeek]!
173
+ wDay: weekTuple[dt.dayOfWeek - 1]!
162
174
  });
163
175
 
164
176
  export function parseDate(d: AnyDate) {