Compare commits

...
319 Commits
Author SHA1 Message Date
martin-mfg 55b652f300 add documentation for new 'contributions' stats 2026-08-16 17:20:56 +02:00
martin-mfg c7630f2ae4 Merge branch 'master' into light-dark-themes 2026-08-14 23:31:52 +02:00
MartinandMarco Pasqualetti 480c26b717 add GitHub themes (#480)
This is only the code part of
https://github.com/stats-organization/github-stats-extended/pull/457.
Documentation from that PR will be merged later, as explained there.

---------

Co-authored-by: Marco Pasqualetti <24919330+marcalexiei@users.noreply.github.com>
2026-08-14 23:29:02 +02:00
martin-mfg 3090adee7f Merge remote-tracking branch 'origin/master' into light-dark-themes 2026-08-14 17:46:48 +02:00
Marco Pasqualettiandmartin-mfg c86492f9c2 feat(core): generate TypeScript types from the GraphQL queries (#475)
The queries moved to `src/graphql/queries/*.graphql` and their types are
generated from
GitHub's schema instead of hand-written.

- `scripts/generate-graphql-types.js` validates each query against
`@octokit/graphql-schema` and writes one file per query plus a shared
`common.ts`,
  so a wrong field fails generation and a wrong variable fails `tsc`.
- `pnpm check-graphql-types` runs in CI, so the generated types can't
drift.
- `httpGraphQLRequest` takes a generated document: the four
`*QueryResponse` interfaces are gone and `GRAPHQL_REPOS_FIELD` is a real
fragment.
Untyped `request` stays exported for the backend, with a TODO for
considering its removal.
- Fixed nullability the hand-written types got wrong
  - (a gist's `owner` and `files[].name`, `user`, `repositories.nodes`);
  - `Lang.color` is nullable again
- `parseOwnerAffiliations` returns the schema's `RepositoryAffiliation`.
- `graphql` stays on 16: `@octokit/graphql-schema` needs `^16`.

> [!WARNING]
> The four `apps/backend` contract snapshots were refreshed:
> the recorded request text changed, the rendered SVGs did not.

---------

Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>
2026-08-14 16:18:43 +02:00
Martin c177bd9ec5 top-langs: adapt test code to prod code (#476)
follow-up to
https://github.com/stats-organization/github-stats-extended/pull/473

Instead of adapting our prod code's signatures for our test code, I
think we should adapt our test code here.
2026-08-12 20:33:47 +02:00
Marco Pasqualetti 944857b2a5 feat(core): convert top languages card to TypeScript (#473)
Another step of #140.

- `src/cards/top-languages.js` + its test ➡️ `.ts`. 
- `fetchers/types.ts`: `Lang.color` made `string | null` to match
GitHub's nullable GraphQL `Language.color`.
The card already falls back to a default and a test pass `color: null`.
- Extracted the copy-pasted "resolve + validate language color" block
into `resolveLangColor`.
- Test uses the `screen` API, caches repeated `queryAll` results in
local variables, and types its language fixtures with `satisfies
TopLangData`.
2026-08-12 18:53:51 +02:00
Marco Pasqualetti a9cfee5809 feat(core): convert stats card to TypeScript (#466)
Another step of #140.

- `src/cards/stats.js` + its test ➡️ `.ts`.
- Moved `createTextNode` out of the stats card into `common/render.js`
(next to the other SVG-node builders).
  It was the one card export used by another card (repo).
- `I18n` gained a default type param (usable as a bare type),
and `Card`/`createTextNode` accept the possibly-undefined options cards
forward.
- Card tests now use the `screen` API instead of
`getByTestId(document.body, …)`.
See [recommended query
entrypoint](https://testing-library.com/docs/queries/about/#screen) and
cache repeated queries in local variables.
  Also applied on the already-migrated `gist`/`repo` tests.
2026-08-10 12:20:16 +02:00
Marco Pasqualetti c7b6e66dea refactor(frontend): replace the isRepoCard boolean with a card category (#464)
Two places independently hardcoded the same "is this a repo or gist
card?" check:

- `Home.tsx`: which theme variant to default to
- `Customize.tsx`: whether to offer "Show Owner?"

Both now derive it from one map in `models/CardType.ts`:

```ts
export const CardCategory = { REPO: "repo", USER: "user" } as const;

export const CATEGORY_BY_CARD_TYPE: Record<CardType, CardCategory> = { ... };
```

A new card type won't compile until it's categorised, instead of
silently falling into the non-repo branch like the boolean did.
It also leaves room for another category, if we ever need one that
changes the data a card requires.

Also:

- `ThemeStage` takes `category` instead of `isRepoCard`.
- `getDefaultTheme` / `onThemeChange` use core's `ThemeName` instead of
`string`.
2026-08-09 16:47:06 +02:00
martin-mfg 6a35f03faa frontend: handle default theme removal, remove doc link 2026-08-08 20:39:06 +02:00
Marco Pasqualetti 34d08882a7 fix: refinements and bugfixes for new themes (#462)
Found while reviewing #457.

1. Dark themes rendered a near-white border.
`dark_github` / `dark_github_repocard` had no `border_color` and fell
back to the default theme's `e4e2e2`.
Set GitHub's borders on all four new themes: `d1d9e0` light, `3d444d`
dark.

2. Excluding `default` / `default_repocard` broke the theme picker.
`Home.tsx` initializes to one of them and treats it as "emit no `theme=`
param", so stage 3 opened with nothing selected and the theme-less URL
became unreachable.

3. Paired themes were shown for the wrong card type.
The picker now takes `isRepoCard` and lists only the matching variant,
hiding duplicates while keeping each card type's `default` visible.

4. Theme README generator only knew the `default` pair, so the new
themes would land in the wrong tables.

5. 3 and 4 share a rule, kept duplicated on purpose: which themes to
advertise per card type is presentation, not rendering, so it stays out
of core's API.
   Both copies carry `Keep in sync` comments pointing at each other.

6. Dead docs anchor left by the `Responsive Card Theme` ➡️ `Light and
Dark Mode` rename.

7. Core gains one export: the `ThemeName` type, replacing the private
duplicate `ThemeNames` in `cards/types.ts` and the `keyof typeof themes`
casts in `color.ts` and the picker.
2026-08-08 20:32:42 +02:00
MartinandMarco Pasqualetti 4edf85bdc2 downgrade pnpm to version 10 (#459)
Upgrading pnpm to version 11 led to errors on Vercel on each request.
https://github.com/stats-organization/github-stats-extended/issues/458
shows an example stack trace. Vercel doesn't support pnpm 11 yet
according to [their docs](https://vercel.com/docs/package-managers). I
have tried understanding and fixing the actual issue, but had to give up
at some point. So for now let's downgrade to pnpm 10, wait for Vercel to
support pnpm 11, then upgrade again.

Additionally, #458 showed that we should direct users to use the
`release` branch when self-hosting. So this PR also updates the docs
accordingly.

> [!NOTE]
When this PR is approved I should create an issue for the pnpm 11
upgrade.

---------

Co-authored-by: Marco Pasqualetti <24919330+marcalexiei@users.noreply.github.com>
2026-08-08 09:13:52 +02:00
martin-mfg ad10495810 docs: revert unnecessary change 2026-08-07 12:22:46 +02:00
martin-mfg fbc030f475 add more documentation 2026-08-07 11:38:38 +02:00
martin-mfg 100090de31 use new themes and adaptive mode in docs, add missing light/dark sample section 2026-08-07 10:45:36 +02:00
martin-mfg ba04189700 pnpm format 2026-08-06 22:02:46 +02:00
Marco Pasqualetti 1abd91eace chore: upgrade to pnpm 11 (#450)
- Bumps `packageManager` to `pnpm@11.20.0` and migrates
`onlyBuiltDependencies` to the new `allowBuilds` map.
- Adds
  - `savePrefix: ""`
  - `strictPeerDependencies`
  - `engineStrict`

  to `pnpm-workspace.yaml`.
  Nothing fails today, so these only guard regressions.

- Regenerates the lockfile and dedupes.
  Collapses two duplicates:
  - `typescript-eslint` 8.64.0 → 8.65.0,
- `vite>lightningcss` override, guarded by a new `lint:deps` check so
the override can't silently drift.
  
- **axios stays on 1.18.1.** 1.19 adds a params generic that breaks 5
core tests typecheck
(https://github.com/stats-organization/github-stats-extended/pull/449).
   Worth fixing in its own PR then.
2026-08-06 21:53:49 +02:00
Marco Pasqualetti dd28696356 feat(core): convert repo card to TypeScript (#447)
Another step of #140

- `src/cards/repo.js` + its test ➡️ `.ts`
- Colocated each card's options type into its own file; 
`types.ts` keeps only the shared `CommonOptions` and the options of the
js cards.
All `*CardOptions` are now `interface CardNameOptions extends
CommonOptions` (were `type` intersections).
- `fetchers/types.ts`: made `RepoInfo.description` and `primaryLanguage`
(and its fields) nullable to match the GraphQL schema.
  The card already guards for these and the tests exercise them.
- `common/I18n.ts`: widened the constructor's `locale?: string` to
accept `undefined`, since cards forward possibly-undefined query
options.
2026-08-05 22:57:14 +02:00
martin-mfg ecce10198c document light/dark params, add ligh&dark themes 2026-08-05 22:22:18 +02:00
github-actions[bot]andmartin-mfg 5d3d3af4da Update languages colors (#446)
The
[generate-language-colors](https://github.com/stats-organization/github-stats-extended/actions/workflows/generate-language-colors.yml)
workflow detected changes in the [upstream languages JSON
file](https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml)
and regenerated the local language colors JSON file.

Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>
2026-08-05 16:01:23 +02:00
Martin 5156202340 fix update-langs, align naming (#440)
Like #433 for the update-langs workflow.
* rename the workflow, script, and pnpm command for consistency
* fix workflow which
[broke](https://github.com/stats-organization/github-stats-extended/actions/workflows/update-langs.yml)
after upgrading js-yaml a month ago
* reduced workflow permissions
2026-08-05 12:28:19 +02:00
Marco Pasqualetti 28bb41a488 feat(core): convert gist card to TypeScript (#443)
Another step of #140, continues #426. Starts `cards/`.

- `src/cards/types.d.ts` ➡️ `types.ts`. 
- `gist` card + test ➡️ `.ts`. Typed against `GistData` /
`Partial<GistCardOptions>`;
replaced the `// @ts-ignore` on the language-color lookup with a
`Record` cast.
- `Card.ts`: widened the constructor's `border_radius?: number` to `?:
number | undefined`:
cards forward possibly-undefined query options (same pattern as
`getCardColors`).
  Needed by every card.
2026-08-04 16:32:42 +02:00
MartinandMarco Pasqualetti 3ff8364844 docs: format md files with prettier - extended (#444)
Built on top of
https://github.com/stats-organization/github-stats-extended/pull/441 to
manually format two html blocks - see 2nd commit in this PR. I pushed
the suggested changes via a commit instead of using GitHub's "suggested
changes" feature so that we can preview the changes rendered by GitHub
[here](https://github.com/stats-organization/github-stats-extended/blob/prettier-md-2/docs/advanced_documentation.md).

closes #441 
(let's see if this works)

### Description from #441

- Followup to
https://github.com/stats-organization/github-stats-extended/pull/432#discussion_r3698998568

---

- Removed `*.md` from `.prettierignore` and reformatted all Markdown
files.
- `generate-theme-readme.js` now formats its output (root config via
`resolveConfig`) so `src/themes/README.md` stays formatted.

---------

Co-authored-by: Marco Pasqualetti <marco.pasqualetti@live.com>
2026-08-04 15:56:06 +02:00
Marco Pasqualetti df66b24c6a ci(generate-theme-readme): align theme readme generation with TypeScript sources (#433)
Follow-up to [the `themes/index.js` ➡️ `index.ts`
migration](https://github.com/stats-organization/github-stats-extended/pull/139),
which left the theme README generation pipeline pointing to files that
no longer exist.

* Renamed the workflow, script, and pnpm command to the consistent
`generate-theme-readme` (previously `generate-theme-doc` /
`theme-readme-gen`) and updated them to use the `.ts` source.
* Reduced workflow permissions from 12 declared scopes to the 2 actually
required:
  * `contents: write`
  * `pull-requests: write`
* Fixed the generated PR body, which incorrectly referenced language
files.

---

> [!NOTE]
> After this is merged, I'd consider applying the same permission
reduction and workflow rename to `update-langs.yml`.
2026-08-03 14:34:56 +02:00
Marco Pasqualetti fbd292a03d ci(repeat-recent-requests): replace http-request-action with curl (#434)
- Swaps the third-party `fjogeleit/http-request-action` for a plain
`curl` step in `repeat-recent-requests.yml`:
the workflow only needs a POST with a timeout, so the action added no
value.
- The request carries only what the endpoint reads. `repeat-recent`
checks `req.method` and nothing else.
  So the action's JSON body and headers were never used. 
  Each flag has a one-line comment explaining why it's there.
- Failure semantics are preserved: a `>= 400` status or a connection
failure still fails the job, and the response body and status are now
logged even on failure.

Example run:
https://github.com/marcalexiei/github-stats-extended/actions/runs/30751117550/job/91505220151
2026-08-03 14:15:07 +02:00
Marco Pasqualettiandmartin-mfg 68eddf0f81 docs: explain the Backend E2E failure and refine docs content (#432)
Related to
https://github.com/stats-organization/github-stats-extended/pull/430

> [(The failing Backend E2E test is expected, because this PR changes
the output of most cards, but in a non-visible
way.)](https://github.com/stats-organization/github-stats-extended/pull/430#issuecomment-5153247227)

- `ci.yml`: comment explaining what the job compares and why it fails.
- `CONTRIBUTING.md`: new "Tests" section, there was no testing
documentation before.
Removed the FAQ, whose three entries were all user questions, and
promoted Feature Request from `h3` to `h2`.
- `advanced_documentation`: kept the two useful FAQ answers, in context:
- language-card troubleshooting links under "Language stats algorithm",
- percent-encoding example (`&hide=jupyter%20notebook`) under "Hide
individual languages".
Demo labels changed from list items to `h4` headings: the images were
never indented into the list, so each label rendered as its own one-item
bullet.
- `deploy.md`: normalized the token-setup lists from `*` with 4 space
indents to `-` with 2 space indents.
  Marker and indentation only, nesting preserved.
- `README.md`: the seven section headings were `h1`. With the HTML
`<h1>` in the banner that made eight top-level headings on one page, so
they are now `h2`.
Heading anchors are derived from the text, so the table of contents is
unaffected.

---------

Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>
2026-08-03 13:46:24 +02:00
MartinandMarco Pasqualetti 58d941d63a support light & dark mode in one card (#430)
Add support for light mode and dark mode without [brittle,
GitHub-specific
approaches](https://github.com/stats-organization/github-stats-extended/blob/master/docs/advanced_documentation.md#responsive-card-theme).

All endpoints accept new parameters: theme_light, theme_dark,
title_color_light,
title_color_dark, icon_color_light, icon_color_dark, etc.

> Priority (lowest -> highest):
>  default theme -> `theme` param -> `theme_light`/`theme_dark` param
>  -> general color params -> `*_light`/`*_dark` color params

Additionally, this PR adds the recently introduced `progBarBgColor`
parameter to `CardColors` and handles it together with the other colors
in color.ts, for consistency. And it adds one test for an archived
repository.

This PR is already too big, so I'll add documentation in a later PR, and
maybe also a simple new option for the frontend.

My main question here is: does the API and the intended behaviour make
sense? Bugs can be fixed later, but once the new parameters are
released, ideally we shouldn't change them anymore.

---------

Co-authored-by: Marco Pasqualetti <24919330+marcalexiei@users.noreply.github.com>
2026-08-03 13:14:13 +02:00
Marco Pasqualetti 372eaaf058 feat(core): align repo star field naming and add type coverage (#429)
Followup of
https://github.com/stats-organization/github-stats-extended/pull/426#discussion_r3695160068

> Now that we have `RepoInfo`, would it make sense to define
`RepositoryData` as combination of `RepoInfo` and `RepoUserStats` (and
align the naming of "starCount"/"stargazerCount") in a later PR?
2026-08-01 21:00:35 +02:00
Marco Pasqualetti 09a72df953 feat(core): convert repo fetcher to TypeScript (#426)
Another step of #140, continues #415. 

Last fetcher: `fetchers/` is now fully TS.

- `repo` fetcher + test ➡️ `.ts`. 
Defines `RepoInfo` and `RepoQueryResponse`, calls
`retryer<RepoQueryResponse>(…)`
- `types.ts`: made `RepositoryData`'s PR/issue count fields optional:
they come from `fetchRepoUserStats`, which only sets them when the
matching `include_*` flag is on.
2026-08-01 10:10:24 +02:00
Marco Pasqualetti 587f4589b8 feat(core): convert stats fetcher to TypeScript (#415)
Another step of #140, continues #410.

- `stats` fetcher + test ➡️ `.ts`, threading typed GraphQL and
REST-search shapes through `retryer<…>`.
- Added a `src/_github-username-regex.d.ts` shim (package ships no
types).
- Fixed a bug caught by the types: statsFetcher expected pat in its
options object,
  but the caller passed it as a second argument, so it was ignored. 
Private-access users' token is now correctly passed to the main stats
query.
2026-07-29 20:05:48 +02:00
Marco Pasqualetti 259fc7c5bc feat(core): convert wakatime + top-languages fetchers to TypeScript (#410)
Another step of #140, continues #370.

- `wakatime` fetcher + test ➡️ `.ts`. Typed the props object and the
axios body (`axios.get<{ data: WakaTimeData }>`);
replaced the raw `err.response.status` access with an
`axios.isAxiosError` guard.
- `top-languages` fetcher + test ➡️ `.ts`, calling
`retryer<TopLanguagesQueryResponse>(…)`.
Split the single `let repoNodes` (reused across three shapes) into typed
values and simplified two of the three `reduce` calls (map-builder →
`for…of`, final sort ➡️ `Object.fromEntries`).
The flatten `reduce` is kept as-is — its order feeds the `repoCount`
logic.
- `types.ts`: added `count: number` to `Lang` (the fetcher always
produces it; the card only reads `name`/`color`/`size`).
2026-07-28 22:46:27 +02:00
Martin caccc4d69a bump core version to 2.1.5 (#407) 2026-07-27 19:20:46 +02:00
Martin 1c6b4c31d9 fix dropdown bugs and gradient bug (#402)
* In the frontend, "Modify Parameters" step, a few options of several
dropdowns encoded multiple parameters in their value string. That didn't
work anymore since a recent change. This PR fixes the affected dropdown
options.
* Since a recent change, using the "ambient_gradient" theme for WakaTime
card didn't work anymore. This PR fixes that.
2026-07-26 12:13:26 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 2992f63de2 ci(deps): Bump fjogeleit/http-request-action from 2.0.0 to 2.0.1 (#362)
Bumps
[fjogeleit/http-request-action](https://github.com/fjogeleit/http-request-action)
from 2.0.0 to 2.0.1.
<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.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump axios from 1.13.4 to 1.13.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/209">fjogeleit/http-request-action#209</a></li>
<li>Bump axios from 1.13.5 to 1.13.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/210">fjogeleit/http-request-action#210</a></li>
<li>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/fjogeleit/http-request-action/pull/211">fjogeleit/http-request-action#211</a></li>
<li>Bump axios from 1.13.6 to 1.14.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/212">fjogeleit/http-request-action#212</a></li>
<li>Revert &quot;Bump axios from 1.13.6 to 1.14.0&quot; by <a
href="https://github.com/fjogeleit"><code>@​fjogeleit</code></a> in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/213">fjogeleit/http-request-action#213</a></li>
<li>docs(readme): fix inaccuracies, heading hierarchy, and document
output by <a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/222">fjogeleit/http-request-action#222</a></li>
<li>docs(readme): update redirecting GitHub Docs URLs by <a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/224">fjogeleit/http-request-action#224</a></li>
<li>docs: fix inaccuracies and document missing outputs in action.yml by
<a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/223">fjogeleit/http-request-action#223</a></li>
<li>Bump actions/checkout from 6.0.2 to 6.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/227">fjogeleit/http-request-action#227</a></li>
<li>Bump axios from 1.13.6 to 1.15.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/216">fjogeleit/http-request-action#216</a></li>
<li>Bump axios from 1.15.0 to 1.17.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/225">fjogeleit/http-request-action#225</a></li>
<li>Bump follow-redirects from 1.15.11 to 1.16.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/217">fjogeleit/http-request-action#217</a></li>
<li>Bump nick-fields/assert-action from 2.0.0 to 3.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/214">fjogeleit/http-request-action#214</a></li>
<li>fix [DEP0169] DeprecationWarning: <code>url.parse()</code> behavior
is not standardized... by <a
href="https://github.com/wvidana"><code>@​wvidana</code></a> in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/232">fjogeleit/http-request-action#232</a></li>
<li>Bump undici from 6.24.0 to 6.27.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/231">fjogeleit/http-request-action#231</a></li>
<li>Bump axios from 1.17.0 to 1.18.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/229">fjogeleit/http-request-action#229</a></li>
<li>Bump axios from 1.18.0 to 1.18.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/233">fjogeleit/http-request-action#233</a></li>
<li>Bump <code>@​vercel/ncc</code> from 0.38.4 to 0.44.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/230">fjogeleit/http-request-action#230</a></li>
<li>Bump form-data from 4.0.5 to 4.0.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/228">fjogeleit/http-request-action#228</a></li>
<li>Bump nick-fields/assert-action from 3.0.0 to 4.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/234">fjogeleit/http-request-action#234</a></li>
<li>Bump actions/checkout from 6.0.3 to 7.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/235">fjogeleit/http-request-action#235</a></li>
<li>chore(dep): 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/236">fjogeleit/http-request-action#236</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
made their first contribution in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/222">fjogeleit/http-request-action#222</a></li>
<li><a href="https://github.com/wvidana"><code>@​wvidana</code></a> made
their first contribution in <a
href="https://redirect.github.com/fjogeleit/http-request-action/pull/232">fjogeleit/http-request-action#232</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/fjogeleit/http-request-action/compare/v2.0...v2.0.1">https://github.com/fjogeleit/http-request-action/compare/v2.0...v2.0.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/f98bb26551cd1af7d3eb2674578a80754ece88db"><code>f98bb26</code></a>
chore(dep): dependency updates (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/236">#236</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/3584789bbffe004d18e05cd2779aa75a3e2bf69a"><code>3584789</code></a>
Bump actions/checkout from 6.0.3 to 7.0.0 (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/235">#235</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/1d6a1ee0f4e72dcbc37a910236b8a2fedf1221df"><code>1d6a1ee</code></a>
Bump nick-fields/assert-action from 3.0.0 to 4.0.1 (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/234">#234</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/5d99b6683aaaf873571876966005dd6fc8b3136a"><code>5d99b66</code></a>
Bump form-data from 4.0.5 to 4.0.6 (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/228">#228</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/a53287a79a36cc186797c68df701ae69978eb2e8"><code>a53287a</code></a>
Bump <code>@​vercel/ncc</code> from 0.38.4 to 0.44.1 (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/230">#230</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/7540a773d6694bdd6235eb1e25bb01723b7855fc"><code>7540a77</code></a>
Bump axios from 1.18.0 to 1.18.1 (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/233">#233</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/55dcde0359495be61b69697dab6a9e2f310d4ffd"><code>55dcde0</code></a>
Bump axios from 1.17.0 to 1.18.0 (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/229">#229</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/d703d5a26d1c679a77adda062ad23653f804dea3"><code>d703d5a</code></a>
Bump undici from 6.24.0 to 6.27.0 (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/231">#231</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/0b8c6ccce4d482d1466df75f3ac0f9b0e2183474"><code>0b8c6cc</code></a>
Using the globally scoped URLSearchParams from the WHATWG URL API (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/232">#232</a>)</li>
<li><a
href="https://github.com/fjogeleit/http-request-action/commit/ed82ab41da4893d38edab6b5fad057b285078493"><code>ed82ab4</code></a>
Bump nick-fields/assert-action from 2.0.0 to 3.0.0 (<a
href="https://redirect.github.com/fjogeleit/http-request-action/issues/214">#214</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/fjogeleit/http-request-action/compare/551353b829c3646756b2ec2b3694f819d7957495...f98bb26551cd1af7d3eb2674578a80754ece88db">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=2.0.0&new-version=2.0.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-07-25 13:35:51 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 9201b65d82 ci(deps): Bump actions/checkout from 7.0.0 to 7.0.1 (#395)
Bumps [actions/checkout](https://github.com/actions/checkout) from 7.0.0
to 7.0.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.1</h2>
<h2>What's Changed</h2>
<ul>
<li>skip running unsafe pr check if input is default by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2518">actions/checkout#2518</a></li>
<li>trim only ascii whitespace for branch by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2521">actions/checkout#2521</a></li>
<li>escape values passed to --unset by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2530">actions/checkout#2530</a></li>
<li>Various dependency updates</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v7...v7.0.1">https://github.com/actions/checkout/compare/v7...v7.0.1</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>v7.0.1</h2>
<ul>
<li>Skip running unsafe pr check if input is default by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2518">actions/checkout#2518</a></li>
<li>Trim only ascii whitespace for branch by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2521">actions/checkout#2521</a></li>
<li>Escape values passed to --unset by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2530">actions/checkout#2530</a></li>
<li>Various dependency updates</li>
</ul>
<h2>v7.0.0</h2>
<ul>
<li>Block checking out fork PR for pull_request_target and workflow_run
by <a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
<li>Various dependency updates</li>
</ul>
<h2>v6.0.3</h2>
<ul>
<li>Fix checkout init for SHA-256 repositories by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<h2>v6.0.2</h2>
<ul>
<li>Fix tag handling: preserve annotations and explicit fetch-tags by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2356">actions/checkout#2356</a></li>
</ul>
<h2>v6.0.1</h2>
<ul>
<li>Add worktree support for persist-credentials includeIf by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
</ul>
<h2>v6.0.0</h2>
<ul>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
</ul>
<h2>v5.0.1</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<h2>v5.0.0</h2>
<ul>
<li>Update actions checkout to use node 24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
</ul>
<h2>v4.3.1</h2>
<ul>
<li>Port v6 cleanup to v4 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
</ul>
<h2>v4.3.0</h2>
<ul>
<li>docs: update README.md by <a
href="https://github.com/motss"><code>@​motss</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
<li>Add internal repos for checking out multiple repositories by <a
href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
<li>Documentation update - add recommended permissions to Readme by <a
href="https://github.com/benwells"><code>@​benwells</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
<li>Adjust positioning of user email note and permissions heading by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li>
<li>Update README.md by <a
href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li>
<li>Update CODEOWNERS for actions by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li>
<li>Update package dependencies by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li>
</ul>
<h2>v4.2.2</h2>
<ul>
<li><code>url-helper.ts</code> now leverages well-known environment
variables by <a href="https://github.com/jww3"><code>@​jww3</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li>
<li>Expand unit test coverage for <code>isGhes</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li>
</ul>
<h2>v4.2.1</h2>
<ul>
<li>Check out other refs/* by commit if provided, fall back to ref by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/checkout/commit/3d3c42e5aac5ba805825da76410c181273ba90b1"><code>3d3c42e</code></a>
prep v7.0.1 release (<a
href="https://redirect.github.com/actions/checkout/issues/2531">#2531</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/28802689a136bfcdb721715abd713740beecbe07"><code>2880268</code></a>
escape values passed to --unset (<a
href="https://redirect.github.com/actions/checkout/issues/2530">#2530</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/12cd2235efa0937479335606d7c3ac9f6c0973b1"><code>12cd223</code></a>
trim only ascii whitespace for branch (<a
href="https://redirect.github.com/actions/checkout/issues/2521">#2521</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/62661c4e71a304b2823ed026347b8d34c3eac541"><code>62661c4</code></a>
skip running unsafe pr check if input is default (<a
href="https://redirect.github.com/actions/checkout/issues/2518">#2518</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/e8d4307400f9427dba7cb98e488d6ab85f1cec5f"><code>e8d4307</code></a>
Bump the minor-actions-dependencies group with 2 updates (<a
href="https://redirect.github.com/actions/checkout/issues/2499">#2499</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/631c942040754b6e095e929c1677c07e10ed4f87"><code>631c942</code></a>
eslint 9 (<a
href="https://redirect.github.com/actions/checkout/issues/2474">#2474</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/4f1f4aec02e41874fa0262ea8ff5172d7978ad1e"><code>4f1f4ae</code></a>
Bump actions/upload-artifact from 4 to 7 (<a
href="https://redirect.github.com/actions/checkout/issues/2476">#2476</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/ba097532fb203f7e88c9c3c0b899b49469908a92"><code>ba09753</code></a>
Bump actions/checkout from 6 to 7 (<a
href="https://redirect.github.com/actions/checkout/issues/2488">#2488</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/b9e0990d219a03df7633c93f6f005a8fecbcab22"><code>b9e0990</code></a>
Bump docker/login-action from 3.3.0 to 4.2.0 (<a
href="https://redirect.github.com/actions/checkout/issues/2479">#2479</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/e8cb398be4a550817e382abf69e4c12c76fce1f2"><code>e8cb398</code></a>
Bump docker/build-push-action from 6.5.0 to 7.2.0 (<a
href="https://redirect.github.com/actions/checkout/issues/2478">#2478</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/checkout/compare/9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0...3d3c42e5aac5ba805825da76410c181273ba90b1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=7.0.0&new-version=7.0.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-07-25 13:35:23 +02:00
Martin 90508f02f3 upgrade several dependencies (#400) 2026-07-25 13:27:54 +02:00
Martin 3bda3abee7 bump core version to 2.1.4 (#399) 2026-07-24 20:28:47 +02:00
Martin 8f7cc5824b longer prerender caching 2 (#393)
Try to further reduce load on Vercel. ISR expiration time is now 3 day
minus 1 hour, and I will set `UPDATE_AFTER_HOURS` to 3 days.
2026-07-23 21:34:27 +02:00
Martin 1d7ea960f5 switch from stargazers.totalCount to stargazerCount (#391) 2026-07-23 20:30:54 +02:00
shuaixr 2b908ad146 fix: update Vercel deploy link to point to the backend directory (#382)
Fixes #381
2026-07-23 14:23:45 +02:00
Marco Pasqualetti 63ca91e1b1 feat(core): start fetchers TypeScript migration (retryer generic + gist) (#370)
Another step of #140, continues #322. 
Starts migrating `fetchers/`.

- `retryer` is now generic over the response payload:
`retryer<TData>(…)` returns `AxiosResponse<TData & ResponseErrors>` so
callers get their own `response.data` shape while the retryer still
reads `errors`/`message`.
  Defaults to `unknown` so existing callers are unaffected.
- `src/fetchers/types.d.ts` ➡️ `types.ts` (references are extensionless,
so they resolve unchanged).
- `gist` fetcher + test ➡️ `.ts`, using `retryer<GistQueryResponse>(…)`.

> [!WARNING]
> Consider reviewing #375 first, as it resolves the "Resource limits for
this query exceeded" issue.
> This PR will likely conflict with it, so it's better to merge #375
first.
2026-07-23 09:50:09 +02:00
Martin 2007f51dc0 small test improvements (#386) 2026-07-22 20:45:36 +02:00
Martin 3258ad09b0 longer prerender caching (#360)
Load on Vercel is higher than expected. It seems the problem is that
Vercel's CDN evicts our responses before they go stale, because there
are relatively few requests per card. So the repeat-recent functionality
currently causes load without achieving much.

This PR increases ISR expiration time to see how this affects load in
practice. Setting this time via env var might be a task for later.
2026-07-13 10:24:28 +02:00
MartinandMarco Pasqualetti 4ccec4604b fix warnings (#342)
Co-authored-by: Marco Pasqualetti <marco.pasqualetti@live.com>
2026-07-12 19:51:53 +02:00
Marco Pasqualetti b81abe07c4 refactor(frontend): consolidate Home card options into a single state object (#344)
`HomeScreen` held ~16 separate `useState` hooks for card options and
threaded them through 34 props into `CustomizeStage`.
This consolidates them into a single typed `CardOptions` state object
(new `pages/Home/cardOptions.ts`), updated via a keyed setter.

### Changes

- `CustomizeStage` props go from 34 to 5; `buildCardUrl` takes `userId`,
`selectedCard` and `options`.
- Stage descriptions move into `STAGE_LABELS`, replacing a positional
string array in the JSX.
- The three GitHub-URL paste handlers in `CustomizeStage` share one
`pastedPathTail` helper.
- A failed OAuth `authenticate` call left the page stuck on the loading
spinner;
the exchange now runs in `try/catch/finally` and the redirect is parsed
with
  `URLSearchParams` instead of substring matching.
2026-07-12 17:49:10 +02:00
Marco Pasqualetti b0100ca48e fix(core): validate username / gist id against the safe-character pattern (#356)
- Related to #342 

`stats` and `pin` already reject `username`/`repo`/`owner` that don't
match `safePattern` (`/^[-\w/.,]+$/`), but `top-langs`, `wakatime`, and
`gist` didn't.

This applies the same guard:

- `top-langs` + `wakatime`: reject a `username` containing unsafe
characters.
Matters most for `wakatime`, where `username` is interpolated into the
outbound request URL path.
- `gist`: same guard on its `id` param.

All three return the existing `error - permanent` card before any fetch.

## Additional change

Simplified the `layout` / `stats_format` checks in `top-langs`: 
dropped the redundant `typeof x !== "string" ||` (a non-string already
fails `.includes(...)`),
keeping the `x !== undefined` guard so the params stay optional.
2026-07-12 14:23:40 +02:00
Shaurya Sharmaandmartin-mfg 7c7fca420b Fix link to calculateRank source file in docs (#351)
The advanced documentation file in the docs/ folder incorrectly links to
a nonexistent folder called "backend/" for the calculate rank logic.
This PR fixes the broken link by changing the link to
"packages/core/src/calculateRank.js".

---------

Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>
2026-07-11 12:48:00 +02:00
Martin 1d9db07ed4 fix color of theme switcher (#343)
The latest daisyui upgrade changed the theme switcher's color in light
mode. This PR reverts that change.
2026-07-10 19:49:41 +02:00
Martin 4043488ee0 adjust repeat-recent (#341)
* GitHub actually triggers the cron workflow every few hours. Because
they are overloaded I suppose. This PR is an attempt to give the
workflow more chances to be triggered.
* Sometimes we run into secondary rate limiting of the GitHub API when
repeating recent requests. Having less workers should fix this.
2026-07-07 16:21:48 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 807aa453d8 ci(deps): Bump actions/checkout from 6.0.3 to 7.0.0 (#299)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.3
to 7.0.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v7.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>block checking out fork pr for pull_request_target and workflow_run
by <a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
<li>Bump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the
minor-actions-dependencies group across 1 directory by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2458">actions/checkout#2458</a></li>
<li>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/actions/checkout/pull/2460">actions/checkout#2460</a></li>
<li>Bump js-yaml from 4.1.0 to 4.2.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2461">actions/checkout#2461</a></li>
<li>Bump <code>@​actions/core</code> and
<code>@​actions/tool-cache</code> and Remove uuid by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2459">actions/checkout#2459</a></li>
<li>upgrade module to esm and update dependencies by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2463">actions/checkout#2463</a></li>
<li>Bump the minor-npm-dependencies group across 1 directory with 3
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2462">actions/checkout#2462</a></li>
<li>getting ready for checkout v7 release by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2464">actions/checkout#2464</a></li>
<li>update error wording by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2467">actions/checkout#2467</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6.0.3...v7.0.0">https://github.com/actions/checkout/compare/v6.0.3...v7.0.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>v7.0.0</h2>
<ul>
<li>Block checking out fork PR for pull_request_target and workflow_run
by <a href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2454">actions/checkout#2454</a></li>
<li>Bump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the
minor-actions-dependencies group across 1 directory by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2458">actions/checkout#2458</a></li>
<li>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/actions/checkout/pull/2460">actions/checkout#2460</a></li>
<li>Bump js-yaml from 4.1.0 to 4.2.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2461">actions/checkout#2461</a></li>
<li>Bump <code>@​actions/core</code> and
<code>@​actions/tool-cache</code> and Remove uuid by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2459">actions/checkout#2459</a></li>
<li>upgrade module to esm and update dependencies by <a
href="https://github.com/aiqiaoy"><code>@​aiqiaoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2463">actions/checkout#2463</a></li>
<li>Bump the minor-npm-dependencies group across 1 directory with 3
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/checkout/pull/2462">actions/checkout#2462</a></li>
</ul>
<h2>v6.0.3</h2>
<ul>
<li>Fix checkout init for SHA-256 repositories by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<h2>v6.0.2</h2>
<ul>
<li>Fix tag handling: preserve annotations and explicit fetch-tags by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2356">actions/checkout#2356</a></li>
</ul>
<h2>v6.0.1</h2>
<ul>
<li>Add worktree support for persist-credentials includeIf by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
</ul>
<h2>v6.0.0</h2>
<ul>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
</ul>
<h2>v5.0.1</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<h2>v5.0.0</h2>
<ul>
<li>Update actions checkout to use node 24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
</ul>
<h2>v4.3.1</h2>
<ul>
<li>Port v6 cleanup to v4 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
</ul>
<h2>v4.3.0</h2>
<ul>
<li>docs: update README.md by <a
href="https://github.com/motss"><code>@​motss</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
<li>Add internal repos for checking out multiple repositories by <a
href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
<li>Documentation update - add recommended permissions to Readme by <a
href="https://github.com/benwells"><code>@​benwells</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
<li>Adjust positioning of user email note and permissions heading by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li>
<li>Update README.md by <a
href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li>
<li>Update CODEOWNERS for actions by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li>
<li>Update package dependencies by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li>
</ul>
<h2>v4.2.2</h2>
<ul>
<li><code>url-helper.ts</code> now leverages well-known environment
variables by <a href="https://github.com/jww3"><code>@​jww3</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li>
<li>Expand unit test coverage for <code>isGhes</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li>
</ul>
<h2>v4.2.1</h2>
<ul>
<li>Check out other refs/* by commit if provided, fall back to ref by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/checkout/commit/9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0"><code>9c091bb</code></a>
update error wording (<a
href="https://redirect.github.com/actions/checkout/issues/2467">#2467</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/1044a6dea927916f2c38ba5aeffbc0a847b1221a"><code>1044a6d</code></a>
getting ready for checkout v7 release (<a
href="https://redirect.github.com/actions/checkout/issues/2464">#2464</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/f0282184c7ce73ab54c7e4ab5a617122602e575f"><code>f028218</code></a>
Bump the minor-npm-dependencies group across 1 directory with 3 updates
(<a
href="https://redirect.github.com/actions/checkout/issues/2462">#2462</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/d914b262ffc244530a203ab40decab34c3abf34d"><code>d914b26</code></a>
upgrade module to esm and update dependencies (<a
href="https://redirect.github.com/actions/checkout/issues/2463">#2463</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/537c7ef99cef6e5ddb5e7ff5d16d14510503801d"><code>537c7ef</code></a>
Bump <code>@​actions/core</code> and <code>@​actions/tool-cache</code>
and Remove uuid (<a
href="https://redirect.github.com/actions/checkout/issues/2459">#2459</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/130a169078a413d3a5246a393625e8e742f387f6"><code>130a169</code></a>
Bump js-yaml from 4.1.0 to 4.2.0 (<a
href="https://redirect.github.com/actions/checkout/issues/2461">#2461</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/7d09575332117a40b46e5e020664df234cd416f3"><code>7d09575</code></a>
Bump flatted from 3.3.1 to 3.4.2 (<a
href="https://redirect.github.com/actions/checkout/issues/2460">#2460</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/0f9f3aa320cb53abeb534aeb54048075d9697a0e"><code>0f9f3aa</code></a>
Bump actions/publish-immutable-action (<a
href="https://redirect.github.com/actions/checkout/issues/2458">#2458</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/f9e715a95fcd1f9253f77dd28f11e88d2d6460c7"><code>f9e715a</code></a>
block checking out fork pr for pull_request_target and workflow_run (<a
href="https://redirect.github.com/actions/checkout/issues/2454">#2454</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/checkout/compare/df4cb1c069e1874edd31b4311f1884172cec0e10...9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=6.0.3&new-version=7.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-07-06 09:34:52 +02:00
github-actions[bot]andmartin-mfg 6f1ad4b732 Update languages JSON (#321)
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-07-06 09:33:34 +02:00
Martin 536199bf4a several dependency upgrades again (#336) 2026-07-06 09:25:04 +02:00
Martin a2bb443789 several dependency upgrades (#334) 2026-07-06 08:24:06 +02:00
Marco Pasqualetti 5da671b171 ci: install only chromium for Playwright e2e (#329)
The frontend Playwright config only enables the chromium project, so CI
was needlessly downloading Firefox and WebKit.
Scope `playwright install` to `chromium` to speed up the e2e job.
2026-07-05 09:53:08 +02:00
Marco Pasqualettiandmartin-mfg ed9d284973 feat(frontend): build card URLs with a typed per-card builder (#328)
Card URLs were built by hand-concatenating paths and query strings in
several places.
This replaces that with a typed, immutable per-card URL builder
(`cardUrl(cardType)`), so URLs are assembled in one place with proper
encoding.

## Changes

- New `models/CardUrl.ts`: one builder per card type, exposing only the
params that card supports.
`URLSearchParams` handles joining + encoding. Also carries a per-card
`filename()` for downloads.
- `getFullSuffix.ts` ➡️ `buildCardUrl.ts`: returns a builder instead of
a string.
- The builder is passed as a prop through all card components; no
hand-written `?`/`&` concatenation left.
- New `useCardDescriptor` hook resolves per-card display metadata (guest
hint + link) and owns the
Gist URL fetch, replacing the repeated `switch (selectedCard)` blocks in
`Home`.
- Added tests for `CardUrl`.

### Notes

- Params now go through `URLSearchParams`, so commas become `%2C` and
spaces `%20`.
  The server decodes these before use, so rendered cards are unchanged.
- Builders are `useMemo`'d in `Home` to keep stable references.

---------

Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>
2026-07-05 09:48:23 +02:00
Marco Pasqualettiandmartin-mfg 748d8c5430 refactor(frontend): replace eslint react plugins with @eslint-react/eslint-plugin (#326)
- Fixes #325

`eslint-plugin-react@7.37.5` doesn't declare support for ESLint 10,
producing an unmet-peer-dependency warning.

## Changes

- Swapped `eslint-plugin-react` ➡️ `@eslint-react/eslint-plugin` and
adopted its `recommended-typescript` config.
This also replaces `eslint-plugin-react-hooks` (the preset ships
equivalent `rules-of-hooks`/`exhaustive-deps`), so both old plugins are
removed.
- Fixed the violations the new preset surfaced:
  - IIFEs-in-JSX in `Home.tsx` ➡️ lifted to `const` bindings.
  - Ref naming (`*Ref`).
- 4 `set-state-in-effect` cases ➡️ rewritten as render-phase state
adjustment ([React
docs](https://react.dev/learn/you-might-not-need-an-effect#adjusting-some-state-when-a-prop-changes)).
- Extracted the shared debounced-input logic from
`TextSection`/`NumericSection` into a `useDebouncedField` hook.
- Added a standalone Playwright spec (`e2e/app-trends-auth.spec.ts`)
covering the `AppTrends` auth-driven stage transition.

---------

Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>
2026-07-03 16:27:36 +02:00
Marco Pasqualetti fef8e90c86 feat(core): migrate common/ render, ops, http, calculateRank to TypeScript (#322)
Second wave of the `packages/core` TypeScript migration (#140),
continuing #292.
Converts the remaining `common/` modules and their tests from JSDoc
`.js` to real `.ts`.

## Changes

- **Modules ➡️ `.ts`**: `common/http`, `common/ops`, `common/render`,
`calculateRank`.
- **Tests ➡️ `.ts`**: `ops`, `flexLayout`, `render`, `calculateRank`.
- **`src/_emoji-name-map.d.ts`**: `declare module` shim.
`emoji-name-map` ships no types
and has no `@types` package (same as the existing
`@uppercod/css-to-object` shim).
- **`common/color.ts`**: widened `getCardColors` optional params to `?:
string | undefined`
so `renderError` can forward possibly-`undefined` colors under
`exactOptionalPropertyTypes`.
2026-07-03 16:26:23 +02:00
Martin fa82216dfe fix primary color in step 4 (#317) 2026-06-30 09:04:48 +02:00
Marco Pasqualettiandmartin-mfg ef3f207dbf feat(frontend): add light/dark theming with theme picker (#300)
Adds light/dark theming to the frontend using the existing DaisyUI +
Tailwind setup.

- Theme picker dropdown in the header; selection is stored in Redux and
persisted to `localStorage`.
The toggle and each option show a sun/moon icon (shared `ThemeIcon`
component) so light/dark are easy to tell apart.
- Migrated hardcoded colors to DaisyUI tokens so the whole UI (and
toasts) follow the theme.
- `Button` now uses `variant` / `size` / `outline` props instead of raw
`btn-*` classes.
- Theme preview cards: (Select Theme grid and the final Display card)
sit on a two-tone backdrop (light or dark), chosen by the card theme so
previews stay consistent regardless of the app theme.
- Smooth theme-switch transitions: surfaces fade gently while
interactive elements stay snappy; respects `prefers-reduced-motion`.
- Added an e2e test for the picker.


<details><summary>Step 1</summary>
<p>


<img width="1710" height="811" alt="Screenshot 2026-06-24 at 06 54 40"
src="https://github.com/user-attachments/assets/38d629b5-eaa3-4fb1-b976-c56e7a840ced"
/>

<img width="1706" height="808" alt="Screenshot 2026-06-24 at 06 54 32"
src="https://github.com/user-attachments/assets/3811a574-016c-4a93-82a9-a340519f5257"
/>


</p>
</details> 

<details><summary>Step 4</summary>
<p>


<img width="1709" height="899" alt="Screenshot 2026-06-24 at 06 56 22"
src="https://github.com/user-attachments/assets/4053b938-1faa-427b-b621-e79ce7b2c7b1"
/>

<img width="1705" height="894" alt="Screenshot 2026-06-24 at 06 55 41"
src="https://github.com/user-attachments/assets/8aace78a-f1ca-4d29-b57e-938f7b473e67"
/>

</p>
</details>

---------

Co-authored-by: martin-mfg <2026226+martin-mfg@users.noreply.github.com>
2026-06-29 10:04:00 +02:00
Marco Pasqualetti 35fbec8004 feat(core): begin TypeScript migration of common modules (#292)
Starts migrating `packages/core` to TypeScript (#140).

- Converted the `common/` modules to `.ts`: 
- `Card`, `I18n`, `color`, `config`, `constants`, `error`, `fmt`,
`html`, `icons`, `retryer`, `translations`.
- Replaced JSDoc types and `@ts-check`/`@ts-ignore` comments with real
TypeScript types.
- Enabled type-checking on the source and moved `noCheck` into the build
config.
- Converted the tests that target those modules to `.ts`: 
   - `fmt`, `i18n`, `card`, `color`, `html`, `retryer`.
- Converted `tests/_setup.ts` and moved the jest-dom matcher typing
there: augmenting vitest's `Matchers` interface (per the vitest docs) so
matchers like `toHaveAttribute` are typed on `expect(...)`.
- Added a `tests/css-to-object.d.ts` shim so `@uppercod/css-to-object`
resolves under `nodenext` (it ships types but doesn't expose them via
`exports`).
2026-06-22 19:27:14 +02:00
Marco Pasqualetti 3ef27f872c chore(vscode): update prettier extension id (#293)
Update the Prettier extension ID.

Avoids prompting the user to install "Prettier (DO NOT USE)" extension.

<img width="473" height="130" alt="image"
src="https://github.com/user-attachments/assets/ea422ba1-262c-402b-a8f0-cf4cbcbff011"
/>
2026-06-21 10:15:43 +02:00
Martin 5557e9c772 upgrade several actions (#290) 2026-06-19 00:04:12 +02:00
Martin 570fc4aaed bump core version to 2.1.3 (#289) 2026-06-18 23:42:01 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 2ac454a177 build(deps-dev): Bump turbo from 2.9.17 to 2.9.18 (#286)
Bumps [turbo](https://github.com/vercel/turborepo) from 2.9.17 to
2.9.18.
<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.18</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<h3>Changelog</h3>
<ul>
<li>release(turborepo): 2.9.17 by <a
href="https://github.com/github-actions"><code>@​github-actions</code></a>[bot]
in <a
href="https://redirect.github.com/vercel/turborepo/pull/13047">vercel/turborepo#13047</a></li>
<li>ci: Fetch version.txt via API in docs alias failure notification by
<a href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a>
in <a
href="https://redirect.github.com/vercel/turborepo/pull/13050">vercel/turborepo#13050</a></li>
<li>fix: Harden cache archive symlink restore by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/13051">vercel/turborepo#13051</a></li>
<li>chore: Remove web UI mode by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/13052">vercel/turborepo#13052</a></li>
<li>fix: Harden query server file access by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/13053">vercel/turborepo#13053</a></li>
<li>fix: Confine prune patch paths by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/13054">vercel/turborepo#13054</a></li>
<li>fix: Prevent git argument injection in SCM refs by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/13055">vercel/turborepo#13055</a></li>
<li>fix: Strip special mode bits from cache restore by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/13056">vercel/turborepo#13056</a></li>
<li>fix: Contain incremental cache outputs by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/13057">vercel/turborepo#13057</a></li>
<li>fix(turborepo): Normalize Windows daemon path hash by <a
href="https://github.com/Balance8"><code>@​Balance8</code></a> in <a
href="https://redirect.github.com/vercel/turborepo/pull/13020">vercel/turborepo#13020</a></li>
<li>fix: Preserve vt100 cell byte counts by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/13058">vercel/turborepo#13058</a></li>
<li>fix: Separate artifact signature fields by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/13059">vercel/turborepo#13059</a></li>
<li>fix: Validate OidHash hex buffers by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/13060">vercel/turborepo#13060</a></li>
<li>fix: Block self-hosted login URLs from attempting to use Vercel's
SSO by <a
href="https://github.com/anthonyshew"><code>@​anthonyshew</code></a> in
<a
href="https://redirect.github.com/vercel/turborepo/pull/13061">vercel/turborepo#13061</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/Balance8"><code>@​Balance8</code></a>
made their first contribution in <a
href="https://redirect.github.com/vercel/turborepo/pull/13020">vercel/turborepo#13020</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/vercel/turborepo/compare/v2.9.17...v2.9.18">https://github.com/vercel/turborepo/compare/v2.9.17...v2.9.18</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/vercel/turborepo/commit/3bdce3277d2e61cdbf29f244a515dd4b896d2556"><code>3bdce32</code></a>
publish 2.9.18 to registry</li>
<li><a
href="https://github.com/vercel/turborepo/commit/2a76556b9457c514fa597a09fef23da2e1250c8c"><code>2a76556</code></a>
fix: Block self-hosted login URLs from attempting to use Vercel's SSO
(<a
href="https://redirect.github.com/vercel/turborepo/issues/13061">#13061</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/da8e3487acce10039425180c42875d7ccc484ed5"><code>da8e348</code></a>
fix: Validate OidHash hex buffers (<a
href="https://redirect.github.com/vercel/turborepo/issues/13060">#13060</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/3018717c28fc8f1ecffa2c92e3260be0dc0165aa"><code>3018717</code></a>
fix: Separate artifact signature fields (<a
href="https://redirect.github.com/vercel/turborepo/issues/13059">#13059</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/34514e278822ccbe3a083730b7032709ef16f85c"><code>34514e2</code></a>
fix: Preserve vt100 cell byte counts (<a
href="https://redirect.github.com/vercel/turborepo/issues/13058">#13058</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/24e2d3498f54fa1f8b729f18764f63cb05072bc6"><code>24e2d34</code></a>
fix(turborepo): Normalize Windows daemon path hash (<a
href="https://redirect.github.com/vercel/turborepo/issues/13020">#13020</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/16dc881cabf5c13d02c27a5d7cfdfeb60736206c"><code>16dc881</code></a>
fix: Contain incremental cache outputs (<a
href="https://redirect.github.com/vercel/turborepo/issues/13057">#13057</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/92e1f8e5365ea5a95e47c3698deb2f7adaa55eba"><code>92e1f8e</code></a>
fix: Strip special mode bits from cache restore (<a
href="https://redirect.github.com/vercel/turborepo/issues/13056">#13056</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/f46f896ef414823582131304c9749e9be011fe37"><code>f46f896</code></a>
fix: Prevent git argument injection in SCM refs (<a
href="https://redirect.github.com/vercel/turborepo/issues/13055">#13055</a>)</li>
<li><a
href="https://github.com/vercel/turborepo/commit/7f353ca3a6f28fbbcce931aeab7be0efe718c466"><code>7f353ca</code></a>
fix: Confine prune patch paths (<a
href="https://redirect.github.com/vercel/turborepo/issues/13054">#13054</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vercel/turborepo/compare/v2.9.17...v2.9.18">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=turbo&package-manager=npm_and_yarn&previous-version=2.9.17&new-version=2.9.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-06-18 10:57:59 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> b837c50885 build(deps-dev): Bump @types/node from 24.13.1 to 24.13.2 in the typescript group (#285)
Bumps the typescript group with 1 update:
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).

Updates `@types/node` from 24.13.1 to 24.13.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 />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@types/node&package-manager=npm_and_yarn&previous-version=24.13.1&new-version=24.13.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 <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-06-18 10:57:37 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> dfb07a69b9 ci(deps): Bump actions/checkout from 6.0.2 to 6.0.3 (#270)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.2
to 6.0.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.3</h2>
<h2>What's Changed</h2>
<ul>
<li>Update changelog by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2357">actions/checkout#2357</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
<li>Fix checkout init for SHA-256 repositories by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>Update changelog for v6.0.3 by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2446">actions/checkout#2446</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/yaananth"><code>@​yaananth</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6...v6.0.3">https://github.com/actions/checkout/compare/v6...v6.0.3</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>v6.0.3</h2>
<ul>
<li>Fix checkout init for SHA-256 repositories by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2439">actions/checkout#2439</a></li>
<li>fix: expand merge commit SHA regex and add SHA-256 test cases by <a
href="https://github.com/yaananth"><code>@​yaananth</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2414">actions/checkout#2414</a></li>
</ul>
<h2>v6.0.2</h2>
<ul>
<li>Fix tag handling: preserve annotations and explicit fetch-tags by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2356">actions/checkout#2356</a></li>
</ul>
<h2>v6.0.1</h2>
<ul>
<li>Add worktree support for persist-credentials includeIf by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
</ul>
<h2>v6.0.0</h2>
<ul>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
</ul>
<h2>v5.0.1</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<h2>v5.0.0</h2>
<ul>
<li>Update actions checkout to use node 24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
</ul>
<h2>v4.3.1</h2>
<ul>
<li>Port v6 cleanup to v4 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
</ul>
<h2>v4.3.0</h2>
<ul>
<li>docs: update README.md by <a
href="https://github.com/motss"><code>@​motss</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
<li>Add internal repos for checking out multiple repositories by <a
href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
<li>Documentation update - add recommended permissions to Readme by <a
href="https://github.com/benwells"><code>@​benwells</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
<li>Adjust positioning of user email note and permissions heading by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li>
<li>Update README.md by <a
href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li>
<li>Update CODEOWNERS for actions by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li>
<li>Update package dependencies by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li>
</ul>
<h2>v4.2.2</h2>
<ul>
<li><code>url-helper.ts</code> now leverages well-known environment
variables by <a href="https://github.com/jww3"><code>@​jww3</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li>
<li>Expand unit test coverage for <code>isGhes</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li>
</ul>
<h2>v4.2.1</h2>
<ul>
<li>Check out other refs/* by commit if provided, fall back to ref by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li>
</ul>
<h2>v4.2.0</h2>
<ul>
<li>Add Ref and Commit outputs by <a
href="https://github.com/lucacome"><code>@​lucacome</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1180">actions/checkout#1180</a></li>
<li>Dependency updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>- <a
href="https://redirect.github.com/actions/checkout/pull/1777">actions/checkout#1777</a>,
<a
href="https://redirect.github.com/actions/checkout/pull/1872">actions/checkout#1872</a></li>
</ul>
<h2>v4.1.7</h2>
<ul>
<li>Bump the minor-npm-dependencies group across 1 directory with 4
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1739">actions/checkout#1739</a></li>
<li>Bump actions/checkout from 3 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1697">actions/checkout#1697</a></li>
<li>Check out other refs/* by commit by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1774">actions/checkout#1774</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/checkout/commit/df4cb1c069e1874edd31b4311f1884172cec0e10"><code>df4cb1c</code></a>
Update changelog for v6.0.3 (<a
href="https://redirect.github.com/actions/checkout/issues/2446">#2446</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/1cce3390c2bfda521930d01229c073c7ff920824"><code>1cce339</code></a>
Fix checkout init for SHA-256 repositories (<a
href="https://redirect.github.com/actions/checkout/issues/2439">#2439</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/900f2210b1d28bbbd0bd22d17926b9e224e8f231"><code>900f221</code></a>
fix: expand merge commit SHA regex and add SHA-256 test cases (<a
href="https://redirect.github.com/actions/checkout/issues/2414">#2414</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/0c366fd6a839edf440554fa01a7085ccba70ac98"><code>0c366fd</code></a>
Update changelog (<a
href="https://redirect.github.com/actions/checkout/issues/2357">#2357</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/checkout/compare/de0fac2e4500dabe0009e67214ff5f5447ce83dd...df4cb1c069e1874edd31b4311f1884172cec0e10">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&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 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-06-17 22:41:07 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 41b51dcfd9 build(deps-dev): Bump @types/node from 24.13.0 to 24.13.1 in the typescript group across 1 directory (#276)
Bumps the typescript group with 1 update in the / directory:
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node).

Updates `@types/node` from 24.13.0 to 24.13.1
<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-06-17 22:39:53 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 7687c47d85 build(deps-dev): Bump the eslint group across 1 directory with 2 updates (#284)
Bumps the eslint group with 2 updates in the / directory:
[eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) and
[typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint).

Updates `eslint-plugin-jsdoc` from 63.0.1 to 63.0.2
<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>v63.0.2</h2>
<h2><a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v63.0.1...v63.0.2">63.0.2</a>
(2026-06-06)</h2>
<h3>Bug Fixes</h3>
<ul>
<li>allow typedef returns that may be void; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1390">#1390</a>
(<a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1699">#1699</a>)
(<a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/319e84b21dfc21213f42998beee26e199660747c">319e84b</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/50a7fbcf4abf7b27ca2774f65397f2f74395ea41"><code>50a7fbc</code></a>
chore: update semver and devDeps.</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/6041995ba873b5641e3b9bd1f95de004b4b9e7da"><code>6041995</code></a>
docs: fix in output</li>
<li><a
href="https://github.com/gajus/eslint-plugin-jsdoc/commit/319e84b21dfc21213f42998beee26e199660747c"><code>319e84b</code></a>
fix: allow typedef returns that may be void; fixes <a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1390">#1390</a>
(<a
href="https://redirect.github.com/gajus/eslint-plugin-jsdoc/issues/1699">#1699</a>)</li>
<li>See full diff in <a
href="https://github.com/gajus/eslint-plugin-jsdoc/compare/v63.0.1...v63.0.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `typescript-eslint` from 8.60.1 to 8.61.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.61.0</h2>
<h2>8.61.0 (2026-06-08)</h2>
<h3>🚀 Features</h3>
<ul>
<li><strong>ast-spec:</strong> change type of
<code>UnaryExpression.prefix</code> to always <code>true</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12372">#12372</a>)</li>
<li><strong>ast-spec:</strong> tighten types of
<code>ArrowFunction</code>, <code>YieldExpression</code>,
<code>TSTypePredicate</code> (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12373">#12373</a>)</li>
</ul>
<h3>🩹 Fixes</h3>
<ul>
<li><strong>rule-schema-to-typescript-types:</strong> respect ECMAScript
line terminators (<a
href="https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12374">#12374</a>)</li>
</ul>
<h3>❤️ Thank You</h3>
<ul>
<li>Kirk Waiblinger <a
href="https://github.com/kirkwaiblinger"><code>@​kirkwaiblinger</code></a></li>
<li>lumir</li>
</ul>
<p>See <a
href="https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.61.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.61.0 (2026-06-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.61.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/16a5b247affc32af21b695cf96dfd75d7ded50a3"><code>16a5b24</code></a>
chore(release): publish 8.61.0</li>
<li>See full diff in <a
href="https://github.com/typescript-eslint/typescript-eslint/commits/v8.61.0/packages/typescript-eslint">compare
view</a></li>
</ul>
</details>
<br />


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-06-17 21:01:53 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 7917d54fdf build(deps-dev): Bump @types/react from 19.2.16 to 19.2.17 in the react group across 1 directory (#283)
Bumps the react group with 1 update in the / directory:
[@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react).

Updates `@types/react` from 19.2.16 to 19.2.17
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@types/react&package-manager=npm_and_yarn&previous-version=19.2.16&new-version=19.2.17)](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-06-17 21:01:03 +02:00
Martin 7771a34790 several dependency upgrades (#282) 2026-06-17 20:52:00 +02:00
Martin 1c266ad51e dependency upgrades (#265) 2026-06-07 18:24:46 +02:00
Martin 6258d90604 fix non-mocked frontend requests (#263) 2026-06-07 10:04:19 +02:00
Martin 6d857d0f34 upgrade dependencies (#262) 2026-06-06 12:23:41 +02:00
github-actions[bot]andmartin-mfg e15deeac76 Update languages JSON (#254)
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-06-06 09:24:43 +02:00
Martin b5d50fc28f debug playwright (#261) 2026-06-06 09:23:54 +02:00
Marco Pasqualetti 1d394c7fad chore(actions): don’t repeat-recent-requests on forks (#259)
I received a notification about a failed workflow run on my fork of this
repository:

*
https://github.com/marcalexiei/github-stats-extended/actions/runs/26996444955

It looks like the `repeat-recent-requests` workflow is being triggered
on forks, even though it should only run on the canonical repositories.
This PR adds an `if` condition to prevent it from running on forks.

The condition matches the one already used in the `update-languages`
workflow:


https://github.com/stats-organization/github-stats-extended/blob/96d141e8c717f42a1a29e67f64984a19182dd575/.github/workflows/update-langs.yml#L31-L36

---

Additionally, this PR renames `update_tags.yml` to `update-tags.yml` for
consistency with the repository's workflow naming convention.
2026-06-05 19:32:58 +02:00
Martin 76e09ce3b0 improve 'Responsive Card Theme' docs (#260)
- reorder subsections
- shorten `<picture>` code
2026-06-05 18:17:02 +02:00
Martin 96d141e8c7 update documentation, step 2 (#243) 2026-05-21 23:28:09 +02:00
martin-mfg 6310073428 update documentation, step 2 2026-05-21 21:45:14 +02:00
Martin 1d8aaf0fc8 update documentation (#242) 2026-05-21 21:21:31 +02:00
martin-mfg 4a2785e286 update documentation 2026-05-21 21:19:35 +02:00
Martin 16ea9afebe set correct version for 'core' package (#218) 2026-05-08 12:54:54 +02:00
Martin c707e6b7b1 ignore git checks when publishing (#216) 2026-05-08 12:11:03 +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 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
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 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 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 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
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 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
413 changed files with 28341 additions and 39192 deletions
+1 -1
View File
@@ -21,4 +21,4 @@ If you believe someone is violating the code of conduct, we ask that you report
- Repeated harassment of others. In general, if someone asks you to stop, then stop.
- **When we disagree, try to understand why.** Disagreements, both social and technical, happen all the time. It is important that we resolve disagreements and differing views constructively. Remember that were different. Different people have different perspectives on issues. Being unable to understand why someone holds a viewpoint doesnt mean that theyre wrong. Dont forget that it is human to err and blaming each other doesnt get us anywhere. Instead, focus on helping to resolve issues and learning from mistakes.
Based on the [Django Code of Conduct](https://www.djangoproject.com/conduct/).
Based on the [Django Code of Conduct](https://www.djangoproject.com/conduct/).
+44 -27
View File
@@ -2,12 +2,47 @@
## 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).
## Tests
```bash
pnpm run test # unit tests
pnpm run lint # eslint
pnpm run typecheck # tsc
```
The **Backend E2E test** in CI compares the cards your branch renders against the ones served by the preview deployment, which is still on the last commit merged to master.
So if your PR changes card output at all, that job goes red until the preview catches up.
It's marked `continue-on-error`, so it won't block your PR, but do open it and check the diff is only what you expected.
If the change to card markup was intentional, update the snapshots:
```bash
pnpm --filter ./packages/core/ run test:update:snapshot
pnpm --filter ./apps/backend/ run test:update:snapshot
```
## GraphQL Queries
The GraphQL queries live in `packages/core/src/graphql/queries/*.graphql`,
and their TypeScript types are generated from GitHub's published schema into `packages/core/src/graphql/generated/`.
Those generated files are committed, so if you change a query, regenerate them and include the result in your PR:
```bash
pnpm --filter ./packages/core/ run generate-graphql-types
```
CI runs `pnpm --filter ./packages/core/ run check-graphql-types`, which fails if the committed types no longer match the queries.
Never edit the generated files by hand — change the `.graphql` file and regenerate.
## Themes Contribution
@@ -27,28 +62,10 @@ In short, when you submit changes, your submissions are understood to be under t
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/stats-organization/github-stats-extended/issues/new/choose). If there is already an open issue for your bug in the upstream repo [github-readme-stats](https://github.com/anuraghazra/github-readme-stats/issues) you don't need to report it here.
## Frequently Asked Questions (FAQs)
**Q:** How to hide Jupyter Notebook?
> **Ans:** &hide=jupyter%20notebook
**Q:** Language Card is incorrect
> **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-665172181>
**Q:** How to count private stats?
> see [here](../docs/fork.md#private-contributions-support)
### Feature Request
## Feature Request
**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.
+1 -1
View File
@@ -1,3 +1,3 @@
# Security Policy
Please report any security vulnerabilities to github.stats.extended@gmail.com. I will try to respond as quickly as possible, but since I am maintaining this project in my free time, please allow some time for a response.
Please report any security vulnerabilities to github.stats.extended@gmail.com. I will try to respond as quickly as possible, but since I am maintaining this project in my free time, please allow some time for a response.
@@ -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@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- name: Setup Node.js (via input)
if: ${{ inputs.node-version }}
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version-file: ".nvmrc"
cache: "pnpm"
registry-url: "https://registry.npmjs.org"
- name: Install Dependencies
shell: bash
run: pnpm install --frozen-lockfile
+88
View File
@@ -0,0 +1,88 @@
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-*"
graphql:
patterns:
- "graphql"
- "@graphql-codegen/*"
- "@octokit/graphql-schema"
# 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
+136
View File
@@ -0,0 +1,136 @@
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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
- name: Build packages
run: pnpm run build:packages
# Only install chromium since it is the only browser enabled in
# apps/frontend/playwright.config.ts. Update this if more projects are added.
- name: Install Playwright Browsers
run: pnpm exec playwright install --with-deps chromium
- 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
# Compares the cards we render here against the preview deployment,
# which is still on the last commit merged on master.
# So any PR that changes card output turns this red until the preview catches up.
# Worth a look, just not always a bug.
continue-on-error: true
steps:
- name: Checkout code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- 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: Lint (deduped deps)
run: pnpm run lint:deps
- name: Lint (generated GraphQL types)
run: pnpm --filter ./packages/core/ run check-graphql-types
- name: Typecheck
run: pnpm run typecheck
@@ -0,0 +1,47 @@
name: Update supported languages
on:
workflow_dispatch:
schedule:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
# │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
- cron: "45 22 */7 * *"
permissions:
contents: write
pull-requests: write
jobs:
update-languages:
if: github.repository == 'stats-organization/github-stats-extended'
name: Generate Language Colors
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
- name: Run update-languages-json.js script
run: pnpm --filter ./packages/core/ run generate-language-colors
- name: Create Pull Request if upstream language file is changed
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
with:
commit-message: "feat(core): update language colors"
branch: "update_langs/patch"
delete-branch: true
title: Update languages colors
body: >-
The [generate-language-colors](https://github.com/stats-organization/github-stats-extended/actions/workflows/generate-language-colors.yml)
workflow detected changes in the [upstream languages JSON
file](https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml) and regenerated the local language colors JSON file.
labels: "ci"
@@ -0,0 +1,54 @@
name: Generate Theme Readme
on:
push:
branches:
- master
paths:
- "packages/core/src/themes/index.ts"
workflow_dispatch:
schedule:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
# │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
- cron: "45 22 */7 * *"
permissions: {}
jobs:
generate-theme-doc:
runs-on: ubuntu-latest
name: Generate Theme Readme
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
- name: Generate readme
run: pnpm --filter ./packages/core/ run generate-theme-readme
- name: Create Pull Request if themes README has changed
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
with:
commit-message: "feat(core): update themes README"
branch: "update_themes_readme/patch"
delete-branch: true
title: Update themes README
body: >-
The [generate-theme-readme](https://github.com/stats-organization/github-stats-extended/actions/workflows/generate-theme-readme.yml)
workflow detected changes in
[`packages/core/src/themes/index.ts`](https://github.com/stats-organization/github-stats-extended/blob/master/packages/core/src/themes/index.ts)
and regenerated the themes README.
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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- 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 --no-git-checks
+18 -11
View File
@@ -10,22 +10,29 @@ on:
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
- cron: "45 * * * *"
- cron: "15,45 * * * *"
workflow_dispatch:
permissions: {}
jobs:
triggerRepeatRecent:
repeat-recent-requests:
if: github.repository == 'stats-organization/github-stats-extended'
name: Trigger server to update cached data.
runs-on: ubuntu-latest
steps:
- name: Make Request
id: myRequest
uses: fjogeleit/http-request-action@v1
with:
url: "https://github-stats-extended.vercel.app/api/repeat-recent"
method: "POST"
timeout: "300000"
- name: Show Response
run: |
echo ${{ steps.myRequest.outputs.response }}
echo ${{ steps.myRequest.outputs.status }}
args=(
--silent --show-error # no progress bar, but still report errors
--request POST # the only thing the endpoint checks
--location # a redirect would otherwise pass the status check
--max-redirs 5 # bounded well below curl's default of 50
--speed-limit 1 --speed-time 300 # give up after 300s of no traffic
--output response.txt # keep the body out of the status capture
--write-out "%{http_code}" # status is all we capture on stdout
)
status=$(curl "${args[@]}" "https://github-stats-extended.vercel.app/api/repeat-recent")
cat response.txt
printf '\nstatus: %s\n' "$status"
test "$status" -lt 400
+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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- 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
+1
View File
@@ -0,0 +1 @@
pnpm-lock.yaml
+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",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"github.vscode-github-actions"
]
}
+9
View File
@@ -0,0 +1,9 @@
{
"markdown.extension.toc.levels": "1..3",
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"cSpell.words": ["retryer", "Wakatime"]
}
+84 -21
View File
@@ -1,21 +1,32 @@
<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>
<a href="https://github-stats-extended.vercel.app/api?username=anuraghazra">
<picture>
<source
srcset="https://github-stats-extended.vercel.app/api?username=anuraghazra&theme=dark_github"
media="(prefers-color-scheme: dark)"
/>
<img src="https://github-stats-extended.vercel.app/api?username=anuraghazra&theme=light_github" />
</picture>
</a>
</div>
This project is an [extended version](docs/fork.md) of [github-readme-stats](https://github.com/anuraghazra/github-readme-stats). It generates [various stats cards](#card-types), e.g. about your GitHub contributions, your top languages, etc. You can [customize](#advanced-customization) the cards via multiple parameters.
This project is the [extended, actively maintained successor](docs/fork.md) of [github-readme-stats](https://github.com/anuraghazra/github-readme-stats). It generates [various stats cards](#card-types), e.g. about your GitHub contributions, your top languages, etc. You can [customize](#advanced-customization) the cards via multiple parameters.
## Table of Contents
# Table of Contents
- [Quick Start](#quick-start)
- [Migration from github-readme-stats](#migration-from-github-readme-stats)
- [Card Types](#card-types)
- [Advanced Customization](#advanced-customization)
- [Self-Hosting](#self-hosting)
- [Run It Yourself](#run-it-yourself)
- [Acknowledgements](#acknowledgements)
- [Contributing](#contributing)
# Quick Start
## Quick Start
- Copy and paste this into your markdown:
```markdown
[![Anurag's GitHub stats](https://github-stats-extended.vercel.app/api?username=anuraghazra)](https://github.com/stats-organization/github-stats-extended)
@@ -23,45 +34,97 @@ This project is an [extended version](docs/fork.md) of [github-readme-stats](htt
- Change the `?username=` value to your GitHub username.
- Done!
-----------------------
---
As more comfortable alternative, use the [GitHub-Stats-Extended Wizard](https://github-stats-extended.vercel.app/frontend) to create your custom stats card. Copy the generated markdown code and paste it into your [GitHub profile README](https://docs.github.com/en/account-and-profile/how-tos/profile-customization/managing-your-profile-readme#adding-a-profile-readme). Done!
# Card Types
## Migration from github-readme-stats
To migrate from [github-readme-stats](https://github.com/anuraghazra/github-readme-stats) you only need to change the domain from `github-readme-stats.vercel.app` to `github-stats-extended.vercel.app`:
```diff
- https://github-readme-stats.vercel.app/api?username=octocat&theme=radical
+ https://github-stats-extended.vercel.app/api?username=octocat&theme=radical
```
GitHub-Stats-Extended aims to be fully compatible with github-readme-stats. For more details see [Compatibility Notes](docs/fork.md#compatibility-notes).
## Card Types
- Show your GitHub statistics:
![Anurag's GitHub stats](https://github-stats-extended.vercel.app/api?username=anuraghazra)
<picture>
<source
srcset="https://github-stats-extended.vercel.app/api?username=anuraghazra&theme=dark_github"
media="(prefers-color-scheme: dark)"
/>
<img src="https://github-stats-extended.vercel.app/api?username=anuraghazra&theme=light_github" alt="Anurag's GitHub stats" />
</picture>
- ...your top languages...:
![Top Langs](https://github-stats-extended.vercel.app/api/top-langs/?username=anuraghazra&langs_count=4)
<picture>
<source
srcset="https://github-stats-extended.vercel.app/api/top-langs/?username=anuraghazra&langs_count=4&theme=dark_github"
media="(prefers-color-scheme: dark)"
/>
<img src="https://github-stats-extended.vercel.app/api/top-langs/?username=anuraghazra&langs_count=4&theme=light_github" alt="Top Langs" />
</picture>
- ...and development time:
[![Harlok's WakaTime stats](https://github-stats-extended.vercel.app/api/wakatime?username=ffflabs&langs_count=6)](https://wakatime.com/@ffflabs)
<a href="https://wakatime.com/@alan">
<picture>
<source
srcset="https://github-stats-extended.vercel.app/api/wakatime?username=alan&langs_count=6&theme=dark_github"
media="(prefers-color-scheme: dark)"
/>
<img src="https://github-stats-extended.vercel.app/api/wakatime?username=alan&langs_count=6&theme=light_github" alt="Alan's WakaTime stats" />
</picture>
</a>
- Pin more than 6 repos in your GitHub profile:
[![Readme Card](https://github-stats-extended.vercel.app/api/pin/?username=anuraghazra&repo=github-readme-stats)](https://github.com/anuraghazra/github-readme-stats)
<a href="https://github.com/anuraghazra/github-readme-stats">
<picture>
<source
srcset="https://github-stats-extended.vercel.app/api/pin/?username=anuraghazra&repo=github-readme-stats&theme=dark_github_repocard"
media="(prefers-color-scheme: dark)"
/>
<img src="https://github-stats-extended.vercel.app/api/pin/?username=anuraghazra&repo=github-readme-stats&theme=light_github_repocard" alt="Readme Card" />
</picture>
</a>
- Pin Gists in your GitHub profile:
[![Gist Card](https://github-stats-extended.vercel.app/api/gist?id=bbfce31e0217a3689c8d961a356cb10d)](https://gist.github.com/Yizack/bbfce31e0217a3689c8d961a356cb10d)
<a href="https://gist.github.com/Yizack/bbfce31e0217a3689c8d961a356cb10d">
<picture>
<source
srcset="https://github-stats-extended.vercel.app/api/gist?id=bbfce31e0217a3689c8d961a356cb10d&theme=dark_github_repocard"
media="(prefers-color-scheme: dark)"
/>
<img src="https://github-stats-extended.vercel.app/api/gist?id=bbfce31e0217a3689c8d961a356cb10d&theme=light_github_repocard" alt="Gist Card" />
</picture>
</a>
- Customize all the cards:
[![Anurag's GitHub stats](https://github-stats-extended.vercel.app/api/?username=anuraghazra&show_icons=true&theme=calm&rank_icon=github&include_all_commits=true&custom_title=Anurag's+Stats&disable_animations=true&number_format=long&show=prs_merged_percentage,prs_reviewed)](https://github-stats-extended.vercel.app/api/?username=anuraghazra&show_icons=true&theme=calm&rank_icon=github&include_all_commits=true&custom_title=Anurag's+Stats&disable_animations=true&number_format=long&show=prs_merged_percentage,prs_reviewed)
# Advanced Customization
## Advanced Customization
The [GitHub-Stats-Extended Wizard](https://github-stats-extended.vercel.app/frontend) offers some essential customization options. For more advanced customization check out the [advanced documentation](docs/advanced_documentation.md).
# Acknowledgements
This project is based on [github-readme-stats](https://github.com/anuraghazra/github-readme-stats). On top of their functionality I added several new features and improvements. See [Fork Information](docs/fork.md) for a list of changes. The frontend I added to the project is based on [GitHub Trends](https://github.com/avgupta456/github-trends). Big thanks to [@anuraghazra](https://github.com/anuraghazra), [@avgupta456](https://github.com/avgupta456), [@rickstaa](https://github.com/rickstaa), [@qwerty541](https://github.com/qwerty541) and everyone else who worked on these projects! ❤️
## Run It Yourself
# Self-Hosting
Since the GitHub API only allows a limited number of requests per hour, the public instance of GitHub-Stats-Extended at https://github-stats-extended.vercel.app/api could possibly hit the rate limiter. If you host your own instance you do not have to worry about anything. Also, if you don't want to give my GitHub-Stats-Extended instance access to your private contributions but still want to include these contributions in your stats, you can simply host your own instance.
If you want to run GitHub-Stats-Extended on your own, there are two main deployment options: you can use [github-readme-stats-action](https://github.com/stats-organization/github-readme-stats-action) to generate cards in your own GitHub Actions workflow. Or you can self-host GitHub-Stats-Extended on Vercel.
See [Deploy on your own](docs/deploy.md) for various deployment options.
See [Run It Yourself](docs/deploy.md) for detailed instructions.
# Contributing
Contributions are welcome!
## Acknowledgements
This project is based on [github-readme-stats](https://github.com/anuraghazra/github-readme-stats). On top of that project's functionality GitHub-Stats-Extended adds several new features and improvements. See [Fork Information](docs/fork.md) for a list of changes. The frontend added to GitHub-Stats-Extended is based on [GitHub Trends](https://github.com/avgupta456/github-trends). Big thanks to [@anuraghazra](https://github.com/anuraghazra), [@avgupta456](https://github.com/avgupta456), [@rickstaa](https://github.com/rickstaa), [@qwerty541](https://github.com/qwerty541) and everyone else who worked on these projects! ❤️
## Contributing
Contributions are welcome!
@@ -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"
}
@@ -1,5 +1,5 @@
{
"expiration": 39600,
"expiration": 255600,
"bypassToken": "r3fr3shT0k3n-r3fr3shT0k3n-r3fr3shT0k3n",
"passQuery": true
}
}
@@ -1,5 +1,5 @@
{
"expiration": 39600,
"expiration": 255600,
"bypassToken": "r3fr3shT0k3n-r3fr3shT0k3n-r3fr3shT0k3n",
"passQuery": true
}
}
@@ -1,5 +1,5 @@
{
"expiration": 39600,
"expiration": 255600,
"bypassToken": "r3fr3shT0k3n-r3fr3shT0k3n-r3fr3shT0k3n",
"passQuery": true
}
}
@@ -1,5 +1,5 @@
{
"expiration": 39600,
"expiration": 255600,
"bypassToken": "r3fr3shT0k3n-r3fr3shT0k3n-r3fr3shT0k3n",
"passQuery": true
}
}
@@ -1,5 +1,5 @@
{
"expiration": 39600,
"expiration": 255600,
"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": "catalog:default",
"vitest": "catalog:default"
},
"dependencies": {
"@stats-organization/github-readme-stats-core": "workspace:^",
"axios": "catalog:default",
"pg": "^8.22.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,19 +48,24 @@ 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 {
await makeRequests(urls, 5);
await makeRequests(urls, 3);
}
}
@@ -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 },
);
});
+343
View File
@@ -0,0 +1,343 @@
/**
* @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, stargazerCount: 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,
stargazerCount: 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 topLanguages") && 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,770 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`Test /api contract > should match the gradient-background 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: #ffffff;
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: #ffffff;
}
@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: #ffffff;
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: #ffffff;
display: none;
}
.rank-circle-rim {
stroke: #ffffff;
fill: none;
stroke-width: 6;
opacity: 0.2;
}
.rank-circle {
stroke: #ffffff;
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;
}
}
@media (prefers-color-scheme: dark) {
.header { fill: #2f80ed; }
.card-bg { fill: url(#gradient-dark); stroke: #e4e2e2; }
.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>
<defs>
<linearGradient id="gradient" gradientTransform="rotate(35)" gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="#4158d0"/>,<stop offset="50%" stop-color="#c850c0"/>,<stop offset="100%" stop-color="#ffcc70"/>
</linearGradient>
<linearGradient id="gradient-dark" gradientTransform="rotate(45)" gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="#60A5FA"/>,<stop offset="100%" stop-color="#4ADE80"/>
</linearGradient>
</defs>
<rect data-testid="card-bg" class="card-bg" x="0.5" y="0.5" rx="4.5" height="99%" stroke="#e4e2e2" width="449" fill="url(#gradient)" 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 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>
<defs>
</defs>
<rect data-testid="card-bg" class="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>
<defs>
</defs>
<rect data-testid="card-bg" class="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":"\\nquery 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(\\n first: 1\\n contributionTypes: [COMMIT, ISSUE, PULL_REQUEST, REPOSITORY]\\n ) {\\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 ...RepoStars\\n }\\n}\\nfragment RepoStars on User {\\n repositories(\\n first: 100\\n after: $after\\n ownerAffiliations: $ownerAffiliations\\n orderBy: {direction: DESC, field: STARGAZERS}\\n ) {\\n totalCount\\n nodes {\\n ...RepoNode\\n }\\n pageInfo {\\n hasNextPage\\n endCursor\\n }\\n }\\n}\\nfragment RepoNode on Repository {\\n name\\n stargazerCount\\n}","variables":{"login":"anuraghazra","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,282 @@
// 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>
<defs>
</defs>
<rect data-testid="card-bg" class="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: #ffabcd;
}
.gray { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #ffabcd }
.icon { fill: #ff00aa }
@media (prefers-color-scheme: dark) {
.header { fill: #123456; }
.card-bg { fill: #0f172a; stroke: #fedcba; }
.description {
fill: #abcdef;
}
.gray { fill: #abcdef }
.icon { fill: #aa00ff }
}
/* 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>
<defs>
</defs>
<rect data-testid="card-bg" class="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 ...GistFileInfo\\n }\\n }\\n }\\n}\\nfragment GistFileInfo on GistFile {\\n name\\n language {\\n name\\n }\\n size\\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,575 @@
// 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 archived-repo 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; stroke: #434d58 }
.badge text { fill: #434d58 }
.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>
<defs>
</defs>
<rect data-testid="card-bg" class="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)">
<g data-testid="badge" class="badge" transform="translate(320, -18)">
<rect stroke-width="1" width="70" height="20" x="-12" y="-14" ry="10" rx="10"/>
<text x="23" y="-5" alignment-baseline="central" dominant-baseline="central" text-anchor="middle">
Archived
</text>
</g>
<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 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; stroke: #434d58 }
.badge text { fill: #434d58 }
.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>
<defs>
</defs>
<rect data-testid="card-bg" class="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: #a9fef7;
}
.gray { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #a9fef7 }
.badge { font: 600 11px 'Segoe UI', Ubuntu, Sans-Serif; }
.badge rect { opacity: 0.2; stroke: #a9fef7 }
.badge text { fill: #a9fef7 }
.stat { font: 400 12px 'Segoe UI', Ubuntu, Sans-Serif; fill: #a9fef7 }
.stagger {
opacity: 0;
animation: fadeInAnimation 0.3s ease-in-out forwards;
}
.not_bold { font-weight: 400 }
.bold { font-weight: 700 }
.icon {
fill: #f8d847;
display: block;
}
@media (prefers-color-scheme: dark) {
.header { fill: #123456; }
.card-bg { fill: #193549; stroke: #fedcba; }
.description {
fill: #75eeb2;
}
.gray { fill: #75eeb2 }
.badge rect { stroke: #75eeb2 }
.badge text { fill: #75eeb2 }
.stat { fill: #75eeb2 }
.icon { fill: #0480ef; }
}
/* 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>
<defs>
</defs>
<rect data-testid="card-bg" class="card-bg" x="0.5" y="0.5" rx="12" height="99%" stroke="#fedcba" width="559" fill="#141321" 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":"\\nquery 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}\\nfragment RepoInfo on Repository {\\n name\\n nameWithOwner\\n isPrivate\\n isArchived\\n isTemplate\\n stargazerCount\\n description\\n primaryLanguage {\\n color\\n id\\n name\\n }\\n forkCount\\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,483 @@
// 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;
}
.progress-background { fill: #ddd; }
/* 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>
<defs>
</defs>
<rect data-testid="card-bg" class="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" class="progress-background" rx="5" ry="5" x="0" y="0" width="205" height="8"/>
<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" class="progress-background" rx="5" ry="5" x="0" y="0" width="205" height="8"/>
<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" class="progress-background" rx="5" ry="5" x="0" y="0" width="205" height="8"/>
<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" class="progress-background" rx="5" ry="5" x="0" y="0" width="205" height="8"/>
<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" class="progress-background" rx="5" ry="5" x="0" y="0" width="205" height="8"/>
<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;
}
.progress-background { fill: #ddd; }
@media (prefers-color-scheme: dark) {
.header { fill: #123456; }
.card-bg { fill: #0f172a; stroke: #e4e2e2; }
.stat { fill: #abcdef; }
.lang-name { fill: #abcdef; }
.progress-background { fill: #ddd; }
}
/* 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>
<defs>
</defs>
<rect data-testid="card-bg" class="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":"\\nquery topLanguages($login: String!, $ownerAffiliations: [RepositoryAffiliation]) {\\n user(login: $login) {\\n repositories(ownerAffiliations: $ownerAffiliations, isFork: false, first: 100) {\\n nodes {\\n ...TopLanguagesRepository\\n }\\n }\\n }\\n}\\nfragment TopLanguagesRepository on Repository {\\n name\\n languages(first: 10, orderBy: {field: SIZE, direction: DESC}) {\\n edges {\\n ...TopLanguage\\n }\\n }\\n}\\nfragment TopLanguage on LanguageEdge {\\n size\\n node {\\n color\\n name\\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,594 @@
// 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;
fill: #2f80ed;
}
.progress-background { fill: #434d58; }
/* 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>
<defs>
</defs>
<rect data-testid="card-bg" class="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" class="progress-background" rx="5" ry="5" x="0" y="0" width="220" height="8"/>
<svg data-testid="lang-progress" width="52%">
<rect height="8" 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" class="progress-background" rx="5" ry="5" x="0" y="0" width="220" height="8"/>
<svg data-testid="lang-progress" width="28%">
<rect height="8" 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" class="progress-background" rx="5" ry="5" x="0" y="0" width="220" height="8"/>
<svg data-testid="lang-progress" width="13%">
<rect height="8" 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" class="progress-background" rx="5" ry="5" x="0" y="0" width="220" height="8"/>
<svg data-testid="lang-progress" width="4%">
<rect height="8" 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" class="progress-background" rx="5" ry="5" x="0" y="0" width="220" height="8"/>
<svg data-testid="lang-progress" width="3%">
<rect height="8" 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;
fill: #2f80ed;
}
.progress-background { fill: #434d58; }
/* 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>
<defs>
</defs>
<rect data-testid="card-bg" class="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">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: #ff3456;
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;
fill: #ff3456;
}
.progress-background { fill: #abcdef; }
@media (prefers-color-scheme: dark) {
.header { fill: #ff6543; }
.card-bg { fill: #193549; stroke: #fedcba; }
.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 }
.lang-name { fill: #abcdef }
.lang-progress { fill: #ff6543; }
.progress-background { fill: #abcdef; }
}
/* 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>
<defs>
</defs>
<rect data-testid="card-bg" class="card-bg" x="0.5" y="0.5" rx="12" height="99%" stroke="#fedcba" width="619" fill="#141321" 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,221 @@
// @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 gradient-background response snapshot", async () => {
const { default: router } = await import("../../router.js");
const params = new URLSearchParams({
username: "anuraghazra",
theme_light: "ambient_gradient",
bg_color_dark: "45,60A5FA,4ADE80",
});
const req = {
headers: {},
url: `/api?${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",
};
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,145 @@
// @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_light: "ff00aa",
icon_color_dark: "aa00ff",
text_color_light: "ffabcd",
text_color_dark: "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,260 @@
// @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 archived-repo response snapshot", async () => {
let archived_data_user = structuredClone(data_user);
archived_data_user.data.user.repository.isArchived = true;
mock
.onPost("https://api.github.com/graphql")
.reply(200, archived_data_user);
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",
theme_light: "radical",
theme_dark: "cobalt",
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,211 @@
// @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",
theme_dark: "cobalt",
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,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 { 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",
theme: "vue",
theme_light: "radical",
theme_dark: "cobalt",
title_color: "123456",
title_color_light: "ff3456",
title_color_dark: "ff6543",
text_color: "abcdef",
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);
});
});
+297
View File
@@ -0,0 +1,297 @@
// @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", stargazerCount: 1500 },
{ name: "repo-exclude-me", stargazerCount: 9999 },
{ name: "repo-keep-2", stargazerCount: 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",
stargazerCount: 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"],
},
});
+61
View File
@@ -0,0 +1,61 @@
import { expect, test } from "@playwright/test";
import type { Page } from "@playwright/test";
/**
* Puts the SPA into an authenticated state without contacting GitHub by
* stubbing the OAuth code exchange and the follow-up user-access lookup:
* `authenticate` returns a userId (which flips `isAuthenticated` to true), and
* `user-access` returns metadata so AppTrends does not immediately log back out.
* @param page - The Playwright page to install the route handlers on.
*/
async function mockAuthEndpoints(page: Page): Promise<void> {
await page.route("**/api/authenticate**", (route) =>
route.fulfill({
status: 200,
contentType: "application/json",
body: JSON.stringify({ userId: "octocat", needDowngrade: false }),
}),
);
await page.route("**/api/user-access**", (route) =>
route.fulfill({
status: 200,
contentType: "application/json",
body: JSON.stringify({ token: "test-token", privateAccess: "false" }),
}),
);
}
test.describe("AppTrends auth-driven stage transition", () => {
test("auto-advances from Login to Select a Card once authenticated", async ({
page,
}) => {
await mockAuthEndpoints(page);
// Land on the app as GitHub does after the OAuth redirect (URL carries `code`).
await page.goto("?code=test-oauth-code");
// AppTrends starts unauthenticated on stage 0 ("Login"). When the code
// exchange flips `isAuthenticated` false -> true, the render-phase
// transition must advance the stepper to stage 1 ("Select a Card").
await expect(page.getByRole("heading", { level: 1 })).toContainText(
"Select a Card",
);
});
test("keeps a manually selected earlier step instead of re-forcing it", async ({
page,
}) => {
await mockAuthEndpoints(page);
await page.goto("?code=test-oauth-code");
const heading = page.getByRole("heading", { level: 1 });
await expect(heading).toContainText("Select a Card");
// Going back to "Login" while still authenticated must stick: the transition
// fires only on an auth *change*, so a later render must not snap the user
// forward again. A bug that dropped the previous-value guard would bounce
// the heading straight back to "Select a Card" here.
await page.getByRole("button", { name: "Login" }).click();
await expect(heading).toContainText("Login");
});
});
+110
View File
@@ -0,0 +1,110 @@
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 link
const starButton = page.getByRole("link", { 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("theme picker switches and persists the theme", async ({ page }) => {
await page.goto("");
const html = page.locator("html");
const trigger = page.getByRole("button", { name: /choose theme/i });
const options = page.getByRole("menuitemradio");
// The menu is closed initially.
await expect(trigger).toBeVisible();
await expect(trigger).toHaveAttribute("aria-expanded", "false");
await expect(options).toHaveCount(0);
// Opening it reveals the options (portaled to body, above the stepper).
await trigger.click();
await expect(trigger).toHaveAttribute("aria-expanded", "true");
// Read the themes off the options instead of hardcoding their names.
const firstTheme = await options.first().getAttribute("data-theme-value");
const lastTheme = await options.last().getAttribute("data-theme-value");
// Selecting an option applies the theme, persists it, and closes the menu.
await options.last().click();
await expect(html).toHaveAttribute("data-theme", lastTheme ?? "");
await expect(options).toHaveCount(0);
await expect(
page.evaluate(() => localStorage.getItem("theme")),
).resolves.toBe(lastTheme);
// The choice survives a reload and is marked as selected on reopen.
await page.reload();
await expect(html).toHaveAttribute("data-theme", lastTheme ?? "");
await trigger.click();
await expect(options.last()).toHaveAttribute("aria-checked", "true");
// Switching to another option works too.
await options.first().click();
await expect(html).toHaveAttribute("data-theme", firstTheme ?? "");
});
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",
);
});
+24
View File
@@ -0,0 +1,24 @@
import { expect, test } from "@playwright/test";
test("selecting 'None' progress style hides the rank circle", async ({
page,
}) => {
await page.goto("");
// Stage 0 -> 2: go to customization
await page.getByRole("button", { name: "Modify Parameters" }).click();
await expect(page.getByRole("heading", { level: 1 })).toContainText(
"Modify Card Parameters",
);
const preview = page.locator("#svgWrapper");
const rankCircle = preview.locator('[data-testid="rank-circle"]');
// Default "Rank" progress style renders the rank circle.
await expect(preview).toBeAttached();
await expect(rankCircle).toHaveCount(1);
await page.getByRole("combobox").selectOption({ label: "None" });
await expect(rankCircle).toHaveCount(0);
});
+62
View File
@@ -0,0 +1,62 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta name="title" content="GitHub Stats Extended" />
<meta
name="description"
content="Dynamically generate GitHub stats for your READMEs."
/>
<meta property="og:type" content="website" />
<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."
/>
<!--
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="/manifest.json" />
<title>GitHub Stats Extended</title>
</head>
<body>
<script>
// Apply the persisted theme from localStorage before first paint. This is
// what makes a saved theme survive a reload when it differs from the OS
// preference (DaisyUI's `--prefersdark` only covers the OS default, and
// nothing in React sets `data-theme` on mount).
// Also suppress color transitions until after the first paint so elements
// don't animate from their unstyled state on load.
(function () {
try {
var stored = localStorage.getItem("theme");
const matchesDarkTheme = window.matchMedia(
"(prefers-color-scheme: dark)",
).matches;
var theme = stored || (matchesDarkTheme ? "dark" : "light");
document.documentElement.setAttribute("data-theme", theme);
} catch (e) {}
})();
</script>
<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.12.0",
"@stats-organization/github-readme-stats-backend": "workspace:^",
"@stats-organization/github-readme-stats-core": "workspace:^",
"@tailwindcss/vite": "^4.3.3",
"axios": "catalog:default",
"axios-cache-interceptor": "^1.12.0",
"daisyui": "^5.6.18",
"react": "^19.2.7",
"react-dom": "^19.2.7",
"react-icons": "^5.7.0",
"react-loading-skeleton": "^3.5.0",
"react-redux": "^9.3.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.1"
},
"devDependencies": {
"@types/react": "19.2.17",
"@types/react-dom": "19.2.3",
"@vitejs/plugin-react": "6.0.3",
"clsx": "2.1.1",
"tailwindcss": "4.3.3",
"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

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