import _isFunction from 'lodash/isFunction' ; import _isEqual from 'lodash/isEqual' ; /**
 * 构建一对get set 方法
 * 用于在不同平台拥有统一方式调用体验
 */ export function buildRegFn < F extends ( ... args : any ) => any > ( name , defaultFunc ? ) { let func ; const get = ( ... args ) : ReturnType < F > => { if ( ! func ) { if ( _isFunction ( defaultFunc ) ) { return defaultFunc ( ... args ) ; } throw new Error ( `${ name } not regist` ) ; } return func ( ... args ) ; } ; const set = ( fn ) : void => { func = fn ; } ; return [ get , set ] as const ; } /**
 * 缓存版本的buildRegFn
 */ export function buildCachedRegFn < F extends ( ... args : any ) => any > ( name , defaultFunc ? ) { const [ get , set ] = buildRegFn ( name , defaultFunc ) ; let _result = null ; let _lastArgs ; const cachedGet = ( ... args ) => { if ( _result !== null && _isEqual ( args , _lastArgs ) ) { return _result ; } else { const result = get ( ... args ) ; _result = result ?? null ; _lastArgs = args ; return result ; } } ; const refreshCache = ( ) => { _result = null ; } ; const cachedSet = ( fn ) => { set ( fn ) ; refreshCache ( ) ; } ; return [ cachedGet , cachedSet , refreshCache ] ; }