diff --git a/packages/rspack-test-tools/tests/hotCases/css/recovery/__snapshots__/web/2.snap.txt b/packages/rspack-test-tools/tests/hotCases/css/recovery/__snapshots__/web/2.snap.txt index bd229802e6b9..8a6273f94072 100644 --- a/packages/rspack-test-tools/tests/hotCases/css/recovery/__snapshots__/web/2.snap.txt +++ b/packages/rspack-test-tools/tests/hotCases/css/recovery/__snapshots__/web/2.snap.txt @@ -6,7 +6,7 @@ ## Asset Files - Bundle: bundle.js - Manifest: main.LAST_HASH.hot-update.json, size: 28 -- Update: main.LAST_HASH.hot-update.js, size: 6774 +- Update: main.LAST_HASH.hot-update.js, size: 6383 ## Manifest @@ -24,7 +24,6 @@ #### Changed Modules - ../../../../../rspack/dist/builtin-plugin/css-extract/hmr/hotModuleReplacement.js -- ../../../../../rspack/dist/builtin-plugin/css-extract/hmr/normalize-url.js - ./index.css?8047 #### Changed Runtime Modules @@ -34,7 +33,7 @@ ```js "use strict"; self["webpackHotUpdate"]('main', { -"../../../../../rspack/dist/builtin-plugin/css-extract/hmr/hotModuleReplacement.js": (function (module, __unused_webpack_exports, __webpack_require__) { +"../../../../../rspack/dist/builtin-plugin/css-extract/hmr/hotModuleReplacement.js": (function (module) { /* eslint-env browser */ /* @@ -42,7 +41,31 @@ self["webpackHotUpdate"]('main', { no-console, func-names */ -const normalizeUrlFn = __webpack_require__(/*! ./normalize-url */ "../../../../../rspack/dist/builtin-plugin/css-extract/hmr/normalize-url.js"); +function normalizeUrl(urlString) { + urlString = urlString.trim(); + if (/^data:/i.test(urlString)) { + return urlString; + } + var protocol = urlString.indexOf("//") !== -1 ? urlString.split("//")[0] + "//" : ""; + var components = urlString.replace(new RegExp(protocol, "i"), "").split("/"); + var host = components[0].toLowerCase().replace(//.$/, ""); + components[0] = ""; + var path = components + .reduce(function (accumulator, item) { + switch (item) { + case "..": + accumulator.pop(); + break; + case ".": + break; + default: + accumulator.push(item); + } + return accumulator; + }, []) + .join("/"); + return protocol + host + path; +} const srcByModuleId = Object.create(null); const noDocument = typeof document === "undefined"; const { forEach } = Array.prototype; @@ -89,7 +112,7 @@ function getCurrentScriptUrl(moduleId) { } return fileMap.split(",").map(mapRule => { const reg = new RegExp(`${filename}/.js$`, "g"); - return normalizeUrlFn(src.replace(reg, `${mapRule.replace(/{fileName}/g, filename)}.css`)); + return normalizeUrl(src.replace(reg, `${mapRule.replace(/{fileName}/g, filename)}.css`)); }); }; } @@ -138,7 +161,7 @@ function updateCss(el, url) { } function getReloadUrl(href, src) { let ret = ""; - href = normalizeUrlFn(href); + href = normalizeUrl(href); src.some(url => { if (href.indexOf(src) > -1) { ret = url; @@ -213,39 +236,6 @@ module.exports = function (moduleId, options) { }; -}), -"../../../../../rspack/dist/builtin-plugin/css-extract/hmr/normalize-url.js": (function (module) { - -function normalizeUrl(pathComponents) { - return pathComponents - .reduce(function (accumulator, item) { - switch (item) { - case "..": - accumulator.pop(); - break; - case ".": - break; - default: - accumulator.push(item); - } - return accumulator; - }, []) - .join("/"); -} -module.exports = function (urlString) { - urlString = urlString.trim(); - if (/^data:/i.test(urlString)) { - return urlString; - } - var protocol = urlString.indexOf("//") !== -1 ? urlString.split("//")[0] + "//" : ""; - var components = urlString.replace(new RegExp(protocol, "i"), "").split("/"); - var host = components[0].toLowerCase().replace(//.$/, ""); - components[0] = ""; - var path = normalizeUrl(components); - return protocol + host + path; -}; - - }), "./index.css?8047": (function (module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); diff --git a/packages/rspack/src/builtin-plugin/css-extract/hmr/hotModuleReplacement.ts b/packages/rspack/src/builtin-plugin/css-extract/hmr/hotModuleReplacement.ts index 29035b0e7065..3822664c482e 100644 --- a/packages/rspack/src/builtin-plugin/css-extract/hmr/hotModuleReplacement.ts +++ b/packages/rspack/src/builtin-plugin/css-extract/hmr/hotModuleReplacement.ts @@ -5,7 +5,38 @@ func-names */ -const normalizeUrlFn = require("./normalize-url"); +function normalizeUrl(urlString: string): string { + urlString = urlString.trim(); + + if (/^data:/i.test(urlString)) { + return urlString; + } + + var protocol = + urlString.indexOf("//") !== -1 ? urlString.split("//")[0] + "//" : ""; + var components = urlString.replace(new RegExp(protocol, "i"), "").split("/"); + var host = components[0].toLowerCase().replace(/\.$/, ""); + + components[0] = ""; + + var path = components + .reduce(function (accumulator: string[], item) { + switch (item) { + case "..": + accumulator.pop(); + break; + case ".": + break; + default: + accumulator.push(item); + } + + return accumulator; + }, []) + .join("/"); + + return protocol + host + path; +} type Option = T | null | undefined; type DebouncedFunction any> = ( @@ -78,7 +109,7 @@ function getCurrentScriptUrl(moduleId: string) { return fileMap.split(",").map(mapRule => { const reg = new RegExp(`${filename}\\.js$`, "g"); - return normalizeUrlFn( + return normalizeUrl( src.replace(reg, `${mapRule.replace(/{fileName}/g, filename)}.css`) ); }); @@ -144,7 +175,7 @@ function updateCss(el: HTMLLinkElement & Record, url?: string) { function getReloadUrl(href: string, src: Array): string { let ret = ""; - href = normalizeUrlFn(href); + href = normalizeUrl(href); src.some(url => { if (href.indexOf(src as unknown as string) > -1) { diff --git a/packages/rspack/src/builtin-plugin/css-extract/hmr/normalize-url.ts b/packages/rspack/src/builtin-plugin/css-extract/hmr/normalize-url.ts index cb6704727ecd..d05d57e2b966 100644 --- a/packages/rspack/src/builtin-plugin/css-extract/hmr/normalize-url.ts +++ b/packages/rspack/src/builtin-plugin/css-extract/hmr/normalize-url.ts @@ -1,21 +1,3 @@ -function normalizeUrl(pathComponents: string[]): string { - return pathComponents - .reduce(function (accumulator: string[], item) { - switch (item) { - case "..": - accumulator.pop(); - break; - case ".": - break; - default: - accumulator.push(item); - } - - return accumulator; - }, []) - .join("/"); -} - module.exports = function (urlString: string): string { urlString = urlString.trim(); @@ -30,7 +12,21 @@ module.exports = function (urlString: string): string { components[0] = ""; - var path = normalizeUrl(components); + var path = components + .reduce(function (accumulator: string[], item) { + switch (item) { + case "..": + accumulator.pop(); + break; + case ".": + break; + default: + accumulator.push(item); + } + + return accumulator; + }, []) + .join("/"); return protocol + host + path; }; diff --git a/tests/plugin-test/css-extract/cases/hmr/expected/main.js b/tests/plugin-test/css-extract/cases/hmr/expected/main.js index 9cfb9fae5ef6..255d5bdb76b9 100644 --- a/tests/plugin-test/css-extract/cases/hmr/expected/main.js +++ b/tests/plugin-test/css-extract/cases/hmr/expected/main.js @@ -1,7 +1,7 @@ (() => { // webpackBootstrap "use strict"; var __webpack_modules__ = ({ -"../../../../../packages/rspack/dist/builtin-plugin/css-extract/hmr/hotModuleReplacement.js": (function (module, __unused_webpack_exports, __webpack_require__) { +"../../../../../packages/rspack/dist/builtin-plugin/css-extract/hmr/hotModuleReplacement.js": (function (module) { /* eslint-env browser */ /* @@ -9,7 +9,31 @@ var __webpack_modules__ = ({ no-console, func-names */ -const normalizeUrlFn = __webpack_require__(/*! ./normalize-url */ "../../../../../packages/rspack/dist/builtin-plugin/css-extract/hmr/normalize-url.js"); +function normalizeUrl(urlString) { + urlString = urlString.trim(); + if (/^data:/i.test(urlString)) { + return urlString; + } + var protocol = urlString.indexOf("//") !== -1 ? urlString.split("//")[0] + "//" : ""; + var components = urlString.replace(new RegExp(protocol, "i"), "").split("/"); + var host = components[0].toLowerCase().replace(/\.$/, ""); + components[0] = ""; + var path = components + .reduce(function (accumulator, item) { + switch (item) { + case "..": + accumulator.pop(); + break; + case ".": + break; + default: + accumulator.push(item); + } + return accumulator; + }, []) + .join("/"); + return protocol + host + path; +} const srcByModuleId = Object.create(null); const noDocument = typeof document === "undefined"; const { forEach } = Array.prototype; @@ -56,7 +80,7 @@ function getCurrentScriptUrl(moduleId) { } return fileMap.split(",").map(mapRule => { const reg = new RegExp(`${filename}\\.js$`, "g"); - return normalizeUrlFn(src.replace(reg, `${mapRule.replace(/{fileName}/g, filename)}.css`)); + return normalizeUrl(src.replace(reg, `${mapRule.replace(/{fileName}/g, filename)}.css`)); }); }; } @@ -105,7 +129,7 @@ function updateCss(el, url) { } function getReloadUrl(href, src) { let ret = ""; - href = normalizeUrlFn(href); + href = normalizeUrl(href); src.some(url => { if (href.indexOf(src) > -1) { ret = url; @@ -180,39 +204,6 @@ module.exports = function (moduleId, options) { }; -}), -"../../../../../packages/rspack/dist/builtin-plugin/css-extract/hmr/normalize-url.js": (function (module) { - -function normalizeUrl(pathComponents) { - return pathComponents - .reduce(function (accumulator, item) { - switch (item) { - case "..": - accumulator.pop(); - break; - case ".": - break; - default: - accumulator.push(item); - } - return accumulator; - }, []) - .join("/"); -} -module.exports = function (urlString) { - urlString = urlString.trim(); - if (/^data:/i.test(urlString)) { - return urlString; - } - var protocol = urlString.indexOf("//") !== -1 ? urlString.split("//")[0] + "//" : ""; - var components = urlString.replace(new RegExp(protocol, "i"), "").split("/"); - var host = components[0].toLowerCase().replace(/\.$/, ""); - components[0] = ""; - var path = normalizeUrl(components); - return protocol + host + path; -}; - - }), "./index.css?f410": (function (module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__);