| env: |
| es6: true |
| |
| rules: |
| prefer-object-spread: error |
| no-buffer-constructor: error |
| no-mixed-operators: |
| - error |
| - groups: [['&&', '||']] |
| no-restricted-syntax: |
| # Config copied from .eslintrc.js |
| - error |
| - selector: CallExpression[callee.object.name='assert']:not([callee.property.name='ok']):not([callee.property.name='fail']):not([callee.property.name='ifError']) |
| message: Please only use simple assertions in ./lib |
| - selector: CallExpression[callee.name='setTimeout'][arguments.length<2] |
| message: setTimeout() must be invoked with at least two arguments. |
| - selector: CallExpression[callee.name='setInterval'][arguments.length<2] |
| message: setInterval() must be invoked with at least 2 arguments. |
| - selector: ThrowStatement > CallExpression[callee.name=/Error$/] |
| message: Use new keyword when throwing an Error. |
| # Config specific to lib |
| - selector: NewExpression[callee.name=/Error$/]:not([callee.name=/^(AssertionError|NghttpError|AbortError)$/]) |
| message: Use an error exported by the internal/errors module. |
| - selector: CallExpression[callee.object.name='Error'][callee.property.name='captureStackTrace'] |
| message: Please use `require('internal/errors').hideStackFrames()` instead. |
| - selector: AssignmentExpression:matches([left.name='prepareStackTrace'], [left.property.name='prepareStackTrace']) |
| message: Use 'overrideStackTrace' from 'lib/internal/errors.js' instead of 'Error.prepareStackTrace'. |
| - selector: ThrowStatement > NewExpression[callee.name=/^ERR_[A-Z_]+$/] > ObjectExpression:first-child:not(:has([key.name='message']):has([key.name='code']):has([key.name='syscall'])) |
| message: The context passed into SystemError constructor must have .code, .syscall and .message. |
| no-restricted-globals: |
| - error |
| - name: AbortController |
| message: Use `const { AbortController } = require('internal/abort_controller');` instead of the global. |
| - name: AbortSignal |
| message: Use `const { AbortSignal } = require('internal/abort_controller');` instead of the global. |
| # Atomics is not available in primordials because it can be |
| # disabled with --no-harmony-atomics CLI flag. |
| - name: Atomics |
| message: Use `const { Atomics } = globalThis;` instead of the global. |
| - name: Blob |
| message: Use `const { Blob } = require('buffer');` instead of the global. |
| - name: BroadcastChannel |
| message: Use `const { BroadcastChannel } = require('internal/worker/io');` instead of the global. |
| - name: Buffer |
| message: Use `const { Buffer } = require('buffer');` instead of the global. |
| - name: ByteLengthQueuingStrategy |
| message: Use `const { ByteLengthQueuingStrategy } = require('internal/webstreams/queuingstrategies')` instead of the global. |
| - name: CompressionStream |
| message: Use `const { CompressionStream } = require('internal/webstreams/compression')` instead of the global. |
| - name: CountQueuingStrategy |
| message: Use `const { CountQueuingStrategy } = require('internal/webstreams/queuingstrategies')` instead of the global. |
| - name: CustomEvent |
| message: Use `const { CustomEvent } = require('internal/event_target');` instead of the global. |
| - name: DecompressionStream |
| message: Use `const { DecompressionStream } = require('internal/webstreams/compression')` instead of the global. |
| - name: DOMException |
| message: Use lazy function `const { lazyDOMException } = require('internal/util');` instead of the global. |
| - name: Event |
| message: Use `const { Event } = require('internal/event_target');` instead of the global. |
| - name: EventTarget |
| message: Use `const { EventTarget } = require('internal/event_target');` instead of the global. |
| - name: FormData |
| message: Use `const { FormData } = require('internal/deps/undici/undici');` instead of the global. |
| - name: Headers |
| message: Use `const { Headers } = require('internal/deps/undici/undici');` instead of the global. |
| # Intl is not available in primordials because it can be |
| # disabled with --without-intl build flag. |
| - name: Intl |
| message: Use `const { Intl } = globalThis;` instead of the global. |
| - name: MessageChannel |
| message: Use `const { MessageChannel } = require('internal/worker/io');` instead of the global. |
| - name: MessageEvent |
| message: Use `const { MessageEvent } = require('internal/worker/io');` instead of the global. |
| - name: MessagePort |
| message: Use `const { MessagePort } = require('internal/worker/io');` instead of the global. |
| - name: ReadableStream |
| message: Use `const { ReadableStream } = require('internal/webstreams/readablestream')` instead of the global. |
| - name: ReadableStreamDefaultReader |
| message: Use `const { ReadableStreamDefaultReader } = require('internal/webstreams/readablestream')` instead of the global. |
| - name: ReadableStreamBYOBReader |
| message: Use `const { ReadableStreamBYOBReader } = require('internal/webstreams/readablestream')` instead of the global. |
| - name: ReadableStreamBYOBRequest |
| message: Use `const { ReadableStreamBYOBRequest } = require('internal/webstreams/readablestream')` instead of the global. |
| - name: ReadableByteStreamController |
| message: Use `const { ReadableByteStreamController } = require('internal/webstreams/readablestream')` instead of the global. |
| - name: ReadableStreamDefaultController |
| message: Use `const { ReadableStreamDefaultController } = require('internal/webstreams/readablestream')` instead of the global. |
| - name: Request |
| message: Use `const { Request } = require('internal/deps/undici/undici');` instead of the global. |
| - name: Response |
| message: Use `const { Response } = require('internal/deps/undici/undici');` instead of the global. |
| # ShadowRealm is not available in primordials because it can be |
| # disabled with --no-harmony-shadow-realm CLI flag. |
| - name: ShadowRealm |
| message: Use `const { ShadowRealm } = globalThis;` instead of the global. |
| # SharedArrayBuffer is not available in primordials because it can be |
| # disabled with --no-harmony-sharedarraybuffer CLI flag. |
| - name: SharedArrayBuffer |
| message: Use `const { SharedArrayBuffer } = globalThis;` instead of the global. |
| - name: TextDecoder |
| message: Use `const { TextDecoder } = require('internal/encoding');` instead of the global. |
| - name: TextDecoderStream |
| message: Use `const { TextDecoderStream } = require('internal/webstreams/encoding')` instead of the global. |
| - name: TextEncoder |
| message: Use `const { TextEncoder } = require('internal/encoding');` instead of the global. |
| - name: TextEncoderStream |
| message: Use `const { TextEncoderStream } = require('internal/webstreams/encoding')` instead of the global. |
| - name: TransformStream |
| message: Use `const { TransformStream } = require('internal/webstreams/transformstream')` instead of the global. |
| - name: TransformStreamDefaultController |
| message: Use `const { TransformStreamDefaultController } = require('internal/webstreams/transformstream')` instead of the global. |
| - name: URL |
| message: Use `const { URL } = require('internal/url');` instead of the global. |
| - name: URLSearchParams |
| message: Use `const { URLSearchParams } = require('internal/url');` instead of the global. |
| # WebAssembly is not available in primordials because it can be |
| # disabled with --jitless CLI flag. |
| - name: WebAssembly |
| message: Use `const { WebAssembly } = globalThis;` instead of the global. |
| - name: WritableStream |
| message: Use `const { WritableStream } = require('internal/webstreams/writablestream')` instead of the global. |
| - name: WritableStreamDefaultWriter |
| message: Use `const { WritableStreamDefaultWriter } = require('internal/webstreams/writablestream')` instead of the global. |
| - name: WritableStreamDefaultController |
| message: Use `const { WritableStreamDefaultController } = require('internal/webstreams/writablestream')` instead of the global. |
| - name: atob |
| message: Use `const { atob } = require('buffer');` instead of the global. |
| - name: btoa |
| message: Use `const { btoa } = require('buffer');` instead of the global. |
| - name: clearImmediate |
| message: Use `const { clearImmediate } = require('timers');` instead of the global. |
| - name: clearInterval |
| message: Use `const { clearInterval } = require('timers');` instead of the global. |
| - name: clearTimeout |
| message: Use `const { clearTimeout } = require('timers');` instead of the global. |
| - name: console |
| message: Use `const { console } = require('internal/console/global');` instead of the global. |
| - name: crypto |
| message: Use `const { crypto } = require('internal/crypto/webcrypto');` instead of the global. |
| - name: Crypto |
| message: Use `const { Crypto } = require('internal/crypto/webcrypto');` instead of the global. |
| - name: CryptoKey |
| message: Use `const { CryptoKey } = require('internal/crypto/webcrypto');` instead of the global. |
| - name: fetch |
| message: Use `const { fetch } = require('internal/deps/undici/undici');` instead of the global. |
| - name: global |
| message: Use `const { globalThis } = primordials;` instead of `global`. |
| - name: globalThis |
| message: Use `const { globalThis } = primordials;` instead of the global. |
| - name: performance |
| message: Use `const { performance } = require('perf_hooks');` instead of the global. |
| - name: queueMicrotask |
| message: Use `const { queueMicrotask } = require('internal/process/task_queues');` instead of the global. |
| - name: setImmediate |
| message: Use `const { setImmediate } = require('timers');` instead of the global. |
| - name: setInterval |
| message: Use `const { setInterval } = require('timers');` instead of the global. |
| - name: setTimeout |
| message: Use `const { setTimeout } = require('timers');` instead of the global. |
| - name: structuredClone |
| message: Use `const { structuredClone } = require('internal/structured_clone');` instead of the global. |
| - name: SubtleCrypto |
| message: Use `const { SubtleCrypto } = require('internal/crypto/webcrypto');` instead of the global. |
| # Custom rules in tools/eslint-rules |
| node-core/avoid-prototype-pollution: error |
| node-core/lowercase-name-for-primitive: error |
| node-core/non-ascii-character: error |
| node-core/no-array-destructuring: error |
| node-core/prefer-primordials: |
| - error |
| - name: AggregateError |
| - name: Array |
| - name: ArrayBuffer |
| - name: BigInt |
| - name: BigInt64Array |
| - name: BigUint64Array |
| - name: Boolean |
| - name: DataView |
| - name: Date |
| - name: decodeURI |
| - name: decodeURIComponent |
| - name: encodeURI |
| - name: encodeURIComponent |
| - name: escape |
| - name: eval |
| - name: Error |
| ignore: |
| - prepareStackTrace |
| - stackTraceLimit |
| - name: EvalError |
| - name: FinalizationRegistry |
| into: Safe |
| - name: Float32Array |
| - name: Float64Array |
| - name: Function |
| - name: Int16Array |
| - name: Int32Array |
| - name: Int8Array |
| - name: isFinite |
| into: Number |
| - name: isNaN |
| into: Number |
| - name: JSON |
| - name: Map |
| into: Safe |
| - name: Math |
| - name: Number |
| - name: Object |
| - name: parseFloat |
| into: Number |
| - name: parseInt |
| into: Number |
| - name: Proxy |
| - name: Promise |
| - name: RangeError |
| - name: ReferenceError |
| - name: Reflect |
| - name: RegExp |
| - name: Set |
| into: Safe |
| - name: String |
| - name: Symbol |
| - name: SyntaxError |
| - name: TypeError |
| - name: Uint16Array |
| - name: Uint32Array |
| - name: Uint8Array |
| - name: Uint8ClampedArray |
| - name: unescape |
| - name: URIError |
| - name: WeakMap |
| into: Safe |
| - name: WeakRef |
| into: Safe |
| - name: WeakSet |
| into: Safe |
| globals: |
| # Parameters passed to internal modules |
| require: false |
| process: false |
| exports: false |
| module: false |
| internalBinding: false |
| primordials: false |