From 72a8744d8ea8614d6a4ce628be07a472efcdba7a Mon Sep 17 00:00:00 2001 From: Jason McKenzie Date: Fri, 15 Sep 2023 17:04:35 +1000 Subject: [PATCH 1/3] Fix default next image loader when src has params --- .../src/images/next-image-default-loader.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/code/frameworks/nextjs/src/images/next-image-default-loader.tsx b/code/frameworks/nextjs/src/images/next-image-default-loader.tsx index 6029390979ac..1d137fdf95fb 100644 --- a/code/frameworks/nextjs/src/images/next-image-default-loader.tsx +++ b/code/frameworks/nextjs/src/images/next-image-default-loader.tsx @@ -24,5 +24,17 @@ export const defaultLoader = ({ src, width, quality }: _NextImage.ImageLoaderPro ); } - return `${src}?w=${width}&q=${quality ?? 75}`; + const [baseUrlAndSearch, hash = ''] = src.split('#'); + const [baseUrl, search = ''] = baseUrlAndSearch.split('?'); + + const params = new URLSearchParams(search); + + if (!params.has('w') && !params.has('q')) { + params.set('w', width.toString()); + params.set('q', (quality ?? 75).toString()); + } + + const prefixedHash = hash ? `#${hash}` : ''; + + return `${baseUrl}?${params.toString()}${prefixedHash}`; }; From 984d1566585fea6a859e712d8266d18baa81f22c Mon Sep 17 00:00:00 2001 From: Jason McKenzie Date: Fri, 15 Sep 2023 22:04:37 +1000 Subject: [PATCH 2/3] Use URL to fix next image loader src params --- .../src/images/next-image-default-loader.tsx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/code/frameworks/nextjs/src/images/next-image-default-loader.tsx b/code/frameworks/nextjs/src/images/next-image-default-loader.tsx index 1d137fdf95fb..8851c279f070 100644 --- a/code/frameworks/nextjs/src/images/next-image-default-loader.tsx +++ b/code/frameworks/nextjs/src/images/next-image-default-loader.tsx @@ -1,6 +1,6 @@ import type * as _NextImage from 'next/image'; -export const defaultLoader = ({ src, width, quality }: _NextImage.ImageLoaderProps) => { +export const defaultLoader = ({ src, width, quality = 75 }: _NextImage.ImageLoaderProps) => { const missingValues = []; if (!src) { missingValues.push('src'); @@ -24,17 +24,16 @@ export const defaultLoader = ({ src, width, quality }: _NextImage.ImageLoaderPro ); } - const [baseUrlAndSearch, hash = ''] = src.split('#'); - const [baseUrl, search = ''] = baseUrlAndSearch.split('?'); + const url = new URL(src, window.location.href); - const params = new URLSearchParams(search); - - if (!params.has('w') && !params.has('q')) { - params.set('w', width.toString()); - params.set('q', (quality ?? 75).toString()); + if (!url.searchParams.has('w') && !url.searchParams.has('q')) { + url.searchParams.set('w', width.toString()); + url.searchParams.set('q', (quality ?? 75).toString()); } - const prefixedHash = hash ? `#${hash}` : ''; + if (!src.startsWith('http://') && !src.startsWith('https://')) { + return url.toString().slice(url.origin.length); + } - return `${baseUrl}?${params.toString()}${prefixedHash}`; + return url.toString(); }; From c4ba76077be80a120b813cbad1de384f3eacca23 Mon Sep 17 00:00:00 2001 From: Jason McKenzie Date: Fri, 15 Sep 2023 22:14:51 +1000 Subject: [PATCH 3/3] Remove double default in next image default loader --- code/frameworks/nextjs/src/images/next-image-default-loader.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/frameworks/nextjs/src/images/next-image-default-loader.tsx b/code/frameworks/nextjs/src/images/next-image-default-loader.tsx index 8851c279f070..c7050914371b 100644 --- a/code/frameworks/nextjs/src/images/next-image-default-loader.tsx +++ b/code/frameworks/nextjs/src/images/next-image-default-loader.tsx @@ -28,7 +28,7 @@ export const defaultLoader = ({ src, width, quality = 75 }: _NextImage.ImageLoad if (!url.searchParams.has('w') && !url.searchParams.has('q')) { url.searchParams.set('w', width.toString()); - url.searchParams.set('q', (quality ?? 75).toString()); + url.searchParams.set('q', quality.toString()); } if (!src.startsWith('http://') && !src.startsWith('https://')) {