Skip to content

Commit

Permalink
Fix #59
Browse files Browse the repository at this point in the history
  • Loading branch information
terehov committed Nov 11, 2020
1 parent 38930e0 commit 156383c
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 18 deletions.
7 changes: 5 additions & 2 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
// This is a workaround for https://github.com/eslint/eslint/issues/3458
require('@rushstack/eslint-config/patch/modern-module-resolution');
require("@rushstack/eslint-config/patch/modern-module-resolution");

module.exports = {
plugins: ["prettier"],
rules: {
"prettier/prettier": "error",
eqeqeq: [2, "smart"],
},
extends: [ "@rushstack/eslint-config/profile/node", "plugin:prettier/recommended"],
extends: [
"@rushstack/eslint-config/profile/node",
"plugin:prettier/recommended",
],
ignorePatterns: ["node_modules/", "dist/", "tests/", "*.test.ts", "example/"],
env: {
node: true,
Expand Down
33 changes: 18 additions & 15 deletions src/LoggerHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -276,18 +276,21 @@ export class LoggerHelper {

public static traverseObjectRecursively<T>(
obj: T,
fn: (key: number | string, value: unknown) => [number | string, unknown],
maskValuesFn: (key: number | string, obj: T) => T,
done: unknown[] = []
): T {
Object.keys(obj).forEach((currentKey: string | number) => {
if (!done.includes(obj[currentKey])) {
done.push(obj[currentKey]);
if (obj[currentKey] != null && typeof obj[currentKey] === "object") {
const [key, value] = fn(currentKey, obj[currentKey]);
obj[key] = LoggerHelper.traverseObjectRecursively(value, fn, done);
const maskedObj = maskValuesFn(currentKey, obj);
obj[currentKey] = LoggerHelper.traverseObjectRecursively(
maskedObj[currentKey],
maskValuesFn,
done
);
} else {
const [key, value] = fn(currentKey, obj[currentKey]);
obj[key] = value;
obj = maskValuesFn(currentKey, obj);
}
}
});
Expand All @@ -304,23 +307,23 @@ export class LoggerHelper {
return obj;
}

const fn = (
key: number | string,
value: unknown
): [number | string, unknown] => {
const maskValuesFn = <T>(key: number | string, obj: T): T => {
const keysLowerCase: (
| string
| number
)[] = keys.map((key: string | number) =>
typeof key === "string" ? key.toLowerCase() : key
);
return keysLowerCase.includes(
typeof key === "string" ? key.toLowerCase() : key
)
? [key, maskPlaceholder]
: [key, value];
if (
keysLowerCase.includes(
typeof key === "string" ? key.toLowerCase() : key
)
) {
obj[key] = maskPlaceholder;
}
return obj;
};

return LoggerHelper.traverseObjectRecursively(obj, fn);
return LoggerHelper.traverseObjectRecursively(obj, maskValuesFn);
}
}
4 changes: 3 additions & 1 deletion tests/settings.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -817,7 +817,9 @@ describe("Logger: settings", () => {
stdErr: std,
});

const { argumentsArray: undefinedMaskValuesArgArray } = undefinedMaskValuesLogger.info(verySecretiveCircularObject);
const {
argumentsArray: undefinedMaskValuesArgArray,
} = undefinedMaskValuesLogger.info(verySecretiveCircularObject);
expect(undefinedMaskValuesArgArray[0]).toBe(verySecretiveCircularObject);
});

Expand Down

0 comments on commit 156383c

Please sign in to comment.