From 7dfa8d508106473c52dc450d40d6039e6cd38173 Mon Sep 17 00:00:00 2001 From: Cory Dransfeldt <hi@coryd.dev> Date: Thu, 23 May 2024 19:24:19 -0700 Subject: [PATCH] fix: helpers --- api/now-playing.js | 2 +- src/_data/music.js | 18 +++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/api/now-playing.js b/api/now-playing.js index dfcf441e..33d85704 100644 --- a/api/now-playing.js +++ b/api/now-playing.js @@ -141,7 +141,7 @@ export default async () => { content: `${emojiMap( scrobbleData.artists.genre, scrobbleData.artist_name - )} ${scrobbleData.track_name} by <a href="https://coryd.dev/music/artists/${slugifyString(scrobbleData.artist_name)}-${slugifyString(parseCountryField(scrobbleData.country))}">${ + )} ${scrobbleData.track_name} by <a href="https://coryd.dev/music/artists/${sanitizeMediaString(scrobbleData.artist_name)}-${sanitizeMediaString(parseCountryField(scrobbleData.country))}">${ scrobbleData.artist_name }</a>`, }), { headers }); diff --git a/src/_data/music.js b/src/_data/music.js index 64bbc073..b1016587 100644 --- a/src/_data/music.js +++ b/src/_data/music.js @@ -6,11 +6,15 @@ const SUPABASE_URL = process.env.SUPABASE_URL const SUPABASE_KEY = process.env.SUPABASE_KEY const supabase = createClient(SUPABASE_URL, SUPABASE_KEY) -const slugifyString = (str) => slugify(str, { - replacement: '-', - remove: /[#,&,+()$~%.'":*?<>{}]/g, - lower: true, -}) +const sanitizeMediaString = (str) => { + const sanitizedString = str.normalize('NFD').replace(/[\u0300-\u036f\u2010—\.\?\(\)\[\]\{\}]/g, '').replace(/\.{3}/g, '') + + return slugify(sanitizedString, { + replacement: '-', + remove: /[#,&,+()$~%.'":*?<>{}]/g, + lower: true, + }) +} const regionNames = new Intl.DisplayNames(['en'], { type: 'region' }) const getCountryName = (countryCode) => regionNames.of(countryCode.trim()) || countryCode.trim() @@ -91,7 +95,7 @@ const aggregateData = (data, groupByField, groupByType) => { title: item[groupByField], plays: 0, mbid: item['albums']['mbid'], - url: `https://coryd.dev/music/artists/${slugifyString(item['artist_name'])}-${slugifyString(parseCountryField(item['artists']['country']))}`, + url: `https://coryd.dev/music/artists/${sanitizeMediaString(item['artist_name'])}-${sanitizeMediaString(parseCountryField(item['artists']['country']))}`, image: item['albums']?.['image'] || '', timestamp: item['listened_at'], type: groupByType, @@ -102,7 +106,7 @@ const aggregateData = (data, groupByField, groupByType) => { title: item[groupByField], plays: 0, mbid: item[groupByType]?.['mbid'] || '', - url: `https://coryd.dev/music/artists/${slugifyString(item['artist_name'])}-${slugifyString(parseCountryField(item['artists']['country']))}`, + url: `https://coryd.dev/music/artists/${sanitizeMediaString(item['artist_name'])}-${sanitizeMediaString(parseCountryField(item['artists']['country']))}`, image: item[groupByType]?.image || '', type: groupByType, genre: item['artists']?.['genre'] || ''