diff --git a/package.json b/package.json index 286f85b..d39170f 100644 --- a/package.json +++ b/package.json @@ -24,10 +24,11 @@ "typescript": "5.9.3" }, "peerDependencies": { - "discord.js": "^14.0.0", - "@nhcarrigan/logger": ">=1.1.0-hotfix" + "@nhcarrigan/logger": ">=1.1.0-hotfix", + "discord.js": "^14.0.0" }, "dependencies": { + "flat": "6.0.1", "node-schedule": "2.1.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b678a52..a8e53e7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: discord.js: specifier: ^14.0.0 version: 14.22.1 + flat: + specifier: 6.0.1 + version: 6.0.1 node-schedule: specifier: 2.1.1 version: 2.1.1 @@ -1127,6 +1130,11 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} + flat@6.0.1: + resolution: {integrity: sha512-/3FfIa8mbrg3xE7+wAhWeV+bd7L2Mof+xtZb5dRDKZ+wDvYJK4WDYeIOuOhre5Yv5aQObZrlbRmk3RTSiuQBtw==} + engines: {node: '>=18'} + hasBin: true + flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} @@ -3368,6 +3376,8 @@ snapshots: flatted: 3.3.3 keyv: 4.5.4 + flat@6.0.1: {} + flatted@3.3.3: {} for-each@0.3.5: diff --git a/src/index.ts b/src/index.ts index 50d9f77..371baed 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,69 +4,11 @@ * @author Naomi Carrigan */ +import { flatten } from "flat"; import { scheduleJob, type Job } from "node-schedule"; import type { Logger } from "@nhcarrigan/logger"; import type { Events, Client } from "discord.js"; -// eslint-disable-next-line complexity, max-lines-per-function, max-statements -- Justified -const flatten = ( - object: Record, -): Record => { - const result: Record = {}; - 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); - 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); - 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. */ @@ -146,6 +88,6 @@ export class DiscordAnalytics { event: Events, payload: Record, ): Promise { - await this.logger.metric(event, 1, flatten(payload)); + await this.logger.metric(event, 1, flatten(payload, { delimiter: "_" })); } }