Rewrite Roarr types to approximate extant Flow types. (#40231)

This commit is contained in:
Aankhen
2019-11-15 16:59:29 -08:00
committed by Pranav Senthilnathan
parent ca5bcb9f1c
commit 54066ceaf2
2 changed files with 195 additions and 293 deletions
+171 -291
View File
@@ -2,297 +2,177 @@
// Project: https://github.com/gajus/roarr#readme
// Definitions by: Philip Saxton <https://github.com/psaxton>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.4
export as namespace log;
// the package defines a recursive type SerializeValueType but, fortunately, neither it nor SerializableObjectType are
// used anywhere
export interface WriterType {
write: (message: string) => void;
}
export interface RoarrGlobalStateType extends WriterType {
sequence: number;
versions: ReadonlyArray<string>;
}
export type SprintfArgumentType = string | number | boolean | null;
export type MessageContextType = object;
export interface MessageType {
context: MessageContextType;
message: string;
sequence: number;
time: number;
version: string;
}
export type TranslateMessageFunctionType = (message: MessageType) => MessageType;
export interface Logger {
(
context: MessageContextType,
message: string,
c?: SprintfArgumentType,
d?: SprintfArgumentType,
e?: SprintfArgumentType,
f?: SprintfArgumentType,
g?: SprintfArgumentType,
h?: SprintfArgumentType,
i?: SprintfArgumentType,
k?: SprintfArgumentType
): void;
(
message: string,
b?: SprintfArgumentType,
c?: SprintfArgumentType,
d?: SprintfArgumentType,
e?: SprintfArgumentType,
f?: SprintfArgumentType,
g?: SprintfArgumentType,
h?: SprintfArgumentType,
i?: SprintfArgumentType
): void;
}
export interface LoggerType extends Logger {
/**
* Creates a child logger appending the provided context object to the previous logger context.
*
* @param contextOrFunction
* @example
* import Roarr from 'roarr';
*
* const log = Roarr.child({ module: "myModule" });
*
* log.debug("My Message");
* // {"context":{"logLevel":20},"Message":"My Message","sequence":0,"time":1531914529921,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#child
*/
child(contextOrFunction: TranslateMessageFunctionType | MessageContextType):
LoggerType;
/**
* Returns the current context.
*/
getContext(): MessageContextType;
/**
* Convenience method for logging a message with logLevel context property value set to 10 (LogLevel.Trace)
*
* @example
* import Roarr from 'roarr';
*
* const log = Roarr;
*
* log.trace('foo');
* // {"context":{"logLevel":10},"message":"foo","sequence":0,"time":1506776210000,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#trace
*/
trace: Logger;
/**
* Convenience method for logging a message with logLevel context property value set to 20 (LogLevel.Debug)
*
* @example
* import Roarr from 'roarr';
*
* const log = Roarr;
*
* log.debug('foo');
* // {"context":{"logLevel":20},"message":"foo","sequence":0,"time":1506776210000,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#trace
*/
debug: Logger;
/**
* Convenience method for logging a message with logLevel context property value set to 30 (LogLevel.Info)
*
* @example
* import Roarr from 'roarr';
*
* const log = Roarr;
*
* log.info('foo');
* // {"context":{"logLevel":30},"message":"foo","sequence":0,"time":1506776210000,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#trace
*/
info: Logger;
/**
* Convenience method for logging a message with logLevel context property value set to 40 (LogLevel.Warn)
*
* @example
* import Roarr from 'roarr';
*
* const log = Roarr;
*
* log.warn('foo');
* // {"context":{"logLevel":40},"message":"foo","sequence":0,"time":1506776210000,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#trace
*/
warn: Logger;
/**
* Convenience method for logging a message with logLevel context property value set to 50 (LogLevel.Error)
*
* @example
* import Roarr from 'roarr';
*
* const log = Roarr;
*
* log.error('foo');
* // {"context":{"logLevel":50},"message":"foo","sequence":0,"time":1506776210000,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#trace
*/
error: Logger;
/**
* Convenience method for logging a message with logLevel context property value set to 60 (LogLevel.Fatal)
*
* @example
* import Roarr from 'roarr';
*
* const log = Roarr;
*
* log.fatal('foo');
* // {"context":{"logLevel":60},"message":"foo","sequence":0,"time":1506776210000,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#trace
*/
fatal: Logger;
}
export type MessageEventHandlerType = (message: MessageType) => void;
declare const log: LoggerType;
export default log;
declare let log: Roarr.RoarrType;
declare namespace Roarr {
interface MessageContextType {
logLevel?: number;
[name: string]: any;
}
type TranslateMessageFunctionType = (message: MessageContextType) => MessageContextType;
interface SprintfArgumentType { toString(): string; }
interface RoarrType {
(
context: MessageContextType,
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
(
context: MessageContextType,
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
/**
* Creates a child logger appending the provided context object to the previous logger context.
*
* @param contextOrFunction
* @example
* import Roarr from 'roarr';
*
* const log = Roarr.child({ module: "myModule" });
*
* log.debug("My Message");
* // {"context":{"logLevel":20},"Message":"My Message","sequence":0,"time":1531914529921,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#child
*/
child(contextOrFunction: MessageContextType | TranslateMessageFunctionType): RoarrType;
/**
* Returns the current context.
*/
getContext(): MessageContextType;
/**
* Convenience method for logging a message with logLevel context property value set to 10 (LogLevel.Trace)
*
* @example
* import Roarr from 'roarr';
*
* const log = Roarr;
*
* log.trace('foo');
* // {"context":{"logLevel":10},"message":"foo","sequence":0,"time":1506776210000,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#trace
*/
trace(
context: MessageContextType,
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
trace(
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
/**
* Convenience method for logging a message with logLevel context property value set to 20 (LogLevel.Debug)
*
* @example
* import Roarr from 'roarr';
*
* const log = Roarr;
*
* log.debug('foo');
* // {"context":{"logLevel":20},"message":"foo","sequence":0,"time":1506776210000,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#trace
*/
debug(
context: MessageContextType,
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
debug(
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
/**
* Convenience method for logging a message with logLevel context property value set to 30 (LogLevel.Info)
*
* @example
* import Roarr from 'roarr';
*
* const log = Roarr;
*
* log.info('foo');
* // {"context":{"logLevel":30},"message":"foo","sequence":0,"time":1506776210000,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#trace
*/
info(
context: MessageContextType,
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
info(
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
/**
* Convenience method for logging a message with logLevel context property value set to 40 (LogLevel.Warn)
*
* @example
* import Roarr from 'roarr';
*
* const log = Roarr;
*
* log.warn('foo');
* // {"context":{"logLevel":40},"message":"foo","sequence":0,"time":1506776210000,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#trace
*/
warn(
context: MessageContextType,
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
warn(
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
/**
* Convenience method for logging a message with logLevel context property value set to 50 (LogLevel.Error)
*
* @example
* import Roarr from 'roarr';
*
* const log = Roarr;
*
* log.error('foo');
* // {"context":{"logLevel":50},"message":"foo","sequence":0,"time":1506776210000,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#trace
*/
error(
context: MessageContextType,
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
error(
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
/**
* Convenience method for logging a message with logLevel context property value set to 60 (LogLevel.Fatal)
*
* @example
* import Roarr from 'roarr';
*
* const log = Roarr;
*
* log.fatal('foo');
* // {"context":{"logLevel":60},"message":"foo","sequence":0,"time":1506776210000,"version":"1.0.0"}
*
* @see https://www.npmjs.com/package/roarr#trace
*/
fatal(
context: MessageContextType,
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
fatal(
message: string,
_0?: SprintfArgumentType,
_1?: SprintfArgumentType,
_2?: SprintfArgumentType,
_3?: SprintfArgumentType,
_4?: SprintfArgumentType,
_5?: SprintfArgumentType,
_6?: SprintfArgumentType,
_7?: SprintfArgumentType
): void;
}
}
+24 -2
View File
@@ -1,4 +1,16 @@
import Roarr from "roarr";
import { default as Roarr, MessageType, MessageContextType } from "roarr";
const messageContextType = {
foo: "bar",
};
const messageType: MessageType = {
context: messageContextType,
message: "a message",
sequence: 1,
time: 1,
version: "1",
};
const log = Roarr.child({ module: "roarr-tests" });
@@ -15,9 +27,10 @@ log.error("Error log statement");
log.error({ context: "error" }, "Error log statement");
log.fatal("Fatal log statement");
log.fatal({ context: "fatal" }, "Fatal log statement");
log("Statement without context");
// TS2.0-compatible reformulation of example at https://github.com/gajus/roarr#function-parameter
const alternativeLog = Roarr.child((message) => {
const alternativeLog = Roarr.child((message: MessageType) => {
message["message"] = message["message"].replace("foo", "bar");
return message;
@@ -26,3 +39,12 @@ const alternativeLog = Roarr.child((message) => {
alternativeLog({ logLevel: 60 }, "Something critical");
alternativeLog.debug({ foo: "bar" }, 'foo 1');
alternativeLog.fatal('foo 2');
const implicitLog = Roarr.child((message) => {
message; // $Expect MessageType
message["message"] = message["message"].replace("foo", "bar");
return message;
});
implicitLog("Implicit logger without context");