Skip to content

Commit 3fb5bea

Browse files
committed
Remove pino to reduce dependencies number
1 parent ee53e7b commit 3fb5bea

File tree

15 files changed

+268
-515
lines changed

15 files changed

+268
-515
lines changed

base-server/index.d.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import type {
1919
IncomingMessage,
2020
ServerResponse
2121
} from 'node:http'
22-
import type { LogFn } from 'pino'
2322

2423
import type {
2524
ChannelContext,
@@ -28,6 +27,10 @@ import type {
2827
} from '../context/index.js'
2928
import type { ServerClient } from '../server-client/index.js'
3029

30+
interface LogFn {
31+
(...objs: unknown[]): void
32+
}
33+
3134
interface TypeOptions {
3235
/**
3336
* Name of the queue that will be used to process actions
@@ -614,6 +617,7 @@ export type Resend =
614617
| string[]
615618

616619
export interface Logger {
620+
debug(details: object, message: string): void
617621
error(details: object, message: string): void
618622
fatal(details: object, message: string): void
619623
info(details: object, message: string): void

create-reporter/__snapshots__/index.test.ts.snap

Lines changed: 61 additions & 69 deletions
Large diffs are not rendered by default.

create-reporter/index.js

Lines changed: 59 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
11
import os from 'node:os'
2-
import { join, sep } from 'node:path'
2+
import { sep } from 'node:path'
33
import pico from 'picocolors'
4-
import pino from 'pino'
54

6-
const root = join(import.meta.dirname, '..')
7-
export const PATH_TO_PRETTIFYING_PINO_TRANSPORT = join(
8-
root,
9-
'human-formatter/index.js'
10-
)
5+
import humanFormatter from '../human-formatter/index.js'
116

127
const ERROR_CODES = {
138
EACCES: (e, environment) => {
@@ -179,40 +174,6 @@ const REPORTERS = {
179174
zombie: () => ({ level: 'warn', msg: 'Zombie client was disconnected' })
180175
}
181176

182-
function createLogger(options) {
183-
if (options.logger === 'human' || options.logger.type === 'human') {
184-
let env = options.env || process.env.NODE_ENV || 'development'
185-
let color =
186-
env !== 'development' ? false : pico.createColors().isColorSupported
187-
let basepath = options.root || process.cwd()
188-
if (basepath.slice(-1) !== sep) basepath += sep
189-
190-
let logger = pino(
191-
pino.transport({
192-
options: {
193-
basepath,
194-
color,
195-
destination: options.logger.destination
196-
},
197-
target: PATH_TO_PRETTIFYING_PINO_TRANSPORT
198-
})
199-
)
200-
201-
// NOTE: needed only for tests
202-
logger._basepath = basepath
203-
logger._color = color
204-
205-
return logger
206-
}
207-
return pino(
208-
{
209-
name: 'logux-server',
210-
timestamp: pino.stdTimeFunctions.isoTime
211-
},
212-
options.logger.stream || pino.destination()
213-
)
214-
}
215-
216177
function cleanFromKeys(obj, regexp, seen) {
217178
let result = {}
218179
for (let key in obj) {
@@ -245,12 +206,65 @@ export function createReporter(options) {
245206
)
246207
}
247208

248-
let customLoggerProvided =
249-
typeof options.logger !== 'string' && 'info' in options.logger
250-
if (customLoggerProvided) {
209+
if (typeof options.logger !== 'string' && 'info' in options.logger) {
251210
reporter.logger = options.logger
252211
} else {
253-
reporter.logger = createLogger(options)
212+
let format
213+
if (options.logger === 'human' || options.logger.type === 'human') {
214+
let basepath = options.root || process.cwd()
215+
if (basepath.slice(-1) !== sep) basepath += sep
216+
let env = options.env || process.env.NODE_ENV || 'development'
217+
let color = false
218+
/* c8 ignore next 3 */
219+
if (env === 'development') {
220+
color = pico.createColors().isColorSupported
221+
}
222+
if (typeof options.logger === 'object' && options.logger.color) {
223+
color = true
224+
}
225+
format = humanFormatter({ basepath, color })
226+
} else {
227+
format = record => JSON.stringify(record) + '\n'
228+
}
229+
let stream = options.logger?.stream ?? process.stderr
230+
231+
function createRecord(level, details, msg) {
232+
/* c8 ignore next 4 */
233+
if (typeof details === 'string') {
234+
msg = details
235+
details = {}
236+
}
237+
return {
238+
level,
239+
time: new Date().toISOString(),
240+
pid: process.pid,
241+
...details,
242+
msg
243+
}
244+
}
245+
246+
reporter.logger = {
247+
/* c8 ignore next 3 */
248+
debug(details, msg) {
249+
stream.write(format(createRecord(20, details, msg)))
250+
},
251+
info(details, msg) {
252+
stream.write(format(createRecord(30, details, msg)))
253+
},
254+
warn(details, msg) {
255+
stream.write(format(createRecord(40, details, msg)))
256+
},
257+
error(details, msg) {
258+
stream.write(format(createRecord(50, details, msg)))
259+
},
260+
fatal(details, msg) {
261+
if (stream.flushSync) {
262+
stream.flushSync(format(createRecord(60, details, msg)))
263+
} else {
264+
stream.write(format(createRecord(60, details, msg)))
265+
}
266+
}
267+
}
254268
}
255269
return reporter
256270
}

0 commit comments

Comments
 (0)