@yaasl/utils 0.8.0-alpha.3 → 0.8.0-alpha.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.
@@ -0,0 +1,9 @@
1
+ type Executor<T, R> = ((value: T) => R | PromiseLike<R>) | undefined | null;
2
+ export declare class Thenable<T = undefined> implements PromiseLike<T> {
3
+ private value?;
4
+ constructor(value?: T | undefined);
5
+ then<Result = T, Reject = never>(onfulfilled?: Executor<T, Result>, onrejected?: Executor<any, Reject>): PromiseLike<Result | Reject>;
6
+ static isThenable(item: unknown): boolean;
7
+ static all(items: PromiseLike<any>[]): Promise<any[]> | Thenable<unknown[]>;
8
+ }
9
+ export {};
@@ -1,3 +1,7 @@
1
+ export * from "./isPromiseLike";
1
2
  export * from "./log";
2
- export * from "./utilTypes";
3
3
  export * from "./mockConsole";
4
+ export * from "./sleep";
5
+ export * from "./Thenable";
6
+ export * from "./toVoid";
7
+ export * from "./utilTypes";
@@ -0,0 +1 @@
1
+ export declare const isPromiseLike: (value: unknown) => value is PromiseLike<any>;
@@ -1,5 +1,5 @@
1
1
  export declare const mockConsole: () => {
2
- error: import("@vitest/spy").Mock<unknown[], unknown>;
3
- warn: import("@vitest/spy").Mock<unknown[], unknown>;
2
+ error: import("vitest").Mock<unknown[], unknown>;
3
+ warn: import("vitest").Mock<unknown[], unknown>;
4
4
  resetConsole: () => Console;
5
5
  };
@@ -0,0 +1 @@
1
+ export declare const sleep: (ms: number) => Promise<unknown>;
@@ -0,0 +1 @@
1
+ export declare const toVoid: () => void;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Thenable = void 0;
4
+ const isPromiseLike_1 = require("./isPromiseLike");
5
+ class Thenable {
6
+ constructor(value) {
7
+ this.value = value;
8
+ }
9
+ then(onfulfilled, onrejected) {
10
+ try {
11
+ const result = !onfulfilled ? this.value : onfulfilled(this.value);
12
+ return (0, isPromiseLike_1.isPromiseLike)(result) ? result : new Thenable(result);
13
+ }
14
+ catch (error) {
15
+ if (!onrejected)
16
+ throw error;
17
+ const result = onrejected(error);
18
+ return (0, isPromiseLike_1.isPromiseLike)(result) ? result : new Thenable(result);
19
+ }
20
+ }
21
+ static isThenable(item) {
22
+ return item instanceof Thenable;
23
+ }
24
+ static all(items) {
25
+ const onlyThenables = items.every(item => this.isThenable(item));
26
+ if (!onlyThenables) {
27
+ return Promise.all(items);
28
+ }
29
+ const result = [];
30
+ items.forEach(item => void item.then(value => {
31
+ result.push(value);
32
+ }));
33
+ return new Thenable(result);
34
+ }
35
+ }
36
+ exports.Thenable = Thenable;
package/dist/cjs/index.js CHANGED
@@ -14,6 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./isPromiseLike"), exports);
17
18
  __exportStar(require("./log"), exports);
18
- __exportStar(require("./utilTypes"), exports);
19
19
  __exportStar(require("./mockConsole"), exports);
20
+ __exportStar(require("./sleep"), exports);
21
+ __exportStar(require("./Thenable"), exports);
22
+ __exportStar(require("./toVoid"), exports);
23
+ __exportStar(require("./utilTypes"), exports);
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isPromiseLike = void 0;
4
+ const isPromiseLike = (value) => typeof value === "object" &&
5
+ value !== null &&
6
+ "then" in value &&
7
+ typeof value.then === "function";
8
+ exports.isPromiseLike = isPromiseLike;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sleep = void 0;
4
+ const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
5
+ exports.sleep = sleep;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toVoid = void 0;
4
+ const toVoid = () => {
5
+ // omit args
6
+ };
7
+ exports.toVoid = toVoid;
@@ -0,0 +1,32 @@
1
+ import { isPromiseLike } from "./isPromiseLike";
2
+ export class Thenable {
3
+ constructor(value) {
4
+ this.value = value;
5
+ }
6
+ then(onfulfilled, onrejected) {
7
+ try {
8
+ const result = !onfulfilled ? this.value : onfulfilled(this.value);
9
+ return isPromiseLike(result) ? result : new Thenable(result);
10
+ }
11
+ catch (error) {
12
+ if (!onrejected)
13
+ throw error;
14
+ const result = onrejected(error);
15
+ return isPromiseLike(result) ? result : new Thenable(result);
16
+ }
17
+ }
18
+ static isThenable(item) {
19
+ return item instanceof Thenable;
20
+ }
21
+ static all(items) {
22
+ const onlyThenables = items.every(item => this.isThenable(item));
23
+ if (!onlyThenables) {
24
+ return Promise.all(items);
25
+ }
26
+ const result = [];
27
+ items.forEach(item => void item.then(value => {
28
+ result.push(value);
29
+ }));
30
+ return new Thenable(result);
31
+ }
32
+ }
package/dist/mjs/index.js CHANGED
@@ -1,3 +1,7 @@
1
+ export * from "./isPromiseLike";
1
2
  export * from "./log";
2
- export * from "./utilTypes";
3
3
  export * from "./mockConsole";
4
+ export * from "./sleep";
5
+ export * from "./Thenable";
6
+ export * from "./toVoid";
7
+ export * from "./utilTypes";
@@ -0,0 +1,4 @@
1
+ export const isPromiseLike = (value) => typeof value === "object" &&
2
+ value !== null &&
3
+ "then" in value &&
4
+ typeof value.then === "function";
@@ -0,0 +1 @@
1
+ export const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
@@ -0,0 +1,3 @@
1
+ export const toVoid = () => {
2
+ // omit args
3
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yaasl/utils",
3
- "version": "0.8.0-alpha.3",
3
+ "version": "0.8.0-alpha.4",
4
4
  "description": "Utilities for @yaasl packages",
5
5
  "author": "PrettyCoffee",
6
6
  "license": "MIT",
@@ -26,8 +26,8 @@
26
26
  "compile:mjs": "tsc -p ./tsconfig.node.json --outDir ./dist/mjs -m es2020 -t es2020",
27
27
  "compile:cjs": "tsc -p ./tsconfig.node.json --outDir ./dist/cjs -m commonjs -t es2015",
28
28
  "compile:types": "tsc -p ./tsconfig.node.json --outDir ./dist/@types --declaration --emitDeclarationOnly",
29
- "test": "vitest run --passWithNoTests",
30
- "test:watch": "vitest watch --passWithNoTests",
29
+ "test": "vitest run",
30
+ "test:watch": "vitest watch",
31
31
  "lint": "eslint ./src",
32
32
  "lint:fix": "eslint ./src --fix",
33
33
  "validate": "run-s lint test build"