From b960b851df576de828577a78320b1994fd6515da Mon Sep 17 00:00:00 2001 From: Luke Grunau Date: Mon, 13 Dec 2021 14:49:03 +0100 Subject: [PATCH] Add type declarations (#148) * Add type declarations * Add types field in package.json * Remove DefinitelyTyped url * Add new options * Adds test for types * No need to redeclare module * Revert "No need to redeclare module" This reverts commit 4462d99030541042794731ce8571450e64ed1168. * Include types test in CI Co-authored-by: Luke Grunau Co-authored-by: Luke Grunau --- index.d.ts | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ index.test-d.ts | 45 +++++++++++++++++++++++++++++++++++ package.json | 7 ++++-- 3 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 index.d.ts create mode 100644 index.test-d.ts diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..c3fe877 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,62 @@ +// Type definitions for hapi-pino 9.0 +// Definitions by: Rodrigo Saboya +// Todd Bealmear +// Matt Jeanes +// Kyle Gray +// TypeScript Version: 2.8 + +/// + +import type { pino } from 'pino'; + +import { Plugin, Request } from '@hapi/hapi'; + +declare module '@hapi/hapi' { + interface Server { + logger: pino.Logger; + } + + interface Request { + logger: pino.Logger; + } +} + +declare namespace HapiPino { + interface Serializers { + [key: string]: pino.SerializerFn; + } + + interface Options { + timestamp?: boolean | (() => string) | undefined; + logQueryParams?: boolean | undefined; + logPayload?: boolean | undefined; + logRouteTags?: boolean | undefined; + logRequestStart?: boolean | ((req: Request) => boolean) | undefined; + logRequestComplete?: boolean | ((req: Request) => boolean) | undefined; + stream?: NodeJS.WriteStream | undefined; + prettyPrint?: boolean | pino.PrettyOptions | undefined; + tags?: { [key in pino.Level]?: string } | undefined; + allTags?: pino.Level | undefined; + serializers?: Serializers | undefined; + getChildBindings?: + | ((req: Request) => { + level?: pino.Level | string | undefined; + serializers?: Serializers | undefined; + [key: string]: any; + }) + | undefined; + instance?: pino.Logger | undefined; + logEvents?: string[] | false | null | undefined; + mergeHapiLogData?: boolean | undefined; + ignorePaths?: string[] | undefined; + level?: pino.Level | undefined; + redact?: string[] | pino.redactOptions | undefined; + ignoreTags?: string[] | undefined; + ignoreFunc?: ((options: Options, request: Request) => boolean) | undefined; + ignoredEventTags?: object[] | undefined; + } +} + +declare var HapiPino: Plugin; + +export = HapiPino; diff --git a/index.test-d.ts b/index.test-d.ts new file mode 100644 index 0000000..2612435 --- /dev/null +++ b/index.test-d.ts @@ -0,0 +1,45 @@ +import { Request, Server } from '@hapi/hapi'; +import pino from 'pino'; +import * as HapiPino from '.'; +import { expectType } from 'tsd'; + +const pinoLogger = pino(); + +const server = new Server(); + +const options: HapiPino.Options = { + timestamp: () => `,"time":"${new Date(Date.now()).toISOString()}"`, + logQueryParams: false, + logPayload: false, + logRouteTags: false, + logRequestStart: false, + logRequestComplete: true, + stream: process.stdout, + prettyPrint: process.env.NODE_ENV !== 'PRODUCTION', + tags: { + trace: 'trace', + debug: 'debug', + info: 'info', + warn: 'warn', + error: 'error', + fatal: 'fatal', + }, + allTags: 'info', + serializers: { + req: (req: any) => console.log(req), + }, + getChildBindings: (req: Request) => ({ + 'x-request-id': req.headers['x-request-id'], + }), + instance: pinoLogger, + logEvents: false, + mergeHapiLogData: false, + ignorePaths: ['/testRoute'], + level: 'debug', + redact: ['test.property'], + ignoreTags: ['healthcheck'], + ignoreFunc: (options, request) => request.path.startsWith('/static'), + ignoredEventTags: [{ log: ['DEBUG', 'TEST'], request: ['DEBUG', 'TEST'] }], +}; + +expectType>(server.register({ plugin: HapiPino, options })); diff --git a/package.json b/package.json index 7d7c464..0e9646e 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,12 @@ "version": "9.0.0", "description": "Hapi plugin for the Pino logger ", "main": "index.js", + "types": "index.d.ts", "scripts": { "coverage": "lab test.js -c", "coverage:lcov": "lab test.js -r lcov -o coverage/lcov.info", "coveralls": "lab test.js -r lcov | coveralls", - "test": "standard && lab --timeout 100000 test.js" + "test": "standard && lab --timeout 100000 test.js && tsd" }, "keywords": [ "hapi", @@ -28,10 +29,12 @@ "pino-pretty": "^7.2.0", "pre-commit": "^1.2.2", "split2": "^3.1.1", - "standard": "^14.3.3" + "standard": "^14.3.3", + "tsd": "^0.18.0" }, "dependencies": { "@hapi/hoek": "^9.0.0", + "@types/hapi__hapi": "^20.0.9", "abstract-logging": "^2.0.0", "get-caller-file": "^2.0.5", "pino": "^7.0.0"