UNPKG

@sanjagh/option

Version:

Out of the box solution for writing null-safe javascript

226 lines (209 loc) 4.75 kB
"use strict"; 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;