@roots/bud-client
Version:
Client scripts for @roots/bud
42 lines (38 loc) • 860 B
text/typescript
/**
* Lazy import helper
*
* @remarks
* Callback function may be async or sync
*
* @param onReady - callback function
* @returns void
*/
interface lazy {
<T = any>(
module: Promise<{default: T}>,
handler: (module: T) => Promise<unknown> | unknown,
errorHandler?: (error: unknown) => unknown,
): Promise<unknown>
}
/**
* Default error handler
*
* @throws Error
*/
const defaultErrorHandler = (error: unknown) => {
throw error
}
const lazy: lazy = async function lazy<T = any>(
module: Promise<{default: T}>,
handler: (module: T) => Promise<unknown> | unknown,
errorHandler?: (error: unknown) => unknown,
) {
try {
const {default: request} = await module
return await handler(request)
} catch (error: unknown) {
const handle = errorHandler ?? defaultErrorHandler
handle(error)
}
}
export default lazy