[!WARNING] Based on swc which use compat-data from babel, maybe not as same as caniuse, check this issue for more details.
pnpm i esc-rs -D
Detect features with browserlist
import { detect } from 'esc-rs'
const result = detect({
filename: 'input.js',
code: 'const a = 1 ?? false',
browserslist: 'IE 11',
})
// result
// {
// features: {
// nullishCoalescing: true,
// ...
// }
// }
Will output <feature>: true
if <feature>
not support in current browserslist
.
If want to report code frame info
const result = detect({
filename: 'input.js',
code: 'const a = 1 ?? false',
browserslist: 'IE 11',
})
for (const detail of result.details) {
console.log(`Reason: ${detail.feature}`, code.slice(detail.s, detail.e))
}
-
filename
: string -
code
: string -
browserslist
: string
-
feature
: not support feature-name based on currentbrowserlists
. e.g.nullishCoalescing
-
s
: start char pos -
e
: end char pos -
ls
: start loc -
le
: end loc
unstable. Currently
details.{feature|s|e}
is required.
-
filename
: string -
details
-
feature
: not support feature-name based on currentbrowserlists
. e.g.nullishCoalescing
-
s
: start char pos -
e
: end char pos -
ls
: start loc -
le
: end loc
-
-
ls
: start loc -
le
: end loc -
source
: original filename
[!WARNING] Currently unable to check polyfill features, e.g.
Async iterators
. In swc it will injectcore-js
polyfills instead of transform