@pvorona/failable 0.0.3 → 0.1.0

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
@@ -11,9 +11,9 @@ npm i @pvorona/failable
11
11
  ## Usage
12
12
 
13
13
  ```ts
14
- import { Failable } from '@pvorona/failable';
14
+ import { createFailable } from '@pvorona/failable';
15
15
 
16
- const result = Failable.from(() => JSON.parse(text));
16
+ const result = createFailable(() => JSON.parse(text));
17
17
 
18
18
  if (result.isSuccess) {
19
19
  console.log(result.data);
@@ -25,29 +25,29 @@ if (result.isSuccess) {
25
25
  ### Factories
26
26
 
27
27
  ```ts
28
- import { Failable } from '@pvorona/failable';
28
+ import { failure, success } from '@pvorona/failable';
29
29
 
30
- const success = Failable.ofSuccess(42);
31
- const failure = Failable.ofError(new Error('boom'));
30
+ const ok = success(42);
31
+ const err = failure(new Error('boom'));
32
32
  ```
33
33
 
34
34
  ### Fallbacks
35
35
 
36
36
  ```ts
37
- import { Failable } from '@pvorona/failable';
37
+ import { failure } from '@pvorona/failable';
38
38
 
39
- const failure = Failable.ofError(new Error('boom'));
39
+ const err = failure(new Error('boom'));
40
40
 
41
- const value = failure.getOr('default'); // 'default'
42
- const recovered = failure.or('fallback'); // Success<'fallback'>
41
+ const value = err.getOr('default'); // 'default'
42
+ const recovered = err.or('fallback'); // Success<'fallback'>
43
43
  ```
44
44
 
45
45
  ### Wrapping async work
46
46
 
47
47
  ```ts
48
- import { Failable } from '@pvorona/failable';
48
+ import { createFailable } from '@pvorona/failable';
49
49
 
50
- const result = await Failable.from(fetch('/api'));
50
+ const result = await createFailable(fetch('/api'));
51
51
  ```
52
52
 
53
53
  ### Structured-clone transport
@@ -55,14 +55,14 @@ const result = await Failable.from(fetch('/api'));
55
55
  `Failable` instances use Symbols and prototype methods that do not survive structured cloning (`postMessage`, `chrome.runtime.sendMessage`, etc.). Convert to a plain object first:
56
56
 
57
57
  ```ts
58
- import { Failable } from '@pvorona/failable';
58
+ import { createFailable, toFailableLike } from '@pvorona/failable';
59
59
 
60
60
  // sender
61
- const wire = Failable.toFailableLike(result);
61
+ const wire = toFailableLike(result);
62
62
  postMessage(wire);
63
63
 
64
64
  // receiver
65
- const hydrated = Failable.from(wire);
65
+ const hydrated = createFailable(wire);
66
66
  ```
67
67
 
68
68
  ## API
@@ -97,13 +97,13 @@ Example:
97
97
 
98
98
  ```ts
99
99
  import type { Failable } from '@pvorona/failable';
100
- import { Failable as FailableNS } from '@pvorona/failable';
100
+ import { failure, success } from '@pvorona/failable';
101
101
 
102
102
  export function parseIntSafe(input: string): Failable<number, Error> {
103
103
  const n = Number(input);
104
- if (!Number.isInteger(n)) return FailableNS.ofError(new Error('Not an int'));
104
+ if (!Number.isInteger(n)) return failure(new Error('Not an int'));
105
105
 
106
- return FailableNS.ofSuccess(n);
106
+ return success(n);
107
107
  }
108
108
  ```
109
109
 
@@ -122,9 +122,9 @@ Key fields/methods:
122
122
  Example:
123
123
 
124
124
  ```ts
125
- import { Failable } from '@pvorona/failable';
125
+ import { success } from '@pvorona/failable';
126
126
 
127
- const s = Failable.ofSuccess(123);
127
+ const s = success(123);
128
128
  s.getOr(0); // 123
129
129
  s.or('x'); // Success<number>
130
130
  ```
@@ -144,9 +144,9 @@ Key fields/methods:
144
144
  Example:
145
145
 
146
146
  ```ts
147
- import { Failable } from '@pvorona/failable';
147
+ import { failure } from '@pvorona/failable';
148
148
 
149
- const f = Failable.ofError(new Error('boom'));
149
+ const f = failure(new Error('boom'));
150
150
  f.getOr('default'); // 'default'
151
151
  f.or(42).data; // 42
152
152
  ```
@@ -200,7 +200,7 @@ const wireErr: FailableLikeFailure<string> = {
200
200
 
201
201
  Low-level Symbol tags used to mark hydrated `Failable` instances at runtime.
202
202
 
203
- Most code should prefer `result.isSuccess` / `result.isError` or the guards `Failable.isSuccess(...)` / `Failable.isFailure(...)`.
203
+ Most code should prefer `result.isSuccess` / `result.isError` or the guards `isSuccess(...)` / `isFailure(...)`.
204
204
 
205
205
  Example (advanced):
206
206
 
@@ -216,118 +216,114 @@ export function isHydratedFailable(value: unknown): boolean {
216
216
  }
217
217
  ```
218
218
 
219
- ### `const Failable`
220
-
221
- Namespace-style factory + utilities for producing and working with `Failable<T, E>`.
222
-
223
- #### `Failable.ofSuccess<T>(data: T): Success<T>`
219
+ ### `success<T>(data: T): Success<T>`
224
220
 
225
221
  Example:
226
222
 
227
223
  ```ts
228
- import { Failable } from '@pvorona/failable';
224
+ import { success } from '@pvorona/failable';
229
225
 
230
- const ok = Failable.ofSuccess({ id: '1' });
226
+ const ok = success({ id: '1' });
231
227
  ```
232
228
 
233
- #### `Failable.ofError<E>(error: E): Failure<E>`
229
+ ### `failure<E>(error: E): Failure<E>`
234
230
 
235
231
  Example:
236
232
 
237
233
  ```ts
238
- import { Failable } from '@pvorona/failable';
234
+ import { failure } from '@pvorona/failable';
239
235
 
240
- const err = Failable.ofError({ code: 'bad_request' });
236
+ const err = failure({ code: 'bad_request' });
241
237
  ```
242
238
 
243
- #### `Failable.isFailable(value): value is Failable<unknown, unknown>`
239
+ ### `isFailable(value): value is Failable<unknown, unknown>`
244
240
 
245
241
  Checks whether a value is a hydrated `Failable` instance (Symbol-tagged).
246
242
 
247
243
  Example:
248
244
 
249
245
  ```ts
250
- import { Failable } from '@pvorona/failable';
246
+ import { isFailable, success } from '@pvorona/failable';
251
247
 
252
- const maybe: unknown = Failable.ofSuccess(1);
253
- if (Failable.isFailable(maybe)) {
248
+ const maybe: unknown = success(1);
249
+ if (isFailable(maybe)) {
254
250
  // narrowed
255
251
  }
256
252
  ```
257
253
 
258
- #### `Failable.isSuccess(value): value is Success<unknown>`
254
+ ### `isSuccess(value): value is Success<unknown>`
259
255
 
260
256
  Example:
261
257
 
262
258
  ```ts
263
- import { Failable } from '@pvorona/failable';
259
+ import { isSuccess, success } from '@pvorona/failable';
264
260
 
265
- const maybe: unknown = Failable.ofSuccess(1);
266
- if (Failable.isSuccess(maybe)) {
261
+ const maybe: unknown = success(1);
262
+ if (isSuccess(maybe)) {
267
263
  maybe.data; // ok
268
264
  }
269
265
  ```
270
266
 
271
- #### `Failable.isFailure(value): value is Failure<unknown>`
267
+ ### `isFailure(value): value is Failure<unknown>`
272
268
 
273
269
  Example:
274
270
 
275
271
  ```ts
276
- import { Failable } from '@pvorona/failable';
272
+ import { failure, isFailure } from '@pvorona/failable';
277
273
 
278
- const maybe: unknown = Failable.ofError('nope');
279
- if (Failable.isFailure(maybe)) {
274
+ const maybe: unknown = failure('nope');
275
+ if (isFailure(maybe)) {
280
276
  console.log(maybe.error);
281
277
  }
282
278
  ```
283
279
 
284
- #### `Failable.toFailableLike(result): FailableLike<...>`
280
+ ### `toFailableLike(result): FailableLike<...>`
285
281
 
286
282
  Converts a hydrated `Failable` into a structured-clone-friendly representation.
287
283
 
288
284
  Example:
289
285
 
290
286
  ```ts
291
- import { Failable } from '@pvorona/failable';
287
+ import { success, toFailableLike } from '@pvorona/failable';
292
288
 
293
- const res = Failable.ofSuccess(1);
294
- const wire = Failable.toFailableLike(res);
289
+ const res = success(1);
290
+ const wire = toFailableLike(res);
295
291
  ```
296
292
 
297
- #### `Failable.isFailableLike(value): value is FailableLike<unknown, unknown>`
293
+ ### `isFailableLike(value): value is FailableLike<unknown, unknown>`
298
294
 
299
295
  Strictly checks for `{ status, data }` or `{ status, error }` with no extra enumerable keys.
300
296
 
301
297
  Example:
302
298
 
303
299
  ```ts
304
- import { Failable } from '@pvorona/failable';
300
+ import { isFailableLike } from '@pvorona/failable';
305
301
 
306
302
  const wire: unknown = { status: 'success', data: 1 };
307
- Failable.isFailableLike(wire); // true
303
+ isFailableLike(wire); // true
308
304
  ```
309
305
 
310
- #### `Failable.from(...)`
306
+ ### `createFailable(...)`
311
307
 
312
308
  Overloads:
313
309
 
314
- - `from(failable)` → returns the same instance
315
- - `from(failableLike)` → rehydrates into a real `Success` / `Failure`
316
- - `from(() => value)` → captures throws into `Failure`
317
- - `from(promise)` → captures rejections into `Failure`
310
+ - `createFailable(failable)` → returns the same instance
311
+ - `createFailable(failableLike)` → rehydrates into a real `Success` / `Failure`
312
+ - `createFailable(() => value)` → captures throws into `Failure`
313
+ - `createFailable(promise)` → captures rejections into `Failure`
318
314
 
319
315
  Examples:
320
316
 
321
317
  ```ts
322
- import { Failable } from '@pvorona/failable';
318
+ import { createFailable, failure, toFailableLike } from '@pvorona/failable';
323
319
 
324
320
  // function wrapper (captures throws)
325
- const res1 = Failable.from(() => JSON.parse('{'));
321
+ const res1 = createFailable(() => JSON.parse('{'));
326
322
 
327
323
  // promise wrapper (captures rejections)
328
- const res2 = await Failable.from(fetch('https://example.com'));
324
+ const res2 = await createFailable(fetch('https://example.com'));
329
325
 
330
326
  // rehydrate from structured clone
331
- const wire = Failable.toFailableLike(Failable.ofError('bad'));
332
- const hydrated = Failable.from(wire);
327
+ const wire = toFailableLike(failure('bad'));
328
+ const hydrated = createFailable(wire);
333
329
  ```
package/dist/index.js CHANGED
@@ -1,80 +1,92 @@
1
- import { isObject as s, isFunction as l } from "@pvorona/assert";
2
- import { notImplemented as o } from "@pvorona/not-implemented";
3
- const i = /* @__PURE__ */ Symbol("Failable"), u = /* @__PURE__ */ Symbol("Success"), a = /* @__PURE__ */ Symbol("Failure");
4
- var b = /* @__PURE__ */ ((r) => (r.Success = "success", r.Failure = "failure", r))(b || {});
5
- function O(r) {
6
- return s(r) && Object.keys(r).length === 2 && Object.getOwnPropertyDescriptor(r, "status")?.value === "success" && Object.prototype.hasOwnProperty.call(r, "data");
1
+ import { isFunction as F, isObject as e } from "@pvorona/assert";
2
+ import { notImplemented as c } from "@pvorona/not-implemented";
3
+ const f = /* @__PURE__ */ Symbol("Failable"), O = /* @__PURE__ */ Symbol("Success"), l = /* @__PURE__ */ Symbol("Failure");
4
+ var S = /* @__PURE__ */ ((r) => (r.Success = "success", r.Failure = "failure", r))(S || {});
5
+ function g(r) {
6
+ return e(r) && Object.keys(r).length === 2 && Object.getOwnPropertyDescriptor(r, "status")?.value === "success" && Object.prototype.hasOwnProperty.call(r, "data");
7
7
  }
8
- function F(r) {
9
- return s(r) && Object.keys(r).length === 2 && Object.getOwnPropertyDescriptor(r, "status")?.value === "failure" && Object.prototype.hasOwnProperty.call(r, "error");
8
+ function h(r) {
9
+ return e(r) && Object.keys(r).length === 2 && Object.getOwnPropertyDescriptor(r, "status")?.value === "failure" && Object.prototype.hasOwnProperty.call(r, "error");
10
+ }
11
+ function u(r) {
12
+ return h(r) || g(r);
10
13
  }
11
- const f = {
12
- [i]: !0,
14
+ const b = {
15
+ [f]: !0,
13
16
  isSuccess: !1,
14
17
  isError: !1,
15
18
  data: null,
16
19
  error: null,
17
- or: o,
18
- getOr: o,
19
- getOrThrow: o
20
- }, S = (() => {
21
- const r = Object.create(f);
22
- return r[u] = !0, r.status = "success", r.isSuccess = !0, r.or = function() {
20
+ or: c,
21
+ getOr: c,
22
+ getOrThrow: c
23
+ }, j = (() => {
24
+ const r = Object.create(b);
25
+ return r[O] = !0, r.status = "success", r.isSuccess = !0, r.or = function() {
23
26
  return this;
24
27
  }, r.getOr = function() {
25
28
  return this.data;
26
29
  }, r.getOrThrow = function() {
27
30
  return this.data;
28
31
  }, Object.freeze(r);
29
- })(), g = (() => {
30
- const r = Object.create(f);
31
- return r[a] = !0, r.status = "failure", r.isError = !0, r.or = function(c) {
32
- return t.ofSuccess(c);
33
- }, r.getOr = function(c) {
34
- return c;
32
+ })(), m = (() => {
33
+ const r = Object.create(b);
34
+ return r[l] = !0, r.status = "failure", r.isError = !0, r.or = function(s) {
35
+ return n(s);
36
+ }, r.getOr = function(s) {
37
+ return s;
35
38
  }, r.getOrThrow = function() {
36
39
  throw this.error;
37
40
  }, Object.freeze(r);
38
- })(), t = {
39
- isFailable: (r) => s(r) && r[i] === !0,
40
- isSuccess: (r) => s(r) && r[u] === !0,
41
- isFailure: (r) => s(r) && r[a] === !0,
42
- ofSuccess: (r) => {
43
- const e = Object.create(S);
44
- return e.data = r, Object.freeze(e);
45
- },
46
- ofError: (r) => {
47
- const e = Object.create(g);
48
- return e.error = r, Object.freeze(e);
49
- },
50
- toFailableLike: h,
51
- isFailableLike: (r) => F(r) || O(r),
52
- from: j
53
- };
54
- function h(r) {
55
- return r.status === "failure" ? { status: "failure", error: r.error } : { status: "success", data: r.data };
41
+ })();
42
+ function o(r) {
43
+ return e(r) && r[f] === !0;
44
+ }
45
+ function E(r) {
46
+ return e(r) && r[O] === !0;
56
47
  }
57
- function j(r) {
58
- return t.isFailable(r) ? r : t.isFailableLike(r) ? n(r) : l(r) ? m(r) : p(r);
48
+ function T(r) {
49
+ return e(r) && r[l] === !0;
59
50
  }
60
51
  function n(r) {
61
- return r.status === "success" ? t.ofSuccess(r.data) : t.ofError(r.error);
52
+ const t = Object.create(j);
53
+ return t.data = r, Object.freeze(t);
54
+ }
55
+ function i(r) {
56
+ const t = Object.create(m);
57
+ return t.error = r, Object.freeze(t);
62
58
  }
63
- function m(r) {
59
+ function A(r) {
60
+ return r.status === "failure" ? { status: "failure", error: r.error } : { status: "success", data: r.data };
61
+ }
62
+ function L(r) {
63
+ return o(r) ? r : u(r) ? a(r) : F(r) ? p(r) : y(r);
64
+ }
65
+ function a(r) {
66
+ return r.status === "success" ? n(r.data) : i(r.error);
67
+ }
68
+ function p(r) {
64
69
  try {
65
- const e = r();
66
- return t.isFailable(e) ? e : t.isFailableLike(e) ? n(e) : t.ofSuccess(e);
67
- } catch (e) {
68
- return t.ofError(e);
70
+ const t = r();
71
+ return o(t) ? t : u(t) ? a(t) : n(t);
72
+ } catch (t) {
73
+ return i(t);
69
74
  }
70
75
  }
71
- function p(r) {
72
- return r.then((e) => t.isFailable(e) ? e : t.isFailableLike(e) ? n(e) : t.ofSuccess(e), t.ofError);
76
+ function y(r) {
77
+ return Promise.resolve(r).then((t) => o(t) ? t : u(t) ? a(t) : n(t), i);
73
78
  }
74
79
  export {
75
- t as Failable,
76
- b as FailableStatus,
77
- i as FailableTag,
78
- a as FailureTag,
79
- u as SuccessTag
80
+ S as FailableStatus,
81
+ f as FailableTag,
82
+ l as FailureTag,
83
+ O as SuccessTag,
84
+ L as createFailable,
85
+ i as failure,
86
+ o as isFailable,
87
+ u as isFailableLike,
88
+ T as isFailure,
89
+ E as isSuccess,
90
+ n as success,
91
+ A as toFailableLike
80
92
  };
@@ -14,8 +14,8 @@ export type Failable<T, E> = Success<T> | Failure<E>;
14
14
  * A {@link Failable} instance relies on Symbols and prototype methods, which do not survive structured cloning.
15
15
  *
16
16
  * Boundary rule:
17
- * - **sender**: `Failable.toFailableLike(result)`
18
- * - **receiver**: `Failable.from(message.result)` (rehydrates into a real {@link Failable})
17
+ * - **sender**: `toFailableLike(result)`
18
+ * - **receiver**: `createFailable(message.result)` (rehydrates into a real {@link Failable})
19
19
  *
20
20
  * Note: `data` / `error` must themselves be structured-cloneable.
21
21
  */
@@ -28,6 +28,7 @@ export type FailableLikeFailure<E> = {
28
28
  readonly status: FailableStatus.Failure;
29
29
  readonly error: E;
30
30
  };
31
+ export declare function isFailableLike(value: unknown): value is FailableLike<unknown, unknown>;
31
32
  export type Success<T> = {
32
33
  readonly [FailableTag]: true;
33
34
  readonly [SuccessTag]: true;
@@ -53,7 +54,7 @@ export type Failure<E> = {
53
54
  readonly getOrThrow: () => never;
54
55
  };
55
56
  /**
56
- * Namespace-style factory + utilities for the {@link Failable} result type.
57
+ * Factory + utilities for the {@link Failable} result type.
57
58
  *
58
59
  * `Failable<T, E>` is a discriminated union of:
59
60
  * - {@link Success}: `{ status: 'success', isSuccess: true, data: T, error: null }`
@@ -67,59 +68,54 @@ export type Failure<E> = {
67
68
  * Runtime model / invariants:
68
69
  * - Instances are shallow-immutable (`Object.freeze`) and tagged with Symbols.
69
70
  * - They are NOT class instances; do not use `instanceof`. Prefer `result.isSuccess` / `result.isError`
70
- * or the guards {@link Failable.isSuccess} / {@link Failable.isFailure}.
71
+ * or the guards {@link isSuccess} / {@link isFailure}.
71
72
  * - Exactly one of `data` / `error` is non-null.
72
73
  *
73
74
  * Structured-clone boundary rule (RPC, `postMessage`, `chrome.*` messaging):
74
- * - **sender**: `Failable.toFailableLike(result)`
75
- * - **receiver**: `Failable.from(payload)` (rehydrates methods + Symbol tags)
75
+ * - **sender**: `toFailableLike(result)`
76
+ * - **receiver**: `createFailable(payload)` (rehydrates methods + Symbol tags)
76
77
  *
77
- * `Failable.from(...)` overloads:
78
- * - `from(failable)` returns the same instance (no wrapping).
79
- * - `from(failableLike)` rehydrates into a real `Success` / `Failure`.
80
- * - `from(() => value)` captures thrown values into `Failure` and preserves/rehydrates returned
78
+ * `createFailable(...)` overloads:
79
+ * - `createFailable(failable)` returns the same instance (no wrapping).
80
+ * - `createFailable(failableLike)` rehydrates into a real `Success` / `Failure`.
81
+ * - `createFailable(() => value)` captures thrown values into `Failure` and preserves/rehydrates returned
81
82
  * `Failable` / `FailableLike`.
82
- * - `from(promise)` captures rejection values into `Failure` and preserves/rehydrates resolved
83
+ * - `createFailable(promise)` captures rejection values into `Failure` and preserves/rehydrates resolved
83
84
  * `Failable` / `FailableLike`.
84
85
  *
85
86
  * Gotchas:
86
- * - `Failable.isFailableLike` is intentionally strict: only `{ status, data }` or `{ status, error }`
87
+ * - `isFailableLike` is intentionally strict: only `{ status, data }` or `{ status, error }`
87
88
  * with no extra enumerable keys. If you need metadata, wrap it: `{ result: failableLike, meta }`.
88
89
  * - `or(...)` and `getOr(...)` are eager (fallback is evaluated before the call). Use branching for
89
90
  * lazy fallbacks.
90
91
  * - No error normalization is performed: whatever you throw/reject becomes `.error`.
91
- * - `from(() => somePromise)` does NOT await; pass the promise directly: `from(somePromise)`.
92
+ * - `createFailable(() => somePromise)` does NOT await; pass the promise directly: `createFailable(somePromise)`.
92
93
  *
93
94
  * @example
94
- * const res = Failable.from(() => JSON.parse(text));
95
+ * const res = createFailable(() => JSON.parse(text));
95
96
  * if (res.isSuccess) return res.data;
96
97
  * console.error(res.error);
97
98
  *
98
99
  * @example
99
100
  * // Structured-clone transport
100
- * const wire = Failable.toFailableLike(res);
101
+ * const wire = toFailableLike(res);
101
102
  * // ... send wire ...
102
- * const hydrated = Failable.from(wire);
103
+ * const hydrated = createFailable(wire);
103
104
  */
104
- export declare const Failable: {
105
- readonly isFailable: (value: unknown) => value is Failable<unknown, unknown>;
106
- readonly isSuccess: (value: unknown) => value is Success<unknown>;
107
- readonly isFailure: (value: unknown) => value is Failure<unknown>;
108
- readonly ofSuccess: <T = void>(data: T) => Success<T>;
109
- readonly ofError: <E = void>(error: E) => Failure<E>;
110
- readonly toFailableLike: typeof toFailableLike;
111
- readonly isFailableLike: (value: unknown) => value is FailableLike<unknown, unknown>;
112
- readonly from: typeof from;
113
- };
114
- declare function toFailableLike<T>(value: Success<T>): FailableLikeSuccess<T>;
115
- declare function toFailableLike<E>(value: Failure<E>): FailableLikeFailure<E>;
116
- declare function toFailableLike<T, E>(value: Failable<T, E>): FailableLike<T, E>;
105
+ export declare function isFailable(value: unknown): value is Failable<unknown, unknown>;
106
+ export declare function isSuccess(value: unknown): value is Success<unknown>;
107
+ export declare function isFailure(value: unknown): value is Failure<unknown>;
108
+ export declare function success<T = void>(data: T): Success<T>;
109
+ export declare function failure<E = void>(error: E): Failure<E>;
110
+ export declare function toFailableLike<T>(value: Success<T>): FailableLikeSuccess<T>;
111
+ export declare function toFailableLike<E>(value: Failure<E>): FailableLikeFailure<E>;
112
+ export declare function toFailableLike<T, E>(value: Failable<T, E>): FailableLike<T, E>;
117
113
  type InferReturnTypeFromFunction<F extends () => R, E = Error, R = ReturnType<F>> = [R] extends [never] ? Failure<E> : R extends Success<infer A> ? Success<A> : R extends Failure<infer A> ? Failure<A> : R extends FailableLikeSuccess<infer A> ? Success<A> : R extends FailableLikeFailure<infer A> ? Failure<A> : R extends Failable<infer A, infer B> ? Failable<A, B> : Failable<R, E>;
118
114
  type InferReturnTypeFromPromise<T, E = Error, P extends PromiseLike<T> = PromiseLike<T>> = [Awaited<P>] extends [never] ? Promise<Failure<E>> : Awaited<P> extends Promise<Success<infer A>> ? Promise<Success<A>> : Awaited<P> extends Promise<Failure<infer A>> ? Promise<Failure<A>> : Awaited<P> extends Failable<unknown, unknown> ? Promise<Awaited<P>> : Awaited<P> extends FailableLikeSuccess<infer A> ? Promise<Success<A>> : Awaited<P> extends FailableLikeFailure<infer A> ? Promise<Failure<A>> : Awaited<P> extends FailableLike<infer A, infer B> ? Promise<Failable<A, B>> : Promise<Failable<Awaited<P>, E>>;
119
- declare function from<T>(value: FailableLikeSuccess<T>): Success<T>;
120
- declare function from<E>(value: FailableLikeFailure<E>): Failure<E>;
121
- declare function from<T, E>(value: FailableLike<T, E>): Failable<T, E>;
122
- declare function from<F extends () => R, E = Error, R = ReturnType<F>>(fun: F): InferReturnTypeFromFunction<F, E, R>;
123
- declare function from<T, E = Error, P extends PromiseLike<T> = PromiseLike<T>>(promise: P): InferReturnTypeFromPromise<T, E, P>;
115
+ export declare function createFailable<T>(value: FailableLikeSuccess<T>): Success<T>;
116
+ export declare function createFailable<E>(value: FailableLikeFailure<E>): Failure<E>;
117
+ export declare function createFailable<T, E>(value: FailableLike<T, E>): Failable<T, E>;
118
+ export declare function createFailable<F extends () => R, E = Error, R = ReturnType<F>>(fun: F): InferReturnTypeFromFunction<F, E, R>;
119
+ export declare function createFailable<T, E = Error, P extends PromiseLike<T> = PromiseLike<T>>(promise: P): InferReturnTypeFromPromise<T, E, P>;
124
120
  export {};
125
121
  //# sourceMappingURL=failable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"failable.d.ts","sourceRoot":"","sources":["../../src/lib/failable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"failable.d.ts","sourceRoot":"","sources":["../../src/lib/failable.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pvorona/failable",
3
- "version": "0.0.3",
3
+ "version": "0.1.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",