diff --git a/package-lock.json b/package-lock.json index d593ec8..2fe8de4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,6 @@ "debug": "^4.4.3", "magic-string": "^0.30.21", "picocolors": "^1.1.1", - "vite-prerender-plugin": "^0.5.12", "zimmerframe": "^1.1.4" }, "devDependencies": { @@ -33,11 +32,18 @@ "prettier": "^2.2.1", "simple-git-hooks": "^2.13.1", "typescript": "^5.9.3", - "vite": "^7.2.2" + "vite": "^7.2.2", + "vite-prerender-plugin": "^0.5.12" }, "peerDependencies": { "@babel/core": "7.x", - "vite": "7.x" + "vite": "7.x", + "vite-prerender-plugin": "*" + }, + "peerDependenciesMeta": { + "vite-prerender-plugin": { + "optional": true + } } }, "node_modules/@babel/code-frame": { @@ -1298,7 +1304,9 @@ "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" }, "node_modules/browserslist": { "version": "4.27.0", @@ -1359,9 +1367,11 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -1374,9 +1384,11 @@ } }, "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -1405,6 +1417,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -1418,17 +1432,21 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -1440,9 +1458,11 @@ } }, "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -1462,6 +1482,8 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -1567,6 +1589,8 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } @@ -1603,7 +1627,9 @@ "node_modules/kolorist": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==" + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", @@ -1663,9 +1689,11 @@ } }, "node_modules/node-html-parser": { - "version": "6.1.12", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.12.tgz", - "integrity": "sha512-/bT/Ncmv+fbMGX96XG9g05vFt43m/+SYKIs9oAemQVYyVcZmDAI2Xq/SbNcpOA35eF0Zk2av3Ksf+Xk8Vt8abA==", + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "dev": true, + "license": "MIT", "dependencies": { "css-select": "^5.1.0", "he": "1.2.0" @@ -1681,6 +1709,8 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -1845,6 +1875,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/simple-code-frame/-/simple-code-frame-1.3.0.tgz", "integrity": "sha512-MB4pQmETUBlNs62BBeRjIFGeuy/x6gGKh7+eRUemn1rCFhqo7K+4slPqsyizCbcbYLnaYqaoZ2FWsZ/jN06D8w==", + "dev": true, "license": "MIT", "dependencies": { "kolorist": "^1.6.0" @@ -1862,11 +1893,13 @@ } }, "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">= 8" + "node": ">= 12" } }, "node_modules/source-map-js": { @@ -1882,6 +1915,8 @@ "version": "1.0.0-pre2", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-1.0.0-pre2.tgz", "integrity": "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==", + "dev": true, + "license": "MIT", "engines": { "node": ">=16" } @@ -2031,6 +2066,7 @@ "version": "0.5.12", "resolved": "https://registry.npmjs.org/vite-prerender-plugin/-/vite-prerender-plugin-0.5.12.tgz", "integrity": "sha512-EiwhbMn+flg14EysbLTmZSzq8NGTxhytgK3bf4aGRF1evWLGwZiHiUJ1KZDvbxgKbMf2pG6fJWGEa3UZXOnR1g==", + "dev": true, "license": "MIT", "dependencies": { "kolorist": "^1.8.0", diff --git a/package.json b/package.json index 4d2d3ec..78bb420 100644 --- a/package.json +++ b/package.json @@ -41,12 +41,17 @@ "debug": "^4.4.3", "magic-string": "^0.30.21", "picocolors": "^1.1.1", - "vite-prerender-plugin": "^0.5.12", "zimmerframe": "^1.1.4" }, "peerDependencies": { "@babel/core": "7.x", - "vite": "7.x" + "vite": "7.x", + "vite-prerender-plugin": "*" + }, + "peerDependenciesMeta": { + "vite-prerender-plugin": { + "optional": true + } }, "devDependencies": { "@babel/core": "^7.28.5", @@ -61,7 +66,8 @@ "prettier": "^2.2.1", "simple-git-hooks": "^2.13.1", "typescript": "^5.9.3", - "vite": "^7.2.2" + "vite": "^7.2.2", + "vite-prerender-plugin": "^0.5.12" }, "nano-staged": { "**/*.{js,jsx,ts,tsx,yml,json}": [ diff --git a/src/index.js b/src/index.js index 0790838..1a88bbc 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,5 @@ import prefresh from "@prefresh/vite"; import { createFilter } from "@rollup/pluginutils"; -import { vitePrerenderPlugin } from "vite-prerender-plugin"; import { transformAsync } from "@babel/core"; // @ts-ignore package doesn't ship with declaration files import babelReactJsx from "@babel/plugin-transform-react-jsx"; @@ -14,9 +13,16 @@ import { parseId } from "./utils.js"; /** @import { Plugin, ResolvedConfig } from "vite"; */ /** @import { ParserPlugin } from "@babel/parser"; */ +/** @import { Options as PrerenderPluginOptions } from "vite-prerender-plugin" */ /** @import { preact as PreactPlugin, PreactBabelOptions } from "./index.d.ts" */ +/** @type {(options?: PrerenderPluginOptions) => Plugin[]} */ +let vitePrerenderPlugin; +try { + ({ vitePrerenderPlugin } = await import("vite-prerender-plugin")); +} catch {} + /** * Taken from https://github.com/vitejs/vite/blob/main/packages/plugin-react/src/index.ts * @@ -62,16 +68,6 @@ function preactPlugin({ reactAliasesEnabled = reactAliasesEnabled ?? true; prerender = prerender ?? { enabled: false }; - const prerenderPlugin = vitePrerenderPlugin(prerender); - if (!prerender.previewMiddlewareEnabled) { - const idx = prerenderPlugin.findIndex( - p => p.name == "serve-prerendered-html", - ); - if (idx > -1) { - prerenderPlugin.splice(idx, 1); - } - } - /** @type {Plugin} */ const jsxPlugin = { name: "vite:preact-jsx", @@ -210,7 +206,7 @@ function preactPlugin({ ...(prefreshEnabled ? [prefresh({ include, exclude, parserPlugins: baseParserOptions })] : []), - ...(prerender.enabled ? prerenderPlugin : []), + ...(prerender.enabled ? vitePrerenderPlugin(prerender) : []), ]; }