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