@socketsecurity/registry
Advanced tools
Comparing version
@@ -0,1 +1,9 @@ | ||
/// <reference types="node" /> | ||
import { Console, ConsoleConstructorOptions } from 'node:console' | ||
declare type LoggerMethods = { | ||
[K in keyof Console]: Console[K] extends (...args: infer A) => any | ||
? (...args: A) => Logger | ||
: Console[K] | ||
} | ||
declare namespace LoggerModule { | ||
@@ -8,10 +16,36 @@ export type LogSymbols = { | ||
} | ||
export class Logger { | ||
export interface Task { | ||
run<T>(f: () => T): T | ||
} | ||
export class Logger extends Console { | ||
static get LOG_SYMBOLS(): LogSymbols | ||
constructor() | ||
error(...args: any[]): Logger | ||
info(...args: any[]): Logger | ||
log(...args: any[]): Logger | ||
new( | ||
stdout: NodeJS.WritableStream, | ||
stderr?: NodeJS.WritableStream, | ||
ignoreErrors?: boolean | ||
): Logger | ||
new(options: ConsoleConstructorOptions): Logger | ||
assert: LoggerMethods['assert'] | ||
clear: LoggerMethods['clear'] | ||
count: LoggerMethods['count'] | ||
countReset: LoggerMethods['countReset'] | ||
createTask(name: string): Task | ||
debug: LoggerMethods['debug'] | ||
dir: LoggerMethods['dir'] | ||
dirxml: LoggerMethods['dirxml'] | ||
error: LoggerMethods['error'] | ||
group: LoggerMethods['group'] | ||
groupCollapsed: LoggerMethods['groupCollapsed'] | ||
groupEnd: LoggerMethods['groupEnd'] | ||
info: LoggerMethods['info'] | ||
log: LoggerMethods['log'] | ||
profile: LoggerMethods['profile'] | ||
profileEnd: LoggerMethods['profileEnd'] | ||
success(...args: any[]): Logger | ||
warn(...args: any[]): Logger | ||
table: LoggerMethods['table'] | ||
time: LoggerMethods['time'] | ||
timeEnd: LoggerMethods['timeEnd'] | ||
timeLog: LoggerMethods['timeLog'] | ||
trace: LoggerMethods['trace'] | ||
warn: LoggerMethods['warn'] | ||
} | ||
@@ -18,0 +52,0 @@ export const logger: Logger |
'use strict' | ||
const { construct: ReflectConstruct } = Reflect | ||
let _Console | ||
function constructConsole(args) { | ||
if (_Console === undefined) { | ||
// Use non-'node:' prefixed require to avoid Webpack errors. | ||
// eslint-disable-next-line n/prefer-node-protocol | ||
_Console = require('console').Console | ||
} | ||
return ReflectConstruct(_Console, args) | ||
} | ||
let _yoctocolors | ||
@@ -11,3 +23,15 @@ function getYoctocolors() { | ||
const symbolTypeToMethodName = { | ||
error: 'error', | ||
info: 'info', | ||
success: 'log', | ||
warning: 'warn' | ||
} | ||
const privateConsole = new WeakMap() | ||
class Logger { | ||
constructor(...args) { | ||
privateConsole.set(this, args.length ? constructConsole(args) : console) | ||
} | ||
#symbolApply(symbolType, args) { | ||
@@ -22,5 +46,7 @@ let extras | ||
} | ||
console.log(`${Logger.LOG_SYMBOLS[symbolType]} ${text}`) | ||
const methodName = symbolTypeToMethodName[symbolType] | ||
const console = privateConsole.get(this) | ||
console[methodName](`${Logger.LOG_SYMBOLS[symbolType]} ${text}`) | ||
if (extras.length) { | ||
console.log(...extras) | ||
console[methodName](...extras) | ||
} | ||
@@ -53,7 +79,2 @@ return this | ||
log(...args) { | ||
console.log(...args) | ||
return this | ||
} | ||
success(...args) { | ||
@@ -68,2 +89,30 @@ return this.#symbolApply('success', args) | ||
const mixinKeys = [] | ||
for (const { 0: key, 1: value } of Object.entries(console)) { | ||
if (!Logger.prototype[key] && typeof value === 'function') { | ||
mixinKeys.push(key) | ||
} | ||
} | ||
if (mixinKeys.length) { | ||
Object.defineProperties( | ||
Logger.prototype, | ||
Object.fromEntries( | ||
mixinKeys.map(key => [ | ||
key, | ||
{ | ||
__proto__: null, | ||
configurable: true, | ||
value: function (...args) { | ||
const console = privateConsole.get(this) | ||
const result = console[key](...args) | ||
return result === undefined ? this : result | ||
}, | ||
writable: true | ||
} | ||
]) | ||
) | ||
) | ||
} | ||
const logger = new Logger() | ||
@@ -70,0 +119,0 @@ |
{ | ||
"name": "@socketsecurity/registry", | ||
"version": "1.0.100", | ||
"version": "1.0.101", | ||
"license": "MIT", | ||
@@ -5,0 +5,0 @@ "description": "Socket.dev registry helpers methods and metadata", |
160390
1.54%5346
1.46%