export default [ { languageOptions: { ecmaVersion: 2022, sourceType: `module`, globals: { console: `readonly`, performance: `readonly`, crypto: `readonly`, queueMicrotask: `readonly`, setTimeout: `readonly`, clearTimeout: `readonly`, setInterval: `readonly`, clearInterval: `readonly`, fetch: `readonly`, URL: `readonly`, URLSearchParams: `readonly`, Request: `readonly`, Response: `readonly`, Headers: `readonly`, AbortController: `readonly`, AbortSignal: `readonly`, Blob: `readonly`, File: `readonly`, Intl: `readonly`, TextDecoder: `readonly`, TextEncoder: `readonly`, ReadableStream: `readonly`, Event: `readonly`, EventTarget: `readonly`, CustomEvent: `readonly`, FormData: `readonly`, }, }, rules: { [`no-restricted-globals`]: [`error`, // window (browser) `alert`, `blur`, `confirm`, `event`, `find`, `focus`, `history`, `length`, `location`, `name`, `open`, `parent`, `print`, `prompt`, `scroll`, `self`, `status`, `stop`, `top`, // global (node) `root`, /* other */ `test`, /* These global functions are broken */ `isNaN`, `isFinite`, ], [`consistent-return`]: `error`, [`constructor-super`]: `error`, [`eqeqeq`]: [`error`, `always`, {null: `never`}], [`for-direction`]: `error`, [`no-async-promise-executor`]: `error`, [`no-case-declarations`]: `error`, [`no-class-assign`]: `error`, [`no-compare-neg-zero`]: `error`, [`no-cond-assign`]: `error`, [`no-const-assign`]: `error`, [`no-constant-condition`]: `error`, [`no-control-regex`]: `error`, [`no-debugger`]: `error`, [`no-delete-var`]: `error`, [`no-dupe-args`]: `error`, [`no-dupe-class-members`]: `error`, [`no-dupe-else-if`]: `error`, [`no-dupe-keys`]: `error`, [`no-duplicate-case`]: `error`, [`no-empty`]: [`error`, {allowEmptyCatch: true}], [`no-empty-character-class`]: `error`, [`no-empty-pattern`]: `error`, [`no-ex-assign`]: `error`, [`no-extra-boolean-cast`]: `error`, [`no-extra-semi`]: `error`, [`no-fallthrough`]: `error`, [`no-func-assign`]: `error`, [`no-global-assign`]: `error`, [`no-import-assign`]: `error`, [`no-inner-declarations`]: `error`, [`no-invalid-regexp`]: `error`, [`no-irregular-whitespace`]: `error`, [`no-misleading-character-class`]: `error`, [`no-mixed-spaces-and-tabs`]: `error`, [`no-new-symbol`]: `error`, [`no-obj-calls`]: `error`, [`no-octal`]: `error`, [`no-prototype-builtins`]: `error`, [`no-redeclare`]: `error`, [`no-regex-spaces`]: `error`, [`no-self-assign`]: `error`, [`no-setter-return`]: `error`, [`no-shadow-restricted-names`]: `error`, [`no-sparse-arrays`]: `error`, [`no-this-before-super`]: `error`, [`no-undef`]: `error`, [`no-unexpected-multiline`]: `error`, [`no-unreachable`]: `error`, [`no-unsafe-finally`]: `error`, [`no-unsafe-negation`]: `error`, [`no-unused-expressions`]: `error`, [`no-unused-labels`]: `error`, [`no-unused-vars`]: [`error`, { args: `all`, argsIgnorePattern: `^_`, varsIgnorePattern: `^_`, }], [`no-useless-catch`]: `error`, [`no-useless-escape`]: `error`, [`no-warning-comments`]: [`error`, {location: `anywhere`, terms: [`F`+`I`+`X`+`M`+`E`]}], [`no-with`]: `error`, [`object-curly-spacing`]: [`error`, `never`], [`require-yield`]: `error`, [`semi`]: [`error`, `never`], [`use-isnan`]: `error`, [`valid-typeof`]: `error`, // Doesn't work properly. // [`quotes`]: [`error`, `backtick`], /* There used to be a time and place for this rule. However, it can also lead to pitfalls. There are cases when separating a context object from a method is correct and useful, and enforcing "no this" can lead to mistakes, such as accidentally closuring an object which is meant to be referenced weakly via `WeakRef`. */ // [`no-invalid-this`]: [`error`, {capIsConstructor: false}], }, }, { files: [`test/*.mjs`, `doc/*.mjs`], languageOptions: {ecmaVersion: 2026}, }, ]