This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [@eslint/js](https://eslint.org) ([source](https://redirect.github.com/eslint/eslint/tree/HEAD/packages/js)) | [`9.30.1` -> `9.31.0`](https://renovatebot.com/diffs/npm/@eslint%2fjs/9.30.1/9.31.0) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [@rollup/rollup-linux-x64-gnu](https://rollupjs.org/) ([source](https://redirect.github.com/rollup/rollup)) | [`4.44.2` -> `4.45.1`](https://renovatebot.com/diffs/npm/@rollup%2frollup-linux-x64-gnu/4.44.2/4.45.1) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [@storybook/addon-docs](https://redirect.github.com/storybookjs/storybook/tree/next/code/addons/docs) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/addons/docs)) | [`9.0.16` -> `9.0.17`](https://renovatebot.com/diffs/npm/@storybook%2faddon-docs/9.0.16/9.0.17) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [@storybook/addon-links](https://redirect.github.com/storybookjs/storybook/tree/next/code/addons/links) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/addons/links)) | [`9.0.16` -> `9.0.17`](https://renovatebot.com/diffs/npm/@storybook%2faddon-links/9.0.16/9.0.17) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [@storybook/builder-vite](https://redirect.github.com/storybookjs/storybook/tree/next/code/builders/builder-vite/#readme) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/builders/builder-vite)) | [`9.0.16` -> `9.0.17`](https://renovatebot.com/diffs/npm/@storybook%2fbuilder-vite/9.0.16/9.0.17) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [@storybook/vue3-vite](https://redirect.github.com/storybookjs/storybook/tree/next/code/frameworks/vue3-vite) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/frameworks/vue3-vite)) | [`9.0.16` -> `9.0.17`](https://renovatebot.com/diffs/npm/@storybook%2fvue3-vite/9.0.16/9.0.17) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [@swc/core](https://swc.rs) ([source](https://redirect.github.com/swc-project/swc)) | [`1.12.11` -> `1.12.14`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.12.11/1.12.14) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`22.16.3` -> `22.16.4`](https://renovatebot.com/diffs/npm/@types%2fnode/22.16.3/22.16.4) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)) | [`8.36.0` -> `8.37.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/8.36.0/8.37.0) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [cron](https://redirect.github.com/kelektiv/node-cron) | [`4.3.1` -> `4.3.2`](https://renovatebot.com/diffs/npm/cron/4.3.1/4.3.2) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [eslint](https://eslint.org) ([source](https://redirect.github.com/eslint/eslint)) | [`9.30.1` -> `9.31.0`](https://renovatebot.com/diffs/npm/eslint/9.30.1/9.31.0) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [eslint-plugin-storybook](https://redirect.github.com/storybookjs/storybook/code/lib/eslint-plugin#readme) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/lib/eslint-plugin)) | [`9.0.16` -> `9.0.17`](https://renovatebot.com/diffs/npm/eslint-plugin-storybook/9.0.16/9.0.17) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [graphql-ws](https://the-guild.dev/graphql/ws) ([source](https://redirect.github.com/enisdenjo/graphql-ws)) | [`6.0.5` -> `6.0.6`](https://renovatebot.com/diffs/npm/graphql-ws/6.0.5/6.0.6) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [nuxt](https://nuxt.com) ([source](https://redirect.github.com/nuxt/nuxt/tree/HEAD/packages/nuxt)) | [`3.17.6` -> `3.17.7`](https://renovatebot.com/diffs/npm/nuxt/3.17.6/3.17.7) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [storybook](https://storybook.js.org) ([source](https://redirect.github.com/storybookjs/storybook/tree/HEAD/code/core)) | [`9.0.16` -> `9.0.17`](https://renovatebot.com/diffs/npm/storybook/9.0.16/9.0.17) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [typescript-eslint](https://typescript-eslint.io/packages/typescript-eslint) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)) | [`8.36.0` -> `8.37.0`](https://renovatebot.com/diffs/npm/typescript-eslint/8.36.0/8.37.0) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [zx](https://google.github.io/zx/) ([source](https://redirect.github.com/google/zx)) | [`8.6.2` -> `8.7.1`](https://renovatebot.com/diffs/npm/zx/8.3.2/8.7.1) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [zx](https://google.github.io/zx/) ([source](https://redirect.github.com/google/zx)) | [`8.6.2` -> `8.7.1`](https://renovatebot.com/diffs/npm/zx/8.6.2/8.7.1) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>eslint/eslint (@​eslint/js)</summary> ### [`v9.31.0`](https://redirect.github.com/eslint/eslint/compare/v9.30.1...d5054e5454a537e9ade238c768c262c6c592cbc1) [Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.30.1...v9.31.0) </details> <details> <summary>rollup/rollup (@​rollup/rollup-linux-x64-gnu)</summary> ### [`v4.45.1`](https://redirect.github.com/rollup/rollup/blob/HEAD/CHANGELOG.md#4451) [Compare Source](https://redirect.github.com/rollup/rollup/compare/v4.45.0...v4.45.1) *2025-07-15* ##### Bug Fixes - Resolve crash when using certain conditional expressions ([#​6009](https://redirect.github.com/rollup/rollup/issues/6009)) ##### Pull Requests - [#​6009](https://redirect.github.com/rollup/rollup/pull/6009): Add hasDeoptimizedCache flag for ConditionalExpression ([@​TrickyPi](https://redirect.github.com/TrickyPi)) ### [`v4.45.0`](https://redirect.github.com/rollup/rollup/blob/HEAD/CHANGELOG.md#4450) [Compare Source](https://redirect.github.com/rollup/rollup/compare/v4.44.2...v4.45.0) *2025-07-12* ##### Features - Improve tree-shaking when both branches of a conditional expression return the same boolean value ([#​6000](https://redirect.github.com/rollup/rollup/issues/6000)) - In environments that support both CJS and ESM, prefer the ESM build of Rollup ([#​6005](https://redirect.github.com/rollup/rollup/issues/6005)) ##### Bug Fixes - Ensure static blocks do not prevent tree-shaking if they access `this` ([#​6001](https://redirect.github.com/rollup/rollup/issues/6001)) ##### Pull Requests - [#​6000](https://redirect.github.com/rollup/rollup/pull/6000): feat: improve get literal value for conditional expression ([@​ahabhgk](https://redirect.github.com/ahabhgk), [@​lukastaegert](https://redirect.github.com/lukastaegert)) - [#​6001](https://redirect.github.com/rollup/rollup/pull/6001): Correct the parent scope for static blocks ([@​TrickyPi](https://redirect.github.com/TrickyPi), [@​lukastaegert](https://redirect.github.com/lukastaegert)) - [#​6005](https://redirect.github.com/rollup/rollup/pull/6005): fix: export field order prefer esm ([@​DylanPiercey](https://redirect.github.com/DylanPiercey)) </details> <details> <summary>storybookjs/storybook (@​storybook/addon-docs)</summary> ### [`v9.0.17`](https://redirect.github.com/storybookjs/storybook/compare/v9.0.16...06a11ce246b2e7a52d41e43420e37162c55133aa) [Compare Source](https://redirect.github.com/storybookjs/storybook/compare/v9.0.16...v9.0.17) </details> <details> <summary>storybookjs/storybook (@​storybook/addon-links)</summary> ### [`v9.0.17`](https://redirect.github.com/storybookjs/storybook/compare/v9.0.16...06a11ce246b2e7a52d41e43420e37162c55133aa) [Compare Source](https://redirect.github.com/storybookjs/storybook/compare/v9.0.16...v9.0.17) </details> <details> <summary>storybookjs/storybook (@​storybook/builder-vite)</summary> ### [`v9.0.17`](https://redirect.github.com/storybookjs/storybook/blob/HEAD/CHANGELOG.md#9017) [Compare Source](https://redirect.github.com/storybookjs/storybook/compare/v9.0.16...v9.0.17) - Addon Vitest: Fix support for plain `stories.tsx` files - [#​32041](https://redirect.github.com/storybookjs/storybook/pull/32041), thanks [@​ghengeveld](https://redirect.github.com/ghengeveld)! - Onboarding: Intent survey - [#​31944](https://redirect.github.com/storybookjs/storybook/pull/31944), thanks [@​ghengeveld](https://redirect.github.com/ghengeveld)! - UI: Fix text color for failing stories in sidebar - [#​32042](https://redirect.github.com/storybookjs/storybook/pull/32042), thanks [@​ghengeveld](https://redirect.github.com/ghengeveld)! </details> <details> <summary>swc-project/swc (@​swc/core)</summary> ### [`v1.12.14`](https://redirect.github.com/swc-project/swc/blob/HEAD/CHANGELOG.md#11214---2025-07-14) [Compare Source](https://redirect.github.com/swc-project/swc/compare/v1.12.11...v1.12.14) ##### Bug Fixes - **(es/minifier)** Don't inline arrow when it contain `this` ([#​10825](https://redirect.github.com/swc-project/swc/issues/10825)) ([8b43bb3](8b43bb35bc)) - **(es/parser)** Make `export` in NS to not affect file type ([#​10799](https://redirect.github.com/swc-project/swc/issues/10799)) ([ae22033](ae22033dc4)) - **(es/parser)** Correctly check ambient context ([#​10802](https://redirect.github.com/swc-project/swc/issues/10802)) ([f97ea03](f97ea03523)) ##### Features - **(es/parser)** Enable support for dynamic import with `defer` phase ([#​10845](https://redirect.github.com/swc-project/swc/issues/10845)) ([097d29d](097d29d21c)) - **(plugin)** Remove `bytecheck` to make Wasm plugins backward compatible ([#​10842](https://redirect.github.com/swc-project/swc/issues/10842)) ([30ad808](30ad80809c)) ##### Miscellaneous Tasks - **(bindings)** Fix dependency issues ([7c57fbb](7c57fbb103)) - **(deps)** Update `class-validator` to avoid comments ([#​10819](https://redirect.github.com/swc-project/swc/issues/10819)) ([bacfa4b](bacfa4b56d)) - **(ide)** Enable `--workspace` for rust-analyzer check ([#​10809](https://redirect.github.com/swc-project/swc/issues/10809)) ([92647ff](92647ff9d9)) ##### Performance - **(es/minifier)** Use `u8` for `remaining_depth` ([#​10833](https://redirect.github.com/swc-project/swc/issues/10833)) ([ed6956a](ed6956a46e)) - **(hstr)** Inline one more byte ([#​10817](https://redirect.github.com/swc-project/swc/issues/10817)) ([3886c97](3886c9720d)) - **(hstr)** Remove static tag ([#​10832](https://redirect.github.com/swc-project/swc/issues/10832)) ([66ae1e8](66ae1e8d5a)) ##### Refactor - **(es/helpers)** Make inline helpers optional at compile time ([#​10808](https://redirect.github.com/swc-project/swc/issues/10808)) ([53f3881](53f38811cc)) - **(es/lexer)** Don't store buffer in lexer ([#​10830](https://redirect.github.com/swc-project/swc/issues/10830)) ([cac40f1](cac40f135d)) - **(es/lints)** Remove warnings without features ([#​10794](https://redirect.github.com/swc-project/swc/issues/10794)) ([41d507f](41d507fe1e)) - **(es/parser)** Reduce token query ([#​10834](https://redirect.github.com/swc-project/swc/issues/10834)) ([5cd5185](5cd5185a7a)) - **(es/parser)** Reduce call to `parse_decorators` ([#​10846](https://redirect.github.com/swc-project/swc/issues/10846)) ([356d3a0](356d3a0850)) - **(es/parser)** Remove duplicate check ([#​10847](https://redirect.github.com/swc-project/swc/issues/10847)) ([2b04efd](2b04efd540)) - **(es/preset-env)** Use strpool,phf for corejs2 data ([#​10803](https://redirect.github.com/swc-project/swc/issues/10803)) ([1652fd8](1652fd8038)) - **(es/react)** Remove redundant `replace` calls ([#​10795](https://redirect.github.com/swc-project/swc/issues/10795)) ([a670b37](a670b37c33)) - **(es/react)** Remove `count_children` ([#​10818](https://redirect.github.com/swc-project/swc/issues/10818)) ([2116ab2](2116ab2fa2)) - **(hstr)** Cleanup duplicate header ([#​10812](https://redirect.github.com/swc-project/swc/issues/10812)) ([630dde9](630dde93c9)) - **(hstr)** Make the deallocation of `Atom`s explicit ([#​10813](https://redirect.github.com/swc-project/swc/issues/10813)) ([406433d](406433d55d)) - **(hstr)** Remove `is_global` ([#​10820](https://redirect.github.com/swc-project/swc/issues/10820)) ([afda0f9](afda0f9d0d)) ##### Testing - **(es/plugin)** Test memory layout of archived types ([#​10841](https://redirect.github.com/swc-project/swc/issues/10841)) ([502e991](502e991a8b)) </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/eslint-plugin)</summary> ### [`v8.37.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8370-2025-07-14) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.36.0...v8.37.0) ##### 🩹 Fixes - **eslint-plugin:** \[unified-signatures] fix false positives for ignoreOverloadsWithDifferentJSDoc option ([#​11381](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11381)) ##### ❤️ Thank You - Yukihiro Hasegawa [@​y-hsgw](https://redirect.github.com/y-hsgw) You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. </details> <details> <summary>kelektiv/node-cron (cron)</summary> ### [`v4.3.2`](https://redirect.github.com/kelektiv/node-cron/blob/HEAD/CHANGELOG.md#432-2025-07-13) [Compare Source](https://redirect.github.com/kelektiv/node-cron/compare/v4.3.1...v4.3.2) ##### 🛠 Builds - **deps:** update dependency luxon to ~3.7.0 ([db69c74](db69c74501)) ##### ♻️ Chores - **action:** update github/codeql-action action to v3.29.0 ([#​990](https://redirect.github.com/kelektiv/node-cron/issues/990)) ([a3fbb3c](a3fbb3cc4d)) - **action:** update github/codeql-action action to v3.29.2 ([0403c53](0403c53320)) - **action:** update marocchino/sticky-pull-request-comment action to v2.9.3 ([eda0c4d](eda0c4df35)) - **action:** update ossf/scorecard-action action to v2.4.2 ([#​991](https://redirect.github.com/kelektiv/node-cron/issues/991)) ([29a3a60](29a3a604ef)) - **action:** update step-security/harden-runner action to v2.12.1 ([ba49a56](ba49a5656c)) - **action:** update step-security/harden-runner action to v2.12.2 ([845202e](845202ee97)) - **deps:** lock file maintenance ([#​989](https://redirect.github.com/kelektiv/node-cron/issues/989)) ([bc1bf72](bc1bf72ff7)) - **deps:** lock file maintenance ([#​999](https://redirect.github.com/kelektiv/node-cron/issues/999)) ([e78d986](e78d9869d6)) - **deps:** update dependency [@​swc](https://redirect.github.com/swc)/core to v1.12.1 ([#​992](https://redirect.github.com/kelektiv/node-cron/issues/992)) ([b5d3bd3](b5d3bd3328)) - **deps:** update dependency [@​swc](https://redirect.github.com/swc)/core to v1.12.5 ([d374494](d374494609)) - **deps:** update dependency [@​swc](https://redirect.github.com/swc)/core to v1.12.9 ([8060c41](8060c41685)) - **deps:** update dependency [@​types](https://redirect.github.com/types)/node to v22.15.32 ([#​993](https://redirect.github.com/kelektiv/node-cron/issues/993)) ([ce9743b](ce9743ba05)) - **deps:** update dependency [@​types](https://redirect.github.com/types)/node to v22.16.0 ([7bae5b1](7bae5b1ef8)) - **deps:** update linters ([24eb53f](24eb53ff67)) - **deps:** update linters ([#​995](https://redirect.github.com/kelektiv/node-cron/issues/995)) ([9395484](9395484758)) - **deps:** update node.js to v23.11.1 ([#​985](https://redirect.github.com/kelektiv/node-cron/issues/985)) ([674a344](674a3448b5)) - **deps:** update semantic-release related packages ([cc2676a](cc2676aa88)) - **deps:** update semantic-release related packages ([#​994](https://redirect.github.com/kelektiv/node-cron/issues/994)) ([4d738df](4d738df05f)) </details> <details> <summary>eslint/eslint (eslint)</summary> ### [`v9.31.0`](https://redirect.github.com/eslint/eslint/compare/v9.30.1...14053edc64bd378ab920575f2488fbfcbb5a4ea0) [Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.30.1...v9.31.0) </details> <details> <summary>enisdenjo/graphql-ws (graphql-ws)</summary> ### [`v6.0.6`](https://redirect.github.com/enisdenjo/graphql-ws/blob/HEAD/CHANGELOG.md#606) [Compare Source](https://redirect.github.com/enisdenjo/graphql-ws/compare/v6.0.5...v6.0.6) ##### Patch Changes - [#​648](https://redirect.github.com/enisdenjo/graphql-ws/pull/648) [`1f53bb4`](1f53bb48b1) Thanks [@​enisdenjo](https://redirect.github.com/enisdenjo)! - Fix building issues causing CJS type definitions referencing ESM modules </details> <details> <summary>nuxt/nuxt (nuxt)</summary> ### [`v3.17.7`](https://redirect.github.com/nuxt/nuxt/releases/tag/v3.17.7) [Compare Source](https://redirect.github.com/nuxt/nuxt/compare/v3.17.6...v3.17.7) > 3.17.7 is the last patch release before v3.18. ##### ✅ Upgrading Our recommendation for upgrading is to run: ```sh npx nuxt upgrade --dedupe ``` This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem. ##### 👉 Changelog [compare changes](https://redirect.github.com/nuxt/nuxt/compare/v3.17.6...v3.17.7) ##### 🩹 Fixes - **nuxt:** Safe-guard `extraPageMetaExtractionKeys` ([#​32510](https://redirect.github.com/nuxt/nuxt/pull/32510)) - **nuxt:** Expose `loadBuilder` error cause ([8f13ce3c2](https://redirect.github.com/nuxt/nuxt/commit/8f13ce3c2)) - **vite:** Handle resolving string vite input ([#​32527](https://redirect.github.com/nuxt/nuxt/pull/32527)) - **nuxt:** Wrap only server components with island generic ([#​32540](https://redirect.github.com/nuxt/nuxt/pull/32540)) - **vite:** Ignore when client entry cannot be resolved ([19a292f34](https://redirect.github.com/nuxt/nuxt/commit/19a292f34)) - **nuxt:** Normalize segment catchall pattern before checking for parent ([#​32413](https://redirect.github.com/nuxt/nuxt/pull/32413)) - **nuxt:** Update warning message to warn against `null` values ([c1b83eab5](https://redirect.github.com/nuxt/nuxt/commit/c1b83eab5)) - **nuxt:** Ensure `semver.satisfies` returns true for pre-release versions ([#​32574](https://redirect.github.com/nuxt/nuxt/pull/32574)) - **nuxt:** Scroll to anchor if present when changing page without saved position ([#​32376](https://redirect.github.com/nuxt/nuxt/pull/32376)) - **nuxt:** Handle `execute being passed to `watch\` ([#​32591](https://redirect.github.com/nuxt/nuxt/pull/32591)) ##### 📖 Documentation - Update fetch types ([#​32522](https://redirect.github.com/nuxt/nuxt/pull/32522)) - Clarify that runtime env variables must start with `NUXT_` ([#​32223](https://redirect.github.com/nuxt/nuxt/pull/32223)) - Fix key change behavior in `useAsyncData` and `useFetch` migration ([#​32560](https://redirect.github.com/nuxt/nuxt/pull/32560)) - Change return type of async data from `undefined` to `null` in v3 docs ([#​32562](https://redirect.github.com/nuxt/nuxt/pull/32562)) - Add section on custom hooks for Nuxt modules ([#​32586](https://redirect.github.com/nuxt/nuxt/pull/32586)) - Provide `async` keyword ([#​32587](https://redirect.github.com/nuxt/nuxt/pull/32587)) - Move augmenting hook types in hooks page ([#​32595](https://redirect.github.com/nuxt/nuxt/pull/32595)) - Add section about module loading order ([#​32597](https://redirect.github.com/nuxt/nuxt/pull/32597)) ##### ✅ Tests - Reenable skipped unit tests ([8fc9b9ee9](https://redirect.github.com/nuxt/nuxt/commit/8fc9b9ee9)) - Update test snapshot for `generateTypes` ([c0855439d](https://redirect.github.com/nuxt/nuxt/commit/c0855439d)) - Improve page scanning test stability ([84b96f3de](https://redirect.github.com/nuxt/nuxt/commit/84b96f3de)) - Pass timeZone in to `<NuxtTime>` test ([#​32558](https://redirect.github.com/nuxt/nuxt/pull/32558)) - Add more useAsyncData + useFetch tests ([#​32585](https://redirect.github.com/nuxt/nuxt/pull/32585)) - Avoid hard-coding async-data keys ([bfca95118](https://redirect.github.com/nuxt/nuxt/commit/bfca95118)) ##### ❤️ Contributors - Daniel Roe ([@​danielroe](https://redirect.github.com/danielroe)) - Julien Huang ([@​huang-julien](https://redirect.github.com/huang-julien)) - abeer0 ([@​iiio2](https://redirect.github.com/iiio2)) - Bobbie Goede ([@​BobbieGoede](https://redirect.github.com/BobbieGoede)) - Damian Głowala ([@​DamianGlowala](https://redirect.github.com/DamianGlowala)) - Nestor Vera ([@​hacknug](https://redirect.github.com/hacknug)) - Ezra Ashenafi ([@​Eazash](https://redirect.github.com/Eazash)) - Mike Laumann Bellika ([@​MikeBellika](https://redirect.github.com/MikeBellika)) - Maxime Pauvert ([@​maximepvrt](https://redirect.github.com/maximepvrt)) - Chriest Yu ([@​jcppman](https://redirect.github.com/jcppman)) - Andrei Hudalla ([@​paranoidPhantom](https://redirect.github.com/paranoidPhantom)) - Sigrid Huemer ([@​s1gr1d](https://redirect.github.com/s1gr1d)) - xjccc ([@​xjccc](https://redirect.github.com/xjccc)) </details> <details> <summary>storybookjs/storybook (storybook)</summary> ### [`v9.0.17`](https://redirect.github.com/storybookjs/storybook/compare/v9.0.16...06a11ce246b2e7a52d41e43420e37162c55133aa) [Compare Source](https://redirect.github.com/storybookjs/storybook/compare/v9.0.16...v9.0.17) </details> <details> <summary>typescript-eslint/typescript-eslint (typescript-eslint)</summary> ### [`v8.37.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-eslint/CHANGELOG.md#8370-2025-07-14) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.36.0...v8.37.0) ##### 🚀 Features - **typescript-estree:** infer tsconfigRootDir from call stack ([#​11370](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11370)) ##### ❤️ Thank You - Josh Goldberg ✨ You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. </details> <details> <summary>google/zx (zx)</summary> ### [`v8.7.1`](https://redirect.github.com/google/zx/releases/tag/8.7.1): — Pipe Whisperer [Compare Source](https://redirect.github.com/google/zx/compare/8.7.0...8.7.1) Continues [v8.7.0](https://redirect.github.com/google/zx/releases/tag/8.7.0): handles new `ps()` corner case and improves `$.kill` mechanics on Windows [#​1266](https://redirect.github.com/google/zx/issues/1266) [#​1267](https://redirect.github.com/google/zx/pull/1267) [#​1269](https://redirect.github.com/google/zx/pull/1269) [webpod/ps#14](https://redirect.github.com/webpod/ps/pull/14) ### [`v8.7.0`](https://redirect.github.com/google/zx/releases/tag/8.7.0): — Solder Savior [Compare Source](https://redirect.github.com/google/zx/compare/8.6.2...8.7.0) Important fixes for annoying flaky bugs #### kill() 🐞 We've found an interesting case [#​1262](https://redirect.github.com/google/zx/pull/1262) ```js const p = $`sleep 1000` const {pid} = p // 12345 await p.kill() ``` If we kill the process again, the result might be unexpected: ```js await ps({pid}) // {pid: 12345, ppid: 67890, command: 'another command', ...} p.kill() ``` This happens because the `pid` may be reused by the system for another process, so we've added extra assertions to prevent indeterminacy: ```js p.kill() // Error: Too late to kill the process. p.abort() // Error: Too late to abort the process. ``` #### ps() 🐛 - `ps()` uses **[wmic](https://en.wikipedia.org/wiki/Windows_Management_Instrumentation)** internally on Windows, it relies on *fragile* heuristics to parse the output. We have improved this logic to handle more format variants, but over time (in v9 maybe) we're planning to change the approach. [#​1256](https://redirect.github.com/google/zx/pull/1256) [#​1263](https://redirect.github.com/google/zx/issues/1263) [webpod/ps#12](https://redirect.github.com/webpod/ps/pull/12) [webpod/ingrid#6](https://redirect.github.com/webpod/ingrid/pull/6) ```js const [root] = await ps.lookup({ pid: process.pid }) assert.equal(root.pid, process.pid) ``` ### [`v8.6.2`](https://redirect.github.com/google/zx/releases/tag/8.6.2): — Flow Unstoppable [Compare Source](https://redirect.github.com/google/zx/compare/8.6.1...8.6.2) Fixes `$.prefix` & `$.postfix` values settings via env variables [#​1261](https://redirect.github.com/google/zx/pull/1261) [#​1260](https://redirect.github.com/google/zx/issues/1260) ### [`v8.6.1`](https://redirect.github.com/google/zx/releases/tag/8.6.1): — Drain Hero [Compare Source](https://redirect.github.com/google/zx/compare/8.6.0...8.6.1) - Use `process.env.SHELL` as default shell if defined [#​1252](https://redirect.github.com/google/zx/pull/1252) ```bash SHELL=/bin/zsh zx script.js ``` - Accept numeric strings as `parseDuration()` arg [#​1249](https://redirect.github.com/google/zx/pull/1249) ```js await sleep(1000) // 1 second await sleep('1000') // 1 second ``` - Update docker base image to `node:24-alpine` [#​1239](https://redirect.github.com/google/zx/pull/1239) - Docs improvements [#​1242](https://redirect.github.com/google/zx/pull/1242) [#​1243](https://redirect.github.com/google/zx/pull/1243) [#​1246](https://redirect.github.com/google/zx/pull/1246) [#​1248](https://redirect.github.com/google/zx/pull/1248) [#​1251](https://redirect.github.com/google/zx/pull/1251) ### [`v8.6.0`](https://redirect.github.com/google/zx/releases/tag/8.6.0): — Valve Vanguard [Compare Source](https://redirect.github.com/google/zx/compare/8.5.5...8.6.0) - Enabled `thenable` params processing for `$` literals [#​1237](https://redirect.github.com/google/zx/pull/1237) ```js const a1 = $`echo foo` const a2 = new Promise((resolve) => setTimeout(resolve, 20, ['bar', 'baz'])) await $`echo ${a1} ${a2}` // foo bar baz ``` - A dozen of internal refactorings [#​1225](https://redirect.github.com/google/zx/pull/1225) [#​1226](https://redirect.github.com/google/zx/pull/1226) [#​1228](https://redirect.github.com/google/zx/pull/1228) [#​1229](https://redirect.github.com/google/zx/pull/1229) [#​1230](https://redirect.github.com/google/zx/pull/1230) [#​1231](https://redirect.github.com/google/zx/pull/1231) [#​1232](https://redirect.github.com/google/zx/pull/1232) [#​1233](https://redirect.github.com/google/zx/pull/1233) [#​1234](https://redirect.github.com/google/zx/pull/1234) [#​1235](https://redirect.github.com/google/zx/pull/1235) [#​1236](https://redirect.github.com/google/zx/pull/1236) [#​1238](https://redirect.github.com/google/zx/pull/1238) [#​1239](https://redirect.github.com/google/zx/pull/1239) - Deps bumping - Bytes shrinking - Docs improvements ### [`v8.5.5`](https://redirect.github.com/google/zx/releases/tag/8.5.5): — PVC Wizard [Compare Source](https://redirect.github.com/google/zx/compare/8.5.4...8.5.5) Minor feature polish. - `ProcessPromise` and `ProcessOutput` `lines()` getters now accept a custom delimiter [#​1220](https://redirect.github.com/google/zx/issues/1220) [#​1218](https://redirect.github.com/google/zx/issues/1218) ```ts const cwd = tempdir() const delimiter = '\0' const p1 = $({ cwd })`touch foo bar baz; find ./ -type f -print0 -maxdepth 1` (await p1.lines(delimiter)).sort() // ['./bar', './baz', './foo'] // or via options const lines = [] const p2 = $({ delimiter, cwd, })`find ./ -type f -print0 -maxdepth 1` for await (const line of p2) { lines.push(line) } lines.sort() // ['./bar', './baz', './foo'] ``` - Handle `.nothrow()` option in `ProcessProcess[AsyncIterator]` [#​1216](https://redirect.github.com/google/zx/pull/1216) [#​1217](https://redirect.github.com/google/zx/pull/1217) - Updates yaml to [v2.8.0](https://redirect.github.com/eemeli/yaml/releases/tag/v2.8.0) [#​1221](https://redirect.github.com/google/zx/pull/1221) ### [`v8.5.4`](https://redirect.github.com/google/zx/releases/tag/8.5.4): — Pipe Dreamer [Compare Source](https://redirect.github.com/google/zx/compare/8.5.3...8.5.4) - Fixed the `pipe(file: string)` signature type declaration [#​1208](https://redirect.github.com/google/zx/issues/1208) [#​1209](https://redirect.github.com/google/zx/issues/1209) ### [`v8.5.3`](https://redirect.github.com/google/zx/releases/tag/8.5.3): — Trap Master [Compare Source](https://redirect.github.com/google/zx/compare/8.5.2...8.5.3) - Another portion of JSR related improvements [#​1193](https://redirect.github.com/google/zx/pull/1193) [#​1192](https://redirect.github.com/google/zx/pull/1192) - Goods refactoring [#​1195](https://redirect.github.com/google/zx/pull/1195) - Fixes `expBackoff` implementation - Sets `$.log.output` as default `spinner()` output - Makes configurable `question()` I/O - Added [Graaljs](https://www.graalvm.org/latest/reference-manual/js/NodeJS/) compatability test [#​1194](https://redirect.github.com/google/zx/pull/1194) - Docs improvements, usage examples updates [#​1198](https://redirect.github.com/google/zx/pull/1198) ### [`v8.5.2`](https://redirect.github.com/google/zx/releases/tag/8.5.2): — Threaded Perfection [Compare Source](https://redirect.github.com/google/zx/compare/8.5.0...8.5.2) - Various JSR fixes [#​1189](https://redirect.github.com/google/zx/pull/1189) [#​1186](https://redirect.github.com/google/zx/pull/1186) [#​1179](https://redirect.github.com/google/zx/pull/1179) [#​1187](https://redirect.github.com/google/zx/pull/1187) - Docs improvements [#​1185](https://redirect.github.com/google/zx/pull/1185) [#​1181](https://redirect.github.com/google/zx/pull/1181) ### [`v8.5.0`](https://redirect.github.com/google/zx/releases/tag/8.5.0): — Flow Splitter [Compare Source](9ba1fb4b8d...8.5.0) In this release we're significantly expanding the zx setup capabilities. #### zx@lite Just core functions without extras, ~7x smaller than the full version. [#​1131](https://redirect.github.com/google/zx/pull/1131) ```shell npm i zx@lite npm i zx@8.5.0-lite ``` Detailed comparison: [zx/versions](https://google.github.io/zx/versions) ```ts import { $ } from 'zx' await $`echo foo` ``` #### Channels We have completely reforged the distribution flow. Now zx is available in multiple formats: - [npmjs](https://www.npmjs.com/package/zx) - [GH npm](https://redirect.github.com/google/zx/pkgs/npm/zx) - [GH repo](https://redirect.github.com/google/zx) - [GH docker](https://redirect.github.com/google/zx/pkgs/container/zx) - [JSR](https://jsr.io/@​webpod/zx) - [Homebrew](https://redirect.github.com/Homebrew/homebrew-core/blob/master/Formula/z/zx.rb) ```shell ### npm pkg from registry.npmjs.org npm i zx ### install directly from the GH npm i google/zx ### from GH the npm registry npm i --registry=https://npm.pkg.github.com @​google/zx ### fetch from the JSR ### https://jsr.io/docs/using-packages ### @​webpod is temporary JSR scope until @​google/zx becomes ready, we'll migrate later npx jsr add @​webpod/zx deno add jsr:@​webpod/zx ### homebrew formula ### https://github.com/Homebrew/homebrew-core/blob/master/Formula/z/zx.rb brew install zx ``` [#​1141](https://redirect.github.com/google/zx/pull/1141)... [#​1157](https://redirect.github.com/google/zx/pull/1157) #### Docker If you'd prefer to run zx in a container, you can pull the image from the GH docker registry. [node:22-alpine](https://hub.docker.com/_/node) is used as a base. [#​1142](https://redirect.github.com/google/zx/pull/1142) [#​1145](https://redirect.github.com/google/zx/pull/1145) ```shell docker pull ghcr.io/google/zx:8.5.0 docker run -t ghcr.io/google/zx:8.5.0 -e="await \$({verbose: true})\`echo foo\`" docker run -t -i -v ./:/script ghcr.io/google/zx:8.5.0 script/t.js ``` #### Chores - Introduced fetch pipe helper to bypass string size limits [#​1130](https://redirect.github.com/google/zx/pull/1130) [#​977](https://redirect.github.com/google/zx/issues/977) ```ts const p1 = fetch('https://example.com').pipe($`cat`) const p2 = fetch('https://example.com').pipe`cat` ``` - Added `glob.sync` shortcut [#​1135](https://redirect.github.com/google/zx/pull/1135) ```ts import { glob } from 'zx' const packages = glob.sync(['package.json', 'packages/*/package.json']) ``` - Restored CLI flags and envars symmetry [#​1137](https://redirect.github.com/google/zx/pull/1137) [#​1138](https://redirect.github.com/google/zx/pull/1138) ```shell ZX_REGISTRY='https://custom-registry.example.com' zx script.js ``` - Enhanced errors stacktrace formatting [#​1166](https://redirect.github.com/google/zx/pull/1166) - Improved 3rd party licenses digest [#​1140](https://redirect.github.com/google/zx/pull/1140) - Enabled zizmor checks [#​1126](https://redirect.github.com/google/zx/pull/1126) - Docs improvements [#​1128](https://redirect.github.com/google/zx/pull/1128) [#​1134](https://redirect.github.com/google/zx/pull/1134) [#​1136](https://redirect.github.com/google/zx/pull/1136) [#​1164](https://redirect.github.com/google/zx/pull/1164) ### [`v8.4.2`](https://redirect.github.com/google/zx/compare/8.4.1...9ba1fb4b8d17a4f5f0067d438b49568606469903) [Compare Source](https://redirect.github.com/google/zx/compare/8.4.1...9ba1fb4b8d17a4f5f0067d438b49568606469903) ### [`v8.4.1`](https://redirect.github.com/google/zx/releases/tag/8.4.1): – Rusty Elbow [Compare Source](https://redirect.github.com/google/zx/compare/8.4.0...8.4.1) Logger enhancements are arriving in this release. [#​1119](https://redirect.github.com/google/zx/issues/1119) [#​1122](https://redirect.github.com/google/zx/pull/1122) [#​1123](https://redirect.github.com/google/zx/pull/1123) [#​1125](https://redirect.github.com/google/zx/pull/1125) - You can customize the output by defining your own formatters for each log entry kind. ```ts $.log.formatters = { cmd: (entry: LogEntry) => `CMD: ${entry.cmd}`, fetch: (entry: LogEntry) => `FETCH: ${entry.url}` //... } ``` - Cmd highlighter now *should* properly detect bins and arguments. If still not, please report it in [#​1122](https://redirect.github.com/google/zx/pull/1122) - Switched to TS 5.8 [#​1120](https://redirect.github.com/google/zx/pull/1120) - Applied [zizmor](https://woodruffw.github.io/zizmor/) to check GHA workflows [#​1126](https://redirect.github.com/google/zx/pull/1126) - Prettier is now enabled as a pre-commit hook [#​1118](https://redirect.github.com/google/zx/pull/1118) ### [`v8.4.0`](https://redirect.github.com/google/zx/releases/tag/8.4.0): – Drip Detective [Compare Source](https://redirect.github.com/google/zx/compare/8.3.2...8.4.0) Try the new batch of enhancements: `npm i zx@8.4.0` https://www.npmjs.com/package/zx/v/8.4.0 #### Changes - The CLI option `--prefer-local` now allows linking both external binaries and packages [#​1116](https://redirect.github.com/google/zx/pull/1116) [#​1117](https://redirect.github.com/google/zx/pull/1117) ```js const cwd = tmpdir() const external = tmpdir() await fs.outputJson(path.join(external, 'node_modules/a/package.json'), { name: 'a', version: '1.0.0', type: 'module', exports: './index.js', }) await fs.outputFile( path.join(external, 'node_modules/a/index.js'), ` export const a = 'AAA' ` ) const script = ` import {a} from 'a' console.log(a); ` const out = await $`zx --cwd=${cwd} --prefer-local=${external} --test <<< ${script}` assert.equal(out.stdout, 'AAA\n') ``` - The `quote` has been slightly changed for a conner case, when zx literal gets an array. [#​999](https://redirect.github.com/google/zx/issues/999) [#​1113](https://redirect.github.com/google/zx/issues/1113) ```js const p = $({prefix: '', postfix: ''})`echo ${[1, '', '*', '2']}` // before p.cmd // `echo 1 $'*' 2`) // after p.cmd // `echo 1 $'' $'*' 2`) ``` - Provided support for custom script extensions via CLI [#​1104](https://redirect.github.com/google/zx/pull/1104) [#​1105](https://redirect.github.com/google/zx/pull/1105) ```bash zx script.zx # Unknown file extension "\.zx" zx --ext=mjs script.zx # OK ``` - Enhanced `nothrow` option to suppress any errors [#​1108](https://redirect.github.com/google/zx/pull/1108) [#​1109](https://redirect.github.com/google/zx/pull/1109) ```js const err = new Error('BrokenSpawn') const o = await $({ nothrow: true, spawn() { throw err }, })`echo foo` o.ok // false o.exitCode // null o.message // BrokenSpawn... o.cause // err ``` - `@types/node` and `@types/fs-extra` deps replaced with triple-slash typing refs [#​1102](https://redirect.github.com/google/zx/pull/1102) - Made `ProcessOutput` iterable [#​1101](https://redirect.github.com/google/zx/pull/1101) - Handle inappropriate `ProcessPromise` instantiation [#​1097](https://redirect.github.com/google/zx/pull/1097) [#​1098](https://redirect.github.com/google/zx/pull/1098) - Pass origin error as `ProcessOuput` cause [#​1110](https://redirect.github.com/google/zx/pull/1110) - Separated build and release steps [#​1106](https://redirect.github.com/google/zx/pull/1106) - Internal improvements - Introduced API bus [#​1083](https://redirect.github.com/google/zx/pull/1083) - Optimized `ProcessOutput` inners [#​1096](https://redirect.github.com/google/zx/pull/1096) [#​1095](https://redirect.github.com/google/zx/pull/1095) - Pinned deps [#​1099](https://redirect.github.com/google/zx/pull/1099) [#​1100](https://redirect.github.com/google/zx/pull/1100) - Switched to explicit `.ts` extensions for relative imports [#​1111](https://redirect.github.com/google/zx/pull/1111) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), 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. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/unraid/api). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4yMy4yIiwidXBkYXRlZEluVmVyIjoiNDEuMjMuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Unraid Plugin Builder
Tool for building and testing Unraid plugins locally as well as packaging them for deployment.
Development Workflow
1. Watch for Changes
The watch command will automatically sync changes from the API, UI components, and web app into the plugin source:
# Start watching all components
pnpm run watch:all
# Or run individual watchers:
pnpm run api:watch # Watch API changes
pnpm run ui:watch # Watch Unraid UI component changes
pnpm run wc:watch # Watch web component changes
This will copy:
- API files to
./source/dynamix.unraid.net/usr/local/unraid-api - UI components to
./source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/unraid-components - Web components to the same UI directory
2. Build the Plugin
Once your changes are ready, build the plugin package:
# Build using Docker - on non-Linux systems
pnpm run docker:build-and-run
# Or build with the build script
pnpm run build:validate
This will create the plugin files in ./deploy/release/
3. Serve and Install
Start a local HTTP server to serve the plugin files:
# Serve the plugin files
pnpm run http-server
Then install the plugin on your Unraid development machine by visiting:
http://SERVER_NAME.local/Plugins
Then paste the following URL into the Unraid Plugins page:
http://YOUR_LOCAL_DEV_MACHINE_IP:5858/plugins/local/dynamix.unraid.net.plg
Replace SERVER_NAME with your development machine's hostname.
Development Tips
- Run watchers in a separate terminal while developing
- The http-server includes CORS headers for local development
- Check the Unraid system log for plugin installation issues
Environment Setup
-
Initialize environment:
pnpm run env:init -
Validate environment:
pnpm run env:validate
Available Commands
Build Commands
build- Build the plugin packagebuild:validate- Build with environment validationdocker:build- Build the Docker containerdocker:run- Run the builder in Dockerdocker:build-and-run- Build and run in Docker
Watch Commands
watch:all- Watch all component changesapi:watch- Watch API changesui:watch- Watch UI component changeswc:watch- Watch web component changes
Server Commands
http-server- Serve the plugin files locally
Environment Commands
env:init- Create initial .env fileenv:validate- Validate environment setupenv:clean- Remove .env file
Troubleshooting
-
Watch not updating files
- Check that source directories exist
- Verify file permissions
-
Build failures
- Ensure .env file exists
- Check Docker setup if using containerized build
- Verify source files are present
-
Installation issues
- Confirm http-server is running
- Check your local IP is correct
- Verify plugin file permissions