diff --git a/src/logger/index.ts b/src/logger/index.ts new file mode 100644 index 0000000..9bd40e7 --- /dev/null +++ b/src/logger/index.ts @@ -0,0 +1,2 @@ +export { getLogger, setLogger } from './logger' +export type { Logger, LoggerAction } from './types' diff --git a/src/logger/logger.ts b/src/logger/logger.ts new file mode 100644 index 0000000..93499a7 --- /dev/null +++ b/src/logger/logger.ts @@ -0,0 +1,37 @@ +import type { LoggerFunctions, Logger } from './types' + +type LoggerOptions = { + logger: Logger + isEnabled?: boolean +} + +export const defaultLogger: Logger = console +const disabledLogger: Logger = { + log: () => null, + warn: () => null, + error: () => null, +} + +export function createLogger(options: LoggerOptions): LoggerFunctions { + const isLogsEnabled = options.isEnabled ?? false + let logger: Logger = options.logger + + function getLogger() { + return isLogsEnabled ? logger : disabledLogger + } + + function setLogger(targetLogger: Logger) { + logger = targetLogger + } + + return { getLogger, setLogger } +} + +const loggerFunctions = createLogger({ logger: defaultLogger }) + +/** + * Sets a custom logger. + * @public + */ +export const { setLogger } = loggerFunctions +export const { getLogger } = loggerFunctions