From 8f0dbc9974042d9f365772ace0aa8b5b9a23cada Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Jun 2025 01:39:28 +0000 Subject: [PATCH 01/13] fix(deps): lock file maintenance minor/patch updates (#5981) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 607 +++++++++++++++++++------------------- package.json | 20 +- rust/Cargo.lock | 52 ++-- rust/parse_ast/Cargo.toml | 6 +- 4 files changed, 345 insertions(+), 340 deletions(-) diff --git a/package-lock.json b/package-lock.json index aee11d6d1..16f1a091b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,11 +17,11 @@ "devDependencies": { "@codemirror/commands": "^6.8.1", "@codemirror/lang-javascript": "^6.2.4", - "@codemirror/language": "^6.11.0", + "@codemirror/language": "^6.11.1", "@codemirror/search": "^6.5.11", "@codemirror/state": "^6.5.2", - "@codemirror/view": "^6.36.8", - "@eslint/js": "^9.27.0", + "@codemirror/view": "^6.37.1", + "@eslint/js": "^9.28.0", "@inquirer/prompts": "^7.5.3", "@jridgewell/sourcemap-codec": "^1.5.0", "@mermaid-js/mermaid-cli": "^11.4.2", @@ -37,7 +37,7 @@ "@rollup/pluginutils": "^5.1.4", "@shikijs/vitepress-twoslash": "^3.4.2", "@types/mocha": "^10.0.10", - "@types/node": "^18.19.103", + "@types/node": "^18.19.110", "@types/picomatch": "^4.0.0", "@types/semver": "^7.7.0", "@types/yargs-parser": "^21.0.3", @@ -54,9 +54,9 @@ "date-time": "^4.0.0", "es5-shim": "^4.6.7", "es6-shim": "^0.35.8", - "eslint": "^9.27.0", + "eslint": "^9.28.0", "eslint-config-prettier": "^10.1.5", - "eslint-plugin-prettier": "^5.4.0", + "eslint-plugin-prettier": "^5.4.1", "eslint-plugin-unicorn": "^59.0.1", "eslint-plugin-vue": "^10.1.0", "fixturify": "^3.0.0", @@ -66,7 +66,7 @@ "globals": "^16.2.0", "husky": "^9.1.7", "is-reference": "^3.0.3", - "lint-staged": "^16.0.0", + "lint-staged": "^16.1.0", "locate-character": "^3.0.0", "magic-string": "^0.30.17", "mocha": "^11.5.0", @@ -89,13 +89,13 @@ "source-map": "^0.7.4", "source-map-support": "^0.5.21", "systemjs": "^6.15.1", - "terser": "^5.39.2", + "terser": "^5.40.0", "tslib": "^2.8.1", "typescript": "^5.8.3", - "typescript-eslint": "^8.32.1", + "typescript-eslint": "^8.33.1", "vite": "^6.3.5", "vitepress": "^1.6.3", - "vue": "^3.5.15", + "vue": "^3.5.16", "vue-tsc": "^2.2.10", "wasm-pack": "^0.13.1", "yargs-parser": "^21.1.1" @@ -158,41 +158,41 @@ } }, "node_modules/@algolia/client-abtesting": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.25.0.tgz", - "integrity": "sha512-1pfQulNUYNf1Tk/svbfjfkLBS36zsuph6m+B6gDkPEivFmso/XnRgwDvjAx80WNtiHnmeNjIXdF7Gos8+OLHqQ==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.27.0.tgz", + "integrity": "sha512-SITU5umoknxETtw67TxJu9njyMkWiH8pM+Bvw4dzfuIrIAT6Y1rmwV4y0A0didWoT+6xVuammIykbtBMolBcmg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.27.0", + "@algolia/requester-browser-xhr": "5.27.0", + "@algolia/requester-fetch": "5.27.0", + "@algolia/requester-node-http": "5.27.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.25.0.tgz", - "integrity": "sha512-AFbG6VDJX/o2vDd9hqncj1B6B4Tulk61mY0pzTtzKClyTDlNP0xaUiEKhl6E7KO9I/x0FJF5tDCm0Hn6v5x18A==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.27.0.tgz", + "integrity": "sha512-go1b9qIZK5vYEQ7jD2bsfhhhVsoh9cFxQ5xF8TzTsg2WOCZR3O92oXCkq15SOK0ngJfqDU6a/k0oZ4KuEnih1Q==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.27.0", + "@algolia/requester-browser-xhr": "5.27.0", + "@algolia/requester-fetch": "5.27.0", + "@algolia/requester-node-http": "5.27.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.25.0.tgz", - "integrity": "sha512-il1zS/+Rc6la6RaCdSZ2YbJnkQC6W1wiBO8+SH+DE6CPMWBU6iDVzH0sCKSAtMWl9WBxoN6MhNjGBnCv9Yy2bA==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.27.0.tgz", + "integrity": "sha512-tnFOzdNuMzsz93kOClj3fKfuYoF3oYaEB5bggULSj075GJ7HUNedBEm7a6ScrjtnOaOtipbnT7veUpHA4o4wEQ==", "dev": true, "license": "MIT", "engines": { @@ -200,151 +200,151 @@ } }, "node_modules/@algolia/client-insights": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.25.0.tgz", - "integrity": "sha512-blbjrUH1siZNfyCGeq0iLQu00w3a4fBXm0WRIM0V8alcAPo7rWjLbMJMrfBtzL9X5ic6wgxVpDADXduGtdrnkw==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.27.0.tgz", + "integrity": "sha512-y1qgw39qZijjQBXrqZTiwK1cWgWGRiLpJNWBv9w36nVMKfl9kInrfsYmdBAfmlhVgF/+Woe0y1jQ7pa4HyShAw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.27.0", + "@algolia/requester-browser-xhr": "5.27.0", + "@algolia/requester-fetch": "5.27.0", + "@algolia/requester-node-http": "5.27.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.25.0.tgz", - "integrity": "sha512-aywoEuu1NxChBcHZ1pWaat0Plw7A8jDMwjgRJ00Mcl7wGlwuPt5dJ/LTNcg3McsEUbs2MBNmw0ignXBw9Tbgow==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.27.0.tgz", + "integrity": "sha512-XluG9qPZKEbiLoIfXTKbABsWDNOMPx0t6T2ImJTTeuX+U/zBdmfcqqgcgkqXp+vbXof/XX/4of9Eqo1JaqEmKw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.27.0", + "@algolia/requester-browser-xhr": "5.27.0", + "@algolia/requester-fetch": "5.27.0", + "@algolia/requester-node-http": "5.27.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.25.0.tgz", - "integrity": "sha512-a/W2z6XWKjKjIW1QQQV8PTTj1TXtaKx79uR3NGBdBdGvVdt24KzGAaN7sCr5oP8DW4D3cJt44wp2OY/fZcPAVA==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.27.0.tgz", + "integrity": "sha512-V8/To+SsAl2sdw2AAjeLJuCW1L+xpz+LAGerJK7HKqHzE5yQhWmIWZTzqYQcojkii4iBMYn0y3+uReWqT8XVSQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.27.0", + "@algolia/requester-browser-xhr": "5.27.0", + "@algolia/requester-fetch": "5.27.0", + "@algolia/requester-node-http": "5.27.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.25.0.tgz", - "integrity": "sha512-9rUYcMIBOrCtYiLX49djyzxqdK9Dya/6Z/8sebPn94BekT+KLOpaZCuc6s0Fpfq7nx5J6YY5LIVFQrtioK9u0g==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.27.0.tgz", + "integrity": "sha512-EJJ7WmvmUXZdchueKFCK8UZFyLqy4Hz64snNp0cTc7c0MKaSeDGYEDxVsIJKp15r7ORaoGxSyS4y6BGZMXYuCg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.27.0", + "@algolia/requester-browser-xhr": "5.27.0", + "@algolia/requester-fetch": "5.27.0", + "@algolia/requester-node-http": "5.27.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.25.0.tgz", - "integrity": "sha512-jJeH/Hk+k17Vkokf02lkfYE4A+EJX+UgnMhTLR/Mb+d1ya5WhE+po8p5a/Nxb6lo9OLCRl6w3Hmk1TX1e9gVbQ==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.27.0.tgz", + "integrity": "sha512-xNCyWeqpmEo4EdmpG57Fs1fJIQcPwt5NnJ6MBdXnUdMVXF4f5PHgza+HQWQQcYpCsune96jfmR0v7us6gRIlCw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.27.0", + "@algolia/requester-browser-xhr": "5.27.0", + "@algolia/requester-fetch": "5.27.0", + "@algolia/requester-node-http": "5.27.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.25.0.tgz", - "integrity": "sha512-Ls3i1AehJ0C6xaHe7kK9vPmzImOn5zBg7Kzj8tRYIcmCWVyuuFwCIsbuIIz/qzUf1FPSWmw0TZrGeTumk2fqXg==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.27.0.tgz", + "integrity": "sha512-P0NDiEFyt9UYQLBI0IQocIT7xHpjMpoFN3UDeerbztlkH9HdqT0GGh1SHYmNWpbMWIGWhSJTtz6kSIWvFu4+pw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.27.0", + "@algolia/requester-browser-xhr": "5.27.0", + "@algolia/requester-fetch": "5.27.0", + "@algolia/requester-node-http": "5.27.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.25.0.tgz", - "integrity": "sha512-79sMdHpiRLXVxSjgw7Pt4R1aNUHxFLHiaTDnN2MQjHwJ1+o3wSseb55T9VXU4kqy3m7TUme3pyRhLk5ip/S4Mw==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.27.0.tgz", + "integrity": "sha512-cqfTMF1d1cc7hg0vITNAFxJZas7MJ4Obc36WwkKpY23NOtGb+4tH9X7UKlQa2PmTgbXIANoJ/DAQTeiVlD2I4Q==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-common": "5.27.0", + "@algolia/requester-browser-xhr": "5.27.0", + "@algolia/requester-fetch": "5.27.0", + "@algolia/requester-node-http": "5.27.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.25.0.tgz", - "integrity": "sha512-JLaF23p1SOPBmfEqozUAgKHQrGl3z/Z5RHbggBu6s07QqXXcazEsub5VLonCxGVqTv6a61AAPr8J1G5HgGGjEw==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.27.0.tgz", + "integrity": "sha512-ErenYTcXl16wYXtf0pxLl9KLVxIztuehqXHfW9nNsD8mz9OX42HbXuPzT7y6JcPiWJpc/UU/LY5wBTB65vsEUg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.25.0" + "@algolia/client-common": "5.27.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.25.0.tgz", - "integrity": "sha512-rtzXwqzFi1edkOF6sXxq+HhmRKDy7tz84u0o5t1fXwz0cwx+cjpmxu/6OQKTdOJFS92JUYHsG51Iunie7xbqfQ==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.27.0.tgz", + "integrity": "sha512-CNOvmXsVi+IvT7z1d+6X7FveVkgEQwTNgipjQCHTIbF9KSMfZR7tUsJC+NpELrm10ALdOMauah84ybs9rw1cKQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.25.0" + "@algolia/client-common": "5.27.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.25.0.tgz", - "integrity": "sha512-ZO0UKvDyEFvyeJQX0gmZDQEvhLZ2X10K+ps6hViMo1HgE2V8em00SwNsQ+7E/52a+YiBkVWX61pJJJE44juDMQ==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.27.0.tgz", + "integrity": "sha512-Nx9EdLYZDsaYFTthqmc0XcVvsx6jqeEX8fNiYOB5i2HboQwl8pJPj1jFhGqoGd0KG7KFR+sdPO5/e0EDDAru2Q==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.25.0" + "@algolia/client-common": "5.27.0" }, "engines": { "node": ">= 14.0.0" @@ -417,9 +417,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.3.tgz", - "integrity": "sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", + "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", "dev": true, "license": "MIT", "engines": { @@ -427,9 +427,9 @@ } }, "node_modules/@babel/core": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.3.tgz", - "integrity": "sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", + "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", "dev": true, "license": "MIT", "dependencies": { @@ -438,10 +438,10 @@ "@babel/generator": "^7.27.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.3", - "@babel/parser": "^7.27.3", + "@babel/helpers": "^7.27.4", + "@babel/parser": "^7.27.4", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.3", + "@babel/traverse": "^7.27.4", "@babel/types": "^7.27.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -465,13 +465,13 @@ "license": "MIT" }, "node_modules/@babel/generator": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.3.tgz", - "integrity": "sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.3", + "@babel/parser": "^7.27.5", "@babel/types": "^7.27.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", @@ -561,23 +561,23 @@ } }, "node_modules/@babel/helpers": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.3.tgz", - "integrity": "sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3" + "@babel/types": "^7.27.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.3.tgz", - "integrity": "sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==", + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", "dev": true, "license": "MIT", "dependencies": { @@ -606,15 +606,15 @@ } }, "node_modules/@babel/traverse": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.3.tgz", - "integrity": "sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.3", + "@babel/parser": "^7.27.4", "@babel/template": "^7.27.2", "@babel/types": "^7.27.3", "debug": "^4.3.1", @@ -635,9 +635,9 @@ } }, "node_modules/@babel/types": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz", - "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==", + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -742,9 +742,9 @@ } }, "node_modules/@codemirror/language": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.0.tgz", - "integrity": "sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==", + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.1.tgz", + "integrity": "sha512-5kS1U7emOGV84vxC+ruBty5sUgcD0te6dyupyRVG2zaSjhTDM73LhVKUtVwiqSe6QwmEoA4SCiU8AKPFyumAWQ==", "dev": true, "license": "MIT", "dependencies": { @@ -791,13 +791,14 @@ } }, "node_modules/@codemirror/view": { - "version": "6.37.0", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.37.0.tgz", - "integrity": "sha512-ghHIeRGfWB8h9Tc3sMdr7D5zp4sZvlCzG36Xjdh2ymmfAwvSaCJAAsL3HLyLEnHcE953+5Uox1bx5OS+YCW/7Q==", + "version": "6.37.1", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.37.1.tgz", + "integrity": "sha512-Qy4CAUwngy/VQkEz0XzMKVRcckQuqLYWKqVpDDDghBe5FSXSqfVrJn49nw3ePZHxRUz4nRmb05Lgi+9csWo4eg==", "dev": true, "license": "MIT", "dependencies": { "@codemirror/state": "^6.5.0", + "crelt": "^1.0.6", "style-mod": "^4.1.0", "w3c-keyname": "^2.2.4" } @@ -1506,9 +1507,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.27.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz", - "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==", + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz", + "integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==", "dev": true, "license": "MIT", "engines": { @@ -1543,9 +1544,9 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz", - "integrity": "sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.1.tgz", + "integrity": "sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==", "dev": true, "license": "MIT", "dependencies": { @@ -1553,13 +1554,13 @@ } }, "node_modules/@floating-ui/dom": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.0.tgz", - "integrity": "sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.1.tgz", + "integrity": "sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ==", "dev": true, "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.0", + "@floating-ui/core": "^1.7.1", "@floating-ui/utils": "^0.2.9" } }, @@ -1721,9 +1722,9 @@ } }, "node_modules/@iconify-json/simple-icons": { - "version": "1.2.36", - "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.36.tgz", - "integrity": "sha512-ZMpVdoW/7hhbt2aHVSvudjH8eSVNNjKkAAjwAQHgiuPUiIfbvNakVin+H9uhUz4N9TbDT/nanzV/4Slb+6dDXw==", + "version": "1.2.37", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.37.tgz", + "integrity": "sha512-jZwTBznpYVDYKWyAuRpepPpCiHScVrX6f8WRX8ReX6pdii99LYVHwJywKcH2excWQrWmBomC9nkxGlEKzXZ/wQ==", "dev": true, "license": "CC0-1.0", "dependencies": { @@ -2500,9 +2501,9 @@ } }, "node_modules/@pkgr/core": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz", - "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz", + "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==", "dev": true, "license": "MIT", "engines": { @@ -3036,59 +3037,59 @@ ] }, "node_modules/@shikijs/core": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.4.2.tgz", - "integrity": "sha512-AG8vnSi1W2pbgR2B911EfGqtLE9c4hQBYkv/x7Z+Kt0VxhgQKcW7UNDVYsu9YxwV6u+OJrvdJrMq6DNWoBjihQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.6.0.tgz", + "integrity": "sha512-9By7Xb3olEX0o6UeJyPLI1PE1scC4d3wcVepvtv2xbuN9/IThYN4Wcwh24rcFeASzPam11MCq8yQpwwzCgSBRw==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.4.2", + "@shikijs/types": "3.6.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "node_modules/@shikijs/engine-javascript": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.4.2.tgz", - "integrity": "sha512-1/adJbSMBOkpScCE/SB6XkjJU17ANln3Wky7lOmrnpl+zBdQ1qXUJg2GXTYVHRq+2j3hd1DesmElTXYDgtfSOQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.6.0.tgz", + "integrity": "sha512-7YnLhZG/TU05IHMG14QaLvTW/9WiK8SEYafceccHUSXs2Qr5vJibUwsDfXDLmRi0zHdzsxrGKpSX6hnqe0k8nA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.4.2", + "@shikijs/types": "3.6.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.3" } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.4.2.tgz", - "integrity": "sha512-zcZKMnNndgRa3ORja6Iemsr3DrLtkX3cAF7lTJkdMB6v9alhlBsX9uNiCpqofNrXOvpA3h6lHcLJxgCIhVOU5Q==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.6.0.tgz", + "integrity": "sha512-nmOhIZ9yT3Grd+2plmW/d8+vZ2pcQmo/UnVwXMUXAKTXdi+LK0S08Ancrz5tQQPkxvjBalpMW2aKvwXfelauvA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.4.2", + "@shikijs/types": "3.6.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@shikijs/langs": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.4.2.tgz", - "integrity": "sha512-H6azIAM+OXD98yztIfs/KH5H4PU39t+SREhmM8LaNXyUrqj2mx+zVkr8MWYqjceSjDw9I1jawm1WdFqU806rMA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.6.0.tgz", + "integrity": "sha512-IdZkQJaLBu1LCYCwkr30hNuSDfllOT8RWYVZK1tD2J03DkiagYKRxj/pDSl8Didml3xxuyzUjgtioInwEQM/TA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.4.2" + "@shikijs/types": "3.6.0" } }, "node_modules/@shikijs/themes": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.4.2.tgz", - "integrity": "sha512-qAEuAQh+brd8Jyej2UDDf+b4V2g1Rm8aBIdvt32XhDPrHvDkEnpb7Kzc9hSuHUxz0Iuflmq7elaDuQAP9bHIhg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.6.0.tgz", + "integrity": "sha512-Fq2j4nWr1DF4drvmhqKq8x5vVQ27VncF8XZMBuHuQMZvUSS3NBgpqfwz/FoGe36+W6PvniZ1yDlg2d4kmYDU6w==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.4.2" + "@shikijs/types": "3.6.0" } }, "node_modules/@shikijs/transformers": { @@ -3164,14 +3165,14 @@ } }, "node_modules/@shikijs/twoslash": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.4.2.tgz", - "integrity": "sha512-zRNPmi2lA8o+k7UQfmbPwH2jPvfW9OrgpsO4OUOM+8QTxrepFU9TNF8vNcxZEW5cbishQkJrV19cI9Zk3cb5aQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.6.0.tgz", + "integrity": "sha512-AxRxLWtmrVftwxN/2hSL6Hym+bannS+zuUEXpbNuo6BpG4jHTM0KEkICEH3B3Gm5ZNzGdI74NdDiAqAZ6WPJuQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "3.4.2", - "@shikijs/types": "3.4.2", + "@shikijs/core": "3.6.0", + "@shikijs/types": "3.6.0", "twoslash": "^0.3.1" }, "peerDependencies": { @@ -3179,9 +3180,9 @@ } }, "node_modules/@shikijs/types": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.4.2.tgz", - "integrity": "sha512-zHC1l7L+eQlDXLnxvM9R91Efh2V4+rN3oMVS2swCBssbj2U/FBwybD1eeLaq8yl/iwT+zih8iUbTBCgGZOYlVg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.6.0.tgz", + "integrity": "sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==", "dev": true, "license": "MIT", "dependencies": { @@ -3190,9 +3191,9 @@ } }, "node_modules/@shikijs/vitepress-twoslash": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-3.4.2.tgz", - "integrity": "sha512-irVhypyX0vs79S00buqBGYeBJnBtBV50nqppPcKz3TiGlaWxH3BqcCLbJ6cl39N1hxzzuI51SVQv21SbjfsCBA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-3.6.0.tgz", + "integrity": "sha512-pUoRj98UDV41CxfxPysrBryc1/1WdUL93ogcD/s156i4XcujnCfJJc+y5vR3W5Nc1R31VUacwWsI8HhaRRS/uA==", "dev": true, "license": "MIT", "dependencies": { @@ -3201,10 +3202,10 @@ "mdast-util-from-markdown": "^2.0.2", "mdast-util-gfm": "^3.1.0", "mdast-util-to-hast": "^13.2.0", - "shiki": "3.4.2", + "shiki": "3.6.0", "twoslash": "^0.3.1", "twoslash-vue": "^0.3.1", - "vue": "^3.5.14" + "vue": "^3.5.16" } }, "node_modules/@shikijs/vscode-textmate": { @@ -3686,9 +3687,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "18.19.107", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.107.tgz", - "integrity": "sha512-uvHN/vnsPj8hJWaqXUjT59LKYh0RlZXsdYa4CGz4R9aFGePPsUPN0xlHrDzOset937H2TunFJ8SwPCX69y9qhA==", + "version": "18.19.111", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.111.tgz", + "integrity": "sha512-90sGdgA+QLJr1F9X79tQuEut0gEYIfkX9pydI4XGRgvFo9g2JWswefI+WUSUHPYVBHYSEfTEqBxA5hQvAZB3Mw==", "dev": true, "license": "MIT", "dependencies": { @@ -3779,17 +3780,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz", - "integrity": "sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz", + "integrity": "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.33.0", - "@typescript-eslint/type-utils": "8.33.0", - "@typescript-eslint/utils": "8.33.0", - "@typescript-eslint/visitor-keys": "8.33.0", + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/type-utils": "8.33.1", + "@typescript-eslint/utils": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -3803,15 +3804,15 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.33.0", + "@typescript-eslint/parser": "^8.33.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", - "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { @@ -3819,16 +3820,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.0.tgz", - "integrity": "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", + "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.33.0", - "@typescript-eslint/types": "8.33.0", - "@typescript-eslint/typescript-estree": "8.33.0", - "@typescript-eslint/visitor-keys": "8.33.0", + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/typescript-estree": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", "debug": "^4.3.4" }, "engines": { @@ -3844,14 +3845,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz", - "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", + "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.33.0", - "@typescript-eslint/types": "^8.33.0", + "@typescript-eslint/tsconfig-utils": "^8.33.1", + "@typescript-eslint/types": "^8.33.1", "debug": "^4.3.4" }, "engines": { @@ -3860,17 +3861,20 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz", - "integrity": "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", + "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.33.0", - "@typescript-eslint/visitor-keys": "8.33.0" + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3881,9 +3885,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz", - "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", + "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", "dev": true, "license": "MIT", "engines": { @@ -3898,14 +3902,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.0.tgz", - "integrity": "sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz", + "integrity": "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.33.0", - "@typescript-eslint/utils": "8.33.0", + "@typescript-eslint/typescript-estree": "8.33.1", + "@typescript-eslint/utils": "8.33.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -3922,9 +3926,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz", - "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", + "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", "dev": true, "license": "MIT", "engines": { @@ -3936,16 +3940,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz", - "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", + "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.33.0", - "@typescript-eslint/tsconfig-utils": "8.33.0", - "@typescript-eslint/types": "8.33.0", - "@typescript-eslint/visitor-keys": "8.33.0", + "@typescript-eslint/project-service": "8.33.1", + "@typescript-eslint/tsconfig-utils": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/visitor-keys": "8.33.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -3965,16 +3969,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.0.tgz", - "integrity": "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.1.tgz", + "integrity": "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.33.0", - "@typescript-eslint/types": "8.33.0", - "@typescript-eslint/typescript-estree": "8.33.0" + "@typescript-eslint/scope-manager": "8.33.1", + "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/typescript-estree": "8.33.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3989,13 +3993,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz", - "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", + "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.33.0", + "@typescript-eslint/types": "8.33.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -4618,25 +4622,25 @@ } }, "node_modules/algoliasearch": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.25.0.tgz", - "integrity": "sha512-n73BVorL4HIwKlfJKb4SEzAYkR3Buwfwbh+MYxg2mloFph2fFGV58E90QTzdbfzWrLn4HE5Czx/WTjI8fcHaMg==", + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.27.0.tgz", + "integrity": "sha512-2PvAgvxxJzA3+dB+ERfS2JPdvUsxNf89Cc2GF5iCcFupTULOwmbfinvqrC4Qj9nHJJDNf494NqEN/1f9177ZTQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-abtesting": "5.25.0", - "@algolia/client-analytics": "5.25.0", - "@algolia/client-common": "5.25.0", - "@algolia/client-insights": "5.25.0", - "@algolia/client-personalization": "5.25.0", - "@algolia/client-query-suggestions": "5.25.0", - "@algolia/client-search": "5.25.0", - "@algolia/ingestion": "1.25.0", - "@algolia/monitoring": "1.25.0", - "@algolia/recommend": "5.25.0", - "@algolia/requester-browser-xhr": "5.25.0", - "@algolia/requester-fetch": "5.25.0", - "@algolia/requester-node-http": "5.25.0" + "@algolia/client-abtesting": "5.27.0", + "@algolia/client-analytics": "5.27.0", + "@algolia/client-common": "5.27.0", + "@algolia/client-insights": "5.27.0", + "@algolia/client-personalization": "5.27.0", + "@algolia/client-query-suggestions": "5.27.0", + "@algolia/client-search": "5.27.0", + "@algolia/ingestion": "1.27.0", + "@algolia/monitoring": "1.27.0", + "@algolia/recommend": "5.27.0", + "@algolia/requester-browser-xhr": "5.27.0", + "@algolia/requester-fetch": "5.27.0", + "@algolia/requester-node-http": "5.27.0" }, "engines": { "node": ">= 14.0.0" @@ -5309,9 +5313,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001720", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz", - "integrity": "sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==", + "version": "1.0.30001721", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz", + "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==", "dev": true, "funding": [ { @@ -6839,9 +6843,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.161", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.161.tgz", - "integrity": "sha512-hwtetwfKNZo/UlwHIVBlKZVdy7o8bIZxxKs0Mv/ROPiQQQmDgdm5a+KvKtBsxM8ZjFzTaCeLoodZ8jiBE3o9rA==", + "version": "1.5.165", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz", + "integrity": "sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw==", "dev": true, "license": "ISC" }, @@ -7114,9 +7118,9 @@ } }, "node_modules/eslint": { - "version": "9.27.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz", - "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==", + "version": "9.28.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz", + "integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7126,7 +7130,7 @@ "@eslint/config-helpers": "^0.2.1", "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.27.0", + "@eslint/js": "9.28.0", "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -7191,14 +7195,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz", - "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz", + "integrity": "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==", "dev": true, "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.11.0" + "synckit": "^0.11.7" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -8012,15 +8016,16 @@ } }, "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -11760,9 +11765,9 @@ } }, "node_modules/pinia": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.2.tgz", - "integrity": "sha512-sH2JK3wNY809JOeiiURUR0wehJ9/gd9qFN2Y828jCbxEzKEmEt0pzCXwqiSTfuRsK9vQsOflSdnbdBOGrhtn+g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.3.tgz", + "integrity": "sha512-ttXO/InUULUXkMHpTdp9Fj4hLpD/2AoJdmAbAeW2yu1iy1k+pkFekQXw5VpC0/5p51IOR/jDaDRfRWRnMMsGOA==", "dev": true, "license": "MIT", "dependencies": { @@ -13061,9 +13066,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "dev": true, "license": "MIT", "engines": { @@ -13093,18 +13098,18 @@ } }, "node_modules/shiki": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.4.2.tgz", - "integrity": "sha512-wuxzZzQG8kvZndD7nustrNFIKYJ1jJoWIPaBpVe2+KHSvtzMi4SBjOxrigs8qeqce/l3U0cwiC+VAkLKSunHQQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.6.0.tgz", + "integrity": "sha512-tKn/Y0MGBTffQoklaATXmTqDU02zx8NYBGQ+F6gy87/YjKbizcLd+Cybh/0ZtOBX9r1NEnAy/GTRDKtOsc1L9w==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "3.4.2", - "@shikijs/engine-javascript": "3.4.2", - "@shikijs/engine-oniguruma": "3.4.2", - "@shikijs/langs": "3.4.2", - "@shikijs/themes": "3.4.2", - "@shikijs/types": "3.4.2", + "@shikijs/core": "3.6.0", + "@shikijs/engine-javascript": "3.6.0", + "@shikijs/engine-oniguruma": "3.6.0", + "@shikijs/langs": "3.6.0", + "@shikijs/themes": "3.6.0", + "@shikijs/types": "3.6.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } @@ -13441,9 +13446,9 @@ "peer": true }, "node_modules/streamx": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", - "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz", + "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==", "dev": true, "license": "MIT", "peer": true, @@ -13733,9 +13738,9 @@ } }, "node_modules/synckit": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.7.tgz", - "integrity": "sha512-/5aUeiRPqmY0CRTJ+iVWfOOMHWTDh8JAIuNF1A6nZ2/RdCNWwKaUrO5Qw5ephLK6dYa7NclYBI0ahdgUECvdhA==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz", + "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==", "dev": true, "license": "MIT", "dependencies": { @@ -13878,9 +13883,9 @@ "license": "ISC" }, "node_modules/terser": { - "version": "5.40.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.40.0.tgz", - "integrity": "sha512-cfeKl/jjwSR5ar7d0FGmave9hFGJT8obyo0z+CrQOylLDbk7X81nPU6vq9VORa5jU30SkDnT2FXjLbR8HLP+xA==", + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.41.0.tgz", + "integrity": "sha512-H406eLPXpZbAX14+B8psIuvIr8+3c+2hkuYzpMkoE0ij+NdsVATbA78vb8neA/eqrj7rywa2pIkdmWRsXW6wmw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -14294,15 +14299,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.0.tgz", - "integrity": "sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==", + "version": "8.33.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.1.tgz", + "integrity": "sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.33.0", - "@typescript-eslint/parser": "8.33.0", - "@typescript-eslint/utils": "8.33.0" + "@typescript-eslint/eslint-plugin": "8.33.1", + "@typescript-eslint/parser": "8.33.1", + "@typescript-eslint/utils": "8.33.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -15006,9 +15011,9 @@ } }, "node_modules/vscode-css-languageservice": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.5.tgz", - "integrity": "sha512-ehEIMXYPYEz/5Svi2raL9OKLpBt5dSAdoCFoLpo0TVFKrVpDemyuQwS3c3D552z/qQCg3pMp8oOLMObY6M3ajQ==", + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.6.tgz", + "integrity": "sha512-fU4h8mT3KlvfRcbF74v/M+Gzbligav6QMx4AD/7CbclWPYOpGb9kgIswfpZVJbIcOEJJACI9iYizkNwdiAqlHw==", "dev": true, "license": "MIT", "dependencies": { @@ -15019,9 +15024,9 @@ } }, "node_modules/vscode-html-languageservice": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.4.0.tgz", - "integrity": "sha512-9/cbc90BSYCghmHI7/VbWettHZdC7WYpz2g5gBK6UDUI1MkZbM773Q12uAYJx9jzAiNHPpyo6KzcwmcnugncAQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.5.0.tgz", + "integrity": "sha512-No6Er2P2L8IsXDnUFlp0bP4f2sdkJv+zJLZYFhtEQIp+2xNfxY8WYkhSxLJ/7bZhuV/aU55lmGSSHBVxSGer3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -15032,9 +15037,9 @@ } }, "node_modules/vscode-json-languageservice": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.5.0.tgz", - "integrity": "sha512-JchBzp8ArzhCVpRS/LT4wzEEvwHXIUEdZD064cGTI4RVs34rNCZXPUguIYSfGBcHH1GV79ufPcfy3Pd8+ukbKw==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-5.6.0.tgz", + "integrity": "sha512-w1dv0nEoFxaNDq0PlYleYnlM4sFYXtFNZxaGGYy9nsCidXqHMh4RFHqld6XkFOhxs7hRBpK1QuXlH9OFDkTyfg==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 1346a35e7..007cdf4ff 100644 --- a/package.json +++ b/package.json @@ -119,11 +119,11 @@ "devDependencies": { "@codemirror/commands": "^6.8.1", "@codemirror/lang-javascript": "^6.2.4", - "@codemirror/language": "^6.11.0", + "@codemirror/language": "^6.11.1", "@codemirror/search": "^6.5.11", "@codemirror/state": "^6.5.2", - "@codemirror/view": "^6.36.8", - "@eslint/js": "^9.27.0", + "@codemirror/view": "^6.37.1", + "@eslint/js": "^9.28.0", "@inquirer/prompts": "^7.5.3", "@jridgewell/sourcemap-codec": "^1.5.0", "@mermaid-js/mermaid-cli": "^11.4.2", @@ -139,7 +139,7 @@ "@rollup/pluginutils": "^5.1.4", "@shikijs/vitepress-twoslash": "^3.4.2", "@types/mocha": "^10.0.10", - "@types/node": "^18.19.103", + "@types/node": "^18.19.110", "@types/picomatch": "^4.0.0", "@types/semver": "^7.7.0", "@types/yargs-parser": "^21.0.3", @@ -156,9 +156,9 @@ "date-time": "^4.0.0", "es5-shim": "^4.6.7", "es6-shim": "^0.35.8", - "eslint": "^9.27.0", + "eslint": "^9.28.0", "eslint-config-prettier": "^10.1.5", - "eslint-plugin-prettier": "^5.4.0", + "eslint-plugin-prettier": "^5.4.1", "eslint-plugin-unicorn": "^59.0.1", "eslint-plugin-vue": "^10.1.0", "fixturify": "^3.0.0", @@ -168,7 +168,7 @@ "globals": "^16.2.0", "husky": "^9.1.7", "is-reference": "^3.0.3", - "lint-staged": "^16.0.0", + "lint-staged": "^16.1.0", "locate-character": "^3.0.0", "magic-string": "^0.30.17", "mocha": "^11.5.0", @@ -191,13 +191,13 @@ "source-map": "^0.7.4", "source-map-support": "^0.5.21", "systemjs": "^6.15.1", - "terser": "^5.39.2", + "terser": "^5.40.0", "tslib": "^2.8.1", "typescript": "^5.8.3", - "typescript-eslint": "^8.32.1", + "typescript-eslint": "^8.33.1", "vite": "^6.3.5", "vitepress": "^1.6.3", - "vue": "^3.5.15", + "vue": "^3.5.16", "vue-tsc": "^2.2.10", "wasm-pack": "^0.13.1", "yargs-parser": "^21.1.1" diff --git a/rust/Cargo.lock b/rust/Cargo.lock index e168a0b64..5c262fbce 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -149,9 +149,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" dependencies = [ "allocator-api2", ] @@ -167,9 +167,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.24" +version = "1.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16595d3be041c03b09d08d0858631facccee9221e579704070e6e9e4915d3bc7" +checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" dependencies = [ "shlex", ] @@ -348,9 +348,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.9" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "f154ce46856750ed433c8649605bf7ed2de3bc35fd9d2a9f30cddd873c80cb08" [[package]] name = "hstr" @@ -596,9 +596,9 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03acbfa4f156a32188bfa09b86dc11a431b5725253fc1fc6f6df5bed273382c4" +checksum = "44e0e3177307063d3e7e55b7dd7b648cca9d7f46daa35422c0d98cc2bf48c2c1" [[package]] name = "napi-derive" @@ -675,9 +675,9 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ "hermit-abi", "libc", @@ -1053,9 +1053,9 @@ dependencies = [ [[package]] name = "sourcemap" -version = "9.2.1" +version = "9.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdee719193ae5c919a3ee43f64c2c0dd87f9b9a451d67918a2a5ec2e3c70561c" +checksum = "e22afbcb92ce02d23815b9795523c005cb9d3c214f8b7a66318541c240ea7935" dependencies = [ "base64-simd", "bitvec", @@ -1134,9 +1134,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "11.0.0" +version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "209e700a12f0fccd72db3bac7a751e631ef777d543c9e86247e9366b11e30a27" +checksum = "44c332906667b0fa98622f19a19e43afa5aa63b652813f80645dd0f33eca1fbb" dependencies = [ "anyhow", "ast_node", @@ -1163,9 +1163,9 @@ dependencies = [ [[package]] name = "swc_compiler_base" -version = "22.0.0" +version = "22.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3aef98ee955eac3339cb3a8152c64746196bd14919b41afdf2cc410c06e6cfee" +checksum = "3993329d52eab041a7123fc25c76a54ead1488cb24114b5c7b56f0d1f9d2a210" dependencies = [ "anyhow", "base64", @@ -1277,9 +1277,9 @@ dependencies = [ [[package]] name = "swc_ecma_lexer" -version = "14.0.3" +version = "14.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b232a4ba5106d7bfa4da9cb4a22c3f3fdac64d656cf45c60a349f8ded133462" +checksum = "bb339d30ba6ee93da5d5638982faaa79586cd429fe331648abf42afa0eb0a7b5" dependencies = [ "arrayvec", "bitflags", @@ -1302,9 +1302,9 @@ dependencies = [ [[package]] name = "swc_ecma_minifier" -version = "20.0.3" +version = "20.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c43654113e9a75edf05fbe2c66b5232e149f563c97bef58ff1a896daa288092" +checksum = "cf26b860e6a0e23807c70b03175d0e09082cfe256130c4759fdf9372020d3a3f" dependencies = [ "arrayvec", "bitflags", @@ -1340,9 +1340,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "14.0.1" +version = "14.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b59cd2d4c1989c38eae5cd5888f3a3120ecbe2e53b939e586d340b12de7c1e2" +checksum = "60e07e6ecd47f748988902976d09c4022b1147772f88ad8a95852a20722ac7dc" dependencies = [ "arrayvec", "bitflags", @@ -1366,9 +1366,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "15.1.0" +version = "15.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb01eeec1de9e2cfd089e3afcf3db60df10c812f97a42d953d094eba32e9d26f" +checksum = "49c0a76bff24b9fa13d5451e7a664d18158849c45434d863e0553e29fb31170b" dependencies = [ "better_scoped_tls", "bitflags", @@ -1444,9 +1444,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "15.0.1" +version = "15.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "199e2f048c1998d550ebe5296e0876a3e5b2f963d75a925c2208466071edb9d8" +checksum = "7d2c29dbfc54e02c14975aff9d2c75ae6fff0808d860d9971a493d37870e282f" dependencies = [ "indexmap", "num_cpus", diff --git a/rust/parse_ast/Cargo.toml b/rust/parse_ast/Cargo.toml index 937800751..d596201f1 100644 --- a/rust/parse_ast/Cargo.toml +++ b/rust/parse_ast/Cargo.toml @@ -10,7 +10,7 @@ anyhow = "1.0.98" swc_atoms = "5.0.0" swc_compiler_base = "22.0.0" swc_config = "3.0.0" -swc_common = { version = "11.0.0", features = ["parking_lot"] } +swc_common = { version = "11.0.3", features = ["parking_lot"] } swc_ecma_ast = "11.0.0" -swc_ecma_parser = "14.0.0" -parking_lot = "0.12.3" +swc_ecma_parser = "14.0.1" +parking_lot = "0.12.4" From da88626ce276955bcd49dbd5b7312c553905129b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E7=AC=91?= <530257315@qq.com> Date: Fri, 6 Jun 2025 12:23:20 +0800 Subject: [PATCH 02/13] fix: consider function expression in thenable when tree-shaking dynamic imports (#5977) --- src/ast/utils/identifyNode.ts | 5 +++++ src/ast/variables/LocalVariable.ts | 4 +++- .../treeshake-deterministic-dynamic-import/_expected.js | 6 ++++++ .../samples/treeshake-deterministic-dynamic-import/main.js | 6 ++++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/ast/utils/identifyNode.ts b/src/ast/utils/identifyNode.ts index 1090a27b6..e07c8c3f0 100644 --- a/src/ast/utils/identifyNode.ts +++ b/src/ast/utils/identifyNode.ts @@ -1,6 +1,7 @@ import type ArrowFunctionExpression from '../nodes/ArrowFunctionExpression'; import type AwaitExpression from '../nodes/AwaitExpression'; import type CallExpression from '../nodes/CallExpression'; +import type FunctionExpression from '../nodes/FunctionExpression'; import type Identifier from '../nodes/Identifier'; import type ImportExpression from '../nodes/ImportExpression'; import type MemberExpression from '../nodes/MemberExpression'; @@ -22,6 +23,10 @@ export function isArrowFunctionExpressionNode(node: unknown): node is ArrowFunct return node instanceof NodeBase && node.type === nodeType.ArrowFunctionExpression; } +export function isFunctionExpressionNode(node: unknown): node is FunctionExpression { + return node instanceof NodeBase && node.type === nodeType.FunctionExpression; +} + export function isCallExpressionNode(node: unknown): node is CallExpression { return node instanceof NodeBase && node.type === nodeType.CallExpression; } diff --git a/src/ast/variables/LocalVariable.ts b/src/ast/variables/LocalVariable.ts index 331f1199a..ed7438793 100644 --- a/src/ast/variables/LocalVariable.ts +++ b/src/ast/variables/LocalVariable.ts @@ -25,6 +25,7 @@ import type { VariableKind } from '../nodes/shared/VariableKinds'; import { isArrowFunctionExpressionNode, isCallExpressionNode, + isFunctionExpressionNode, isIdentifierNode, isImportExpressionNode, isMemberExpressionNode @@ -237,7 +238,8 @@ export default class LocalVariable extends Variable { */ if ( this.kind === 'parameter' && - isArrowFunctionExpressionNode(declaration.parent) && + (isArrowFunctionExpressionNode(declaration.parent) || + isFunctionExpressionNode(declaration.parent)) && isCallExpressionNode(declaration.parent.parent) && isMemberExpressionNode(declaration.parent.parent.callee) && isIdentifierNode(declaration.parent.parent.callee.property) && diff --git a/test/form/samples/treeshake-deterministic-dynamic-import/_expected.js b/test/form/samples/treeshake-deterministic-dynamic-import/_expected.js index 9dda828d7..9bd210cfb 100644 --- a/test/form/samples/treeshake-deterministic-dynamic-import/_expected.js +++ b/test/form/samples/treeshake-deterministic-dynamic-import/_expected.js @@ -29,6 +29,12 @@ async function entry() { } f(m); }); + Promise.resolve().then(function () { return sub2; }).then(function(m){ + function f(m){ + console.log(m.baz2); + } + f(m); + }); Promise.resolve().then(function () { return sub2; }).then(({ baz2 }) => baz2); Promise.resolve().then(function () { return sub2; }).then(function({ reexported }) { }); diff --git a/test/form/samples/treeshake-deterministic-dynamic-import/main.js b/test/form/samples/treeshake-deterministic-dynamic-import/main.js index ee9855071..67588eb10 100644 --- a/test/form/samples/treeshake-deterministic-dynamic-import/main.js +++ b/test/form/samples/treeshake-deterministic-dynamic-import/main.js @@ -14,6 +14,12 @@ export async function entry() { } f(m); }) + import('./sub2.js').then(function(m){ + function f(m){ + console.log(m.baz2) + } + f(m); + }) import('./sub2.js').then(({ baz2 }) => baz2) import('./sub2.js').then(function({ reexported }) { reexported }) From 224c90071791e5c067d2c55e11f15b04acf7ebeb Mon Sep 17 00:00:00 2001 From: Omkar Joshi <65808188+OmkarJ13@users.noreply.github.com> Date: Fri, 6 Jun 2025 10:30:44 +0530 Subject: [PATCH 03/13] fix: preserve constant identifiers in unary expressions instead of magic numbers (#5968) * fix: preserve constant identifiers in unary expressions instead of magic numbers * test: formatting --------- Co-authored-by: Lukas Taegert-Atkinson --- src/ast/nodes/UnaryExpression.ts | 6 ++++- .../_config.js | 4 +++ .../_expected.js | 25 +++++++++++++++++++ .../main.js | 23 +++++++++++++++++ 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 test/form/samples/unary-expressions-preserve-constants/_config.js create mode 100644 test/form/samples/unary-expressions-preserve-constants/_expected.js create mode 100644 test/form/samples/unary-expressions-preserve-constants/main.js diff --git a/src/ast/nodes/UnaryExpression.ts b/src/ast/nodes/UnaryExpression.ts index 555f39f4a..4f22084c1 100644 --- a/src/ast/nodes/UnaryExpression.ts +++ b/src/ast/nodes/UnaryExpression.ts @@ -114,9 +114,13 @@ export default class UnaryExpression extends NodeBase { ): void { if (!this.deoptimized) this.applyDeoptimizations(); this.included = true; + // Check if the argument is an identifier that should be preserved as a reference for readability + const shouldPreserveArgument = + this.argument instanceof Identifier && this.argument.variable?.included; if ( typeof this.getRenderedLiteralValue(includeChildrenRecursively) === 'symbol' || - this.argument.shouldBeIncluded(context) + this.argument.shouldBeIncluded(context) || + shouldPreserveArgument ) { this.argument.include(context, includeChildrenRecursively); this.renderedLiteralValue = UnknownValue; diff --git a/test/form/samples/unary-expressions-preserve-constants/_config.js b/test/form/samples/unary-expressions-preserve-constants/_config.js new file mode 100644 index 000000000..da9b696b9 --- /dev/null +++ b/test/form/samples/unary-expressions-preserve-constants/_config.js @@ -0,0 +1,4 @@ +module.exports = defineTest({ + description: + 'Preserves constant identifiers in unary expressions when constants are used elsewhere' +}); diff --git a/test/form/samples/unary-expressions-preserve-constants/_expected.js b/test/form/samples/unary-expressions-preserve-constants/_expected.js new file mode 100644 index 000000000..2bdd58007 --- /dev/null +++ b/test/form/samples/unary-expressions-preserve-constants/_expected.js @@ -0,0 +1,25 @@ +const BOB = 3; +const ALICE = 5; + +function getBob() { + return {x: BOB, y: -BOB, z: +BOB}; +} + +function getAlice() { + console.log(ALICE); + return ~ALICE; +} + +// Test with different operators +function testOperators() { + return { + negate: -BOB, + plus: +BOB, + not: !BOB, + bitwise: ~BOB, + typeof: typeof BOB, + void: void BOB + }; +} + +export { ALICE, BOB, getAlice, getBob, testOperators }; diff --git a/test/form/samples/unary-expressions-preserve-constants/main.js b/test/form/samples/unary-expressions-preserve-constants/main.js new file mode 100644 index 000000000..9dc8dcce3 --- /dev/null +++ b/test/form/samples/unary-expressions-preserve-constants/main.js @@ -0,0 +1,23 @@ +export const BOB = 3; +export const ALICE = 5; + +export function getBob() { + return {x: BOB, y: -BOB, z: +BOB}; +} + +export function getAlice() { + console.log(ALICE); + return ~ALICE; +} + +// Test with different operators +export function testOperators() { + return { + negate: -BOB, + plus: +BOB, + not: !BOB, + bitwise: ~BOB, + typeof: typeof BOB, + void: void BOB + }; +} From 13992f2a5c89a0802cfd60e1b308afdc85dc4f3f Mon Sep 17 00:00:00 2001 From: Fredrik Lillejordet Date: Fri, 6 Jun 2025 09:43:15 +0200 Subject: [PATCH 04/13] Update README.md (#5976) Replaced 404 Not found TNG logo with TNG GitHub logo. Co-authored-by: Lukas Taegert-Atkinson --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a1b6b9ea8..0c4fe959e 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,7 @@ Support this project by becoming a sponsor. Your logo will show up here with a l ## Special Sponsor -TNG Logo +TNG Logo TNG has been supporting the work of [Lukas Taegert-Atkinson](https://github.com/lukastaegert) on Rollup since 2017. From 149d94c1674c9e7d0d52d5506836f9393d667958 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 6 Jun 2025 13:15:10 +0200 Subject: [PATCH 05/13] Debug/fix watch pipeline (#5982) * Debug pipeline * Print stdout and stderr on timeout * Add more logging * Add logging to killing * Try to kill after a timeout to see if it helps * Use a macroscopic timeout in the test * Remove solo * Update test/cli/samples/watch/watch-event-hooks-error/_config.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Rename iteration variable --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- test/cli/index.js | 15 +++++++++------ .../watch/watch-event-hooks-error/_config.js | 6 ++++-- test/types.d.ts | 3 ++- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/test/cli/index.js b/test/cli/index.js index 4ac71627c..13d0ed2bc 100644 --- a/test/cli/index.js +++ b/test/cli/index.js @@ -23,12 +23,13 @@ runTestSuiteWithSamples( 'cli', path.resolve(__dirname, 'samples'), /** + * @param {string} directory * @param {import('../types').TestConfigCli} config */ (directory, config) => { - (config.skip ? it.skip : config.solo ? it.only : it)( - path.basename(directory) + ': ' + config.description, - async () => { + for (let iteration = 0; iteration < (config.repeat || 1); iteration++) { + const description = `${path.basename(directory)}: ${config.description}${iteration > 0 ? ` (run ${iteration + 1})` : ''}`; + (config.skip ? it.skip : config.solo ? it.only : it)(description, async () => { process.chdir(config.cwd || directory); try { await runTest(config); @@ -39,8 +40,8 @@ runTestSuiteWithSamples( } throw error; } - } - ).timeout(80_000); + }).timeout(80_000); + } }, () => process.chdir(cwd) ); @@ -106,7 +107,9 @@ async function runTest(config) { } } if (childProcess.signalCode === 'SIGKILL') { - return reject(new Error('Test aborted due to timeout.')); + return reject( + new Error(`Test aborted due to timeout.\nstdout: ${stdout}\n\nstderr: ${stderr}\n`) + ); } if ('stderr' in config) { diff --git a/test/cli/samples/watch/watch-event-hooks-error/_config.js b/test/cli/samples/watch/watch-event-hooks-error/_config.js index 4987c8e7b..5e0a06a01 100644 --- a/test/cli/samples/watch/watch-event-hooks-error/_config.js +++ b/test/cli/samples/watch/watch-event-hooks-error/_config.js @@ -1,11 +1,13 @@ -const { assertIncludes } = require('../../../../testHelpers.js'); +const { assertIncludes, wait } = require('../../../../testHelpers.js'); module.exports = defineTest({ description: 'onError event hook shell commands write to stderr', spawnScript: 'wrapper.js', spawnArgs: ['-cw', '--watch.onError', 'echo error'], - abortOnStderr(data) { + async abortOnStderr(data) { if (data.includes('waiting for changes')) { + // Wait a little for the child process to complete the command + await wait(300); return true; } }, diff --git a/test/types.d.ts b/test/types.d.ts index be8377537..f9f2337fd 100644 --- a/test/types.d.ts +++ b/test/types.d.ts @@ -133,11 +133,12 @@ export interface TestConfigCli extends TestConfigBase { * Run assertions against the exports of the bundle after executing it. */ exports?: (exportObject: any) => void | Promise; + repeat?: number; /** * Run assertions against the generated code when bundling to stdout. */ result?: (code: string) => void; - retry?: number; + retry?: boolean; /** * Display generated output in console. */ From 13b4669dbc21cb738551cd725d2a18c77b3cea11 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 6 Jun 2025 13:18:09 +0200 Subject: [PATCH 06/13] 4.41.2 --- CHANGELOG.md | 20 ++++++++++++++++++++ browser/package.json | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1de4b3bf8..0cbb1c040 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # rollup changelog +## 4.41.2 + +_2025-06-06_ + +### Bug Fixes + +- Detect named export usages in dynamic imports with `then` and non-arrow function expressions (#5977) +- Do not replace usages of constant variables with their values for readability (#5968) + +### Pull Requests + +- [#5968](https://github.com/rollup/rollup/pull/5968): fix: preserve constant identifiers in unary expressions instead of magic numbers (@OmkarJ13, @lukastaegert) +- [#5969](https://github.com/rollup/rollup/pull/5969): chore(deps): update dependency yargs-parser to v22 (@renovate[bot], @lukastaegert) +- [#5970](https://github.com/rollup/rollup/pull/5970): chore(deps): lock file maintenance minor/patch updates (@renovate[bot]) +- [#5971](https://github.com/rollup/rollup/pull/5971): chore(deps): lock file maintenance (@renovate[bot]) +- [#5976](https://github.com/rollup/rollup/pull/5976): Update README.md (@ftlno, @lukastaegert) +- [#5977](https://github.com/rollup/rollup/pull/5977): fix: consider function expression in thenable when tree-shaking dynamic imports (@TrickyPi) +- [#5981](https://github.com/rollup/rollup/pull/5981): fix(deps): lock file maintenance minor/patch updates (@renovate[bot]) +- [#5982](https://github.com/rollup/rollup/pull/5982): Debug/fix watch pipeline (@lukastaegert) + ## 4.41.1 _2025-05-24_ diff --git a/browser/package.json b/browser/package.json index 6d6934fe0..777e30a9f 100644 --- a/browser/package.json +++ b/browser/package.json @@ -1,6 +1,6 @@ { "name": "@rollup/browser", - "version": "4.41.1", + "version": "4.41.2", "description": "Next-generation ES module bundler browser build", "main": "dist/rollup.browser.js", "module": "dist/es/rollup.browser.js", diff --git a/package-lock.json b/package-lock.json index 16f1a091b..5795c930b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rollup", - "version": "4.41.1", + "version": "4.41.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rollup", - "version": "4.41.1", + "version": "4.41.2", "license": "MIT", "dependencies": { "@types/estree": "1.0.7" diff --git a/package.json b/package.json index 007cdf4ff..e2b8f08f2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rollup", - "version": "4.41.1", + "version": "4.41.2", "description": "Next-generation ES module bundler", "main": "dist/rollup.js", "module": "dist/es/rollup.js", From dddc00de6ad733c76fff550140b3b6398f1f08de Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Fri, 6 Jun 2025 21:59:08 +0800 Subject: [PATCH 07/13] feat: watch mode add `allowInputInsideOutputPath` option (#5966) * feat: watch mode add `allowInputInsideOutputPath` option * fix: docs lint * test: case * test: update * Slightly streamline code * Fix test --------- Co-authored-by: Lukas Taegert-Atkinson Co-authored-by: Lukas Taegert-Atkinson --- cli/help.md | 2 ++ docs/command-line-interface/index.md | 5 +++- docs/configuration-options/index.md | 11 +++++++ docs/javascript-api/index.md | 1 + src/rollup/types.d.ts | 1 + src/watch/watch-proxy.ts | 29 ++++++++++--------- .../_config.js | 9 ++++++ .../output/main.js | 1 + .../output/out.js | 1 + .../rollup.config.mjs | 12 ++++++++ 10 files changed, 57 insertions(+), 15 deletions(-) create mode 100644 test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/_config.js create mode 100644 test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/main.js create mode 100644 test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/out.js create mode 100644 test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/rollup.config.mjs diff --git a/cli/help.md b/cli/help.md index 7a49dd45d..8c5560d02 100644 --- a/cli/help.md +++ b/cli/help.md @@ -90,6 +90,8 @@ Basic options: --no-treeshake.unknownGlobalSideEffects Assume unknown globals do not throw --validate Validate output --waitForBundleInput Wait for bundle input files +--watch.allowInputInsideOutputPath Whether the input path is allowed to be a + subpath of the output path --watch.buildDelay Throttle watch rebuilds --no-watch.clearScreen Do not clear the screen when rebuilding --watch.exclude Exclude files from being watched diff --git a/docs/command-line-interface/index.md b/docs/command-line-interface/index.md index 4a7626966..a27d434af 100755 --- a/docs/command-line-interface/index.md +++ b/docs/command-line-interface/index.md @@ -139,7 +139,8 @@ export default { clearScreen, exclude, include, - skipWrite + skipWrite, + allowInputInsideOutputPath } }; ``` @@ -459,6 +460,8 @@ Many options have command line equivalents. In those cases, any arguments passed --no-treeshake.unknownGlobalSideEffects Assume unknown globals do not throw --validate Validate output --waitForBundleInput Wait for bundle input files +--watch.allowInputInsideOutputPath Whether the input path is allowed to be a + subpath of the output path --watch.buildDelay Throttle watch rebuilds --no-watch.clearScreen Do not clear the screen when rebuilding --watch.exclude Exclude files from being watched diff --git a/docs/configuration-options/index.md b/docs/configuration-options/index.md index 539b7f6c9..96e4d94a8 100755 --- a/docs/configuration-options/index.md +++ b/docs/configuration-options/index.md @@ -2860,6 +2860,7 @@ For each key, the first number represents the elapsed time while the second repr ```typescript interface WatcherOptions { + allowInputInsideOutputPath?: boolean; buildDelay?: number; chokidar?: ChokidarOptions; clearScreen?: boolean; @@ -2892,6 +2893,16 @@ export default [ These options only take effect when running Rollup with the `--watch` flag, or using `rollup.watch`. +### watch.allowInputInsideOutputPath + +| | | +| --: | :-- | +| Type: | `boolean` | +| CLI: | `--watch.allowInputInsideOutputPath`/`--no-watch.allowInputInsideOutputPath` | +| Default: | `false` | + +Whether the input path is allowed to be a subpath of the output path. + ### watch.buildDelay | | | diff --git a/docs/javascript-api/index.md b/docs/javascript-api/index.md index 23dea37fc..6f2446cb6 100755 --- a/docs/javascript-api/index.md +++ b/docs/javascript-api/index.md @@ -320,6 +320,7 @@ const watchOptions = { ...inputOptions, output: [outputOptions], watch: { + allowInputInsideOutputPath, buildDelay, chokidar, clearScreen, diff --git a/src/rollup/types.d.ts b/src/rollup/types.d.ts index 42c9bb3c1..0ec31f59b 100644 --- a/src/rollup/types.d.ts +++ b/src/rollup/types.d.ts @@ -1009,6 +1009,7 @@ export interface ChokidarOptions { export type RollupWatchHooks = 'onError' | 'onStart' | 'onBundleStart' | 'onBundleEnd' | 'onEnd'; export interface WatcherOptions { + allowInputInsideOutputPath?: boolean; buildDelay?: number; chokidar?: ChokidarOptions; clearScreen?: boolean; diff --git a/src/watch/watch-proxy.ts b/src/watch/watch-proxy.ts index 2d02ebede..f2c0d10a5 100644 --- a/src/watch/watch-proxy.ts +++ b/src/watch/watch-proxy.ts @@ -9,8 +9,8 @@ import { ensureArray } from '../utils/ensureArray'; import { error, logInvalidOption } from '../utils/logs'; import { mergeOptions } from '../utils/options/mergeOptions'; import { URL_WATCH } from '../utils/urls'; -import { WatchEmitter } from './WatchEmitter'; import { loadFsEvents } from './fsevents-importer'; +import { WatchEmitter } from './WatchEmitter'; export default function watch(configs: RollupOptions[] | RollupOptions): RollupWatcher { const emitter = new WatchEmitter() as RollupWatcher; @@ -22,7 +22,7 @@ export default function watch(configs: RollupOptions[] | RollupOptions): RollupW return emitter; } -function withTrailingSlash(path: string): string { +function ensureTrailingSlash(path: string): string { if (path[path.length - 1] !== '/') { return `${path}/`; } @@ -31,25 +31,26 @@ function withTrailingSlash(path: string): string { function checkWatchConfig(config: MergedRollupOptions[]): void { for (const item of config) { + if (typeof item.watch !== 'boolean' && item.watch?.allowInputInsideOutputPath) { + break; + } if (item.input && item.output) { const input = typeof item.input === 'string' ? ensureArray(item.input) : item.input; - const output = ensureArray(item.output); + const outputs = ensureArray(item.output); for (const index in input) { - const inputPath = input[index as keyof typeof input] as string; - const subPath = output.find(o => { - if (!o.dir || typeof inputPath !== 'string') { - return false; - } - const _outPath = withTrailingSlash(o.dir); - const _inputPath = withTrailingSlash(inputPath); - return _inputPath.startsWith(_outPath); - }); - if (subPath) { + const inputPath = input[index as keyof typeof input]; + if (typeof inputPath !== 'string') { + continue; + } + const outputWithInputAsSubPath = outputs.find( + ({ dir }) => dir && ensureTrailingSlash(inputPath).startsWith(ensureTrailingSlash(dir)) + ); + if (outputWithInputAsSubPath) { error( logInvalidOption( 'watch', URL_WATCH, - `the input "${inputPath}" is a subpath of the output "${subPath.dir}"` + `the input "${inputPath}" is a subpath of the output "${outputWithInputAsSubPath.dir}"` ) ); } diff --git a/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/_config.js b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/_config.js new file mode 100644 index 000000000..79acda4b6 --- /dev/null +++ b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/_config.js @@ -0,0 +1,9 @@ +module.exports = defineTest({ + description: + 'allowInputInsideOutputPath set to true, should not throw an error when input is inside output path', + spawnArgs: ['-cw'], + abortOnStderr(data) { + return data.includes('waiting for changes'); + }, + execute: true +}); diff --git a/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/main.js b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/main.js new file mode 100644 index 000000000..17eee8f1f --- /dev/null +++ b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/main.js @@ -0,0 +1 @@ +assert.equal( 1 + 1, 2 ); diff --git a/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/out.js b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/out.js new file mode 100644 index 000000000..17eee8f1f --- /dev/null +++ b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/output/out.js @@ -0,0 +1 @@ +assert.equal( 1 + 1, 2 ); diff --git a/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/rollup.config.mjs b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/rollup.config.mjs new file mode 100644 index 000000000..51fa9da44 --- /dev/null +++ b/test/cli/samples/watch/watch-output-contain-input-allowInputInsideOutputPath/rollup.config.mjs @@ -0,0 +1,12 @@ +export default [ + { + input: {'out': 'output/main.js'}, + watch: { + allowInputInsideOutputPath: true, + }, + output: { + dir: 'output', + format: 'es' + } + }, +]; From f76339428586620ff3e4c32fce48f923e7be7b05 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Fri, 6 Jun 2025 16:30:06 +0200 Subject: [PATCH 08/13] 4.42.0 --- CHANGELOG.md | 12 ++++++++++++ browser/package.json | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0cbb1c040..cb81c7237 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # rollup changelog +## 4.42.0 + +_2025-06-06_ + +### Features + +- Add option to allow the input to be located in the output in watch mode (#5966) + +### Pull Requests + +- [#5966](https://github.com/rollup/rollup/pull/5966): feat: watch mode add `allowInputInsideOutputPath` option (@btea, @lukastaegert) + ## 4.41.2 _2025-06-06_ diff --git a/browser/package.json b/browser/package.json index 777e30a9f..a0457d6f8 100644 --- a/browser/package.json +++ b/browser/package.json @@ -1,6 +1,6 @@ { "name": "@rollup/browser", - "version": "4.41.2", + "version": "4.42.0", "description": "Next-generation ES module bundler browser build", "main": "dist/rollup.browser.js", "module": "dist/es/rollup.browser.js", diff --git a/package-lock.json b/package-lock.json index 5795c930b..a316e408c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rollup", - "version": "4.41.2", + "version": "4.42.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rollup", - "version": "4.41.2", + "version": "4.42.0", "license": "MIT", "dependencies": { "@types/estree": "1.0.7" diff --git a/package.json b/package.json index e2b8f08f2..7e1fe7129 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rollup", - "version": "4.41.2", + "version": "4.42.0", "description": "Next-generation ES module bundler", "main": "dist/rollup.js", "module": "dist/es/rollup.js", From eeca11a873a88be27700bdf7e2e5f95cd93c4375 Mon Sep 17 00:00:00 2001 From: Tamas Kokeny Date: Wed, 11 Jun 2025 06:40:43 +0200 Subject: [PATCH 09/13] feat(options): Add an option for overriding the file system module in the JS API (#5944) * feat(config): add an fs config to the JS api (#5880) # Conflicts: # package-lock.json # package.json * feat(config): make fs option typesafe (#5880) * feat(config): pass the fs option as plugin context (#5880) * docs(config): add documentation about the fs option (#5880) * fix(config): Fix RollupFsModule type * Refine fs types * Always use fs from option in resolvedId * Add tests for browser build * Use the actual resolveId implementation in browsers again This should mostly work, the edge case that previously prompted it to be replaced is now handled gracefully. This will allow to make it much easier to use the browser build. * Extend documentation * Extend documentation * Raise audit level for now until braces issues is fixed --------- Co-authored-by: Lukas Taegert-Atkinson --- .github/workflows/build-and-tests.yml | 2 +- browser/src/fs.ts | 15 ++ browser/src/resolveId.ts | 32 --- build-plugins/replace-browser-modules.ts | 10 +- docs/.vitepress/config.ts | 4 + docs/browser/index.md | 134 ++++++++++ docs/configuration-options/index.md | 101 +++++++ docs/faqs/index.md | 96 ------- .../en/slugs-and-pages-by-legacy-slugs.json | 2 +- docs/javascript-api/index.md | 3 +- docs/plugin-development/index.md | 8 + package-lock.json | 250 +++++++++++++----- package.json | 1 + scripts/prepare-release.js | 2 +- src/ModuleLoader.ts | 11 +- src/rollup/rollup.ts | 6 +- src/rollup/types.d.ts | 76 ++++++ src/utils/PluginContext.ts | 1 + src/utils/logs.ts | 2 +- src/utils/options/mergeOptions.ts | 3 +- src/utils/options/normalizeInputOptions.ts | 5 +- src/utils/resolveId.ts | 32 ++- .../samples/missing-default-fs/_config.js | 23 ++ .../missing-dependency-resolution/_config.js | 39 ++- .../_expected/main.js | 3 + .../missing-entry-resolution/_config.js | 6 +- test/browser/samples/provide-fs/_config.js | 12 + .../samples/provide-fs/_expected/main.js | 1 + .../max-parallel-file-operations/_config.js | 3 +- .../default/_config.js | 3 + .../error/_config.js | 3 +- .../infinity/_config.js | 3 +- .../set/_config.js | 3 +- test/function/samples/options-hook/_config.js | 5 +- test/misc/fs-override.js | 56 ++++ test/misc/index.js | 1 + test/misc/optionList.js | 2 +- 37 files changed, 708 insertions(+), 251 deletions(-) delete mode 100644 browser/src/resolveId.ts create mode 100755 docs/browser/index.md create mode 100644 test/browser/samples/missing-default-fs/_config.js create mode 100644 test/browser/samples/missing-dependency-resolution/_expected/main.js create mode 100644 test/browser/samples/provide-fs/_config.js create mode 100644 test/browser/samples/provide-fs/_expected/main.js create mode 100644 test/misc/fs-override.js diff --git a/.github/workflows/build-and-tests.yml b/.github/workflows/build-and-tests.yml index 7ee8730c6..842d047fe 100644 --- a/.github/workflows/build-and-tests.yml +++ b/.github/workflows/build-and-tests.yml @@ -51,7 +51,7 @@ jobs: - name: Lint run: npm run ci:lint - name: Vulnerabilities - run: npm audit + run: npm audit --audit-level moderate - name: Optional Dependencies run: npm run test:package - name: CLI Docs diff --git a/browser/src/fs.ts b/browser/src/fs.ts index 290663f74..0dff3bf6c 100644 --- a/browser/src/fs.ts +++ b/browser/src/fs.ts @@ -1,5 +1,20 @@ +import type { RollupFsModule } from '../../src/rollup/types'; import { throwNoFileSystem } from './error'; +import type * as FsType from './fs.ts'; +// Ensure this satisfies the RollupFsModule API, will be removed by tree-shaking +const _typeTest = null as unknown as typeof FsType satisfies RollupFsModule; + +export const appendFile = throwNoFileSystem('fs.appendFile'); +export const copyFile = throwNoFileSystem('fs.copyFile'); export const mkdir = throwNoFileSystem('fs.mkdir'); +export const mkdtemp = throwNoFileSystem('fs.mkdtemp'); +export const readdir = throwNoFileSystem('fs.readdir'); export const readFile = throwNoFileSystem('fs.readFile'); +export const realpath = throwNoFileSystem('fs.realpath'); +export const rename = throwNoFileSystem('fs.rename'); +export const rmdir = throwNoFileSystem('fs.rmdir'); +export const stat = throwNoFileSystem('fs.stat'); +export const lstat = throwNoFileSystem('fs.lstat'); +export const unlink = throwNoFileSystem('fs.unlink'); export const writeFile = throwNoFileSystem('fs.writeFile'); diff --git a/browser/src/resolveId.ts b/browser/src/resolveId.ts deleted file mode 100644 index fb0d23378..000000000 --- a/browser/src/resolveId.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { ModuleLoaderResolveId } from '../../src/ModuleLoader'; -import type { CustomPluginOptions, Plugin, ResolveIdResult } from '../../src/rollup/types'; -import type { PluginDriver } from '../../src/utils/PluginDriver'; -import { resolveIdViaPlugins } from '../../src/utils/resolveIdViaPlugins'; -import { throwNoFileSystem } from './error'; - -export async function resolveId( - source: string, - importer: string | undefined, - _preserveSymlinks: boolean, - pluginDriver: PluginDriver, - moduleLoaderResolveId: ModuleLoaderResolveId, - skip: readonly { importer: string | undefined; plugin: Plugin; source: string }[] | null, - customOptions: CustomPluginOptions | undefined, - isEntry: boolean, - assertions: Record -): Promise { - const pluginResult = await resolveIdViaPlugins( - source, - importer, - pluginDriver, - moduleLoaderResolveId, - skip, - customOptions, - isEntry, - assertions - ); - if (pluginResult == null) { - return throwNoFileSystem('path.resolve')(); - } - return pluginResult[0]; -} diff --git a/build-plugins/replace-browser-modules.ts b/build-plugins/replace-browser-modules.ts index f1cecf2d1..84a59f85a 100644 --- a/build-plugins/replace-browser-modules.ts +++ b/build-plugins/replace-browser-modules.ts @@ -5,15 +5,7 @@ import type { Plugin } from 'vite'; const resolve = (path: string) => fileURLToPath(new URL(`../${path}`, import.meta.url)); -const JS_REPLACED_MODULES = [ - 'fs', - 'hookActions', - 'path', - 'performance', - 'process', - 'resolveId', - 'initWasm' -]; +const JS_REPLACED_MODULES = ['fs', 'hookActions', 'path', 'performance', 'process', 'initWasm']; type ModulesMap = [string, string][]; diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index b2f2ea58f..3479625f3 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -117,6 +117,10 @@ export default defineConfig({ link: '/es-module-syntax/', text: 'ES Module Syntax' }, + { + link: '/browser/', + text: 'Running Rollup in a Browser' + }, { link: '/faqs/', text: 'Frequently Asked Questions' diff --git a/docs/browser/index.md b/docs/browser/index.md new file mode 100755 index 000000000..ac5b61758 --- /dev/null +++ b/docs/browser/index.md @@ -0,0 +1,134 @@ +--- +title: Running Rollup in a Browser +--- + +# {{ $frontmatter.title }} + +[[toc]] + +## The browser build + +While the regular Rollup build relies on some NodeJS builtin libraries, there is also a browser build available that only uses browser APIs. You can install it via + +```shell +npm install @rollup/browser +``` + +and in your script, import it via + +```js +import { rollup } from '@rollup/browser'; +``` + +Alternatively, you can import from a CDN, e.g. for the ESM build + +```js +import * as rollup from 'https://unpkg.com/@rollup/browser/dist/es/rollup.browser.js'; +``` + +and for the UMD build + +```html + +``` + +which will create a global variable `window.rollup`. Note that in each case, you need to make sure that the file `dist/bindings_wasm_bg.wasm` from the `@rollup/browser` package is served next to where the browser build is served. + +As the browser build cannot access the file system, you either need to provide an [in-memory file system](#using-an-in-memory-file-system) via the [`fs`](../configuration-options/index.md#fs) option, or you need to [provide plugins](#using-plugins-to-resolve-and-load-modules) that resolve and load all modules you want to bundle. + +## Using an in-memory file system + +Rollup allows you to provide an in-memory file system implementation that needs to implement at least a certain sub-set of the NodeJS `fs` API, cf. the [`fs`](../configuration-options/index.md#fs) option. This makes the browser build behave very similar to the NodeJS build and even allows you to use certain plugins that rely on the file system, provided they only access it via the [`this.fs`](../plugin-development/index.md#this-fs) plugin context property. Here is an example that uses [`memfs`](https://www.npmjs.com/package/memfs): + +```js twoslash +/** @type {import('rollup')} */ +var rollup; +// ---cut--- +import { rollup } from '@rollup/browser'; +import { Volume } from 'memfs'; + +const vol = Volume.fromJSON({ + '/main.js': "import foo from 'foo.js'; console.log(foo);", + '/foo.js': 'export default 42;' +}); + +rollup + .rollup({ + input: '/main.js', + fs: vol.promises + }) + .then(bundle => bundle.generate({ format: 'es' })) + .then(({ output }) => console.log(output[0].code)); +``` + +## Using plugins to resolve and load modules + +You can also resolve and load all modules via plugins. Here is how you could do this: + +```js twoslash +/** @type {import('rollup')} */ +var rollup; +// ---cut--- +const modules = { + 'main.js': "import foo from 'foo.js'; console.log(foo);", + 'foo.js': 'export default 42;' +}; + +rollup + .rollup({ + input: 'main.js', + plugins: [ + { + name: 'loader', + resolveId(source) { + if (modules.hasOwnProperty(source)) { + return source; + } + }, + load(id) { + if (modules.hasOwnProperty(id)) { + return modules[id]; + } + } + } + ] + }) + .then(bundle => bundle.generate({ format: 'es' })) + .then(({ output }) => console.log(output[0].code)); +``` + +This example only supports two imports, `"main.js"` and `"foo.js"`, and no relative imports. Here is another example that uses absolute URLs as entry points and supports relative imports. In that case, we are just re-bundling Rollup itself, but it could be used on any other URL that exposes an ES module: + +```js twoslash +/** @type {import('rollup')} */ +var rollup; +// ---cut--- +rollup + .rollup({ + input: 'https://unpkg.com/rollup/dist/es/rollup.js', + plugins: [ + { + name: 'url-resolver', + resolveId(source, importer) { + if (source[0] !== '.') { + try { + new URL(source); + // If it is a valid URL, return it + return source; + } catch { + // Otherwise make it external + return { id: source, external: true }; + } + } + return new URL(source, importer).href; + }, + async load(id) { + const response = await fetch(id); + return response.text(); + } + } + ] + }) + .then(bundle => bundle.generate({ format: 'es' })) + .then(({ output }) => console.log(output)); +``` diff --git a/docs/configuration-options/index.md b/docs/configuration-options/index.md index 96e4d94a8..edc3b05d6 100755 --- a/docs/configuration-options/index.md +++ b/docs/configuration-options/index.md @@ -2851,6 +2851,107 @@ Whether to collect performance timings. When used from the command line or a con For each key, the first number represents the elapsed time while the second represents the change in memory consumption, and the third represents the total memory consumption after this step. The order of these steps is the order used by `Object.keys`. Top level keys start with `#` and contain the timings of nested steps, i.e. in the example above, the 698ms of the `# BUILD` step include the 538ms of the `## parse modules` step. +### fs + +| | | +| -------: | :--------------------------------------------------- | +| Type: | `RollupFsModule` | +| Default: | `node:fs.promises` in NodeJS, no default in browsers | + +If you want to use a custom file system module, you can set this option to an object that implements the same API as the `RollupFsModule` interface. This is useful if you want to use a different file system implementation such as [`memfs`](https://www.npmjs.com/package/memfs), if you want to mock the file system for testing purposes, or if you use the [browser build](../browser/index.md) of Rollup. + +```typescript +interface RollupFsModule { + appendFile( + path: string, + data: string | Uint8Array, + options?: { + encoding?: BufferEncoding | null; + mode?: string | number; + flag?: string | number; + } + ): Promise; + + copyFile( + source: string, + destination: string, + mode?: string | number + ): Promise; + + mkdir( + path: string, + options?: { recursive?: boolean; mode?: string | number } + ): Promise; + + mkdtemp(prefix: string): Promise; + + readdir( + path: string, + options?: { withFileTypes?: boolean } + ): Promise<(string | RollupDirectoryEntry)[]>; + + readFile( + path: string, + options?: { + encoding?: BufferEncoding | null; + flag?: string | number; + signal?: AbortSignal; + } + ): Promise; + + realpath(path: string): Promise; + + rename(oldPath: string, newPath: string): Promise; + + rmdir(path: string, options?: { recursive?: boolean }): Promise; + + stat(path: string): Promise; + + lstat(path: string): Promise; + + unlink(path: string): Promise; + + writeFile( + path: string, + data: string | ArrayBuffer | ArrayBufferView, + options?: { + encoding?: BufferEncoding | null; + mode?: string | number; + flag?: string | number; + } + ): Promise; +} + +type BufferEncoding = + | 'ascii' + | 'utf8' + | 'utf16le' + | 'ucs2' + | 'base64' + | 'base64url' + | 'latin1' + | 'binary' + | 'hex'; + +export interface RollupDirectoryEntry { + isFile(): boolean; + isDirectory(): boolean; + isSymbolicLink(): boolean; + name: string; +} + +interface RollupFileStats { + isFile(): boolean; + isDirectory(): boolean; + isSymbolicLink(): boolean; + size: number; + mtime: Date; + ctime: Date; + atime: Date; + birthtime: Date; +} +``` + ## watch | | | diff --git a/docs/faqs/index.md b/docs/faqs/index.md index 87f32463b..23903116d 100755 --- a/docs/faqs/index.md +++ b/docs/faqs/index.md @@ -106,102 +106,6 @@ This is however a problem for polyfills, as those usually need to be executed fi Rollup is already used by many major JavaScript libraries, and can also be used to build the vast majority of applications. However, if you want to use code-splitting or dynamic imports with older browsers, you will need an additional runtime to handle loading missing chunks. We recommend using the [SystemJS Production Build](https://github.com/systemjs/systemjs#browser-production) as it integrates nicely with Rollup's system format output and is capable of properly handling all the ES module live bindings and re-export edge cases. Alternatively, an AMD loader can be used as well. -## How do I run Rollup itself in a browser - -While the regular Rollup build relies on some NodeJS features, there is also a browser build available that only uses browser APIs. You can install it via - -```shell -npm install @rollup/browser -``` - -and in your script, import it via - -```js -import { rollup } from '@rollup/browser'; -``` - -Alternatively, you can import from a CDN, e.g. for the ESM build - -```js -import * as rollup from 'https://unpkg.com/@rollup/browser/dist/es/rollup.browser.js'; -``` - -and for the UMD build - -```html - -``` - -which will create a global variable `window.rollup`. As the browser build cannot access the file system, you need to provide plugins that resolve and load all modules you want to bundle. Here is a contrived example that does this: - -```js twoslash -/** @type {import('rollup')} */ -var rollup; -// ---cut--- -const modules = { - 'main.js': "import foo from 'foo.js'; console.log(foo);", - 'foo.js': 'export default 42;' -}; - -rollup - .rollup({ - input: 'main.js', - plugins: [ - { - name: 'loader', - resolveId(source) { - if (modules.hasOwnProperty(source)) { - return source; - } - }, - load(id) { - if (modules.hasOwnProperty(id)) { - return modules[id]; - } - } - } - ] - }) - .then(bundle => bundle.generate({ format: 'es' })) - .then(({ output }) => console.log(output[0].code)); -``` - -This example only supports two imports, `"main.js"` and `"foo.js"`, and no relative imports. Here is another example that uses absolute URLs as entry points and supports relative imports. In that case, we are just re-bundling Rollup itself, but it could be used on any other URL that exposes an ES module: - -```js twoslash -/** @type {import('rollup')} */ -var rollup; -// ---cut--- -rollup - .rollup({ - input: 'https://unpkg.com/rollup/dist/es/rollup.js', - plugins: [ - { - name: 'url-resolver', - resolveId(source, importer) { - if (source[0] !== '.') { - try { - new URL(source); - // If it is a valid URL, return it - return source; - } catch { - // Otherwise make it external - return { id: source, external: true }; - } - } - return new URL(source, importer).href; - }, - async load(id) { - const response = await fetch(id); - return response.text(); - } - } - ] - }) - .then(bundle => bundle.generate({ format: 'es' })) - .then(({ output }) => console.log(output)); -``` - ## Who made the Rollup logo? It's lovely. [Julian Lloyd](https://github.com/jlmakes)! diff --git a/docs/guide/en/slugs-and-pages-by-legacy-slugs.json b/docs/guide/en/slugs-and-pages-by-legacy-slugs.json index 62071ac40..40bb9bffd 100644 --- a/docs/guide/en/slugs-and-pages-by-legacy-slugs.json +++ b/docs/guide/en/slugs-and-pages-by-legacy-slugs.json @@ -1 +1 @@ -{"--bundleconfigascjs":["command-line-interface","bundleconfigascjs"],"--configplugin-plugin":["command-line-interface","configplugin-plugin"],"--environment-values":["command-line-interface","environment-values"],"--failafterwarnings":["command-line-interface","failafterwarnings"],"--no-stdin":["command-line-interface","no-stdin"],"--silent":["command-line-interface","silent"],"--stdinext":["command-line-interface","stdin-ext"],"--waitforbundleinput":["command-line-interface","waitforbundleinput"],"--watchonstart-cmd---watchonbundlestart-cmd---watchonbundleend-cmd---watchonend-cmd---watchonerror-cmd":["command-line-interface","watch-onstart-cmd-watch-onbundlestart-cmd-watch-onbundleend-cmd-watch-onend-cmd-watch-onerror-cmd"],"-h--help":["command-line-interface","h-help"],"-p-plugin---plugin-plugin":["command-line-interface","p-plugin-plugin-plugin"],"-v--version":["command-line-interface","v-version"],"-w--watch":["command-line-interface","w-watch"],"a-simple-example":["plugin-development","a-simple-example"],"advanced-functionality":["configuration-options","advanced-functionality"],"augmentchunkhash":["plugin-development","augmentchunkhash"],"avoiding-eval":["troubleshooting","avoiding-eval"],"babel":["tools","babel"],"banner":["plugin-development","banner"],"big-list-of-options":["configuration-options",""],"build-hooks":["plugin-development","build-hooks"],"buildend":["plugin-development","buildend"],"buildstart":["plugin-development","buildstart"],"cache":["configuration-options","cache"],"caveats-when-using-native-node-es-modules":["command-line-interface","caveats-when-using-native-node-es-modules"],"changed-defaults":["migration","changed-defaults"],"changes-to-the-plugin-api":["migration","changes-to-the-plugin-api-1"],"closebundle":["plugin-development","closebundle"],"closewatcher":["plugin-development","closewatcher"],"code-splitting":["tutorial","code-splitting"],"command-line-flags":["command-line-interface","command-line-flags"],"command-line-reference":["command-line-interface",""],"compatibility":["introduction","compatibility"],"config-intellisense":["command-line-interface","config-intellisense"],"configuration-files":["command-line-interface","configuration-files"],"context":["configuration-options","context"],"conventions":["plugin-development","conventions"],"core-functionality":["configuration-options","core-functionality"],"creating-your-first-bundle":["tutorial","creating-your-first-bundle"],"custom-module-meta-data":["plugin-development","custom-module-meta-data"],"custom-resolver-options":["plugin-development","custom-resolver-options"],"danger-zone":["configuration-options","danger-zone"],"default-export":["es-module-syntax","default-export"],"default-import":["es-module-syntax","default-import"],"deno":["tools","deno"],"deprecated-options":["configuration-options","deprecated-options"],"differences-to-the-javascript-api":["command-line-interface","differences-to-the-javascript-api"],"direct-plugin-communication":["plugin-development","direct-plugin-communication"],"dynamic-import":["es-module-syntax","dynamic-import"],"dynamic-import-in-commonjs-output":["migration","dynamic-import-in-commonjs-output"],"empty-import":["es-module-syntax","empty-import"],"error-emfile-too-many-open-files":["troubleshooting","error-emfile-too-many-open-files"],"error-javascript-heap-out-of-memory":["troubleshooting","error-javascript-heap-out-of-memory"],"error-name-is-not-exported-by-module":["troubleshooting","error-name-is-not-exported-by-module"],"error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module":["troubleshooting","error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module"],"error-this-is-undefined":["troubleshooting","error-this-is-undefined"],"es-module-syntax":["es-module-syntax",""],"eval2--eval":["troubleshooting","eval2-eval"],"example-transformer":["plugin-development","example-transformer"],"experimental-options":["configuration-options","experimental-options"],"experimentalcacheexpiry":["configuration-options","experimentalcacheexpiry"],"exporting":["es-module-syntax","exporting"],"external":["configuration-options","external"],"faqs":["faqs",""],"file-urls":["plugin-development","file-urls"],"footer":["plugin-development","footer"],"generatebundle":["plugin-development","generatebundle"],"getting-the-current-directory":["command-line-interface","getting-the-current-directory"],"gulp":["tools","gulp"],"how-bindings-work":["es-module-syntax","how-bindings-work"],"how-do-i-add-polyfills-to-a-rollup-bundle":["faqs","how-do-i-add-polyfills-to-a-rollup-bundle"],"how-do-i-run-rollup-itself-in-a-browser":["faqs","how-do-i-run-rollup-itself-in-a-browser"],"how-do-i-use-rollup-in-nodejs-with-commonjs-modules":["faqs","how-do-i-use-rollup-in-node-js-with-commonjs-modules"],"importing":["es-module-syntax","importing"],"importing-commonjs":["introduction","importing-commonjs"],"importing-packagejson":["command-line-interface","importing-package-json"],"input":["configuration-options","input"],"inputoptions-object":["javascript-api","inputoptions-object"],"installation":["introduction","installation"],"installing-rollup-locally":["tutorial","installing-rollup-locally"],"inter-plugin-communication":["plugin-development","inter-plugin-communication"],"intro":["plugin-development","intro"],"introduction":["introduction",""],"is-rollup-meant-for-building-libraries-or-applications":["faqs","is-rollup-meant-for-building-libraries-or-applications"],"javascript-api":["javascript-api",""],"load":["plugin-development","load"],"loading-a-configuration-from-a-node-package":["command-line-interface","loading-a-configuration-from-a-node-package"],"makeabsoluteexternalsrelative":["configuration-options","makeabsoluteexternalsrelative"],"maxparallelfileops":["configuration-options","maxparallelfileops"],"migration":["migration",""],"modulecontext":["configuration-options","modulecontext"],"moduleparsed":["plugin-development","moduleparsed"],"more-changed-options":["migration","more-changed-options"],"name":["plugin-development","name"],"named-exports":["es-module-syntax","named-exports"],"named-imports":["es-module-syntax","named-imports"],"namespace-imports":["es-module-syntax","namespace-imports"],"new-function":["troubleshooting","new-function"],"onwarn":["configuration-options","onwarn"],"options":["plugin-development","options"],"output-generation-hooks":["plugin-development","output-generation-hooks"],"outputamd":["configuration-options","output-amd"],"outputassetfilenames":["configuration-options","output-assetfilenames"],"outputbanneroutputfooter":["configuration-options","output-banner-output-footer"],"outputchunkfilenames":["configuration-options","output-chunkfilenames"],"outputcompact":["configuration-options","output-compact"],"outputdir":["configuration-options","output-dir"],"outputdynamicimportincjs":["configuration-options","output-dynamicimportincjs"],"outputentryfilenames":["configuration-options","output-entryfilenames"],"outputesmodule":["configuration-options","output-esmodule"],"outputexports":["configuration-options","output-exports"],"outputextend":["configuration-options","output-extend"],"outputexternalimportassertions":["configuration-options","output-externalimportassertions"],"outputexternallivebindings":["configuration-options","output-externallivebindings"],"outputfile":["configuration-options","output-file"],"outputformat":["configuration-options","output-format"],"outputfreeze":["configuration-options","output-freeze"],"outputgeneratedcode":["configuration-options","output-generatedcode"],"outputglobals":["configuration-options","output-globals"],"outputhoisttransitiveimports":["configuration-options","output-hoisttransitiveimports"],"outputindent":["configuration-options","output-indent"],"outputinlinedynamicimports":["configuration-options","output-inlinedynamicimports"],"outputinterop":["configuration-options","output-interop"],"outputintrooutputoutro":["configuration-options","output-intro-output-outro"],"outputmanualchunks":["configuration-options","output-manualchunks"],"outputminifyinternalexports":["configuration-options","output-minifyinternalexports"],"outputname":["configuration-options","output-name"],"outputnoconflict":["configuration-options","output-noconflict"],"outputoptions":["plugin-development","outputoptions"],"outputoptions-object":["javascript-api","outputoptions-object"],"outputpaths":["configuration-options","output-paths"],"outputplugins":["configuration-options","output-plugins"],"outputpreservemodules":["configuration-options","output-preservemodules"],"outputpreservemodulesroot":["configuration-options","output-preservemodulesroot"],"outputsanitizefilename":["configuration-options","output-sanitizefilename"],"outputsourcemap":["configuration-options","output-sourcemap"],"outputsourcemapbaseurl":["configuration-options","output-sourcemapbaseurl"],"outputsourcemapexcludesources":["configuration-options","output-sourcemapexcludesources"],"outputsourcemapfile":["configuration-options","output-sourcemapfile"],"outputsourcemappathtransform":["configuration-options","output-sourcemappathtransform"],"outputstrict":["configuration-options","output-strict"],"outputsystemnullsetters":["configuration-options","output-systemnullsetters"],"outputvalidate":["configuration-options","output-validate"],"outro":["plugin-development","outro"],"overview":["introduction","overview"],"peer-dependencies":["tools","peer-dependencies"],"perf":["configuration-options","perf"],"plugin-context":["plugin-development","plugin-context"],"plugin-development":["plugin-development",""],"plugins":["configuration-options","plugins"],"plugins-overview":["plugin-development","plugins-overview"],"prerequisites":["migration","prerequisites-1"],"preserveentrysignatures":["configuration-options","preserveentrysignatures"],"preservesymlinks":["configuration-options","preservesymlinks"],"programmatically-loading-a-config-file":["javascript-api","programmatically-loading-a-config-file"],"properties":["plugin-development","properties"],"publishing-es-modules":["introduction","publishing-es-modules"],"quick-start":["introduction","quick-start"],"reading-a-file-from-stdin":["command-line-interface","reading-a-file-from-stdin"],"renderchunk":["plugin-development","renderchunk"],"renderdynamicimport":["plugin-development","renderdynamicimport"],"rendererror":["plugin-development","rendererror"],"renderstart":["plugin-development","renderstart"],"resolvedynamicimport":["plugin-development","resolvedynamicimport"],"resolvefileurl":["plugin-development","resolvefileurl"],"resolveid":["plugin-development","resolveid"],"resolveimportmeta":["plugin-development","resolveimportmeta"],"rollupplugin-commonjs":["tools","rollup-plugin-commonjs"],"rollupplugin-node-resolve":["tools","rollup-plugin-node-resolve"],"rolluprollup":["javascript-api","rollup-rollup"],"rollupwatch":["javascript-api","rollup-watch"],"shimmissingexports":["configuration-options","shimmissingexports"],"shouldtransformcachedmodule":["plugin-development","shouldtransformcachedmodule"],"source-code-transformations":["plugin-development","source-code-transformations"],"strictdeprecations":["configuration-options","strictdeprecations"],"synthetic-named-exports":["plugin-development","synthetic-named-exports"],"the-why":["introduction","the-why"],"thisaddwatchfile":["plugin-development","this-addwatchfile"],"thisemitfile":["plugin-development","this-emitfile"],"thiserror":["plugin-development","this-error"],"thisgetcombinedsourcemap":["plugin-development","this-getcombinedsourcemap"],"thisgetfilename":["plugin-development","this-getfilename"],"thisgetmoduleids":["plugin-development","this-getmoduleids"],"thisgetmoduleinfo":["plugin-development","this-getmoduleinfo"],"thisgetwatchfiles":["plugin-development","this-getwatchfiles"],"thisload":["plugin-development","this-load"],"thismeta":["plugin-development","this-meta"],"thisparse":["plugin-development","this-parse"],"thisresolve":["plugin-development","this-resolve"],"thissetassetsource":["plugin-development","this-setassetsource"],"thiswarn":["plugin-development","this-warn"],"tools":["tools",""],"transform":["plugin-development","transform"],"transformers":["plugin-development","transformers"],"tree-shaking":["introduction","tree-shaking"],"tree-shaking-doesnt-seem-to-be-working":["troubleshooting","tree-shaking-doesn-t-seem-to-be-working"],"treeshake":["configuration-options","treeshake"],"troubleshooting":["troubleshooting",""],"tutorial":["tutorial",""],"using-config-files":["tutorial","using-config-files"],"using-configuration-files":["migration","using-configuration-files"],"using-output-plugins":["tutorial","using-output-plugins"],"using-plugins":["tutorial","using-plugins"],"warning-sourcemap-is-likely-to-be-incorrect":["troubleshooting","warning-sourcemap-is-likely-to-be-incorrect"],"warning-treating-module-as-external-dependency":["troubleshooting","warning-treating-module-as-external-dependency"],"watch-options":["configuration-options","watch"],"watchbuilddelay":["configuration-options","watch-builddelay"],"watchchange":["plugin-development","watchchange"],"watchchokidar":["configuration-options","watch-chokidar"],"watchclearscreen":["configuration-options","watch-clearscreen"],"watchexclude":["configuration-options","watch-exclude"],"watchinclude":["configuration-options","watch-include"],"watchoptions":["javascript-api","watchoptions"],"watchskipwrite":["configuration-options","watch-skipwrite"],"what-is-tree-shaking":["faqs","what-is-tree-shaking"],"who-made-the-rollup-logo-its-lovely":["faqs","who-made-the-rollup-logo-it-s-lovely"],"why-are-es-modules-better-than-commonjs-modules":["faqs","why-are-es-modules-better-than-commonjs-modules"],"why-do-additional-imports-turn-up-in-my-entry-chunks-when-code-splitting":["faqs","why-do-additional-imports-turn-up-in-my-entry-chunks-when-code-splitting"],"why-isnt-node-resolve-a-built-in-feature":["faqs","why-isn-t-node-resolve-a-built-in-feature"],"with-npm-packages":["tools","with-npm-packages"],"writebundle":["plugin-development","writebundle"]} \ No newline at end of file +{"--bundleconfigascjs":["command-line-interface","bundleconfigascjs"],"--configplugin-plugin":["command-line-interface","configplugin-plugin"],"--environment-values":["command-line-interface","environment-values"],"--failafterwarnings":["command-line-interface","failafterwarnings"],"--no-stdin":["command-line-interface","no-stdin"],"--silent":["command-line-interface","silent"],"--stdinext":["command-line-interface","stdin-ext"],"--waitforbundleinput":["command-line-interface","waitforbundleinput"],"--watchonstart-cmd---watchonbundlestart-cmd---watchonbundleend-cmd---watchonend-cmd---watchonerror-cmd":["command-line-interface","watch-onstart-cmd-watch-onbundlestart-cmd-watch-onbundleend-cmd-watch-onend-cmd-watch-onerror-cmd"],"-h--help":["command-line-interface","h-help"],"-p-plugin---plugin-plugin":["command-line-interface","p-plugin-plugin-plugin"],"-v--version":["command-line-interface","v-version"],"-w--watch":["command-line-interface","w-watch"],"a-simple-example":["plugin-development","a-simple-example"],"advanced-functionality":["configuration-options","advanced-functionality"],"augmentchunkhash":["plugin-development","augmentchunkhash"],"avoiding-eval":["troubleshooting","avoiding-eval"],"babel":["tools","babel"],"banner":["plugin-development","banner"],"big-list-of-options":["configuration-options",""],"build-hooks":["plugin-development","build-hooks"],"buildend":["plugin-development","buildend"],"buildstart":["plugin-development","buildstart"],"cache":["configuration-options","cache"],"caveats-when-using-native-node-es-modules":["command-line-interface","caveats-when-using-native-node-es-modules"],"changed-defaults":["migration","changed-defaults"],"changes-to-the-plugin-api":["migration","changes-to-the-plugin-api-1"],"closebundle":["plugin-development","closebundle"],"closewatcher":["plugin-development","closewatcher"],"code-splitting":["tutorial","code-splitting"],"command-line-flags":["command-line-interface","command-line-flags"],"command-line-reference":["command-line-interface",""],"compatibility":["introduction","compatibility"],"config-intellisense":["command-line-interface","config-intellisense"],"configuration-files":["command-line-interface","configuration-files"],"context":["configuration-options","context"],"conventions":["plugin-development","conventions"],"core-functionality":["configuration-options","core-functionality"],"creating-your-first-bundle":["tutorial","creating-your-first-bundle"],"custom-module-meta-data":["plugin-development","custom-module-meta-data"],"custom-resolver-options":["plugin-development","custom-resolver-options"],"danger-zone":["configuration-options","danger-zone"],"default-export":["es-module-syntax","default-export"],"default-import":["es-module-syntax","default-import"],"deno":["tools","deno"],"deprecated-options":["configuration-options","deprecated-options"],"differences-to-the-javascript-api":["command-line-interface","differences-to-the-javascript-api"],"direct-plugin-communication":["plugin-development","direct-plugin-communication"],"dynamic-import":["es-module-syntax","dynamic-import"],"dynamic-import-in-commonjs-output":["migration","dynamic-import-in-commonjs-output"],"empty-import":["es-module-syntax","empty-import"],"error-emfile-too-many-open-files":["troubleshooting","error-emfile-too-many-open-files"],"error-javascript-heap-out-of-memory":["troubleshooting","error-javascript-heap-out-of-memory"],"error-name-is-not-exported-by-module":["troubleshooting","error-name-is-not-exported-by-module"],"error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module":["troubleshooting","error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module"],"error-this-is-undefined":["troubleshooting","error-this-is-undefined"],"es-module-syntax":["es-module-syntax",""],"eval2--eval":["troubleshooting","eval2-eval"],"example-transformer":["plugin-development","example-transformer"],"experimental-options":["configuration-options","experimental-options"],"experimentalcacheexpiry":["configuration-options","experimentalcacheexpiry"],"exporting":["es-module-syntax","exporting"],"external":["configuration-options","external"],"faqs":["faqs",""],"file-urls":["plugin-development","file-urls"],"footer":["plugin-development","footer"],"generatebundle":["plugin-development","generatebundle"],"getting-the-current-directory":["command-line-interface","getting-the-current-directory"],"gulp":["tools","gulp"],"how-bindings-work":["es-module-syntax","how-bindings-work"],"how-do-i-add-polyfills-to-a-rollup-bundle":["faqs","how-do-i-add-polyfills-to-a-rollup-bundle"],"how-do-i-use-rollup-in-nodejs-with-commonjs-modules":["faqs","how-do-i-use-rollup-in-node-js-with-commonjs-modules"],"importing":["es-module-syntax","importing"],"importing-commonjs":["introduction","importing-commonjs"],"importing-packagejson":["command-line-interface","importing-package-json"],"input":["configuration-options","input"],"inputoptions-object":["javascript-api","inputoptions-object"],"installation":["introduction","installation"],"installing-rollup-locally":["tutorial","installing-rollup-locally"],"inter-plugin-communication":["plugin-development","inter-plugin-communication"],"intro":["plugin-development","intro"],"introduction":["introduction",""],"is-rollup-meant-for-building-libraries-or-applications":["faqs","is-rollup-meant-for-building-libraries-or-applications"],"javascript-api":["javascript-api",""],"load":["plugin-development","load"],"loading-a-configuration-from-a-node-package":["command-line-interface","loading-a-configuration-from-a-node-package"],"makeabsoluteexternalsrelative":["configuration-options","makeabsoluteexternalsrelative"],"maxparallelfileops":["configuration-options","maxparallelfileops"],"migration":["migration",""],"modulecontext":["configuration-options","modulecontext"],"moduleparsed":["plugin-development","moduleparsed"],"more-changed-options":["migration","more-changed-options"],"name":["plugin-development","name"],"named-exports":["es-module-syntax","named-exports"],"named-imports":["es-module-syntax","named-imports"],"namespace-imports":["es-module-syntax","namespace-imports"],"new-function":["troubleshooting","new-function"],"onwarn":["configuration-options","onwarn"],"options":["plugin-development","options"],"output-generation-hooks":["plugin-development","output-generation-hooks"],"outputamd":["configuration-options","output-amd"],"outputassetfilenames":["configuration-options","output-assetfilenames"],"outputbanneroutputfooter":["configuration-options","output-banner-output-footer"],"outputchunkfilenames":["configuration-options","output-chunkfilenames"],"outputcompact":["configuration-options","output-compact"],"outputdir":["configuration-options","output-dir"],"outputdynamicimportincjs":["configuration-options","output-dynamicimportincjs"],"outputentryfilenames":["configuration-options","output-entryfilenames"],"outputesmodule":["configuration-options","output-esmodule"],"outputexports":["configuration-options","output-exports"],"outputextend":["configuration-options","output-extend"],"outputexternalimportassertions":["configuration-options","output-externalimportassertions"],"outputexternallivebindings":["configuration-options","output-externallivebindings"],"outputfile":["configuration-options","output-file"],"outputformat":["configuration-options","output-format"],"outputfreeze":["configuration-options","output-freeze"],"outputgeneratedcode":["configuration-options","output-generatedcode"],"outputglobals":["configuration-options","output-globals"],"outputhoisttransitiveimports":["configuration-options","output-hoisttransitiveimports"],"outputindent":["configuration-options","output-indent"],"outputinlinedynamicimports":["configuration-options","output-inlinedynamicimports"],"outputinterop":["configuration-options","output-interop"],"outputintrooutputoutro":["configuration-options","output-intro-output-outro"],"outputmanualchunks":["configuration-options","output-manualchunks"],"outputminifyinternalexports":["configuration-options","output-minifyinternalexports"],"outputname":["configuration-options","output-name"],"outputnoconflict":["configuration-options","output-noconflict"],"outputoptions":["plugin-development","outputoptions"],"outputoptions-object":["javascript-api","outputoptions-object"],"outputpaths":["configuration-options","output-paths"],"outputplugins":["configuration-options","output-plugins"],"outputpreservemodules":["configuration-options","output-preservemodules"],"outputpreservemodulesroot":["configuration-options","output-preservemodulesroot"],"outputsanitizefilename":["configuration-options","output-sanitizefilename"],"outputsourcemap":["configuration-options","output-sourcemap"],"outputsourcemapbaseurl":["configuration-options","output-sourcemapbaseurl"],"outputsourcemapexcludesources":["configuration-options","output-sourcemapexcludesources"],"outputsourcemapfile":["configuration-options","output-sourcemapfile"],"outputsourcemappathtransform":["configuration-options","output-sourcemappathtransform"],"outputstrict":["configuration-options","output-strict"],"outputsystemnullsetters":["configuration-options","output-systemnullsetters"],"outputvalidate":["configuration-options","output-validate"],"outro":["plugin-development","outro"],"overview":["introduction","overview"],"peer-dependencies":["tools","peer-dependencies"],"perf":["configuration-options","perf"],"plugin-context":["plugin-development","plugin-context"],"plugin-development":["plugin-development",""],"plugins":["configuration-options","plugins"],"plugins-overview":["plugin-development","plugins-overview"],"prerequisites":["migration","prerequisites-1"],"preserveentrysignatures":["configuration-options","preserveentrysignatures"],"preservesymlinks":["configuration-options","preservesymlinks"],"programmatically-loading-a-config-file":["javascript-api","programmatically-loading-a-config-file"],"properties":["plugin-development","properties"],"publishing-es-modules":["introduction","publishing-es-modules"],"quick-start":["introduction","quick-start"],"reading-a-file-from-stdin":["command-line-interface","reading-a-file-from-stdin"],"renderchunk":["plugin-development","renderchunk"],"renderdynamicimport":["plugin-development","renderdynamicimport"],"rendererror":["plugin-development","rendererror"],"renderstart":["plugin-development","renderstart"],"resolvedynamicimport":["plugin-development","resolvedynamicimport"],"resolvefileurl":["plugin-development","resolvefileurl"],"resolveid":["plugin-development","resolveid"],"resolveimportmeta":["plugin-development","resolveimportmeta"],"rollupplugin-commonjs":["tools","rollup-plugin-commonjs"],"rollupplugin-node-resolve":["tools","rollup-plugin-node-resolve"],"rolluprollup":["javascript-api","rollup-rollup"],"rollupwatch":["javascript-api","rollup-watch"],"shimmissingexports":["configuration-options","shimmissingexports"],"shouldtransformcachedmodule":["plugin-development","shouldtransformcachedmodule"],"source-code-transformations":["plugin-development","source-code-transformations"],"strictdeprecations":["configuration-options","strictdeprecations"],"synthetic-named-exports":["plugin-development","synthetic-named-exports"],"the-why":["introduction","the-why"],"thisaddwatchfile":["plugin-development","this-addwatchfile"],"thisemitfile":["plugin-development","this-emitfile"],"thiserror":["plugin-development","this-error"],"thisgetcombinedsourcemap":["plugin-development","this-getcombinedsourcemap"],"thisgetfilename":["plugin-development","this-getfilename"],"thisgetmoduleids":["plugin-development","this-getmoduleids"],"thisgetmoduleinfo":["plugin-development","this-getmoduleinfo"],"thisgetwatchfiles":["plugin-development","this-getwatchfiles"],"thisload":["plugin-development","this-load"],"thismeta":["plugin-development","this-meta"],"thisparse":["plugin-development","this-parse"],"thisresolve":["plugin-development","this-resolve"],"thissetassetsource":["plugin-development","this-setassetsource"],"thiswarn":["plugin-development","this-warn"],"tools":["tools",""],"transform":["plugin-development","transform"],"transformers":["plugin-development","transformers"],"tree-shaking":["introduction","tree-shaking"],"tree-shaking-doesnt-seem-to-be-working":["troubleshooting","tree-shaking-doesn-t-seem-to-be-working"],"treeshake":["configuration-options","treeshake"],"troubleshooting":["troubleshooting",""],"tutorial":["tutorial",""],"using-config-files":["tutorial","using-config-files"],"using-configuration-files":["migration","using-configuration-files"],"using-output-plugins":["tutorial","using-output-plugins"],"using-plugins":["tutorial","using-plugins"],"warning-sourcemap-is-likely-to-be-incorrect":["troubleshooting","warning-sourcemap-is-likely-to-be-incorrect"],"warning-treating-module-as-external-dependency":["troubleshooting","warning-treating-module-as-external-dependency"],"watch-options":["configuration-options","watch"],"watchbuilddelay":["configuration-options","watch-builddelay"],"watchchange":["plugin-development","watchchange"],"watchchokidar":["configuration-options","watch-chokidar"],"watchclearscreen":["configuration-options","watch-clearscreen"],"watchexclude":["configuration-options","watch-exclude"],"watchinclude":["configuration-options","watch-include"],"watchoptions":["javascript-api","watchoptions"],"watchskipwrite":["configuration-options","watch-skipwrite"],"what-is-tree-shaking":["faqs","what-is-tree-shaking"],"who-made-the-rollup-logo-its-lovely":["faqs","who-made-the-rollup-logo-it-s-lovely"],"why-are-es-modules-better-than-commonjs-modules":["faqs","why-are-es-modules-better-than-commonjs-modules"],"why-do-additional-imports-turn-up-in-my-entry-chunks-when-code-splitting":["faqs","why-do-additional-imports-turn-up-in-my-entry-chunks-when-code-splitting"],"why-isnt-node-resolve-a-built-in-feature":["faqs","why-isn-t-node-resolve-a-built-in-feature"],"with-npm-packages":["tools","with-npm-packages"],"writebundle":["plugin-development","writebundle"]} \ No newline at end of file diff --git a/docs/javascript-api/index.md b/docs/javascript-api/index.md index 6f2446cb6..081fedec0 100755 --- a/docs/javascript-api/index.md +++ b/docs/javascript-api/index.md @@ -167,7 +167,8 @@ const inputOptions = { // experimental experimentalCacheExpiry, experimentalLogSideEffects, - perf + perf, + fs }; ``` diff --git a/docs/plugin-development/index.md b/docs/plugin-development/index.md index b822473a6..3606a87f1 100644 --- a/docs/plugin-development/index.md +++ b/docs/plugin-development/index.md @@ -1596,6 +1596,14 @@ function myPlugin() { When used in the `transform` hook, the `id` of the current module will also be added and a `position` can be supplied. This is a character index or file location which will be used to augment the log with `pos`, `loc` (a standard `{ file, line, column }` object) and `frame` (a snippet of code showing the location). +### this.fs + +| | | +| ----: | :--------------- | +| Type: | `RollupFsModule` | + +Provides abstract access to the file system. For the `RollupFsModule` type, see the documentation of the [`fs` option](../configuration-options/index.md#fs). If plugins use this instead of directly importing `node:fs`, then they can be used in browser builds that provide an in-memory file system via the `fs` option. + ### this.getCombinedSourcemap | | | diff --git a/package-lock.json b/package-lock.json index a316e408c..cf52a5569 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,6 +69,7 @@ "lint-staged": "^16.1.0", "locate-character": "^3.0.0", "magic-string": "^0.30.17", + "memfs": "^4.17.0", "mocha": "^11.5.0", "nodemon": "^3.1.10", "nyc": "^17.1.0", @@ -2342,6 +2343,63 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz", + "integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.6.0.tgz", + "integrity": "sha512-sw/RMbehRhN68WRtcKCpQOPfnH6lLP4GJfqzi3iYej8tnzpZUDr6UkZYJjcjjC0FWEJOJbyM3PTIwxucUmDG2A==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/@lezer/common": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", @@ -3780,17 +3838,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.1.tgz", - "integrity": "sha512-TDCXj+YxLgtvxvFlAvpoRv9MAncDLBV2oT9Bd7YBGC/b/sEURoOYuIwLI99rjWOfY3QtDzO+mk0n4AmdFExW8A==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.0.tgz", + "integrity": "sha512-QXwAlHlbcAwNlEEMKQS2RCgJsgXrTJdjXT08xEgbPFa2yYQgVjBymxP5DrfrE7X7iodSzd9qBUHUycdyVJTW1w==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/type-utils": "8.33.1", - "@typescript-eslint/utils": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", + "@typescript-eslint/scope-manager": "8.34.0", + "@typescript-eslint/type-utils": "8.34.0", + "@typescript-eslint/utils": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -3804,7 +3862,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.33.1", + "@typescript-eslint/parser": "^8.34.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } @@ -3820,16 +3878,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.1.tgz", - "integrity": "sha512-qwxv6dq682yVvgKKp2qWwLgRbscDAYktPptK4JPojCwwi3R9cwrvIxS4lvBpzmcqzR4bdn54Z0IG1uHFskW4dA==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.0.tgz", + "integrity": "sha512-vxXJV1hVFx3IXz/oy2sICsJukaBrtDEQSBiV48/YIV5KWjX1dO+bcIr/kCPrW6weKXvsaGKFNlwH0v2eYdRRbA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/typescript-estree": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", + "@typescript-eslint/scope-manager": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/typescript-estree": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0", "debug": "^4.3.4" }, "engines": { @@ -3845,14 +3903,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.1.tgz", - "integrity": "sha512-DZR0efeNklDIHHGRpMpR5gJITQpu6tLr9lDJnKdONTC7vvzOlLAG/wcfxcdxEWrbiZApcoBCzXqU/Z458Za5Iw==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.0.tgz", + "integrity": "sha512-iEgDALRf970/B2YExmtPMPF54NenZUf4xpL3wsCRx/lgjz6ul/l13R81ozP/ZNuXfnLCS+oPmG7JIxfdNYKELw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.33.1", - "@typescript-eslint/types": "^8.33.1", + "@typescript-eslint/tsconfig-utils": "^8.34.0", + "@typescript-eslint/types": "^8.34.0", "debug": "^4.3.4" }, "engines": { @@ -3867,14 +3925,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.1.tgz", - "integrity": "sha512-dM4UBtgmzHR9bS0Rv09JST0RcHYearoEoo3pG5B6GoTR9XcyeqX87FEhPo+5kTvVfKCvfHaHrcgeJQc6mrDKrA==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.0.tgz", + "integrity": "sha512-9Ac0X8WiLykl0aj1oYQNcLZjHgBojT6cW68yAgZ19letYu+Hxd0rE0veI1XznSSst1X5lwnxhPbVdwjDRIomRw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1" + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3885,9 +3943,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.1.tgz", - "integrity": "sha512-STAQsGYbHCF0/e+ShUQ4EatXQ7ceh3fBCXkNU7/MZVKulrlq1usH7t2FhxvCpuCi5O5oi1vmVaAjrGeL71OK1g==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.0.tgz", + "integrity": "sha512-+W9VYHKFIzA5cBeooqQxqNriAP0QeQ7xTiDuIOr71hzgffm3EL2hxwWBIIj4GuofIbKxGNarpKqIq6Q6YrShOA==", "dev": true, "license": "MIT", "engines": { @@ -3902,14 +3960,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.1.tgz", - "integrity": "sha512-1cG37d9xOkhlykom55WVwG2QRNC7YXlxMaMzqw2uPeJixBFfKWZgaP/hjAObqMN/u3fr5BrTwTnc31/L9jQ2ww==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.0.tgz", + "integrity": "sha512-n7zSmOcUVhcRYC75W2pnPpbO1iwhJY3NLoHEtbJwJSNlVAZuwqu05zY3f3s2SDWWDSo9FdN5szqc73DCtDObAg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.33.1", - "@typescript-eslint/utils": "8.33.1", + "@typescript-eslint/typescript-estree": "8.34.0", + "@typescript-eslint/utils": "8.34.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -3926,9 +3984,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.1.tgz", - "integrity": "sha512-xid1WfizGhy/TKMTwhtVOgalHwPtV8T32MS9MaH50Cwvz6x6YqRIPdD2WvW0XaqOzTV9p5xdLY0h/ZusU5Lokg==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.0.tgz", + "integrity": "sha512-9V24k/paICYPniajHfJ4cuAWETnt7Ssy+R0Rbcqo5sSFr3QEZ/8TSoUi9XeXVBGXCaLtwTOKSLGcInCAvyZeMA==", "dev": true, "license": "MIT", "engines": { @@ -3940,16 +3998,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.1.tgz", - "integrity": "sha512-+s9LYcT8LWjdYWu7IWs7FvUxpQ/DGkdjZeE/GGulHvv8rvYwQvVaUZ6DE+j5x/prADUgSbbCWZ2nPI3usuVeOA==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.0.tgz", + "integrity": "sha512-rOi4KZxI7E0+BMqG7emPSK1bB4RICCpF7QD3KCLXn9ZvWoESsOMlHyZPAHyG04ujVplPaHbmEvs34m+wjgtVtg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.33.1", - "@typescript-eslint/tsconfig-utils": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/visitor-keys": "8.33.1", + "@typescript-eslint/project-service": "8.34.0", + "@typescript-eslint/tsconfig-utils": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/visitor-keys": "8.34.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -3969,16 +4027,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.1.tgz", - "integrity": "sha512-52HaBiEQUaRYqAXpfzWSR2U3gxk92Kw006+xZpElaPMg3C4PgM+A5LqwoQI1f9E5aZ/qlxAZxzm42WX+vn92SQ==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.0.tgz", + "integrity": "sha512-8L4tWatGchV9A1cKbjaavS6mwYwp39jql8xUmIIKJdm+qiaeHy5KMKlBrf30akXAWBzn2SqKsNOtSENWUwg7XQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.33.1", - "@typescript-eslint/types": "8.33.1", - "@typescript-eslint/typescript-estree": "8.33.1" + "@typescript-eslint/scope-manager": "8.34.0", + "@typescript-eslint/types": "8.34.0", + "@typescript-eslint/typescript-estree": "8.34.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3993,13 +4051,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.1.tgz", - "integrity": "sha512-3i8NrFcZeeDHJ+7ZUuDkGT+UHq+XoFGsymNK2jZCOHcfEzRQ0BdpRtdpSx/Iyf3MHLWIcLS0COuOPibKQboIiQ==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.0.tgz", + "integrity": "sha512-qHV7pW7E85A0x6qyrFn+O+q1k1p3tQCsqIZ1KZ5ESLXY57aTvUd3/a4rdPTeXisvhXn2VQG0VSKUqs8KHF2zcA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.33.1", + "@typescript-eslint/types": "8.34.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -8573,6 +8631,16 @@ "url": "https://github.com/sponsors/typicode" } }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -10031,6 +10099,26 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/memfs": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.2.tgz", + "integrity": "sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -10749,9 +10837,9 @@ } }, "node_modules/mocha": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz", - "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==", + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.6.0.tgz", + "integrity": "sha512-i0JVb+OUBqw63X/1pC3jCyJsqYisgxySBbsQa8TKvefpA1oEnw7JXxXnftfMHRsw7bEEVGRtVlHcDYXBa7FzVw==", "dev": true, "license": "MIT", "dependencies": { @@ -10771,7 +10859,7 @@ "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", - "workerpool": "^6.5.1", + "workerpool": "^9.2.0", "yargs": "^17.7.2", "yargs-parser": "^21.1.1", "yargs-unparser": "^2.0.0" @@ -14003,6 +14091,19 @@ "node": ">=0.8" } }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, "node_modules/thread-stream": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz", @@ -14101,6 +14202,23 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/tree-dump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz", + "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -14299,15 +14417,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.33.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.1.tgz", - "integrity": "sha512-AgRnV4sKkWOiZ0Kjbnf5ytTJXMUZQ0qhSVdQtDNYLPLnjsATEYhaO94GlRQwi4t4gO8FfjM6NnikHeKjUm8D7A==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.0.tgz", + "integrity": "sha512-MRpfN7uYjTrTGigFCt8sRyNqJFhjN0WwZecldaqhWm+wy0gaRt8Edb/3cuUy0zdq2opJWT6iXINKAtewnDOltQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.33.1", - "@typescript-eslint/parser": "8.33.1", - "@typescript-eslint/utils": "8.33.1" + "@typescript-eslint/eslint-plugin": "8.34.0", + "@typescript-eslint/parser": "8.34.0", + "@typescript-eslint/utils": "8.34.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -15309,9 +15427,9 @@ } }, "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.2.tgz", + "integrity": "sha512-Xz4Nm9c+LiBHhDR5bDLnNzmj6+5F+cyEAWPMkbs2awq/dYazR/efelZzUAjB/y3kNHL+uzkHvxVVpaOfGCPV7A==", "dev": true, "license": "Apache-2.0" }, diff --git a/package.json b/package.json index 7e1fe7129..af287fe52 100644 --- a/package.json +++ b/package.json @@ -171,6 +171,7 @@ "lint-staged": "^16.1.0", "locate-character": "^3.0.0", "magic-string": "^0.30.17", + "memfs": "^4.17.0", "mocha": "^11.5.0", "nodemon": "^3.1.10", "nyc": "^17.1.0", diff --git a/scripts/prepare-release.js b/scripts/prepare-release.js index f7696ab4f..b879fce10 100755 --- a/scripts/prepare-release.js +++ b/scripts/prepare-release.js @@ -193,7 +193,7 @@ function getDummyLogSection(headline, pr) { */ async function installDependenciesAndLint() { await runWithEcho('npm', ['ci', '--ignore-scripts']); - await runWithEcho('npm', ['audit']); + await runWithEcho('npm', ['audit', '--audit-level', 'moderate']); await runWithEcho('npm', ['run', 'ci:lint']); } diff --git a/src/ModuleLoader.ts b/src/ModuleLoader.ts index 210c1148b..b1aea19e9 100644 --- a/src/ModuleLoader.ts +++ b/src/ModuleLoader.ts @@ -15,9 +15,7 @@ import type { ResolvedId, ResolveIdResult } from './rollup/types'; -import type { PluginDriver } from './utils/PluginDriver'; import { EMPTY_OBJECT } from './utils/blank'; -import { readFile } from './utils/fs'; import { LOGLEVEL_WARN } from './utils/logging'; import { error, @@ -39,6 +37,7 @@ import { getAttributesFromImportExpression } from './utils/parseImportAttributes'; import { isAbsolute, isRelative, resolve } from './utils/path'; +import type { PluginDriver } from './utils/PluginDriver'; import relativeId from './utils/relativeId'; import { resolveId } from './utils/resolveId'; import stripBom from './utils/stripBom'; @@ -228,7 +227,8 @@ export class ModuleLoader { skip, customOptions, typeof isEntry === 'boolean' ? isEntry : !importer, - attributes + attributes, + this.options.fs ), importer, source @@ -282,7 +282,7 @@ export class ModuleLoader { const content = await this.pluginDriver.hookFirst('load', [id]); if (content !== null) return content; this.graph.watchFiles[id] = true; - return await readFile(id, 'utf8'); + return (await this.options.fs.readFile(id, { encoding: 'utf8' })) as string; }); } catch (error_: any) { let message = `Could not load ${id}`; @@ -674,7 +674,8 @@ export class ModuleLoader { null, EMPTY_OBJECT, true, - EMPTY_OBJECT + EMPTY_OBJECT, + this.options.fs ); if (resolveIdResult == null) { return error( diff --git a/src/rollup/rollup.ts b/src/rollup/rollup.ts index f60fd5b4f..8a8bd7622 100644 --- a/src/rollup/rollup.ts +++ b/src/rollup/rollup.ts @@ -1,7 +1,6 @@ import { version as rollupVersion } from 'package.json'; import Bundle from '../Bundle'; import Graph from '../Graph'; -import { mkdir, writeFile } from '../utils/fs'; import { catchUnfinishedHookActions } from '../utils/hookActions'; import initWasm from '../utils/initWasm'; import { getLogger } from '../utils/logger'; @@ -215,7 +214,7 @@ async function handleGenerateWrite( } await Promise.all( Object.values(generated).map(chunk => - graph.fileOperationQueue.run(() => writeOutputFile(chunk, outputOptions)) + graph.fileOperationQueue.run(() => writeOutputFile(chunk, outputOptions, inputOptions)) ) ); await outputPluginDriver.hookParallel('writeBundle', [outputOptions, generated]); @@ -310,7 +309,8 @@ function getSortingFileType(file: OutputAsset | OutputChunk): SortingFileType { async function writeOutputFile( outputFile: OutputAsset | OutputChunk, - outputOptions: NormalizedOutputOptions + outputOptions: NormalizedOutputOptions, + { fs: { mkdir, writeFile } }: NormalizedInputOptions ): Promise { const fileName = resolve(outputOptions.dir || dirname(outputOptions.file!), outputFile.fileName); diff --git a/src/rollup/types.d.ts b/src/rollup/types.d.ts index 0ec31f59b..566c67117 100644 --- a/src/rollup/types.d.ts +++ b/src/rollup/types.d.ts @@ -244,6 +244,7 @@ export interface PluginContext extends MinimalPluginContext { debug: LoggingFunction; emitFile: EmitFile; error: (error: RollupError | string) => never; + fs: RollupFsModule; getFileName: (fileReferenceId: string) => string; getModuleIds: () => IterableIterator; getModuleInfo: GetModuleInfo; @@ -671,6 +672,7 @@ export interface InputOptions { experimentalCacheExpiry?: number; experimentalLogSideEffects?: boolean; external?: ExternalOption; + fs?: RollupFsModule; input?: InputOption; jsx?: false | JsxPreset | JsxOptions; logLevel?: LogLevelOption; @@ -699,6 +701,7 @@ export interface NormalizedInputOptions { experimentalCacheExpiry: number; experimentalLogSideEffects: boolean; external: IsExternal; + fs: RollupFsModule; input: string[] | Record; jsx: false | NormalizedJsxOptions; logLevel: LogLevelOption; @@ -1103,3 +1106,76 @@ export function defineConfig(optionsFunction: RollupOptionsFunction): RollupOpti export type RollupOptionsFunction = ( commandLineArguments: Record ) => MaybePromise; + +export interface RollupFsModule { + appendFile( + path: string, + data: string | Uint8Array, + options?: { encoding?: BufferEncoding | null; mode?: string | number; flag?: string | number } + ): Promise; + + copyFile(source: string, destination: string, mode?: string | number): Promise; + + mkdir(path: string, options?: { recursive?: boolean; mode?: string | number }): Promise; + + mkdtemp(prefix: string): Promise; + + readdir(path: string, options?: { withFileTypes?: false }): Promise; + readdir(path: string, options?: { withFileTypes: true }): Promise; + + readFile( + path: string, + options?: { encoding?: null; flag?: string | number; signal?: AbortSignal } + ): Promise; + readFile( + path: string, + options?: { encoding: BufferEncoding; flag?: string | number; signal?: AbortSignal } + ): Promise; + + realpath(path: string): Promise; + + rename(oldPath: string, newPath: string): Promise; + + rmdir(path: string, options?: { recursive?: boolean }): Promise; + + stat(path: string): Promise; + + lstat(path: string): Promise; + + unlink(path: string): Promise; + + writeFile( + path: string, + data: string | Uint8Array, + options?: { encoding?: BufferEncoding | null; mode?: string | number; flag?: string | number } + ): Promise; +} + +export type BufferEncoding = + | 'ascii' + | 'utf8' + | 'utf16le' + | 'ucs2' + | 'base64' + | 'base64url' + | 'latin1' + | 'binary' + | 'hex'; + +export interface RollupDirectoryEntry { + isFile(): boolean; + isDirectory(): boolean; + isSymbolicLink(): boolean; + name: string; +} + +export interface RollupFileStats { + isFile(): boolean; + isDirectory(): boolean; + isSymbolicLink(): boolean; + size: number; + mtime: Date; + ctime: Date; + atime: Date; + birthtime: Date; +} diff --git a/src/utils/PluginContext.ts b/src/utils/PluginContext.ts index 7f038fd23..7590b89bf 100644 --- a/src/utils/PluginContext.ts +++ b/src/utils/PluginContext.ts @@ -61,6 +61,7 @@ export function getPluginContext( error(error_): never { return error(logPluginError(normalizeLog(error_), plugin.name)); }, + fs: options.fs, getFileName: fileEmitter.getFileName, getModuleIds: () => graph.modulesById.keys(), getModuleInfo: graph.getModuleInfo, diff --git a/src/utils/logs.ts b/src/utils/logs.ts index 7c09d04a1..e40f097d3 100644 --- a/src/utils/logs.ts +++ b/src/utils/logs.ts @@ -911,7 +911,7 @@ export function logRedeclarationError(name: string): RollupLog { export function logReservedNamespace(namespace: string): RollupLog { return { code: RESERVED_NAMESPACE, - message: `You have overided reserved namespace "${namespace}"` + message: `You have overridden reserved namespace "${namespace}"` }; } diff --git a/src/utils/options/mergeOptions.ts b/src/utils/options/mergeOptions.ts index c427babcb..89beea517 100644 --- a/src/utils/options/mergeOptions.ts +++ b/src/utils/options/mergeOptions.ts @@ -69,7 +69,7 @@ export async function mergeOptions( warnUnknownOptions( command, [ - ...Object.keys(inputOptions), + ...Object.keys(inputOptions).filter(option => option !== 'fs'), ...Object.keys(outputOptions[0]).filter( option => option !== 'sourcemapIgnoreList' && option !== 'sourcemapPathTransform' ), @@ -135,6 +135,7 @@ function mergeInputOptions( experimentalCacheExpiry: getOption('experimentalCacheExpiry'), experimentalLogSideEffects: getOption('experimentalLogSideEffects'), external: getExternal(config, overrides), + fs: getOption('fs'), input: getOption('input') || [], jsx: getObjectOption( config, diff --git a/src/utils/options/normalizeInputOptions.ts b/src/utils/options/normalizeInputOptions.ts index 85127200c..9446c5d2f 100644 --- a/src/utils/options/normalizeInputOptions.ts +++ b/src/utils/options/normalizeInputOptions.ts @@ -3,10 +3,12 @@ import type { InputOptions, ModuleSideEffectsOption, NormalizedInputOptions, - RollupBuild + RollupBuild, + RollupFsModule } from '../../rollup/types'; import { EMPTY_ARRAY } from '../blank'; import { ensureArray } from '../ensureArray'; +import * as fs from '../fs'; import { getLogger } from '../logger'; import { LOGLEVEL_INFO } from '../logging'; import { error, logInvalidOption } from '../logs'; @@ -50,6 +52,7 @@ export async function normalizeInputOptions( experimentalCacheExpiry: config.experimentalCacheExpiry ?? 10, experimentalLogSideEffects: config.experimentalLogSideEffects || false, external: getIdMatcher(config.external), + fs: config.fs ?? (fs as RollupFsModule), input: getInput(config), jsx: getJsx(config), logLevel, diff --git a/src/utils/resolveId.ts b/src/utils/resolveId.ts index 812f2e901..766da800c 100644 --- a/src/utils/resolveId.ts +++ b/src/utils/resolveId.ts @@ -1,8 +1,7 @@ import type { ModuleLoaderResolveId } from '../ModuleLoader'; -import type { CustomPluginOptions, Plugin, ResolveIdResult } from '../rollup/types'; -import type { PluginDriver } from './PluginDriver'; -import { lstat, readdir, realpath } from './fs'; +import type { CustomPluginOptions, Plugin, ResolveIdResult, RollupFsModule } from '../rollup/types'; import { basename, dirname, isAbsolute, resolve } from './path'; +import type { PluginDriver } from './PluginDriver'; import { resolveIdViaPlugins } from './resolveIdViaPlugins'; export async function resolveId( @@ -14,7 +13,8 @@ export async function resolveId( skip: readonly { importer: string | undefined; plugin: Plugin; source: string }[] | null, customOptions: CustomPluginOptions | undefined, isEntry: boolean, - attributes: Record + attributes: Record, + fs: RollupFsModule ): Promise { const pluginResult = await resolveIdViaPlugins( source, @@ -54,30 +54,36 @@ export async function resolveId( // See https://nodejs.org/api/path.html#path_path_resolve_paths return addJsExtensionIfNecessary( importer ? resolve(dirname(importer), source) : resolve(source), - preserveSymlinks + preserveSymlinks, + fs ); } async function addJsExtensionIfNecessary( file: string, - preserveSymlinks: boolean + preserveSymlinks: boolean, + fs: RollupFsModule ): Promise { return ( - (await findFile(file, preserveSymlinks)) ?? - (await findFile(file + '.mjs', preserveSymlinks)) ?? - (await findFile(file + '.js', preserveSymlinks)) + (await findFile(file, preserveSymlinks, fs)) ?? + (await findFile(file + '.mjs', preserveSymlinks, fs)) ?? + (await findFile(file + '.js', preserveSymlinks, fs)) ); } -async function findFile(file: string, preserveSymlinks: boolean): Promise { +async function findFile( + file: string, + preserveSymlinks: boolean, + fs: RollupFsModule +): Promise { try { - const stats = await lstat(file); + const stats = await fs.lstat(file); if (!preserveSymlinks && stats.isSymbolicLink()) - return await findFile(await realpath(file), preserveSymlinks); + return await findFile(await fs.realpath(file), preserveSymlinks, fs); if ((preserveSymlinks && stats.isSymbolicLink()) || stats.isFile()) { // check case const name = basename(file); - const files = await readdir(dirname(file)); + const files = await fs.readdir(dirname(file)); if (files.includes(name)) return file; } diff --git a/test/browser/samples/missing-default-fs/_config.js b/test/browser/samples/missing-default-fs/_config.js new file mode 100644 index 000000000..2a9277fe0 --- /dev/null +++ b/test/browser/samples/missing-default-fs/_config.js @@ -0,0 +1,23 @@ +module.exports = defineTest({ + description: 'fails when accessing fs from a browser without supplying it via option', + options: { + plugins: { + name: 'test', + resolveId(source) { + return source; + }, + load(id) { + return this.fs.readFile(id, { encoding: 'utf8' }); + } + } + }, + error: { + code: 'PLUGIN_ERROR', + hook: 'load', + message: + 'Could not load main: Cannot access the file system (via "fs.readFile") when using the browser build of Rollup. Make sure you supply a plugin with custom resolveId and load hooks to Rollup.', + plugin: 'test', + pluginCode: 'NO_FS_IN_BROWSER', + url: 'https://rollupjs.org/plugin-development/#a-simple-example' + } +}); diff --git a/test/browser/samples/missing-dependency-resolution/_config.js b/test/browser/samples/missing-dependency-resolution/_config.js index a683f11c2..671cebb52 100644 --- a/test/browser/samples/missing-dependency-resolution/_config.js +++ b/test/browser/samples/missing-dependency-resolution/_config.js @@ -1,17 +1,36 @@ const { loader } = require('../../../testHelpers.js'); +const assert = require('node:assert/strict'); + +const logs = []; module.exports = defineTest({ - description: 'fails if a dependency cannot be resolved', + description: 'warns if a dependency cannot be resolved', options: { - plugins: loader({ - main: `import {foo} from 'dep'; + onLog(level, log) { + logs.push({ level, log }); + }, + plugins: [ + loader({ + main: `import {foo} from 'dep'; console.log(foo);` - }) - }, - error: { - code: 'NO_FS_IN_BROWSER', - message: - 'Cannot access the file system (via "path.resolve") when using the browser build of Rollup. Make sure you supply a plugin with custom resolveId and load hooks to Rollup.', - url: 'https://rollupjs.org/plugin-development/#a-simple-example' + }), + { + buildEnd() { + assert.deepEqual(logs, [ + { + level: 'warn', + log: { + code: 'UNRESOLVED_IMPORT', + exporter: 'dep', + id: 'main', + message: + '"dep" is imported by "main", but could not be resolved – treating it as an external dependency.', + url: 'https://rollupjs.org/troubleshooting/#warning-treating-module-as-external-dependency' + } + } + ]); + } + } + ] } }); diff --git a/test/browser/samples/missing-dependency-resolution/_expected/main.js b/test/browser/samples/missing-dependency-resolution/_expected/main.js new file mode 100644 index 000000000..37f4a46d1 --- /dev/null +++ b/test/browser/samples/missing-dependency-resolution/_expected/main.js @@ -0,0 +1,3 @@ +import { foo } from 'dep'; + +console.log(foo); diff --git a/test/browser/samples/missing-entry-resolution/_config.js b/test/browser/samples/missing-entry-resolution/_config.js index f122cdb59..e41dbc216 100644 --- a/test/browser/samples/missing-entry-resolution/_config.js +++ b/test/browser/samples/missing-entry-resolution/_config.js @@ -1,9 +1,7 @@ module.exports = defineTest({ description: 'fails if an entry cannot be resolved', error: { - code: 'NO_FS_IN_BROWSER', - message: - 'Cannot access the file system (via "path.resolve") when using the browser build of Rollup. Make sure you supply a plugin with custom resolveId and load hooks to Rollup.', - url: 'https://rollupjs.org/plugin-development/#a-simple-example' + code: 'UNRESOLVED_ENTRY', + message: 'Could not resolve entry module "main".' } }); diff --git a/test/browser/samples/provide-fs/_config.js b/test/browser/samples/provide-fs/_config.js new file mode 100644 index 000000000..a053d83a8 --- /dev/null +++ b/test/browser/samples/provide-fs/_config.js @@ -0,0 +1,12 @@ +const { Volume } = require('memfs'); + +const vol = Volume.fromJSON({ + main: "console.log('Hello, Rollup!');" +}); + +module.exports = defineTest({ + description: 'allows to provide an in-memory fs via option', + options: { + fs: vol.promises + } +}); diff --git a/test/browser/samples/provide-fs/_expected/main.js b/test/browser/samples/provide-fs/_expected/main.js new file mode 100644 index 000000000..f5d3e627b --- /dev/null +++ b/test/browser/samples/provide-fs/_expected/main.js @@ -0,0 +1 @@ +console.log('Hello, Rollup!'); diff --git a/test/chunking-form/samples/max-parallel-file-operations/_config.js b/test/chunking-form/samples/max-parallel-file-operations/_config.js index b9d5da1de..f2cc3f557 100644 --- a/test/chunking-form/samples/max-parallel-file-operations/_config.js +++ b/test/chunking-form/samples/max-parallel-file-operations/_config.js @@ -10,7 +10,8 @@ module.exports = defineTest({ description: 'maxParallelFileOps limits write operations', options: { maxParallelFileOps: 3, - output: { preserveModules: true } + output: { preserveModules: true }, + fs }, before() { fs.writeFile = async (path, content) => { diff --git a/test/function/samples/max-parallel-file-operations/default/_config.js b/test/function/samples/max-parallel-file-operations/default/_config.js index cfe030764..5710cdd1a 100644 --- a/test/function/samples/max-parallel-file-operations/default/_config.js +++ b/test/function/samples/max-parallel-file-operations/default/_config.js @@ -8,6 +8,9 @@ let maxReads = 0; module.exports = defineTest({ description: 'maxParallelFileOps not set', + options: { + fs + }, before() { fs.readFile = async (path, options) => { currentReads++; diff --git a/test/function/samples/max-parallel-file-operations/error/_config.js b/test/function/samples/max-parallel-file-operations/error/_config.js index 2ed14956e..ff46cae7b 100644 --- a/test/function/samples/max-parallel-file-operations/error/_config.js +++ b/test/function/samples/max-parallel-file-operations/error/_config.js @@ -10,7 +10,8 @@ module.exports = defineTest({ input: 'main', plugins: loader({ main: `import {foo} from './dep';` - }) + }), + fs }, before() { fs.readFile = (path, options) => { diff --git a/test/function/samples/max-parallel-file-operations/infinity/_config.js b/test/function/samples/max-parallel-file-operations/infinity/_config.js index fb6b8aeb9..a672fb4ad 100644 --- a/test/function/samples/max-parallel-file-operations/infinity/_config.js +++ b/test/function/samples/max-parallel-file-operations/infinity/_config.js @@ -9,7 +9,8 @@ let maxReads = 0; module.exports = defineTest({ description: 'maxParallelFileOps set to infinity', options: { - maxParallelFileOps: 0 + maxParallelFileOps: 0, + fs }, before() { fs.readFile = async (path, options) => { diff --git a/test/function/samples/max-parallel-file-operations/set/_config.js b/test/function/samples/max-parallel-file-operations/set/_config.js index 5c631ef9c..8dfac8f3f 100644 --- a/test/function/samples/max-parallel-file-operations/set/_config.js +++ b/test/function/samples/max-parallel-file-operations/set/_config.js @@ -9,7 +9,8 @@ let maxReads = 0; module.exports = defineTest({ description: 'maxParallelFileOps set to 3', options: { - maxParallelFileOps: 3 + maxParallelFileOps: 3, + fs }, before() { fs.readFile = async (path, options) => { diff --git a/test/function/samples/options-hook/_config.js b/test/function/samples/options-hook/_config.js index ef6bdc039..ee4c6c73d 100644 --- a/test/function/samples/options-hook/_config.js +++ b/test/function/samples/options-hook/_config.js @@ -10,7 +10,10 @@ module.exports = defineTest({ { name: 'test-plugin', buildStart(options) { - assert.deepStrictEqual(JSON.parse(JSON.stringify(options)), { + // The fs option is not json stringifiable + const { fs, ...restOptions } = options; + assert.ok(fs); + assert.deepStrictEqual(JSON.parse(JSON.stringify(restOptions)), { context: 'undefined', experimentalCacheExpiry: 10, experimentalLogSideEffects: false, diff --git a/test/misc/fs-override.js b/test/misc/fs-override.js new file mode 100644 index 000000000..f83f91565 --- /dev/null +++ b/test/misc/fs-override.js @@ -0,0 +1,56 @@ +const assert = require('node:assert'); +const { Volume } = require('memfs'); +const rollup = require('../../dist/rollup'); + +describe('fs-override', () => { + it('uses fs from options', async () => { + const vol = Volume.fromJSON( + { + '/input.js': "console.log('Hello, Rollup!');" + }, + __dirname + ); + const bundle = await rollup.rollup({ + input: '/input.js', + fs: vol.promises + }); + + await bundle.write({ + file: '/output.js', + format: 'esm' + }); + + const generatedCode = vol.readFileSync('/output.js', 'utf8'); + assert.strictEqual(generatedCode.trim(), "console.log('Hello, Rollup!');"); + }); + + it('passes fs from options to plugin context', async () => { + const vol = Volume.fromJSON( + { + '/input.js': "console.log('Hello, Rollup!');" + }, + __dirname + ); + const bundle = await rollup.rollup({ + input: '/input.js', + fs: vol.promises, + plugins: [ + { + name: 'test-plugin', + async transform(code, _id) { + assert.equal(await this.fs.readFile('/input.js'), "console.log('Hello, Rollup!');"); + return { + code, + map: null + }; + } + } + ] + }); + + await bundle.write({ + file: '/output.js', + format: 'esm' + }); + }); +}); diff --git a/test/misc/index.js b/test/misc/index.js index 8950e1f05..8bc305f61 100644 --- a/test/misc/index.js +++ b/test/misc/index.js @@ -1,4 +1,5 @@ require('./bundle-information'); +require('./fs-override'); require('./get-log-filter'); require('./parse-ast'); require('./iife'); diff --git a/test/misc/optionList.js b/test/misc/optionList.js index d559168cf..42ed455ab 100644 --- a/test/misc/optionList.js +++ b/test/misc/optionList.js @@ -1,5 +1,5 @@ exports.input = - 'cache, context, experimentalCacheExpiry, experimentalLogSideEffects, external, input, jsx, logLevel, makeAbsoluteExternalsRelative, maxParallelFileOps, moduleContext, onLog, onwarn, perf, plugins, preserveEntrySignatures, preserveSymlinks, shimMissingExports, strictDeprecations, treeshake, watch'; + 'cache, context, experimentalCacheExpiry, experimentalLogSideEffects, external, fs, input, jsx, logLevel, makeAbsoluteExternalsRelative, maxParallelFileOps, moduleContext, onLog, onwarn, perf, plugins, preserveEntrySignatures, preserveSymlinks, shimMissingExports, strictDeprecations, treeshake, watch'; exports.flags = 'amd, assetFileNames, banner, bundleConfigAsCjs, c, cache, chunkFileNames, compact, config, configImportAttributesKey, configPlugin, context, d, dir, dynamicImportInCjs, e, entryFileNames, environment, esModule, experimentalCacheExpiry, experimentalLogSideEffects, experimentalMinChunkSize, exports, extend, external, externalImportAssertions, externalImportAttributes, externalLiveBindings, f, failAfterWarnings, file, filterLogs, footer, forceExit, format, freeze, g, generatedCode, globals, h, hashCharacters, hoistTransitiveImports, i, importAttributesKey, indent, inlineDynamicImports, input, interop, intro, jsx, logLevel, m, makeAbsoluteExternalsRelative, manualChunks, maxParallelFileOps, minifyInternalExports, moduleContext, n, name, noConflict, o, onLog, onwarn, outro, p, paths, perf, plugin, plugins, preserveEntrySignatures, preserveModules, preserveModulesRoot, preserveSymlinks, reexportProtoFromExternal, sanitizeFileName, shimMissingExports, silent, sourcemap, sourcemapBaseUrl, sourcemapDebugIds, sourcemapExcludeSources, sourcemapFile, sourcemapFileNames, stdin, strict, strictDeprecations, systemNullSetters, treeshake, v, validate, virtualDirname, w, waitForBundleInput, watch'; exports.output = From 72858cb1474b81c91902794ab7d28c79f34b8ca8 Mon Sep 17 00:00:00 2001 From: Lukas Taegert-Atkinson Date: Wed, 11 Jun 2025 07:00:58 +0200 Subject: [PATCH 10/13] 4.43.0 --- CHANGELOG.md | 12 ++++++++++++ browser/package.json | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb81c7237..968c5076d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # rollup changelog +## 4.43.0 + +_2025-06-11_ + +### Features + +- Provide new `fs` option and `this.fs` API to replace file system (#5944) + +### Pull Requests + +- [#5944](https://github.com/rollup/rollup/pull/5944): feat(options): Add an option for overriding the file system module in the JS API (@EggDice, @lukastaegert) + ## 4.42.0 _2025-06-06_ diff --git a/browser/package.json b/browser/package.json index a0457d6f8..d21e7e229 100644 --- a/browser/package.json +++ b/browser/package.json @@ -1,6 +1,6 @@ { "name": "@rollup/browser", - "version": "4.42.0", + "version": "4.43.0", "description": "Next-generation ES module bundler browser build", "main": "dist/rollup.browser.js", "module": "dist/es/rollup.browser.js", diff --git a/package-lock.json b/package-lock.json index cf52a5569..e82217701 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "rollup", - "version": "4.42.0", + "version": "4.43.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "rollup", - "version": "4.42.0", + "version": "4.43.0", "license": "MIT", "dependencies": { "@types/estree": "1.0.7" diff --git a/package.json b/package.json index af287fe52..1cc4dd08e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rollup", - "version": "4.42.0", + "version": "4.43.0", "description": "Next-generation ES module bundler", "main": "dist/rollup.js", "module": "dist/es/rollup.js", From bd45e0dda207b891ed6902c08370c6fe791b02c9 Mon Sep 17 00:00:00 2001 From: waynzh Date: Thu, 12 Jun 2025 19:46:16 +0800 Subject: [PATCH 11/13] docs(cn): resolve conflicts --- docs/.vitepress/config.ts | 2 +- docs/command-line-interface/index.md | 101 +-------------------------- docs/configuration-options/index.md | 26 +++---- docs/faqs/index.md | 100 -------------------------- docs/plugin-development/index.md | 8 +-- 5 files changed, 15 insertions(+), 222 deletions(-) diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index fd03b28aa..277a32dbd 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -119,7 +119,7 @@ export default defineConfig({ }, { link: '/browser/', - text: 'Running Rollup in a Browser' + text: '在浏览器中运行 Rollup' }, { link: '/faqs/', diff --git a/docs/command-line-interface/index.md b/docs/command-line-interface/index.md index b602cd39c..2373a0b5c 100755 --- a/docs/command-line-interface/index.md +++ b/docs/command-line-interface/index.md @@ -375,7 +375,6 @@ export default { 许多选项都有等效的命令行标志。在这些情况下,如果你正在使用配置文件,则此处传递的任何参数都将覆盖配置文件。以下是所有支持的选项列表: ``` -<<<<<<< HEAD -c, --config 使用此配置文件 (如果使用参数但未指定值,则默认为 rollup.config.js) -d, --dir 用于块的目录(如果不存在,则打印到 stdout) @@ -461,6 +460,7 @@ export default { --no-treeshake.unknownGlobalSideEffects 假设未知的全局变量不会抛出异常 --validate 验证输出 --waitForBundleInput 等待打包输入文件 +--watch.allowInputInsideOutputPath 输入路径是否允许是输出路径的子路径 --watch.buildDelay 节流观察重建 --no-watch.clearScreen 重建时不要清除屏幕 --watch.exclude 排除要观察的文件 @@ -471,105 +471,6 @@ export default { --watch.onError 在 "ERROR" 事件上运行的 Shell 命令 --watch.onStart 在 "START" 事件上运行的 Shell 命令 --watch.skipWrite 在监视时不要将文件写入磁盘 -======= --c, --config Use this config file (if argument is used but value - is unspecified, defaults to rollup.config.js) --d, --dir Directory for chunks (if absent, prints to stdout) --e, --external Comma-separate list of module IDs to exclude --f, --format Type of output (amd, cjs, es, iife, umd, system) --g, --globals Comma-separate list of `moduleID:Global` pairs --h, --help Show this help message --i, --input Input (alternative to ) --m, --sourcemap Generate sourcemap (`-m inline` for inline map) --n, --name Name for UMD export --o, --file Single output file (if absent, prints to stdout) --p, --plugin Use the plugin specified (may be repeated) --v, --version Show version number --w, --watch Watch files in bundle and rebuild on changes ---amd.autoId Generate the AMD ID based off the chunk name ---amd.basePath Path to prepend to auto generated AMD ID ---amd.define Function to use in place of `define` ---amd.forceJsExtensionForImports Use `.js` extension in AMD imports ---amd.id ID for AMD module (default is anonymous) ---assetFileNames Name pattern for emitted assets ---banner Code to insert at top of bundle (outside wrapper) ---chunkFileNames Name pattern for emitted secondary chunks ---compact Minify wrapper code ---context Specify top-level `this` value ---no-dynamicImportInCjs Write external dynamic CommonJS imports as require ---entryFileNames Name pattern for emitted entry chunks ---environment Settings passed to config file (see example) ---no-esModule Do not add __esModule property ---exports Specify export mode (auto, default, named, none) ---extend Extend global variable defined by --name ---no-externalImportAttributes Omit import attributes in "es" output ---no-externalLiveBindings Do not generate code to support live bindings ---failAfterWarnings Exit with an error if the build produced warnings ---filterLogs Filter log messages ---footer Code to insert at end of bundle (outside wrapper) ---forceExit Force exit the process when done ---no-freeze Do not freeze namespace objects ---generatedCode Which code features to use (es5/es2015) ---generatedCode.arrowFunctions Use arrow functions in generated code ---generatedCode.constBindings Use "const" in generated code ---generatedCode.objectShorthand Use shorthand properties in generated code ---no-generatedCode.reservedNamesAsProps Always quote reserved names as props ---generatedCode.symbols Use symbols in generated code ---hashCharacters Use the specified character set for file hashes ---no-hoistTransitiveImports Do not hoist transitive imports into entry chunks ---importAttributesKey Use the specified keyword for import attributes ---no-indent Don't indent result ---inlineDynamicImports Create single bundle when using dynamic imports ---no-interop Do not include interop block ---intro Code to insert at top of bundle (inside wrapper) ---logLevel Which kind of logs to display ---no-makeAbsoluteExternalsRelative Prevent normalization of external imports ---maxParallelFileOps How many files to read in parallel ---minifyInternalExports Force or disable minification of internal exports ---noConflict Generate a noConflict method for UMD globals ---outro Code to insert at end of bundle (inside wrapper) ---perf Display performance timings ---no-preserveEntrySignatures Avoid facade chunks for entry points ---preserveModules Preserve module structure ---preserveModulesRoot Put preserved modules under this path at root level ---preserveSymlinks Do not follow symlinks when resolving files ---no-reexportProtoFromExternal Ignore `__proto__` in star re-exports ---no-sanitizeFileName Do not replace invalid characters in file names ---shimMissingExports Create shim variables for missing exports ---silent Don't print warnings ---sourcemapBaseUrl Emit absolute sourcemap URLs with given base ---sourcemapDebugIds Emit unique debug ids in source and sourcemaps ---sourcemapExcludeSources Do not include source code in source maps ---sourcemapFile Specify bundle position for source maps ---sourcemapFileNames Name pattern for emitted sourcemaps ---stdin=ext Specify file extension used for stdin input ---no-stdin Do not read "-" from stdin ---no-strict Don't emit `"use strict";` in the generated modules ---strictDeprecations Throw errors for deprecated features ---no-systemNullSetters Do not replace empty SystemJS setters with `null` ---no-treeshake Disable tree-shaking optimisations ---no-treeshake.annotations Ignore pure call annotations ---treeshake.correctVarValueBeforeDeclaration Deoptimize variables until declared ---treeshake.manualPureFunctions Manually declare functions as pure ---no-treeshake.moduleSideEffects Assume modules have no side effects ---no-treeshake.propertyReadSideEffects Ignore property access side effects ---no-treeshake.tryCatchDeoptimization Do not turn off try-catch-tree-shaking ---no-treeshake.unknownGlobalSideEffects Assume unknown globals do not throw ---validate Validate output ---waitForBundleInput Wait for bundle input files ---watch.allowInputInsideOutputPath Whether the input path is allowed to be a - subpath of the output path ---watch.buildDelay Throttle watch rebuilds ---no-watch.clearScreen Do not clear the screen when rebuilding ---watch.exclude Exclude files from being watched ---watch.include Limit watching to specified files ---watch.onBundleEnd Shell command to run on `"BUNDLE_END"` event ---watch.onBundleStart Shell command to run on `"BUNDLE_START"` event ---watch.onEnd Shell command to run on `"END"` event ---watch.onError Shell command to run on `"ERROR"` event ---watch.onStart Shell command to run on `"START"` event ---watch.skipWrite Do not write files to disk when watching ->>>>>>> 72858cb1474b81c91902794ab7d28c79f34b8ca8 ``` 以下标志仅通过命令行界面可用。所有其他标志都对应并覆盖其配置文件等效项,请参阅[选项大列表](../configuration-options/index.md)获取详细信息。 diff --git a/docs/configuration-options/index.md b/docs/configuration-options/index.md index d943a9a52..b894a0782 100755 --- a/docs/configuration-options/index.md +++ b/docs/configuration-options/index.md @@ -2851,17 +2851,14 @@ const element = angular.element; 对于每个键的值,是一个数组,其中,第一个数值表示经过的时间,第二个数值表示内存消耗的变化,第三个数值表示此步骤完成后的总内存消耗。这些步骤的顺序是通过 `Object.keys` 确定的。顶层的键以 `#` 开头,包含嵌套步骤的耗时,例如,在上面例子中,耗时 698ms 的 `# BUILD` 步骤包含了耗时 539ms 的 `## parse modules` 步骤。 -<<<<<<< HEAD -## 观察选项 {#watch} -======= ### fs -| | | -| -------: | :--------------------------------------------------- | -| Type: | `RollupFsModule` | -| Default: | `node:fs.promises` in NodeJS, no default in browsers | +| | | +| -----: | :----------------------------------------------- | +| 类型: | `RollupFsModule` | +| 默认: | NodeJS 中为 `node:fs.promises`,浏览器中无默认值 | -If you want to use a custom file system module, you can set this option to an object that implements the same API as the `RollupFsModule` interface. This is useful if you want to use a different file system implementation such as [`memfs`](https://www.npmjs.com/package/memfs), if you want to mock the file system for testing purposes, or if you use the [browser build](../browser/index.md) of Rollup. +如果想要使用自定义的文件系统模块,可以将此选项设置为一个实现了与 `RollupFsModule` 接口相同 API 的对象。这在想要使用不同的文件系统实现(如 [`memfs`](https://www.npmjs.com/package/memfs))、想要测试模拟文件系统,或者使用 Rollup 的 [浏览器构建](../browser/index.md) 时非常有用。 ```typescript interface RollupFsModule { @@ -2956,7 +2953,6 @@ interface RollupFileStats { ``` ## watch ->>>>>>> 72858cb1474b81c91902794ab7d28c79f34b8ca8 | | | | -----: | :------------------------ | @@ -2998,21 +2994,17 @@ export default [ 这些选项仅在使用 `--watch` 标志或使用 `rollup.watch` 运行 Rollup 时生效。 -<<<<<<< HEAD -### watch.buildDelay {#watch-builddelay} -======= ### watch.allowInputInsideOutputPath | | | | --: | :-- | -| Type: | `boolean` | -| CLI: | `--watch.allowInputInsideOutputPath`/`--no-watch.allowInputInsideOutputPath` | -| Default: | `false` | +| 类型: | `boolean` | +| CLI: | `--watch.allowInputInsideOutputPath`/`--no-watch.allowInputInsideOutputPath` | +| 默认: | `false` | -Whether the input path is allowed to be a subpath of the output path. +该选项用于决定输入路径是否允许是输出路径的子路径。 ### watch.buildDelay ->>>>>>> 72858cb1474b81c91902794ab7d28c79f34b8ca8 | | | | -----: | :---------------------------- | diff --git a/docs/faqs/index.md b/docs/faqs/index.md index ee79f9c2a..164448897 100755 --- a/docs/faqs/index.md +++ b/docs/faqs/index.md @@ -106,106 +106,6 @@ console.log('main'); Rollup 已经被许多主要的 JavaScript 库使用,并且也可以用于构建绝大多数应用程序。但是,如果你想在旧版浏览器中使用代码拆分或动态导入,则需要使用额外的运行时来处理加载丢失的块。我们建议使用 [SystemJS 构建产物作为生产环境](https://github.com/systemjs/systemjs#browser-production),因为它与 Rollup 的系统格式输出很好地集成,并且能够正确处理所有 ES 模块实时绑定和重新导出边缘情况。或者,也可以使用 AMD 加载器。 -<<<<<<< HEAD -## 我如何在浏览器中运行 Rollup? {#how-do-i-run-rollup-itself-in-a-browser} - -虽然常规的 Rollup 构建依赖于一些 NodeJS 特性,但还有一个仅使用浏览器 API 的浏览器版本可用。你可以通过以下方式安装它: - -```shell -npm install @rollup/browser -``` - -在你的脚本代码中,这样导入: - -```js -import { rollup } from '@rollup/browser'; -``` - -另外,你也可以从 CDN 导入,例如导入 ESM 格式产物: - -```js -import * as rollup from 'https://unpkg.com/@rollup/browser/dist/es/rollup.browser.js'; -``` - -而对于 UMD 格式产物: - -```html - -``` - -这将创建一个全局变量 `window.rollup`。由于浏览器构建无法访问文件系统,因此你需要提供解析和加载要捆绑的所有模块的插件。以下是一个虚构的示例: - -```js twoslash -/** @type {import('rollup')} */ -var rollup; -// ---cut--- -const modules = { - 'main.js': "import foo from 'foo.js'; console.log(foo);", - 'foo.js': 'export default 42;' -}; - -rollup - .rollup({ - input: 'main.js', - plugins: [ - { - name: 'loader', - resolveId(source) { - if (modules.hasOwnProperty(source)) { - return source; - } - }, - load(id) { - if (modules.hasOwnProperty(id)) { - return modules[id]; - } - } - } - ] - }) - .then(bundle => bundle.generate({ format: 'es' })) - .then(({ output }) => console.log(output[0].code)); -``` - -此示例仅支持两个导入,`"main.js"` 和 `"foo.js"`,不支持相对导入。以下是另一个示例,它使用绝对 URL 作为入口点,并支持相对导入。在这种情况下,我们只是重新打包 Rollup 本身,但它可以用于任何其他公开 ES 模块的 URL: - -```js twoslash -/** @type {import('rollup')} */ -var rollup; -// ---cut--- -rollup - .rollup({ - input: 'https://unpkg.com/rollup/dist/es/rollup.js', - plugins: [ - { - name: 'url-resolver', - resolveId(source, importer) { - if (source[0] !== '.') { - try { - new URL(source); - // If it is a valid URL, return it - return source; - } catch { - // Otherwise make it external - return { id: source, external: true }; - } - } - return new URL(source, importer).href; - }, - async load(id) { - const response = await fetch(id); - return response.text(); - } - } - ] - }) - .then(bundle => bundle.generate({ format: 'es' })) - .then(({ output }) => console.log(output)); -``` - -## Rollup logo 是谁制作的?太可爱了! {#who-made-the-rollup-logo-its-lovely} -======= ## Who made the Rollup logo? It's lovely. ->>>>>>> 72858cb1474b81c91902794ab7d28c79f34b8ca8 [Julian Lloyd](https://github.com/jlmakes)! diff --git a/docs/plugin-development/index.md b/docs/plugin-development/index.md index 772a29309..05ac021b4 100644 --- a/docs/plugin-development/index.md +++ b/docs/plugin-development/index.md @@ -1598,11 +1598,11 @@ function myPlugin() { ### this.fs -| | | -| ----: | :--------------- | -| Type: | `RollupFsModule` | +| | | +| -----: | :--------------- | +| 类型: | `RollupFsModule` | -Provides abstract access to the file system. For the `RollupFsModule` type, see the documentation of the [`fs` option](../configuration-options/index.md#fs). If plugins use this instead of directly importing `node:fs`, then they can be used in browser builds that provide an in-memory file system via the `fs` option. +提供对文件系统的抽象访问。有关 `RollupFsModule` 类型的信息,请参阅 [`fs` 选项](../configuration-options/index.md#fs) 的文档。如果插件使用此选项而不是直接导入 `node:fs`,则它们可以在提供内存文件系统的浏览器构建中使用。 ### this.getCombinedSourcemap From 5bad17d144d9d655fc306b2bfc2c25c4b7cdf77c Mon Sep 17 00:00:00 2001 From: waynzh Date: Thu, 12 Jun 2025 19:46:41 +0800 Subject: [PATCH 12/13] docs(cn): browser doc --- docs/browser/index.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/browser/index.md b/docs/browser/index.md index ac5b61758..d1d9f5e05 100755 --- a/docs/browser/index.md +++ b/docs/browser/index.md @@ -1,44 +1,44 @@ --- -title: Running Rollup in a Browser +title: 在浏览器中运行 Rollup --- # {{ $frontmatter.title }} [[toc]] -## The browser build +## 浏览器构建 {#the-browser-build} -While the regular Rollup build relies on some NodeJS builtin libraries, there is also a browser build available that only uses browser APIs. You can install it via +虽然常规的 Rollup 构建依赖于一些 NodeJS 内置库,但也有一个仅使用浏览器 API 的浏览器构建可用。可以通过以下方式安装: ```shell npm install @rollup/browser ``` -and in your script, import it via +在你的脚本中,可以通过以下方式导入: ```js import { rollup } from '@rollup/browser'; ``` -Alternatively, you can import from a CDN, e.g. for the ESM build +或者,你也可以从 CDN 导入,例如对于 ESM 构建: ```js import * as rollup from 'https://unpkg.com/@rollup/browser/dist/es/rollup.browser.js'; ``` -and for the UMD build +对于 UMD 构建: ```html ``` -which will create a global variable `window.rollup`. Note that in each case, you need to make sure that the file `dist/bindings_wasm_bg.wasm` from the `@rollup/browser` package is served next to where the browser build is served. +这将创建一个全局变量 `window.rollup`。请注意,在每种情况下,你需要确保 `@rollup/browser` 包中的 `dist/bindings_wasm_bg.wasm` 文件与浏览器构建一起提供。 -As the browser build cannot access the file system, you either need to provide an [in-memory file system](#using-an-in-memory-file-system) via the [`fs`](../configuration-options/index.md#fs) option, or you need to [provide plugins](#using-plugins-to-resolve-and-load-modules) that resolve and load all modules you want to bundle. +由于浏览器构建无法访问文件系统,你需要提供一个 [内存文件系统](#using-an-in-memory-file-system) 通过 [`fs`](../configuration-options/index.md#fs) 选项,或者你需要提供 [插件](#using-plugins-to-resolve-and-load-modules) 来解析和加载所有你想要打包的模块。 -## Using an in-memory file system +## 使用内存文件系统 {#using-an-in-memory-file-system} -Rollup allows you to provide an in-memory file system implementation that needs to implement at least a certain sub-set of the NodeJS `fs` API, cf. the [`fs`](../configuration-options/index.md#fs) option. This makes the browser build behave very similar to the NodeJS build and even allows you to use certain plugins that rely on the file system, provided they only access it via the [`this.fs`](../plugin-development/index.md#this-fs) plugin context property. Here is an example that uses [`memfs`](https://www.npmjs.com/package/memfs): +Rollup 允许你提供一个内存文件系统实现,该实现需要实现 NodeJS `fs` API 的至少一个子集,参见 [`fs`](../configuration-options/index.md#fs) 选项。这使得浏览器构建的行为非常类似于 NodeJS 构建,甚至允许你使用某些依赖于文件系统的插件,前提是它们只能通过 [`this.fs`](../plugin-development/index.md#this-fs) 插件上下文属性访问它。下面是一个使用 [`memfs`](https://www.npmjs.com/package/memfs) 的示例: ```js twoslash /** @type {import('rollup')} */ @@ -61,9 +61,9 @@ rollup .then(({ output }) => console.log(output[0].code)); ``` -## Using plugins to resolve and load modules +## 使用插件解析和加载模块 {#using-plugins-to-resolve-and-load-modules} -You can also resolve and load all modules via plugins. Here is how you could do this: +你也可以通过插件解析和加载所有模块。下面是一个示例: ```js twoslash /** @type {import('rollup')} */ @@ -97,7 +97,7 @@ rollup .then(({ output }) => console.log(output[0].code)); ``` -This example only supports two imports, `"main.js"` and `"foo.js"`, and no relative imports. Here is another example that uses absolute URLs as entry points and supports relative imports. In that case, we are just re-bundling Rollup itself, but it could be used on any other URL that exposes an ES module: +这个示例只支持两个导入,`"main.js"` 和 `"foo.js"`,并且不支持相对导入。下面是一个使用绝对 URL 作为入口文件并支持相对导入的示例。在这种情况下,我们只是重新打包 Rollup 本身,但它可以用于任何其他暴露 ES 模块的 URL: ```js twoslash /** @type {import('rollup')} */ From 103e4f862f7d5ce67cb5283ee1a285d5c453ab01 Mon Sep 17 00:00:00 2001 From: waynzh Date: Thu, 12 Jun 2025 19:55:54 +0800 Subject: [PATCH 13/13] chore: update slugs --- docs/guide/en/slugs-and-pages-by-legacy-slugs.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/docs/guide/en/slugs-and-pages-by-legacy-slugs.json b/docs/guide/en/slugs-and-pages-by-legacy-slugs.json index 4e58c4285..927da056d 100644 --- a/docs/guide/en/slugs-and-pages-by-legacy-slugs.json +++ b/docs/guide/en/slugs-and-pages-by-legacy-slugs.json @@ -1,5 +1 @@ -<<<<<<< HEAD -{"--bundleconfigascjs":["command-line-interface","bundleconfigascjs"],"--configplugin-plugin":["command-line-interface","configplugin-plugin"],"--environment-values":["command-line-interface","environment-values"],"--failafterwarnings":["command-line-interface","failafterwarnings"],"--no-stdin":["command-line-interface","no-stdin"],"--silent":["command-line-interface","silent"],"--stdinext":["command-line-interface","stdinext"],"--waitforbundleinput":["command-line-interface","waitforbundleinput"],"-h--help":["command-line-interface","h-help"],"-v--version":["command-line-interface","v-version"],"-w--watch":["command-line-interface","w-watch"],"augmentchunkhash":["plugin-development","augmentchunkhash"],"babel":["tools","babel"],"banner":["plugin-development","banner"],"big-list-of-options":["configuration-options",""],"buildend":["plugin-development","buildend"],"buildstart":["plugin-development","buildstart"],"cache":["configuration-options","cache"],"closebundle":["plugin-development","closebundle"],"closewatcher":["plugin-development","closewatcher"],"command-line-reference":["command-line-interface",""],"context":["configuration-options","context"],"deno":["tools","deno"],"error-emfile-too-many-open-files":["troubleshooting","error-emfile-too-many-open-files"],"error-javascript-heap-out-of-memory":["troubleshooting","error:-javascript-heap-out-of-memory"],"error-name-is-not-exported-by-module":["troubleshooting","error-name-is-not-exported-by-module"],"error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module":["troubleshooting","error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module"],"error-this-is-undefined":["troubleshooting","error-this-is-undefined"],"es-module-syntax":["es-module-syntax",""],"eval2--eval":["troubleshooting","eval2-eval"],"experimentalcacheexpiry":["configuration-options","experimentalcacheexpiry"],"external":["configuration-options","external"],"faqs":["faqs",""],"footer":["plugin-development","footer"],"generatebundle":["plugin-development","generatebundle"],"gulp":["tools","gulp"],"input":["configuration-options","input"],"intro":["plugin-development","intro"],"introduction":["introduction",""],"javascript-api":["javascript-api",""],"load":["plugin-development","load"],"makeabsoluteexternalsrelative":["configuration-options","makeabsoluteexternalsrelative"],"maxparallelfileops":["configuration-options","maxparallelfileops"],"migration":["migration",""],"modulecontext":["configuration-options","modulecontext"],"moduleparsed":["plugin-development","moduleparsed"],"name":["plugin-development","name"],"new-function":["troubleshooting","new-function"],"onwarn":["configuration-options","onwarn"],"options":["plugin-development","options"],"outputamd":["configuration-options","output-amd"],"outputassetfilenames":["configuration-options","output-assetfilenames"],"outputbanneroutputfooter":["configuration-options","output-banner-output-footer"],"outputchunkfilenames":["configuration-options","output-chunkfilenames"],"outputcompact":["configuration-options","output-compact"],"outputdir":["configuration-options","output-dir"],"outputdynamicimportincjs":["configuration-options","output-dynamicimportincjs"],"outputentryfilenames":["configuration-options","output-entryfilenames"],"outputesmodule":["configuration-options","output-esmodule"],"outputexports":["configuration-options","output-exports"],"outputextend":["configuration-options","output-extend"],"outputexternalimportassertions":["configuration-options","output-externalimportassertions"],"outputexternallivebindings":["configuration-options","output-externallivebindings"],"outputfile":["configuration-options","output-file"],"outputformat":["configuration-options","output-format"],"outputfreeze":["configuration-options","output-freeze"],"outputgeneratedcode":["configuration-options","output-generatedcode"],"outputglobals":["configuration-options","output-globals"],"outputhoisttransitiveimports":["configuration-options","output-hoisttransitiveimports"],"outputindent":["configuration-options","output-indent"],"outputinlinedynamicimports":["configuration-options","output-inlinedynamicimports"],"outputinterop":["configuration-options","output-interop"],"outputintrooutputoutro":["configuration-options","output-intro-output-outro"],"outputmanualchunks":["configuration-options","output-manualchunks"],"outputminifyinternalexports":["configuration-options","output-minifyinternalexports"],"outputname":["configuration-options","output-name"],"outputnoconflict":["configuration-options","output-noconflict"],"outputoptions":["plugin-development","outputoptions"],"outputpaths":["configuration-options","output-paths"],"outputplugins":["configuration-options","output-plugins"],"outputpreservemodules":["configuration-options","output-preservemodules"],"outputpreservemodulesroot":["configuration-options","output-preservemodulesroot"],"outputsanitizefilename":["configuration-options","output-sanitizefilename"],"outputsourcemap":["configuration-options","output-sourcemap"],"outputsourcemapbaseurl":["configuration-options","output-sourcemapbaseurl"],"outputsourcemapexcludesources":["configuration-options","output-sourcemapexcludesources"],"outputsourcemapfile":["configuration-options","output-sourcemapfile"],"outputsourcemappathtransform":["configuration-options","output-sourcemappathtransform"],"outputstrict":["configuration-options","output-strict"],"outputsystemnullsetters":["configuration-options","output-systemnullsetters"],"outputvalidate":["configuration-options","output-validate"],"outro":["plugin-development","outro"],"perf":["configuration-options","perf"],"plugin-development":["plugin-development",""],"plugins":["configuration-options","plugins"],"preserveentrysignatures":["configuration-options","preserveentrysignatures"],"preservesymlinks":["configuration-options","preservesymlinks"],"renderchunk":["plugin-development","renderchunk"],"renderdynamicimport":["plugin-development","renderdynamicimport"],"rendererror":["plugin-development","rendererror"],"renderstart":["plugin-development","renderstart"],"resolvedynamicimport":["plugin-development","resolvedynamicimport"],"resolvefileurl":["plugin-development","resolvefileurl"],"resolveid":["plugin-development","resolveid"],"resolveimportmeta":["plugin-development","resolveimportmeta"],"rollupplugin-commonjs":["tools","rollupplugin-commonjs"],"rollupplugin-node-resolve":["tools","rollupplugin-node-resolve"],"rolluprollup":["javascript-api","rollup-rollup"],"rollupwatch":["javascript-api","rollup-watch"],"shimmissingexports":["configuration-options","shimmissingexports"],"shouldtransformcachedmodule":["plugin-development","shouldtransformcachedmodule"],"strictdeprecations":["configuration-options","strictdeprecations"],"thisaddwatchfile":["plugin-development","this-addwatchfile"],"thisemitfile":["plugin-development","this-emitfile"],"thiserror":["plugin-development","this-error"],"thisgetcombinedsourcemap":["plugin-development","this-getcombinedsourcemap"],"thisgetfilename":["plugin-development","this-getfilename"],"thisgetmoduleids":["plugin-development","this-getmoduleids"],"thisgetmoduleinfo":["plugin-development","this-getmoduleinfo"],"thisgetwatchfiles":["plugin-development","this-getwatchfiles"],"thisload":["plugin-development","this-load"],"thismeta":["plugin-development","this-meta"],"thisparse":["plugin-development","this-parse"],"thisresolve":["plugin-development","this-resolve"],"thissetassetsource":["plugin-development","this-setassetsource"],"thiswarn":["plugin-development","this-warn"],"tools":["tools",""],"transform":["plugin-development","transform"],"treeshake":["configuration-options","treeshake"],"troubleshooting":["troubleshooting",""],"tutorial":["tutorial",""],"warning-sourcemap-is-likely-to-be-incorrect":["troubleshooting","warning-sourcemap-is-likely-to-be-incorrect"],"warning-treating-module-as-external-dependency":["troubleshooting","warning-treating-module-as-external-dependency"],"watchbuilddelay":["configuration-options","watch-builddelay"],"watchchange":["plugin-development","watchchange"],"watchchokidar":["configuration-options","watch-chokidar"],"watchclearscreen":["configuration-options","watch-clearscreen"],"watchexclude":["configuration-options","watch-exclude"],"watchinclude":["configuration-options","watch-include"],"watchoptions":["javascript-api","watchoptions"],"watchskipwrite":["configuration-options","watch-skipwrite"],"writebundle":["plugin-development","writebundle"]} -======= -{"--bundleconfigascjs":["command-line-interface","bundleconfigascjs"],"--configplugin-plugin":["command-line-interface","configplugin-plugin"],"--environment-values":["command-line-interface","environment-values"],"--failafterwarnings":["command-line-interface","failafterwarnings"],"--no-stdin":["command-line-interface","no-stdin"],"--silent":["command-line-interface","silent"],"--stdinext":["command-line-interface","stdin-ext"],"--waitforbundleinput":["command-line-interface","waitforbundleinput"],"--watchonstart-cmd---watchonbundlestart-cmd---watchonbundleend-cmd---watchonend-cmd---watchonerror-cmd":["command-line-interface","watch-onstart-cmd-watch-onbundlestart-cmd-watch-onbundleend-cmd-watch-onend-cmd-watch-onerror-cmd"],"-h--help":["command-line-interface","h-help"],"-p-plugin---plugin-plugin":["command-line-interface","p-plugin-plugin-plugin"],"-v--version":["command-line-interface","v-version"],"-w--watch":["command-line-interface","w-watch"],"a-simple-example":["plugin-development","a-simple-example"],"advanced-functionality":["configuration-options","advanced-functionality"],"augmentchunkhash":["plugin-development","augmentchunkhash"],"avoiding-eval":["troubleshooting","avoiding-eval"],"babel":["tools","babel"],"banner":["plugin-development","banner"],"big-list-of-options":["configuration-options",""],"build-hooks":["plugin-development","build-hooks"],"buildend":["plugin-development","buildend"],"buildstart":["plugin-development","buildstart"],"cache":["configuration-options","cache"],"caveats-when-using-native-node-es-modules":["command-line-interface","caveats-when-using-native-node-es-modules"],"changed-defaults":["migration","changed-defaults"],"changes-to-the-plugin-api":["migration","changes-to-the-plugin-api-1"],"closebundle":["plugin-development","closebundle"],"closewatcher":["plugin-development","closewatcher"],"code-splitting":["tutorial","code-splitting"],"command-line-flags":["command-line-interface","command-line-flags"],"command-line-reference":["command-line-interface",""],"compatibility":["introduction","compatibility"],"config-intellisense":["command-line-interface","config-intellisense"],"configuration-files":["command-line-interface","configuration-files"],"context":["configuration-options","context"],"conventions":["plugin-development","conventions"],"core-functionality":["configuration-options","core-functionality"],"creating-your-first-bundle":["tutorial","creating-your-first-bundle"],"custom-module-meta-data":["plugin-development","custom-module-meta-data"],"custom-resolver-options":["plugin-development","custom-resolver-options"],"danger-zone":["configuration-options","danger-zone"],"default-export":["es-module-syntax","default-export"],"default-import":["es-module-syntax","default-import"],"deno":["tools","deno"],"deprecated-options":["configuration-options","deprecated-options"],"differences-to-the-javascript-api":["command-line-interface","differences-to-the-javascript-api"],"direct-plugin-communication":["plugin-development","direct-plugin-communication"],"dynamic-import":["es-module-syntax","dynamic-import"],"dynamic-import-in-commonjs-output":["migration","dynamic-import-in-commonjs-output"],"empty-import":["es-module-syntax","empty-import"],"error-emfile-too-many-open-files":["troubleshooting","error-emfile-too-many-open-files"],"error-javascript-heap-out-of-memory":["troubleshooting","error-javascript-heap-out-of-memory"],"error-name-is-not-exported-by-module":["troubleshooting","error-name-is-not-exported-by-module"],"error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module":["troubleshooting","error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module"],"error-this-is-undefined":["troubleshooting","error-this-is-undefined"],"es-module-syntax":["es-module-syntax",""],"eval2--eval":["troubleshooting","eval2-eval"],"example-transformer":["plugin-development","example-transformer"],"experimental-options":["configuration-options","experimental-options"],"experimentalcacheexpiry":["configuration-options","experimentalcacheexpiry"],"exporting":["es-module-syntax","exporting"],"external":["configuration-options","external"],"faqs":["faqs",""],"file-urls":["plugin-development","file-urls"],"footer":["plugin-development","footer"],"generatebundle":["plugin-development","generatebundle"],"getting-the-current-directory":["command-line-interface","getting-the-current-directory"],"gulp":["tools","gulp"],"how-bindings-work":["es-module-syntax","how-bindings-work"],"how-do-i-add-polyfills-to-a-rollup-bundle":["faqs","how-do-i-add-polyfills-to-a-rollup-bundle"],"how-do-i-use-rollup-in-nodejs-with-commonjs-modules":["faqs","how-do-i-use-rollup-in-node-js-with-commonjs-modules"],"importing":["es-module-syntax","importing"],"importing-commonjs":["introduction","importing-commonjs"],"importing-packagejson":["command-line-interface","importing-package-json"],"input":["configuration-options","input"],"inputoptions-object":["javascript-api","inputoptions-object"],"installation":["introduction","installation"],"installing-rollup-locally":["tutorial","installing-rollup-locally"],"inter-plugin-communication":["plugin-development","inter-plugin-communication"],"intro":["plugin-development","intro"],"introduction":["introduction",""],"is-rollup-meant-for-building-libraries-or-applications":["faqs","is-rollup-meant-for-building-libraries-or-applications"],"javascript-api":["javascript-api",""],"load":["plugin-development","load"],"loading-a-configuration-from-a-node-package":["command-line-interface","loading-a-configuration-from-a-node-package"],"makeabsoluteexternalsrelative":["configuration-options","makeabsoluteexternalsrelative"],"maxparallelfileops":["configuration-options","maxparallelfileops"],"migration":["migration",""],"modulecontext":["configuration-options","modulecontext"],"moduleparsed":["plugin-development","moduleparsed"],"more-changed-options":["migration","more-changed-options"],"name":["plugin-development","name"],"named-exports":["es-module-syntax","named-exports"],"named-imports":["es-module-syntax","named-imports"],"namespace-imports":["es-module-syntax","namespace-imports"],"new-function":["troubleshooting","new-function"],"onwarn":["configuration-options","onwarn"],"options":["plugin-development","options"],"output-generation-hooks":["plugin-development","output-generation-hooks"],"outputamd":["configuration-options","output-amd"],"outputassetfilenames":["configuration-options","output-assetfilenames"],"outputbanneroutputfooter":["configuration-options","output-banner-output-footer"],"outputchunkfilenames":["configuration-options","output-chunkfilenames"],"outputcompact":["configuration-options","output-compact"],"outputdir":["configuration-options","output-dir"],"outputdynamicimportincjs":["configuration-options","output-dynamicimportincjs"],"outputentryfilenames":["configuration-options","output-entryfilenames"],"outputesmodule":["configuration-options","output-esmodule"],"outputexports":["configuration-options","output-exports"],"outputextend":["configuration-options","output-extend"],"outputexternalimportassertions":["configuration-options","output-externalimportassertions"],"outputexternallivebindings":["configuration-options","output-externallivebindings"],"outputfile":["configuration-options","output-file"],"outputformat":["configuration-options","output-format"],"outputfreeze":["configuration-options","output-freeze"],"outputgeneratedcode":["configuration-options","output-generatedcode"],"outputglobals":["configuration-options","output-globals"],"outputhoisttransitiveimports":["configuration-options","output-hoisttransitiveimports"],"outputindent":["configuration-options","output-indent"],"outputinlinedynamicimports":["configuration-options","output-inlinedynamicimports"],"outputinterop":["configuration-options","output-interop"],"outputintrooutputoutro":["configuration-options","output-intro-output-outro"],"outputmanualchunks":["configuration-options","output-manualchunks"],"outputminifyinternalexports":["configuration-options","output-minifyinternalexports"],"outputname":["configuration-options","output-name"],"outputnoconflict":["configuration-options","output-noconflict"],"outputoptions":["plugin-development","outputoptions"],"outputoptions-object":["javascript-api","outputoptions-object"],"outputpaths":["configuration-options","output-paths"],"outputplugins":["configuration-options","output-plugins"],"outputpreservemodules":["configuration-options","output-preservemodules"],"outputpreservemodulesroot":["configuration-options","output-preservemodulesroot"],"outputsanitizefilename":["configuration-options","output-sanitizefilename"],"outputsourcemap":["configuration-options","output-sourcemap"],"outputsourcemapbaseurl":["configuration-options","output-sourcemapbaseurl"],"outputsourcemapexcludesources":["configuration-options","output-sourcemapexcludesources"],"outputsourcemapfile":["configuration-options","output-sourcemapfile"],"outputsourcemappathtransform":["configuration-options","output-sourcemappathtransform"],"outputstrict":["configuration-options","output-strict"],"outputsystemnullsetters":["configuration-options","output-systemnullsetters"],"outputvalidate":["configuration-options","output-validate"],"outro":["plugin-development","outro"],"overview":["introduction","overview"],"peer-dependencies":["tools","peer-dependencies"],"perf":["configuration-options","perf"],"plugin-context":["plugin-development","plugin-context"],"plugin-development":["plugin-development",""],"plugins":["configuration-options","plugins"],"plugins-overview":["plugin-development","plugins-overview"],"prerequisites":["migration","prerequisites-1"],"preserveentrysignatures":["configuration-options","preserveentrysignatures"],"preservesymlinks":["configuration-options","preservesymlinks"],"programmatically-loading-a-config-file":["javascript-api","programmatically-loading-a-config-file"],"properties":["plugin-development","properties"],"publishing-es-modules":["introduction","publishing-es-modules"],"quick-start":["introduction","quick-start"],"reading-a-file-from-stdin":["command-line-interface","reading-a-file-from-stdin"],"renderchunk":["plugin-development","renderchunk"],"renderdynamicimport":["plugin-development","renderdynamicimport"],"rendererror":["plugin-development","rendererror"],"renderstart":["plugin-development","renderstart"],"resolvedynamicimport":["plugin-development","resolvedynamicimport"],"resolvefileurl":["plugin-development","resolvefileurl"],"resolveid":["plugin-development","resolveid"],"resolveimportmeta":["plugin-development","resolveimportmeta"],"rollupplugin-commonjs":["tools","rollup-plugin-commonjs"],"rollupplugin-node-resolve":["tools","rollup-plugin-node-resolve"],"rolluprollup":["javascript-api","rollup-rollup"],"rollupwatch":["javascript-api","rollup-watch"],"shimmissingexports":["configuration-options","shimmissingexports"],"shouldtransformcachedmodule":["plugin-development","shouldtransformcachedmodule"],"source-code-transformations":["plugin-development","source-code-transformations"],"strictdeprecations":["configuration-options","strictdeprecations"],"synthetic-named-exports":["plugin-development","synthetic-named-exports"],"the-why":["introduction","the-why"],"thisaddwatchfile":["plugin-development","this-addwatchfile"],"thisemitfile":["plugin-development","this-emitfile"],"thiserror":["plugin-development","this-error"],"thisgetcombinedsourcemap":["plugin-development","this-getcombinedsourcemap"],"thisgetfilename":["plugin-development","this-getfilename"],"thisgetmoduleids":["plugin-development","this-getmoduleids"],"thisgetmoduleinfo":["plugin-development","this-getmoduleinfo"],"thisgetwatchfiles":["plugin-development","this-getwatchfiles"],"thisload":["plugin-development","this-load"],"thismeta":["plugin-development","this-meta"],"thisparse":["plugin-development","this-parse"],"thisresolve":["plugin-development","this-resolve"],"thissetassetsource":["plugin-development","this-setassetsource"],"thiswarn":["plugin-development","this-warn"],"tools":["tools",""],"transform":["plugin-development","transform"],"transformers":["plugin-development","transformers"],"tree-shaking":["introduction","tree-shaking"],"tree-shaking-doesnt-seem-to-be-working":["troubleshooting","tree-shaking-doesn-t-seem-to-be-working"],"treeshake":["configuration-options","treeshake"],"troubleshooting":["troubleshooting",""],"tutorial":["tutorial",""],"using-config-files":["tutorial","using-config-files"],"using-configuration-files":["migration","using-configuration-files"],"using-output-plugins":["tutorial","using-output-plugins"],"using-plugins":["tutorial","using-plugins"],"warning-sourcemap-is-likely-to-be-incorrect":["troubleshooting","warning-sourcemap-is-likely-to-be-incorrect"],"warning-treating-module-as-external-dependency":["troubleshooting","warning-treating-module-as-external-dependency"],"watch-options":["configuration-options","watch"],"watchbuilddelay":["configuration-options","watch-builddelay"],"watchchange":["plugin-development","watchchange"],"watchchokidar":["configuration-options","watch-chokidar"],"watchclearscreen":["configuration-options","watch-clearscreen"],"watchexclude":["configuration-options","watch-exclude"],"watchinclude":["configuration-options","watch-include"],"watchoptions":["javascript-api","watchoptions"],"watchskipwrite":["configuration-options","watch-skipwrite"],"what-is-tree-shaking":["faqs","what-is-tree-shaking"],"who-made-the-rollup-logo-its-lovely":["faqs","who-made-the-rollup-logo-it-s-lovely"],"why-are-es-modules-better-than-commonjs-modules":["faqs","why-are-es-modules-better-than-commonjs-modules"],"why-do-additional-imports-turn-up-in-my-entry-chunks-when-code-splitting":["faqs","why-do-additional-imports-turn-up-in-my-entry-chunks-when-code-splitting"],"why-isnt-node-resolve-a-built-in-feature":["faqs","why-isn-t-node-resolve-a-built-in-feature"],"with-npm-packages":["tools","with-npm-packages"],"writebundle":["plugin-development","writebundle"]} ->>>>>>> 72858cb1474b81c91902794ab7d28c79f34b8ca8 +{"--bundleconfigascjs":["command-line-interface","bundleconfigascjs"],"--configplugin-plugin":["command-line-interface","configplugin-plugin"],"--environment-values":["command-line-interface","environment-values"],"--failafterwarnings":["command-line-interface","failafterwarnings"],"--no-stdin":["command-line-interface","no-stdin"],"--silent":["command-line-interface","silent"],"--stdinext":["command-line-interface","stdinext"],"--waitforbundleinput":["command-line-interface","waitforbundleinput"],"-h--help":["command-line-interface","h-help"],"-v--version":["command-line-interface","v-version"],"-w--watch":["command-line-interface","w-watch"],"augmentchunkhash":["plugin-development","augmentchunkhash"],"babel":["tools","babel"],"banner":["plugin-development","banner"],"big-list-of-options":["configuration-options",""],"buildend":["plugin-development","buildend"],"buildstart":["plugin-development","buildstart"],"cache":["configuration-options","cache"],"closebundle":["plugin-development","closebundle"],"closewatcher":["plugin-development","closewatcher"],"command-line-reference":["command-line-interface",""],"context":["configuration-options","context"],"deno":["tools","deno"],"error-emfile-too-many-open-files":["troubleshooting","error-emfile-too-many-open-files"],"error-javascript-heap-out-of-memory":["troubleshooting","error:-javascript-heap-out-of-memory"],"error-name-is-not-exported-by-module":["troubleshooting","error-name-is-not-exported-by-module"],"error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module":["troubleshooting","error-node-tried-to-load-your-configuration-file-as-commonjs-even-though-it-is-likely-an-es-module"],"error-this-is-undefined":["troubleshooting","error-this-is-undefined"],"es-module-syntax":["es-module-syntax",""],"eval2--eval":["troubleshooting","eval2-eval"],"experimentalcacheexpiry":["configuration-options","experimentalcacheexpiry"],"external":["configuration-options","external"],"faqs":["faqs",""],"footer":["plugin-development","footer"],"generatebundle":["plugin-development","generatebundle"],"gulp":["tools","gulp"],"input":["configuration-options","input"],"intro":["plugin-development","intro"],"introduction":["introduction",""],"javascript-api":["javascript-api",""],"load":["plugin-development","load"],"makeabsoluteexternalsrelative":["configuration-options","makeabsoluteexternalsrelative"],"maxparallelfileops":["configuration-options","maxparallelfileops"],"migration":["migration",""],"modulecontext":["configuration-options","modulecontext"],"moduleparsed":["plugin-development","moduleparsed"],"name":["plugin-development","name"],"new-function":["troubleshooting","new-function"],"onwarn":["configuration-options","onwarn"],"options":["plugin-development","options"],"outputamd":["configuration-options","output-amd"],"outputassetfilenames":["configuration-options","output-assetfilenames"],"outputbanneroutputfooter":["configuration-options","output-banner-output-footer"],"outputchunkfilenames":["configuration-options","output-chunkfilenames"],"outputcompact":["configuration-options","output-compact"],"outputdir":["configuration-options","output-dir"],"outputdynamicimportincjs":["configuration-options","output-dynamicimportincjs"],"outputentryfilenames":["configuration-options","output-entryfilenames"],"outputesmodule":["configuration-options","output-esmodule"],"outputexports":["configuration-options","output-exports"],"outputextend":["configuration-options","output-extend"],"outputexternalimportassertions":["configuration-options","output-externalimportassertions"],"outputexternallivebindings":["configuration-options","output-externallivebindings"],"outputfile":["configuration-options","output-file"],"outputformat":["configuration-options","output-format"],"outputfreeze":["configuration-options","output-freeze"],"outputgeneratedcode":["configuration-options","output-generatedcode"],"outputglobals":["configuration-options","output-globals"],"outputhoisttransitiveimports":["configuration-options","output-hoisttransitiveimports"],"outputindent":["configuration-options","output-indent"],"outputinlinedynamicimports":["configuration-options","output-inlinedynamicimports"],"outputinterop":["configuration-options","output-interop"],"outputintrooutputoutro":["configuration-options","output-intro-output-outro"],"outputmanualchunks":["configuration-options","output-manualchunks"],"outputminifyinternalexports":["configuration-options","output-minifyinternalexports"],"outputname":["configuration-options","output-name"],"outputnoconflict":["configuration-options","output-noconflict"],"outputoptions":["plugin-development","outputoptions"],"outputpaths":["configuration-options","output-paths"],"outputplugins":["configuration-options","output-plugins"],"outputpreservemodules":["configuration-options","output-preservemodules"],"outputpreservemodulesroot":["configuration-options","output-preservemodulesroot"],"outputsanitizefilename":["configuration-options","output-sanitizefilename"],"outputsourcemap":["configuration-options","output-sourcemap"],"outputsourcemapbaseurl":["configuration-options","output-sourcemapbaseurl"],"outputsourcemapexcludesources":["configuration-options","output-sourcemapexcludesources"],"outputsourcemapfile":["configuration-options","output-sourcemapfile"],"outputsourcemappathtransform":["configuration-options","output-sourcemappathtransform"],"outputstrict":["configuration-options","output-strict"],"outputsystemnullsetters":["configuration-options","output-systemnullsetters"],"outputvalidate":["configuration-options","output-validate"],"outro":["plugin-development","outro"],"perf":["configuration-options","perf"],"plugin-development":["plugin-development",""],"plugins":["configuration-options","plugins"],"preserveentrysignatures":["configuration-options","preserveentrysignatures"],"preservesymlinks":["configuration-options","preservesymlinks"],"renderchunk":["plugin-development","renderchunk"],"renderdynamicimport":["plugin-development","renderdynamicimport"],"rendererror":["plugin-development","rendererror"],"renderstart":["plugin-development","renderstart"],"resolvedynamicimport":["plugin-development","resolvedynamicimport"],"resolvefileurl":["plugin-development","resolvefileurl"],"resolveid":["plugin-development","resolveid"],"resolveimportmeta":["plugin-development","resolveimportmeta"],"rollupplugin-commonjs":["tools","rollupplugin-commonjs"],"rollupplugin-node-resolve":["tools","rollupplugin-node-resolve"],"rolluprollup":["javascript-api","rollup-rollup"],"rollupwatch":["javascript-api","rollup-watch"],"shimmissingexports":["configuration-options","shimmissingexports"],"shouldtransformcachedmodule":["plugin-development","shouldtransformcachedmodule"],"strictdeprecations":["configuration-options","strictdeprecations"],"thisaddwatchfile":["plugin-development","this-addwatchfile"],"thisemitfile":["plugin-development","this-emitfile"],"thiserror":["plugin-development","this-error"],"thisgetcombinedsourcemap":["plugin-development","this-getcombinedsourcemap"],"thisgetfilename":["plugin-development","this-getfilename"],"thisgetmoduleids":["plugin-development","this-getmoduleids"],"thisgetmoduleinfo":["plugin-development","this-getmoduleinfo"],"thisgetwatchfiles":["plugin-development","this-getwatchfiles"],"thisload":["plugin-development","this-load"],"thismeta":["plugin-development","this-meta"],"thisparse":["plugin-development","this-parse"],"thisresolve":["plugin-development","this-resolve"],"thissetassetsource":["plugin-development","this-setassetsource"],"thiswarn":["plugin-development","this-warn"],"tools":["tools",""],"transform":["plugin-development","transform"],"treeshake":["configuration-options","treeshake"],"troubleshooting":["troubleshooting",""],"tutorial":["tutorial",""],"warning-sourcemap-is-likely-to-be-incorrect":["troubleshooting","warning-sourcemap-is-likely-to-be-incorrect"],"warning-treating-module-as-external-dependency":["troubleshooting","warning-treating-module-as-external-dependency"],"watch-options":["configuration-options","watch"],"watchbuilddelay":["configuration-options","watch-builddelay"],"watchchange":["plugin-development","watchchange"],"watchchokidar":["configuration-options","watch-chokidar"],"watchclearscreen":["configuration-options","watch-clearscreen"],"watchexclude":["configuration-options","watch-exclude"],"watchinclude":["configuration-options","watch-include"],"watchoptions":["javascript-api","watchoptions"],"watchskipwrite":["configuration-options","watch-skipwrite"],"who-made-the-rollup-logo-its-lovely":["faqs","who-made-the-rollup-logo-it-s-lovely"],"writebundle":["plugin-development","writebundle"]} \ No newline at end of file