happy-rusty 1.1.1 → 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 +286 -102
- package/dist/main.cjs.map +1 -1
- package/dist/main.mjs +285 -103
- package/dist/main.mjs.map +1 -1
- package/dist/types.d.ts +53 -1
- package/docs/README.md +2 -0
- package/docs/functions/Err.md +1 -1
- package/docs/functions/Ok.md +1 -1
- package/docs/functions/Some.md +1 -1
- package/docs/functions/isOption.md +35 -0
- package/docs/functions/isResult.md +36 -0
- package/docs/functions/promiseToResult.md +1 -1
- package/docs/interfaces/None.md +51 -28
- package/docs/interfaces/Option.md +49 -25
- package/docs/interfaces/Result.md +106 -25
- package/docs/type-aliases/AsyncIOResult.md +1 -1
- package/docs/type-aliases/AsyncOption.md +1 -1
- package/docs/type-aliases/AsyncResult.md +1 -1
- package/docs/type-aliases/IOResult.md +1 -1
- package/docs/variables/None.md +1 -1
- package/package.json +11 -10
- package/src/enum/prelude.ts +350 -104
- package/src/mod.ts +2 -0
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
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
21
|
-
|
|
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
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
|
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,172 +69,321 @@ function Some(value) {
|
|
|
42
69
|
const [a, b] = tuple;
|
|
43
70
|
return [Some(a), Some(b)];
|
|
44
71
|
},
|
|
45
|
-
and
|
|
72
|
+
and(other) {
|
|
46
73
|
assertOption(other);
|
|
47
74
|
return other;
|
|
48
75
|
},
|
|
49
|
-
andThen
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
89
|
+
inspect(fn) {
|
|
57
90
|
fn(value);
|
|
58
91
|
return some;
|
|
59
92
|
},
|
|
60
|
-
eq
|
|
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
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
|
98
|
-
|
|
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
|
|
103
|
-
|
|
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
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
|
126
|
-
|
|
127
|
-
|
|
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
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
|
250
|
+
and(other) {
|
|
142
251
|
assertResult(other);
|
|
143
252
|
return other;
|
|
144
253
|
},
|
|
145
|
-
or
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
|
153
|
-
|
|
267
|
+
inspectErr(_fn) {
|
|
268
|
+
return ok;
|
|
269
|
+
},
|
|
270
|
+
eq(other) {
|
|
154
271
|
assertResult(other);
|
|
155
272
|
return other.isOk() && other.unwrap() === value;
|
|
273
|
+
},
|
|
274
|
+
asOk() {
|
|
275
|
+
return ok;
|
|
276
|
+
},
|
|
277
|
+
asErr() {
|
|
278
|
+
throw new TypeError("Called `Result::asErr()` on an `Ok` value");
|
|
279
|
+
},
|
|
280
|
+
toString() {
|
|
281
|
+
return `Ok(${value})`;
|
|
156
282
|
}
|
|
157
283
|
};
|
|
158
284
|
return ok;
|
|
159
285
|
}
|
|
160
286
|
function Err(error) {
|
|
161
287
|
const err = {
|
|
288
|
+
[Symbol.toStringTag]: "Result",
|
|
162
289
|
[resultKindSymbol]: "Err",
|
|
163
|
-
isOk
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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) {
|
|
168
303
|
throw new TypeError(`${msg}: ${error}`);
|
|
169
304
|
},
|
|
170
|
-
unwrap
|
|
305
|
+
unwrap() {
|
|
171
306
|
throw new TypeError("Called `Result::unwrap()` on an `Err` value");
|
|
172
307
|
},
|
|
173
|
-
unwrapOr
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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) {
|
|
187
348
|
assertResult(other);
|
|
188
349
|
return other;
|
|
189
350
|
},
|
|
190
|
-
andThen
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
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) {
|
|
194
361
|
fn(error);
|
|
195
362
|
return err;
|
|
196
363
|
},
|
|
197
|
-
eq
|
|
364
|
+
eq(other) {
|
|
198
365
|
assertResult(other);
|
|
199
366
|
return other.isErr() && other.unwrapErr() === error;
|
|
367
|
+
},
|
|
368
|
+
asOk() {
|
|
369
|
+
throw new TypeError("Called `Result::asOk()` on an `Err` value");
|
|
370
|
+
},
|
|
371
|
+
asErr() {
|
|
372
|
+
return err;
|
|
373
|
+
},
|
|
374
|
+
toString() {
|
|
375
|
+
return `Err(${error})`;
|
|
200
376
|
}
|
|
201
377
|
};
|
|
202
378
|
return err;
|
|
203
379
|
}
|
|
204
380
|
function assertOption(o) {
|
|
205
|
-
if (
|
|
381
|
+
if (!isOption(o)) {
|
|
206
382
|
throw new TypeError(`This(${o}) is not an Option`);
|
|
207
383
|
}
|
|
208
384
|
}
|
|
209
385
|
function assertResult(r) {
|
|
210
|
-
if (
|
|
386
|
+
if (!isResult(r)) {
|
|
211
387
|
throw new TypeError(`This(${r}) is not a Result`);
|
|
212
388
|
}
|
|
213
389
|
}
|
|
@@ -218,6 +394,12 @@ function promiseToResult(p) {
|
|
|
218
394
|
return Err(err);
|
|
219
395
|
});
|
|
220
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
|
+
}
|
|
221
403
|
|
|
222
|
-
export { Err, None, Ok, Some, promiseToResult };
|
|
404
|
+
export { Err, None, Ok, Some, isOption, isResult, promiseToResult };
|
|
223
405
|
//# sourceMappingURL=main.mjs.map
|