@dr.pogodin/js-utils 0.0.2 → 0.0.4

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/react-native-static-server)
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,30 @@
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
24
  /**
25
25
  * Removes specified `listener`, if connected.
26
- * @param {function} listener
26
+ * @param listener
27
27
  */
28
- removeListener(listener: Listener): void;
28
+ removeListener(listener: Listener<T>): void;
29
29
  }
30
30
  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;
@@ -38,7 +38,7 @@ class Emitter {
38
38
  }
39
39
  /**
40
40
  * Removes specified `listener`, if connected.
41
- * @param {function} listener
41
+ * @param listener
42
42
  */
43
43
  removeListener(listener) {
44
44
  const idx = this.p_listeners.indexOf(listener);
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@dr.pogodin/js-utils",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "Collection of JavaScript (TypeScript) utilities.",
5
5
  "main": "js/index",
6
6
  "react-native": "ts/index",
7
7
  "source": "ts/index",
8
8
  "types": "js/index.d.ts",
9
9
  "scripts": {
10
- "build": "tsc",
10
+ "build": "rimraf js && tsc",
11
11
  "jest": "jest --config jest.config.js",
12
12
  "lint": "eslint . --ext .js,.ts",
13
- "test": "npm run lint && npm run typecheck && npm run jest",
14
- "typecheck": "tsc --noEmit && tsc --project __tests__/tsconfig.json"
13
+ "test": "npm run build && npm run lint && npm run typecheck && npm run jest",
14
+ "typecheck": "tsc --noEmit && tsc --project __tests__/ts/tsconfig.json"
15
15
  },
16
16
  "repository": {
17
17
  "type": "git",
@@ -29,20 +29,21 @@
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.5",
38
+ "@typescript-eslint/parser": "^5.59.5",
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",
44
44
  "eslint-plugin-import": "^2.27.5",
45
45
  "jest": "^29.5.0",
46
+ "rimraf": "^5.0.0",
46
47
  "typescript": "^5.0.4"
47
48
  }
48
49
  }
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,9 +30,9 @@ 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);
@@ -41,9 +41,9 @@ export default class Emitter {
41
41
 
42
42
  /**
43
43
  * Removes specified `listener`, if connected.
44
- * @param {function} listener
44
+ * @param listener
45
45
  */
46
- removeListener(listener: Listener) {
46
+ removeListener(listener: Listener<T>) {
47
47
  const idx = this.p_listeners.indexOf(listener);
48
48
  if (idx >= 0) this.p_listeners.splice(idx, 1);
49
49
  }