457 Commits

Author SHA1 Message Date
jhoward1994 42509493bf release: 5.47.0 2026-05-28 11:22:14 +00:00
Bassel17 04ac8c3e90 release: 5.46.1 2026-05-20 09:09:00 +00:00
Ben Irvin 6ed22b5cfa security(deps): upgrade multiple dependencies (#26326)
* chore: upgrade simple-git

* chore: upgrade axios

* chore: upgrade docusaurus

* chore: upgrade docusaurus family

* chore: yarn.lock

* chore: upgrade styled-components

* chore: upgrade yaml

* chore: bump fast-uri in pinned deps

* chore: bump axios in cloud plugin

* chore: remove unnecessary ts error suppression

* chore: align docusaurus packages

* chore: yarn.lock

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Jamie Howard <jhoward1994@gmail.com>
2026-05-15 08:52:31 +01:00
Mark Kaylor 83fec11da9 Merge remote-tracking branch 'origin/main' into develop 2026-05-13 19:12:11 +02:00
markkaylor 7f34c4b7d9 release: 5.46.0 2026-05-13 13:39:32 +00:00
Andrei L b5452ab89f chore(eslint): migrate .eslintrc + .eslintignore to .eslintrc.cjs (#26216)
* chore(eslint): migrate .eslintrc + .eslintignore to .eslintrc.cjs

Consolidates the per-package ESLint setup into a single typed
`.eslintrc.cjs` file across the monorepo (177 files touched).

Why
- `.eslintignore` is removed in ESLint v9/v10. Folding ignore patterns
  into `ignorePatterns` inside the rc file is the supported migration
  path and unblocks future ESLint upgrades (which will likely be needed
  alongside the in-flight TypeScript 6 migration).
- `.cjs` extension is explicit about module format, so the configs keep
  working if any package later adopts `"type": "module"` (no CJS/ESM
  surprises).
- Wrapping each config in `// @ts-check` + a `Linter.Config`-typed
  `const config` block gives editor autocomplete and catches typos.
  Surfaced two real duplicates in
  `eslint-config-custom/back/typescript.js`
  (`node/no-unsupported-features/es-syntax`,
  `node/no-missing-import`), now deduplicated.
- `extends` references switched from the `custom/*` shorthand to the
  explicit `eslint-config-custom/*` package name. ESLint resolves both,
  but the explicit form makes the source unambiguous.
- Added `coverage/` to `ignorePatterns` so coverage output produced
  inside a workspace is not linted.

Misc
- `examples/kitchensink` had ESLint configured but no `lint` script;
  added one so the config actually runs.
- `nx.json` hash inputs updated:
  - removed `.eslintignore` (no longer exists)
  - replaced `{projectRoot}/.eslintrc.js` with
    `{projectRoot}/**/.eslintrc.cjs` so nested package configs are also
    part of the cache key (the previous glob missed them).
- `packages/utils/upgrade/tsconfig.eslint.json` include path updated
  from `.eslintrc.js` to `.eslintrc.cjs`.

Verification
- `eslint --print-config` resolves cleanly on sampled back/front
  packages (admin, users-permissions, upload).
- Full `pnpm -r lint` is clean.

* chore(eslint): set tsconfigRootDir for vscode-eslint typed linting

CLI lint resolved tsconfig paths via cwd, but vscode-eslint runs from
the workspace root and could not locate per-package tsconfigs. Set
parserOptions.tsconfigRootDir to __dirname in each package's
.eslintrc.cjs so the editor resolves typed-lint configs correctly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(eslint): self-ignore configs, scope coverage to jest packages

- Replace `env: { es6: true }` workaround with `.eslintrc.cjs` in
  ignorePatterns so eslint never lints the config file itself
  (root cause of the "const is not a keyword" parse error in es5)
- Add `.eslintrc.cjs` to ignorePatterns across all configs that
  were missing it
- Restrict `coverage/` ignorePatterns to workspace roots that
  actually run jest; drop from non-test packages and admin/server
  subdir configs (tests run from the workspace root)
2026-05-12 07:32:12 +00:00
Jamie Howard a2c5ecb225 Merge remote-tracking branch 'origin/main' into develop 2026-05-11 16:16:35 +01:00
jhoward1994 9300041094 release: 5.45.1 2026-05-11 10:41:36 +00:00
Andrei L 6d83054647 chore(deps): migrate msw 1.x → 2.13.4 across admin test suites (#26065)
* chore(deps): bump msw to 1.3.5 and typedoc to 0.25.13

Widens TypeScript peer ranges in msw (>= 4.4.x) and typedoc (adds 5.4.x),
unblocking a future bump to typescript 5.6 required by react-intl 7.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(deps): bump msw to 2.13.4 across admin test suites

Migrates 8 workspaces (admin, content-manager, content-releases, upload,
review-workflows, plugin-i18n, plugin-documentation, plugin-users-permissions)
from msw 1.3.5 to 2.13.4; bumps email's unused dep for consistency.

Handler changes:
- rest.X((req, res, ctx) => res(ctx.json(X))) → http.X(() => HttpResponse.json(X))
- res(ctx.status(N)) → new HttpResponse(null, { status: N })
- res.once(...) → http.X(path, handler, { once: true })
- res.networkError(...) → HttpResponse.error()
- await req.json<T>() / casts → http.METHOD<Params, Body>(...) generics
- RequestHandler → HttpHandler
- Empty 200 responses use HttpResponse.json({}) to avoid cross-realm
  SyntaxError instanceof check in getFetchClient.ts

Jest setup (per msw frequent-issues guide):
- jest-preset.front.js: customExportConditions: [''] so msw/node resolves
  under jsdom; .mjs swc transform; ESM allow-list for msw deps
  (rettime, @open-draft, outvariant, until-async, etc.)
- packages/admin-test-utils/src/environment.ts: polyfill Node fetch +
  streams + BroadcastChannel + URL into jsdom global. Blob/File/FormData
  intentionally left as jsdom's — Strapi app code threads them through
  jsdom-only APIs (FileReader, Image, HTMLFormElement) where realm matters.
  Comment in env.ts documents the trade-off.

Verified vs develop+msw@1.3.5 baseline: 0 net regressions across all 7
workspaces with msw test files; TypeScript clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Revert "chore(deps): bump typedoc to 0.25.13"

The typedoc bump was bundled with the msw 1.3.5 bump in 39d169cfbb but
isn't required for the msw v2 migration. Reverting the docs/ and
core/types typedoc dep back to 0.25.10 to keep this branch focused on
the msw upgrade.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(tests): type msw handler params via generics

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(tests): address review feedback on msw v2 migration

- env.ts: snapshot jsdom globals in setup(), restore in teardown() so
  per-test mutations cannot leak across files in a Jest worker.
- env.ts: collapse polyfill list and value map into a single NODE_GLOBALS
  source of truth; document the fetch trade-off (Node undici vs jsdom).
- handlers: replace `<never, Body>` generics with `<Record<string, never>,
  Body>` (msw v2 convention; `{}` blocked by ban-types).
- email: drop unused msw devDep entirely (zero source usage in workspace).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(tests): use realm-agnostic SyntaxError check; drop URL polyfill

Two follow-ups to the msw v2 migration:

- `getFetchClient.responseInterceptor` now matches `error?.name === 'SyntaxError'`
  rather than `instanceof SyntaxError`. Constructor identity differs across JS realms
  (under jsdom + Node fetch, an empty 200 throws a Node-realm `SyntaxError` that
  fails the jsdom-realm `instanceof` check; the same is true in browsers when the
  Response originates from a service worker / iframe). Name comparison is realm-
  agnostic. With this in place, empty 200 handlers can return `new HttpResponse()`
  again (closer to v1's `res(ctx.status(200))`) instead of the `HttpResponse.json({})`
  workaround.

- Drop `URL` / `URLSearchParams` from the env.ts polyfill list. jsdom already
  provides browser-spec versions, and Node's `URL.createObjectURL` only accepts
  Node-realm `Blob` — replacing it broke the "from computer" upload path in
  `LogoInput.tsx`. MSW v2's interceptor doesn't require these to come from Node.

env.ts comments restructured: all polyfill rationale lives in one top-of-file block
so the body is short and the trade-offs are documented in one place.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(tests): switch content-type-builder jest env to shared polyfilled env

`aiClient.test.ts` constructs `new Response(...)` which jsdom does not provide
spec-compliantly. Align CTB with the other admin test suites by using
`@strapi/admin-test-utils/environment`, which polyfills Node's
`fetch`/`Request`/`Response`/streams into the jsdom global.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(tests): make msw v2 + undici body + jsdom realms work together

Three regressions surfaced by running the full front test suite under
jsdom + Node's undici fetch polyfill:

1. `TypeError: Body is unusable: Body has already been read` in every
   handler doing `await request.json()`. MSW v2's `RequestHandler.run()`
   calls `request.clone()` before invoking the resolver (to keep a copy
   for post-hoc logging). Under Node's undici, `Request.clone()` tees the
   underlying `ReadableStream` and locks the original body, so the
   resolver's `.json()` throws. Fix in `environment.ts`: wrap the global
   `Request` constructor to stash the stringified body on every instance
   and patch `Request.prototype.json` / `.text` to return the stash when
   present. Handlers now get the body regardless of how many times msw
   clones internally.

2. `expect.any(Array)` and `toStrictEqual` failing with "serializes to
   the same string" against msw response bodies. `Response.prototype.json`
   runs Node's `JSON.parse`, so the resulting objects carry Node-realm
   `Object`/`Array` prototypes; jsdom's `instanceof`/strict-equality
   matchers reject them. Patch `Response.prototype.json` to parse with
   the jsdom-realm `JSON`.

3. `useWidgets > should handle network errors gracefully` expected the
   toast text "Network error", which msw v1's `res.networkError('Network
   error')` surfaced verbatim. v2's `HttpResponse.error()` drops the
   custom message and fetch throws `TypeError: Failed to fetch`; update
   the assertion accordingly.

Also: `UIDInput` uses `jest.useFakeTimers()`. Adding `doNotFake:
['queueMicrotask', 'setImmediate']` keeps per-test runtime at ~1s
instead of ~10s (plain fake timers stall undici's internal microtasks
between request emission and handler resolution), and an `afterEach`
restores real timers so a failing test cannot leak fake timers into
the next one.

Verified with `nx run-many --target=test:front --parallel=1` across all
12 projects — all suites green.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* test(admin): assert toast container in Widgets error tests

Replace text-match (`findByText('Server error' | 'Failed to fetch')`) with
`[data-sonner-toast]` container assertion. Decouples the test from toast
copy and from msw v1/v2 network-error message differences.

Addresses @jhoward1994's review comment on PR #26065.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* test(admin): assert toast text, scope msw handlers, use jsdom env

- Widgets tests: match actual toast text (Server error / fetch failure
  regex) instead of data-sonner-toast container.
- ConfirmBulkActionDialog: mark msw runtime handlers { once: true } so
  they do not leak across cases.
- content-type-builder: jest testEnvironment back to jsdom.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(tests): split jest env patches into modules

Refactor packages/admin-test-utils/src/environment.ts by extracting
the msw v2 + undici body + jsdom realm shims into dedicated modules
under src/patches/ (node-globals, request-body-stash,
response-json-realm, types).

Co-Authored-By: Jamie Howard <jhoward1994@gmail.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 08:45:04 +00:00
Bassel17 c5bc749fee release: 5.45.0 2026-05-06 10:06:46 +00:00
Adzouz 11554fe43e release: 5.44.0 2026-04-29 13:06:31 +00:00
nclsndr 14628987b5 release: 5.43.0 2026-04-22 14:30:40 +00:00
jhoward1994 4709832272 release: 5.42.1 2026-04-15 11:13:30 +00:00
markkaylor e86a5190a5 release: 5.42.0 2026-04-08 12:14:52 +00:00
Bassel17 5ae36e382d release: 5.41.1 2026-04-01 09:48:47 +00:00
Bassel17 967175a13b release: 5.41.0 2026-04-01 09:10:30 +00:00
Adzouz e1cdebd2a5 release: 5.40.0 2026-03-18 13:25:35 +00:00
Bassel17 243c96ff4a release: 5.39.0 2026-03-11 10:13:31 +00:00
Bassel17 cd12da721d release: 5.38.1 2026-03-11 09:56:28 +00:00
Ben Irvin a2be8c63d1 test(front): fix flaky tests (#25651)
* test: ignore not wrapped in act warnings

* test(front): fix waitfor
2026-03-05 15:36:30 +01:00
markkaylor 29f5741e96 release: 5.38.0 2026-03-04 13:09:53 +00:00
Bassel17 e7bb15d0fd release: 5.37.1 2026-02-26 14:50:27 +00:00
innerdvations c18dbf7892 release: 5.37.0 2026-02-26 08:27:53 +00:00
innerdvations 6187e8a9d7 release: 5.36.1 2026-02-18 14:16:09 +00:00
Mark Kaylor 9ecfab0e5d Merge branch 'main' of github.com:strapi/strapi into develop 2026-02-11 17:13:52 +01:00
Ben Irvin bf72b0ec43 security: update react-router (#25391) 2026-02-11 16:30:17 +01:00
markkaylor 23a521fab4 release: 5.36.0 2026-02-11 14:05:28 +00:00
Ben Irvin eac316c672 test(front): auto-wrap act; fix rerender with stable data router and auto-wrap act (#25410) 2026-02-10 17:56:47 +01:00
innerdvations ec17c9e1ed release: 5.35.0 2026-02-04 12:48:11 +00:00
markkaylor 47cff8e767 release: 5.34.0 2026-01-28 14:54:52 +00:00
Bassel17 2437d69089 release: 5.33.4 2026-01-21 11:43:11 +00:00
innerdvations 8cf09da6cf release: 5.33.3 2026-01-14 11:05:34 +00:00
markkaylor 4a8a5c9c88 release: 5.33.2 2026-01-08 08:47:12 +00:00
Bassel17 78aac892c9 release: 5.33.1 2025-12-29 09:43:19 +00:00
markkaylor 7bf3fdf9d5 release: 5.33.0 2025-12-17 13:10:40 +00:00
Rémi de Juvigny e520b8b062 enhancement: use sonner for notification rendering (#24792)
* enhancement: use sonner for notification rendering

* chore: pr feedback

* fix: snapshots

* fix: releases test

* fix: nps survey test

* fix: ignore act warnings for sonner

* Revert "fix: ignore act warnings for sonner"

This reverts commit ef4664d259.

* chore: update tests

* chore: add ignore act back

* chore: update snapshot

* chore: update snapshots

* chore: update uploda test

---------

Co-authored-by: Rémi de Juvigny <remidej@users.noreply.github.com>
Co-authored-by: Mark Kaylor <mark.kaylor@strapi.io>
2025-12-12 17:42:53 +01:00
innerdvations a54a83b36a release: 5.32.0 2025-12-10 15:12:24 +00:00
remidej a7b581af10 release: 5.31.3 2025-12-03 14:17:15 +00:00
innerdvations ddafab886c release: 5.31.2 2025-11-20 13:19:46 +00:00
markkaylor cb353c3cde release: 5.31.1 2025-11-19 13:34:00 +00:00
Bassel17 c48808e805 release: 5.31.0 2025-11-12 10:15:59 +00:00
Bassel Kanso 19187c080b chore: add support for node 24 (#24586) 2025-11-10 14:35:56 +02:00
remidej 7c6ac08a67 release: 5.30.1 2025-11-05 15:35:27 +00:00
Bassel17 9cb2f23261 release: 5.30.0 2025-10-30 10:10:06 +00:00
markkaylor 1b6df4d123 release: 5.29.0 2025-10-22 12:37:58 +00:00
innerdvations 7e1c015617 release: 5.28.0 2025-10-15 13:43:43 +00:00
remidej bceb3e0dd1 release: 5.27.0 2025-10-08 13:22:58 +00:00
Bassel17 5484bf09a5 release: 5.26.0 2025-10-06 14:49:36 +00:00
Bassel17 1dfedfe744 release: 5.25.0 2025-10-01 10:53:38 +00:00
Bassel17 69554ba294 release: 5.24.2 2025-09-29 15:07:09 +00:00