diff --git a/types/morgan/index.d.ts b/types/morgan/index.d.ts index 78520f30ba..17046f26ea 100644 --- a/types/morgan/index.d.ts +++ b/types/morgan/index.d.ts @@ -5,25 +5,33 @@ // Piotr Błażejewicz // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -import express = require('express'); +/// + +import http = require('http'); + +type Handler = (req: Request, res: Response, callback: (err?: Error) => void) => void; declare namespace morgan { - type FormatFn = (tokens: TokenIndexer, req: express.Request, res: express.Response) => string | undefined | null; + type FormatFn = ( + tokens: TokenIndexer, + req: Request, + res: Response, + ) => string | undefined | null; - type TokenCallbackFn = ( - req: express.Request, - res: express.Response, + type TokenCallbackFn = ( + req: Request, + res: Response, arg?: string | number | boolean, ) => string | undefined; - interface TokenIndexer { - [tokenName: string]: TokenCallbackFn; + interface TokenIndexer { + [tokenName: string]: TokenCallbackFn; } /** * Public interface of morgan logger. */ - interface Morgan { + interface Morgan { /*** * Create a new morgan logger middleware function using the given format * and options. The format argument may be a string of a predefined name @@ -32,21 +40,21 @@ declare namespace morgan { * @param format * @param options */ - (format: string, options?: Options): express.RequestHandler; + (format: string, options?: Options): Handler; /*** * Standard Apache combined log output. * :remote-addr - :remote-user [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent" * @param format * @param options */ - (format: 'combined', options?: Options): express.RequestHandler; + (format: 'combined', options?: Options): Handler; /*** * Standard Apache common log output. * :remote-addr - :remote-user [:date] ":method :url HTTP/:http-version" :status :res[content-length] * @param format * @param options */ - (format: 'common', options?: Options): express.RequestHandler; + (format: 'common', options?: Options): Handler; /** * Concise output colored by response status for development use. The * :status token will be colored red for server error codes, yellow for @@ -54,7 +62,7 @@ declare namespace morgan { * all other codes. * :method :url :status :response-time ms - :res[content-length] */ - (format: 'dev', options?: Options): express.RequestHandler; + (format: 'dev', options?: Options): Handler; /*** * Shorter than default, also including response time. @@ -62,7 +70,7 @@ declare namespace morgan { * @param format * @param options */ - (format: 'short', options?: Options): express.RequestHandler; + (format: 'short', options?: Options): Handler; /*** * The minimal output. @@ -70,7 +78,7 @@ declare namespace morgan { * @param format * @param options */ - (format: 'tiny', options?: Options): express.RequestHandler; + (format: 'tiny', options?: Options): Handler; /*** * Create a new morgan logger middleware function using the given format @@ -79,50 +87,58 @@ declare namespace morgan { * @param format * @param options */ - (format: FormatFn, options?: Options): express.RequestHandler; + (format: FormatFn, options?: Options): Handler; /** * Define a custom token which can be used in custom morgan logging * formats. */ - token(name: string, callback: TokenCallbackFn): Morgan; + token(name: string, callback: TokenCallbackFn): Morgan; /** * Define a named custom format by specifying a format string in token * notation. */ - format(name: string, fmt: string): Morgan; + format(name: string, fmt: string): Morgan; /** * Define a named custom format by specifying a format function. */ - format(name: string, fmt: FormatFn): Morgan; + format(name: string, fmt: FormatFn): Morgan; /** * Compile a format string in token notation into a format function. */ - compile(format: string): FormatFn; + compile(format: string): FormatFn; } /** * Define a custom token which can be used in custom morgan logging formats. */ - function token(name: string, callback: TokenCallbackFn): Morgan; + function token( + name: string, + callback: TokenCallbackFn, + ): Morgan; /** * Define a named custom format by specifying a format string in token * notation. */ - function format(name: string, fmt: string): Morgan; + // tslint:disable-next-line + function format(name: string, fmt: string): Morgan; /** * Define a named custom format by specifying a format function. */ - function format(name: string, fmt: FormatFn): Morgan; + function format( + name: string, + fmt: FormatFn, + ): Morgan; /** * Compile a format string in token notation into a format function. */ - function compile(format: string): FormatFn; + // tslint:disable-next-line + function compile(format: string): FormatFn; interface StreamOptions { /** @@ -134,7 +150,7 @@ declare namespace morgan { /*** * Morgan accepts these properties in the options object. */ - interface Options { + interface Options { /*** * Buffer duration before writing logs to the stream, defaults to false. * When set to true, defaults to 1000 ms. @@ -153,7 +169,7 @@ declare namespace morgan { * Function to determine if logging is skipped, defaults to false. This * function will be called as skip(req, res). */ - skip?(req: express.Request, res: express.Response): boolean; + skip?(req: Request, res: Response): boolean; /*** * Output stream for writing log lines, defaults to process.stdout. @@ -170,7 +186,10 @@ declare namespace morgan { * @param format * @param options */ -declare function morgan(format: string, options?: morgan.Options): express.RequestHandler; +declare function morgan( + format: string, + options?: morgan.Options, +): Handler; /*** * Standard Apache combined log output. @@ -178,7 +197,10 @@ declare function morgan(format: string, options?: morgan.Options): express.Reque * @param format * @param options */ -declare function morgan(format: 'combined', options?: morgan.Options): express.RequestHandler; +declare function morgan( + format: 'combined', + options?: morgan.Options, +): Handler; /*** * Standard Apache common log output. @@ -186,7 +208,10 @@ declare function morgan(format: 'combined', options?: morgan.Options): express.R * @param format * @param options */ -declare function morgan(format: 'common', options?: morgan.Options): express.RequestHandler; +declare function morgan( + format: 'common', + options?: morgan.Options, +): Handler; /*** * Concise output colored by response status for development use. The :status @@ -196,7 +221,10 @@ declare function morgan(format: 'common', options?: morgan.Options): express.Req * @param format * @param options */ -declare function morgan(format: 'dev', options?: morgan.Options): express.RequestHandler; +declare function morgan( + format: 'dev', + options?: morgan.Options, +): Handler; /*** * Shorter than default, also including response time. @@ -204,7 +232,10 @@ declare function morgan(format: 'dev', options?: morgan.Options): express.Reques * @param format * @param options */ -declare function morgan(format: 'short', options?: morgan.Options): express.RequestHandler; +declare function morgan( + format: 'short', + options?: morgan.Options, +): Handler; /*** * The minimal output. @@ -212,7 +243,10 @@ declare function morgan(format: 'short', options?: morgan.Options): express.Requ * @param format * @param options */ -declare function morgan(format: 'tiny', options?: morgan.Options): express.RequestHandler; +declare function morgan( + format: 'tiny', + options?: morgan.Options, +): Handler; /*** * Create a new morgan logger middleware function using the given format and @@ -221,6 +255,9 @@ declare function morgan(format: 'tiny', options?: morgan.Options): express.Reque * @param format * @param options */ -declare function morgan(format: morgan.FormatFn, options?: morgan.Options): express.RequestHandler; +declare function morgan( + format: morgan.FormatFn, + options?: morgan.Options, +): Handler; export = morgan; diff --git a/types/morgan/morgan-tests.ts b/types/morgan/morgan-tests.ts index 6fe30711fe..4554b78e6e 100644 --- a/types/morgan/morgan-tests.ts +++ b/types/morgan/morgan-tests.ts @@ -2,6 +2,7 @@ * Created by staticfunction on 8/3/14. */ +import http = require('http'); import morgan = require('morgan'); import express = require('express'); @@ -102,3 +103,14 @@ morgan.format('dev-extended', developmentExtendedFormatLine); morgan.token('status', (req, res) => { return res.headersSent ? String(res.statusCode) : undefined; }); + +express().use(morgan('combined')); +express().use(morgan('combined', {skip: (req) => req.header('user-agent') === 'fake'})); + +http.createServer((req, res) => { + morgan('combined')(req, res, (err) => { + // respond to request + res.setHeader('content-type', 'text/plain'); + res.end('hello, world!'); + }); +});