Compare commits

...
247 Commits
Author SHA1 Message Date
Martin a3dbb37dd2 start publishing "core" npm package (#215) 2026-05-08 12:00:49 +02:00
martin-mfg 9c4e631bc7 Merge remote-tracking branch 'origin/master' into release 2026-05-08 11:57:09 +02:00
Martin 9dc4910d4b finish setup for npm publishing (#212) 2026-05-08 11:51:02 +02:00
Martin 5d1978011e add npm publishing (#211) 2026-05-07 19:08:16 +02:00
Martin 6ebd9a082f release v2.0.0 (#209) 2026-05-06 18:49:05 +02:00
Martin d84cc27b9c fix browser_rendering layout (#208) 2026-05-06 15:25:33 +02:00
Takuma IMAMURAandmartin-mfg e43e55c2b7 feat: replace render-time text wrapping with browser-native wrapping (#191)
This PR uses `foreignObject` with CSS line-clamp to let the browser
handle text wrapping natively instead of manually wrapping on the
server. This provides better font-aware wrapping while keeping
server-side line estimation for SVG height calculation.

Fixes https://github.com/anuraghazra/github-readme-stats/issues/4862.

### Example card

<img width="400" height="150" alt="hyperfinitism-sample-repo"
src="https://github.com/user-attachments/assets/c3a58531-c689-4798-af02-f55ef3a90fa1"
/>

---------

Signed-off-by: Takuma IMAMURA <209989118+hyperfinitism@users.noreply.github.com>
Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>
2026-05-06 11:00:11 +02:00
Martin f884df6312 add top-langs customization to fork.md (#205) 2026-05-03 19:27:15 +02:00
Martin 9236acd99d release 1.2.0 (#204) 2026-05-03 18:28:19 +02:00
martin-mfg 12b4e979a8 Merge branch 'master' into release-1.2.0 2026-05-03 14:26:37 +02:00
github-actions[bot]andmartin-mfg f67dd0f381 Update languages JSON (#203)
The
[update-langs](https://github.com/stats-organization/github-stats-extended/actions/workflows/update-langs.yml)
action found new/updated languages in the [upstream languages JSON
file](https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml).

Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>
2026-05-03 14:04:12 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1da425c0bb build(deps-dev): Bump knip from 6.6.2 to 6.7.0 (#202)
Bumps [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip)
from 6.6.2 to 6.7.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/webpro-nl/knip/releases">knip's
releases</a>.</em></p>
<blockquote>
<h2>Release 6.7.0</h2>
<ul>
<li>Fix markdown reporter column width (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1700">#1700</a>)
(4713108de98bcfe76eb606036b9f968abe3e89a0)</li>
<li>Handle Vitest agent and minimal reporters (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1701">#1701</a>)
(a71ead11b99aaa67f31eed7b35628907b2dddd06) - thanks <a
href="https://github.com/dskwrite"><code>@​dskwrite</code></a>!</li>
<li>Add e2e tests w/ tsgo defs + lib consumption
(98113e61d913e47631748b58c25d1042c8dd387e)</li>
<li>Fix pkg name inconsistencies
(544c3e68d72dd754b20f8e0b0bf8ed107c05d677)</li>
<li>Add <code>export {}</code> to maintain module shape
(27d8a0230c10f2827ba1e1a8b2c65020554f61f8)</li>
<li>Strip leading UTF-8 BOM before parsing package.json
(47e4029c39ff95043cd495681e4c7558970b0ed9)</li>
<li>Skip workspace with invalid JSON manifest
(bfb48670966387a3cd26005b9fb9d8769b2a1213)</li>
<li>Preserve out-of-bound writes to stdout/err
(95faad8d6219ba456a3700df697273eb154c1dd9)</li>
<li>Consistent prefix in logError/logWarning
(2c6d8a049d1c20d9427425b4abae3b76ac7a5720)</li>
<li>Don't exit on config file load error
(0914bd3832b1851e4d34137577c0d08efaf8aef6)</li>
<li>Fix tsgo resolution in e2e tests
(a68950131e33214ef2a4f13d11fab1a78c16bad6)</li>
</ul>
<h2>Release 6.6.3</h2>
<ul>
<li>Use venz chart svg directly from CDN
(ba7e9073d1770e4a21ec18435bcb61f394db0d1c)</li>
<li>Bump that plugin counter
(abae75bbd3030e006fe67d3f63641a31a65e671c)</li>
<li>Fix plugin title (f2b8fcfc94bb78fb70dfe2be3f48ef8f254066f7)</li>
<li>Work Table util class: fix bugs, tighten API, water-fill widths
(2eb4045e0f34c2638875504b9b64e881e9a74db5)</li>
<li>Questionable.. (970a0dbdfc7b59df2fd0a3064a4bd6be4e5a59bc)</li>
<li>Fmt (14538ec1fe94cdf3c45798515160609f3ffbec9d)</li>
<li>Ensure output is flushed on exit (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1699">#1699</a>)
(9533365115d4704e9b057b7ba8d5f43fd553d1a1) - thanks <a
href="https://github.com/joshkel"><code>@​joshkel</code></a>!</li>
<li>Use currentColor to support light/dark themes
(7ea055aa68b86ccc6cb302a3092c2da9e56cdde6)</li>
<li>Tighten type-chain alignment + gate via ignoreExportsUsedInFile
(resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1698">#1698</a>)
(0910b33fc6c07867a751af2e26989a61c8a6c548)</li>
<li>Eating our own dog food ↻
(d5aa1f6b007a2dfef1a8326000dc1802510d64ab)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/webpro-nl/knip/commit/ca5545e2a3f262cbb3e9db4705abb4f4264b102f"><code>ca5545e</code></a>
Release knip@6.7.0</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/a68950131e33214ef2a4f13d11fab1a78c16bad6"><code>a689501</code></a>
Fix tsgo resolution in e2e tests</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/0914bd3832b1851e4d34137577c0d08efaf8aef6"><code>0914bd3</code></a>
Don't exit on config file load error</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/2c6d8a049d1c20d9427425b4abae3b76ac7a5720"><code>2c6d8a0</code></a>
Consistent prefix in logError/logWarning</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/95faad8d6219ba456a3700df697273eb154c1dd9"><code>95faad8</code></a>
Preserve out-of-bound writes to stdout/err</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/bfb48670966387a3cd26005b9fb9d8769b2a1213"><code>bfb4867</code></a>
Skip workspace with invalid JSON manifest</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/47e4029c39ff95043cd495681e4c7558970b0ed9"><code>47e4029</code></a>
Strip leading UTF-8 BOM before parsing package.json</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/27d8a0230c10f2827ba1e1a8b2c65020554f61f8"><code>27d8a02</code></a>
Add <code>export {}</code> to maintain module shape</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/544c3e68d72dd754b20f8e0b0bf8ed107c05d677"><code>544c3e6</code></a>
Fix pkg name inconsistencies</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/98113e61d913e47631748b58c25d1042c8dd387e"><code>98113e6</code></a>
Add e2e tests w/ tsgo defs + lib consumption</li>
<li>Additional commits viewable in <a
href="https://github.com/webpro-nl/knip/commits/knip@6.7.0/packages/knip">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=knip&package-manager=npm_and_yarn&previous-version=6.6.2&new-version=6.7.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-03 13:57:31 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 46df37adb7 build(deps): Bump axios from 1.15.1 to 1.15.2 in the axios group across 1 directory (#195)
Bumps the axios group with 1 update in the / directory:
[axios](https://github.com/axios/axios).

Updates `axios` from 1.15.1 to 1.15.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/releases">axios's
releases</a>.</em></p>
<blockquote>
<h2>v1.15.2</h2>
<p>This release delivers prototype-pollution hardening for the Node HTTP
adapter, adds an opt-in <code>allowedSocketPaths</code> allowlist to
mitigate SSRF via Unix domain sockets, fixes a keep-alive socket memory
leak, and ships supply-chain hardening across CI and security docs.</p>
<h2>🔒 Security Fixes</h2>
<ul>
<li><strong>Prototype Pollution Hardening (HTTP Adapter):</strong>
Hardened the Node HTTP adapter and
<code>resolveConfig</code>/<code>mergeConfig</code>/validator paths to
read only own properties and use null-prototype config objects,
preventing polluted <code>auth</code>, <code>baseURL</code>,
<code>socketPath</code>, <code>beforeRedirect</code>, and
<code>insecureHTTPParser</code> from influencing requests. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10779">#10779</a></strong>)</li>
<li><strong>SSRF via <code>socketPath</code>:</strong> Rejects
non-string <code>socketPath</code> values and adds an opt-in
<code>allowedSocketPaths</code> config option to restrict permitted Unix
domain socket paths, returning <code>AxiosError</code>
<code>ERR_BAD_OPTION_VALUE</code> on mismatch. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10777">#10777</a></strong>)</li>
<li><strong>Supply-chain Hardening:</strong> Added <code>.npmrc</code>
with <code>ignore-scripts=true</code>, lockfile lint CI, non-blocking
reproducible build diff, scoped CODEOWNERS, expanded
<code>SECURITY.md</code>/<code>THREATMODEL.md</code> with provenance
verification (<code>npm audit signatures</code>), 60-day resolution
policy, and maintainer incident-response runbook. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10776">#10776</a></strong>)</li>
</ul>
<h2>🚀 New Features</h2>
<ul>
<li><strong><code>allowedSocketPaths</code> Config Option:</strong> New
request config option (and TypeScript types) to allowlist Unix domain
socket paths used by the Node http adapter; backwards compatible when
unset. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10777">#10777</a></strong>)</li>
</ul>
<h2>🐛 Bug Fixes</h2>
<ul>
<li><strong>Keep-alive Socket Memory Leak:</strong> Installs a single
per-socket <code>error</code> listener tracking the active request via
<code>kAxiosSocketListener</code>/<code>kAxiosCurrentReq</code>,
eliminating per-request listener accumulation,
<code>MaxListenersExceededWarning</code>, and linear heap growth under
concurrent or long-running keep-alive workloads (fixes <a
href="https://redirect.github.com/axios/axios/issues/10780">#10780</a>).
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10788">#10788</a></strong>)</li>
</ul>
<h2>🔧 Maintenance &amp; Chores</h2>
<ul>
<li><strong>Changelog:</strong> Updated <code>CHANGELOG.md</code> with
v1.15.1 release notes. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10781">#10781</a></strong>)</li>
</ul>
<p><a
href="https://github.com/axios/axios/compare/v1.15.1...v1.15.2">Full
Changelog</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/blob/v1.x/CHANGELOG.md">axios's
changelog</a>.</em></p>
<blockquote>
<h2>v1.15.2 - April 21, 2026</h2>
<p>This release delivers prototype-pollution hardening for the Node HTTP
adapter, adds an opt-in <code>allowedSocketPaths</code> allowlist to
mitigate SSRF via Unix domain sockets, fixes a keep-alive socket memory
leak, and ships supply-chain hardening across CI and security docs.</p>
<h2>🔒 Security Fixes</h2>
<ul>
<li><strong>Prototype Pollution Hardening (HTTP Adapter):</strong>
Hardened the Node HTTP adapter and
<code>resolveConfig</code>/<code>mergeConfig</code>/validator paths to
read only own properties and use null-prototype config objects,
preventing polluted <code>auth</code>, <code>baseURL</code>,
<code>socketPath</code>, <code>beforeRedirect</code>, and
<code>insecureHTTPParser</code> from influencing requests. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10779">#10779</a></strong>)</li>
<li><strong>SSRF via <code>socketPath</code>:</strong> Rejects
non-string <code>socketPath</code> values and adds an opt-in
<code>allowedSocketPaths</code> config option to restrict permitted Unix
domain socket paths, returning <code>AxiosError</code>
<code>ERR_BAD_OPTION_VALUE</code> on mismatch. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10777">#10777</a></strong>)</li>
<li><strong>Supply-chain Hardening:</strong> Added <code>.npmrc</code>
with <code>ignore-scripts=true</code>, lockfile lint CI, non-blocking
reproducible build diff, scoped CODEOWNERS, expanded
<code>SECURITY.md</code>/<code>THREATMODEL.md</code> with provenance
verification (<code>npm audit signatures</code>), 60-day resolution
policy, and maintainer incident-response runbook. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10776">#10776</a></strong>)</li>
</ul>
<h2>🚀 New Features</h2>
<ul>
<li><strong><code>allowedSocketPaths</code> Config Option:</strong> New
request config option (and TypeScript types) to allowlist Unix domain
socket paths used by the Node http adapter; backwards compatible when
unset. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10777">#10777</a></strong>)</li>
</ul>
<h2>🐛 Bug Fixes</h2>
<ul>
<li><strong>Keep-alive Socket Memory Leak:</strong> Installs a single
per-socket <code>error</code> listener tracking the active request via
<code>kAxiosSocketListener</code>/<code>kAxiosCurrentReq</code>,
eliminating per-request listener accumulation,
<code>MaxListenersExceededWarning</code>, and linear heap growth under
concurrent or long-running keep-alive workloads (fixes <a
href="https://redirect.github.com/axios/axios/issues/10780">#10780</a>).
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10788">#10788</a></strong>)</li>
</ul>
<h2>🔧 Maintenance &amp; Chores</h2>
<ul>
<li><strong>Changelog:</strong> Updated <code>CHANGELOG.md</code> with
v1.15.1 release notes. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10781">#10781</a></strong>)</li>
</ul>
<p><a
href="https://github.com/axios/axios/compare/v1.15.1...v1.15.2">Full
Changelog</a></p>
<hr />
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/axios/axios/commit/582934382e4e0e0bcb679c628071a4203e93cf57"><code>5829343</code></a>
chore(release): prepare release 1.15.2 (<a
href="https://redirect.github.com/axios/axios/issues/10789">#10789</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/4709a48fa2717ba97f43f5432d48ca4e26c2d326"><code>4709a48</code></a>
fix: added fix for memory leak in sockets (<a
href="https://redirect.github.com/axios/axios/issues/10788">#10788</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/be3336014e01f9a4fc1f8aef15303cf7daaf58db"><code>be33360</code></a>
chore: update changelog (<a
href="https://redirect.github.com/axios/axios/issues/10781">#10781</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/47915144662f2733e6c051bdcb895a8c8f0586aa"><code>4791514</code></a>
fix: more header pollutions (<a
href="https://redirect.github.com/axios/axios/issues/10779">#10779</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/6feafcff6c2dbafe206161c5d09e38e1d36af66f"><code>6feafcf</code></a>
fix: socket issue (<a
href="https://redirect.github.com/axios/axios/issues/10777">#10777</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/302e2739c602f00e323d4f3f5c79500647633a73"><code>302e273</code></a>
docs: update docs, add a couple actions etc (<a
href="https://redirect.github.com/axios/axios/issues/10776">#10776</a>)</li>
<li>See full diff in <a
href="https://github.com/axios/axios/compare/v1.15.1...v1.15.2">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-03 13:56:59 +02:00
Martin f766c3b789 various dependency upgrades (#201) 2026-05-03 12:06:50 +02:00
Martin 8305746754 add license info for icons (#200)
solves https://github.com/anuraghazra/github-readme-stats/issues/4839
2026-05-03 11:20:05 +02:00
Martin b863992994 upgrade transitive dependencies and pnpm (#190) 2026-04-27 10:43:51 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> fe5ef06049 build(deps-dev): Bump knip from 6.4.1 to 6.5.0 (#188)
Bumps [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip)
from 6.4.1 to 6.5.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/webpro-nl/knip/releases">knip's
releases</a>.</em></p>
<blockquote>
<h2>Release 6.5.0</h2>
<ul>
<li>Drop project-extension-redundant config hint (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1683">#1683</a>)
(f86092949d6dbd041fd621876da674fd3eac7534)</li>
<li>Add instructions to .agents/PLUGINS.md
(e2943ed8fb6d2c0ab4cf12ff04d10bd5ab9fd5f7)</li>
<li>Add a plugin for react-email (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1684">#1684</a>)
(d8ae4d3ccb810b9a9211fd43e9d1e7d7b704fcaf) - thanks <a
href="https://github.com/xaqrox"><code>@​xaqrox</code></a>!</li>
<li>Replace <code>fast-glob</code> with <code>tinyglobby</code> (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1462">#1462</a>)
(9f6b4c8aa6857fea40e66d008c905c948af10939) - thanks <a
href="https://github.com/gameroman"><code>@​gameroman</code></a>!</li>
<li>Added plugin for Serverless framework (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1478">#1478</a>)
(f885f1ded52427d984c67e7172e3141eb4e5ee29) - thanks <a
href="https://github.com/BenCrinion-IW"><code>@​BenCrinion-IW</code></a>!</li>
<li>Add args to Prettier plugin to resolve --config CLI flag (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1685">#1685</a>)
(f4658c84e714afd8a2233b72be6169da1ac3723e) - thanks <a
href="https://github.com/xaqrox"><code>@​xaqrox</code></a>!</li>
<li>fix(util): tolerate JSONC and array extends in findRootDirsBase (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1681">#1681</a>)
(f7e5464a6f70e9024a341fdb923766b5ff53a831) - thanks <a
href="https://github.com/Hoffs"><code>@​Hoffs</code></a>!</li>
<li>Format (15bd7e7a56b470096cfee1690263d5d13ddb8fb6)</li>
<li>Inherit outDir/rootDir from tsconfig project references (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1680">#1680</a>)
(b89b4f716f4c117b0106e9a212e9e5c46aa85035)</li>
<li>tsc → tsgo (a6e09ca1b65936b3790a6c3628a4646f030d18b8)</li>
<li>Update dependencies (4cb05c96a2ae7c790d29ee76ff13288c5bbb97a2)</li>
<li>Housekeep (28c56cb8bf68031b1c8e9bee75b18ee7274ec981)</li>
<li>Test test test (7eb4ab3a8a6635dcaf756bb2b4a88e1298615994)</li>
<li>Add pino plugin with <code>transportCall</code> visitor (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1480">#1480</a>)
(53a033e4ddc5036c6a4a0e55c0abc42c5c64e4f5)</li>
<li>Add signal to projects using knip
(dbedd665c1f8d735030600d3f68ef1825d9a2668)</li>
<li>Tune logos (3148f4d0485875370634b9b53c1b3aa7f6eafcc3)</li>
<li>Tweak <code>knip-run</code> tool response
(42940381a947c46996ae4055e8789f6ea39cfca4)</li>
<li>Add <code>workspace</code> option to <code>knip-run</code> tool
(64c4aaea89e3abb41d8695ebffc5538878520b21)</li>
<li>Remove old lingering <code>experimentalTags</code>
(e503d108e5535800ac6467f4d92c7dd6a9e90037)</li>
<li>Fix compiler type (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1689">#1689</a>)
(e7a69adb5e584eb6e5af9b4007820afcbcf27a08)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/webpro-nl/knip/commit/5b5cda5b22e7989c9aa78746257ca8b1f4504f94"><code>5b5cda5</code></a>
Release knip@6.5.0</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/e7a69adb5e584eb6e5af9b4007820afcbcf27a08"><code>e7a69ad</code></a>
Fix compiler type (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1689">#1689</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/e503d108e5535800ac6467f4d92c7dd6a9e90037"><code>e503d10</code></a>
Remove old lingering <code>experimentalTags</code></li>
<li><a
href="https://github.com/webpro-nl/knip/commit/53a033e4ddc5036c6a4a0e55c0abc42c5c64e4f5"><code>53a033e</code></a>
Add pino plugin with <code>transportCall</code> visitor (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1480">#1480</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/7eb4ab3a8a6635dcaf756bb2b4a88e1298615994"><code>7eb4ab3</code></a>
Test test test</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/28c56cb8bf68031b1c8e9bee75b18ee7274ec981"><code>28c56cb</code></a>
Housekeep</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/4cb05c96a2ae7c790d29ee76ff13288c5bbb97a2"><code>4cb05c9</code></a>
Update dependencies</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/a6e09ca1b65936b3790a6c3628a4646f030d18b8"><code>a6e09ca</code></a>
tsc → tsgo</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/b89b4f716f4c117b0106e9a212e9e5c46aa85035"><code>b89b4f7</code></a>
Inherit outDir/rootDir from tsconfig project references (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1680">#1680</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/15bd7e7a56b470096cfee1690263d5d13ddb8fb6"><code>15bd7e7</code></a>
Format</li>
<li>Additional commits viewable in <a
href="https://github.com/webpro-nl/knip/commits/knip@6.5.0/packages/knip">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 10:18:22 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 134b738151 build(deps-dev): Bump the eslint group across 1 directory with 2 updates (#183)
Bumps the eslint group with 2 updates in the / directory:
[eslint](https://github.com/eslint/eslint) and
[eslint-plugin-react-hooks](https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks).

Updates `eslint` from 10.2.0 to 10.2.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases">eslint's
releases</a>.</em></p>
<blockquote>
<h2>v10.2.1</h2>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/14be92b6d1fa0923b8923830f2208e5e2705b002"><code>14be92b</code></a>
fix: model generator yield resumption paths in code path analysis (<a
href="https://redirect.github.com/eslint/eslint/issues/20665">#20665</a>)
(sethamus)</li>
<li><a
href="https://github.com/eslint/eslint/commit/84a19d2c32255db6b9cfc08644a607aae6d5cb62"><code>84a19d2</code></a>
fix: no-async-promise-executor false positives for shadowed Promise (<a
href="https://redirect.github.com/eslint/eslint/issues/20740">#20740</a>)
(xbinaryx)</li>
<li><a
href="https://github.com/eslint/eslint/commit/af764af0ec38225755fbf8a6f207f0c77b595a8d"><code>af764af</code></a>
fix: clarify language and processor validation errors (<a
href="https://redirect.github.com/eslint/eslint/issues/20729">#20729</a>)
(Pixel998)</li>
<li><a
href="https://github.com/eslint/eslint/commit/e251b89a38280973e468a4a9386c138f4f55d10d"><code>e251b89</code></a>
fix: update eslint (<a
href="https://redirect.github.com/eslint/eslint/issues/20715">#20715</a>)
(renovate[bot])</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/ca92ca0fb4599e8de1e2fb914e695fe7397cbe63"><code>ca92ca0</code></a>
docs: reuse markdown-it instance for markdown filter (<a
href="https://redirect.github.com/eslint/eslint/issues/20768">#20768</a>)
(Amaresh S M)</li>
<li><a
href="https://github.com/eslint/eslint/commit/57d2ee213305cee0cb55ef08e0480b57396269a9"><code>57d2ee2</code></a>
docs: Enable Eleventy incremental mode for watch (<a
href="https://redirect.github.com/eslint/eslint/issues/20767">#20767</a>)
(Amaresh S M)</li>
<li><a
href="https://github.com/eslint/eslint/commit/c1621b915742276e5f4b25efe790ca62296330dc"><code>c1621b9</code></a>
docs: fix typos in code-path-analyzer.js (<a
href="https://redirect.github.com/eslint/eslint/issues/20700">#20700</a>)
(Ayush Shukla)</li>
<li><a
href="https://github.com/eslint/eslint/commit/1418d522d10bde1960f4942afb548bc7160ec49e"><code>1418d52</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/39771e6e600f0b0617fdeafff6dd07e4211ffde6"><code>39771e6</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/71e04693def2df57268f08f3072a2749df6bf438"><code>71e0469</code></a>
docs: fix incomplete JSDoc param description in no-shadow rule (<a
href="https://redirect.github.com/eslint/eslint/issues/20728">#20728</a>)
(kuldeep kumar)</li>
<li><a
href="https://github.com/eslint/eslint/commit/22119ceb93e28f62262fc1d98ff1b1442d6e2dbf"><code>22119ce</code></a>
docs: clarify scope of for-direction rule with dead code examples (<a
href="https://redirect.github.com/eslint/eslint/issues/20723">#20723</a>)
(Amaresh S M)</li>
<li><a
href="https://github.com/eslint/eslint/commit/8f3fb77f122a5641d1833cad5d93f3f54fa3be0b"><code>8f3fb77</code></a>
docs: document <code>meta.docs.dialects</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/20718">#20718</a>)
(Pixel998)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/7ddfea9c4f62add1588c5c0b0da568c299246383"><code>7ddfea9</code></a>
chore: update dependency prettier to v3.8.2 (<a
href="https://redirect.github.com/eslint/eslint/issues/20770">#20770</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/fac40e1de2ba7646cc7cd2d3f93fbdd1f8819001"><code>fac40e1</code></a>
ci: bump pnpm/action-setup from 5.0.0 to 6.0.0 (<a
href="https://redirect.github.com/eslint/eslint/issues/20763">#20763</a>)
(dependabot[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/7246f923332522d8b3d46b6ee646fce88535f3fb"><code>7246f92</code></a>
test: add tests for SuppressionsService.load() error handling (<a
href="https://redirect.github.com/eslint/eslint/issues/20734">#20734</a>)
(kuldeep kumar)</li>
<li><a
href="https://github.com/eslint/eslint/commit/4f34b1e592b0f63d766d9903998e8e36eb49d3aa"><code>4f34b1e</code></a>
chore: update pnpm/action-setup action to v5 (<a
href="https://redirect.github.com/eslint/eslint/issues/20762">#20762</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/51080eb5c98d619434e4835dbe9f1c6654aca3b8"><code>51080eb</code></a>
test: processor service (<a
href="https://redirect.github.com/eslint/eslint/issues/20731">#20731</a>)
(kuldeep kumar)</li>
<li><a
href="https://github.com/eslint/eslint/commit/e7e1889fca9b6044e08f41b38df20a1ce45808c8"><code>e7e1889</code></a>
chore: remove stale babel-eslint10 fixture and test (<a
href="https://redirect.github.com/eslint/eslint/issues/20727">#20727</a>)
(kuldeep kumar)</li>
<li><a
href="https://github.com/eslint/eslint/commit/4e1a87cb8fb90e309524bc36bc5f31b9f9cfaa76"><code>4e1a87c</code></a>
test: remove redundant async/await in flat config array tests (<a
href="https://redirect.github.com/eslint/eslint/issues/20722">#20722</a>)
(Pixel998)</li>
<li><a
href="https://github.com/eslint/eslint/commit/066eabb3643b12931f991594969bcc0028f71a5f"><code>066eabb</code></a>
test: add rule metadata coverage for <code>languages</code> and
<code>docs.dialects</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/20717">#20717</a>)
(Pixel998)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/4d1d8f9737236603f64bbe83d5bb8001627b5611"><code>4d1d8f9</code></a>
10.2.1</li>
<li><a
href="https://github.com/eslint/eslint/commit/3e33105b05d09b5a4eb894ed75a9811fb40d65e6"><code>3e33105</code></a>
Build: changelog update for 10.2.1</li>
<li><a
href="https://github.com/eslint/eslint/commit/ca92ca0fb4599e8de1e2fb914e695fe7397cbe63"><code>ca92ca0</code></a>
docs: reuse markdown-it instance for markdown filter (<a
href="https://redirect.github.com/eslint/eslint/issues/20768">#20768</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/7ddfea9c4f62add1588c5c0b0da568c299246383"><code>7ddfea9</code></a>
chore: update dependency prettier to v3.8.2 (<a
href="https://redirect.github.com/eslint/eslint/issues/20770">#20770</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/57d2ee213305cee0cb55ef08e0480b57396269a9"><code>57d2ee2</code></a>
docs: Enable Eleventy incremental mode for watch (<a
href="https://redirect.github.com/eslint/eslint/issues/20767">#20767</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/c1621b915742276e5f4b25efe790ca62296330dc"><code>c1621b9</code></a>
docs: fix typos in code-path-analyzer.js (<a
href="https://redirect.github.com/eslint/eslint/issues/20700">#20700</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/fac40e1de2ba7646cc7cd2d3f93fbdd1f8819001"><code>fac40e1</code></a>
ci: bump pnpm/action-setup from 5.0.0 to 6.0.0 (<a
href="https://redirect.github.com/eslint/eslint/issues/20763">#20763</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/7246f923332522d8b3d46b6ee646fce88535f3fb"><code>7246f92</code></a>
test: add tests for SuppressionsService.load() error handling (<a
href="https://redirect.github.com/eslint/eslint/issues/20734">#20734</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/4f34b1e592b0f63d766d9903998e8e36eb49d3aa"><code>4f34b1e</code></a>
chore: update pnpm/action-setup action to v5 (<a
href="https://redirect.github.com/eslint/eslint/issues/20762">#20762</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/1418d522d10bde1960f4942afb548bc7160ec49e"><code>1418d52</code></a>
docs: Update README</li>
<li>Additional commits viewable in <a
href="https://github.com/eslint/eslint/compare/v10.2.0...v10.2.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `eslint-plugin-react-hooks` from 7.1.0 to 7.1.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/facebook/react/releases">eslint-plugin-react-hooks's
releases</a>.</em></p>
<blockquote>
<h2>eslint-plugin-react-hooks@7.1.1 (April 17, 2026)</h2>
<p><strong>Note:</strong> 7.1.0 accidentally removed the
<code>component-hook-factories</code> rule, causing errors for users who
referenced it in their ESLint config. This is now fixed.</p>
<ul>
<li>Add deprecated no-op <code>component-hook-factories</code> rule for
backwards compatibility. (<a
href="https://github.com/mofeiZ"><code>@​mofeiZ</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/36307">#36307</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/CHANGELOG.md">eslint-plugin-react-hooks's
changelog</a>.</em></p>
<blockquote>
<h2>7.1.1</h2>
<p><strong>Note:</strong> 7.1.0 accidentally removed the
<code>component-hook-factories</code> rule, causing errors for users who
referenced it in their ESLint config. This is now fixed.</p>
<ul>
<li>Add deprecated no-op <code>component-hook-factories</code> rule for
backwards compatibility. (<a
href="https://github.com/mofeiZ"><code>@​mofeiZ</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/36307">#36307</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/facebook/react/commit/d1727fbf987392749b374f3afe62227d2c70fc41"><code>d1727fb</code></a>
[eprh] Update changelog for 7.1.1 (<a
href="https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks/issues/36308">#36308</a>)</li>
<li><a
href="https://github.com/facebook/react/commit/bc249804d3c2ea6ee95bc5543c3735a65d1239b5"><code>bc24980</code></a>
[eprh] Add back a no-op for removed component-hook-factories rule (<a
href="https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks/issues/36307">#36307</a>)</li>
<li>See full diff in <a
href="https://github.com/facebook/react/commits/eslint-plugin-react-hooks@7.1.1/packages/eslint-plugin-react-hooks">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 10:15:11 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 3263dd9c78 build(deps): Bump react-toastify from 11.0.5 to 11.1.0 in the react group across 1 directory (#182)
Bumps the react group with 1 update in the / directory:
[react-toastify](https://github.com/fkhadra/react-toastify).

Updates `react-toastify` from 11.0.5 to 11.1.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/fkhadra/react-toastify/releases">react-toastify's
releases</a>.</em></p>
<blockquote>
<h2>v11.1.0</h2>
<h1>Release Notes</h1>
<h2>Features</h2>
<ul>
<li><strong>CSP nonce support.</strong> <code>&lt;ToastContainer
nonce={...}&gt;</code> applies the nonce to the
injected <code>&lt;style&gt;</code> tag. Closes <a
href="https://redirect.github.com/fkhadra/react-toastify/issues/1209">#1209</a>.</li>
</ul>
<h2>Fixes</h2>
<ul>
<li><code>onChange</code> fires <code>status: 'removed'</code>
synchronously on <code>toast.dismiss()</code> instead
of after the exit animation — observers (incl.
<code>useNotificationCenter</code>) now
see correctly ordered events. Also guards against
double-<code>onClose</code>. Closes <a
href="https://redirect.github.com/fkhadra/react-toastify/issues/1275">#1275</a>.</li>
<li>Touch drag no longer re-pauses the toast on release — the old check
compared a
PointerEvent against <code>'touchend'</code>, which never matched.
Closes <a
href="https://redirect.github.com/fkhadra/react-toastify/issues/1217">#1217</a>.</li>
<li>Vertical drag now visually moves the toast (<code>--y</code> gets a
unit). Thanks
<a href="https://github.com/janpaepke"><code>@​janpaepke</code></a>, <a
href="https://redirect.github.com/fkhadra/react-toastify/issues/1277">#1277</a>.</li>
<li>Stacked scale is clamped at 0.5, preventing zero/negative scale in
deep
stacks. Closes <a
href="https://redirect.github.com/fkhadra/react-toastify/issues/1171">#1171</a>,
<a
href="https://redirect.github.com/fkhadra/react-toastify/issues/1174">#1174</a>.</li>
<li>Stacked container respects mobile <code>100vw</code> again. Closes
<a
href="https://redirect.github.com/fkhadra/react-toastify/issues/1234">#1234</a>.</li>
</ul>
<h2>Accessibility</h2>
<ul>
<li><code>role=&quot;progressbar&quot;</code> now includes
<code>aria-valuenow</code>, <code>aria-valuemin</code>,
<code>aria-valuemax</code>.
Thanks <a
href="https://github.com/singhankit001"><code>@​singhankit001</code></a>,
<a
href="https://redirect.github.com/fkhadra/react-toastify/issues/1283">#1283</a>.
Closes <a
href="https://redirect.github.com/fkhadra/react-toastify/issues/1259">#1259</a>.</li>
</ul>
<h2>Internal</h2>
<ul>
<li>Migrated to a pnpm workspace (<code>pnpm link .</code> no longer
required for contributors).
Publish layout unchanged — addon still ships inside the main
package.</li>
<li>CSS now injected at mount via <code>useStyleSheet</code>
(prerequisite for <code>nonce</code>).</li>
<li>Dep bumps: TypeScript 6, Vite 8, Cypress 15, React 19.2, plus the
rest.</li>
<li>CI: <code>upload-artifact</code> v3 → v4.</li>
</ul>
<p>Thanks to <a
href="https://github.com/janpaepke"><code>@​janpaepke</code></a>, <a
href="https://github.com/singhankit001"><code>@​singhankit001</code></a>,
and reporters of the fixed issues.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/fkhadra/react-toastify/commit/769ce82f1c72cde5ee681068194adfa88a0c81c9"><code>769ce82</code></a>
11.1.0</li>
<li><a
href="https://github.com/fkhadra/react-toastify/commit/de219584ade15c4973c4eedf6ef68af88f64952f"><code>de21958</code></a>
remove year from license</li>
<li><a
href="https://github.com/fkhadra/react-toastify/commit/c800992ed72a47351f4d3d54a5be7fbca68765d2"><code>c800992</code></a>
fix: add unit to --y CSS variable to fix vertical drag</li>
<li><a
href="https://github.com/fkhadra/react-toastify/commit/e4ab71249e1afa5f975f9be12f8542c88f02efe9"><code>e4ab712</code></a>
fix chicken and egg issue</li>
<li><a
href="https://github.com/fkhadra/react-toastify/commit/b3bbab5468777ea945d70a82b068cb6d105d4fe7"><code>b3bbab5</code></a>
bump artifact action</li>
<li><a
href="https://github.com/fkhadra/react-toastify/commit/6d58ce465e9083a7f695a4df669d5cbc548a97af"><code>6d58ce4</code></a>
fix: stacked toast invert size, when used as stacked</li>
<li><a
href="https://github.com/fkhadra/react-toastify/commit/50e8e420e1e87fd75cfb7058728bccde46cfa790"><code>50e8e42</code></a>
fix: stacked container on mobile not 100vw</li>
<li><a
href="https://github.com/fkhadra/react-toastify/commit/1b2ee1762524893a5f3d66f5a0ed3c75d013a731"><code>1b2ee17</code></a>
fix: dispatch 'removed' onChange event synchronously on dismiss</li>
<li><a
href="https://github.com/fkhadra/react-toastify/commit/a2d376b408c23c42ead74460ecd941a2ca0c9e9f"><code>a2d376b</code></a>
feat: add ARIA accessibility attributes to ProgressBar</li>
<li><a
href="https://github.com/fkhadra/react-toastify/commit/8375aced2da12884f1c9b01bd79e20906ea5bd08"><code>8375ace</code></a>
fix: touch bug in onDragTransitionEnd, closes <a
href="https://redirect.github.com/fkhadra/react-toastify/issues/1217">#1217</a></li>
<li>Additional commits viewable in <a
href="https://github.com/fkhadra/react-toastify/compare/v11.0.5...v11.1.0">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 10:14:20 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> b4ae648153 build(deps): Bump axios from 1.15.0 to 1.15.1 in the axios group across 1 directory (#184)
Bumps the axios group with 1 update in the / directory:
[axios](https://github.com/axios/axios).

Updates `axios` from 1.15.0 to 1.15.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/releases">axios's
releases</a>.</em></p>
<blockquote>
<h2>v1.15.1</h2>
<p>This release ships a coordinated set of security hardening fixes
across headers, body/redirect limits, multipart handling, and
XSRF/prototype-pollution vectors, alongside a broad sweep of bug fixes,
test migrations, and threat-model documentation updates.</p>
<h2>🔒 Security Fixes</h2>
<ul>
<li><strong>Header Injection Hardening:</strong> Tightened validation
and sanitisation across request header construction to close the
header-injection attack surface. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10749">#10749</a></strong>)</li>
<li><strong>CRLF Stripping in Multipart Headers:</strong> Correctly
strips CR/LF from multipart header values to prevent injection via field
names and filenames. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10758">#10758</a></strong>)</li>
<li><strong>Prototype Pollution / Auth Bypass:</strong> Replaced unsafe
<code>in</code> checks with <code>hasOwnProperty</code> to prevent
authentication bypass via prototype pollution on config objects, with
additional regression tests. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10761">#10761</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10760">#10760</a></strong>)</li>
<li><strong><code>withXSRFToken</code> Truthy Bypass:</strong>
Short-circuits on any truthy non-boolean value, so an ambiguous config
no longer silently leaks the XSRF token cross-origin. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10762">#10762</a></strong>)</li>
<li><strong><code>maxBodyLength</code> With Zero Redirects:</strong>
Enforces <code>maxBodyLength</code> even when <code>maxRedirects</code>
is set to <code>0</code>, closing a bypass path for oversized request
bodies. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10753">#10753</a></strong>)</li>
<li><strong>Streamed Response <code>maxContentLength</code>
Bypass:</strong> Applies <code>maxContentLength</code> to streamed
responses that previously bypassed the cap. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10754">#10754</a></strong>)</li>
<li><strong>Follow-up CVE Completion:</strong> Completes an earlier
incomplete CVE fix to fully close the regression window. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10755">#10755</a></strong>)</li>
</ul>
<h2>🚀 New Features</h2>
<ul>
<li><strong>AI-Based Docs Translations:</strong> Initial scaffold for
AI-assisted translations of the documentation site. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10705">#10705</a></strong>)</li>
<li><strong><code>Location</code> Request Header Type:</strong> Adds
<code>Location</code> to <code>CommonRequestHeadersList</code> for
accurate typing of redirect-aware requests. (<strong><a
href="https://redirect.github.com/axios/axios/issues/7528">#7528</a></strong>)</li>
</ul>
<h2>🐛 Bug Fixes</h2>
<ul>
<li><strong>FormData Handling:</strong> Removes
<code>Content-Type</code> when no boundary is present on
<code>FormData</code> fetch requests, supports multi-select fields,
cancels <code>request.body</code> instead of the source stream on fetch
abort, and fixes a recursion bug in form-data serialisation. (<strong><a
href="https://redirect.github.com/axios/axios/issues/7314">#7314</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10676">#10676</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10702">#10702</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10726">#10726</a></strong>)</li>
<li><strong>HTTP Adapter:</strong> Handles socket-only request errors
without leaking keep-alive listeners. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10576">#10576</a></strong>)</li>
<li><strong>Progress Events:</strong> Clamps <code>loaded</code> to
<code>total</code> for computable upload/download progress events.
(<strong><a
href="https://redirect.github.com/axios/axios/issues/7458">#7458</a></strong>)</li>
<li><strong>Types:</strong> Aligns <code>runWhen</code> type with the
runtime behaviour in <code>InterceptorManager</code> and makes response
header keys case-insensitive. (<strong><a
href="https://redirect.github.com/axios/axios/issues/7529">#7529</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10677">#10677</a></strong>)</li>
<li><strong><code>buildFullPath</code>:</strong> Uses strict equality in
the base/relative URL check. (<strong><a
href="https://redirect.github.com/axios/axios/issues/7252">#7252</a></strong>)</li>
<li><strong><code>AxiosURLSearchParams</code> Regex:</strong> Improves
the regex used for param serialisation to avoid edge-case mismatches.
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10736">#10736</a></strong>)</li>
<li><strong>Resilient Value Parsing:</strong> Parses out header/config
values instead of throwing on malformed input. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10687">#10687</a></strong>)</li>
<li><strong>Docs Artefact Cleanup:</strong> Removes the docs content
that was incorrectly committed. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10727">#10727</a></strong>)</li>
</ul>
<h2>🔧 Maintenance &amp; Chores</h2>
<ul>
<li><strong>Threat Model &amp; Security Docs:</strong> Ongoing
refinement of <code>THREATMODEL.md</code>, including Hopper security
update, TLS and tag-replay wording, mitigation descriptions,
decompression-bomb guidance, and further cleanup. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10672">#10672</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10715">#10715</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10718">#10718</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10722">#10722</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10763">#10763</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10765">#10765</a></strong>)</li>
<li><strong>Test Coverage &amp; Migration:</strong> Expanded
<code>shouldBypassProxy</code> coverage for wildcard/IPv6/edge cases,
documented and tested <code>AxiosError.status</code>, and migrated
<code>progressEventReducer</code> tests to Vitest. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10723">#10723</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10725">#10725</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10741">#10741</a></strong>)</li>
<li><strong>Type Refactor:</strong> Uses TypeScript utility types to
deduplicate literal unions. (<strong><a
href="https://redirect.github.com/axios/axios/issues/7520">#7520</a></strong>)</li>
<li><strong>Repo &amp; CI:</strong> Adds <code>CODEOWNERS</code>,
switches v1.x releases to an ephemeral release branch, and removes
orphaned Bower support. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10739">#10739</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10738">#10738</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10746">#10746</a></strong>)</li>
<li><strong>Changelog Backfill:</strong> Added missing version entries
to the changelog. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10704">#10704</a></strong>)</li>
<li><strong>Dependencies:</strong> Bumped <code>follow-redirects</code>
(<code>1.15.11</code> → <code>1.16.0</code>) in root and docs,
<code>axios</code> (<code>1.14.0</code> → <code>1.15.0</code>) in docs,
and a group of 5 development dependencies. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10717">#10717</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10716">#10716</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10684">#10684</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10709">#10709</a></strong>)</li>
</ul>
<h2>🌟 New Contributors</h2>
<p>We are thrilled to welcome our new contributors. Thank you for
helping improve axios:</p>
<ul>
<li><strong><a
href="https://github.com/curiouscoder-cmd"><code>@​curiouscoder-cmd</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/7252">#7252</a></strong>)</li>
<li><strong><a
href="https://github.com/tryonelove"><code>@​tryonelove</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/7520">#7520</a></strong>)</li>
<li><strong><a
href="https://github.com/darwin808"><code>@​darwin808</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/7314">#7314</a></strong>)</li>
<li><strong><a
href="https://github.com/zoontek"><code>@​zoontek</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10702">#10702</a></strong>)</li>
<li><strong><a
href="https://github.com/AKIB473"><code>@​AKIB473</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10725">#10725</a></strong>)</li>
</ul>
<p><a
href="https://github.com/axios/axios/compare/v1.15.0...v1.15.1">Full
Changelog</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/blob/v1.x/CHANGELOG.md">axios's
changelog</a>.</em></p>
<blockquote>
<h2>v1.15.1 - April 19, 2026</h2>
<p>This release ships a coordinated set of security hardening fixes
across headers, body/redirect limits, multipart handling, and
XSRF/prototype-pollution vectors, alongside a broad sweep of bug fixes,
test migrations, and threat-model documentation updates.</p>
<h2>🔒 Security Fixes</h2>
<ul>
<li>
<p><strong>Header Injection Hardening:</strong> Tightened validation and
sanitisation across request header construction to close the
header-injection attack surface. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10749">#10749</a></strong>)</p>
</li>
<li>
<p><strong>CRLF Stripping in Multipart Headers:</strong> Correctly
strips CR/LF from multipart header values to prevent injection via field
names and filenames. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10758">#10758</a></strong>)</p>
</li>
<li>
<p><strong>Prototype Pollution / Auth Bypass:</strong> Replaced unsafe
<code>in</code> checks with <code>hasOwnProperty</code> to prevent
authentication bypass via prototype pollution on config objects, with
additional regression tests. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10761">#10761</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10760">#10760</a></strong>)</p>
</li>
<li>
<p><strong><code>withXSRFToken</code> Truthy Bypass:</strong>
Short-circuits on any truthy non-boolean value, so an ambiguous config
no longer silently leaks the XSRF token cross-origin. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10762">#10762</a></strong>)</p>
</li>
<li>
<p><strong><code>maxBodyLength</code> With Zero Redirects:</strong>
Enforces <code>maxBodyLength</code> even when <code>maxRedirects</code>
is set to <code>0</code>, closing a bypass path for oversized request
bodies. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10753">#10753</a></strong>)</p>
</li>
<li>
<p><strong>Streamed Response <code>maxContentLength</code>
Bypass:</strong> Applies <code>maxContentLength</code> to streamed
responses that previously bypassed the cap. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10754">#10754</a></strong>)</p>
</li>
<li>
<p><strong>Follow-up CVE Completion:</strong> Completes an earlier
incomplete CVE fix to fully close the regression window. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10755">#10755</a></strong>)</p>
</li>
</ul>
<h2>🚀 New Features</h2>
<ul>
<li>
<p><strong>AI-Based Docs Translations:</strong> Initial scaffold for
AI-assisted translations of the documentation site. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10705">#10705</a></strong>)</p>
</li>
<li>
<p><strong><code>Location</code> Request Header Type:</strong> Adds
<code>Location</code> to <code>CommonRequestHeadersList</code> for
accurate typing of redirect-aware requests. (<strong><a
href="https://redirect.github.com/axios/axios/issues/7528">#7528</a></strong>)</p>
</li>
</ul>
<h2>🐛 Bug Fixes</h2>
<ul>
<li>
<p><strong>FormData Handling:</strong> Removes <code>Content-Type</code>
when no boundary is present on <code>FormData</code> fetch requests,
supports multi-select fields, cancels <code>request.body</code> instead
of the source stream on fetch abort, and fixes a recursion bug in
form-data serialisation. (<strong><a
href="https://redirect.github.com/axios/axios/issues/7314">#7314</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10676">#10676</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10702">#10702</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10726">#10726</a></strong>)</p>
</li>
<li>
<p><strong>HTTP Adapter:</strong> Handles socket-only request errors
without leaking keep-alive listeners. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10576">#10576</a></strong>)</p>
</li>
<li>
<p><strong>Progress Events:</strong> Clamps <code>loaded</code> to
<code>total</code> for computable upload/download progress events.
(<strong><a
href="https://redirect.github.com/axios/axios/issues/7458">#7458</a></strong>)</p>
</li>
<li>
<p><strong>Types:</strong> Aligns <code>runWhen</code> type with the
runtime behaviour in <code>InterceptorManager</code> and makes response
header keys case-insensitive. (<strong><a
href="https://redirect.github.com/axios/axios/issues/7529">#7529</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10677">#10677</a></strong>)</p>
</li>
<li>
<p><strong><code>buildFullPath</code>:</strong> Uses strict equality in
the base/relative URL check. (<strong><a
href="https://redirect.github.com/axios/axios/issues/7252">#7252</a></strong>)</p>
</li>
<li>
<p><strong><code>AxiosURLSearchParams</code> Regex:</strong> Improves
the regex used for param serialisation to avoid edge-case mismatches.
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10736">#10736</a></strong>)</p>
</li>
<li>
<p><strong>Resilient Value Parsing:</strong> Parses out header/config
values instead of throwing on malformed input. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10687">#10687</a></strong>)</p>
</li>
<li>
<p><strong>Docs Artefact Cleanup:</strong> Removes the docs content that
was incorrectly committed. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10727">#10727</a></strong>)</p>
</li>
</ul>
<h2>🔧 Maintenance &amp; Chores</h2>
<ul>
<li>
<p><strong>Threat Model &amp; Security Docs:</strong> Ongoing refinement
of <code>THREATMODEL.md</code>, including Hopper security update, TLS
and tag-replay wording, mitigation descriptions, decompression-bomb
guidance, and further cleanup. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10672">#10672</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10715">#10715</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10718">#10718</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10722">#10722</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10763">#10763</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10765">#10765</a></strong>)</p>
</li>
<li>
<p><strong>Test Coverage &amp; Migration:</strong> Expanded
<code>shouldBypassProxy</code> coverage for wildcard/IPv6/edge cases,
documented and tested <code>AxiosError.status</code>, and migrated
<code>progressEventReducer</code> tests to Vitest. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10723">#10723</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10725">#10725</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10741">#10741</a></strong>)</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/axios/axios/commit/ac42446be51300fe214ba3c6e40cc95f34fd6871"><code>ac42446</code></a>
chore(release): prepare release 1.15.1 (<a
href="https://redirect.github.com/axios/axios/issues/10767">#10767</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/908f2206b6bfeff67236784abce85935698ac1d9"><code>908f220</code></a>
docs: update threatmodel (<a
href="https://redirect.github.com/axios/axios/issues/10765">#10765</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/f93f8155250c2e066205521eda05ae22983a1f6d"><code>f93f815</code></a>
docs: added docs around potential decompressions bomb (<a
href="https://redirect.github.com/axios/axios/issues/10763">#10763</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/1728aa1b15b8857f970611fd8983c06b423fc486"><code>1728aa1</code></a>
fix: short-circuits on any truthy non-boolean in withXSRFToken (<a
href="https://redirect.github.com/axios/axios/issues/10762">#10762</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/42eb721eebc95cfded8d6c70cf62f3fbe83f3246"><code>42eb721</code></a>
fix: replace in with has own prop util (<a
href="https://redirect.github.com/axios/axios/issues/10761">#10761</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/75873270a59bd5d895322eee145738e95fb89258"><code>7587327</code></a>
fix: strip crlf correctly (<a
href="https://redirect.github.com/axios/axios/issues/10758">#10758</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/f0b98673b32677643a3b608431270d36e997473c"><code>f0b9867</code></a>
chore: added additional testing for this issue (<a
href="https://redirect.github.com/axios/axios/issues/10760">#10760</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/e033f243a08e3514c03e510f76658da1e0fac3bd"><code>e033f24</code></a>
fix: incomplete fix for cve (<a
href="https://redirect.github.com/axios/axios/issues/10755">#10755</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/e8904af03385b040e53f1263a444e825db4335d9"><code>e8904af</code></a>
fix: stream response bypassed max content length (<a
href="https://redirect.github.com/axios/axios/issues/10754">#10754</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/1c7f6d76e58359daddf38a6e636dd801ffd9c61b"><code>1c7f6d7</code></a>
fix: enforce max body length when max redirects is 0 (<a
href="https://redirect.github.com/axios/axios/issues/10753">#10753</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/axios/axios/compare/v1.15.0...v1.15.1">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 10:13:33 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> c401be4d6c build(deps): Bump vite from 8.0.8 to 8.0.9 in the vite group (#187)
Bumps the vite group with 1 update:
[vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).

Updates `vite` from 8.0.8 to 8.0.9
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/releases">vite's
releases</a>.</em></p>
<blockquote>
<h2>v8.0.9</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.9/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md">vite's
changelog</a>.</em></p>
<blockquote>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v8.0.8...v8.0.9">8.0.9</a>
(2026-04-20)<!-- raw HTML omitted --></h2>
<h3>Features</h3>
<ul>
<li>update rolldown to 1.0.0-rc.16 (<a
href="https://redirect.github.com/vitejs/vite/issues/22248">#22248</a>)
(<a
href="https://github.com/vitejs/vite/commit/2947edd57ceb64a0b4dc43269743e8e44e68c09b">2947edd</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>allow binding when strictPort is set but wildcard port is in use (<a
href="https://redirect.github.com/vitejs/vite/issues/22150">#22150</a>)
(<a
href="https://github.com/vitejs/vite/commit/dfc8aa5057dd8ec2b1223980d1e2eeb946ac3384">dfc8aa5</a>)</li>
<li><strong>build:</strong> emptyOutDir should happen for watch rebuilds
(<a
href="https://redirect.github.com/vitejs/vite/issues/22207">#22207</a>)
(<a
href="https://github.com/vitejs/vite/commit/ee522672bb374c7ff95a347f14732491121b1cd6">ee52267</a>)</li>
<li><strong>bundled-dev:</strong> reject requests to HMR patch files in
non potentially trustworthy origins (<a
href="https://redirect.github.com/vitejs/vite/issues/22269">#22269</a>)
(<a
href="https://github.com/vitejs/vite/commit/868f1411a6f474baa4417f2d6524692dd452f760">868f141</a>)</li>
<li><strong>css:</strong> use unique key for cssEntriesMap to prevent
same-basename collision (<a
href="https://redirect.github.com/vitejs/vite/issues/22039">#22039</a>)
(<a
href="https://github.com/vitejs/vite/commit/374bb5d597fcd0485e929565c698d8ed219136f8">374bb5d</a>)</li>
<li><strong>deps:</strong> update all non-major dependencies (<a
href="https://redirect.github.com/vitejs/vite/issues/22219">#22219</a>)
(<a
href="https://github.com/vitejs/vite/commit/4cd0d6760edd5fb0841abe86538de3c225e880a1">4cd0d67</a>)</li>
<li><strong>deps:</strong> update all non-major dependencies (<a
href="https://redirect.github.com/vitejs/vite/issues/22268">#22268</a>)
(<a
href="https://github.com/vitejs/vite/commit/c28e9c12a849f80e6fdc93f42283ad2863ab9dbc">c28e9c1</a>)</li>
<li>detect Deno workspace root (fix <a
href="https://redirect.github.com/vitejs/vite/issues/22237">#22237</a>)
(<a
href="https://redirect.github.com/vitejs/vite/issues/22238">#22238</a>)
(<a
href="https://github.com/vitejs/vite/commit/1b793c0e1726467fffd06ffad9bc81c61a840188">1b793c0</a>)</li>
<li><strong>dev:</strong> handle errors in <code>watchChange</code> hook
(<a
href="https://redirect.github.com/vitejs/vite/issues/22188">#22188</a>)
(<a
href="https://github.com/vitejs/vite/commit/fc08bdab9bba871b03689f2f6997c3a4ba4351da">fc08bda</a>)</li>
<li><strong>optimizer:</strong> handle more chars that will be sanitized
(<a
href="https://redirect.github.com/vitejs/vite/issues/22208">#22208</a>)
(<a
href="https://github.com/vitejs/vite/commit/3f24533ac4845ed22547279d1721bd82a35345e3">3f24533</a>)</li>
<li>skip fallback sourcemap generation for <code>?raw</code> imports (<a
href="https://redirect.github.com/vitejs/vite/issues/22148">#22148</a>)
(<a
href="https://github.com/vitejs/vite/commit/3ec9cdaac7936ca32d0956c4cb1eb6e172945996">3ec9cda</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>align the descriptions in READMEs (<a
href="https://redirect.github.com/vitejs/vite/issues/22231">#22231</a>)
(<a
href="https://github.com/vitejs/vite/commit/44c42b97639bb6ad777e66d752b2829cccb9a27a">44c42b9</a>)</li>
<li>fix reuses wording in dev environment comment (<a
href="https://redirect.github.com/vitejs/vite/issues/22173">#22173</a>)
(<a
href="https://github.com/vitejs/vite/commit/9163412fdfec7fb1656529713326a5b5c5e986ea">9163412</a>)</li>
<li>fix wording in sass error comment (<a
href="https://redirect.github.com/vitejs/vite/issues/22214">#22214</a>)
(<a
href="https://github.com/vitejs/vite/commit/bc5c6a7a498845dff20dc410c395355b79a4b753">bc5c6a7</a>)</li>
<li>update build CLI defaults (<a
href="https://redirect.github.com/vitejs/vite/issues/22261">#22261</a>)
(<a
href="https://github.com/vitejs/vite/commit/605bb97994678a1bb70a8de9a85c29d5f5d48c5a">605bb97</a>)</li>
</ul>
<h3>Miscellaneous Chores</h3>
<ul>
<li><strong>deps:</strong> update dependency dotenv-expand to v13 (<a
href="https://redirect.github.com/vitejs/vite/issues/22271">#22271</a>)
(<a
href="https://github.com/vitejs/vite/commit/0a3887da18812cacb254c616e4dd35631e776fda">0a3887d</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitejs/vite/commit/ce729f5fa1a5adca373b2adcb0e1b18099164a14"><code>ce729f5</code></a>
release: v8.0.9</li>
<li><a
href="https://github.com/vitejs/vite/commit/605bb97994678a1bb70a8de9a85c29d5f5d48c5a"><code>605bb97</code></a>
docs: update build CLI defaults (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22261">#22261</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/c28e9c12a849f80e6fdc93f42283ad2863ab9dbc"><code>c28e9c1</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22268">#22268</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/0a3887da18812cacb254c616e4dd35631e776fda"><code>0a3887d</code></a>
chore(deps): update dependency dotenv-expand to v13 (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22271">#22271</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/868f1411a6f474baa4417f2d6524692dd452f760"><code>868f141</code></a>
fix(bundled-dev): reject requests to HMR patch files in non potentially
trust...</li>
<li><a
href="https://github.com/vitejs/vite/commit/3ec9cdaac7936ca32d0956c4cb1eb6e172945996"><code>3ec9cda</code></a>
fix: skip fallback sourcemap generation for <code>?raw</code> imports
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22148">#22148</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/3f24533ac4845ed22547279d1721bd82a35345e3"><code>3f24533</code></a>
fix(optimizer): handle more chars that will be sanitized (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22208">#22208</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/1b793c0e1726467fffd06ffad9bc81c61a840188"><code>1b793c0</code></a>
fix: detect Deno workspace root (fix <a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22237">#22237</a>)
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22238">#22238</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/fc08bdab9bba871b03689f2f6997c3a4ba4351da"><code>fc08bda</code></a>
fix(dev): handle errors in <code>watchChange</code> hook (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22188">#22188</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/374bb5d597fcd0485e929565c698d8ed219136f8"><code>374bb5d</code></a>
fix(css): use unique key for cssEntriesMap to prevent same-basename
collision...</li>
<li>Additional commits viewable in <a
href="https://github.com/vitejs/vite/commits/v8.0.9/packages/vite">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=vite&package-manager=npm_and_yarn&previous-version=8.0.8&new-version=8.0.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 10:09:18 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> f0c250a954 build(deps): Bump uuid from 13.0.0 to 14.0.0 (#185)
Bumps [uuid](https://github.com/uuidjs/uuid) from 13.0.0 to 14.0.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/uuidjs/uuid/releases">uuid's
releases</a>.</em></p>
<blockquote>
<h2>v14.0.0</h2>
<h2><a
href="https://github.com/uuidjs/uuid/compare/v13.0.0...v14.0.0">14.0.0</a>
(2026-04-19)</h2>
<h3>⚠ BREAKING CHANGES</h3>
<ul>
<li>expect <code>crypto</code> to be global everywhere (requires
node@20+) (<a
href="https://redirect.github.com/uuidjs/uuid/issues/935">#935</a>)</li>
<li>drop node@18 support (<a
href="https://redirect.github.com/uuidjs/uuid/issues/934">#934</a>)</li>
</ul>
<h3>Features</h3>
<ul>
<li>drop node@18 support (<a
href="https://redirect.github.com/uuidjs/uuid/issues/934">#934</a>) (<a
href="https://github.com/uuidjs/uuid/commit/dc4ddb87272ed2843faccd130bcc41d492688bd3">dc4ddb8</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>expect <code>crypto</code> to be global everywhere (requires
node@20+) (<a
href="https://redirect.github.com/uuidjs/uuid/issues/935">#935</a>) (<a
href="https://github.com/uuidjs/uuid/commit/f2c235f93059325fa43e1106e624b5291bb523c4">f2c235f</a>)</li>
<li>Use GITHUB_TOKEN for release-please and enable npm provenance (<a
href="https://redirect.github.com/uuidjs/uuid/issues/925">#925</a>) (<a
href="https://github.com/uuidjs/uuid/commit/ffa31383e8e4e1f0b4e22e504561272041b8738c">ffa3138</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md">uuid's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/uuidjs/uuid/compare/v13.0.0...v14.0.0">14.0.0</a>
(2026-04-19)</h2>
<h3>Security</h3>
<ul>
<li>Fixes <a
href="https://github.com/uuidjs/uuid/security/advisories/GHSA-w5hq-g745-h8pq">GHSA-w5hq-g745-h8pq</a>:
<code>v3()</code>, <code>v5()</code>, and <code>v6()</code> did not
validate that writes would remain within the bounds of a caller-supplied
buffer, allowing out-of-bounds writes when an invalid
<code>offset</code> was provided. A <code>RangeError</code> is now
thrown if <code>offset &lt; 0</code> or <code>offset + 16 &gt;
buf.length</code>.</li>
</ul>
<h3>⚠ BREAKING CHANGES</h3>
<ul>
<li><code>crypto</code> is now expected to be globally defined (requires
node@20+) (<a
href="https://redirect.github.com/uuidjs/uuid/issues/935">#935</a>)</li>
<li>drop node@18 support (<a
href="https://redirect.github.com/uuidjs/uuid/issues/934">#934</a>)</li>
<li>upgrade minimum supported TypeScript version to 5.4.3, in keeping
with the project's policy of supporting TypeScript versions released
within the last two years</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/uuidjs/uuid/commit/7c1ea087a8149b57380fc8bb7f68c3a215cb6e4b"><code>7c1ea08</code></a>
chore(main): release 14.0.0 (<a
href="https://redirect.github.com/uuidjs/uuid/issues/926">#926</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/3d2c5b0342f0fcb52a5ac681c3d47c13e7444b34"><code>3d2c5b0</code></a>
Merge commit from fork</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/f2c235f93059325fa43e1106e624b5291bb523c4"><code>f2c235f</code></a>
fix!: expect <code>crypto</code> to be global everywhere (requires
node@20+) (<a
href="https://redirect.github.com/uuidjs/uuid/issues/935">#935</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/529ef0899f5dd503d2ee90d690585d63d78bc212"><code>529ef08</code></a>
chore: upgrade TypeScript and fixup types (<a
href="https://redirect.github.com/uuidjs/uuid/issues/927">#927</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/086fd7976f11433edf9ac80be876b3ad243fe087"><code>086fd79</code></a>
chore: update dependencies (<a
href="https://redirect.github.com/uuidjs/uuid/issues/933">#933</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/dc4ddb87272ed2843faccd130bcc41d492688bd3"><code>dc4ddb8</code></a>
feat!: drop node@18 support (<a
href="https://redirect.github.com/uuidjs/uuid/issues/934">#934</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/0f1f9c9c9cedbae5a1d363d5406c5dfbabe81404"><code>0f1f9c9</code></a>
chore: switch to Biome for parsing and linting (<a
href="https://redirect.github.com/uuidjs/uuid/issues/932">#932</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/e2879e64bf125add903c1eff6e0860542c605013"><code>e2879e6</code></a>
chore: use maintained version of npm-run-all (<a
href="https://redirect.github.com/uuidjs/uuid/issues/930">#930</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/ffa31383e8e4e1f0b4e22e504561272041b8738c"><code>ffa3138</code></a>
fix: Use GITHUB_TOKEN for release-please and enable npm provenance (<a
href="https://redirect.github.com/uuidjs/uuid/issues/925">#925</a>)</li>
<li><a
href="https://github.com/uuidjs/uuid/commit/0423d49df2dc8efc300c804731d25f4d7e0fccc4"><code>0423d49</code></a>
docs: remove obsolete v1 option notes (<a
href="https://redirect.github.com/uuidjs/uuid/issues/915">#915</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/uuidjs/uuid/compare/v13.0.0...v14.0.0">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a
href="https://www.npmjs.com/~GitHub%20Actions">GitHub Actions</a>, a new
releaser for uuid since your current version.</p>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=uuid&package-manager=npm_and_yarn&previous-version=13.0.0&new-version=14.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-27 10:08:17 +02:00
Martin a963caaf5b small refactoring: use constants in layout logic (#186) 2026-04-27 08:34:56 +02:00
Martin eab14c8932 top-langs: add hide_values option (#181)
based on https://github.com/anuraghazra/github-readme-stats/pull/4850 by
@claw-explorer

This PR adds a new hide_values query parameter for the Top Languages
card that hides the percentage/byte display values while keeping
progress bars and chart visualizations intact.

<img width="300" height="245" alt="top-langs5"
src="https://github.com/user-attachments/assets/6c7486c3-5611-41c0-95ff-0d9183cea320"
/>
<img width="300" height="350" alt="top-langs"
src="https://github.com/user-attachments/assets/a0cc5bed-3f8e-4934-9c30-3e7d5a240865"
/>
<img width="350" height="215" alt="top-langs2"
src="https://github.com/user-attachments/assets/9d9c06cc-aa0d-4e47-9cdd-bce298583742"
/>
<img width="300" height="350" alt="top-langs3"
src="https://github.com/user-attachments/assets/f4a51889-0b8f-4289-a082-e2107208a123"
/>
<img width="300" height="140" alt="top-langs4"
src="https://github.com/user-attachments/assets/d88c2ea2-0422-482b-aade-8cf5799f12cd"
/>
2026-04-25 20:29:08 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 457c457cab build(deps-dev): Bump eslint-plugin-react-hooks from 7.0.1 to 7.1.0 in the eslint group (#178)
Bumps the eslint group with 1 update:
[eslint-plugin-react-hooks](https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks).

Updates `eslint-plugin-react-hooks` from 7.0.1 to 7.1.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/facebook/react/releases">eslint-plugin-react-hooks's
releases</a>.</em></p>
<blockquote>
<h2>eslint-plugin-react-hooks@7.1.0 (April 16, 2026)</h2>
<p>This release adds ESLint v10 support, improves performance by
skipping compilation for non-React files, and includes compiler lint
improvements including better <code>set-state-in-effect</code>
detection, improved ref validation, and more helpful error
reporting.</p>
<ul>
<li>Add ESLint v10 support. (<a
href="https://github.com/azat-io"><code>@​azat-io</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/35720">#35720</a>)</li>
<li>Skip compilation for non-React files to improve performance. (<a
href="https://github.com/josephsavona"><code>@​josephsavona</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/35589">#35589</a>)</li>
<li>Fix exhaustive deps bug with Flow type casting. (<a
href="https://github.com/jorge-cab"><code>@​jorge-cab</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/35691">#35691</a>)</li>
<li>Fix <code>useEffectEvent</code> checks in component syntax. (<a
href="https://github.com/jbrown215"><code>@​jbrown215</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/35041">#35041</a>)</li>
<li>Improved <code>set-state-in-effect</code> validation with fewer
false negatives. (<a
href="https://github.com/jorge-cab"><code>@​jorge-cab</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/35134">#35134</a>,
<a
href="https://github.com/josephsavona"><code>@​josephsavona</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/35147">#35147</a>,
<a href="https://github.com/jackpope"><code>@​jackpope</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/35214">#35214</a>,
<a
href="https://github.com/chesnokov-tony"><code>@​chesnokov-tony</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/35419">#35419</a>,
<a href="https://github.com/jsleitor"><code>@​jsleitor</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/36107">#36107</a>)</li>
<li>Improved ref validation for non-mutating functions and event handler
props. (<a
href="https://github.com/josephsavona"><code>@​josephsavona</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/35893">#35893</a>,
<a href="https://github.com/kolvian"><code>@​kolvian</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/35062">#35062</a>)</li>
<li>Compiler now reports all errors instead of stopping at the first.
(<a
href="https://github.com/josephsavona"><code>@​josephsavona</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/35873">#35873</a>–<a
href="https://redirect.github.com/facebook/react/pull/35884">#35884</a>)</li>
<li>Improved source locations and error display in compiler diagnostics.
(<a href="https://github.com/nathanmarks"><code>@​nathanmarks</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/35348">#35348</a>,
<a
href="https://github.com/josephsavona"><code>@​josephsavona</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/34963">#34963</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/CHANGELOG.md">eslint-plugin-react-hooks's
changelog</a>.</em></p>
<blockquote>
<h2>7.1.0</h2>
<p>This release adds ESLint v10 support, improves performance by
skipping compilation for non-React files, and includes compiler lint
improvements including better <code>set-state-in-effect</code>
detection, improved ref validation, and more helpful error
reporting.</p>
<ul>
<li>Add ESLint v10 support. (<a
href="https://github.com/azat-io"><code>@​azat-io</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/35720">#35720</a>)</li>
<li>Skip compilation for non-React files to improve performance. (<a
href="https://github.com/josephsavona"><code>@​josephsavona</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/35589">#35589</a>)</li>
<li>Fix exhaustive deps bug with Flow type casting. (<a
href="https://github.com/jorge-cab"><code>@​jorge-cab</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/35691">#35691</a>)</li>
<li>Fix <code>useEffectEvent</code> checks in component syntax. (<a
href="https://github.com/jbrown215"><code>@​jbrown215</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/35041">#35041</a>)</li>
<li>Improved <code>set-state-in-effect</code> validation with fewer
false negatives. (<a
href="https://github.com/jorge-cab"><code>@​jorge-cab</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/35134">#35134</a>,
<a
href="https://github.com/josephsavona"><code>@​josephsavona</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/35147">#35147</a>,
<a href="https://github.com/jackpope"><code>@​jackpope</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/35214">#35214</a>,
<a
href="https://github.com/chesnokov-tony"><code>@​chesnokov-tony</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/35419">#35419</a>,
<a href="https://github.com/jsleitor"><code>@​jsleitor</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/36107">#36107</a>)</li>
<li>Improved ref validation for non-mutating functions and event handler
props. (<a
href="https://github.com/josephsavona"><code>@​josephsavona</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/35893">#35893</a>,
<a href="https://github.com/kolvian"><code>@​kolvian</code></a> in <a
href="https://redirect.github.com/facebook/react/pull/35062">#35062</a>)</li>
<li>Compiler now reports all errors instead of stopping at the first.
(<a
href="https://github.com/josephsavona"><code>@​josephsavona</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/35873">#35873</a>–<a
href="https://redirect.github.com/facebook/react/pull/35884">#35884</a>)</li>
<li>Improved source locations and error display in compiler diagnostics.
(<a href="https://github.com/nathanmarks"><code>@​nathanmarks</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/35348">#35348</a>,
<a
href="https://github.com/josephsavona"><code>@​josephsavona</code></a>
in <a
href="https://redirect.github.com/facebook/react/pull/34963">#34963</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/facebook/react/commits/eslint-plugin-react-hooks@7.1.0/packages/eslint-plugin-react-hooks">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint-plugin-react-hooks&package-manager=npm_and_yarn&previous-version=7.0.1&new-version=7.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-25 12:33:42 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 609578da0c build(deps-dev): Bump typescript from 6.0.2 to 6.0.3 in the typescript group (#179)
Bumps the typescript group with 1 update:
[typescript](https://github.com/microsoft/TypeScript).

Updates `typescript` from 6.0.2 to 6.0.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/microsoft/TypeScript/releases">typescript's
releases</a>.</em></p>
<blockquote>
<h2>TypeScript 6.0.3</h2>
<p>For release notes, check out the <a
href="https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/">release
announcement blog post</a>.</p>
<ul>
<li><a
href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&amp;q=milestone%3A%22TypeScript+6.0.0%22">fixed
issues query for TypeScript 6.0.0 (Beta)</a>.</li>
<li><a
href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&amp;q=milestone%3A%22TypeScript+6.0.1%22">fixed
issues query for TypeScript 6.0.1 (RC)</a>.</li>
<li><a
href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&amp;q=milestone%3A%22TypeScript+6.0.2%22">fixed
issues query for TypeScript 6.0.2 (Stable)</a>.</li>
<li><a
href="https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93&amp;q=milestone%3A%22TypeScript+6.0.3%22">fixed
issues query for TypeScript 6.0.3 (Stable)</a>.</li>
</ul>
<p>Downloads are available on:</p>
<ul>
<li><a href="https://www.npmjs.com/package/typescript">npm</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/microsoft/TypeScript/commit/050880ce59e30b356b686bd3144efe24f875ebc8"><code>050880c</code></a>
Bump version to 6.0.3 and LKG</li>
<li><a
href="https://github.com/microsoft/TypeScript/commit/eeae9dd0f17aa494658e4ec079dc002e02dd625e"><code>eeae9dd</code></a>
🤖 Pick PR <a
href="https://redirect.github.com/microsoft/TypeScript/issues/63401">#63401</a>
(Also check package name validity in...) into release-6.0 (#...</li>
<li><a
href="https://github.com/microsoft/TypeScript/commit/ad1c695fada682764bb510dd680e8f175ae54094"><code>ad1c695</code></a>
🤖 Pick PR <a
href="https://redirect.github.com/microsoft/TypeScript/issues/63368">#63368</a>
(Harden ATA package name filtering) into release-6.0 (<a
href="https://redirect.github.com/microsoft/TypeScript/issues/63372">#63372</a>)</li>
<li><a
href="https://github.com/microsoft/TypeScript/commit/0725fb4664a1d5ec94040b6d94db77dc1cc354e4"><code>0725fb4</code></a>
🤖 Pick PR <a
href="https://redirect.github.com/microsoft/TypeScript/issues/63310">#63310</a>
(Mark class property initializers as...) into release-6.0 (#...</li>
<li>See full diff in <a
href="https://github.com/microsoft/TypeScript/compare/v6.0.2...v6.0.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript&package-manager=npm_and_yarn&previous-version=6.0.2&new-version=6.0.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-25 12:32:52 +02:00
Martin c3f338780b fix login, unify backend and frontend in 1 vercel project (#180) 2026-04-25 12:24:58 +02:00
Martin c4a4220448 fix backend build (#177) 2026-04-23 21:37:19 +02:00
Martin 9d8a7b7f0c 'plugin-react-swc' -> 'plugin-react' (#168)
I upgraded several dependencies yesterday, including vite. Running `pnpm
run dev:frontend` now prints:
> [vite:react-swc] We recommend switching to `@vitejs/plugin-react` for
improved performance as no swc plugins are used. More information at
https://vite.dev/rolldown

So in this PR I switch to `@vitejs/plugin-react`. Unless you had a
specific reason to use `@vitejs/plugin-react-swc` instead?
2026-04-23 21:27:20 +02:00
Martin 0898dbfb00 re-build lockfile (#176)
Running `pnpm upgrade -r` in my previous PR didn't upgrade everything,
because of a bug in pnpm: https://github.com/pnpm/pnpm/issues/9900

So I deleted the lockfile and node_modules and re-installed everything
in order to upgrade all dependencies.
2026-04-22 21:06:14 +02:00
Martin 6d3145c3d8 run pnpm upgrade (#175) 2026-04-22 20:07:52 +02:00
Martin 5156a811cb exclude 'pg' from frontend build (#169)
closes #142
2026-04-22 19:34:43 +02:00
Martinanddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> e263e5dfc4 upgrade pnpm and vite (#174)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 18:50:59 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> f8094ab5d3 build(deps-dev): Bump prettier from 3.8.2 to 3.8.3 (#173)
Bumps [prettier](https://github.com/prettier/prettier) from 3.8.2 to
3.8.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/prettier/prettier/releases">prettier's
releases</a>.</em></p>
<blockquote>
<h2>3.8.3</h2>
<ul>
<li>SCSS: Prevent trailing comma in <code>if()</code> function (<a
href="https://redirect.github.com/prettier/prettier/pull/18471">prettier/prettier#18471</a>
by <a href="https://github.com/kovsu"><code>@​kovsu</code></a>)</li>
</ul>
<p>🔗 <a
href="https://github.com/prettier/prettier/blob/3.8.3/CHANGELOG.md#383">Changelog</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/prettier/prettier/blob/main/CHANGELOG.md">prettier's
changelog</a>.</em></p>
<blockquote>
<h1>3.8.3</h1>
<p><a
href="https://github.com/prettier/prettier/compare/3.8.2...3.8.3">diff</a></p>
<h4>SCSS: Prevent trailing comma in <code>if()</code> function (<a
href="https://redirect.github.com/prettier/prettier/pull/18471">#18471</a>
by <a href="https://github.com/kovsu"><code>@​kovsu</code></a>)</h4>
<!-- raw HTML omitted -->
<pre lang="scss"><code>// Input
$value: if(sass(false): 1; else: -1);
<p>// Prettier 3.8.2<br />
$value: if(<br />
sass(false): 1; else: -1,<br />
);</p>
<p>// Prettier 3.8.3<br />
$value: if(sass(false): 1; else: -1);<br />
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/prettier/prettier/commit/d7108a79ec745c04292aabf22c4c1adbd690b191"><code>d7108a7</code></a>
Release 3.8.3</li>
<li><a
href="https://github.com/prettier/prettier/commit/177f90898170d363ef64fde663e4d13170688bfe"><code>177f908</code></a>
Prevent trailing comma in SCSS <code>if()</code> function (<a
href="https://redirect.github.com/prettier/prettier/issues/18471">#18471</a>)</li>
<li><a
href="https://github.com/prettier/prettier/commit/1cd40668c3d6f2f4cf9d87bbc9096d92361b2606"><code>1cd4066</code></a>
Release <code>@​prettier/plugin-oxc</code><a
href="https://github.com/0"><code>@​0</code></a>.1.4</li>
<li><a
href="https://github.com/prettier/prettier/commit/a8700e245038cd8cc0cf28ef06ffedbcb3fc2dfc"><code>a8700e2</code></a>
Update oxc-parser to v0.125.0</li>
<li><a
href="https://github.com/prettier/prettier/commit/752157c78eca6f0a30e5d5cb513b682c5ecfa01e"><code>752157c</code></a>
Fix tests</li>
<li><a
href="https://github.com/prettier/prettier/commit/053fd418e180b12fa2014260212fae831f5fc5ec"><code>053fd41</code></a>
Bump Prettier dependency to 3.8.2</li>
<li><a
href="https://github.com/prettier/prettier/commit/904c6365ec46726fd0e21021c52ae934b7e5abc6"><code>904c636</code></a>
Clean changelog_unreleased</li>
<li><a
href="https://github.com/prettier/prettier/commit/dc1f7fcc508d116cbf1644d69a1f0eb93e40d4a4"><code>dc1f7fc</code></a>
Update dependents count</li>
<li>See full diff in <a
href="https://github.com/prettier/prettier/compare/3.8.2...3.8.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=prettier&package-manager=npm_and_yarn&previous-version=3.8.2&new-version=3.8.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 18:24:46 +02:00
Marco Pasqualetti 9c0f4a8390 chore(dependabot): add groups (#171)
Adds groups configuration to the Dependabot `npm` ecosystem block,
consolidating related packages into single PRs instead of one PR per
package
2026-04-22 18:12:08 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1779475e1b build(deps-dev): Bump typescript-eslint from 8.58.1 to 8.58.2 (#166)
Bumps
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
from 8.58.1 to 8.58.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.58.2</h2>
<h2>8.58.2 (2026-04-13)</h2>
<h3>🩹 Fixes</h3>
<ul>
<li>remove tsbuildinfo cache file from published packages (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12187">#12187</a>)</li>
<li><strong>eslint-plugin:</strong> [no-unnecessary-condition] use
assignability checks in checkTypePredicates (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12147">#12147</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Abhijeet Singh <a
href="https://github.com/cseas"><code>@​cseas</code></a></li>
<li>송재욱</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.58.2">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.58.2 (2026-04-13)</h2>
<h3>🩹 Fixes</h3>
<ul>
<li>remove tsbuildinfo cache file from published packages (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12187">#12187</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Abhijeet Singh <a
href="https://github.com/cseas"><code>@​cseas</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.58.2">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/90c2803a4c250e0343598d41e973f95e743bf4ce"><code>90c2803</code></a>
chore(release): publish 8.58.2</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/b3315fd7ba53b7da218e5675cd960939b80a76ab"><code>b3315fd</code></a>
chore: convert import eslint to import js - followup (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12100">#12100</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/be6b49a02d68db9bdc8985e7e9e1598700fda2fa"><code>be6b49a</code></a>
fix: remove tsbuildinfo cache file from published packages (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12187">#12187</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.58.2/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript-eslint&package-manager=npm_and_yarn&previous-version=8.58.1&new-version=8.58.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-21 14:12:15 +02:00
Martin b474572598 remove node 22 (#170) 2026-04-21 14:11:24 +02:00
martin-mfg 4cabac4bc1 upgrade react to v19 2026-04-21 09:09:30 +02:00
Martinanddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> d2a2274eeb build(deps-dev): Bump typescript from 5.9.3 to 6.0.2 (#165)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 20:53:34 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 30e2233ae4 build(deps): Bump vite from 7.3.1 to 8.0.8 (#147)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite)
from 7.3.1 to 8.0.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/releases">vite's
releases</a>.</em></p>
<blockquote>
<h2>v8.0.8</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.8/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.0.7</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.7/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.0.6</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.6/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.0.5</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.5/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.0.4</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.4/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@8.0.3</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@8.0.3/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.0.3</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.3/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@8.0.2</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@8.0.2/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.0.2</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.2/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@8.0.1</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@8.0.1/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.0.1</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.1/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>plugin-legacy@8.0.1</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/plugin-legacy@8.0.1/packages/plugin-legacy/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@8.0.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@8.0.0/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>plugin-legacy@8.0.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/plugin-legacy@8.0.0/packages/plugin-legacy/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.0.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.0/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.0.0-beta.18</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.0-beta.18/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>v8.0.0-beta.17</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/v8.0.0-beta.17/packages/vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md">vite's
changelog</a>.</em></p>
<blockquote>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v8.0.7...v8.0.8">8.0.8</a>
(2026-04-09)<!-- raw HTML omitted --></h2>
<h3>Features</h3>
<ul>
<li>update rolldown to 1.0.0-rc.15 (<a
href="https://redirect.github.com/vitejs/vite/issues/22201">#22201</a>)
(<a
href="https://github.com/vitejs/vite/commit/6baf587255936e91348cbe624caefd10e8c607ab">6baf587</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>avoid <code>dns.getDefaultResultOrder</code> temporary (<a
href="https://redirect.github.com/vitejs/vite/issues/22202">#22202</a>)
(<a
href="https://github.com/vitejs/vite/commit/15f1c15ac9be343ee4f317fd025c3d67f0c7bd53">15f1c15</a>)</li>
<li><strong>ssr:</strong> class property keys hoisting matching imports
(<a
href="https://redirect.github.com/vitejs/vite/issues/22199">#22199</a>)
(<a
href="https://github.com/vitejs/vite/commit/e1376018cd516d6970534fce495e24f9ee683ce3">e137601</a>)</li>
</ul>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v8.0.6...v8.0.7">8.0.7</a>
(2026-04-07)<!-- raw HTML omitted --></h2>
<h3>Bug Fixes</h3>
<ul>
<li>use sync dns.getDefaultResultOrder instead of dns.promises (<a
href="https://redirect.github.com/vitejs/vite/issues/22185">#22185</a>)
(<a
href="https://github.com/vitejs/vite/commit/5c05b04db6f3f64af60ff6525eb5f04bc330fbb5">5c05b04</a>)</li>
</ul>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v8.0.5...v8.0.6">8.0.6</a>
(2026-04-07)<!-- raw HTML omitted --></h2>
<h3>Features</h3>
<ul>
<li>update rolldown to 1.0.0-rc.13 (<a
href="https://redirect.github.com/vitejs/vite/issues/22097">#22097</a>)
(<a
href="https://github.com/vitejs/vite/commit/51d3e48980bf3e352d31ecde49d1aa56859918e0">51d3e48</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>css:</strong> avoid mutating sass error multiple times (<a
href="https://redirect.github.com/vitejs/vite/issues/22115">#22115</a>)
(<a
href="https://github.com/vitejs/vite/commit/d5081c2f3e73f3fc06956d8cf5f2cf06463c2325">d5081c2</a>)</li>
<li><strong>optimize-deps:</strong> hoist CJS interop assignment (<a
href="https://redirect.github.com/vitejs/vite/issues/22156">#22156</a>)
(<a
href="https://github.com/vitejs/vite/commit/17a8f9edfcd3b9344668120a84e3328aeada3c97">17a8f9e</a>)</li>
</ul>
<h3>Performance Improvements</h3>
<ul>
<li>early return in <code>getLocalhostAddressIfDiffersFromDNS</code>
when DNS order is <code>verbatim</code> (<a
href="https://redirect.github.com/vitejs/vite/issues/22151">#22151</a>)
(<a
href="https://github.com/vitejs/vite/commit/56ec25613dba6cc71911f7af6e545ebcb77ec012">56ec256</a>)</li>
</ul>
<h3>Miscellaneous Chores</h3>
<ul>
<li><strong>create-vite:</strong> remove unnecessary DOM.Iterable (<a
href="https://redirect.github.com/vitejs/vite/issues/22168">#22168</a>)
(<a
href="https://github.com/vitejs/vite/commit/bdc53ab1e67f7e2e000112eeed9c85413ddb0e9e">bdc53ab</a>)</li>
<li>replace remaining prettier script (<a
href="https://redirect.github.com/vitejs/vite/issues/22179">#22179</a>)
(<a
href="https://github.com/vitejs/vite/commit/af71fb26dd15098b9523efc3d8ed04f27553174b">af71fb2</a>)</li>
</ul>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v8.0.4...v8.0.5">8.0.5</a>
(2026-04-06)<!-- raw HTML omitted --></h2>
<h3>Bug Fixes</h3>
<ul>
<li>apply server.fs check to env transport (<a
href="https://redirect.github.com/vitejs/vite/issues/22159">#22159</a>)
(<a
href="https://github.com/vitejs/vite/commit/f02d9fde0b195afe3ea2944414186962fbbe41e0">f02d9fd</a>)</li>
<li>avoid path traversal with optimize deps sourcemap handler (<a
href="https://redirect.github.com/vitejs/vite/issues/22161">#22161</a>)
(<a
href="https://github.com/vitejs/vite/commit/79f002f2286c03c88c7b74c511c7f9fc6dc46694">79f002f</a>)</li>
<li>check <code>server.fs</code> after stripping query as well (<a
href="https://redirect.github.com/vitejs/vite/issues/22160">#22160</a>)
(<a
href="https://github.com/vitejs/vite/commit/a9a3df299378d9cbc5f069e3536a369f8188c8ff">a9a3df2</a>)</li>
<li>disallow referencing files outside the package from sourcemap (<a
href="https://redirect.github.com/vitejs/vite/issues/22158">#22158</a>)
(<a
href="https://github.com/vitejs/vite/commit/f05f50173461789e0f1323fe06b51f18ca41c132">f05f501</a>)</li>
</ul>
<h2><!-- raw HTML omitted --><a
href="https://github.com/vitejs/vite/compare/v8.0.3...v8.0.4">8.0.4</a>
(2026-04-06)<!-- raw HTML omitted --></h2>
<h3>Features</h3>
<ul>
<li>allow esbuild 0.28 as peer deps (<a
href="https://redirect.github.com/vitejs/vite/issues/22155">#22155</a>)
(<a
href="https://github.com/vitejs/vite/commit/b0da97372f5dba73e78035d1cc7680466ff6cf7f">b0da973</a>)</li>
<li><strong>hmr:</strong> truncate list of files on hmr update (<a
href="https://redirect.github.com/vitejs/vite/issues/21535">#21535</a>)
(<a
href="https://github.com/vitejs/vite/commit/d00e806d7be15ebbfe7875e9244963d80ee8b142">d00e806</a>)</li>
<li><strong>optimizer:</strong> log when dependency scanning or bundling
takes over 1s (<a
href="https://redirect.github.com/vitejs/vite/issues/21797">#21797</a>)
(<a
href="https://github.com/vitejs/vite/commit/f61a1ab33b05dc6f6a7eda6e8bc9c4c5b9aab133">f61a1ab</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitejs/vite/commit/6e585dcb05a3b159fba7ae57f7faf0b1eca7a390"><code>6e585dc</code></a>
release: v8.0.8</li>
<li><a
href="https://github.com/vitejs/vite/commit/e1376018cd516d6970534fce495e24f9ee683ce3"><code>e137601</code></a>
fix(ssr): class property keys hoisting matching imports (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22199">#22199</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/15f1c15ac9be343ee4f317fd025c3d67f0c7bd53"><code>15f1c15</code></a>
fix: avoid <code>dns.getDefaultResultOrder</code> temporary (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22202">#22202</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/6baf587255936e91348cbe624caefd10e8c607ab"><code>6baf587</code></a>
feat: update rolldown to 1.0.0-rc.15 (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22201">#22201</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/fdb2e6f63894d8c458c1778f3df77afe537f2bb2"><code>fdb2e6f</code></a>
release: v8.0.7</li>
<li><a
href="https://github.com/vitejs/vite/commit/5c05b04db6f3f64af60ff6525eb5f04bc330fbb5"><code>5c05b04</code></a>
fix: use sync dns.getDefaultResultOrder instead of dns.promises (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22185">#22185</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/7b3086fae4170252e4cd53f3988f207a943ac5cb"><code>7b3086f</code></a>
release: v8.0.6</li>
<li><a
href="https://github.com/vitejs/vite/commit/af71fb26dd15098b9523efc3d8ed04f27553174b"><code>af71fb2</code></a>
chore: replace remaining prettier script (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22179">#22179</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/51d3e48980bf3e352d31ecde49d1aa56859918e0"><code>51d3e48</code></a>
feat: update rolldown to 1.0.0-rc.13 (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22097">#22097</a>)</li>
<li><a
href="https://github.com/vitejs/vite/commit/17a8f9edfcd3b9344668120a84e3328aeada3c97"><code>17a8f9e</code></a>
fix(optimize-deps): hoist CJS interop assignment (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/22156">#22156</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vitejs/vite/commits/v8.0.8/packages/vite">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 20:22:40 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 4c2628fa67 build(deps): Bump axios from 1.13.5 to 1.15.0 (#153)
Bumps [axios](https://github.com/axios/axios) from 1.13.5 to 1.15.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/releases">axios's
releases</a>.</em></p>
<blockquote>
<h2>v1.15.0</h2>
<p>This release delivers two critical security patches, adds runtime
support for Deno and Bun, and includes significant CI hardening,
documentation improvements, and routine dependency updates.</p>
<h2>⚠️ Important Changes</h2>
<ul>
<li><strong>Deprecation:</strong> <code>url.parse()</code> usage has
been replaced to address Node.js deprecation warnings. If you are on a
recent version of Node.js, this resolves console warnings you may have
been seeing. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10625">#10625</a></strong>)</li>
</ul>
<h2>🔒 Security Fixes</h2>
<ul>
<li><strong>Proxy Handling:</strong> Fixed a <code>no_proxy</code>
hostname normalisation bypass that could lead to Server-Side Request
Forgery (SSRF). (<strong><a
href="https://redirect.github.com/axios/axios/issues/10661">#10661</a></strong>)</li>
<li><strong>Header Injection:</strong> Fixed an unrestricted cloud
metadata exfiltration vulnerability via a header injection chain.
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10660">#10660</a></strong>)</li>
</ul>
<h2>🚀 New Features</h2>
<ul>
<li><strong>Runtime Support:</strong> Added compatibility checks and
documentation for Deno and Bun environments. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10652">#10652</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10653">#10653</a></strong>)</li>
</ul>
<h2>🔧 Maintenance &amp; Chores</h2>
<ul>
<li><strong>CI Security:</strong> Hardened workflow permissions to least
privilege, added the <code>zizmor</code> security scanner, pinned action
versions, and gated npm publishing with OIDC and environment protection.
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10618">#10618</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10619">#10619</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10627">#10627</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10637">#10637</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10666">#10666</a></strong>)</li>
<li><strong>Dependencies:</strong> Bumped
<code>serialize-javascript</code>, <code>handlebars</code>,
<code>picomatch</code>, <code>vite</code>, and
<code>denoland/setup-deno</code> to latest versions. Added a 7-day
Dependabot cooldown period. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10574">#10574</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10572">#10572</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10568">#10568</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10663">#10663</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10664">#10664</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10665">#10665</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10669">#10669</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10670">#10670</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10616">#10616</a></strong>)</li>
<li><strong>Documentation:</strong> Unified docs, improved
<code>beforeRedirect</code> credential leakage example, clarified
<code>withCredentials</code>/<code>withXSRFToken</code> behaviour,
HTTP/2 support notes, async/await timeout error handling, header case
preservation, and various typo fixes. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10649">#10649</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10624">#10624</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/7452">#7452</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/7471">#7471</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10654">#10654</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10644">#10644</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10589">#10589</a></strong>)</li>
<li><strong>Housekeeping:</strong> Removed stale files, regenerated
lockfile, and updated sponsor scripts and blocks. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10584">#10584</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10650">#10650</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10582">#10582</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10640">#10640</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10659">#10659</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10668">#10668</a></strong>)</li>
<li><strong>Tests:</strong> Added regression coverage for urlencoded
<code>Content-Type</code> casing. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10573">#10573</a></strong>)</li>
</ul>
<h2>🌟 New Contributors</h2>
<p>We are thrilled to welcome our new contributors. Thank you for
helping improve Axios:</p>
<ul>
<li><strong><a
href="https://github.com/raashish1601"><code>@​raashish1601</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10573">#10573</a></strong>)</li>
<li><strong><a
href="https://github.com/Kilros0817"><code>@​Kilros0817</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10625">#10625</a></strong>)</li>
<li><strong><a
href="https://github.com/ashstrc"><code>@​ashstrc</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10624">#10624</a></strong>)</li>
<li><strong><a
href="https://github.com/Abhi3975"><code>@​Abhi3975</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10589">#10589</a></strong>)</li>
<li><strong><a
href="https://github.com/theamodhshetty"><code>@​theamodhshetty</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/7452">#7452</a></strong>)</li>
</ul>
<h2>v1.14.0</h2>
<p>This release focuses on compatibility fixes, adapter stability
improvements, and test/tooling modernisation.</p>
<h2>⚠️ Important Changes</h2>
<ul>
<li><strong>Breaking Changes:</strong> None identified in this
release.</li>
<li><strong>Action Required:</strong> If you rely on env-based proxy
behaviour or CJS resolution edge-cases, validate your integration after
upgrade (notably <code>proxy-from-env</code> v2 alignment and
<code>main</code> entry compatibility fix).</li>
</ul>
<h2>🚀 New Features</h2>
<ul>
<li><strong>Runtime Features:</strong> No new end-user features were
introduced in this release.</li>
<li><strong>Test Coverage Expansion:</strong> Added broader smoke/module
test coverage for CJS and ESM package usage. (<a
href="https://redirect.github.com/axios/axios/pull/7510">#7510</a>)</li>
</ul>
<h2>🐛 Bug Fixes</h2>
<ul>
<li><strong>Headers:</strong> Trim trailing CRLF in normalised header
values. (<a
href="https://redirect.github.com/axios/axios/pull/7456">#7456</a>)</li>
<li><strong>HTTP/2:</strong> Close detached HTTP/2 sessions on timeout
to avoid lingering sessions. (<a
href="https://redirect.github.com/axios/axios/pull/7457">#7457</a>)</li>
<li><strong>Fetch Adapter:</strong> Cancel <code>ReadableStream</code>
created during request-stream capability probing to prevent async
resource leaks. (<a
href="https://redirect.github.com/axios/axios/pull/7515">#7515</a>)</li>
<li><strong>Proxy Handling:</strong> Fixed env proxy behavior with
<code>proxy-from-env</code> v2 usage. (<a
href="https://redirect.github.com/axios/axios/pull/7499">#7499</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/blob/v1.x/CHANGELOG.md">axios's
changelog</a>.</em></p>
<blockquote>
<h2>v1.15.0 — April 7, 2026</h2>
<p>This release delivers two critical security patches targeting header
injection and SSRF via proxy bypass, adds official runtime support for
Deno and Bun, and includes significant CI security hardening.</p>
<h2>🔒 Security Fixes</h2>
<ul>
<li>
<p><strong>Header Injection (CRLF):</strong> Rejects any header value
containing <code>\r</code> or <code>\n</code> characters to block CRLF
injection chains that could be used to exfiltrate cloud metadata (IMDS).
Behavior change: headers with CR/LF now throw <code>&quot;Invalid
character in header content&quot;</code>. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10660">#10660</a></strong>)</p>
</li>
<li>
<p><strong>SSRF via <code>no_proxy</code> Bypass:</strong> Introduces a
<code>shouldBypassProxy</code> helper that normalises hostnames (strips
trailing dots, handles bracketed IPv6) before evaluating
<code>no_proxy</code>/<code>NO_PROXY</code> rules, closing a gap that
could cause loopback or internal hosts to be inadvertently proxied.
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10661">#10661</a></strong>)</p>
</li>
</ul>
<h2>🚀 New Features</h2>
<ul>
<li><strong>Deno &amp; Bun Runtime Support:</strong> Added full smoke
test suites for Deno and Bun, with CI workflows that run both runtimes
before any release is cut. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10652">#10652</a></strong>)</li>
</ul>
<h2>🐛 Bug Fixes</h2>
<ul>
<li><strong>Node.js v22 Compatibility:</strong> Replaced deprecated
<code>url.parse()</code> calls with the WHATWG
<code>URL</code>/<code>URLSearchParams</code> API across examples,
sandbox, and tests, eliminating <code>DEP0169</code> deprecation
warnings on Node.js v22+. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10625">#10625</a></strong>)</li>
</ul>
<h2>🔧 Maintenance &amp; Chores</h2>
<ul>
<li>
<p><strong>CI Security Hardening:</strong> Added <a
href="https://github.com/zizmorcore/zizmor">zizmor</a> GitHub Actions
security scanner; switched npm publish to OIDC Trusted Publishing
(removing the long-lived <code>NODE_AUTH_TOKEN</code>); pinned all
action references to full commit SHAs; narrowed workflow permissions to
least privilege; gated the publish step behind a dedicated
<code>npm-publish</code> environment; and blocked the sponsor-block
workflow from running on forks. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10618">#10618</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10619">#10619</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10627">#10627</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10637">#10637</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10641">#10641</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10666">#10666</a></strong>)</p>
</li>
<li>
<p><strong>Docs:</strong> Clarified HTTP/2 support and the unsupported
<code>httpVersion</code> option; added documentation for header case
preservation; improved the <code>beforeRedirect</code> example to
prevent accidental credential leakage. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10644">#10644</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10654">#10654</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10624">#10624</a></strong>)</p>
</li>
<li>
<p><strong>Dependencies:</strong> Bumped <code>picomatch</code>,
<code>handlebars</code>, <code>serialize-javascript</code>,
<code>vite</code> (×3), <code>denoland/setup-deno</code>, and 4
additional dev dependencies to latest versions. (<strong><a
href="https://redirect.github.com/axios/axios/issues/10564">#10564</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10565">#10565</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10567">#10567</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10568">#10568</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10572">#10572</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10574">#10574</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10663">#10663</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10664">#10664</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10665">#10665</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10669">#10669</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10670">#10670</a></strong>)</p>
</li>
</ul>
<h2>🌟 New Contributors</h2>
<p>We are thrilled to welcome our new contributors. Thank you for
helping improve axios:</p>
<ul>
<li><strong><a
href="https://github.com/Kilros0817"><code>@​Kilros0817</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10625">#10625</a></strong>)</li>
<li><strong><a
href="https://github.com/shaanmajid"><code>@​shaanmajid</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10616">#10616</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10617">#10617</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10618">#10618</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10619">#10619</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10637">#10637</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10641">#10641</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10666">#10666</a></strong>)</li>
<li><strong><a
href="https://github.com/ashstrc"><code>@​ashstrc</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10624">#10624</a></strong>,
<strong><a
href="https://redirect.github.com/axios/axios/issues/10644">#10644</a></strong>)</li>
<li><strong><a
href="https://github.com/Abhi3975"><code>@​Abhi3975</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10589">#10589</a></strong>)</li>
<li><strong><a
href="https://github.com/raashish1601"><code>@​raashish1601</code></a></strong>
(<strong><a
href="https://redirect.github.com/axios/axios/issues/10573">#10573</a></strong>)</li>
</ul>
<p><a
href="https://github.com/axios/axios/compare/v1.14.0...v1.15.0">Full
Changelog</a></p>
<hr />
<h2>v1.14.0 — March 27, 2026</h2>
<p>This release fixes a security vulnerability in the
<code>formidable</code> dependency, resolves a CommonJS compatibility
regression, hardens proxy and HTTP/2 handling, and modernises the build
and test toolchain.</p>
<h2>🔒 Security Fixes</h2>
<ul>
<li><strong>Formidable Vulnerability:</strong> Upgraded
<code>formidable</code> from v2 to v3 to address a reported
arbitrary-file vulnerability. Updated test server and assertions to
align with the v3 API. (<strong><a
href="https://redirect.github.com/axios/axios/issues/7533">#7533</a></strong>)</li>
</ul>
<h2>🐛 Bug Fixes</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/axios/axios/commit/772a4e54ecc4cc2421e2b746daff0aca10f359d7"><code>772a4e5</code></a>
chore(release): prepare release 1.15.0 (<a
href="https://redirect.github.com/axios/axios/issues/10671">#10671</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/4b071371be2f810b4bc7797a13838e0f806ebb22"><code>4b07137</code></a>
chore(deps-dev): bump vite from 8.0.0 to 8.0.5 in /tests/smoke/esm (<a
href="https://redirect.github.com/axios/axios/issues/10663">#10663</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/51e57b39db251bfe3d34af5c943dfea18e06c8b6"><code>51e57b3</code></a>
chore(deps-dev): bump vite from 8.0.2 to 8.0.5 (<a
href="https://redirect.github.com/axios/axios/issues/10664">#10664</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/fba1a77930f0c459677b729161627234b88c90aa"><code>fba1a77</code></a>
chore(deps-dev): bump vite from 8.0.2 to 8.0.5 in /tests/module/esm (<a
href="https://redirect.github.com/axios/axios/issues/10665">#10665</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/0bf6e28eac86e87da2b60bbf5ea4237910e1a08e"><code>0bf6e28</code></a>
chore(deps): bump denoland/setup-deno in the github-actions group (<a
href="https://redirect.github.com/axios/axios/issues/10669">#10669</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/8107157c572ee4a54cb28c01ab7f7f3d895ba661"><code>8107157</code></a>
chore(deps-dev): bump the development_dependencies group with 4 updates
(<a
href="https://redirect.github.com/axios/axios/issues/10670">#10670</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/e66530e3302d56176befd0778155dafea2487542"><code>e66530e</code></a>
ci: require npm-publish environment for releases (<a
href="https://redirect.github.com/axios/axios/issues/10666">#10666</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/49f23cbfe4d308a075281c5f798d4c68f648cbe2"><code>49f23cb</code></a>
chore(sponsor): update sponsor block (<a
href="https://redirect.github.com/axios/axios/issues/10668">#10668</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/363185461b90b1b78845dc8a99a1f103d9b122a1"><code>3631854</code></a>
fix: unrestricted cloud metadata exfiltration via header injection chain
(<a
href="https://redirect.github.com/axios/axios/issues/10">#10</a>...</li>
<li><a
href="https://github.com/axios/axios/commit/fb3befb6daac6cad26b2e54094d0f2d9e47f24df"><code>fb3befb</code></a>
fix: no_proxy hostname normalization bypass leads to ssrf (<a
href="https://redirect.github.com/axios/axios/issues/10661">#10661</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/axios/axios/compare/v1.13.5...v1.15.0">compare
view</a></li>
</ul>
</details>
<details>
<summary>Install script changes</summary>
<p>This version modifies <code>prepare</code> script that runs during
installation. Review the package contents before updating.</p>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 19:18:24 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 9dcfce415d build(deps-dev): Bump eslint from 10.1.0 to 10.2.0 (#151)
Bumps [eslint](https://github.com/eslint/eslint) from 10.1.0 to 10.2.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases">eslint's
releases</a>.</em></p>
<blockquote>
<h2>v10.2.0</h2>
<h2>Features</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/586ec2f43092779acc957866db4abe999112d1e1"><code>586ec2f</code></a>
feat: Add <code>meta.languages</code> support to rules (<a
href="https://redirect.github.com/eslint/eslint/issues/20571">#20571</a>)
(Copilot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/14207dee3939dc87cfa8b2fcfc271fff2cfd6471"><code>14207de</code></a>
feat: add <code>Temporal</code> to <code>no-obj-calls</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/20675">#20675</a>)
(Pixel998)</li>
<li><a
href="https://github.com/eslint/eslint/commit/bbb2c93a2b31bd30924f32fe69a9acf41f9dfe35"><code>bbb2c93</code></a>
feat: add Temporal to ES2026 globals (<a
href="https://redirect.github.com/eslint/eslint/issues/20672">#20672</a>)
(Pixel998)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/542cb3e6442a4e6ee3457c799e2a0ee23bef0c6a"><code>542cb3e</code></a>
fix: update first-party dependencies (<a
href="https://redirect.github.com/eslint/eslint/issues/20714">#20714</a>)
(Francesco Trotta)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/a2af743ea60f683d0e0de9d98267c1e7e4f5e412"><code>a2af743</code></a>
docs: add <code>language</code> to configuration objects (<a
href="https://redirect.github.com/eslint/eslint/issues/20712">#20712</a>)
(Francesco Trotta)</li>
<li><a
href="https://github.com/eslint/eslint/commit/845f23f1370892bf07d819497ac518c9e65090d6"><code>845f23f</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/5fbcf5958b897cc4df5d652924d18428db37f7ee"><code>5fbcf59</code></a>
docs: remove <code>sourceType</code> from ts playground link (<a
href="https://redirect.github.com/eslint/eslint/issues/20477">#20477</a>)
(Tanuj Kanti)</li>
<li><a
href="https://github.com/eslint/eslint/commit/8702a474659be786b6b1392e5e7c0c56355ae4a4"><code>8702a47</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/ddeaded2ab36951383ff67c60fb64ec68d29a46a"><code>ddeaded</code></a>
docs: Update README (GitHub Actions Bot)</li>
<li><a
href="https://github.com/eslint/eslint/commit/2b4496691266547784a7f7ad1989ce53381bab91"><code>2b44966</code></a>
docs: add Major Releases section to Manage Releases (<a
href="https://redirect.github.com/eslint/eslint/issues/20269">#20269</a>)
(Milos Djermanovic)</li>
<li><a
href="https://github.com/eslint/eslint/commit/eab65c700ebb16a6e790910c720450c9908961fd"><code>eab65c7</code></a>
docs: update <code>eslint</code> versions in examples (<a
href="https://redirect.github.com/eslint/eslint/issues/20664">#20664</a>)
(루밀LuMir)</li>
<li><a
href="https://github.com/eslint/eslint/commit/3e4a29903bf31f0998e45ad9128a265bce1edc56"><code>3e4a299</code></a>
docs: update ESM Dependencies policies with note for own-usage packages
(<a
href="https://redirect.github.com/eslint/eslint/issues/20660">#20660</a>)
(Milos Djermanovic)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/8120e30f833474f47acc061d24d164e9f022264f"><code>8120e30</code></a>
refactor: extract no unmodified loop condition (<a
href="https://redirect.github.com/eslint/eslint/issues/20679">#20679</a>)
(kuldeep kumar)</li>
<li><a
href="https://github.com/eslint/eslint/commit/46e8469786be1b2bbb522100e1d44624d98d3745"><code>46e8469</code></a>
chore: update dependency markdownlint-cli2 to ^0.22.0 (<a
href="https://redirect.github.com/eslint/eslint/issues/20697">#20697</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/01ed3aa68477f81a7188e1498cf4906e02015b7c"><code>01ed3aa</code></a>
test: add unit tests for unicode utilities (<a
href="https://redirect.github.com/eslint/eslint/issues/20622">#20622</a>)
(Manish chaudhary)</li>
<li><a
href="https://github.com/eslint/eslint/commit/811f4930f82ee2b6ac8eae75cade9bed63de0781"><code>811f493</code></a>
ci: remove <code>--legacy-peer-deps</code> from types integration tests
(<a
href="https://redirect.github.com/eslint/eslint/issues/20667">#20667</a>)
(Milos Djermanovic)</li>
<li><a
href="https://github.com/eslint/eslint/commit/6b86fcfc5c75d6a3b8a2cf7bcdb3ef60635a9a03"><code>6b86fcf</code></a>
chore: update dependency npm-run-all2 to v8 (<a
href="https://redirect.github.com/eslint/eslint/issues/20663">#20663</a>)
(renovate[bot])</li>
<li><a
href="https://github.com/eslint/eslint/commit/632c4f83bf32b77981c7d395cacddd1bb172ee25"><code>632c4f8</code></a>
chore: add <code>prettier</code> update commit to
<code>.git-blame-ignore-revs</code> (<a
href="https://redirect.github.com/eslint/eslint/issues/20662">#20662</a>)
(루밀LuMir)</li>
<li><a
href="https://github.com/eslint/eslint/commit/b0b0f21927e03ba092400e3c70d7058f537765c8"><code>b0b0f21</code></a>
chore: update dependency eslint-plugin-regexp to ^3.1.0 (<a
href="https://redirect.github.com/eslint/eslint/issues/20659">#20659</a>)
(Milos Djermanovic)</li>
<li><a
href="https://github.com/eslint/eslint/commit/228a2dd4b272c17f516ee3541f1dd69eca0a8ab0"><code>228a2dd</code></a>
chore: update dependency eslint-plugin-eslint-plugin to ^7.3.2 (<a
href="https://redirect.github.com/eslint/eslint/issues/20661">#20661</a>)
(Milos Djermanovic)</li>
<li><a
href="https://github.com/eslint/eslint/commit/3ab4d7e244df244102de9d0d250b2ff12456a785"><code>3ab4d7e</code></a>
test: Add tests for eslintrc-style keys (<a
href="https://redirect.github.com/eslint/eslint/issues/20645">#20645</a>)
(kuldeep kumar)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/000128c29235c5a8c35c7ef817dbccc4e42130ca"><code>000128c</code></a>
10.2.0</li>
<li><a
href="https://github.com/eslint/eslint/commit/1988fad70e361fe1c8df7804930a66e6a9bfc698"><code>1988fad</code></a>
Build: changelog update for 10.2.0</li>
<li><a
href="https://github.com/eslint/eslint/commit/542cb3e6442a4e6ee3457c799e2a0ee23bef0c6a"><code>542cb3e</code></a>
fix: update first-party dependencies (<a
href="https://redirect.github.com/eslint/eslint/issues/20714">#20714</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/a2af743ea60f683d0e0de9d98267c1e7e4f5e412"><code>a2af743</code></a>
docs: add <code>language</code> to configuration objects (<a
href="https://redirect.github.com/eslint/eslint/issues/20712">#20712</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/845f23f1370892bf07d819497ac518c9e65090d6"><code>845f23f</code></a>
docs: Update README</li>
<li><a
href="https://github.com/eslint/eslint/commit/5fbcf5958b897cc4df5d652924d18428db37f7ee"><code>5fbcf59</code></a>
docs: remove <code>sourceType</code> from ts playground link (<a
href="https://redirect.github.com/eslint/eslint/issues/20477">#20477</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/8702a474659be786b6b1392e5e7c0c56355ae4a4"><code>8702a47</code></a>
docs: Update README</li>
<li><a
href="https://github.com/eslint/eslint/commit/ddeaded2ab36951383ff67c60fb64ec68d29a46a"><code>ddeaded</code></a>
docs: Update README</li>
<li><a
href="https://github.com/eslint/eslint/commit/8120e30f833474f47acc061d24d164e9f022264f"><code>8120e30</code></a>
refactor: extract no unmodified loop condition (<a
href="https://redirect.github.com/eslint/eslint/issues/20679">#20679</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/46e8469786be1b2bbb522100e1d44624d98d3745"><code>46e8469</code></a>
chore: update dependency markdownlint-cli2 to ^0.22.0 (<a
href="https://redirect.github.com/eslint/eslint/issues/20697">#20697</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/eslint/eslint/compare/v10.1.0...v10.2.0">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 19:12:46 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ae341596f3 build(deps): Bump pg from 8.18.0 to 8.20.0 (#150)
Bumps
[pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg) from
8.18.0 to 8.20.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md">pg's
changelog</a>.</em></p>
<blockquote>
<h2>pg@8.20.0</h2>
<ul>
<li>Add <a
href="https://redirect.github.com/brianc/node-postgres/pull/3620">onConnect</a>
callback to pg.Pool constructor options allowing for async
initialization of newly created &amp; connected pooled clients.</li>
</ul>
<h2>pg@8.19.0</h2>
<ul>
<li><a
href="https://redirect.github.com/brianc/node-postgres/pull/3603">Deprecate
interal query queue</a>.</li>
<li>Pass connection parameters <a
href="https://redirect.github.com/brianc/node-postgres/pull/3602">to
password callback</a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/brianc/node-postgres/commit/c9070cc8d526fca65780cedc25c1966b57cf7532"><code>c9070cc</code></a>
Publish</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/ad36e3c9e80fae771d636328420cebe7d544baae"><code>ad36e3c</code></a>
fix: typo in deprecation notice for <code>client.query()</code> (<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/3618">#3618</a>)</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/f2d7d1146cc87024a5fa503dce13c59ff5196d26"><code>f2d7d11</code></a>
Publish</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/5a4bafc2b06fe4f12e83be723bf783a171d1959b"><code>5a4bafc</code></a>
Deprecate Client's internal query queue (<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/3603">#3603</a>)</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/a215bfb5bac4b8b12cd69c9a7f5807eb628a8771"><code>a215bfb</code></a>
Typo fix in PgPass deprecation (funciton) (<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/3605">#3605</a>)</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/01e05567207872d22f486881300c1ebc2eb48727"><code>01e0556</code></a>
fix(pg-query-stream): invoke <code>this.callback</code> on cursor
end/error (<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/2810">#2810</a>)</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/e6e36920075e2c8b2f9ee5d085c7059b80d39fc8"><code>e6e3692</code></a>
Pass connection parameters to password callback (<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/3602">#3602</a>)</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/d80d883944d818234b09f85b3844061ae2d9b906"><code>d80d883</code></a>
test: Fix TLS connection test ending too early</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/f332f283e923d137fa0499d121b79fbaedaf7de1"><code>f332f28</code></a>
fix: Connection timeout handling for native clients in connected state
(<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/3512">#3512</a>)</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/b2e9cb13e29f1054ddfa6feba4d27949ec6969ff"><code>b2e9cb1</code></a>
Remove testAsync - its redundant (<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/3588">#3588</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/brianc/node-postgres/commits/pg@8.20.0/packages/pg">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 19:10:19 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> c63bf09478 build(deps-dev): Bump @types/node from 24.12.0 to 24.12.2 (#148)
Bumps
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
from 24.12.0 to 24.12.2.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 19:05:45 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> c772f6ae56 build(deps-dev): Bump @vitejs/plugin-react-swc from 4.2.3 to 4.3.0 (#129)
Bumps
[@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc)
from 4.2.3 to 4.3.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/releases"><code>@​vitejs/plugin-react-swc</code>'s
releases</a>.</em></p>
<blockquote>
<h2>plugin-react-swc@4.3.0</h2>
<h3>Add Vite 8 to peerDependencies range <a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1142">#1142</a></h3>
<p>This plugin is compatible with Vite 8.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc/CHANGELOG.md"><code>@​vitejs/plugin-react-swc</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>4.3.0 (2026-03-12)</h2>
<h3>Add Vite 8 to peerDependencies range <a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/1142">#1142</a></h3>
<p>This plugin is compatible with Vite 8.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/vitejs/vite-plugin-react/commits/v4.3.0/packages/plugin-react-swc">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 18:54:56 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> d5e7217b4f build(deps-dev): Bump jsdom from 28.1.0 to 29.0.2 (#145)
Bumps [jsdom](https://github.com/jsdom/jsdom) from 28.1.0 to 29.0.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/jsdom/jsdom/releases">jsdom's
releases</a>.</em></p>
<blockquote>
<h2>v29.0.2</h2>
<ul>
<li>Significantly improved and sped up <code>getComputedStyle()</code>.
Computed value rules are now applied across a broader set of properties,
and include fixes related to inheritance, defaulting keywords, custom
properties, and color-related values such as <code>currentcolor</code>
and system colors. (<a
href="https://github.com/asamuzaK"><code>@​asamuzaK</code></a>)</li>
<li>Fixed CSS <code>'background</code>' and <code>'border'</code>
shorthand parsing. (<a
href="https://github.com/asamuzaK"><code>@​asamuzaK</code></a>)</li>
</ul>
<h2>v29.0.1</h2>
<ul>
<li>Fixed CSS parsing of <code>'border'</code>,
<code>'background'</code>, and their sub-shorthands containing keywords
or <code>var()</code>. (<a
href="https://github.com/asamuzaK"><code>@​asamuzaK</code></a>)</li>
<li>Fixed <code>getComputedStyle()</code> to return a more functional
<code>CSSStyleDeclaration</code> object, including indexed access
support, which regressed in v29.0.0.</li>
</ul>
<h2>v29.0.0</h2>
<p>Breaking changes:</p>
<ul>
<li>Node.js v22.13.0+ is now the minimum supported v22 version (was
v22.12.0+).</li>
</ul>
<p>Other changes:</p>
<ul>
<li>Overhauled the CSSOM implementation, replacing the <a
href="https://www.npmjs.com/package/@acemir/cssom"><code>@acemir/cssom</code></a>
and <a
href="https://github.com/jsdom/cssstyle"><code>cssstyle</code></a>
dependencies with fresh internal implementations built on webidl2js
wrappers and the <a
href="https://www.npmjs.com/package/css-tree"><code>css-tree</code></a>
parser. Serialization, parsing, and API behavior is improved in various
ways, especially around edge cases.</li>
<li>Added <code>CSSCounterStyleRule</code> and
<code>CSSNamespaceRule</code> to jsdom <code>Window</code>s.</li>
<li>Added <code>cssMediaRule.matches</code> and
<code>cssSupportsRule.matches</code> getters.</li>
<li>Added proper media query parsing in <code>MediaList</code>, using
<code>css-tree</code> instead of naive comma-splitting. Invalid queries
become <code>&quot;not all&quot;</code> per spec.</li>
<li>Added <code>cssKeyframeRule.keyText</code> getter/setter
validation.</li>
<li>Added <code>cssStyleRule.selectorText</code> setter validation:
invalid selectors are now rejected.</li>
<li>Added <code>styleSheet.ownerNode</code>,
<code>styleSheet.href</code>, and <code>styleSheet.title</code>.</li>
<li>Added bad port blocking per the <a
href="https://fetch.spec.whatwg.org/#bad-port">fetch specification</a>,
preventing fetches to commonly-abused ports.</li>
<li>Improved <code>Document</code> initialization performance by lazily
initializing the CSS selector engine, avoiding ~0.5 ms of overhead per
<code>Document</code>. (<a
href="https://github.com/thypon"><code>@​thypon</code></a>)</li>
<li>Fixed a memory leak when stylesheets were removed from the
document.</li>
<li>Fixed <code>CSSStyleDeclaration</code> modifications to properly
trigger custom element reactions.</li>
<li>Fixed nested <code>@media</code> rule parsing.</li>
<li>Fixed <code>CSSStyleSheet</code>'s &quot;disallow modification&quot;
flag not being checked in all mutation methods.</li>
<li>Fixed <code>XMLHttpRequest</code>'s <code>response</code> getter
returning parsed JSON during the <code>LOADING</code> state instead of
<code>null</code>.</li>
<li>Fixed <code>getComputedStyle()</code> crashing in XHTML documents
when stylesheets contained at-rules such as <code>@page</code> or
<code>@font-face</code>.</li>
<li>Fixed a potential hang in synchronous <code>XMLHttpRequest</code>
caused by a race condition with the worker thread's idle timeout.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/jsdom/jsdom/commit/2a1e2cdb443e276b28ca49937cf7a7d6fa0a4806"><code>2a1e2cd</code></a>
29.0.2</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/4097d66ba188805a408b5186b4b8036bf582b40f"><code>4097d66</code></a>
Resolve computed CSS values lazily in CSSStyleDeclaration</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/cf5523ff92978fc08f7e40c0f44053946101d064"><code>cf5523f</code></a>
Add more test cases for nested color-mix with currentColor</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/b33b61657e563ec841cb7a29c98ad236cc71c0b0"><code>b33b616</code></a>
Add test that getComputedStyle() works with !important</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/6bf559c416654641d3ca197982d646eac6de85ae"><code>6bf559c</code></a>
Add test for custom property inheritance in computed styles</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/68176571d00c50441fc3a428e1315fc1fb3b2bab"><code>6817657</code></a>
Fix border shorthand handling</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/470f5c5943d001f9abf8396734fc0c6f11174784"><code>470f5c5</code></a>
Consolidate color helpers</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/3db53cb2cb14aef35717cbec75b6bd638b1224a7"><code>3db53cb</code></a>
Fix background shorthand handlers</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/678e84093ad44b444be6e0317b84396832ff39c6"><code>678e840</code></a>
Remove some longhand property files</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/d526a07432982dcb89597e469c0fb00ba54884bb"><code>d526a07</code></a>
Add regression test for getComputedStyle() liveness</li>
<li>Additional commits viewable in <a
href="https://github.com/jsdom/jsdom/compare/v28.1.0...v29.0.2">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by [GitHub Actions](<a
href="https://www.npmjs.com/~GitHub">https://www.npmjs.com/~GitHub</a>
Actions), a new releaser for jsdom since your current version.</p>
</details>
<details>
<summary>Install script changes</summary>
<p>This version modifies <code>prepare</code> script that runs during
installation. Review the package contents before updating.</p>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 18:46:33 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 672777a7e1 build(deps-dev): Bump typescript-eslint from 8.58.0 to 8.58.1 (#157)
Bumps
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
from 8.58.0 to 8.58.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.58.1</h2>
<h2>8.58.1 (2026-04-08)</h2>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unused-vars] fix false negative
for type predicate parameter (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12004">#12004</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>MinJae <a
href="https://github.com/Ju-MINJAE"><code>@​Ju-MINJAE</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.58.1">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.58.1 (2026-04-08)</h2>
<p>This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.58.1">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/5311ed312eadf4e238324f2726ae0b1f3f2206e6"><code>5311ed3</code></a>
chore(release): publish 8.58.1</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.58.1/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 18:43:11 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 3380ee97cc build(deps): Bump @tailwindcss/vite from 4.2.1 to 4.2.2 (#155)
Bumps
[@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite)
from 4.2.1 to 4.2.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/releases"><code>@​tailwindcss/vite</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v4.2.2</h2>
<h3>Added</h3>
<ul>
<li>Support Vite 8 in <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19790">#19790</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Don't crash when candidates contain prototype properties like
<code>row-constructor</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19725">#19725</a>)</li>
<li>Canonicalize <code>calc(var(--spacing)*…)</code> expressions into
<code>--spacing(…)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19769">#19769</a>)</li>
<li>Fix crash in canonicalization step when handling utilities
containing <code>@property</code> at-rules (e.g. <code>shadow-sm
border</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19727">#19727</a>)</li>
<li>Skip full reload for server only modules scanned by client CSS when
using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19745">#19745</a>)</li>
<li>Improve canonicalization for bare values exceeding default spacing
scale suggestions (e.g. <code>w-1234 h-1234</code> →
<code>size-1234</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19809">#19809</a>)</li>
<li>Fix canonicalization resulting in empty list (e.g. <code>w-5 h-5
size-5</code> → <code>''</code> instead of <code>size-5</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19812">#19812</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md"><code>@​tailwindcss/vite</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>[4.2.2] - 2026-03-18</h2>
<h3>Fixed</h3>
<ul>
<li>Don't crash when candidates contain prototype properties like
<code>row-constructor</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19725">#19725</a>)</li>
<li>Canonicalize <code>calc(var(--spacing)*…)</code> expressions into
<code>--spacing(…)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19769">#19769</a>)</li>
<li>Fix crash in canonicalization step when handling utilities
containing <code>@property</code> at-rules (e.g. <code>shadow-sm
border</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19727">#19727</a>)</li>
<li>Skip full reload for server only modules scanned by client CSS when
using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19745">#19745</a>)</li>
<li>Add support for Vite 8 in <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19790">#19790</a>)</li>
<li>Improve canonicalization for bare values exceeding default spacing
scale suggestions (e.g. <code>w-1234 h-1234</code> →
<code>size-1234</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19809">#19809</a>)</li>
<li>Fix canonicalization resulting in empty list (e.g. <code>w-5 h-5
size-5</code> → <code>''</code> instead of <code>size-5</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19812">#19812</a>)</li>
<li>Resolve tsconfig paths to allow for <code>@import
'@/path/to/file';</code> when using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19803">#19803</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/d596b0c43d36ad5099c983930fb155e089cbc291"><code>d596b0c</code></a>
4.2.2 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19821">#19821</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/faa5e8849be45e1009dc1d0f862ca782ee0a1ee9"><code>faa5e88</code></a>
Cleanup inconsistencies related to (regex) escapes (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19804">#19804</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/59b0329f858dd8a25f64dfa55fb971aa6e74c32a"><code>59b0329</code></a>
Add support for Vite 8 in <code>@tailwindcss/vite</code> (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19790">#19790</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/bf441a799f67df1596c2cf40eda30ddb50859607"><code>bf441a7</code></a>
fix(vite): skip full reload for server only modules scanned by client
css (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/1">#1</a>...</li>
<li>See full diff in <a
href="https://github.com/tailwindlabs/tailwindcss/commits/v4.2.2/packages/@tailwindcss-vite">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 18:41:54 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> baf45b7e21 build(deps): Bump axios-cache-interceptor from 1.11.4 to 1.12.0 (#160)
Bumps
[axios-cache-interceptor](https://github.com/arthurfiorette/axios-cache-interceptor)
from 1.11.4 to 1.12.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/releases">axios-cache-interceptor's
releases</a>.</em></p>
<blockquote>
<h2>v1.12.0</h2>
<h2>What's Changed</h2>
<ul>
<li>build(deps-dev): bump tsdown from 0.19.0 to 0.20.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1173">arthurfiorette/axios-cache-interceptor#1173</a></li>
<li>build(deps-dev): bump <code>@​biomejs/biome</code> from 2.3.11 to
2.3.12 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1175">arthurfiorette/axios-cache-interceptor#1175</a></li>
<li>build(deps-dev): bump <code>@​biomejs/biome</code> from 2.3.12 to
2.3.13 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1177">arthurfiorette/axios-cache-interceptor#1177</a></li>
<li>build(deps-dev): bump <code>@​types/node</code> from 24.10.9 to
24.10.10 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1180">arthurfiorette/axios-cache-interceptor#1180</a></li>
<li>Move tests to TS native by <a
href="https://github.com/arthurfiorette"><code>@​arthurfiorette</code></a>
in <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1197">arthurfiorette/axios-cache-interceptor#1197</a></li>
<li>fix: log debug message when non-Axios adapter errors leave deferred
unsettled by <a
href="https://github.com/Copilot"><code>@​Copilot</code></a> in <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1196">arthurfiorette/axios-cache-interceptor#1196</a></li>
<li>build(deps): bump rollup from 4.46.2 to 4.59.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1194">arthurfiorette/axios-cache-interceptor#1194</a></li>
<li>feat: add optional manual interceptor registration by <a
href="https://github.com/arthurfiorette"><code>@​arthurfiorette</code></a>
in <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1199">arthurfiorette/axios-cache-interceptor#1199</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/compare/v1.11.4...v1.12.0">https://github.com/arthurfiorette/axios-cache-interceptor/compare/v1.11.4...v1.12.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/blob/main/CHANGELOG.md">axios-cache-interceptor's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/compare/v1.11.4...v1.12.0">v1.12.0</a></h2>
<h3>Merged</h3>
<ul>
<li>build(deps): bump rollup from 4.46.2 to 4.59.0 <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1194"><code>[#1194](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1194)</code></a></li>
<li>fix: log debug message when non-Axios adapter errors leave deferred
unsettled <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1196"><code>[#1196](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1196)</code></a></li>
<li>Move tests to TS native <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1197"><code>[#1197](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1197)</code></a></li>
<li>build(deps-dev): bump <code>@​types/node</code> from 24.10.9 to
24.10.10 <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1180"><code>[#1180](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1180)</code></a></li>
<li>build(deps-dev): bump <code>@​biomejs/biome</code> from 2.3.12 to
2.3.13 <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1177"><code>[#1177](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1177)</code></a></li>
<li>build(deps-dev): bump <code>@​biomejs/biome</code> from 2.3.11 to
2.3.12 <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1175"><code>[#1175](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1175)</code></a></li>
<li>build(deps-dev): bump tsdown from 0.19.0 to 0.20.1 <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1173"><code>[#1173](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1173)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>Add Serena and AGENTS.md files <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/5c962bc34509e367a3504a8cdad79dee3836050f"><code>5c962bc</code></a></li>
<li>Add URL and public key to context7.json <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/e67ea83035253d7a3d174db93fcfccb0b4d0c7ef"><code>e67ea83</code></a></li>
<li>code <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/f826f2fc9c55ea1e1dbce1582f07a3b3d85e72dd"><code>f826f2f</code></a></li>
<li>Fix formatting <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/440d7b520c71982251e34be94b5589eab3f53ec6"><code>440d7b5</code></a></li>
<li>Improvements to documentation <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/8deb45a681ad1507aaa3f55664359f6fc592dbad"><code>8deb45a</code></a></li>
<li>Pin nodejs version to 24.13 <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/bda5670968ece8a350ea33fd12fadf889dccb351"><code>bda5670</code></a></li>
<li>Update changelog <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/9a575831849f31b6bc562c98ab82acae02b12409"><code>9a57583</code></a></li>
<li>Update dependencies <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/956ff1f86f767ff354bcfc29b1ddce42dade878e"><code>956ff1f</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/8ab3e8ccc705c9f18c85c610d491939285e38b15"><code>8ab3e8c</code></a>
1.12.0</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/71c5ebac146da451dfc2f977f145a69fe4ce19ea"><code>71c5eba</code></a>
feat: add optional manual interceptor registration (<a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/issues/1199">#1199</a>)</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/4636ceba1ec25ec5620bfa25763d9f4090f61195"><code>4636ceb</code></a>
build(deps): bump rollup from 4.46.2 to 4.59.0 (<a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/issues/1194">#1194</a>)</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/2c2268f4fa1a9fe52ee9125fba737784b8ecf040"><code>2c2268f</code></a>
fix: log debug message when non-Axios adapter errors leave deferred
unsettled...</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/9a575831849f31b6bc562c98ab82acae02b12409"><code>9a57583</code></a>
Update changelog</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/86b0f56727d0a816726e01026a56e35b823a8e73"><code>86b0f56</code></a>
Move tests to TS native (<a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/issues/1197">#1197</a>)</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/bda5670968ece8a350ea33fd12fadf889dccb351"><code>bda5670</code></a>
Pin nodejs version to 24.13</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/f826f2fc9c55ea1e1dbce1582f07a3b3d85e72dd"><code>f826f2f</code></a>
code</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/9a296504f3b4ef61c8aea787c4078cf01d35ff91"><code>9a29650</code></a>
build(deps-dev): bump <code>@​types/node</code> from 24.10.9 to 24.10.10
(<a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/issues/1180">#1180</a>)</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/8deb45a681ad1507aaa3f55664359f6fc592dbad"><code>8deb45a</code></a>
Improvements to documentation</li>
<li>Additional commits viewable in <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/compare/v1.11.4...v1.12.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=axios-cache-interceptor&package-manager=npm_and_yarn&previous-version=1.11.4&new-version=1.12.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 18:18:25 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> fc4dc9d010 ci(deps): Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (#144)
Bumps
[peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request)
from 8.1.0 to 8.1.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/peter-evans/create-pull-request/releases">peter-evans/create-pull-request's
releases</a>.</em></p>
<blockquote>
<h2>Create Pull Request v8.1.1</h2>
<h2>What's Changed</h2>
<ul>
<li>build(deps-dev): bump the npm group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4305">peter-evans/create-pull-request#4305</a></li>
<li>build(deps): bump minimatch by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4311">peter-evans/create-pull-request#4311</a></li>
<li>build(deps): bump the github-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4316">peter-evans/create-pull-request#4316</a></li>
<li>build(deps): bump <code>@​tootallnate/once</code> and
jest-environment-jsdom by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4323">peter-evans/create-pull-request#4323</a></li>
<li>build(deps-dev): bump undici from 6.23.0 to 6.24.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4328">peter-evans/create-pull-request#4328</a></li>
<li>build(deps-dev): bump flatted from 3.3.1 to 3.4.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4334">peter-evans/create-pull-request#4334</a></li>
<li>build(deps): bump picomatch by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4339">peter-evans/create-pull-request#4339</a></li>
<li>build(deps-dev): bump handlebars from 4.7.8 to 4.7.9 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4344">peter-evans/create-pull-request#4344</a></li>
<li>build(deps-dev): bump the npm group with 3 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4349">peter-evans/create-pull-request#4349</a></li>
<li>fix: retry post-creation API calls on 422 eventual consistency
errors by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4356">peter-evans/create-pull-request#4356</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v8.1.0...v8.1.1">https://github.com/peter-evans/create-pull-request/compare/v8.1.0...v8.1.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/5f6978faf089d4d20b00c7766989d076bb2fc7f1"><code>5f6978f</code></a>
fix: retry post-creation API calls on 422 eventual consistency errors
(<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4356">#4356</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/d32e88dac789dcc7906e7d26f69f24116fa9c97d"><code>d32e88d</code></a>
build(deps-dev): bump the npm group with 3 updates (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4349">#4349</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/8170bccad11c0df62542c04dcaefe36d342dfd39"><code>8170bcc</code></a>
build(deps-dev): bump handlebars from 4.7.8 to 4.7.9 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4344">#4344</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/00418193b417f888dbf1d993c5c0d31d27fdc7de"><code>0041819</code></a>
build(deps): bump picomatch (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4339">#4339</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/b993918c8536b6d44706130734d5456879762b27"><code>b993918</code></a>
build(deps-dev): bump flatted from 3.3.1 to 3.4.2 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4334">#4334</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/36d7c8468b48f9c2f8f29e260e82f10d4b90d2bd"><code>36d7c84</code></a>
build(deps-dev): bump undici from 6.23.0 to 6.24.0 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4328">#4328</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/a45d1fb447fcaf601166e405fd4f335cde1a8aa8"><code>a45d1fb</code></a>
build(deps): bump <code>@​tootallnate/once</code> and
jest-environment-jsdom (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4323">#4323</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/3499eb61835cc0015c0b786e203d74b1e8f55e43"><code>3499eb6</code></a>
build(deps): bump the github-actions group with 2 updates (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4316">#4316</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/3f3b473b8c148f5a7520efb4d1f9a70eea3d9d1f"><code>3f3b473</code></a>
build(deps): bump minimatch (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4311">#4311</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/6699836a213cf8b28c4f0408a404a6ac79d4458a"><code>6699836</code></a>
build(deps-dev): bump the npm group with 2 updates (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4305">#4305</a>)</li>
<li>See full diff in <a
href="https://github.com/peter-evans/create-pull-request/compare/c0f553fe549906ede9cf27b5156039d195d2ece0...5f6978faf089d4d20b00c7766989d076bb2fc7f1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=peter-evans/create-pull-request&package-manager=github_actions&previous-version=8.1.0&new-version=8.1.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 18:13:17 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 805e668715 build(deps-dev): Bump prettier from 3.8.1 to 3.8.2 (#154)
Bumps [prettier](https://github.com/prettier/prettier) from 3.8.1 to
3.8.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/prettier/prettier/releases">prettier's
releases</a>.</em></p>
<blockquote>
<h2>3.8.2</h2>
<ul>
<li>Support Angular v21.2</li>
</ul>
<p>🔗 <a
href="https://github.com/prettier/prettier/blob/main/CHANGELOG.md#382">Changelog</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/prettier/prettier/blob/main/CHANGELOG.md">prettier's
changelog</a>.</em></p>
<blockquote>
<h1>3.8.2</h1>
<p><a
href="https://github.com/prettier/prettier/compare/3.8.1...3.8.2">diff</a></p>
<h4>Angular: Support Angular v21.2 (<a
href="https://redirect.github.com/prettier/prettier/pull/18722">#18722</a>,
<a
href="https://redirect.github.com/prettier/prettier/pull/19034">#19034</a>
by <a href="https://github.com/fisker"><code>@​fisker</code></a>)</h4>
<p>Exhaustive typechecking with <code>@default never;</code></p>
<!-- raw HTML omitted -->
<pre lang="html"><code>&lt;!-- Input --&gt;
@switch (foo) {
  @case (1) {}
  @default never;
}
<p>&lt;!-- Prettier 3.8.1 --&gt;
SyntaxError: Incomplete block &quot;default never&quot;. If you meant to
write the @ character, you should use the &quot;&amp;<a
href="https://redirect.github.com/prettier/prettier/issues/64">#64</a>;&quot;
HTML entity instead. (3:3)</p>
<p>&lt;!-- Prettier 3.8.2 --&gt;
<a href="https://github.com/switch"><code>@​switch</code></a> (foo) {
<a href="https://github.com/case"><code>@​case</code></a> (1) {}
<a href="https://github.com/default"><code>@​default</code></a> never;
}
</code></pre></p>
<p><code>arrow function</code> and <code>instanceof</code>
expressions.</p>
<!-- raw HTML omitted -->
<pre lang="html"><code>&lt;!-- Input --&gt;
@let fn = (a) =&gt;        a?    1:2;
<p>{{ fn ( a         instanceof b)}}</p>
<p>&lt;!-- Prettier 3.8.1 --&gt;
<a href="https://github.com/let"><code>@​let</code></a> fn = (a) =&gt;
a? 1:2;</p>
<p>{{ fn ( a         instanceof b)}}</p>
<p>&lt;!-- Prettier 3.8.2 --&gt;
<a href="https://github.com/let"><code>@​let</code></a> fn = (a) =&gt;
(a ? 1 : 2);</p>
<p>{{ fn(a instanceof b) }}
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/prettier/prettier/commit/b31557cf331a02acf83e7e29d1001b070189a0d9"><code>b31557c</code></a>
Release 3.8.2</li>
<li><a
href="https://github.com/prettier/prettier/commit/96bbaeda0525bf758e464aed2f939d739a85c315"><code>96bbaed</code></a>
Support Angular v21.2 (<a
href="https://redirect.github.com/prettier/prettier/issues/18722">#18722</a>)</li>
<li><a
href="https://github.com/prettier/prettier/commit/881360b92b3cfa39ffa0c0ee03bb4319079849a6"><code>881360b</code></a>
Support <code>default never</code> in Angular v21.2 (<a
href="https://redirect.github.com/prettier/prettier/issues/19034">#19034</a>)</li>
<li><a
href="https://github.com/prettier/prettier/commit/07d67240f7a0f2d65014e00395b342bbec5db31b"><code>07d6724</code></a>
Bump Prettier dependency to 3.8.1</li>
<li><a
href="https://github.com/prettier/prettier/commit/8b4a53ab3daddfe9c10c52fd5785a6a718770c34"><code>8b4a53a</code></a>
Clean changelog_unreleased</li>
<li>See full diff in <a
href="https://github.com/prettier/prettier/compare/3.8.1...3.8.2">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 18:11:33 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 0e45db3041 build(deps-dev): Bump @eslint/compat from 2.0.3 to 2.0.5 (#152)
Bumps
[@eslint/compat](https://github.com/eslint/rewrite/tree/HEAD/packages/compat)
from 2.0.3 to 2.0.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/rewrite/releases"><code>@​eslint/compat</code>'s
releases</a>.</em></p>
<blockquote>
<h2>migrate-config: v2.0.5</h2>
<h2><a
href="https://github.com/eslint/rewrite/compare/migrate-config-v2.0.4...migrate-config-v2.0.5">2.0.5</a>
(2026-04-03)</h2>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​eslint/compat</code> bumped from ^2.0.3 to ^2.0.4</li>
</ul>
</li>
<li>devDependencies
<ul>
<li><code>@​eslint/core</code> bumped from ^1.1.1 to ^1.2.0</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>compat: v2.0.5</h2>
<h2><a
href="https://github.com/eslint/rewrite/compare/compat-v2.0.4...compat-v2.0.5">2.0.5</a>
(2026-04-08)</h2>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​eslint/core</code> bumped from ^1.2.0 to ^1.2.1</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>migrate-config: v2.0.4</h2>
<h2><a
href="https://github.com/eslint/rewrite/compare/migrate-config-v2.0.3...migrate-config-v2.0.4">2.0.4</a>
(2026-03-20)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>update dependency <code>@​eslint/eslintrc</code> to ^3.3.5 (<a
href="https://redirect.github.com/eslint/rewrite/issues/397">#397</a>)
(<a
href="https://github.com/eslint/rewrite/commit/8567c1969f82f5582f86d9202058ac7e41c0d53d">8567c19</a>)</li>
</ul>
<h2>compat: v2.0.4</h2>
<h2><a
href="https://github.com/eslint/rewrite/compare/compat-v2.0.3...compat-v2.0.4">2.0.4</a>
(2026-04-03)</h2>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​eslint/core</code> bumped from ^1.1.1 to ^1.2.0</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/rewrite/blob/main/packages/compat/CHANGELOG.md"><code>@​eslint/compat</code>'s
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/eslint/rewrite/compare/compat-v2.0.4...compat-v2.0.5">2.0.5</a>
(2026-04-08)</h2>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​eslint/core</code> bumped from ^1.2.0 to ^1.2.1</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2><a
href="https://github.com/eslint/rewrite/compare/compat-v2.0.3...compat-v2.0.4">2.0.4</a>
(2026-04-03)</h2>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​eslint/core</code> bumped from ^1.1.1 to ^1.2.0</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/rewrite/commit/d2dbf7b73d01505da89a69b7465e486d8a88aa8f"><code>d2dbf7b</code></a>
chore: release main (<a
href="https://github.com/eslint/rewrite/tree/HEAD/packages/compat/issues/424">#424</a>)</li>
<li><a
href="https://github.com/eslint/rewrite/commit/fe114eed69c5d59d0dd05cda8071a5b98c4daec2"><code>fe114ee</code></a>
chore: release main (<a
href="https://github.com/eslint/rewrite/tree/HEAD/packages/compat/issues/413">#413</a>)</li>
<li><a
href="https://github.com/eslint/rewrite/commit/8863791972f3074b43f3490989e10e293f6295f5"><code>8863791</code></a>
docs: Update README sponsors</li>
<li><a
href="https://github.com/eslint/rewrite/commit/835ddf95b0c421a138b0038f3e38591df9a3fd69"><code>835ddf9</code></a>
docs: Update README sponsors</li>
<li><a
href="https://github.com/eslint/rewrite/commit/8cd3676402f85db8327946a909a7b9c9e3be978f"><code>8cd3676</code></a>
docs: Update README sponsors</li>
<li><a
href="https://github.com/eslint/rewrite/commit/4d734592f3436cf564802a36d4af571e2933fba6"><code>4d73459</code></a>
docs: Update README sponsors</li>
<li><a
href="https://github.com/eslint/rewrite/commit/a6c7a26a852f1606ce10c4642d43ee264f725781"><code>a6c7a26</code></a>
chore: update <code>eslint</code> and <code>eslint-config-eslint</code>
(<a
href="https://github.com/eslint/rewrite/tree/HEAD/packages/compat/issues/401">#401</a>)</li>
<li>See full diff in <a
href="https://github.com/eslint/rewrite/commits/compat-v2.0.5/packages/compat">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@eslint/compat&package-manager=npm_and_yarn&previous-version=2.0.3&new-version=2.0.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 18:09:07 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> b29d7989eb build(deps-dev): Bump turbo from 2.9.3 to 2.9.6 (#149)
Bumps [turbo](https://github.com/vercel/turborepo) from 2.9.3 to 2.9.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vercel/turborepo/releases">turbo's
releases</a>.</em></p>
<blockquote>
<h2>Turborepo v2.9.6</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<h3>create-turbo</h3>
<ul>
<li>chore: Update dependencies found in audits by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/12586">vercel/turborepo#12586</a></li>
</ul>
<h3>Examples</h3>
<ul>
<li>fix: Add missing <code>@types/node</code> to
<code>with-svelte</code> example apps by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/12585">vercel/turborepo#12585</a></li>
</ul>
<h3>Changelog</h3>
<ul>
<li>docs: Add Bun equivalent for updating dependencies by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/12580">vercel/turborepo#12580</a></li>
<li>fix: Mention <code>turbo.json</code> in concurrency error message by
<a href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a>
in <a
href="https://redirect.github.com/vercel/turborepo/pull/12582">vercel/turborepo#12582</a></li>
<li>fix: Surface actionable message when remote cache is requested but
not linked by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/12584">vercel/turborepo#12584</a></li>
<li>chore: Delete agents app by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/12587">vercel/turborepo#12587</a></li>
<li>fix: Load custom CA certificates in fast webpki-only HTTP client by
<a href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a>
in <a
href="https://redirect.github.com/vercel/turborepo/pull/12591">vercel/turborepo#12591</a></li>
<li>docs: Remove pre-release badges by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/12592">vercel/turborepo#12592</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/vercel/turborepo/compare/v2.9.5...v2.9.6">https://github.com/vercel/turborepo/compare/v2.9.5...v2.9.6</a></p>
<h2>Turborepo v2.9.6-canary.3</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<h3>Changelog</h3>
<ul>
<li>chore: Delete agents app by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/12587">vercel/turborepo#12587</a></li>
<li>fix: Load custom CA certificates in fast webpki-only HTTP client by
<a href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a>
in <a
href="https://redirect.github.com/vercel/turborepo/pull/12591">vercel/turborepo#12591</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/vercel/turborepo/compare/v2.9.6-canary.2...v2.9.6-canary.3">https://github.com/vercel/turborepo/compare/v2.9.6-canary.2...v2.9.6-canary.3</a></p>
<h2>Turborepo v2.9.6-canary.2</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<h3>create-turbo</h3>
<ul>
<li>chore: Update dependencies found in audits by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/12586">vercel/turborepo#12586</a></li>
</ul>
<h3>Examples</h3>
<ul>
<li>fix: Add missing <code>@types/node</code> to
<code>with-svelte</code> example apps by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/12585">vercel/turborepo#12585</a></li>
</ul>
<h3>Changelog</h3>
<ul>
<li>fix: Surface actionable message when remote cache is requested but
not linked by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/12584">vercel/turborepo#12584</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/vercel/turborepo/compare/v2.9.6-canary.1...v2.9.6-canary.2">https://github.com/vercel/turborepo/compare/v2.9.6-canary.1...v2.9.6-canary.2</a></p>
<h2>Turborepo v2.9.6-canary.1</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<h3><code>@​turbo/telemetry</code></h3>
<ul>
<li>fix: Suppress telemetry alert when running on Vercel by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/12576">vercel/turborepo#12576</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vercel/turborepo/commit/77bca2be4ead656434f8556f8d8cf0ee8e43542d"><code>77bca2b</code></a>
publish 2.9.6 to registry</li>
<li><a
href="https://github.com/vercel/turborepo/commit/5a8f2e8606b08d5182839b3a671fe7fef58403c4"><code>5a8f2e8</code></a>
release(turborepo): 2.9.6-canary.3 (<a
href="https://redirect.github.com/vercel/turborepo/issues/12593">#12593</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/861efa8925c74673bf5875df88f514b34bfd1a58"><code>861efa8</code></a>
docs: Remove pre-release badges (<a
href="https://redirect.github.com/vercel/turborepo/issues/12592">#12592</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/28db7d051a63b8d06ce825644829a65269008115"><code>28db7d0</code></a>
fix: Load custom CA certificates in fast webpki-only HTTP client (<a
href="https://redirect.github.com/vercel/turborepo/issues/12591">#12591</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/b4121773823f746e587d9c7bba58e0aab98ae2a3"><code>b412177</code></a>
release(turborepo): 2.9.6-canary.2 (<a
href="https://redirect.github.com/vercel/turborepo/issues/12588">#12588</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/9018c65cce5f90d17c3cb46fb2ee78b91237490b"><code>9018c65</code></a>
chore: Delete agents app (<a
href="https://redirect.github.com/vercel/turborepo/issues/12587">#12587</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/5d19186bf3847626988ed4d984d0284c1b5f4401"><code>5d19186</code></a>
chore: Update dependencies found in audits (<a
href="https://redirect.github.com/vercel/turborepo/issues/12586">#12586</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/8338f427ddf6a92c87aa3fd413d45c6be042a37e"><code>8338f42</code></a>
fix: Add missing <code>@types/node</code> to <code>with-svelte</code>
example apps (<a
href="https://redirect.github.com/vercel/turborepo/issues/12585">#12585</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/219b602d24f9b5006e3adf8f86a70c724ae9df70"><code>219b602</code></a>
fix: Surface actionable message when remote cache is requested but not
linked...</li>
<li><a
href="https://github.com/vercel/turborepo/commit/aba98af5dab1b121e0215a09763b21501e58735d"><code>aba98af</code></a>
release(turborepo): 2.9.6-canary.1 (<a
href="https://redirect.github.com/vercel/turborepo/issues/12583">#12583</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vercel/turborepo/compare/v2.9.3...v2.9.6">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 18:07:29 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> b2360c535a build(deps): Bump react-icons from 5.5.0 to 5.6.0 (#132)
Bumps [react-icons](https://github.com/react-icons/react-icons) from
5.5.0 to 5.6.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/react-icons/react-icons/releases">react-icons's
releases</a>.</em></p>
<blockquote>
<h2>v5.6.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump prismjs from 1.29.0 to 1.30.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1033">react-icons/react-icons#1033</a></li>
<li>Bump <code>@​babel/helpers</code> from 7.23.2 to 7.26.10 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1036">react-icons/react-icons#1036</a></li>
<li>Bump http-proxy-middleware from 2.0.7 to 2.0.9 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1041">react-icons/react-icons#1041</a></li>
<li>Bump form-data from 3.0.1 to 3.0.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1058">react-icons/react-icons#1058</a></li>
<li>Bump vite from 5.4.14 to 5.4.20 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1071">react-icons/react-icons#1071</a></li>
<li>upgrade packages by <a
href="https://github.com/kamijin-fanta"><code>@​kamijin-fanta</code></a>
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1075">react-icons/react-icons#1075</a></li>
<li>Bump tar from 6.2.0 to 6.2.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1078">react-icons/react-icons#1078</a></li>
<li>Bump vite from 6.3.6 to 6.4.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1081">react-icons/react-icons#1081</a></li>
<li>Bump tmp from 0.2.3 to 0.2.5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1077">react-icons/react-icons#1077</a></li>
<li>Bump glob from 11.0.3 to 11.1.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1089">react-icons/react-icons#1089</a></li>
<li>Bump <code>@​babel/runtime</code> from 7.23.2 to 7.28.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1073">react-icons/react-icons#1073</a></li>
<li>Bump node-forge from 1.3.1 to 1.3.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1092">react-icons/react-icons#1092</a></li>
<li>Bump mdast-util-to-hast from 13.0.2 to 13.2.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1094">react-icons/react-icons#1094</a></li>
<li>Bump undici from 7.16.0 to 7.18.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1103">react-icons/react-icons#1103</a></li>
<li>Bump devalue from 5.3.2 to 5.6.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1104">react-icons/react-icons#1104</a></li>
<li>Bump h3 from 1.15.4 to 1.15.5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1105">react-icons/react-icons#1105</a></li>
<li>Bump diff from 5.2.0 to 5.2.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1107">react-icons/react-icons#1107</a></li>
<li>Bump webpack from 5.94.0 to 5.104.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1110">react-icons/react-icons#1110</a></li>
<li>Bump jsonpath from 1.1.1 to 1.2.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1113">react-icons/react-icons#1113</a></li>
<li>Bump devalue from 5.6.2 to 5.6.3 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1115">react-icons/react-icons#1115</a></li>
<li>Bump astro from 5.14.1 to 5.15.9 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1091">react-icons/react-icons#1091</a></li>
<li>Bump ajv from 6.12.6 to 6.14.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1116">react-icons/react-icons#1116</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/react-icons/react-icons/compare/v5.5.0...v5.6.0">https://github.com/react-icons/react-icons/compare/v5.5.0...v5.6.0</a></p>
<table>
<thead>
<tr>
<th>Icon Library</th>
<th>License</th>
<th>Version</th>
<th align="right">Count</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://circumicons.com/">Circum Icons</a></td>
<td><a
href="https://github.com/Klarr-Agency/Circum-Icons/blob/main/LICENSE">MPL-2.0
license</a></td>
<td>1.0.0</td>
<td align="right">288</td>
</tr>
<tr>
<td><a href="https://fontawesome.com/">Font Awesome 5</a></td>
<td><a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0
License</a></td>
<td>5.15.4-3-gafecf2a</td>
<td align="right">1612</td>
</tr>
<tr>
<td><a href="https://fontawesome.com/">Font Awesome 6</a></td>
<td><a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0
License</a></td>
<td>6.7.2-1-g840c215</td>
<td align="right">2060</td>
</tr>
<tr>
<td><a href="https://ionicons.com/">Ionicons 4</a></td>
<td><a
href="https://github.com/ionic-team/ionicons/blob/master/LICENSE">MIT</a></td>
<td>4.6.3</td>
<td align="right">696</td>
</tr>
<tr>
<td><a href="https://ionicons.com/">Ionicons 5</a></td>
<td><a
href="https://github.com/ionic-team/ionicons/blob/master/LICENSE">MIT</a></td>
<td>5.5.4</td>
<td align="right">1332</td>
</tr>
<tr>
<td><a href="http://google.github.io/material-design-icons/">Material
Design icons</a></td>
<td><a
href="https://github.com/google/material-design-icons/blob/master/LICENSE">Apache
License Version 2.0</a></td>
<td>4.0.0-142-gbb04090f93</td>
<td align="right">4341</td>
</tr>
<tr>
<td><a href="http://s-ings.com/typicons/">Typicons</a></td>
<td><a href="https://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA
3.0</a></td>
<td>2.1.2</td>
<td align="right">336</td>
</tr>
<tr>
<td><a href="https://octicons.github.com/">Github Octicons
icons</a></td>
<td><a
href="https://github.com/primer/octicons/blob/master/LICENSE">MIT</a></td>
<td>18.3.0</td>
<td align="right">264</td>
</tr>
<tr>
<td><a href="https://feathericons.com/">Feather</a></td>
<td><a
href="https://github.com/feathericons/feather/blob/master/LICENSE">MIT</a></td>
<td>4.29.2</td>
<td align="right">287</td>
</tr>
<tr>
<td><a href="https://lucide.dev/">Lucide</a></td>
<td><a
href="https://github.com/lucide-icons/lucide/blob/main/LICENSE">ISC</a></td>
<td>0.462.0</td>
<td align="right">1541</td>
</tr>
<tr>
<td><a href="https://game-icons.net/">Game Icons</a></td>
<td><a href="https://creativecommons.org/licenses/by/3.0/">CC BY
3.0</a></td>
<td>12920d6565588f0512542a3cb0cdfd36a497f910</td>
<td align="right">4040</td>
</tr>
<tr>
<td><a href="https://erikflowers.github.io/weather-icons/">Weather
Icons</a></td>
<td><a href="http://scripts.sil.org/OFL">SIL OFL 1.1</a></td>
<td>2.0.12</td>
<td align="right">219</td>
</tr>
<tr>
<td><a href="https://vorillaz.github.io/devicons/">Devicons</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>1.8.0</td>
<td align="right">192</td>
</tr>
<tr>
<td><a href="https://github.com/ant-design/ant-design-icons">Ant Design
Icons</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>4.4.2</td>
<td align="right">831</td>
</tr>
<tr>
<td><a href="https://github.com/twbs/icons">Bootstrap Icons</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>1.13.1</td>
<td align="right">2754</td>
</tr>
<tr>
<td><a href="https://github.com/Remix-Design/RemixIcon">Remix
Icon</a></td>
<td><a href="http://www.apache.org/licenses/">Apache License Version
2.0</a></td>
<td>4.6.0</td>
<td align="right">3058</td>
</tr>
<tr>
<td><a href="https://github.com/icons8/flat-color-icons">Flat Color
Icons</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>1.0.2</td>
<td align="right">329</td>
</tr>
<tr>
<td><a
href="https://github.com/grommet/grommet-icons">Grommet-Icons</a></td>
<td><a href="http://www.apache.org/licenses/">Apache License Version
2.0</a></td>
<td>4.14.0</td>
<td align="right">637</td>
</tr>
<tr>
<td><a
href="https://github.com/tailwindlabs/heroicons">Heroicons</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>1.0.6</td>
<td align="right">460</td>
</tr>
<tr>
<td><a href="https://github.com/tailwindlabs/heroicons">Heroicons
2</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>2.2.0</td>
<td align="right">972</td>
</tr>
</tbody>
</table>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/react-icons/react-icons/commit/6501a4156153b396d062deffed5ed2c8eb64a458"><code>6501a41</code></a>
v5.6.0</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/387e78027eeea4ef28df13b732e5906725ee3c2f"><code>387e780</code></a>
update icons</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/fb057e730c8f3bfb9b698ecf7f3f92ee3c43afd9"><code>fb057e7</code></a>
5.5.1-snapshot.0</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/6f7475550af2cacfcfa87e4127b8803a3d5fee6c"><code>6f74755</code></a>
update eslint</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/73c281f3323d720a5cf8ff626ce4dd04e62afb88"><code>73c281f</code></a>
Bump ajv from 6.12.6 to 6.14.0 (<a
href="https://redirect.github.com/react-icons/react-icons/issues/1116">#1116</a>)</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/3f2b26446f3943a2a11c083f2073e20c3f222c7b"><code>3f2b264</code></a>
Bump astro from 5.14.1 to 5.15.9 (<a
href="https://redirect.github.com/react-icons/react-icons/issues/1091">#1091</a>)</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/04adc762186d4adc6428279cc6d9119f2894ae20"><code>04adc76</code></a>
Bump devalue from 5.6.2 to 5.6.3 (<a
href="https://redirect.github.com/react-icons/react-icons/issues/1115">#1115</a>)</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/44a5e85bcc53a51950cb53f25f9f5ed8fdbdafb8"><code>44a5e85</code></a>
Bump jsonpath from 1.1.1 to 1.2.1 (<a
href="https://redirect.github.com/react-icons/react-icons/issues/1113">#1113</a>)</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/e2c1d6ccc98ab477b7aa992bf1f9836b6eca80da"><code>e2c1d6c</code></a>
Bump webpack from 5.94.0 to 5.104.1 (<a
href="https://redirect.github.com/react-icons/react-icons/issues/1110">#1110</a>)</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/f3dca028cec5bb6012b95dc03e3ff0efb71709b5"><code>f3dca02</code></a>
Bump diff from 5.2.0 to 5.2.2 (<a
href="https://redirect.github.com/react-icons/react-icons/issues/1107">#1107</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/react-icons/react-icons/compare/v5.5.0...v5.6.0">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 18:05:39 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> a552a04942 build(deps-dev): Bump tailwindcss from 4.2.1 to 4.2.2 (#128)
Bumps
[tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)
from 4.2.1 to 4.2.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/releases">tailwindcss's
releases</a>.</em></p>
<blockquote>
<h2>v4.2.2</h2>
<h3>Added</h3>
<ul>
<li>Support Vite 8 in <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19790">#19790</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Don't crash when candidates contain prototype properties like
<code>row-constructor</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19725">#19725</a>)</li>
<li>Canonicalize <code>calc(var(--spacing)*…)</code> expressions into
<code>--spacing(…)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19769">#19769</a>)</li>
<li>Fix crash in canonicalization step when handling utilities
containing <code>@property</code> at-rules (e.g. <code>shadow-sm
border</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19727">#19727</a>)</li>
<li>Skip full reload for server only modules scanned by client CSS when
using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19745">#19745</a>)</li>
<li>Improve canonicalization for bare values exceeding default spacing
scale suggestions (e.g. <code>w-1234 h-1234</code> →
<code>size-1234</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19809">#19809</a>)</li>
<li>Fix canonicalization resulting in empty list (e.g. <code>w-5 h-5
size-5</code> → <code>''</code> instead of <code>size-5</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19812">#19812</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md">tailwindcss's
changelog</a>.</em></p>
<blockquote>
<h2>[4.2.2] - 2026-03-18</h2>
<h3>Fixed</h3>
<ul>
<li>Don't crash when candidates contain prototype properties like
<code>row-constructor</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19725">#19725</a>)</li>
<li>Canonicalize <code>calc(var(--spacing)*…)</code> expressions into
<code>--spacing(…)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19769">#19769</a>)</li>
<li>Fix crash in canonicalization step when handling utilities
containing <code>@property</code> at-rules (e.g. <code>shadow-sm
border</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19727">#19727</a>)</li>
<li>Skip full reload for server only modules scanned by client CSS when
using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19745">#19745</a>)</li>
<li>Add support for Vite 8 in <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19790">#19790</a>)</li>
<li>Improve canonicalization for bare values exceeding default spacing
scale suggestions (e.g. <code>w-1234 h-1234</code> →
<code>size-1234</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19809">#19809</a>)</li>
<li>Fix canonicalization resulting in empty list (e.g. <code>w-5 h-5
size-5</code> → <code>''</code> instead of <code>size-5</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19812">#19812</a>)</li>
<li>Resolve tsconfig paths to allow for <code>@import
'@/path/to/file';</code> when using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19803">#19803</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/d596b0c43d36ad5099c983930fb155e089cbc291"><code>d596b0c</code></a>
4.2.2 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19821">#19821</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/2228a57a9e6a5519f390da3f3a323a2cdfd5312f"><code>2228a57</code></a>
Bump Lightning CSS (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19771">#19771</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/f302fce815786dedbb97baf81f666d9a28c55a24"><code>f302fce</code></a>
Fix canonicalization resulting in empty list (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19812">#19812</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/bb2f1705142cc0563e44113e3aef604e7c860c0e"><code>bb2f170</code></a>
Improve canonicalization for bare values exceeding default spacing scale
sugg...</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/faa5e8849be45e1009dc1d0f862ca782ee0a1ee9"><code>faa5e88</code></a>
Cleanup inconsistencies related to (regex) escapes (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19804">#19804</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/d5717f2307d61ff2d5531326e5fbf36f9ad6dabc"><code>d5717f2</code></a>
run prettier</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/51aa9d799c59f79723ba032ed11c8010c4d490a3"><code>51aa9d7</code></a>
fix(canonicalize): handle utilities with empty property maps in collapse
(<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19">#19</a>...</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/c586bd6a94a5415e7154474980d1c664e28b6991"><code>c586bd6</code></a>
Canonicalize <code>calc(var(--spacing)*…)</code> expressions into
<code>--spacing(…)</code> (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19769">#19769</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/9ded4a23de06fb7e8cdc34a3bdf9318e7e8d2bbc"><code>9ded4a2</code></a>
Guard object lookups against inherited prototype properties (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19725">#19725</a>)</li>
<li>See full diff in <a
href="https://github.com/tailwindlabs/tailwindcss/commits/v4.2.2/packages/tailwindcss">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 18:04:12 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 775abe704c build(deps-dev): Bump knip from 6.2.0 to 6.4.1 (#164)
Bumps [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip)
from 6.2.0 to 6.4.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/webpro-nl/knip/releases">knip's
releases</a>.</em></p>
<blockquote>
<h2>Release 6.4.1</h2>
<ul>
<li>license (2d3d8d86ea51f18224c3558a38c28df00113f683)</li>
<li>Handle file path arguments in Bun plugin (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1678">#1678</a>)
(cdbe298efcb226ae4baec6567a0cbb6fdf001ee8)</li>
</ul>
<h2>Release 6.4.0</h2>
<ul>
<li>chore: change license file to have more conventional casing (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1664">#1664</a>)
(ed97e6a37) - thanks <a
href="https://github.com/Zamiell"><code>@​Zamiell</code></a>!</li>
<li>fix: whitelist spelling error (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1666">#1666</a>)
(bcad12012) - thanks <a
href="https://github.com/Zamiell"><code>@​Zamiell</code></a>!</li>
<li>Add Panda CSS plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1671">#1671</a>)
(7ab0d4d88) - thanks <a
href="https://github.com/Faithfinder"><code>@​Faithfinder</code></a>!</li>
<li>fix(rspack): detect plugins from swc-loader (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1675">#1675</a>)
(1431ff3d5) - thanks <a
href="https://github.com/TkDodo"><code>@​TkDodo</code></a>!</li>
<li>docs: fix broken anchor link in DEVELOPMENT.md (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1677">#1677</a>)
(e78c7f609) - thanks <a
href="https://github.com/vincent067"><code>@​vincent067</code></a>!</li>
<li>Fix <code>@jest-environment</code> pragma resolution and limit
pragma scope (3832364e2)</li>
<li>Track Object enumeration to skip enum-member checks in nsTypes mode
(a47aff535)</li>
<li>Cache module resolution by directory + specifier (cefed38c2)</li>
<li>Skip read+parse in walkAndAnalyze when the file cache will hit
(25a7982c1)</li>
<li>Collapse double statSync in FileEntryCache.reconcile
(b63fbd9f2)</li>
<li>Refactor walkAndAnalyze: dedupe cached/uncached paths
(573df54ba)</li>
<li>Cache glob results across <code>--cache</code> runs (6ab8de805)</li>
<li>Mark namespace members used when enumerated via Object.*
(dabf8ce77)</li>
<li>Add config hints for redundant/unregistered extensions (close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1672">#1672</a>,
close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1673">#1673</a>)
(050689575)</li>
<li>Enable Tailwind CSS compiler for <a
href="https://github.com/tailwindcss"><code>@​tailwindcss</code></a>
integrations (close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1674">#1674</a>)
(f3ed14d0e)</li>
<li>Resolve scss path aliases (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1676">#1676</a>)
(00ae83be9)</li>
<li>Re-gen plugins.md (35d8fabaa)</li>
<li>Resolve path.join(__dirname, ...) in Worker/child_process calls (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1660">#1660</a>)
(40a917e3f)</li>
<li>license (608f0ed76)</li>
</ul>
<h2>Release 6.3.1</h2>
<ul>
<li>Fix peer dependency resolution (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1645">#1645</a>)
(0a6e93d16f89bde270a5458c0e76e1c6a996012f) - thanks <a
href="https://github.com/controversial"><code>@​controversial</code></a>!</li>
<li>Support absolute file paths in react-router routes (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1659">#1659</a>)
(97bb283e31eb72da8c60fcede607b22da2929103) - thanks <a
href="https://github.com/mpalmer685"><code>@​mpalmer685</code></a>!</li>
<li>Track namespace imports used as object property values (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1669">#1669</a>)
(c4d6b28df5955abbe9dde40d245ceb5a6e0bc669)</li>
<li>Split plugins/util smoke globs to fit Windows cmd.exe limit
(33ef87d15770d0ee9dc248a640538ce2f0d75a46)</li>
</ul>
<h2>Release 6.3.0</h2>
<ul>
<li>Re-gen sponsorships chart
(83ee4895f36d934bf9f2efaaaf3e141c33c889f8)</li>
<li>Add testimonial (be16c54d379698899e3f10646bb23b280024b989)</li>
<li>Add deferred resolve entries as direct entry paths to avoid ws
exclusion (91a183539fb63528f900b187328c3bba1b161e88)</li>
<li>Add rolldown plugin (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1661">#1661</a>)
(44bfd6273375384dc0b01b2cf673b6ad1b6783f0)</li>
<li>Housekeep plugins a bit
(dc6986821bde185185b730e119d2c528048f9976)</li>
<li>Improve <code>module.register</code> handling
(b9e36ea42d0b2b35d6080aafc94b292a3d7fd711)</li>
<li>Housekeep release script
(f81bd0f5f6630c2cac9934c3b96ace0d42bd2353)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/webpro-nl/knip/commit/ea70d72232b13dca6338105f9fd4ea211595dfba"><code>ea70d72</code></a>
Release knip@6.4.1</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/cdbe298efcb226ae4baec6567a0cbb6fdf001ee8"><code>cdbe298</code></a>
Handle file path arguments in Bun plugin (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1678">#1678</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/baa8ef4e1fe035cde0db3bcf04f9f11171e4e589"><code>baa8ef4</code></a>
Release knip@6.4.0</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/608f0ed765e1a950e54f7d618ce37c7977d8b5cf"><code>608f0ed</code></a>
license</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/40a917e3f412b322d68e1bd78645f86196934d83"><code>40a917e</code></a>
Resolve path.join(__dirname, ...) in Worker/child_process calls (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1660">#1660</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/00ae83be9a8b80589448bbf2defbb27ad3334add"><code>00ae83b</code></a>
Resolve scss path aliases (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1676">#1676</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/f3ed14d0ec4c3a7ec46ed859a88b72538b550582"><code>f3ed14d</code></a>
Enable Tailwind CSS compiler for <a
href="https://github.com/tailwindcss"><code>@​tailwindcss</code></a>
integrations (close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1674">#1674</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/050689575eeb47f31874dbd3ac3c689b54c0551b"><code>0506895</code></a>
Add config hints for redundant/unregistered extensions (close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1672">#1672</a>,
close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1">#1</a>...</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/dabf8ce77676d60534d9e002824f08854ffd4440"><code>dabf8ce</code></a>
Mark namespace members used when enumerated via Object.*</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/6ab8de8057437637b142ce25d7001d8d279d8603"><code>6ab8de8</code></a>
Cache glob results across <code>--cache</code> runs</li>
<li>Additional commits viewable in <a
href="https://github.com/webpro-nl/knip/commits/knip@6.4.1/packages/knip">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 18:01:15 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> fca39d25a8 build(deps-dev): Bump globals from 17.4.0 to 17.5.0 (#163)
Bumps [globals](https://github.com/sindresorhus/globals) from 17.4.0 to
17.5.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sindresorhus/globals/releases">globals's
releases</a>.</em></p>
<blockquote>
<h2>v17.5.0</h2>
<ul>
<li>Update globals (2026-04-12) (<a
href="https://redirect.github.com/sindresorhus/globals/issues/342">#342</a>)
5d84602</li>
</ul>
<hr />
<p><a
href="https://github.com/sindresorhus/globals/compare/v17.4.0...v17.5.0">https://github.com/sindresorhus/globals/compare/v17.4.0...v17.5.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/sindresorhus/globals/commit/b8170c8e1d648291b613c5b39a69652c796fa36c"><code>b8170c8</code></a>
17.5.0</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/5d846029679832931f38ced6381cc95bcb9abd80"><code>5d84602</code></a>
Update globals (2026-04-12) (<a
href="https://redirect.github.com/sindresorhus/globals/issues/342">#342</a>)</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/1b727e5f4cc39121b8e77b9f27574a8ca27391fc"><code>1b727e5</code></a>
Fix build script for ES globals (<a
href="https://redirect.github.com/sindresorhus/globals/issues/341">#341</a>)</li>
<li>See full diff in <a
href="https://github.com/sindresorhus/globals/compare/v17.4.0...v17.5.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=globals&package-manager=npm_and_yarn&previous-version=17.4.0&new-version=17.5.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 17:54:42 +02:00
martin-mfg dbe6aa0033 fix playwright test 2026-04-20 17:09:44 +02:00
martin-mfg b40c4b7915 move env from constants to SvgInline, cleanup 2026-04-20 16:39:17 +02:00
martin-mfg f7b1b9f382 frontend: try loading env explicitly 2026-04-19 20:16:42 +02:00
martin-mfg 5ccb799198 extend debug log 2026-04-19 19:34:02 +02:00
martin-mfg 00f5ac900e Merge remote-tracking branch 'origin/master' 2026-04-19 19:22:14 +02:00
martin-mfg 3b67bd6bcb add debug logs 2026-04-19 19:21:25 +02:00
martin-mfg e58bee0bfd add debug logs 2026-04-19 18:57:55 +02:00
Martin f346dcaa73 small frontend fixes (#162) 2026-04-19 18:36:22 +02:00
Marco Pasqualetti fc4ee7507b test: remove stdout and std from test by mocking logger module (#161)
- Same as #143 
- Resolves
https://github.com/stats-organization/github-stats-extended/pull/143#discussion_r3105155487
- Closes #141
2026-04-19 09:28:46 +02:00
MartinandMarco Pasqualetti d476f8cbe1 extract "core" package, small improvements (#137)
This PR mainly refactors the code by extracting a "core" package which
is then used by the "backend" and "frontend" apps.

Apart from this the PR also contains several smaller changes like fixing
dependabot, upgrading dependencies, aligned "package.json" files, added
tests, ...

addresses step 1 of #32 
closes #136

---------

Co-authored-by: Marco Pasqualetti <marco.pasqualetti@live.com>
2026-04-18 10:37:26 +02:00
martin-mfg 19c39f02af document default regeneration times 2026-03-08 09:42:09 +01:00
Martin 5c4ea2a797 merge master: documentation updates (#127) 2026-03-07 20:52:27 +01:00
Martin 3f7cc7d365 documentation updates (#126) 2026-03-07 20:50:02 +01:00
martin-mfg d8327b0d77 documentation updates 2026-03-07 20:30:37 +01:00
martin-mfg 6dee1fa9b0 Merge remote-tracking branch 'org/next' into merge-next-2 2026-03-07 19:54:54 +01:00
Martin fb62f4e96c document prog_bar_bg_color parameter (#51) 2026-03-07 19:47:54 +01:00
Martin 7d666e2510 merge master: fix dark mode colors in delete modal (#125) 2026-03-07 16:18:04 +01:00
Martin 6405881425 fix dark mode colors in delete modal (#124)
In dark mode, the text and horizontal line in the delete account modal
were not dark enough.
I also removed references to an undefined css class.
2026-03-07 16:09:57 +01:00
Martin 96a18562f0 update release (#122)
Merging the latest `master` into `release` in order to create a new
release.
2026-03-07 14:36:04 +01:00
martin-mfg b64d601d47 Merge remote-tracking branch 'origin/master' into update-release 2026-03-07 14:34:01 +01:00
Martin bb262cf5d7 Merge upstream next branch's history (#123) 2026-03-07 14:33:12 +01:00
martin-mfg 710951e38b Merge remote-tracking branch 'org/next' 2026-03-07 14:28:10 +01:00
martin-mfg 26aec2a4af Merge remote-tracking branch 'origin/master' into release 2026-03-07 12:55:13 +01:00
Martindependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>ricountzero
d921742d3e merge upstream next branch (#121)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: ricountzero <donnutello@protonmail.com>
2026-03-07 12:54:33 +01:00
martin-mfg ad23ab39ed Merge branch 'master' into release 2026-03-07 12:23:50 +01:00
Martin 322d5161d7 configurable intervals for repeating requests (#120) 2026-03-07 10:34:14 +01:00
Martin 84d5fd639c fix missing skeleton in step 3 (#119) 2026-03-06 19:58:49 +01:00
Martin 89cd8224ed fix login, extend backend log (#118) 2026-03-04 21:33:31 +01:00
Martin 19375f592f fix private login, upgrade dependencies (#117)
- fix recognition of private logins
- run `pnpm up` in root and both sub-projects
2026-03-04 15:28:04 +01:00
Martin 44fc344603 enable sourcemap (#116)
Enabling sourcemap to make debugging easier. This is an open source project, so there's nothing to hide anyway.
2026-03-04 12:13:41 +01:00
Martin c6f9a97f8a upgrade to pnpm 10.30.3 (#115) 2026-03-04 10:52:07 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1fb5fc78f4 build(deps): Bump @tailwindcss/vite from 4.1.18 to 4.2.1 (#111)
Bumps
[@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite)
from 4.1.18 to 4.2.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/releases"><code>@​tailwindcss/vite</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v4.2.1</h2>
<h3>Fixed</h3>
<ul>
<li>Allow trailing dash in functional utility names for backwards
compatibility (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19696">#19696</a>)</li>
<li>Properly detect classes containing <code>.</code> characters within
curly braces in MDX files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19711">#19711</a>)</li>
</ul>
<h2>v4.2.0</h2>
<h3>Added</h3>
<ul>
<li>Add mauve, olive, mist, and taupe color palettes to the default
theme (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19627">#19627</a>)</li>
<li>Add <code>@tailwindcss/webpack</code> package to run Tailwind CSS as
a webpack plugin (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19610">#19610</a>)</li>
<li>Add <code>pbs-*</code> and <code>pbe-*</code> utilities for
<code>padding-block-start</code> and <code>padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>mbs-*</code> and <code>mbe-*</code> utilities for
<code>margin-block-start</code> and <code>margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-pbs-*</code> and <code>scroll-pbe-*</code>
utilities for <code>scroll-padding-block-start</code> and
<code>scroll-padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-mbs-*</code> and <code>scroll-mbe-*</code>
utilities for <code>scroll-margin-block-start</code> and
<code>scroll-margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>border-bs-*</code> and <code>border-be-*</code> utilities
for <code>border-block-start</code> and <code>border-block-end</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>inline-*</code>, <code>min-inline-*</code>,
<code>max-inline-*</code> utilities for <code>inline-size</code>,
<code>min-inline-size</code>, and <code>max-inline-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>block-*</code>, <code>min-block-*</code>,
<code>max-block-*</code> utilities for <code>block-size</code>,
<code>min-block-size</code>, and <code>max-block-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>inset-s-*</code>, <code>inset-e-*</code>,
<code>inset-bs-*</code>, <code>inset-be-*</code> utilities for
<code>inset-inline-start</code>, <code>inset-inline-end</code>,
<code>inset-block-start</code>, and <code>inset-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
<li>Add <code>font-features-*</code> utility for
<code>font-feature-settings</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19623">#19623</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Prevent double <code>@supports</code> wrapper for
<code>color-mix</code> values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19450">#19450</a>)</li>
<li>Allow whitespace around <code>@source inline()</code> argument (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19461">#19461</a>)</li>
<li>Emit comment when source maps are saved to files when using
<code>@tailwindcss/cli</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19447">#19447</a>)</li>
<li>Detect utilities containing capital letters followed by numbers (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19465">#19465</a>)</li>
<li>Fix class extraction for Rails' strict locals (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19525">#19525</a>)</li>
<li>Align <code>@utility</code> name validation with Oxide scanner rules
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19524">#19524</a>)</li>
<li>Fix infinite loop when using <code>@variant</code> inside
<code>@custom-variant</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19633">#19633</a>)</li>
<li>Allow multiples of <code>.25</code> in <code>aspect-*</code>
fractions (e.g. <code>aspect-8.5/11</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19688">#19688</a>)</li>
<li>Ensure changes to external files listed via <code>@source</code>
trigger a full page reload when using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19670">#19670</a>)</li>
<li>Improve performance of Oxide scanner in bigger projects by reducing
file system walks (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19632">#19632</a>)</li>
<li>Ensure import aliases in Astro v5 work without crashing when using
<code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/issues/19677">#19677</a>)</li>
<li>Allow escape characters in <code>@utility</code> names to improve
support with formatters such as Biome (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19626">#19626</a>)</li>
<li>Fix incorrect canonicalization results when canonicalizing multiple
times (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19675">#19675</a>)</li>
<li>Add <code>.jj</code> to default ignored content directories (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19687">#19687</a>)</li>
</ul>
<h3>Deprecated</h3>
<ul>
<li>Deprecate <code>start-*</code> and <code>end-*</code> utilities in
favor of <code>inset-s-*</code> and <code>inset-e-*</code> utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md"><code>@​tailwindcss/vite</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>[4.2.1] - 2026-02-23</h2>
<h3>Fixed</h3>
<ul>
<li>Allow trailing dash in functional utility names for backwards
compatibility (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19696">#19696</a>)</li>
<li>Properly detect classes containing <code>.</code> characters within
curly braces in MDX files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19711">#19711</a>)</li>
</ul>
<h2>[4.2.0] - 2026-02-18</h2>
<h3>Added</h3>
<ul>
<li>Add mauve, olive, mist, and taupe color palettes to the default
theme (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19627">#19627</a>)</li>
<li>Add <code>@tailwindcss/webpack</code> package to run Tailwind CSS as
a webpack plugin (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19610">#19610</a>)</li>
<li>Add <code>pbs-*</code> and <code>pbe-*</code> utilities for
<code>padding-block-start</code> and <code>padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>mbs-*</code> and <code>mbe-*</code> utilities for
<code>margin-block-start</code> and <code>margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-pbs-*</code> and <code>scroll-pbe-*</code>
utilities for <code>scroll-padding-block-start</code> and
<code>scroll-padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-mbs-*</code> and <code>scroll-mbe-*</code>
utilities for <code>scroll-margin-block-start</code> and
<code>scroll-margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>border-bs-*</code> and <code>border-be-*</code> utilities
for <code>border-block-start</code> and <code>border-block-end</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>inline-*</code>, <code>min-inline-*</code>,
<code>max-inline-*</code> utilities for <code>inline-size</code>,
<code>min-inline-size</code>, and <code>max-inline-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>block-*</code>, <code>min-block-*</code>,
<code>max-block-*</code> utilities for <code>block-size</code>,
<code>min-block-size</code>, and <code>max-block-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>inset-s-*</code>, <code>inset-e-*</code>,
<code>inset-bs-*</code>, <code>inset-be-*</code> utilities for
<code>inset-inline-start</code>, <code>inset-inline-end</code>,
<code>inset-block-start</code>, and <code>inset-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
<li>Add <code>font-features-*</code> utility for
<code>font-feature-settings</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19623">#19623</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Prevent double <code>@supports</code> wrapper for
<code>color-mix</code> values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19450">#19450</a>)</li>
<li>Allow whitespace around <code>@source inline()</code> argument (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19461">#19461</a>)</li>
<li>Emit comment when source maps are saved to files when using
<code>@tailwindcss/cli</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19447">#19447</a>)</li>
<li>Detect utilities containing capital letters followed by numbers (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19465">#19465</a>)</li>
<li>Fix class extraction for Rails' strict locals (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19525">#19525</a>)</li>
<li>Align <code>@utility</code> name validation with Oxide scanner rules
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19524">#19524</a>)</li>
<li>Fix infinite loop when using <code>@variant</code> inside
<code>@custom-variant</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19633">#19633</a>)</li>
<li>Allow multiples of <code>.25</code> in <code>aspect-*</code>
fractions (e.g. <code>aspect-8.5/11</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19688">#19688</a>)</li>
<li>Ensure changes to external files listed via <code>@source</code>
trigger a full page reload when using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19670">#19670</a>)</li>
<li>Improve performance of Oxide scanner in bigger projects by reducing
file system walks (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19632">#19632</a>)</li>
<li>Ensure import aliases in Astro v5 work without crashing when using
<code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/issues/19677">#19677</a>)</li>
<li>Allow escape characters in <code>@utility</code> names to improve
support with formatters such as Biome (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19626">#19626</a>)</li>
<li>Fix incorrect canonicalization results when canonicalizing multiple
times (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19675">#19675</a>)</li>
<li>Add <code>.jj</code> to default ignored content directories (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19687">#19687</a>)</li>
</ul>
<h3>Deprecated</h3>
<ul>
<li>Deprecate <code>start-*</code> and <code>end-*</code> utilities in
favor of <code>inset-s-*</code> and <code>inset-e-*</code> utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/1dce64ee7ec2e414c845b4e268ac3b9b89aaf0c8"><code>1dce64e</code></a>
4.2.1 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19714">#19714</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/1b16411919457ee47d38910fd07e134e9765eb4c"><code>1b16411</code></a>
4.2.0 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19695">#19695</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/d9fff9f5956433e362dc231ca16dcd77497def76"><code>d9fff9f</code></a>
docs: update package README CI badge to main (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19692">#19692</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/bc6e4b85bf1dce84e2947f81cbb9881a77427de7"><code>bc6e4b8</code></a>
Fallback to <code>config.createResolver</code> for <code>client</code>
and <code>ssr</code> environments in `@...</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/f212b0fc22c3e6f93a5068654e67bd2818109b95"><code>f212b0f</code></a>
fix: restore full page reload for watched external files on Vite 7.1+
(<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19670">#19670</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/8ed67bf5510d8435d2be766b25245abe15b3bcef"><code>8ed67bf</code></a>
Fix Tailwind CSS package README GitHub links (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19644">#19644</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/e3e85b364fc62a19b97a4250854580132e7967c7"><code>e3e85b3</code></a>
[tailwindcss-vite] Add Register dependency messages logline (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/19611">#19611</a>)</li>
<li>See full diff in <a
href="https://github.com/tailwindlabs/tailwindcss/commits/v4.2.1/packages/@tailwindcss-vite">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@tailwindcss/vite&package-manager=npm_and_yarn&previous-version=4.1.18&new-version=4.2.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 10:16:54 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 6b5c12e91c build(deps-dev): Bump eslint-plugin-jsdoc from 62.6.1 to 62.7.1 (#112)
Bumps
[eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from
62.6.1 to 62.7.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gajus/eslint-plugin-jsdoc/releases">eslint-plugin-jsdoc's
releases</a>.</em></p>
<blockquote>
<h2>v62.7.1</h2>
<h2><a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.7.0...v62.7.1">62.7.1</a>
(2026-02-24)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong><code>require-property</code>:</strong> err if user blocks
<code>[@property](https://github.com/property)</code>; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1634">#1634</a>
(<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/23a9f1d32395bade12f4a52912f3e36de70cab3e">23a9f1d</a>)</li>
</ul>
<h2>v62.7.0</h2>
<h1><a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.6.1...v62.7.0">62.7.0</a>
(2026-02-20)</h1>
<h3>Features</h3>
<ul>
<li>support ESLint 10 (<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/d8599fb4c47963a9b991385f6e25c88b8d6599b0">d8599fb</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/23a9f1d32395bade12f4a52912f3e36de70cab3e"><code>23a9f1d</code></a>
fix(<code>require-property</code>): err if user blocks
<code>@property</code>; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1634">#1634</a></li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/bd90efde410bd805f8c2e0106786d0102f974466"><code>bd90efd</code></a>
Merge pull request <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1668">#1668</a>
from gajus/dependabot/npm_and_yarn/ajv-6.14.0</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/eca30902a4389d4021dd5e7111d880446c18dfc4"><code>eca3090</code></a>
chore(deps): bump ajv from 6.12.6 to 6.14.0</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/86bd0be2f940c6e8cf8581d5799481af84d31f90"><code>86bd0be</code></a>
Merge pull request <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1666">#1666</a>
from gajus/gajus-patch-1</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/ba0c8af2511ffe437bae668e820ff8729b98760e"><code>ba0c8af</code></a>
Update funding to brettz9</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/35c574549986b8fe4546a3f6f4dc3673dac04697"><code>35c5745</code></a>
Merge pull request <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1659">#1659</a>
from brettz9/eslint10</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/d8599fb4c47963a9b991385f6e25c88b8d6599b0"><code>d8599fb</code></a>
feat: support ESLint 10</li>
<li>See full diff in <a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.6.1...v62.7.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint-plugin-jsdoc&package-manager=npm_and_yarn&previous-version=62.6.1&new-version=62.7.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 10:16:14 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> ec862595fa build(deps-dev): Bump tailwindcss from 4.1.18 to 4.2.1 (#113)
Bumps
[tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)
from 4.1.18 to 4.2.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/releases">tailwindcss's
releases</a>.</em></p>
<blockquote>
<h2>v4.2.1</h2>
<h3>Fixed</h3>
<ul>
<li>Allow trailing dash in functional utility names for backwards
compatibility (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19696">#19696</a>)</li>
<li>Properly detect classes containing <code>.</code> characters within
curly braces in MDX files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19711">#19711</a>)</li>
</ul>
<h2>v4.2.0</h2>
<h3>Added</h3>
<ul>
<li>Add mauve, olive, mist, and taupe color palettes to the default
theme (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19627">#19627</a>)</li>
<li>Add <code>@tailwindcss/webpack</code> package to run Tailwind CSS as
a webpack plugin (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19610">#19610</a>)</li>
<li>Add <code>pbs-*</code> and <code>pbe-*</code> utilities for
<code>padding-block-start</code> and <code>padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>mbs-*</code> and <code>mbe-*</code> utilities for
<code>margin-block-start</code> and <code>margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-pbs-*</code> and <code>scroll-pbe-*</code>
utilities for <code>scroll-padding-block-start</code> and
<code>scroll-padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-mbs-*</code> and <code>scroll-mbe-*</code>
utilities for <code>scroll-margin-block-start</code> and
<code>scroll-margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>border-bs-*</code> and <code>border-be-*</code> utilities
for <code>border-block-start</code> and <code>border-block-end</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>inline-*</code>, <code>min-inline-*</code>,
<code>max-inline-*</code> utilities for <code>inline-size</code>,
<code>min-inline-size</code>, and <code>max-inline-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>block-*</code>, <code>min-block-*</code>,
<code>max-block-*</code> utilities for <code>block-size</code>,
<code>min-block-size</code>, and <code>max-block-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>inset-s-*</code>, <code>inset-e-*</code>,
<code>inset-bs-*</code>, <code>inset-be-*</code> utilities for
<code>inset-inline-start</code>, <code>inset-inline-end</code>,
<code>inset-block-start</code>, and <code>inset-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
<li>Add <code>font-features-*</code> utility for
<code>font-feature-settings</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19623">#19623</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Prevent double <code>@supports</code> wrapper for
<code>color-mix</code> values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19450">#19450</a>)</li>
<li>Allow whitespace around <code>@source inline()</code> argument (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19461">#19461</a>)</li>
<li>Emit comment when source maps are saved to files when using
<code>@tailwindcss/cli</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19447">#19447</a>)</li>
<li>Detect utilities containing capital letters followed by numbers (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19465">#19465</a>)</li>
<li>Fix class extraction for Rails' strict locals (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19525">#19525</a>)</li>
<li>Align <code>@utility</code> name validation with Oxide scanner rules
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19524">#19524</a>)</li>
<li>Fix infinite loop when using <code>@variant</code> inside
<code>@custom-variant</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19633">#19633</a>)</li>
<li>Allow multiples of <code>.25</code> in <code>aspect-*</code>
fractions (e.g. <code>aspect-8.5/11</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19688">#19688</a>)</li>
<li>Ensure changes to external files listed via <code>@source</code>
trigger a full page reload when using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19670">#19670</a>)</li>
<li>Improve performance of Oxide scanner in bigger projects by reducing
file system walks (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19632">#19632</a>)</li>
<li>Ensure import aliases in Astro v5 work without crashing when using
<code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/issues/19677">#19677</a>)</li>
<li>Allow escape characters in <code>@utility</code> names to improve
support with formatters such as Biome (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19626">#19626</a>)</li>
<li>Fix incorrect canonicalization results when canonicalizing multiple
times (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19675">#19675</a>)</li>
<li>Add <code>.jj</code> to default ignored content directories (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19687">#19687</a>)</li>
</ul>
<h3>Deprecated</h3>
<ul>
<li>Deprecate <code>start-*</code> and <code>end-*</code> utilities in
favor of <code>inset-s-*</code> and <code>inset-e-*</code> utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md">tailwindcss's
changelog</a>.</em></p>
<blockquote>
<h2>[4.2.1] - 2026-02-23</h2>
<h3>Fixed</h3>
<ul>
<li>Allow trailing dash in functional utility names for backwards
compatibility (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19696">#19696</a>)</li>
<li>Properly detect classes containing <code>.</code> characters within
curly braces in MDX files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19711">#19711</a>)</li>
</ul>
<h2>[4.2.0] - 2026-02-18</h2>
<h3>Added</h3>
<ul>
<li>Add mauve, olive, mist, and taupe color palettes to the default
theme (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19627">#19627</a>)</li>
<li>Add <code>@tailwindcss/webpack</code> package to run Tailwind CSS as
a webpack plugin (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19610">#19610</a>)</li>
<li>Add <code>pbs-*</code> and <code>pbe-*</code> utilities for
<code>padding-block-start</code> and <code>padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>mbs-*</code> and <code>mbe-*</code> utilities for
<code>margin-block-start</code> and <code>margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-pbs-*</code> and <code>scroll-pbe-*</code>
utilities for <code>scroll-padding-block-start</code> and
<code>scroll-padding-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>scroll-mbs-*</code> and <code>scroll-mbe-*</code>
utilities for <code>scroll-margin-block-start</code> and
<code>scroll-margin-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>border-bs-*</code> and <code>border-be-*</code> utilities
for <code>border-block-start</code> and <code>border-block-end</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19601">#19601</a>)</li>
<li>Add <code>inline-*</code>, <code>min-inline-*</code>,
<code>max-inline-*</code> utilities for <code>inline-size</code>,
<code>min-inline-size</code>, and <code>max-inline-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>block-*</code>, <code>min-block-*</code>,
<code>max-block-*</code> utilities for <code>block-size</code>,
<code>min-block-size</code>, and <code>max-block-size</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19612">#19612</a>)</li>
<li>Add <code>inset-s-*</code>, <code>inset-e-*</code>,
<code>inset-bs-*</code>, <code>inset-be-*</code> utilities for
<code>inset-inline-start</code>, <code>inset-inline-end</code>,
<code>inset-block-start</code>, and <code>inset-block-end</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
<li>Add <code>font-features-*</code> utility for
<code>font-feature-settings</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19623">#19623</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Prevent double <code>@supports</code> wrapper for
<code>color-mix</code> values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19450">#19450</a>)</li>
<li>Allow whitespace around <code>@source inline()</code> argument (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19461">#19461</a>)</li>
<li>Emit comment when source maps are saved to files when using
<code>@tailwindcss/cli</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19447">#19447</a>)</li>
<li>Detect utilities containing capital letters followed by numbers (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19465">#19465</a>)</li>
<li>Fix class extraction for Rails' strict locals (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19525">#19525</a>)</li>
<li>Align <code>@utility</code> name validation with Oxide scanner rules
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19524">#19524</a>)</li>
<li>Fix infinite loop when using <code>@variant</code> inside
<code>@custom-variant</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19633">#19633</a>)</li>
<li>Allow multiples of <code>.25</code> in <code>aspect-*</code>
fractions (e.g. <code>aspect-8.5/11</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19688">#19688</a>)</li>
<li>Ensure changes to external files listed via <code>@source</code>
trigger a full page reload when using <code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19670">#19670</a>)</li>
<li>Improve performance of Oxide scanner in bigger projects by reducing
file system walks (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19632">#19632</a>)</li>
<li>Ensure import aliases in Astro v5 work without crashing when using
<code>@tailwindcss/vite</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/issues/19677">#19677</a>)</li>
<li>Allow escape characters in <code>@utility</code> names to improve
support with formatters such as Biome (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19626">#19626</a>)</li>
<li>Fix incorrect canonicalization results when canonicalizing multiple
times (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19675">#19675</a>)</li>
<li>Add <code>.jj</code> to default ignored content directories (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19687">#19687</a>)</li>
</ul>
<h3>Deprecated</h3>
<ul>
<li>Deprecate <code>start-*</code> and <code>end-*</code> utilities in
favor of <code>inset-s-*</code> and <code>inset-e-*</code> utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/19613">#19613</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/1dce64ee7ec2e414c845b4e268ac3b9b89aaf0c8"><code>1dce64e</code></a>
4.2.1 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19714">#19714</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/d15d92ca60b2c06a11c2db6a24dfcca18147de59"><code>d15d92c</code></a>
Allow trailing dash in functional utility names (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19696">#19696</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/1b16411919457ee47d38910fd07e134e9765eb4c"><code>1b16411</code></a>
4.2.0 (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19695">#19695</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/6118f4f6a796ece218d145b626770e3fb9163d91"><code>6118f4f</code></a>
Fix/misc docs and tests (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19652">#19652</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/5a4a7eba3a3db4f4a834f37a3e37624fe9c4daa7"><code>5a4a7eb</code></a>
fix(canonicalize): prevent collapse cache pollution across calls (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19675">#19675</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/d0a56128721b7be01703b7879056f38443239fc5"><code>d0a5612</code></a>
Add mauve, olive, mist, and taupe color palettes (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19627">#19627</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/d9fff9f5956433e362dc231ca16dcd77497def76"><code>d9fff9f</code></a>
docs: update package README CI badge to main (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19692">#19692</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/ed52d3e6c9c20ca2a1c23d57d346ac399ebe9400"><code>ed52d3e</code></a>
feat: handle backslash in <code>@utility</code> name (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19626">#19626</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/6eb3b324340f451a14389b7ed97f43a264ad4487"><code>6eb3b32</code></a>
Allow multiples of <code>.25</code> in <code>aspect-*</code> fractions
(<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19688">#19688</a>)</li>
<li><a
href="https://github.com/tailwindlabs/tailwindcss/commit/8ed67bf5510d8435d2be766b25245abe15b3bcef"><code>8ed67bf</code></a>
Fix Tailwind CSS package README GitHub links (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/19644">#19644</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tailwindlabs/tailwindcss/commits/v4.2.1/packages/tailwindcss">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by [GitHub Actions](<a
href="https://www.npmjs.com/~GitHub">https://www.npmjs.com/~GitHub</a>
Actions), a new releaser for tailwindcss since your current version.</p>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tailwindcss&package-manager=npm_and_yarn&previous-version=4.1.18&new-version=4.2.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 10:15:36 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> e05b0b418e build(deps-dev): Bump knip from 5.84.1 to 5.85.0 (#114)
Bumps [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip)
from 5.84.1 to 5.85.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/webpro-nl/knip/releases">knip's
releases</a>.</em></p>
<blockquote>
<h2>Release 5.85.0</h2>
<ul>
<li>Fix require.context regex matching for path-aware patterns (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1547">#1547</a>)
(c33d93ae24dc1304baa49f85b25beb24af803dd8) - thanks <a
href="https://github.com/jstaab"><code>@​jstaab</code></a>!</li>
<li>Make knip compatible with erasableSyntaxOnly (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1541">#1541</a>)
(f63089bdadb2cea47d22fa27b22c16003e1a4b61) - thanks <a
href="https://github.com/wojtekmaj"><code>@​wojtekmaj</code></a>!</li>
<li>feat: add Payload CMS plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1546">#1546</a>)
(58d99de46ee3a9e15cd77e3806b5de55931cebf2) - thanks <a
href="https://github.com/Robot-Inventor"><code>@​Robot-Inventor</code></a>!</li>
<li>Look everywhere for manifest/robots file in next plugin
(9da6205fdc45fdc992919d3e246415829025ea46)</li>
<li>Merge some next glob patterns
(8c5f35fa81ccccc4faceb6a1d8329d562927d450)</li>
<li>Add SAP &amp; Google Gemini to projects using Knip
(c8ab8957ad1f15ee9ff67f13f5029f213e464ada)</li>
<li>Bump remark-preset-webpro &amp; dedupe
(b9372cd7a0dc1a1ab54b7baa7b8a939a399ccc14)</li>
<li>Document CLI usage for LS
(97fe1cfe8a18af145eff9ca1f040e4c756acd270)</li>
<li>fix: tsdown entry compatibility issues <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1550">#1550</a>
(<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1554">#1554</a>)
(95051ebf3aa44a2db722837acf3ce73e03f72fc5) - thanks <a
href="https://github.com/huijiewei"><code>@​huijiewei</code></a>!</li>
<li>Fix incorrect coverage provider being reported (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1552">#1552</a>)
(2d0b5cda41f994116c6e211fc68c95b44c21b2cb) - thanks <a
href="https://github.com/rexxars"><code>@​rexxars</code></a>!</li>
<li>Temp disable npmx in ecosystem run
(a5cd9862943dcca1b217bcec2895553ba23dbe34)</li>
<li>Fix OOM in gitignore walk for large monorepos
(f192a6ba3fbe9fc303f48e3901db918f5bcd5164)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/webpro-nl/knip/commit/e28a3e7ce7e8efaf40b99c9e6a1839647d0a5083"><code>e28a3e7</code></a>
Release knip@5.85.0</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/f192a6ba3fbe9fc303f48e3901db918f5bcd5164"><code>f192a6b</code></a>
Fix OOM in gitignore walk for large monorepos</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/2d0b5cda41f994116c6e211fc68c95b44c21b2cb"><code>2d0b5cd</code></a>
Fix incorrect coverage provider being reported (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1552">#1552</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/95051ebf3aa44a2db722837acf3ce73e03f72fc5"><code>95051eb</code></a>
fix: tsdown entry compatibility issues <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1550">#1550</a>
(<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1554">#1554</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/8c5f35fa81ccccc4faceb6a1d8329d562927d450"><code>8c5f35f</code></a>
Merge some next glob patterns</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/9da6205fdc45fdc992919d3e246415829025ea46"><code>9da6205</code></a>
Look everywhere for manifest/robots file in next plugin</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/58d99de46ee3a9e15cd77e3806b5de55931cebf2"><code>58d99de</code></a>
feat: add Payload CMS plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1546">#1546</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/f63089bdadb2cea47d22fa27b22c16003e1a4b61"><code>f63089b</code></a>
Make knip compatible with erasableSyntaxOnly (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1541">#1541</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/c33d93ae24dc1304baa49f85b25beb24af803dd8"><code>c33d93a</code></a>
Fix require.context regex matching for path-aware patterns (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1547">#1547</a>)</li>
<li>See full diff in <a
href="https://github.com/webpro-nl/knip/commits/knip@5.85.0/packages/knip">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=knip&package-manager=npm_and_yarn&previous-version=5.84.1&new-version=5.85.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 10:13:39 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 5e82c03700 build(deps-dev): Bump @eslint/js from 9.39.2 to 9.39.3 (#110)
Bumps
[@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js)
from 9.39.2 to 9.39.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases"><code>@​eslint/js</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v9.39.3</h2>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/791bf8d7e76ce7ab8c88cb8982658823da4eff27"><code>791bf8d</code></a>
fix: restore TypeScript 4.0 compatibility in types (<a
href="https://github.com/eslint/eslint/tree/HEAD/packages/js/issues/20504">#20504</a>)
(sethamus)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/8594a436c22a0167fe3c2c4109bbdb04e519a014"><code>8594a43</code></a>
chore: upgrade <code>@​eslint/js</code><a
href="https://github.com/9"><code>@​9</code></a>.39.3 (<a
href="https://github.com/eslint/eslint/tree/HEAD/packages/js/issues/20529">#20529</a>)
(Milos Djermanovic)</li>
<li><a
href="https://github.com/eslint/eslint/commit/9ceef92fbd3d1298d9a00483f86897834b88acac"><code>9ceef92</code></a>
chore: package.json update for <code>@​eslint/js</code> release
(Jenkins)</li>
<li><a
href="https://github.com/eslint/eslint/commit/af498c63b9ca065223a425a85afabdcc8451e69b"><code>af498c6</code></a>
chore: ignore <code>/docs/v9.x</code> in link checker (<a
href="https://github.com/eslint/eslint/tree/HEAD/packages/js/issues/20453">#20453</a>)
(Milos Djermanovic)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/9ceef92fbd3d1298d9a00483f86897834b88acac"><code>9ceef92</code></a>
chore: package.json update for <code>@​eslint/js</code> release</li>
<li>See full diff in <a
href="https://github.com/eslint/eslint/commits/v9.39.3/packages/js">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@eslint/js&package-manager=npm_and_yarn&previous-version=9.39.2&new-version=9.39.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 10:09:35 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 45f19db813 build(deps): Bump daisyui from 5.5.18 to 5.5.19 (#108)
Bumps
[daisyui](https://github.com/saadeghi/daisyui/tree/HEAD/packages/daisyui)
from 5.5.18 to 5.5.19.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/saadeghi/daisyui/releases">daisyui's
releases</a>.</em></p>
<blockquote>
<h2>v5.5.19</h2>
<p>🌼 Read changelog: <a
href="https://daisyui.com/docs/changelog/">https://daisyui.com/docs/changelog/</a></p>
<p>📦 Install this update:</p>
<pre lang="bash"><code>npm i -D daisyui@5.5.19
</code></pre>
<p>💚 Thank you for using daisyUI!</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/saadeghi/daisyui/blob/master/CHANGELOG.md">daisyui's
changelog</a>.</em></p>
<blockquote>
<h2>5.5.19 (2026-02-20)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>use logical margins for breadcrumbs so it works in RTL. closes: <a
href="https://redirect.github.com/saadeghi/daisyui/issues/4443">#4443</a>
(<a
href="https://github.com/saadeghi/daisyui/commit/6208471c91234462a365c71f2f4a87e3b5f69ede">6208471</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/saadeghi/daisyui/commit/998bcd99b48793514da6099125186826c430cf8a"><code>998bcd9</code></a>
chore(release): 5.5.19</li>
<li><a
href="https://github.com/saadeghi/daisyui/commit/6208471c91234462a365c71f2f4a87e3b5f69ede"><code>6208471</code></a>
fix: use logical margins for breadcrumbs so it works in RTL. closes: <a
href="https://github.com/saadeghi/daisyui/tree/HEAD/packages/daisyui/issues/4443">#4443</a></li>
<li>See full diff in <a
href="https://github.com/saadeghi/daisyui/commits/v5.5.19/packages/daisyui">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=daisyui&package-manager=npm_and_yarn&previous-version=5.5.18&new-version=5.5.19)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 10:08:41 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 6627fe5978 build(deps-dev): Bump typescript-eslint from 8.56.0 to 8.56.1 (#109)
Bumps
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
from 8.56.0 to 8.56.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.56.1</h2>
<h2>8.56.1 (2026-02-23)</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps): update dependency minimatch to v10.2.2 by <a
href="https://github.com/benmccann"><code>@​benmccann</code></a> in <a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12074">typescript-eslint/typescript-eslint#12074</a></li>
</ul>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.56.1 (2026-02-23)</h2>
<p>This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.56.1">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/96a04a97454cf6b6ae8366711c09333bf6e2327a"><code>96a04a9</code></a>
chore(release): publish 8.56.1</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.56.1/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript-eslint&package-manager=npm_and_yarn&previous-version=8.56.0&new-version=8.56.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 10:08:06 +01:00
Martinandricountzero a57e2d9cdd feature: Add Belarusian language into translation (#107)
based on https://github.com/anuraghazra/github-readme-stats/pull/4824 by
@ricountzero

Co-authored-by: ricountzero <donnutello@protonmail.com>
2026-03-01 19:48:12 +01:00
Martinandricountzero 5fe169cc70 feature: Add Belarusian language into translation (#45)
* feature: Add Belarusian language into translation.

* add Belarusian to readme

---------

Co-authored-by: ricountzero <donnutello@protonmail.com>
2026-03-01 19:30:47 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 0b11026646 build(deps-dev): Bump eslint-plugin-jsdoc from 62.5.5 to 62.6.1 (#102)
Bumps
[eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from
62.5.5 to 62.6.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gajus/eslint-plugin-jsdoc/releases">eslint-plugin-jsdoc's
releases</a>.</em></p>
<blockquote>
<h2>v62.6.1</h2>
<h2><a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.6.0...v62.6.1">62.6.1</a>
(2026-02-19)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong><code>check-param-names</code>:</strong> only fire on
<code>TSPropertySignature</code> if with <code>TSFunctionNode</code>;
fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1663">#1663</a>
(<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/951d3549ea198fb229565cab3e0ce41943176098">951d354</a>)</li>
</ul>
<h2>v62.6.0</h2>
<h1><a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.5.5...v62.6.0">62.6.0</a>
(2026-02-18)</h1>
<h3>Features</h3>
<ul>
<li><strong><code>tag-lines</code>:</strong> add
<code>startLinesWithNoTags</code> option; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1661">#1661</a>
(<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/b36a67a548e667983060a7424c822c4a1c6c7562">b36a67a</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/951d3549ea198fb229565cab3e0ce41943176098"><code>951d354</code></a>
fix(<code>check-param-names</code>): only fire on
<code>TSPropertySignature</code> if with `TSFunct...</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/b36a67a548e667983060a7424c822c4a1c6c7562"><code>b36a67a</code></a>
feat(<code>tag-lines</code>): add <code>startLinesWithNoTags</code>
option; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1661">#1661</a></li>
<li>See full diff in <a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.5.5...v62.6.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint-plugin-jsdoc&package-manager=npm_and_yarn&previous-version=62.5.5&new-version=62.6.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 18:38:58 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> bcc0cbbf52 build(deps-dev): Bump knip from 5.83.1 to 5.84.1 (#106)
Bumps [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip)
from 5.83.1 to 5.84.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/webpro-nl/knip/releases">knip's
releases</a>.</em></p>
<blockquote>
<h2>Release 5.84.1</h2>
<ul>
<li>Fix false positives for arrow-wrapped dynamic imports assigned to
variables (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1544">#1544</a>)
(75a42c3aa4b8f9db59fb450ef4f45540ab94ec26) - thanks <a
href="https://github.com/jantimon"><code>@​jantimon</code></a>!</li>
<li>Improve pnpm arg handling
(df8c353c7f30ee11d749b2cf3208f288def1ed84)</li>
<li>Ignore <code>module.register</code> if 2nd arg is not
<code>import.meta.url</code> (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1535">#1535</a>)
(970fdb1f747c0941759aa3e0394c30ff6cf63481)</li>
</ul>
<h2>Release 5.84.0</h2>
<ul>
<li>Post-release shenanigans
(e7965cba23b0c63f0165a12c96aed75257aa6919)</li>
<li>Move most compilers to plugins &amp; register from there
(61beafe3e002408e91169397f7c384e14c613d92)</li>
<li>Minor refactor (e20a6828be8dd1e49b819d5b5b896a26db2a91ac)</li>
<li>Fix lint issues (d2bbc139e63235c415a243e76ad8685693b8edf2)</li>
<li>Add missing catalog property to rules in JSON schema (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1518">#1518</a>)
(5d49dea2696db454e630014efd25172d6edde9fa) - thanks <a
href="https://github.com/Mohmdev"><code>@​Mohmdev</code></a>!</li>
<li>feat(plugins): add <code>@​typescript/native-preview</code> (tsgo)
support (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1513">#1513</a>)
(babfb10a0426059bc2d79d14a2ba9c33767b6571) - thanks <a
href="https://github.com/jgoux"><code>@​jgoux</code></a>!</li>
<li>Fix up quoting for spaced args (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1515">#1515</a>)
(2b735cb8d87a827bf9ea53ea2bcfcedf117e6d4d)</li>
<li>Switch to tsconfig-aware module resolver in input handler
(634d0f68f681df1bf1e8896846f4d4c29b03e689)</li>
<li>Use <code>bun test</code> positionals as entry points (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1521">#1521</a>)
(da9472555b28b04eddba703b1dfee69b2cb8b6f9)</li>
<li>Edit docs (327726ff2c5f2b135581088dea62bd3ed4bc99d4)</li>
<li>Minor refactor while at it
(dc87e8ea7157745a449955e9a275877d19cf4d87)</li>
<li>Add config hints for unused <code>ignore</code> and
<code>ignoreFiles</code> items
(a4989eef8c870aa038d9c9d9e09597590ca444e7)</li>
<li>Accept known bins only behind double-dash (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1524">#1524</a>)
(b9214e35659f1f87eabc6695d9b9643c0e6c8022)</li>
<li>feat(plugins): add support for bun test preloaded files (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1525">#1525</a>)
(14ee32a8f818e1cbf48398ba57bf0f19812ed8be) - thanks <a
href="https://github.com/jgoux"><code>@​jgoux</code></a>!</li>
<li>Add <code>date</code> to <code>IGNORED_GLOBAL_BINARIES</code> (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1476">#1476</a>)
(f08f92bd9eac95ec4eafd01ddb01279cb047544e) - thanks <a
href="https://github.com/duci9y"><code>@​duci9y</code></a>!</li>
<li>Fix edge case for binaries in scripts
(82331ee2d336349d24a23437527991b73c764039)</li>
<li>Report ignore/files config hints only if sure &amp; relevant
(4c3bd085477139f50dce468c4231ba2753459c54)</li>
<li>Add consistent <code>repository</code> fields
(781a0fd44a2cece4fd9c1413e50caa88df528607)</li>
<li>Add language-server bin
(13d78454c4100f5d6a4f0cadcf1d77eadec523b2)</li>
<li>Use --stdio if no transport provided
(bedb21adff873c13095350842c85bb1bfeac643b)</li>
<li>Refactor from &quot;enabled&quot; to &quot;deferSession&quot;
(resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1499">#1499</a>)
(15e3360f11c81a866b8e6de76e894986bdfddedd)</li>
<li>Use <code>initializationOptions.config</code> or default fallback
config obj (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1503">#1503</a>)
(0abe5684083428340254dc1b0136760aacb9acff)</li>
<li>Also publish ls + mcp with pkg-pr-new
(78065260f55fc491d59912e2db41d789e49a1bb7)</li>
<li>Auto-format (51b7dc1de9e2ec5b738df5389906df84dc1f3dd7)</li>
<li>Remove <code>chdir</code> shenanigans (close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1516">#1516</a>)
(0cbee8f38f4a91504b3adc4faee466b9624120fc)</li>
<li>Bind <code>console.*</code> to distinguish internal↔ external logs
(3eac278273856994483a9164539bf57a51ed440b)</li>
<li>Add early bail-outs for changed files we can ignore
(36c2dd5c4345d743c3de58ebd677b6f48a270213)</li>
<li>Avoid unnecessary module graph updates for unmodified files
(f94c41f24fb7f5c4682a620bafd03700cf14ba68)</li>
<li>Fix typo in pkg-pr-new-pkg-dir
(7e7a8b05a06f1f972a1d5e236dc53facbbb99729)</li>
<li>Add .DS_Store to .gitignore (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1530">#1530</a>)
(40fe5cc608f2ecf71d148e061071e249c8940edb) - thanks <a
href="https://github.com/wojtekmaj"><code>@​wojtekmaj</code></a>!</li>
<li>Ignore RNC CLI and metro internals in react-native projects (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1528">#1528</a>)
(0f892aeed2556a018ddaa769c24be68fba8b91aa) - thanks <a
href="https://github.com/wojtekmaj"><code>@​wojtekmaj</code></a>!</li>
<li>Support nested _generated dirs in Convex plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1531">#1531</a>)
(bd75e9fce6a25997d3ecd90e58b087f05a89c96f) - thanks <a
href="https://github.com/kvnwolf"><code>@​kvnwolf</code></a>!</li>
<li>Housekeep cli help output
(c24e746b31b5dd994d004286229bd9d913bf8f14)</li>
<li>Fix up gitignore test
(6bc640c166daed354ec9514277b9f719155eb8ab)</li>
<li>Introduce <code>isFilterTransitiveDependencies</code> flag (close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1507">#1507</a>,
close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1101">#1101</a>)
(8678df2d6f6cbedfe9483dae75e84a5605d730df)</li>
<li>Housekeep webpack plugin
(2cc13066cdfd82e03459cb724907ff998231145b)</li>
<li>Move up <code>plugin.setup</code> &amp; tear down
<code>plugin.teardown</code>
(4dbf23dd54ec7712f33eb8c714c8dd9942eb5538)</li>
<li>Skip config file loading if only external re-exports
(ab775b1038a25e3e844e23c84ae4fc30b87eb7be)</li>
<li>Improve &amp; optimize ignore pattern handling
(c3d391210d3cf9230622b32416c1b8093062b232)</li>
<li>Housekeep compiler registration
(2aaf9fc6b68fcd36d6a8781690d5882f7bb7cc3e)</li>
<li>Edit docs re. config file location
(79bfb352246c900035c6deac7c3742c7780e726f)</li>
<li>Register visitors from plugins
(9b059f823a3aaa707a5e4bd3c14d7d879d397cf2)</li>
<li>importMetaGlobCall visitor for Vite plugin
(1874b19b0509c50e50446c58d4237a8c411d7259)</li>
<li>Extend registerVisitors with script visitor support
(728c8142a88df12bc4465201400cef4a057df0af)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/webpro-nl/knip/commit/5c2cccf2c05108e7f348a55e2d51a99647e8098c"><code>5c2cccf</code></a>
Release knip@5.84.1</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/970fdb1f747c0941759aa3e0394c30ff6cf63481"><code>970fdb1</code></a>
Ignore <code>module.register</code> if 2nd arg is not
<code>import.meta.url</code> (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1535">#1535</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/df8c353c7f30ee11d749b2cf3208f288def1ed84"><code>df8c353</code></a>
Improve pnpm arg handling</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/75a42c3aa4b8f9db59fb450ef4f45540ab94ec26"><code>75a42c3</code></a>
Fix false positives for arrow-wrapped dynamic imports assigned to
variables (...</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/c6d7ffa785087d6c39de2f0167032bfa61edcba6"><code>c6d7ffa</code></a>
Release knip@5.84.0</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/4115b9733bff321e138d026bcad2a29c35f74dc2"><code>4115b97</code></a>
Minor refactor while at it</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/4f0a3076f84fff6212f2a9c9a99d1cc4254e98ee"><code>4f0a307</code></a>
Fix Yarn (Berry) plugins and binaries reported as unused (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1523">#1523</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/3bb4203e549f163e27caab3b4ff7f8d8d3076784"><code>3bb4203</code></a>
Add pm2 plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1540">#1540</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/9fd04a89f2e45c95831e56ba813d918a2fbdfcd7"><code>9fd04a8</code></a>
Extract and extend react-native plugin (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1538">#1538</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/b7149b6185407be18aaa1613f3cb275a1a92a4b7"><code>b7149b6</code></a>
Remove <code>@source</code> matcher from tailwind plugin (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1537">#1537</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/webpro-nl/knip/commits/knip@5.84.1/packages/knip">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=knip&package-manager=npm_and_yarn&previous-version=5.83.1&new-version=5.84.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 15:51:00 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> c0cdf2574d build(deps-dev): Bump typescript-eslint from 8.55.0 to 8.56.0 (#104)
Bumps
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
from 8.55.0 to 8.56.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.56.0</h2>
<h2>8.56.0 (2026-02-16)</h2>
<h3>🚀 Features</h3>
<ul>
<li>support ESLint v10 (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12057">#12057</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li>use parser options from context.languageOptions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12043">#12043</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Brad Zacher <a
href="https://github.com/bradzacher"><code>@​bradzacher</code></a></li>
<li>fnx <a
href="https://github.com/DMartens"><code>@​DMartens</code></a></li>
<li>Joshua Chen</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.56.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.56.0 (2026-02-16)</h2>
<h3>🚀 Features</h3>
<ul>
<li>support ESLint v10 (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12057">#12057</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Brad Zacher <a
href="https://github.com/bradzacher"><code>@​bradzacher</code></a></li>
<li>Joshua Chen</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.56.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/8b8b68f200a48ee9d6f7be8670e964629375196c"><code>8b8b68f</code></a>
chore(release): publish 8.56.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/68a074fb61a10c3627f09678859fb4d42a3b88f5"><code>68a074f</code></a>
feat: support ESLint v10 (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12057">#12057</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.56.0/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript-eslint&package-manager=npm_and_yarn&previous-version=8.55.0&new-version=8.56.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 15:49:20 +01:00
Martin ac9d3e1516 various frontend fixes (#101)
- fix going to step 2 after logging in
We need to re-evaluate the `useEffect` function when `isAuthorized`
changes.
- fix Skeleton not showing in step 2
- change wakatime example user to [alan](https://wakatime.com/@alan).
The data for ffflabs has only 2 categories now, mainly "other", which
isn't a great example. Alan is the founder of WakaTime, so he should be
a good example user. Wakatime only returns his data for the last 7 days,
probably because he's not a premium wakatime user.
- fix duplicate CSS class
- fix spell-checker complaint
2026-02-26 15:49:02 +01:00
Martin e3b565152e validate langs card progress bar background color (#39) 2026-02-24 12:13:04 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 7f10d15b63 build(deps-dev): Bump eslint-plugin-jsdoc from 62.5.4 to 62.5.5 (#99)
Bumps
[eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from
62.5.4 to 62.5.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gajus/eslint-plugin-jsdoc/releases">eslint-plugin-jsdoc's
releases</a>.</em></p>
<blockquote>
<h2>v62.5.5</h2>
<h2><a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.5.4...v62.5.5">62.5.5</a>
(2026-02-15)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong><code>check-param-names</code>:</strong> check arrow
function properties in interfaces (TSPropertySignature); fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1657">#1657</a>
(<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/c7b132f7531e5eab31760f1f57e82e8e4512f9eb">c7b132f</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/c7b132f7531e5eab31760f1f57e82e8e4512f9eb"><code>c7b132f</code></a>
fix(<code>check-param-names</code>): check arrow function properties in
interfaces (TSPr...</li>
<li>See full diff in <a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.5.4...v62.5.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint-plugin-jsdoc&package-manager=npm_and_yarn&previous-version=62.5.4&new-version=62.5.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-22 16:18:45 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 7f9acfac2d build(deps-dev): Bump jsdom from 28.0.0 to 28.1.0 (#100)
Bumps [jsdom](https://github.com/jsdom/jsdom) from 28.0.0 to 28.1.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/jsdom/jsdom/releases">jsdom's
releases</a>.</em></p>
<blockquote>
<h2>Version 28.1.0</h2>
<ul>
<li>Added <code>blob.text()</code>, <code>blob.arrayBuffer()</code>, and
<code>blob.bytes()</code> methods.</li>
<li>Improved <code>getComputedStyle()</code> to account for CSS
specificity when multiple rules apply. (asamuzaK)</li>
<li>Improved synchronous <code>XMLHttpRequest</code> performance by
using a persistent worker thread, avoiding ~400ms of setup overhead on
every synchronous request after the first one.</li>
<li>Improved performance of <code>node.getRootNode()</code>,
<code>node.isConnected</code>, and <code>event.dispatchEvent()</code> by
caching the root node of document-connected trees.</li>
<li>Fixed <code>getComputedStyle()</code> to correctly handle
<code>!important</code> priority. (asamuzaK)</li>
<li>Fixed <code>document.getElementById()</code> to return the first
element in tree order when multiple elements share the same ID.</li>
<li>Fixed <code>&lt;svg&gt;</code> elements to no longer incorrectly
proxy event handlers to the <code>Window</code>.</li>
<li>Fixed <code>FileReader</code> event timing and
<code>fileReader.result</code> state to more closely follow the
spec.</li>
<li>Fixed a potential hang when synchronous <code>XMLHttpRequest</code>
encountered dispatch errors.</li>
<li>Fixed compatibility with environments where Node.js's built-in
<code>fetch()</code> has been used before importing jsdom, by working
around undici v6/v7 incompatibilities.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/jsdom/jsdom/blob/main/Changelog.md">jsdom's
changelog</a>.</em></p>
<blockquote>
<h2>28.1.0</h2>
<ul>
<li>Added <code>blob.text()</code>, <code>blob.arrayBuffer()</code>, and
<code>blob.bytes()</code> methods.</li>
<li>Improved <code>getComputedStyle()</code> to account for CSS
specificity when multiple rules apply. (asamuzaK)</li>
<li>Improved synchronous <code>XMLHttpRequest</code> performance by
using a persistent worker thread, avoiding ~400ms of setup overhead on
every synchronous request after the first one.</li>
<li>Improved performance of <code>node.getRootNode()</code>,
<code>node.isConnected</code>, and <code>event.dispatchEvent()</code> by
caching the root node of document-connected trees.</li>
<li>Fixed <code>getComputedStyle()</code> to correctly handle
<code>!important</code> priority. (asamuzaK)</li>
<li>Fixed <code>document.getElementById()</code> to return the first
element in tree order when multiple elements share the same ID.</li>
<li>Fixed <code>&lt;svg&gt;</code> elements to no longer incorrectly
proxy event handlers to the <code>Window</code>.</li>
<li>Fixed <code>FileReader</code> event timing and
<code>fileReader.result</code> state to more closely follow the
spec.</li>
<li>Fixed a potential hang when synchronous <code>XMLHttpRequest</code>
encountered dispatch errors.</li>
<li>Fixed compatibility with environments where Node.js's built-in
<code>fetch()</code> has been used before importing jsdom, by working
around undici v6/v7 incompatibilities.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/jsdom/jsdom/commit/12949b524ca234c15146dbbcc2aa756deb20fa03"><code>12949b5</code></a>
Version 28.1.0</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/ce4c58fac40002e024d32f50d11c6e9c5deaff89"><code>ce4c58f</code></a>
Apply CSS specificity when computing styles</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/7ed55a024e7fc1c9dcdbef81ad0399f83147c67b"><code>7ed55a0</code></a>
Skip single-byte-decoder encoding tests on Node 20</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/f3b1973ca073e163d817a0cf4fb3b94f34a8bcc5"><code>f3b1973</code></a>
Generalize node version conditions in test expectations</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/853c596a0688b1b4c9bc2455401eccb9a71debdc"><code>853c596</code></a>
Rewrite getElementById ID caching for tree-order correctness</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/5fbfde654e32c7da63f7d64a27deddcfcbe5188b"><code>5fbfde6</code></a>
Fix potential sync XHR worker hang from unhandled dispatch errors</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/82df38f756a9b47b595da021ca121f70f1430bca"><code>82df38f</code></a>
Cache the root node for document-connected trees</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/ed7c5c05209e59b5bcbaf7b44a0c38cd776e39b5"><code>ed7c5c0</code></a>
Add documentation comment to create-event-accessor.js</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/b4562e9e8f14d4194bdf21fc6682247d50505f0f"><code>b4562e9</code></a>
Simplify Window.js installEventHandlers</li>
<li><a
href="https://github.com/jsdom/jsdom/commit/7da340fc6ef29cf502bc9df92999dd619512fde1"><code>7da340f</code></a>
Centralize &quot;determine the target of an event handler&quot;</li>
<li>Additional commits viewable in <a
href="https://github.com/jsdom/jsdom/compare/28.0.0...28.1.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jsdom&package-manager=npm_and_yarn&previous-version=28.0.0&new-version=28.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-22 16:18:04 +01:00
Martin 516dc129de pin @types/node version to 24.x (#98)
replaces
https://github.com/stats-organization/github-stats-extended/pull/96
(Thanks marcalexiei for opening that one.)

On top of rolling back the `@types/node` upgrade, this PR also upgrades
to the latest 24.x version of `@types/node` and configures dependabot to
not suggest major version upgrades for this dependency anymore.
2026-02-22 16:09:53 +01:00
Marco Pasqualetti 238ca1c97f test(backend): migrate to vitest (#95)
Use `vitest` for backend tests:

- `bench` script now uses [vitest's
`bench`](https://vitest.dev/api/#bench)
- e2e test fails with same error happening now with jest:`data-testid`
attribute not present.
  vitest left, jest right
<img width="1264" height="603" alt="image"
src="https://github.com/user-attachments/assets/56fc43a6-e143-4208-bf14-7e016aae7fa9"
/>
2026-02-22 16:02:46 +01:00
Marco Pasqualetti 62207c0b32 ci(frontend): e2e - don't use docker image (#97)
- Followup of
https://github.com/stats-organization/github-stats-extended/pull/91

Dependabot does not update the version specified in the container image.
Reading the version directly from package.json prevents potential
version mismatches.
2026-02-22 10:13:33 +01:00
Martin 8a7642db54 upgrade pnpm, update knip config (#94)
After upgrading knip via dependabot it said that the "src/index.tsx"
entrypoint is redundant.
2026-02-21 17:14:29 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> edb2316bcb build(deps): Bump daisyui from 5.5.17 to 5.5.18 (#92)
Bumps
[daisyui](https://github.com/saadeghi/daisyui/tree/HEAD/packages/daisyui)
from 5.5.17 to 5.5.18.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/saadeghi/daisyui/releases">daisyui's
releases</a>.</em></p>
<blockquote>
<h2>v5.5.18</h2>
<p>🌼 Read changelog: <a
href="https://daisyui.com/docs/changelog/">https://daisyui.com/docs/changelog/</a></p>
<p>📦 Install this update:</p>
<pre lang="bash"><code>npm i -D daisyui@5.5.18
</code></pre>
<p>💚 Thank you for using daisyUI!</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/saadeghi/daisyui/blob/master/CHANGELOG.md">daisyui's
changelog</a>.</em></p>
<blockquote>
<h2>5.5.18 (2026-02-05)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>apply <code>z-1</code> on box tab when focus-visible (<a
href="https://redirect.github.com/saadeghi/daisyui/issues/4425">#4425</a>)
(<a
href="https://github.com/saadeghi/daisyui/commit/b2907eb92f5aa887f8ff8ea267c72ab6d0162a43">b2907eb</a>),
closes <a
href="https://redirect.github.com/saadeghi/daisyui/issues/4424">#4424</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/saadeghi/daisyui/commit/485c88106d9e5bc1a27a50c2446587e6db0dfb2f"><code>485c881</code></a>
chore(release): 5.5.18</li>
<li><a
href="https://github.com/saadeghi/daisyui/commit/b2907eb92f5aa887f8ff8ea267c72ab6d0162a43"><code>b2907eb</code></a>
fix: apply <code>z-1</code> on box tab when focus-visible (<a
href="https://github.com/saadeghi/daisyui/tree/HEAD/packages/daisyui/issues/4425">#4425</a>)</li>
<li>See full diff in <a
href="https://github.com/saadeghi/daisyui/commits/v5.5.18/packages/daisyui">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=daisyui&package-manager=npm_and_yarn&previous-version=5.5.17&new-version=5.5.18)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-21 09:58:51 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> b45f5bf804 build(deps-dev): Bump @types/node from 24.10.9 to 25.2.3 (#90)
Bumps
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
from 24.10.9 to 25.2.3.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@types/node&package-manager=npm_and_yarn&previous-version=24.10.9&new-version=25.2.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-21 09:57:52 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> a90d5e6567 build(deps-dev): Bump eslint-plugin-jsdoc from 61.7.1 to 62.5.4 (#84)
Bumps
[eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from
61.7.1 to 62.5.4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gajus/eslint-plugin-jsdoc/releases">eslint-plugin-jsdoc's
releases</a>.</em></p>
<blockquote>
<h2>v62.5.4</h2>
<h2><a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.5.3...v62.5.4">62.5.4</a>
(2026-02-07)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong><code>no-undefined-types</code>:</strong> avoid treating
infer type identifier as undefined; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1654">#1654</a>
(<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/da440462435d68cccee29dc78e599d9b0fab9e5f">da44046</a>)</li>
<li><strong><code>no-undefined-types</code>:</strong> ensure template
tags are defined; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1655">#1655</a>
(<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/bfef8487603fccbdc1387ecd57a46b85755d9e14">bfef848</a>)</li>
</ul>
<h2>v62.5.3</h2>
<h2><a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.5.2...v62.5.3">62.5.3</a>
(2026-02-06)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong><code>default-expressions</code> and <code>examples</code>
configs:</strong> avoid applying deprecated rules now that ESLint warns
against them; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1651">#1651</a>
(<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/a252868199736888fee6530d873f3ec3238339bb">a252868</a>)</li>
</ul>
<h2>v62.5.2</h2>
<h2><a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.5.1...v62.5.2">62.5.2</a>
(2026-02-05)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong><code>valid-types</code>:</strong> allow numeric properties
for jsdoc mode; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1646">#1646</a>
(<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/122d2837f69172911f03e6e2bbdee33c03b8a4f1">122d283</a>)</li>
</ul>
<h2>v62.5.1</h2>
<h2><a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.5.0...v62.5.1">62.5.1</a>
(2026-02-04)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong><code>require-template</code>:</strong> stop treating type
parameters names as unknown template names; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1648">#1648</a>
(<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/dfc662ea500a536678772b356511636c7f18b228">dfc662e</a>)</li>
<li><strong><code>type-formatting</code>:</strong> update jsdoccomment
and devDeps.; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1647">#1647</a>
(<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/19f36b697517a39f9fce29b9d79637f45edce9b6">19f36b6</a>)</li>
</ul>
<h2>v62.5.0</h2>
<h1><a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.4.1...v62.5.0">62.5.0</a>
(2026-01-29)</h1>
<h3>Features</h3>
<ul>
<li><strong><code>check-tag-names</code>:</strong> add Typedoc
<code>include</code>, <code>includeCode</code>, and TSDoc
<code>inheritDoc</code>/<code>inheritdoc</code> and <code>label</code>
to allowable inline tags; add TSDoc and typedoc tags (<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/925f6e35f099a52d1e6f4da62117a5865fc35e98">925f6e3</a>)</li>

<li><strong><code>require-description-complete-sentence</code>:</strong>
allow inline <code>inheritDoc</code>, <code>inheritdoc</code>,
<code>include</code>, <code>includeCode</code>, <code>label</code> to
avoid rule; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1641">#1641</a>
(<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/c5a09c87ed86fd432211d547efd9bcf80827a39c">c5a09c8</a>)</li>
<li><strong><code>valid-types</code>:</strong> add Typedoc
<code>include</code>, <code>includeCode</code>, and TSDoc
<code>inheritDoc</code>/<code>inheritdoc</code> and <code>label</code>
to allowable inline tags (<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/c0786335fd2193ad79ca8b043af7bf8ccb4c7bc7">c078633</a>)</li>
</ul>
<h2>v62.4.1</h2>
<h2><a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.4.0...v62.4.1">62.4.1</a>
(2026-01-24)</h2>
<h3>Bug Fixes</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/bfef8487603fccbdc1387ecd57a46b85755d9e14"><code>bfef848</code></a>
fix(<code>no-undefined-types</code>): ensure template tags are defined;
fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1655">#1655</a></li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/da440462435d68cccee29dc78e599d9b0fab9e5f"><code>da44046</code></a>
fix(<code>no-undefined-types</code>): avoid treating infer type
identifier as undefined;...</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/a252868199736888fee6530d873f3ec3238339bb"><code>a252868</code></a>
fix(<code>default-expressions</code> and <code>examples</code> configs):
avoid applying deprecated ...</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/122d2837f69172911f03e6e2bbdee33c03b8a4f1"><code>122d283</code></a>
fix(<code>valid-types</code>): allow numeric properties for jsdoc mode;
fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1646">#1646</a></li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/dfc662ea500a536678772b356511636c7f18b228"><code>dfc662e</code></a>
fix(<code>require-template</code>): stop treating type parameters names
as unknown templ...</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/19f36b697517a39f9fce29b9d79637f45edce9b6"><code>19f36b6</code></a>
fix(<code>type-formatting</code>): update jsdoccomment and devDeps.;
fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1647">#1647</a></li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/925f6e35f099a52d1e6f4da62117a5865fc35e98"><code>925f6e3</code></a>
feat(<code>check-tag-names</code>): add Typedoc <code>include</code>,
<code>includeCode</code>, and TSDoc `inh...</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/c0786335fd2193ad79ca8b043af7bf8ccb4c7bc7"><code>c078633</code></a>
feat(<code>valid-types</code>): add Typedoc <code>include</code>,
<code>includeCode</code>, and TSDoc `inherit...</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/c5a09c87ed86fd432211d547efd9bcf80827a39c"><code>c5a09c8</code></a>
feat(<code>require-description-complete-sentence</code>): allow inline
<code>inheritDoc</code>, `in...</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/ba0034e2ec6742d32f0e9ac7fcffe9a105e03ac7"><code>ba0034e</code></a>
fix: update jsdoccomment, devDeps. (<a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1639">#1639</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v61.7.1...v62.5.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint-plugin-jsdoc&package-manager=npm_and_yarn&previous-version=61.7.1&new-version=62.5.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-21 09:51:03 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 05407578d4 build(deps): Bump pg from 8.16.3 to 8.18.0 (#88)
Bumps
[pg](https://github.com/brianc/node-postgres/tree/HEAD/packages/pg) from
8.16.3 to 8.18.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/brianc/node-postgres/blob/master/CHANGELOG.md">pg's
changelog</a>.</em></p>
<blockquote>
<h2>pg@8.18.0</h2>
<ul>
<li><a
href="https://redirect.github.com/brianc/node-postgres/pull/3564">Return
the client instance</a> as the result of calling <code>connect</code>
(previously it was <code>void</code>).</li>
</ul>
<h2>pg@8.17.0</h2>
<ul>
<li>Throw correct error if database URL parsing <a
href="https://redirect.github.com/brianc/node-postgres/issues/3513">fails</a>.</li>
</ul>
<h2>pg@8.16.0</h2>
<ul>
<li>Add support for <a
href="https://redirect.github.com/brianc/node-postgres/pull/3438">min
connection pool size</a>.</li>
</ul>
<h2>pg@8.15.0</h2>
<ul>
<li>Add support for <a
href="https://redirect.github.com/brianc/node-postgres/pull/3423">esm</a>
importing. CommonJS importing is still also supported.</li>
</ul>
<h2>pg@8.14.0</h2>
<ul>
<li>Add support from SCRAM-SAH-256-PLUS i.e. <a
href="https://redirect.github.com/brianc/node-postgres/pull/3356">channel
binding</a>.</li>
</ul>
<h2>pg@8.13.0</h2>
<ul>
<li>Add ability to specify query timeout on <a
href="https://redirect.github.com/brianc/node-postgres/pull/3074">per-query
basis</a>.</li>
</ul>
<h2>pg@8.12.0</h2>
<ul>
<li>Add <code>queryMode</code> config option to <a
href="https://redirect.github.com/brianc/node-postgres/pull/3214">force
use of the extended query protocol</a> on queries without any
parameters.</li>
</ul>
<h2>pg-pool@8.10.0</h2>
<ul>
<li>Emit <code>release</code> event when client is returned to <a
href="https://redirect.github.com/brianc/node-postgres/pull/2845">the
pool</a>.</li>
</ul>
<h2>pg@8.9.0</h2>
<ul>
<li>Add support for <a
href="https://redirect.github.com/brianc/node-postgres/pull/2898">stream
factory</a>.</li>
<li><a
href="https://redirect.github.com/brianc/node-postgres/pull/2901">Better
errors</a> for SASL authentication.</li>
<li><a
href="https://redirect.github.com/brianc/node-postgres/pull/2815">Use
native crypto module</a> for SASL authentication.</li>
</ul>
<h2>pg@8.8.0</h2>
<ul>
<li>Bump minimum required version of <a
href="https://redirect.github.com/brianc/node-postgres/pull/2787">native
bindings</a>.</li>
<li>Catch previously uncatchable errors thrown in <a
href="https://redirect.github.com/brianc/node-postgres/pull/2569"><code>pool.query</code></a>.</li>
<li>Prevent the pool from blocking the event loop if all clients are <a
href="https://redirect.github.com/brianc/node-postgres/pull/2721">idle</a>
(and <code>allowExitOnIdle</code> is enabled).</li>
<li>Support <code>lock_timeout</code> in <a
href="https://redirect.github.com/brianc/node-postgres/pull/2779">client
config</a>.</li>
<li>Fix errors thrown in callbacks from <a
href="https://redirect.github.com/brianc/node-postgres/pull/2753">interfering
with cleanup</a>.</li>
</ul>
<h3>pg-pool@3.5.0</h3>
<ul>
<li>Add connection <a
href="https://redirect.github.com/brianc/node-postgres/pull/2698">lifetime
limit</a> config option.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/brianc/node-postgres/commit/fc4de3c62ad350d0e1b392a0d132aff906d1cec6"><code>fc4de3c</code></a>
Publish</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/0d1541d338f6c652f23ca3ac45211b651ce1b739"><code>0d1541d</code></a>
Always check if activeQuery is null before using it (<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/3586">#3586</a>)</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/57e93b5daff5bca91ba55c7bac4a046d9e8eda38"><code>57e93b5</code></a>
Return the client instance in the <code>connect()</code> method (<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/3564">#3564</a>)</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/5b68a115cc90a7b7069fa8c4b0ca51e3447367e9"><code>5b68a11</code></a>
Publish</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/ea06db5a1348ce6e0fb8561934fad642beef5935"><code>ea06db5</code></a>
Remove node: prefix from imports (<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/3584">#3584</a>)</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/a3a4567b63005fa77287eb572a8186e30fb27a14"><code>a3a4567</code></a>
remove unused variable (<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/3562">#3562</a>)</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/4eb7529a5906f2000faf72b5452e10d95bde2f9e"><code>4eb7529</code></a>
Publish</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/b94c8e136647d96ca6f54029b2a87bdb469ba460"><code>b94c8e1</code></a>
Don't use prefix import as it breaks in old nodes. (<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/3578">#3578</a>)</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/6bf475c3c1770a37857a97db3498904f61f69b51"><code>6bf475c</code></a>
Improve Deno compatibility: config-first and safe env access (<a
href="https://github.com/brianc/node-postgres/tree/HEAD/packages/pg/issues/3547">#3547</a>)</li>
<li><a
href="https://github.com/brianc/node-postgres/commit/d10e09c888f94abf77382aba6f353ca665a1cf09"><code>d10e09c</code></a>
Publish</li>
<li>Additional commits viewable in <a
href="https://github.com/brianc/node-postgres/commits/pg@8.18.0/packages/pg">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pg&package-manager=npm_and_yarn&previous-version=8.16.3&new-version=8.18.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-21 09:49:11 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 9ca4669073 build(deps-dev): Bump @playwright/test from 1.58.1 to 1.58.2 (#91)
Bumps [@playwright/test](https://github.com/microsoft/playwright) from
1.58.1 to 1.58.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/microsoft/playwright/releases"><code>@​playwright/test</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v1.58.2</h2>
<h2>Highlights</h2>
<p><a
href="https://redirect.github.com/microsoft/playwright/issues/39121">#39121</a>
fix(trace viewer): make paths via stdin work
<a
href="https://redirect.github.com/microsoft/playwright/issues/39129">#39129</a>
fix: do not force swiftshader on chromium mac</p>
<h2>Browser Versions</h2>
<ul>
<li>Chromium 145.0.7632.6</li>
<li>Mozilla Firefox 146.0.1</li>
<li>WebKit 26.0</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/microsoft/playwright/commit/ce480a952553175eae75342aad2c5e86cdf2cbba"><code>ce480a9</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/39171">#39171</a>):
devops: add ubuntu-22.04-arm bot</li>
<li><a
href="https://github.com/microsoft/playwright/commit/e40c137ebeb0221a56f968ac41c66287e8e2c810"><code>e40c137</code></a>
chore: mark v1.58.2 (<a
href="https://redirect.github.com/microsoft/playwright/issues/39155">#39155</a>)</li>
<li><a
href="https://github.com/microsoft/playwright/commit/50b7296be7208c275b12004f4703b8086ee45dfd"><code>50b7296</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/39152">#39152</a>):
chore: fix execSync inheriting stdio</li>
<li><a
href="https://github.com/microsoft/playwright/commit/f3dcf50a2e7ddb225431b9a5e53804bdb8a25311"><code>f3dcf50</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/39129">#39129</a>):
fix: do not force swiftshader on chromium mac</li>
<li><a
href="https://github.com/microsoft/playwright/commit/8684e0834f368cd1ff4973ab7c36c4775c1038a4"><code>8684e08</code></a>
cherry-pick(<a
href="https://redirect.github.com/microsoft/playwright/issues/39121">#39121</a>):
fix(trace viewer): make paths via stdin work</li>
<li>See full diff in <a
href="https://github.com/microsoft/playwright/compare/v1.58.1...v1.58.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@playwright/test&package-manager=npm_and_yarn&previous-version=1.58.1&new-version=1.58.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-21 09:39:58 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 6d76f3d37e build(deps-dev): Bump typescript-eslint from 8.54.0 to 8.55.0 (#93)
Bumps
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
from 8.54.0 to 8.55.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.55.0</h2>
<h2>8.55.0 (2026-02-09)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>utils:</strong> deprecate defaultOptions in favor of
meta.defaultOptions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11992">#11992</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unused-vars] remove trailing
newline when removing entire import (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11990">#11990</a>)</li>
<li><strong>eslint-plugin:</strong> [no-useless-default-assignment]
require strictNullChecks (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11966">#11966</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12000">#12000</a>)</li>
<li><strong>eslint-plugin:</strong> [no-useless-default-assignment]
report unnecessary defaults in ternary expressions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11984">#11984</a>)</li>
<li><strong>eslint-plugin:</strong> [no-useless-default-assignment]
reduce param index to ts this handling (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11949">#11949</a>)</li>
<li><strong>typescript-estree:</strong> forbid invalid modifier in
object expression (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11931">#11931</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Christian Rose <a
href="https://github.com/chrros95"><code>@​chrros95</code></a></li>
<li>fisker Cheung <a
href="https://github.com/fisker"><code>@​fisker</code></a></li>
<li>Josh Goldberg</li>
<li>Maria Solano <a
href="https://github.com/MariaSolOs"><code>@​MariaSolOs</code></a></li>
<li>Minyeong Kim <a
href="https://github.com/minyeong981"><code>@​minyeong981</code></a></li>
<li>SungHyun627 <a
href="https://github.com/SungHyun627"><code>@​SungHyun627</code></a></li>
<li>Yukihiro Hasegawa <a
href="https://github.com/y-hsgw"><code>@​y-hsgw</code></a></li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.55.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.55.0 (2026-02-09)</h2>
<p>This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.</p>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.55.0">GitHub
Releases</a> for more information.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/fedfe8665afbabd5c7d3ee09d14f450d5ba0b10a"><code>fedfe86</code></a>
chore(release): publish 8.55.0</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/b931f8c706beafc289462824814dca158694cb48"><code>b931f8c</code></a>
chore: use workspace refs for workspace deps (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/12018">#12018</a>)</li>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/1f17a7918cd507b11fd04ce75fe44a9c62bf9542"><code>1f17a79</code></a>
chore: migrate to pnpm (<a
href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint/issues/11248">#11248</a>)</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.55.0/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript-eslint&package-manager=npm_and_yarn&previous-version=8.54.0&new-version=8.55.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-21 09:38:27 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 63ad74e2ad build(deps-dev): Bump @vitejs/plugin-react-swc from 4.2.2 to 4.2.3 (#89)
Bumps
[@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc)
from 4.2.2 to 4.2.3.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc/CHANGELOG.md"><code>@​vitejs/plugin-react-swc</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>4.2.3 (2026-02-02)</h2>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/12914fa8c1d32323db6a134d46cd0ca83db91cd1"><code>12914fa</code></a>
release: plugin-react-swc@4.2.3</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/99e480cf01323268b6f7d5e582ba1662728845d9"><code>99e480c</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc/issues/1090">#1090</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/4a858ea0539ec5a85cbf733287713730560ce268"><code>4a858ea</code></a>
chore(deps): update dependency <code>@​types/react</code> to ^19.2.10
(<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc/issues/1088">#1088</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/45da3a89b96a5fa16c7d8094272da0d9331b18ff"><code>45da3a8</code></a>
fix(deps): update swc monorepo (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc/issues/1089">#1089</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/77f5e429d49b53c4115581abccaa9f5405bdf079"><code>77f5e42</code></a>
fix(deps): update react 19.2.4 (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc/issues/1084">#1084</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/e327da491fcc0eb9e10b98d7dd674b8375cb0f4f"><code>e327da4</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc/issues/1083">#1083</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/8528e98bb94da1ba32f24d24966ccb89d6cfd006"><code>8528e98</code></a>
chore(deps): update dependency <code>@​types/react</code> to ^19.2.9 (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc/issues/1082">#1082</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/58dfb9d70f3d12db529c2e3da8e80ad36168cceb"><code>58dfb9d</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc/issues/1066">#1066</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/fefad3dfd9a8505cb8e99d48848d56aa56a7bb48"><code>fefad3d</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc/issues/1048">#1048</a>)</li>
<li><a
href="https://github.com/vitejs/vite-plugin-react/commit/a5124db7210019b8c2a3f170d8a218262eba8da4"><code>a5124db</code></a>
chore(deps): update dependency <code>@​types/react</code> to ^19.2.8 (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react-swc/issues/1047">#1047</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vitejs/vite-plugin-react/commits/plugin-react-swc@4.2.3/packages/plugin-react-swc">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@vitejs/plugin-react-swc&package-manager=npm_and_yarn&previous-version=4.2.2&new-version=4.2.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-21 09:37:19 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 01218a493d build(deps-dev): Bump knip from 5.82.1 to 5.83.1 (#86)
Bumps [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip)
from 5.82.1 to 5.83.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/webpro-nl/knip/releases">knip's
releases</a>.</em></p>
<blockquote>
<h2>Release 5.83.1</h2>
<ul>
<li>Fix package.json import
(f8c14c873127481927306751479001d16deafa58)</li>
<li>Organize imports (5d716bae3919b3cd684f0c8c9af73a960d12c5cd)</li>
<li>Update a bunch of dependencies
(78bf644bbfc6554109d7098f83cd30fc8e115900)</li>
<li>Add minimal test suite to vscode-knip
(b6395089f6b307a145d2493bca59db9d5bc3364a)</li>
<li>Add support for monorepo when installing dependency (close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1501">#1501</a>)
(5782b07f79eb1a25f90c5fdd62b1217db11246b1)</li>
<li>Fix unused file output in table
(0f3dbb47b850e731c4405e06809aa069f68c7608)</li>
<li>Restore slonik in ecosystem tests
(35d9185a39cb1efba55ce8a749d3eb9a31eb82a4)</li>
<li>Fix type in exported value case (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1508">#1508</a>)
(d6dda74021a2bc08931691ba1d10029102b0e425)</li>
<li>Organize imports (fcdd33b9e8f9169cc0bfb921b468f163ec0f980f)</li>
<li>Remove unused export (c777bae22c500606857d9df820aab8af7593b24e)</li>
<li>Don't flag exports (including used as type) in protected or consumed
exports (a01bec149b8977e0927bd1ecd9d0197a1626e3a6)</li>
<li>Add npmx.dev to ecosystem tests
(8f8205261fe88144df6cf0cde6e7007952f8ba1d)</li>
<li>fix: fix vitest setupFiles resolution (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1511">#1511</a>)
(273b940f7e32ff7156c3a24875f5d9265ff2559a) - thanks <a
href="https://github.com/tmair"><code>@​tmair</code></a>!</li>
<li>Improve &amp; extend vitest args handling
(6c49e5ca61866a8d3fe62aaf8f5a6764aa9c4e86)</li>
<li>Detect Bun differently to avoid TS complaint
(c1499d32332751fbbed4baa648f5360f1db36dbc)</li>
<li>A temporary workaround until they catch up 🤫
(028b9726dfab717a41d95d7e73ad8ee2ca929d31)</li>
<li>feat(vite): detect module entry from index.html (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1487">#1487</a>)
(a76ab85337c5459a0d22128d33d5fcd9e3623db6) - thanks <a
href="https://github.com/WooWan"><code>@​WooWan</code></a>!</li>
<li>Auto-format (69150bfd315dff04778f067438194122e4d50761)</li>
<li>Add double-dash handling and add tests (close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1404">#1404</a>)
(4c1de75890c53f35529b6ea6f24e159c9532bedf)</li>
<li>Revert most of previous commit 4c1de75
(0cd91ae44ee1bddc584c2fb7494147aeb3f53feb)</li>
<li>Auto-format (cf3d8ff92cb53b769814c4140b3c56023d92fd27)</li>
</ul>
<h2>Release 5.83.0</h2>
<ul>
<li>fix: skip empty string entries in package.json exports (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1477">#1477</a>)
(6b64ac5b89916869a2361077a51dc28adb4679df) - thanks <a
href="https://github.com/SBoudrias"><code>@​SBoudrias</code></a>!</li>
<li>add LS version to serverInfo (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1468">#1468</a>)
(2c28cb8dc8923d83800959a7a259b439d5c50a0e) - thanks <a
href="https://github.com/niklas-wortmann"><code>@​niklas-wortmann</code></a>!</li>
<li>Avoid highlighting path-like specifiers (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1488">#1488</a>)
(c8fec09666ad0ce145e1d2bbf99737a6bc95fd05) - thanks <a
href="https://github.com/azat-io"><code>@​azat-io</code></a>!</li>
<li>Update avatar URLs (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1489">#1489</a>)
(d612ac2dab39a560875c53b9cccb3d920caafdd1) - thanks <a
href="https://github.com/azat-io"><code>@​azat-io</code></a>!</li>
<li>Copy fix-fixtures to tmp dir
(bd1519c30bb0a4004cfae463f10f8b066b778d95)</li>
<li>Don't add excluded issue types (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1486">#1486</a>)
(4eeeec602a8275f8f8d4252157ed6fa3cdd83f24)</li>
<li>Minor refactor (767b2c5927d940f8815d157c2fa50c67f0a80d63)</li>
<li>Edit docs (78111c96f54da3c41cfb84bd972bb5e836e1b859)</li>
<li>feat: add plugin for expressive-code (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1493">#1493</a>)
(fbf958a9bfb2d913c345c98283a793a7f10faae5) - thanks <a
href="https://github.com/cylewaitforit"><code>@​cylewaitforit</code></a>!</li>
<li>Truncate file path left-side (resolves <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1494">#1494</a>)
(235949c0b68e0bf2f3eb9ef0f3f88e750984e70a)</li>
<li>Revert fix-fixture format test (fails in outside cwd)
(8e961259bddef4652ae3b98387d1afa8514429ec)</li>
<li>Skip empty manifest entries (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1497">#1497</a>)
(d314ce43e7f9fe26125db167c1a8af4728329828)</li>
<li>Filter out empty issue objects in compact reporter (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1482">#1482</a>)
(7df0b4d8ee888f524132cd96260e18b870e8c57c)</li>
<li>Lint/group import statements
(61e7a24460e11bd2e9e27e9a791953eb004947df)</li>
<li>Update AGENTS.md &amp; docs
(7537f8a1c474ce931a05a06efcc238eef5806447)</li>
<li>Optimize <code>relative</code> path helper
(ac8a45454f9e8d88898141e112897803c844f803)</li>
<li>Move <code>postinstall</code> script to non-production
(360110bed44d77da4ed5e553a63986176d2ed716)</li>
<li>Ignore simple-git-hooks in production (like husky etc)
(bbab35b144080d061641b6b6a6545176e5286553)</li>
<li>Move &amp; add testimonials
(5ab18133b0e375508b34014085e10b78dcfd88ff)</li>
<li>Update sponsors page (4534a55e37f804bfdef65522354b053f28a5a8f2)</li>
<li>Edit docs, add config hints page
(1a73a053dad914025e330c03cabaf9ded2444e91)</li>
<li>Rename reporter to match project style
(58f8c4e476b8a051dd27fdf27859014c4954289b)</li>
<li>Auto-format (854124f7b5436436d57c5249f9b64f53e71e1994)</li>
<li>Refactor fs helper to match project style
(f22e7e94a48ac0dedf41985f3928ff556d04d727)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/webpro-nl/knip/commit/801d588515cbfce81b06102429e3a8bc301c8339"><code>801d588</code></a>
Release knip@5.83.1</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/cf3d8ff92cb53b769814c4140b3c56023d92fd27"><code>cf3d8ff</code></a>
Auto-format</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/0cd91ae44ee1bddc584c2fb7494147aeb3f53feb"><code>0cd91ae</code></a>
Revert most of previous commit 4c1de75</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/4c1de75890c53f35529b6ea6f24e159c9532bedf"><code>4c1de75</code></a>
Add double-dash handling and add tests (close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1404">#1404</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/69150bfd315dff04778f067438194122e4d50761"><code>69150bf</code></a>
Auto-format</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/a76ab85337c5459a0d22128d33d5fcd9e3623db6"><code>a76ab85</code></a>
feat(vite): detect module entry from index.html (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1487">#1487</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/c1499d32332751fbbed4baa648f5360f1db36dbc"><code>c1499d3</code></a>
Detect Bun differently to avoid TS complaint</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/6c49e5ca61866a8d3fe62aaf8f5a6764aa9c4e86"><code>6c49e5c</code></a>
Improve &amp; extend vitest args handling</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/273b940f7e32ff7156c3a24875f5d9265ff2559a"><code>273b940</code></a>
fix: fix vitest setupFiles resolution (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1511">#1511</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/a01bec149b8977e0927bd1ecd9d0197a1626e3a6"><code>a01bec1</code></a>
Don't flag exports (including used as type) in protected or consumed
exports</li>
<li>Additional commits viewable in <a
href="https://github.com/webpro-nl/knip/commits/knip@5.83.1/packages/knip">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=knip&package-manager=npm_and_yarn&previous-version=5.82.1&new-version=5.83.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-21 09:25:14 +01:00
Martin 6e109e50d1 restructure tests, add tests, remove dotenv (#83)
- add a few tests
- re-organize tests to allow testing with different env vars and
creating a combined coverage report
- extract test data into separate files, because importing data from
testA in testB leads to weird jest errors
- remove `dotenv` because it's not being used
- "GitHub Trends" -> "GitHub Stats Extended"
2026-02-20 19:38:16 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> e474cb3449 build(deps): Bump axios from 1.13.4 to 1.13.5 (#34)
Bumps [axios](https://github.com/axios/axios) from 1.13.4 to 1.13.5.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.13.4...v1.13.5)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.13.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-17 09:50:04 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 53d0553d3f build(deps): Bump axios from 1.13.4 to 1.13.5 (#82)
Bumps [axios](https://github.com/axios/axios) from 1.13.4 to 1.13.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/releases">axios's
releases</a>.</em></p>
<blockquote>
<h2>v1.13.5</h2>
<h2>Release 1.13.5</h2>
<h3>Highlights</h3>
<ul>
<li><strong>Security:</strong> Fixed a potential <strong>Denial of
Service</strong> issue involving the <code>__proto__</code> key in
<code>mergeConfig</code>. (PR <a
href="https://redirect.github.com/axios/axios/pull/7369">#7369</a>)</li>
<li><strong>Bug fix:</strong> Resolved an issue where
<code>AxiosError</code> could be missing the <code>status</code> field
on and after <strong>v1.13.3</strong>. (PR <a
href="https://redirect.github.com/axios/axios/pull/7368">#7368</a>)</li>
</ul>
<h3>Changes</h3>
<h4>Security</h4>
<ul>
<li>Fix Denial of Service via <code>__proto__</code> key in
<code>mergeConfig</code>. (PR <a
href="https://redirect.github.com/axios/axios/pull/7369">#7369</a>)</li>
</ul>
<h4>Fixes</h4>
<ul>
<li>Fix/5657. (PR <a
href="https://redirect.github.com/axios/axios/pull/7313">#7313</a>)</li>
<li>Ensure <code>status</code> is present in <code>AxiosError</code> on
and after v1.13.3. (PR <a
href="https://redirect.github.com/axios/axios/pull/7368">#7368</a>)</li>
</ul>
<h4>Features / Improvements</h4>
<ul>
<li>Add input validation to <code>isAbsoluteURL</code>. (PR <a
href="https://redirect.github.com/axios/axios/pull/7326">#7326</a>)</li>
<li>Refactor: bump minor package versions. (PR <a
href="https://redirect.github.com/axios/axios/pull/7356">#7356</a>)</li>
</ul>
<h4>Documentation</h4>
<ul>
<li>Clarify object-check comment. (PR <a
href="https://redirect.github.com/axios/axios/pull/7323">#7323</a>)</li>
<li>Fix deprecated <code>Buffer</code> constructor usage and README
formatting. (PR <a
href="https://redirect.github.com/axios/axios/pull/7371">#7371</a>)</li>
</ul>
<h4>CI / Maintenance</h4>
<ul>
<li>Chore: fix issues with YAML. (PR <a
href="https://redirect.github.com/axios/axios/pull/7355">#7355</a>)</li>
<li>CI: update workflow YAMLs. (PR <a
href="https://redirect.github.com/axios/axios/pull/7372">#7372</a>)</li>
<li>CI: fix run condition. (PR <a
href="https://redirect.github.com/axios/axios/pull/7373">#7373</a>)</li>
<li>Dev deps: bump <code>karma-sourcemap-loader</code> from 0.3.8 to
0.4.0. (PR <a
href="https://redirect.github.com/axios/axios/pull/7360">#7360</a>)</li>
<li>Chore(release): prepare release 1.13.5. (PR <a
href="https://redirect.github.com/axios/axios/pull/7379">#7379</a>)</li>
</ul>
<h3>New Contributors</h3>
<ul>
<li><a
href="https://github.com/sachin11063"><code>@​sachin11063</code></a>
(first contribution — PR <a
href="https://redirect.github.com/axios/axios/pull/7323">#7323</a>)</li>
<li><a
href="https://github.com/asmitha-16"><code>@​asmitha-16</code></a>
(first contribution — PR <a
href="https://redirect.github.com/axios/axios/pull/7326">#7326</a>)</li>
</ul>
<p><strong>Full Changelog:</strong> <a
href="https://github.com/axios/axios/compare/v1.13.4...v1.13.5">https://github.com/axios/axios/compare/v1.13.4...v1.13.5</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/axios/axios/commit/29f75425f0c9f73021f5eedc869c176e30e05fe7"><code>29f7542</code></a>
chore(release): prepare release 1.13.5 (<a
href="https://redirect.github.com/axios/axios/issues/7379">#7379</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/431c3a361490a2e3d5ac5d9e08d66d4bb5f3cd2a"><code>431c3a3</code></a>
ci: fix run condition (<a
href="https://redirect.github.com/axios/axios/issues/7373">#7373</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/9ff3a78ad72ecd665a4b673686f1517d824284bf"><code>9ff3a78</code></a>
ci: update ymls (<a
href="https://redirect.github.com/axios/axios/issues/7372">#7372</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/265b71234c20fabbd6d691858c65a7e9c978659f"><code>265b712</code></a>
docs: fix deprecated Buffer constructor and formatting issues in README
(<a
href="https://redirect.github.com/axios/axios/issues/7371">#7371</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/475e75a260668d227aec9f77735a49748c9041ff"><code>475e75a</code></a>
feat: add input validation to isAbsoluteURL (<a
href="https://redirect.github.com/axios/axios/issues/7326">#7326</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/28c721588c7a77e7503d0a434e016f852c597b57"><code>28c7215</code></a>
fix: Denial of Service via <strong>proto</strong> Key in mergeConfig (<a
href="https://redirect.github.com/axios/axios/issues/7369">#7369</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/04cf01969ed58f96920da032f340bfe4614aab90"><code>04cf019</code></a>
docs: clarify object check comment (<a
href="https://redirect.github.com/axios/axios/issues/7323">#7323</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/696fa753c5366afbd21859c294c64c9ff2b359ab"><code>696fa75</code></a>
fix: status is missing in AxiosError on and after v1.13.3 (<a
href="https://redirect.github.com/axios/axios/issues/7368">#7368</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/569f028a5878faaec8d7d138ba686aac407bda4c"><code>569f028</code></a>
fix: added a option to choose between legacy and the new
request/response int...</li>
<li><a
href="https://github.com/axios/axios/commit/44b7c9f0c4900fd8784f18e871199402f07fc69f"><code>44b7c9f</code></a>
chore(deps-dev): bump karma-sourcemap-loader (<a
href="https://redirect.github.com/axios/axios/issues/7360">#7360</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/axios/axios/compare/v1.13.4...v1.13.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=axios&package-manager=npm_and_yarn&previous-version=1.13.4&new-version=1.13.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/stats-organization/github-stats-extended/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-17 09:45:35 +01:00
Martin 8907b9de70 avoid format changes in update-langs workflow (#81)
~~(I know the change in generate-langs-json.js isn't really necessary,
but I think it still makes sense to have it.)~~
2026-02-17 09:41:26 +01:00
martin-mfg 11773e7714 fix new workflows 2026-02-16 08:37:47 +01:00
Martin acf7b16ac9 reactivate some old workflows, remove some old workflows (#80)
I deleted most workflows from apps/backend/.github/workflows because imo
we don't need them in the near future. I updated and moved two workflows
which we do need. Only the codeQL workflow is left behind, because I
don't have an opinion yet whether it should be removed or kept.
2026-02-16 08:32:28 +01:00
Marco Pasqualetti 99e078a8f0 chore(frontend): enable react StrictMode (#78)
- closes #72 

It looks like we have no issue!
2026-02-13 12:34:28 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 8546b8584e build(deps-dev): Bump @actions/core from 2.0.2 to 3.0.0 (#70)
Bumps
[@actions/core](https://github.com/actions/toolkit/tree/HEAD/packages/core)
from 2.0.2 to 3.0.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/toolkit/blob/main/packages/core/RELEASES.md"><code>@​actions/core</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>3.0.0</h2>
<ul>
<li><strong>Breaking change</strong>: Package is now ESM-only
<ul>
<li>CommonJS consumers must use dynamic <code>import()</code> instead of
<code>require()</code></li>
</ul>
</li>
</ul>
<h2>2.0.3</h2>
<ul>
<li>Bump <code>@actions/http-client</code> to <code>3.0.2</code></li>
</ul>
<h2>2.0.1</h2>
<ul>
<li>Bump <code>@​actions/exec</code> from 1.1.1 to 2.0.0 <a
href="https://redirect.github.com/actions/toolkit/pull/2199">#2199</a></li>
</ul>
<h2>2.0.0</h2>
<ul>
<li>Add support for Node 24 <a
href="https://redirect.github.com/actions/toolkit/pull/2110">#2110</a></li>
<li>Bump <code>@​actions/http-client</code> from 2.0.1 to 3.0.0</li>
</ul>
<h2>1.11.1</h2>
<ul>
<li>Fix uses of <code>crypto.randomUUID</code> on Node 18 and earlier <a
href="https://redirect.github.com/actions/toolkit/pull/1842">#1842</a></li>
</ul>
<h3>1.11.0</h3>
<ul>
<li>Add platform info utilities <a
href="https://redirect.github.com/actions/toolkit/pull/1551">#1551</a></li>
<li>Remove dependency on <code>uuid</code> package <a
href="https://redirect.github.com/actions/toolkit/pull/1824">#1824</a></li>
</ul>
<h3>1.10.1</h3>
<ul>
<li>Fix error message reference in oidc utils <a
href="https://redirect.github.com/actions/toolkit/pull/1511">#1511</a></li>
</ul>
<h3>1.10.0</h3>
<ul>
<li><code>saveState</code> and <code>setOutput</code> now use
environment files if available <a
href="https://redirect.github.com/actions/toolkit/pull/1178">#1178</a></li>
<li><code>getMultilineInput</code> now correctly trims whitespace by
default <a
href="https://redirect.github.com/actions/toolkit/pull/1185">#1185</a></li>
</ul>
<h3>1.9.1</h3>
<ul>
<li>Randomize delimiter when calling
<code>core.exportVariable</code></li>
</ul>
<h3>1.9.0</h3>
<ul>
<li>Added <code>toPosixPath</code>, <code>toWin32Path</code> and
<code>toPlatformPath</code> utilities <a
href="https://redirect.github.com/actions/toolkit/pull/1102">#1102</a></li>
</ul>
<h3>1.8.2</h3>
<ul>
<li>Update to v2.0.1 of <code>@actions/http-client</code> <a
href="https://redirect.github.com/actions/toolkit/pull/1087">#1087</a></li>
</ul>
<h3>1.8.1</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/actions/toolkit/commits/HEAD/packages/core">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@actions/core&package-manager=npm_and_yarn&previous-version=2.0.2&new-version=3.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 18:23:06 +01:00
Martin 6c3c377658 build(deps): Bump react-toastify from 9.1.3 to 11.0.5 (#77)
replaces #56
2026-02-12 18:05:32 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 7ae8616592 ci(deps): Bump fjogeleit/http-request-action from 1 to 2 (#53)
Bumps
[fjogeleit/http-request-action](https://github.com/fjogeleit/http-request-action)
from 1 to 2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/fjogeleit/http-request-action/releases">fjogeleit/http-request-action's
releases</a>.</em></p>
<blockquote>
<h2>v2.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump <code>@​actions/core</code> from 1.11.1 to 2.0.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/200">fjogeleit/http-request-action#200</a></li>
<li>Bump actions/checkout from 5.0.1 to 6.0.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/201">fjogeleit/http-request-action#201</a></li>
<li>Bump <code>@​actions/core</code> from 2.0.1 to 2.0.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/202">fjogeleit/http-request-action#202</a></li>
<li>Bump axios from 1.13.2 to 1.13.3 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/203">fjogeleit/http-request-action#203</a></li>
<li>ci: create &quot;Release&quot; CI workflow by <a
href="https://github.com/fabasoad"><code>@​fabasoad</code></a> in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/205">fjogeleit/http-request-action#205</a></li>
<li>feat: bump nodejs from 16 to 24 by <a
href="https://github.com/fabasoad"><code>@​fabasoad</code></a> in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/204">fjogeleit/http-request-action#204</a></li>
<li>Bump undici and <code>@​actions/http-client</code> by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/206">fjogeleit/http-request-action#206</a></li>
<li>build action with latest dependency updates by <a
href="https://github.com/fjogeleit"><code>@​fjogeleit</code></a> in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/207">fjogeleit/http-request-action#207</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/fabasoad"><code>@​fabasoad</code></a>
made their first contribution in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/205">fjogeleit/http-request-action#205</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/fjogeleit/http-request-action/compare/v1...v2.0.0">https://github.com/fjogeleit/http-request-action/compare/v1...v2.0.0</a></p>
<h2>v1.16.6</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump <code>@​vercel/ncc</code> from 0.38.3 to 0.38.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/191">fjogeleit/http-request-action#191</a></li>
<li>Bump actions/setup-node from 4 to 5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/192">fjogeleit/http-request-action#192</a></li>
<li>Bump axios from 1.12.2 to 1.13.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/193">fjogeleit/http-request-action#193</a></li>
<li>Bump actions/setup-node from 5 to 6 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/194">fjogeleit/http-request-action#194</a></li>
<li>Bump axios from 1.13.0 to 1.13.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/195">fjogeleit/http-request-action#195</a></li>
<li>Bump axios from 1.13.1 to 1.13.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/196">fjogeleit/http-request-action#196</a></li>
<li>Bump actions/checkout from 5 to 6 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/198">fjogeleit/http-request-action#198</a></li>
<li>Update Dependencies by <a
href="https://github.com/fjogeleit"><code>@​fjogeleit</code></a> in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/199">fjogeleit/http-request-action#199</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/fjogeleit/http-request-action/compare/v1.16.5...v1.16.6">https://github.com/fjogeleit/http-request-action/compare/v1.16.5...v1.16.6</a></p>
<h2>v1.16.5</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump form-data from 4.0.1 to 4.0.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/174">fjogeleit/http-request-action#174</a></li>
<li>Bump undici from 5.28.4 to 5.28.5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/175">fjogeleit/http-request-action#175</a></li>
<li>Bump axios from 1.7.9 to 1.8.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/176">fjogeleit/http-request-action#176</a></li>
<li>Bump axios from 1.8.1 to 1.8.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/177">fjogeleit/http-request-action#177</a></li>
<li>Bump axios from 1.8.2 to 1.8.3 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/178">fjogeleit/http-request-action#178</a></li>
<li>Bump axios from 1.8.3 to 1.8.4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/179">fjogeleit/http-request-action#179</a></li>
<li>Bump axios from 1.8.4 to 1.9.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/180">fjogeleit/http-request-action#180</a></li>
<li>Bump undici from 5.28.5 to 5.29.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/181">fjogeleit/http-request-action#181</a></li>
<li>Bump yargs from 17.7.2 to 18.0.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/183">fjogeleit/http-request-action#183</a></li>
<li>Bump form-data from 4.0.2 to 4.0.3 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/184">fjogeleit/http-request-action#184</a></li>
<li>Bump axios from 1.9.0 to 1.10.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/185">fjogeleit/http-request-action#185</a></li>
<li>Bump axios from 1.10.0 to 1.11.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/187">fjogeleit/http-request-action#187</a></li>
<li>Bump actions/checkout from 4 to 5 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/188">fjogeleit/http-request-action#188</a></li>
<li>Bump axios from 1.11.0 to 1.12.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/189">fjogeleit/http-request-action#189</a></li>
<li>Dependency Updates by <a
href="https://github.com/fjogeleit"><code>@​fjogeleit</code></a> in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/190">fjogeleit/http-request-action#190</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/fjogeleit/http-request-action/compare/v1.16.4...v1.16.5">https://github.com/fjogeleit/http-request-action/compare/v1.16.4...v1.16.5</a></p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/fjogeleit/http-request-action/blob/main/RELEASE.md">fjogeleit/http-request-action's
changelog</a>.</em></p>
<blockquote>
<h1>Release</h1>
<h2>Create release</h2>
<p>Do not manually draft a release.</p>
<p>To start a release, create a release tag at the commit you want using
the commands
below.</p>
<pre lang="shell"><code>git tag -a &quot;v1.2.3&quot; -m
&quot;v1.2.3&quot;
git push origin &quot;v1.2.3&quot;
</code></pre>
<h2>Publish GitHub Action to the marketplace</h2>
<ol>
<li>Go to the <a
href="https://github.com/fjogeleit/http-request-action/releases">Releases
page</a>
and select the latest release that was just created.</li>
<li>Select &quot;Edit&quot; button.</li>
<li>Select &quot;Publish this Action to the GitHub Marketplace&quot;
checkbox.</li>
<li>Select &quot;Update release&quot; button.</li>
</ol>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/551353b829c3646756b2ec2b3694f819d7957495"><code>551353b</code></a>
build action with latest dependency updates (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/207">#207</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/7e4a7177d1b9140d592ae552e6d7c2289dd583dd"><code>7e4a717</code></a>
Bump undici and <code>@​actions/http-client</code> (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/206">#206</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/3cb67f02dbe15a8802fd7b04a506cae796652231"><code>3cb67f0</code></a>
chore(deps): bump dependencies to the latest version (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/204">#204</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/666260b62c5654c52a1822e7e3d5fa57170c0c11"><code>666260b</code></a>
ci: create &quot;Release&quot; CI workflow (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/205">#205</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/510492d24c81e3ffadb502a45399ff03af680be2"><code>510492d</code></a>
Bump axios from 1.13.2 to 1.13.3 (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/203">#203</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/1607eba686c4b5f8b14c587fdd56c1768513ca24"><code>1607eba</code></a>
Bump <code>@​actions/core</code> from 2.0.1 to 2.0.2 (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/202">#202</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/a5b30eda00718e60b68f81d94e69c1a308fa18c4"><code>a5b30ed</code></a>
Bump actions/checkout from 5.0.1 to 6.0.1 (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/201">#201</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/dd6042915dc5cb5b8768e694f60ee0f43f82fee0"><code>dd60429</code></a>
Bump <code>@​actions/core</code> from 1.11.1 to 2.0.1 (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/200">#200</a>)</li>
<li>See full diff in <a
href="https://github.com/fjogeleit/http-request-action/compare/v1...v2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=fjogeleit/http-request-action&package-manager=github_actions&previous-version=1&new-version=2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-11 20:02:39 +01:00
Martin 6cf43d67b4 build(deps): Bump uuid from 9.0.1 to 13.0.0 (#75)
solves
https://github.com/stats-organization/github-stats-extended/pull/54
2026-02-11 19:50:56 +01:00
Martin 4ea98d333d fixes around daisyUI upgrade (#74)
Yesterday I [upgraded
daisyUI](https://github.com/stats-organization/github-stats-extended/pull/69)
from 2.x to 5.x. That changed the visuals of a few components. This PR
fixes this. Part of the fix is modernizing our tailwind setup.
2026-02-11 19:47:06 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 02bfe69432 build(deps-dev): Bump globals from 16.5.0 to 17.3.0 (#61)
Bumps [globals](https://github.com/sindresorhus/globals) from 16.5.0 to
17.3.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sindresorhus/globals/releases">globals's
releases</a>.</em></p>
<blockquote>
<h2>v17.3.0</h2>
<ul>
<li>Update globals (2026-02-01) (<a
href="https://redirect.github.com/sindresorhus/globals/issues/336">#336</a>)
295fba9</li>
</ul>
<hr />
<p><a
href="https://github.com/sindresorhus/globals/compare/v17.2.0...v17.3.0">https://github.com/sindresorhus/globals/compare/v17.2.0...v17.3.0</a></p>
<h2>v17.2.0</h2>
<ul>
<li><code>jasmine</code>: Add <code>throwUnless</code> and
<code>throwUnlessAsync</code> globals (<a
href="https://redirect.github.com/sindresorhus/globals/issues/335">#335</a>)
97f23a7</li>
</ul>
<hr />
<p><a
href="https://github.com/sindresorhus/globals/compare/v17.1.0...v17.2.0">https://github.com/sindresorhus/globals/compare/v17.1.0...v17.2.0</a></p>
<h2>v17.1.0</h2>
<ul>
<li>Add <code>webpack</code> and <code>rspack</code> globals (<a
href="https://redirect.github.com/sindresorhus/globals/issues/333">#333</a>)
65cae73</li>
</ul>
<hr />
<p><a
href="https://github.com/sindresorhus/globals/compare/v17.0.0...v17.1.0">https://github.com/sindresorhus/globals/compare/v17.0.0...v17.1.0</a></p>
<h2>v17.0.0</h2>
<h3>Breaking</h3>
<ul>
<li>Split <code>audioWorklet</code> environment from
<code>browser</code> (<a
href="https://redirect.github.com/sindresorhus/globals/issues/320">#320</a>)
7bc293e</li>
</ul>
<h3>Improvements</h3>
<ul>
<li>Update globals (<a
href="https://redirect.github.com/sindresorhus/globals/issues/329">#329</a>)
ebe1063</li>
<li>Get all browser globals from both <code>chrome</code> and
<code>firefox</code> (<a
href="https://redirect.github.com/sindresorhus/globals/issues/321">#321</a>)
59ceff8</li>
<li>Add <code>bunBuiltin</code> environment (<a
href="https://redirect.github.com/sindresorhus/globals/issues/324">#324</a>)
1bc6e3b</li>
<li>Add <code>denoBuiltin</code> environment (<a
href="https://redirect.github.com/sindresorhus/globals/issues/324">#324</a>)
1bc6e3b</li>
<li>Add <code>paintWorklet</code> environment (<a
href="https://redirect.github.com/sindresorhus/globals/issues/323">#323</a>)
4b78f56</li>
<li>Add <code>sharedWorker</code> environment (<a
href="https://redirect.github.com/sindresorhus/globals/issues/322">#322</a>)
4a02a85</li>
</ul>
<hr />
<p><a
href="https://github.com/sindresorhus/globals/compare/v16.5.0...v17.0.0">https://github.com/sindresorhus/globals/compare/v16.5.0...v17.0.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/sindresorhus/globals/commit/5edc6020698a76964b0fa17cb604f4484451143b"><code>5edc602</code></a>
17.3.0</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/295fba929adf8b44f945688233778a57ff754368"><code>295fba9</code></a>
Update globals (2026-02-01) (<a
href="https://redirect.github.com/sindresorhus/globals/issues/336">#336</a>)</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/8176ac7290e6eb0be1403b80a4184651c4cd95f6"><code>8176ac7</code></a>
17.2.0</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/97f23a759b37c2b6c30845cdc5172fd862d5c5e2"><code>97f23a7</code></a>
<code>jasmine</code>: Add <code>throwUnless</code> and
<code>throwUnlessAsync</code> globals (<a
href="https://redirect.github.com/sindresorhus/globals/issues/335">#335</a>)</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/7a2f3546a195b67ee07d76acce39499d34b4c8fe"><code>7a2f354</code></a>
17.1.0</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/65cae7345cd365d2b0ea26958b545644aea5a6df"><code>65cae73</code></a>
Add <code>webpack</code> and <code>rspack</code> globals (<a
href="https://redirect.github.com/sindresorhus/globals/issues/333">#333</a>)</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/3efe5aad90231cee41c8caea7b987706390f889b"><code>3efe5aa</code></a>
Remove script transform (<a
href="https://redirect.github.com/sindresorhus/globals/issues/332">#332</a>)</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/bb89b18916b00f6c4f089baa0d66cb7f0771ab1b"><code>bb89b18</code></a>
17.0.0</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/ebe106340137419b4ac0150f746b7567fb78ce03"><code>ebe1063</code></a>
Update globals (2026-01-01) (<a
href="https://redirect.github.com/sindresorhus/globals/issues/329">#329</a>)</li>
<li><a
href="https://github.com/sindresorhus/globals/commit/e3d8da349da72d66fcadf94d926d4ff96da3319c"><code>e3d8da3</code></a>
Revert &quot;Automate script for <code>paintWorklet</code> environment
(<a
href="https://redirect.github.com/sindresorhus/globals/issues/325">#325</a>)&quot;
(<a
href="https://redirect.github.com/sindresorhus/globals/issues/328">#328</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/sindresorhus/globals/compare/v16.5.0...v17.3.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=globals&package-manager=npm_and_yarn&previous-version=16.5.0&new-version=17.3.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-11 17:57:29 +01:00
Martin cf20352f01 fix pnpm lockfile (#76)
fix lockfile which was broken after merging
https://github.com/stats-organization/github-stats-extended/pull/62
2026-02-11 16:56:11 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> e5d1ba262a build(deps-dev): Bump @actions/github from 6.0.1 to 9.0.0 (#62)
Bumps
[@actions/github](https://github.com/actions/toolkit/tree/HEAD/packages/github)
from 6.0.1 to 9.0.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/toolkit/blob/main/packages/github/RELEASES.md"><code>@​actions/github</code>'s
changelog</a>.</em></p>
<blockquote>
<h3>9.0.0</h3>
<ul>
<li><strong>Breaking change</strong>: Package is now ESM-only
<ul>
<li>CommonJS consumers must use dynamic <code>import()</code> instead of
<code>require()</code></li>
<li>Example: <code>const { getOctokit, context } = await
import('@actions/github')</code></li>
</ul>
</li>
<li>Fix TypeScript compilation by migrating to ESM, enabling proper
imports from <code>@octokit/core/types</code></li>
</ul>
<h3>8.0.1</h3>
<ul>
<li>Update <code>undici</code> to <code>6.23.0</code></li>
<li>Update <code>@actions/http-client</code> to <code>3.0.2</code></li>
</ul>
<h3>8.0.0</h3>
<ul>
<li>Update <a
href="https://github.com/octokit"><code>@​octokit</code></a>
dependencies
<ul>
<li><code>@octokit/core</code> ^7.0.6</li>
<li><code>@octokit/plugin-paginate-rest</code> ^14.0.0</li>
<li><code>@octokit/plugin-rest-endpoint-methods</code> ^17.0.0</li>
<li><code>@octokit/request</code> ^10.0.7</li>
<li><code>@octokit/request-error</code> ^7.1.0</li>
</ul>
</li>
<li><strong>Breaking change</strong>: Minimum Node.js version is now 20
(previously 18)</li>
</ul>
<h3>7.0.0</h3>
<ul>
<li>Update to v3.0.1 of <code>@actions/http-client</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/actions/toolkit/commits/HEAD/packages/github">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by [GitHub Actions](<a
href="https://www.npmjs.com/~GitHub">https://www.npmjs.com/~GitHub</a>
Actions), a new releaser for <code>@​actions/github</code> since your
current version.</p>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@actions/github&package-manager=npm_and_yarn&previous-version=6.0.1&new-version=9.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-11 15:26:26 +01:00
Marco Pasqualetti d6a08721c1 feat(frontend): move fullSuffix management in a standalone file to simplify testing (#73)
- move `fullSuffix` into a standalone function
- setup `vitest` as test framework for frontend package
2026-02-11 11:21:50 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 668b0475f4 build(deps): Bump daisyui from 2.31.0 to 5.5.16 (#69)
Bumps
[daisyui](https://github.com/saadeghi/daisyui/tree/HEAD/packages/daisyui)
from 2.31.0 to 5.5.16.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/saadeghi/daisyui/releases">daisyui's
releases</a>.</em></p>
<blockquote>
<h2>v5.5.16</h2>
<p>🌼 Read changelog: <a
href="https://daisyui.com/docs/changelog/">https://daisyui.com/docs/changelog/</a></p>
<p>📦 Install this update:</p>
<pre lang="bash"><code>npm i -D daisyui@5.5.16
</code></pre>
<p>💚 Thank you for using daisyUI!</p>
<h2>v5.5.15</h2>
<p>🌼 Read changelog: <a
href="https://daisyui.com/docs/changelog/">https://daisyui.com/docs/changelog/</a></p>
<p>📦 Install this update:</p>
<pre lang="bash"><code>npm i -D daisyui@5.5.15
</code></pre>
<p>💚 Thank you for using daisyUI!</p>
<h2>v5.5.14</h2>
<p>🌼 Read changelog: <a
href="https://daisyui.com/docs/changelog/">https://daisyui.com/docs/changelog/</a></p>
<p>📦 Install this update:</p>
<pre lang="bash"><code>npm i -D daisyui@5.5.14
</code></pre>
<p>💚 Thank you for using daisyUI!</p>
<h2>v5.5.13</h2>
<p>🌼 Read changelog: <a
href="https://daisyui.com/docs/changelog/">https://daisyui.com/docs/changelog/</a></p>
<p>📦 Install this update:</p>
<pre lang="bash"><code>npm i -D daisyui@5.5.13
</code></pre>
<p>💚 Thank you for using daisyUI!</p>
<h2>v5.5.11</h2>
<p>🌼 Read changelog: <a
href="https://daisyui.com/docs/changelog/">https://daisyui.com/docs/changelog/</a></p>
<p>📦 Install this update:</p>
<pre lang="bash"><code>npm i -D daisyui@5.5.11
</code></pre>
<p>💚 Thank you for using daisyUI!</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/saadeghi/daisyui/blob/master/CHANGELOG.md">daisyui's
changelog</a>.</em></p>
<blockquote>
<h2>5.5.16 (2026-02-01)</h2>
<h2>5.5.15 (2026-02-01)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>hide underline for <code>.btn</code> when used in
<code>.prose</code> closes <a
href="https://redirect.github.com/saadeghi/daisyui/issues/4400">#4400</a>
(<a
href="https://github.com/saadeghi/daisyui/commit/c1e1e112545423f41fae99a4b3bf7379749bbebe">c1e1e11</a>)</li>
</ul>
<h2>5.5.14 (2025-12-14)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>z-index of focused join items. closes: <a
href="https://redirect.github.com/saadeghi/daisyui/issues/4320">#4320</a>
(<a
href="https://github.com/saadeghi/daisyui/commit/5a37a1314220bc6724633c9b33411d8d1f901c6f">5a37a13</a>)</li>
</ul>
<h2>5.5.13 (2025-12-11)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>allow <code>.list-col-wrap</code> to work with Tailwind CSS variant
prefixes. closes: <a
href="https://redirect.github.com/saadeghi/daisyui/issues/4336">#4336</a>
(<a
href="https://github.com/saadeghi/daisyui/commit/56ef803c89f1e9bfa4e879a0f111d0a59ec885d8">56ef803</a>)</li>
</ul>
<h2>5.5.12 (2025-12-11)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>add transition for collapse <code>min-height</code>. closes: <a
href="https://redirect.github.com/saadeghi/daisyui/issues/2615">#2615</a>
(<a
href="https://github.com/saadeghi/daisyui/commit/600ab73a271e42433d078408f34265f684f617ce">600ab73</a>)</li>
</ul>
<h2>5.5.11 (2025-12-10)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>range color issue when there's a ling range slider on a ultrawide
screen (<a
href="https://redirect.github.com/saadeghi/daisyui/issues/4335">#4335</a>).
closes <a
href="https://redirect.github.com/saadeghi/daisyui/issues/4334">#4334</a>
(<a
href="https://github.com/saadeghi/daisyui/commit/810f519eff7eda0498f23f86dc015d14a8799945">810f519</a>)</li>
</ul>
<h2>5.5.10 (2025-12-10)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>rule priority for <code>.drawer-end</code> and
<code>.drawer-open</code>. closes <a
href="https://redirect.github.com/saadeghi/daisyui/issues/4331">#4331</a>
(<a
href="https://github.com/saadeghi/daisyui/commit/82e68d4ec793b5a9d415d090ba766eaa9b20a4ba">82e68d4</a>)</li>
</ul>
<h2>5.5.9 (2025-12-10)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>improve root color. closes: <a
href="https://redirect.github.com/saadeghi/daisyui/issues/4294">#4294</a>
(<a
href="https://github.com/saadeghi/daisyui/commit/5cf3e89a08197288d3cad0188e313db5d77f38f6">5cf3e89</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/saadeghi/daisyui/commit/02a876010544d77c8269393ac494597c8e9855a7"><code>02a8760</code></a>
chore(release): 5.5.16</li>
<li><a
href="https://github.com/saadeghi/daisyui/commit/189ca4717d49b150d508a8a62956e586a7cafdc6"><code>189ca47</code></a>
Fix inconsistent toggle size calculation on Safari when zoom level
changes. c...</li>
<li><a
href="https://github.com/saadeghi/daisyui/commit/93bff935dd0a5cd84c23fccab3622d4fe0a899c0"><code>93bff93</code></a>
chore(release): 5.5.15</li>
<li><a
href="https://github.com/saadeghi/daisyui/commit/c1e1e112545423f41fae99a4b3bf7379749bbebe"><code>c1e1e11</code></a>
fix: hide underline for <code>.btn</code> when used in
<code>.prose</code> closes <a
href="https://github.com/saadeghi/daisyui/tree/HEAD/packages/daisyui/issues/4400">#4400</a></li>
<li><a
href="https://github.com/saadeghi/daisyui/commit/bc16d8131e97c1e0594646612b8bfbf5bb442220"><code>bc16d81</code></a>
chore(release): 5.5.14</li>
<li><a
href="https://github.com/saadeghi/daisyui/commit/5a37a1314220bc6724633c9b33411d8d1f901c6f"><code>5a37a13</code></a>
fix: z-index of focused join items. closes: <a
href="https://github.com/saadeghi/daisyui/tree/HEAD/packages/daisyui/issues/4320">#4320</a></li>
<li><a
href="https://github.com/saadeghi/daisyui/commit/c42d99ec9c53ab1f8530fab52e692de5d12085ec"><code>c42d99e</code></a>
chore(release): 5.5.13</li>
<li><a
href="https://github.com/saadeghi/daisyui/commit/56ef803c89f1e9bfa4e879a0f111d0a59ec885d8"><code>56ef803</code></a>
fix: allow <code>.list-col-wrap</code> to work with Tailwind CSS variant
prefixes. close...</li>
<li><a
href="https://github.com/saadeghi/daisyui/commit/97b80972e50675db7dacb2dc6266d7061d72418e"><code>97b8097</code></a>
chore(release): 5.5.12</li>
<li><a
href="https://github.com/saadeghi/daisyui/commit/600ab73a271e42433d078408f34265f684f617ce"><code>600ab73</code></a>
fix: add transition for collapse <code>min-height</code>. closes: <a
href="https://github.com/saadeghi/daisyui/tree/HEAD/packages/daisyui/issues/2615">#2615</a></li>
<li>Additional commits viewable in <a
href="https://github.com/saadeghi/daisyui/commits/v5.5.16/packages/daisyui">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=daisyui&package-manager=npm_and_yarn&previous-version=2.31.0&new-version=5.5.16)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 17:50:29 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 5088a9d72a build(deps): Bump react-icons from 4.12.0 to 5.5.0 (#66)
Bumps [react-icons](https://github.com/react-icons/react-icons) from
4.12.0 to 5.5.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/react-icons/react-icons/releases">react-icons's
releases</a>.</em></p>
<blockquote>
<h2>v5.5.0</h2>
<h2>What's Changed</h2>
<ul>
<li>[React 19] Update IconType type to return React.ReactNode by <a
href="https://github.com/diaz-hfc"><code>@​diaz-hfc</code></a> in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1004">react-icons/react-icons#1004</a></li>
<li>Bump vite from 5.2.10 to 5.4.11 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/react-icons/react-icons/pull/996">react-icons/react-icons#996</a></li>
<li>Bump nanoid from 3.3.7 to 3.3.8 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1005">react-icons/react-icons#1005</a></li>
<li>Bump vite from 5.4.11 to 5.4.14 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1021">react-icons/react-icons#1021</a></li>
<li>Bump esbuild from 0.20.2 to 0.25.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1027">react-icons/react-icons#1027</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/diaz-hfc"><code>@​diaz-hfc</code></a>
made their first contribution in <a
href="https://redirect.github.com/react-icons/react-icons/pull/1004">react-icons/react-icons#1004</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/react-icons/react-icons/compare/v5.4.0...v5.5.0">https://github.com/react-icons/react-icons/compare/v5.4.0...v5.5.0</a></p>
<table>
<thead>
<tr>
<th>Icon Library</th>
<th>License</th>
<th>Version</th>
<th align="right">Count</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://circumicons.com/">Circum Icons</a></td>
<td><a
href="https://github.com/Klarr-Agency/Circum-Icons/blob/main/LICENSE">MPL-2.0
license</a></td>
<td>1.0.0</td>
<td align="right">288</td>
</tr>
<tr>
<td><a href="https://fontawesome.com/">Font Awesome 5</a></td>
<td><a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0
License</a></td>
<td>5.15.4-3-gafecf2a</td>
<td align="right">1612</td>
</tr>
<tr>
<td><a href="https://fontawesome.com/">Font Awesome 6</a></td>
<td><a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0
License</a></td>
<td>6.6.0</td>
<td align="right">2050</td>
</tr>
<tr>
<td><a href="https://ionicons.com/">Ionicons 4</a></td>
<td><a
href="https://github.com/ionic-team/ionicons/blob/master/LICENSE">MIT</a></td>
<td>4.6.3</td>
<td align="right">696</td>
</tr>
<tr>
<td><a href="https://ionicons.com/">Ionicons 5</a></td>
<td><a
href="https://github.com/ionic-team/ionicons/blob/master/LICENSE">MIT</a></td>
<td>5.5.4</td>
<td align="right">1332</td>
</tr>
<tr>
<td><a href="http://google.github.io/material-design-icons/">Material
Design icons</a></td>
<td><a
href="https://github.com/google/material-design-icons/blob/master/LICENSE">Apache
License Version 2.0</a></td>
<td>4.0.0-125-gef43291c4d</td>
<td align="right">4341</td>
</tr>
<tr>
<td><a href="http://s-ings.com/typicons/">Typicons</a></td>
<td><a href="https://creativecommons.org/licenses/by-sa/3.0/">CC BY-SA
3.0</a></td>
<td>2.1.2</td>
<td align="right">336</td>
</tr>
<tr>
<td><a href="https://octicons.github.com/">Github Octicons
icons</a></td>
<td><a
href="https://github.com/primer/octicons/blob/master/LICENSE">MIT</a></td>
<td>18.3.0</td>
<td align="right">264</td>
</tr>
<tr>
<td><a href="https://feathericons.com/">Feather</a></td>
<td><a
href="https://github.com/feathericons/feather/blob/master/LICENSE">MIT</a></td>
<td>4.29.2</td>
<td align="right">287</td>
</tr>
<tr>
<td><a href="https://lucide.dev/">Lucide</a></td>
<td><a
href="https://github.com/lucide-icons/lucide/blob/main/LICENSE">ISC</a></td>
<td>0.462.0</td>
<td align="right">1541</td>
</tr>
<tr>
<td><a href="https://game-icons.net/">Game Icons</a></td>
<td><a href="https://creativecommons.org/licenses/by/3.0/">CC BY
3.0</a></td>
<td>12920d6565588f0512542a3cb0cdfd36a497f910</td>
<td align="right">4040</td>
</tr>
<tr>
<td><a href="https://erikflowers.github.io/weather-icons/">Weather
Icons</a></td>
<td><a href="http://scripts.sil.org/OFL">SIL OFL 1.1</a></td>
<td>2.0.12</td>
<td align="right">219</td>
</tr>
<tr>
<td><a href="https://vorillaz.github.io/devicons/">Devicons</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>1.8.0</td>
<td align="right">192</td>
</tr>
<tr>
<td><a href="https://github.com/ant-design/ant-design-icons">Ant Design
Icons</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>4.4.2</td>
<td align="right">831</td>
</tr>
<tr>
<td><a href="https://github.com/twbs/icons">Bootstrap Icons</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>1.11.3</td>
<td align="right">2716</td>
</tr>
<tr>
<td><a href="https://github.com/Remix-Design/RemixIcon">Remix
Icon</a></td>
<td><a href="http://www.apache.org/licenses/">Apache License Version
2.0</a></td>
<td>4.5.0</td>
<td align="right">3020</td>
</tr>
<tr>
<td><a href="https://github.com/icons8/flat-color-icons">Flat Color
Icons</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>1.0.2</td>
<td align="right">329</td>
</tr>
<tr>
<td><a
href="https://github.com/grommet/grommet-icons">Grommet-Icons</a></td>
<td><a href="http://www.apache.org/licenses/">Apache License Version
2.0</a></td>
<td>4.12.1</td>
<td align="right">635</td>
</tr>
<tr>
<td><a
href="https://github.com/tailwindlabs/heroicons">Heroicons</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>1.0.6</td>
<td align="right">460</td>
</tr>
<tr>
<td><a href="https://github.com/tailwindlabs/heroicons">Heroicons
2</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>2.2.0</td>
<td align="right">972</td>
</tr>
<tr>
<td><a href="https://simpleicons.org/">Simple Icons</a></td>
<td><a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0 1.0
Universal</a></td>
<td>13.19.0</td>
<td align="right">3275</td>
</tr>
<tr>
<td><a href="https://thesabbir.github.io/simple-line-icons/">Simple Line
Icons</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>2.5.5</td>
<td align="right">189</td>
</tr>
<tr>
<td><a href="https://github.com/Keyamoon/IcoMoon-Free">IcoMoon
Free</a></td>
<td><a
href="https://github.com/Keyamoon/IcoMoon-Free/blob/master/License.txt">CC
BY 4.0 License</a></td>
<td>d006795ede82361e1bac1ee76f215cf1dc51e4ca</td>
<td align="right">491</td>
</tr>
<tr>
<td><a href="https://github.com/atisawd/boxicons">BoxIcons</a></td>
<td><a
href="https://github.com/atisawd/boxicons/blob/master/LICENSE">MIT</a></td>
<td>2.1.4</td>
<td align="right">1634</td>
</tr>
<tr>
<td><a href="https://github.com/astrit/css.gg">css.gg</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>2.1.4</td>
<td align="right">704</td>
</tr>
<tr>
<td><a href="https://github.com/microsoft/vscode-codicons">VS Code
Icons</a></td>
<td><a href="https://creativecommons.org/licenses/by/4.0/">CC BY
4.0</a></td>
<td>0.0.36</td>
<td align="right">466</td>
</tr>
<tr>
<td><a href="https://github.com/tabler/tabler-icons">Tabler
Icons</a></td>
<td><a href="https://opensource.org/licenses/MIT">MIT</a></td>
<td>3.24.0</td>
<td align="right">5754</td>
</tr>
<tr>
<td><a href="https://github.com/lykmapipo/themify-icons">Themify
Icons</a></td>
<td><a
href="https://github.com/thecreation/standard-icons/blob/master/modules/themify-icons/LICENSE">MIT</a></td>
<td>v0.1.2-2-g9600186</td>
<td align="right">352</td>
</tr>
<tr>
<td><a href="https://icons.radix-ui.com">Radix Icons</a></td>
<td><a
href="https://github.com/radix-ui/icons/blob/master/LICENSE">MIT</a></td>
<td><code>@​radix-ui/react-icons</code><a
href="https://github.com/1"><code>@​1</code></a>.3.2</td>
<td align="right">318</td>
</tr>
<tr>
<td><a href="https://github.com/phosphor-icons/core">Phosphor
Icons</a></td>
<td><a
href="https://github.com/phosphor-icons/core/blob/main/LICENSE">MIT</a></td>
<td>2.1.1</td>
<td align="right">9072</td>
</tr>
<tr>
<td><a href="https://icons8.com/line-awesome">Icons8 Line
Awesome</a></td>
<td><a
href="https://github.com/icons8/line-awesome/blob/master/LICENSE.md">MIT</a></td>
<td>1.3.1</td>
<td align="right">1544</td>
</tr>
</tbody>
</table>
<h2>v5.4.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Add closing of the icon details modal with the ESC key by <a
href="https://github.com/gabrielogregorio"><code>@​gabrielogregorio</code></a>
in <a
href="https://redirect.github.com/react-icons/react-icons/pull/900">react-icons/react-icons#900</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/react-icons/react-icons/commit/7bf8bdd2501871a73b7f85fe853d751f5c0f2fb3"><code>7bf8bdd</code></a>
v5.5.0</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/b5215f71017a1183383d657b0db8e6682543f308"><code>b5215f7</code></a>
Bump esbuild from 0.20.2 to 0.25.0 (<a
href="https://redirect.github.com/react-icons/react-icons/issues/1027">#1027</a>)</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/d2adb99457dc526690083fffadc9112db831fe7f"><code>d2adb99</code></a>
Bump vite from 5.4.11 to 5.4.14 (<a
href="https://redirect.github.com/react-icons/react-icons/issues/1021">#1021</a>)</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/3cc1206c35e6ff6ed8724b7fa3d4233ab1101e57"><code>3cc1206</code></a>
Bump nanoid from 3.3.7 to 3.3.8 (<a
href="https://redirect.github.com/react-icons/react-icons/issues/1005">#1005</a>)</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/d923f280577f67cd3c344b7c5cc6fcc579f9d948"><code>d923f28</code></a>
Bump vite from 5.2.10 to 5.4.11 (<a
href="https://redirect.github.com/react-icons/react-icons/issues/996">#996</a>)</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/4ad86397c7bcc4a370e465bad0816d1d15bf9468"><code>4ad8639</code></a>
Update iconBase.tsx (<a
href="https://redirect.github.com/react-icons/react-icons/issues/1004">#1004</a>)</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/7d8acdb988066ada7e2d1019dec9e90699ecdb64"><code>7d8acdb</code></a>
5.4.1-snapshot.0</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/7b14efea784c5e83b30b87c969d35bcb8c478186"><code>7b14efe</code></a>
v5.4.0</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/1e40e107f4def0bb1e4a79c5037244b64d9c91fb"><code>1e40e10</code></a>
workflow: upgrade workflows (<a
href="https://redirect.github.com/react-icons/react-icons/issues/999">#999</a>)</li>
<li><a
href="https://github.com/react-icons/react-icons/commit/9a2d9a77ca17abb9778a856dc159a380bc8746b9"><code>9a2d9a7</code></a>
Bump cross-spawn from 7.0.3 to 7.0.6 (<a
href="https://redirect.github.com/react-icons/react-icons/issues/994">#994</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/react-icons/react-icons/compare/v4.12.0...v5.5.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=react-icons&package-manager=npm_and_yarn&previous-version=4.12.0&new-version=5.5.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 13:10:49 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> df4b285809 build(deps-dev): Bump autoprefixer from 10.4.23 to 10.4.24 (#55)
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from
10.4.23 to 10.4.24.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/autoprefixer/releases">autoprefixer's
releases</a>.</em></p>
<blockquote>
<h2>10.4.24</h2>
<ul>
<li>Made Autoprefixer a little faster (by <a
href="https://github.com/Cherry"><code>@​Cherry</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md">autoprefixer's
changelog</a>.</em></p>
<blockquote>
<h2>10.4.24</h2>
<ul>
<li>Made Autoprefixer a little faster (by <a
href="https://github.com/Cherry"><code>@​Cherry</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/postcss/autoprefixer/commit/36692c25e7ebf68b61cf992535a15f86e03ba4df"><code>36692c2</code></a>
Release 10.4.24 version</li>
<li><a
href="https://github.com/postcss/autoprefixer/commit/67df014ae17b47b277e8e00abe3267650b4f2585"><code>67df014</code></a>
Update dependencies</li>
<li><a
href="https://github.com/postcss/autoprefixer/commit/032440ee4a2fc8d0d8b391df91bb1ea377e256be"><code>032440e</code></a>
perf: reduce array allocations (<a
href="https://redirect.github.com/postcss/autoprefixer/issues/1542">#1542</a>)</li>
<li>See full diff in <a
href="https://github.com/postcss/autoprefixer/compare/10.4.23...10.4.24">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=autoprefixer&package-manager=npm_and_yarn&previous-version=10.4.23&new-version=10.4.24)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 13:04:25 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> dc8a7b2414 build(deps): Bump axios-cache-interceptor from 1.11.2 to 1.11.4 (#68)
Bumps
[axios-cache-interceptor](https://github.com/arthurfiorette/axios-cache-interceptor)
from 1.11.2 to 1.11.4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/releases">axios-cache-interceptor's
releases</a>.</em></p>
<blockquote>
<h2>v1.11.4</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix: canceled requests no longer propagate errors to deduplicated
requests by <a
href="https://github.com/Copilot"><code>@​Copilot</code></a> in <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1172">arthurfiorette/axios-cache-interceptor#1172</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/compare/v1.11.3...v1.11.4">https://github.com/arthurfiorette/axios-cache-interceptor/compare/v1.11.3...v1.11.4</a></p>
<h2>v1.11.3</h2>
<h2>What's Changed</h2>
<ul>
<li>Move out of X-Axios-Cache headers by <a
href="https://github.com/arthurfiorette"><code>@​arthurfiorette</code></a>
in <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1162">arthurfiorette/axios-cache-interceptor#1162</a></li>
<li>Move to rolldown by <a
href="https://github.com/arthurfiorette"><code>@​arthurfiorette</code></a>
in <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1163">arthurfiorette/axios-cache-interceptor#1163</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/compare/v1.11.2...v1.11.3">https://github.com/arthurfiorette/axios-cache-interceptor/compare/v1.11.2...v1.11.3</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/blob/main/CHANGELOG.md">axios-cache-interceptor's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/compare/v1.11.3...v1.11.4">v1.11.4</a></h2>
<h3>Merged</h3>
<ul>
<li>Fix: canceled requests no longer propagate errors to deduplicated
requests <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1172"><code>[#1172](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1172)</code></a></li>
<li>build(deps-dev): bump <code>@​types/node</code> from 24.10.8 to
24.10.9 <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1170"><code>[#1170](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1170)</code></a></li>
<li>build(deps-dev): bump <code>@​types/node</code> from 24.10.7 to
24.10.8 <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1168"><code>[#1168](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1168)</code></a></li>
<li>build(deps-dev): bump <code>@​types/node</code> from 24.10.4 to
24.10.7 <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1166"><code>[#1166](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1166)</code></a></li>
<li>build(deps-dev): bump tsdown from 0.18.4 to 0.19.0 <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1167"><code>[#1167](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1167)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>Delete build.sh <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/41c3a24a5b89995c391dc94d60333ceee7b23e07"><code>41c3a24</code></a></li>
</ul>
<h2><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/compare/v1.11.2...v1.11.3">v1.11.3</a>
- 2026-01-09</h2>
<h3>Merged</h3>
<ul>
<li>build(deps-dev): bump <code>@​biomejs/biome</code> from 2.3.10 to
2.3.11 <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1165"><code>[#1165](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1165)</code></a></li>
<li>Move to rolldown <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1163"><code>[#1163](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1163)</code></a></li>
<li>Move out of X-Axios-Cache headers <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1162"><code>[#1162](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1162)</code></a></li>
<li>build(deps-dev): bump jsdom from 27.3.0 to 27.4.0 <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1161"><code>[#1161](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1161)</code></a></li>
<li>build(deps-dev): bump vitepress-plugin-llms from 1.9.3 to 1.10.0 <a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/pull/1160"><code>[#1160](https://github.com/arthurfiorette/axios-cache-interceptor/issues/1160)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>Add Vary debug information <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/60467e2f5794f5c275efec6c26df3e806183432f"><code>60467e2</code></a></li>
<li>Update Changelog <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/3ed006adafc50c7182bb296f5aa6742568f5ecfd"><code>3ed006a</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/ece3e6536f88e21272b4f6cb0dcac2989def2c80"><code>ece3e65</code></a>
1.11.4</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/2aea76d3a37704744f753dfdb8b4514193031000"><code>2aea76d</code></a>
Fix: canceled requests no longer propagate errors to deduplicated
requests (#...</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/58e46c9fe3c92d67863aa3f1bfc2b106bf1f3f35"><code>58e46c9</code></a>
build(deps-dev): bump <code>@​types/node</code> from 24.10.8 to 24.10.9
(<a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/issues/1170">#1170</a>)</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/3933ecba1ee16a1bdf088cf6ca77e163293b93e4"><code>3933ecb</code></a>
build(deps-dev): bump <code>@​types/node</code> from 24.10.7 to 24.10.8
(<a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/issues/1168">#1168</a>)</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/4ada3332b81a7a04bb4348067511a11d08aa2fe3"><code>4ada333</code></a>
build(deps-dev): bump <code>@​types/node</code> from 24.10.4 to 24.10.7
(<a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/issues/1166">#1166</a>)</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/f03b56a3ca518e8405d15038d734b2395ed3e254"><code>f03b56a</code></a>
build(deps-dev): bump tsdown from 0.18.4 to 0.19.0 (<a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/issues/1167">#1167</a>)</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/41c3a24a5b89995c391dc94d60333ceee7b23e07"><code>41c3a24</code></a>
Delete build.sh</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/60467e2f5794f5c275efec6c26df3e806183432f"><code>60467e2</code></a>
Add Vary debug information</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/389ac2364c8e434a261d1dc82ee980eb95785de0"><code>389ac23</code></a>
build(deps-dev): bump <code>@​biomejs/biome</code> from 2.3.10 to 2.3.11
(<a
href="https://redirect.github.com/arthurfiorette/axios-cache-interceptor/issues/1165">#1165</a>)</li>
<li><a
href="https://github.com/arthurfiorette/axios-cache-interceptor/commit/3ed006adafc50c7182bb296f5aa6742568f5ecfd"><code>3ed006a</code></a>
Update Changelog</li>
<li>Additional commits viewable in <a
href="https://github.com/arthurfiorette/axios-cache-interceptor/compare/v1.11.2...v1.11.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=axios-cache-interceptor&package-manager=npm_and_yarn&previous-version=1.11.2&new-version=1.11.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 12:57:55 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 2bd0f447a8 build(deps-dev): Bump knip from 5.81.0 to 5.82.1 (#67)
Bumps [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip)
from 5.81.0 to 5.82.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/webpro-nl/knip/releases">knip's
releases</a>.</em></p>
<blockquote>
<h2>Release 5.82.1</h2>
<ul>
<li>Add vsce + ovsx verify PATs
(6bec12857f9278c07685388eac3f9d475b63d5df)</li>
<li>Improve coverage for <code>isReferencedInExport</code> types
(570eafe3a69cc2738e5aabb800cc9dd0076b83ca)</li>
</ul>
<h2>Release 5.82.0</h2>
<ul>
<li>Release <code>@​knip/create-config</code><a
href="https://github.com/1"><code>@​1</code></a>.2.0
(31eaaf544c88bd4c26003025da515a0f8ac134dd)</li>
<li>Update docs (0384673619ad523cfc936b7c7c465010de40f5b1)</li>
<li>Add config load error hint + example env var fixes (close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1470">#1470</a>)
(844beb008dc155b8b04fee085949c9e32513f409)</li>
<li>Improve mdx &quot;compiler&quot; (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1471">#1471</a>)
(cd145e2a189be3be37ca997ad3aa0d96c90270be)</li>
<li>Add and use <code>deputy.addIgnoredUnresolved</code>
(4f6d9e5c9216fe9743ddaec1fa8f71d4fc33469f)</li>
<li>Unescape regex in config hint output
(b51772648213276b960fd11d93a4c1df01c3ba4d)</li>
<li>Create new sveltekit plugin (split from svelte)
(714af2e7908f3493c27b1c2f74b617e9a2d3c4d6)</li>
<li>Use bun@1.2.22 (cf5bae269428b87a1f1c84aa49654399b910d484)</li>
<li>Detect and install none installed packages (<a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1473">#1473</a>)
(abefd095a798b0356b1952dcbc74a6f851b69ab0) - thanks <a
href="https://github.com/AlexanderKaran"><code>@​AlexanderKaran</code></a>!</li>
<li>Auto-format (443017526c47e1095bd6b44babc1fb2639a28cde)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/webpro-nl/knip/commit/a306f49726a852be0fe0cf1cb504ae2bb82276d5"><code>a306f49</code></a>
Release knip@5.82.1</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/570eafe3a69cc2738e5aabb800cc9dd0076b83ca"><code>570eafe</code></a>
Improve coverage for <code>isReferencedInExport</code> types</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/afd268a1c34b3f4019e3417f9d37bdfe3e4f5f99"><code>afd268a</code></a>
Release knip@5.82.0</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/714af2e7908f3493c27b1c2f74b617e9a2d3c4d6"><code>714af2e</code></a>
Create new sveltekit plugin (split from svelte)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/b51772648213276b960fd11d93a4c1df01c3ba4d"><code>b517726</code></a>
Unescape regex in config hint output</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/4f6d9e5c9216fe9743ddaec1fa8f71d4fc33469f"><code>4f6d9e5</code></a>
Add and use <code>deputy.addIgnoredUnresolved</code></li>
<li><a
href="https://github.com/webpro-nl/knip/commit/cd145e2a189be3be37ca997ad3aa0d96c90270be"><code>cd145e2</code></a>
Improve mdx &quot;compiler&quot; (resolve <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1471">#1471</a>)</li>
<li><a
href="https://github.com/webpro-nl/knip/commit/844beb008dc155b8b04fee085949c9e32513f409"><code>844beb0</code></a>
Add config load error hint + example env var fixes (close <a
href="https://github.com/webpro-nl/knip/tree/HEAD/packages/knip/issues/1470">#1470</a>)</li>
<li>See full diff in <a
href="https://github.com/webpro-nl/knip/commits/knip@5.82.1/packages/knip">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=knip&package-manager=npm_and_yarn&previous-version=5.81.0&new-version=5.82.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 12:57:02 +01:00
MartinandMarco Pasqualetti f64b56ae9a backend tests in ci, clean pg import (#71)
- run backend tests in CI
- clean `pg` import
- fix cyclic dependency
- fix dotenv import

---------

Co-authored-by: Marco Pasqualetti <24919330+marcalexiei@users.noreply.github.com>
2026-02-10 08:50:43 +01:00
Marco Pasqualetti 3fb7b37d75 refactor: add eslint-plugin-import-x (#65)
- related to #29
2026-02-09 09:15:46 +01:00
Marco Pasqualetti 8bad081e79 test(e2e): add playwright (#47)
- closes #46
2026-02-08 10:29:07 +01:00
Martin cafb30ef1d build(deps-dev): Bump prettier from 3.7.4 to 3.8.1 (#57)
Bumps [prettier](https://github.com/prettier/prettier) from 3.7.4 to
3.8.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/prettier/prettier/releases">prettier's
releases</a>.</em></p>
<blockquote>
<h2>3.8.1</h2>
<ul>
<li>Include available <code>printers</code> in plugin type declarations
(<a
href="https://redirect.github.com/prettier/prettier/pull/18706">#18706</a>
by <a href="https://github.com/porada"><code>@​porada</code></a>)</li>
</ul>
<p>🔗 <a
href="https://github.com/prettier/prettier/blob/main/CHANGELOG.md#381">Changelog</a></p>
<h2>3.8.0</h2>
<ul>
<li>Support Angular v21.1</li>
</ul>
<p><a
href="https://github.com/prettier/prettier/compare/3.7.4...3.8.0">diff</a></p>
<p>🔗 <a href="https://prettier.io/blog/2026/01/14/3.8.0">Release note
&quot;Prettier 3.8: Support for Angular v21.1&quot;</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/prettier/prettier/blob/main/CHANGELOG.md">prettier's
changelog</a>.</em></p>
<blockquote>
<h1>3.8.1</h1>
<p><a
href="https://github.com/prettier/prettier/compare/3.8.0...3.8.1">diff</a></p>
<h4>Include available <code>printers</code> in plugin type declarations
(<a
href="https://redirect.github.com/prettier/prettier/pull/18706">#18706</a>
by <a href="https://github.com/porada"><code>@​porada</code></a>)</h4>
<!-- raw HTML omitted -->
<pre lang="ts"><code>// Input
import * as prettierPluginEstree from
&quot;prettier/plugins/estree&quot;;
<p>// Prettier 3.8.0
// Property 'printers' does not exist on type 'typeof
import(&quot;prettier/plugins/estree&quot;)'. ts(2339)
prettierPluginEstree.printers.estree; //=&gt; any</p>
<p>// Prettier 3.8.1
prettierPluginEstree.printers.estree; //=&gt; Printer
prettierPluginEstree.printers[&quot;estree-json&quot;]; //=&gt; Printer
</code></pre></p>
<h1>3.8.0</h1>
<p><a
href="https://github.com/prettier/prettier/compare/3.7.4...3.8.0">diff</a></p>
<p>🔗 <a href="https://prettier.io/blog/2026/01/14/3.8.0">Release
Notes</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/prettier/prettier/commit/90983f40dce5e20beea4e5618b5e0426a6a7f4f0"><code>90983f4</code></a>
Release 3.8.1</li>
<li><a
href="https://github.com/prettier/prettier/commit/57f702f7656e6fc03873f8121480c321b2f44c8c"><code>57f702f</code></a>
Include available <code>printers</code> in plugin type declarations (<a
href="https://redirect.github.com/prettier/prettier/issues/18706">#18706</a>)</li>
<li><a
href="https://github.com/prettier/prettier/commit/bece82785141274c12956b0af3bae77a44ae3a9e"><code>bece827</code></a>
Revert change in release script</li>
<li><a
href="https://github.com/prettier/prettier/commit/82a4ab26f1e7fccd0041272de12a3c6b942e622b"><code>82a4ab2</code></a>
Bump Prettier dependency to 3.8.0</li>
<li><a
href="https://github.com/prettier/prettier/commit/5213ee463c653f47e1821de414a4f30573f83337"><code>5213ee4</code></a>
Clean changelog_unreleased</li>
<li><a
href="https://github.com/prettier/prettier/commit/f95ad0f8e1dd9fb5507e7088f42f91fa6b5f3cb0"><code>f95ad0f</code></a>
Comment out finished steps</li>
<li><a
href="https://github.com/prettier/prettier/commit/b2034e819aef944fe1fe3bbf532118885a854f64"><code>b2034e8</code></a>
Fix release script</li>
<li><a
href="https://github.com/prettier/prettier/commit/5824b15189303d52892ffbc0812751533666c674"><code>5824b15</code></a>
Release 3.8.0</li>
<li><a
href="https://github.com/prettier/prettier/commit/04336012b351529f624eaeb3ac9af52a5b7b7c01"><code>0433601</code></a>
Add blog post for v3.8.0 (<a
href="https://redirect.github.com/prettier/prettier/issues/18639">#18639</a>)</li>
<li><a
href="https://github.com/prettier/prettier/commit/b04d05b831f1476ac6e24e1211972bfdd475c9b8"><code>b04d05b</code></a>
Remove lint step from release script (<a
href="https://redirect.github.com/prettier/prettier/issues/18415">#18415</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/prettier/prettier/compare/3.7.4...3.8.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=prettier&package-manager=npm_and_yarn&previous-version=3.7.4&new-version=3.8.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2026-02-08 08:11:50 +01:00
Martin 6059dc188e build(deps): Bump react-spinners from 0.13.8 to 0.17.0 (#58)
Bumps [react-spinners](https://github.com/davidhu2000/react-spinners)
from 0.13.8 to 0.17.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/davidhu2000/react-spinners/releases">react-spinners's
releases</a>.</em></p>
<blockquote>
<h2>v0.17.0</h2>
<h2>Features</h2>
<ul>
<li>fix: add use client to ensure loaders run on server components by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/639">davidhu2000/react-spinners#639</a></li>
</ul>
<h2>Chores</h2>
<p>Remove unused outputted files from published package, including
<code>umd</code> files, duplicated <code>cjs</code> files, test files,
and unnecessary config files. This decreased the total package size by
<code>321KB</code>,</p>
<pre lang="diff"><code>- 541KB
+ 220KB
</code></pre>
<h2>Changelog</h2>
<ul>
<li>release 0.17.0-beta.1 by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/640">davidhu2000/react-spinners#640</a></li>
<li>chore(deps-dev): bump the eslint group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/641">davidhu2000/react-spinners#641</a></li>
<li>chore(deps-dev): bump <code>@​vitejs/plugin-react</code> from 4.3.4
to 4.4.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/642">davidhu2000/react-spinners#642</a></li>
<li>chore(deps-dev): bump vite from 6.2.6 to 6.3.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/643">davidhu2000/react-spinners#643</a></li>
<li>chore: update-yarn to stable version, dedupe deps by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/644">davidhu2000/react-spinners#644</a></li>
<li>chore: add unnecessary files to npmignore by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/645">davidhu2000/react-spinners#645</a></li>
<li>chore: remove umd files from npm publish by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/646">davidhu2000/react-spinners#646</a></li>
<li>chore: dedupe-cjs-outputs by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/647">davidhu2000/react-spinners#647</a></li>
<li>chore: revert cjs changes, remove <code>cjs</code> folder from build
outputs by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/648">davidhu2000/react-spinners#648</a></li>
<li>chore: add eslint config to npmignore by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/649">davidhu2000/react-spinners#649</a></li>
<li>chore: update readme example to not use path import by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/650">davidhu2000/react-spinners#650</a></li>
<li>chore(deps-dev): bump vite from 6.3.1 to 6.3.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/651">davidhu2000/react-spinners#651</a></li>
<li>chore(deps-dev): bump eslint from 9.24.0 to 9.25.0 in the eslint
group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/653">davidhu2000/react-spinners#653</a></li>
<li>chore(deps-dev): bump <code>@​vitejs/plugin-react</code> from 4.4.0
to 4.4.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/652">davidhu2000/react-spinners#652</a></li>
<li>chore: release-0.17.0 by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/654">davidhu2000/react-spinners#654</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/davidhu2000/react-spinners/compare/v0.16.1...v0.17.0">https://github.com/davidhu2000/react-spinners/compare/v0.16.1...v0.17.0</a></p>
<h2>v0.16.1</h2>
<h2>What's Changed</h2>
<ul>
<li>fix: update scale loader prop to be optional to fix breaking change
by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/638">davidhu2000/react-spinners#638</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/davidhu2000/react-spinners/compare/v0.16.0...v0.16.1">https://github.com/davidhu2000/react-spinners/compare/v0.16.0...v0.16.1</a></p>
<h2>v0.16.0</h2>
<blockquote>
<p>[!CAUTION]
This version included a breaking change in <code>ScaleLoader</code>
where the newly introduced <code>barCount</code> prop was not marked as
optional. This issue has been patched in <code>v0.16.1</code>.</p>
</blockquote>
<h2>What's Changed</h2>
<ul>
<li>chore: add-dependabot-gruping by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/618">davidhu2000/react-spinners#618</a></li>
<li>Bump nanoid from 3.3.7 to 3.3.8 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/616">davidhu2000/react-spinners#616</a></li>
<li>chore(deps-dev): bump the testing group with 3 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/623">davidhu2000/react-spinners#623</a></li>
<li>chore: add storybook to storeybook grouping by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/627">davidhu2000/react-spinners#627</a></li>
<li>chore: update storybook to latest version by <a
href="https://github.com/davidhu2000"><code>@​davidhu2000</code></a> in
<a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/630">davidhu2000/react-spinners#630</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/davidhu2000/react-spinners/blob/main/CHANGELOG.md">react-spinners's
changelog</a>.</em></p>
<blockquote>
<blockquote>
<p>[!IMPORTANT]<br />
This changelog is deprecated. Please check <a
href="https://github.com/davidhu2000/react-spinners/releases">GitHub
Releases</a> for the most up-to-date release information.</p>
</blockquote>
<h1>Change Log</h1>
<p>All notable changes to this project will be documented in this file.
This project adheres to <a href="http://semver.org/">Semantic
Versioning</a>.</p>
<h2>0.14.1</h2>
<ul>
<li>revert <a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/602">#602</a>
due to issues with test and server side rendering</li>
</ul>
<h2>0.14.0</h2>
<ul>
<li>feat: color prop can accept rgb colors <a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/586">#586</a></li>
<li>fix: multiple hash loader with different color renders as the same
color <a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/602">#602</a></li>
<li>fix: moon loader wobble if size is not divisible by 7 <a
href="https://redirect.github.com/davidhu2000/react-spinners/pull/603">#603</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/davidhu2000/react-spinners/commit/0a3a88c6f25c82fd4ba0638522f37ba20efb085a"><code>0a3a88c</code></a>
chore: release-0.17.0 (<a
href="https://redirect.github.com/davidhu2000/react-spinners/issues/654">#654</a>)</li>
<li><a
href="https://github.com/davidhu2000/react-spinners/commit/b5c4b028b2045321b192c15f7bc4929a48495eac"><code>b5c4b02</code></a>
chore(deps-dev): bump <code>@​vitejs/plugin-react</code> from 4.4.0 to
4.4.1 (<a
href="https://redirect.github.com/davidhu2000/react-spinners/issues/652">#652</a>)</li>
<li><a
href="https://github.com/davidhu2000/react-spinners/commit/6031d76cc6499dd0e21cd97aceeedcdb54028499"><code>6031d76</code></a>
chore(deps-dev): bump eslint from 9.24.0 to 9.25.0 in the eslint group
(<a
href="https://redirect.github.com/davidhu2000/react-spinners/issues/653">#653</a>)</li>
<li><a
href="https://github.com/davidhu2000/react-spinners/commit/ad81495046fdac79bb21cd223b16178e0e0055d1"><code>ad81495</code></a>
chore(deps-dev): bump vite from 6.3.1 to 6.3.2 (<a
href="https://redirect.github.com/davidhu2000/react-spinners/issues/651">#651</a>)</li>
<li><a
href="https://github.com/davidhu2000/react-spinners/commit/06ee10d26850fe817344539d13251155bd2a36d1"><code>06ee10d</code></a>
bump version to 0.17.0-beta.6</li>
<li><a
href="https://github.com/davidhu2000/react-spinners/commit/f97f3df7af86fcd63dbedd389e22f8aa44ae5a11"><code>f97f3df</code></a>
chore: update readme example to not use path import (<a
href="https://redirect.github.com/davidhu2000/react-spinners/issues/650">#650</a>)</li>
<li><a
href="https://github.com/davidhu2000/react-spinners/commit/efb439a1a53ad43cc0ef8b0c1b05b09939c2b4f6"><code>efb439a</code></a>
chore: add eslint config to npmignore (<a
href="https://redirect.github.com/davidhu2000/react-spinners/issues/649">#649</a>)</li>
<li><a
href="https://github.com/davidhu2000/react-spinners/commit/ce5d33ea21d1deef9bbec3da732a5740355927cf"><code>ce5d33e</code></a>
chore: revert cjs changes, remove <code>cjs</code> folder from build
outputs (<a
href="https://redirect.github.com/davidhu2000/react-spinners/issues/648">#648</a>)</li>
<li><a
href="https://github.com/davidhu2000/react-spinners/commit/1b7dad0532f8abef2232edfc765ce44696afa759"><code>1b7dad0</code></a>
chore: dedupe-cjs-outputs (<a
href="https://redirect.github.com/davidhu2000/react-spinners/issues/647">#647</a>)</li>
<li><a
href="https://github.com/davidhu2000/react-spinners/commit/875b03c78bb463f393216e3ffb666cbaabf91cb3"><code>875b03c</code></a>
release 0.17.0-beta.3</li>
<li>Additional commits viewable in <a
href="https://github.com/davidhu2000/react-spinners/compare/v0.13.8...v0.17.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=react-spinners&package-manager=npm_and_yarn&previous-version=0.13.8&new-version=0.17.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2026-02-08 08:08:31 +01:00
dependabot[bot] 8eed0abe5f build(deps-dev): Bump prettier from 3.7.4 to 3.8.1
Bumps [prettier](https://github.com/prettier/prettier) from 3.7.4 to 3.8.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.7.4...3.8.1)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.8.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-08 07:06:14 +00:00
Martin 4d9f6128c1 build(deps): Bump axios from 1.13.2 to 1.13.4 (#59)
Bumps [axios](https://github.com/axios/axios) from 1.13.2 to 1.13.4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/releases">axios's
releases</a>.</em></p>
<blockquote>
<h2>v1.13.4</h2>
<h2>Overview</h2>
<p>The release addresses issues discovered in v1.13.3 and includes
significant CI/CD improvements.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/axios/axios/compare/v1.13.3...v1.13.4">v1.13.3...v1.13.4</a></p>
<h2>What's New in v1.13.4</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>fix: issues with version 1.13.3</strong> (<a
href="https://redirect.github.com/axios/axios/issues/7352">#7352</a>)
(<a
href="https://github.com/axios/axios/commit/ee90dfc28abffbb61e24974b2bd3139a4a40ac76">ee90dfc</a>)
<ul>
<li>Fixed issues discovered in v1.13.3 release</li>
<li>Cleaned up interceptor test files</li>
<li>Improved workflow configurations</li>
</ul>
</li>
</ul>
<h3>Infrastructure &amp; CI/CD</h3>
<ul>
<li>
<p><strong>refactor: ci and build</strong> (<a
href="https://redirect.github.com/axios/axios/issues/7340">#7340</a>)
(<a
href="https://github.com/axios/axios/commit/8ff6c19e2d764e8706e6a32b9f17a230dfe96e0c">8ff6c19</a>)</p>
<ul>
<li>Major refactoring of CI/CD workflows</li>
<li>Consolidated workflow files for better maintainability</li>
<li>Added mise configuration for the development environment</li>
<li>Improved sponsor block update automation</li>
<li>Enhanced issue and PR templates</li>
<li>Added automatic release notes generation</li>
<li>Implemented workflow cancellation for concurrent runs</li>
</ul>
</li>
<li>
<p><strong>chore: codegen and some updates to workflows</strong> (<a
href="https://github.com/axios/axios/commit/76cf77b">76cf77b</a>)</p>
<ul>
<li>Code generation improvements</li>
<li>Workflow optimisations</li>
</ul>
</li>
</ul>
<h2>Migration Notes</h2>
<h3>Breaking Changes</h3>
<p>None in this release.</p>
<h3>Deprecations</h3>
<p>None in this release.</p>
<h2>Contributors</h2>
<p>Thank you to all contributors who made this release possible! Special
thanks to:</p>
<ul>
<li><a href="https://github.com/jasonsaayman">jasonsaayman</a> - Release
management and CI/CD improvements</li>
</ul>
<h2>Release v1.13.3</h2>
<h2>Release notes:</h2>
<h3>Bug Fixes</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/axios/axios/blob/v1.x/CHANGELOG.md">axios's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2><a
href="https://github.com/axios/axios/compare/v1.13.2...v1.13.3">1.13.3</a>
(2026-01-20)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>http2:</strong> Use port 443 for HTTPS connections by
default. (<a
href="https://redirect.github.com/axios/axios/issues/7256">#7256</a>)
(<a
href="https://github.com/axios/axios/commit/d7e60653460480ffacecf85383012ca1baa6263e">d7e6065</a>)</li>
<li><strong>interceptor:</strong> handle the error in the same
interceptor (<a
href="https://redirect.github.com/axios/axios/issues/6269">#6269</a>)
(<a
href="https://github.com/axios/axios/commit/5945e40bb171d4ac4fc195df276cf952244f0f89">5945e40</a>)</li>
<li>main field in package.json should correspond to cjs artifacts (<a
href="https://redirect.github.com/axios/axios/issues/5756">#5756</a>)
(<a
href="https://github.com/axios/axios/commit/7373fbff24cd92ce650d99ff6f7fe08c2e2a0a04">7373fbf</a>)</li>
<li><strong>package.json:</strong> add 'bun' package.json 'exports'
condition. Load the Node.js build in Bun instead of the browser build
(<a
href="https://redirect.github.com/axios/axios/issues/5754">#5754</a>)
(<a
href="https://github.com/axios/axios/commit/b89217e3e91de17a3d55e2b8f39ceb0e9d8aeda8">b89217e</a>)</li>
<li>silentJSONParsing=false should throw on invalid JSON (<a
href="https://redirect.github.com/axios/axios/issues/7253">#7253</a>)
(<a
href="https://redirect.github.com/axios/axios/issues/7257">#7257</a>)
(<a
href="https://github.com/axios/axios/commit/7d19335e43d6754a1a9a66e424f7f7da259895bf">7d19335</a>)</li>
<li>turn AxiosError into a native error (<a
href="https://redirect.github.com/axios/axios/issues/5394">#5394</a>)
(<a
href="https://redirect.github.com/axios/axios/issues/5558">#5558</a>)
(<a
href="https://github.com/axios/axios/commit/1c6a86dd2c0623ee1af043a8491dbc96d40e883b">1c6a86d</a>)</li>
<li><strong>types:</strong> add handlers to AxiosInterceptorManager
interface (<a
href="https://redirect.github.com/axios/axios/issues/5551">#5551</a>)
(<a
href="https://github.com/axios/axios/commit/8d1271b49fc226ed7defd07cd577bd69a55bb13a">8d1271b</a>)</li>
<li><strong>types:</strong> restore AxiosError.cause type from unknown
to Error (<a
href="https://redirect.github.com/axios/axios/issues/7327">#7327</a>)
(<a
href="https://github.com/axios/axios/commit/d8233d9e8e9a64bfba9bbe01d475ba417510b82b">d8233d9</a>)</li>
<li>unclear error message is thrown when specifying an empty proxy
authorization (<a
href="https://redirect.github.com/axios/axios/issues/6314">#6314</a>)
(<a
href="https://github.com/axios/axios/commit/6ef867e684adf7fb2343e3b29a79078a3c76dc29">6ef867e</a>)</li>
</ul>
<h3>Features</h3>
<ul>
<li>add <code>undefined</code> as a value in AxiosRequestConfig (<a
href="https://redirect.github.com/axios/axios/issues/5560">#5560</a>)
(<a
href="https://github.com/axios/axios/commit/095033c626895ecdcda2288050b63dcf948db3bd">095033c</a>)</li>
<li>add automatic minor and patch upgrades to dependabot (<a
href="https://redirect.github.com/axios/axios/issues/6053">#6053</a>)
(<a
href="https://github.com/axios/axios/commit/65a7584eda6164980ddb8cf5372f0afa2a04c1ed">65a7584</a>)</li>
<li>add Node.js coverage script using c8 (closes <a
href="https://redirect.github.com/axios/axios/issues/7289">#7289</a>)
(<a
href="https://redirect.github.com/axios/axios/issues/7294">#7294</a>)
(<a
href="https://github.com/axios/axios/commit/ec9d94e9f88da13e9219acadf65061fb38ce080a">ec9d94e</a>)</li>
<li>added copilot instructions (<a
href="https://github.com/axios/axios/commit/3f83143bfe617eec17f9d7dcf8bafafeeae74c26">3f83143</a>)</li>
<li>compatibility with frozen prototypes (<a
href="https://redirect.github.com/axios/axios/issues/6265">#6265</a>)
(<a
href="https://github.com/axios/axios/commit/860e03396a536e9b926dacb6570732489c9d7012">860e033</a>)</li>
<li>enhance pipeFileToResponse with error handling (<a
href="https://redirect.github.com/axios/axios/issues/7169">#7169</a>)
(<a
href="https://github.com/axios/axios/commit/88d78842541610692a04282233933d078a8a2552">88d7884</a>)</li>
<li><strong>types:</strong> Intellisense for string literals in a
widened union (<a
href="https://redirect.github.com/axios/axios/issues/6134">#6134</a>)
(<a
href="https://github.com/axios/axios/commit/f73474d02c5aa957b2daeecee65508557fd3c6e5">f73474d</a>),
closes <a
href="https://redirect.github.com//redirect.github.com/microsoft/TypeScript/issues/33471/issues/issuecomment-1376364329">microsoft/TypeScript#33471</a></li>
</ul>
<h3>Reverts</h3>
<ul>
<li>Revert &quot;fix: silentJSONParsing=false should throw on invalid
JSON (<a
href="https://redirect.github.com/axios/axios/issues/7253">#7253</a>)
(<a
href="https://redirect.github.com/axios/axios/issues/7">#7</a>…&quot;
(<a
href="https://redirect.github.com/axios/axios/issues/7298">#7298</a>)
(<a
href="https://github.com/axios/axios/commit/a4230f5581b3f58b6ff531b6dbac377a4fd7942a">a4230f5</a>),
closes <a
href="https://redirect.github.com/axios/axios/issues/7253">#7253</a> <a
href="https://redirect.github.com/axios/axios/issues/7">#7</a> <a
href="https://redirect.github.com/axios/axios/issues/7298">#7298</a></li>
<li><strong>deps:</strong> bump peter-evans/create-pull-request from 7
to 8 in the github-actions group (<a
href="https://redirect.github.com/axios/axios/issues/7334">#7334</a>)
(<a
href="https://github.com/axios/axios/commit/2d6ad5e48bd29b0b2b5e7e95fb473df98301543a">2d6ad5e</a>)</li>
</ul>
<h3>Contributors to this release</h3>
<ul>
<li><!-- raw HTML omitted --> <a href="https://github.com/ashvin2005"
title="+1752/-4 ([#7218](https://github.com/axios/axios/issues/7218)
[#7218](https://github.com/axios/axios/issues/7218) )">Ashvin
Tiwari</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/mochinikunj"
title="+940/-12 ([#7294](https://github.com/axios/axios/issues/7294)
[#7294](https://github.com/axios/axios/issues/7294) )">Nikunj
Mochi</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/imanchalsingh"
title="+544/-102 ([#7169](https://github.com/axios/axios/issues/7169)
[#7185](https://github.com/axios/axios/issues/7185) )">Anchal
Singh</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/jasonsaayman"
title="+317/-73 ([#7334](https://github.com/axios/axios/issues/7334)
[#7298](https://github.com/axios/axios/issues/7298)
)">jasonsaayman</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/brodo"
title="+99/-120 ([#5558](https://github.com/axios/axios/issues/5558)
)">Julian Dax</a></li>
<li><!-- raw HTML omitted --> <a
href="https://github.com/AKASHDHARDUBEY" title="+167/-0
([#7287](https://github.com/axios/axios/issues/7287)
[#7288](https://github.com/axios/axios/issues/7288) )">Akash Dhar
Dubey</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/madhumitaaa"
title="+20/-68 ([#7198](https://github.com/axios/axios/issues/7198)
)">Madhumita</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/Tackoil"
title="+80/-2 ([#6269](https://github.com/axios/axios/issues/6269)
)">Tackoil</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/justindhillon"
title="+41/-41 ([#6324](https://github.com/axios/axios/issues/6324)
[#6315](https://github.com/axios/axios/issues/6315) )">Justin
Dhillon</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/Rudrxxx"
title="+71/-2 ([#7257](https://github.com/axios/axios/issues/7257)
)">Rudransh</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/WuMingDao"
title="+36/-36 ([#7215](https://github.com/axios/axios/issues/7215)
)">WuMingDao</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/codenomnom"
title="+70/-0 ([#7201](https://github.com/axios/axios/issues/7201)
[#7201](https://github.com/axios/axios/issues/7201)
)">codenomnom</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/Nandann018-ux"
title="+60/-10 ([#7272](https://github.com/axios/axios/issues/7272)
)">Nandan Acharya</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/KernelDeimos"
title="+22/-40 ([#7042](https://github.com/axios/axios/issues/7042)
)">Eric Dubé</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/tiborpilz"
title="+40/-4 ([#5551](https://github.com/axios/axios/issues/5551)
)">Tibor Pilz</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/joaoGabriel55"
title="+31/-4 ([#6314](https://github.com/axios/axios/issues/6314)
)">Gabriel Quaresma</a></li>
<li><!-- raw HTML omitted --> <a href="https://github.com/turadg"
title="+23/-6 ([#6265](https://github.com/axios/axios/issues/6265)
)">Turadg Aleahmad</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/axios/axios/commit/9336cf9a3393790ec8ca91fe3862e83fcdbe6b9d"><code>9336cf9</code></a>
chore(release): prepare release 1.13.4 (<a
href="https://redirect.github.com/axios/axios/issues/7353">#7353</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/ee90dfc28abffbb61e24974b2bd3139a4a40ac76"><code>ee90dfc</code></a>
fix: issues with version 1.13.3 (<a
href="https://redirect.github.com/axios/axios/issues/7352">#7352</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/af4f6d960f7478604841cfff2eb5c2491565c518"><code>af4f6d9</code></a>
fix: release branch yml</li>
<li><a
href="https://github.com/axios/axios/commit/253e3ad06a7b0fd3ec8ef73632aef84598e7cb78"><code>253e3ad</code></a>
fix: all merge configs</li>
<li><a
href="https://github.com/axios/axios/commit/8ff6c19e2d764e8706e6a32b9f17a230dfe96e0c"><code>8ff6c19</code></a>
refactor: ci and build (<a
href="https://redirect.github.com/axios/axios/issues/7340">#7340</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/ab06109b40e129e43096f9c75aaa21bc74ef9fc8"><code>ab06109</code></a>
chore(release): v1.13.3 (<a
href="https://redirect.github.com/axios/axios/issues/7335">#7335</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/2d6ad5e48bd29b0b2b5e7e95fb473df98301543a"><code>2d6ad5e</code></a>
revert(deps): bump peter-evans/create-pull-request from 7 to 8 in the
github-...</li>
<li><a
href="https://github.com/axios/axios/commit/cb49a6f84bb8cba4b72df078973d871d68bd46da"><code>cb49a6f</code></a>
chore(sponsor): update sponsor block (<a
href="https://redirect.github.com/axios/axios/issues/7330">#7330</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/d8233d9e8e9a64bfba9bbe01d475ba417510b82b"><code>d8233d9</code></a>
fix(types): restore AxiosError.cause type from unknown to Error (<a
href="https://redirect.github.com/axios/axios/issues/7327">#7327</a>)</li>
<li><a
href="https://github.com/axios/axios/commit/5945e40bb171d4ac4fc195df276cf952244f0f89"><code>5945e40</code></a>
fix(interceptor): handle the error in the same interceptor (<a
href="https://redirect.github.com/axios/axios/issues/6269">#6269</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/axios/axios/compare/v1.13.2...v1.13.4">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by [GitHub Actions](<a
href="https://www.npmjs.com/~GitHub">https://www.npmjs.com/~GitHub</a>
Actions), a new releaser for axios since your current version.</p>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=axios&package-manager=npm_and_yarn&previous-version=1.13.2&new-version=1.13.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2026-02-08 08:06:14 +01:00
Martin e539bb1b63 build(deps-dev): Bump typescript-eslint from 8.53.1 to 8.54.0 (#60)
Bumps
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint)
from 8.53.1 to 8.54.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/releases">typescript-eslint's
releases</a>.</em></p>
<blockquote>
<h2>v8.54.0</h2>
<h2>8.54.0 (2026-01-26)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>eslint-plugin-internal:</strong> add prefer-tsutils-methods
rule (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11974">#11974</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/11625">#11625</a>)</li>
<li><strong>scope-manager:</strong> support ScopeManager#addGlobals (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11914">#11914</a>)</li>
<li><strong>typescript-estree:</strong> add shortcut methods to
ParserServicesWithTypeInformation (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11965">#11965</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/11955">#11955</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unused-private-class-members]
private destructured class member is defined but used (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11785">#11785</a>)</li>
<li><strong>eslint-plugin:</strong> [no-unnecessary-type-assertion]
check both base constraint and actual type for non-null assertions (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11967">#11967</a>,
<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/issues/11559">#11559</a>)</li>
<li><strong>scope-manager:</strong> fix catch clause scopes
<code>def.name</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11982">#11982</a>)</li>
<li><strong>scope-manager:</strong> prevent misidentification of
<code>&quot;use strict&quot;</code> directives (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11995">#11995</a>)</li>
<li><strong>utils:</strong> handle missing <code>FlatESLint</code> and
<code>LegacyESLint</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/11958">#11958</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Brad Zacher <a
href="https://github.com/bradzacher"><code>@​bradzacher</code></a></li>
<li>fnx <a
href="https://github.com/DMartens"><code>@​DMartens</code></a></li>
<li>Francesco Trotta</li>
<li>Josh Goldberg</li>
<li>MinJae <a
href="https://github.com/Ju-MINJAE"><code>@​Ju-MINJAE</code></a></li>
<li>Minyeong Kim <a
href="https://github.com/minyeong981"><code>@​minyeong981</code></a></li>
<li>overlookmotel</li>
<li>Yuya Yoshioka <a
href="https://github.com/YuyaYoshioka"><code>@​YuyaYoshioka</code></a></li>
<li>김현수 <a
href="https://github.com/Kimsoo0119"><code>@​Kimsoo0119</code></a></li>
</ul>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md">typescript-eslint's
changelog</a>.</em></p>
<blockquote>
<h2>8.54.0 (2026-01-26)</h2>
<p>This was a version bump only for typescript-eslint to align it with
other projects, there were no code changes.</p>
<p>You can read about our <a
href="https://typescript-eslint.io/users/versioning">versioning
strategy</a> and <a
href="https://typescript-eslint.io/users/releases">releases</a> on our
website.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/typescript-eslint/typescript-eslint/commit/d423e57622e1c8e789a1b84109d1ab2c15497507"><code>d423e57</code></a>
chore(release): publish 8.54.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.54.0/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript-eslint&package-manager=npm_and_yarn&previous-version=8.53.1&new-version=8.54.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2026-02-08 08:04:41 +01:00
Martin e062283e48 build(deps-dev): Bump @eslint/compat from 2.0.1 to 2.0.2 (#63)
Bumps
[@eslint/compat](https://github.com/eslint/rewrite/tree/HEAD/packages/compat)
from 2.0.1 to 2.0.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/rewrite/releases"><code>@​eslint/compat</code>'s
releases</a>.</em></p>
<blockquote>
<h2>compat: v2.0.2</h2>
<h2><a
href="https://github.com/eslint/rewrite/compare/compat-v2.0.1...compat-v2.0.2">2.0.2</a>
(2026-01-29)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>add eslint 10 as peer dependency (<a
href="https://redirect.github.com/eslint/rewrite/issues/361">#361</a>)
(<a
href="https://github.com/eslint/rewrite/commit/ecb37dcafc6513649c03f245f0f2505e7eb10dd1">ecb37dc</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​eslint/core</code> bumped from ^1.0.1 to ^1.1.0</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>migrate-config: v2.0.2</h2>
<h2><a
href="https://github.com/eslint/rewrite/compare/migrate-config-v2.0.1...migrate-config-v2.0.2">2.0.2</a>
(2026-01-29)</h2>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​eslint/compat</code> bumped from ^2.0.1 to ^2.0.2</li>
</ul>
</li>
<li>devDependencies
<ul>
<li><code>@​eslint/core</code> bumped from ^1.0.1 to ^1.1.0</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/rewrite/blob/main/packages/compat/CHANGELOG.md"><code>@​eslint/compat</code>'s
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/eslint/rewrite/compare/compat-v2.0.1...compat-v2.0.2">2.0.2</a>
(2026-01-29)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>add eslint 10 as peer dependency (<a
href="https://redirect.github.com/eslint/rewrite/issues/361">#361</a>)
(<a
href="https://github.com/eslint/rewrite/commit/ecb37dcafc6513649c03f245f0f2505e7eb10dd1">ecb37dc</a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li><code>@​eslint/core</code> bumped from ^1.0.1 to ^1.1.0</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/rewrite/commit/7960653fe678b563051e2fbb99caf9fd3c07528c"><code>7960653</code></a>
chore: release main (<a
href="https://github.com/eslint/rewrite/tree/HEAD/packages/compat/issues/356">#356</a>)</li>
<li><a
href="https://github.com/eslint/rewrite/commit/ecb37dcafc6513649c03f245f0f2505e7eb10dd1"><code>ecb37dc</code></a>
fix: add eslint 10 as peer dependency (<a
href="https://github.com/eslint/rewrite/tree/HEAD/packages/compat/issues/361">#361</a>)</li>
<li><a
href="https://github.com/eslint/rewrite/commit/074cac2268ef11f9433282b6f043a15cec8c609d"><code>074cac2</code></a>
docs: Update README sponsors</li>
<li><a
href="https://github.com/eslint/rewrite/commit/a3b0fd51027ce7b3102591ebda42326af87b8e3e"><code>a3b0fd5</code></a>
docs: Update README sponsors</li>
<li>See full diff in <a
href="https://github.com/eslint/rewrite/commits/compat-v2.0.2/packages/compat">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@eslint/compat&package-manager=npm_and_yarn&previous-version=2.0.1&new-version=2.0.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2026-02-08 08:03:53 +01:00
Martin ad5884307e revert dependabot to reasonable config (#64) 2026-02-08 07:28:16 +01:00
martin-mfg 868395ff48 revert dependabot to reasonable config 2026-02-08 07:24:42 +01:00
dependabot[bot] 13757bbc21 build(deps-dev): Bump @eslint/compat from 2.0.1 to 2.0.2
Bumps [@eslint/compat](https://github.com/eslint/rewrite/tree/HEAD/packages/compat) from 2.0.1 to 2.0.2.
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/packages/compat/CHANGELOG.md)
- [Commits](https://github.com/eslint/rewrite/commits/compat-v2.0.2/packages/compat)

---
updated-dependencies:
- dependency-name: "@eslint/compat"
  dependency-version: 2.0.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-08 06:18:45 +00:00
dependabot[bot] b69c3f0670 build(deps-dev): Bump typescript-eslint from 8.53.1 to 8.54.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.53.1 to 8.54.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.54.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.54.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-08 06:17:53 +00:00
dependabot[bot] 096f4eecc0 build(deps): Bump axios from 1.13.2 to 1.13.4
Bumps [axios](https://github.com/axios/axios) from 1.13.2 to 1.13.4.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.13.2...v1.13.4)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.13.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-08 06:17:18 +00:00
dependabot[bot] 792b9b5eed build(deps): Bump react-spinners from 0.13.8 to 0.17.0
Bumps [react-spinners](https://github.com/davidhu2000/react-spinners) from 0.13.8 to 0.17.0.
- [Release notes](https://github.com/davidhu2000/react-spinners/releases)
- [Changelog](https://github.com/davidhu2000/react-spinners/blob/main/CHANGELOG.md)
- [Commits](https://github.com/davidhu2000/react-spinners/compare/v0.13.8...v0.17.0)

---
updated-dependencies:
- dependency-name: react-spinners
  dependency-version: 0.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-08 06:17:05 +00:00
Martin d7b3f950fb daily dependabot runs (#52)
> The property '#/updates/0/schedule/interval/cronjob' is invalid:
Cronjob expression '10/15 * * * *' has a minimum interval of 0 hours
which is less than the minimum allowed interval of 24 hours.
2026-02-08 07:14:40 +01:00
martin-mfg 9912cced12 daily dependabot runs 2026-02-08 07:12:37 +01:00
Martin 42c308e34a frequent dependabot runs (#51)
Dependabot didn't create any PRs so far. Let's see if this helps.
2026-02-08 07:09:37 +01:00
martin-mfg ec888dbcd3 frequent dependabot runs 2026-02-08 07:07:06 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1ba8beb7ac build(deps-dev): Bump eslint-plugin-jsdoc from 62.5.0 to 62.5.3 (#29)
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 62.5.0 to 62.5.3.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.5.0...v62.5.3)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 62.5.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-08 06:57:30 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 4e12d15f63 build(deps): Bump dotenv from 17.2.3 to 17.2.4 (#32)
Bumps [dotenv](https://github.com/motdotla/dotenv) from 17.2.3 to 17.2.4.
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md)
- [Commits](https://github.com/motdotla/dotenv/commits)

---
updated-dependencies:
- dependency-name: dotenv
  dependency-version: 17.2.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-08 06:54:36 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 29923618ef build(deps-dev): Bump globals from 17.2.0 to 17.3.0 (#33)
Bumps [globals](https://github.com/sindresorhus/globals) from 17.2.0 to 17.3.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v17.2.0...v17.3.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-08 06:53:09 +01:00
Martin 3fc1484fcd ci: avoid multiple ci runs when event is pull_request (#48)
-
https://docs.github.com/en/actions/how-tos/write-workflows/choose-when-workflows-run/control-workflow-concurrency
-
https://docs.github.com/en/actions/reference/workflows-and-actions/contexts#github-context
> `github.ref_name`: The short ref name of the branch or tag that
triggered the workflow run. This value matches the branch or tag name
shown on GitHub. For example, feature-branch-1.For pull requests that
were not merged, the format is <pr_number>/merge.
2026-02-08 06:50:49 +01:00
Martin 27a5ce4de9 ci: remove monorepo branch from pull_request.branches (#49) 2026-02-08 06:45:41 +01:00
Martin 54dd1f2c35 fix login urls (#50) 2026-02-08 06:36:36 +01:00
martin-mfg 88ffaf8c9e fix login urls 2026-02-08 06:33:13 +01:00
Marco Pasqualetti 433cd84087 ci: remove monorepo branch from pull_request.branches 2026-02-08 03:00:35 +01:00
Marco Pasqualetti 046a0cfd39 ci: avoid multiple ci runs when event is pull_request 2026-02-07 20:42:07 +01:00
Martin ef52e2b341 fix frontend process.env, cleanup (#44)
- fix `process.env` in frontend
- remove redundant frontend command "build-trends"
- remove outdated frontend/README.md
- add documentation about skipping Vercel build cache
2026-02-07 17:51:40 +01:00
martin-mfg 8cd32880c2 try with Vercel build cache 4 2026-02-07 17:40:34 +01:00
martin-mfg d2d2d4bc71 try with Vercel build cache 3 2026-02-07 17:26:34 +01:00
martin-mfg 43dbca0e9c remove docs for skipping vercel build 2026-02-07 16:11:16 +01:00
martin-mfg d5fd9990bf try with Vercel build cache 2 2026-02-07 16:00:34 +01:00
martin-mfg 8ef2c8034f try with Vercel build cache 2026-02-07 15:54:51 +01:00
martin-mfg 601f2d999a different approach for 'process.env' 2026-02-07 15:36:25 +01:00
martin-mfg 7549265c8d comment: fix 'dev' command 2026-02-07 13:39:52 +01:00
martin-mfg 1cbca64681 fix dependabot intervals again 2026-02-06 18:13:17 +01:00
martin-mfg 09321258e7 fix dependabot intervals 2026-02-06 18:10:20 +01:00
Martin 0a4a579d0a add dependabot (#45) 2026-02-06 18:08:00 +01:00
martin-mfg e7b920f449 add dependabot 2026-02-06 18:05:17 +01:00
martin-mfg ca5a59df07 revert rewrite change 2026-02-06 17:34:37 +01:00
martin-mfg 35955f93f1 add skipping build cache to docs 2026-02-06 17:24:50 +01:00
martin-mfg ad30a5bd2e cleanup, remove redundant 'build-trends' 2026-02-06 17:20:49 +01:00
martin-mfg 063baf7808 fix typo 2026-02-06 16:53:38 +01:00
martin-mfg d28e11696e use different env define 2026-02-06 16:50:26 +01:00
martin-mfg db7e859f9e remove 'process.env' define 2026-02-06 13:46:16 +01:00
martin-mfg ef0518a44c exclude 'process' polyfill 2026-02-06 13:36:01 +01:00
martin-mfg 8cfe8f3023 update backend rewrite 2026-02-06 12:21:35 +01:00
martin-mfg ccc9958621 disable minify 2026-02-06 12:18:19 +01:00
Martin 336163118f merge monorepo into master (#43) 2026-02-06 11:44:38 +01:00
martin-mfg b57658b274 upgrade pnpm 2026-02-06 10:04:41 +01:00
martin-mfg b46c7a826c try fix Vercel frontend build 3, amended 2026-02-05 21:51:49 +01:00
martin-mfg 5f51562dd8 try fix Vercel frontend build 2 2026-02-05 21:37:52 +01:00
martin-mfg 05c99f4557 try fix Vercel frontend build 2026-02-05 21:26:27 +01:00
martin-mfg 867af4bba5 try fix Vercel build 7 2026-02-05 21:09:13 +01:00
martin-mfg efa5beb521 try fix Vercel build 6 2026-02-05 20:51:48 +01:00
martin-mfg 38f68e4c71 try fix Vercel build 5 2026-02-05 20:41:26 +01:00
martin-mfg 3c23af5eb5 try fix Vercel build 4 2026-02-05 20:34:55 +01:00
martin-mfg ddf43bf3cd try fix Vercel build 3 2026-02-05 19:16:00 +01:00
martin-mfg 59870651eb debug logs: don't use ll 2026-02-05 18:56:51 +01:00
martin-mfg 787b259638 add debug logs 2026-02-05 18:54:19 +01:00
martin-mfg 471bb22547 try fix Vercel build 2 2026-02-05 18:14:37 +01:00
martin-mfg ebacc4942b try fix Vercel build 2026-02-05 17:59:32 +01:00
martin-mfg 0987ff587d Merge remote-tracking branch 'origin/monorepo' into intermediate-merge 2026-02-03 12:26:07 +01:00
martin-mfg 24423eca77 Merge commit '4937f5354d4d580a07dd3448aeba4252a62dd68a' 2026-02-03 12:21:37 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> a8aeac24b0 build(deps-dev): Bump @actions/core from 2.0.1 to 3.0.0 (#25)
Bumps [@actions/core](https://github.com/actions/toolkit/tree/HEAD/packages/core) from 2.0.1 to 3.0.0.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/core/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/core)

---
updated-dependencies:
- dependency-name: "@actions/core"
  dependency-version: 3.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 10:22:53 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1b40d81b80 build(deps-dev): Bump @actions/github from 6.0.1 to 9.0.0 (#24)
Bumps [@actions/github](https://github.com/actions/toolkit/tree/HEAD/packages/github) from 6.0.1 to 9.0.0.
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/github/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/github)

---
updated-dependencies:
- dependency-name: "@actions/github"
  dependency-version: 9.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 10:10:59 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> e798ab388e build(deps-dev): Bump eslint-plugin-jsdoc from 62.4.1 to 62.5.0 (#28)
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 62.4.1 to 62.5.0.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.4.1...v62.5.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 62.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 10:03:51 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 0b441638b1 build(deps): Bump axios from 1.13.2 to 1.13.4 (#26)
Bumps [axios](https://github.com/axios/axios) from 1.13.2 to 1.13.4.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.13.2...v1.13.4)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.13.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 10:03:14 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 4d967079bc build(deps-dev): Bump globals from 17.1.0 to 17.2.0 (#27)
Bumps [globals](https://github.com/sindresorhus/globals) from 17.1.0 to 17.2.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v17.1.0...v17.2.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 10:01:11 +01:00
Martin b24677beee feat(frontend): Login - split components into multiple subcomponents (#42)
- closes #40

I have divided Login into many subcomponents.
I think that each component has a name that clearly states its purpose.
2026-02-03 09:56:14 +01:00
Marco Pasqualetti 5ac8e03b2a fix: remove leftover class and retrigger github action 2026-02-02 21:08:07 +01:00
Marco Pasqualetti 407bd95a9e feat(frontend): Login - split components into multiple subcomponents 2026-02-02 13:25:03 +01:00
Martin e0bce6e5ea feat(frontend): adds typescript-eslint (#39)
- closes #38
- closes #28
2026-02-01 11:05:01 +01:00
Marco Pasqualetti 8ff9fd0f81 fix: apply review comments 2026-02-01 03:51:30 +01:00
Marco Pasqualetti 6d17615750 feat(frontend): adds typescript-eslint 2026-01-31 02:27:04 +01:00
Marco Pasqualetti 24907643ac feat(frontend): convert to ts (#37)
* feat(frontend): convert to ts

* refactor(frontend): axios-override - simplify shouldMock type

* fix: refine stage labels

* refactor(frontend): refine `useUserId` signature

* fix(frontend): descriptionLines and langsCount can be undefined

* refactor(frontend): refine casting on redirectCode

* refactor(frontend): refine stageIndex title and types

* refactor(frontend): apply pr review comments changes

* refactor(frontend): group properties using reference groups

* refactor(frontend): remove outdated comment

* fix(frontend): mock-http - simplify code
2026-01-29 09:42:25 +01:00
+2
Martindependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Rick StaaUlysses ZhanZohan SubhashAlexandrGitHub Readme Stats BotJoey Chenmikyllkrishnoitkrishna sethgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
4937f5354d merge master into monorepo (#35)
* docs: add github action as recommended usage method (#3)

Add new github action as recommended usage method now that we are no
longer sponsored by vercel and the hosted endpoint is not available
anymore.

Co-authored-by: Ulysses Zhan <UlyssesZhan@gmail.com>
Co-authored-by: Zohan Subhash <zohan.subhash@gmail.com>
Co-authored-by: Alexandr <qwerty541zxc@gmail.com>

* docs: ensure example cards render correctly (#4)

Use my deployed environment so example cards render properly and are not
rate-limited by the public instance.

* fix docs links, prepare workflows, update action example

* fix formatting

* docs(theme): auto update theme readme (#5)

Co-authored-by: GitHub Readme Stats Bot <no-reply@githubreadmestats.com>

* ci(deps): Bump stefanzweifel/git-auto-commit-action from 7.0.0 to 7.1.0 (#6)

Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 7.0.0 to 7.1.0.
- [Release notes](https://github.com/stefanzweifel/git-auto-commit-action/releases)
- [Changelog](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stefanzweifel/git-auto-commit-action/compare/28e16e81777b558cc906c8750092100bbb34c5e3...04702edda442b2e678b25b537cec683a1493fcb9)

---
updated-dependencies:
- dependency-name: stefanzweifel/git-auto-commit-action
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci(deps): Bump actions/setup-node from 6.1.0 to 6.2.0 (#7)

Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/395ad3262231945c25e8478fd5baf05154b1d79f...6044e13b5dc448c55e2357c09f80417699197238)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): Bump prettier from 3.7.4 to 3.8.0 (#13)

Bumps [prettier](https://github.com/prettier/prettier) from 3.7.4 to 3.8.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.7.4...3.8.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): Bump eslint-plugin-jsdoc from 61.5.0 to 62.0.1 (#12)

Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 61.5.0 to 62.0.1.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v61.5.0...v62.0.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 62.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): Bump globals from 16.5.0 to 17.0.0 (#9)

Bumps [globals](https://github.com/sindresorhus/globals) from 16.5.0 to 17.0.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.5.0...v17.0.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* docs: add github action as recommended usage method (#4716)

* docs: add github action as recommended usage method

Add new github action as recommended usage method now that we are no
longer sponsored by vercel and the hosted endpoint is not available
anymore.

Co-authored-by: Ulysses Zhan <UlyssesZhan@gmail.com>
Co-authored-by: Zohan Subhash <zohan.subhash@gmail.com>
Co-authored-by: Alexandr <qwerty541zxc@gmail.com>

* docs: improve action section

---------

Co-authored-by: Ulysses Zhan <UlyssesZhan@gmail.com>
Co-authored-by: Zohan Subhash <zohan.subhash@gmail.com>
Co-authored-by: Alexandr <qwerty541zxc@gmail.com>

* docs: add instructions to make PAT environment variable sensitive in Vercel deployment (#14)

Added instructions for setting environment variables securely.

Signed-off-by: Joey Chen <142381267+JoeyC-Dev@users.noreply.github.com>

* Fix default theme fallback when an invalid theme is passed (#15)

* fix(color): invalid theme fallback to default

Fixes: #4641

* test(color): add test case for invalid theme fallback to default

* style(color): add back the tab space

* test(color): fix color default theme

* fix(color): use 'in' instead of '.hasOwnProperty'

* fix new test

* format code

---------

Co-authored-by: mikyll <righi.michy@gmail.com>

* fix tests, add CI, fix on mac, extend docs (#25)

* tests: fix float problems and PAT problem

* extend CONTRIBUTING.md

* extend build documentation, add GH action, fix build on MacOS

* fix build on Vercel

* update .gitignore and CONTRIBUTING.md

* fix all tests

* add backend tests to CI

* make e2e tests work

* add debug log to e2e test

* ignore copied tests in CI

* feature(top langs card): add ability to change progress bar background color in normal layout (#16)

* #3307 enhancement : prog_bg_color query added to change the background of progress bar

* #3066 bug Fixed : readme.md file as stated

* #3066 bug Fixed : readme.md file as stated"

* #3066 bug Fixed : readme.md file as stated

* fix types.d.ts

* add test

---------

Co-authored-by: krishnoit <krishnoit100@gmail.com>
Co-authored-by: krishna seth <75961965+a-s-t-e-y-a@users.noreply.github.com>

* allow triggering workflows manually (#17)

* refactor: update languages JSON (#18)

Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>

* remove remaining barrel files

* ci(deps): Bump actions/checkout from 6.0.1 to 6.0.2 (#19)

Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): Bump prettier from 3.8.0 to 3.8.1 (#22)

Bumps [prettier](https://github.com/prettier/prettier) from 3.8.0 to 3.8.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.8.0...3.8.1)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.8.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): Bump globals from 17.0.0 to 17.1.0 (#23)

Bumps [globals](https://github.com/sindresorhus/globals) from 17.0.0 to 17.1.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v17.0.0...v17.1.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* ci(deps): Bump peter-evans/create-pull-request from 8.0.0 to 8.1.0 (#21)

Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 8.0.0 to 8.1.0.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/98357b18bf14b5342f975ff684046ec3b2a07725...c0f553fe549906ede9cf27b5156039d195d2ece0)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-version: 8.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps-dev): Bump eslint-plugin-jsdoc from 62.0.1 to 62.4.0 (#20)

Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 62.0.1 to 62.4.0.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.0.1...v62.4.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 62.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Revert "remove remaining barrel files"

This reverts commit 31df917cbf.

* fix formatting

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Joey Chen <142381267+JoeyC-Dev@users.noreply.github.com>
Co-authored-by: Rick Staa <rick.staa@outlook.com>
Co-authored-by: Ulysses Zhan <UlyssesZhan@gmail.com>
Co-authored-by: Zohan Subhash <zohan.subhash@gmail.com>
Co-authored-by: Alexandr <qwerty541zxc@gmail.com>
Co-authored-by: GitHub Readme Stats Bot <no-reply@githubreadmestats.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Joey Chen <142381267+JoeyC-Dev@users.noreply.github.com>
Co-authored-by: mikyll <righi.michy@gmail.com>
Co-authored-by: krishnoit <krishnoit100@gmail.com>
Co-authored-by: krishna seth <75961965+a-s-t-e-y-a@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-01-25 13:29:56 +01:00
Marco Pasqualetti 58e02dae29 feat: replace create-react-app with vite (#34)
* feat: replace `create-react-app` with `vite`

* fix: correct axios-override extension

* chore: add more extensions to lint-staged
2026-01-25 12:20:17 +01:00
martin-mfg cc6ccf8823 Merge remote-tracking branch 'org/next' 2026-01-24 22:29:38 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 5644b32950 build(deps-dev): Bump eslint-plugin-jsdoc from 62.0.1 to 62.4.0 (#20)
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 62.0.1 to 62.4.0.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v62.0.1...v62.4.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 62.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-24 22:28:37 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 978f4d8946 ci(deps): Bump peter-evans/create-pull-request from 8.0.0 to 8.1.0 (#21)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 8.0.0 to 8.1.0.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/98357b18bf14b5342f975ff684046ec3b2a07725...c0f553fe549906ede9cf27b5156039d195d2ece0)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-version: 8.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-24 22:26:49 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 2accfd04c0 build(deps-dev): Bump globals from 17.0.0 to 17.1.0 (#23)
Bumps [globals](https://github.com/sindresorhus/globals) from 17.0.0 to 17.1.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v17.0.0...v17.1.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-24 22:25:45 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 2bbab30bcf build(deps-dev): Bump prettier from 3.8.0 to 3.8.1 (#22)
Bumps [prettier](https://github.com/prettier/prettier) from 3.8.0 to 3.8.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.8.0...3.8.1)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.8.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-24 22:23:34 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 1823e9f5a4 ci(deps): Bump actions/checkout from 6.0.1 to 6.0.2 (#19)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-24 22:22:50 +01:00
Marco Pasqualetti 2871309af3 feat(frontend): enable knip (#31)
* feat(frontend): enable `knip`

* fix: remove stages barrel file
2026-01-24 15:30:39 +01:00
github-actions[bot]andmartin-mfg c4fbc79c7b refactor: update languages JSON (#18)
Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>
2026-01-24 10:00:54 +01:00
Martin 9dc2a8a56f allow triggering workflows manually (#17) 2026-01-24 09:39:48 +01:00
Marco Pasqualetti 90490046bb feat(backend): enable knip (#30) 2026-01-23 17:15:30 +01:00
Marco Pasqualetti dff4bfcecb feat: setup eslint at root level (#27)
* feat: setup eslint at root level

* chore: disable craco eslint-plugin

* fix: add missing extension to import

* fix: apply review

* chore: use gitignore to exclude files from eslint

* chore: disable eslint step in craco via config rather than env variable

* chore: remove npmrc

* chore: remove `eslint-plugin-react` override
2026-01-21 22:48:08 +01:00
martin-mfg 96651f2a1c Merge remote-tracking branch 'org/next' 2026-01-21 11:52:29 +01:00
0b051792fc feature(top langs card): add ability to change progress bar background color in normal layout (#16)
* #3307 enhancement : prog_bg_color query added to change the background of progress bar

* #3066 bug Fixed : readme.md file as stated

* #3066 bug Fixed : readme.md file as stated"

* #3066 bug Fixed : readme.md file as stated

* fix types.d.ts

* add test

---------

Co-authored-by: krishnoit <krishnoit100@gmail.com>
Co-authored-by: krishna seth <75961965+a-s-t-e-y-a@users.noreply.github.com>
2026-01-21 11:40:24 +01:00
Marco Pasqualetti 74b314ab0f refactor: setup prettier as formatter for the whole monorepo (#26) 2026-01-20 18:38:20 +01:00
martin-mfg 6e6b5fcba8 Merge branch 'next' 2026-01-19 23:15:39 +01:00
martin-mfg a28a417e88 fix tests, add CI, fix on mac, extend docs (#25)
* tests: fix float problems and PAT problem

* extend CONTRIBUTING.md

* extend build documentation, add GH action, fix build on MacOS

* fix build on Vercel

* update .gitignore and CONTRIBUTING.md

* fix all tests

* add backend tests to CI

* make e2e tests work

* add debug log to e2e test

* ignore copied tests in CI
2026-01-19 20:52:26 +01:00
martin-mfgandmikyll b654eaac2c Fix default theme fallback when an invalid theme is passed (#15)
* fix(color): invalid theme fallback to default

Fixes: #4641

* test(color): add test case for invalid theme fallback to default

* style(color): add back the tab space

* test(color): fix color default theme

* fix(color): use 'in' instead of '.hasOwnProperty'

* fix new test

* format code

---------

Co-authored-by: mikyll <righi.michy@gmail.com>
2026-01-19 18:59:32 +01:00
martin-mfg 17e6aee8fc Merge branch 'master' into next 2026-01-19 18:36:12 +01:00
Marco Pasqualettiandmartin-mfg 8c065b473f feat: setup monorepo using pnpm (#20)
* tests: fix float problems and PAT problem

* extend CONTRIBUTING.md

* extend build documentation, add GH action, fix build on MacOS

* fix build on Vercel

* update .gitignore and CONTRIBUTING.md

* feat: begin work on monorepo

* chore(actions/basic-build): use pnpm

* fix: vercel-deploy

* docs: updates with new folders

* chore: apply PR review comments

---------

Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>
2026-01-19 14:11:58 +01:00
Joey Chen 573c2d4e81 docs: add instructions to make PAT environment variable sensitive in Vercel deployment (#14)
Added instructions for setting environment variables securely.

Signed-off-by: Joey Chen <142381267+JoeyC-Dev@users.noreply.github.com>
2026-01-19 10:50:14 +01:00
5df91f9bfa docs: add github action as recommended usage method (#4716)
* docs: add github action as recommended usage method

Add new github action as recommended usage method now that we are no
longer sponsored by vercel and the hosted endpoint is not available
anymore.

Co-authored-by: Ulysses Zhan <UlyssesZhan@gmail.com>
Co-authored-by: Zohan Subhash <zohan.subhash@gmail.com>
Co-authored-by: Alexandr <qwerty541zxc@gmail.com>

* docs: improve action section

---------

Co-authored-by: Ulysses Zhan <UlyssesZhan@gmail.com>
Co-authored-by: Zohan Subhash <zohan.subhash@gmail.com>
Co-authored-by: Alexandr <qwerty541zxc@gmail.com>
2026-01-18 17:20:25 +05:30
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 852948d81b build(deps-dev): Bump globals from 16.5.0 to 17.0.0 (#9)
Bumps [globals](https://github.com/sindresorhus/globals) from 16.5.0 to 17.0.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.5.0...v17.0.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 17.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-17 18:03:15 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 3f94e39ddc build(deps-dev): Bump eslint-plugin-jsdoc from 61.5.0 to 62.0.1 (#12)
Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 61.5.0 to 62.0.1.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v61.5.0...v62.0.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 62.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-17 17:55:15 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 72ce632c75 build(deps-dev): Bump prettier from 3.7.4 to 3.8.0 (#13)
Bumps [prettier](https://github.com/prettier/prettier) from 3.7.4 to 3.8.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.7.4...3.8.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-17 17:05:26 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 4334b27c89 ci(deps): Bump actions/setup-node from 6.1.0 to 6.2.0 (#7)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/395ad3262231945c25e8478fd5baf05154b1d79f...6044e13b5dc448c55e2357c09f80417699197238)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-17 17:03:25 +01:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> d11e642771 ci(deps): Bump stefanzweifel/git-auto-commit-action from 7.0.0 to 7.1.0 (#6)
Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 7.0.0 to 7.1.0.
- [Release notes](https://github.com/stefanzweifel/git-auto-commit-action/releases)
- [Changelog](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stefanzweifel/git-auto-commit-action/compare/28e16e81777b558cc906c8750092100bbb34c5e3...04702edda442b2e678b25b537cec683a1493fcb9)

---
updated-dependencies:
- dependency-name: stefanzweifel/git-auto-commit-action
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-17 17:02:12 +01:00
martin-mfgandGitHub Readme Stats Bot d91e399eb0 docs(theme): auto update theme readme (#5)
Co-authored-by: GitHub Readme Stats Bot <no-reply@githubreadmestats.com>
2026-01-17 13:01:38 +01:00
martin-mfg 91c395bfad fix formatting 2026-01-17 12:59:22 +01:00
martin-mfg 5c4c3fceb9 fix docs links, prepare workflows, update action example 2026-01-17 12:31:59 +01:00
Rick Staa 9db997305e docs: ensure example cards render correctly (#4)
Use my deployed environment so example cards render properly and are not
rate-limited by the public instance.
2025-12-27 20:33:22 +01:00
9f48dc844c docs: add github action as recommended usage method (#3)
Add new github action as recommended usage method now that we are no
longer sponsored by vercel and the hosted endpoint is not available
anymore.

Co-authored-by: Ulysses Zhan <UlyssesZhan@gmail.com>
Co-authored-by: Zohan Subhash <zohan.subhash@gmail.com>
Co-authored-by: Alexandr <qwerty541zxc@gmail.com>
2025-12-27 18:39:29 +00:00
352 changed files with 18610 additions and 33179 deletions
+13 -10
View File
@@ -2,12 +2,15 @@
## Local Development
To run and test GitHub-Stats-Extended, you need to follow a few simple steps:
To set up the project GitHub-Stats-Extended locally, run the following commands:
1. create [your own deployment](../docs/deploy.md)
2. optional: add an SQL database; by using e.g. the ["Nile" integration](https://vercel.com/marketplace/nile) or by manually setting the environment variable `POSTGRES_URL`
3. optional: [create your own OAuth App](https://github.com/settings/developers) and set environment variables `OAUTH_REDIRECT_URI`, `OAUTH_CLIENT_ID` and `OAUTH_CLIENT_SECRET` on Vercel accordingly
4. optional: in addition to the Vercel project based on the `backend` folder, create a second project based on the `frontend/frontend` folder. No environment variables needed.
```bash
pnpm install
pnpm run build:packages
pnpm run dev:frontend
```
The easiest way to run and test the project is to deploy it to Vercel as described in the [deployment guide](../docs/deploy.md).
## Themes Contribution
@@ -37,9 +40,9 @@ We use GitHub issues to track public bugs. Report a bug by [opening a new issue]
> **Ans:** Please read all the related issues/comments before opening any issues regarding language card stats:
>
> - <https://github.com/anuraghazra/github-readme-stats/issues/136#issuecomment-665164174>
> - <https://github.com/anuraghazra/github-readme-stats/issues/136#issuecomment-665164174>
>
> - <https://github.com/anuraghazra/github-readme-stats/issues/136#issuecomment-665172181>
> - <https://github.com/anuraghazra/github-readme-stats/issues/136#issuecomment-665172181>
**Q:** How to count private stats?
@@ -49,6 +52,6 @@ We use GitHub issues to track public bugs. Report a bug by [opening a new issue]
**Great Feature Requests** tend to have:
- A quick idea summary
- What & why do you want to add the specific feature
- Additional context like images, links to resources to implement the feature, etc.
- A quick idea summary
- What & why do you want to add the specific feature
- Additional context like images, links to resources to implement the feature, etc.
@@ -0,0 +1,37 @@
name: Setup Node.js + PNPM and install Dependencies
description: |
This is a composite GitHub Action that:
- Sets up pnpm package manager
- Configures Node.js environment
- Installs project dependencies with caching
inputs:
node-version:
description: "Explicit node version. Otherwise fallback reading `.nvmrc`"
runs:
using: composite
steps:
- name: Install pnpm
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5
- name: Setup Node.js (via input)
if: ${{ inputs.node-version }}
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version: ${{ inputs.node-version }}
cache: "pnpm"
registry-url: "https://registry.npmjs.org"
- name: Setup Node.js (via .nvmrc)
if: ${{ !inputs.node-version }}
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
with:
node-version-file: ".nvmrc"
cache: "pnpm"
registry-url: "https://registry.npmjs.org"
- name: Install Dependencies
shell: bash
run: pnpm install --frozen-lockfile
+83
View File
@@ -0,0 +1,83 @@
version: 2
updates:
# Maintain dependencies for npm
- package-ecosystem: npm
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 20
commit-message:
prefix: "build(deps)"
prefix-development: "build(deps-dev)"
cooldown:
default-days: 7
ignore:
- dependency-name: "@types/node"
update-types: ["version-update:semver-major"]
groups:
react:
patterns:
- "react"
- "react-dom"
- "react-*"
- "@types/react"
- "@types/react-dom"
redux:
patterns:
- "redux"
- "@reduxjs/*"
- "react-redux"
vite:
patterns:
- "vite"
- "@vitejs/*"
tailwind:
patterns:
- "tailwindcss"
- "@tailwindcss/*"
- "daisyui"
vitest:
patterns:
- "vitest"
- "@vitest/*"
eslint:
patterns:
- "eslint"
- "@eslint/*"
- "eslint-*"
- "typescript-eslint"
typescript:
patterns:
- "typescript"
- "@types/*"
playwright:
patterns:
- "@playwright/*"
axios:
patterns:
- "axios"
- "axios-*"
# Maintain dependencies for GitHub Actions
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 20
commit-message:
prefix: "ci(deps)"
prefix-development: "ci(deps-dev)"
cooldown:
default-days: 7
# Maintain dependencies for Devcontainers
- package-ecosystem: devcontainers
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 20
commit-message:
prefix: "build(deps)"
prefix-development: "build(deps-dev)"
cooldown:
default-days: 7
+124
View File
@@ -0,0 +1,124 @@
name: CI
on:
workflow_dispatch:
push:
branches:
- master
pull_request:
branches:
- master
concurrency:
group: "${{ github.workflow }}-${{ github.head_ref }}"
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
permissions: {}
jobs:
build-and-test:
name: Build and test ${{ matrix.node }} on ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
node: [24]
os: [ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
with:
node-version: ${{ matrix.node }}
- name: Build packages
run: pnpm run build:packages
- name: Build frontend
run: pnpm run build:frontend
- name: Run tests
run: pnpm run test
frontend-test-e2e:
name: Frontend E2E test
permissions:
contents: read
timeout-minutes: 60
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
- name: Build packages
run: pnpm run build:packages
- name: Install Playwright Browsers
run: pnpm exec playwright install --with-deps
- name: Run Playwright tests
run: pnpm --filter ./apps/frontend/ run test:e2e
backend-test-e2e:
name: Backend E2E test
runs-on: ubuntu-latest
permissions:
contents: read
continue-on-error: true
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
- name: Build packages
run: pnpm run build:packages
- name: Run backend end-to-end tests
run: pnpm --filter ./apps/backend/ run test:e2e
code-checks:
name: Code checks
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
- name: Format
run: pnpm run format:check
- name: Lint
run: pnpm run lint
- name: Lint (knip)
run: pnpm run lint:knip
- name: Typecheck
run: pnpm run typecheck
+53
View File
@@ -0,0 +1,53 @@
name: Generate Theme Readme
on:
push:
branches:
- master
paths:
- "packages/core/src/themes/index.js"
workflow_dispatch:
permissions: {}
jobs:
generate-theme-doc:
runs-on: ubuntu-latest
name: Generate theme doc
permissions:
actions: read
checks: read
contents: write
deployments: read
issues: read
discussions: read
packages: read
pages: read
pull-requests: write
repository-projects: read
security-events: read
statuses: read
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
- name: Generate readme
run: |
pnpm --filter ./packages/core/ run theme-readme-gen
- name: Create Pull Request if themes README has changed
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8
with:
commit-message: "feat(backend): update themes README"
branch: "update_themes_readme/patch"
delete-branch: true
title: Update themes README
body: "The
[generate-theme-doc](https://github.com/stats-organization/github-stats-extended/actions/workflows/generate-theme-doc.yml)
action found new/updated languages in the [upstream languages JSON
file](https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml)."
labels: "ci"
+30
View File
@@ -0,0 +1,30 @@
name: Publish core package to npm
on:
workflow_dispatch:
release:
types: [released]
permissions: {}
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
- name: Verify core package
run: |
pnpm --filter @stats-organization/github-readme-stats-core run typecheck
pnpm test
pnpm build:packages
pnpm --filter @stats-organization/github-readme-stats-core pack --dry-run
- name: Publish core package to npm
run: pnpm --filter @stats-organization/github-readme-stats-core publish --provenance --access public
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
steps:
- name: Make Request
id: myRequest
uses: fjogeleit/http-request-action@v1
uses: fjogeleit/http-request-action@551353b829c3646756b2ec2b3694f819d7957495 # v2
with:
url: "https://github-stats-extended.vercel.app/api/repeat-recent"
method: "POST"
@@ -1,5 +1,6 @@
name: Update supported languages
on:
workflow_dispatch:
schedule:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
@@ -27,41 +28,33 @@ permissions:
statuses: read
jobs:
updateLanguages:
if: github.repository == 'anuraghazra/github-readme-stats'
update-languages:
if: |
github.repository == 'anuraghazra/github-readme-stats' ||
github.repository == 'stats-organization/github-readme-stats' ||
github.repository == 'stats-organization/github-stats-extended'
name: Update supported languages
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [22.x]
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup Node
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
with:
node-version: ${{ matrix.node-version }}
cache: npm
- name: Install dependencies
run: npm ci
env:
CI: true
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
- name: Run update-languages-json.js script
run: npm run generate-langs-json
run: pnpm --filter ./packages/core/ run generate-langs-json
- name: Create Pull Request if upstream language file is changed
uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8.0.0
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8
with:
commit-message: "refactor: update languages JSON"
commit-message: "feat(backend): update languages JSON"
branch: "update_langs/patch"
delete-branch: true
title: Update languages JSON
body:
"The
[update-langs](https://github.com/anuraghazra/github-readme-stats/actions/workflows/update-langs.yaml)
body: "The
[update-langs](https://github.com/stats-organization/github-stats-extended/actions/workflows/update-langs.yml)
action found new/updated languages in the [upstream languages JSON
file](https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml)."
labels: "ci, lang-card"
labels: "ci"
+18
View File
@@ -0,0 +1,18 @@
name: Update version tags
on:
push:
branches-ignore:
- "**"
tags:
- "v*.*.*"
permissions: {}
jobs:
update-semver:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: haya14busa/action-update-semver@7d2c558640ea49e798d46539536190aff8c18715 # v1.5.1
+31 -9
View File
@@ -1,12 +1,27 @@
backend/.vercel
backend/.env
backend/node_modules
backend/*.lock
backend/coverage
backend/benchmarks
backend/vercel_token
frontend/frontend/.env
frontend/frontend/src/backend
node_modules
# OS
.DS_Store
# Project
coverage
apps/backend/.vercel
apps/backend/.env
apps/backend/node_modules
apps/backend/*.lock
apps/backend/coverage
apps/backend/benchmarks
apps/backend/vercel_token
apps/backend-copy
apps/frontend/.env
.turbo
build
build-ts
*.tsbuildinfo
# IDE
.idea/
@@ -14,3 +29,10 @@ frontend/frontend/src/backend
!.vscode/extensions.json
!.vscode/settings.json
*.code-workspace
# Playwright
test-results/
playwright-report/
blob-report/
playwright/.cache/
playwright/.auth/
+3
View File
@@ -0,0 +1,3 @@
pnpm lint-staged
pnpm run lint
pnpm test
+1
View File
@@ -0,0 +1 @@
v24
+5
View File
@@ -0,0 +1,5 @@
pnpm-lock.yaml
# https://github.com/stats-organization/github-stats-extended/pull/26#discussion_r2709033732
# Avoid prettier format on md files to simplify merge on upstream repo
*.md
+17
View File
@@ -0,0 +1,17 @@
{
"$schema": "https://json.schemastore.org/prettierrc",
"useTabs": false,
"semi": true,
"trailingComma": "all",
"singleQuote": false,
"printWidth": 80,
"tabWidth": 2,
"overrides": [
{
"files": ["*.jsonc"],
"options": {
"trailingComma": "none"
}
}
]
}
+8
View File
@@ -0,0 +1,8 @@
{
"recommendations": [
"yzhang.markdown-all-in-one",
"prettier.prettier-vscode",
"dbaeumer.vscode-eslint",
"github.vscode-github-actions"
]
}
+10
View File
@@ -0,0 +1,10 @@
{
"markdown.extension.toc.levels": "1..3",
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[javascript]": {
"editor.tabSize": 2,
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"cSpell.words": ["Wakatime"]
}
+2 -2
View File
@@ -1,5 +1,5 @@
<div align="center">
<img src="docs/appIcon.svg" width="100px" alt="GitHub Readme Stats" />
<img src="docs/appIcon.svg" width="100px" alt="GitHub Stats Extended Logo" />
<h1>GitHub Stats Extended</h1>
<p>Dynamically generate GitHub stats for your READMEs.</p>
<a href="https://github-stats-extended.vercel.app/api?username=anuraghazra"><img src="https://github-stats-extended.vercel.app/api?username=anuraghazra"></a>
@@ -38,7 +38,7 @@ As more comfortable alternative, use the [GitHub-Stats-Extended Wizard](https://
- ...and development time:
[![Harlok's WakaTime stats](https://github-stats-extended.vercel.app/api/wakatime?username=ffflabs&langs_count=6)](https://wakatime.com/@ffflabs)
[![Alan's WakaTime stats](https://github-stats-extended.vercel.app/api/wakatime?username=alan&langs_count=6)](https://wakatime.com/@alan)
- Pin more than 6 repos in your GitHub profile:
@@ -0,0 +1,33 @@
{
"name": "GitHub Stats Extended Dev",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/devcontainers/features/node:1": { "version": "24" }
},
"forwardPorts": [3000],
"portsAttributes": {
"3000": { "label": "HTTP" }
},
"appPort": [],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "npm install -g vercel",
// Use 'postStartCommand' to run commands after the container is started.
"postStartCommand": "hostname dev && npm install",
// Configure tool-specific properties.
"customizations": {
"vscode": {
"extensions": [
"yzhang.markdown-all-in-one",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"github.vscode-github-actions"
]
}
},
"remoteUser": "root",
"privileged": true
}
@@ -31,7 +31,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
@@ -1,7 +1,5 @@
.devcontainer
.github
.husky
.vscode
benchmarks
coverage
scripts
@@ -10,6 +8,4 @@ tests
**/*.md
**/*.svg
.eslintrc.json
.prettierignore
.pretterrc.json
codecov.yml
@@ -1,5 +1,5 @@
{
"runtime": "nodejs22.x",
"runtime": "nodejs24.x",
"handler": "router.js",
"launcherType": "Nodejs"
}
@@ -2,4 +2,4 @@
"expiration": 39600,
"bypassToken": "r3fr3shT0k3n-r3fr3shT0k3n-r3fr3shT0k3n",
"passQuery": true
}
}
@@ -2,4 +2,4 @@
"expiration": 39600,
"bypassToken": "r3fr3shT0k3n-r3fr3shT0k3n-r3fr3shT0k3n",
"passQuery": true
}
}
@@ -2,4 +2,4 @@
"expiration": 39600,
"bypassToken": "r3fr3shT0k3n-r3fr3shT0k3n-r3fr3shT0k3n",
"passQuery": true
}
}
@@ -2,4 +2,4 @@
"expiration": 39600,
"bypassToken": "r3fr3shT0k3n-r3fr3shT0k3n-r3fr3shT0k3n",
"passQuery": true
}
}
@@ -2,4 +2,4 @@
"expiration": 39600,
"bypassToken": "r3fr3shT0k3n-r3fr3shT0k3n-r3fr3shT0k3n",
"passQuery": true
}
}
@@ -1,4 +1,5 @@
import { logger } from "../src/common/log.js";
import { logger } from "@stats-organization/github-readme-stats-core";
import { authenticate } from "../src/users.js";
/**
@@ -1,4 +1,5 @@
import { logger } from "../src/common/log.js";
import { logger } from "@stats-organization/github-readme-stats-core";
import { deleteUser } from "../src/common/database.js";
/**
@@ -1,6 +1,7 @@
import { getUserAccessByKey, deleteUser } from "../src/common/database.js";
import { logger } from "@stats-organization/github-readme-stats-core";
import axios from "axios";
import { logger } from "../src/common/log.js";
import { deleteUser, getUserAccessByKey } from "../src/common/database.js";
export default async (req, res) => {
// We could optimize this method by doing both database operations in one statement, using "DELETE ... RETURNING ..."
@@ -53,10 +54,10 @@ export default async (req, res) => {
},
);
} catch (err) {
logger.error(err);
res.statusCode = 500;
res.send("Failed to delete GitHub authorization with private access");
return;
logger.error(err);
res.statusCode = 500;
res.send("Failed to delete GitHub authorization with private access");
return;
}
await deleteUser(user_key);
@@ -68,6 +69,9 @@ export default async (req, res) => {
}).toString();
res.statusCode = 302;
res.setHeader("Location", `https://github.com/login/oauth/authorize?${params}`);
res.setHeader(
"Location",
`https://github.com/login/oauth/authorize?${params}`,
);
res.end();
};
@@ -6,10 +6,12 @@
*
* @description This function is currently rate limited to 1 request per 3 minutes.
*/
import { request } from "../../src/common/http.js";
import { logger } from "../../src/common/log.js";
import { dateDiff } from "../../src/common/ops.js";
import {
dateDiff,
getConfig,
logger,
request,
} from "@stats-organization/github-readme-stats-core";
export const RATE_LIMIT_SECONDS = 60 * 3; // 1 request per 3 minutes
@@ -39,7 +41,7 @@ const uptimeFetcher = (variables, token) => {
};
const getAllPATs = () => {
return Object.keys(process.env).filter((key) => /PAT_\d*$/.exec(key));
return getConfig().pats;
};
/**
@@ -61,7 +63,7 @@ const getPATInfo = async (fetcher, variables) => {
for (const pat of PATs) {
try {
const response = await fetcher(variables, process.env[pat]);
const response = await fetcher(variables, pat.value);
const errors = response.data.errors;
const hasErrors = Boolean(errors);
const errorType = errors?.[0]?.type;
@@ -71,7 +73,7 @@ const getPATInfo = async (fetcher, variables) => {
// Store PATs with errors.
if (hasErrors && errorType !== "RATE_LIMITED") {
details[pat] = {
details[pat.name] = {
status: "error",
error: {
type: errors[0].type,
@@ -82,13 +84,13 @@ const getPATInfo = async (fetcher, variables) => {
} else if (isRateLimited) {
const date1 = new Date();
const date2 = new Date(response.data?.data?.rateLimit?.resetAt);
details[pat] = {
details[pat.name] = {
status: "exhausted",
remaining: 0,
resetIn: dateDiff(date2, date1) + " minutes",
};
} else {
details[pat] = {
details[pat.name] = {
status: "valid",
remaining: response.data.data.rateLimit.remaining,
};
@@ -97,11 +99,11 @@ const getPATInfo = async (fetcher, variables) => {
// Store the PAT if it is expired.
const errorMessage = err.response?.data?.message?.toLowerCase();
if (errorMessage === "bad credentials") {
details[pat] = {
details[pat.name] = {
status: "expired",
};
} else if (errorMessage === "sorry. your account was suspended.") {
details[pat] = {
details[pat.name] = {
status: "suspended",
};
} else {
@@ -7,9 +7,11 @@
* @description This function is currently rate limited to 1 request per 3 minutes.
*/
import { request } from "../../src/common/http.js";
import retryer from "../../src/common/retryer.js";
import { logger } from "../../src/common/log.js";
import {
logger,
request,
retryer,
} from "@stats-organization/github-readme-stats-core";
export const RATE_LIMIT_SECONDS = 60 * 3; // 1 request per 3 minutes
@@ -87,7 +89,7 @@ export default async (req, res) => {
try {
let PATsValid = true;
try {
await retryer(uptimeFetcher, null, {});
await retryer(uptimeFetcher, {});
} catch (err) {
// Resolve eslint no-unused-vars
err;
@@ -1,4 +1,5 @@
import { logger } from "../src/common/log.js";
import { logger } from "@stats-organization/github-readme-stats-core";
import { getUserAccessByKey } from "../src/common/database.js";
/**
@@ -18,7 +19,7 @@ export default async (req, res) => {
res.send({
privateAccess: result.privateAccess,
token: result.token
token: result.token,
});
} catch (err) {
logger.error(err);
@@ -1,5 +1,7 @@
import { fetchWakatimeStats } from "../src/fetchers/wakatime.js";
import { logger } from "../src/common/log.js";
import {
fetchWakatimeStats,
logger,
} from "@stats-organization/github-readme-stats-core";
/**
* @param {any} req The request.
+12
View File
@@ -0,0 +1,12 @@
import express from "express";
import router from "./router.js";
const app = express();
app.use(router);
const port = process.env.PORT || process.env.port || 9000;
app.listen(port, "0.0.0.0", () => {
console.log(`Server running on port ${port}`);
});
+1
View File
@@ -0,0 +1 @@
export { default as router } from "./router.js";
+29
View File
@@ -0,0 +1,29 @@
{
"name": "@stats-organization/github-readme-stats-backend",
"type": "module",
"license": "MIT",
"engines": {
"node": "24.x"
},
"private": true,
"main": "index.js",
"scripts": {
"test": "vitest",
"test:update:snapshot": "vitest -u",
"test:e2e": "vitest --config vitest.config.e2e.ts",
"bench": "vitest bench --run --config vitest.config.bench.ts",
"lint": "eslint",
"typecheck": "tsc -p tsconfig.typecheck.json"
},
"devDependencies": {
"axios-mock-adapter": "2.1.0",
"express": "5.2.1",
"jsdom": "29.0.2",
"vitest": "catalog:default"
},
"dependencies": {
"axios": "^1.15.2",
"@stats-organization/github-readme-stats-core": "workspace:^",
"pg": "^8.20.0"
}
}
+225
View File
@@ -0,0 +1,225 @@
import {
api,
gist,
pin,
topLangs,
wakatime,
} from "@stats-organization/github-readme-stats-core";
import { default as authenticate } from "./api-renamed/authenticate.js";
import { default as deleteUser } from "./api-renamed/delete-user.js";
import { default as downgrade } from "./api-renamed/downgrade.js";
import { default as repeatRecent } from "./api-renamed/repeat-recent.js";
import { default as patInfo } from "./api-renamed/status/pat-info.js";
import { default as statusUp } from "./api-renamed/status/up.js";
import { default as userAccess } from "./api-renamed/user-access.js";
import { default as wakatimeProxy } from "./api-renamed/wakatime-proxy.js";
import { guardAccess } from "./src/common/access.js";
import {
CACHE_TTL,
resolveCacheSeconds,
setCacheHeaders,
setErrorCacheHeaders,
} from "./src/common/cache.js";
import { getUserAccessByName, storeRequest } from "./src/common/database.js";
const getGuardResult = (query, type, id) => {
const access = guardAccess({
id,
type,
colors: {
title_color: query.title_color,
text_color: query.text_color,
bg_color: query.bg_color,
border_color: query.border_color,
theme: query.theme,
},
});
if (access.isPassed) {
return null;
}
return {
status: "error - permanent",
content: access.result,
};
};
const getUserPat = async (username) => {
if (!username) {
return null;
}
const userAccess = await getUserAccessByName(username);
if (!userAccess?.token) {
return null;
}
return userAccess.token;
};
export default async (req, res) => {
const url = new URL(req.url, "https://localhost");
if (res.send === undefined) {
// remaining code expects express.js-like request and response objects
res.send = function (data) {
if (typeof data === "object") {
res.setHeader("Content-Type", "application/json");
res.end(JSON.stringify(data));
} else if (typeof data === "string") {
res.end(data);
} else {
res.end(String(data));
}
};
req.query = Object.fromEntries(url.searchParams.entries());
}
let result;
switch (url.pathname) {
case "/api": {
result = getGuardResult(req.query, "username", req.query.username);
if (!result) {
const userPat = await getUserPat(req.query.username);
result = await api(req.query, userPat);
}
if (result.status === "error - temporary") {
setErrorCacheHeaders(res);
} else {
const cacheSeconds = resolveCacheSeconds({
requested: parseInt(req.query.cache_seconds, 10),
def: CACHE_TTL.STATS_CARD.DEFAULT,
min: CACHE_TTL.STATS_CARD.MIN,
max: CACHE_TTL.STATS_CARD.MAX,
});
setCacheHeaders(res, cacheSeconds);
}
res.setHeader("Content-Type", "image/svg+xml");
res.end(result.content);
if (result.status !== "error - permanent") {
await storeRequest(req);
}
break;
}
case "/api/gist":
result =
getGuardResult(req.query, "gist", req.query.id) ??
(await gist(req.query));
if (result.status === "error - temporary") {
setErrorCacheHeaders(res);
} else {
const cacheSeconds = resolveCacheSeconds({
requested: parseInt(req.query.cache_seconds, 10),
def: CACHE_TTL.GIST_CARD.DEFAULT,
min: CACHE_TTL.GIST_CARD.MIN,
max: CACHE_TTL.GIST_CARD.MAX,
});
setCacheHeaders(res, cacheSeconds);
}
res.setHeader("Content-Type", "image/svg+xml");
res.end(result.content);
if (result.status !== "error - permanent") {
await storeRequest(req);
}
break;
case "/api/pin": {
result = getGuardResult(req.query, "username", req.query.username);
if (!result) {
const userPat = await getUserPat(req.query.username);
result = await pin(req.query, userPat);
}
if (result.status === "error - temporary") {
setErrorCacheHeaders(res);
} else {
const cacheSeconds = resolveCacheSeconds({
requested: parseInt(req.query.cache_seconds, 10),
def: CACHE_TTL.PIN_CARD.DEFAULT,
min: CACHE_TTL.PIN_CARD.MIN,
max: CACHE_TTL.PIN_CARD.MAX,
});
setCacheHeaders(res, cacheSeconds);
}
res.setHeader("Content-Type", "image/svg+xml");
res.end(result.content);
if (result.status !== "error - permanent") {
await storeRequest(req);
}
break;
}
case "/api/top-langs": {
result = getGuardResult(req.query, "username", req.query.username);
if (!result) {
const userPat = await getUserPat(req.query.username);
result = await topLangs(req.query, userPat);
}
if (result.status === "error - temporary") {
setErrorCacheHeaders(res);
} else {
const cacheSeconds = resolveCacheSeconds({
requested: parseInt(req.query.cache_seconds, 10),
def: CACHE_TTL.TOP_LANGS_CARD.DEFAULT,
min: CACHE_TTL.TOP_LANGS_CARD.MIN,
max: CACHE_TTL.TOP_LANGS_CARD.MAX,
});
setCacheHeaders(res, cacheSeconds);
}
res.setHeader("Content-Type", "image/svg+xml");
res.end(result.content);
if (result.status !== "error - permanent") {
await storeRequest(req);
}
break;
}
case "/api/wakatime":
result =
getGuardResult(req.query, "wakatime", req.query.username) ??
(await wakatime(req.query));
if (result.status === "error - temporary") {
setErrorCacheHeaders(res);
} else {
const cacheSeconds = resolveCacheSeconds({
requested: parseInt(req.query.cache_seconds, 10),
def: CACHE_TTL.WAKATIME_CARD.DEFAULT,
min: CACHE_TTL.WAKATIME_CARD.MIN,
max: CACHE_TTL.WAKATIME_CARD.MAX,
});
setCacheHeaders(res, cacheSeconds);
}
res.setHeader("Content-Type", "image/svg+xml");
res.end(result.content);
if (result.status !== "error - permanent") {
await storeRequest(req);
}
break;
case "/api/wakatime-proxy":
await wakatimeProxy(req, res);
break;
case "/api/repeat-recent":
await repeatRecent(req, res);
break;
case "/api/status/pat-info":
await patInfo(req, res);
break;
case "/api/status/up":
await statusUp(req, res);
break;
case "/api/authenticate":
await authenticate(req, res);
break;
case "/api/delete-user":
await deleteUser(req, res);
break;
case "/api/user-access":
await userAccess(req, res);
break;
case "/api/downgrade":
await downgrade(req, res);
break;
default:
res.statusCode = 404;
res.end("Not Found");
break;
}
};
@@ -1,8 +1,11 @@
// @ts-check
import { renderError } from "./render.js";
import {
getConfig,
renderError,
} from "@stats-organization/github-readme-stats-core";
import { blacklist } from "./blacklist.js";
import { whitelist, gistWhitelist } from "./envs.js";
const NOT_WHITELISTED_USERNAME_MESSAGE = "This username is not whitelisted";
const NOT_WHITELISTED_GIST_MESSAGE = "This gist ID is not whitelisted";
@@ -12,36 +15,35 @@ const BLACKLISTED_MESSAGE = "This username is blacklisted";
* Guards access using whitelist/blacklist.
*
* @param {Object} args The parameters object.
* @param {any} args.res The response object.
* @param {string} args.id Resource identifier (username or gist id).
* @param {"username"|"gist"|"wakatime"} args.type The type of identifier.
* @param {{ title_color?: string, text_color?: string, bg_color?: string, border_color?: string, theme?: string }} args.colors Color options for the error card.
* @returns {{ isPassed: boolean, result?: any }} The result object indicating success or failure.
*/
const guardAccess = ({ res, id, type, colors }) => {
const guardAccess = ({ id, type, colors }) => {
if (!["username", "gist", "wakatime"].includes(type)) {
throw new Error(
'Invalid type. Expected "username", "gist", or "wakatime".',
);
}
const currentWhitelist = type === "gist" ? gistWhitelist : whitelist;
const config = getConfig();
const currentWhitelist =
type === "gist" ? config.gistWhitelist : config.whitelist;
const notWhitelistedMsg =
type === "gist"
? NOT_WHITELISTED_GIST_MESSAGE
: NOT_WHITELISTED_USERNAME_MESSAGE;
if (Array.isArray(currentWhitelist) && !currentWhitelist.includes(id)) {
const result = res.send(
renderError({
message: notWhitelistedMsg,
secondaryMessage: "Please deploy your own instance",
renderOptions: {
...colors,
show_repo_link: false,
},
}),
);
const result = renderError({
message: notWhitelistedMsg,
secondaryMessage: "Please deploy your own instance",
renderOptions: {
...colors,
show_repo_link: false,
},
});
return { isPassed: false, result };
}
@@ -50,16 +52,14 @@ const guardAccess = ({ res, id, type, colors }) => {
currentWhitelist === undefined &&
blacklist.includes(id)
) {
const result = res.send(
renderError({
message: BLACKLISTED_MESSAGE,
secondaryMessage: "Please deploy your own instance",
renderOptions: {
...colors,
show_repo_link: false,
},
}),
);
const result = renderError({
message: BLACKLISTED_MESSAGE,
secondaryMessage: "Please deploy your own instance",
renderOptions: {
...colors,
show_repo_link: false,
},
});
return { isPassed: false, result };
}
@@ -7,4 +7,3 @@ const blacklist = [
];
export { blacklist };
export default blacklist;
@@ -1,6 +1,6 @@
// @ts-check
import { clampValue } from "./ops.js";
import { clampValue } from "@stats-organization/github-readme-stats-core";
const MIN = 60;
const HOUR = 60 * MIN;
@@ -106,7 +106,7 @@ const disableCaching = (res) => {
* @param {number} cacheSeconds The cache seconds to set in the headers.
*/
const setCacheHeaders = (res, cacheSeconds) => {
if (cacheSeconds < 1 || process.env.NODE_ENV === "development") {
if (cacheSeconds < 1) {
disableCaching(res);
return;
}
@@ -128,10 +128,7 @@ const setErrorCacheHeaders = (res) => {
const envCacheSeconds = process.env.CACHE_SECONDS
? parseInt(process.env.CACHE_SECONDS, 10)
: NaN;
if (
(!isNaN(envCacheSeconds) && envCacheSeconds < 1) ||
process.env.NODE_ENV === "development"
) {
if (!isNaN(envCacheSeconds) && envCacheSeconds < 1) {
disableCaching(res);
return;
}
@@ -1,11 +1,10 @@
import pkg from "pg";
const { Pool } = pkg;
export const pool = process.env.POSTGRES_URL
? new Pool({
connectionString: process.env.POSTGRES_URL,
})
: null;
export let pool = null;
if (process.env.POSTGRES_URL) {
const { Pool } = await import("pg");
pool = new Pool({
connectionString: process.env.POSTGRES_URL,
});
}
/**
* Creates all required tables if they do not exist.
@@ -68,16 +67,16 @@ export async function storeRequest(req) {
}
/**
* Deletes all requests older than 8 days from the database.
* Deletes all requests older than the specified time from the database.
*/
export async function deleteOldRequests() {
export async function deleteOldRequests(interval) {
if (!pool) {
return;
}
const deleteQuery = `
DELETE FROM requests
WHERE user_requested_at < NOW() - INTERVAL '8 days'
WHERE user_requested_at < NOW() - INTERVAL '${interval}'
`;
try {
let result = await pool.query(deleteQuery);
@@ -92,11 +91,11 @@ export async function deleteOldRequests() {
}
/**
* Fetches all requests which are between 11 hours and 8 days old.
* Fetches all requests which are between minInterval and maxInterval old.
*
* @returns {Promise<string[]>} Array of all requests between 11 hours and 8 days old.
* @returns {Promise<string[]>} Array of all requests between minInterval and maxInterval old.
*/
export async function getRecentRequests() {
export async function getRecentRequests(minInterval, maxInterval) {
if (!pool) {
return [];
}
@@ -104,8 +103,8 @@ export async function getRecentRequests() {
const query = `
SELECT request
FROM requests
WHERE requested_at >= NOW() - INTERVAL '8 days'
AND requested_at < NOW() - INTERVAL '11 hours'
WHERE requested_at >= NOW() - INTERVAL '${maxInterval}'
AND requested_at < NOW() - INTERVAL '${minInterval}'
ORDER BY requested_at ASC
`;
let rows;
@@ -215,7 +214,7 @@ export async function getUserAccessByKey(userKey) {
}
return {
token: rows[0].access_token,
privateAccess: rows[0].private_access
privateAccess: rows[0].private_access,
};
} catch (err) {
if (err.code === "42P01") {
@@ -250,7 +249,7 @@ export async function getUserAccessByName(userName) {
}
return {
token: rows[0].access_token,
privateAccess: rows[0].private_access
privateAccess: rows[0].private_access,
};
} catch (err) {
if (err.code === "42P01") {
@@ -1,8 +1,9 @@
import axios from "axios";
import {
pool,
deleteOldRequests,
getRecentRequests,
pool,
} from "./common/database.js";
/**
@@ -47,16 +48,21 @@ async function makeRequests(urls, poolSize) {
}
/**
* Repeats requests made in the last 8 days, excluding those made in the last 11 hours.
* Repeats requests made in the last 8 days (or configured interval), excluding those made in the last 11 hours (or configured interval).
*/
export async function repeatRecentRequests() {
if (!pool) {
console.error("Postgres pool is not initialized.");
return;
}
await deleteOldRequests();
const urls = await getRecentRequests();
let maxInterval = process.env.DELETE_AFTER_HOURS
? `${process.env.DELETE_AFTER_HOURS} hours`
: "8 days";
let minInterval = process.env.UPDATE_AFTER_HOURS
? `${process.env.UPDATE_AFTER_HOURS} hours`
: "11 hours";
await deleteOldRequests(maxInterval);
const urls = await getRecentRequests(minInterval, maxInterval);
if (urls.length === 0) {
console.log("No recent requests found.");
} else {
@@ -1,4 +1,5 @@
import axios from "axios";
import { storeUser } from "./common/database.js";
/**
@@ -60,7 +61,10 @@ async function githubAuthenticate(code, privateAccess) {
const accessToken = body && body.access_token ? body.access_token : null;
if (!accessToken) {
throw new Error("OAuth Error: access_token missing from response");
throw new Error(
"OAuth Error: access_token missing from response: " +
JSON.stringify(body),
);
}
const userId = await getUserFromToken(accessToken);
@@ -76,6 +80,7 @@ async function githubAuthenticate(code, privateAccess) {
return { userId, accessToken, needDowngrade };
} catch (err) {
if (err.response) {
// eslint-disable-next-line preserve-caught-error
throw new Error(`OAuth Error: ${err.response.status}`);
}
throw err;
+7
View File
@@ -0,0 +1,7 @@
import { TextDecoder, TextEncoder } from "util";
//https://stackoverflow.com/a/68468204/1643179
Object.assign(global, { TextDecoder, TextEncoder });
process.env.PAT_1 = "dummyPAT1";
process.env.PAT_2 = "dummyPAT2";
+181
View File
@@ -0,0 +1,181 @@
// @ts-check
import { api, getConfig } from "@stats-organization/github-readme-stats-core";
import { beforeEach, describe, expect, it, vi } from "vitest";
import router from "../router.js";
import { CACHE_TTL, DURATIONS } from "../src/common/cache.js";
import { getUserAccessByName, storeRequest } from "../src/common/database.js";
vi.mock(import("@stats-organization/github-readme-stats-core"), async () => {
const { mockCore } = await import("./utils.js");
return mockCore();
});
vi.mock(import("../src/common/database.js"), async (importOriginal) => ({
...(await importOriginal()),
storeRequest: vi.fn(),
getUserAccessByName: vi.fn(),
}));
const apiMock = vi.mocked(api);
const getConfigMock = vi.mocked(getConfig);
const storeRequestMock = vi.mocked(storeRequest);
const getUserAccessByNameMock = vi.mocked(getUserAccessByName);
const createRequest = (search = "") => ({
headers: {},
url: `/api?${search}`,
});
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
const defaultCacheHeader =
`max-age=${CACHE_TTL.STATS_CARD.DEFAULT}, ` +
`s-maxage=${CACHE_TTL.STATS_CARD.DEFAULT}, ` +
`stale-while-revalidate=${DURATIONS.ONE_DAY}`;
const errorCacheHeader =
`max-age=${CACHE_TTL.ERROR}, ` +
`s-maxage=${CACHE_TTL.ERROR}, ` +
`stale-while-revalidate=${DURATIONS.ONE_DAY}`;
beforeEach(() => {
apiMock.mockReset();
getConfigMock.mockReset().mockReturnValue({});
storeRequestMock.mockReset().mockResolvedValue(undefined);
getUserAccessByNameMock.mockReset().mockResolvedValue(null);
// CACHE_SECONDS is not set here, this is just to safeguard against CACHE_SECONDS being set externally
delete process.env.CACHE_SECONDS;
});
describe("Test /api backend routing", () => {
it("happy path should pass query params and user PAT, respond with stats content and persist request", async () => {
getUserAccessByNameMock.mockResolvedValue({ token: "user-pat" });
apiMock.mockResolvedValue({
status: "success",
content: "mock-stats-svg",
});
const req = createRequest(
"username=anuraghazra&theme=dark&hide=issues,prs,contribs",
);
const res = createResponse();
await router(req, res);
expect(getUserAccessByNameMock).toHaveBeenCalledWith("anuraghazra");
expect(apiMock).toHaveBeenCalledWith(
{
username: "anuraghazra",
theme: "dark",
hide: "issues,prs,contribs",
},
"user-pat",
);
expect(req.query).toEqual({
username: "anuraghazra",
theme: "dark",
hide: "issues,prs,contribs",
});
expect(res.setHeader.mock.calls).toEqual([
["Cache-Control", defaultCacheHeader],
["Content-Type", "image/svg+xml"],
]);
expect(res.end).toHaveBeenCalledExactlyOnceWith("mock-stats-svg");
expect(storeRequestMock).toHaveBeenCalledExactlyOnceWith(req);
});
it("should use the shorter error cache for temporary stats errors", async () => {
apiMock.mockResolvedValue({
status: "error - temporary",
content: "temporary-error-svg",
});
const req = createRequest("username=anuraghazra");
const res = createResponse();
await router(req, res);
expect(getUserAccessByNameMock).toHaveBeenCalledWith("anuraghazra");
expect(apiMock).toHaveBeenCalledWith(
{
username: "anuraghazra",
},
null,
);
expect(res.setHeader.mock.calls).toEqual([
["Cache-Control", errorCacheHeader],
["Content-Type", "image/svg+xml"],
]);
expect(res.end).toHaveBeenCalledExactlyOnceWith("temporary-error-svg");
expect(storeRequestMock).toHaveBeenCalledExactlyOnceWith(req);
});
it("should not persist permanent stats errors returned by core", async () => {
apiMock.mockResolvedValue({
status: "error - permanent",
content: "permanent-error-svg",
});
const req = createRequest("username=anuraghazra");
const res = createResponse();
await router(req, res);
expect(getUserAccessByNameMock).toHaveBeenCalledWith("anuraghazra");
expect(apiMock).toHaveBeenCalledWith(
{
username: "anuraghazra",
},
null,
);
expect(res.setHeader.mock.calls).toEqual([
["Cache-Control", defaultCacheHeader],
["Content-Type", "image/svg+xml"],
]);
expect(res.end).toHaveBeenCalledExactlyOnceWith("permanent-error-svg");
expect(storeRequestMock).not.toHaveBeenCalled();
});
it("should reject blacklisted usernames before calling core logic", async () => {
const req = createRequest("username=renovate-bot");
const res = createResponse();
await router(req, res);
expect(apiMock).not.toHaveBeenCalled();
expect(getUserAccessByNameMock).not.toHaveBeenCalled();
expect(res.setHeader.mock.calls).toEqual([
["Cache-Control", defaultCacheHeader],
["Content-Type", "image/svg+xml"],
]);
expect(res.end).toHaveBeenCalledExactlyOnceWith(
"render-error:This username is blacklisted",
);
expect(storeRequestMock).not.toHaveBeenCalled();
});
it("should reject non-whitelisted usernames before calling core logic", async () => {
getConfigMock.mockReturnValue({ whitelist: ["allowed-user"] });
const req = createRequest("username=blocked-user");
const res = createResponse();
await router(req, res);
expect(apiMock).not.toHaveBeenCalled();
expect(getUserAccessByNameMock).not.toHaveBeenCalled();
expect(res.setHeader.mock.calls).toEqual([
["Cache-Control", defaultCacheHeader],
["Content-Type", "image/svg+xml"],
]);
expect(res.end).toHaveBeenCalledExactlyOnceWith(
"render-error:This username is not whitelisted",
);
expect(storeRequestMock).not.toHaveBeenCalled();
});
});
+41
View File
@@ -0,0 +1,41 @@
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import { beforeAll, bench, describe, vi } from "vitest";
import { data_stats } from "../utils.js";
const mock = new MockAdapter(axios);
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
let router;
beforeAll(async () => {
vi.stubEnv("CACHE_SECONDS", "");
vi.stubEnv("GIST_WHITELIST", "");
vi.stubEnv("POSTGRES_URL", "");
vi.stubEnv("WHITELIST", "");
({ default: router } = await import("../../router.js"));
mock.onPost("https://api.github.com/graphql").reply(200, data_stats);
});
describe("bench /api", () => {
bench(
"base",
async () => {
const req = {
headers: {},
url: "/api?username=anuraghazra",
};
const res = createResponse();
await router(req, res);
},
{ warmupIterations: 50 },
);
});
+43
View File
@@ -0,0 +1,43 @@
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import { beforeAll, bench, describe, vi } from "vitest";
import { happy_path_gist_data } from "../utils.js";
const mock = new MockAdapter(axios);
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
let router;
beforeAll(async () => {
vi.stubEnv("CACHE_SECONDS", "");
vi.stubEnv("GIST_WHITELIST", "");
vi.stubEnv("POSTGRES_URL", "");
vi.stubEnv("WHITELIST", "");
({ default: router } = await import("../../router.js"));
mock
.onPost("https://api.github.com/graphql")
.reply(200, happy_path_gist_data);
});
describe("bench /api/gist", () => {
bench(
"base",
async () => {
const req = {
headers: {},
url: "/api/gist?id=happy-gist-id",
};
const res = createResponse();
await router(req, res);
},
{ warmupIterations: 50 },
);
});
+41
View File
@@ -0,0 +1,41 @@
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import { beforeAll, bench, describe, vi } from "vitest";
import { data_user } from "../utils.js";
const mock = new MockAdapter(axios);
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
let router;
beforeAll(async () => {
vi.stubEnv("CACHE_SECONDS", "");
vi.stubEnv("GIST_WHITELIST", "");
vi.stubEnv("POSTGRES_URL", "");
vi.stubEnv("WHITELIST", "");
({ default: router } = await import("../../router.js"));
mock.onPost("https://api.github.com/graphql").reply(200, data_user);
});
describe("bench /api/pin", () => {
bench(
"base",
async () => {
const req = {
headers: {},
url: "/api/pin?username=anuraghazra&repo=convoychat",
};
const res = createResponse();
await router(req, res);
},
{ warmupIterations: 50 },
);
});
+345
View File
@@ -0,0 +1,345 @@
/**
* @file Contains end-to-end tests for the Vercel preview instance.
*/
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import { afterAll, beforeAll, describe, expect, test, vi } from "vitest";
const REPO = "curly-fiesta";
const USER = "catelinemnemosyne";
const STATS_CARD_USER = "e2eninja";
const GIST_ID = "372cef55fd897b31909fdeb3a7262758";
const STATS_MOCK_RESPONSE = {
data: {
user: {
name: "CodeNinja",
login: STATS_CARD_USER,
repositoriesContributedTo: { totalCount: 0 },
commits: {
totalCommitContributions: 3,
},
reviews: {
totalPullRequestReviewContributions: 0,
},
pullRequests: { totalCount: 1 },
openIssues: { totalCount: 1 },
closedIssues: { totalCount: 0 },
followers: { totalCount: 0 },
repositories: {
totalCount: 1,
nodes: [{ name: REPO, stargazers: { totalCount: 1 } }],
pageInfo: {
hasNextPage: false,
endCursor: "cursor",
},
},
},
},
};
const COMMITS_SEARCH_MOCK_RESPONSE = {
total_count: 3,
};
const TOP_LANGS_MOCK_RESPONSE = {
data: {
user: {
repositories: {
nodes: [
{
name: REPO,
languages: {
edges: [
{
size: 1721,
node: {
color: "#e34c26",
name: "HTML",
},
},
{
size: 930,
node: {
color: "#663399",
name: "CSS",
},
},
{
size: 1912,
node: {
color: "#f1e05a",
name: "JavaScript",
},
},
],
},
},
],
},
},
},
};
const WAKATIME_MOCK_RESPONSE = {
data: {
human_readable_range: "last week",
is_already_updating: false,
is_coding_activity_visible: true,
is_including_today: false,
is_other_usage_visible: false,
is_stuck: false,
is_up_to_date: false,
is_up_to_date_pending_future: false,
percent_calculated: 0,
range: "all_time",
status: "pending_update",
timeout: 15,
username: USER,
writes_only: false,
},
};
const REPO_MOCK_RESPONSE = {
data: {
user: {
repository: {
name: REPO,
nameWithOwner: `${USER}/cra-test`,
isPrivate: false,
isArchived: false,
isTemplate: false,
stargazers: {
totalCount: 1,
},
description: "Simple cra test repo.",
primaryLanguage: {
color: "#f1e05a",
id: "MDg6TGFuZ3VhZ2UxNDA=",
name: "JavaScript",
},
forkCount: 0,
},
},
organization: null,
},
};
const GIST_MOCK_RESPONSE = {
data: {
viewer: {
gist: {
description:
"Trying to access this path on Windows 10 ver. 1803+ will breaks NTFS",
owner: {
login: "qwerty541",
},
stargazerCount: 1,
forks: {
totalCount: 0,
},
files: [
{
name: "link.txt",
language: {
name: "Text",
},
size: 1,
},
],
},
},
},
};
const CACHE_BURST_STRING = `v=${new Date().getTime()}`;
const mock = new MockAdapter(axios, { onNoMatch: "passthrough" });
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
let router;
/**
* Renders a card locally through the backend router.
* @param {string} url Card URL to render through the router.
* @returns {Promise<string>} Rendered SVG markup.
*/
async function getLocalSvg(url) {
const req = {
headers: {},
url,
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
return res.end.mock.calls[0][0];
}
beforeAll(async () => {
vi.stubEnv("CACHE_SECONDS", "");
vi.stubEnv("GIST_WHITELIST", "");
vi.stubEnv("POSTGRES_URL", "");
vi.stubEnv("WHITELIST", "");
vi.stubEnv("PAT_1", "dummyPAT1");
vi.stubEnv("PAT_2", "dummyPAT2");
({ default: router } = await import("../../router.js"));
mock.onPost("https://api.github.com/graphql").reply((config) => {
const { query, variables } = JSON.parse(config.data);
if (
query.includes("query userInfo") &&
variables?.login === STATS_CARD_USER
) {
return [200, STATS_MOCK_RESPONSE];
}
if (query.includes("query userInfo") && variables?.login === USER) {
return [200, TOP_LANGS_MOCK_RESPONSE];
}
if (query.includes("query getRepo")) {
return [200, REPO_MOCK_RESPONSE];
}
if (query.includes("query gistInfo")) {
return [200, GIST_MOCK_RESPONSE];
}
return [500, { error: "Unhandled GraphQL request in e2e test" }];
});
mock
.onGet(
`https://api.github.com/search/commits?per_page=1&q=author:${STATS_CARD_USER}`,
)
.reply(200, COMMITS_SEARCH_MOCK_RESPONSE);
mock
.onGet(
`https://wakatime.com/api/v1/users/${USER}/stats?is_including_today=true`,
)
.reply(200, WAKATIME_MOCK_RESPONSE);
});
afterAll(() => {
mock.restore();
vi.unstubAllEnvs();
});
describe("Fetch Cards", () => {
const VERCEL_PREVIEW_URL = "https://github-stats-extended-preview.vercel.app";
test("retrieve stats card", async () => {
expect(VERCEL_PREVIEW_URL).toBeDefined();
const cardPath = `/api?username=${STATS_CARD_USER}&include_all_commits=true&${CACHE_BURST_STRING}`;
// Check if the Vercel preview instance stats card function is up and running.
await expect(
axios.get(`${VERCEL_PREVIEW_URL}${cardPath}`),
).resolves.not.toThrow();
// Get local stats card.
const localStatsCardSVG = await getLocalSvg(cardPath);
// Get the Vercel preview stats card response.
const serverStatsSvg = await axios.get(`${VERCEL_PREVIEW_URL}${cardPath}`);
// Check if stats card from deployment matches the stats card from local.
expect(serverStatsSvg.data).toEqual(localStatsCardSVG);
}, 20000);
test("retrieve language card", async () => {
expect(VERCEL_PREVIEW_URL).toBeDefined();
const cardPath = `/api/top-langs?username=${USER}&${CACHE_BURST_STRING}`;
// Check if the Vercel preview instance language card function is up and running.
await expect(
axios.get(`${VERCEL_PREVIEW_URL}${cardPath}`),
).resolves.not.toThrow();
// Get local language card.
const localLanguageCardSVG = await getLocalSvg(cardPath);
// Get the Vercel preview language card response.
const serverLanguageSVG = await axios.get(
`${VERCEL_PREVIEW_URL}${cardPath}`,
);
// Check if language card from deployment matches the local language card.
expect(serverLanguageSVG.data).toEqual(localLanguageCardSVG);
}, 20000);
test("retrieve WakaTime card", async () => {
expect(VERCEL_PREVIEW_URL).toBeDefined();
const cardPath = `/api/wakatime?username=${USER}&${CACHE_BURST_STRING}`;
// Check if the Vercel preview instance WakaTime function is up and running.
await expect(
axios.get(`${VERCEL_PREVIEW_URL}${cardPath}`),
).resolves.not.toThrow();
// Get local WakaTime card.
const localWakaCardSVG = await getLocalSvg(cardPath);
// Get the Vercel preview WakaTime card response.
const serverWakaTimeSvg = await axios.get(
`${VERCEL_PREVIEW_URL}${cardPath}`,
);
// Check if WakaTime card from deployment matches the local WakaTime card.
expect(serverWakaTimeSvg.data).toEqual(localWakaCardSVG);
}, 20000);
test("retrieve repo card", async () => {
expect(VERCEL_PREVIEW_URL).toBeDefined();
const cardPath = `/api/pin?username=${USER}&repo=${REPO}&${CACHE_BURST_STRING}`;
// Check if the Vercel preview instance Repo function is up and running.
await expect(
axios.get(`${VERCEL_PREVIEW_URL}${cardPath}`),
).resolves.not.toThrow();
// Get local repo card.
const localRepoCardSVG = await getLocalSvg(cardPath);
// Get the Vercel preview repo card response.
const serverRepoSvg = await axios.get(`${VERCEL_PREVIEW_URL}${cardPath}`);
// Check if Repo card from deployment matches the local Repo card.
expect(serverRepoSvg.data).toEqual(localRepoCardSVG);
}, 20000);
test("retrieve gist card", async () => {
expect(VERCEL_PREVIEW_URL).toBeDefined();
const cardPath = `/api/gist?id=${GIST_ID}&${CACHE_BURST_STRING}`;
// Check if the Vercel preview instance Gist function is up and running.
await expect(
axios.get(`${VERCEL_PREVIEW_URL}${cardPath}`),
).resolves.not.toThrow();
// Get local gist card.
const localGistCardSVG = await getLocalSvg(cardPath);
// Get the Vercel preview gist card response.
const serverGistSvg = await axios.get(`${VERCEL_PREVIEW_URL}${cardPath}`);
// Check if Gist card from deployment matches the local Gist card.
expect(serverGistSvg.data).toEqual(localGistCardSVG);
}, 20000);
});
+149
View File
@@ -0,0 +1,149 @@
// @ts-check
import { getConfig, gist } from "@stats-organization/github-readme-stats-core";
import { beforeEach, describe, expect, it, vi } from "vitest";
import router from "../router.js";
import { CACHE_TTL, DURATIONS } from "../src/common/cache.js";
import { getUserAccessByName, storeRequest } from "../src/common/database.js";
vi.mock(import("@stats-organization/github-readme-stats-core"), async () => {
const { mockCore } = await import("./utils.js");
return mockCore();
});
vi.mock(import("../src/common/database.js"), async (importOriginal) => ({
...(await importOriginal()),
storeRequest: vi.fn(),
getUserAccessByName: vi.fn(),
}));
const gistMock = vi.mocked(gist);
const getConfigMock = vi.mocked(getConfig);
const storeRequestMock = vi.mocked(storeRequest);
const getUserAccessByNameMock = vi.mocked(getUserAccessByName);
const createRequest = (search) => ({
headers: {},
url: `/api/gist?${search}`,
});
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
const defaultCacheHeader =
`max-age=${CACHE_TTL.GIST_CARD.DEFAULT}, ` +
`s-maxage=${CACHE_TTL.GIST_CARD.DEFAULT}, ` +
`stale-while-revalidate=${DURATIONS.ONE_DAY}`;
const errorCacheHeader =
`max-age=${CACHE_TTL.ERROR}, ` +
`s-maxage=${CACHE_TTL.ERROR}, ` +
`stale-while-revalidate=${DURATIONS.ONE_DAY}`;
beforeEach(() => {
gistMock.mockReset();
getConfigMock.mockReset().mockReturnValue({});
storeRequestMock.mockReset().mockResolvedValue(undefined);
getUserAccessByNameMock.mockReset().mockResolvedValue(null);
// CACHE_SECONDS is not set here, this is just to safeguard against CACHE_SECONDS being set externally
delete process.env.CACHE_SECONDS;
});
describe("Test /api/gist backend routing", () => {
it("happy path should pass query params, respond with gist content and persist request", async () => {
gistMock.mockResolvedValue({
status: "success",
content: "mock-gist-svg",
});
const req = createRequest("id=bbfce31e0217a3689c8d961a356cb10d&theme=dark");
const res = createResponse();
await router(req, res);
expect(gistMock).toHaveBeenCalledWith({
id: "bbfce31e0217a3689c8d961a356cb10d",
theme: "dark",
});
expect(getUserAccessByNameMock).not.toHaveBeenCalled();
expect(req.query).toEqual({
id: "bbfce31e0217a3689c8d961a356cb10d",
theme: "dark",
});
expect(res.setHeader.mock.calls).toEqual([
["Cache-Control", defaultCacheHeader],
["Content-Type", "image/svg+xml"],
]);
expect(res.end).toHaveBeenCalledExactlyOnceWith("mock-gist-svg");
expect(storeRequestMock).toHaveBeenCalledExactlyOnceWith(req);
});
it("should use the shorter error cache for temporary gist errors", async () => {
gistMock.mockResolvedValue({
status: "error - temporary",
content: "temporary-error-svg",
});
const req = createRequest("id=bbfce31e0217a3689c8d961a356cb10d");
const res = createResponse();
await router(req, res);
expect(gistMock).toHaveBeenCalledWith({
id: "bbfce31e0217a3689c8d961a356cb10d",
});
expect(getUserAccessByNameMock).not.toHaveBeenCalled();
expect(res.setHeader.mock.calls).toEqual([
["Cache-Control", errorCacheHeader],
["Content-Type", "image/svg+xml"],
]);
expect(res.end).toHaveBeenCalledExactlyOnceWith("temporary-error-svg");
expect(storeRequestMock).toHaveBeenCalledExactlyOnceWith(req);
});
it("should not persist permanent gist errors returned by core", async () => {
gistMock.mockResolvedValue({
status: "error - permanent",
content: "permanent-error-svg",
});
const req = createRequest("id=bbfce31e0217a3689c8d961a356cb10d");
const res = createResponse();
await router(req, res);
expect(gistMock).toHaveBeenCalledWith({
id: "bbfce31e0217a3689c8d961a356cb10d",
});
expect(getUserAccessByNameMock).not.toHaveBeenCalled();
expect(res.setHeader.mock.calls).toEqual([
["Cache-Control", defaultCacheHeader],
["Content-Type", "image/svg+xml"],
]);
expect(res.end).toHaveBeenCalledExactlyOnceWith("permanent-error-svg");
expect(storeRequestMock).not.toHaveBeenCalled();
});
it("should reject non-whitelisted gist ids before calling core logic", async () => {
getConfigMock.mockReturnValue({ gistWhitelist: ["allowed-gist-id"] });
const req = createRequest("id=blocked-gist-id");
const res = createResponse();
await router(req, res);
expect(gistMock).not.toHaveBeenCalled();
expect(getUserAccessByNameMock).not.toHaveBeenCalled();
expect(res.setHeader.mock.calls).toEqual([
["Cache-Control", defaultCacheHeader],
["Content-Type", "image/svg+xml"],
]);
expect(res.end).toHaveBeenCalledExactlyOnceWith(
"render-error:This gist ID is not whitelisted",
);
expect(storeRequestMock).not.toHaveBeenCalled();
});
});
@@ -2,20 +2,17 @@
* @file Tests for the status/pat-info cloud function.
*/
import dotenv from "dotenv";
dotenv.config();
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import {
afterAll,
afterEach,
beforeAll,
describe,
expect,
it,
jest,
} from "@jest/globals";
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import patInfo, { RATE_LIMIT_SECONDS } from "../api-renamed/status/pat-info.js";
vi,
} from "vitest";
const mock = new MockAdapter(axios);
@@ -32,8 +29,8 @@ const faker = (query) => {
query: { ...query },
};
const res = {
setHeader: jest.fn(),
send: jest.fn(),
setHeader: vi.fn(),
send: vi.fn(),
};
return { req, res };
@@ -66,20 +63,35 @@ const bad_credentials_error = {
message: "Bad credentials",
};
let RATE_LIMIT_SECONDS, patInfo;
beforeAll(async () => {
vi.stubEnv("PAT_1", "testPAT1");
vi.stubEnv("PAT_2", "testPAT2");
vi.stubEnv("PAT_3", "testPAT3");
vi.stubEnv("PAT_4", "testPAT4");
const { logger } =
await import("@stats-organization/github-readme-stats-core");
vi.spyOn(logger, "log").mockImplementation(() => {});
vi.spyOn(logger, "error").mockImplementation(() => {});
({ RATE_LIMIT_SECONDS, default: patInfo } =
await import("../api-renamed/status/pat-info.js"));
});
afterEach(() => {
mock.reset();
vi.unstubAllEnvs();
// modules may cache environment variables, so we need to reset them
vi.resetModules();
});
afterAll(() => {
vi.restoreAllMocks();
});
describe("Test /api/status/pat-info", () => {
beforeAll(() => {
// reset patenv first so that dotenv doesn't populate them with local envs
process.env = {};
process.env.PAT_1 = "testPAT1";
process.env.PAT_2 = "testPAT2";
process.env.PAT_3 = "testPAT3";
process.env.PAT_4 = "testPAT4";
});
it("should return only 'validPATs' if all PATs are valid", async () => {
mock
.onPost("https://api.github.com/graphql")
@@ -252,7 +264,6 @@ describe("Test /api/status/pat-info", () => {
});
it("should have proper cache when error is thrown", async () => {
mock.reset();
mock.onPost("https://api.github.com/graphql").networkError();
const { req, res } = faker({}, {});
+84
View File
@@ -0,0 +1,84 @@
// @ts-check
import { pin } from "@stats-organization/github-readme-stats-core";
import { beforeEach, describe, expect, it, vi } from "vitest";
import router from "../router.js";
import { CACHE_TTL, DURATIONS } from "../src/common/cache.js";
import { getUserAccessByName, storeRequest } from "../src/common/database.js";
vi.mock(import("@stats-organization/github-readme-stats-core"), async () => {
const { mockCore } = await import("./utils.js");
return mockCore();
});
vi.mock(import("../src/common/database.js"), async (importOriginal) => ({
...(await importOriginal()),
storeRequest: vi.fn(),
getUserAccessByName: vi.fn(),
}));
const pinMock = vi.mocked(pin);
const storeRequestMock = vi.mocked(storeRequest);
const getUserAccessByNameMock = vi.mocked(getUserAccessByName);
const createRequest = (search = "") => ({
headers: {},
url: `/api/pin?${search}`,
});
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
const defaultCacheHeader =
`max-age=${CACHE_TTL.PIN_CARD.DEFAULT}, ` +
`s-maxage=${CACHE_TTL.PIN_CARD.DEFAULT}, ` +
`stale-while-revalidate=${DURATIONS.ONE_DAY}`;
beforeEach(() => {
pinMock.mockReset();
storeRequestMock.mockReset().mockResolvedValue(undefined);
getUserAccessByNameMock.mockReset().mockResolvedValue(null);
// CACHE_SECONDS is not set here, this is just to safeguard against CACHE_SECONDS being set externally
delete process.env.CACHE_SECONDS;
});
describe("Test /api/pin backend routing", () => {
it("happy path should pass query params and user PAT, respond with pin content and persist request", async () => {
getUserAccessByNameMock.mockResolvedValue({ token: "user-pat" });
pinMock.mockResolvedValue({
status: "success",
content: "mock-pin-svg",
});
const req = createRequest(
"username=anuraghazra&repo=convoychat&theme=dark",
);
const res = createResponse();
await router(req, res);
expect(getUserAccessByNameMock).toHaveBeenCalledWith("anuraghazra");
expect(pinMock).toHaveBeenCalledWith(
{
username: "anuraghazra",
repo: "convoychat",
theme: "dark",
},
"user-pat",
);
expect(req.query).toEqual({
username: "anuraghazra",
repo: "convoychat",
theme: "dark",
});
expect(res.setHeader.mock.calls).toEqual([
["Cache-Control", defaultCacheHeader],
["Content-Type", "image/svg+xml"],
]);
expect(res.end).toHaveBeenCalledExactlyOnceWith("mock-pin-svg");
expect(storeRequestMock).toHaveBeenCalledExactlyOnceWith(req);
});
});
@@ -0,0 +1,514 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Test /api contract > should match the private missing-username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">This username is not whitelisted</tspan>
<tspan x="25" dy="18" class="gray">Please deploy your own instance</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api contract > should match the public blacklisted-username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">This username is blacklisted</tspan>
<tspan x="25" dy="18" class="gray">Please deploy your own instance</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api contract > should match the public happy-path response snapshot 1`] = `
{
"content": "<svg width="450" height="195" viewBox="0 0 450 195" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="descId">
<title id="titleId">Anurag Hazra's GitHub Stats, Rank: A+</title>
<desc id="descId">Total Stars Earned: 14099, Total Commits (last year) : 200, Total PRs: 4000, Total Issues: 340, Contributed to (last year): 51</desc>
<style>
.header {
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
fill: #2f80ed;
animation: fadeInAnimation 0.8s ease-in-out forwards;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.header { font-size: 15.5px; }
}
.stat {
font: 600 14px 'Segoe UI', Ubuntu, "Helvetica Neue", Sans-Serif; fill: #434d58;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.stat { font-size:12px; }
}
.stagger {
opacity: 0;
animation: fadeInAnimation 0.3s ease-in-out forwards;
}
.rank-text {
font: 800 24px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58;
animation: scaleInAnimation 0.3s ease-in-out forwards;
}
.rank-percentile-header {
font-size: 14px;
}
.rank-percentile-text {
font-size: 16px;
}
.not_bold { font-weight: 400 }
.bold { font-weight: 700 }
.icon {
fill: #4c71f2;
display: none;
}
.rank-circle-rim {
stroke: #2f80ed;
fill: none;
stroke-width: 6;
opacity: 0.2;
}
.rank-circle {
stroke: #2f80ed;
stroke-dasharray: 250;
fill: none;
stroke-width: 6;
stroke-linecap: round;
opacity: 0.8;
transform-origin: -10px 8px;
transform: rotate(-90deg);
animation: rankAnimation 1s forwards ease-in-out;
}
@keyframes rankAnimation {
from {
stroke-dashoffset: 251.32741228718345;
}
to {
stroke-dashoffset: 25.665014275610705;
}
}
/* Animations */
@keyframes scaleInAnimation {
from {
transform: translate(-5px, 5px) scale(0);
}
to {
transform: translate(-5px, 5px) scale(1);
}
}
@keyframes fadeInAnimation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
</style>
<rect data-testid="card-bg" x="0.5" y="0.5" rx="4.5" height="99%" stroke="#e4e2e2" width="449" fill="#fffefe" stroke-opacity="1"/>
<g data-testid="card-title" transform="translate(25, 35)">
<g transform="translate(0, 0)">
<text x="0" y="0" class="header" data-testid="header">Anurag Hazra's GitHub Stats</text>
</g>
</g>
<g data-testid="main-card-body" transform="translate(0, 55)">
<g data-testid="rank-circle" transform="translate(365, 47.5)">
<circle class="rank-circle-rim" cx="-10" cy="8" r="40"/>
<circle class="rank-circle" cx="-10" cy="8" r="40"/>
<g class="rank-text">
<text x="-5" y="3" alignment-baseline="central" dominant-baseline="central" text-anchor="middle" data-testid="level-rank-icon">
A+
</text>
</g>
</g>
<svg x="0" y="0">
<g transform="translate(0, 0)">
<g class="stagger" style="animation-delay: 450ms" transform="translate(25, 0)">
<text class="stat bold" y="12.5">Total Stars Earned:</text>
<text class="stat bold" x="204.01" y="12.5" data-testid="stars">14.1k</text>
</g>
</g><g transform="translate(0, 25)">
<g class="stagger" style="animation-delay: 600ms" transform="translate(25, 0)">
<text class="stat bold" y="12.5">Total Commits (last year):</text>
<text class="stat bold" x="204.01" y="12.5" data-testid="commits">200</text>
</g>
</g><g transform="translate(0, 50)">
<g class="stagger" style="animation-delay: 750ms" transform="translate(25, 0)">
<text class="stat bold" y="12.5">Total PRs:</text>
<text class="stat bold" x="204.01" y="12.5" data-testid="prs">4k</text>
</g>
</g><g transform="translate(0, 75)">
<g class="stagger" style="animation-delay: 900ms" transform="translate(25, 0)">
<text class="stat bold" y="12.5">Total Issues:</text>
<text class="stat bold" x="204.01" y="12.5" data-testid="issues">340</text>
</g>
</g><g transform="translate(0, 100)">
<g class="stagger" style="animation-delay: 1050ms" transform="translate(25, 0)">
<text class="stat bold" y="12.5">Contributed to (last year):</text>
<text class="stat bold" x="204.01" y="12.5" data-testid="contribs">51</text>
</g>
</g>
</svg>
</g>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api contract > should match the public many-params response snapshot 1`] = `
{
"content": "<svg width="540" height="365" viewBox="0 0 540 365" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="descId">
<title id="titleId">a custom title, Rank: A+</title>
<desc id="descId">कुल अर्जित सितारे: 4100, कुल commits (2024) : 200, कुल PR: 4000, कुल PR का विलय: 3200, मर्ज किए गए PRs प्रतिशत: 80.0, कुल PRs की समीक्षा की गई: 1234, कुल चर्चाएँ शुरू हुईं: 222, कुल चर्चाओं के उत्तर: 111, (पिछले वर्ष) में योगदान दिया: 51</desc>
<style>
.header {
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
fill: #123456;
animation: fadeInAnimation 0.8s ease-in-out forwards;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.header { font-size: 15.5px; }
}
.stat {
font: 600 14px 'Segoe UI', Ubuntu, "Helvetica Neue", Sans-Serif; fill: #abcdef;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.stat { font-size:12px; }
}
.stagger {
opacity: 0;
animation: fadeInAnimation 0.3s ease-in-out forwards;
}
.rank-text {
font: 800 24px 'Segoe UI', Ubuntu, Sans-Serif; fill: #abcdef;
animation: scaleInAnimation 0.3s ease-in-out forwards;
}
.rank-percentile-header {
font-size: 14px;
}
.rank-percentile-text {
font-size: 16px;
}
.not_bold { font-weight: 400 }
.bold { font-weight: 700 }
.icon {
fill: #ff00aa;
display: block;
}
.rank-circle-rim {
stroke: #654321;
fill: none;
stroke-width: 6;
opacity: 0.2;
}
.rank-circle {
stroke: #654321;
stroke-dasharray: 250;
fill: none;
stroke-width: 6;
stroke-linecap: round;
opacity: 0.8;
transform-origin: -10px 8px;
transform: rotate(-90deg);
animation: rankAnimation 1s forwards ease-in-out;
}
@keyframes rankAnimation {
from {
stroke-dashoffset: 251.32741228718345;
}
to {
stroke-dashoffset: 26.378312814443284;
}
}
/* Animations */
@keyframes scaleInAnimation {
from {
transform: translate(-5px, 5px) scale(0);
}
to {
transform: translate(-5px, 5px) scale(1);
}
}
@keyframes fadeInAnimation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
* { animation-duration: 0s !important; animation-delay: 0s !important; }
</style>
<rect data-testid="card-bg" x="0.5" y="0.5" rx="12" height="99%" stroke="#fedcba" width="539" fill="#0f172a" stroke-opacity="1"/>
<g data-testid="card-title" transform="translate(25, 35)">
<g transform="translate(0, 0)">
<text x="0" y="0" class="header" data-testid="header">a custom title</text>
</g>
</g>
<g data-testid="main-card-body" transform="translate(0, 55)">
<g data-testid="rank-circle" transform="translate(463.5, 132.5)">
<circle class="rank-circle-rim" cx="-10" cy="8" r="40"/>
<circle class="rank-circle" cx="-10" cy="8" r="40"/>
<g class="rank-text">
<svg x="-38" y="-30" height="66" width="66" aria-hidden="true" viewBox="0 0 16 16" version="1.1" data-view-component="true" data-testid="github-rank-icon">
<path d="M8 0c4.42 0 8 3.58 8 8a8.013 8.013 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27-.68 0-1.36.09-2 .27-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8Z"/>
</svg>
</g>
</g>
<svg x="0" y="0">
<g transform="translate(0, 0)">
<g class="stagger" style="animation-delay: 450ms" transform="translate(25, 0)">
<svg data-testid="icon" class="icon" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"/>
</svg>
<text class="stat not_bold" x="25" y="12.5">कुल अर्जित सितारे:</text>
<text class="stat not_bold" x="219.01" y="12.5" data-testid="stars">4100</text>
</g>
</g><g transform="translate(0, 32)">
<g class="stagger" style="animation-delay: 600ms" transform="translate(25, 0)">
<svg data-testid="icon" class="icon" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"/>
</svg>
<text class="stat not_bold" x="25" y="12.5">कुल commits (2024):</text>
<text class="stat not_bold" x="219.01" y="12.5" data-testid="commits">200</text>
</g>
</g><g transform="translate(0, 64)">
<g class="stagger" style="animation-delay: 750ms" transform="translate(25, 0)">
<svg data-testid="icon" class="icon" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M7.177 3.073L9.573.677A.25.25 0 0110 .854v4.792a.25.25 0 01-.427.177L7.177 3.427a.25.25 0 010-.354zM3.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122v5.256a2.251 2.251 0 11-1.5 0V5.372A2.25 2.25 0 011.5 3.25zM11 2.5h-1V4h1a1 1 0 011 1v5.628a2.251 2.251 0 101.5 0V5A2.5 2.5 0 0011 2.5zm1 10.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.75 12a.75.75 0 100 1.5.75.75 0 000-1.5z"/>
</svg>
<text class="stat not_bold" x="25" y="12.5">कुल PR:</text>
<text class="stat not_bold" x="219.01" y="12.5" data-testid="prs">4000</text>
</g>
</g><g transform="translate(0, 96)">
<g class="stagger" style="animation-delay: 900ms" transform="translate(25, 0)">
<svg data-testid="icon" class="icon" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M5.45 5.154A4.25 4.25 0 0 0 9.25 7.5h1.378a2.251 2.251 0 1 1 0 1.5H9.25A5.734 5.734 0 0 1 5 7.123v3.505a2.25 2.25 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.95-.218ZM4.25 13.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm8.5-4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5ZM5 3.25a.75.75 0 1 0 0 .005V3.25Z"/>
</svg>
<text class="stat not_bold" x="25" y="12.5">कुल PR का विलय:</text>
<text class="stat not_bold" x="219.01" y="12.5" data-testid="prs_merged">3200</text>
</g>
</g><g transform="translate(0, 128)">
<g class="stagger" style="animation-delay: 1050ms" transform="translate(25, 0)">
<svg data-testid="icon" class="icon" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M13.442 2.558a.625.625 0 0 1 0 .884l-10 10a.625.625 0 1 1-.884-.884l10-10a.625.625 0 0 1 .884 0zM4.5 6a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zm7 6a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm0 1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
</svg>
<text class="stat not_bold" x="25" y="12.5">मर्ज किए गए PRs प्रतिशत:</text>
<text class="stat not_bold" x="219.01" y="12.5" data-testid="prs_merged_percentage">80.0 %</text>
</g>
</g><g transform="translate(0, 160)">
<g class="stagger" style="animation-delay: 1200ms" transform="translate(25, 0)">
<svg data-testid="icon" class="icon" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"/>
</svg>
<text class="stat not_bold" x="25" y="12.5">कुल PRs की समीक्षा की गई:</text>
<text class="stat not_bold" x="219.01" y="12.5" data-testid="reviews">1234</text>
</g>
</g><g transform="translate(0, 192)">
<g class="stagger" style="animation-delay: 1350ms" transform="translate(25, 0)">
<svg data-testid="icon" class="icon" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"/>
</svg>
<text class="stat not_bold" x="25" y="12.5">कुल चर्चाएँ शुरू हुईं:</text>
<text class="stat not_bold" x="219.01" y="12.5" data-testid="discussions_started">222</text>
</g>
</g><g transform="translate(0, 224)">
<g class="stagger" style="animation-delay: 1500ms" transform="translate(25, 0)">
<svg data-testid="icon" class="icon" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"/>
</svg>
<text class="stat not_bold" x="25" y="12.5">कुल चर्चाओं के उत्तर:</text>
<text class="stat not_bold" x="219.01" y="12.5" data-testid="discussions_answered">111</text>
</g>
</g><g transform="translate(0, 256)">
<g class="stagger" style="animation-delay: 1650ms" transform="translate(25, 0)">
<svg data-testid="icon" class="icon" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"/>
</svg>
<text class="stat not_bold" x="25" y="12.5">(पिछले वर्ष) में योगदान दिया:</text>
<text class="stat not_bold" x="219.01" y="12.5" data-testid="contribs">51</text>
</g>
</g>
</svg>
</g>
</svg>",
"graphqlRequest": "{"query":"\\n query userInfo($login: String!, $after: String, $includeMergedPullRequests: Boolean!, $includeDiscussions: Boolean!, $includeDiscussionsAnswers: Boolean!, $startTime: DateTime = null, $ownerAffiliations: [RepositoryAffiliation]) {\\n user(login: $login) {\\n name\\n login\\n commits: contributionsCollection (from: $startTime) {\\n totalCommitContributions,\\n }\\n reviews: contributionsCollection {\\n totalPullRequestReviewContributions\\n }\\n repositoriesContributedTo(first: 1, contributionTypes: [COMMIT, ISSUE, PULL_REQUEST, REPOSITORY]) {\\n totalCount\\n }\\n pullRequests(first: 1) {\\n totalCount\\n }\\n mergedPullRequests: pullRequests(states: MERGED) @include(if: $includeMergedPullRequests) {\\n totalCount\\n }\\n openIssues: issues(states: OPEN) {\\n totalCount\\n }\\n closedIssues: issues(states: CLOSED) {\\n totalCount\\n }\\n followers {\\n totalCount\\n }\\n repositoryDiscussions @include(if: $includeDiscussions) {\\n totalCount\\n }\\n repositoryDiscussionComments(onlyAnswers: true) @include(if: $includeDiscussionsAnswers) {\\n totalCount\\n }\\n \\n repositories(first: 100, after: $after, ownerAffiliations: $ownerAffiliations, orderBy: {direction: DESC, field: STARGAZERS}) {\\n totalCount\\n nodes {\\n name\\n stargazers {\\n totalCount\\n }\\n }\\n pageInfo {\\n hasNextPage\\n endCursor\\n }\\n }\\n\\n }\\n }\\n","variables":{"login":"anuraghazra","first":100,"after":null,"includeMergedPullRequests":true,"includeDiscussions":true,"includeDiscussionsAnswers":true,"startTime":"2024-01-01T00:00:00Z","ownerAffiliations":["OWNER","COLLABORATOR"]}}",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api contract > should match the public missing-username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">Missing params "username" make sure you pass the parameters in URL</tspan>
<tspan x="25" dy="18" class="gray"/>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=600, s-maxage=600, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api contract > should render error card in same theme as requested card 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#0a0f0b" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #abd200 }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #68b587 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#0a0f0b" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">Missing params "username" make sure you pass the parameters in URL</tspan>
<tspan x="25" dy="18" class="gray"/>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=600, s-maxage=600, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
@@ -0,0 +1,258 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Test /api/gist contract > should match the private missing-id response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">This gist ID is not whitelisted</tspan>
<tspan x="25" dy="18" class="gray">Please deploy your own instance</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/gist contract > should match the public happy-path response snapshot 1`] = `
{
"content": "<svg width="400" height="180" viewBox="0 0 400 180" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="descId">
<title id="titleId"/>
<desc id="descId"/>
<style>
.header {
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
fill: #2f80ed;
animation: fadeInAnimation 0.8s ease-in-out forwards;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.header { font-size: 15.5px; }
}
.description {
font: 400 13px 'Segoe UI', Ubuntu, Sans-Serif;fill: #434d58;
}
.gray { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.icon { fill: #586069 }
/* Animations */
@keyframes scaleInAnimation {
from {
transform: translate(-5px, 5px) scale(0);
}
to {
transform: translate(-5px, 5px) scale(1);
}
}
@keyframes fadeInAnimation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
</style>
<rect data-testid="card-bg" x="0.5" y="0.5" rx="4.5" height="99%" stroke="#e4e2e2" width="399" fill="#fffefe" stroke-opacity="1"/>
<g data-testid="card-title" transform="translate(25, 35)">
<g transform="translate(0, 0)">
<svg class="icon" x="0" y="-13" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"/>
</svg>
</g><g transform="translate(25, 0)">
<text x="0" y="0" class="header" data-testid="header">countries.json</text>
</g>
</g>
<g data-testid="main-card-body" transform="translate(0, 55)">
<text class="description" x="25" y="-5">
<tspan dy="1.2em" x="25">List of countries and territories in English and Spanish: name,</tspan><tspan dy="1.2em" x="25">continent, capital, dial code, country codes, TLD, and area in</tspan><tspan dy="1.2em" x="25">sq km. Lista de países y territorios en Inglés y Español:</tspan><tspan dy="1.2em" x="25">nombre, continente, capital, código de teléfono, códigos de</tspan><tspan dy="1.2em" x="25">país, dominio y área en km cuadrados. Updated 2023</tspan>
</text>
<g transform="translate(30, 105)">
<g transform="translate(0, 0)">
<g data-testid="primary-lang">
<circle data-testid="lang-color" cx="0" cy="-5" r="6" fill="#292929"/>
<text data-testid="lang-name" class="gray" x="15">JSON</text>
</g>
</g><g transform="translate(53.67999954223633, 0)"><g transform="translate(0, 0)">
<svg class="icon" y="-12" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"/>
</svg>
</g><g transform="translate(20, 0)"><text data-testid="starsCount" class="gray">33</text></g></g><g transform="translate(107.59999923706056, 0)"><g transform="translate(0, 0)">
<svg class="icon" y="-12" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"/>
</svg>
</g><g transform="translate(20, 0)"><text data-testid="forksCount" class="gray">11</text></g></g>
</g>
</g>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/gist contract > should match the public many-params response snapshot 1`] = `
{
"content": "<svg width="400" height="180" viewBox="0 0 400 180" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="descId">
<title id="titleId"/>
<desc id="descId"/>
<style>
.header {
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
fill: #123456;
animation: fadeInAnimation 0.8s ease-in-out forwards;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.header { font-size: 15.5px; }
}
.description {
font: 400 13px 'Segoe UI', Ubuntu, Sans-Serif;fill: #abcdef;
}
.gray { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #abcdef }
.icon { fill: #ff00aa }
/* Animations */
@keyframes scaleInAnimation {
from {
transform: translate(-5px, 5px) scale(0);
}
to {
transform: translate(-5px, 5px) scale(1);
}
}
@keyframes fadeInAnimation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
</style>
<rect data-testid="card-bg" x="0.5" y="0.5" rx="12" height="99%" stroke="#fedcba" width="399" fill="#0f172a" stroke-opacity="1"/>
<g data-testid="card-title" transform="translate(25, 35)">
<g transform="translate(0, 0)">
<svg class="icon" x="0" y="-13" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"/>
</svg>
</g><g transform="translate(25, 0)">
<text x="0" y="0" class="header" data-testid="header">Yizack/countries.json</text>
</g>
</g>
<g data-testid="main-card-body" transform="translate(0, 55)">
<text class="description" x="25" y="-5">
<tspan dy="1.2em" x="25">List of countries and territories in English and Spanish: name,</tspan><tspan dy="1.2em" x="25">continent, capital, dial code, country codes, TLD, and area in</tspan><tspan dy="1.2em" x="25">sq km. Lista de países y territorios en Inglés y Español:</tspan><tspan dy="1.2em" x="25">nombre, continente, capital, código de teléfono, códigos de</tspan><tspan dy="1.2em" x="25">país, dominio y área en km cuadrados. Updated 2023</tspan>
</text>
<g transform="translate(30, 105)">
<g transform="translate(0, 0)">
<g data-testid="primary-lang">
<circle data-testid="lang-color" cx="0" cy="-5" r="6" fill="#292929"/>
<text data-testid="lang-name" class="gray" x="15">JSON</text>
</g>
</g><g transform="translate(53.67999954223633, 0)"><g transform="translate(0, 0)">
<svg class="icon" y="-12" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"/>
</svg>
</g><g transform="translate(20, 0)"><text data-testid="starsCount" class="gray">33</text></g></g><g transform="translate(107.59999923706056, 0)"><g transform="translate(0, 0)">
<svg class="icon" y="-12" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"/>
</svg>
</g><g transform="translate(20, 0)"><text data-testid="forksCount" class="gray">11</text></g></g>
</g>
</g>
</svg>",
"graphqlRequest": "{"query":"\\nquery gistInfo($gistName: String!) {\\n viewer {\\n gist(name: $gistName) {\\n description\\n owner {\\n login\\n }\\n stargazerCount\\n forks {\\n totalCount\\n }\\n files {\\n name\\n language {\\n name\\n }\\n size\\n }\\n }\\n }\\n}\\n","variables":{"gistName":"happy-gist-id"}}",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/gist contract > should match the public missing-id response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">Missing params "id" make sure you pass the parameters in URL</tspan>
<tspan x="25" dy="18" class="gray">/api/gist?id=GIST_ID</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=600, s-maxage=600, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
@@ -0,0 +1,412 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Test /api/pin contract > should match the private missing-username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">This username is not whitelisted</tspan>
<tspan x="25" dy="18" class="gray">Please deploy your own instance</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/pin contract > should match the private non-whitelisted username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">This username is not whitelisted</tspan>
<tspan x="25" dy="18" class="gray">Please deploy your own instance</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/pin contract > should match the public blacklisted-username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">This username is blacklisted</tspan>
<tspan x="25" dy="18" class="gray">Please deploy your own instance</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/pin contract > should match the public happy-path response snapshot 1`] = `
{
"content": "<svg width="400" height="150" viewBox="0 0 400 150" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="descId">
<title id="titleId"/>
<desc id="descId"/>
<style>
.header {
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
fill: #2f80ed;
animation: fadeInAnimation 0.8s ease-in-out forwards;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.header { font-size: 15.5px; }
}
.description {
font: 400 13px 'Segoe UI', Ubuntu, Sans-Serif;fill: #434d58;
}
.gray { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.badge { font: 600 11px 'Segoe UI', Ubuntu, Sans-Serif; }
.badge rect { opacity: 0.2 }
.stat { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.stagger {
opacity: 0;
animation: fadeInAnimation 0.3s ease-in-out forwards;
}
.not_bold { font-weight: 400 }
.bold { font-weight: 700 }
.icon {
fill: #586069;
display: block;
}
/* Animations */
@keyframes scaleInAnimation {
from {
transform: translate(-5px, 5px) scale(0);
}
to {
transform: translate(-5px, 5px) scale(1);
}
}
@keyframes fadeInAnimation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
* { animation-duration: 0s !important; animation-delay: 0s !important; }
</style>
<rect data-testid="card-bg" x="0.5" y="0.5" rx="4.5" height="99%" stroke="#e4e2e2" width="399" fill="#fffefe" stroke-opacity="1"/>
<g data-testid="card-title" transform="translate(25, 35)">
<g transform="translate(0, 0)">
<svg class="icon" x="0" y="-13" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"/>
</svg>
</g><g transform="translate(25, 0)">
<text x="0" y="0" class="header" data-testid="header">convoychat</text>
</g>
</g>
<g data-testid="main-card-body" transform="translate(0, 55)">
<text class="description" x="25" y="-5">
<tspan dy="1.2em" x="25">Help us take over the world with a deeply customizable</tspan><tspan dy="1.2em" x="25">React, TypeScript and GraphQL chat app that has enough</tspan><tspan dy="1.2em" x="25">text to wrap across multiple lines in the repository card.</tspan>
</text>
<g transform="translate(30, 75)">
<g transform="translate(0, 0)">
<g data-testid="primary-lang">
<circle data-testid="lang-color" cx="0" cy="-5" r="6" fill="#2b7489"/>
<text data-testid="lang-name" class="gray" x="15">TypeScript</text>
</g>
</g><g transform="translate(80.53999967575072, 0)"><g transform="translate(0, 0)">
<svg class="icon" y="-12" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"/>
</svg>
</g><g transform="translate(20, 0)"><text data-testid="stargazers" class="gray">38k</text></g></g><g transform="translate(140.4199994087219, 0)"><g transform="translate(0, 0)">
<svg class="icon" y="-12" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"/>
</svg>
</g><g transform="translate(20, 0)"><text data-testid="forkcount" class="gray">100</text></g></g>
</g>
<svg x="0" y="0"><g transform="translate(-3, 98)">
</g></svg>
</g>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/pin contract > should match the public many-params response snapshot 1`] = `
{
"content": "<svg width="560" height="233" viewBox="0 0 560 233" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="descId">
<title id="titleId"/>
<desc id="descId"/>
<style>
.header {
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
fill: #123456;
animation: fadeInAnimation 0.8s ease-in-out forwards;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.header { font-size: 15.5px; }
}
.description {
font: 400 13px 'Segoe UI', Ubuntu, Sans-Serif;fill: #abcdef;
}
.gray { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #abcdef }
.badge { font: 600 11px 'Segoe UI', Ubuntu, Sans-Serif; }
.badge rect { opacity: 0.2 }
.stat { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #abcdef }
.stagger {
opacity: 0;
animation: fadeInAnimation 0.3s ease-in-out forwards;
}
.not_bold { font-weight: 400 }
.bold { font-weight: 700 }
.icon {
fill: #ff00aa;
display: block;
}
/* Animations */
@keyframes scaleInAnimation {
from {
transform: translate(-5px, 5px) scale(0);
}
to {
transform: translate(-5px, 5px) scale(1);
}
}
@keyframes fadeInAnimation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
* { animation-duration: 0s !important; animation-delay: 0s !important; }
</style>
<rect data-testid="card-bg" x="0.5" y="0.5" rx="12" height="99%" stroke="#fedcba" width="559" fill="#0f172a" stroke-opacity="1"/>
<g data-testid="card-title" transform="translate(25, 35)">
<g transform="translate(0, 0)">
<svg class="icon" x="0" y="-13" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"/>
</svg>
</g><g transform="translate(25, 0)">
<text x="0" y="0" class="header" data-testid="header">anuraghazra/convoychat</text>
</g>
</g>
<g data-testid="main-card-body" transform="translate(0, 55)">
<text class="description" x="25" y="-5">
<tspan dy="1.2em" x="25">Help us take over the world with a deeply customizable React, TypeScript and GraphQL...</tspan>
</text>
<g transform="translate(30, 45)">
<g transform="translate(0, 0)">
<g data-testid="primary-lang">
<circle data-testid="lang-color" cx="0" cy="-5" r="6" fill="#2b7489"/>
<text data-testid="lang-name" class="gray" x="15">TypeScript</text>
</g>
</g><g transform="translate(80.53999967575072, 0)"><g transform="translate(0, 0)">
<svg class="icon" y="-12" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"/>
</svg>
</g><g transform="translate(20, 0)"><text data-testid="stargazers" class="gray">38k</text></g></g><g transform="translate(140.4199994087219, 0)"><g transform="translate(0, 0)">
<svg class="icon" y="-12" viewBox="0 0 16 16" version="1.1" width="16" height="16">
<path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"/>
</svg>
</g><g transform="translate(20, 0)"><text data-testid="forkcount" class="gray">100</text></g></g>
</g>
<svg x="0" y="0"><g transform="translate(-3, 68)">
<g transform="translate(0, 0)"><g transform="translate(0, 0)">
<g class="stagger" style="animation-delay: 450ms" transform="translate(25, 0)"><a href="https://github.com/search?q=repo%3Aanuraghazra%2Fconvoychat%20author%3Aanuraghazra&amp;type=pullrequests">
<text class="stat bold" y="12.5">my created PRs:</text>
<text class="stat bold" x="139.01" y="12.5" data-testid="prs_authored">1234</text></a>
</g>
</g><g transform="translate(210, 0)">
<g class="stagger" style="animation-delay: 600ms" transform="translate(25, 0)"><a href="https://github.com/search?q=repo%3Aanuraghazra%2Fconvoychat%20commenter%3Aanuraghazra+-author%3Aanuraghazra&amp;type=pullrequests">
<text class="stat bold" y="12.5">my commented PRs:</text>
<text class="stat bold" x="139.01" y="12.5" data-testid="prs_commented">2345</text></a>
</g>
</g></g><g transform="translate(0, 30)"><g transform="translate(0, 0)">
<g class="stagger" style="animation-delay: 750ms" transform="translate(25, 0)"><a href="https://github.com/search?q=repo%3Aanuraghazra%2Fconvoychat%20reviewed-by%3Aanuraghazra+-author%3Aanuraghazra&amp;type=pullrequests">
<text class="stat bold" y="12.5">my reviewed PRs:</text>
<text class="stat bold" x="139.01" y="12.5" data-testid="prs_reviewed">3456</text></a>
</g>
</g><g transform="translate(210, 0)">
<g class="stagger" style="animation-delay: 900ms" transform="translate(25, 0)"><a href="https://github.com/search?q=repo%3Aanuraghazra%2Fconvoychat%20author%3Aanuraghazra&amp;type=issues">
<text class="stat bold" y="12.5">my created issues:</text>
<text class="stat bold" x="139.01" y="12.5" data-testid="issues_authored">4567</text></a>
</g>
</g></g><g transform="translate(0, 60)"><g transform="translate(0, 0)">
<g class="stagger" style="animation-delay: 1050ms" transform="translate(25, 0)"><a href="https://github.com/search?q=repo%3Aanuraghazra%2Fconvoychat%20commenter%3Aanuraghazra+-author%3Aanuraghazra&amp;type=issues">
<text class="stat bold" y="12.5">my commented issues:</text>
<text class="stat bold" x="139.01" y="12.5" data-testid="issues_commented">5678</text></a>
</g>
</g></g>
</g></svg>
</g>
</svg>",
"graphqlRequest": "{"query":"\\n fragment RepoInfo on Repository {\\n name\\n nameWithOwner\\n isPrivate\\n isArchived\\n isTemplate\\n stargazers {\\n totalCount\\n }\\n description\\n primaryLanguage {\\n color\\n id\\n name\\n }\\n forkCount\\n }\\n query getRepo($login: String!, $repo: String!) {\\n user(login: $login) {\\n repository(name: $repo) {\\n ...RepoInfo\\n }\\n }\\n organization(login: $login) {\\n repository(name: $repo) {\\n ...RepoInfo\\n }\\n }\\n }\\n ","variables":{"login":"anuraghazra","repo":"convoychat"}}",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/pin contract > should match the public missing-params response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">Missing params "username", "repo" make sure you pass the parameters in URL</tspan>
<tspan x="25" dy="18" class="gray">/api/pin?username=USERNAME&amp;repo=REPO_NAME</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=600, s-maxage=600, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/pin contract > should render error card in same theme as requested card 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#0a0f0b" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #abd200 }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #68b587 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#0a0f0b" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">Missing params "username", "repo" make sure you pass the parameters in URL</tspan>
<tspan x="25" dy="18" class="gray">/api/pin?username=USERNAME&amp;repo=REPO_NAME</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=600, s-maxage=600, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
@@ -0,0 +1,460 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Test /api/top-langs contract > should match the private missing-username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">This username is not whitelisted</tspan>
<tspan x="25" dy="18" class="gray">Please deploy your own instance</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/top-langs contract > should match the private non-whitelisted username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">This username is not whitelisted</tspan>
<tspan x="25" dy="18" class="gray">Please deploy your own instance</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/top-langs contract > should match the public blacklisted-username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">This username is blacklisted</tspan>
<tspan x="25" dy="18" class="gray">Please deploy your own instance</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/top-langs contract > should match the public happy-path response snapshot 1`] = `
{
"content": "<svg width="300" height="285" viewBox="0 0 300 285" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="descId">
<title id="titleId"/>
<desc id="descId"/>
<style>
.header {
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
fill: #2f80ed;
animation: fadeInAnimation 0.8s ease-in-out forwards;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.header { font-size: 15.5px; }
}
@keyframes slideInAnimation {
from {
width: 0;
}
to {
width: calc(100%-100px);
}
}
@keyframes growWidthAnimation {
from {
width: 0;
}
to {
width: 100%;
}
}
.stat {
font: 600 14px 'Segoe UI', Ubuntu, "Helvetica Neue", Sans-Serif; fill: #434d58;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.stat { font-size:12px; }
}
.bold { font-weight: 700 }
.lang-name {
font: 400 11px "Segoe UI", Ubuntu, Sans-Serif;
fill: #434d58;
}
.stagger {
opacity: 0;
animation: fadeInAnimation 0.3s ease-in-out forwards;
}
#rect-mask rect{
animation: slideInAnimation 1s ease-in-out forwards;
}
.lang-progress{
animation: growWidthAnimation 0.6s ease-in-out forwards;
}
/* Animations */
@keyframes scaleInAnimation {
from {
transform: translate(-5px, 5px) scale(0);
}
to {
transform: translate(-5px, 5px) scale(1);
}
}
@keyframes fadeInAnimation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
</style>
<rect data-testid="card-bg" x="0.5" y="0.5" rx="4.5" height="99%" stroke="#e4e2e2" width="299" fill="#fffefe" stroke-opacity="1"/>
<g data-testid="card-title" transform="translate(25, 35)">
<g transform="translate(0, 0)">
<text x="0" y="0" class="header" data-testid="header">Most Used Languages</text>
</g>
</g>
<g data-testid="main-card-body" transform="translate(0, 55)">
<svg data-testid="lang-items" x="25">
<g transform="translate(0, 0)">
<g class="stagger" style="animation-delay: 450ms">
<text data-testid="lang-name" x="2" y="15" class="lang-name">Rust</text>
<text x="215" y="34" class="lang-name">70.92%</text>
<svg width="205" x="0" y="25">
<rect data-testid="progress-background" rx="5" ry="5" x="0" y="0" width="205" height="8" fill="#ddd"/>
<svg data-testid="lang-progress" width="70.92198581560284%">
<rect height="8" fill="#dea584" rx="5" ry="5" x="0" y="0" class="lang-progress" style="animation-delay: 750ms;"/>
</svg>
</svg>
</g>
</g><g transform="translate(0, 40)">
<g class="stagger" style="animation-delay: 600ms">
<text data-testid="lang-name" x="2" y="15" class="lang-name">HTML</text>
<text x="215" y="34" class="lang-name">12.77%</text>
<svg width="205" x="0" y="25">
<rect data-testid="progress-background" rx="5" ry="5" x="0" y="0" width="205" height="8" fill="#ddd"/>
<svg data-testid="lang-progress" width="12.76595744680851%">
<rect height="8" fill="#0f0" rx="5" ry="5" x="0" y="0" class="lang-progress" style="animation-delay: 900ms;"/>
</svg>
</svg>
</g>
</g><g transform="translate(0, 80)">
<g class="stagger" style="animation-delay: 750ms">
<text data-testid="lang-name" x="2" y="15" class="lang-name">JavaScript</text>
<text x="215" y="34" class="lang-name">8.51%</text>
<svg width="205" x="0" y="25">
<rect data-testid="progress-background" rx="5" ry="5" x="0" y="0" width="205" height="8" fill="#ddd"/>
<svg data-testid="lang-progress" width="8.51063829787234%">
<rect height="8" fill="#0ff" rx="5" ry="5" x="0" y="0" class="lang-progress" style="animation-delay: 1050ms;"/>
</svg>
</svg>
</g>
</g><g transform="translate(0, 120)">
<g class="stagger" style="animation-delay: 900ms">
<text data-testid="lang-name" x="2" y="15" class="lang-name">TypeScript</text>
<text x="215" y="34" class="lang-name">6.38%</text>
<svg width="205" x="0" y="25">
<rect data-testid="progress-background" rx="5" ry="5" x="0" y="0" width="205" height="8" fill="#ddd"/>
<svg data-testid="lang-progress" width="6.382978723404255%">
<rect height="8" fill="#3178c6" rx="5" ry="5" x="0" y="0" class="lang-progress" style="animation-delay: 1200ms;"/>
</svg>
</svg>
</g>
</g><g transform="translate(0, 160)">
<g class="stagger" style="animation-delay: 1050ms">
<text data-testid="lang-name" x="2" y="15" class="lang-name">Java</text>
<text x="215" y="34" class="lang-name">1.42%</text>
<svg width="205" x="0" y="25">
<rect data-testid="progress-background" rx="5" ry="5" x="0" y="0" width="205" height="8" fill="#ddd"/>
<svg data-testid="lang-progress" width="2%">
<rect height="8" fill="#f00" rx="5" ry="5" x="0" y="0" class="lang-progress" style="animation-delay: 1350ms;"/>
</svg>
</svg>
</g>
</g>
</svg>
</g>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/top-langs contract > should match the public many-params response snapshot 1`] = `
{
"content": "<svg width="420" height="110" viewBox="0 0 420 110" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="descId">
<title id="titleId"/>
<desc id="descId"/>
<style>
.header {
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
fill: #123456;
animation: fadeInAnimation 0.8s ease-in-out forwards;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.header { font-size: 15.5px; }
}
@keyframes slideInAnimation {
from {
width: 0;
}
to {
width: calc(100%-100px);
}
}
@keyframes growWidthAnimation {
from {
width: 0;
}
to {
width: 100%;
}
}
.stat {
font: 600 14px 'Segoe UI', Ubuntu, "Helvetica Neue", Sans-Serif; fill: #abcdef;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.stat { font-size:12px; }
}
.bold { font-weight: 700 }
.lang-name {
font: 400 11px "Segoe UI", Ubuntu, Sans-Serif;
fill: #abcdef;
}
.stagger {
opacity: 0;
animation: fadeInAnimation 0.3s ease-in-out forwards;
}
#rect-mask rect{
animation: slideInAnimation 1s ease-in-out forwards;
}
.lang-progress{
animation: growWidthAnimation 0.6s ease-in-out forwards;
}
/* Animations */
@keyframes scaleInAnimation {
from {
transform: translate(-5px, 5px) scale(0);
}
to {
transform: translate(-5px, 5px) scale(1);
}
}
@keyframes fadeInAnimation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
* { animation-duration: 0s !important; animation-delay: 0s !important; }
</style>
<rect data-testid="card-bg" x="0.5" y="0.5" rx="4.5" height="99%" stroke="#e4e2e2" width="419" fill="#0f172a" stroke-opacity="0"/>
<g data-testid="main-card-body" transform="translate(0, 25)">
<svg data-testid="lang-items" x="25">
<mask id="rect-mask">
<rect x="0" y="0" width="370" height="8" fill="white" rx="5"/>
</mask>
<rect mask="url(#rect-mask)" data-testid="lang-progress" x="0" y="0" width="256.98" height="8" fill="#3178c6"/>
<rect mask="url(#rect-mask)" data-testid="lang-progress" x="256.98" y="0" width="60.57" height="8" fill="#f00"/>
<rect mask="url(#rect-mask)" data-testid="lang-progress" x="317.55" y="0" width="52.45" height="8" fill="#00f"/>
<g transform="translate(0, 25)">
<g transform="translate(0, 0)"><g transform="translate(0, 0)">
<g class="stagger" style="animation-delay: 450ms">
<circle cx="5" cy="6" r="5" fill="#3178c6"/>
<text data-testid="lang-name" x="15" y="10" class="lang-name">
TypeScript 19.0 B
</text>
</g>
</g><g transform="translate(0, 25)">
<g class="stagger" style="animation-delay: 600ms">
<circle cx="5" cy="6" r="5" fill="#f00"/>
<text data-testid="lang-name" x="15" y="10" class="lang-name">
Java 4.5 B
</text>
</g>
</g></g><g transform="translate(150, 0)"><g transform="translate(0, 0)">
<g class="stagger" style="animation-delay: 450ms">
<circle cx="5" cy="6" r="5" fill="#00f"/>
<text data-testid="lang-name" x="15" y="10" class="lang-name">
Python 3.9 B
</text>
</g>
</g></g>
</g>
</svg>
</g>
</svg>",
"graphqlRequest": "{"query":"\\n query userInfo($login: String!, $ownerAffiliations: [RepositoryAffiliation]) {\\n user(login: $login) {\\n # do not fetch forks\\n repositories(ownerAffiliations: $ownerAffiliations, isFork: false, first: 100) {\\n nodes {\\n name\\n languages(first: 10, orderBy: {field: SIZE, direction: DESC}) {\\n edges {\\n size\\n node {\\n color\\n name\\n }\\n }\\n }\\n }\\n }\\n }\\n }\\n ","variables":{"login":"anuraghazra","ownerAffiliations":["OWNER","COLLABORATOR"]}}",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/top-langs contract > should match the public missing-username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">Missing params "username" make sure you pass the parameters in URL</tspan>
<tspan x="25" dy="18" class="gray"/>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=600, s-maxage=600, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/top-langs contract > should render error card in same theme as requested card 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#0a0f0b" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #abd200 }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #68b587 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#0a0f0b" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">Missing params "username" make sure you pass the parameters in URL</tspan>
<tspan x="25" dy="18" class="gray"/>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=600, s-maxage=600, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
@@ -0,0 +1,546 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Test /api/wakatime contract > should match the private missing-username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">This username is not whitelisted</tspan>
<tspan x="25" dy="18" class="gray">Please deploy your own instance</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/wakatime contract > should match the private non-whitelisted username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">This username is not whitelisted</tspan>
<tspan x="25" dy="18" class="gray">Please deploy your own instance</tspan>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/wakatime contract > should match the public happy-path response snapshot 1`] = `
{
"content": "<svg width="495" height="195" viewBox="0 0 495 195" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="descId">
<title id="titleId"/>
<desc id="descId"/>
<style>
.header {
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
fill: #2f80ed;
animation: fadeInAnimation 0.8s ease-in-out forwards;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.header { font-size: 15.5px; }
}
.stat {
font: 600 14px 'Segoe UI', Ubuntu, "Helvetica Neue", Sans-Serif; fill: #434d58;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.stat { font-size:12px; }
}
.stagger {
opacity: 0;
animation: fadeInAnimation 0.3s ease-in-out forwards;
}
.not_bold { font-weight: 400 }
.bold { font-weight: 700 }
@keyframes slideInAnimation {
from {
width: 0;
}
to {
width: calc(100%-100px);
}
}
@keyframes growWidthAnimation {
from {
width: 0;
}
to {
width: 100%;
}
}
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
#rect-mask rect{
animation: slideInAnimation 1s ease-in-out forwards;
}
.lang-progress{
animation: growWidthAnimation 0.6s ease-in-out forwards;
}
/* Animations */
@keyframes scaleInAnimation {
from {
transform: translate(-5px, 5px) scale(0);
}
to {
transform: translate(-5px, 5px) scale(1);
}
}
@keyframes fadeInAnimation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
</style>
<rect data-testid="card-bg" x="0.5" y="0.5" rx="4.5" height="99%" stroke="#e4e2e2" width="494" fill="#fffefe" stroke-opacity="1"/>
<g data-testid="card-title" transform="translate(25, 35)">
<g transform="translate(0, 0)">
<text x="0" y="0" class="header" data-testid="header">WakaTime Stats (last 7 days)</text>
</g>
</g>
<g data-testid="main-card-body" transform="translate(0, 55)">
<svg x="0" y="0" width="100%">
<g transform="translate(0, 0)">
<g class="stagger" style="animation-delay: 450ms" transform="translate(25, 0)">
<text class="stat bold" y="12.5" data-testid="TypeScript">TypeScript:</text>
<text class="stat" x="350" y="12.5">12 hrs</text>
<svg width="220" x="110" y="4">
<rect data-testid="progress-background" rx="5" ry="5" x="0" y="0" width="220" height="8" fill="#434d58"/>
<svg data-testid="lang-progress" width="52%">
<rect height="8" fill="#2f80ed" rx="5" ry="5" x="0" y="0" class="lang-progress" style="animation-delay: 750ms;"/>
</svg>
</svg>
</g>
</g><g transform="translate(0, 25)">
<g class="stagger" style="animation-delay: 600ms" transform="translate(25, 0)">
<text class="stat bold" y="12.5" data-testid="JavaScript">JavaScript:</text>
<text class="stat" x="350" y="12.5">6 hrs 30 mins</text>
<svg width="220" x="110" y="4">
<rect data-testid="progress-background" rx="5" ry="5" x="0" y="0" width="220" height="8" fill="#434d58"/>
<svg data-testid="lang-progress" width="28%">
<rect height="8" fill="#2f80ed" rx="5" ry="5" x="0" y="0" class="lang-progress" style="animation-delay: 900ms;"/>
</svg>
</svg>
</g>
</g><g transform="translate(0, 50)">
<g class="stagger" style="animation-delay: 750ms" transform="translate(25, 0)">
<text class="stat bold" y="12.5" data-testid="Other">Other:</text>
<text class="stat" x="350" y="12.5">3 hrs</text>
<svg width="220" x="110" y="4">
<rect data-testid="progress-background" rx="5" ry="5" x="0" y="0" width="220" height="8" fill="#434d58"/>
<svg data-testid="lang-progress" width="13%">
<rect height="8" fill="#2f80ed" rx="5" ry="5" x="0" y="0" class="lang-progress" style="animation-delay: 1050ms;"/>
</svg>
</svg>
</g>
</g><g transform="translate(0, 75)">
<g class="stagger" style="animation-delay: 900ms" transform="translate(25, 0)">
<text class="stat bold" y="12.5" data-testid="YAML">YAML:</text>
<text class="stat" x="350" y="12.5">1 hr</text>
<svg width="220" x="110" y="4">
<rect data-testid="progress-background" rx="5" ry="5" x="0" y="0" width="220" height="8" fill="#434d58"/>
<svg data-testid="lang-progress" width="4%">
<rect height="8" fill="#2f80ed" rx="5" ry="5" x="0" y="0" class="lang-progress" style="animation-delay: 1200ms;"/>
</svg>
</svg>
</g>
</g><g transform="translate(0, 100)">
<g class="stagger" style="animation-delay: 1050ms" transform="translate(25, 0)">
<text class="stat bold" y="12.5" data-testid="JSON">JSON:</text>
<text class="stat" x="350" y="12.5">30 mins</text>
<svg width="220" x="110" y="4">
<rect data-testid="progress-background" rx="5" ry="5" x="0" y="0" width="220" height="8" fill="#434d58"/>
<svg data-testid="lang-progress" width="3%">
<rect height="8" fill="#2f80ed" rx="5" ry="5" x="0" y="0" class="lang-progress" style="animation-delay: 1350ms;"/>
</svg>
</svg>
</g>
</g>
</svg>
</g>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/wakatime contract > should match the public inaccessible-profile response snapshot 1`] = `
{
"content": "<svg width="495" height="150" viewBox="0 0 495 150" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="descId">
<title id="titleId"/>
<desc id="descId"/>
<style>
.header {
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
fill: #2f80ed;
animation: fadeInAnimation 0.8s ease-in-out forwards;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.header { font-size: 15.5px; }
}
.stat {
font: 600 14px 'Segoe UI', Ubuntu, "Helvetica Neue", Sans-Serif; fill: #434d58;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.stat { font-size:12px; }
}
.stagger {
opacity: 0;
animation: fadeInAnimation 0.3s ease-in-out forwards;
}
.not_bold { font-weight: 400 }
.bold { font-weight: 700 }
@keyframes slideInAnimation {
from {
width: 0;
}
to {
width: calc(100%-100px);
}
}
@keyframes growWidthAnimation {
from {
width: 0;
}
to {
width: 100%;
}
}
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
#rect-mask rect{
animation: slideInAnimation 1s ease-in-out forwards;
}
.lang-progress{
animation: growWidthAnimation 0.6s ease-in-out forwards;
}
/* Animations */
@keyframes scaleInAnimation {
from {
transform: translate(-5px, 5px) scale(0);
}
to {
transform: translate(-5px, 5px) scale(1);
}
}
@keyframes fadeInAnimation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
</style>
<rect data-testid="card-bg" x="0.5" y="0.5" rx="4.5" height="99%" stroke="#e4e2e2" width="494" fill="#fffefe" stroke-opacity="1"/>
<g data-testid="card-title" transform="translate(25, 35)">
<g transform="translate(0, 0)">
<text x="0" y="0" class="header" data-testid="header">WakaTime Stats</text>
</g>
</g>
<g data-testid="main-card-body" transform="translate(0, 55)">
<svg x="0" y="0" width="100%">
<g transform="translate(0, 0)">
<text x="25" y="11" class="stat bold" fill="#434d58">WakaTime user profile not public</text>
</g>
</svg>
</g>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/wakatime contract > should match the public many-params response snapshot 1`] = `
{
"content": "<svg width="620" height="140" viewBox="0 0 620 140" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="descId">
<title id="titleId"/>
<desc id="descId"/>
<style>
.header {
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
fill: #123456;
animation: fadeInAnimation 0.8s ease-in-out forwards;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.header { font-size: 15.5px; }
}
.stat {
font: 600 14px 'Segoe UI', Ubuntu, "Helvetica Neue", Sans-Serif; fill: #abcdef;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.stat { font-size:12px; }
}
.stagger {
opacity: 0;
animation: fadeInAnimation 0.3s ease-in-out forwards;
}
.not_bold { font-weight: 400 }
.bold { font-weight: 700 }
@keyframes slideInAnimation {
from {
width: 0;
}
to {
width: calc(100%-100px);
}
}
@keyframes growWidthAnimation {
from {
width: 0;
}
to {
width: 100%;
}
}
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: #abcdef }
#rect-mask rect{
animation: slideInAnimation 1s ease-in-out forwards;
}
.lang-progress{
animation: growWidthAnimation 0.6s ease-in-out forwards;
}
/* Animations */
@keyframes scaleInAnimation {
from {
transform: translate(-5px, 5px) scale(0);
}
to {
transform: translate(-5px, 5px) scale(1);
}
}
@keyframes fadeInAnimation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
* { animation-duration: 0s !important; animation-delay: 0s !important; }
</style>
<rect data-testid="card-bg" x="0.5" y="0.5" rx="12" height="99%" stroke="#fedcba" width="619" fill="#0f172a" stroke-opacity="1"/>
<g data-testid="card-title" transform="translate(25, 35)">
<g transform="translate(0, 0)">
<text x="0" y="0" class="header" data-testid="header">a custom title</text>
</g>
</g>
<g data-testid="main-card-body" transform="translate(0, 55)">
<svg x="0" y="0" width="100%">
<mask id="rect-mask">
<rect x="25" y="0" width="565" height="8" fill="white" rx="5"/>
</mask>
<rect mask="url(#rect-mask)" data-testid="lang-progress" x="0" y="0" width="365.09200000000004" height="8" fill="#3178c6"/>
<rect mask="url(#rect-mask)" data-testid="lang-progress" x="365.09200000000004" y="0" width="196.588" height="8" fill="#f1e05a"/>
<rect mask="url(#rect-mask)" data-testid="lang-progress" x="561.6800000000001" y="0" width="28.084" height="8" fill="#cb171e"/>
<g transform="translate(25, 25)">
<circle cx="5" cy="6" r="5" fill="#3178c6"/>
<text data-testid="lang-name" x="15" y="10" class="lang-name">
TypeScript - 61.88 %
</text>
</g>
<g transform="translate(292.5, 25)">
<circle cx="5" cy="6" r="5" fill="#f1e05a"/>
<text data-testid="lang-name" x="15" y="10" class="lang-name">
JavaScript - 33.32 %
</text>
</g>
<g transform="translate(25, 50)">
<circle cx="5" cy="6" r="5" fill="#cb171e"/>
<text data-testid="lang-name" x="15" y="10" class="lang-name">
YAML - 4.76 %
</text>
</g>
</svg>
</g>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=36000, s-maxage=36000, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/wakatime contract > should match the public missing-username response snapshot 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#fffefe" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #2f80ed }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#fffefe" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">Missing params "username" make sure you pass the parameters in URL</tspan>
<tspan x="25" dy="18" class="gray"/>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=600, s-maxage=600, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
exports[`Test /api/wakatime contract > should render error card in same theme as requested card 1`] = `
{
"content": "<svg width="576.5" height="120" viewBox="0 0 576.5 120" fill="#0a0f0b" xmlns="http://www.w3.org/2000/svg">
<style>
.text { font: 600 16px 'Segoe UI', Ubuntu, Sans-Serif; fill: #abd200 }
.small { font: 600 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #68b587 }
.gray { fill: #858585 }
</style>
<rect x="0.5" y="0.5" width="575.5" height="99%" rx="4.5" fill="#0a0f0b" stroke="#e4e2e2"/>
<text x="25" y="45" class="text">Something went wrong!</text>
<text data-testid="message" x="25" y="55" class="text small">
<tspan x="25" dy="18">Missing params "username" make sure you pass the parameters in URL</tspan>
<tspan x="25" dy="18" class="gray"/>
</text>
</svg>",
"headers": [
[
"Cache-Control",
"max-age=600, s-maxage=600, stale-while-revalidate=86400",
],
[
"Content-Type",
"image/svg+xml",
],
],
}
`;
@@ -0,0 +1,196 @@
// @ts-check
import { logger } from "@stats-organization/github-readme-stats-core";
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import {
afterAll,
afterEach,
beforeAll,
beforeEach,
describe,
expect,
it,
vi,
} from "vitest";
import { data_stats, normalizeSvg } from "../utils.js";
const mock = new MockAdapter(axios);
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
beforeEach(() => {
vi.stubEnv("CACHE_SECONDS", "");
vi.stubEnv("GIST_WHITELIST", "");
vi.stubEnv("POSTGRES_URL", "");
vi.stubEnv("WHITELIST", "");
mock.onPost("https://api.github.com/graphql").reply(200, data_stats);
});
beforeAll(() => {
vi.spyOn(logger, "log").mockImplementation(() => {});
vi.spyOn(logger, "error").mockImplementation(() => {});
});
afterEach(() => {
mock.reset();
vi.unstubAllEnvs();
// modules may cache environment variables, so we need to reset them
vi.resetModules();
});
afterAll(() => {
vi.restoreAllMocks();
});
describe("Test /api contract", () => {
it("should match the public happy-path response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api?username=anuraghazra",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public many-params response snapshot", async () => {
mock.onPost("https://api.github.com/graphql").reply(200, data_stats);
const { default: router } = await import("../../router.js");
const params = new URLSearchParams({
username: "anuraghazra",
show_icons: "true",
card_width: "540",
line_height: "32",
title_color: "123456",
ring_color: "654321",
icon_color: "ff00aa",
text_color: "abcdef",
text_bold: "false",
bg_color: "0f172a",
exclude_repo: "repo-exclude-me",
custom_title: "a custom title",
locale: "hi",
disable_animations: "true",
border_radius: "12",
number_format: "long",
number_precision: "1",
border_color: "fedcba",
rank_icon: "github",
commits_year: "2024",
hide: "issues",
role: "OWNER,COLLABORATOR",
show: "reviews,prs_merged,prs_merged_percentage,discussions_started,discussions_answered",
});
const req = {
headers: {},
url: `/api?${params.toString()}`,
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
graphqlRequest: mock.history.post[0].data,
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public missing-username response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should render error card in same theme as requested card", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api?theme=merko",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public blacklisted-username response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api?username=renovate-bot",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the private missing-username response snapshot", async () => {
vi.stubEnv("WHITELIST", "anuraghazra");
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
});
@@ -0,0 +1,143 @@
// @ts-check
import { logger } from "@stats-organization/github-readme-stats-core";
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import {
afterAll,
afterEach,
beforeAll,
beforeEach,
describe,
expect,
it,
vi,
} from "vitest";
import { happy_path_gist_data, normalizeSvg } from "../utils.js";
const mock = new MockAdapter(axios);
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
beforeEach(() => {
vi.stubEnv("CACHE_SECONDS", "");
vi.stubEnv("GIST_WHITELIST", "");
vi.stubEnv("POSTGRES_URL", "");
vi.stubEnv("WHITELIST", "");
mock
.onPost("https://api.github.com/graphql")
.reply(200, happy_path_gist_data);
});
beforeAll(() => {
vi.spyOn(logger, "log").mockImplementation(() => {});
vi.spyOn(logger, "error").mockImplementation(() => {});
});
afterEach(() => {
mock.reset();
vi.unstubAllEnvs();
// modules may cache environment variables, so we need to reset them
vi.resetModules();
});
afterAll(() => {
vi.restoreAllMocks();
});
describe("Test /api/gist contract", () => {
it("should match the public happy-path response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/gist?id=happy-gist-id",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public many-params response snapshot", async () => {
const { default: router } = await import("../../router.js");
const params = new URLSearchParams({
id: "happy-gist-id",
title_color: "123456",
icon_color: "ff00aa",
text_color: "abcdef",
bg_color: "0f172a",
border_radius: "12",
border_color: "fedcba",
show_owner: "true",
});
const req = {
headers: {},
url: `/api/gist?${params.toString()}`,
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
graphqlRequest: mock.history.post[0].data,
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public missing-id response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/gist",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the private missing-id response snapshot", async () => {
vi.stubEnv("GIST_WHITELIST", "allowed-gist-id");
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/gist",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
});
@@ -0,0 +1,235 @@
// @ts-check
import { logger } from "@stats-organization/github-readme-stats-core";
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import {
afterAll,
afterEach,
beforeAll,
beforeEach,
describe,
expect,
it,
vi,
} from "vitest";
import { data_user, normalizeSvg } from "../utils.js";
const mock = new MockAdapter(axios);
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
beforeEach(() => {
vi.stubEnv("CACHE_SECONDS", "");
vi.stubEnv("GIST_WHITELIST", "");
vi.stubEnv("POSTGRES_URL", "");
vi.stubEnv("WHITELIST", "");
mock.onPost("https://api.github.com/graphql").reply(200, data_user);
});
beforeAll(() => {
vi.spyOn(logger, "log").mockImplementation(() => {});
vi.spyOn(logger, "error").mockImplementation(() => {});
});
afterEach(() => {
mock.reset();
vi.unstubAllEnvs();
// modules may cache environment variables, so we need to reset them
vi.resetModules();
});
afterAll(() => {
vi.restoreAllMocks();
});
describe("Test /api/pin contract", () => {
it("should match the public happy-path response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/pin?username=anuraghazra&repo=convoychat",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public many-params response snapshot", async () => {
mock.onPost("https://api.github.com/graphql").reply(200, data_user);
mock
.onGet(
"https://api.github.com/search/issues?per_page=1&q=repo:anuraghazra/convoychat+author:anuraghazra+type:pr",
)
.reply(200, { total_count: 1234 });
mock
.onGet(
"https://api.github.com/search/issues?per_page=1&q=repo:anuraghazra/convoychat+commenter:anuraghazra+-author:anuraghazra+type:pr",
)
.reply(200, { total_count: 2345 });
mock
.onGet(
"https://api.github.com/search/issues?per_page=1&q=repo:anuraghazra/convoychat+reviewed-by:anuraghazra+-author:anuraghazra+type:pr",
)
.reply(200, { total_count: 3456 });
mock
.onGet(
"https://api.github.com/search/issues?per_page=1&q=repo:anuraghazra/convoychat+author:anuraghazra+type:issue",
)
.reply(200, { total_count: 4567 });
mock
.onGet(
"https://api.github.com/search/issues?per_page=1&q=repo:anuraghazra/convoychat+commenter:anuraghazra+-author:anuraghazra+type:issue",
)
.reply(200, { total_count: 5678 });
const { default: router } = await import("../../router.js");
const params = new URLSearchParams({
username: "anuraghazra",
repo: "convoychat",
title_color: "123456",
icon_color: "ff00aa",
text_color: "abcdef",
bg_color: "0f172a",
card_width: "560",
show_owner: "true",
show: "prs_authored,prs_commented,prs_reviewed,issues_authored,issues_commented",
show_icons: "false",
number_format: "long",
text_bold: "true",
line_height: "30",
border_radius: "12",
border_color: "fedcba",
description_lines_count: "1",
});
const req = {
headers: {},
url: `/api/pin?${params.toString()}`,
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
graphqlRequest: mock.history.post[0].data,
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public missing-params response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/pin",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should render error card in same theme as requested card", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/pin?theme=merko",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public blacklisted-username response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/pin?username=renovate-bot&repo=convoychat",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the private non-whitelisted username response snapshot", async () => {
vi.stubEnv("WHITELIST", "anuraghazra");
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/pin?username=martin-mfg",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the private missing-username response snapshot", async () => {
vi.stubEnv("WHITELIST", "anuraghazra");
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/pin",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
});
@@ -0,0 +1,210 @@
// @ts-check
import { logger } from "@stats-organization/github-readme-stats-core";
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import {
afterAll,
afterEach,
beforeAll,
beforeEach,
describe,
expect,
it,
vi,
} from "vitest";
import { data_langs, normalizeSvg } from "../utils.js";
const mock = new MockAdapter(axios);
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
beforeEach(() => {
vi.stubEnv("CACHE_SECONDS", "");
vi.stubEnv("GIST_WHITELIST", "");
vi.stubEnv("POSTGRES_URL", "");
vi.stubEnv("WHITELIST", "");
mock.onPost("https://api.github.com/graphql").reply(200, data_langs);
});
beforeAll(() => {
vi.spyOn(logger, "log").mockImplementation(() => {});
vi.spyOn(logger, "error").mockImplementation(() => {});
});
afterEach(() => {
mock.reset();
vi.unstubAllEnvs();
// modules may cache environment variables, so we need to reset them
vi.resetModules();
});
afterAll(() => {
vi.restoreAllMocks();
});
describe("Test /api/top-langs contract", () => {
it("should match the public happy-path response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/top-langs?username=anuraghazra",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public many-params response snapshot", async () => {
mock.onPost("https://api.github.com/graphql").reply(200, data_langs);
const { default: router } = await import("../../router.js");
const params = new URLSearchParams({
username: "anuraghazra",
hide: "javascript,HTML",
hide_title: "true",
hide_border: "true",
card_width: "420",
title_color: "123456",
text_color: "abcdef",
bg_color: "0f172a",
layout: "compact",
langs_count: "3",
exclude_repo: "repo-hidden",
size_weight: "0.5",
count_weight: "1",
role: "OWNER,COLLABORATOR",
disable_animations: "true",
stats_format: "bytes",
});
const req = {
headers: {},
url: `/api/top-langs?${params.toString()}`,
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
graphqlRequest: mock.history.post[0].data,
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public missing-username response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/top-langs",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should render error card in same theme as requested card", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/top-langs?theme=merko",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public blacklisted-username response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/top-langs?username=renovate-bot",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the private non-whitelisted username response snapshot", async () => {
vi.stubEnv("WHITELIST", "anuraghazra");
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/top-langs?username=martin-mfg",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the private missing-username response snapshot", async () => {
vi.stubEnv("WHITELIST", "anuraghazra");
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/top-langs",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
});
@@ -0,0 +1,231 @@
// @ts-check
import { logger } from "@stats-organization/github-readme-stats-core";
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import {
afterAll,
afterEach,
beforeAll,
beforeEach,
describe,
expect,
it,
vi,
} from "vitest";
import { normalizeSvg, wakaTimeData } from "../utils.js";
const mock = new MockAdapter(axios);
const wakaTimeProfileNotPublicData = {
data: {
viewer: {
gist: null,
},
},
};
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
beforeEach(() => {
vi.stubEnv("CACHE_SECONDS", "");
vi.stubEnv("GIST_WHITELIST", "");
vi.stubEnv("POSTGRES_URL", "");
vi.stubEnv("WHITELIST", "");
mock
.onGet(
"https://wakatime.com/api/v1/users/anuraghazra/stats?is_including_today=true",
)
.reply(200, wakaTimeData);
});
beforeAll(() => {
vi.spyOn(logger, "log").mockImplementation(() => {});
vi.spyOn(logger, "error").mockImplementation(() => {});
});
afterEach(() => {
mock.reset();
vi.unstubAllEnvs();
// modules may cache environment variables, so we need to reset them
vi.resetModules();
});
afterAll(() => {
vi.restoreAllMocks();
});
describe("Test /api/wakatime contract", () => {
it("should match the public happy-path response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/wakatime?username=anuraghazra",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public many-params response snapshot", async () => {
mock.reset(); // to verify api_domain param is working
mock
.onGet(
"https://wakatime.local/api/v1/users/anuraghazra/stats?is_including_today=true",
)
.reply(200, wakaTimeData);
const { default: router } = await import("../../router.js");
const params = new URLSearchParams({
username: "anuraghazra",
title_color: "123456",
text_color: "abcdef",
bg_color: "0f172a",
card_width: "620",
custom_title: "a custom title",
layout: "compact",
langs_count: "3",
hide: "other",
api_domain: "wakatime.local",
border_radius: "12",
border_color: "fedcba",
display_format: "percent",
disable_animations: "true",
});
const req = {
headers: {},
url: `/api/wakatime?${params.toString()}`,
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public missing-username response snapshot", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/wakatime",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should render error card in same theme as requested card", async () => {
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/wakatime?theme=merko",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the public inaccessible-profile response snapshot", async () => {
mock.reset();
mock
.onGet(
"https://wakatime.com/api/v1/users/anuraghazra/stats?is_including_today=true",
)
.reply(200, wakaTimeProfileNotPublicData);
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/wakatime?username=anuraghazra",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the private non-whitelisted username response snapshot", async () => {
vi.stubEnv("WHITELIST", "anuraghazra");
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/wakatime?username=martin-mfg",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
it("should match the private missing-username response snapshot", async () => {
vi.stubEnv("WHITELIST", "anuraghazra");
const { default: router } = await import("../../router.js");
const req = {
headers: {},
url: "/api/wakatime",
};
const res = createResponse();
await router(req, res);
expect(res.end).toHaveBeenCalledOnce();
expect({
headers: res.setHeader.mock.calls,
content: normalizeSvg(res.end.mock.calls[0][0]),
}).toMatchSnapshot();
});
});
@@ -2,9 +2,19 @@
* @file Tests for the status/up cloud function.
*/
import { afterEach, describe, expect, it, jest } from "@jest/globals";
import { logger } from "@stats-organization/github-readme-stats-core";
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import {
afterAll,
afterEach,
beforeAll,
describe,
expect,
it,
vi,
} from "vitest";
import up, { RATE_LIMIT_SECONDS } from "../api-renamed/status/up.js";
const mock = new MockAdapter(axios);
@@ -20,8 +30,8 @@ const faker = (query) => {
query: { ...query },
};
const res = {
setHeader: jest.fn(),
send: jest.fn(),
setHeader: vi.fn(),
send: vi.fn(),
};
return { req, res };
@@ -54,10 +64,19 @@ const shields_down = {
color: "red",
};
beforeAll(() => {
vi.spyOn(logger, "log").mockImplementation(() => {});
vi.spyOn(logger, "error").mockImplementation(() => {});
});
afterEach(() => {
mock.reset();
});
afterAll(() => {
vi.restoreAllMocks();
});
describe("Test /api/status/up", () => {
it("should return `true` if request was successful", async () => {
mock.onPost("https://api.github.com/graphql").replyOnce(200, successData);
+84
View File
@@ -0,0 +1,84 @@
// @ts-check
import { topLangs } from "@stats-organization/github-readme-stats-core";
import { beforeEach, describe, expect, it, vi } from "vitest";
import router from "../router.js";
import { CACHE_TTL, DURATIONS } from "../src/common/cache.js";
import { getUserAccessByName, storeRequest } from "../src/common/database.js";
vi.mock(import("@stats-organization/github-readme-stats-core"), async () => {
const { mockCore } = await import("./utils.js");
return mockCore();
});
vi.mock(import("../src/common/database.js"), async (importOriginal) => ({
...(await importOriginal()),
storeRequest: vi.fn(),
getUserAccessByName: vi.fn(),
}));
const topLangsMock = vi.mocked(topLangs);
const storeRequestMock = vi.mocked(storeRequest);
const getUserAccessByNameMock = vi.mocked(getUserAccessByName);
const createRequest = (search = "") => ({
headers: {},
url: `/api/top-langs?${search}`,
});
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
const defaultCacheHeader =
`max-age=${CACHE_TTL.TOP_LANGS_CARD.DEFAULT}, ` +
`s-maxage=${CACHE_TTL.TOP_LANGS_CARD.DEFAULT}, ` +
`stale-while-revalidate=${DURATIONS.ONE_DAY}`;
beforeEach(() => {
topLangsMock.mockReset();
storeRequestMock.mockReset().mockResolvedValue(undefined);
getUserAccessByNameMock.mockReset().mockResolvedValue(null);
// CACHE_SECONDS is not set here, this is just to safeguard against CACHE_SECONDS being set externally
delete process.env.CACHE_SECONDS;
});
describe("Test /api/top-langs backend routing", () => {
it("happy path should pass query params and user PAT, respond with top languages content and persist request", async () => {
getUserAccessByNameMock.mockResolvedValue({ token: "user-pat" });
topLangsMock.mockResolvedValue({
status: "success",
content: "mock-top-langs-svg",
});
const req = createRequest(
"username=anuraghazra&layout=compact&langs_count=5",
);
const res = createResponse();
await router(req, res);
expect(getUserAccessByNameMock).toHaveBeenCalledWith("anuraghazra");
expect(topLangsMock).toHaveBeenCalledWith(
{
username: "anuraghazra",
layout: "compact",
langs_count: "5",
},
"user-pat",
);
expect(req.query).toEqual({
username: "anuraghazra",
layout: "compact",
langs_count: "5",
});
expect(res.setHeader.mock.calls).toEqual([
["Cache-Control", defaultCacheHeader],
["Content-Type", "image/svg+xml"],
]);
expect(res.end).toHaveBeenCalledExactlyOnceWith("mock-top-langs-svg");
expect(storeRequestMock).toHaveBeenCalledExactlyOnceWith(req);
});
});
+299
View File
@@ -0,0 +1,299 @@
// @ts-check
import { vi } from "vitest";
export const data_stats = {
data: {
user: {
name: "Anurag Hazra",
login: "anuraghazra",
repositoriesContributedTo: { totalCount: 51 },
commits: {
totalCommitContributions: 200,
},
reviews: {
totalPullRequestReviewContributions: 1234,
},
pullRequests: { totalCount: 4000 },
mergedPullRequests: { totalCount: 3200 },
openIssues: { totalCount: 300 },
closedIssues: { totalCount: 40 },
followers: { totalCount: 150 },
repositoryDiscussions: { totalCount: 222 },
repositoryDiscussionComments: {
totalCount: 111,
},
repositories: {
totalCount: 3,
nodes: [
{ name: "repo-keep-1", stargazers: { totalCount: 1500 } },
{ name: "repo-exclude-me", stargazers: { totalCount: 9999 } },
{ name: "repo-keep-2", stargazers: { totalCount: 2600 } },
],
pageInfo: {
hasNextPage: false,
endCursor: "cursor",
},
},
},
},
};
export const happy_path_gist_data = {
data: {
viewer: {
gist: {
description:
"List of countries and territories in English and Spanish: name, continent, capital, dial code, country codes, TLD, and area in sq km. Lista de países y territorios en Inglés y Español: nombre, continente, capital, código de teléfono, códigos de país, dominio y área en km cuadrados. Updated 2023",
owner: {
login: "Yizack",
},
stargazerCount: 33,
forks: {
totalCount: 11,
},
files: [
{
name: "countries.json",
language: {
name: "JSON",
},
size: 85858,
},
],
},
},
},
};
export const data_user = {
data: {
user: {
repository: {
username: "anuraghazra",
name: "convoychat",
nameWithOwner: "anuraghazra/convoychat",
stargazers: {
totalCount: 38000,
},
description:
"Help us take over the world with a deeply customizable React, TypeScript and GraphQL chat app that has enough text to wrap across multiple lines in the repository card.",
primaryLanguage: {
color: "#2b7489",
id: "MDg6TGFuZ3VhZ2UyODc=",
name: "TypeScript",
},
forkCount: 100,
isTemplate: false,
isArchived: false,
},
},
organization: null,
},
};
export const data_langs = {
data: {
user: {
repositories: {
nodes: [
{
name: "repo-html",
languages: {
edges: [{ size: 180, node: { color: "#0f0", name: "HTML" } }],
},
},
{
name: "repo-javascript",
languages: {
edges: [
{ size: 120, node: { color: "#0ff", name: "JavaScript" } },
],
},
},
{
name: "repo-ts-1",
languages: {
edges: [
{ size: 45, node: { color: "#3178c6", name: "TypeScript" } },
],
},
},
{
name: "repo-ts-2",
languages: {
edges: [
{ size: 45, node: { color: "#3178c6", name: "TypeScript" } },
],
},
},
{
name: "repo-other-langs",
languages: {
edges: [
{ size: 20, node: { color: "#f00", name: "Java" } },
{ size: 10, node: { color: "#0f0", name: "Cobol" } },
{ size: 15, node: { color: "#00f", name: "Python" } },
],
},
},
{
name: "repo-hidden",
languages: {
edges: [{ size: 1000, node: { color: "#dea584", name: "Rust" } }],
},
},
],
},
},
},
};
export const wakaTimeData = {
data: {
categories: [
{
digital: "22:40",
hours: 22,
minutes: 40,
name: "Coding",
percent: 100,
text: "22 hrs 40 mins",
total_seconds: 81643.570077,
},
],
daily_average: 16095,
daily_average_including_other_language: 16329,
days_including_holidays: 7,
days_minus_holidays: 5,
editors: [
{
digital: "22:40",
hours: 22,
minutes: 40,
name: "VS Code",
percent: 100,
text: "22 hrs 40 mins",
total_seconds: 81643.570077,
},
],
holidays: 2,
human_readable_daily_average: "4 hrs 28 mins",
human_readable_daily_average_including_other_language: "4 hrs 32 mins",
human_readable_total: "22 hrs 21 mins",
human_readable_total_including_other_language: "22 hrs 40 mins",
id: "random hash",
is_already_updating: false,
is_coding_activity_visible: true,
is_including_today: false,
is_other_usage_visible: true,
is_stuck: false,
is_up_to_date: true,
languages: [
{
digital: "12:00",
hours: 12,
minutes: 0,
name: "TypeScript",
percent: 52,
text: "12 hrs",
total_seconds: 43200,
},
{
digital: "6:30",
hours: 6,
minutes: 30,
name: "JavaScript",
percent: 28,
text: "6 hrs 30 mins",
total_seconds: 23400,
},
{
digital: "3:00",
hours: 3,
minutes: 0,
name: "Other",
percent: 13,
text: "3 hrs",
total_seconds: 10800,
},
{
digital: "1:00",
hours: 1,
minutes: 0,
name: "YAML",
percent: 4,
text: "1 hr",
total_seconds: 3600,
},
{
digital: "0:30",
hours: 0,
minutes: 30,
name: "JSON",
percent: 3,
text: "30 mins",
total_seconds: 1800,
},
],
operating_systems: [
{
digital: "22:40",
hours: 22,
minutes: 40,
name: "Mac",
percent: 100,
text: "22 hrs 40 mins",
total_seconds: 81643.570077,
},
],
percent_calculated: 100,
range: "last_7_days",
status: "ok",
timeout: 15,
total_seconds: 80473.135716,
total_seconds_including_other_language: 81643.570077,
user_id: "random hash",
username: "anuraghazra",
writes_only: false,
},
};
/** @typedef {import('@stats-organization/github-readme-stats-core')} CoreModule */
/**
* Creates a mock module for @stats-organization/github-readme-stats-core.
* @returns {CoreModule} Mocked core module.
*/
export function mockCore() {
return {
// @ts-expect-error no need to mock themes at the moment
themes: {},
request: vi.fn(),
fetchWakatimeStats: vi.fn(),
retryer: vi.fn(),
dateDiff: vi.fn(),
api: vi.fn(),
gist: vi.fn(),
pin: vi.fn(),
topLangs: vi.fn(),
wakatime: vi.fn(),
getConfig: vi.fn().mockReturnValue({}),
renderError: ({ message }) => `render-error:${message}`,
clampValue: (value, min, max) => Math.min(Math.max(value, min), max),
logger: {
log: vi.fn(),
error: vi.fn(),
},
};
}
/**
* Normalizes SVG code for stable test comparisons.
* @param {string} svg SVG code to normalize.
* @returns {string} Normalized SVG code.
*/
export function normalizeSvg(svg) {
const document = new DOMParser().parseFromString(svg, "image/svg+xml");
return new XMLSerializer().serializeToString(document);
}
+78
View File
@@ -0,0 +1,78 @@
// @ts-check
import { wakatime } from "@stats-organization/github-readme-stats-core";
import { beforeEach, describe, expect, it, vi } from "vitest";
import router from "../router.js";
import { CACHE_TTL, DURATIONS } from "../src/common/cache.js";
import { getUserAccessByName, storeRequest } from "../src/common/database.js";
vi.mock(import("@stats-organization/github-readme-stats-core"), async () => {
const { mockCore } = await import("./utils.js");
return mockCore();
});
vi.mock(import("../src/common/database.js"), async (importOriginal) => ({
...(await importOriginal()),
storeRequest: vi.fn(),
getUserAccessByName: vi.fn(),
}));
const wakatimeMock = vi.mocked(wakatime);
const storeRequestMock = vi.mocked(storeRequest);
const getUserAccessByNameMock = vi.mocked(getUserAccessByName);
const createRequest = (search = "") => ({
headers: {},
url: `/api/wakatime?${search}`,
});
const createResponse = () => ({
end: vi.fn(),
setHeader: vi.fn(),
});
const defaultCacheHeader =
`max-age=${CACHE_TTL.WAKATIME_CARD.DEFAULT}, ` +
`s-maxage=${CACHE_TTL.WAKATIME_CARD.DEFAULT}, ` +
`stale-while-revalidate=${DURATIONS.ONE_DAY}`;
beforeEach(() => {
wakatimeMock.mockReset();
storeRequestMock.mockReset().mockResolvedValue(undefined);
getUserAccessByNameMock.mockReset().mockResolvedValue(null);
// CACHE_SECONDS is not set here, this is just to safeguard against CACHE_SECONDS being set externally
delete process.env.CACHE_SECONDS;
});
describe("Test /api/wakatime backend routing", () => {
it("happy path should pass query params, respond with wakatime content and persist request", async () => {
wakatimeMock.mockResolvedValue({
status: "success",
content: "mock-wakatime-svg",
});
const req = createRequest("username=anuraghazra&theme=dark&layout=compact");
const res = createResponse();
await router(req, res);
expect(wakatimeMock).toHaveBeenCalledWith({
username: "anuraghazra",
theme: "dark",
layout: "compact",
});
expect(getUserAccessByNameMock).not.toHaveBeenCalled();
expect(req.query).toEqual({
username: "anuraghazra",
theme: "dark",
layout: "compact",
});
expect(res.setHeader.mock.calls).toEqual([
["Cache-Control", defaultCacheHeader],
["Content-Type", "image/svg+xml"],
]);
expect(res.end).toHaveBeenCalledExactlyOnceWith("mock-wakatime-svg");
expect(storeRequestMock).toHaveBeenCalledExactlyOnceWith(req);
});
});
+14
View File
@@ -0,0 +1,14 @@
{
"extends": ["../../tsconfig.base.json"],
"include": [
"src",
"vitest.config.ts",
"vitest.config.bench.ts",
"vitest.config.e2e.ts"
],
"compilerOptions": {
"composite": true,
"module": "nodenext",
"moduleResolution": "nodenext"
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"extends": ["./tsconfig.json"],
"compilerOptions": {
"noEmit": true,
"customConditions": []
}
}
+10
View File
@@ -0,0 +1,10 @@
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"buildCommand": "cd ../../ && git clean ./apps -fx && pnpm run build:packages && pnpm --filter ./apps/backend/ --legacy --prod deploy ./apps/deployment/ && mv ./apps/deployment/node_modules/ ./apps/backend/node_modules/ && ./vercel-preparation.sh",
"redirects": [
{
"source": "/",
"destination": "https://github.com/stats-organization/github-stats-extended"
}
]
}
+12
View File
@@ -0,0 +1,12 @@
import { defineConfig } from "vitest/config";
export default defineConfig({
resolve: {
conditions: ["@stats/source"],
},
test: {
dir: "./tests/bench",
environment: "jsdom",
setupFiles: ["./tests/_setup.js"],
},
});
+11
View File
@@ -0,0 +1,11 @@
import { defineConfig } from "vitest/config";
export default defineConfig({
resolve: {
conditions: ["@stats/source"],
},
test: {
environment: "node",
dir: "tests/e2e",
},
});
+15
View File
@@ -0,0 +1,15 @@
import { defineProject } from "vitest/config";
export default defineProject({
resolve: {
conditions: ["@stats/source"],
},
test: {
environment: "jsdom",
include: [
"./tests/*.test.{ts,js}",
"./tests/public-instance/*.test.{ts,js}",
],
setupFiles: ["./tests/_setup.js"],
},
});
+71
View File
@@ -0,0 +1,71 @@
import { expect, test } from "@playwright/test";
test("load initial page correctly", async ({ page }) => {
await page.goto("");
// Expect a title "to contain" a substring.
await expect(page).toHaveTitle(/GitHub Stats Extended/);
// Page title / header branding
await expect(page.getByText("GitHub Stats Extended")).toBeVisible();
// Logo exists
await expect(page.locator('img[alt="logo"]')).toBeVisible();
// Star on GitHub button
const starButton = page.getByRole("button", { name: /star on/i });
await expect(starButton).toBeVisible();
const githubLink = page.locator(
'a[href*="github.com/stats-organization/github-stats-extended"]',
);
await expect(githubLink).toHaveAttribute("target", "_blank");
// Login buttons
const publicAccessBtn = page.getByRole("button", {
name: /github public access/i,
});
await expect(publicAccessBtn).toBeVisible();
await expect(publicAccessBtn).toBeEnabled();
const privateAccessBtn = page.getByRole("button", {
name: /github private access/i,
});
await expect(privateAccessBtn).toBeVisible();
await expect(privateAccessBtn).toBeEnabled();
const guestBtn = page.getByRole("button", { name: /continue as guest/i });
await expect(guestBtn).toBeVisible();
await expect(guestBtn).toBeEnabled();
});
test("navigates between steps", async ({ page }) => {
await page.goto("");
// We are at stage 1
await expect(page.getByRole("heading", { level: 1 })).toContainText("Login");
// Go to stage 2
await page.getByRole("button", { name: "Select card" }).click();
await expect(page.getByRole("heading", { level: 1 })).toContainText(
"Select a Card",
);
// Go to stage 3
await page.getByRole("button", { name: "Modify parameters" }).click();
await expect(page.getByRole("heading", { level: 1 })).toContainText(
"Modify Card Parameters",
);
// Go to stage 4
await page.getByRole("button", { name: "Select theme" }).click();
await expect(page.getByRole("heading", { level: 1 })).toContainText(
"Choose a Theme",
);
// Go to stage 5
await page.getByRole("button", { name: "Display card" }).click();
await expect(page.getByRole("heading", { level: 1 })).toContainText(
"Display your Card",
);
});
@@ -1,8 +1,8 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
@@ -13,33 +13,32 @@
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://github-stats-extended.vercel.app/frontend" />
<meta
property="og:url"
content="https://github-stats-extended.vercel.app/frontend"
/>
<meta property="og:title" content="GitHub Stats Extended" />
<meta
property="og:description"
content="Dynamically generate GitHub stats for your READMEs."
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
https://vite.dev/guide/assets#the-public-directory
-->
<link rel="apple-touch-icon" href="/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<link rel="manifest" href="/manifest.json" />
<title>GitHub Stats Extended</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script type="module" src="/src/index.tsx"></script>
</body>
</html>
+55
View File
@@ -0,0 +1,55 @@
{
"name": "@stats-organization/github-readme-stats-frontend",
"type": "module",
"license": "MIT",
"private": true,
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"test": "vitest",
"test:e2e": "playwright test",
"lint": "eslint",
"typecheck": "tsc -p tsconfig.typecheck.json"
},
"dependencies": {
"@reduxjs/toolkit": "^2.11.2",
"@tailwindcss/vite": "^4.2.2",
"axios": "^1",
"axios-cache-interceptor": "^1",
"daisyui": "^5.5.19",
"@stats-organization/github-readme-stats-backend": "workspace:^",
"@stats-organization/github-readme-stats-core": "workspace:^",
"react": "^19.2.5",
"react-dom": "^19.2.5",
"react-icons": "^5.6.0",
"react-loading-skeleton": "^3.3.1",
"react-redux": "^9.2.0",
"react-spinners": "^0.17.0",
"react-toastify": "^11.1.0",
"redux": "^5.0.1",
"save-svg-as-png": "^1.4.17",
"uuid": "^14.0.0"
},
"devDependencies": {
"@types/react": "19.2.14",
"@types/react-dom": "19.2.3",
"@vitejs/plugin-react": "6.0.1",
"clsx": "2.1.1",
"tailwindcss": "4.2.2",
"vite": "catalog:default",
"vitest": "catalog:default"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
+81
View File
@@ -0,0 +1,81 @@
import { defineConfig, devices } from "@playwright/test";
/**
* Read environment variables from file.
* https://github.com/motdotla/dotenv
*/
// import dotenv from 'dotenv';
// import path from 'path';
// dotenv.config({ path: path.resolve(__dirname, '.env') });
const baseURL = "http://localhost:5173/frontend/";
/**
* See https://playwright.dev/docs/test-configuration.
*/
export default defineConfig({
testDir: "./e2e",
/* Run tests in files in parallel */
fullyParallel: true,
/* Fail the build on CI if you accidentally left test.only in the source code. */
forbidOnly: !!process.env["CI"],
/* Retry on CI only */
retries: process.env["CI"] ? 2 : 0,
/* Opt out of parallel tests on CI. */
workers: 1,
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
reporter: "html",
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {
/* Base URL to use in actions like `await page.goto('')`. */
baseURL,
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: "on-first-retry",
},
/* Configure projects for major browsers */
projects: [
{
name: "chromium",
use: { ...devices["Desktop Chrome"] },
},
// {
// name: "firefox",
// use: { ...devices["Desktop Firefox"] },
// },
// {
// name: "webkit",
// use: { ...devices["Desktop Safari"] },
// },
/* Test against mobile viewports. */
// {
// name: 'Mobile Chrome',
// use: { ...devices['Pixel 5'] },
// },
// {
// name: 'Mobile Safari',
// use: { ...devices['iPhone 12'] },
// },
/* Test against branded browsers. */
// {
// name: 'Microsoft Edge',
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
// },
// {
// name: 'Google Chrome',
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
// },
],
/* Run your local dev server before starting the tests */
webServer: {
command: "pnpm run dev",
url: baseURL,
reuseExistingServer: !process.env["CI"],
},
});

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

@@ -1,11 +1,17 @@
import axios from 'axios';
import axios from "axios";
import { HOST } from '../constants';
import { HOST } from "../constants";
const authenticate = async (code, privateAccess, userKey) => {
const authenticate = async (
code: string,
privateAccess: boolean,
userKey: string,
): Promise<string> => {
try {
const fullUrl = `https://${HOST}/api/authenticate?code=${code}&private_access=${privateAccess}&user_key=${userKey}`;
const result = await axios.post(fullUrl);
const result = await axios.post<{ userId: string; needDowngrade: boolean }>(
fullUrl,
);
const { userId, needDowngrade } = result.data;
if (needDowngrade) {
console.info(
@@ -16,14 +22,21 @@ const authenticate = async (code, privateAccess, userKey) => {
return userId;
} catch (error) {
console.error(error);
return '';
return "";
}
};
const getUserMetadata = async (userKey) => {
interface UserMetaDataResponse {
token: string;
privateAccess: string;
}
const getUserMetadata = async (
userKey: string,
): Promise<null | UserMetaDataResponse> => {
try {
const fullUrl = `https://${HOST}/api/user-access?user_key=${userKey}`;
const result = await axios.get(fullUrl);
const result = await axios.get<UserMetaDataResponse>(fullUrl);
return result.data;
} catch (error) {
console.error(error);
@@ -31,14 +44,17 @@ const getUserMetadata = async (userKey) => {
}
};
const deleteAccount = async (userId, userKey) => {
const deleteAccount = async (
_userId: string,
userKey: string,
): Promise<unknown> => {
try {
const fullUrl = `https://${HOST}/api/delete-user?user_key=${userKey}`;
const result = await axios.get(fullUrl);
return result.data; // no decorator
} catch (error) {
console.error(error);
return '';
return "";
}
};

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Some files were not shown because too many files have changed in this diff Show More