return-style
Version:
Non-intrusively convert the result of any function or promise to the user's desired style.
112 lines • 2.54 kB
JavaScript
import { Result } from './result.js';
var OptionType;
(function (OptionType) {
OptionType[OptionType["Some"] = 0] = "Some";
OptionType[OptionType["None"] = 1] = "None";
})(OptionType || (OptionType = {}));
export class Option {
type;
value;
constructor(type, value) {
this.type = type;
this.value = value;
}
static Some(value) {
return new Option(OptionType.Some, value);
}
static None() {
return new Option(OptionType.None);
}
isSome() {
return this.type === OptionType.Some;
}
isNone() {
return this.type === OptionType.None;
}
map(mapper) {
if (this.isSome()) {
return Option.Some(mapper(this.value));
}
else {
return Option.None();
}
}
filter(predicate) {
if (this.isSome()) {
if (predicate(this.value)) {
return Option.Some(this.value);
}
else {
return Option.None();
}
}
else {
return Option.None();
}
}
mapOr(defaultValue, mapper) {
if (this.isSome()) {
return mapper(this.value);
}
else {
return defaultValue;
}
}
mapOrElse(createDefaultValue, mapper) {
if (this.isSome()) {
return mapper(this.value);
}
else {
return createDefaultValue();
}
}
unwrap() {
if (this.isSome()) {
return this.value;
}
else {
throw new Error('unwrap called on a None');
}
}
unwrapOr(defaultValue) {
if (this.isSome()) {
return this.value;
}
else {
return defaultValue;
}
}
unwrapOrElse(createDefaultValue) {
if (this.isSome()) {
return this.value;
}
else {
return createDefaultValue();
}
}
expect(message) {
if (this.isSome()) {
return this.value;
}
else {
throw new Error(message);
}
}
okOr(err) {
if (this.isSome()) {
return Result.Ok(this.value);
}
else {
return Result.Err(err);
}
}
okOrElse(createErr) {
if (this.isSome()) {
return Result.Ok(this.value);
}
else {
return Result.Err(createErr());
}
}
}
//# sourceMappingURL=option.js.map