From 1e5fad390f203f2c1a6e4052967bf2998eebd810 Mon Sep 17 00:00:00 2001 From: Olavi Sau Date: Fri, 27 Sep 2024 13:10:51 +0300 Subject: [PATCH] feat: [1502] Allow resources urls to be transformed --- .../happy-dom/src/browser/types/IBrowserSettings.ts | 6 ++++++ .../src/browser/types/IOptionalBrowserSettings.ts | 6 ++++++ packages/happy-dom/src/fetch/ResourceFetch.ts | 11 +++++++++++ 3 files changed, 23 insertions(+) diff --git a/packages/happy-dom/src/browser/types/IBrowserSettings.ts b/packages/happy-dom/src/browser/types/IBrowserSettings.ts index ed8bb17ee..1ae878805 100644 --- a/packages/happy-dom/src/browser/types/IBrowserSettings.ts +++ b/packages/happy-dom/src/browser/types/IBrowserSettings.ts @@ -5,6 +5,12 @@ import BrowserNavigationCrossOriginPolicyEnum from '../enums/BrowserNavigationCr * Browser settings. */ export default interface IBrowserSettings { + /** + * Allows resource urls to be transformed. + * Ex: https://www.example.com/assets/index.js -> file:///Users/example-user/Projects/example/dist/assets/index.js + */ + resourceUrlTransformer?: (url: string) => string; + /** Disables JavaScript evaluation. */ disableJavaScriptEvaluation: boolean; diff --git a/packages/happy-dom/src/browser/types/IOptionalBrowserSettings.ts b/packages/happy-dom/src/browser/types/IOptionalBrowserSettings.ts index 33d314eea..9689f55d0 100644 --- a/packages/happy-dom/src/browser/types/IOptionalBrowserSettings.ts +++ b/packages/happy-dom/src/browser/types/IOptionalBrowserSettings.ts @@ -2,6 +2,12 @@ import BrowserErrorCaptureEnum from '../enums/BrowserErrorCaptureEnum.js'; import BrowserNavigationCrossOriginPolicyEnum from '../enums/BrowserNavigationCrossOriginPolicyEnum.js'; export default interface IOptionalBrowserSettings { + /** + * Allows resource urls to be transformed. + * Ex: https://www.example.com/assets/index.js -> file:///Users/example-user/Projects/example/dist/assets/index.js + */ + resourceUrlTransformer?: (url: string) => string; + /** Disables JavaScript evaluation. */ disableJavaScriptEvaluation?: boolean; diff --git a/packages/happy-dom/src/fetch/ResourceFetch.ts b/packages/happy-dom/src/fetch/ResourceFetch.ts index 70a33fa16..3e9cbc803 100644 --- a/packages/happy-dom/src/fetch/ResourceFetch.ts +++ b/packages/happy-dom/src/fetch/ResourceFetch.ts @@ -30,6 +30,12 @@ export default class ResourceFetch { * @returns Response. */ public async fetch(url: string): Promise { + if ( + typeof this.#browserFrame.page.context.browser.settings.resourceUrlTransformer === 'function' + ) { + url = this.#browserFrame.page.context.browser.settings.resourceUrlTransformer(url); + } + const fetch = new Fetch({ browserFrame: this.#browserFrame, window: this.window, @@ -56,6 +62,11 @@ export default class ResourceFetch { * @returns Response. */ public fetchSync(url: string): string { + if ( + typeof this.#browserFrame.page.context.browser.settings.resourceUrlTransformer === 'function' + ) { + url = this.#browserFrame.page.context.browser.settings.resourceUrlTransformer(url); + } const fetch = new SyncFetch({ browserFrame: this.#browserFrame, window: this.window,