@terrygonguet/utils 0.13.0 → 0.13.2

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/dist/json.d.mts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { StandardSchemaV1 } from "@standard-schema/spec";
2
-
3
2
  //#region src/json.d.ts
4
3
  /**
5
4
  * This function does no runtime type checking,
package/dist/option.d.mts CHANGED
@@ -6,14 +6,10 @@ declare class Option<T> {
6
6
  private constructor();
7
7
  [Symbol.iterator](): Iterator<Option<T>, T>;
8
8
  static do<T>(f: () => Iterator<Option<any>, T, any>): Option<T>;
9
- static from<T>(maybeValue: unknown, {
10
- allowOptionLikePOJO
11
- }?: {
9
+ static from<T>(maybeValue: unknown, { allowOptionLikePOJO }?: {
12
10
  allowOptionLikePOJO?: boolean | undefined;
13
11
  }): Option<T>;
14
- static wrapFunction<T, Args extends any[]>(f: (...args: Args) => T | undefined | null, {
15
- allowOptionLikePOJO
16
- }?: {
12
+ static wrapFunction<T, Args extends any[]>(f: (...args: Args) => T | undefined | null, { allowOptionLikePOJO }?: {
17
13
  allowOptionLikePOJO?: boolean | undefined;
18
14
  }): (...args: Args) => Option<T>;
19
15
  static isOption<T>(maybeOption: unknown): maybeOption is Option<T>;
@@ -23,9 +19,7 @@ declare class Option<T> {
23
19
  isSome(): boolean;
24
20
  isNone(): boolean;
25
21
  equals(other: Option<T>): boolean;
26
- map<U>(f: (value: T) => U, {
27
- coalesce
28
- }?: {
22
+ map<U>(f: (value: T) => U, { coalesce }?: {
29
23
  coalesce?: boolean | undefined;
30
24
  }): Option<U>;
31
25
  flatMap<U>(f: (value: T) => Option<U>): Option<U>;
package/dist/result.d.mts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { StandardSchemaV1 } from "@standard-schema/spec";
2
-
3
2
  //#region src/result.d.ts
4
3
  declare class Result<Err extends Error, T> {
5
4
  value: T | null;
package/dist/task.d.mts CHANGED
@@ -1,5 +1,4 @@
1
1
  import { Option } from "./option.mjs";
2
-
3
2
  //#region src/task.d.ts
4
3
  declare class Task<T, E extends Error = Error> {
5
4
  _state: {
@@ -27,10 +26,12 @@ declare class Task<T, E extends Error = Error> {
27
26
  isComplete(): boolean;
28
27
  isFailed(): boolean;
29
28
  then<U>(onResolve: (value: T) => U | Promise<U>, onReject: (error: E) => U | Promise<U>): U | Promise<U>;
30
- map<U, E2 extends E>(f: (value: T) => U | Promise<U>): Task<U, E2>;
31
- flatMap<U, E2 extends E>(f: (value: T) => Task<U, E2>): Task<U, E2>;
29
+ map<U, E2 extends E>(onComplete: (value: T) => U | Promise<U>, onFailed?: (error: E) => U | Promise<U>): Task<U, E2>;
30
+ flatMap<U, E2 extends E>(onComplete: (value: T) => Task<U, E2>, onFailed?: (error: E) => Task<U, E2>): Task<U, E2>;
31
+ recover<E2 extends E>(onFailed: (error: E) => Task<T, E2>): Task<T, E2>;
32
32
  flatten(): T extends Task<infer U> ? Task<U> : Task<T>;
33
33
  orDefault(defaultValue: T): Promise<T>;
34
+ asTuple(): Promise<[E, null] | [null, T]>;
34
35
  unwrap(): T;
35
36
  toString(): string;
36
37
  }
package/dist/task.mjs CHANGED
@@ -129,10 +129,17 @@ var Task = class Task {
129
129
  });
130
130
  else return onReject(this._state.error);
131
131
  }
132
- map(f) {
133
- if (this._state.type == "pending") return Task.fromPromise(this._state.promise.then(() => this.map(f)));
132
+ map(onComplete, onFailed) {
133
+ if (this._state.type == "pending") return Task.fromPromise(this._state.promise.then(() => this.map(onComplete)));
134
134
  else if (this._state.type == "complete") try {
135
- const result = f(this._state.value);
135
+ const result = onComplete(this._state.value);
136
+ if (result instanceof Promise) return Task.fromPromise(result);
137
+ else return Task.complete(result);
138
+ } catch (error) {
139
+ return Task.failed(error);
140
+ }
141
+ else if (onFailed) try {
142
+ const result = onFailed(this._state.error);
136
143
  if (result instanceof Promise) return Task.fromPromise(result);
137
144
  else return Task.complete(result);
138
145
  } catch (error) {
@@ -140,11 +147,17 @@ var Task = class Task {
140
147
  }
141
148
  else return this;
142
149
  }
143
- flatMap(f) {
144
- if (this._state.type == "pending") return Task.fromPromise(this._state.promise.then(() => this.flatMap(f)));
145
- else if (this._state.type == "complete") return f(this._state.value);
150
+ flatMap(onComplete, onFailed) {
151
+ if (this._state.type == "pending") return Task.fromPromise(this._state.promise.then(() => this.flatMap(onComplete)));
152
+ else if (this._state.type == "complete") return onComplete(this._state.value);
153
+ else if (onFailed) return onFailed(this._state.error);
146
154
  else return this;
147
155
  }
156
+ recover(onFailed) {
157
+ if (this._state.type == "pending") return Task.fromPromise(this._state.promise.then(() => this.recover(onFailed)));
158
+ else if (this._state.type == "complete") return this;
159
+ else return onFailed(this._state.error);
160
+ }
148
161
  flatten() {
149
162
  if (this._state.type == "complete") return Task.isTask(this._state.value) ? this._state.value : this;
150
163
  else if (this._state.type == "failed") return this;
@@ -158,6 +171,11 @@ var Task = class Task {
158
171
  else return defaultValue;
159
172
  });
160
173
  }
174
+ async asTuple() {
175
+ if (this._state.type == "pending") return this._state.promise.then(() => this.asTuple());
176
+ else if (this._state.type == "complete") return [null, this._state.value];
177
+ else return [this._state.error, null];
178
+ }
161
179
  unwrap() {
162
180
  if (this._state.type == "complete") return this._state.value;
163
181
  else if (this._state.type == "failed") throw new Error("Tried to unwrap a failed Task");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@terrygonguet/utils",
3
- "version": "0.13.0",
3
+ "version": "0.13.2",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "scripts": {