From 9c14125face29b9e94aadefbda514b50849b6927 Mon Sep 17 00:00:00 2001 From: mbrucedogs Date: Mon, 21 Jul 2025 12:59:34 -0500 Subject: [PATCH] Signed-off-by: mbrucedogs --- functions/lib/index.js | 8 ++++---- functions/lib/index.js.map | 2 +- functions/src/index.ts | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/functions/lib/index.js b/functions/lib/index.js index 67e8c44..2c25625 100644 --- a/functions/lib/index.js +++ b/functions/lib/index.js @@ -34,8 +34,8 @@ exports.updateTopPlayedOnHistoryChange = functions.database if (historySong && historySong.artist && historySong.title) { // Create a unique key based on artist and title (case-insensitive) // Replace invalid Firebase key characters with underscores - const sanitizedArtist = historySong.artist.toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); - const sanitizedTitle = historySong.title.toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); + const sanitizedArtist = String(historySong.artist || '').toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); + const sanitizedTitle = String(historySong.title || '').toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); const key = `${sanitizedArtist}_${sanitizedTitle}`; if (aggregation[key]) { // Increment count for existing song @@ -107,8 +107,8 @@ exports.recalculateTopPlayed = functions.https.onCall(async (data, context) => { if (historySong && historySong.artist && historySong.title) { // Create a unique key based on artist and title (case-insensitive) // Replace invalid Firebase key characters with underscores - const sanitizedArtist = historySong.artist.toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); - const sanitizedTitle = historySong.title.toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); + const sanitizedArtist = String(historySong.artist || '').toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); + const sanitizedTitle = String(historySong.title || '').toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); const key = `${sanitizedArtist}_${sanitizedTitle}`; if (aggregation[key]) { // Increment count for existing song diff --git a/functions/lib/index.js.map b/functions/lib/index.js.map index 7b5a7d6..d06c3c1 100644 --- a/functions/lib/index.js.map +++ b/functions/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/functions/src/index.ts b/functions/src/index.ts index f4577ef..820b96c 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -67,8 +67,8 @@ export const updateTopPlayedOnHistoryChange = functions.database if (historySong && historySong.artist && historySong.title) { // Create a unique key based on artist and title (case-insensitive) // Replace invalid Firebase key characters with underscores - const sanitizedArtist = historySong.artist.toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); - const sanitizedTitle = historySong.title.toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); + const sanitizedArtist = String(historySong.artist || '').toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); + const sanitizedTitle = String(historySong.title || '').toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); const key = `${sanitizedArtist}_${sanitizedTitle}`; if (aggregation[key]) { @@ -153,8 +153,8 @@ export const recalculateTopPlayed = functions.https.onCall(async (data, context) if (historySong && historySong.artist && historySong.title) { // Create a unique key based on artist and title (case-insensitive) // Replace invalid Firebase key characters with underscores - const sanitizedArtist = historySong.artist.toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); - const sanitizedTitle = historySong.title.toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); + const sanitizedArtist = String(historySong.artist || '').toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); + const sanitizedTitle = String(historySong.title || '').toLowerCase().trim().replace(/[.#$/[\]]/g, '_'); const key = `${sanitizedArtist}_${sanitizedTitle}`; if (aggregation[key]) {