From e98dde5579ce5b5bc5fcc8cc7250e0d16c60e782 Mon Sep 17 00:00:00 2001 From: scagood <2230835+scagood@users.noreply.github.com> Date: Fri, 9 Feb 2024 13:01:32 +0000 Subject: [PATCH] feat: Hook up updated builtins --- .../no-unsupported-features/node-builtins.js | 328 +----------------- .../assert.js | 2 + .../async_hooks.js | 2 + .../buffer.js | 2 + .../child_process.js | 2 + .../cluster.js | 2 + .../console.js | 2 + .../crypto.js | 2 + .../dgram.js | 2 + .../diagnostics_channel.js | 2 + .../dns.js | 2 + .../domain.js | 2 + .../events.js | 3 + .../fs.js | 7 + .../http.js | 2 + .../http2.js | 2 + .../https.js | 2 + .../inspector.js | 5 + .../module.js | 10 +- .../net.js | 2 + .../os.js | 2 + .../path.js | 2 + .../perf_hooks.js | 2 + .../process.js | 2 + .../punycode.js | 2 + .../querystring.js | 2 + .../readline.js | 3 + .../stream.js | 6 + .../string_decoder.js | 2 + .../test.js | 2 + .../timers.js | 3 + .../tls.js | 2 + .../trace_events.js | 2 + .../tty.js | 2 + .../url.js | 2 + .../util.js | 4 + .../v8.js | 2 + .../vm.js | 2 + .../wasi.js | 2 + .../worker_threads.js | 2 + .../zlib.js | 2 + lib/unsupported-features/node-builtins.js | 45 +++ lib/unsupported-features/types.js | 14 + lib/util/check-unsupported-builtins.js | 2 +- lib/util/enumerate-property-names.js | 47 ++- 45 files changed, 197 insertions(+), 344 deletions(-) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/assert.js (94%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/async_hooks.js (91%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/buffer.js (94%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/child_process.js (86%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/cluster.js (89%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/console.js (93%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/crypto.js (97%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/dgram.js (77%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/diagnostics_channel.js (89%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/dns.js (96%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/domain.js (75%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/events.js (91%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/fs.js (96%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/http.js (91%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/http2.js (92%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/https.js (83%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/inspector.js (82%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/module.js (81%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/net.js (91%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/os.js (93%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/path.js (93%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/perf_hooks.js (91%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/process.js (97%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/punycode.js (83%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/querystring.js (84%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/readline.js (88%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/stream.js (85%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/string_decoder.js (77%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/test.js (93%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/timers.js (90%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/tls.js (92%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/trace_events.js (79%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/tty.js (79%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/url.js (90%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/util.js (96%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/v8.js (95%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/vm.js (88%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/wasi.js (69%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/worker_threads.js (93%) rename lib/unsupported-features/{node-builtins => node-builtins-modules}/zlib.js (95%) create mode 100644 lib/unsupported-features/node-builtins.js create mode 100644 lib/unsupported-features/types.js diff --git a/lib/rules/no-unsupported-features/node-builtins.js b/lib/rules/no-unsupported-features/node-builtins.js index 32def045..4201b4f2 100644 --- a/lib/rules/no-unsupported-features/node-builtins.js +++ b/lib/rules/no-unsupported-features/node-builtins.js @@ -11,7 +11,11 @@ const { } = require("../../util/check-unsupported-builtins") const enumeratePropertyNames = require("../../util/enumerate-property-names") const getConfiguredNodeVersion = require("../../util/get-configured-node-version") -const extendTrackMapWithNodePrefix = require("../../util/extend-trackmap-with-node-prefix") +// const extendTrackMapWithNodePrefix = require("../../util/extend-trackmap-with-node-prefix") + +const { + NodeBuiltinModules, +} = require("../../unsupported-features/node-builtins.js") const trackMap = { globals: { @@ -24,325 +28,7 @@ const trackMap = { }, }, }, - modules: { - assert: { - strict: { - [READ]: { supported: ["9.9.0", "8.13.0"] }, - doesNotReject: { [READ]: { supported: ["10.0.0"] } }, - rejects: { [READ]: { supported: ["10.0.0"] } }, - }, - deepStrictEqual: { [READ]: { supported: ["4.0.0"] } }, - doesNotReject: { [READ]: { supported: ["10.0.0"] } }, - notDeepStrictEqual: { [READ]: { supported: ["4.0.0"] } }, - rejects: { [READ]: { supported: ["10.0.0"] } }, - CallTracker: { - [READ]: { supported: null, experimental: "14.2.0" }, - }, - }, - async_hooks: { - [READ]: { supported: ["8.0.0"] }, - createHook: { [READ]: { supported: ["8.1.0"] } }, - AsyncLocalStorage: { - [READ]: { supported: ["13.10.0", "12.17.0"] }, - }, - }, - buffer: { - Buffer: { - alloc: { [READ]: { supported: ["4.5.0"] } }, - allocUnsafe: { [READ]: { supported: ["4.5.0"] } }, - allocUnsafeSlow: { [READ]: { supported: ["4.5.0"] } }, - from: { [READ]: { supported: ["4.5.0"] } }, - }, - kMaxLength: { [READ]: { supported: ["3.0.0"] } }, - transcode: { [READ]: { supported: ["7.1.0"] } }, - constants: { [READ]: { supported: ["8.2.0"] } }, - Blob: { [READ]: { supported: null, experimental: "15.7.0" } }, - }, - child_process: { - ChildProcess: { [READ]: { supported: ["2.2.0"] } }, - }, - console: { - clear: { [READ]: { supported: ["8.3.0", "6.13.0"] } }, - count: { [READ]: { supported: ["8.3.0", "6.13.0"] } }, - countReset: { - [READ]: { supported: ["8.3.0", "6.13.0"] }, - }, - debug: { [READ]: { supported: ["8.0.0"] } }, - dirxml: { [READ]: { supported: ["8.0.0"] } }, - group: { [READ]: { supported: ["8.5.0"] } }, - groupCollapsed: { [READ]: { supported: ["8.5.0"] } }, - groupEnd: { [READ]: { supported: ["8.5.0"] } }, - table: { [READ]: { supported: ["10.0.0"] } }, - markTimeline: { [READ]: { supported: ["8.0.0"] } }, - profile: { [READ]: { supported: ["8.0.0"] } }, - profileEnd: { [READ]: { supported: ["8.0.0"] } }, - timeLog: { [READ]: { supported: ["10.7.0"] } }, - timeStamp: { [READ]: { supported: ["8.0.0"] } }, - timeline: { [READ]: { supported: ["8.0.0"] } }, - timelineEnd: { [READ]: { supported: ["8.0.0"] } }, - }, - crypto: { - Certificate: { - exportChallenge: { [READ]: { supported: ["9.0.0"] } }, - exportPublicKey: { [READ]: { supported: ["9.0.0"] } }, - verifySpkac: { [READ]: { supported: ["9.0.0"] } }, - }, - ECDH: { [READ]: { supported: ["8.8.0", "6.13.0"] } }, - KeyObject: { [READ]: { supported: ["11.6.0"] } }, - createPrivateKey: { [READ]: { supported: ["11.6.0"] } }, - createPublicKey: { [READ]: { supported: ["11.6.0"] } }, - createSecretKey: { [READ]: { supported: ["11.6.0"] } }, - constants: { [READ]: { supported: ["6.3.0"] } }, - fips: { [READ]: { supported: ["6.0.0"] } }, - generateKeyPair: { [READ]: { supported: ["10.12.0"] } }, - generateKeyPairSync: { [READ]: { supported: ["10.12.0"] } }, - getCurves: { [READ]: { supported: ["2.3.0"] } }, - getFips: { [READ]: { supported: ["10.0.0"] } }, - privateEncrypt: { [READ]: { supported: ["1.1.0"] } }, - publicDecrypt: { [READ]: { supported: ["1.1.0"] } }, - randomFillSync: { - [READ]: { supported: ["7.10.0", "6.13.0"] }, - }, - randomFill: { - [READ]: { supported: ["7.10.0", "6.13.0"] }, - }, - scrypt: { [READ]: { supported: ["10.5.0"] } }, - scryptSync: { [READ]: { supported: ["10.5.0"] } }, - setFips: { [READ]: { supported: ["10.0.0"] } }, - sign: { [READ]: { supported: ["12.0.0"] } }, - timingSafeEqual: { [READ]: { supported: ["6.6.0"] } }, - verify: { [READ]: { supported: ["12.0.0"] } }, - }, - dns: { - Resolver: { [READ]: { supported: ["8.3.0"] } }, - resolvePtr: { [READ]: { supported: ["6.0.0"] } }, - promises: { - [READ]: { - supported: ["11.14.0", "10.17.0"], - experimental: "10.6.0", - }, - }, - }, - events: { - EventEmitter: { - once: { - [READ]: { supported: ["11.13.0", "10.16.0"] }, - }, - }, - once: { [READ]: { supported: ["11.13.0", "10.16.0"] } }, - }, - fs: { - Dirent: { [READ]: { supported: ["10.10.0"] } }, - copyFile: { [READ]: { supported: ["8.5.0"] } }, - copyFileSync: { [READ]: { supported: ["8.5.0"] } }, - mkdtemp: { [READ]: { supported: ["5.10.0"] } }, - mkdtempSync: { [READ]: { supported: ["5.10.0"] } }, - realpath: { - native: { [READ]: { supported: ["9.2.0"] } }, - }, - realpathSync: { - native: { [READ]: { supported: ["9.2.0"] } }, - }, - promises: { - [READ]: { - supported: ["11.14.0", "10.17.0"], - experimental: "10.1.0", - }, - }, - writev: { [READ]: { supported: ["12.9.0"] } }, - writevSync: { [READ]: { supported: ["12.9.0"] } }, - readv: { - [READ]: { supported: ["13.13.0", "12.17.0"] }, - }, - readvSync: { - [READ]: { supported: ["13.13.0", "12.17.0"] }, - }, - lutimes: { - [READ]: { supported: ["14.5.0", "12.19.0"] }, - }, - lutimesSync: { - [READ]: { supported: ["14.5.0", "12.19.0"] }, - }, - opendir: { - [READ]: { supported: ["12.12.0"] }, - }, - opendirSync: { - [READ]: { supported: ["12.12.0"] }, - }, - rm: { - [READ]: { supported: ["14.14.0"] }, - }, - rmSync: { - [READ]: { supported: ["14.14.0"] }, - }, - read: { - [READ]: { supported: ["13.11.0", "12.17.0"] }, - }, - readSync: { - [READ]: { supported: ["13.11.0", "12.17.0"] }, - }, - Dir: { - [READ]: { supported: ["12.12.0"] }, - }, - StatWatcher: { - [READ]: { supported: ["14.3.0", "12.20.0"] }, - }, - }, - "fs/promises": { - [READ]: { - supported: ["14.0.0"], - }, - }, - http2: { - [READ]: { - supported: ["10.10.0", "8.13.0"], - experimental: "8.4.0", - }, - }, - inspector: { - [READ]: { supported: null, experimental: "8.0.0" }, - }, - module: { - Module: { - builtinModules: { - [READ]: { - supported: ["9.3.0", "6.13.0", "8.10.0"], - }, - }, - createRequireFromPath: { [READ]: { supported: ["10.12.0"] } }, - createRequire: { [READ]: { supported: ["12.2.0"] } }, - syncBuiltinESMExports: { [READ]: { supported: ["12.12.0"] } }, - }, - builtinModules: { - [READ]: { - supported: ["9.3.0", "6.13.0", "8.10.0"], - }, - }, - createRequireFromPath: { [READ]: { supported: ["10.12.0"] } }, - createRequire: { [READ]: { supported: ["12.2.0"] } }, - syncBuiltinESMExports: { [READ]: { supported: ["12.12.0"] } }, - }, - os: { - constants: { - [READ]: { supported: ["6.3.0"] }, - priority: { [READ]: { supported: ["10.10.0"] } }, - }, - getPriority: { [READ]: { supported: ["10.10.0"] } }, - homedir: { [READ]: { supported: ["2.3.0"] } }, - setPriority: { [READ]: { supported: ["10.10.0"] } }, - userInfo: { [READ]: { supported: ["6.0.0"] } }, - }, - path: { - toNamespacedPath: { [READ]: { supported: ["9.0.0"] } }, - }, - perf_hooks: { - [READ]: { supported: ["8.5.0"] }, - monitorEventLoopDelay: { [READ]: { supported: ["11.10.0"] } }, - }, - process: { - allowedNodeEnvironmentFlags: { [READ]: { supported: ["10.10.0"] } }, - argv0: { [READ]: { supported: ["6.4.0"] } }, - channel: { [READ]: { supported: ["7.1.0"] } }, - cpuUsage: { [READ]: { supported: ["6.1.0"] } }, - emitWarning: { [READ]: { supported: ["6.0.0"] } }, - getegid: { [READ]: { supported: ["2.0.0"] } }, - geteuid: { [READ]: { supported: ["2.0.0"] } }, - hasUncaughtExceptionCaptureCallback: { - [READ]: { supported: ["9.3.0"] }, - }, - hrtime: { - bigint: { [READ]: { supported: ["10.7.0"] } }, - }, - ppid: { - [READ]: { - supported: ["9.2.0", "6.13.0", "8.10.0"], - }, - }, - release: { [READ]: { supported: ["3.0.0"] } }, - report: { - [READ]: { supported: ["14.0.0"], experimental: "11.8.0" }, - }, - resourceUsage: { [READ]: { supported: ["12.6.0"] } }, - setegid: { [READ]: { supported: ["2.0.0"] } }, - seteuid: { [READ]: { supported: ["2.0.0"] } }, - setUncaughtExceptionCaptureCallback: { - [READ]: { supported: ["9.3.0"] }, - }, - stdout: { - getColorDepth: { [READ]: { supported: ["9.9.0"] } }, - hasColor: { [READ]: { supported: ["11.13.0"] } }, - }, - stderr: { - getColorDepth: { [READ]: { supported: ["9.9.0"] } }, - hasColor: { [READ]: { supported: ["11.13.0"] } }, - }, - }, - stream: { - Readable: { - from: { - [READ]: { supported: ["12.3.0", "10.17.0"] }, - }, - }, - finished: { [READ]: { supported: ["10.0.0"] } }, - pipeline: { [READ]: { supported: ["10.0.0"] } }, - }, - trace_events: { - [READ]: { supported: ["10.0.0"] }, - }, - url: { - URL: { [READ]: { supported: ["7.0.0", "6.13.0"] } }, - URLSearchParams: { - [READ]: { supported: ["7.5.0", "6.13.0"] }, - }, - domainToASCII: { [READ]: { supported: ["7.4.0"] } }, - domainToUnicode: { [READ]: { supported: ["7.4.0"] } }, - }, - util: { - callbackify: { [READ]: { supported: ["8.2.0"] } }, - formatWithOptions: { [READ]: { supported: ["10.0.0"] } }, - getSystemErrorName: { - [READ]: { supported: ["9.7.0", "8.12.0"] }, - }, - inspect: { - custom: { [READ]: { supported: ["6.6.0"] } }, - defaultOptions: { [READ]: { supported: ["6.4.0"] } }, - replDefaults: { [READ]: { supported: ["11.12.0"] } }, - }, - isDeepStrictEqual: { [READ]: { supported: ["9.0.0"] } }, - promisify: { [READ]: { supported: ["8.0.0"] } }, - TextDecoder: { - [READ]: { supported: ["8.9.0"], experimental: "8.3.0" }, - }, - TextEncoder: { - [READ]: { supported: ["8.9.0"], experimental: "8.3.0" }, - }, - types: { - [READ]: { supported: ["10.0.0"] }, - isBoxedPrimitive: { [READ]: { supported: ["10.11.0"] } }, - }, - }, - v8: { - [READ]: { supported: ["1.0.0"] }, - DefaultDeserializer: { [READ]: { supported: ["8.0.0"] } }, - DefaultSerializer: { [READ]: { supported: ["8.0.0"] } }, - Deserializer: { [READ]: { supported: ["8.0.0"] } }, - Serializer: { [READ]: { supported: ["8.0.0"] } }, - cachedDataVersionTag: { [READ]: { supported: ["8.0.0"] } }, - deserialize: { [READ]: { supported: ["8.0.0"] } }, - getHeapCodeStatistics: { [READ]: { supported: ["12.8.0"] } }, - getHeapSnapshot: { [READ]: { supported: ["11.13.0"] } }, - getHeapSpaceStatistics: { [READ]: { supported: ["6.0.0"] } }, - serialize: { [READ]: { supported: ["8.0.0"] } }, - writeHeapSnapshot: { [READ]: { supported: ["11.13.0"] } }, - }, - vm: { - Module: { [READ]: { supported: ["9.6.0"] } }, - compileFunction: { [READ]: { supported: ["10.10.0"] } }, - }, - worker_threads: { - [READ]: { supported: ["12.11.0"], experimental: "10.5.0" }, - }, - }, + modules: NodeBuiltinModules, } Object.assign(trackMap.globals, { Buffer: trackMap.modules.buffer.Buffer, @@ -366,7 +52,7 @@ Object.assign(trackMap.globals, { process: trackMap.modules.process, }) -trackMap.modules = extendTrackMapWithNodePrefix(trackMap.modules) +// trackMap.modules = extendTrackMapWithNodePrefix(trackMap.modules) module.exports = { meta: { diff --git a/lib/unsupported-features/node-builtins/assert.js b/lib/unsupported-features/node-builtins-modules/assert.js similarity index 94% rename from lib/unsupported-features/node-builtins/assert.js rename to lib/unsupported-features/node-builtins-modules/assert.js index b5d99048..7584c0d3 100644 --- a/lib/unsupported-features/node-builtins/assert.js +++ b/lib/unsupported-features/node-builtins-modules/assert.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const assert = { assert: { [READ]: { supported: ["0.5.9"] } }, deepEqual: { [READ]: { supported: ["0.1.21"] } }, @@ -42,6 +43,7 @@ assert.strict = { ...assert, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { assert: { [READ]: { supported: ["0.1.21"] }, diff --git a/lib/unsupported-features/node-builtins/async_hooks.js b/lib/unsupported-features/node-builtins-modules/async_hooks.js similarity index 91% rename from lib/unsupported-features/node-builtins/async_hooks.js rename to lib/unsupported-features/node-builtins-modules/async_hooks.js index b73b6def..0048b57e 100644 --- a/lib/unsupported-features/node-builtins/async_hooks.js +++ b/lib/unsupported-features/node-builtins-modules/async_hooks.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const async_hooks = { createHook: { [READ]: { experimental: ["8.1.0"] } }, executionAsyncResource: { [READ]: { experimental: ["13.9.0", "12.17.0"] } }, @@ -22,6 +23,7 @@ const async_hooks = { }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { async_hooks: { [READ]: { diff --git a/lib/unsupported-features/node-builtins/buffer.js b/lib/unsupported-features/node-builtins-modules/buffer.js similarity index 94% rename from lib/unsupported-features/node-builtins/buffer.js rename to lib/unsupported-features/node-builtins-modules/buffer.js index cd679614..b041d1f7 100644 --- a/lib/unsupported-features/node-builtins/buffer.js +++ b/lib/unsupported-features/node-builtins-modules/buffer.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const buffer = { constants: { [READ]: { supported: ["8.2.0"] } }, INSPECT_MAX_BYTES: { [READ]: { supported: ["0.5.4"] } }, @@ -39,6 +40,7 @@ const buffer = { }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { buffer: { [READ]: { supported: ["0.1.90"] }, diff --git a/lib/unsupported-features/node-builtins/child_process.js b/lib/unsupported-features/node-builtins-modules/child_process.js similarity index 86% rename from lib/unsupported-features/node-builtins/child_process.js rename to lib/unsupported-features/node-builtins-modules/child_process.js index 52872700..8618ca0c 100644 --- a/lib/unsupported-features/node-builtins/child_process.js +++ b/lib/unsupported-features/node-builtins-modules/child_process.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const child_process = { exec: { [READ]: { supported: ["0.1.90"] } }, execFile: { [READ]: { supported: ["0.1.91"] } }, @@ -11,6 +12,7 @@ const child_process = { ChildProcess: { [READ]: { supported: ["2.2.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { child_process: { [READ]: { supported: ["0.1.90"] }, diff --git a/lib/unsupported-features/node-builtins/cluster.js b/lib/unsupported-features/node-builtins-modules/cluster.js similarity index 89% rename from lib/unsupported-features/node-builtins/cluster.js rename to lib/unsupported-features/node-builtins-modules/cluster.js index 7fc735e4..cf4004b1 100644 --- a/lib/unsupported-features/node-builtins/cluster.js +++ b/lib/unsupported-features/node-builtins-modules/cluster.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const cluster = { isMaster: { [READ]: { supported: ["0.8.1"], deprecated: ["16.0.0"] } }, isPrimary: { [READ]: { supported: ["16.0.0"] } }, @@ -15,6 +16,7 @@ const cluster = { Worker: { [READ]: { supported: ["0.7.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { cluster: { [READ]: { supported: ["0.7.0"] }, diff --git a/lib/unsupported-features/node-builtins/console.js b/lib/unsupported-features/node-builtins-modules/console.js similarity index 93% rename from lib/unsupported-features/node-builtins/console.js rename to lib/unsupported-features/node-builtins-modules/console.js index 43a3d633..4359a147 100644 --- a/lib/unsupported-features/node-builtins/console.js +++ b/lib/unsupported-features/node-builtins-modules/console.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const console = { profile: { [READ]: { supported: ["8.0.0"] } }, profileEnd: { [READ]: { supported: ["8.0.0"] } }, @@ -31,6 +32,7 @@ const console = { // timelineEnd: { [READ]: { supported: ["8.0.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { console: { [READ]: { supported: ["0.1.100"] }, diff --git a/lib/unsupported-features/node-builtins/crypto.js b/lib/unsupported-features/node-builtins-modules/crypto.js similarity index 97% rename from lib/unsupported-features/node-builtins/crypto.js rename to lib/unsupported-features/node-builtins-modules/crypto.js index ce40f7f8..7aea7b29 100644 --- a/lib/unsupported-features/node-builtins/crypto.js +++ b/lib/unsupported-features/node-builtins-modules/crypto.js @@ -2,6 +2,7 @@ const { READ } = require("@eslint-community/eslint-utils") // TODO: https://nodejs.org/docs/latest/api/webcrypto.html +/** @type {import('../types.js').SupportVersionTree} */ const crypto = { constants: { [READ]: { supported: ["6.3.0"] } }, fips: { [READ]: { supported: ["6.0.0"], deprecated: ["10.0.0"] } }, @@ -89,6 +90,7 @@ const crypto = { X509Certificate: { [READ]: { supported: ["15.6.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { crypto: { [READ]: { supported: ["0.1.92"] }, diff --git a/lib/unsupported-features/node-builtins/dgram.js b/lib/unsupported-features/node-builtins-modules/dgram.js similarity index 77% rename from lib/unsupported-features/node-builtins/dgram.js rename to lib/unsupported-features/node-builtins-modules/dgram.js index 412ff2b3..cffc4f3e 100644 --- a/lib/unsupported-features/node-builtins/dgram.js +++ b/lib/unsupported-features/node-builtins-modules/dgram.js @@ -1,10 +1,12 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const dgram = { createSocket: { [READ]: { supported: ["0.1.99"] } }, Socket: { [READ]: { supported: ["0.1.99"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { dgram: { [READ]: { supported: ["0.1.99"] }, diff --git a/lib/unsupported-features/node-builtins/diagnostics_channel.js b/lib/unsupported-features/node-builtins-modules/diagnostics_channel.js similarity index 89% rename from lib/unsupported-features/node-builtins/diagnostics_channel.js rename to lib/unsupported-features/node-builtins-modules/diagnostics_channel.js index 113b58e6..5ae74310 100644 --- a/lib/unsupported-features/node-builtins/diagnostics_channel.js +++ b/lib/unsupported-features/node-builtins-modules/diagnostics_channel.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const diagnostics_channel = { hasSubscribers: { [READ]: { supported: ["15.1.0", "14.17.0"] } }, channel: { [READ]: { supported: ["15.1.0", "14.17.0"] } }, @@ -10,6 +11,7 @@ const diagnostics_channel = { TracingChannel: { [READ]: { experimental: ["19.9.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { diagnostics_channel: { [READ]: { diff --git a/lib/unsupported-features/node-builtins/dns.js b/lib/unsupported-features/node-builtins-modules/dns.js similarity index 96% rename from lib/unsupported-features/node-builtins/dns.js rename to lib/unsupported-features/node-builtins-modules/dns.js index 6c9686b7..8440ad0c 100644 --- a/lib/unsupported-features/node-builtins/dns.js +++ b/lib/unsupported-features/node-builtins-modules/dns.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const dns = { Resolver: { [READ]: { supported: ["8.3.0"] } }, getServers: { [READ]: { supported: ["0.11.3"] } }, @@ -53,6 +54,7 @@ const dns = { }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { dns: { ...dns, [READ]: { supported: ["0.1.16"] } }, "node:dns": { ...dns, [READ]: { supported: ["14.13.1", "12.20.0"] } }, diff --git a/lib/unsupported-features/node-builtins/domain.js b/lib/unsupported-features/node-builtins-modules/domain.js similarity index 75% rename from lib/unsupported-features/node-builtins/domain.js rename to lib/unsupported-features/node-builtins-modules/domain.js index 0aa23d0c..9224614e 100644 --- a/lib/unsupported-features/node-builtins/domain.js +++ b/lib/unsupported-features/node-builtins-modules/domain.js @@ -1,10 +1,12 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const domain = { create: { [READ]: { supported: ["0.7.8"] } }, Domain: { [READ]: { supported: ["0.7.8"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { domain: { [READ]: { diff --git a/lib/unsupported-features/node-builtins/events.js b/lib/unsupported-features/node-builtins-modules/events.js similarity index 91% rename from lib/unsupported-features/node-builtins/events.js rename to lib/unsupported-features/node-builtins-modules/events.js index de6eb961..c314e8b0 100644 --- a/lib/unsupported-features/node-builtins/events.js +++ b/lib/unsupported-features/node-builtins-modules/events.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const static = { defaultMaxListeners: { [READ]: { supported: ["0.11.2"] } }, errorMonitor: { [READ]: { supported: ["13.6.0", "12.17.0"] } }, @@ -24,6 +25,7 @@ const static = { addAbortListener: { [READ]: { experimental: ["20.5.0", "18.18.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ const events = { Event: { [READ]: { experimental: ["14.5.0"], supported: ["15.4.0"] } }, EventTarget: { @@ -50,6 +52,7 @@ const events = { ...static, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { events: { [READ]: { supported: ["0.1.26"] }, diff --git a/lib/unsupported-features/node-builtins/fs.js b/lib/unsupported-features/node-builtins-modules/fs.js similarity index 96% rename from lib/unsupported-features/node-builtins/fs.js rename to lib/unsupported-features/node-builtins-modules/fs.js index e0fc67a0..91744b1b 100644 --- a/lib/unsupported-features/node-builtins/fs.js +++ b/lib/unsupported-features/node-builtins-modules/fs.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const promises_api = { constants: { [READ]: { supported: ["18.4.0", "16.17.0"] } }, access: { [READ]: { supported: ["10.0.0"] } }, @@ -34,6 +35,8 @@ const promises_api = { writeFile: { [READ]: { supported: ["10.0.0"] } }, FileHandle: { [READ]: { supported: ["10.0.0"] } }, } + +/** @type {import('../types.js').SupportVersionTree} */ const callback_api = { access: { [READ]: { supported: ["0.11.15"] } }, appendFile: { [READ]: { supported: ["0.6.7"] } }, @@ -88,6 +91,8 @@ const callback_api = { writeFile: { [READ]: { supported: ["0.1.29"] } }, writev: { [READ]: { supported: ["12.9.0"] } }, } + +/** @type {import('../types.js').SupportVersionTree} */ const synchronous_api = { accessSync: { [READ]: { supported: ["0.11.15"] } }, appendFileSync: { [READ]: { supported: ["0.6.7"] } }, @@ -137,6 +142,7 @@ const synchronous_api = { writevSync: { [READ]: { supported: ["12.9.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ const fs = { promises: { [READ]: { @@ -159,6 +165,7 @@ const fs = { common_objects: { [READ]: { supported: ["0.1.8"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { fs: { [READ]: { supported: ["0.1.8"] }, diff --git a/lib/unsupported-features/node-builtins/http.js b/lib/unsupported-features/node-builtins-modules/http.js similarity index 91% rename from lib/unsupported-features/node-builtins/http.js rename to lib/unsupported-features/node-builtins-modules/http.js index 96b944b9..0c729264 100644 --- a/lib/unsupported-features/node-builtins/http.js +++ b/lib/unsupported-features/node-builtins-modules/http.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const http = { METHODS: { [READ]: { supported: ["0.11.8"] } }, STATUS_CODES: { [READ]: { supported: ["0.1.22"] } }, @@ -19,6 +20,7 @@ const http = { OutgoingMessage: { [READ]: { supported: ["0.1.17"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { http: { [READ]: { supported: ["0.0.1"] }, diff --git a/lib/unsupported-features/node-builtins/http2.js b/lib/unsupported-features/node-builtins-modules/http2.js similarity index 92% rename from lib/unsupported-features/node-builtins/http2.js rename to lib/unsupported-features/node-builtins-modules/http2.js index 9aff500c..beeb5628 100644 --- a/lib/unsupported-features/node-builtins/http2.js +++ b/lib/unsupported-features/node-builtins-modules/http2.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const http2 = { constants: { [READ]: { supported: ["8.4.0"] } }, sensitiveHeaders: { [READ]: { supported: ["15.0.0", "14.18.0"] } }, @@ -21,6 +22,7 @@ const http2 = { Http2ServerResponse: { [READ]: { supported: ["8.4.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { http2: { [READ]: { diff --git a/lib/unsupported-features/node-builtins/https.js b/lib/unsupported-features/node-builtins-modules/https.js similarity index 83% rename from lib/unsupported-features/node-builtins/https.js rename to lib/unsupported-features/node-builtins-modules/https.js index 12f9251a..0972066d 100644 --- a/lib/unsupported-features/node-builtins/https.js +++ b/lib/unsupported-features/node-builtins-modules/https.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const http = { globalAgent: { [READ]: { supported: ["0.5.9"] } }, createServer: { [READ]: { supported: ["0.3.4"] } }, @@ -9,6 +10,7 @@ const http = { Server: { [READ]: { supported: ["0.3.4"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { http: { [READ]: { supported: ["0.3.4"] }, diff --git a/lib/unsupported-features/node-builtins/inspector.js b/lib/unsupported-features/node-builtins-modules/inspector.js similarity index 82% rename from lib/unsupported-features/node-builtins/inspector.js rename to lib/unsupported-features/node-builtins-modules/inspector.js index 40808aa4..21f4fef6 100644 --- a/lib/unsupported-features/node-builtins/inspector.js +++ b/lib/unsupported-features/node-builtins-modules/inspector.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const common_objects = { console: { [READ]: { supported: ["8.0.0"] } }, close: { [READ]: { supported: ["9.0.0"] } }, @@ -8,15 +9,19 @@ const common_objects = { waitForDebugger: { [READ]: { supported: ["12.7.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ const promises_api = { Session: { [READ]: { supported: ["19.0.0"] } }, ...common_objects, } + +/** @type {import('../types.js').SupportVersionTree} */ const callback_api = { Session: { [READ]: { supported: ["8.0.0"] } }, ...common_objects, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { inspector: { [READ]: { diff --git a/lib/unsupported-features/node-builtins/module.js b/lib/unsupported-features/node-builtins-modules/module.js similarity index 81% rename from lib/unsupported-features/node-builtins/module.js rename to lib/unsupported-features/node-builtins-modules/module.js index 12a579c4..053ba66b 100644 --- a/lib/unsupported-features/node-builtins/module.js +++ b/lib/unsupported-features/node-builtins-modules/module.js @@ -1,6 +1,7 @@ const { READ } = require("@eslint-community/eslint-utils") -const module = { +/** @type {import('../types.js').SupportVersionTree} */ +const Module = { builtinModules: { [READ]: { supported: ["9.3.0", "8.10.0", "6.13.0"] } }, createRequire: { [READ]: { supported: ["12.2.0"] } }, createRequireFromPath: { @@ -16,15 +17,16 @@ const module = { SourceMap: { [READ]: { supported: ["13.7.0", "12.17.0"] } }, } -module.Module = module +Module.Module = Module +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { module: { [READ]: { supported: ["0.3.7"] }, - ...module, + ...Module, }, "node:module": { [READ]: { supported: ["14.13.1", "12.20.0"] }, - ...module, + ...Module, }, } diff --git a/lib/unsupported-features/node-builtins/net.js b/lib/unsupported-features/node-builtins-modules/net.js similarity index 91% rename from lib/unsupported-features/node-builtins/net.js rename to lib/unsupported-features/node-builtins-modules/net.js index fa47147f..34efe041 100644 --- a/lib/unsupported-features/node-builtins/net.js +++ b/lib/unsupported-features/node-builtins-modules/net.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const net = { connect: { [READ]: { supported: ["0.0.1"] } }, createConnection: { [READ]: { supported: ["0.0.1"] } }, @@ -21,6 +22,7 @@ const net = { Socket: { [READ]: { supported: ["0.3.4"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { net: { [READ]: { supported: ["0.0.1"] }, diff --git a/lib/unsupported-features/node-builtins/os.js b/lib/unsupported-features/node-builtins-modules/os.js similarity index 93% rename from lib/unsupported-features/node-builtins/os.js rename to lib/unsupported-features/node-builtins-modules/os.js index c129d487..4829a7a8 100644 --- a/lib/unsupported-features/node-builtins/os.js +++ b/lib/unsupported-features/node-builtins-modules/os.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const os = { EOL: { [READ]: { supported: ["0.7.8"] } }, constants: { @@ -29,6 +30,7 @@ const os = { version: { [READ]: { supported: ["13.11.0", "12.17.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { os: { [READ]: { supported: ["0.3.3"] }, diff --git a/lib/unsupported-features/node-builtins/path.js b/lib/unsupported-features/node-builtins-modules/path.js similarity index 93% rename from lib/unsupported-features/node-builtins/path.js rename to lib/unsupported-features/node-builtins-modules/path.js index 332e2416..7a5cb7ab 100644 --- a/lib/unsupported-features/node-builtins/path.js +++ b/lib/unsupported-features/node-builtins-modules/path.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const path = { delimiter: { [READ]: { supported: ["0.9.3"] } }, sep: { [READ]: { supported: ["0.7.9"] } }, @@ -16,6 +17,7 @@ const path = { toNamespacedPath: { [READ]: { supported: ["9.0.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { path: { [READ]: { supported: ["0.1.16"] }, diff --git a/lib/unsupported-features/node-builtins/perf_hooks.js b/lib/unsupported-features/node-builtins-modules/perf_hooks.js similarity index 91% rename from lib/unsupported-features/node-builtins/perf_hooks.js rename to lib/unsupported-features/node-builtins-modules/perf_hooks.js index 2ffdb6f4..42ac0e58 100644 --- a/lib/unsupported-features/node-builtins/perf_hooks.js +++ b/lib/unsupported-features/node-builtins-modules/perf_hooks.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const perf_hooks = { performance: { [READ]: { supported: ["8.5.0"] } }, createHistogram: { [READ]: { supported: ["15.9.0", "14.18.0"] } }, @@ -17,6 +18,7 @@ const perf_hooks = { RecordableHistogram: { [READ]: { supported: ["15.9.0", "14.18.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { perf_hooks: { [READ]: { supported: ["8.5.0"] }, diff --git a/lib/unsupported-features/node-builtins/process.js b/lib/unsupported-features/node-builtins-modules/process.js similarity index 97% rename from lib/unsupported-features/node-builtins/process.js rename to lib/unsupported-features/node-builtins-modules/process.js index e7b17f1d..e5b6a386 100644 --- a/lib/unsupported-features/node-builtins/process.js +++ b/lib/unsupported-features/node-builtins-modules/process.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const process = { allowedNodeEnvironmentFlags: { [READ]: { supported: ["10.10.0"] } }, arch: { [READ]: { supported: ["0.5.0"] } }, @@ -114,6 +115,7 @@ const process = { uptime: { [READ]: { supported: ["0.5.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { process: { [READ]: { supported: ["0.1.3"] }, diff --git a/lib/unsupported-features/node-builtins/punycode.js b/lib/unsupported-features/node-builtins-modules/punycode.js similarity index 83% rename from lib/unsupported-features/node-builtins/punycode.js rename to lib/unsupported-features/node-builtins-modules/punycode.js index 41dff2bb..baec2d93 100644 --- a/lib/unsupported-features/node-builtins/punycode.js +++ b/lib/unsupported-features/node-builtins-modules/punycode.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const punycode = { ucs2: { [READ]: { supported: ["0.7.0"] } }, version: { [READ]: { supported: ["0.6.1"] } }, @@ -9,6 +10,7 @@ const punycode = { toUnicode: { [READ]: { supported: ["0.6.1"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { punycode: { [READ]: { diff --git a/lib/unsupported-features/node-builtins/querystring.js b/lib/unsupported-features/node-builtins-modules/querystring.js similarity index 84% rename from lib/unsupported-features/node-builtins/querystring.js rename to lib/unsupported-features/node-builtins-modules/querystring.js index 7f0eec14..3e396243 100644 --- a/lib/unsupported-features/node-builtins/querystring.js +++ b/lib/unsupported-features/node-builtins-modules/querystring.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const querystring = { decode: { [READ]: { supported: ["0.1.99"] } }, encode: { [READ]: { supported: ["0.1.99"] } }, @@ -9,6 +10,7 @@ const querystring = { unescape: { [READ]: { supported: ["0.1.25"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { querystring: { [READ]: { supported: ["0.1.25"] }, diff --git a/lib/unsupported-features/node-builtins/readline.js b/lib/unsupported-features/node-builtins-modules/readline.js similarity index 88% rename from lib/unsupported-features/node-builtins/readline.js rename to lib/unsupported-features/node-builtins-modules/readline.js index 2a4dc33a..b8a7343c 100644 --- a/lib/unsupported-features/node-builtins/readline.js +++ b/lib/unsupported-features/node-builtins-modules/readline.js @@ -1,11 +1,13 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const promises_api = { createInterface: { [READ]: { supported: ["17.0.0"] } }, Interface: { [READ]: { supported: ["17.0.0"] } }, Readline: { [READ]: { supported: ["17.0.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ const readline = { promises: { [READ]: { experimental: ["17.0.0"] }, @@ -21,6 +23,7 @@ const readline = { InterfaceConstructor: { [READ]: { supported: ["0.1.104"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { readline: { [READ]: { supported: ["0.1.98"] }, diff --git a/lib/unsupported-features/node-builtins/stream.js b/lib/unsupported-features/node-builtins-modules/stream.js similarity index 85% rename from lib/unsupported-features/node-builtins/stream.js rename to lib/unsupported-features/node-builtins-modules/stream.js index da955462..c6bb089f 100644 --- a/lib/unsupported-features/node-builtins/stream.js +++ b/lib/unsupported-features/node-builtins-modules/stream.js @@ -2,6 +2,7 @@ const { READ } = require("@eslint-community/eslint-utils") // TODO: https://nodejs.org/docs/latest/api/webstreams.html +/** @type {import('../types.js').SupportVersionTree} */ const Readable = { [READ]: { supported: ["0.9.4"] }, from: { [READ]: { supported: ["12.3.0", "10.17.0"] } }, @@ -10,12 +11,14 @@ const Readable = { toWeb: { [READ]: { experimental: ["17.0.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ const Writable = { [READ]: { supported: ["0.9.4"] }, fromWeb: { [READ]: { experimental: ["17.0.0"] } }, toWeb: { [READ]: { experimental: ["17.0.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ const Duplex = { [READ]: { supported: ["0.9.4"] }, from: { [READ]: { experimental: ["16.8.0"] } }, @@ -25,11 +28,13 @@ const Duplex = { const Transform = Duplex +/** @type {import('../types.js').SupportVersionTree} */ const promises_api = { pipeline: { [READ]: { supported: ["15.0.0"] } }, finished: { [READ]: { supported: ["15.0.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ const stream = { promises: { [READ]: { supported: ["15.0.0"] }, @@ -51,6 +56,7 @@ const stream = { setDefaultHighWaterMark: { [READ]: { supported: ["19.9.0", "18.17.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { stream: { [READ]: { supported: ["0.9.4"] }, diff --git a/lib/unsupported-features/node-builtins/string_decoder.js b/lib/unsupported-features/node-builtins-modules/string_decoder.js similarity index 77% rename from lib/unsupported-features/node-builtins/string_decoder.js rename to lib/unsupported-features/node-builtins-modules/string_decoder.js index 1534b8e8..5d6932fc 100644 --- a/lib/unsupported-features/node-builtins/string_decoder.js +++ b/lib/unsupported-features/node-builtins-modules/string_decoder.js @@ -1,9 +1,11 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const string_decoder = { StringDecoder: { [READ]: { supported: ["0.1.99"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { string_decoder: { [READ]: { supported: ["0.1.99"] }, diff --git a/lib/unsupported-features/node-builtins/test.js b/lib/unsupported-features/node-builtins-modules/test.js similarity index 93% rename from lib/unsupported-features/node-builtins/test.js rename to lib/unsupported-features/node-builtins-modules/test.js index c807df35..b65ddb9b 100644 --- a/lib/unsupported-features/node-builtins/test.js +++ b/lib/unsupported-features/node-builtins-modules/test.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const test = { run: { [READ]: { supported: ["18.9.0", "16.19.0"] } }, skip: { [READ]: { supported: ["20.2.0", "18.17.0"] } }, @@ -31,6 +32,7 @@ const test = { test.test = test +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { "node:test": { [READ]: { diff --git a/lib/unsupported-features/node-builtins/timers.js b/lib/unsupported-features/node-builtins-modules/timers.js similarity index 90% rename from lib/unsupported-features/node-builtins/timers.js rename to lib/unsupported-features/node-builtins-modules/timers.js index f3350be5..be987a3d 100644 --- a/lib/unsupported-features/node-builtins/timers.js +++ b/lib/unsupported-features/node-builtins-modules/timers.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const promises_api = { setTimeout: { [READ]: { supported: ["15.0.0"] } }, setImmediate: { [READ]: { supported: ["15.0.0"] } }, @@ -10,6 +11,7 @@ const promises_api = { }, } +/** @type {import('../types.js').SupportVersionTree} */ const timers = { Immediate: { [READ]: { supported: ["0.9.1"] } }, Timeout: { [READ]: { supported: ["0.9.1"] } }, @@ -27,6 +29,7 @@ const timers = { // enroll: [Function: deprecated] } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { timers: { [READ]: { supported: ["0.9.1"] }, diff --git a/lib/unsupported-features/node-builtins/tls.js b/lib/unsupported-features/node-builtins-modules/tls.js similarity index 92% rename from lib/unsupported-features/node-builtins/tls.js rename to lib/unsupported-features/node-builtins-modules/tls.js index f3750e61..27a5aad8 100644 --- a/lib/unsupported-features/node-builtins/tls.js +++ b/lib/unsupported-features/node-builtins-modules/tls.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const tls = { rootCertificates: { [READ]: { supported: ["12.3.0"] } }, DEFAULT_ECDH_CURVE: { [READ]: { supported: ["0.11.13"] } }, @@ -21,6 +22,7 @@ const tls = { TLSSocket: { [READ]: { supported: ["0.11.4"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { tls: { [READ]: { supported: ["0.3.2"] }, diff --git a/lib/unsupported-features/node-builtins/trace_events.js b/lib/unsupported-features/node-builtins-modules/trace_events.js similarity index 79% rename from lib/unsupported-features/node-builtins/trace_events.js rename to lib/unsupported-features/node-builtins-modules/trace_events.js index 8ad10f70..79261d2d 100644 --- a/lib/unsupported-features/node-builtins/trace_events.js +++ b/lib/unsupported-features/node-builtins-modules/trace_events.js @@ -1,10 +1,12 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const trace_events = { createTracing: { [READ]: { supported: ["10.0.0"] } }, getEnabledCategories: { [READ]: { supported: ["10.0.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { trace_events: { [READ]: { experimental: ["10.0.0"] }, diff --git a/lib/unsupported-features/node-builtins/tty.js b/lib/unsupported-features/node-builtins-modules/tty.js similarity index 79% rename from lib/unsupported-features/node-builtins/tty.js rename to lib/unsupported-features/node-builtins-modules/tty.js index 7e8599dc..45e2ac32 100644 --- a/lib/unsupported-features/node-builtins/tty.js +++ b/lib/unsupported-features/node-builtins-modules/tty.js @@ -1,11 +1,13 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const tty = { isatty: { [READ]: { supported: ["0.5.8"] } }, ReadStream: { [READ]: { supported: ["0.5.8"] } }, WriteStream: { [READ]: { supported: ["0.5.8"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { tty: { [READ]: { supported: ["0.5.8"] }, diff --git a/lib/unsupported-features/node-builtins/url.js b/lib/unsupported-features/node-builtins-modules/url.js similarity index 90% rename from lib/unsupported-features/node-builtins/url.js rename to lib/unsupported-features/node-builtins-modules/url.js index f8be40c0..e97a0888 100644 --- a/lib/unsupported-features/node-builtins/url.js +++ b/lib/unsupported-features/node-builtins-modules/url.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const url = { domainToASCII: { [READ]: { supported: ["7.4.0", "6.13.0"] } }, domainToUnicode: { [READ]: { supported: ["7.4.0", "6.13.0"] } }, @@ -17,6 +18,7 @@ const url = { Url: { [READ]: { supported: ["0.1.25"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { url: { [READ]: { supported: ["0.1.25"] }, diff --git a/lib/unsupported-features/node-builtins/util.js b/lib/unsupported-features/node-builtins-modules/util.js similarity index 96% rename from lib/unsupported-features/node-builtins/util.js rename to lib/unsupported-features/node-builtins-modules/util.js index 5b66d9b3..f20bc862 100644 --- a/lib/unsupported-features/node-builtins/util.js +++ b/lib/unsupported-features/node-builtins-modules/util.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const types = { [READ]: { supported: ["10.0.0"] }, isExternal: { [READ]: { supported: ["10.0.0"] } }, @@ -49,6 +50,7 @@ const types = { }, } +/** @type {import('../types.js').SupportVersionTree} */ const deprecated = { _extend: { [READ]: { supported: ["0.7.5"], deprecated: ["6.0.0"] } }, isArray: { [READ]: { supported: ["0.6.0"], deprecated: ["4.0.0"] } }, @@ -71,6 +73,7 @@ const deprecated = { log: { [READ]: { supported: ["0.3.0"], deprecated: ["6.0.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ const util = { promisify: { [READ]: { supported: ["8.0.0"] }, @@ -110,6 +113,7 @@ const util = { ...deprecated, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { util: util, "node:util": { ...util, [READ]: { supported: ["14.13.1", "12.20.0"] } }, diff --git a/lib/unsupported-features/node-builtins/v8.js b/lib/unsupported-features/node-builtins-modules/v8.js similarity index 95% rename from lib/unsupported-features/node-builtins/v8.js rename to lib/unsupported-features/node-builtins-modules/v8.js index 8a493c4d..e0e73f58 100644 --- a/lib/unsupported-features/node-builtins/v8.js +++ b/lib/unsupported-features/node-builtins-modules/v8.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const v8 = { serialize: { [READ]: { supported: ["8.0.0"] } }, deserialize: { [READ]: { supported: ["8.0.0"] } }, @@ -41,6 +42,7 @@ const v8 = { GCProfiler: { [READ]: { supported: ["19.6.0", "18.15.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { v8: { ...v8, [READ]: { supported: ["1.0.0"] } }, "node:v8": { ...v8, [READ]: { supported: ["14.13.1", "12.20.0"] } }, diff --git a/lib/unsupported-features/node-builtins/vm.js b/lib/unsupported-features/node-builtins-modules/vm.js similarity index 88% rename from lib/unsupported-features/node-builtins/vm.js rename to lib/unsupported-features/node-builtins-modules/vm.js index ee89fe98..1a59417d 100644 --- a/lib/unsupported-features/node-builtins/vm.js +++ b/lib/unsupported-features/node-builtins-modules/vm.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const vm = { compileFunction: { [READ]: { supported: ["10.10.0"] } }, createContext: { [READ]: { supported: ["0.3.1"] } }, @@ -15,6 +16,7 @@ const vm = { SyntheticModule: { [READ]: { experimental: ["13.0.0", "12.16.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { vm: vm, "node:vm": { ...vm, [READ]: { supported: ["14.13.1", "12.20.0"] } }, diff --git a/lib/unsupported-features/node-builtins/wasi.js b/lib/unsupported-features/node-builtins-modules/wasi.js similarity index 69% rename from lib/unsupported-features/node-builtins/wasi.js rename to lib/unsupported-features/node-builtins-modules/wasi.js index e2ef9a17..3591cb94 100644 --- a/lib/unsupported-features/node-builtins/wasi.js +++ b/lib/unsupported-features/node-builtins-modules/wasi.js @@ -1,9 +1,11 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const wasi = { WASI: { [READ]: { supported: ["13.3.0", "12.16.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { wasi: wasi, "node:wasi": { ...wasi, [READ]: { supported: ["14.13.1", "12.20.0"] } }, diff --git a/lib/unsupported-features/node-builtins/worker_threads.js b/lib/unsupported-features/node-builtins-modules/worker_threads.js similarity index 93% rename from lib/unsupported-features/node-builtins/worker_threads.js rename to lib/unsupported-features/node-builtins-modules/worker_threads.js index cd021be7..425f5f60 100644 --- a/lib/unsupported-features/node-builtins/worker_threads.js +++ b/lib/unsupported-features/node-builtins-modules/worker_threads.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const worker_threads = { isMainThread: { [READ]: { supported: ["10.5.0"] } }, parentPort: { [READ]: { supported: ["10.5.0"] } }, @@ -31,6 +32,7 @@ const worker_threads = { Worker: { [READ]: { supported: ["10.5.0"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { worker_threads: { ...worker_threads, diff --git a/lib/unsupported-features/node-builtins/zlib.js b/lib/unsupported-features/node-builtins-modules/zlib.js similarity index 95% rename from lib/unsupported-features/node-builtins/zlib.js rename to lib/unsupported-features/node-builtins-modules/zlib.js index d3eec127..3345a4e3 100644 --- a/lib/unsupported-features/node-builtins/zlib.js +++ b/lib/unsupported-features/node-builtins-modules/zlib.js @@ -1,5 +1,6 @@ const { READ } = require("@eslint-community/eslint-utils") +/** @type {import('../types.js').SupportVersionTree} */ const zlib = { constants: { [READ]: { supported: ["7.0.0"] } }, createBrotliCompress: { [READ]: { supported: ["11.7.0", "10.16.0"] } }, @@ -40,6 +41,7 @@ const zlib = { Unzip: { [READ]: { supported: ["0.5.8"] } }, } +/** @type {import('../types.js').SupportVersionTree} */ module.exports = { zlib: zlib, "node:zlib": { diff --git a/lib/unsupported-features/node-builtins.js b/lib/unsupported-features/node-builtins.js new file mode 100644 index 00000000..308e82d3 --- /dev/null +++ b/lib/unsupported-features/node-builtins.js @@ -0,0 +1,45 @@ +/** @type {import('./types.js').SupportVersionTree} */ +const NodeBuiltinModules = { + ...require("./node-builtins-modules/assert.js"), + ...require("./node-builtins-modules/async_hooks.js"), + ...require("./node-builtins-modules/buffer.js"), + ...require("./node-builtins-modules/child_process.js"), + ...require("./node-builtins-modules/cluster.js"), + ...require("./node-builtins-modules/console.js"), + ...require("./node-builtins-modules/crypto.js"), + ...require("./node-builtins-modules/dgram.js"), + ...require("./node-builtins-modules/diagnostics_channel.js"), + ...require("./node-builtins-modules/dns.js"), + ...require("./node-builtins-modules/domain.js"), + ...require("./node-builtins-modules/events.js"), + ...require("./node-builtins-modules/fs.js"), + ...require("./node-builtins-modules/http2.js"), + ...require("./node-builtins-modules/http.js"), + ...require("./node-builtins-modules/https.js"), + ...require("./node-builtins-modules/inspector.js"), + ...require("./node-builtins-modules/module.js"), + ...require("./node-builtins-modules/net.js"), + ...require("./node-builtins-modules/os.js"), + ...require("./node-builtins-modules/path.js"), + ...require("./node-builtins-modules/perf_hooks.js"), + ...require("./node-builtins-modules/process.js"), + ...require("./node-builtins-modules/punycode.js"), + ...require("./node-builtins-modules/querystring.js"), + ...require("./node-builtins-modules/readline.js"), + ...require("./node-builtins-modules/stream.js"), + ...require("./node-builtins-modules/string_decoder.js"), + ...require("./node-builtins-modules/test.js"), + ...require("./node-builtins-modules/timers.js"), + ...require("./node-builtins-modules/tls.js"), + ...require("./node-builtins-modules/trace_events.js"), + ...require("./node-builtins-modules/tty.js"), + ...require("./node-builtins-modules/url.js"), + ...require("./node-builtins-modules/util.js"), + ...require("./node-builtins-modules/v8.js"), + ...require("./node-builtins-modules/vm.js"), + ...require("./node-builtins-modules/wasi.js"), + ...require("./node-builtins-modules/worker_threads.js"), + ...require("./node-builtins-modules/zlib.js"), +} + +module.exports = { NodeBuiltinModules } diff --git a/lib/unsupported-features/types.js b/lib/unsupported-features/types.js new file mode 100644 index 00000000..f4270ed8 --- /dev/null +++ b/lib/unsupported-features/types.js @@ -0,0 +1,14 @@ +/** + * @typedef {Object} SupportInfo + * @property {string[]} experimental The node versions in which experimental support was added + * @property {string[]} supported The node versions in which stable support was added + * @property {string[]} deprecated The node versions in which support was removed + */ +/** + * @typedef {{ + * [key: readonly unique symbol]: SupportInfo | undefined; + * [key: string]: SupportVersionTree | undefined; + * }} SupportVersionTree + */ + +module.exports = {} diff --git a/lib/util/check-unsupported-builtins.js b/lib/util/check-unsupported-builtins.js index 09958a40..fab232bb 100644 --- a/lib/util/check-unsupported-builtins.js +++ b/lib/util/check-unsupported-builtins.js @@ -101,7 +101,7 @@ module.exports.checkUnsupportedBuiltins = function checkUnsupportedBuiltins( node, messageId: "unsupported", data: { - name, + name: path.join("."), supported: supportedVersionToString(info), version: options.version.raw, }, diff --git a/lib/util/enumerate-property-names.js b/lib/util/enumerate-property-names.js index e7e72bab..fbf332c4 100644 --- a/lib/util/enumerate-property-names.js +++ b/lib/util/enumerate-property-names.js @@ -9,31 +9,42 @@ const unprefixNodeColon = require("./unprefix-node-colon") /** * Enumerate property names of a given object recursively. - * @param {object} trackMap The map for APIs to enumerate. - * @param {string[]|undefined} path The path to the current map. + * @param {import('../unsupported-features/types.js').SupportVersionTree} trackMap The map for APIs to enumerate. + * @param {string[]} [path] The path to the current map. + * @param {WeakSet} [recursionSet] A WeakSet used to block recursion (eg Module, Module.Module, Module.Module.Module) * @returns {IterableIterator} The property names of the map. */ -function* enumeratePropertyNames(trackMap, path = []) { - for (const key of Object.keys(trackMap)) { - const value = trackMap[key] - if (typeof value !== "object") { - continue - } - path.push(key) +function* enumeratePropertyNames( + trackMap, + path = [], + recursionSet = new WeakSet() +) { + if (recursionSet.has(trackMap)) { + return + } + + for (const key of Object.getOwnPropertyNames(trackMap)) { + const childValue = trackMap[key] + const childPath = [...path, key] + const childName = unprefixNodeColon(childPath.join(".")) - const name = unprefixNodeColon(path.join(".")) - if (value[CALL]) { - yield `${name}()` + if (childValue[CALL]) { + yield `${childName}()` } - if (value[CONSTRUCT]) { - yield `new ${name}()` + + if (childValue[CONSTRUCT]) { + yield `new ${childName}()` } - if (value[READ]) { - yield name + + if (childValue[READ]) { + yield childName } - yield* enumeratePropertyNames(value, path) - path.pop() + yield* enumeratePropertyNames( + childValue, + childPath, + recursionSet.add(trackMap) + ) } }