generated from nhcarrigan/template
fix: use someone else's flatten package
This commit is contained in:
+3
-2
@@ -24,10 +24,11 @@
|
|||||||
"typescript": "5.9.3"
|
"typescript": "5.9.3"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"discord.js": "^14.0.0",
|
"@nhcarrigan/logger": ">=1.1.0-hotfix",
|
||||||
"@nhcarrigan/logger": ">=1.1.0-hotfix"
|
"discord.js": "^14.0.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"flat": "6.0.1",
|
||||||
"node-schedule": "2.1.1"
|
"node-schedule": "2.1.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+10
@@ -14,6 +14,9 @@ importers:
|
|||||||
discord.js:
|
discord.js:
|
||||||
specifier: ^14.0.0
|
specifier: ^14.0.0
|
||||||
version: 14.22.1
|
version: 14.22.1
|
||||||
|
flat:
|
||||||
|
specifier: 6.0.1
|
||||||
|
version: 6.0.1
|
||||||
node-schedule:
|
node-schedule:
|
||||||
specifier: 2.1.1
|
specifier: 2.1.1
|
||||||
version: 2.1.1
|
version: 2.1.1
|
||||||
@@ -1127,6 +1130,11 @@ packages:
|
|||||||
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
|
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
|
||||||
engines: {node: '>=16'}
|
engines: {node: '>=16'}
|
||||||
|
|
||||||
|
flat@6.0.1:
|
||||||
|
resolution: {integrity: sha512-/3FfIa8mbrg3xE7+wAhWeV+bd7L2Mof+xtZb5dRDKZ+wDvYJK4WDYeIOuOhre5Yv5aQObZrlbRmk3RTSiuQBtw==}
|
||||||
|
engines: {node: '>=18'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
flatted@3.3.3:
|
flatted@3.3.3:
|
||||||
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
|
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
|
||||||
|
|
||||||
@@ -3368,6 +3376,8 @@ snapshots:
|
|||||||
flatted: 3.3.3
|
flatted: 3.3.3
|
||||||
keyv: 4.5.4
|
keyv: 4.5.4
|
||||||
|
|
||||||
|
flat@6.0.1: {}
|
||||||
|
|
||||||
flatted@3.3.3: {}
|
flatted@3.3.3: {}
|
||||||
|
|
||||||
for-each@0.3.5:
|
for-each@0.3.5:
|
||||||
|
|||||||
+2
-60
@@ -4,69 +4,11 @@
|
|||||||
* @author Naomi Carrigan
|
* @author Naomi Carrigan
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { flatten } from "flat";
|
||||||
import { scheduleJob, type Job } from "node-schedule";
|
import { scheduleJob, type Job } from "node-schedule";
|
||||||
import type { Logger } from "@nhcarrigan/logger";
|
import type { Logger } from "@nhcarrigan/logger";
|
||||||
import type { Events, Client } from "discord.js";
|
import type { Events, Client } from "discord.js";
|
||||||
|
|
||||||
// eslint-disable-next-line complexity, max-lines-per-function, max-statements -- Justified
|
|
||||||
const flatten = (
|
|
||||||
object: Record<string, unknown>,
|
|
||||||
): Record<string, string | number | boolean> => {
|
|
||||||
const result: Record<string, string | number | boolean> = {};
|
|
||||||
for (const key in object) {
|
|
||||||
const value = object[key];
|
|
||||||
if (value === null || value === undefined) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
typeof value === "string"
|
|
||||||
|| typeof value === "number"
|
|
||||||
|| typeof value === "boolean"
|
|
||||||
) {
|
|
||||||
result[key] = value;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (typeof value === "object" && !Array.isArray(value)) {
|
|
||||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Justified
|
|
||||||
const nested = flatten(value as Record<string, unknown>);
|
|
||||||
for (const nestedKey in nested) {
|
|
||||||
const nestedValue = nested[nestedKey];
|
|
||||||
if (nestedValue === undefined) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
result[`${key}_${nestedKey}`] = nestedValue;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
for (const [ index, arrayValue ] of value.entries()) {
|
|
||||||
if (
|
|
||||||
typeof arrayValue === "string"
|
|
||||||
|| typeof arrayValue === "number"
|
|
||||||
|| typeof arrayValue === "boolean"
|
|
||||||
) {
|
|
||||||
result[`${key}_${index.toString()}`] = arrayValue;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (typeof arrayValue === "object" && arrayValue !== null) {
|
|
||||||
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Justified
|
|
||||||
const nested = flatten(arrayValue as Record<string, unknown>);
|
|
||||||
for (const nestedKey in nested) {
|
|
||||||
const nestedValue = nested[nestedKey];
|
|
||||||
// eslint-disable-next-line max-depth -- Justified
|
|
||||||
if (nestedValue === undefined) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
result[`${key}_${index.toString()}_${nestedKey}`] = nestedValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A class for logging Discord bot analytics.
|
* A class for logging Discord bot analytics.
|
||||||
*/
|
*/
|
||||||
@@ -146,6 +88,6 @@ export class DiscordAnalytics {
|
|||||||
event: Events,
|
event: Events,
|
||||||
payload: Record<string, unknown>,
|
payload: Record<string, unknown>,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
await this.logger.metric(event, 1, flatten(payload));
|
await this.logger.metric(event, 1, flatten(payload, { delimiter: "_" }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user