const debug = require('debug')('treelab:common'); interface IExhaustiveSwitchArgs { switchValue: never; returnValue?: any; } export const exhaustiveSwitch = (({ switchValue, returnValue, }: IExhaustiveSwitchArgs) => { debug( `Received invalid switch value: \`${switchValue}\`.${ typeof returnValue === 'undefined' ? '' : ` Substituting \`${returnValue}\` as a fallback.` }` ); return returnValue; }) as (args: IExhaustiveSwitchArgs) => never; export const exhaustiveSwitchThrow = (({ switchValue, }: Pick) => { throw new Error(`Received invalid switch value: \`${switchValue}\`.`); }) as (args: Pick) => never;