switch-functional
Version:
Functional switch statement
119 lines (34 loc) • 677 B
JavaScript
import{matchesConditions}from"./condition.js";
import{addDefault}from"./default.js";
import{applyReturnValues}from"./return.js";
export const chain=
(
resolved,
finalValue)=>
(
input,
options=
{})=>(
{
case:addCase(
{options,resolved,input,finalValue}),
default:addDefault(
{options,resolved,input,finalValue})
});
const addCase=
(
{
options,
resolved,
input,
finalValue
})=>
(
conditions,
...caseReturnValues)=>
resolved||!matchesConditions(input,conditions,options)?
chain(resolved,finalValue)(input,options):
chain(true,applyReturnValues(input,caseReturnValues,options))(
input,
options
);