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