UNPKG

better-optional

Version:

Functional "Optionals" solution for JavaScript and TypeScript with async support

2 lines (1 loc) 1.55 kB
(function(o,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(o=typeof globalThis<"u"?globalThis:o||self,s(o.Optional={}))})(this,function(o){"use strict";const s=n=>n!=null,i=r(void 0);function r(n){const e=s(n),y=t=>{if(e)return n;throw t??new Error("Value is not present")},f={get:()=>y(),valueOf:()=>n,or:t=>e?f:t,isPresent:()=>e,isEmpty:()=>!e,orElse:t=>e?n:t,orElseGet:t=>e?n:t(),orElseGetAsync:async t=>e?n:await t(),orElseThrow:t=>y(t),map:t=>e?r(t(n)):i,mapAsync:async t=>e?r(await t(n)):i,flatMap:t=>e?t(n):i,flatMapAsync:async t=>e?await t(n):i,filter:t=>e&&t(n)?f:i,filterAsync:async t=>e&&await t(n)?f:i,ifPresent:t=>e?t(n):void 0,ifPresentAsync:async t=>e?await t(n):void 0,ifPresentOrElse:(t,l)=>e?t(n):l(),ifPresentOrElseAsync:async(t,l)=>e?await t(n):await l(),toString:()=>e?d(n.toString()):p,toLocaleString:()=>e?d(n.toLocaleString()):p};return f}const c="Optional",d=n=>`${c}[${n}]`,p=c+".empty",u={of:n=>{if(n!=null)return r(n);throw new Error(a("nullish"))},ofNullish:n=>r(n),ofNullable:n=>{if(n!==void 0)return r(n);throw new Error(a("undefined"))},ofUndefinable:n=>{if(n!==null)return r(n);throw new Error(a("null"))},empty:()=>i},a=n=>`Cannot create an optional value from a ${n} value. ${n==="nullish"?"If you want to do this on purpose use Optional.ofNullish(). ":""}If you want to create an empty optional, use Optional.empty() instead.`;o.Optional=u,o.default=u,Object.defineProperties(o,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});