@sanjagh/option
Version:
Out of the box solution for writing null-safe javascript
226 lines (209 loc) • 4.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.none = none;
exports.some = some;
exports.option = option;
exports["default"] = exports.Some = exports.None = void 0;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
var None =
/*#__PURE__*/
function () {
function None() {
_classCallCheck(this, None);
}
_createClass(None, [{
key: "isDefined",
value: function isDefined() {
return false;
}
}, {
key: "isEmpty",
value: function isEmpty() {
return true;
}
}, {
key: "get",
value: function get() {
throw new Error('NO VALUE');
}
}, {
key: "getOrElse",
value: function getOrElse(defaultValue) {
return defaultValue;
}
}, {
key: "default",
value: function _default(defaultValue) {
return this.getOrElse(defaultValue);
}
}, {
key: "getOrNull",
value: function getOrNull() {
return null;
}
}, {
key: "getOrUndefined",
value: function getOrUndefined() {
return undefined;
}
}, {
key: "map",
value: function map(_m) {
return new None();
}
}, {
key: "filter",
value: function filter(_p) {
return new None();
}
}, {
key: "reject",
value: function reject(_p) {
return new None();
}
}, {
key: "bind",
value: function bind(_m) {
return new None();
}
}, {
key: "flatMap",
value: function flatMap(m) {
return this.bind(m);
}
}, {
key: "fold",
value: function fold(initialValue, f) {
return this.map(f).getOrElse(initialValue);
}
}, {
key: "foldLeft",
value: function foldLeft(initialValue, _f) {
return initialValue;
}
}, {
key: "foldRight",
value: function foldRight(initialValue, _f) {
return initialValue;
}
}, {
key: "forEach",
value: function forEach(_f) {}
}]);
return None;
}();
exports.None = None;
var Some =
/*#__PURE__*/
function () {
function Some(value) {
_classCallCheck(this, Some);
this.value = value;
}
_createClass(Some, [{
key: "isDefined",
value: function isDefined() {
return true;
}
}, {
key: "isEmpty",
value: function isEmpty() {
return false;
}
}, {
key: "get",
value: function get() {
return this.value;
}
}, {
key: "getOrElse",
value: function getOrElse(_defaultValue) {
return this.get();
}
}, {
key: "default",
value: function _default(_defaultValue) {
return this.getOrElse();
}
}, {
key: "getOrNull",
value: function getOrNull() {
return this.get();
}
}, {
key: "getOrUndefined",
value: function getOrUndefined() {
return this.get();
}
}, {
key: "map",
value: function map(m) {
return new Some(m(this.get()));
}
}, {
key: "filter",
value: function filter(p) {
return p(this.get()) ? new Some(this.get()) : new None();
}
}, {
key: "reject",
value: function reject(p) {
return this.filter(function (x) {
return !p(x);
});
}
}, {
key: "bind",
value: function bind(m) {
return m(this.get());
}
}, {
key: "flatMap",
value: function flatMap(m) {
return this.bind(m);
}
}, {
key: "fold",
value: function fold(initialValue, f) {
return this.map(f).getOrElse(initialValue);
}
}, {
key: "foldLeft",
value: function foldLeft(initialValue, f) {
return f(initialValue, this.get());
}
}, {
key: "foldRight",
value: function foldRight(initialValue, f) {
return f(this.get(), initialValue);
}
}, {
key: "forEach",
value: function forEach(f) {
f(this.get());
}
}]);
return Some;
}();
exports.Some = Some;
function none() {
return new None();
}
function some(value) {
return new Some(value);
}
function option(value) {
return value == null ? none() : some(value);
}
var Opt = {
None: None,
Some: Some,
none: none,
some: some,
option: option
};
exports["default"] = Opt;