import merge from 'deepmerge' let userConfig: any = {} export const setConfig = (config: any) => { userConfig = config } export const getConfig = (key?: string | undefined) => (key ? userConfig[key] : userConfig) export const mergeConfig = ( key: string, props: T = {} as T, mergeProps: M = {} as M, defaultProps: D = {} as D, ) => { const globalConfig = getConfig(key) || {} return merge.all([defaultProps, globalConfig, props, mergeProps], { arrayMerge: (dest, source) => [...new Set([...dest, ...source])], // Dedupe arrays }) as T & M & D } export {merge}