@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 CHANGED
@@ -6,6 +6,7 @@
6
6
  [![NPM Downloads](https://img.shields.io/npm/dm/@dr.pogodin/js-utils.svg)](https://www.npmjs.com/package/@dr.pogodin/js-utils)
7
7
  [![CircleCI](https://dl.circleci.com/status-badge/img/gh/birdofpreyru/js-utils/tree/master.svg?style=shield)](https://app.circleci.com/pipelines/github/birdofpreyru/js-utils)
8
8
  [![GitHub repo stars](https://img.shields.io/github/stars/birdofpreyru/js-utils?style=social)](https://github.com/birdofpreyru/js-utils)
9
+ [![Dr. Pogodin Studio](https://raw.githubusercontent.com/birdofpreyru/js-utils/master/.README/logo-dr-pogodin-studio.png)](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
  [![Sponsor](.README/sponsor.png)](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: any[]) => void;
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 {...any} args
21
+ * @param args
22
22
  */
23
- emit(...args: any[]): void;
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 {function} listener
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 {...any} args
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 {function} listener
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",
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.4",
33
- "@babel/preset-env": "^7.21.4",
34
- "@babel/preset-typescript": "^7.21.4",
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.1",
38
- "@typescript-eslint/parser": "^5.59.1",
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.39.0",
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: any[]) => void;
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> { return this.p_listeners; }
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 {...any} args
33
+ * @param args
34
34
  */
35
- emit(...args: any[]) {
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 {function} listener
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
  }