From e6bf48203aef9822b65c12dc9b00e4a7888c7a70 Mon Sep 17 00:00:00 2001 From: Christoph Perger Date: Thu, 29 Oct 2026 20:59:28 +0100 Subject: [PATCH] chore(deps): vite 8 (Rolldown) Vite 6.4.5 -> 8.3.5 for the library, the site and the map0-check build. Rolldown and Oxc replace Rollup and esbuild. esbuild leaves the dependency graph, so its allowBuilds entry goes too. Vitest 5 runs on Vite 8 as it is. - build.rollupOptions -> build.rolldownOptions (the old name is a deprecated alias). - Vite 8 strips legal comments whenever it minifies. The library and the site set output.comments.legal, so the licence headers of Lit, DOMPurify and jsPDF stay in the chunks, as they did with esbuild. - scripts/check-size.mjs dropped a static edge when the same chunk also import()ed the same file. Rolldown merges print into the engine chunk, which imports MapLibre both ways, and the whole map tier was reported as deferred. The filter is gone; on the Vite 6 dist it changes nothing. - Rolldown does not hoist transitive imports, so the configurator entry no longer imports MapLibre at all. copyMaplibreDist still fails a misplaced chunk (tried with a chunks/ subfolder), and the site keeps its flat entry keys. docs/09 section 5 says what else changed: no entry facade, index chunks named after their directory (src-, esm-, lib-, dist-), 50-byte facades for ineffective dynamic imports. Page tier 35.3 -> 34.1 KB gzip (33.8 without the licence headers), first map 477.8 -> 475.3 KB, on demand 602.3 -> 580.3 KB. --- docs/06-architecture.md | 2 +- docs/09-engineering-notes.md | 41 +- package.json | 2 +- packages/check/vite.config.ts | 4 +- packages/ui/package.json | 2 +- packages/ui/vite.config.ts | 6 +- pnpm-lock.yaml | 712 +++++++++++--------------------- pnpm-workspace.yaml | 1 - scripts/check-size.mjs | 8 +- scripts/maplibre-dist.mjs | 14 +- scripts/minify-css-literals.mjs | 5 +- site/playground/playground.ts | 2 +- site/vite.config.ts | 15 +- 13 files changed, 310 insertions(+), 504 deletions(-) diff --git a/docs/06-architecture.md b/docs/06-architecture.md index 22124ec..8ef6c7f 100644 --- a/docs/06-architecture.md +++ b/docs/06-architecture.md @@ -156,7 +156,7 @@ Two more decisions carry the rest: library imported dynamically from two modules is emitted twice. `core/src/ogc.ts` is the single place that loads ogc-client (the WMTS adapter and the add-layer dialog both go through it). -Chunks are emitted flat next to the entry: Rollup writes the external MapLibre specifier verbatim +Chunks are emitted flat next to the entry: the bundler writes the external MapLibre specifier verbatim into every chunk, so a `chunks/` subdirectory would resolve `./maplibre-gl.mjs` one level too deep. Keeping the page tier this small requires discipline in the element: it may only import types from diff --git a/docs/09-engineering-notes.md b/docs/09-engineering-notes.md index 9fae8a2..c50ee6a 100644 --- a/docs/09-engineering-notes.md +++ b/docs/09-engineering-notes.md @@ -395,23 +395,41 @@ it, or drop it when a real dependency arrives. ## 5. Field notes: build and bundler -- **Rollup writes `output.paths` verbatim** into every chunk that imports the external module, so - chunks must sit in the same directory as the entry. A `chunks/` subfolder made +- **The bundler writes `output.paths` verbatim** (Rollup did, Rolldown does) into every chunk that + imports the external module, so chunks must sit in the same directory as the entry. A `chunks/` subfolder made `./maplibre-gl.mjs` resolve one level too deep — and the standalone demo *looked* fine because it silently fell back to the dev sources. Demo pages that test the bundle must not have a fallback. -- **The same bug one level up, in the site build.** Rollup hoists the imports of an entry's - dependencies into the entry chunk (`output.hoistTransitiveImports`), externals included, so a page - whose own code never mentions MapLibre still carries `import "./maplibre-gl.mjs"`. The configurator +- **The same bug one level up, in the site build.** Rollup (up to Vite 6) hoisted the imports of an + entry's dependencies into the entry chunk (`output.hoistTransitiveImports`), externals included, so + a page whose own code never mentioned MapLibre still carried `import "./maplibre-gl.mjs"`. The configurator page's entry was emitted at `assets/configurator/` (its input key was `configurator/index`) and 404'd on that import in production — the whole module graph, so no element at all — while `pnpm dev` and the configurator smoke check, both on the unbundled sources, stayed green. The site's entry keys are flat now (`configurator-index`), and `copyMaplibreDist` refuses a bundle that emits a MapLibre-importing chunk outside the directory it copies into, so the next variant fails in CI. -- **The entry is a facade.** Because the lazy chunks import our shared code, Rollup emits `map0.js` - as a small re-export shim in front of the real chunk. That is normal for a code-split library; it - costs one extra request, which a `modulepreload` hint can remove if it ever matters. + Rolldown (Vite 8) does not hoist (`hoistTransitiveImports` is "not implemented yet"), so the + configurator entry no longer imports MapLibre at all. Keys and guard stay: the chunk layout is the + bundler's to choose, and the guard was checked to still fire under Rolldown. +- **The entry is not a facade any more.** Rollup emitted `map0.js` as a small re-export shim in front + of the real chunk, because the lazy chunks import our shared code. Rolldown puts the element's code + into `map0.js` itself and moves Lit into a chunk of its own (`decorate-*.js`), so the page tier is + still four files but without the extra request. - **Chunk names come from module names**, which is why `popup-*.js` and `add-layer-dialog-*.js` are - readable. `scripts/check-size.mjs` uses that plus the sourcemaps to classify tiers. + readable. For an `index` module Rolldown takes the directory name instead: core is `src-*.js` (as + are the hyparquet chunks), geotiff and PMTiles are `esm-*.js`, proj4 is `lib-*.js`, ogc-client is + `dist-*.js`. `scripts/check-size.mjs` reads what is inside from the sourcemaps. +- **Rolldown emits a facade for an ineffective dynamic import.** An `import()` of a module that + already sits in a static chunk (the `INEFFECTIVE_DYNAMIC_IMPORT` warnings: `basemaps.ts`, + `bbox.ts`, `adapters/vector.ts`) becomes a 50-byte `export { … } from "./src-*.js"` chunk, one tiny + request on first use, where Rollup referenced the chunk directly. CommonJS interop helpers sit in + `rolldown-runtime-*.js` (deferred: geotiff, ogc-client; on the site also Ace). +- **Licence headers stay in the chunks on purpose.** Vite 8 drops legal comments (`@license`, + `/*!`) whenever it minifies; esbuild under Vite 6 kept them inline. The library and the site build + both set `output.comments: { legal: true }`, so Lit's, DOMPurify's and jsPDF's headers still ship + with the code. That is ~0.3 KB gzip of the page tier, mostly Lit's twelve headers. +- **`check-size.mjs` once dropped a static edge** when the same chunk also `import()`ed the same + file. Under Rolldown the core chunk imports MapLibre both ways, and the whole map tier was + reported as deferred. The static pattern never matches `import(`, so the filter is gone. - **Fat optional dependencies are worth stubbing.** jsPDF dynamically imports html2canvas and canvg for `doc.html()` and SVG rasterisation, which map0 never calls — ~110 KB gzip that shipped in the folder and would only ever be dead weight. Aliased to `src/stubs/pdf-stub.ts`, same trick as @@ -427,8 +445,9 @@ it, or drop it when a real dependency arrives. build Rollup emitted the re-export but dropped the corresponding import, so the chunk referenced an undefined name (`Popup is not defined`, only in the bundle). Wrap it in a function that *uses* the binding instead — `createPopup()` — and the import survives. -- **Lit's `css` literals are not minified by anybody.** esbuild minifies the code around a - template literal, never the string inside, so every comment and indent in `styles.ts` shipped in +- **Lit's `css` literals are not minified by anybody.** The minifier (esbuild up to Vite 6, Oxc + since Vite 8) minifies the code around a template literal, never the string inside, so every + comment and indent in `styles.ts` shipped in the page tier — ~3 KB gzip. `scripts/minify-css-literals.mjs` (a pre-transform in the package and the site build) strips comments, collapses white space and drops the spaces around `{ } ; , >`; it leaves the spaces around `:` alone (`.a :hover` is not `.a:hover`) and fails the build on diff --git a/package.json b/package.json index 8e4a351..9867488 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "pngjs": "^7.0.0", "release-it": "^21.1.1", "typescript": "^5.9.3", - "vite": "^6.4.5", + "vite": "^8.3.5", "vitest": "^5.0.5" } } diff --git a/packages/check/vite.config.ts b/packages/check/vite.config.ts index da1fe1b..bbcdf08 100644 --- a/packages/check/vite.config.ts +++ b/packages/check/vite.config.ts @@ -8,7 +8,7 @@ import { optionalPeerStubs } from "../../scripts/stub-aliases.mjs"; * resolve), ogc-client stays a runtime dependency. Tree-shaking with * `moduleSideEffects: false` is what keeps MapLibre, jsPDF and the other * browser-only dependencies of core out: the checker reaches core's - * capabilities reading and request builders only, and Rollup may drop every + * capabilities reading and request builders only, and Rolldown may drop every * module whose exports it never uses — including their import statements. */ export default defineConfig({ @@ -22,7 +22,7 @@ export default defineConfig({ sourcemap: false, minify: false, ssr: fileURLToPath(new URL("./src/cli.ts", import.meta.url)), - rollupOptions: { + rolldownOptions: { output: { entryFileNames: "map0-check.js", format: "es" }, treeshake: { moduleSideEffects: false }, }, diff --git a/packages/ui/package.json b/packages/ui/package.json index 837b00a..8f418a0 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -21,6 +21,6 @@ "maplibre-gl": "^6.16.0" }, "devDependencies": { - "vite": "^6.4.5" + "vite": "^8.3.5" } } diff --git a/packages/ui/vite.config.ts b/packages/ui/vite.config.ts index f7dbede..af1b6ea 100644 --- a/packages/ui/vite.config.ts +++ b/packages/ui/vite.config.ts @@ -32,7 +32,7 @@ export default defineConfig({ }, formats: ["es"], }, - rollupOptions: { + rolldownOptions: { external: maplibreExternal.external, output: { /* the copied files sit next to the entry, so every chunk that imports @@ -41,6 +41,10 @@ export default defineConfig({ paths: maplibreExternal.paths, entryFileNames: "[name].js", chunkFileNames: "[name]-[hash].js", + /* the licence headers of what we bundle (Lit, DOMPurify, jsPDF …) stay + in the chunks, as they did up to Vite 6; Vite 8 strips them when it + minifies */ + comments: { legal: true }, }, }, }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 349139b..d84907e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -200,11 +200,11 @@ importers: specifier: ^5.9.3 version: 5.9.3 vite: - specifier: ^6.4.5 - version: 6.4.5(@types/node@22.20.5)(jiti@2.7.0) + specifier: ^8.3.5 + version: 8.3.5(@types/node@22.20.5)(jiti@2.7.0) vitest: specifier: ^5.0.5 - version: 5.0.5(@types/node@22.20.5)(vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0)) + version: 5.0.5(@types/node@22.20.5)(vite@8.3.5(@types/node@22.20.5)(jiti@2.7.0)) packages/check: dependencies: @@ -317,8 +317,8 @@ importers: version: 6.16.0 devDependencies: vite: - specifier: ^6.4.5 - version: 6.4.5(@types/node@22.20.5)(jiti@2.7.0) + specifier: ^8.3.5 + version: 8.3.5(@types/node@22.20.5)(jiti@2.7.0) packages: @@ -354,162 +354,6 @@ packages: resolution: {integrity: sha512-aalGyl7dbB5PArRebDIX43ZvBlXrYm9uWzGJ26t+4SzJVPsOuvfILGGbw5X4yX7i50YEmJ8zvbiWnqH/AAnZqg==} engines: {node: '>=22'} - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@fontsource-variable/inter@5.3.0': resolution: {integrity: sha512-OupL48va4JNofb97w6NYeF9S7W/kHNKM0Er8Dem5nqi4jeOLrVJDoE8tZEpnMJmtkvNbB1EIPPwHcdkF6b1oUA==} @@ -700,13 +544,6 @@ packages: '@maplibre/vt-pbf@4.3.3': resolution: {integrity: sha512-dEe5XUd64RQbxNxy2OzIkJnwNDWjVmSXjCd0A7zLirm7QJ/WWbmtDFIkfsiM4yt1cplqzG6oSivRYeWx1SM1yg==} - '@napi-rs/lzma-linux-x64-gnu@1.5.1': - resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==} - engines: {node: ^22.20 || ^24.12 || >=25} - cpu: [x64] - os: [linux] - libc: [glibc] - '@octokit/auth-token@6.0.0': resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} engines: {node: '>= 20'} @@ -765,6 +602,9 @@ packages: '@octokit/types@18.0.0': resolution: {integrity: sha512-l6bAF43PNxkJp6g+W4PjoUSSkxHomXw2nOum5CTftJz1NlV3vu93NImgOYtLf6CbBUb5j+fiuzW0PPQ5JTSvZA==} + '@oxc-project/types@0.155.0': + resolution: {integrity: sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==} + '@petamoriken/float16@3.9.3': resolution: {integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==} @@ -782,143 +622,104 @@ packages: resolution: {integrity: sha512-Jhlb+0zYez1T1yXUQs3F1qAtFuJljBVNdy9TKmLDauAXkxsOXopKYOyQ5Wm6SvP3fycav0GviX4Y15WWhGetMw==} engines: {node: '>=14.0.0'} - '@rollup/rollup-android-arm-eabi@4.66.0': - resolution: {integrity: sha512-7y4XeoUHPecjfUDRmap8U0q6bjfLAPn7uOGT8BKyqy8uNDOjsGS8rlBhOx6sZLVwwjN6hapvGl2mW9/IS6UNww==} + '@rolldown/binding-android-arm-eabi@1.2.15': + resolution: {integrity: sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.66.0': - resolution: {integrity: sha512-e8WugYZXpgqrlMXLCudYVRAxAcK7AIY36JxRDwFRD38L9q62G1VsEUW6ijXxzjxYjNB8i1zo3B/ycIQ/qjLC/Q==} + '@rolldown/binding-android-arm64@1.2.15': + resolution: {integrity: sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.66.0': - resolution: {integrity: sha512-6vkDCfyDjNLokh+Rt1D2KtNgFFMEPdkWha/mbtP4cSjh9xiN8T/JBS/A7nDYKjmMAXHrvR9J3AzUk2LtFbIBLg==} + '@rolldown/binding-darwin-arm64@1.2.15': + resolution: {integrity: sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.66.0': - resolution: {integrity: sha512-/mzZAX0+Q6eXxvkR0HB0RZCCrsbmFD8DpsvCQoMYABDfq/DjqkbfytuJ7GvZ4AhR/Mgis2fXbZrGqfbcK2Z5fA==} + '@rolldown/binding-darwin-x64@1.2.15': + resolution: {integrity: sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.66.0': - resolution: {integrity: sha512-JQJx9E8tUjGqed1RevDmoHaS3V30ODdV8uyvGxlwd4K5se6bkPrMeltSybqAtpJ+ltDRfo7FORQaJG2Hd5nGog==} - cpu: [arm64] - os: [freebsd] - - '@rollup/rollup-freebsd-x64@4.66.0': - resolution: {integrity: sha512-GEaUQQjMaG7X1304qMgqLjzCKv6CdDirzJSS+UqUs3xhJ9X2Kjzu0JDbLoUU42FWxwmZqz+SsgU1SlQv9GNRVA==} + '@rolldown/binding-freebsd-x64@1.2.15': + resolution: {integrity: sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.66.0': - resolution: {integrity: sha512-DgmAU9N0NhDQDzHgFUocDio7zRO8jR/nY/obDGvCR8zbJ6J77Fg6X49yPuExJUpYPbC82EOaRhG969pWzUSnHQ==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-arm-musleabihf@4.66.0': - resolution: {integrity: sha512-zG09YZ+sk/HoHq+P9gYB0EseQ3M20RbDuKGWey6fbiMDV1LxfXvhgSW9jDaCcvFPMgfLXpimzXY+UYvA8R2mLQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.15': + resolution: {integrity: sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.66.0': - resolution: {integrity: sha512-vlArhgyXbcVc1D4WZPoiYuqJIaMiSHBj6etRXua0KlfjlZeuiQyVAPYi0/N49O4mSp3u1iGUBLEjNa8ec81XZg==} + '@rolldown/binding-linux-arm64-gnu@1.2.15': + resolution: {integrity: sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.66.0': - resolution: {integrity: sha512-RxJZtk0G87YPotDaRDvRqStV8cbqLSC5TroHvQHHKsqBg0ok64RxKgtXeFsa7FBcy7mb4crBrG3xK8USWIqWNA==} + '@rolldown/binding-linux-arm64-musl@1.2.15': + resolution: {integrity: sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.66.0': - resolution: {integrity: sha512-qlGcw959PrLLkZhiBxF3OZ6SQvj+OKY85mCqGNgSRs4LZlDJ6ICqmz6UdxtINdhcXYwNIbZoapQVBAmZlD2hUQ==} - cpu: [loong64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-loong64-musl@4.66.0': - resolution: {integrity: sha512-TvTI/7Cy0WvRA1SXgwzu6bwXBnMpmeT/ln5q7WvSpqmXy1VbmEnY8HVIDQNBiaHJvoWqRr0M4FNo7qiqtyMaFw==} - cpu: [loong64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-ppc64-gnu@4.66.0': - resolution: {integrity: sha512-UZEDkSoDRZ50NyLj70nO6mpIK3dvs2cPTTvQb1bA/PBDmr9fvn5KiESuGfh6srd7Zi6Lt9Sv2sVrFr1QoHLvPQ==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - - '@rollup/rollup-linux-ppc64-musl@4.66.0': - resolution: {integrity: sha512-VRbxTvagLh3HRcysx1CNq+HHcvJbSebNI6fCbk7jwmmWHkXjrSIV3igXBpRHUTFdg0pagWGu50xoSZXnrZHjVQ==} + '@rolldown/binding-linux-ppc64-gnu@1.2.15': + resolution: {integrity: sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [musl] - - '@rollup/rollup-linux-riscv64-gnu@4.66.0': - resolution: {integrity: sha512-uWdJpvYqh0LE/i+YBL3sMX0a2kUkICENjmrPmyBmMOFc3jMrs6MSQH/pMD+VIpGEoUcr3XkHGLLfymzIqPSRRg==} - cpu: [riscv64] - os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.66.0': - resolution: {integrity: sha512-3FUd88pxgWAjK60OgCrika1AcNG+u8zaCdWjg4TlcZTDkt5TGyci8ZU64l3OJ9ax0MEjw3P80B/3PoSQDCLwJQ==} - cpu: [riscv64] - os: [linux] - libc: [musl] - - '@rollup/rollup-linux-s390x-gnu@4.66.0': - resolution: {integrity: sha512-qT2rMmgyej62g5AdwktK+Bt2lBu497pzWZe12TTQ5JmZjOYPnEwcPEAOSLTBxBV+6gIES75rXm219v/QkT397A==} + '@rolldown/binding-linux-s390x-gnu@1.2.15': + resolution: {integrity: sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.66.0': - resolution: {integrity: sha512-E46rnZgp7J84Qwe8RMlF+rgimnDo/9fuiGbUArGB0ZkMWf97O7yeSCfKls5x/YJOF0RcuSe9RctuKe1hlxICiA==} + '@rolldown/binding-linux-x64-gnu@1.2.15': + resolution: {integrity: sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.66.0': - resolution: {integrity: sha512-Uz1HiZe+qBzqgdPsON+z0wRx3WdATuyzwvGT6cr2VZVrqqko0ZJVfkrQJtwDMuDcAfXYdo7XucaxJ7lTLjEcgg==} + '@rolldown/binding-linux-x64-musl@1.2.15': + resolution: {integrity: sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.66.0': - resolution: {integrity: sha512-Ph7TX3Ex5qdfcb7Tc6eEPugVkRfJ501eTovO4T5029YObfpZ7dzn3RiwpFvGp50nk2QUhvBMZ0PFGlEj6pOYTg==} - cpu: [x64] - os: [openbsd] - - '@rollup/rollup-openharmony-arm64@4.66.0': - resolution: {integrity: sha512-nZYPEya7ZkeNxUEiF7qmNZbyLTyRN3MK5cO22KqsaoneUzXJuzBIQRw+7BEQy9LGj2O5vrCE9V3EpK06FYo1tQ==} + '@rolldown/binding-openharmony-arm64@1.2.15': + resolution: {integrity: sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.66.0': - resolution: {integrity: sha512-u7aTfS3R6C4hRsqXSzaO6qLZYLVuMkHMvcWlux4IM8IJif1VCl2cgPBSo5gSNoFoStQypQP+qwq8W1IyFBf1QQ==} + '@rolldown/binding-win32-arm64-msvc@1.2.15': + resolution: {integrity: sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.66.0': - resolution: {integrity: sha512-e+i9ueHrH1Bafb0cf0woAIVJbYcoC8vRaD+vz+Xi8w6jz9cYJSV3vyKO6ELGSZ6g4W4MJOm2WPLN4/nQf77h7w==} - cpu: [ia32] - os: [win32] - - '@rollup/rollup-win32-x64-gnu@4.66.0': - resolution: {integrity: sha512-KfTCbrtr2zXTqH2E1F+uYlFTrYibxHKqPAHobpd8Kfg49cEHmuHebOidCTDRgqG1suaPFX7oejFQeGE71zWKfA==} + '@rolldown/binding-win32-x64-msvc@1.2.15': + resolution: {integrity: sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==} + engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.66.0': - resolution: {integrity: sha512-xA+neBh1bqkqaS3b48T2UHZnDsTIpb9B0h+TdBzynjF/ymCpYndhfY10RqW0qSKB1HqqQA83mINVhAdwA+mETg==} - cpu: [x64] - os: [win32] + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@simple-libs/child-process-utils@2.0.0': resolution: {integrity: sha512-dvNoRKLijXnD0XoJAz94pbNuB5GQgDr55UhpSPhffDkTT0Cmcqh9jSCOtwfT2d4H6MI9E7c4SgtMuJXZ6F3c6A==} @@ -1226,6 +1027,10 @@ packages: destr@2.0.5: resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -1268,11 +1073,6 @@ packages: es-module-lexer@2.3.2: resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} - esbuild@0.25.12: - resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} - engines: {node: '>=18'} - hasBin: true - escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -1480,6 +1280,80 @@ packages: lerc@3.0.0: resolution: {integrity: sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==} + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + lit-element@4.2.2: resolution: {integrity: sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==} @@ -1764,9 +1638,9 @@ packages: resolution: {integrity: sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==} engines: {node: '>= 0.8.15'} - rollup@4.66.0: - resolution: {integrity: sha512-Onq6/qO4ARhxIs+jYiHE0pYehadLyMECAiGEqQ+0/aWND3+2PmifJIIqBLYtuBODqHTlOUEQFtIVPyCy0Lck7A==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} + rolldown@1.2.15: + resolution: {integrity: sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true run-applescript@7.1.0: @@ -1899,31 +1773,34 @@ packages: resolution: {integrity: sha512-u4J1hr6Y+C/hit34GwL3eIcUf3wngT8TlYUjK7tk0jxydKLAq3sYvifjdTDA6U3KCKRcQCQDGf/srjxfZF3l7g==} engines: {node: '>=18.12.0'} - vite@6.4.5: - resolution: {integrity: sha512-4enwjFfi4IwtEh0w+jPzpLVOFQiPHmmzPxcHXQOyEur47o6u0jE573DmGpjA+7irXoMLYRZD5ZaFUEneS3abPg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vite@8.3.5: + resolution: {integrity: sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.7.1 || ^0.8.0 + esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + less: ^4.0.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 peerDependenciesMeta: '@types/node': optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -2053,84 +1930,6 @@ snapshots: '@conventional-changelog/template@1.4.0': {} - '@esbuild/aix-ppc64@0.25.12': - optional: true - - '@esbuild/android-arm64@0.25.12': - optional: true - - '@esbuild/android-arm@0.25.12': - optional: true - - '@esbuild/android-x64@0.25.12': - optional: true - - '@esbuild/darwin-arm64@0.25.12': - optional: true - - '@esbuild/darwin-x64@0.25.12': - optional: true - - '@esbuild/freebsd-arm64@0.25.12': - optional: true - - '@esbuild/freebsd-x64@0.25.12': - optional: true - - '@esbuild/linux-arm64@0.25.12': - optional: true - - '@esbuild/linux-arm@0.25.12': - optional: true - - '@esbuild/linux-ia32@0.25.12': - optional: true - - '@esbuild/linux-loong64@0.25.12': - optional: true - - '@esbuild/linux-mips64el@0.25.12': - optional: true - - '@esbuild/linux-ppc64@0.25.12': - optional: true - - '@esbuild/linux-riscv64@0.25.12': - optional: true - - '@esbuild/linux-s390x@0.25.12': - optional: true - - '@esbuild/linux-x64@0.25.12': - optional: true - - '@esbuild/netbsd-arm64@0.25.12': - optional: true - - '@esbuild/netbsd-x64@0.25.12': - optional: true - - '@esbuild/openbsd-arm64@0.25.12': - optional: true - - '@esbuild/openbsd-x64@0.25.12': - optional: true - - '@esbuild/openharmony-arm64@0.25.12': - optional: true - - '@esbuild/sunos-x64@0.25.12': - optional: true - - '@esbuild/win32-arm64@0.25.12': - optional: true - - '@esbuild/win32-ia32@0.25.12': - optional: true - - '@esbuild/win32-x64@0.25.12': - optional: true - '@fontsource-variable/inter@5.3.0': {} '@geomatico/maplibre-cog-protocol@0.10.0(maplibre-gl@6.16.0)': @@ -2314,9 +2113,6 @@ snapshots: '@types/geojson': 7946.0.16 pbf: 5.1.2 - '@napi-rs/lzma-linux-x64-gnu@1.5.1': - optional: true - '@octokit/auth-token@6.0.0': {} '@octokit/core@7.0.8': @@ -2386,6 +2182,8 @@ snapshots: dependencies: '@octokit/openapi-types': 29.0.1 + '@oxc-project/types@0.155.0': {} + '@petamoriken/float16@3.9.3': {} '@phun-ky/typeof@2.0.3': {} @@ -2406,80 +2204,52 @@ snapshots: '@rgrove/parse-xml@4.2.3': {} - '@rollup/rollup-android-arm-eabi@4.66.0': - optional: true - - '@rollup/rollup-android-arm64@4.66.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.66.0': - optional: true - - '@rollup/rollup-darwin-x64@4.66.0': - optional: true - - '@rollup/rollup-freebsd-arm64@4.66.0': - optional: true - - '@rollup/rollup-freebsd-x64@4.66.0': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.66.0': - optional: true - - '@rollup/rollup-linux-arm-musleabihf@4.66.0': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.66.0': + '@rolldown/binding-android-arm-eabi@1.2.15': optional: true - '@rollup/rollup-linux-arm64-musl@4.66.0': + '@rolldown/binding-android-arm64@1.2.15': optional: true - '@rollup/rollup-linux-loong64-gnu@4.66.0': + '@rolldown/binding-darwin-arm64@1.2.15': optional: true - '@rollup/rollup-linux-loong64-musl@4.66.0': + '@rolldown/binding-darwin-x64@1.2.15': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.66.0': + '@rolldown/binding-freebsd-x64@1.2.15': optional: true - '@rollup/rollup-linux-ppc64-musl@4.66.0': + '@rolldown/binding-linux-arm-gnueabihf@1.2.15': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.66.0': + '@rolldown/binding-linux-arm64-gnu@1.2.15': optional: true - '@rollup/rollup-linux-riscv64-musl@4.66.0': + '@rolldown/binding-linux-arm64-musl@1.2.15': optional: true - '@rollup/rollup-linux-s390x-gnu@4.66.0': + '@rolldown/binding-linux-ppc64-gnu@1.2.15': optional: true - '@rollup/rollup-linux-x64-gnu@4.66.0': + '@rolldown/binding-linux-s390x-gnu@1.2.15': optional: true - '@rollup/rollup-linux-x64-musl@4.66.0': + '@rolldown/binding-linux-x64-gnu@1.2.15': optional: true - '@rollup/rollup-openbsd-x64@4.66.0': + '@rolldown/binding-linux-x64-musl@1.2.15': optional: true - '@rollup/rollup-openharmony-arm64@4.66.0': + '@rolldown/binding-openharmony-arm64@1.2.15': optional: true - '@rollup/rollup-win32-arm64-msvc@4.66.0': + '@rolldown/binding-win32-arm64-msvc@1.2.15': optional: true - '@rollup/rollup-win32-ia32-msvc@4.66.0': + '@rolldown/binding-win32-x64-msvc@1.2.15': optional: true - '@rollup/rollup-win32-x64-gnu@4.66.0': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.66.0': - optional: true + '@rolldown/pluginutils@1.0.1': {} '@simple-libs/child-process-utils@2.0.0': dependencies: @@ -2520,14 +2290,14 @@ snapshots: '@types/trusted-types@2.0.7': {} - '@vitest/mocker@5.0.5(vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0))': + '@vitest/mocker@5.0.5(vite@8.3.5(@types/node@22.20.5)(jiti@2.7.0))': dependencies: '@jridgewell/trace-mapping': 0.3.31 '@vitest/spy': 5.0.5 estree-walker: 3.0.3 magic-string: 1.4.5 optionalDependencies: - vite: 6.4.5(@types/node@22.20.5)(jiti@2.7.0) + vite: 8.3.5(@types/node@22.20.5)(jiti@2.7.0) '@vitest/spy@5.0.5': {} @@ -2772,6 +2542,8 @@ snapshots: destr@2.0.5: {} + detect-libc@2.1.2: {} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -2811,35 +2583,6 @@ snapshots: es-module-lexer@2.3.2: {} - esbuild@0.25.12: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.12 - '@esbuild/android-arm': 0.25.12 - '@esbuild/android-arm64': 0.25.12 - '@esbuild/android-x64': 0.25.12 - '@esbuild/darwin-arm64': 0.25.12 - '@esbuild/darwin-x64': 0.25.12 - '@esbuild/freebsd-arm64': 0.25.12 - '@esbuild/freebsd-x64': 0.25.12 - '@esbuild/linux-arm': 0.25.12 - '@esbuild/linux-arm64': 0.25.12 - '@esbuild/linux-ia32': 0.25.12 - '@esbuild/linux-loong64': 0.25.12 - '@esbuild/linux-mips64el': 0.25.12 - '@esbuild/linux-ppc64': 0.25.12 - '@esbuild/linux-riscv64': 0.25.12 - '@esbuild/linux-s390x': 0.25.12 - '@esbuild/linux-x64': 0.25.12 - '@esbuild/netbsd-arm64': 0.25.12 - '@esbuild/netbsd-x64': 0.25.12 - '@esbuild/openbsd-arm64': 0.25.12 - '@esbuild/openbsd-x64': 0.25.12 - '@esbuild/openharmony-arm64': 0.25.12 - '@esbuild/sunos-x64': 0.25.12 - '@esbuild/win32-arm64': 0.25.12 - '@esbuild/win32-ia32': 0.25.12 - '@esbuild/win32-x64': 0.25.12 - escalade@3.2.0: {} escodegen@2.1.0: @@ -3037,6 +2780,55 @@ snapshots: lerc@3.0.0: {} + lightningcss-android-arm64@1.33.0: + optional: true + + lightningcss-darwin-arm64@1.33.0: + optional: true + + lightningcss-darwin-x64@1.33.0: + optional: true + + lightningcss-freebsd-x64@1.33.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + + lightningcss-linux-arm64-musl@1.33.0: + optional: true + + lightningcss-linux-x64-gnu@1.33.0: + optional: true + + lightningcss-linux-x64-musl@1.33.0: + optional: true + + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + + lightningcss-win32-x64-msvc@1.33.0: + optional: true + + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + lit-element@4.2.2: dependencies: '@lit-labs/ssr-dom-shim': 1.6.0 @@ -3353,37 +3145,26 @@ snapshots: rgbcolor@1.0.1: optional: true - rollup@4.66.0: + rolldown@1.2.15: dependencies: - '@types/estree': 1.0.9 + '@oxc-project/types': 0.155.0 + '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@napi-rs/lzma-linux-x64-gnu': 1.5.1 - '@rollup/rollup-android-arm-eabi': 4.66.0 - '@rollup/rollup-android-arm64': 4.66.0 - '@rollup/rollup-darwin-arm64': 4.66.0 - '@rollup/rollup-darwin-x64': 4.66.0 - '@rollup/rollup-freebsd-arm64': 4.66.0 - '@rollup/rollup-freebsd-x64': 4.66.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.66.0 - '@rollup/rollup-linux-arm-musleabihf': 4.66.0 - '@rollup/rollup-linux-arm64-gnu': 4.66.0 - '@rollup/rollup-linux-arm64-musl': 4.66.0 - '@rollup/rollup-linux-loong64-gnu': 4.66.0 - '@rollup/rollup-linux-loong64-musl': 4.66.0 - '@rollup/rollup-linux-ppc64-gnu': 4.66.0 - '@rollup/rollup-linux-ppc64-musl': 4.66.0 - '@rollup/rollup-linux-riscv64-gnu': 4.66.0 - '@rollup/rollup-linux-riscv64-musl': 4.66.0 - '@rollup/rollup-linux-s390x-gnu': 4.66.0 - '@rollup/rollup-linux-x64-gnu': 4.66.0 - '@rollup/rollup-linux-x64-musl': 4.66.0 - '@rollup/rollup-openbsd-x64': 4.66.0 - '@rollup/rollup-openharmony-arm64': 4.66.0 - '@rollup/rollup-win32-arm64-msvc': 4.66.0 - '@rollup/rollup-win32-ia32-msvc': 4.66.0 - '@rollup/rollup-win32-x64-gnu': 4.66.0 - '@rollup/rollup-win32-x64-msvc': 4.66.0 - fsevents: 2.3.3 + '@rolldown/binding-android-arm-eabi': 1.2.15 + '@rolldown/binding-android-arm64': 1.2.15 + '@rolldown/binding-darwin-arm64': 1.2.15 + '@rolldown/binding-darwin-x64': 1.2.15 + '@rolldown/binding-freebsd-x64': 1.2.15 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.15 + '@rolldown/binding-linux-arm64-gnu': 1.2.15 + '@rolldown/binding-linux-arm64-musl': 1.2.15 + '@rolldown/binding-linux-ppc64-gnu': 1.2.15 + '@rolldown/binding-linux-s390x-gnu': 1.2.15 + '@rolldown/binding-linux-x64-gnu': 1.2.15 + '@rolldown/binding-linux-x64-musl': 1.2.15 + '@rolldown/binding-openharmony-arm64': 1.2.15 + '@rolldown/binding-win32-arm64-msvc': 1.2.15 + '@rolldown/binding-win32-x64-msvc': 1.2.15 run-applescript@7.1.0: {} @@ -3489,23 +3270,22 @@ snapshots: verkit@0.5.0: {} - vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0): + vite@8.3.5(@types/node@22.20.5)(jiti@2.7.0): dependencies: - esbuild: 0.25.12 - fdir: 6.5.0(picomatch@4.0.7) + lightningcss: 1.33.0 picomatch: 4.0.7 postcss: 8.5.32 - rollup: 4.66.0 + rolldown: 1.2.15 tinyglobby: 0.2.17 optionalDependencies: '@types/node': 22.20.5 fsevents: 2.3.3 jiti: 2.7.0 - vitest@5.0.5(@types/node@22.20.5)(vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0)): + vitest@5.0.5(@types/node@22.20.5)(vite@8.3.5(@types/node@22.20.5)(jiti@2.7.0)): dependencies: '@types/chai': 5.2.3 - '@vitest/mocker': 5.0.5(vite@6.4.5(@types/node@22.20.5)(jiti@2.7.0)) + '@vitest/mocker': 5.0.5(vite@8.3.5(@types/node@22.20.5)(jiti@2.7.0)) chai: 6.3.0 es-module-lexer: 2.3.2 expect-type: 1.4.0 @@ -3516,7 +3296,7 @@ snapshots: tinybench: 6.2.2 tinyexec: 1.3.1 tinyglobby: 0.2.17 - vite: 6.4.5(@types/node@22.20.5)(jiti@2.7.0) + vite: 8.3.5(@types/node@22.20.5)(jiti@2.7.0) why-is-node-running: 3.2.1 optionalDependencies: '@types/node': 22.20.5 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index a41844a..f3b03b9 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,4 +2,3 @@ packages: - "packages/*" allowBuilds: core-js: false - esbuild: true diff --git a/scripts/check-size.mjs b/scripts/check-size.mjs index 4fcb49e..018bab2 100644 --- a/scripts/check-size.mjs +++ b/scripts/check-size.mjs @@ -35,15 +35,15 @@ export function measure() { const jsFiles = readdirSync(DIST).filter((f) => f.endsWith(".js") || f.endsWith(".mjs")); const isVendorMaplibre = (f) => f.startsWith("maplibre-gl"); - /** static (non-`import()`) chunk-to-chunk edges */ + /** static (non-`import()`) chunk-to-chunk edges. `import(` never matches the + pattern, so a chunk that imports a file both ways — the engine chunk does + that with MapLibre — keeps its static edge. */ const staticImports = new Map(); for (const file of jsFiles) { const src = readFileSync(join(DIST, file), "utf8"); - const dynamic = new Set([...src.matchAll(/import\(\s*["']\.\/([^"']+)["']/g)].map((m) => m[1])); - const all = [...src.matchAll(/(?:from|import)\s*["']\.\/([^"']+)["']/g)].map((m) => m[1]); staticImports.set( file, - all.filter((f) => !dynamic.has(f)), + [...src.matchAll(/(?:from|import)\s*["']\.\/([^"']+)["']/g)].map((m) => m[1]), ); } diff --git a/scripts/maplibre-dist.mjs b/scripts/maplibre-dist.mjs index c0e8358..c552830 100644 --- a/scripts/maplibre-dist.mjs +++ b/scripts/maplibre-dist.mjs @@ -37,11 +37,13 @@ const importsMaplibre = (chunk) => * refuse a bundle that emits a MapLibre-importing chunk anywhere else. * * The import path is relative to the importing chunk, so a chunk one directory - * down 404s on it, and with it everything that chunk is an entry for. An entry - * does not even have to import MapLibre itself: Rollup hoists the imports of - * its dependencies into it (output.hoistTransitiveImports), which is how the - * site's configurator page broke at assets/configurator/ while every chunk - * that visibly used MapLibre sat in assets/. The build fails here instead. + * down 404s on it, and with it everything that chunk is an entry for. Up to + * Vite 6 an entry did not even have to import MapLibre itself: Rollup hoisted + * the imports of its dependencies into it (output.hoistTransitiveImports), + * which is how the site's configurator page broke at assets/configurator/ + * while every chunk that visibly used MapLibre sat in assets/. Rolldown does + * not hoist, but the chunk layout is still the bundler's to choose. The build + * fails here instead. */ export function copyMaplibreDist(targetDir) { const to = typeof targetDir === "string" ? targetDir : fileURLToPath(targetDir); @@ -75,7 +77,7 @@ export function copyMaplibreDist(targetDir) { }; } -/** rollup settings that keep MapLibre out of our chunks and next to them */ +/** bundler settings (build.rolldownOptions) that keep MapLibre out of our chunks and next to them */ export const maplibreExternal = { /* the bare specifier only — "maplibre-gl/dist/maplibre-gl.css?inline" stays inlined */ external: (id) => id === "maplibre-gl", diff --git a/scripts/minify-css-literals.mjs b/scripts/minify-css-literals.mjs index b5199fa..342a38f 100644 --- a/scripts/minify-css-literals.mjs +++ b/scripts/minify-css-literals.mjs @@ -1,6 +1,7 @@ /** - * Lit's css`` literals reach the bundle exactly as written: esbuild minifies - * the code around them, never the string inside. By volume, styles.ts is + * Lit's css`` literals reach the bundle exactly as written: the minifier (Oxc + * since Vite 8, esbuild before) minifies the code around them, never the + * string inside. By volume, styles.ts is * mostly comments and indentation — about 3 KB of the page tier's gzip — so * this strips both from every css`` literal in packages/ui/src before the * build sees it. diff --git a/site/playground/playground.ts b/site/playground/playground.ts index 5a73b19..2afb15d 100644 --- a/site/playground/playground.ts +++ b/site/playground/playground.ts @@ -10,7 +10,7 @@ */ import "@map0/ui"; /* Ace, hand-picked: the blanket esm-resolver would register every mode and - worker Ace ships and Rollup would emit them all as chunks — megabytes of + worker Ace ships and the build would emit them all as chunks — megabytes of PHP/XQuery/Vim nobody here can ever load. This page needs exactly four pieces: the core, the JSON mode, one theme, and the search box (Ctrl-F). diff --git a/site/vite.config.ts b/site/vite.config.ts index b0d0ef9..c5017ca 100644 --- a/site/vite.config.ts +++ b/site/vite.config.ts @@ -14,11 +14,11 @@ const r = (p: string) => fileURLToPath(new URL(p, import.meta.url)); The key names the page's entry chunk, assets/-.js, and it joins the directory with a dash on purpose: "configurator/index" put the chunk in - assets/configurator/, where the hoisted `import "./maplibre-gl.mjs"` (Rollup - adds the imports of an entry's dependencies to the entry) resolved to a file - that was not there, and the page died on a 404. Every chunk that reaches - MapLibre has to sit in assets/ itself — scripts/maplibre-dist.mjs fails the - build otherwise. The HTML still lands at its own path (configurator/index.html); + assets/configurator/, where the hoisted `import "./maplibre-gl.mjs"` (Rollup, + up to Vite 6, added the imports of an entry's dependencies to the entry; + Rolldown does not hoist them) resolved to a file that was not there, and the + page died on a 404. Every chunk that reaches MapLibre has to sit in assets/ + itself — scripts/maplibre-dist.mjs fails the build otherwise. The HTML still lands at its own path (configurator/index.html); only the chunk name comes from the key. */ const pagesIn = (dir: string): Record => Object.fromEntries( @@ -215,10 +215,11 @@ export default defineConfig({ target: "es2022", outDir: r("../dist-site"), emptyOutDir: true, - rollupOptions: { + rolldownOptions: { input: { ...pagesIn("."), ...pagesIn("demos"), ...pagesIn("playground"), ...pagesIn("configurator") }, external: maplibreExternal.external, - output: { paths: maplibreExternal.paths }, + /* licence headers stay, as in the library build (packages/ui/vite.config.ts) */ + output: { paths: maplibreExternal.paths, comments: { legal: true } }, }, }, resolve: {