fix(module-runner): handle non-ascii characters in base64 sourcemaps#21985
fix(module-runner): handle non-ascii characters in base64 sourcemaps#21985sapphi-red merged 10 commits intovitejs:mainfrom
Conversation
|
Is this somehow related to this? vitest-dev/vitest#9640 |
Yes, this seems to be the same issue. |
|
I encountered this when updating snapshots after running tests. It seems to be the same issue. |
|
The bundle size limit was exceeded, so it was increased from 54 kB to 55 kB (53.87 kB → 54.10 kB). |
| return new TextDecoder().decode(bytes) | ||
| } | ||
|
|
||
| return decodeURIComponent(escape(binary)) |
There was a problem hiding this comment.
Isn’t escape deprecated ?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/escape
There was a problem hiding this comment.
Yes, it’s deprecated. I used TextDecoder for modern environments, and escape as a fallback for older ones.
There was a problem hiding this comment.
It will be a bit slower in my experience. I think there’s more possible here.
Saw your change. Would hoist the textdecoder outside of the function to not reinstantiate all the time.
don’t know if this this function is used a lot in vite. If it’s the case I would probably try to optimize via conditional exports for each runtimes
|
Good iterative approach. On the Removing it entirely would simplify the function and avoid shipping a deprecated API call. If there's a specific runtime that matters where |
I've applied the feedback here |
|
Vitest CI got |
|
Hmm, I've checked that |
|
I think this is some node vm or vitest vm quirks. I couldn't reproduce with simple test case, so it's possible that Vitest CI quirk. |
| datasource | package | from | to | | ---------- | ------- | ----- | ----- | | npm | vite | 7.3.1 | 8.0.3 | ## [v8.0.3](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-803-2026-03-26-small) ##### Features - update rolldown to 1.0.0-rc.12 ([#22024](vitejs/vite#22024)) ([84164ef](vitejs/vite@84164ef)) ##### Bug Fixes - **html:** cache unfiltered CSS list to prevent missing styles across entries ([#22017](vitejs/vite#22017)) ([5464190](vitejs/vite@5464190)) - **module-runner:** handle non-ascii characters in base64 sourcemaps ([#21985](vitejs/vite#21985)) ([77c95bf](vitejs/vite@77c95bf)) - **module-runner:** skip re-import if the runner is closed ([#22020](vitejs/vite#22020)) ([ee2c2cd](vitejs/vite@ee2c2cd)) - **optimizer:** scan is not resolving sub path import if used in a glob import ([#22018](vitejs/vite#22018)) ([ddfe20d](vitejs/vite@ddfe20d)) - **ssr:** ssrTransform incorrectly rewrites `meta` identifier inside `import.meta` when a binding named `meta` exists ([#22019](vitejs/vite#22019)) ([cff5f0c](vitejs/vite@cff5f0c)) ##### Miscellaneous Chores - **deps:** bump picomatch from 4.0.3 to 4.0.4 ([#22027](vitejs/vite#22027)) ([7e56003](vitejs/vite@7e56003)) ##### Tests - **html:** add tests for `getCssFilesForChunk` ([#22016](vitejs/vite#22016)) ([43fbbf9](vitejs/vite@43fbbf9)) ## [v8.0.2](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-802-2026-03-23-small) ##### Features - update rolldown to 1.0.0-rc.11 ([#21998](vitejs/vite#21998)) ([ff91c31](vitejs/vite@ff91c31)) ##### Bug Fixes - **deps:** update all non-major dependencies ([#21988](vitejs/vite#21988)) ([9b7d150](vitejs/vite@9b7d150)) ##### Miscellaneous Chores - **deps:** update dependency [@vitejs/devtools](https://github.com/vitejs/devtools) to ^0.1.5 ([#21992](vitejs/vite#21992)) ([b2dd65b](vitejs/vite@b2dd65b)) ## [v8.0.1](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-801-2026-03-19-small) ##### Features - update rolldown to 1.0.0-rc.10 ([#21932](vitejs/vite#21932)) ([b3c067d](vitejs/vite@b3c067d)) ##### Bug Fixes - **bundled-dev:** properly disable `inlineConst` optimization ([#21865](vitejs/vite#21865)) ([6d97142](vitejs/vite@6d97142)) - **css:** lightningcss minify failed when `build.target: 'es6'` ([#21933](vitejs/vite#21933)) ([5fcce46](vitejs/vite@5fcce46)) - **deps:** update all non-major dependencies ([#21878](vitejs/vite#21878)) ([6dbbd7f](vitejs/vite@6dbbd7f)) - **dev:** always use ESM Oxc runtime ([#21829](vitejs/vite#21829)) ([d323ed7](vitejs/vite@d323ed7)) - **dev:** handle concurrent restarts in `_createServer` ([#21810](vitejs/vite#21810)) ([40bc729](vitejs/vite@40bc729)) - handle `+` symbol in package subpath exports during dep optimization ([#21886](vitejs/vite#21886)) ([86db93d](vitejs/vite@86db93d)) - improve `no-cors` request block error ([#21902](vitejs/vite#21902)) ([5ba688b](vitejs/vite@5ba688b)) - use precise regexes for transform filter to avoid backtracking ([#21800](vitejs/vite#21800)) ([dbe41bd](vitejs/vite@dbe41bd)) - **worker:** `require(json)` result should not be wrapped ([#21847](vitejs/vite#21847)) ([0672fd2](vitejs/vite@0672fd2)) - **worker:** make worker output consistent with client and SSR ([#21871](vitejs/vite#21871)) ([69454d7](vitejs/vite@69454d7)) ##### Miscellaneous Chores - add changelog rearrange script ([#21835](vitejs/vite#21835)) ([efef073](vitejs/vite@efef073)) - **deps:** bump required `@vitejs/devtools` version to 0.1+ ([#21925](vitejs/vite#21925)) ([12932f5](vitejs/vite@12932f5)) - **deps:** update rolldown-related dependencies ([#21787](vitejs/vite#21787)) ([1af1d3a](vitejs/vite@1af1d3a)) - rearrange 8.0 changelog ([8e05b61](vitejs/vite@8e05b61)) - rearrange 8.0 changelog ([#21834](vitejs/vite#21834)) ([86edeee](vitejs/vite@86edeee)) ## [v8.0.0](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#800-2026-03-12) ##### Features - update rolldown to 1.0.0-rc.9 ([#21813](vitejs/vite#21813)) ([f05be0e](vitejs/vite@f05be0e)) - warn when `vite-tsconfig-paths` plugin is detected ([#21781](vitejs/vite#21781)) ([ada493e](vitejs/vite@ada493e)) ##### Bug Fixes - **deps:** update all non-major dependencies ([#21786](vitejs/vite#21786)) ([eaa4352](vitejs/vite@eaa4352))
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@effect/language-service](https://github.com/Effect-TS/language-service) | [`0.81.0` → `0.84.2`](https://renovatebot.com/diffs/npm/@effect%2flanguage-service/0.81.0/0.84.2) |  |  | | [@lingui/babel-plugin-lingui-macro](https://lingui.dev) ([source](https://github.com/lingui/js-lingui/tree/HEAD/packages/babel-plugin-lingui-macro)) | [`5.9.3` → `5.9.4`](https://renovatebot.com/diffs/npm/@lingui%2fbabel-plugin-lingui-macro/5.9.3/5.9.4) |  |  | | [@lingui/cli](https://lingui.dev) ([source](https://github.com/lingui/js-lingui/tree/HEAD/packages/cli)) | [`5.9.3` → `5.9.4`](https://renovatebot.com/diffs/npm/@lingui%2fcli/5.9.3/5.9.4) |  |  | | [@lingui/conf](https://lingui.dev) ([source](https://github.com/lingui/js-lingui/tree/HEAD/packages/conf)) | [`5.9.3` → `5.9.4`](https://renovatebot.com/diffs/npm/@lingui%2fconf/5.9.3/5.9.4) |  |  | | [@lingui/core](https://lingui.dev) ([source](https://github.com/lingui/js-lingui/tree/HEAD/packages/core)) | [`5.9.3` → `5.9.4`](https://renovatebot.com/diffs/npm/@lingui%2fcore/5.9.3/5.9.4) |  |  | | [@lingui/react](https://lingui.dev) ([source](https://github.com/lingui/js-lingui/tree/HEAD/packages/react)) | [`5.9.3` → `5.9.4`](https://renovatebot.com/diffs/npm/@lingui%2freact/5.9.3/5.9.4) |  |  | | [@lingui/vite-plugin](https://lingui.dev) ([source](https://github.com/lingui/js-lingui/tree/HEAD/packages/vite-plugin)) | [`5.9.3` → `5.9.4`](https://renovatebot.com/diffs/npm/@lingui%2fvite-plugin/5.9.3/5.9.4) |  |  | | [@tanstack/react-query](https://tanstack.com/query) ([source](https://github.com/TanStack/query/tree/HEAD/packages/react-query)) | [`5.95.0` → `5.95.2`](https://renovatebot.com/diffs/npm/@tanstack%2freact-query/5.95.0/5.95.2) |  |  | | [dependency-cruiser](https://github.com/sverweij/dependency-cruiser) | [`17.3.9` → `17.3.10`](https://renovatebot.com/diffs/npm/dependency-cruiser/17.3.9/17.3.10) |  |  | | [lucide-react](https://lucide.dev) ([source](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`1.6.0` → `1.7.0`](https://renovatebot.com/diffs/npm/lucide-react/1.6.0/1.7.0) |  |  | | [nx](https://nx.dev) ([source](https://github.com/nrwl/nx/tree/HEAD/packages/nx)) | [`22.6.1` → `22.6.3`](https://renovatebot.com/diffs/npm/nx/22.6.1/22.6.3) |  |  | | [pnpm](https://pnpm.io) ([source](https://github.com/pnpm/pnpm/tree/HEAD/pnpm)) | [`10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be` → `10.33.0`](https://renovatebot.com/diffs/npm/pnpm/10.32.1/10.33.0) |  |  | | [tsdown](http://tsdown.dev/) ([source](https://github.com/rolldown/tsdown)) | [`0.21.5` → `0.21.7`](https://renovatebot.com/diffs/npm/tsdown/0.21.5/0.21.7) |  |  | | [vite](https://vite.dev) ([source](https://github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`8.0.1` → `8.0.3`](https://renovatebot.com/diffs/npm/vite/8.0.1/8.0.3) |  |  | --- ### Release Notes <details> <summary>Effect-TS/language-service (@​effect/language-service)</summary> ### [`v0.84.2`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.84.2) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.84.1...@effect/language-service@0.84.2) ##### Patch Changes - [#​706](Effect-TS/language-service#706) [`3c0bea6`](Effect-TS/language-service@3c0bea6) Thanks [@​mattiamanzati](https://github.com/mattiamanzati)! - Fix `getTypeAtLocation` to ignore type-only heritage expressions like `interface X extends Effect.Effect<...>` so the language service no longer triggers bogus TS2689 diagnostics. ### [`v0.84.1`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.84.1) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.84.0...@effect/language-service@0.84.1) ##### Patch Changes - [#​703](Effect-TS/language-service#703) [`dea43b8`](Effect-TS/language-service@dea43b8) Thanks [@​mattiamanzati](https://github.com/mattiamanzati)! - Fix `effectFnImplicitAny` so it does not report false positives when an `Effect.fn` or `Effect.fnUntraced` callback gets its contextual function type from a union member. For example, nested `HttpRouter.add(...)` handlers now correctly recognize the inferred `request` type and produce no diagnostics when the parameter is not actually implicit `any`. - [#​702](Effect-TS/language-service#702) [`0af9b98`](Effect-TS/language-service@0af9b98) Thanks [@​mattiamanzati](https://github.com/mattiamanzati)! - Add Effect v4 support for the `runEffectInsideEffect` diagnostic so it suggests and fixes `Effect.run*With` usage based on `Effect.services`. Update the generated metadata, schema, README entry, and v4 harness examples/snapshots to document and verify the new behavior. ### [`v0.84.0`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.84.0) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.83.1...@effect/language-service@0.84.0) ##### Minor Changes - [#​696](Effect-TS/language-service#696) [`78e78d5`](Effect-TS/language-service@78e78d5) Thanks [@​cevr](https://github.com/cevr)! - Add paired globalDate/globalDateInEffect, globalConsole/globalConsoleInEffect, globalFetch/globalFetchInEffect, globalRandom/globalRandomInEffect, and globalTimers/globalTimersInEffect diagnostics Ten new opt-in diagnostics that flag global/DOM APIs both outside and inside Effect generators: - `globalFetch` / `globalFetchInEffect` — `fetch()` → HttpClient - `globalDate` / `globalDateInEffect` — `Date.now()`, `new Date()` → Clock/DateTime - `globalConsole` / `globalConsoleInEffect` — `console.log/warn/error/info/debug/trace` → Effect.log/Logger - `globalRandom` / `globalRandomInEffect` — `Math.random()` → Random service - `globalTimers` / `globalTimersInEffect` — `setTimeout/setInterval` → Effect.sleep/Schedule All default to `off`. Enable both variants for full coverage inside and outside Effect generators. Shadow-safe (e.g. `const console = yield* Console` won't false-positive). ### [`v0.83.1`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.83.1) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.83.0...@effect/language-service@0.83.1) ##### Patch Changes - [#​698](Effect-TS/language-service#698) [`b11c184`](Effect-TS/language-service@b11c184) Thanks [@​mattiamanzati](https://github.com/mattiamanzati)! - Update the Effect v4 workspace dependencies to `4.0.0-beta.38`. ### [`v0.83.0`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.83.0) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.82.0...@effect/language-service@0.83.0) ##### Minor Changes - [#​695](Effect-TS/language-service#695) [`f057090`](Effect-TS/language-service@f057090) Thanks [@​mattiamanzati](https://github.com/mattiamanzati)! - Add a `config` CLI command for updating diagnostic rule severities without rerunning the full setup flow. - [#​693](Effect-TS/language-service#693) [`b5054e3`](Effect-TS/language-service@b5054e3) Thanks [@​mattiamanzati](https://github.com/mattiamanzati)! - Add setup CLI preset management for diagnostic severities, including preset metadata, preset-aware customization, and a dedicated `config` command for adjusting rule severities without rerunning full setup. ### [`v0.82.0`](https://github.com/Effect-TS/language-service/releases/tag/%40effect/language-service%400.82.0) [Compare Source](https://github.com/Effect-TS/language-service/compare/@effect/language-service@0.81.0...@effect/language-service@0.82.0) ##### Minor Changes - [#​689](Effect-TS/language-service#689) [`aed2074`](Effect-TS/language-service@aed2074) Thanks [@​f15u](https://github.com/f15u)! - Adds ability to reference `$schema` from local installation - [#​692](Effect-TS/language-service#692) [`57fcf35`](Effect-TS/language-service@57fcf35) Thanks [@​mattiamanzati](https://github.com/mattiamanzati)! - Add the `effectFnImplicitAny` diagnostic to mirror `noImplicitAny` for unannotated `Effect.fn` and `Effect.fnUntraced` callback parameters, and support `// @​strict` in diagnostic example files so test fixtures can enable strict compiler options. ##### Patch Changes - [#​687](Effect-TS/language-service#687) [`72827c0`](Effect-TS/language-service@72827c0) Thanks [@​mattiamanzati](https://github.com/mattiamanzati)! - Allow the leaking requirements diagnostic to suppress specific leaked services with `@effect-expect-leaking` comments on the enclosing declaration. - [#​690](Effect-TS/language-service#690) [`77906a9`](Effect-TS/language-service@77906a9) Thanks [@​mattiamanzati](https://github.com/mattiamanzati)! - Fix the class self mismatch diagnostic so it also reports invalid `ServiceMap.Service` self type parameters. - [#​691](Effect-TS/language-service#691) [`0e16db0`](Effect-TS/language-service@0e16db0) Thanks [@​mattiamanzati](https://github.com/mattiamanzati)! - Include start and end in json diagnostics command </details> <details> <summary>lingui/js-lingui (@​lingui/babel-plugin-lingui-macro)</summary> ### [`v5.9.4`](https://github.com/lingui/js-lingui/blob/HEAD/packages/babel-plugin-lingui-macro/CHANGELOG.md#594-2026-03-27) [Compare Source](lingui/js-lingui@v5.9.3...v5.9.4) **Note:** Version bump only for package [@​lingui/babel-plugin-lingui-macro](https://github.com/lingui/babel-plugin-lingui-macro) </details> <details> <summary>lingui/js-lingui (@​lingui/cli)</summary> ### [`v5.9.4`](https://github.com/lingui/js-lingui/blob/HEAD/packages/cli/CHANGELOG.md#594-2026-03-27) [Compare Source](lingui/js-lingui@v5.9.3...v5.9.4) ##### Bug Fixes - really keep catalog extra from previous catalog ([#​2479](lingui/js-lingui#2479)) ([c939113](lingui/js-lingui@c939113)) </details> <details> <summary>lingui/js-lingui (@​lingui/conf)</summary> ### [`v5.9.4`](https://github.com/lingui/js-lingui/blob/HEAD/packages/conf/CHANGELOG.md#594-2026-03-27) [Compare Source](lingui/js-lingui@v5.9.3...v5.9.4) **Note:** Version bump only for package [@​lingui/conf](https://github.com/lingui/conf) </details> <details> <summary>lingui/js-lingui (@​lingui/core)</summary> ### [`v5.9.4`](https://github.com/lingui/js-lingui/blob/HEAD/packages/core/CHANGELOG.md#594-2026-03-27) [Compare Source](lingui/js-lingui@v5.9.3...v5.9.4) **Note:** Version bump only for package [@​lingui/core](https://github.com/lingui/core) </details> <details> <summary>lingui/js-lingui (@​lingui/react)</summary> ### [`v5.9.4`](https://github.com/lingui/js-lingui/blob/HEAD/packages/react/CHANGELOG.md#594-2026-03-27) [Compare Source](lingui/js-lingui@v5.9.3...v5.9.4) **Note:** Version bump only for package [@​lingui/react](https://github.com/lingui/react) </details> <details> <summary>lingui/js-lingui (@​lingui/vite-plugin)</summary> ### [`v5.9.4`](https://github.com/lingui/js-lingui/blob/HEAD/packages/vite-plugin/CHANGELOG.md#594-2026-03-27) [Compare Source](lingui/js-lingui@v5.9.3...v5.9.4) **Note:** Version bump only for package [@​lingui/vite-plugin](https://github.com/lingui/vite-plugin) </details> <details> <summary>TanStack/query (@​tanstack/react-query)</summary> ### [`v5.95.2`](https://github.com/TanStack/query/blob/HEAD/packages/react-query/CHANGELOG.md#5952) [Compare Source](https://github.com/TanStack/query/compare/@tanstack/react-query@5.95.1...@tanstack/react-query@5.95.2) ##### Patch Changes - Updated dependencies \[[`cd5a35b`](TanStack/query@cd5a35b)]: - [@​tanstack/query-core](https://github.com/tanstack/query-core)@​5.95.2 ### [`v5.95.1`](https://github.com/TanStack/query/blob/HEAD/packages/react-query/CHANGELOG.md#5951) [Compare Source](https://github.com/TanStack/query/compare/@tanstack/react-query@5.95.0...@tanstack/react-query@5.95.1) ##### Patch Changes - Updated dependencies \[[`1f1775c`](TanStack/query@1f1775c)]: - [@​tanstack/query-core](https://github.com/tanstack/query-core)@​5.95.1 </details> <details> <summary>sverweij/dependency-cruiser (dependency-cruiser)</summary> ### [`v17.3.10`](https://github.com/sverweij/dependency-cruiser/releases/tag/v17.3.10) [Compare Source](sverweij/dependency-cruiser@v17.3.9...v17.3.10) #### 👷 maintenance - [`e401673`](sverweij/dependency-cruiser@e401673d) chore(npm): updates external dependencies Includes a bump of picomatch that has a vulnerability that is irrelevant for dependency-cruiser's context, but that nonetheless might trigger security scanners. </details> <details> <summary>lucide-icons/lucide (lucide-react)</summary> ### [`v1.7.0`](https://github.com/lucide-icons/lucide/releases/tag/1.7.0): Version 1.7.0 [Compare Source](lucide-icons/lucide@1.6.0...1.7.0) #### What's Changed - fix(lucide-react): Fix dynamic imports by [@​ericfennis](https://github.com/ericfennis) in [#​4210](lucide-icons/lucide#4210) - feat(icons): added `map-pin-search` icon by [@​TonySullivan](https://github.com/TonySullivan) in [#​4125](lucide-icons/lucide#4125) #### New Contributors - [@​TonySullivan](https://github.com/TonySullivan) made their first contribution in [#​4125](lucide-icons/lucide#4125) **Full Changelog**: <lucide-icons/lucide@1.6.0...1.7.0> </details> <details> <summary>nrwl/nx (nx)</summary> ### [`v22.6.3`](https://github.com/nrwl/nx/releases/tag/22.6.3) [Compare Source](nrwl/nx@22.6.2...22.6.3) #### 22.6.3 (2026-03-27) ##### 🚀 Features - **misc:** a/b test cloud prompt copy in create-nx-workspace ([#​35039](nrwl/nx#35039)) ##### 🩹 Fixes - **js:** add {projectRoot} prefix to d.ts fileset in typescript plugin ([#​35037](nrwl/nx#35037)) - **misc:** use namespace import for chalk v4 compatibility ([7c9f873bd1](nrwl/nx@7c9f873bd1)) - **misc:** handle non-interactive mode and add template shorthand names for CNW ([#​35045](nrwl/nx#35045)) ##### ❤️ Thank You - FrozenPandaz [@​FrozenPandaz](https://github.com/FrozenPandaz) - Jack Hsu [@​jaysoo](https://github.com/jaysoo) - Jason Jean [@​FrozenPandaz](https://github.com/FrozenPandaz) ### [`v22.6.2`](https://github.com/nrwl/nx/releases/tag/22.6.2) [Compare Source](nrwl/nx@22.6.1...22.6.2) #### 22.6.2 (2026-03-26) ##### 🚀 Features - **core:** auto-open browser for Cloud setup URL during create-nx-workspace ([#​35014](nrwl/nx#35014)) - **repo:** add nx-labs repo target and use glob pattern for update-all-repos ([#​34999](nrwl/nx#34999)) ##### 🩹 Fixes - **angular:** update duplicate migration keys ([#​34961](nrwl/nx#34961)) - **angular-rspack:** ensure rebuild chunks emitted summary accurate ([#​34979](nrwl/nx#34979), [#​34936](nrwl/nx#34936)) - **bundling:** disable swc input source map resolution ([#​35010](nrwl/nx#35010), [#​32671](nrwl/nx#32671)) - **core:** split-target should handle projects with colons in name better ([#​34725](nrwl/nx#34725)) - **core:** prevent TUI crash when task output arrives after completion ([#​34785](nrwl/nx#34785), [#​34677](nrwl/nx#34677)) - **core:** respect --parallel limit for discrete task concurrency ([#​34721](nrwl/nx#34721), [#​34117](nrwl/nx#34117), [#​31494](nrwl/nx#31494)) - **core:** use scroll-offset-based scrollbar positioning in TUI ([#​34689](nrwl/nx#34689)) - **core:** skip import-equals namespace aliases in native scanner ([#​34947](nrwl/nx#34947), [#​34644](nrwl/nx#34644)) - **core:** include command name on all telemetry events ([#​34949](nrwl/nx#34949)) - **core:** skip workspace context setup when global bin hands off to local ([#​34953](nrwl/nx#34953), [#​34914](nrwl/nx#34914)) - **core:** use upsert to prevent FK constraint violations in task DB ([#​34977](nrwl/nx#34977)) - **core:** runtime inputs shouldn't be cached at task\_hasher layer and filesets should be in the hash\_plans layer ([#​34971](nrwl/nx#34971), [#​30170](nrwl/nx#30170)) - **core:** show better log message when isolated plugin shuts down after hook completion ([#​34922](nrwl/nx#34922)) - **core:** handle owners and conformance project refs on move/remove ([#​34815](nrwl/nx#34815)) - **core:** resolve published nx migrate package resolution ([#​35013](nrwl/nx#35013), [#​34111](nrwl/nx#34111)) - **core:** prevent batch executor error on prematurely completed tasks ([#​35015](nrwl/nx#35015)) - **core:** add timeouts to GitHub push flow to prevent CLI hangs ([#​35011](nrwl/nx#35011), [#​34482](nrwl/nx#34482)) - **devkit:** prevent double install in generators for TS solution workspaces ([#​34891](nrwl/nx#34891)) - **devkit:** add startTime and endTime to TaskResult interface ([#​34996](nrwl/nx#34996)) - **gradle:** ignore test enums when atomizing ([#​34974](nrwl/nx#34974)) - **js:** pass configName to typecheck command in TS plugin ([#​34989](nrwl/nx#34989), [#​34274](nrwl/nx#34274)) - **js:** add input on .d.ts files within dependency projects ([#​34968](nrwl/nx#34968)) - **linter:** prepend framework configs before baseConfig in flat config generation ([#​34898](nrwl/nx#34898), [#​28381](nrwl/nx#28381), [#​32923](nrwl/nx#32923)) - **misc:** make webinar banner theme-aware with light mode support ([#​35029](nrwl/nx#35029)) - **module-federation:** enable ESM output for Angular rspack MF plugin ([#​34839](nrwl/nx#34839), [#​34584](nrwl/nx#34584), [#​33992](nrwl/nx#33992)) - **nx-cloud:** remove invalid images ([#​34997](nrwl/nx#34997), [#​34970](nrwl/nx#34970)) - **nx-dev:** build nx-dev in-place to fix ai package resolution ([#​34730](nrwl/nx#34730), [#​34669](nrwl/nx#34669)) - **nx-dev:** improve docs search ranking and metrics ([#​34992](nrwl/nx#34992)) - **release:** fall back to gh user search for author usernames ([#​34904](nrwl/nx#34904)) - **repo:** skip flaky Cypress HMR e2e tests ([#​34969](nrwl/nx#34969)) - **repo:** resolve FreeBSD build disk space issue ([#​35030](nrwl/nx#35030)) - **vite:** add support for Vite 8 ([#​34850](nrwl/nx#34850), [#​34849](nrwl/nx#34849)) - **vitest:** resolve addPlugin default in init generator ([#​34990](nrwl/nx#34990)) ##### ❤️ Thank You - AgentEnder [@​AgentEnder](https://github.com/AgentEnder) - AI-JamesHenry [@​AI-JamesHenry](https://github.com/AI-JamesHenry) - Amp - barbados-clemens [@​barbados-clemens](https://github.com/barbados-clemens) - Caleb Ukle - Charlie Croom - Claude Opus 4.6 - Colum Ferry [@​Coly010](https://github.com/Coly010) - Craigory Coppola [@​AgentEnder](https://github.com/AgentEnder) - FrozenPandaz [@​FrozenPandaz](https://github.com/FrozenPandaz) - Jack Baker - Jack Hsu [@​jaysoo](https://github.com/jaysoo) - Jason Jean [@​FrozenPandaz](https://github.com/FrozenPandaz) - jaysoo [@​jaysoo](https://github.com/jaysoo) - Leosvel Pérez Espinosa [@​leosvelperez](https://github.com/leosvelperez) - Louie Weng [@​lourw](https://github.com/lourw) - Robert Sidzinka - Steven Nance </details> <details> <summary>pnpm/pnpm (pnpm)</summary> ### [`v10.33.0`](https://github.com/pnpm/pnpm/releases/tag/v10.33.0): pnpm 10.33 [Compare Source](pnpm/pnpm@v10.32.1...v10.33.0) #### Minor Changes - Added a new `dedupePeers` setting that reduces peer dependency duplication. When enabled, peer dependency suffixes use version-only identifiers (`name@version`) instead of full dep paths, eliminating nested suffixes like `(foo@1.0.0(bar@2.0.0))`. This dramatically reduces the number of package instances in projects with many recursive peer dependencies [#​11070](pnpm/pnpm#11070). #### Patch Changes - Fail on incompatible lockfiles in CI when frozen lockfile mode is enabled, while preserving non-frozen CI fallback behavior. - When package metadata is malformed or can't be fetched, the error thrown will now show the originating error. - Fixed intermittent failures when multiple `pnpm dlx` calls run concurrently for the same package. When the global virtual store is enabled, the importer now verifies file content before skipping a rename, avoiding destructive swap-renames that break concurrent processes. Also tolerates EPERM during bin creation on Windows and properly propagates `enableGlobalVirtualStore` through the install pipeline. - Fixed handling of non-string version selectors in `hoistPeers`, preventing invalid peer dependency specifiers. - Improve the non-interactive modules purge error hint to include the `confirmModulesPurge=false` workaround. When pnpm needs to recreate `node_modules` but no TTY is available, the error now suggests either setting `CI=true` or disabling the purge confirmation prompt via `confirmModulesPurge=false`. Adds a regression test for the non-TTY flow. - Fixed false "Command not found" errors on Windows when a command exists in PATH but exits with a non-zero code. Also fixed path resolution for `--filter` contexts where the command runs in a different package directory. - When a pnpm-lock.yaml contains two documents, ignore the first one. pnpm v11 will write two lockfile documents into pnpm-lock.yaml in order to store pnpm version integrities and config dependency resolutions. - Fixed a bug preventing the `clearCache` function returned by `createNpmResolver` from properly clearing metadata cache. <!-- sponsors --> #### Platinum Sponsors <table> <tbody> <tr> <td align="center" valign="middle"> <a href="https://bit.cloud/?utm_source=pnpm&utm_medium=release_notes" target="_blank"><img src="https://pnpm.io/img/users/bit.svg" width="80" alt="Bit"></a> </td> </tr> </tbody> </table> #### Gold Sponsors <table> <tbody> <tr> <td align="center" valign="middle"> <a href="https://sanity.io/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/sanity.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/sanity_light.svg" /> <img src="https://pnpm.io/img/users/sanity.svg" width="120" alt="Sanity" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://discord.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/discord.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/discord_light.svg" /> <img src="https://pnpm.io/img/users/discord.svg" width="220" alt="Discord" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://vite.dev/?utm_source=pnpm&utm_medium=release_notes" target="_blank"><img src="https://pnpm.io/img/users/vitejs.svg" width="42" alt="Vite"></a> </td> </tr> <tr> <td align="center" valign="middle"> <a href="https://serpapi.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/serpapi_dark.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/serpapi_light.svg" /> <img src="https://pnpm.io/img/users/serpapi_dark.svg" width="160" alt="SerpApi" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://coderabbit.ai/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/coderabbit.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/coderabbit_light.svg" /> <img src="https://pnpm.io/img/users/coderabbit.svg" width="220" alt="CodeRabbit" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://stackblitz.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/stackblitz.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/stackblitz_light.svg" /> <img src="https://pnpm.io/img/users/stackblitz.svg" width="190" alt="Stackblitz" /> </picture> </a> </td> </tr> <tr> <td align="center" valign="middle"> <a href="https://workleap.com/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/workleap.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/workleap_light.svg" /> <img src="https://pnpm.io/img/users/workleap.svg" width="190" alt="Workleap" /> </picture> </a> </td> <td align="center" valign="middle"> <a href="https://nx.dev/?utm_source=pnpm&utm_medium=release_notes" target="_blank"> <picture> <source media="(prefers-color-scheme: light)" srcset="https://pnpm.io/img/users/nx.svg" /> <source media="(prefers-color-scheme: dark)" srcset="https://pnpm.io/img/users/nx_light.svg" /> <img src="https://pnpm.io/img/users/nx.svg" width="50" alt="Nx" /> </picture> </a> </td> </tr> </tbody> </table> <!-- sponsors end --> </details> <details> <summary>rolldown/tsdown (tsdown)</summary> ### [`v0.21.7`](https://github.com/rolldown/tsdown/releases/tag/v0.21.7) [Compare Source](rolldown/tsdown@v0.21.6...v0.21.7) ##### 🚀 Features - Add `module` option for attw and publint to allow passing imported modules directly - by [@​sxzz](https://github.com/sxzz) [<samp>(31e90)</samp>](rolldown/tsdown@31e90c1) ##### 🐞 Bug Fixes - **deps**: Add skipNodeModulesBundle dep subpath e2e tests and fix docs - by [@​sxzz](https://github.com/sxzz) [<samp>(deff7)</samp>](rolldown/tsdown@deff72c) ##### [View changes on GitHub](rolldown/tsdown@v0.21.6...v0.21.7) ### [`v0.21.6`](https://github.com/rolldown/tsdown/releases/tag/v0.21.6) [Compare Source](rolldown/tsdown@v0.21.5...v0.21.6) ##### 🚀 Features - Upgrade rolldown to v1.0.0-rc.12 - by [@​sxzz](https://github.com/sxzz) [<samp>(51292)</samp>](rolldown/tsdown@512926d) - **config**: - Pass root config to workspace config functions - by [@​sxzz](https://github.com/sxzz) [<samp>(76169)</samp>](rolldown/tsdown@7616960) - Use mergeConfig for workspace config merging and support variadic overrides - by [@​sxzz](https://github.com/sxzz) [<samp>(148aa)</samp>](rolldown/tsdown@148aaaa) - **dts**: - Add `cjsReexport` option to eliminate dual module type hazard - by [@​mandarini](https://github.com/mandarini) and [@​sxzz](https://github.com/sxzz) in [#​856](rolldown/tsdown#856) [<samp>(875c1)</samp>](rolldown/tsdown@875c1b3) - **exports**: - Add `bin` option to auto-generate package.json bin field - by [@​sxzz](https://github.com/sxzz) in [#​869](rolldown/tsdown#869) [<samp>(7ebd6)</samp>](rolldown/tsdown@7ebd62d) ##### 🐞 Bug Fixes - **css**: - Compile preprocessor langs in virtual CSS modules - by [@​sxzz](https://github.com/sxzz) in [#​865](rolldown/tsdown#865) [<samp>(7b2e0)</samp>](rolldown/tsdown@7b2e0f9) - Strip `.module` from CSS output filenames - by [@​sxzz](https://github.com/sxzz) in [#​866](rolldown/tsdown#866) [<samp>(03ade)</samp>](rolldown/tsdown@03ade19) - Default splitting to true in unbundle mode for CSS inject - by [@​sxzz](https://github.com/sxzz) in [#​867](rolldown/tsdown#867) [<samp>(a4da6)</samp>](rolldown/tsdown@a4da6af) - Split CSS plugin into pre/post phases for scoped CSS support - by [@​sxzz](https://github.com/sxzz) in [#​870](rolldown/tsdown#870) [<samp>(ff0c4)</samp>](rolldown/tsdown@ff0c45a) - **entry**: - Correctly output relative paths in logger output - by [@​sxzz](https://github.com/sxzz) [<samp>(00050)</samp>](rolldown/tsdown@0005096) ##### [View changes on GitHub](rolldown/tsdown@v0.21.5...v0.21.6) </details> <details> <summary>vitejs/vite (vite)</summary> ### [`v8.0.3`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-803-2026-03-26-small) [Compare Source](vitejs/vite@v8.0.2...v8.0.3) ##### Features - update rolldown to 1.0.0-rc.12 ([#​22024](vitejs/vite#22024)) ([84164ef](vitejs/vite@84164ef)) ##### Bug Fixes - **html:** cache unfiltered CSS list to prevent missing styles across entries ([#​22017](vitejs/vite#22017)) ([5464190](vitejs/vite@5464190)) - **module-runner:** handle non-ascii characters in base64 sourcemaps ([#​21985](vitejs/vite#21985)) ([77c95bf](vitejs/vite@77c95bf)) - **module-runner:** skip re-import if the runner is closed ([#​22020](vitejs/vite#22020)) ([ee2c2cd](vitejs/vite@ee2c2cd)) - **optimizer:** scan is not resolving sub path import if used in a glob import ([#​22018](vitejs/vite#22018)) ([ddfe20d](vitejs/vite@ddfe20d)) - **ssr:** ssrTransform incorrectly rewrites `meta` identifier inside `import.meta` when a binding named `meta` exists ([#​22019](vitejs/vite#22019)) ([cff5f0c](vitejs/vite@cff5f0c)) ##### Miscellaneous Chores - **deps:** bump picomatch from 4.0.3 to 4.0.4 ([#​22027](vitejs/vite#22027)) ([7e56003](vitejs/vite@7e56003)) ##### Tests - **html:** add tests for `getCssFilesForChunk` ([#​22016](vitejs/vite#22016)) ([43fbbf9](vitejs/vite@43fbbf9)) ### [`v8.0.2`](https://github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#small-802-2026-03-23-small) [Compare Source](vitejs/vite@v8.0.1...v8.0.2) ##### Features - update rolldown to 1.0.0-rc.11 ([#​21998](vitejs/vite#21998)) ([ff91c31](vitejs/vite@ff91c31)) ##### Bug Fixes - **deps:** update all non-major dependencies ([#​21988](vitejs/vite#21988)) ([9b7d150](vitejs/vite@9b7d150)) ##### Miscellaneous Chores - **deps:** update dependency [@​vitejs/devtools](https://github.com/vitejs/devtools) to ^0.1.5 ([#​21992](vitejs/vite#21992)) ([b2dd65b](vitejs/vite@b2dd65b)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) in timezone UTC, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIwLjAuMC1zZW1hbnRpYy1yZWxlYXNlIiwidXBkYXRlZEluVmVyIjoiMC4wLjAtc2VtYW50aWMtcmVsZWFzZSIsInRhcmdldEJyYW5jaCI6Im1hc3RlciIsImxhYmVscyI6W119--> Reviewed-on: https://git.bitcart.ai/bitcart/bitcart-frontend/pulls/181

Fix UTF-8 decoding issue caused by using atob for base64 decoding.
Use Buffer.from(..., 'base64').toString('utf-8') when available to ensure correct decoding.
Closes #21984