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: {