Files
api/plugin
renovate[bot] 1a8da6d92b fix(deps): update all non-major dependencies (#1510)
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)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@eslint%2fjs/9.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@eslint%2fjs/9.30.1/9.31.0?slim=true)](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)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@rollup%2frollup-linux-x64-gnu/4.45.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@rollup%2frollup-linux-x64-gnu/4.44.2/4.45.1?slim=true)](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)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-docs/9.0.17?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-docs/9.0.16/9.0.17?slim=true)](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)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2faddon-links/9.0.17?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2faddon-links/9.0.16/9.0.17?slim=true)](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)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2fbuilder-vite/9.0.17?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2fbuilder-vite/9.0.16/9.0.17?slim=true)](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)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@storybook%2fvue3-vite/9.0.17?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@storybook%2fvue3-vite/9.0.16/9.0.17?slim=true)](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)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.12.14?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.12.11/1.12.14?slim=true)](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)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/22.16.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/22.16.3/22.16.4?slim=true)](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)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2feslint-plugin/8.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2feslint-plugin/8.36.0/8.37.0?slim=true)](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) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/cron/4.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cron/4.3.1/4.3.2?slim=true)](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) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/9.31.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/9.30.1/9.31.0?slim=true)](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)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-plugin-storybook/9.0.17?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-plugin-storybook/9.0.16/9.0.17?slim=true)](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) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/graphql-ws/6.0.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/graphql-ws/6.0.5/6.0.6?slim=true)](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) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/nuxt/3.17.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/nuxt/3.17.6/3.17.7?slim=true)](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) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/storybook/9.0.17?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/storybook/9.0.16/9.0.17?slim=true)](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)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/typescript-eslint/8.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript-eslint/8.36.0/8.37.0?slim=true)](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) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/zx/8.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/zx/8.3.2/8.7.1?slim=true)](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) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/zx/8.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/zx/8.6.2/8.7.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>eslint/eslint (@&#8203;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 (@&#8203;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
([#&#8203;6009](https://redirect.github.com/rollup/rollup/issues/6009))

##### Pull Requests

- [#&#8203;6009](https://redirect.github.com/rollup/rollup/pull/6009):
Add hasDeoptimizedCache flag for ConditionalExpression
([@&#8203;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
([#&#8203;6000](https://redirect.github.com/rollup/rollup/issues/6000))
- In environments that support both CJS and ESM, prefer the ESM build of
Rollup
([#&#8203;6005](https://redirect.github.com/rollup/rollup/issues/6005))

##### Bug Fixes

- Ensure static blocks do not prevent tree-shaking if they access `this`
([#&#8203;6001](https://redirect.github.com/rollup/rollup/issues/6001))

##### Pull Requests

- [#&#8203;6000](https://redirect.github.com/rollup/rollup/pull/6000):
feat: improve get literal value for conditional expression
([@&#8203;ahabhgk](https://redirect.github.com/ahabhgk),
[@&#8203;lukastaegert](https://redirect.github.com/lukastaegert))
- [#&#8203;6001](https://redirect.github.com/rollup/rollup/pull/6001):
Correct the parent scope for static blocks
([@&#8203;TrickyPi](https://redirect.github.com/TrickyPi),
[@&#8203;lukastaegert](https://redirect.github.com/lukastaegert))
- [#&#8203;6005](https://redirect.github.com/rollup/rollup/pull/6005):
fix: export field order prefer esm
([@&#8203;DylanPiercey](https://redirect.github.com/DylanPiercey))

</details>

<details>
<summary>storybookjs/storybook (@&#8203;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 (@&#8203;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
(@&#8203;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 -
[#&#8203;32041](https://redirect.github.com/storybookjs/storybook/pull/32041),
thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
- Onboarding: Intent survey -
[#&#8203;31944](https://redirect.github.com/storybookjs/storybook/pull/31944),
thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!
- UI: Fix text color for failing stories in sidebar -
[#&#8203;32042](https://redirect.github.com/storybookjs/storybook/pull/32042),
thanks [@&#8203;ghengeveld](https://redirect.github.com/ghengeveld)!

</details>

<details>
<summary>swc-project/swc (@&#8203;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`
([#&#8203;10825](https://redirect.github.com/swc-project/swc/issues/10825))
([8b43bb3](8b43bb35bc))

- **(es/parser)** Make `export` in NS to not affect file type
([#&#8203;10799](https://redirect.github.com/swc-project/swc/issues/10799))
([ae22033](ae22033dc4))

- **(es/parser)** Correctly check ambient context
([#&#8203;10802](https://redirect.github.com/swc-project/swc/issues/10802))
([f97ea03](f97ea03523))

##### Features

- **(es/parser)** Enable support for dynamic import with `defer` phase
([#&#8203;10845](https://redirect.github.com/swc-project/swc/issues/10845))
([097d29d](097d29d21c))

- **(plugin)** Remove `bytecheck` to make Wasm plugins backward
compatible
([#&#8203;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
([#&#8203;10819](https://redirect.github.com/swc-project/swc/issues/10819))
([bacfa4b](bacfa4b56d))

- **(ide)** Enable `--workspace` for rust-analyzer check
([#&#8203;10809](https://redirect.github.com/swc-project/swc/issues/10809))
([92647ff](92647ff9d9))

##### Performance

- **(es/minifier)** Use `u8` for `remaining_depth`
([#&#8203;10833](https://redirect.github.com/swc-project/swc/issues/10833))
([ed6956a](ed6956a46e))

- **(hstr)** Inline one more byte
([#&#8203;10817](https://redirect.github.com/swc-project/swc/issues/10817))
([3886c97](3886c9720d))

- **(hstr)** Remove static tag
([#&#8203;10832](https://redirect.github.com/swc-project/swc/issues/10832))
([66ae1e8](66ae1e8d5a))

##### Refactor

- **(es/helpers)** Make inline helpers optional at compile time
([#&#8203;10808](https://redirect.github.com/swc-project/swc/issues/10808))
([53f3881](53f38811cc))

- **(es/lexer)** Don't store buffer in lexer
([#&#8203;10830](https://redirect.github.com/swc-project/swc/issues/10830))
([cac40f1](cac40f135d))

- **(es/lints)** Remove warnings without features
([#&#8203;10794](https://redirect.github.com/swc-project/swc/issues/10794))
([41d507f](41d507fe1e))

- **(es/parser)** Reduce token query
([#&#8203;10834](https://redirect.github.com/swc-project/swc/issues/10834))
([5cd5185](5cd5185a7a))

- **(es/parser)** Reduce call to `parse_decorators`
([#&#8203;10846](https://redirect.github.com/swc-project/swc/issues/10846))
([356d3a0](356d3a0850))

- **(es/parser)** Remove duplicate check
([#&#8203;10847](https://redirect.github.com/swc-project/swc/issues/10847))
([2b04efd](2b04efd540))

- **(es/preset-env)** Use strpool,phf for corejs2 data
([#&#8203;10803](https://redirect.github.com/swc-project/swc/issues/10803))
([1652fd8](1652fd8038))

- **(es/react)** Remove redundant `replace` calls
([#&#8203;10795](https://redirect.github.com/swc-project/swc/issues/10795))
([a670b37](a670b37c33))

- **(es/react)** Remove `count_children`
([#&#8203;10818](https://redirect.github.com/swc-project/swc/issues/10818))
([2116ab2](2116ab2fa2))

- **(hstr)** Cleanup duplicate header
([#&#8203;10812](https://redirect.github.com/swc-project/swc/issues/10812))
([630dde9](630dde93c9))

- **(hstr)** Make the deallocation of `Atom`s explicit
([#&#8203;10813](https://redirect.github.com/swc-project/swc/issues/10813))
([406433d](406433d55d))

- **(hstr)** Remove `is_global`
([#&#8203;10820](https://redirect.github.com/swc-project/swc/issues/10820))
([afda0f9](afda0f9d0d))

##### Testing

- **(es/plugin)** Test memory layout of archived types
([#&#8203;10841](https://redirect.github.com/swc-project/swc/issues/10841))
([502e991](502e991a8b))

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;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
([#&#8203;11381](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11381))

##### ❤️ Thank You

- Yukihiro Hasegawa [@&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;989](https://redirect.github.com/kelektiv/node-cron/issues/989))
([bc1bf72](bc1bf72ff7))
- **deps:** lock file maintenance
([#&#8203;999](https://redirect.github.com/kelektiv/node-cron/issues/999))
([e78d986](e78d9869d6))
- **deps:** update dependency
[@&#8203;swc](https://redirect.github.com/swc)/core to v1.12.1
([#&#8203;992](https://redirect.github.com/kelektiv/node-cron/issues/992))
([b5d3bd3](b5d3bd3328))
- **deps:** update dependency
[@&#8203;swc](https://redirect.github.com/swc)/core to v1.12.5
([d374494](d374494609))
- **deps:** update dependency
[@&#8203;swc](https://redirect.github.com/swc)/core to v1.12.9
([8060c41](8060c41685))
- **deps:** update dependency
[@&#8203;types](https://redirect.github.com/types)/node to v22.15.32
([#&#8203;993](https://redirect.github.com/kelektiv/node-cron/issues/993))
([ce9743b](ce9743ba05))
- **deps:** update dependency
[@&#8203;types](https://redirect.github.com/types)/node to v22.16.0
([7bae5b1](7bae5b1ef8))
- **deps:** update linters
([24eb53f](24eb53ff67))
- **deps:** update linters
([#&#8203;995](https://redirect.github.com/kelektiv/node-cron/issues/995))
([9395484](9395484758))
- **deps:** update node.js to v23.11.1
([#&#8203;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
([#&#8203;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

-
[#&#8203;648](https://redirect.github.com/enisdenjo/graphql-ws/pull/648)
[`1f53bb4`](1f53bb48b1)
Thanks [@&#8203;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`
([#&#8203;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
([#&#8203;32527](https://redirect.github.com/nuxt/nuxt/pull/32527))
- **nuxt:** Wrap only server components with island generic
([#&#8203;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
([#&#8203;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
([#&#8203;32574](https://redirect.github.com/nuxt/nuxt/pull/32574))
- **nuxt:** Scroll to anchor if present when changing page without saved
position
([#&#8203;32376](https://redirect.github.com/nuxt/nuxt/pull/32376))
- **nuxt:** Handle `execute being passed to `watch\`
([#&#8203;32591](https://redirect.github.com/nuxt/nuxt/pull/32591))

##### 📖 Documentation

- Update fetch types
([#&#8203;32522](https://redirect.github.com/nuxt/nuxt/pull/32522))
- Clarify that runtime env variables must start with `NUXT_`
([#&#8203;32223](https://redirect.github.com/nuxt/nuxt/pull/32223))
- Fix key change behavior in `useAsyncData` and `useFetch` migration
([#&#8203;32560](https://redirect.github.com/nuxt/nuxt/pull/32560))
- Change return type of async data from `undefined` to `null` in v3 docs
([#&#8203;32562](https://redirect.github.com/nuxt/nuxt/pull/32562))
- Add section on custom hooks for Nuxt modules
([#&#8203;32586](https://redirect.github.com/nuxt/nuxt/pull/32586))
- Provide `async` keyword
([#&#8203;32587](https://redirect.github.com/nuxt/nuxt/pull/32587))
- Move augmenting hook types in hooks page
([#&#8203;32595](https://redirect.github.com/nuxt/nuxt/pull/32595))
- Add section about module loading order
([#&#8203;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
([#&#8203;32558](https://redirect.github.com/nuxt/nuxt/pull/32558))
- Add more useAsyncData + useFetch tests
([#&#8203;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
([@&#8203;danielroe](https://redirect.github.com/danielroe))
- Julien Huang
([@&#8203;huang-julien](https://redirect.github.com/huang-julien))
- abeer0 ([@&#8203;iiio2](https://redirect.github.com/iiio2))
- Bobbie Goede
([@&#8203;BobbieGoede](https://redirect.github.com/BobbieGoede))
- Damian Głowala
([@&#8203;DamianGlowala](https://redirect.github.com/DamianGlowala))
- Nestor Vera ([@&#8203;hacknug](https://redirect.github.com/hacknug))
- Ezra Ashenafi ([@&#8203;Eazash](https://redirect.github.com/Eazash))
- Mike Laumann Bellika
([@&#8203;MikeBellika](https://redirect.github.com/MikeBellika))
- Maxime Pauvert
([@&#8203;maximepvrt](https://redirect.github.com/maximepvrt))
- Chriest Yu ([@&#8203;jcppman](https://redirect.github.com/jcppman))
- Andrei Hudalla
([@&#8203;paranoidPhantom](https://redirect.github.com/paranoidPhantom))
- Sigrid Huemer ([@&#8203;s1gr1d](https://redirect.github.com/s1gr1d))
- xjccc ([@&#8203;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
([#&#8203;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
[#&#8203;1266](https://redirect.github.com/google/zx/issues/1266)
[#&#8203;1267](https://redirect.github.com/google/zx/pull/1267)
[#&#8203;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
[#&#8203;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.

[#&#8203;1256](https://redirect.github.com/google/zx/pull/1256)
[#&#8203;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
[#&#8203;1261](https://redirect.github.com/google/zx/pull/1261)
[#&#8203;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
[#&#8203;1252](https://redirect.github.com/google/zx/pull/1252)

```bash
SHELL=/bin/zsh zx script.js
```

- Accept numeric strings as `parseDuration()` arg
[#&#8203;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`
[#&#8203;1239](https://redirect.github.com/google/zx/pull/1239)
- Docs improvements
[#&#8203;1242](https://redirect.github.com/google/zx/pull/1242)
[#&#8203;1243](https://redirect.github.com/google/zx/pull/1243)
[#&#8203;1246](https://redirect.github.com/google/zx/pull/1246)
[#&#8203;1248](https://redirect.github.com/google/zx/pull/1248)
[#&#8203;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
[#&#8203;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
[#&#8203;1225](https://redirect.github.com/google/zx/pull/1225)
[#&#8203;1226](https://redirect.github.com/google/zx/pull/1226)
[#&#8203;1228](https://redirect.github.com/google/zx/pull/1228)
[#&#8203;1229](https://redirect.github.com/google/zx/pull/1229)
[#&#8203;1230](https://redirect.github.com/google/zx/pull/1230)
[#&#8203;1231](https://redirect.github.com/google/zx/pull/1231)
[#&#8203;1232](https://redirect.github.com/google/zx/pull/1232)
[#&#8203;1233](https://redirect.github.com/google/zx/pull/1233)
[#&#8203;1234](https://redirect.github.com/google/zx/pull/1234)
[#&#8203;1235](https://redirect.github.com/google/zx/pull/1235)
[#&#8203;1236](https://redirect.github.com/google/zx/pull/1236)
[#&#8203;1238](https://redirect.github.com/google/zx/pull/1238)
[#&#8203;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
[#&#8203;1220](https://redirect.github.com/google/zx/issues/1220)
[#&#8203;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]`
[#&#8203;1216](https://redirect.github.com/google/zx/pull/1216)
[#&#8203;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)
[#&#8203;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
[#&#8203;1208](https://redirect.github.com/google/zx/issues/1208)
[#&#8203;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
[#&#8203;1193](https://redirect.github.com/google/zx/pull/1193)
[#&#8203;1192](https://redirect.github.com/google/zx/pull/1192)
- Goods refactoring
[#&#8203;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
[#&#8203;1194](https://redirect.github.com/google/zx/pull/1194)
- Docs improvements, usage examples updates
[#&#8203;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
[#&#8203;1189](https://redirect.github.com/google/zx/pull/1189)
[#&#8203;1186](https://redirect.github.com/google/zx/pull/1186)
[#&#8203;1179](https://redirect.github.com/google/zx/pull/1179)
[#&#8203;1187](https://redirect.github.com/google/zx/pull/1187)
- Docs improvements
[#&#8203;1185](https://redirect.github.com/google/zx/pull/1185)
[#&#8203;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.
[#&#8203;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/@&#8203;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 @&#8203;google/zx

### fetch from the JSR
### https://jsr.io/docs/using-packages

### @&#8203;webpod is temporary JSR scope until @&#8203;google/zx becomes ready, we'll migrate later
npx jsr add @&#8203;webpod/zx
deno add jsr:@&#8203;webpod/zx

### homebrew formula
### https://github.com/Homebrew/homebrew-core/blob/master/Formula/z/zx.rb
brew install zx
```

[#&#8203;1141](https://redirect.github.com/google/zx/pull/1141)...
[#&#8203;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.
[#&#8203;1142](https://redirect.github.com/google/zx/pull/1142)
[#&#8203;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
[#&#8203;1130](https://redirect.github.com/google/zx/pull/1130)
[#&#8203;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
[#&#8203;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
[#&#8203;1137](https://redirect.github.com/google/zx/pull/1137)
[#&#8203;1138](https://redirect.github.com/google/zx/pull/1138)

```shell
ZX_REGISTRY='https://custom-registry.example.com' zx script.js
```

- Enhanced errors stacktrace formatting
[#&#8203;1166](https://redirect.github.com/google/zx/pull/1166)
- Improved 3rd party licenses digest
[#&#8203;1140](https://redirect.github.com/google/zx/pull/1140)
- Enabled zizmor checks
[#&#8203;1126](https://redirect.github.com/google/zx/pull/1126)
- Docs improvements
[#&#8203;1128](https://redirect.github.com/google/zx/pull/1128)
[#&#8203;1134](https://redirect.github.com/google/zx/pull/1134)
[#&#8203;1136](https://redirect.github.com/google/zx/pull/1136)
[#&#8203;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.
[#&#8203;1119](https://redirect.github.com/google/zx/issues/1119)
[#&#8203;1122](https://redirect.github.com/google/zx/pull/1122)
[#&#8203;1123](https://redirect.github.com/google/zx/pull/1123)
[#&#8203;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
[#&#8203;1122](https://redirect.github.com/google/zx/pull/1122)
- Switched to TS 5.8
[#&#8203;1120](https://redirect.github.com/google/zx/pull/1120)
- Applied [zizmor](https://woodruffw.github.io/zizmor/) to check GHA
workflows
[#&#8203;1126](https://redirect.github.com/google/zx/pull/1126)
- Prettier is now enabled as a pre-commit hook
[#&#8203;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
[#&#8203;1116](https://redirect.github.com/google/zx/pull/1116)
[#&#8203;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.
[#&#8203;999](https://redirect.github.com/google/zx/issues/999)
[#&#8203;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
[#&#8203;1104](https://redirect.github.com/google/zx/pull/1104)
[#&#8203;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
[#&#8203;1108](https://redirect.github.com/google/zx/pull/1108)
[#&#8203;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
[#&#8203;1102](https://redirect.github.com/google/zx/pull/1102)
- Made `ProcessOutput` iterable
[#&#8203;1101](https://redirect.github.com/google/zx/pull/1101)
- Handle inappropriate `ProcessPromise` instantiation
[#&#8203;1097](https://redirect.github.com/google/zx/pull/1097)
[#&#8203;1098](https://redirect.github.com/google/zx/pull/1098)
- Pass origin error as `ProcessOuput` cause
[#&#8203;1110](https://redirect.github.com/google/zx/pull/1110)
- Separated build and release steps
[#&#8203;1106](https://redirect.github.com/google/zx/pull/1106)
- Internal improvements
- Introduced API bus
[#&#8203;1083](https://redirect.github.com/google/zx/pull/1083)
- Optimized `ProcessOutput` inners
[#&#8203;1096](https://redirect.github.com/google/zx/pull/1096)
[#&#8203;1095](https://redirect.github.com/google/zx/pull/1095)
- Pinned deps
[#&#8203;1099](https://redirect.github.com/google/zx/pull/1099)
[#&#8203;1100](https://redirect.github.com/google/zx/pull/1100)
- Switched to explicit `.ts` extensions for relative imports
[#&#8203;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>
2025-07-15 14:55:56 -04:00
..
2025-03-04 15:18:04 -05:00
2025-07-08 11:34:49 -04:00
2025-03-04 15:18:04 -05:00
2025-03-04 15:18:04 -05:00

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

  1. Initialize environment:

    pnpm run env:init
    
  2. Validate environment:

    pnpm run env:validate
    

Available Commands

Build Commands

  • build - Build the plugin package
  • build:validate - Build with environment validation
  • docker:build - Build the Docker container
  • docker:run - Run the builder in Docker
  • docker:build-and-run - Build and run in Docker

Watch Commands

  • watch:all - Watch all component changes
  • api:watch - Watch API changes
  • ui:watch - Watch UI component changes
  • wc:watch - Watch web component changes

Server Commands

  • http-server - Serve the plugin files locally

Environment Commands

  • env:init - Create initial .env file
  • env:validate - Validate environment setup
  • env:clean - Remove .env file

Troubleshooting

  1. Watch not updating files

    • Check that source directories exist
    • Verify file permissions
  2. Build failures

    • Ensure .env file exists
    • Check Docker setup if using containerized build
    • Verify source files are present
  3. Installation issues

    • Confirm http-server is running
    • Check your local IP is correct
    • Verify plugin file permissions