feat!: bump minimum typescript version to 6.0.3#16692
Merged
Merged
Conversation
Contributor
📦 esbuild Bundle Analysis for payloadThis analysis was generated by esbuild-bundle-analyzer. 🤖
Largest pathsThese visualization shows top 20 largest paths in the bundle.Meta file: packages/next/meta_index.json, Out file: esbuild/index.js
Meta file: packages/payload/meta_index.json, Out file: esbuild/index.js
Meta file: packages/payload/meta_shared.json, Out file: esbuild/exports/shared.js
Meta file: packages/richtext-lexical/meta_client.json, Out file: esbuild/exports/client_optimized/index.js
Meta file: packages/ui/meta_client.json, Out file: esbuild/exports/client_optimized/index.js
Meta file: packages/ui/meta_shared.json, Out file: esbuild/exports/shared_optimized/index.js
DetailsNext to the size is how much the size has increased or decreased compared with the base branch of this PR.
|
paulpopus
approved these changes
May 20, 2026
DanRibbens
reviewed
May 22, 2026
DanRibbens
left a comment
Contributor
There was a problem hiding this comment.
Does this need to be added to the migration guide?
AlessioGr
added a commit
that referenced
this pull request
May 22, 2026
Adds all breaking changes docs from my own PRs to the v4 migration doc. | PR | Breaking change | Merged | In v4 migration doc | |----|-----------------|--------|---------------------| | [#16359](#16359) | `feat!` Deleted `@payloadcms/richtext-slate` — Lexical is now the only supported rich text editor | 2026-04-23 | ✅ Added (was missing) | | [#16414](#16414) | `feat!` Removed deprecated `jobs.depth` and `jobs.runHooks` config options | 2026-04-28 | ✅ Added (was missing) | | [#16416](#16416) | `feat!` Removed deprecated `state: 'failed'`/`'succeeded'` job task return shape | 2026-05-01 | ✅ Added (was missing) | | [#16537](#16537) | `feat!` Bumped minimum Next.js version to 16.2.6 | 2026-05-07 | ✅ Added (was missing) | | [#16540](#16540) | `feat!` Bumped minimum Node.js version to 24.15.0 | 2026-05-08 | ✅ Added (was missing) | | [#16546](#16546) | `feat!` Removed croner `sloppyRanges` compatibility setting (stricter cron parsing) | 2026-05-08 | ✅ Added (was missing) | | [#16547](#16547) | `feat!` Removed deprecated `min`/`max` from `relationship`/`upload` fields | 2026-05-08 | ✅ Added (was missing) | | [#16548](#16548) | `feat(richtext-lexical)!` Removed deprecated `HTMLConverterFeature` / `lexicalHTML` | 2026-05-11 | ✅ Added (was missing) | | [#16692](#16692) | `feat!` Bumped minimum TypeScript version to 6.0.3 | 2026-05-20 | ✅ Added (was missing) | | [#16693](#16693) | `refactor!` Removed `allowLocalizedWithinLocalized` compat flag + `PAYLOAD_DO_NOT_SANITIZE_LOCALIZED_PROPERTY` env var | 2026-05-21 | ✅ Added (was missing) |
r1tsuu
added a commit
that referenced
this pull request
Jun 3, 2026
Specs introduced in the tanstack-start branch use bare-specifier imports like
`__helpers/e2e/copyPasteField.js` and `__helpers/e2e/playwright.js`. They've
been failing across both [next] and [tanstack-start] E2E shards with:
Error: Cannot find package '__helpers' imported from
test/fields/collections/Array/e2e.spec.ts
The TypeScript 6 bump (#16692) dropped `baseUrl` and `rootDir` from
`test/tsconfig.json`, and the only `paths` entry left was `@payload-config`,
so Playwright's resolver (which honours tsconfig paths since 1.31) had
nothing to map `__helpers` against and fell through to Node's bare-specifier
resolver — which throws.
Restore `baseUrl: "."`, add an explicit `__helpers/*` -> `./__helpers/*`
mapping, and silence the TS 6.0 baseUrl deprecation with
`ignoreDeprecations: "6.0"` to match the rest of the monorepo.
denolfe
added a commit
that referenced
this pull request
Jun 5, 2026
# Overview The `build-and-test-templates` CI job was disabled while 4.x breaking changes landed, so the templates drifted and no longer build against current core packages. This updates each template to the new 4.x APIs so they build again. CI for the re-enabled job: [#16880](#16880). ## Key Changes - **Storage adapters moved from `plugins` to `storage`** - 4.x initializes storage adapters from a top-level `storage` array instead of `plugins` (#16596). `vercelBlobStorage` / `r2Storage` calls were relocated in `with-vercel-mongodb`, `with-vercel-postgres`, `with-vercel-website`, and `with-cloudflare-d1`. This was the source of the `TypeError: plugin is not a function` failures. Applied with `@payloadcms/codemod`'s `migrate-storage-adapters-to-config`. - **Import maps point at `@payloadcms/ui` instead of removed `@payloadcms/next` subpaths** - The `@payloadcms/next/rsc` and `@payloadcms/next/client` subpaths were removed; generated import maps now reference `@payloadcms/ui/rsc` and `@payloadcms/ui`. Applied with `@payloadcms/codemod`'s `migrate-next-subpath-exports` across all templates. - **Bare `src/` imports replaced with the `@/` path alias** - Website-based templates imported from `src/...`, which no longer resolves under Turbopack. Switched to the configured `@/` alias (maps to `./src/*`). - **Slug generic dropped on `Pages` / `Posts` (TypeScript 6 regression workaround)** - The documented `CollectionConfig<'pages'>` + `defaultPopulate` pattern compiled under TypeScript 5.7 (3.x) but not under TypeScript 6.0.3 (the #16692 bump): the generated select interface is no longer assignable to the `SelectType` that the `collections` array element expects. Dropping the generic lets `defaultPopulate` fall back to `SelectType` so the templates build, at the cost of field-name checking on `defaultPopulate`. This is a core type regression that affects any 4.x project using the pattern under TS 6, so the real fix belongs in core; the templates carry a commented workaround to be reverted once that lands. ## Design Decisions Most changes were applied with `@payloadcms/codemod` rather than by hand, so the same transforms users will run produce the same result. Import maps are left as the minimal subpath rewrite rather than a full local regeneration, since `payload build` regenerates them during the build. Scope is template builds. All six matrix templates build with packed local packages, verified locally via `script:pack --all` + `build-template-with-local-pkgs`. The remaining E2E failures on `blank` and `website` (`chunk.reason.enqueueModel is not a function` when loading the admin under `next dev`) are a pre-existing runtime issue, present before this change and unrelated to the build fixes. Only the workspace templates (`blank`, `website`, `ecommerce`) run E2E in this job; `pnpm --filter` does not match the non-workspace templates, so their E2E and int steps currently no-op. --- - To see the specific tasks where the Asana app for GitHub is being used, see below: - https://app.asana.com/0/0/1215426886664378
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
BREAKING: The minimum supported typescript version is now 6.0.3. This means that payload types are not guaranteed to work on lower typescript versions.
As part of this PR, a bunch of invalid imports within our test suites that relied on
baseURLhave been migrated. The issue where imports from payload show up as errors has also been fixed: