From 50eb7cfbb622559ff4073a3afc3e6ad2799cc7d3 Mon Sep 17 00:00:00 2001 From: Luca Del Puppo Date: Tue, 8 Aug 2023 17:58:45 +0200 Subject: [PATCH] feat(#1595): improve stream entry types --- pino.d.ts | 22 ++++++++-------- test/types/pino-multistream.test-d.ts | 22 +++++++++------- test/types/pino.ts | 38 ++++++++++++++++++++++++++- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/pino.d.ts b/pino.d.ts index b681ee8fe..f6ed8c8ad 100644 --- a/pino.d.ts +++ b/pino.d.ts @@ -284,18 +284,18 @@ declare namespace pino { type DestinationStreamWithMetadata = DestinationStream & ({ [symbols.needsMetadataGsym]?: false } | DestinationStreamHasMetadata); - interface StreamEntry { + interface StreamEntry { stream: DestinationStream - level?: Level + level?: TLevel } - interface MultiStreamRes { + interface MultiStreamRes { write: (data: any) => void, - add: (dest: StreamEntry | DestinationStream) => MultiStreamRes, + add: (dest: StreamEntry | DestinationStream) => MultiStreamRes, flushSync: () => void, minLevel: number, - streams: StreamEntry[], - clone(level: Level): MultiStreamRes, + streams: StreamEntry[], + clone(level: TLevel): MultiStreamRes, } interface LevelMapping { @@ -775,10 +775,10 @@ declare namespace pino { options: TransportSingleOptions | TransportMultiOptions | TransportPipelineOptions ): ThreadStream - export function multistream( - streamsArray: (DestinationStream | StreamEntry)[] | DestinationStream | StreamEntry, + export function multistream( + streamsArray: (DestinationStream | StreamEntry)[] | DestinationStream | StreamEntry, opts?: MultiStreamOptions - ): MultiStreamRes + ): MultiStreamRes } //// Callable default export @@ -833,8 +833,8 @@ export interface LogEvent extends pino.LogEvent {} export interface LogFn extends pino.LogFn {} export interface LoggerOptions extends pino.LoggerOptions {} export interface MultiStreamOptions extends pino.MultiStreamOptions {} -export interface MultiStreamRes extends pino.MultiStreamRes {} -export interface StreamEntry extends pino.StreamEntry {} +export interface MultiStreamRes extends pino.MultiStreamRes {} +export interface StreamEntry extends pino.StreamEntry {} export interface TransportBaseOptions extends pino.TransportBaseOptions {} export interface TransportMultiOptions extends pino.TransportMultiOptions {} export interface TransportPipelineOptions extends pino.TransportPipelineOptions {} diff --git a/test/types/pino-multistream.test-d.ts b/test/types/pino-multistream.test-d.ts index 6006f9c53..29f09d7f5 100644 --- a/test/types/pino-multistream.test-d.ts +++ b/test/types/pino-multistream.test-d.ts @@ -2,25 +2,27 @@ import { expectType } from 'tsd' import { createWriteStream } from 'fs' -import pino from '../../pino' -import { multistream } from "../../pino"; +import pino, { multistream } from '../../pino' const streams = [ { stream: process.stdout }, { stream: createWriteStream('') }, { level: 'error' as const, stream: process.stderr }, - { level: 'fatal' as const, stream: createWriteStream('') } + { level: 'fatal' as const, stream: process.stderr }, ] expectType(pino.multistream(process.stdout)) expectType(pino.multistream([createWriteStream('')])) -expectType(pino.multistream({ level: 'error' as const, stream: process.stderr })) -expectType(pino.multistream([{ level: 'fatal' as const, stream: createWriteStream('') }])) +expectType>(pino.multistream({ level: 'error' as const, stream: process.stderr })) +expectType>(pino.multistream([{ level: 'fatal' as const, stream: createWriteStream('') }])) + +expectType>(pino.multistream(streams)) +expectType>(pino.multistream(streams, {})) +expectType>(pino.multistream(streams, { levels: { 'info': 30 } })) +expectType>(pino.multistream(streams, { dedupe: true })) +expectType>(pino.multistream(streams[0]).add(streams[1])) +expectType>(multistream(streams)) +expectType>(multistream(streams).clone('error')) -expectType(pino.multistream(streams)) -expectType(pino.multistream(streams, {})) -expectType(pino.multistream(streams, { levels: { 'info': 30 } })) -expectType(pino.multistream(streams, { dedupe: true })) -expectType(pino.multistream(streams[0]).add(streams[1])) expectType(multistream(process.stdout)); diff --git a/test/types/pino.ts b/test/types/pino.ts index 5ac2d936e..c1cf8c0f6 100644 --- a/test/types/pino.ts +++ b/test/types/pino.ts @@ -1,6 +1,7 @@ -import { pino } from '../../pino' +import { StreamEntry, pino } from '../../pino' import { join } from 'path' import { tmpdir } from 'os' +import pinoPretty from 'pino-pretty' const destination = join( tmpdir(), @@ -40,3 +41,38 @@ const transports = pino.transport({targets: [ ]}) const loggerMulti = pino(transports) loggerMulti.info('test2') + +// custom levels + +const customLevels = { + debug : 1, + info : 2, + network : 3, + error : 4, +}; + +type CustomLevels = keyof typeof customLevels; + +const pinoOpts = { + level: 'debug', + useOnlyCustomLevels: true, + customLevels: customLevels, +}; + +const multistreamOpts = { + dedupe: true, + levels: customLevels +}; + +const streams: StreamEntry[] = [ + { level : 'debug', stream : pinoPretty() }, + { level : 'info', stream : pinoPretty() }, + { level : 'network', stream : pinoPretty() }, + { level : 'error', stream : pinoPretty() }, +]; + +const loggerCustomLevel = pino(pinoOpts, pino.multistream(streams, multistreamOpts)); +loggerCustomLevel.debug('test3') +loggerCustomLevel.info('test4') +loggerCustomLevel.error('test5') +loggerCustomLevel.network('test6')