@dr.pogodin/js-utils 0.0.3 → 0.0.5
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/README.md +37 -0
- package/js/Barrier.d.ts +1 -1
- package/js/Emitter.d.ts +12 -8
- package/js/Emitter.js +8 -2
- package/package.json +7 -7
- package/ts/Barrier.ts +1 -1
- package/ts/Emitter.ts +16 -9
package/README.md
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
[](https://www.npmjs.com/package/@dr.pogodin/js-utils)
|
|
7
7
|
[](https://app.circleci.com/pipelines/github/birdofpreyru/js-utils)
|
|
8
8
|
[](https://github.com/birdofpreyru/js-utils)
|
|
9
|
+
[](https://dr.pogodin.studio/docs/js-utils)
|
|
9
10
|
|
|
10
11
|
The aim for this repo/package is to move in from the [React Utils] the pieces
|
|
11
12
|
which are not React-specific, thus are also useful cross non-React projects,
|
|
@@ -25,3 +26,39 @@ Consumers of that NPM package thus will have access to both TS (`/ts` folder)
|
|
|
25
26
|
and JS (`/js` folder) version of the library.
|
|
26
27
|
|
|
27
28
|
[](https://github.com/sponsors/birdofpreyru)
|
|
29
|
+
|
|
30
|
+
## Content
|
|
31
|
+
|
|
32
|
+
The library currently exports (links below lead to [React Utils] docs,
|
|
33
|
+
but the same stuff can be imported from this `@dr.pogodin/js-utils`,
|
|
34
|
+
and used in the same way):
|
|
35
|
+
|
|
36
|
+
[Barrier]: https://dr.pogodin.studio/docs/react-utils/docs/api/classes/Barrier
|
|
37
|
+
[Promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
|
|
38
|
+
[timer]: https://dr.pogodin.studio/docs/react-utils/docs/api/utils/time#timer
|
|
39
|
+
|
|
40
|
+
### Constants
|
|
41
|
+
- [SEC_MS](https://dr.pogodin.studio/docs/react-utils/docs/api/utils/time#sec_ms)
|
|
42
|
+
— One second expressed in milliseconds.
|
|
43
|
+
- [MIN_MS](https://dr.pogodin.studio/docs/react-utils/docs/api/utils/time#min_ms)
|
|
44
|
+
— One minute expressed in milliseconds.
|
|
45
|
+
- [HOUR_MS](https://dr.pogodin.studio/docs/react-utils/docs/api/utils/time#hour_ms)
|
|
46
|
+
— One hour expressed in milliseconds.
|
|
47
|
+
- [DAY_MS](https://dr.pogodin.studio/docs/react-utils/docs/api/utils/time#day_ms)
|
|
48
|
+
— One day expressed in milliseconds.
|
|
49
|
+
- [YEAR_MS](https://dr.pogodin.studio/docs/react-utils/docs/api/utils/time#year_ms)
|
|
50
|
+
— One year expressed in milliseconds.
|
|
51
|
+
|
|
52
|
+
### Functions
|
|
53
|
+
- [timer]
|
|
54
|
+
— Creates a [Barrier] which resolves after the specified timeout.
|
|
55
|
+
|
|
56
|
+
### Classes
|
|
57
|
+
- [Barrier] — A [Promise] with **resolve()** and **reject()** exposed as
|
|
58
|
+
instance methods.
|
|
59
|
+
- [Emitter](https://dr.pogodin.studio/docs/react-utils/docs/api/classes/Emitter)
|
|
60
|
+
— Simple listeneable data emitter.
|
|
61
|
+
- [Semaphore](https://dr.pogodin.studio/docs/react-utils/docs/api/classes/Semaphore)
|
|
62
|
+
— Synchronization primitive.
|
|
63
|
+
- `Timer` — The core implementation of [timer] functionality, allowing
|
|
64
|
+
to create further customized timer objects. _To be documented_.
|
package/js/Barrier.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export type Executor<T> = (resolve: Resolver<T>, reject: Rejecter) => void;
|
|
|
7
7
|
*
|
|
8
8
|
* Docs: https://dr.pogodin.studio/docs/react-utils/docs/api/classes/Barrier
|
|
9
9
|
*/
|
|
10
|
-
export default class Barrier<T, TR = T> extends Promise<TR> {
|
|
10
|
+
export default class Barrier<T = unknown, TR = T> extends Promise<TR> {
|
|
11
11
|
private p_resolve;
|
|
12
12
|
private p_reject;
|
|
13
13
|
private p_state;
|
package/js/Emitter.d.ts
CHANGED
|
@@ -1,30 +1,34 @@
|
|
|
1
|
-
type Listener = (...args:
|
|
1
|
+
type Listener<T extends unknown[] = unknown[]> = (...args: T) => void;
|
|
2
2
|
/**
|
|
3
3
|
* Simple listeneable data Emitter.
|
|
4
4
|
*/
|
|
5
|
-
export default class Emitter {
|
|
5
|
+
export default class Emitter<T extends unknown[] = unknown[]> {
|
|
6
6
|
private p_listeners;
|
|
7
7
|
/**
|
|
8
8
|
* Returns "true" if any listener is connected; "false" otherwise.
|
|
9
9
|
* @return {boolean}
|
|
10
10
|
*/
|
|
11
11
|
get hasListeners(): boolean;
|
|
12
|
-
get listeners(): ReadonlyArray<Listener
|
|
12
|
+
get listeners(): ReadonlyArray<Listener<T>>;
|
|
13
13
|
/**
|
|
14
14
|
* Adds `listener` if it is not already connected.
|
|
15
15
|
* @param {function} listener
|
|
16
16
|
* @return {function} Unsubscribe function.
|
|
17
17
|
*/
|
|
18
|
-
addListener(listener: Listener): () => void;
|
|
18
|
+
addListener(listener: Listener<T>): () => void;
|
|
19
19
|
/**
|
|
20
20
|
* Calls every connected listener with the given arguments.
|
|
21
|
-
* @param
|
|
21
|
+
* @param args
|
|
22
22
|
*/
|
|
23
|
-
emit(...args:
|
|
23
|
+
emit(...args: T): void;
|
|
24
|
+
/**
|
|
25
|
+
* Removes all connected listeners.
|
|
26
|
+
*/
|
|
27
|
+
removeAllListeners(): void;
|
|
24
28
|
/**
|
|
25
29
|
* Removes specified `listener`, if connected.
|
|
26
|
-
* @param
|
|
30
|
+
* @param listener
|
|
27
31
|
*/
|
|
28
|
-
removeListener(listener: Listener): void;
|
|
32
|
+
removeListener(listener: Listener<T>): void;
|
|
29
33
|
}
|
|
30
34
|
export {};
|
package/js/Emitter.js
CHANGED
|
@@ -28,7 +28,7 @@ class Emitter {
|
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* Calls every connected listener with the given arguments.
|
|
31
|
-
* @param
|
|
31
|
+
* @param args
|
|
32
32
|
*/
|
|
33
33
|
emit(...args) {
|
|
34
34
|
const { p_listeners: listeners } = this;
|
|
@@ -36,9 +36,15 @@ class Emitter {
|
|
|
36
36
|
listeners[i](...args);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Removes all connected listeners.
|
|
41
|
+
*/
|
|
42
|
+
removeAllListeners() {
|
|
43
|
+
this.p_listeners = [];
|
|
44
|
+
}
|
|
39
45
|
/**
|
|
40
46
|
* Removes specified `listener`, if connected.
|
|
41
|
-
* @param
|
|
47
|
+
* @param listener
|
|
42
48
|
*/
|
|
43
49
|
removeListener(listener) {
|
|
44
50
|
const idx = this.p_listeners.indexOf(listener);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dr.pogodin/js-utils",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "Collection of JavaScript (TypeScript) utilities.",
|
|
5
5
|
"main": "js/index",
|
|
6
6
|
"react-native": "ts/index",
|
|
@@ -29,15 +29,15 @@
|
|
|
29
29
|
},
|
|
30
30
|
"homepage": "https://github.com/birdofpreyru/js-utils#readme",
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@babel/core": "^7.21.
|
|
33
|
-
"@babel/preset-env": "^7.21.
|
|
34
|
-
"@babel/preset-typescript": "^7.21.
|
|
32
|
+
"@babel/core": "^7.21.8",
|
|
33
|
+
"@babel/preset-env": "^7.21.5",
|
|
34
|
+
"@babel/preset-typescript": "^7.21.5",
|
|
35
35
|
"@tsconfig/recommended": "^1.0.2",
|
|
36
36
|
"@types/jest": "^29.5.1",
|
|
37
|
-
"@typescript-eslint/eslint-plugin": "^5.59.
|
|
38
|
-
"@typescript-eslint/parser": "^5.59.
|
|
37
|
+
"@typescript-eslint/eslint-plugin": "^5.59.6",
|
|
38
|
+
"@typescript-eslint/parser": "^5.59.6",
|
|
39
39
|
"babel-jest": "^29.5.0",
|
|
40
|
-
"eslint": "^8.
|
|
40
|
+
"eslint": "^8.40.0",
|
|
41
41
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
42
42
|
"eslint-config-airbnb-typescript": "^17.0.0",
|
|
43
43
|
"eslint-import-resolver-typescript": "^3.5.5",
|
package/ts/Barrier.ts
CHANGED
|
@@ -14,7 +14,7 @@ enum STATE {
|
|
|
14
14
|
*
|
|
15
15
|
* Docs: https://dr.pogodin.studio/docs/react-utils/docs/api/classes/Barrier
|
|
16
16
|
*/
|
|
17
|
-
export default class Barrier<T, TR = T> extends Promise<TR> {
|
|
17
|
+
export default class Barrier<T = unknown, TR = T> extends Promise<TR> {
|
|
18
18
|
private p_resolve: Resolver<T> | Resolver<TR>;
|
|
19
19
|
|
|
20
20
|
private p_reject: Rejecter;
|
package/ts/Emitter.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
type Listener = (...args:
|
|
1
|
+
type Listener<T extends unknown[] = unknown[]> = (...args: T) => void;
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Simple listeneable data Emitter.
|
|
5
5
|
*/
|
|
6
|
-
export default class Emitter {
|
|
7
|
-
private p_listeners: Listener[] = [];
|
|
6
|
+
export default class Emitter<T extends unknown[] = unknown[]> {
|
|
7
|
+
private p_listeners: Listener<T>[] = [];
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Returns "true" if any listener is connected; "false" otherwise.
|
|
@@ -14,14 +14,14 @@ export default class Emitter {
|
|
|
14
14
|
return !!this.p_listeners.length;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
get listeners(): ReadonlyArray<Listener
|
|
17
|
+
get listeners(): ReadonlyArray<Listener<T>> { return this.p_listeners; }
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Adds `listener` if it is not already connected.
|
|
21
21
|
* @param {function} listener
|
|
22
22
|
* @return {function} Unsubscribe function.
|
|
23
23
|
*/
|
|
24
|
-
addListener(listener: Listener): () => void {
|
|
24
|
+
addListener(listener: Listener<T>): () => void {
|
|
25
25
|
if (!this.p_listeners.includes(listener)) {
|
|
26
26
|
this.p_listeners.push(listener);
|
|
27
27
|
}
|
|
@@ -30,20 +30,27 @@ export default class Emitter {
|
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Calls every connected listener with the given arguments.
|
|
33
|
-
* @param
|
|
33
|
+
* @param args
|
|
34
34
|
*/
|
|
35
|
-
emit(...args:
|
|
35
|
+
emit(...args: T) {
|
|
36
36
|
const { p_listeners: listeners } = this;
|
|
37
37
|
for (let i = 0; i < listeners.length; ++i) {
|
|
38
38
|
listeners[i](...args);
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
/**
|
|
43
|
+
* Removes all connected listeners.
|
|
44
|
+
*/
|
|
45
|
+
removeAllListeners() {
|
|
46
|
+
this.p_listeners = [];
|
|
47
|
+
}
|
|
48
|
+
|
|
42
49
|
/**
|
|
43
50
|
* Removes specified `listener`, if connected.
|
|
44
|
-
* @param
|
|
51
|
+
* @param listener
|
|
45
52
|
*/
|
|
46
|
-
removeListener(listener: Listener) {
|
|
53
|
+
removeListener(listener: Listener<T>) {
|
|
47
54
|
const idx = this.p_listeners.indexOf(listener);
|
|
48
55
|
if (idx >= 0) this.p_listeners.splice(idx, 1);
|
|
49
56
|
}
|