From 59d2d0b7278eb51cda869b4b30468b114a62e9a1 Mon Sep 17 00:00:00 2001 From: "vincent.dusautoir" Date: Sat, 12 Jul 2025 18:28:17 +0200 Subject: [PATCH 1/2] fix: Make ipx transform work with a remote base url --- src/providers/ipx.test.ts | 17 +++++++++++++++++ src/providers/ipx.ts | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/providers/ipx.test.ts b/src/providers/ipx.test.ts index c1f6ed8..985d5c7 100644 --- a/src/providers/ipx.test.ts +++ b/src/providers/ipx.test.ts @@ -5,6 +5,8 @@ import { assertEquals } from "jsr:@std/assert"; const absoluteImg = "https://example.com/images/test.jpg"; const img = "/images/test.jpg"; const baseURL = "https://example.com/_ipx"; +const remoteBaseUrl = "https://ipx.example.com"; + Deno.test("ipx extract", async (t) => { await t.step("should extract operations from a URL", () => { @@ -122,4 +124,19 @@ Deno.test("ipx transform", async (t) => { `/_ipx/s_300x200,f_auto/https://example.com/images/test.jpg`, ); }); + + await t.step("should work with ipx as a remote service baseURL", () => { + const result = transform( + absoluteImg, + { + width: 300, + height: 200, + }, + { baseURL: remoteBaseUrl }, + ); + assertEqualIgnoringQueryOrder( + result, + `${remoteBaseUrl}/s_300x200,f_auto/https://example.com/images/test.jpg`, + ); + }); }); diff --git a/src/providers/ipx.ts b/src/providers/ipx.ts index d1fce56..a36d974 100644 --- a/src/providers/ipx.ts +++ b/src/providers/ipx.ts @@ -74,7 +74,7 @@ export const generate: URLGenerator<"ipx"> = ( const baseURL = options?.baseURL ?? "/_ipx"; const url = toUrl(baseURL); - url.pathname = `${url.pathname}/${modifiers}/${ + url.pathname = `${url.pathname === '/' ? '' : url.pathname}/${modifiers}/${ stripLeadingSlash(src.toString()) }`; return toCanonicalUrlString(url); From bd14d3087f75a088948d9d3678657d2ba315dae1 Mon Sep 17 00:00:00 2001 From: "vincent.dusautoir" Date: Sat, 12 Jul 2025 18:34:12 +0200 Subject: [PATCH 2/2] fix: use stripTrailingSlash --- src/providers/ipx.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/providers/ipx.ts b/src/providers/ipx.ts index a36d974..978259a 100644 --- a/src/providers/ipx.ts +++ b/src/providers/ipx.ts @@ -8,6 +8,7 @@ import { import { createOperationsHandlers, stripLeadingSlash, + stripTrailingSlash, toCanonicalUrlString, toUrl, } from "../utils.ts"; @@ -74,7 +75,7 @@ export const generate: URLGenerator<"ipx"> = ( const baseURL = options?.baseURL ?? "/_ipx"; const url = toUrl(baseURL); - url.pathname = `${url.pathname === '/' ? '' : url.pathname}/${modifiers}/${ + url.pathname = `${stripTrailingSlash(url.pathname)}/${modifiers}/${ stripLeadingSlash(src.toString()) }`; return toCanonicalUrlString(url);