Skip to content
NewBun 1.4.5 is out. Release notes
AphrodyBun

Linter · Rules

unicorn/no-invalid-fetch-options

Disallow a body in fetch() and new Request() when the method is GET or HEAD

A GET or HEAD request can't have a body. If you give it one, new Request() throws a TypeError and fetch() rejects with one. The method defaults to GET, so the usual cause is a forgotten method: "POST".

Configure

Off by default. To turn it on:

bunfig.toml
[lint.rules]
"unicorn/no-invalid-fetch-options" = "error" # or "warn"

Examples

Reported:

function createUser(user) {
  return fetch("/api/users", {
    body: JSON.stringify(user),
  });
}
const request = new Request("/api/users", {
  method: "HEAD",
  body: "name=Ada",
});

Not reported:

function createUser(user) {
  return fetch("/api/users", {
    method: "POST",
    body: JSON.stringify(user),
  });
}

A body of undefined or null is allowed. The rule also stays quiet when it can't tell what the method or the options are, for example when the object has a spread:

fetch("/api/users", { body: undefined });
fetch("/api/users", { ...defaults, body: "name=Ada" });
fetch("/api/users", { method: getMethod(), body: "name=Ada" });