@pvorona/failable 0.4.0 → 0.6.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/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- export * from './lib/failable.js';
1
+ export { FailableStatus, NormalizedErrors, failable, failure, isFailable, isFailableLike, isFailure, isSuccess, run, success, throwIfError, toFailableLike, } from './lib/failable.js';
2
+ export type { FailableNormalizeErrorOptions, Failable, FailableLike, FailableLikeFailure, FailableLikeSuccess, Failure, Success, } from './lib/failable.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,QAAQ,EACR,OAAO,EACP,UAAU,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,GAAG,EACH,OAAO,EACP,YAAY,EACZ,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,6BAA6B,EAC7B,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,OAAO,EACP,OAAO,GACR,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,33 +1,33 @@
1
- import { isFunction as d, isObject as l, hasOwnPropertyValue as b, hasOwnKey as F } from "@pvorona/assert";
2
- import { notImplemented as i } from "@pvorona/not-implemented";
3
- const g = /* @__PURE__ */ Symbol("Failable"), A = /* @__PURE__ */ Symbol("Success"), y = /* @__PURE__ */ Symbol("Failure"), u = Object.freeze({
1
+ import { isFunction as E, isObject as c, hasOwnPropertyValue as S, hasOwnKey as y } from "@pvorona/assert";
2
+ import { notImplemented as a } from "@pvorona/not-implemented";
3
+ const F = /* @__PURE__ */ Symbol("Failable"), A = /* @__PURE__ */ Symbol("Success"), O = /* @__PURE__ */ Symbol("Failure"), u = Object.freeze({
4
4
  Success: "success",
5
5
  Failure: "failure"
6
6
  }), k = Object.freeze({
7
7
  mode: "normalized-errors"
8
8
  });
9
- function P(r) {
10
- return l(r) && Object.keys(r).length === 2 && b(r, "status", u.Success) && F(r, "data");
11
- }
12
9
  function G(r) {
13
- return l(r) && Object.keys(r).length === 2 && b(r, "status", u.Failure) && F(r, "error");
10
+ return c(r) && Object.keys(r).length === 2 && S(r, "status", u.Success) && y(r, "data");
11
+ }
12
+ function T(r) {
13
+ return c(r) && Object.keys(r).length === 2 && S(r, "status", u.Failure) && y(r, "error");
14
14
  }
15
15
  function w(r) {
16
- return G(r) || P(r);
16
+ return T(r) || G(r);
17
17
  }
18
18
  const m = {
19
- [g]: !0,
19
+ [F]: !0,
20
20
  isSuccess: !1,
21
- isError: !1,
21
+ isFailure: !1,
22
22
  data: null,
23
23
  error: null,
24
- or: i,
25
- orElse: i,
26
- getOr: i,
27
- getOrElse: i,
28
- getOrThrow: i,
29
- match: i
30
- }, T = (() => {
24
+ or: a,
25
+ orElse: a,
26
+ getOr: a,
27
+ getOrElse: a,
28
+ getOrThrow: a,
29
+ match: a
30
+ }, p = (() => {
31
31
  const r = Object.create(m);
32
32
  return r[A] = !0, r.status = u.Success, r.isSuccess = !0, r.or = function() {
33
33
  return this;
@@ -42,12 +42,12 @@ const m = {
42
42
  }, r.match = function(t) {
43
43
  return t(this.data);
44
44
  }, Object.freeze(r);
45
- })(), C = (() => {
45
+ })(), N = (() => {
46
46
  const r = Object.create(m);
47
- return r[y] = !0, r.status = u.Failure, r.isError = !0, r.or = function(t) {
48
- return a(t);
47
+ return r[O] = !0, r.status = u.Failure, r.isFailure = !0, r.or = function(t) {
48
+ return f(t);
49
49
  }, r.orElse = function(t) {
50
- return a(t());
50
+ return f(t());
51
51
  }, r.getOr = function(t) {
52
52
  return t;
53
53
  }, r.getOrElse = function(t) {
@@ -58,37 +58,35 @@ const m = {
58
58
  return n(this.error);
59
59
  }, Object.freeze(r);
60
60
  })();
61
- function h(r, e) {
62
- return l(r) ? r[e] === !0 : !1;
61
+ function b(r, e) {
62
+ return c(r) ? r[e] === !0 : !1;
63
63
  }
64
- function c(r) {
65
- return h(r, g);
64
+ function i(r) {
65
+ return b(r, F);
66
66
  }
67
- function ur(r) {
68
- return h(r, A);
67
+ function ir(r) {
68
+ return b(r, A);
69
69
  }
70
- function or(r) {
71
- return h(r, y);
70
+ function sr(r) {
71
+ return b(r, O);
72
72
  }
73
- function a(r) {
74
- const e = Object.create(T);
73
+ function f(r) {
74
+ const e = Object.create(p);
75
75
  return e.data = r, Object.freeze(e);
76
76
  }
77
- function E(r) {
78
- const e = Object.create(C);
77
+ function d(r) {
78
+ const e = Object.create(N);
79
79
  return e.error = r, Object.freeze(e);
80
80
  }
81
- function cr(r) {
81
+ function ar(r) {
82
82
  if (r.status === u.Failure) throw r.error;
83
83
  }
84
- function sr(r) {
84
+ function fr(r) {
85
85
  return r.status === u.Failure ? { status: u.Failure, error: r.error } : { status: u.Success, data: r.data };
86
86
  }
87
- const U = "`createFailable(() => ...)` only accepts synchronous callbacks. This callback returned a Promise. Pass the promise directly instead: `await createFailable(promise)`.", R = /* @__PURE__ */ Symbol(
88
- "CreateFailablePromiseCallbackGuard"
89
- ), N = /* @__PURE__ */ Symbol("RunGet");
87
+ const U = "`failable(() => ...)` only accepts synchronous callbacks. This callback returned a Promise. Pass the promise directly instead: `await failable(promise)`.", j = /* @__PURE__ */ Symbol("FailablePromiseCallbackGuard"), C = /* @__PURE__ */ Symbol("RunGet");
90
88
  class s {
91
- [N] = !0;
89
+ [C] = !0;
92
90
  source;
93
91
  constructor(e) {
94
92
  this.source = e;
@@ -97,52 +95,52 @@ class s {
97
95
  return new s(e);
98
96
  }
99
97
  }
100
- const f = "`run()` generators must yield only values produced by `get(...)`. Use `yield* get(...)` in normal code.", B = "`run()` generators must return a `Failable` or finish without returning a value.";
101
- function* x(r) {
98
+ const l = "`run()` generators must yield only values produced by `get(...)`. Use `yield* get(...)` in normal code.", M = "`run()` generators must return a `Failable` or finish without returning a value.";
99
+ function* z(r) {
102
100
  return yield s.create(r);
103
101
  }
104
- async function* D(r) {
102
+ async function* B(r) {
105
103
  return yield s.create(r);
106
104
  }
107
- function O(r) {
108
- return !l(r) && !d(r) ? !1 : d(r.then);
105
+ function R(r) {
106
+ return !c(r) && !E(r) ? !1 : E(r.then);
109
107
  }
110
- function M(r) {
111
- return O(r) ? D(r) : x(r);
108
+ function x(r) {
109
+ return R(r) ? B(r) : z(r);
112
110
  }
113
- const z = Object.freeze({
114
- get: M
111
+ const D = Object.freeze({
112
+ get: x
115
113
  });
116
114
  function I(r) {
117
115
  if (!(r instanceof s))
118
- throw new Error(f);
116
+ throw new Error(l);
119
117
  const e = r.source;
120
- if (!c(e))
121
- throw new Error(f);
118
+ if (!i(e))
119
+ throw new Error(l);
122
120
  return e;
123
121
  }
124
- async function p(r) {
122
+ async function V(r) {
125
123
  if (!(r instanceof s))
126
- throw new Error(f);
124
+ throw new Error(l);
127
125
  const e = await r.source;
128
- if (!c(e))
129
- throw new Error(f);
126
+ if (!i(e))
127
+ throw new Error(l);
130
128
  return e;
131
129
  }
132
- async function j(r) {
130
+ async function L(r) {
133
131
  if (!(r instanceof s))
134
- throw new Error(f);
132
+ throw new Error(l);
135
133
  let e;
136
134
  try {
137
135
  e = await r.source;
138
136
  } catch (t) {
139
137
  return { kind: "rejection", rejection: t };
140
138
  }
141
- if (!c(e))
142
- throw new Error(f);
139
+ if (!i(e))
140
+ throw new Error(l);
143
141
  return { kind: "source", source: e };
144
142
  }
145
- function v(r, e) {
143
+ function K(r, e) {
146
144
  let t = r.return(e);
147
145
  for (; !t.done; ) {
148
146
  const n = I(t.value);
@@ -153,10 +151,10 @@ function v(r, e) {
153
151
  t = r.next(n.data);
154
152
  }
155
153
  }
156
- async function K(r, e) {
154
+ async function H(r, e) {
157
155
  let t = await r.return(e);
158
156
  for (; !t.done; ) {
159
- const n = await p(t.value);
157
+ const n = await V(t.value);
160
158
  if (n.status === u.Failure) {
161
159
  t = await r.return(e);
162
160
  continue;
@@ -164,10 +162,10 @@ async function K(r, e) {
164
162
  t = await r.next(n.data);
165
163
  }
166
164
  }
167
- async function V(r) {
165
+ async function J(r) {
168
166
  let e = await r.return(void 0);
169
167
  for (; !e.done; ) {
170
- const t = await j(e.value);
168
+ const t = await L(e.value);
171
169
  if (t.kind === "rejection") {
172
170
  e = await r.return(void 0);
173
171
  continue;
@@ -180,115 +178,139 @@ async function V(r) {
180
178
  e = await r.next(n.data);
181
179
  }
182
180
  }
183
- function _(r) {
184
- if (c(r))
181
+ function P(r) {
182
+ if (i(r))
185
183
  return r;
186
184
  if (r === void 0)
187
- return a(void 0);
188
- throw new Error(B);
185
+ return f(void 0);
186
+ throw new Error(M);
189
187
  }
190
- function H(r) {
188
+ function W(r) {
191
189
  return Symbol.asyncIterator in r;
192
190
  }
193
- function W(r) {
191
+ function Y(r) {
194
192
  let e = r.next();
195
193
  for (; !e.done; ) {
196
194
  const t = I(e.value);
197
195
  if (t.status === u.Failure)
198
- return v(r, t), t;
196
+ return K(r, t), t;
199
197
  e = r.next(t.data);
200
198
  }
201
- return _(e.value);
199
+ return P(e.value);
202
200
  }
203
- async function Y(r) {
201
+ async function q(r) {
204
202
  let e = await r.next();
205
203
  for (; !e.done; ) {
206
- const t = await j(e.value);
204
+ const t = await L(e.value);
207
205
  if (t.kind === "rejection")
208
- throw await V(r), t.rejection;
206
+ throw await J(r), t.rejection;
209
207
  const n = t.source;
210
208
  if (n.status === u.Failure)
211
- return await K(r, n), n;
209
+ return await H(r, n), n;
212
210
  e = await r.next(n.data);
213
211
  }
214
- return _(e.value);
212
+ return P(e.value);
215
213
  }
216
- function ir(r) {
217
- const e = r(z);
218
- return H(e) ? Y(e) : W(e);
214
+ function lr(r) {
215
+ const e = r(D);
216
+ return W(e) ? q(e) : Y(e);
219
217
  }
220
- function ar(r, e) {
221
- return c(r) ? o(r, e) : w(r) ? o(S(r), e) : d(r) ? X(r, e) : Z(r, e);
218
+ function dr(r, e) {
219
+ return i(r) ? o(r, e) : w(r) ? o(g(r), e) : E(r) ? $(r, e) : v(r, e);
222
220
  }
223
- function S(r) {
224
- return r.status === u.Success ? a(r.data) : E(r.error);
221
+ function g(r) {
222
+ return r.status === u.Success ? f(r.data) : d(r.error);
225
223
  }
226
- function q() {
224
+ function Q() {
227
225
  const r = new Error(
228
226
  U
229
227
  );
230
- return Object.defineProperty(r, R, {
228
+ return Object.defineProperty(r, j, {
231
229
  value: !0,
232
230
  enumerable: !1,
233
231
  configurable: !1,
234
232
  writable: !1
235
233
  }), r;
236
234
  }
237
- function J(r) {
235
+ function X(r) {
238
236
  return r instanceof Error ? Object.getOwnPropertyDescriptor(
239
237
  r,
240
- R
238
+ j
241
239
  )?.value === !0 : !1;
242
240
  }
243
- function Q(r) {
241
+ function Z(r) {
244
242
  Promise.resolve(r).catch(() => {
245
243
  });
246
244
  }
247
- function X(r, e) {
245
+ function $(r, e) {
248
246
  try {
249
247
  const t = r();
250
- return O(t) ? (Q(t), o(
251
- E(q()),
248
+ return R(t) ? (Z(t), o(
249
+ d(Q()),
252
250
  e
253
- )) : c(t) ? o(t, e) : w(t) ? o(S(t), e) : a(t);
251
+ )) : i(t) ? o(t, e) : w(t) ? o(g(t), e) : f(t);
254
252
  } catch (t) {
255
- return o(E(t), e);
253
+ return o(d(t), e);
256
254
  }
257
255
  }
258
- function Z(r, e) {
256
+ function v(r, e) {
259
257
  return Promise.resolve(r).then(
260
- (t) => c(t) ? o(t, e) : w(t) ? o(S(t), e) : a(t),
261
- (t) => o(E(t), e)
258
+ (t) => i(t) ? o(t, e) : w(t) ? o(g(t), e) : f(t),
259
+ (t) => o(d(t), e)
262
260
  );
263
261
  }
264
262
  function o(r, e) {
265
- if (r.status === u.Success || J(r.error)) return r;
266
- const t = $(e);
267
- return t === null || r.error instanceof Error && e !== void 0 && L(e) ? r : E(t(r.error));
268
- }
269
- function $(r) {
270
- return r === void 0 ? null : L(r) ? er : rr(r) ? r.normalizeError : null;
271
- }
272
- function L(r) {
273
- return !l(r) || Object.keys(r).length !== 1 ? !1 : Object.getOwnPropertyDescriptor(r, "mode")?.value === k.mode;
263
+ if (r.status === u.Success || X(r.error)) return r;
264
+ const t = rr(e);
265
+ return t === null || r.error instanceof Error && e !== void 0 && _(e) ? r : d(t(r.error));
274
266
  }
275
267
  function rr(r) {
276
- return l(r) ? d(r.normalizeError) : !1;
268
+ return r === void 0 ? null : _(r) ? ur : er(r) ? r.normalizeError : null;
269
+ }
270
+ function _(r) {
271
+ return !c(r) || Object.keys(r).length !== 1 ? !1 : Object.getOwnPropertyDescriptor(r, "mode")?.value === k.mode;
277
272
  }
278
273
  function er(r) {
279
- return r instanceof Error ? r : Array.isArray(r) ? new AggregateError(r, "Multiple errors", { cause: r }) : new Error(String(r), { cause: r });
274
+ return c(r) ? E(r.normalizeError) : !1;
275
+ }
276
+ function tr(r) {
277
+ if (!c(r) || Array.isArray(r)) return !1;
278
+ const e = Object.getPrototypeOf(r);
279
+ return e === Object.prototype || e === null;
280
+ }
281
+ function h(r) {
282
+ try {
283
+ const e = JSON.stringify(r);
284
+ if (typeof e == "string") return e;
285
+ } catch {
286
+ return null;
287
+ }
288
+ return null;
289
+ }
290
+ function nr(r) {
291
+ if (Object.getPrototypeOf(r) === null) {
292
+ const n = h(r);
293
+ return n !== null ? n : Object.prototype.toString.call(r);
294
+ }
295
+ const e = String(r);
296
+ if (e !== "[object Object]") return e;
297
+ const t = h(r);
298
+ return t === null ? e : t;
299
+ }
300
+ function ur(r) {
301
+ return r instanceof Error ? r : Array.isArray(r) ? new AggregateError(r, "Multiple errors", { cause: r }) : tr(r) ? new Error(nr(r), { cause: r }) : new Error(String(r), { cause: r });
280
302
  }
281
303
  export {
282
304
  u as FailableStatus,
283
305
  k as NormalizedErrors,
284
- ar as createFailable,
285
- E as failure,
286
- c as isFailable,
306
+ dr as failable,
307
+ d as failure,
308
+ i as isFailable,
287
309
  w as isFailableLike,
288
- or as isFailure,
289
- ur as isSuccess,
290
- ir as run,
291
- a as success,
292
- cr as throwIfError,
293
- sr as toFailableLike
310
+ sr as isFailure,
311
+ ir as isSuccess,
312
+ lr as run,
313
+ f as success,
314
+ ar as throwIfError,
315
+ fr as toFailableLike
294
316
  };
@@ -6,10 +6,10 @@ export type FailableStatus = (typeof FailableStatus)[keyof typeof FailableStatus
6
6
  export declare const NormalizedErrors: Readonly<{
7
7
  readonly mode: "normalized-errors";
8
8
  }>;
9
- export type CreateFailableNormalizeErrorOptions = {
9
+ export type FailableNormalizeErrorOptions = {
10
10
  readonly normalizeError: (error: unknown) => Error;
11
11
  };
12
- type CreateFailableNormalizeErrorInput = typeof NormalizedErrors | CreateFailableNormalizeErrorOptions;
12
+ type FailableNormalizeErrorInput = typeof NormalizedErrors | FailableNormalizeErrorOptions;
13
13
  type Match<T, E> = <U>(onSuccess: (data: T) => U, onFailure: (error: E) => U) => U;
14
14
  export type Failable<T, E> = ((Success<T> & {
15
15
  readonly match: Match<T, E>;
@@ -27,7 +27,7 @@ export type Failable<T, E> = ((Success<T> & {
27
27
  *
28
28
  * Boundary rule:
29
29
  * - **sender**: `toFailableLike(result)`
30
- * - **receiver**: `createFailable(message.result)` (rehydrates into a real {@link Failable})
30
+ * - **receiver**: `failable(message.result)` (rehydrates into a real {@link Failable})
31
31
  *
32
32
  * Note: `data` / `error` must themselves be structured-cloneable.
33
33
  */
@@ -50,7 +50,7 @@ export declare function isFailableLike(value: unknown): value is FailableLike<un
50
50
  export type Success<T> = {
51
51
  readonly status: typeof FailableStatus.Success;
52
52
  readonly isSuccess: true;
53
- readonly isError: false;
53
+ readonly isFailure: false;
54
54
  readonly data: T;
55
55
  readonly error: null;
56
56
  readonly or: <U>(value: U) => Success<T>;
@@ -63,7 +63,7 @@ export type Success<T> = {
63
63
  export type Failure<E> = {
64
64
  readonly status: typeof FailableStatus.Failure;
65
65
  readonly isSuccess: false;
66
- readonly isError: true;
66
+ readonly isFailure: true;
67
67
  readonly error: E;
68
68
  readonly data: null;
69
69
  readonly or: <U>(value: U) => Success<U>;
@@ -83,20 +83,20 @@ export declare function failure<E = void>(error: E): Failure<E>;
83
83
  *
84
84
  * Use this when you want control-flow narrowing without replacing the original variable.
85
85
  * Use `result.getOrThrow()` when you need the success value itself in expression or return position.
86
- * If you need `Error`-shaped failures, normalize earlier with `createFailable(...)`.
86
+ * If you need `Error`-shaped failures, normalize earlier with `failable(...)`.
87
87
  */
88
88
  export declare function throwIfError<T, E>(result: Failable<T, E>): asserts result is Success<T>;
89
89
  export declare function toFailableLike<T>(value: Success<T>): FailableLikeSuccess<T>;
90
90
  export declare function toFailableLike<E>(value: Failure<E>): FailableLikeFailure<E>;
91
91
  export declare function toFailableLike<T, E>(value: Failable<T, E>): FailableLike<T, E>;
92
- type InferCreateFailableFromValue<T, E = unknown> = [T] extends [never] ? Failure<E> : T extends Success<infer A> ? Success<A> : T extends Failure<infer A> ? Failure<A> : T extends FailableLikeSuccess<infer A> ? Success<A> : T extends FailableLikeFailure<infer A> ? Failure<A> : T extends Failable<infer A, infer B> ? Failable<A, B> : T extends FailableLike<infer A, infer B> ? Failable<A, B> : Failable<T, E>;
92
+ type InferFailableFromValue<T, E = unknown> = [T] extends [never] ? Failure<E> : T extends Success<infer A> ? Success<A> : T extends Failure<infer A> ? Failure<A> : T extends FailableLikeSuccess<infer A> ? Success<A> : T extends FailableLikeFailure<infer A> ? Failure<A> : T extends Failable<infer A, infer B> ? Failable<A, B> : T extends FailableLike<infer A, infer B> ? Failable<A, B> : Failable<T, E>;
93
93
  type IsAny<T> = 0 extends 1 & T ? true : false;
94
94
  type HasKnownPromiseLikeReturn<T> = IsAny<T> extends true ? false : unknown extends T ? false : [Extract<T, PromiseLike<unknown>>] extends [never] ? false : true;
95
- type CreateFailableSyncOnlyCallback<F extends () => unknown> = F & (HasKnownPromiseLikeReturn<ReturnType<F>> extends true ? {
96
- readonly __createFailablePassPromiseDirectly: never;
95
+ type FailableSyncOnlyCallback<F extends () => unknown> = F & (HasKnownPromiseLikeReturn<ReturnType<F>> extends true ? {
96
+ readonly __failablePassPromiseDirectly: never;
97
97
  } : unknown);
98
98
  type InferReturnTypeFromPromise<T, E = unknown, P extends PromiseLike<T> = PromiseLike<T>> = [Awaited<P>] extends [never] ? Promise<Failure<E>> : Awaited<P> extends Success<infer A> ? Promise<Success<A>> : Awaited<P> extends 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>>;
99
- type NormalizeCreateFailableResult<T> = [T] extends [never] ? Failure<Error> : T extends Success<infer A> ? Success<A> : T extends Failure<unknown> ? Failure<Error> : T extends FailableLikeSuccess<infer A> ? Success<A> : T extends FailableLikeFailure<unknown> ? Failure<Error> : T extends Failable<infer A, unknown> ? Failable<A, Error> : T extends FailableLike<infer A, unknown> ? Failable<A, Error> : Failable<T, Error>;
99
+ type NormalizeFailableResult<T> = [T] extends [never] ? Failure<Error> : T extends Success<infer A> ? Success<A> : T extends Failure<unknown> ? Failure<Error> : T extends FailableLikeSuccess<infer A> ? Success<A> : T extends FailableLikeFailure<unknown> ? Failure<Error> : T extends Failable<infer A, unknown> ? Failable<A, Error> : T extends FailableLike<infer A, unknown> ? Failable<A, Error> : Failable<T, Error>;
100
100
  declare const RUN_GET_TAG: unique symbol;
101
101
  declare class RunGet<T, E, TSource = Failable<T, E>> {
102
102
  readonly [RUN_GET_TAG] = true;
@@ -104,42 +104,64 @@ declare class RunGet<T, E, TSource = Failable<T, E>> {
104
104
  private constructor();
105
105
  static create<T, E, TSource extends Failable<T, E> | PromiseLike<Failable<T, E>>>(source: TSource): RunGet<T, E, TSource>;
106
106
  }
107
- type RunGetIterator<T, E> = Generator<RunGet<T, E>, T, unknown>;
107
+ type RunGetIterator<T, E, TSource extends Failable<T, E> = Failable<T, E>> = Generator<RunGet<T, E, TSource>, T, unknown>;
108
+ type AsyncRunGetIterator<T, E, TSource extends Failable<T, E> | PromiseLike<Failable<T, E>> = Failable<T, E> | PromiseLike<Failable<T, E>>> = AsyncGenerator<RunGet<T, E, TSource>, T, unknown>;
108
109
  type RunHelpers = {
109
110
  readonly get: {
110
- <T>(source: Success<T>): RunGetIterator<T, never>;
111
- <E>(source: Failure<E>): RunGetIterator<never, E>;
112
- <T, E>(source: Failable<T, E>): RunGetIterator<T, E>;
113
- <T>(source: PromiseLike<Success<T>>): AsyncGenerator<RunGet<T, never, unknown>, T, unknown>;
114
- <E>(source: PromiseLike<Failure<E>>): AsyncGenerator<RunGet<never, E, unknown>, never, unknown>;
115
- <T, E>(source: PromiseLike<Failable<T, E>>): AsyncGenerator<RunGet<T, E, unknown>, T, unknown>;
111
+ <T>(source: Success<T>): RunGetIterator<T, never, Success<T>>;
112
+ <E>(source: Failure<E>): RunGetIterator<never, E, Failure<E>>;
113
+ <T, E>(source: Failable<T, E>): RunGetIterator<T, E, Failable<T, E>>;
114
+ <T>(source: PromiseLike<Success<T>>): AsyncRunGetIterator<T, never, PromiseLike<Success<T>>>;
115
+ <E>(source: PromiseLike<Failure<E>>): AsyncRunGetIterator<never, E, PromiseLike<Failure<E>>>;
116
+ <T, E>(source: PromiseLike<Failable<T, E>>): AsyncRunGetIterator<T, E, PromiseLike<Failable<T, E>>>;
116
117
  };
117
118
  };
118
- type RunYield = RunGet<unknown, unknown>;
119
+ type RunYield = RunGet<unknown, unknown, unknown>;
119
120
  type RunReturn = void | Success<unknown> | Failure<unknown> | Failable<unknown, unknown>;
120
121
  type InferRunYieldError<TYield> = TYield extends RunGet<unknown, infer TError, unknown> ? TError : never;
121
- type InferRunReturnData<TResult> = TResult extends void ? void : TResult extends Success<infer TData> ? TData : TResult extends Failure<unknown> ? never : TResult extends Failable<infer TData, unknown> ? TData : never;
122
- type InferRunReturnError<TResult> = TResult extends void ? never : TResult extends Success<unknown> ? never : TResult extends Failure<infer TError> ? TError : TResult extends Failable<unknown, infer TError> ? TError : never;
123
- type InferRunError<TYield, TResult> = InferRunYieldError<TYield> | InferRunReturnError<TResult>;
124
- type InferRunResult<TYield, TResult> = [TResult] extends [never] ? [InferRunYieldError<TYield>] extends [never] ? never : Failure<InferRunYieldError<TYield>> : [InferRunReturnData<TResult>] extends [never] ? Failure<InferRunError<TYield, TResult>> : [InferRunError<TYield, TResult>] extends [never] ? Success<InferRunReturnData<TResult>> : Failable<InferRunReturnData<TResult>, InferRunError<TYield, TResult>>;
122
+ type InferRunGuaranteedFailureError<TYield> = TYield extends RunGet<unknown, infer TError, infer TSource> ? [TSource] extends [Failure<TError> | PromiseLike<Failure<TError>>] ? TError : never : never;
123
+ type RunReturnSuccessLike<TData = unknown> = {
124
+ readonly status: typeof FailableStatus.Success;
125
+ readonly data: TData;
126
+ readonly error: null;
127
+ };
128
+ type RunReturnFailureLike<TError = unknown> = {
129
+ readonly status: typeof FailableStatus.Failure;
130
+ readonly data: null;
131
+ readonly error: TError;
132
+ };
133
+ type MergeRunErrors<TYield, TError> = InferRunYieldError<TYield> | TError;
134
+ type InferRunSuccessResult<TYield, TData> = [InferRunYieldError<TYield>] extends [
135
+ never
136
+ ] ? Success<TData> : Failable<TData, InferRunYieldError<TYield>>;
137
+ type InferRunNeverSuccessResult<TYield> = [InferRunYieldError<TYield>] extends [
138
+ never
139
+ ] ? Success<never> : [InferRunGuaranteedFailureError<TYield>] extends [never] ? Failable<never, InferRunYieldError<TYield>> : Failure<InferRunYieldError<TYield>>;
140
+ type InferRunUnionReturnData<TResult> = ([Extract<TResult, void>] extends [never] ? never : void) | (Extract<TResult, RunReturnSuccessLike> extends {
141
+ readonly data: infer TData;
142
+ } ? TData : never);
143
+ type InferRunUnionReturnError<TResult> = Extract<TResult, RunReturnFailureLike> extends {
144
+ readonly error: infer TError;
145
+ } ? TError : never;
146
+ type InferRunResult<TYield, TResult> = [TResult] extends [never] ? [InferRunYieldError<TYield>] extends [never] ? never : Failure<InferRunYieldError<TYield>> : [TResult] extends [void] ? InferRunSuccessResult<TYield, void> : [TResult] extends [RunReturnSuccessLike<infer TData>] ? [TData] extends [never] ? InferRunNeverSuccessResult<TYield> : InferRunSuccessResult<TYield, TData> : [TResult] extends [RunReturnFailureLike<infer TError>] ? Failure<MergeRunErrors<TYield, TError>> : [MergeRunErrors<TYield, InferRunUnionReturnError<TResult>>] extends [never] ? Success<InferRunUnionReturnData<TResult>> : Failable<InferRunUnionReturnData<TResult>, MergeRunErrors<TYield, InferRunUnionReturnError<TResult>>>;
125
147
  export declare function run<TYield extends RunGet<unknown, unknown, unknown> = never, TResult extends RunReturn = RunReturn>(builder: (helpers: RunHelpers) => AsyncGenerator<TYield, TResult, unknown>): Promise<InferRunResult<TYield, TResult>>;
126
148
  export declare function run<TYield extends RunYield = never, TResult extends RunReturn = RunReturn>(builder: (helpers: RunHelpers) => Generator<TYield, TResult, unknown>): InferRunResult<TYield, TResult>;
127
- export declare function createFailable<T>(value: Success<T>): Success<T>;
128
- export declare function createFailable<E>(value: Failure<E>): Failure<E>;
129
- export declare function createFailable<T, E>(value: Failable<T, E>): Failable<T, E>;
130
- export declare function createFailable<T>(value: FailableLikeSuccess<T>): Success<T>;
131
- export declare function createFailable<E>(value: FailableLikeFailure<E>): Failure<E>;
132
- export declare function createFailable<T, E>(value: FailableLike<T, E>): Failable<T, E>;
133
- export declare function createFailable<T>(value: Success<T>, normalizeOption: CreateFailableNormalizeErrorInput): Success<T>;
134
- export declare function createFailable<E>(value: Failure<E>, normalizeOption: CreateFailableNormalizeErrorInput): Failure<Error>;
135
- export declare function createFailable<T, E>(value: Failable<T, E>, normalizeOption: CreateFailableNormalizeErrorInput): Failable<T, Error>;
136
- export declare function createFailable<T>(value: FailableLikeSuccess<T>, normalizeOption: CreateFailableNormalizeErrorInput): Success<T>;
137
- export declare function createFailable<E>(value: FailableLikeFailure<E>, normalizeOption: CreateFailableNormalizeErrorInput): Failure<Error>;
138
- export declare function createFailable<T, E>(value: FailableLike<T, E>, normalizeOption: CreateFailableNormalizeErrorInput): Failable<T, Error>;
149
+ export declare function failable<T>(value: Success<T>): Success<T>;
150
+ export declare function failable<E>(value: Failure<E>): Failure<E>;
151
+ export declare function failable<T, E>(value: Failable<T, E>): Failable<T, E>;
152
+ export declare function failable<T>(value: FailableLikeSuccess<T>): Success<T>;
153
+ export declare function failable<E>(value: FailableLikeFailure<E>): Failure<E>;
154
+ export declare function failable<T, E>(value: FailableLike<T, E>): Failable<T, E>;
155
+ export declare function failable<T>(value: Success<T>, normalizeOption: FailableNormalizeErrorInput): Success<T>;
156
+ export declare function failable<E>(value: Failure<E>, normalizeOption: FailableNormalizeErrorInput): Failure<Error>;
157
+ export declare function failable<T, E>(value: Failable<T, E>, normalizeOption: FailableNormalizeErrorInput): Failable<T, Error>;
158
+ export declare function failable<T>(value: FailableLikeSuccess<T>, normalizeOption: FailableNormalizeErrorInput): Success<T>;
159
+ export declare function failable<E>(value: FailableLikeFailure<E>, normalizeOption: FailableNormalizeErrorInput): Failure<Error>;
160
+ export declare function failable<T, E>(value: FailableLike<T, E>, normalizeOption: FailableNormalizeErrorInput): Failable<T, Error>;
139
161
  /**
140
162
  * Capture the boundary you actually have:
141
- * - `createFailable(() => value)` for synchronous callbacks that may throw
142
- * - `await createFailable(promise)` for promise-based code that may reject
163
+ * - `failable(() => value)` for synchronous callbacks that may throw
164
+ * - `await failable(promise)` for promise-based code that may reject
143
165
  * - `run(...)` when the steps already return `Failable`
144
166
  *
145
167
  * In TypeScript, obviously promise-returning callbacks like `async () => ...` and
@@ -148,9 +170,9 @@ export declare function createFailable<T, E>(value: FailableLike<T, E>, normaliz
148
170
  * them to pass the promise directly instead. That guard error is preserved even when
149
171
  * a custom `normalizeError` callback is provided.
150
172
  */
151
- export declare function createFailable<T, P extends PromiseLike<T> = PromiseLike<T>>(promise: P, normalizeOption: CreateFailableNormalizeErrorInput): Promise<NormalizeCreateFailableResult<Awaited<P>>>;
152
- export declare function createFailable<T, E = unknown, P extends PromiseLike<T> = PromiseLike<T>>(promise: P): InferReturnTypeFromPromise<T, E, P>;
153
- export declare function createFailable<F extends () => unknown>(fun: CreateFailableSyncOnlyCallback<F>, normalizeOption: CreateFailableNormalizeErrorInput): NormalizeCreateFailableResult<ReturnType<F>>;
154
- export declare function createFailable<F extends () => unknown, E = unknown>(fun: CreateFailableSyncOnlyCallback<F>): InferCreateFailableFromValue<ReturnType<F>, E>;
173
+ export declare function failable<T, P extends PromiseLike<T> = PromiseLike<T>>(promise: P, normalizeOption: FailableNormalizeErrorInput): Promise<NormalizeFailableResult<Awaited<P>>>;
174
+ export declare function failable<T, E = unknown, P extends PromiseLike<T> = PromiseLike<T>>(promise: P): InferReturnTypeFromPromise<T, E, P>;
175
+ export declare function failable<F extends () => unknown>(fun: FailableSyncOnlyCallback<F>, normalizeOption: FailableNormalizeErrorInput): NormalizeFailableResult<ReturnType<F>>;
176
+ export declare function failable<F extends () => unknown, E = unknown>(fun: FailableSyncOnlyCallback<F>): InferFailableFromValue<ReturnType<F>, E>;
155
177
  export {};
156
178
  //# sourceMappingURL=failable.d.ts.map