@renegade-fi/core
Version:
VanillaJS library for Renegade
61 lines • 1.81 kB
JavaScript
/**
* A logger that performs no operations. Used when no consumer logger is provided.
*/
export class NoopLogger {
debug() { }
info() { }
warn() { }
error() { }
}
/**
* A thin console-backed logger primarily for development/testing.
* Not used by default; consumers should inject their own logger.
*/
export class ConsoleLogger {
constructor(options) {
Object.defineProperty(this, "baseMeta", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this.baseMeta = options?.baseMeta ?? {};
}
/** Merge static base metadata into per-call metadata. */
mix(meta) {
return this.baseMeta && Object.keys(this.baseMeta).length > 0
? { ...this.baseMeta, ...(meta ?? {}) }
: meta;
}
debug(message, meta) {
console.debug(message, this.mix(meta));
}
info(message, meta) {
console.info(message, this.mix(meta));
}
warn(message, meta) {
console.warn(message, this.mix(meta));
}
error(message, meta) {
console.error(message, this.mix(meta));
}
child(context) {
const merged = { ...this.baseMeta, ...context };
return new ConsoleLogger({ baseMeta: merged });
}
}
export function createLogger(options) {
// Prefer consumer-provided logger if available
if (options?.logger) {
const base = options.namespace && options.logger.child
? options.logger.child({ ns: options.namespace })
: options.logger;
return base;
}
// Default to silent if no logger provided
return new NoopLogger();
}
export function childLogger(base, context) {
return base.child ? base.child(context) : base;
}
//# sourceMappingURL=logger.js.map