Skip to content

Commit c8c33f0

Browse files
authored
Merge pull request #75 from fullstack-build/development
Development
2 parents 4f76c5e + 8c7c4ac commit c8c33f0

File tree

5 files changed

+59
-42
lines changed

5 files changed

+59
-42
lines changed

package-lock.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/LoggerHelper.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,12 @@ export class LoggerHelper {
7777
filePath: LoggerHelper.cleanUpFilePath(filePath) ?? "",
7878
fullFilePath: filePath ?? "",
7979
fileName: fileBasename(stackFrame.getFileName() ?? ""),
80-
lineNumber: stackFrame.getLineNumber(),
81-
columnNumber: stackFrame.getColumnNumber(),
82-
isConstructor: stackFrame.isConstructor(),
83-
functionName: stackFrame.getFunctionName(),
84-
typeName: stackFrame.getTypeName(),
85-
methodName: stackFrame.getMethodName(),
80+
lineNumber: stackFrame.getLineNumber() ?? undefined,
81+
columnNumber: stackFrame.getColumnNumber() ?? undefined,
82+
isConstructor: stackFrame.isConstructor() ?? undefined,
83+
functionName: stackFrame.getFunctionName() ?? undefined,
84+
typeName: stackFrame.getTypeName() ?? undefined,
85+
methodName: stackFrame.getMethodName() ?? undefined,
8686
};
8787
}
8888

@@ -223,8 +223,7 @@ export class LoggerHelper {
223223
public static _getCodeFrame(
224224
filePath: string,
225225
lineNumber: number,
226-
// eslint-disable-next-line @rushstack/no-new-null
227-
columnNumber: number | null,
226+
columnNumber: number | undefined,
228227
linesBeforeAndAfter: number
229228
): ICodeFrame | undefined {
230229
const lineNumberMinusOne: number = lineNumber - 1;
@@ -278,17 +277,20 @@ export class LoggerHelper {
278277

279278
public static cloneObjectRecursively<T>(
280279
obj: T,
281-
maskValuesFn: (key: number | string, value: unknown) => unknown,
280+
maskValuesFn?: (key: number | string, value: unknown) => unknown,
282281
done: unknown[] = [],
283282
clonedObject: T = Object.create(Object.getPrototypeOf(obj)) as T
284283
): T {
285284
done.push(obj);
286-
Object.keys(obj).forEach((currentKey: string | number) => {
285+
Object.getOwnPropertyNames(obj).forEach((currentKey: string | number) => {
287286
if (!done.includes(obj[currentKey])) {
288287
if (obj[currentKey] == null) {
289288
clonedObject[currentKey] = obj[currentKey];
290289
} else if (typeof obj[currentKey] !== "object") {
291-
clonedObject[currentKey] = maskValuesFn(currentKey, obj[currentKey]);
290+
clonedObject[currentKey] =
291+
maskValuesFn != null
292+
? maskValuesFn(currentKey, obj[currentKey])
293+
: obj[currentKey];
292294
} else {
293295
clonedObject[currentKey] = LoggerHelper.cloneObjectRecursively(
294296
obj[currentKey],

src/LoggerWithoutCallSite.ts

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -369,12 +369,14 @@ export class LoggerWithoutCallSite {
369369
const relevantCallSites: NodeJS.CallSite[] = callSites.splice(
370370
this.settings.ignoreStackLevels
371371
);
372-
const stackFrame: NodeJS.CallSite = this._callSiteWrapper(
373-
relevantCallSites[0]
374-
);
375-
const stackFrameObject: IStackFrame = LoggerHelper.toStackFrameObject(
376-
stackFrame
377-
);
372+
const stackFrame: NodeJS.CallSite | undefined =
373+
relevantCallSites[0] != null
374+
? this._callSiteWrapper(relevantCallSites[0])
375+
: undefined;
376+
const stackFrameObject: IStackFrame | undefined =
377+
stackFrame != null
378+
? LoggerHelper.toStackFrameObject(stackFrame)
379+
: undefined;
378380

379381
const requestId: string | undefined =
380382
this.settings.requestId instanceof Function
@@ -389,15 +391,15 @@ export class LoggerWithoutCallSite {
389391
date: new Date(),
390392
logLevel: logLevel,
391393
logLevelId: this._logLevels.indexOf(logLevel) as TLogLevelId,
392-
filePath: stackFrameObject.filePath,
393-
fullFilePath: stackFrameObject.fullFilePath,
394-
fileName: stackFrameObject.fileName,
395-
lineNumber: stackFrameObject.lineNumber,
396-
columnNumber: stackFrameObject.columnNumber,
397-
isConstructor: stackFrameObject.isConstructor,
398-
functionName: stackFrameObject.functionName,
399-
typeName: stackFrameObject.typeName,
400-
methodName: stackFrameObject.methodName,
394+
filePath: stackFrameObject?.filePath,
395+
fullFilePath: stackFrameObject?.fullFilePath,
396+
fileName: stackFrameObject?.fileName,
397+
lineNumber: stackFrameObject?.lineNumber,
398+
columnNumber: stackFrameObject?.columnNumber,
399+
isConstructor: stackFrameObject?.isConstructor,
400+
functionName: stackFrameObject?.functionName,
401+
typeName: stackFrameObject?.typeName,
402+
methodName: stackFrameObject?.methodName,
401403
argumentsArray: [],
402404
toJSON: () => this._logObjectToJson(logObject),
403405
};
@@ -444,7 +446,9 @@ export class LoggerWithoutCallSite {
444446
relevantCallSites.length = stackLimit;
445447
}
446448

447-
const errorObject: IErrorObject = JSON.parse(JSON.stringify(error));
449+
const errorObject: IErrorObject = (LoggerHelper.cloneObjectRecursively(
450+
error
451+
) as unknown) as IErrorObject;
448452
errorObject.nativeError = error;
449453
errorObject.details = { ...error };
450454
errorObject.name = errorObject.name ?? "Error";
@@ -455,11 +459,14 @@ export class LoggerWithoutCallSite {
455459
this._callSiteWrapper(relevantCallSites[0])
456460
);
457461
if (exposeErrorCodeFrame && errorCallSite.lineNumber != null) {
458-
if (errorCallSite.fullFilePath.indexOf("node_modules") < 0) {
462+
if (
463+
errorCallSite.fullFilePath != null &&
464+
errorCallSite.fullFilePath.indexOf("node_modules") < 0
465+
) {
459466
errorObject.codeFrame = LoggerHelper._getCodeFrame(
460467
errorCallSite.fullFilePath,
461468
errorCallSite.lineNumber,
462-
errorCallSite.columnNumber,
469+
errorCallSite?.columnNumber,
463470
this.settings.exposeErrorCodeFrameLinesBeforeAndAfter
464471
);
465472
}
@@ -574,6 +581,7 @@ export class LoggerWithoutCallSite {
574581
if (
575582
this.settings.displayFilePath === "displayAll" ||
576583
(this.settings.displayFilePath === "hideNodeModulesOnly" &&
584+
logObject.filePath != null &&
577585
logObject.filePath.indexOf("node_modules") < 0)
578586
) {
579587
fileLocation = `${logObject.filePath}:${logObject.lineNumber}`;

src/interfaces.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -215,23 +215,23 @@ export interface IStd {
215215
*/
216216
export interface IStackFrame {
217217
/** Relative path based on the main folder */
218-
filePath: string;
218+
filePath: string | undefined;
219219
/** Full path */
220-
fullFilePath: string;
220+
fullFilePath: string | undefined;
221221
/** Name of the file */
222-
fileName: string;
222+
fileName: string | undefined;
223223
/** Line number */
224-
lineNumber: number | null;
224+
lineNumber: number | undefined;
225225
/** Column Name */
226-
columnNumber: number | null;
226+
columnNumber: number | undefined;
227227
/** Called from constructor */
228-
isConstructor: boolean | null;
228+
isConstructor: boolean | undefined;
229229
/** Name of the function */
230-
functionName: string | null;
230+
functionName: string | undefined;
231231
/** Name of the class */
232-
typeName: string | null;
232+
typeName: string | undefined;
233233
/** Name of the Method */
234-
methodName: string | null;
234+
methodName: string | undefined;
235235
}
236236

237237
/**
@@ -390,7 +390,7 @@ export interface IHighlightStyles {
390390
export interface ICodeFrame {
391391
firstLineNumber: number;
392392
lineNumber: number;
393-
columnNumber: number | null;
393+
columnNumber: number | undefined;
394394
linesBefore: string[];
395395
relevantLine: string;
396396
linesAfter: string[];

tests/error.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ describe("Logger: Error with details", () => {
4343
stdErr = [];
4444
});
4545

46+
test("JSON: Check Error.toJSON()", (): void => {
47+
const error = new TestError("TestError");
48+
const errorToJson = JSON.stringify(error);
49+
50+
expect(errorToJson.length).toBeGreaterThan(0);
51+
});
52+
4653
test("Pretty: Error with details (stdErr)", (): void => {
4754
const error = new TestError("TestError");
4855
loggerPretty.warn(error);

0 commit comments

Comments
 (0)