Skip to content

Commit

Permalink
Merge pull request #75 from fullstack-build/development
Browse files Browse the repository at this point in the history
Development
  • Loading branch information
terehov authored Dec 15, 2020
2 parents 4f76c5e + 8c7c4ac commit c8c33f0
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 42 deletions.
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 13 additions & 11 deletions src/LoggerHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,12 @@ export class LoggerHelper {
filePath: LoggerHelper.cleanUpFilePath(filePath) ?? "",
fullFilePath: filePath ?? "",
fileName: fileBasename(stackFrame.getFileName() ?? ""),
lineNumber: stackFrame.getLineNumber(),
columnNumber: stackFrame.getColumnNumber(),
isConstructor: stackFrame.isConstructor(),
functionName: stackFrame.getFunctionName(),
typeName: stackFrame.getTypeName(),
methodName: stackFrame.getMethodName(),
lineNumber: stackFrame.getLineNumber() ?? undefined,
columnNumber: stackFrame.getColumnNumber() ?? undefined,
isConstructor: stackFrame.isConstructor() ?? undefined,
functionName: stackFrame.getFunctionName() ?? undefined,
typeName: stackFrame.getTypeName() ?? undefined,
methodName: stackFrame.getMethodName() ?? undefined,
};
}

Expand Down Expand Up @@ -223,8 +223,7 @@ export class LoggerHelper {
public static _getCodeFrame(
filePath: string,
lineNumber: number,
// eslint-disable-next-line @rushstack/no-new-null
columnNumber: number | null,
columnNumber: number | undefined,
linesBeforeAndAfter: number
): ICodeFrame | undefined {
const lineNumberMinusOne: number = lineNumber - 1;
Expand Down Expand Up @@ -278,17 +277,20 @@ export class LoggerHelper {

public static cloneObjectRecursively<T>(
obj: T,
maskValuesFn: (key: number | string, value: unknown) => unknown,
maskValuesFn?: (key: number | string, value: unknown) => unknown,
done: unknown[] = [],
clonedObject: T = Object.create(Object.getPrototypeOf(obj)) as T
): T {
done.push(obj);
Object.keys(obj).forEach((currentKey: string | number) => {
Object.getOwnPropertyNames(obj).forEach((currentKey: string | number) => {
if (!done.includes(obj[currentKey])) {
if (obj[currentKey] == null) {
clonedObject[currentKey] = obj[currentKey];
} else if (typeof obj[currentKey] !== "object") {
clonedObject[currentKey] = maskValuesFn(currentKey, obj[currentKey]);
clonedObject[currentKey] =
maskValuesFn != null
? maskValuesFn(currentKey, obj[currentKey])
: obj[currentKey];
} else {
clonedObject[currentKey] = LoggerHelper.cloneObjectRecursively(
obj[currentKey],
Expand Down
44 changes: 26 additions & 18 deletions src/LoggerWithoutCallSite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -369,12 +369,14 @@ export class LoggerWithoutCallSite {
const relevantCallSites: NodeJS.CallSite[] = callSites.splice(
this.settings.ignoreStackLevels
);
const stackFrame: NodeJS.CallSite = this._callSiteWrapper(
relevantCallSites[0]
);
const stackFrameObject: IStackFrame = LoggerHelper.toStackFrameObject(
stackFrame
);
const stackFrame: NodeJS.CallSite | undefined =
relevantCallSites[0] != null
? this._callSiteWrapper(relevantCallSites[0])
: undefined;
const stackFrameObject: IStackFrame | undefined =
stackFrame != null
? LoggerHelper.toStackFrameObject(stackFrame)
: undefined;

const requestId: string | undefined =
this.settings.requestId instanceof Function
Expand All @@ -389,15 +391,15 @@ export class LoggerWithoutCallSite {
date: new Date(),
logLevel: logLevel,
logLevelId: this._logLevels.indexOf(logLevel) as TLogLevelId,
filePath: stackFrameObject.filePath,
fullFilePath: stackFrameObject.fullFilePath,
fileName: stackFrameObject.fileName,
lineNumber: stackFrameObject.lineNumber,
columnNumber: stackFrameObject.columnNumber,
isConstructor: stackFrameObject.isConstructor,
functionName: stackFrameObject.functionName,
typeName: stackFrameObject.typeName,
methodName: stackFrameObject.methodName,
filePath: stackFrameObject?.filePath,
fullFilePath: stackFrameObject?.fullFilePath,
fileName: stackFrameObject?.fileName,
lineNumber: stackFrameObject?.lineNumber,
columnNumber: stackFrameObject?.columnNumber,
isConstructor: stackFrameObject?.isConstructor,
functionName: stackFrameObject?.functionName,
typeName: stackFrameObject?.typeName,
methodName: stackFrameObject?.methodName,
argumentsArray: [],
toJSON: () => this._logObjectToJson(logObject),
};
Expand Down Expand Up @@ -444,7 +446,9 @@ export class LoggerWithoutCallSite {
relevantCallSites.length = stackLimit;
}

const errorObject: IErrorObject = JSON.parse(JSON.stringify(error));
const errorObject: IErrorObject = (LoggerHelper.cloneObjectRecursively(
error
) as unknown) as IErrorObject;
errorObject.nativeError = error;
errorObject.details = { ...error };
errorObject.name = errorObject.name ?? "Error";
Expand All @@ -455,11 +459,14 @@ export class LoggerWithoutCallSite {
this._callSiteWrapper(relevantCallSites[0])
);
if (exposeErrorCodeFrame && errorCallSite.lineNumber != null) {
if (errorCallSite.fullFilePath.indexOf("node_modules") < 0) {
if (
errorCallSite.fullFilePath != null &&
errorCallSite.fullFilePath.indexOf("node_modules") < 0
) {
errorObject.codeFrame = LoggerHelper._getCodeFrame(
errorCallSite.fullFilePath,
errorCallSite.lineNumber,
errorCallSite.columnNumber,
errorCallSite?.columnNumber,
this.settings.exposeErrorCodeFrameLinesBeforeAndAfter
);
}
Expand Down Expand Up @@ -574,6 +581,7 @@ export class LoggerWithoutCallSite {
if (
this.settings.displayFilePath === "displayAll" ||
(this.settings.displayFilePath === "hideNodeModulesOnly" &&
logObject.filePath != null &&
logObject.filePath.indexOf("node_modules") < 0)
) {
fileLocation = `${logObject.filePath}:${logObject.lineNumber}`;
Expand Down
20 changes: 10 additions & 10 deletions src/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -215,23 +215,23 @@ export interface IStd {
*/
export interface IStackFrame {
/** Relative path based on the main folder */
filePath: string;
filePath: string | undefined;
/** Full path */
fullFilePath: string;
fullFilePath: string | undefined;
/** Name of the file */
fileName: string;
fileName: string | undefined;
/** Line number */
lineNumber: number | null;
lineNumber: number | undefined;
/** Column Name */
columnNumber: number | null;
columnNumber: number | undefined;
/** Called from constructor */
isConstructor: boolean | null;
isConstructor: boolean | undefined;
/** Name of the function */
functionName: string | null;
functionName: string | undefined;
/** Name of the class */
typeName: string | null;
typeName: string | undefined;
/** Name of the Method */
methodName: string | null;
methodName: string | undefined;
}

/**
Expand Down Expand Up @@ -390,7 +390,7 @@ export interface IHighlightStyles {
export interface ICodeFrame {
firstLineNumber: number;
lineNumber: number;
columnNumber: number | null;
columnNumber: number | undefined;
linesBefore: string[];
relevantLine: string;
linesAfter: string[];
Expand Down
7 changes: 7 additions & 0 deletions tests/error.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,13 @@ describe("Logger: Error with details", () => {
stdErr = [];
});

test("JSON: Check Error.toJSON()", (): void => {
const error = new TestError("TestError");
const errorToJson = JSON.stringify(error);

expect(errorToJson.length).toBeGreaterThan(0);
});

test("Pretty: Error with details (stdErr)", (): void => {
const error = new TestError("TestError");
loggerPretty.warn(error);
Expand Down

0 comments on commit c8c33f0

Please sign in to comment.