fix: reduce global DOM/Node type conflicts in server-only packages (#12737)

Currently, we globally enable both DOM and Node.js types. While this
mostly works, it can cause conflicts - particularly with `fetch`. For
example, TypeScript may incorrectly allow browser-only properties (like
`cache`) and reject valid Node.js ones like `dispatcher`.

This PR disables DOM types for server-only packages like payload,
ensuring Node-specific typings are applied. This caught a few instances
of incorrect fetch usage that were previously masked by overlapping DOM
types.

This is not a perfect solution - packages that contain both server and
client code (like richtext-lexical or next) will still suffer from this
issue. However, it's an improvement in cases where we can cleanly
separate server and client types, like for the `payload` package which
is server-only.

## Use-case

This change enables https://github.com/payloadcms/payload/pull/12622 to
explore using node-native fetch + `dispatcher`, instead of `node-fetch`
+ `agent`.

Currently, it will incorrectly report that `dispatcher` is not a valid
property for node-native fetch
This commit is contained in:
Alessio Gravili
2025-06-11 13:59:19 -07:00
committed by GitHub
parent 018317dfba
commit 67fb29b2a4
43 changed files with 205 additions and 187 deletions

View File

@@ -41,7 +41,10 @@ export const getStaticHandler = (
}
const response = await fetch(`${fileUrl}?${uploadedAtString}`, {
cache: 'no-store',
headers: {
'Cache-Control': 'no-store, no-cache, must-revalidate',
Pragma: 'no-cache',
},
})
const blob = await response.blob()

View File

@@ -1,4 +1,8 @@
{
"extends": "../../tsconfig.base.json",
"references": [{ "path": "../payload" }, { "path": "../plugin-cloud-storage" }]
"references": [{ "path": "../payload" }, { "path": "../plugin-cloud-storage" }],
"compilerOptions": {
// Do not include DOM and DOM.Iterable as this is a server-only package.
"lib": ["ES2022"],
}
}