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