Skip to content
NewBun 1.4.5 is out. Release notes
AphrodyBun

Linter · Rules

promise/spec-only

Disallow Promise static methods that are not part of the language

Libraries such as Bluebird add methods like Promise.map and Promise.props. The built-in Promise doesn't have them, so the call throws a TypeError wherever the library's Promise isn't the one in scope.

The rule allows all, allSettled, any, race, reject, resolve, try and withResolvers. It reports every other property read from Promise, called or not. That includes Promise.prototype.

Configure

Off by default. To turn it on:

bunfig.toml
[lint.rules]
"promise/spec-only" = "error" # or "warn"

Every option, set to its default:

bunfig.toml
[lint.rules]
"promise/spec-only" = ["error", {
  allowedMethods = [], # list of strings
}]

Examples

Reported:

const pages = await Promise.map(urls, url => fetch(url));
const then = Promise.prototype.then;

Not reported:

const pages = await Promise.all(urls.map(url => fetch(url)));

Options

OptionDefaultWhat it does
allowedMethods[]More names to allow, for example from a polyfill. Names are case-sensitive.
const pages = await Promise.map(urls, url => fetch(url));
const then = Promise.prototype.then;
const user = await Promise.props({ profile: loadProfile(), orders: loadOrders() });