@onrails/result 0.4.2 → 0.5.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.js CHANGED
@@ -1,12 +1,86 @@
1
- // src/internal/ctor.ts
2
- var mkOk = (value) => ({
3
- _tag: "Ok",
4
- value
5
- });
6
- var mkErr = (error) => ({
7
- _tag: "Err",
8
- error
9
- });
1
+ // src/internal/proto.ts
2
+ var INSPECT = /* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom");
3
+ var OkImpl = class _OkImpl {
4
+ _tag;
5
+ value;
6
+ // explicit assignment order keeps `_tag` first, so JSON key order matches the plain-data shape
7
+ constructor(value) {
8
+ this._tag = "Ok";
9
+ this.value = value;
10
+ }
11
+ [INSPECT](_depth, options, inspect) {
12
+ return `Ok(${inspect(this.value, options)})`;
13
+ }
14
+ map(fn) {
15
+ return new _OkImpl(fn(this.value));
16
+ }
17
+ mapErr(_fn) {
18
+ return new _OkImpl(this.value);
19
+ }
20
+ flatMap(fn) {
21
+ return fn(this.value);
22
+ }
23
+ andThen(fn) {
24
+ return fn(this.value);
25
+ }
26
+ recover(_fn) {
27
+ return new _OkImpl(this.value);
28
+ }
29
+ tap(fn) {
30
+ fn(this.value);
31
+ return this;
32
+ }
33
+ tapErr(_fn) {
34
+ return this;
35
+ }
36
+ match(onOk, _onErr) {
37
+ return onOk(this.value);
38
+ }
39
+ unwrapOr(_defaultValue) {
40
+ return this.value;
41
+ }
42
+ };
43
+ var ErrImpl = class _ErrImpl {
44
+ _tag;
45
+ error;
46
+ constructor(error) {
47
+ this._tag = "Err";
48
+ this.error = error;
49
+ }
50
+ [INSPECT](_depth, options, inspect) {
51
+ return `Err(${inspect(this.error, options)})`;
52
+ }
53
+ map(_fn) {
54
+ return new _ErrImpl(this.error);
55
+ }
56
+ mapErr(fn) {
57
+ return new _ErrImpl(fn(this.error));
58
+ }
59
+ flatMap(_fn) {
60
+ return new _ErrImpl(this.error);
61
+ }
62
+ andThen(_fn) {
63
+ return new _ErrImpl(this.error);
64
+ }
65
+ recover(fn) {
66
+ return fn(this.error);
67
+ }
68
+ tap(_fn) {
69
+ return this;
70
+ }
71
+ tapErr(fn) {
72
+ fn(this.error);
73
+ return this;
74
+ }
75
+ match(_onOk, onErr) {
76
+ return onErr(this.error);
77
+ }
78
+ unwrapOr(defaultValue) {
79
+ return defaultValue;
80
+ }
81
+ };
82
+ var newOk = (value) => new OkImpl(value);
83
+ var newErr = (error) => new ErrImpl(error);
10
84
 
11
85
  // src/internal/dual.ts
12
86
  var dual = (arity, body) => {
@@ -20,33 +94,33 @@ var toError = (error) => error instanceof Error ? error : new Error(String(error
20
94
 
21
95
  // src/result.ts
22
96
  function ok(value) {
23
- return mkOk(value);
97
+ return newOk(value);
24
98
  }
25
99
  var of = ok;
26
100
  function err(error) {
27
- return mkErr(error);
101
+ return newErr(error);
28
102
  }
29
103
  var isOk = (result) => result._tag === "Ok";
30
104
  var isErr = (result) => result._tag === "Err";
31
105
  var map = dual(
32
106
  2,
33
- (result, fn) => isOk(result) ? mkOk(fn(result.value)) : mkErr(result.error)
107
+ (result, fn) => isOk(result) ? newOk(fn(result.value)) : newErr(result.error)
34
108
  );
35
109
  var mapErr = dual(
36
110
  2,
37
- (result, fn) => isErr(result) ? mkErr(fn(result.error)) : mkOk(result.value)
111
+ (result, fn) => isErr(result) ? newErr(fn(result.error)) : newOk(result.value)
38
112
  );
39
113
  var bimap = dual(
40
114
  3,
41
- (result, onOk, onErr) => isOk(result) ? mkOk(onOk(result.value)) : mkErr(onErr(result.error))
115
+ (result, onOk, onErr) => isOk(result) ? newOk(onOk(result.value)) : newErr(onErr(result.error))
42
116
  );
43
117
  var flatMap = dual(
44
118
  2,
45
- (result, fn) => isOk(result) ? fn(result.value) : mkErr(result.error)
119
+ (result, fn) => isOk(result) ? fn(result.value) : newErr(result.error)
46
120
  );
47
121
  var recover = dual(
48
122
  2,
49
- (result, fn) => isErr(result) ? fn(result.error) : mkOk(result.value)
123
+ (result, fn) => isErr(result) ? fn(result.error) : newOk(result.value)
50
124
  );
51
125
  var tap = dual(2, (result, fn) => {
52
126
  if (isOk(result)) fn(result.value);
@@ -76,17 +150,17 @@ function unwrapErr(result) {
76
150
  function fromThrowable(fn, onThrow) {
77
151
  return (...args) => {
78
152
  try {
79
- return mkOk(fn(...args));
153
+ return newOk(fn(...args));
80
154
  } catch (error) {
81
- return mkErr(onThrow(error));
155
+ return newErr(onThrow(error));
82
156
  }
83
157
  };
84
158
  }
85
159
  function trySync(fn, onThrow) {
86
160
  try {
87
- return mkOk(fn());
161
+ return newOk(fn());
88
162
  } catch (error) {
89
- return mkErr(onThrow ? onThrow(error) : toError(error));
163
+ return newErr(onThrow ? onThrow(error) : toError(error));
90
164
  }
91
165
  }
92
166
  var printPayload = (payload) => {
@@ -99,6 +173,13 @@ var printPayload = (payload) => {
99
173
  var show = (result) => isOk(result) ? `Ok(${printPayload(result.value)})` : `Err(${printPayload(result.error)})`;
100
174
 
101
175
  // src/types.ts
176
+ var Result = {
177
+ from: (data) => {
178
+ if (data._tag === "Ok") return newOk(data.value);
179
+ if (data._tag === "Err") return newErr(data.error);
180
+ throw new TypeError(`Result.from: unknown _tag ${String(data._tag)}`);
181
+ }
182
+ };
102
183
  var UnexpectedError = class extends Error {
103
184
  constructor(message, cause) {
104
185
  super(message);
@@ -113,11 +194,11 @@ var sequenceSettled = (settled) => {
113
194
  const values = [];
114
195
  for (const result of settled) {
115
196
  if (isErr(result)) {
116
- return mkErr(result.error);
197
+ return newErr(result.error);
117
198
  }
118
199
  values.push(result.value);
119
200
  }
120
- return mkOk(values);
201
+ return newOk(values);
121
202
  };
122
203
  var ResultAsync = class _ResultAsync {
123
204
  constructor(run) {
@@ -154,9 +235,9 @@ var ResultAsync = class _ResultAsync {
154
235
  static fromPromise(promise, onReject) {
155
236
  return new _ResultAsync(async () => {
156
237
  try {
157
- return mkOk(await promise);
238
+ return newOk(await promise);
158
239
  } catch (error) {
159
- return mkErr(onReject(error));
240
+ return newErr(onReject(error));
160
241
  }
161
242
  });
162
243
  }
@@ -170,7 +251,7 @@ var ResultAsync = class _ResultAsync {
170
251
  * ```
171
252
  */
172
253
  static fromSafePromise(promise) {
173
- return new _ResultAsync(async () => mkOk(await promise));
254
+ return new _ResultAsync(async () => newOk(await promise));
174
255
  }
175
256
  /**
176
257
  * Defers work until {@link resolve}. Unlike {@link fromPromise}, the factory
@@ -188,13 +269,13 @@ var ResultAsync = class _ResultAsync {
188
269
  return new _ResultAsync(fn);
189
270
  }
190
271
  static ok(value) {
191
- return new _ResultAsync(async () => mkOk(value));
272
+ return new _ResultAsync(async () => newOk(value));
192
273
  }
193
274
  static of(value) {
194
275
  return _ResultAsync.ok(value);
195
276
  }
196
277
  static err(error) {
197
- return new _ResultAsync(async () => mkErr(error));
278
+ return new _ResultAsync(async () => newErr(error));
198
279
  }
199
280
  /**
200
281
  * Lifts an existing `Promise<Result<T, E>>` (e.g. from interop code) into a
@@ -212,7 +293,7 @@ var ResultAsync = class _ResultAsync {
212
293
  try {
213
294
  return await promise;
214
295
  } catch (error) {
215
- return mkErr(mapDefect(error));
296
+ return newErr(mapDefect(error));
216
297
  }
217
298
  });
218
299
  }
@@ -234,11 +315,11 @@ var ResultAsync = class _ResultAsync {
234
315
  for (const ra of results) {
235
316
  const result = await ra.resolve();
236
317
  if (isErr(result)) {
237
- return mkErr(result.error);
318
+ return newErr(result.error);
238
319
  }
239
320
  values.push(result.value);
240
321
  }
241
- return mkOk(values);
322
+ return newOk(values);
242
323
  });
243
324
  }
244
325
  /**
@@ -333,7 +414,7 @@ var ResultAsync = class _ResultAsync {
333
414
  return new _ResultAsync(async () => {
334
415
  const first = await this.resolve();
335
416
  if (isErr(first)) {
336
- return first;
417
+ return newErr(first.error);
337
418
  }
338
419
  const next = fn(first.value);
339
420
  return next instanceof _ResultAsync ? next.resolve() : next;
@@ -365,7 +446,7 @@ var ResultAsync = class _ResultAsync {
365
446
  return new _ResultAsync(async () => {
366
447
  const first = await this.resolve();
367
448
  if (!isErr(first)) {
368
- return first;
449
+ return newOk(first.value);
369
450
  }
370
451
  const next = fn(first.error);
371
452
  return next instanceof _ResultAsync ? next.resolve() : next;
@@ -501,13 +582,14 @@ function tryAsync(promise, onReject) {
501
582
  var combine = (results) => {
502
583
  const values = [];
503
584
  for (const result of results) {
504
- if (isErr(result)) return mkErr(result.error);
585
+ if (isErr(result)) return newErr(result.error);
505
586
  values.push(result.value);
506
587
  }
507
- return mkOk(values);
588
+ return newOk(values);
508
589
  };
509
590
  var combineTuple = (results, ..._guard) => (
510
591
  // Runtime identical to combine; the cast restores per-index tuple types.
592
+ // `unknown` hop: the tuple type is computed from R, which TS cannot relate to the runtime array.
511
593
  combine(results)
512
594
  );
513
595
  function validateAll(results, combineErrors) {
@@ -520,8 +602,8 @@ function validateAll(results, combineErrors) {
520
602
  values.push(result.value);
521
603
  }
522
604
  }
523
- if (errors.length === 0) return mkOk(values);
524
- return mkErr(combineErrors ? errors.reduce(combineErrors) : errors);
605
+ if (errors.length === 0) return newOk(values);
606
+ return newErr(combineErrors ? errors.reduce(combineErrors) : errors);
525
607
  }
526
608
  function validateTuple(results, ...rest) {
527
609
  const combineErrors = rest[0];
@@ -566,12 +648,12 @@ var tryGen = (fn) => {
566
648
  return fn();
567
649
  } catch (error) {
568
650
  if (error instanceof ErrSignal) {
569
- return mkErr(error.error);
651
+ return newErr(error.error);
570
652
  }
571
653
  throw error;
572
654
  }
573
655
  };
574
656
 
575
- export { $, ResultAsync, UnexpectedError, asyncAfter, bimap, combine, combineTuple, err, errAsync, flatMap, flow, fromAsync, fromPromise, fromResult, fromSafePromise, fromThrowable, isErr, isOk, map, mapErr, match, of, ok, okAsync, pipe, recover, show, tap, tapErr, tryAsync, tryGen, trySync, unwrap, unwrapErr, unwrapOk, unwrapOr, validateAll, validateTuple, yieldResult };
657
+ export { $, Result, ResultAsync, UnexpectedError, asyncAfter, bimap, combine, combineTuple, err, errAsync, flatMap, flow, fromAsync, fromPromise, fromResult, fromSafePromise, fromThrowable, isErr, isOk, map, mapErr, match, of, ok, okAsync, pipe, recover, show, tap, tapErr, tryAsync, tryGen, trySync, unwrap, unwrapErr, unwrapOk, unwrapOr, validateAll, validateTuple, yieldResult };
576
658
  //# sourceMappingURL=index.js.map
577
659
  //# sourceMappingURL=index.js.map