@ekz/option 2.0.1 → 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/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 +3 -2
|
@@ -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,6 +1,6 @@
|
|
|
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
6
|
"homepage": "https://docs.ekz.io/option/",
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"compile:esm": "tsc -p ./src/main/web --outDir ./lib/esm",
|
|
41
41
|
"compile:cjs": "tsc -p ./src/main/web -m commonjs --verbatimModuleSyntax false --outDir ./lib/cjs",
|
|
42
42
|
"compile:esnext": "tsc -p ./src/main/web -t esnext --outDir ./lib/esnext",
|
|
43
|
-
"
|
|
43
|
+
"dev": "yarn compile:esm --watch",
|
|
44
|
+
"prepack": "yarn clean && yarn lint && yarn compile"
|
|
44
45
|
}
|
|
45
46
|
}
|