@ekz/option 2.0.0 → 2.0.2
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/README.md +13 -232
- package/lib/cjs/index.d.ts +23 -0
- package/lib/cjs/index.js +89 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/esm/index.d.ts +23 -0
- package/lib/esm/index.js +84 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esnext/index.d.ts +23 -0
- package/lib/esnext/index.js +87 -0
- package/lib/esnext/index.js.map +1 -0
- package/package.json +6 -4
package/README.md
CHANGED
|
@@ -1,242 +1,23 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @ekz/option
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Option/Maybe type for TypeScript — a port of Scala's `Option`.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Documentation:** [https://docs.ekz.io/option/](https://docs.ekz.io/option/)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Install
|
|
8
8
|
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
let valueA = Option.of(null).map(x => x + 2).getOrElse(() => 0);
|
|
13
|
-
// valueA = 0
|
|
14
|
-
|
|
15
|
-
let valueB = Some('any object').flatMap(x => Some(`${x}!!!`)).getOrUndefined();
|
|
16
|
-
// valueB = 'any object!!!'
|
|
17
|
-
|
|
18
|
-
let valueC = Some(null).flatMap(() => Option.of(2)).map(x => x * 3).getOrElse(() => 0);
|
|
19
|
-
// valueC = 6
|
|
20
|
-
|
|
21
|
-
let valueD = Some(1).mapNullable(() => null).getOrReturn(-1);
|
|
22
|
-
// valueD = -1
|
|
23
|
-
|
|
24
|
-
Some(1).equals(Some(1))
|
|
25
|
-
// true
|
|
26
|
-
|
|
27
|
-
None.equals(None)
|
|
28
|
-
// true
|
|
29
|
-
|
|
30
|
-
Some('abc').equals(None)
|
|
31
|
-
// false
|
|
32
|
-
|
|
33
|
-
None.isDefined; // false
|
|
34
|
-
Some(1).isDefined; // true
|
|
35
|
-
Some(1).isEmpty; // false
|
|
36
|
-
Some(null).isEmpty; // false! Option<null> is valid!
|
|
37
|
-
|
|
38
|
-
Some('foo').get(); // 'foo'
|
|
39
|
-
None.get(); // throws an error, use getOrElse or getOrUndefined instead
|
|
40
|
-
|
|
41
|
-
Some(3).filter(x => x % 2 === 0); // None
|
|
42
|
-
|
|
43
|
-
Some('bar').forEach(x => {
|
|
44
|
-
console.log(`my value: ${x}`);
|
|
45
|
-
});
|
|
9
|
+
```bash
|
|
10
|
+
npm install @ekz/option
|
|
46
11
|
```
|
|
47
12
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
|
|
51
|
-
|
|
52
|
-
### Table of Contents
|
|
53
|
-
|
|
54
|
-
* [Option](#option)
|
|
55
|
-
* [Parameters](#parameters)
|
|
56
|
-
* [get](#get)
|
|
57
|
-
* [isEmpty](#isempty)
|
|
58
|
-
* [isDefined](#isdefined)
|
|
59
|
-
* [map](#map)
|
|
60
|
-
* [Parameters](#parameters-1)
|
|
61
|
-
* [mapNullable](#mapnullable)
|
|
62
|
-
* [Parameters](#parameters-2)
|
|
63
|
-
* [flatMap](#flatmap)
|
|
64
|
-
* [Parameters](#parameters-3)
|
|
65
|
-
* [forEach](#foreach)
|
|
66
|
-
* [Parameters](#parameters-4)
|
|
67
|
-
* [filter](#filter)
|
|
68
|
-
* [Parameters](#parameters-5)
|
|
69
|
-
* [getOrElse](#getorelse)
|
|
70
|
-
* [Parameters](#parameters-6)
|
|
71
|
-
* [getOrReturn](#getorreturn)
|
|
72
|
-
* [Parameters](#parameters-7)
|
|
73
|
-
* [getOrUndefined](#getorundefined)
|
|
74
|
-
* [equals](#equals)
|
|
75
|
-
* [Parameters](#parameters-8)
|
|
76
|
-
* [toJSON](#tojson)
|
|
77
|
-
* [of](#of)
|
|
78
|
-
* [Parameters](#parameters-9)
|
|
79
|
-
* [None](#none)
|
|
80
|
-
* [Some](#some)
|
|
81
|
-
* [None](#none-1)
|
|
82
|
-
* [Some](#some-1)
|
|
83
|
-
* [Parameters](#parameters-10)
|
|
84
|
-
|
|
85
|
-
## Option
|
|
86
|
-
|
|
87
|
-
Represents optional values. Instances of Option are either an instance of Some or the object None.
|
|
88
|
-
|
|
89
|
-
### Parameters
|
|
90
|
-
|
|
91
|
-
* `$privateToken` **any** 
|
|
92
|
-
|
|
93
|
-
### get
|
|
94
|
-
|
|
95
|
-
Returns the option's value.
|
|
96
|
-
|
|
97
|
-
Type: function (): A
|
|
98
|
-
|
|
99
|
-
### isEmpty
|
|
100
|
-
|
|
101
|
-
Returns true if the option is None, false otherwise.
|
|
102
|
-
|
|
103
|
-
Type: [boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)
|
|
104
|
-
|
|
105
|
-
### isDefined
|
|
106
|
-
|
|
107
|
-
Returns true if the option is an instance of Some, false otherwise.
|
|
108
|
-
|
|
109
|
-
Type: [boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)
|
|
110
|
-
|
|
111
|
-
Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** 
|
|
112
|
-
|
|
113
|
-
### map
|
|
114
|
-
|
|
115
|
-
Returns a Some containing the result of applying f to this Option's value if this Option is nonempty.
|
|
116
|
-
|
|
117
|
-
#### Parameters
|
|
118
|
-
|
|
119
|
-
* `f` **function (A): B** 
|
|
120
|
-
|
|
121
|
-
Returns **[Option](#option)\<B>** 
|
|
122
|
-
|
|
123
|
-
### mapNullable
|
|
124
|
-
|
|
125
|
-
Like map, but if resulting value is null, then returns None.
|
|
126
|
-
|
|
127
|
-
#### Parameters
|
|
128
|
-
|
|
129
|
-
* `f` **function (A): B?** 
|
|
130
|
-
|
|
131
|
-
Returns **[Option](#option)\<B>** 
|
|
132
|
-
|
|
133
|
-
### flatMap
|
|
134
|
-
|
|
135
|
-
Returns the result of applying f to this Option's value if this Option is nonempty. Returns None if this Option is empty. Slightly different from map in that f is expected to return an Option (which could be None).
|
|
136
|
-
|
|
137
|
-
#### Parameters
|
|
138
|
-
|
|
139
|
-
* `f` **function (A): [Option](#option)\<B>** 
|
|
140
|
-
|
|
141
|
-
Returns **[Option](#option)\<B>** 
|
|
142
|
-
|
|
143
|
-
### forEach
|
|
144
|
-
|
|
145
|
-
Apply the given procedure f to the option's value, if it is nonempty.
|
|
13
|
+
## Quick example
|
|
146
14
|
|
|
147
|
-
|
|
15
|
+
```typescript
|
|
16
|
+
import { Option, Some, None } from '@ekz/option';
|
|
148
17
|
|
|
149
|
-
|
|
18
|
+
const label = Option.of(maybeName).map((n) => n.trim()).getOrElse(() => 'Anonymous');
|
|
150
19
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
### filter
|
|
154
|
-
|
|
155
|
-
Returns this Option if it is nonempty and applying the predicate to this Option's value returns true.
|
|
156
|
-
|
|
157
|
-
#### Parameters
|
|
158
|
-
|
|
159
|
-
* `predicate` **function (A): [boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** 
|
|
160
|
-
|
|
161
|
-
Returns **[Option](#option)\<A>** 
|
|
162
|
-
|
|
163
|
-
### getOrElse
|
|
164
|
-
|
|
165
|
-
Returns the option's value if the option is nonempty, otherwise return the result of evaluating other.
|
|
166
|
-
|
|
167
|
-
#### Parameters
|
|
168
|
-
|
|
169
|
-
* `other` **function (): B** 
|
|
170
|
-
|
|
171
|
-
Returns **(A | B)** 
|
|
172
|
-
|
|
173
|
-
### getOrReturn
|
|
174
|
-
|
|
175
|
-
Returns the option's value if the option is nonempty, otherwise return other.
|
|
176
|
-
|
|
177
|
-
#### Parameters
|
|
178
|
-
|
|
179
|
-
* `other` **B** 
|
|
180
|
-
|
|
181
|
-
Returns **(A | B)** 
|
|
182
|
-
|
|
183
|
-
### getOrUndefined
|
|
184
|
-
|
|
185
|
-
Returns the option's value if the option is nonempty, otherwise returns undefined.
|
|
186
|
-
|
|
187
|
-
Returns **(A | void)** 
|
|
188
|
-
|
|
189
|
-
### equals
|
|
190
|
-
|
|
191
|
-
Compares the option's value with other option's value and returns true when they match. None always matches other None.
|
|
192
|
-
|
|
193
|
-
#### Parameters
|
|
194
|
-
|
|
195
|
-
* `other` **[Option](#option)\<B>** 
|
|
196
|
-
|
|
197
|
-
Returns **[boolean](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** 
|
|
198
|
-
|
|
199
|
-
### toJSON
|
|
200
|
-
|
|
201
|
-
Returns value if present, null otherwise. If value contains a method `toJSON`,
|
|
202
|
-
returns the result of method call.
|
|
203
|
-
|
|
204
|
-
Returns **any** 
|
|
205
|
-
|
|
206
|
-
### of
|
|
207
|
-
|
|
208
|
-
An Option factory which creates Some(x) if the argument is not null, and None if it is null.
|
|
209
|
-
|
|
210
|
-
#### Parameters
|
|
211
|
-
|
|
212
|
-
* `value` **V??** 
|
|
213
|
-
|
|
214
|
-
Returns **[Option](#option)\<V>** 
|
|
215
|
-
|
|
216
|
-
### None
|
|
217
|
-
|
|
218
|
-
The empty None object
|
|
219
|
-
|
|
220
|
-
Type: [Option](#option)\<any>
|
|
221
|
-
|
|
222
|
-
### Some
|
|
223
|
-
|
|
224
|
-
Creates Some(x). Note that Some(null) is valid.
|
|
225
|
-
|
|
226
|
-
Type: function (value: A): [Option](#option)\<A>
|
|
227
|
-
|
|
228
|
-
## None
|
|
229
|
-
|
|
230
|
-
The empty None object.
|
|
231
|
-
|
|
232
|
-
Type: [Option](#option)\<any>
|
|
233
|
-
|
|
234
|
-
## Some
|
|
235
|
-
|
|
236
|
-
Creates Some(x). Note that Some(null) is valid.
|
|
237
|
-
|
|
238
|
-
### Parameters
|
|
239
|
-
|
|
240
|
-
* `value` **A** 
|
|
20
|
+
Some(1).flatMap((n) => (n > 0 ? Some(n) : None)); // Some(1)
|
|
21
|
+
```
|
|
241
22
|
|
|
242
|
-
|
|
23
|
+
See the [docs](https://docs.ekz.io/option/) for constructors, transformations, and safe unwrapping.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
declare const PrivateToken: unique symbol;
|
|
2
|
+
export declare class Option<A> {
|
|
3
|
+
constructor($privateToken: typeof PrivateToken);
|
|
4
|
+
get isDefined(): boolean;
|
|
5
|
+
get(): A;
|
|
6
|
+
get isEmpty(): boolean;
|
|
7
|
+
map<B>(f: (value: A) => B): Option<B>;
|
|
8
|
+
mapNullable<B>(f: (value: A) => B | null | undefined): Option<B>;
|
|
9
|
+
flatMap<B>(f: (value: A) => Option<B>): Option<B>;
|
|
10
|
+
forEach(f: (value: A) => void): void;
|
|
11
|
+
filter(predicate: (value: A) => boolean): Option<A>;
|
|
12
|
+
getOrElse<B>(other: () => B): A | B;
|
|
13
|
+
getOrReturn<B>(other: B): A | B;
|
|
14
|
+
getOrUndefined(): A | undefined;
|
|
15
|
+
equals(other: Option<A>): boolean;
|
|
16
|
+
toJSON(): unknown;
|
|
17
|
+
static of<V>(value?: V | null | void): Option<V>;
|
|
18
|
+
static None: Option<never>;
|
|
19
|
+
static Some: <T>(value: T) => Option<T>;
|
|
20
|
+
}
|
|
21
|
+
export declare const None: Option<never>;
|
|
22
|
+
export declare function Some<T>(value: T): Option<T>;
|
|
23
|
+
export {};
|
package/lib/cjs/index.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.None = exports.Option = void 0;
|
|
4
|
+
exports.Some = Some;
|
|
5
|
+
const PrivateToken = Symbol('Option');
|
|
6
|
+
class Option {
|
|
7
|
+
constructor($privateToken) {
|
|
8
|
+
if ($privateToken !== PrivateToken) {
|
|
9
|
+
throw new Error('Option cannot be manually instantiated. Use Option.of, Some or None.');
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
get isDefined() {
|
|
13
|
+
return !this.isEmpty;
|
|
14
|
+
}
|
|
15
|
+
get() {
|
|
16
|
+
throw new Error('Not implemented');
|
|
17
|
+
}
|
|
18
|
+
get isEmpty() {
|
|
19
|
+
throw new Error('Not implemented');
|
|
20
|
+
}
|
|
21
|
+
map(f) {
|
|
22
|
+
return this.isEmpty ? exports.None : Some(f(this.get()));
|
|
23
|
+
}
|
|
24
|
+
mapNullable(f) {
|
|
25
|
+
return this.isEmpty ? exports.None : Option.of(f(this.get()));
|
|
26
|
+
}
|
|
27
|
+
flatMap(f) {
|
|
28
|
+
return this.isEmpty ? exports.None : f(this.get());
|
|
29
|
+
}
|
|
30
|
+
forEach(f) {
|
|
31
|
+
if (!this.isEmpty) {
|
|
32
|
+
f(this.get());
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
filter(predicate) {
|
|
36
|
+
return this.isEmpty || predicate(this.get()) ? this : exports.None;
|
|
37
|
+
}
|
|
38
|
+
getOrElse(other) {
|
|
39
|
+
return this.isEmpty ? other() : this.get();
|
|
40
|
+
}
|
|
41
|
+
getOrReturn(other) {
|
|
42
|
+
return this.isEmpty ? other : this.get();
|
|
43
|
+
}
|
|
44
|
+
getOrUndefined() {
|
|
45
|
+
return this.isEmpty ? undefined : this.get();
|
|
46
|
+
}
|
|
47
|
+
equals(other) {
|
|
48
|
+
return this.isDefined && other.isDefined ? this.get() === other.get() : this === other;
|
|
49
|
+
}
|
|
50
|
+
toJSON() {
|
|
51
|
+
const value = this.getOrReturn(null);
|
|
52
|
+
if (value != null &&
|
|
53
|
+
typeof value.toJSON === 'function') {
|
|
54
|
+
return value.toJSON();
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
static of(value) {
|
|
59
|
+
return value == null ? exports.None : Some(value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.Option = Option;
|
|
63
|
+
class $None extends Option {
|
|
64
|
+
get() {
|
|
65
|
+
throw new Error('No such element');
|
|
66
|
+
}
|
|
67
|
+
get isEmpty() {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.None = new $None(PrivateToken);
|
|
72
|
+
Option.None = exports.None;
|
|
73
|
+
class $Some extends Option {
|
|
74
|
+
constructor(value) {
|
|
75
|
+
super(PrivateToken);
|
|
76
|
+
this._value = value;
|
|
77
|
+
}
|
|
78
|
+
get() {
|
|
79
|
+
return this._value;
|
|
80
|
+
}
|
|
81
|
+
get isEmpty() {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function Some(value) {
|
|
86
|
+
return new $Some(value);
|
|
87
|
+
}
|
|
88
|
+
Option.Some = Some;
|
|
89
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/main/web/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
declare const PrivateToken: unique symbol;
|
|
2
|
+
export declare class Option<A> {
|
|
3
|
+
constructor($privateToken: typeof PrivateToken);
|
|
4
|
+
get isDefined(): boolean;
|
|
5
|
+
get(): A;
|
|
6
|
+
get isEmpty(): boolean;
|
|
7
|
+
map<B>(f: (value: A) => B): Option<B>;
|
|
8
|
+
mapNullable<B>(f: (value: A) => B | null | undefined): Option<B>;
|
|
9
|
+
flatMap<B>(f: (value: A) => Option<B>): Option<B>;
|
|
10
|
+
forEach(f: (value: A) => void): void;
|
|
11
|
+
filter(predicate: (value: A) => boolean): Option<A>;
|
|
12
|
+
getOrElse<B>(other: () => B): A | B;
|
|
13
|
+
getOrReturn<B>(other: B): A | B;
|
|
14
|
+
getOrUndefined(): A | undefined;
|
|
15
|
+
equals(other: Option<A>): boolean;
|
|
16
|
+
toJSON(): unknown;
|
|
17
|
+
static of<V>(value?: V | null | void): Option<V>;
|
|
18
|
+
static None: Option<never>;
|
|
19
|
+
static Some: <T>(value: T) => Option<T>;
|
|
20
|
+
}
|
|
21
|
+
export declare const None: Option<never>;
|
|
22
|
+
export declare function Some<T>(value: T): Option<T>;
|
|
23
|
+
export {};
|
package/lib/esm/index.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
const PrivateToken = Symbol('Option');
|
|
2
|
+
export class Option {
|
|
3
|
+
constructor($privateToken) {
|
|
4
|
+
if ($privateToken !== PrivateToken) {
|
|
5
|
+
throw new Error('Option cannot be manually instantiated. Use Option.of, Some or None.');
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
get isDefined() {
|
|
9
|
+
return !this.isEmpty;
|
|
10
|
+
}
|
|
11
|
+
get() {
|
|
12
|
+
throw new Error('Not implemented');
|
|
13
|
+
}
|
|
14
|
+
get isEmpty() {
|
|
15
|
+
throw new Error('Not implemented');
|
|
16
|
+
}
|
|
17
|
+
map(f) {
|
|
18
|
+
return this.isEmpty ? None : Some(f(this.get()));
|
|
19
|
+
}
|
|
20
|
+
mapNullable(f) {
|
|
21
|
+
return this.isEmpty ? None : Option.of(f(this.get()));
|
|
22
|
+
}
|
|
23
|
+
flatMap(f) {
|
|
24
|
+
return this.isEmpty ? None : f(this.get());
|
|
25
|
+
}
|
|
26
|
+
forEach(f) {
|
|
27
|
+
if (!this.isEmpty) {
|
|
28
|
+
f(this.get());
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
filter(predicate) {
|
|
32
|
+
return this.isEmpty || predicate(this.get()) ? this : None;
|
|
33
|
+
}
|
|
34
|
+
getOrElse(other) {
|
|
35
|
+
return this.isEmpty ? other() : this.get();
|
|
36
|
+
}
|
|
37
|
+
getOrReturn(other) {
|
|
38
|
+
return this.isEmpty ? other : this.get();
|
|
39
|
+
}
|
|
40
|
+
getOrUndefined() {
|
|
41
|
+
return this.isEmpty ? undefined : this.get();
|
|
42
|
+
}
|
|
43
|
+
equals(other) {
|
|
44
|
+
return this.isDefined && other.isDefined ? this.get() === other.get() : this === other;
|
|
45
|
+
}
|
|
46
|
+
toJSON() {
|
|
47
|
+
const value = this.getOrReturn(null);
|
|
48
|
+
if (value != null &&
|
|
49
|
+
typeof value.toJSON === 'function') {
|
|
50
|
+
return value.toJSON();
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
static of(value) {
|
|
55
|
+
return value == null ? None : Some(value);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
class $None extends Option {
|
|
59
|
+
get() {
|
|
60
|
+
throw new Error('No such element');
|
|
61
|
+
}
|
|
62
|
+
get isEmpty() {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export const None = new $None(PrivateToken);
|
|
67
|
+
Option.None = None;
|
|
68
|
+
class $Some extends Option {
|
|
69
|
+
constructor(value) {
|
|
70
|
+
super(PrivateToken);
|
|
71
|
+
this._value = value;
|
|
72
|
+
}
|
|
73
|
+
get() {
|
|
74
|
+
return this._value;
|
|
75
|
+
}
|
|
76
|
+
get isEmpty() {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export function Some(value) {
|
|
81
|
+
return new $Some(value);
|
|
82
|
+
}
|
|
83
|
+
Option.Some = Some;
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/main/web/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
declare const PrivateToken: unique symbol;
|
|
2
|
+
export declare class Option<A> {
|
|
3
|
+
constructor($privateToken: typeof PrivateToken);
|
|
4
|
+
get isDefined(): boolean;
|
|
5
|
+
get(): A;
|
|
6
|
+
get isEmpty(): boolean;
|
|
7
|
+
map<B>(f: (value: A) => B): Option<B>;
|
|
8
|
+
mapNullable<B>(f: (value: A) => B | null | undefined): Option<B>;
|
|
9
|
+
flatMap<B>(f: (value: A) => Option<B>): Option<B>;
|
|
10
|
+
forEach(f: (value: A) => void): void;
|
|
11
|
+
filter(predicate: (value: A) => boolean): Option<A>;
|
|
12
|
+
getOrElse<B>(other: () => B): A | B;
|
|
13
|
+
getOrReturn<B>(other: B): A | B;
|
|
14
|
+
getOrUndefined(): A | undefined;
|
|
15
|
+
equals(other: Option<A>): boolean;
|
|
16
|
+
toJSON(): unknown;
|
|
17
|
+
static of<V>(value?: V | null | void): Option<V>;
|
|
18
|
+
static None: Option<never>;
|
|
19
|
+
static Some: <T>(value: T) => Option<T>;
|
|
20
|
+
}
|
|
21
|
+
export declare const None: Option<never>;
|
|
22
|
+
export declare function Some<T>(value: T): Option<T>;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
const PrivateToken = Symbol('Option');
|
|
2
|
+
export class Option {
|
|
3
|
+
constructor($privateToken) {
|
|
4
|
+
if ($privateToken !== PrivateToken) {
|
|
5
|
+
throw new Error('Option cannot be manually instantiated. Use Option.of, Some or None.');
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
get isDefined() {
|
|
9
|
+
return !this.isEmpty;
|
|
10
|
+
}
|
|
11
|
+
get() {
|
|
12
|
+
throw new Error('Not implemented');
|
|
13
|
+
}
|
|
14
|
+
get isEmpty() {
|
|
15
|
+
throw new Error('Not implemented');
|
|
16
|
+
}
|
|
17
|
+
map(f) {
|
|
18
|
+
return this.isEmpty ? None : Some(f(this.get()));
|
|
19
|
+
}
|
|
20
|
+
mapNullable(f) {
|
|
21
|
+
return this.isEmpty ? None : Option.of(f(this.get()));
|
|
22
|
+
}
|
|
23
|
+
flatMap(f) {
|
|
24
|
+
return this.isEmpty ? None : f(this.get());
|
|
25
|
+
}
|
|
26
|
+
forEach(f) {
|
|
27
|
+
if (!this.isEmpty) {
|
|
28
|
+
f(this.get());
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
filter(predicate) {
|
|
32
|
+
return this.isEmpty || predicate(this.get()) ? this : None;
|
|
33
|
+
}
|
|
34
|
+
getOrElse(other) {
|
|
35
|
+
return this.isEmpty ? other() : this.get();
|
|
36
|
+
}
|
|
37
|
+
getOrReturn(other) {
|
|
38
|
+
return this.isEmpty ? other : this.get();
|
|
39
|
+
}
|
|
40
|
+
getOrUndefined() {
|
|
41
|
+
return this.isEmpty ? undefined : this.get();
|
|
42
|
+
}
|
|
43
|
+
equals(other) {
|
|
44
|
+
return this.isDefined && other.isDefined ? this.get() === other.get() : this === other;
|
|
45
|
+
}
|
|
46
|
+
toJSON() {
|
|
47
|
+
const value = this.getOrReturn(null);
|
|
48
|
+
if (value != null &&
|
|
49
|
+
typeof value.toJSON === 'function') {
|
|
50
|
+
return value.toJSON();
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
static of(value) {
|
|
55
|
+
return value == null ? None : Some(value);
|
|
56
|
+
}
|
|
57
|
+
static None;
|
|
58
|
+
static Some;
|
|
59
|
+
}
|
|
60
|
+
class $None extends Option {
|
|
61
|
+
get() {
|
|
62
|
+
throw new Error('No such element');
|
|
63
|
+
}
|
|
64
|
+
get isEmpty() {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export const None = new $None(PrivateToken);
|
|
69
|
+
Option.None = None;
|
|
70
|
+
class $Some extends Option {
|
|
71
|
+
_value;
|
|
72
|
+
constructor(value) {
|
|
73
|
+
super(PrivateToken);
|
|
74
|
+
this._value = value;
|
|
75
|
+
}
|
|
76
|
+
get() {
|
|
77
|
+
return this._value;
|
|
78
|
+
}
|
|
79
|
+
get isEmpty() {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export function Some(value) {
|
|
84
|
+
return new $Some(value);
|
|
85
|
+
}
|
|
86
|
+
Option.Some = Some;
|
|
87
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/main/web/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ekz/option",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Option/Maybe type for TypeScript",
|
|
6
|
+
"homepage": "https://docs.ekz.io/option/",
|
|
6
7
|
"repository": {
|
|
7
8
|
"type": "git",
|
|
8
9
|
"url": "https://github.com/erkez/ekz.git",
|
|
@@ -29,16 +30,17 @@
|
|
|
29
30
|
],
|
|
30
31
|
"devDependencies": {
|
|
31
32
|
"npm-run-all": "^4.1.5",
|
|
32
|
-
"typescript": "^
|
|
33
|
+
"typescript": "^6.0.3"
|
|
33
34
|
},
|
|
34
35
|
"scripts": {
|
|
35
36
|
"clean": "rm -rf lib/* || true",
|
|
36
|
-
"lint": "npx eslint
|
|
37
|
+
"lint": "npx eslint ./src/main/web",
|
|
37
38
|
"lint:fix": "yarn lint --fix",
|
|
38
39
|
"compile": "run-p \"compile:*\"",
|
|
39
40
|
"compile:esm": "tsc -p ./src/main/web --outDir ./lib/esm",
|
|
40
41
|
"compile:cjs": "tsc -p ./src/main/web -m commonjs --verbatimModuleSyntax false --outDir ./lib/cjs",
|
|
41
42
|
"compile:esnext": "tsc -p ./src/main/web -t esnext --outDir ./lib/esnext",
|
|
42
|
-
"
|
|
43
|
+
"dev": "yarn compile:esm --watch",
|
|
44
|
+
"prepack": "yarn clean && yarn lint && yarn compile"
|
|
43
45
|
}
|
|
44
46
|
}
|