From 43c1f0e288a364c75acc4b6bde1d587ccd9b3b53 Mon Sep 17 00:00:00 2001 From: OviiiOne Date: Sat, 1 Aug 2026 22:36:51 +0200 Subject: [PATCH] fix(apple-music): accept user playlist ids containing - and _ Apple Music user playlist ids are prefixed `pl.u-`, but the URL matcher's character class excluded `-` and `_`, truncating `pl.u-pMylgvjCxaX69k` to `pl.u`. The embed iframe then loaded an invalid path and rendered blank. Album ids (numeric) and Apple-curated playlist ids (hex) were unaffected, so the failure only showed up for user playlists. Co-Authored-By: Claude Opus 5 --- .../media/AppleMusicCard/CreateAppleMusicCardModal.svelte | 3 ++- apps/web/src/lib/cards/media/AppleMusicCard/index.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/web/src/lib/cards/media/AppleMusicCard/CreateAppleMusicCardModal.svelte b/apps/web/src/lib/cards/media/AppleMusicCard/CreateAppleMusicCardModal.svelte index 3c9e605..8c7aa32 100644 --- a/apps/web/src/lib/cards/media/AppleMusicCard/CreateAppleMusicCardModal.svelte +++ b/apps/web/src/lib/cards/media/AppleMusicCard/CreateAppleMusicCardModal.svelte @@ -10,7 +10,8 @@ function checkUrl() { errorMessage = ''; - const pattern = /music\.apple\.com\/([a-z]{2})\/(album|playlist)\/[^/]+\/([a-zA-Z0-9.]+)/; + // user playlist ids contain - and _ (e.g. pl.u-8aAVZkzXsjA2r) + const pattern = /music\.apple\.com\/([a-z]{2})\/(album|playlist)\/[^/]+\/([a-zA-Z0-9._-]+)/; const match = item.cardData.href?.match(pattern); if (!match) { diff --git a/apps/web/src/lib/cards/media/AppleMusicCard/index.ts b/apps/web/src/lib/cards/media/AppleMusicCard/index.ts index 8968ef8..0d6c285 100644 --- a/apps/web/src/lib/cards/media/AppleMusicCard/index.ts +++ b/apps/web/src/lib/cards/media/AppleMusicCard/index.ts @@ -57,12 +57,13 @@ export const AppleMusicCardDefinition = { // Examples: // https://music.apple.com/us/album/midnights/1649434004 // https://music.apple.com/us/playlist/todays-hits/pl.f4d106fed2bd41149aaacabb233eb5eb +// https://music.apple.com/us/playlist/my-mix/pl.u-8aAVZkzXsjA2r (user playlist ids contain - and _) function matchAppleMusicUrl( url: string | undefined ): { type: 'album' | 'playlist'; id: string; storefront: string } | null { if (!url) return null; - const pattern = /music\.apple\.com\/([a-z]{2})\/(album|playlist)\/[^/]+\/([a-zA-Z0-9.]+)/; + const pattern = /music\.apple\.com\/([a-z]{2})\/(album|playlist)\/[^/]+\/([a-zA-Z0-9._-]+)/; const match = url.match(pattern); if (match) { -- 2.51.2