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