Skip to content

Commit 5869695

Browse files
Merge remote-tracking branch 'refs/remotes/origin/main'
2 parents 01bca9b + 677cd0b commit 5869695

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

__tests__/replaceCss.spec.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { describe, test, expect } from "vitest"
2+
import { replaceCss } from "../dist/esm/index.js"
3+
4+
describe("Replace Css", () => {
5+
test('It should inline external css and preserve other script attributes', () => {
6+
const outputStyle = `<style rel="stylesheet"></style>`
7+
expect(replaceCss(`<link rel="stylesheet" href="./foo.css">`, "foo.css", "")).toEqual(outputStyle)
8+
expect(replaceCss(`<link rel="stylesheet" href="https://www.base.dir/path/foo.css">`, "foo.css", "")).toEqual(outputStyle)
9+
})
10+
})

__tests__/replaceScript.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@ describe("Replace Script", () => {
55
test("It should inline external scripts and preserve other script attributes", () => {
66
const outputMod = "<script module></script>"
77
expect(replaceScript(`<script module src="./foo.js"></script>`, "foo.js", "")).toEqual(outputMod)
8+
expect(replaceScript(`<script module src="https://www.base.dir/path/foo.js"></script>`, "foo.js", "")).toEqual(outputMod)
89
expect(replaceScript(`<script src="./foo.js" module></script>`, "foo.js", "")).toEqual(outputMod)
10+
expect(replaceScript(`<script src="https://www.base.dir/path/foo.js" module></script>`, "foo.js", "")).toEqual(outputMod)
911
const outAsync = "<script async module></script>"
1012
expect(replaceScript(`<script async src="./foo.js" module></script>`, "foo.js", "")).toEqual(outAsync)
13+
expect(replaceScript(`<script async src="https://www.base.dir/path/foo.js" module></script>`, "foo.js", "")).toEqual(outAsync)
1114
expect(replaceScript(`<script src="./foo.js" async module></script>`, "foo.js", "")).toEqual(outAsync)
15+
expect(replaceScript(`<script src="https://www.base.dir/path/foo.js" async module></script>`, "foo.js", "")).toEqual(outAsync)
1216
const outCrossOrigin = `<script async type="module" crossorigin></script>`
1317
expect(replaceScript(`<script async type="module" crossorigin src="/assets/foo.js"></script>`, "assets/foo.js", "")).toEqual(outCrossOrigin)
18+
expect(replaceScript(`<script async type="module" crossorigin src="https://www.base.dir/path/assets/foo.js"></script>`, "assets/foo.js", "")).toEqual(outCrossOrigin)
1419
const outPolyfill = `<script type="module">`
1520
// Removing polyfill without minification
1621
expect(replaceScript(`<script type="module" crossorigin>(function polyfill() {stuff here\nfoo})();`, "", "", true)).toEqual(outPolyfill)

src/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,17 @@ export type Config = {
2525
const defaultConfig = { useRecommendedBuildConfig: true, removeViteModuleLoader: false, deleteInlinedFiles: true }
2626

2727
export function replaceScript(html: string, scriptFilename: string, scriptCode: string, removeViteModuleLoader = false): string {
28-
const reScript = new RegExp(`<script([^>]*?) src="[./]*${scriptFilename}"([^>]*)></script>`)
28+
const reScript = new RegExp(`<script([^>]*?) src="(.*)?${scriptFilename}"([^>]*)></script>`)
2929
const preloadMarker = /"?__VITE_PRELOAD__"?/g
3030
const newCode = scriptCode.replace(preloadMarker, "void 0").replace(/<(\/script>|!--)/g, '\\x3C$1')
31-
const inlined = html.replace(reScript, (_, beforeSrc, afterSrc) => `<script${beforeSrc}${afterSrc}>${newCode.trim()}</script>`)
31+
const inlined = html.replace(reScript, (_, beforeSrc, _base, afterSrc) => `<script${beforeSrc}${afterSrc}>${newCode.trim()}</script>`)
3232
return removeViteModuleLoader ? _removeViteModuleLoader(inlined) : inlined
3333
}
3434

3535
export function replaceCss(html: string, scriptFilename: string, scriptCode: string): string {
36-
const reStyle = new RegExp(`<link([^>]*?) href="[./]*${scriptFilename}"([^>]*?)>`)
36+
const reStyle = new RegExp(`<link([^>]*?) href="(.*)?${scriptFilename}"([^>]*?)>`)
3737
const newCode = scriptCode.replace(`@charset "UTF-8";`, "")
38-
const inlined = html.replace(reStyle, (_, beforeSrc, afterSrc) => `<style${beforeSrc}${afterSrc}>${newCode.trim()}</style>`);
38+
const inlined = html.replace(reStyle, (_, beforeSrc, _base, afterSrc) => `<style${beforeSrc}${afterSrc}>${newCode.trim()}</style>`);
3939
return inlined
4040
}
4141

0 commit comments

Comments
 (0)