@tempots/std
Version:
Std library for TypeScript. Natural complement to the Tempo libraries.
2 lines (1 loc) • 4.21 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s={notAsked:{type:"NotAsked"},loading(e=void 0){return{type:"Loading",previousValue:e}},success(e){return{type:"AsyncSuccess",value:e}},failure(e){return{type:"AsyncFailure",error:e}},isSuccess(e){return e.type==="AsyncSuccess"},isFailure(e){return e.type==="AsyncFailure"},isNotAsked(e){return e.type==="NotAsked"},isLoading(e){return e.type==="Loading"},getOrElse(e,u){return s.isSuccess(e)?e.value:s.isLoading(e)&&e.previousValue!==void 0?e.previousValue:u},getOrElseLazy(e,u){return s.isSuccess(e)?e.value:s.isLoading(e)&&e.previousValue!==void 0?e.previousValue:u()},getOrNull(e){return s.isSuccess(e)?e.value:s.isLoading(e)&&e.previousValue!==void 0?e.previousValue:null},getOrUndefined(e){if(s.isSuccess(e))return e.value;if(s.isLoading(e)&&e.previousValue!==void 0)return e.previousValue},getUnsafe:e=>{if(s.isSuccess(e))return e.value;if(s.isLoading(e)&&e.previousValue!==void 0)return e.previousValue;throw s.isFailure(e)?e.error:new Error("Cannot get value from a not-asked or loading result without previous value")},match:(e,{success:u,failure:r,loading:i,notAsked:a=i})=>s.isSuccess(e)?u(e.value):s.isFailure(e)?r(e.error):s.isNotAsked(e)?a():i(e.previousValue),effect:(e,u)=>{switch(e.type){case"AsyncSuccess":u.success?u.success(e.value):u.else?.();break;case"AsyncFailure":u.failure?u.failure(e.error):u.else?.();break;case"Loading":u.loading?u.loading(e.previousValue):u.else?.();break;case"NotAsked":u.notAsked?u.notAsked():u.else?.();break}return e},whenSuccess:(e,u)=>(s.isSuccess(e)&&u(e.value),e),whenFailure:(e,u)=>(s.isFailure(e)&&u(e.error),e),equals:(e,u,r={valueEquals:(i,a)=>i===a,errorEquals:(i,a)=>i===a})=>e.type==="AsyncSuccess"&&u.type==="AsyncSuccess"?r.valueEquals(e.value,u.value):e.type==="AsyncFailure"&&u.type==="AsyncFailure"?r.errorEquals(e.error,u.error):e.type==="Loading"&&u.type==="Loading"?r.valueEquals(e.previousValue,u.previousValue):e.type==="NotAsked"&&u.type==="NotAsked",all:e=>{const u=[];for(const r of e)if(s.isSuccess(r))u.push(r.value);else return r;return s.success(u)},ofPromise:async e=>{try{const u=await e;return s.success(u)}catch(u){return s.failure(u instanceof Error?u:new Error(String(u)))}},map:(e,u)=>{switch(e.type){case"AsyncSuccess":return s.success(u(e.value));case"NotAsked":return s.notAsked;case"AsyncFailure":return s.failure(e.error);case"Loading":return s.loading(e.previousValue!=null?u(e.previousValue):void 0)}},flatMap:(e,u)=>{switch(e.type){case"AsyncSuccess":return u(e.value);case"NotAsked":return s.notAsked;case"AsyncFailure":return s.failure(e.error);case"Loading":return s.loading()}},mapError:(e,u)=>{switch(e.type){case"AsyncSuccess":return s.success(e.value);case"NotAsked":return s.notAsked;case"AsyncFailure":return s.failure(u(e.error));case"Loading":return s.loading(e.previousValue)}},flatMapError:(e,u)=>{switch(e.type){case"AsyncSuccess":return s.success(e.value);case"NotAsked":return s.notAsked;case"AsyncFailure":return u(e.error);case"Loading":return s.loading(e.previousValue)}},toResult:e=>{switch(e.type){case"AsyncSuccess":return{type:"Success",value:e.value};case"AsyncFailure":return{type:"Failure",error:e.error};case"NotAsked":case"Loading":return}},isSettled(e){return e.type==="AsyncSuccess"||e.type==="AsyncFailure"},recover:(e,u)=>{switch(e.type){case"AsyncSuccess":return s.success(e.value);case"NotAsked":return s.notAsked;case"AsyncFailure":return s.success(u(e.error));case"Loading":return s.loading(e.previousValue)}},ap:(e,u)=>s.isSuccess(e)&&s.isSuccess(u)?s.success(e.value(u.value)):s.isFailure(e)?s.failure(e.error):s.isFailure(u)?s.failure(u.error):s.isLoading(e)||s.isLoading(u)?s.loading():s.notAsked,map2:(e,u,r)=>s.isSuccess(e)&&s.isSuccess(u)?s.success(r(e.value,u.value)):s.isFailure(e)?s.failure(e.error):s.isFailure(u)?s.failure(u.error):s.isLoading(e)||s.isLoading(u)?s.loading():s.notAsked,map3:(e,u,r,i)=>s.isSuccess(e)&&s.isSuccess(u)&&s.isSuccess(r)?s.success(i(e.value,u.value,r.value)):s.isFailure(e)?s.failure(e.error):s.isFailure(u)?s.failure(u.error):s.isFailure(r)?s.failure(r.error):s.isLoading(e)||s.isLoading(u)||s.isLoading(r)?s.loading():s.notAsked};exports.AsyncResult=s;