happy-rusty 1.1.2 → 1.3.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/main.cjs CHANGED
@@ -1,42 +1,77 @@
1
1
  'use strict';
2
2
 
3
- const optionKindSymbol = Symbol("Option kind");
4
- const resultKindSymbol = Symbol("Result kind");
3
+ const OptionKindSymbol = Symbol("Option kind");
4
+ const ResultKindSymbol = Symbol("Result kind");
5
+
6
+ function isOption(o) {
7
+ return o != null && typeof o === "object" && OptionKindSymbol in o;
8
+ }
9
+ function isResult(r) {
10
+ return r != null && typeof r === "object" && ResultKindSymbol in r;
11
+ }
12
+
5
13
  function Some(value) {
6
14
  const some = {
7
- [optionKindSymbol]: "Some",
8
- isSome: () => true,
9
- isNone: () => false,
10
- isSomeAnd: (predicate) => predicate(value),
11
- expect: (_msg) => value,
12
- unwrap: () => value,
13
- unwrapOr: (_defaultValue) => value,
14
- unwrapOrElse: (_fn) => value,
15
- okOr: (_error) => Ok(value),
16
- okOrElse: (_err) => Ok(value),
17
- transpose: () => {
15
+ [Symbol.toStringTag]: "Option",
16
+ [OptionKindSymbol]: "Some",
17
+ isSome() {
18
+ return true;
19
+ },
20
+ isNone() {
21
+ return false;
22
+ },
23
+ isSomeAnd(predicate) {
24
+ return predicate(value);
25
+ },
26
+ expect(_msg) {
27
+ return value;
28
+ },
29
+ unwrap() {
30
+ return value;
31
+ },
32
+ unwrapOr(_defaultValue) {
33
+ return value;
34
+ },
35
+ unwrapOrElse(_fn) {
36
+ return value;
37
+ },
38
+ okOr(_error) {
39
+ return Ok(value);
40
+ },
41
+ okOrElse(_err) {
42
+ return Ok(value);
43
+ },
44
+ transpose() {
18
45
  const r = value;
19
46
  assertResult(r);
20
47
  return r.isOk() ? Ok(Some(r.unwrap())) : Err(r.unwrapErr());
21
48
  },
22
- filter: (predicate) => predicate(value) ? some : None,
23
- flatten: () => {
49
+ filter(predicate) {
50
+ return predicate(value) ? some : None;
51
+ },
52
+ flatten() {
24
53
  const o = value;
25
54
  assertOption(o);
26
55
  return o;
27
56
  },
28
- map: (fn) => Some(fn(value)),
29
- mapOr: (_defaultValue, fn) => fn(value),
30
- mapOrElse: (_defaultFn, fn) => fn(value),
31
- zip: (other) => {
57
+ map(fn) {
58
+ return Some(fn(value));
59
+ },
60
+ mapOr(_defaultValue, fn) {
61
+ return fn(value);
62
+ },
63
+ mapOrElse(_defaultFn, fn) {
64
+ return fn(value);
65
+ },
66
+ zip(other) {
32
67
  assertOption(other);
33
68
  return other.isSome() ? Some([value, other.unwrap()]) : None;
34
69
  },
35
- zipWith: (other, fn) => {
70
+ zipWith(other, fn) {
36
71
  assertOption(other);
37
72
  return other.isSome() ? Some(fn(value, other.unwrap())) : None;
38
73
  },
39
- unzip: () => {
74
+ unzip() {
40
75
  const tuple = value;
41
76
  if (!Array.isArray(tuple) || tuple.length !== 2) {
42
77
  throw new TypeError("Unzip format is incorrect.");
@@ -44,115 +79,205 @@ function Some(value) {
44
79
  const [a, b] = tuple;
45
80
  return [Some(a), Some(b)];
46
81
  },
47
- and: (other) => {
82
+ and(other) {
48
83
  assertOption(other);
49
84
  return other;
50
85
  },
51
- andThen: (fn) => fn(value),
52
- or: (_other) => some,
53
- orElse: (_fn) => some,
54
- xor: (other) => {
86
+ andThen(fn) {
87
+ return fn(value);
88
+ },
89
+ or(_other) {
90
+ return some;
91
+ },
92
+ orElse(_fn) {
93
+ return some;
94
+ },
95
+ xor(other) {
55
96
  assertOption(other);
56
97
  return other.isSome() ? None : some;
57
98
  },
58
- inspect: (fn) => {
99
+ inspect(fn) {
59
100
  fn(value);
60
101
  return some;
61
102
  },
62
- eq: (other) => {
103
+ eq(other) {
63
104
  assertOption(other);
64
105
  return other.isSome() && other.unwrap() === value;
106
+ },
107
+ toString() {
108
+ return `Some(${value})`;
65
109
  }
66
110
  };
67
111
  return some;
68
112
  }
69
113
  const None = Object.freeze({
70
- [optionKindSymbol]: "None",
71
- isSome: () => false,
72
- isNone: () => true,
73
- isSomeAnd: (_predicate) => false,
74
- expect: (msg) => {
114
+ [Symbol.toStringTag]: "Option",
115
+ [OptionKindSymbol]: "None",
116
+ isSome() {
117
+ return false;
118
+ },
119
+ isNone() {
120
+ return true;
121
+ },
122
+ isSomeAnd(_predicate) {
123
+ return false;
124
+ },
125
+ expect(msg) {
75
126
  throw new TypeError(msg);
76
127
  },
77
- unwrap: () => {
128
+ unwrap() {
78
129
  throw new TypeError("Called `Option::unwrap()` on a `None` value");
79
130
  },
80
- unwrapOr: (defaultValue) => defaultValue,
81
- unwrapOrElse: (fn) => fn(),
82
- okOr: (error) => Err(error),
83
- okOrElse: (err) => Err(err()),
84
- transpose: () => Ok(None),
85
- filter: (_predicate) => None,
86
- flatten: () => None,
87
- map: (_fn) => None,
88
- mapOr: (defaultValue, _fn) => defaultValue,
89
- mapOrElse: (defaultFn, _fn) => defaultFn(),
90
- zip: (_other) => None,
91
- zipWith: (_other, _fn) => None,
92
- unzip: () => [None, None],
93
- and: (_other) => None,
94
- andThen: (_fn) => None,
95
- or: (other) => {
131
+ unwrapOr(defaultValue) {
132
+ return defaultValue;
133
+ },
134
+ unwrapOrElse(fn) {
135
+ return fn();
136
+ },
137
+ okOr(error) {
138
+ return Err(error);
139
+ },
140
+ okOrElse(err) {
141
+ return Err(err());
142
+ },
143
+ transpose() {
144
+ return Ok(None);
145
+ },
146
+ filter(_predicate) {
147
+ return None;
148
+ },
149
+ flatten() {
150
+ return None;
151
+ },
152
+ map(_fn) {
153
+ return None;
154
+ },
155
+ mapOr(defaultValue, _fn) {
156
+ return defaultValue;
157
+ },
158
+ mapOrElse(defaultFn, _fn) {
159
+ return defaultFn();
160
+ },
161
+ zip(_other) {
162
+ return None;
163
+ },
164
+ zipWith(_other, _fn) {
165
+ return None;
166
+ },
167
+ unzip() {
168
+ return [None, None];
169
+ },
170
+ and(_other) {
171
+ return None;
172
+ },
173
+ andThen(_fn) {
174
+ return None;
175
+ },
176
+ or(other) {
96
177
  assertOption(other);
97
178
  return other;
98
179
  },
99
- orElse: (fn) => fn(),
100
- xor: (other) => {
180
+ orElse(fn) {
181
+ return fn();
182
+ },
183
+ xor(other) {
101
184
  assertOption(other);
102
185
  return other.isSome() ? other : None;
103
186
  },
104
- inspect: (_fn) => None,
105
- eq: (other) => {
187
+ inspect(_fn) {
188
+ return None;
189
+ },
190
+ eq(other) {
106
191
  assertOption(other);
107
192
  return other === None;
193
+ },
194
+ toString() {
195
+ return "None";
108
196
  }
109
197
  });
110
198
  function Ok(value) {
111
199
  const ok = {
112
- [resultKindSymbol]: "Ok",
113
- isOk: () => true,
114
- isErr: () => false,
115
- isOkAnd: (predicate) => predicate(value),
116
- isErrAnd: (_predicate) => false,
117
- expect: (_msg) => value,
118
- unwrap: () => value,
119
- unwrapOr: (_defaultValue) => value,
120
- unwrapOrElse: (_fn) => value,
121
- expectErr: (msg) => {
200
+ [Symbol.toStringTag]: "Result",
201
+ [ResultKindSymbol]: "Ok",
202
+ isOk() {
203
+ return true;
204
+ },
205
+ isErr() {
206
+ return false;
207
+ },
208
+ isOkAnd(predicate) {
209
+ return predicate(value);
210
+ },
211
+ isErrAnd(_predicate) {
212
+ return false;
213
+ },
214
+ expect(_msg) {
215
+ return value;
216
+ },
217
+ unwrap() {
218
+ return value;
219
+ },
220
+ unwrapOr(_defaultValue) {
221
+ return value;
222
+ },
223
+ unwrapOrElse(_fn) {
224
+ return value;
225
+ },
226
+ expectErr(msg) {
122
227
  throw new TypeError(`${msg}: ${value}`);
123
228
  },
124
- unwrapErr: () => {
229
+ unwrapErr() {
125
230
  throw new TypeError("Called `Result::unwrapErr()` on an `Ok` value");
126
231
  },
127
- ok: () => Some(value),
128
- err: () => None,
129
- transpose: () => {
232
+ ok() {
233
+ return Some(value);
234
+ },
235
+ err() {
236
+ return None;
237
+ },
238
+ transpose() {
130
239
  const o = value;
131
240
  assertOption(o);
132
241
  return o.isSome() ? Some(Ok(o.unwrap())) : None;
133
242
  },
134
- map: (fn) => Ok(fn(value)),
135
- mapErr: (_fn) => Ok(value),
136
- mapOr: (_defaultValue, fn) => fn(value),
137
- mapOrElse: (_defaultFn, fn) => fn(value),
138
- flatten: () => {
243
+ map(fn) {
244
+ return Ok(fn(value));
245
+ },
246
+ mapErr(_fn) {
247
+ return Ok(value);
248
+ },
249
+ mapOr(_defaultValue, fn) {
250
+ return fn(value);
251
+ },
252
+ mapOrElse(_defaultFn, fn) {
253
+ return fn(value);
254
+ },
255
+ flatten() {
139
256
  const r = value;
140
257
  assertResult(r);
141
258
  return r;
142
259
  },
143
- and: (other) => {
260
+ and(other) {
144
261
  assertResult(other);
145
262
  return other;
146
263
  },
147
- or: (_other) => ok,
148
- andThen: (fn) => fn(value),
149
- orElse: (_fn) => ok,
150
- inspect: (fn) => {
264
+ or(_other) {
265
+ return ok;
266
+ },
267
+ andThen(fn) {
268
+ return fn(value);
269
+ },
270
+ orElse(_fn) {
271
+ return ok;
272
+ },
273
+ inspect(fn) {
151
274
  fn(value);
152
275
  return ok;
153
276
  },
154
- inspectErr: (_fn) => ok,
155
- eq: (other) => {
277
+ inspectErr(_fn) {
278
+ return ok;
279
+ },
280
+ eq(other) {
156
281
  assertResult(other);
157
282
  return other.isOk() && other.unwrap() === value;
158
283
  },
@@ -161,48 +286,92 @@ function Ok(value) {
161
286
  },
162
287
  asErr() {
163
288
  throw new TypeError("Called `Result::asErr()` on an `Ok` value");
289
+ },
290
+ toString() {
291
+ return `Ok(${value})`;
164
292
  }
165
293
  };
166
294
  return ok;
167
295
  }
168
296
  function Err(error) {
169
297
  const err = {
170
- [resultKindSymbol]: "Err",
171
- isOk: () => false,
172
- isErr: () => true,
173
- isOkAnd: (_predicate) => false,
174
- isErrAnd: (predicate) => predicate(error),
175
- expect: (msg) => {
298
+ [Symbol.toStringTag]: "Result",
299
+ [ResultKindSymbol]: "Err",
300
+ isOk() {
301
+ return false;
302
+ },
303
+ isErr() {
304
+ return true;
305
+ },
306
+ isOkAnd(_predicate) {
307
+ return false;
308
+ },
309
+ isErrAnd(predicate) {
310
+ return predicate(error);
311
+ },
312
+ expect(msg) {
176
313
  throw new TypeError(`${msg}: ${error}`);
177
314
  },
178
- unwrap: () => {
315
+ unwrap() {
179
316
  throw new TypeError("Called `Result::unwrap()` on an `Err` value");
180
317
  },
181
- unwrapOr: (defaultValue) => defaultValue,
182
- unwrapOrElse: (fn) => fn(error),
183
- expectErr: (_msg) => error,
184
- unwrapErr: () => error,
185
- ok: () => None,
186
- err: () => Some(error),
187
- transpose: () => Some(err),
188
- map: (_fn) => err,
189
- mapErr: (fn) => Err(fn(error)),
190
- mapOr: (defaultValue, _fn) => defaultValue,
191
- mapOrElse: (defaultFn, _fn) => defaultFn(error),
192
- flatten: () => err,
193
- and: (_other) => err,
194
- or: (other) => {
318
+ unwrapOr(defaultValue) {
319
+ return defaultValue;
320
+ },
321
+ unwrapOrElse(fn) {
322
+ return fn(error);
323
+ },
324
+ expectErr(_msg) {
325
+ return error;
326
+ },
327
+ unwrapErr() {
328
+ return error;
329
+ },
330
+ ok() {
331
+ return None;
332
+ },
333
+ err() {
334
+ return Some(error);
335
+ },
336
+ transpose() {
337
+ return Some(err);
338
+ },
339
+ map(_fn) {
340
+ return err;
341
+ },
342
+ mapErr(fn) {
343
+ return Err(fn(error));
344
+ },
345
+ mapOr(defaultValue, _fn) {
346
+ return defaultValue;
347
+ },
348
+ mapOrElse(defaultFn, _fn) {
349
+ return defaultFn(error);
350
+ },
351
+ flatten() {
352
+ return err;
353
+ },
354
+ and(_other) {
355
+ return err;
356
+ },
357
+ or(other) {
195
358
  assertResult(other);
196
359
  return other;
197
360
  },
198
- andThen: (_fn) => err,
199
- orElse: (fn) => fn(error),
200
- inspect: (_fn) => err,
201
- inspectErr: (fn) => {
361
+ andThen(_fn) {
362
+ return err;
363
+ },
364
+ orElse(fn) {
365
+ return fn(error);
366
+ },
367
+ inspect(_fn) {
368
+ return err;
369
+ },
370
+ inspectErr(fn) {
202
371
  fn(error);
203
372
  return err;
204
373
  },
205
- eq: (other) => {
374
+ eq(other) {
206
375
  assertResult(other);
207
376
  return other.isErr() && other.unwrapErr() === error;
208
377
  },
@@ -211,21 +380,29 @@ function Err(error) {
211
380
  },
212
381
  asErr() {
213
382
  return err;
383
+ },
384
+ toString() {
385
+ return `Err(${error})`;
214
386
  }
215
387
  };
216
388
  return err;
217
389
  }
218
390
  function assertOption(o) {
219
- if (o == null || typeof o !== "object" || !(optionKindSymbol in o)) {
391
+ if (!isOption(o)) {
220
392
  throw new TypeError(`This(${o}) is not an Option`);
221
393
  }
222
394
  }
223
395
  function assertResult(r) {
224
- if (r == null || typeof r !== "object" || !(resultKindSymbol in r)) {
396
+ if (!isResult(r)) {
225
397
  throw new TypeError(`This(${r}) is not a Result`);
226
398
  }
227
399
  }
228
- function promiseToResult(p) {
400
+
401
+ const RESULT_TRUE = Ok(true);
402
+ const RESULT_FALSE = Ok(false);
403
+ const RESULT_ZERO = Ok(0);
404
+
405
+ function promiseToAsyncResult(p) {
229
406
  return p.then((x) => {
230
407
  return Ok(x);
231
408
  }).catch((err) => {
@@ -236,6 +413,11 @@ function promiseToResult(p) {
236
413
  exports.Err = Err;
237
414
  exports.None = None;
238
415
  exports.Ok = Ok;
416
+ exports.RESULT_FALSE = RESULT_FALSE;
417
+ exports.RESULT_TRUE = RESULT_TRUE;
418
+ exports.RESULT_ZERO = RESULT_ZERO;
239
419
  exports.Some = Some;
240
- exports.promiseToResult = promiseToResult;
420
+ exports.isOption = isOption;
421
+ exports.isResult = isResult;
422
+ exports.promiseToAsyncResult = promiseToAsyncResult;
241
423
  //# sourceMappingURL=main.cjs.map