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.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
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
|
23
|
-
|
|
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
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
|
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,172 +71,321 @@ function Some(value) {
|
|
|
44
71
|
const [a, b] = tuple;
|
|
45
72
|
return [Some(a), Some(b)];
|
|
46
73
|
},
|
|
47
|
-
and
|
|
74
|
+
and(other) {
|
|
48
75
|
assertOption(other);
|
|
49
76
|
return other;
|
|
50
77
|
},
|
|
51
|
-
andThen
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
91
|
+
inspect(fn) {
|
|
59
92
|
fn(value);
|
|
60
93
|
return some;
|
|
61
94
|
},
|
|
62
|
-
eq
|
|
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
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
|
100
|
-
|
|
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
|
|
105
|
-
|
|
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
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
|
128
|
-
|
|
129
|
-
|
|
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
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
|
252
|
+
and(other) {
|
|
144
253
|
assertResult(other);
|
|
145
254
|
return other;
|
|
146
255
|
},
|
|
147
|
-
or
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
|
155
|
-
|
|
269
|
+
inspectErr(_fn) {
|
|
270
|
+
return ok;
|
|
271
|
+
},
|
|
272
|
+
eq(other) {
|
|
156
273
|
assertResult(other);
|
|
157
274
|
return other.isOk() && other.unwrap() === value;
|
|
275
|
+
},
|
|
276
|
+
asOk() {
|
|
277
|
+
return ok;
|
|
278
|
+
},
|
|
279
|
+
asErr() {
|
|
280
|
+
throw new TypeError("Called `Result::asErr()` on an `Ok` value");
|
|
281
|
+
},
|
|
282
|
+
toString() {
|
|
283
|
+
return `Ok(${value})`;
|
|
158
284
|
}
|
|
159
285
|
};
|
|
160
286
|
return ok;
|
|
161
287
|
}
|
|
162
288
|
function Err(error) {
|
|
163
289
|
const err = {
|
|
290
|
+
[Symbol.toStringTag]: "Result",
|
|
164
291
|
[resultKindSymbol]: "Err",
|
|
165
|
-
isOk
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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) {
|
|
170
305
|
throw new TypeError(`${msg}: ${error}`);
|
|
171
306
|
},
|
|
172
|
-
unwrap
|
|
307
|
+
unwrap() {
|
|
173
308
|
throw new TypeError("Called `Result::unwrap()` on an `Err` value");
|
|
174
309
|
},
|
|
175
|
-
unwrapOr
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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) {
|
|
189
350
|
assertResult(other);
|
|
190
351
|
return other;
|
|
191
352
|
},
|
|
192
|
-
andThen
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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) {
|
|
196
363
|
fn(error);
|
|
197
364
|
return err;
|
|
198
365
|
},
|
|
199
|
-
eq
|
|
366
|
+
eq(other) {
|
|
200
367
|
assertResult(other);
|
|
201
368
|
return other.isErr() && other.unwrapErr() === error;
|
|
369
|
+
},
|
|
370
|
+
asOk() {
|
|
371
|
+
throw new TypeError("Called `Result::asOk()` on an `Err` value");
|
|
372
|
+
},
|
|
373
|
+
asErr() {
|
|
374
|
+
return err;
|
|
375
|
+
},
|
|
376
|
+
toString() {
|
|
377
|
+
return `Err(${error})`;
|
|
202
378
|
}
|
|
203
379
|
};
|
|
204
380
|
return err;
|
|
205
381
|
}
|
|
206
382
|
function assertOption(o) {
|
|
207
|
-
if (
|
|
383
|
+
if (!isOption(o)) {
|
|
208
384
|
throw new TypeError(`This(${o}) is not an Option`);
|
|
209
385
|
}
|
|
210
386
|
}
|
|
211
387
|
function assertResult(r) {
|
|
212
|
-
if (
|
|
388
|
+
if (!isResult(r)) {
|
|
213
389
|
throw new TypeError(`This(${r}) is not a Result`);
|
|
214
390
|
}
|
|
215
391
|
}
|
|
@@ -220,10 +396,18 @@ function promiseToResult(p) {
|
|
|
220
396
|
return Err(err);
|
|
221
397
|
});
|
|
222
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
|
+
}
|
|
223
405
|
|
|
224
406
|
exports.Err = Err;
|
|
225
407
|
exports.None = None;
|
|
226
408
|
exports.Ok = Ok;
|
|
227
409
|
exports.Some = Some;
|
|
410
|
+
exports.isOption = isOption;
|
|
411
|
+
exports.isResult = isResult;
|
|
228
412
|
exports.promiseToResult = promiseToResult;
|
|
229
413
|
//# sourceMappingURL=main.cjs.map
|