From 7a625a30322593c1690557085acbc89f4cf6c4fb Mon Sep 17 00:00:00 2001 From: Rob Hogan Date: Mon, 20 Jul 2026 03:40:26 -0700 Subject: [PATCH] Use node: schema to import Node.js builtins (#1782) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: A stylistic choice to unify on `node:`-prefixed imports, eg `fs` -> `node:fs`. Reasoning: - New Node builtins are *only* available under the prefix (eg `node:sqlite`), as this allows Node to introduce them without ecosystem breaking changes, so this is the direction of travel and the only choice that’ll allow consistency. - Encouraging them and grouping them separately makes it easier to reason about a module’s 3rd party dependencies. Change: - ESLint warn when Node.js builtin modules are imported without the `node:` scheme - Migrate existing imports, exports, and requires to `node:` specifiers - Update Jest mocks to match the new module specifiers Changelog: Internal Pull Request resolved: https://github.com/react/metro/pull/1782 Test Plan: - `yarn lint` - 29 affected Jest suites (950 tests, 94 snapshots) Reviewed By: huntie Differential Revision: D112733139 Pulled By: robhogan --- babel.config.js | 4 +- .../src/__tests__/worker-test.js | 13 ++-- packages/buck-worker-tool/src/profiling.js | 4 +- packages/buck-worker-tool/src/worker-tool.js | 6 +- .../buck-worker-tool/types/worker-tool.d.ts | 6 +- .../parses-without-transpilation-test.js | 4 +- .../src/babel-register.js | 4 +- .../src/__tests__/transform-test.js | 2 +- .../src/__tests__/index-test.js | 5 +- packages/metro-cache-key/src/index.js | 4 +- packages/metro-cache/src/stableHash.js | 2 +- .../src/stores/AutoCleanFileStore.js | 4 +- packages/metro-cache/src/stores/FileStore.js | 4 +- packages/metro-cache/src/stores/HttpStore.js | 6 +- .../__tests__/AutoCleanFileStore-test.js | 4 +- .../src/stores/__tests__/FileStore-test.js | 6 +- .../src/stores/__tests__/HttpGetStore-test.js | 14 ++-- .../src/stores/__tests__/HttpStore-test.js | 76 +++++++++++-------- .../src/__tests__/loadConfig-test.js | 14 ++-- .../defaults/__tests__/exclusionList-test.js | 6 +- .../defaults/__tests__/getMaxWorkers-test.js | 4 +- .../src/defaults/exclusionList.js | 2 +- .../src/defaults/getMaxWorkers.js | 2 +- packages/metro-config/src/defaults/index.js | 4 +- packages/metro-config/src/loadConfig.js | 8 +- packages/metro-core/src/Logger.js | 4 +- packages/metro-core/src/Terminal.js | 10 +-- .../metro-core/src/__tests__/Terminal-test.js | 6 +- packages/metro-core/types/Terminal.d.ts | 6 +- packages/metro-file-map/src/Watcher.js | 8 +- .../__tests__/changes-between-starts-test.js | 2 +- .../src/__tests__/haste_impl.js | 2 +- .../src/__tests__/includes_dotfiles-test.js | 2 +- .../src/__tests__/index-test.js | 13 ++-- .../src/__tests__/worker-test.js | 11 +-- .../src/cache/DiskCacheManager.js | 10 +-- .../cache/__tests__/DiskCacheManager-test.js | 10 +-- .../crawlers/__tests__/integration-test.js | 6 +- .../src/crawlers/__tests__/watchman-test.js | 2 +- .../metro-file-map/src/crawlers/node/index.js | 2 +- .../crawlers/watchman/__tests__/index-test.js | 4 +- .../src/crawlers/watchman/index.js | 4 +- packages/metro-file-map/src/index.js | 8 +- .../metro-file-map/src/lib/FileProcessor.js | 2 +- .../metro-file-map/src/lib/RootPathUtils.js | 2 +- packages/metro-file-map/src/lib/TreeFS.js | 2 +- .../src/lib/__tests__/FileProcessor-test.js | 2 +- .../src/lib/__tests__/RootPathUtils-test.js | 2 +- .../src/lib/__tests__/TreeFS-test.js | 2 +- .../checkWatchmanCapabilities-test.js | 2 +- .../normalizePathSeparatorsToSystem-test.js | 4 +- .../__tests__/rootRelativeCacheKeys-test.js | 6 +- .../src/lib/checkWatchmanCapabilities.js | 4 +- .../src/lib/normalizePathSeparatorsToPosix.js | 2 +- .../lib/normalizePathSeparatorsToSystem.js | 2 +- .../src/lib/rootRelativeCacheKeys.js | 2 +- .../metro-file-map/src/plugins/HastePlugin.js | 2 +- .../metro-file-map/src/plugins/MockPlugin.js | 2 +- .../__tests__/DependencyPlugin-test.js | 2 +- .../src/plugins/haste/HasteConflictsError.js | 2 +- .../haste/__tests__/HastePlugin-test.js | 2 +- .../src/plugins/haste/computeConflicts.js | 2 +- .../src/plugins/haste/worker.js | 2 +- .../mocks/__tests__/MockPlugin-test.js | 2 +- .../mocks/__tests__/getMockName-test.js | 2 +- .../src/plugins/mocks/getMockName.js | 2 +- .../src/watchers/AbstractWatcher.js | 4 +- .../src/watchers/FallbackWatcher.js | 8 +- .../src/watchers/NativeWatcher.js | 8 +- .../src/watchers/WatchmanWatcher.js | 4 +- .../__tests__/WatchmanWatcher-test.js | 2 +- .../src/watchers/__tests__/helpers.js | 8 +- .../watchers/__tests__/integration-test.js | 6 +- .../metro-file-map/src/watchers/common.js | 4 +- packages/metro-file-map/src/worker.js | 2 +- packages/metro-file-map/types/Watcher.d.ts | 4 +- packages/metro-file-map/types/index.d.ts | 4 +- .../metro-file-map/types/watchers/common.d.ts | 4 +- .../src/PackageExportsResolve.js | 2 +- .../src/PackageImportsResolve.js | 2 +- packages/metro-resolver/src/PackageResolve.js | 2 +- .../src/__tests__/assets-test.js | 2 +- .../src/__tests__/package-exports-test.js | 2 +- .../metro-resolver/src/__tests__/utils.js | 2 +- packages/metro-resolver/src/resolve.js | 2 +- packages/metro-resolver/src/resolveAsset.js | 2 +- .../metro-resolver/src/utils/isAssetFile.js | 2 +- packages/metro-resolver/src/utils/paths.js | 2 +- .../__tests__/MetroFastRefreshMockRuntime.js | 2 +- .../src/polyfills/__tests__/require-test.js | 2 +- .../src/__tests__/composeSourceMaps-test.js | 4 +- .../src/generateFunctionMap.js | 2 +- .../metro-symbolicate/src/Symbolication.js | 6 +- .../src/__tests__/Symbolication-test.js | 4 +- .../symbolicate-heap-snapshot-test.js | 6 +- .../src/__tests__/symbolicate-test.js | 8 +- packages/metro-symbolicate/src/symbolicate.js | 8 +- .../types/Symbolication.d.ts | 4 +- .../metro-symbolicate/types/symbolicate.d.ts | 6 +- .../__tests__/import-export-plugin-test.js | 2 +- .../src/__tests__/index-test.js | 12 +-- .../src/utils/assetTransformer.js | 2 +- packages/metro/src/Assets.js | 6 +- packages/metro/src/Bundler.js | 2 +- packages/metro/src/DeltaBundler.js | 2 +- .../metro/src/DeltaBundler/DeltaCalculator.js | 6 +- .../__tests__/baseJSBundle-test.js | 2 +- .../src/DeltaBundler/Serializers/getAssets.js | 2 +- .../Serializers/getRamBundleInfo.js | 2 +- .../DeltaBundler/Serializers/helpers/js.js | 2 +- .../DeltaBundler/Serializers/hmrJSBundle.js | 2 +- .../metro/src/DeltaBundler/Transformer.js | 8 +- .../metro/src/DeltaBundler/Worker.flow.js | 6 +- packages/metro/src/DeltaBundler/WorkerFarm.js | 2 +- .../DeltaBundler/__fixtures__/hasteImpl.js | 2 +- .../__tests__/DeltaBundler-test.js | 2 +- .../__tests__/DeltaCalculator-context-test.js | 4 +- .../__tests__/DeltaCalculator-test.js | 6 +- .../src/DeltaBundler/__tests__/Graph-test.js | 2 +- .../__tests__/Transformer-test.js | 7 +- .../DeltaBundler/__tests__/WorkerFarm-test.js | 6 +- .../DeltaBundler/__tests__/resolver-test.js | 26 +++---- .../src/DeltaBundler/__tests__/test-utils.js | 2 +- .../metro/src/DeltaBundler/buildSubgraph.js | 2 +- .../src/DeltaBundler/getTransformCacheKey.js | 2 +- packages/metro/src/IncrementalBundler.js | 6 +- .../ModuleGraph/worker/collectDependencies.js | 2 +- packages/metro/src/Server.js | 8 +- .../metro/src/Server/MultipartResponse.js | 2 +- .../metro/src/Server/__tests__/Server-test.js | 17 +++-- packages/metro/src/__tests__/Assets-test.js | 9 ++- .../metro/src/__tests__/HmrServer-test.js | 4 +- packages/metro/src/cli-utils.js | 2 +- packages/metro/src/commands/dependencies.js | 6 +- packages/metro/src/commands/serve.js | 4 +- packages/metro/src/index.flow.js | 20 ++--- .../__tests__/build-errors-test.js | 2 +- .../integration_tests/__tests__/build-test.js | 2 +- .../__tests__/buildGraph-test.js | 2 +- .../__tests__/rambundle-test.js | 8 +- .../__tests__/server-endpoints-test.js | 4 +- .../__tests__/server-test.js | 4 +- .../__tests__/server-tls-test.js | 10 +-- .../__tests__/server-torn-down-test.js | 2 +- .../__tests__/sourcemap-test.js | 2 +- .../metro/src/integration_tests/execBundle.js | 2 +- .../src/integration_tests/metro.config.js | 2 +- packages/metro/src/lib/BatchProcessor.js | 2 +- packages/metro/src/lib/JsonReporter.js | 2 +- packages/metro/src/lib/TerminalReporter.js | 6 +- .../src/lib/__mocks__/getAbsolutePath.js | 2 +- .../__tests__/contextModuleTemplates-test.js | 2 +- .../src/lib/__tests__/getPreludeCode-test.js | 2 +- packages/metro/src/lib/contextModule.js | 4 +- .../metro/src/lib/contextModuleTemplates.js | 4 +- .../metro/src/lib/createWebsocketServer.js | 2 +- packages/metro/src/lib/formatBundlingError.js | 2 +- packages/metro/src/lib/logToConsole.js | 4 +- .../parseBundleOptionsFromBundleRequestUrl.js | 2 +- packages/metro/src/lib/parseJsonBody.js | 2 +- packages/metro/src/lib/pathUtils.js | 2 +- packages/metro/src/lib/relativizeSourceMap.js | 2 +- packages/metro/src/lib/reporting.js | 4 +- .../metro/src/node-haste/DependencyGraph.js | 6 +- .../DependencyGraph/ModuleResolution.js | 6 +- packages/metro/src/node-haste/PackageCache.js | 4 +- .../node-haste/__tests__/PackageCache-test.js | 6 +- .../metro/src/node-haste/lib/AssetPaths.js | 2 +- .../node-haste/lib/parsePlatformFilePath.js | 2 +- .../src/shared/output/RamBundle/as-assets.js | 4 +- .../output/RamBundle/as-indexed-file.js | 4 +- packages/metro/src/shared/output/meta.js | 2 +- packages/metro/src/shared/output/writeFile.js | 2 +- packages/metro/types/Bundler.d.ts | 4 +- packages/metro/types/DeltaBundler.d.ts | 4 +- .../types/DeltaBundler/DeltaCalculator.d.ts | 4 +- .../DeltaBundler/Serializers/helpers/js.d.ts | 4 +- packages/metro/types/Server.d.ts | 4 +- .../metro/types/Server/MultipartResponse.d.ts | 4 +- packages/metro/types/index.d.ts | 6 +- packages/metro/types/lib/JsonReporter.d.ts | 4 +- packages/metro/types/lib/parseJsonBody.d.ts | 4 +- .../types/node-haste/DependencyGraph.d.ts | 4 +- .../src/__tests__/index-test.js | 2 +- private/metro-memory-fs/src/index.js | 6 +- scripts/__tests__/babel-lib-defs-test.js | 2 +- scripts/__tests__/subpackages-test.js | 4 +- scripts/_getPackages.js | 4 +- scripts/build.js | 6 +- scripts/eslint/base.js | 3 +- scripts/eslint/typescript.js | 2 +- scripts/generateTypeScriptDefinitions.js | 4 +- scripts/jestFilter.js | 2 +- scripts/nativePrettier.js | 6 +- scripts/setupJest.js | 2 +- ...pdateBabelTraverseFlowLibraryDefinition.js | 2 +- scripts/updateBabelFlowLibraryDefinitions.js | 2 +- scripts/updateVersion.js | 4 +- 198 files changed, 473 insertions(+), 443 deletions(-) diff --git a/babel.config.js b/babel.config.js index f43a9f0572..de0ad667be 100644 --- a/babel.config.js +++ b/babel.config.js @@ -11,8 +11,8 @@ 'use strict'; -const crypto = require('crypto'); -const fs = require('fs'); +const crypto = require('node:crypto'); +const fs = require('node:fs'); /*:: import type {BabelCoreOptions} from '@babel/core'; diff --git a/packages/buck-worker-tool/src/__tests__/worker-test.js b/packages/buck-worker-tool/src/__tests__/worker-test.js index c4bc01f268..25801db139 100644 --- a/packages/buck-worker-tool/src/__tests__/worker-test.js +++ b/packages/buck-worker-tool/src/__tests__/worker-test.js @@ -11,7 +11,7 @@ 'use strict'; jest - .mock('console', () => { + .mock('node:console', () => { // Automocking is no longer working with jest after https://github.com/nodejs/node/pull/35399 // because the typeof console is now 'console' and no longer Object. const mock = jest.fn(); @@ -21,17 +21,18 @@ jest return {Console}; }) - .mock('fs', () => new (require('metro-memory-fs'))()) + .mock('node:fs', () => new (require('metro-memory-fs'))()) .useRealTimers(); const JSONStream = require('../third-party/JSONStream'); const {buckWorker} = require('../worker-tool'); -// mocked -const {Console} = require('console'); -const fs = require('fs'); -const path = require('path'); +const path = require('node:path'); const through = require('through'); +// mocked +const {Console} = jest.requireMock('node:console'); +const fs = jest.requireMock('node:fs'); + const {any, anything} = expect; const UNKNOWN_MESSAGE = 1; diff --git a/packages/buck-worker-tool/src/profiling.js b/packages/buck-worker-tool/src/profiling.js index 3903bc0b0e..a81da15e51 100644 --- a/packages/buck-worker-tool/src/profiling.js +++ b/packages/buck-worker-tool/src/profiling.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import fs from 'fs'; +import fs from 'node:fs'; let currentInspectorSession; let isProfiling = false; @@ -19,7 +19,7 @@ function getInspectorSession() { return currentInspectorSession; } // eslint-disable-next-line import/no-commonjs - const inspector = require('inspector'); + const inspector = require('node:inspector'); currentInspectorSession = new inspector.Session(); currentInspectorSession.connect(); return currentInspectorSession; diff --git a/packages/buck-worker-tool/src/worker-tool.js b/packages/buck-worker-tool/src/worker-tool.js index f15c40e8ba..807e3d4e88 100644 --- a/packages/buck-worker-tool/src/worker-tool.js +++ b/packages/buck-worker-tool/src/worker-tool.js @@ -9,14 +9,14 @@ * @oncall react_native */ -import type {Duplex, Writable} from 'stream'; +import type {Duplex, Writable} from 'node:stream'; import {startProfiling, stopProfilingAndWrite} from './profiling'; import JSONStream from './third-party/JSONStream'; -import {Console} from 'console'; import duplexer from 'duplexer'; -import fs from 'fs'; import invariant from 'invariant'; +import {Console} from 'node:console'; +import fs from 'node:fs'; export type Command = ( argv: Array, diff --git a/packages/buck-worker-tool/types/worker-tool.d.ts b/packages/buck-worker-tool/types/worker-tool.d.ts index 8b7d573987..4bb5a2f876 100644 --- a/packages/buck-worker-tool/types/worker-tool.d.ts +++ b/packages/buck-worker-tool/types/worker-tool.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/buck-worker-tool/src/worker-tool.js @@ -15,9 +15,9 @@ * yarn run build-ts-defs (OSS) */ -import type {Duplex} from 'stream'; +import type {Duplex} from 'node:stream'; -import {Console} from 'console'; +import {Console} from 'node:console'; export type Command = (argv: Array, structuredArgs: unknown, console: Console) => Promise | void; export type Commands = {[key: string]: Command}; diff --git a/packages/metro-babel-register/src/__tests__/parses-without-transpilation-test.js b/packages/metro-babel-register/src/__tests__/parses-without-transpilation-test.js index d83b663a53..65908c4ea0 100644 --- a/packages/metro-babel-register/src/__tests__/parses-without-transpilation-test.js +++ b/packages/metro-babel-register/src/__tests__/parses-without-transpilation-test.js @@ -11,8 +11,8 @@ 'use strict'; -const {promises: fsPromises} = require('fs'); -const vm = require('vm'); +const {promises: fsPromises} = require('node:fs'); +const vm = require('node:vm'); test('can be loaded directly without transpilation', async () => { const code = await fsPromises.readFile( diff --git a/packages/metro-babel-register/src/babel-register.js b/packages/metro-babel-register/src/babel-register.js index a61affbd3c..5bffd602be 100644 --- a/packages/metro-babel-register/src/babel-register.js +++ b/packages/metro-babel-register/src/babel-register.js @@ -18,8 +18,8 @@ import type {BabelCoreOptions} from '@babel/core'; */ const escapeRegExp = require('escape-string-regexp'); -const fs = require('fs'); -const path = require('path'); +const fs = require('node:fs'); +const path = require('node:path'); let _only /*: ReadonlyArray */ = []; diff --git a/packages/metro-babel-transformer/src/__tests__/transform-test.js b/packages/metro-babel-transformer/src/__tests__/transform-test.js index 5ca5b3fe04..8e1170d88c 100644 --- a/packages/metro-babel-transformer/src/__tests__/transform-test.js +++ b/packages/metro-babel-transformer/src/__tests__/transform-test.js @@ -11,7 +11,7 @@ 'use strict'; const {transform} = require('../index.js'); -const path = require('path'); +const path = require('node:path'); const PROJECT_ROOT = path.sep === '/' ? '/my/project' : 'C:\\my\\project'; diff --git a/packages/metro-cache-key/src/__tests__/index-test.js b/packages/metro-cache-key/src/__tests__/index-test.js index 9e52c99d92..36412f4a3b 100644 --- a/packages/metro-cache-key/src/__tests__/index-test.js +++ b/packages/metro-cache-key/src/__tests__/index-test.js @@ -11,10 +11,11 @@ 'use strict'; -jest.mock('fs', () => new (require('metro-memory-fs'))()); +jest.mock('node:fs', () => new (require('metro-memory-fs'))()); const {getCacheKey} = require('../index'); -const fs = require('fs'); + +const fs = jest.requireMock('node:fs'); beforeAll(() => { fs.writeFileSync('/a.txt', 'fake content for a.txt'); diff --git a/packages/metro-cache-key/src/index.js b/packages/metro-cache-key/src/index.js index 6894391820..f881344e4e 100644 --- a/packages/metro-cache-key/src/index.js +++ b/packages/metro-cache-key/src/index.js @@ -9,8 +9,8 @@ * @oncall react_native */ -import crypto from 'crypto'; -import fs from 'fs'; +import crypto from 'node:crypto'; +import fs from 'node:fs'; export function getCacheKey(files: ReadonlyArray): string { return files diff --git a/packages/metro-cache/src/stableHash.js b/packages/metro-cache/src/stableHash.js index a71bb7d4f0..1c6b08cca9 100644 --- a/packages/metro-cache/src/stableHash.js +++ b/packages/metro-cache/src/stableHash.js @@ -9,8 +9,8 @@ * @oncall react_native */ -import crypto from 'crypto'; import canonicalize from 'metro-core/private/canonicalize'; +import crypto from 'node:crypto'; export default function stableHash(value: unknown): Buffer { return ( diff --git a/packages/metro-cache/src/stores/AutoCleanFileStore.js b/packages/metro-cache/src/stores/AutoCleanFileStore.js index 2d5203291c..3737061984 100644 --- a/packages/metro-cache/src/stores/AutoCleanFileStore.js +++ b/packages/metro-cache/src/stores/AutoCleanFileStore.js @@ -12,8 +12,8 @@ import type {Options} from './FileStore'; import FileStore from './FileStore'; -import fs from 'fs'; -import path from 'path'; +import fs from 'node:fs'; +import path from 'node:path'; type CleanOptions = Readonly<{ ...Options, diff --git a/packages/metro-cache/src/stores/FileStore.js b/packages/metro-cache/src/stores/FileStore.js index 8949361a3e..878898d743 100644 --- a/packages/metro-cache/src/stores/FileStore.js +++ b/packages/metro-cache/src/stores/FileStore.js @@ -9,8 +9,8 @@ * @oncall react_native */ -import fs from 'fs'; -import path from 'path'; +import fs from 'node:fs'; +import path from 'node:path'; const NULL_BYTE = 0x00; const NULL_BYTE_BUFFER = Buffer.from([NULL_BYTE]); diff --git a/packages/metro-cache/src/stores/HttpStore.js b/packages/metro-cache/src/stores/HttpStore.js index 97c90645b5..b0da766314 100644 --- a/packages/metro-cache/src/stores/HttpStore.js +++ b/packages/metro-cache/src/stores/HttpStore.js @@ -14,10 +14,10 @@ import type {HttpsProxyAgentOptions} from 'https-proxy-agent'; import HttpError from './HttpError'; import NetworkError from './NetworkError'; import {backOff} from 'exponential-backoff'; -import http from 'http'; -import https from 'https'; import {HttpsProxyAgent} from 'https-proxy-agent'; -import zlib from 'zlib'; +import http from 'node:http'; +import https from 'node:https'; +import zlib from 'node:zlib'; export type Options = | EndpointOptions // Uses the same options for both reads and writes diff --git a/packages/metro-cache/src/stores/__tests__/AutoCleanFileStore-test.js b/packages/metro-cache/src/stores/__tests__/AutoCleanFileStore-test.js index 345abd7e84..1095f511de 100644 --- a/packages/metro-cache/src/stores/__tests__/AutoCleanFileStore-test.js +++ b/packages/metro-cache/src/stores/__tests__/AutoCleanFileStore-test.js @@ -19,9 +19,9 @@ describe('AutoCleanFileStore', () => { jest .resetModules() .resetAllMocks() - .mock('fs', () => memfs().fs); + .mock('node:fs', () => memfs().fs); AutoCleanFileStore = require('../AutoCleanFileStore').default; - fs = require('fs'); + fs = jest.requireMock('node:fs'); jest.spyOn(fs, 'statSync'); jest.spyOn(fs, 'unlinkSync'); }); diff --git a/packages/metro-cache/src/stores/__tests__/FileStore-test.js b/packages/metro-cache/src/stores/__tests__/FileStore-test.js index 510703622d..e1377e673d 100644 --- a/packages/metro-cache/src/stores/__tests__/FileStore-test.js +++ b/packages/metro-cache/src/stores/__tests__/FileStore-test.js @@ -19,10 +19,10 @@ describe('FileStore', () => { jest .resetModules() .resetAllMocks() - .mock('fs', () => memfs().fs); + .mock('node:fs', () => memfs().fs); FileStore = require('../FileStore').default; - fs = require('fs'); + fs = jest.requireMock('node:fs'); jest.spyOn(fs, 'unlinkSync'); }); @@ -54,7 +54,7 @@ describe('FileStore', () => { const cache = Buffer.from([0xfa, 0xce, 0xb0, 0x0c]); const data = Buffer.from([0xca, 0xc4, 0xe5]); - require('fs').rmSync('/root', {recursive: true, force: true}); + jest.requireMock('node:fs').rmSync('/root', {recursive: true, force: true}); await fileStore.set(cache, data); expect(await fileStore.get(cache)).toEqual(data); }); diff --git a/packages/metro-cache/src/stores/__tests__/HttpGetStore-test.js b/packages/metro-cache/src/stores/__tests__/HttpGetStore-test.js index 6729996999..0858c72abf 100644 --- a/packages/metro-cache/src/stores/__tests__/HttpGetStore-test.js +++ b/packages/metro-cache/src/stores/__tests__/HttpGetStore-test.js @@ -7,8 +7,8 @@ 'use strict'; -const {PassThrough} = require('stream'); -const zlib = require('zlib'); +const {PassThrough} = require('node:stream'); +const zlib = require('node:zlib'); jest.useRealTimers(); @@ -37,10 +37,10 @@ describe('HttpGetStore', () => { } beforeEach(() => { - jest.resetModules().resetAllMocks().mock('http'); + jest.resetModules().resetAllMocks().mock('node:http'); httpPassThrough = new PassThrough(); - require('http').request.mockReturnValue(httpPassThrough); + jest.requireMock('node:http').request.mockReturnValue(httpPassThrough); HttpGetStore = require('../HttpGetStore').default; @@ -56,7 +56,7 @@ describe('HttpGetStore', () => { endpoint: 'http://www.example.com/endpoint', }); const promise = store.get(Buffer.from('key')); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('GET'); expect(opts.host).toEqual('www.example.com'); @@ -72,7 +72,7 @@ describe('HttpGetStore', () => { test("doesn't throw any error and doesn't warn on http status 404 errors", async () => { const store = new HttpGetStore({endpoint: 'http://example.com'}); const promise = store.get(Buffer.from('key')); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('GET'); @@ -88,7 +88,7 @@ describe('HttpGetStore', () => { test("doesn't throw any error and warns on http status 502 errors", async () => { const store = new HttpGetStore({endpoint: 'http://example.com'}); const promise = store.get(Buffer.from('key')); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('GET'); diff --git a/packages/metro-cache/src/stores/__tests__/HttpStore-test.js b/packages/metro-cache/src/stores/__tests__/HttpStore-test.js index 6802648844..90ec08dbd4 100644 --- a/packages/metro-cache/src/stores/__tests__/HttpStore-test.js +++ b/packages/metro-cache/src/stores/__tests__/HttpStore-test.js @@ -10,8 +10,8 @@ 'use strict'; -const {PassThrough} = require('stream'); -const zlib = require('zlib'); +const {PassThrough} = require('node:stream'); +const zlib = require('node:zlib'); describe('HttpStore', () => { let HttpStore; @@ -60,12 +60,12 @@ describe('HttpStore', () => { .resetModules() .resetAllMocks() .useFakeTimers({legacyFakeTimers: true}) // Legacy fake timers are reset by `resetAllMocks()` - .mock('http') - .mock('https'); + .mock('node:http') + .mock('node:https'); httpPassThrough = new PassThrough(); - require('http').request.mockReturnValue(httpPassThrough); - require('https').request.mockReturnValue(httpPassThrough); + jest.requireMock('node:http').request.mockReturnValue(httpPassThrough); + jest.requireMock('node:https').request.mockReturnValue(httpPassThrough); HttpStore = require('../HttpStore').default; }); @@ -75,20 +75,21 @@ describe('HttpStore', () => { const httpsStore = new HttpStore({endpoint: 'https://example.com'}); httpStore.get(Buffer.from('foo')); - expect(require('http').request).toHaveBeenCalledTimes(1); - expect(require('https').request).not.toHaveBeenCalled(); + expect(jest.requireMock('node:http').request).toHaveBeenCalledTimes(1); + expect(jest.requireMock('node:https').request).not.toHaveBeenCalled(); jest.clearAllMocks(); httpsStore.get(Buffer.from('foo')); - expect(require('http').request).not.toHaveBeenCalled(); - expect(require('https').request).toHaveBeenCalledTimes(1); + expect(jest.requireMock('node:http').request).not.toHaveBeenCalled(); + expect(jest.requireMock('node:https').request).toHaveBeenCalledTimes(1); }); test('gets using the network via GET method', async () => { const store = new HttpStore({endpoint: 'http://www.example.com/endpoint'}); const promise = store.get(Buffer.from('key')); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = + jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('GET'); expect(opts.host).toEqual('www.example.com'); @@ -104,7 +105,8 @@ describe('HttpStore', () => { test('rejects when an HTTP different from 200 is returned', done => { const store = new HttpStore({endpoint: 'http://example.com'}); const promise = store.get(Buffer.from('key')); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = + jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('GET'); @@ -126,7 +128,8 @@ describe('HttpStore', () => { retryStatuses: [429], }); const promise = store.get(Buffer.from('key')); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = + jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('GET'); @@ -143,7 +146,7 @@ describe('HttpStore', () => { expect(err).toBeInstanceOf(HttpStore.HttpError); expect(err.message).toMatch(/HTTP error: 429 Too Many Requests/); expect(err.code).toBe(429); - expect(require('http').request).toHaveBeenCalledTimes(1); + expect(jest.requireMock('node:http').request).toHaveBeenCalledTimes(1); }); test('retries http errors when maxAttempts>1 and status in retryStatuses', async () => { @@ -153,7 +156,7 @@ describe('HttpStore', () => { maxAttempts: 2, retryStatuses: [429], }); - const {request} = require('http'); + const {request} = jest.requireMock('node:http'); request.mockImplementation((opts, callback) => { if (request.mock.calls.length === 1) { @@ -175,7 +178,7 @@ describe('HttpStore', () => { maxAttempts: 3, retryStatuses: [429], }); - const {request} = require('http'); + const {request} = jest.requireMock('node:http'); request.mockImplementation((opts, callback) => { callback(responseHttpError(429)); @@ -201,7 +204,7 @@ describe('HttpStore', () => { maxAttempts: 2, retryNetworkErrors: true, }); - const {request} = require('http'); + const {request} = jest.requireMock('node:http'); request.mockImplementation((opts, callback) => { if (request.mock.calls.length === 1) { @@ -221,7 +224,8 @@ describe('HttpStore', () => { test('get() includes HTTP error body in rejection with debug: true', done => { const store = new HttpStore({endpoint: 'http://example.com', debug: true}); const promise = store.get(Buffer.from('key')); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = + jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('GET'); @@ -244,7 +248,8 @@ describe('HttpStore', () => { additionalSuccessStatuses: [419], }); const promise = store.get(Buffer.from('key')); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = + jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('GET'); expect(opts.host).toEqual('www.example.com'); @@ -260,7 +265,8 @@ describe('HttpStore', () => { test('rejects when it gets an invalid JSON response', done => { const store = new HttpStore({endpoint: 'http://example.com'}); const promise = store.get(Buffer.from('key')); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = + jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('GET'); @@ -276,7 +282,8 @@ describe('HttpStore', () => { test('rejects when the HTTP layer throws', done => { const store = new HttpStore({endpoint: 'http://example.com'}); const promise = store.get(Buffer.from('key')); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = + jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('GET'); @@ -301,7 +308,7 @@ describe('HttpStore', () => { retryStatuses: [503], }, }); - const {request} = require('http'); + const {request} = jest.requireMock('node:http'); request.mockImplementation((opts, callback) => { if (request.mock.calls.length === 1) { @@ -326,7 +333,8 @@ describe('HttpStore', () => { test('sets using the network via PUT method', done => { const store = new HttpStore({endpoint: 'http://www.example.com/endpoint'}); const promise = store.set(Buffer.from('key-set'), {foo: 42}); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = + jest.requireMock('node:http').request.mock.calls[0]; const buf = []; expect(opts.method).toEqual('PUT'); @@ -351,7 +359,8 @@ describe('HttpStore', () => { test('rejects when setting and HTTP fails', done => { const store = new HttpStore({endpoint: 'http://example.com'}); const promise = store.set(Buffer.from('key-set'), {foo: 42}); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = + jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('PUT'); @@ -371,7 +380,8 @@ describe('HttpStore', () => { additionalSuccessStatuses: [403], }); const promise = store.set(Buffer.from('key-set'), {foo: 42}); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = + jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('PUT'); expect(opts.host).toEqual('www.example.com'); @@ -392,7 +402,8 @@ describe('HttpStore', () => { test('rejects when setting and HTTP returns an error response', done => { const store = new HttpStore({endpoint: 'http://example.com'}); const promise = store.set(Buffer.from('key-set'), {foo: 42}); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = + jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('PUT'); @@ -410,7 +421,8 @@ describe('HttpStore', () => { test('set() includes HTTP error body in rejection with debug: true', done => { const store = new HttpStore({endpoint: 'http://example.com', debug: true}); const promise = store.set(Buffer.from('key-set'), {foo: 42}); - const [opts, callback] = require('http').request.mock.calls[0]; + const [opts, callback] = + jest.requireMock('node:http').request.mock.calls[0]; expect(opts.method).toEqual('PUT'); @@ -439,7 +451,8 @@ describe('HttpStore', () => { httpPassThrough.on('end', () => { storedValue = zlib.gunzipSync(Buffer.concat(chunks)); - const callbackSet = require('http').request.mock.calls[0][1]; + const callbackSet = + jest.requireMock('node:http').request.mock.calls[0][1]; callbackSet(responseHttpOk('')); }); @@ -447,7 +460,7 @@ describe('HttpStore', () => { await store.set(Buffer.from('key-set'), {foo: 42}); const promiseGet = store.get(Buffer.from('key-set')); - const callbackGet = require('http').request.mock.calls[1][1]; + const callbackGet = jest.requireMock('node:http').request.mock.calls[1][1]; callbackGet(responseHttpOk(storedValue)); @@ -466,7 +479,8 @@ describe('HttpStore', () => { httpPassThrough.on('end', () => { storedValue = zlib.gunzipSync(Buffer.concat(chunks)); - const callbackSet = require('http').request.mock.calls[0][1]; + const callbackSet = + jest.requireMock('node:http').request.mock.calls[0][1]; callbackSet(responseHttpOk('')); }); @@ -476,7 +490,7 @@ describe('HttpStore', () => { await store.set(Buffer.from('key-set'), bufferValue); const promiseGet = store.get(Buffer.from('key-set')); - const callbackGet = require('http').request.mock.calls[1][1]; + const callbackGet = jest.requireMock('node:http').request.mock.calls[1][1]; callbackGet(responseHttpOk(storedValue)); diff --git a/packages/metro-config/src/__tests__/loadConfig-test.js b/packages/metro-config/src/__tests__/loadConfig-test.js index 404bb2d2a6..8951d5ec15 100644 --- a/packages/metro-config/src/__tests__/loadConfig-test.js +++ b/packages/metro-config/src/__tests__/loadConfig-test.js @@ -13,9 +13,9 @@ import getDefaultConfig from '../defaults'; const {loadConfig} = require('../loadConfig'); -const path = require('path'); +const path = require('node:path'); const prettyFormat = require('pretty-format'); -const util = require('util'); +const util = require('node:util'); const FIXTURES = path.resolve(__dirname, '../__fixtures__'); @@ -108,11 +108,11 @@ describe('loadConfig', () => { }); test('can load the config with no config present', async () => { - jest.mock('fs', () => ({ + jest.mock('node:fs', () => ({ existsSync: jest.fn(() => false), })); const result = await loadConfig({cwd: process.cwd()}); - jest.unmock('fs'); + jest.unmock('node:fs'); let defaultConfig = await getDefaultConfig(process.cwd()); defaultConfig = { @@ -164,11 +164,11 @@ describe('loadConfig', () => { beforeAll(() => { jest.resetModules(); - jest.mock('os', () => ({ - ...jest.requireActual('os'), + jest.mock('node:os', () => ({ + ...jest.requireActual('node:os'), homedir: mockHomeDir, })); - jest.mock('fs', () => ({ + jest.mock('node:fs', () => ({ existsSync: mockExistsSync, })); // Reload after mocking above diff --git a/packages/metro-config/src/defaults/__tests__/exclusionList-test.js b/packages/metro-config/src/defaults/__tests__/exclusionList-test.js index c45f957f74..6d3528951d 100644 --- a/packages/metro-config/src/defaults/__tests__/exclusionList-test.js +++ b/packages/metro-config/src/defaults/__tests__/exclusionList-test.js @@ -11,7 +11,7 @@ import exclusionList from '../exclusionList'; -const path = require('path'); +const path = require('node:path'); describe('exclusionList', () => { let originalSeparator; @@ -32,9 +32,9 @@ describe('exclusionList', () => { test('proves we can write to path.sep for setting up the tests', () => { setPathSeperator('/'); - expect(require('path').sep).toBe('/'); + expect(require('node:path').sep).toBe('/'); setPathSeperator('\\'); - expect(require('path').sep).toBe('\\'); + expect(require('node:path').sep).toBe('\\'); }); describe('simulate macOS/linux enviornment', () => { diff --git a/packages/metro-config/src/defaults/__tests__/getMaxWorkers-test.js b/packages/metro-config/src/defaults/__tests__/getMaxWorkers-test.js index 80a83d3f78..41a143ffef 100644 --- a/packages/metro-config/src/defaults/__tests__/getMaxWorkers-test.js +++ b/packages/metro-config/src/defaults/__tests__/getMaxWorkers-test.js @@ -11,11 +11,11 @@ 'use strict'; -jest.mock('os'); +jest.mock('node:os'); import getMaxWorkers from '../getMaxWorkers'; -const os = require('os'); +const os = jest.requireMock('node:os'); test('calculates the number of max workers', () => { /* $FlowFixMe[prop-missing](>=0.99.0 site=react_native_fb) This comment suppresses an error diff --git a/packages/metro-config/src/defaults/exclusionList.js b/packages/metro-config/src/defaults/exclusionList.js index 749a92c484..8a3356388a 100644 --- a/packages/metro-config/src/defaults/exclusionList.js +++ b/packages/metro-config/src/defaults/exclusionList.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import path from 'path'; +import path from 'node:path'; const list = [/\/__tests__\/.*/]; diff --git a/packages/metro-config/src/defaults/getMaxWorkers.js b/packages/metro-config/src/defaults/getMaxWorkers.js index 8c2e945e75..160d01e84e 100644 --- a/packages/metro-config/src/defaults/getMaxWorkers.js +++ b/packages/metro-config/src/defaults/getMaxWorkers.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import os from 'os'; +import os from 'node:os'; export default function getMaxWorkers(workers: ?number): number { // $FlowFixMe[prop-missing] Missing Flow lib def for availableParallelism diff --git a/packages/metro-config/src/defaults/index.js b/packages/metro-config/src/defaults/index.js index 4eb7c4a195..679d1e9498 100644 --- a/packages/metro-config/src/defaults/index.js +++ b/packages/metro-config/src/defaults/index.js @@ -26,8 +26,8 @@ import getMaxWorkers from './getMaxWorkers'; import {FileStore} from 'metro-cache'; import {Terminal} from 'metro-core'; import TerminalReporter from 'metro/private/lib/TerminalReporter'; -import * as os from 'os'; -import * as path from 'path'; +import * as os from 'node:os'; +import * as path from 'node:path'; const getDefaultValues = (projectRoot: ?string): ConfigT => ({ resolver: { diff --git a/packages/metro-config/src/loadConfig.js b/packages/metro-config/src/loadConfig.js index 2cbe516eb8..8fe370d064 100644 --- a/packages/metro-config/src/loadConfig.js +++ b/packages/metro-config/src/loadConfig.js @@ -13,13 +13,13 @@ import type {ConfigT, InputConfigT, YargArguments} from './types'; import getDefaultConfig from './defaults'; import validConfig from './defaults/validConfig'; -import * as fs from 'fs'; import {validate} from 'jest-validate'; import * as MetroCache from 'metro-cache'; -import {homedir} from 'os'; -import * as path from 'path'; +import * as fs from 'node:fs'; +import {homedir} from 'node:os'; +import * as path from 'node:path'; // eslint-disable-next-line no-restricted-imports -import {pathToFileURL} from 'url'; +import {pathToFileURL} from 'node:url'; type ResolveConfigResult = { filepath: string, diff --git a/packages/metro-core/src/Logger.js b/packages/metro-core/src/Logger.js index beb77ca8c9..4a5a6ebd2d 100644 --- a/packages/metro-core/src/Logger.js +++ b/packages/metro-core/src/Logger.js @@ -11,8 +11,8 @@ import type {BundleOptions} from 'metro/private/shared/types'; -import EventEmitter from 'events'; -import os from 'os'; +import EventEmitter from 'node:events'; +import os from 'node:os'; // eslint-disable-next-line import/no-commonjs const VERSION = require('../package.json').version; diff --git a/packages/metro-core/src/Terminal.js b/packages/metro-core/src/Terminal.js index a2459e5778..38a9846556 100644 --- a/packages/metro-core/src/Terminal.js +++ b/packages/metro-core/src/Terminal.js @@ -9,13 +9,13 @@ * @oncall react_native */ -import type {Socket} from 'net'; -import type {Writable} from 'stream'; +import type {Socket} from 'node:net'; +import type {Writable} from 'node:stream'; import throttle from 'lodash.throttle'; -import readline from 'readline'; -import tty from 'tty'; -import util from 'util'; +import readline from 'node:readline'; +import tty from 'node:tty'; +import util from 'node:util'; const {promisify} = util; diff --git a/packages/metro-core/src/__tests__/Terminal-test.js b/packages/metro-core/src/__tests__/Terminal-test.js index f8fadd8dec..8a2ac4a612 100644 --- a/packages/metro-core/src/__tests__/Terminal-test.js +++ b/packages/metro-core/src/__tests__/Terminal-test.js @@ -14,7 +14,7 @@ const Terminal = require('../Terminal').default; jest.useRealTimers(); -jest.mock('readline', () => ({ +jest.mock('node:readline', () => ({ moveCursor: (stream, dx, dy, callback = () => {}) => { const {cursor, columns} = stream; stream.cursor = @@ -50,7 +50,9 @@ describe.each([false, true])( const lines = 10; const columns = 10; const stream = Object.create( - isTTY ? require('tty').WriteStream.prototype : require('net').Socket, + isTTY + ? require('node:tty').WriteStream.prototype + : require('node:net').Socket, ); Object.assign(stream, { cursor: 0, diff --git a/packages/metro-core/types/Terminal.d.ts b/packages/metro-core/types/Terminal.d.ts index 462cee64a8..60f65c3245 100644 --- a/packages/metro-core/types/Terminal.d.ts +++ b/packages/metro-core/types/Terminal.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<0b066ed2be97f8d1db5abb8f1a933cb0>> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-core/src/Terminal.js @@ -15,8 +15,8 @@ * yarn run build-ts-defs (OSS) */ -import type {Socket} from 'net'; -import type {Writable} from 'stream'; +import type {Socket} from 'node:net'; +import type {Writable} from 'node:stream'; type UnderlyingStream = Socket | Writable; /** diff --git a/packages/metro-file-map/src/Watcher.js b/packages/metro-file-map/src/Watcher.js index 4f449826f5..7f47c36786 100644 --- a/packages/metro-file-map/src/Watcher.js +++ b/packages/metro-file-map/src/Watcher.js @@ -26,11 +26,11 @@ import FallbackWatcher from './watchers/FallbackWatcher'; import NativeWatcher from './watchers/NativeWatcher'; import WatchmanWatcher from './watchers/WatchmanWatcher'; import debugModule from 'debug'; -import EventEmitter from 'events'; -import * as fs from 'fs'; +import EventEmitter from 'node:events'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import {performance} from 'node:perf_hooks'; import nullthrows from 'nullthrows'; -import * as path from 'path'; -import {performance} from 'perf_hooks'; const debug = debugModule('Metro:Watcher'); diff --git a/packages/metro-file-map/src/__tests__/changes-between-starts-test.js b/packages/metro-file-map/src/__tests__/changes-between-starts-test.js index f9bfa3ec36..e3a67428aa 100644 --- a/packages/metro-file-map/src/__tests__/changes-between-starts-test.js +++ b/packages/metro-file-map/src/__tests__/changes-between-starts-test.js @@ -12,7 +12,7 @@ import type {CacheData, FileData, FileMetadata} from '../flow-types'; import type FileMapT from '../index'; -import * as path from 'path'; +import * as path from 'node:path'; jest.useRealTimers(); diff --git a/packages/metro-file-map/src/__tests__/haste_impl.js b/packages/metro-file-map/src/__tests__/haste_impl.js index f2593b033a..2494481d9a 100644 --- a/packages/metro-file-map/src/__tests__/haste_impl.js +++ b/packages/metro-file-map/src/__tests__/haste_impl.js @@ -12,7 +12,7 @@ 'use strict'; -const path = require('path'); +const path = require('node:path'); let cacheKey; diff --git a/packages/metro-file-map/src/__tests__/includes_dotfiles-test.js b/packages/metro-file-map/src/__tests__/includes_dotfiles-test.js index 981a9cb8e2..b8737f144d 100644 --- a/packages/metro-file-map/src/__tests__/includes_dotfiles-test.js +++ b/packages/metro-file-map/src/__tests__/includes_dotfiles-test.js @@ -10,7 +10,7 @@ */ import HasteMap from '../index'; -import path from 'path'; +import path from 'node:path'; jest.useRealTimers(); diff --git a/packages/metro-file-map/src/__tests__/index-test.js b/packages/metro-file-map/src/__tests__/index-test.js index 04a87e58b2..38049e0e3e 100644 --- a/packages/metro-file-map/src/__tests__/index-test.js +++ b/packages/metro-file-map/src/__tests__/index-test.js @@ -32,9 +32,9 @@ import type {MockMapOptions} from '../plugins/MockPlugin'; import typeof WorkerModule from '../worker'; import {AbstractWatcher} from '../watchers/AbstractWatcher'; -import crypto from 'crypto'; -import * as path from 'path'; -import {serialize} from 'v8'; +import crypto from 'node:crypto'; +import * as path from 'node:path'; +import {serialize} from 'node:v8'; jest.useRealTimers(); @@ -72,7 +72,7 @@ jest.mock('../crawlers/node', () => ({ jest.mock('../crawlers/watchman', () => ({ __esModule: true, default: jest.fn(options => { - const path = require('path'); + const path = require('node:path'); const { previousState, @@ -177,7 +177,7 @@ jest.mock('fs', () => ({ throw error; }), writeFileSync: jest.fn((path, data, options) => { - expect(options).toBe(require('v8').serialize ? undefined : 'utf8'); + expect(options).toBe(require('node:v8').serialize ? undefined : 'utf8'); mockFs[path] = data; }), promises: { @@ -196,6 +196,7 @@ jest.mock('fs', () => ({ }), }, })); +jest.mock('node:fs', () => jest.requireMock('fs')); const hasteImplModulePath = require.resolve('./haste_impl.js'); let inBandWorker; @@ -1459,7 +1460,7 @@ describe('FileMap', () => { test('distributes work across workers', async () => { const jestWorker = require('jest-worker').Worker; - const path = require('path'); + const path = require('node:path'); const dependencyExtractor = path.resolve( __dirname, '../plugins/dependencies/__tests__/mockDependencyExtractor.js', diff --git a/packages/metro-file-map/src/__tests__/worker-test.js b/packages/metro-file-map/src/__tests__/worker-test.js index fe18c89e0d..f27483749c 100644 --- a/packages/metro-file-map/src/__tests__/worker-test.js +++ b/packages/metro-file-map/src/__tests__/worker-test.js @@ -11,16 +11,15 @@ import type {WorkerMessage, WorkerMetadata} from '../flow-types'; import typeof TWorker from '../worker'; -import typeof FS from 'fs'; +import typeof FS from 'node:fs'; import {HastePlugin} from '..'; import {Worker} from '../worker'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as vm from 'vm'; +import * as path from 'node:path'; +import * as vm from 'node:vm'; jest.mock('fs', () => { - const path = require('path'); + const path = require('node:path'); const mockFs = { [path.join('/project', 'fruits', 'Banana.js')]: ` const Strawberry = require("Strawberry"); @@ -65,6 +64,8 @@ jest.mock('fs', () => { }; }); +const fs: FS = jest.requireMock('fs'); + const defaults: WorkerMessage = { computeSha1: false, filePath: path.join('/project', 'notexist.js'), diff --git a/packages/metro-file-map/src/cache/DiskCacheManager.js b/packages/metro-file-map/src/cache/DiskCacheManager.js index 8572df6297..d946adb264 100644 --- a/packages/metro-file-map/src/cache/DiskCacheManager.js +++ b/packages/metro-file-map/src/cache/DiskCacheManager.js @@ -19,11 +19,11 @@ import type { import rootRelativeCacheKeys from '../lib/rootRelativeCacheKeys'; import debugModule from 'debug'; -import {promises as fsPromises} from 'fs'; -import {tmpdir} from 'os'; -import path from 'path'; -import {Timeout, clearTimeout, setTimeout} from 'timers'; -import {deserialize, serialize} from 'v8'; +import {promises as fsPromises} from 'node:fs'; +import {tmpdir} from 'node:os'; +import path from 'node:path'; +import {Timeout, clearTimeout, setTimeout} from 'node:timers'; +import {deserialize, serialize} from 'node:v8'; const debug = debugModule('Metro:FileMapCache'); diff --git a/packages/metro-file-map/src/cache/__tests__/DiskCacheManager-test.js b/packages/metro-file-map/src/cache/__tests__/DiskCacheManager-test.js index 2d7689556f..af7ad4e1c7 100644 --- a/packages/metro-file-map/src/cache/__tests__/DiskCacheManager-test.js +++ b/packages/metro-file-map/src/cache/__tests__/DiskCacheManager-test.js @@ -17,14 +17,14 @@ import type { } from '../../flow-types'; import {DiskCacheManager} from '../DiskCacheManager'; -import EventEmitter from 'events'; -import * as path from 'path'; -import {serialize} from 'v8'; +import EventEmitter from 'node:events'; +import * as path from 'node:path'; +import {serialize} from 'node:v8'; const mockReadFile = jest.fn(); const mockWriteFile = jest.fn(); -jest.mock('fs', () => ({ +jest.mock('node:fs', () => ({ promises: { readFile: (...args) => mockReadFile(...args), writeFile: (...args) => mockWriteFile(...args), @@ -33,7 +33,7 @@ jest.mock('fs', () => ({ // We're explicitly using node:timers, which Jest doesn't automatically mock // with useFakeTimers. Global timers are mocked. -jest.mock('timers', () => ({ +jest.mock('node:timers', () => ({ setTimeout: globalThis.setTimeout, clearTimeout: globalThis.clearTimeout, })); diff --git a/packages/metro-file-map/src/crawlers/__tests__/integration-test.js b/packages/metro-file-map/src/crawlers/__tests__/integration-test.js index f77260c8ba..e3ee5dc01f 100644 --- a/packages/metro-file-map/src/crawlers/__tests__/integration-test.js +++ b/packages/metro-file-map/src/crawlers/__tests__/integration-test.js @@ -12,10 +12,10 @@ import TreeFS from '../../lib/TreeFS'; import nodeCrawl from '../node'; import watchmanCrawl from '../watchman'; -import {execSync} from 'child_process'; import invariant from 'invariant'; -import os from 'os'; -import {join} from 'path'; +import {execSync} from 'node:child_process'; +import os from 'node:os'; +import {join} from 'node:path'; jest.useRealTimers(); diff --git a/packages/metro-file-map/src/crawlers/__tests__/watchman-test.js b/packages/metro-file-map/src/crawlers/__tests__/watchman-test.js index a5b2b5c027..eef2f78d97 100644 --- a/packages/metro-file-map/src/crawlers/__tests__/watchman-test.js +++ b/packages/metro-file-map/src/crawlers/__tests__/watchman-test.js @@ -10,7 +10,7 @@ import TreeFS from '../../lib/TreeFS'; -const path = require('path'); +const path = require('node:path'); jest.useRealTimers(); diff --git a/packages/metro-file-map/src/crawlers/node/index.js b/packages/metro-file-map/src/crawlers/node/index.js index 5c1b803a67..a7d40a50a5 100644 --- a/packages/metro-file-map/src/crawlers/node/index.js +++ b/packages/metro-file-map/src/crawlers/node/index.js @@ -19,7 +19,7 @@ import type { import {RootPathUtils} from '../../lib/RootPathUtils'; import * as fs from 'graceful-fs'; -import * as path from 'path'; +import * as path from 'node:path'; type Callback = (result: FileData) => void; diff --git a/packages/metro-file-map/src/crawlers/watchman/__tests__/index-test.js b/packages/metro-file-map/src/crawlers/watchman/__tests__/index-test.js index 09f4d023c0..230e7f6863 100644 --- a/packages/metro-file-map/src/crawlers/watchman/__tests__/index-test.js +++ b/packages/metro-file-map/src/crawlers/watchman/__tests__/index-test.js @@ -13,9 +13,9 @@ import type {CrawlerOptions} from '../../../flow-types'; import TreeFS from '../../../lib/TreeFS'; import watchmanCrawl from '../index'; -import EventEmitter from 'events'; +import EventEmitter from 'node:events'; +import path from 'node:path'; import nullthrows from 'nullthrows'; -import path from 'path'; class MockClient extends EventEmitter { command: JestMockFn, unknown> = jest.fn(); diff --git a/packages/metro-file-map/src/crawlers/watchman/index.js b/packages/metro-file-map/src/crawlers/watchman/index.js index 2e45eba592..61b07d2bb3 100644 --- a/packages/metro-file-map/src/crawlers/watchman/index.js +++ b/packages/metro-file-map/src/crawlers/watchman/index.js @@ -26,8 +26,8 @@ import {RootPathUtils} from '../../lib/RootPathUtils'; import {planQuery} from './planQuery'; import watchman from 'fb-watchman'; import invariant from 'invariant'; -import * as path from 'path'; -import {performance} from 'perf_hooks'; +import * as path from 'node:path'; +import {performance} from 'node:perf_hooks'; type WatchmanRoots = Map< string, // Posix-separated absolute path diff --git a/packages/metro-file-map/src/index.js b/packages/metro-file-map/src/index.js index ca644d6a00..3420057205 100644 --- a/packages/metro-file-map/src/index.js +++ b/packages/metro-file-map/src/index.js @@ -53,11 +53,11 @@ import {RootPathUtils} from './lib/RootPathUtils'; import TreeFS from './lib/TreeFS'; import {Watcher} from './Watcher'; import debugModule from 'debug'; -import EventEmitter from 'events'; -import {promises as fsPromises} from 'fs'; import invariant from 'invariant'; -import * as path from 'path'; -import {performance} from 'perf_hooks'; +import EventEmitter from 'node:events'; +import {promises as fsPromises} from 'node:fs'; +import * as path from 'node:path'; +import {performance} from 'node:perf_hooks'; const debug = debugModule('Metro:FileMap'); diff --git a/packages/metro-file-map/src/lib/FileProcessor.js b/packages/metro-file-map/src/lib/FileProcessor.js index 7c88ce291d..051c6bfa42 100644 --- a/packages/metro-file-map/src/lib/FileProcessor.js +++ b/packages/metro-file-map/src/lib/FileProcessor.js @@ -23,7 +23,7 @@ import {Worker} from '../worker'; import {RootPathUtils} from './RootPathUtils'; import debugModule from 'debug'; import {Worker as JestWorker} from 'jest-worker'; -import {sep} from 'path'; +import {sep} from 'node:path'; const debug = debugModule('Metro:FileMap'); diff --git a/packages/metro-file-map/src/lib/RootPathUtils.js b/packages/metro-file-map/src/lib/RootPathUtils.js index 3fc211082d..6326d0ab58 100644 --- a/packages/metro-file-map/src/lib/RootPathUtils.js +++ b/packages/metro-file-map/src/lib/RootPathUtils.js @@ -9,7 +9,7 @@ */ import invariant from 'invariant'; -import * as path from 'path'; +import * as path from 'node:path'; /** * This module provides path utility functions - similar to `node:path` - diff --git a/packages/metro-file-map/src/lib/TreeFS.js b/packages/metro-file-map/src/lib/TreeFS.js index 8c8fc2b4c0..3dc71cb7ff 100644 --- a/packages/metro-file-map/src/lib/TreeFS.js +++ b/packages/metro-file-map/src/lib/TreeFS.js @@ -23,7 +23,7 @@ import type { import H from '../constants'; import {RootPathUtils} from './RootPathUtils'; import invariant from 'invariant'; -import path from 'path'; +import path from 'node:path'; type DirectoryNode = Map; type FileNode = FileMetadata; diff --git a/packages/metro-file-map/src/lib/__tests__/FileProcessor-test.js b/packages/metro-file-map/src/lib/__tests__/FileProcessor-test.js index d3ec589a73..fa28b2633c 100644 --- a/packages/metro-file-map/src/lib/__tests__/FileProcessor-test.js +++ b/packages/metro-file-map/src/lib/__tests__/FileProcessor-test.js @@ -17,7 +17,7 @@ import type { } from '../../flow-types'; import H from '../../constants'; -import path from 'path'; +import path from 'node:path'; const MockJestWorker = jest.fn().mockImplementation(() => ({ processFile: async () => ({}), diff --git a/packages/metro-file-map/src/lib/__tests__/RootPathUtils-test.js b/packages/metro-file-map/src/lib/__tests__/RootPathUtils-test.js index 493f9b3eb4..a362a10492 100644 --- a/packages/metro-file-map/src/lib/__tests__/RootPathUtils-test.js +++ b/packages/metro-file-map/src/lib/__tests__/RootPathUtils-test.js @@ -12,7 +12,7 @@ import type {RootPathUtils as RootPathUtilsT} from '../RootPathUtils'; let mockPathModule; -jest.mock('path', () => mockPathModule); +jest.mock('node:path', () => mockPathModule); describe.each([['win32'], ['posix']])('RootPathUtils on %s', platform => { // Convenience function to write paths with posix separators but convert them diff --git a/packages/metro-file-map/src/lib/__tests__/TreeFS-test.js b/packages/metro-file-map/src/lib/__tests__/TreeFS-test.js index bc5923cece..a94efce125 100644 --- a/packages/metro-file-map/src/lib/__tests__/TreeFS-test.js +++ b/packages/metro-file-map/src/lib/__tests__/TreeFS-test.js @@ -20,7 +20,7 @@ import type TreeFSType from '../TreeFS'; import H from '../../constants'; let mockPathModule; -jest.mock('path', () => mockPathModule); +jest.mock('node:path', () => mockPathModule); describe.each([['win32'], ['posix']])('TreeFS on %s', platform => { // Convenience function to write paths with posix separators but convert them diff --git a/packages/metro-file-map/src/lib/__tests__/checkWatchmanCapabilities-test.js b/packages/metro-file-map/src/lib/__tests__/checkWatchmanCapabilities-test.js index a6f63f48e5..38b7ebd01d 100644 --- a/packages/metro-file-map/src/lib/__tests__/checkWatchmanCapabilities-test.js +++ b/packages/metro-file-map/src/lib/__tests__/checkWatchmanCapabilities-test.js @@ -11,7 +11,7 @@ import checkWatchmanCapabilities from '../checkWatchmanCapabilities'; const mockExecFile = jest.fn(); -jest.mock('child_process', () => ({ +jest.mock('node:child_process', () => ({ execFile: (...args) => mockExecFile(...args), })); diff --git a/packages/metro-file-map/src/lib/__tests__/normalizePathSeparatorsToSystem-test.js b/packages/metro-file-map/src/lib/__tests__/normalizePathSeparatorsToSystem-test.js index 2f78c9b21e..3eda739962 100644 --- a/packages/metro-file-map/src/lib/__tests__/normalizePathSeparatorsToSystem-test.js +++ b/packages/metro-file-map/src/lib/__tests__/normalizePathSeparatorsToSystem-test.js @@ -13,7 +13,7 @@ describe('normalizePathSeparatorsToSystem', () => { test('does nothing on posix', () => { jest.resetModules(); - jest.mock('path', () => jest.requireActual('path').posix); + jest.mock('node:path', () => jest.requireActual('node:path').posix); const normalizePathSeparatorsToSystem = require('../normalizePathSeparatorsToSystem').default; expect(normalizePathSeparatorsToSystem('foo/bar/baz.js')).toEqual( @@ -23,7 +23,7 @@ describe('normalizePathSeparatorsToSystem', () => { test('replace slashes on windows', () => { jest.resetModules(); - jest.mock('path', () => jest.requireActual('path').win32); + jest.mock('node:path', () => jest.requireActual('node:path').win32); const normalizePathSeparatorsToSystem = require('../normalizePathSeparatorsToSystem').default; expect(normalizePathSeparatorsToSystem('foo/bar/baz.js')).toEqual( diff --git a/packages/metro-file-map/src/lib/__tests__/rootRelativeCacheKeys-test.js b/packages/metro-file-map/src/lib/__tests__/rootRelativeCacheKeys-test.js index 7ce5231cfc..97f57a6e30 100644 --- a/packages/metro-file-map/src/lib/__tests__/rootRelativeCacheKeys-test.js +++ b/packages/metro-file-map/src/lib/__tests__/rootRelativeCacheKeys-test.js @@ -9,7 +9,7 @@ */ import type {BuildParameters, FileMapPlugin} from '../../flow-types'; -import typeof PathModule from 'path'; +import typeof PathModule from 'node:path'; import rootRelativeCacheKeys from '../rootRelativeCacheKeys'; @@ -116,12 +116,12 @@ test('returns a distinct cache key for any change', () => { describe('cross-platform cache keys', () => { afterEach(() => { - jest.unmock('path'); + jest.unmock('node:path'); }); test('returns the same cache key for Windows and POSIX path parameters', () => { let mockPathModule; - jest.mock('path', () => mockPathModule); + jest.mock('node:path', () => mockPathModule); jest.resetModules(); mockPathModule = jest.requireActual('path').posix; diff --git a/packages/metro-file-map/src/lib/checkWatchmanCapabilities.js b/packages/metro-file-map/src/lib/checkWatchmanCapabilities.js index 93c3f3f64b..171933e0b0 100644 --- a/packages/metro-file-map/src/lib/checkWatchmanCapabilities.js +++ b/packages/metro-file-map/src/lib/checkWatchmanCapabilities.js @@ -8,8 +8,8 @@ * @format */ -import {execFile} from 'child_process'; -import {promisify} from 'util'; +import {execFile} from 'node:child_process'; +import {promisify} from 'node:util'; export default async function checkWatchmanCapabilities( requiredCapabilities: ReadonlyArray, diff --git a/packages/metro-file-map/src/lib/normalizePathSeparatorsToPosix.js b/packages/metro-file-map/src/lib/normalizePathSeparatorsToPosix.js index 152d735c14..37342f183c 100644 --- a/packages/metro-file-map/src/lib/normalizePathSeparatorsToPosix.js +++ b/packages/metro-file-map/src/lib/normalizePathSeparatorsToPosix.js @@ -8,7 +8,7 @@ * @format */ -import * as path from 'path'; +import * as path from 'node:path'; let normalizePathSeparatorsToPosix; if (path.sep === '/') { diff --git a/packages/metro-file-map/src/lib/normalizePathSeparatorsToSystem.js b/packages/metro-file-map/src/lib/normalizePathSeparatorsToSystem.js index b35346c9a3..c091b8911a 100644 --- a/packages/metro-file-map/src/lib/normalizePathSeparatorsToSystem.js +++ b/packages/metro-file-map/src/lib/normalizePathSeparatorsToSystem.js @@ -8,7 +8,7 @@ * @format */ -import * as path from 'path'; +import * as path from 'node:path'; let normalizePathSeparatorsToSystem; if (path.sep === '/') { diff --git a/packages/metro-file-map/src/lib/rootRelativeCacheKeys.js b/packages/metro-file-map/src/lib/rootRelativeCacheKeys.js index c0abddcbfc..1237a3bc42 100644 --- a/packages/metro-file-map/src/lib/rootRelativeCacheKeys.js +++ b/packages/metro-file-map/src/lib/rootRelativeCacheKeys.js @@ -13,7 +13,7 @@ import type {BuildParameters} from '../flow-types'; import normalizePathSeparatorsToPosix from './normalizePathSeparatorsToPosix'; import {RootPathUtils} from './RootPathUtils'; -import {createHash} from 'crypto'; +import {createHash} from 'node:crypto'; export default function rootRelativeCacheKeys( buildParameters: BuildParameters, diff --git a/packages/metro-file-map/src/plugins/HastePlugin.js b/packages/metro-file-map/src/plugins/HastePlugin.js index 44fac75522..36e3e66236 100644 --- a/packages/metro-file-map/src/plugins/HastePlugin.js +++ b/packages/metro-file-map/src/plugins/HastePlugin.js @@ -32,7 +32,7 @@ import {chainComparators, compareStrings} from '../lib/sorting'; import {DuplicateHasteCandidatesError} from './haste/DuplicateHasteCandidatesError'; import getPlatformExtension from './haste/getPlatformExtension'; import {HasteConflictsError} from './haste/HasteConflictsError'; -import path from 'path'; +import path from 'node:path'; const EMPTY_OBJ: Readonly<{[string]: HasteMapItemMetadata}> = {}; const EMPTY_MAP: ReadonlyMap = new Map(); diff --git a/packages/metro-file-map/src/plugins/MockPlugin.js b/packages/metro-file-map/src/plugins/MockPlugin.js index 805c0c5bb1..3510118d9a 100644 --- a/packages/metro-file-map/src/plugins/MockPlugin.js +++ b/packages/metro-file-map/src/plugins/MockPlugin.js @@ -23,8 +23,8 @@ import normalizePathSeparatorsToPosix from '../lib/normalizePathSeparatorsToPosi import normalizePathSeparatorsToSystem from '../lib/normalizePathSeparatorsToSystem'; import {RootPathUtils} from '../lib/RootPathUtils'; import getMockName from './mocks/getMockName'; +import path from 'node:path'; import nullthrows from 'nullthrows'; -import path from 'path'; export const CACHE_VERSION = 2; diff --git a/packages/metro-file-map/src/plugins/dependencies/__tests__/DependencyPlugin-test.js b/packages/metro-file-map/src/plugins/dependencies/__tests__/DependencyPlugin-test.js index 2fc1646379..a1205cdf2a 100644 --- a/packages/metro-file-map/src/plugins/dependencies/__tests__/DependencyPlugin-test.js +++ b/packages/metro-file-map/src/plugins/dependencies/__tests__/DependencyPlugin-test.js @@ -10,7 +10,7 @@ */ import DependencyPlugin from '../../DependencyPlugin'; -import path from 'path'; +import path from 'node:path'; describe('DependencyPlugin', () => { let plugin: DependencyPlugin; diff --git a/packages/metro-file-map/src/plugins/haste/HasteConflictsError.js b/packages/metro-file-map/src/plugins/haste/HasteConflictsError.js index 9054d8d6f8..a428110ae9 100644 --- a/packages/metro-file-map/src/plugins/haste/HasteConflictsError.js +++ b/packages/metro-file-map/src/plugins/haste/HasteConflictsError.js @@ -11,7 +11,7 @@ import type {HasteConflict} from '../../flow-types'; -import path from 'path'; +import path from 'node:path'; export class HasteConflictsError extends Error { #conflicts: ReadonlyArray; diff --git a/packages/metro-file-map/src/plugins/haste/__tests__/HastePlugin-test.js b/packages/metro-file-map/src/plugins/haste/__tests__/HastePlugin-test.js index c1b09c29f4..cba63d824c 100644 --- a/packages/metro-file-map/src/plugins/haste/__tests__/HastePlugin-test.js +++ b/packages/metro-file-map/src/plugins/haste/__tests__/HastePlugin-test.js @@ -16,7 +16,7 @@ import type { import type HasteMapType from '../../HastePlugin'; let mockPathModule; -jest.mock('path', () => mockPathModule); +jest.mock('node:path', () => mockPathModule); describe.each([['win32'], ['posix']])('HastePlugin on %s', platform => { const p: string => string = filePath => diff --git a/packages/metro-file-map/src/plugins/haste/computeConflicts.js b/packages/metro-file-map/src/plugins/haste/computeConflicts.js index 696df01048..4a4ecc1bc1 100644 --- a/packages/metro-file-map/src/plugins/haste/computeConflicts.js +++ b/packages/metro-file-map/src/plugins/haste/computeConflicts.js @@ -12,7 +12,7 @@ import type {HasteMapItem} from '../../flow-types'; import H from '../../constants'; import {chainComparators, compareStrings} from '../../lib/sorting'; -import path from 'path'; +import path from 'node:path'; type Conflict = { id: string, diff --git a/packages/metro-file-map/src/plugins/haste/worker.js b/packages/metro-file-map/src/plugins/haste/worker.js index debefea962..63254a9ae2 100644 --- a/packages/metro-file-map/src/plugins/haste/worker.js +++ b/packages/metro-file-map/src/plugins/haste/worker.js @@ -13,7 +13,7 @@ 'use strict'; const excludedExtensions = require('../../workerExclusionList'); -const path = require('path'); +const path = require('node:path'); /*:: import type {MetadataWorker, WorkerMessage, V8Serializable} from '../../flow-types'; diff --git a/packages/metro-file-map/src/plugins/mocks/__tests__/MockPlugin-test.js b/packages/metro-file-map/src/plugins/mocks/__tests__/MockPlugin-test.js index 43f2835646..465fb6102a 100644 --- a/packages/metro-file-map/src/plugins/mocks/__tests__/MockPlugin-test.js +++ b/packages/metro-file-map/src/plugins/mocks/__tests__/MockPlugin-test.js @@ -12,7 +12,7 @@ import type MockMapType from '../../MockPlugin'; let mockPathModule; -jest.mock('path', () => mockPathModule); +jest.mock('node:path', () => mockPathModule); describe.each([['win32'], ['posix']])('MockPlugin on %s', platform => { const p: string => string = filePath => diff --git a/packages/metro-file-map/src/plugins/mocks/__tests__/getMockName-test.js b/packages/metro-file-map/src/plugins/mocks/__tests__/getMockName-test.js index e750d5fe7a..595484ae83 100644 --- a/packages/metro-file-map/src/plugins/mocks/__tests__/getMockName-test.js +++ b/packages/metro-file-map/src/plugins/mocks/__tests__/getMockName-test.js @@ -9,7 +9,7 @@ */ import getMockName from '../getMockName'; -import path from 'path'; +import path from 'node:path'; describe('getMockName', () => { test('extracts mock name from file path', () => { diff --git a/packages/metro-file-map/src/plugins/mocks/getMockName.js b/packages/metro-file-map/src/plugins/mocks/getMockName.js index faedb671a9..238696b666 100644 --- a/packages/metro-file-map/src/plugins/mocks/getMockName.js +++ b/packages/metro-file-map/src/plugins/mocks/getMockName.js @@ -8,7 +8,7 @@ * @format */ -import * as path from 'path'; +import * as path from 'node:path'; const MOCKS_PATTERN = path.sep + '__mocks__' + path.sep; diff --git a/packages/metro-file-map/src/watchers/AbstractWatcher.js b/packages/metro-file-map/src/watchers/AbstractWatcher.js index e9fd0c84c4..5566515a26 100644 --- a/packages/metro-file-map/src/watchers/AbstractWatcher.js +++ b/packages/metro-file-map/src/watchers/AbstractWatcher.js @@ -15,8 +15,8 @@ import type { } from '../flow-types'; import {posixPathMatchesPattern} from './common'; -import EventEmitter from 'events'; -import * as path from 'path'; +import EventEmitter from 'node:events'; +import * as path from 'node:path'; export type Listeners = Readonly<{ onFileEvent: (event: WatcherBackendChangeEvent) => void, diff --git a/packages/metro-file-map/src/watchers/FallbackWatcher.js b/packages/metro-file-map/src/watchers/FallbackWatcher.js index 77c128a394..0e10ae1756 100644 --- a/packages/metro-file-map/src/watchers/FallbackWatcher.js +++ b/packages/metro-file-map/src/watchers/FallbackWatcher.js @@ -17,13 +17,13 @@ import type { ChangeEventMetadata, WatcherBackendChangeEvent, } from '../flow-types'; -import type {FSWatcher, Stats} from 'fs'; +import type {FSWatcher, Stats} from 'node:fs'; import {AbstractWatcher} from './AbstractWatcher'; import * as common from './common'; -import fs from 'fs'; -import os from 'os'; -import path from 'path'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; // $FlowFixMe[untyped-import] - Write libdefs for `walker` import walker from 'walker'; diff --git a/packages/metro-file-map/src/watchers/NativeWatcher.js b/packages/metro-file-map/src/watchers/NativeWatcher.js index 9067e51715..6d35e18b9a 100644 --- a/packages/metro-file-map/src/watchers/NativeWatcher.js +++ b/packages/metro-file-map/src/watchers/NativeWatcher.js @@ -8,14 +8,14 @@ * @format */ -import type {FSWatcher} from 'fs'; +import type {FSWatcher} from 'node:fs'; import {AbstractWatcher} from './AbstractWatcher'; import {includedByGlob, typeFromStat} from './common'; import debugModule from 'debug'; -import {promises as fsPromises, watch} from 'fs'; -import {platform} from 'os'; -import * as path from 'path'; +import {promises as fsPromises, watch} from 'node:fs'; +import {platform} from 'node:os'; +import * as path from 'node:path'; const debug = debugModule('Metro:NativeWatcher'); diff --git a/packages/metro-file-map/src/watchers/WatchmanWatcher.js b/packages/metro-file-map/src/watchers/WatchmanWatcher.js index e8073b1d76..79d36edf60 100644 --- a/packages/metro-file-map/src/watchers/WatchmanWatcher.js +++ b/packages/metro-file-map/src/watchers/WatchmanWatcher.js @@ -24,11 +24,11 @@ import normalizePathSeparatorsToSystem from '../lib/normalizePathSeparatorsToSys import {AbstractWatcher} from './AbstractWatcher'; import * as common from './common'; import RecrawlWarning from './RecrawlWarning'; -import assert from 'assert'; -import {createHash} from 'crypto'; import debugModule from 'debug'; import watchman from 'fb-watchman'; import invariant from 'invariant'; +import assert from 'node:assert'; +import {createHash} from 'node:crypto'; const debug = debugModule('Metro:WatchmanWatcher'); diff --git a/packages/metro-file-map/src/watchers/__tests__/WatchmanWatcher-test.js b/packages/metro-file-map/src/watchers/__tests__/WatchmanWatcher-test.js index 8bcd3a1d13..c6070f1456 100644 --- a/packages/metro-file-map/src/watchers/__tests__/WatchmanWatcher-test.js +++ b/packages/metro-file-map/src/watchers/__tests__/WatchmanWatcher-test.js @@ -16,7 +16,7 @@ import type { } from 'fb-watchman'; import WatchmanWatcher from '../WatchmanWatcher'; -import EventEmitter from 'events'; +import EventEmitter from 'node:events'; class MockClient extends EventEmitter { command: JestMockFn, unknown> = jest.fn(); diff --git a/packages/metro-file-map/src/watchers/__tests__/helpers.js b/packages/metro-file-map/src/watchers/__tests__/helpers.js index c6334662ae..b5fb37b7fd 100644 --- a/packages/metro-file-map/src/watchers/__tests__/helpers.js +++ b/packages/metro-file-map/src/watchers/__tests__/helpers.js @@ -15,11 +15,11 @@ import type {WatcherOptions} from '../common'; import FallbackWatcher from '../FallbackWatcher'; import NativeWatcher from '../NativeWatcher'; import WatchmanWatcher from '../WatchmanWatcher'; -import {execSync} from 'child_process'; -import {promises as fsPromises} from 'fs'; import invariant from 'invariant'; -import os from 'os'; -import {join} from 'path'; +import {execSync} from 'node:child_process'; +import {promises as fsPromises} from 'node:fs'; +import os from 'node:os'; +import {join} from 'node:path'; jest.useRealTimers(); diff --git a/packages/metro-file-map/src/watchers/__tests__/integration-test.js b/packages/metro-file-map/src/watchers/__tests__/integration-test.js index 798b6a4bf3..2ca6794d3a 100644 --- a/packages/metro-file-map/src/watchers/__tests__/integration-test.js +++ b/packages/metro-file-map/src/watchers/__tests__/integration-test.js @@ -14,9 +14,9 @@ import type {EventHelpers, WatcherName} from './helpers'; import NativeWatcher from '../NativeWatcher'; import {WATCHERS, createTempWatchRoot, startWatching} from './helpers'; -import {promises as fsPromises} from 'fs'; -import os from 'os'; -import {join} from 'path'; +import {promises as fsPromises} from 'node:fs'; +import os from 'node:os'; +import {join} from 'node:path'; const {mkdir, writeFile, rm, symlink, unlink} = fsPromises; diff --git a/packages/metro-file-map/src/watchers/common.js b/packages/metro-file-map/src/watchers/common.js index 16f4c705bb..10e35277c1 100644 --- a/packages/metro-file-map/src/watchers/common.js +++ b/packages/metro-file-map/src/watchers/common.js @@ -15,11 +15,11 @@ */ import type {ChangeEventMetadata} from '../flow-types'; -import type {Stats} from 'fs'; +import type {Stats} from 'node:fs'; // $FlowFixMe[untyped-import] - Write libdefs for `micromatch` import micromatch from 'micromatch'; -import path from 'path'; +import path from 'node:path'; /** * Constants diff --git a/packages/metro-file-map/src/worker.js b/packages/metro-file-map/src/worker.js index af1ffc06b8..3a01fe354e 100644 --- a/packages/metro-file-map/src/worker.js +++ b/packages/metro-file-map/src/worker.js @@ -23,8 +23,8 @@ import type { 'use strict'; -const {createHash} = require('crypto'); const fs = require('graceful-fs'); +const {createHash} = require('node:crypto'); function sha1hex(content /*: string | Buffer */) /*: string */ { return createHash('sha1').update(content).digest('hex'); diff --git a/packages/metro-file-map/types/Watcher.d.ts b/packages/metro-file-map/types/Watcher.d.ts index 05ae754dcf..b873422526 100644 --- a/packages/metro-file-map/types/Watcher.d.ts +++ b/packages/metro-file-map/types/Watcher.d.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. * * @noformat - * @generated SignedSource<<264a91514e87b4d291030528067bc411>> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-file-map/src/Watcher.js @@ -16,7 +16,7 @@ import type {Console, CrawlerOptions, CrawlResult, PerfLogger, WatcherBackendChangeEvent} from './flow-types'; -import EventEmitter from 'events'; +import EventEmitter from 'node:events'; type WatcherOptions = { abortSignal: AbortSignal; diff --git a/packages/metro-file-map/types/index.d.ts b/packages/metro-file-map/types/index.d.ts index 3b9d1f9f75..c34fe88bde 100644 --- a/packages/metro-file-map/types/index.d.ts +++ b/packages/metro-file-map/types/index.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<280eebdbd2507969e4b6df9e48a4495c>> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-file-map/src/index.js @@ -31,7 +31,7 @@ import type { PerfLoggerFactory, } from './flow-types'; -import EventEmitter from 'events'; +import EventEmitter from 'node:events'; export type {BuildParameters, BuildResult, CacheData, ChangeEventMetadata, FileData, FileMap, FileSystem, HasteMapData, HasteMapItem, InputFileMapPlugin}; export type InputOptions = Readonly<{ diff --git a/packages/metro-file-map/types/watchers/common.d.ts b/packages/metro-file-map/types/watchers/common.d.ts index 7af37bc0a0..2166189d48 100644 --- a/packages/metro-file-map/types/watchers/common.d.ts +++ b/packages/metro-file-map/types/watchers/common.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<56a5351ea6e2e4904e17953a832baea1>> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-file-map/src/watchers/common.js @@ -21,7 +21,7 @@ */ import type {ChangeEventMetadata} from '../flow-types'; -import type {Stats} from 'fs'; +import type {Stats} from 'node:fs'; /** * Constants */ diff --git a/packages/metro-resolver/src/PackageExportsResolve.js b/packages/metro-resolver/src/PackageExportsResolve.js index f34479fbc3..58dcd9a8c4 100644 --- a/packages/metro-resolver/src/PackageExportsResolve.js +++ b/packages/metro-resolver/src/PackageExportsResolve.js @@ -25,7 +25,7 @@ import isAssetFile from './utils/isAssetFile'; import {isSubpathDefinedInExportsLike} from './utils/isSubpathDefinedInExportsLike'; import {matchSubpathFromExportsLike} from './utils/matchSubpathFromExportsLike'; import {systemToPosixPath} from './utils/paths'; -import path from 'path'; +import path from 'node:path'; /** * Resolve a package subpath based on the entry points defined in the package's diff --git a/packages/metro-resolver/src/PackageImportsResolve.js b/packages/metro-resolver/src/PackageImportsResolve.js index f36e8ba9a7..80d50f8f96 100644 --- a/packages/metro-resolver/src/PackageImportsResolve.js +++ b/packages/metro-resolver/src/PackageImportsResolve.js @@ -17,7 +17,7 @@ import resolveAsset from './resolveAsset'; import isAssetFile from './utils/isAssetFile'; import {isSubpathDefinedInExportsLike} from './utils/isSubpathDefinedInExportsLike'; import {matchSubpathFromExportsLike} from './utils/matchSubpathFromExportsLike'; -import path from 'path'; +import path from 'node:path'; /** * Resolve a package subpath based on the entry points defined in the package's diff --git a/packages/metro-resolver/src/PackageResolve.js b/packages/metro-resolver/src/PackageResolve.js index fb85bffaed..c6e1efb74b 100644 --- a/packages/metro-resolver/src/PackageResolve.js +++ b/packages/metro-resolver/src/PackageResolve.js @@ -12,7 +12,7 @@ import type {PackageInfo, PackageJson, ResolutionContext} from './types'; import {systemToPosixPath} from './utils/paths'; -import path from 'path'; +import path from 'node:path'; /** * Resolve the main entry point subpath for a package. diff --git a/packages/metro-resolver/src/__tests__/assets-test.js b/packages/metro-resolver/src/__tests__/assets-test.js index e8c37d9402..26706cbcd8 100644 --- a/packages/metro-resolver/src/__tests__/assets-test.js +++ b/packages/metro-resolver/src/__tests__/assets-test.js @@ -11,7 +11,7 @@ import * as Resolver from '../index'; import {createResolutionContext} from './utils'; -import path from 'path'; +import path from 'node:path'; describe('asset resolutions', () => { const baseContext = { diff --git a/packages/metro-resolver/src/__tests__/package-exports-test.js b/packages/metro-resolver/src/__tests__/package-exports-test.js index 3d63e835c7..e734bb7fc9 100644 --- a/packages/metro-resolver/src/__tests__/package-exports-test.js +++ b/packages/metro-resolver/src/__tests__/package-exports-test.js @@ -11,7 +11,7 @@ import * as Resolver from '../index'; import {createPackageAccessors, createResolutionContext} from './utils'; -import path from 'path'; +import path from 'node:path'; // Tests validating Package Exports resolution behaviour. See RFC0534: // https://github.com/react-native-community/discussions-and-proposals/blob/master/proposals/0534-metro-package-exports-support.md diff --git a/packages/metro-resolver/src/__tests__/utils.js b/packages/metro-resolver/src/__tests__/utils.js index 7d0ac91d36..1714dfd053 100644 --- a/packages/metro-resolver/src/__tests__/utils.js +++ b/packages/metro-resolver/src/__tests__/utils.js @@ -12,7 +12,7 @@ import type {ResolutionContext} from '../index'; import type {PackageJson} from '../types'; -import path from 'path'; +import path from 'node:path'; /** * Data structure approximating a file tree. Should be populated with complete diff --git a/packages/metro-resolver/src/resolve.js b/packages/metro-resolver/src/resolve.js index 278ee43733..0fd5a8aaaf 100644 --- a/packages/metro-resolver/src/resolve.js +++ b/packages/metro-resolver/src/resolve.js @@ -34,7 +34,7 @@ import { import resolveAsset from './resolveAsset'; import isAssetFile from './utils/isAssetFile'; import {posixToSystemPath} from './utils/paths'; -import path from 'path'; +import path from 'node:path'; type ParsedBareSpecifier = Readonly<{ isSinglePart: boolean, diff --git a/packages/metro-resolver/src/resolveAsset.js b/packages/metro-resolver/src/resolveAsset.js index 61ce1ab854..1302549bf6 100644 --- a/packages/metro-resolver/src/resolveAsset.js +++ b/packages/metro-resolver/src/resolveAsset.js @@ -11,7 +11,7 @@ import type {AssetResolution, ResolutionContext} from './types'; -import path from 'path'; +import path from 'node:path'; /** * Resolve a file path as an asset. Returns the set of files found after diff --git a/packages/metro-resolver/src/utils/isAssetFile.js b/packages/metro-resolver/src/utils/isAssetFile.js index e242b1857d..6a85390b5e 100644 --- a/packages/metro-resolver/src/utils/isAssetFile.js +++ b/packages/metro-resolver/src/utils/isAssetFile.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import path from 'path'; +import path from 'node:path'; /** * Determine if a file path should be considered an asset file based on the diff --git a/packages/metro-resolver/src/utils/paths.js b/packages/metro-resolver/src/utils/paths.js index 2fd087729d..22c2fb2b18 100644 --- a/packages/metro-resolver/src/utils/paths.js +++ b/packages/metro-resolver/src/utils/paths.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import path from 'path'; +import path from 'node:path'; export const systemToPosixPath: (relativeSystemPath: string) => string = path.sep === '/' diff --git a/packages/metro-runtime/src/polyfills/__tests__/MetroFastRefreshMockRuntime.js b/packages/metro-runtime/src/polyfills/__tests__/MetroFastRefreshMockRuntime.js index ab1b394fb7..ccc905f7df 100644 --- a/packages/metro-runtime/src/polyfills/__tests__/MetroFastRefreshMockRuntime.js +++ b/packages/metro-runtime/src/polyfills/__tests__/MetroFastRefreshMockRuntime.js @@ -15,7 +15,7 @@ import typeof ReactRefreshRuntime from 'react-refresh/runtime'; import typeof ReactTestRenderer from 'react-test-renderer'; import {transformSync} from '@babel/core'; -import fs from 'fs'; +import fs from 'node:fs'; type RuntimeGlobal = Object; diff --git a/packages/metro-runtime/src/polyfills/__tests__/require-test.js b/packages/metro-runtime/src/polyfills/__tests__/require-test.js index 7155da940f..1a5bd67ee0 100644 --- a/packages/metro-runtime/src/polyfills/__tests__/require-test.js +++ b/packages/metro-runtime/src/polyfills/__tests__/require-test.js @@ -11,7 +11,7 @@ 'use strict'; const {transformSync} = require('@babel/core'); -const fs = require('fs'); +const fs = require('node:fs'); function createModule( moduleSystem, diff --git a/packages/metro-source-map/src/__tests__/composeSourceMaps-test.js b/packages/metro-source-map/src/__tests__/composeSourceMaps-test.js index 5e90b5f8ed..6632089e33 100644 --- a/packages/metro-source-map/src/__tests__/composeSourceMaps-test.js +++ b/packages/metro-source-map/src/__tests__/composeSourceMaps-test.js @@ -15,9 +15,9 @@ import composeSourceMaps from '../composeSourceMaps'; import Consumer from '../Consumer'; import {add0, add1} from 'ob1'; -const fs = require('fs'); const invariant = require('invariant'); -const path = require('path'); +const fs = require('node:fs'); +const path = require('node:path'); const terser = require('terser'); const {objectContaining} = expect; diff --git a/packages/metro-source-map/src/generateFunctionMap.js b/packages/metro-source-map/src/generateFunctionMap.js index f7154e6456..6cc22fac59 100644 --- a/packages/metro-source-map/src/generateFunctionMap.js +++ b/packages/metro-source-map/src/generateFunctionMap.js @@ -42,8 +42,8 @@ import { isVariableDeclarator, } from '@babel/types'; import invariant from 'invariant'; +import fsPath from 'node:path'; import nullthrows from 'nullthrows'; -import fsPath from 'path'; type Position = { line: number, diff --git a/packages/metro-symbolicate/src/Symbolication.js b/packages/metro-symbolicate/src/Symbolication.js index 39a32148c9..585c0055a0 100644 --- a/packages/metro-symbolicate/src/Symbolication.js +++ b/packages/metro-symbolicate/src/Symbolication.js @@ -11,15 +11,15 @@ import type {ChromeHeapSnapshot} from './ChromeHeapSnapshot'; import type {HermesFunctionOffsets, MixedSourceMap} from 'metro-source-map'; -import type {Writable} from 'stream'; +import type {Writable} from 'node:stream'; import {ChromeHeapSnapshotProcessor} from './ChromeHeapSnapshot'; import GoogleIgnoreListConsumer from './GoogleIgnoreListConsumer'; import SourceMetadataMapConsumer from './SourceMetadataMapConsumer'; -import fs from 'fs'; import invariant from 'invariant'; +import fs from 'node:fs'; +import path from 'node:path'; import nullthrows from 'nullthrows'; -import path from 'path'; // flowlint-next-line untyped-type-import:off import {typeof SourceMapConsumer} from 'source-map'; diff --git a/packages/metro-symbolicate/src/__tests__/Symbolication-test.js b/packages/metro-symbolicate/src/__tests__/Symbolication-test.js index 6f62d33a8c..28be738581 100644 --- a/packages/metro-symbolicate/src/__tests__/Symbolication-test.js +++ b/packages/metro-symbolicate/src/__tests__/Symbolication-test.js @@ -11,8 +11,8 @@ 'use strict'; const Symbolication = require('../Symbolication.js'); -const fs = require('fs'); -const path = require('path'); +const fs = require('node:fs'); +const path = require('node:path'); const {SourceMapConsumer} = require('source-map'); const resolve = fileName => path.resolve(__dirname, '__fixtures__', fileName); diff --git a/packages/metro-symbolicate/src/__tests__/symbolicate-heap-snapshot-test.js b/packages/metro-symbolicate/src/__tests__/symbolicate-heap-snapshot-test.js index 0b7a850a00..f574408062 100644 --- a/packages/metro-symbolicate/src/__tests__/symbolicate-heap-snapshot-test.js +++ b/packages/metro-symbolicate/src/__tests__/symbolicate-heap-snapshot-test.js @@ -12,9 +12,9 @@ import symbolicate from '../symbolicate'; const {ChromeHeapSnapshotProcessor} = require('../ChromeHeapSnapshot'); -const fs = require('fs'); -const path = require('path'); -const {PassThrough} = require('stream'); +const fs = require('node:fs'); +const path = require('node:path'); +const {PassThrough} = require('node:stream'); const resolve = (fileName: string) => path.resolve(__dirname, '__fixtures__', fileName); diff --git a/packages/metro-symbolicate/src/__tests__/symbolicate-test.js b/packages/metro-symbolicate/src/__tests__/symbolicate-test.js index 6512b4e731..78989fe817 100644 --- a/packages/metro-symbolicate/src/__tests__/symbolicate-test.js +++ b/packages/metro-symbolicate/src/__tests__/symbolicate-test.js @@ -11,10 +11,10 @@ import symbolicate from '../symbolicate'; -const fs = require('fs'); -const os = require('os'); -const path = require('path'); -const {PassThrough} = require('stream'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const {PassThrough} = require('node:stream'); jest.useRealTimers(); diff --git a/packages/metro-symbolicate/src/symbolicate.js b/packages/metro-symbolicate/src/symbolicate.js index 4f5b6bc26b..9d893e1423 100644 --- a/packages/metro-symbolicate/src/symbolicate.js +++ b/packages/metro-symbolicate/src/symbolicate.js @@ -17,14 +17,14 @@ // In our third form, we symbolicate using a module ID, a line number, and // optionally a column. -import type {Readable, Writable} from 'stream'; -import type {ReadStream} from 'tty'; +import type {Readable, Writable} from 'node:stream'; +import type {ReadStream} from 'node:tty'; import * as Symbolication from './Symbolication'; -import fs from 'fs'; +import fs from 'node:fs'; +import {Transform} from 'node:stream'; // $FlowFixMe[untyped-import] source-map import {SourceMapConsumer} from 'source-map'; -import {Transform} from 'stream'; function printHelp() { const usages = [ diff --git a/packages/metro-symbolicate/types/Symbolication.d.ts b/packages/metro-symbolicate/types/Symbolication.d.ts index 6fa335b852..169bcb2b00 100644 --- a/packages/metro-symbolicate/types/Symbolication.d.ts +++ b/packages/metro-symbolicate/types/Symbolication.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<5f4d1981a4d319279ca64bcd7f24f02c>> + * @generated SignedSource<<91474206d25909f6f6d546877efa6e0a>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-symbolicate/src/Symbolication.js @@ -17,7 +17,7 @@ import type {ChromeHeapSnapshot} from './ChromeHeapSnapshot'; import type {MixedSourceMap} from 'metro-source-map'; -import type {Writable} from 'stream'; +import type {Writable} from 'node:stream'; import SourceMetadataMapConsumer from './SourceMetadataMapConsumer'; import {type SourceMapConsumer as $$IMPORT_TYPEOF_1$$} from 'source-map'; diff --git a/packages/metro-symbolicate/types/symbolicate.d.ts b/packages/metro-symbolicate/types/symbolicate.d.ts index acae617310..7f8893810d 100644 --- a/packages/metro-symbolicate/types/symbolicate.d.ts +++ b/packages/metro-symbolicate/types/symbolicate.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<514225e55c0b3bbdbef6f68fb16f4085>> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro-symbolicate/src/symbolicate.js @@ -15,8 +15,8 @@ * yarn run build-ts-defs (OSS) */ -import type {Readable, Writable} from 'stream'; -import type {ReadStream} from 'tty'; +import type {Readable, Writable} from 'node:stream'; +import type {ReadStream} from 'node:tty'; declare function main( argvInput?: Array, diff --git a/packages/metro-transform-plugins/src/__tests__/import-export-plugin-test.js b/packages/metro-transform-plugins/src/__tests__/import-export-plugin-test.js index 2995a584ec..12e46ac6ef 100644 --- a/packages/metro-transform-plugins/src/__tests__/import-export-plugin-test.js +++ b/packages/metro-transform-plugins/src/__tests__/import-export-plugin-test.js @@ -18,7 +18,7 @@ const importExportPlugin = require('../import-export-plugin'); // $FlowFixMe[untyped-import] @babel/code-frame const {codeFrameColumns} = require('@babel/code-frame'); const generate = require('@babel/generator').default; -const vm = require('vm'); +const vm = require('node:vm'); const opts = { importAll: '_$$_IMPORT_ALL', diff --git a/packages/metro-transform-worker/src/__tests__/index-test.js b/packages/metro-transform-worker/src/__tests__/index-test.js index edc2375dd9..2387b786ba 100644 --- a/packages/metro-transform-worker/src/__tests__/index-test.js +++ b/packages/metro-transform-worker/src/__tests__/index-test.js @@ -30,16 +30,16 @@ jest import type {JsTransformerConfig, JsTransformOptions} from '../index'; import typeof * as TransformerType from '../index'; -import typeof FSType from 'fs'; +import typeof FSType from 'node:fs'; -const {Buffer} = require('buffer'); -const path = require('path'); +const {Buffer} = require('node:buffer'); +const path = require('node:path'); const babelTransformerPath = require.resolve('@react-native/metro-babel-transformer'); const transformerContents = (() => - require('fs').readFileSync(babelTransformerPath))(); + require('node:fs').readFileSync(babelTransformerPath))(); const HEADER_DEV = '__d(function (global, require, _$$_IMPORT_DEFAULT, _$$_IMPORT_ALL, module, exports, _dependencyMap) {'; @@ -83,9 +83,9 @@ const baseTransformOptions: JsTransformOptions = { beforeEach(() => { jest.resetModules(); - jest.mock('fs', () => new (require('metro-memory-fs'))()); + jest.mock('node:fs', () => new (require('metro-memory-fs'))()); - fs = require('fs'); + fs = jest.requireMock('node:fs'); Transformer = require('../'); // $FlowFixMe[prop-missing] Cannot call `fs.reset` because property `reset` is missing in module `fs` fs.reset(); diff --git a/packages/metro-transform-worker/src/utils/assetTransformer.js b/packages/metro-transform-worker/src/utils/assetTransformer.js index 008adc90da..f3bd13d5e8 100644 --- a/packages/metro-transform-worker/src/utils/assetTransformer.js +++ b/packages/metro-transform-worker/src/utils/assetTransformer.js @@ -14,7 +14,7 @@ import type {BabelTransformerArgs} from 'metro-babel-transformer'; import {getAssetData} from 'metro/private/Assets'; import {generateAssetCodeFileAst} from 'metro/private/Bundler/util'; -import path from 'path'; +import path from 'node:path'; export async function transform( {filename, options, src}: BabelTransformerArgs, diff --git a/packages/metro/src/Assets.js b/packages/metro/src/Assets.js index 2760bb786e..f4816836ba 100644 --- a/packages/metro/src/Assets.js +++ b/packages/metro/src/Assets.js @@ -13,11 +13,11 @@ import type {AssetPath} from './node-haste/lib/AssetPaths'; import {normalizePathSeparatorsToPosix} from './lib/pathUtils'; import * as AssetPaths from './node-haste/lib/AssetPaths'; -import crypto from 'crypto'; -import fs from 'fs'; // $FlowFixMe[untyped-import] image-size import getImageSize from 'image-size'; -import path from 'path'; +import crypto from 'node:crypto'; +import fs from 'node:fs'; +import path from 'node:path'; export type AssetInfo = { readonly files: Array, diff --git a/packages/metro/src/Bundler.js b/packages/metro/src/Bundler.js index 0178235d6d..947c9b969f 100644 --- a/packages/metro/src/Bundler.js +++ b/packages/metro/src/Bundler.js @@ -11,8 +11,8 @@ import type {TransformResultWithSource} from './DeltaBundler'; import type {TransformOptions} from './DeltaBundler/Worker'; -import type EventEmitter from 'events'; import type {ConfigT} from 'metro-config'; +import type EventEmitter from 'node:events'; import Transformer from './DeltaBundler/Transformer'; import DependencyGraph from './node-haste/DependencyGraph'; diff --git a/packages/metro/src/DeltaBundler.js b/packages/metro/src/DeltaBundler.js index 293e574723..092858dc04 100644 --- a/packages/metro/src/DeltaBundler.js +++ b/packages/metro/src/DeltaBundler.js @@ -17,7 +17,7 @@ import type { Options, ReadOnlyGraph, } from './DeltaBundler/types'; -import type EventEmitter from 'events'; +import type EventEmitter from 'node:events'; import DeltaCalculator from './DeltaBundler/DeltaCalculator'; diff --git a/packages/metro/src/DeltaBundler/DeltaCalculator.js b/packages/metro/src/DeltaBundler/DeltaCalculator.js index f111233068..3088cae280 100644 --- a/packages/metro/src/DeltaBundler/DeltaCalculator.js +++ b/packages/metro/src/DeltaBundler/DeltaCalculator.js @@ -13,10 +13,10 @@ import type {DeltaResult, Options} from './types'; import type {ChangeEvent} from 'metro-file-map'; import {Graph} from './Graph'; -import crypto from 'crypto'; import debugModule from 'debug'; -import EventEmitter from 'events'; -import path from 'path'; +import crypto from 'node:crypto'; +import EventEmitter from 'node:events'; +import path from 'node:path'; const debug = debugModule('Metro:DeltaCalculator'); diff --git a/packages/metro/src/DeltaBundler/Serializers/__tests__/baseJSBundle-test.js b/packages/metro/src/DeltaBundler/Serializers/__tests__/baseJSBundle-test.js index d1cd66dcbc..fcf45643f6 100644 --- a/packages/metro/src/DeltaBundler/Serializers/__tests__/baseJSBundle-test.js +++ b/packages/metro/src/DeltaBundler/Serializers/__tests__/baseJSBundle-test.js @@ -15,7 +15,7 @@ import CountingSet from '../../../lib/CountingSet'; import baseJSBundle from '../baseJSBundle'; import createModuleIdFactory from 'metro-config/private/defaults/createModuleIdFactory'; -const path = require('path'); +const path = require('node:path'); const {objectContaining} = expect; diff --git a/packages/metro/src/DeltaBundler/Serializers/getAssets.js b/packages/metro/src/DeltaBundler/Serializers/getAssets.js index c046d8e1de..bc0c5d94d1 100644 --- a/packages/metro/src/DeltaBundler/Serializers/getAssets.js +++ b/packages/metro/src/DeltaBundler/Serializers/getAssets.js @@ -14,7 +14,7 @@ import type {Module, ReadOnlyDependencies} from '../types'; import {getAssetData} from '../../Assets'; import {getJsOutput, isJsModule} from './helpers/js'; -import path from 'path'; +import path from 'node:path'; type Options = { readonly processModuleFilter: (module: Module<>) => boolean, diff --git a/packages/metro/src/DeltaBundler/Serializers/getRamBundleInfo.js b/packages/metro/src/DeltaBundler/Serializers/getRamBundleInfo.js index 9b8047ec08..63ccfd9bf0 100644 --- a/packages/metro/src/DeltaBundler/Serializers/getRamBundleInfo.js +++ b/packages/metro/src/DeltaBundler/Serializers/getRamBundleInfo.js @@ -19,8 +19,8 @@ import getAppendScripts from '../../lib/getAppendScripts'; import getTransitiveDependencies from './helpers/getTransitiveDependencies'; import {isJsModule, wrapModule} from './helpers/js'; import {sourceMapObject} from './sourceMapObject'; +import path from 'node:path'; import nullthrows from 'nullthrows'; -import path from 'path'; type Options = Readonly<{ ...SerializerOptions, diff --git a/packages/metro/src/DeltaBundler/Serializers/helpers/js.js b/packages/metro/src/DeltaBundler/Serializers/helpers/js.js index 75cde3fc4e..0853f49ac7 100644 --- a/packages/metro/src/DeltaBundler/Serializers/helpers/js.js +++ b/packages/metro/src/DeltaBundler/Serializers/helpers/js.js @@ -17,7 +17,7 @@ import {normalizePathSeparatorsToPosix} from '../../../lib/pathUtils'; import invariant from 'invariant'; import * as jscSafeUrl from 'jsc-safe-url'; import {addParamsToDefineCall} from 'metro-transform-plugins'; -import path from 'path'; +import path from 'node:path'; export type Options = Readonly<{ createModuleId: string => number | string, diff --git a/packages/metro/src/DeltaBundler/Serializers/hmrJSBundle.js b/packages/metro/src/DeltaBundler/Serializers/hmrJSBundle.js index 0b61590508..7f1b6a6d05 100644 --- a/packages/metro/src/DeltaBundler/Serializers/hmrJSBundle.js +++ b/packages/metro/src/DeltaBundler/Serializers/hmrJSBundle.js @@ -16,7 +16,7 @@ import {isJsModule, wrapModule} from './helpers/js'; import debugModule from 'debug'; import * as jscSafeUrl from 'jsc-safe-url'; import {addParamsToDefineCall} from 'metro-transform-plugins'; -import path from 'path'; +import path from 'node:path'; const debug = debugModule('Metro:HMR'); diff --git a/packages/metro/src/DeltaBundler/Transformer.js b/packages/metro/src/DeltaBundler/Transformer.js index 4e22043c02..dc221a4ff3 100644 --- a/packages/metro/src/DeltaBundler/Transformer.js +++ b/packages/metro/src/DeltaBundler/Transformer.js @@ -16,12 +16,12 @@ import type {ConfigT} from 'metro-config'; import {normalizePathSeparatorsToPosix} from '../lib/pathUtils'; import getTransformCacheKey from './getTransformCacheKey'; import WorkerFarm from './WorkerFarm'; -import assert from 'assert'; -import crypto from 'crypto'; import debugModule from 'debug'; -import fs from 'fs'; import {Cache, stableHash} from 'metro-cache'; -import path from 'path'; +import assert from 'node:assert'; +import crypto from 'node:crypto'; +import fs from 'node:fs'; +import path from 'node:path'; const debug = debugModule('Metro:Transformer'); diff --git a/packages/metro/src/DeltaBundler/Worker.flow.js b/packages/metro/src/DeltaBundler/Worker.flow.js index aeb55e26dc..22db28cd86 100644 --- a/packages/metro/src/DeltaBundler/Worker.flow.js +++ b/packages/metro/src/DeltaBundler/Worker.flow.js @@ -17,9 +17,9 @@ import type { } from 'metro-transform-worker'; import traverse from '@babel/traverse'; -import crypto from 'crypto'; -import fs from 'fs'; -import path from 'path'; +import crypto from 'node:crypto'; +import fs from 'node:fs'; +import path from 'node:path'; export type {JsTransformOptions as TransformOptions} from 'metro-transform-worker'; diff --git a/packages/metro/src/DeltaBundler/WorkerFarm.js b/packages/metro/src/DeltaBundler/WorkerFarm.js index c0502139ab..aeb7ce4332 100644 --- a/packages/metro/src/DeltaBundler/WorkerFarm.js +++ b/packages/metro/src/DeltaBundler/WorkerFarm.js @@ -12,7 +12,7 @@ import type {TransformResult} from '../DeltaBundler'; import type {TransformerConfig, TransformOptions, Worker} from './Worker'; import type {ConfigT} from 'metro-config'; -import type {Readable} from 'stream'; +import type {Readable} from 'node:stream'; import {Worker as JestWorker} from 'jest-worker'; import {Logger} from 'metro-core'; diff --git a/packages/metro/src/DeltaBundler/__fixtures__/hasteImpl.js b/packages/metro/src/DeltaBundler/__fixtures__/hasteImpl.js index 70fceb9f50..2ffee10a31 100644 --- a/packages/metro/src/DeltaBundler/__fixtures__/hasteImpl.js +++ b/packages/metro/src/DeltaBundler/__fixtures__/hasteImpl.js @@ -10,7 +10,7 @@ 'use strict'; -const fs = require('fs'); +const fs = require('node:fs'); /** * Simple hasteImpl that parses @providesModule annotation from JS modules. diff --git a/packages/metro/src/DeltaBundler/__tests__/DeltaBundler-test.js b/packages/metro/src/DeltaBundler/__tests__/DeltaBundler-test.js index 115f62db08..ed2dce8db6 100644 --- a/packages/metro/src/DeltaBundler/__tests__/DeltaBundler-test.js +++ b/packages/metro/src/DeltaBundler/__tests__/DeltaBundler-test.js @@ -14,7 +14,7 @@ import type {MixedOutput, Options, TransformResultDependency} from '../types'; import DeltaBundler from '../../DeltaBundler'; import DeltaCalculator from '../DeltaCalculator'; -const {EventEmitter} = require('events'); +const {EventEmitter} = require('node:events'); jest.mock('../DeltaCalculator'); diff --git a/packages/metro/src/DeltaBundler/__tests__/DeltaCalculator-context-test.js b/packages/metro/src/DeltaBundler/__tests__/DeltaCalculator-context-test.js index 5749b22494..d20c684bcf 100644 --- a/packages/metro/src/DeltaBundler/__tests__/DeltaCalculator-context-test.js +++ b/packages/metro/src/DeltaBundler/__tests__/DeltaCalculator-context-test.js @@ -18,9 +18,9 @@ import CountingSet from '../../lib/CountingSet'; import DeltaCalculator from '../DeltaCalculator'; import {Graph} from '../Graph'; import {createEmitChange, createPathNormalizer} from './test-utils'; -import path from 'path'; +import path from 'node:path'; -const {EventEmitter} = require('events'); +const {EventEmitter} = require('node:events'); const traverseDependencies = jest.spyOn( Graph.prototype, diff --git a/packages/metro/src/DeltaBundler/__tests__/DeltaCalculator-test.js b/packages/metro/src/DeltaBundler/__tests__/DeltaCalculator-test.js index c8163cc96c..917c05f956 100644 --- a/packages/metro/src/DeltaBundler/__tests__/DeltaCalculator-test.js +++ b/packages/metro/src/DeltaBundler/__tests__/DeltaCalculator-test.js @@ -61,12 +61,12 @@ describe.each(['posix', 'win32'])('DeltaCalculator (%s)', osPlatform => { beforeEach(async () => { if (osPlatform === 'win32') { - jest.doMock('path', () => jest.requireActual('path/win32')); + jest.doMock('node:path', () => jest.requireActual('node:path/win32')); } else { - jest.doMock('path', () => jest.requireActual('path')); + jest.doMock('node:path', () => jest.requireActual('node:path')); } - const {EventEmitter} = require('events'); + const {EventEmitter} = require('node:events'); const {Graph} = require('../Graph'); traverseDependencies = jest.spyOn(Graph.prototype, 'traverseDependencies'); diff --git a/packages/metro/src/DeltaBundler/__tests__/Graph-test.js b/packages/metro/src/DeltaBundler/__tests__/Graph-test.js index 2eb3518210..0cc2369013 100644 --- a/packages/metro/src/DeltaBundler/__tests__/Graph-test.js +++ b/packages/metro/src/DeltaBundler/__tests__/Graph-test.js @@ -158,7 +158,7 @@ const Actions = { } const deps = getMockDependency(path); const depName = name ?? dependencyPath.replace('/', ''); - const key = require('crypto') + const key = require('node:crypto') .createHash('sha1') .update([depName, data?.asyncType ?? '(null)'].join('\0')) .digest('base64'); diff --git a/packages/metro/src/DeltaBundler/__tests__/Transformer-test.js b/packages/metro/src/DeltaBundler/__tests__/Transformer-test.js index 1a59581ac8..6d49546a78 100644 --- a/packages/metro/src/DeltaBundler/__tests__/Transformer-test.js +++ b/packages/metro/src/DeltaBundler/__tests__/Transformer-test.js @@ -12,18 +12,19 @@ jest .setMock('jest-worker', () => ({})) - .mock('fs', () => new (require('metro-memory-fs'))()) - .mock('assert') + .mock('node:fs', () => new (require('metro-memory-fs'))()) + .mock('node:assert') .mock('../getTransformCacheKey', () => jest.fn(() => 'hash')) .mock('../WorkerFarm') .mock('/path/to/transformer.js', () => ({}), {virtual: true}); // Must be required after mocks above const Transformer = require('../Transformer').default; -const fs = require('fs'); const {getDefaultValues} = require('metro-config').getDefaultConfig; const {mergeConfig} = require('metro-config/private/loadConfig'); +const fs = jest.requireMock('node:fs'); + describe('Transformer', function () { let watchFolders; let projectRoot; diff --git a/packages/metro/src/DeltaBundler/__tests__/WorkerFarm-test.js b/packages/metro/src/DeltaBundler/__tests__/WorkerFarm-test.js index c35c84d576..c0889b38b8 100644 --- a/packages/metro/src/DeltaBundler/__tests__/WorkerFarm-test.js +++ b/packages/metro/src/DeltaBundler/__tests__/WorkerFarm-test.js @@ -11,7 +11,7 @@ 'use strict'; const {getDefaultConfig} = require('metro-config'); -const {Readable} = require('stream'); +const {Readable} = require('node:stream'); describe('Worker Farm', function () { let api; @@ -23,10 +23,10 @@ describe('Worker Farm', function () { beforeEach(async function () { jest .resetModules() - .mock('fs', () => ({writeFileSync: jest.fn()})) + .mock('node:fs', () => ({writeFileSync: jest.fn()})) .mock('jest-worker', () => ({__esModule: true, Worker: jest.fn()})); - const fs = require('fs'); + const fs = jest.requireMock('node:fs'); const jestWorker = require('jest-worker'); config = await getDefaultConfig(); diff --git a/packages/metro/src/DeltaBundler/__tests__/resolver-test.js b/packages/metro/src/DeltaBundler/__tests__/resolver-test.js index 59b53d7469..88c3e6f3cd 100644 --- a/packages/metro/src/DeltaBundler/__tests__/resolver-test.js +++ b/packages/metro/src/DeltaBundler/__tests__/resolver-test.js @@ -21,23 +21,23 @@ const { DuplicateHasteCandidatesError, default: {H: Haste}, } = require('metro-file-map'); -const path = require('path'); +const path = require('node:path'); const mockPlatform = process.platform; jest.useRealTimers(); jest // It's noticeably faster to prevent running watchman from FileWatcher. - .mock('child_process', () => ({})) - .mock('os', () => ({ - ...jest.requireActual('os'), + .mock('node:child_process', () => ({})) + .mock('node:os', () => ({ + ...jest.requireActual('node:os'), platform: () => 'test', tmpdir: () => (mockPlatform === 'win32' ? 'C:\\tmp' : '/tmp'), hostname: () => 'testhost', endianness: () => 'LE', release: () => '', })) - .mock('graceful-fs', () => require('fs')) + .mock('graceful-fs', () => jest.requireMock('node:fs')) .spyOn(console, 'warn') .mockImplementation(() => {}); @@ -79,13 +79,13 @@ function dep(name: string): TransformResultDependency { for (const entName in desc) { const ent = desc[entName]; - const entPath = require('path').join(dirPath, entName); + const entPath = jest.requireMock('node:path').join(dirPath, entName); if (typeof ent === 'string') { fs.writeFileSync(entPath, ent); continue; } if (typeof ent !== 'object') { - throw new Error(require('util').format('invalid entity:', ent)); + throw new Error(require('node:util').format('invalid entity:', ent)); } fs.mkdirSync(entPath); mockDir(entPath, ent); @@ -162,20 +162,20 @@ function dep(name: string): TransformResultDependency { if (osPlatform === 'win32') { const mockPath = jest.requireActual<{win32: unknown}>('path'); - jest.mock('path', () => mockPath.win32); + jest.mock('node:path', () => mockPath.win32); jest.mock( - 'fs', + 'node:fs', () => new (require('metro-memory-fs'))({platform: 'win32'}), ); } else { - jest.mock('path', () => jest.requireActual('path')); - jest.mock('fs', () => new (require('metro-memory-fs'))()); + jest.mock('node:path', () => jest.requireActual('node:path')); + jest.mock('node:fs', () => new (require('metro-memory-fs'))()); } // $FlowFixMe[cannot-write] - require('os').tmpdir = () => p('/tmp'); + jest.requireMock('node:os').tmpdir = () => p('/tmp'); - fs = require('fs'); + fs = jest.requireMock('node:fs'); originalError = console.error; // $FlowFixMe[cannot-write] console.error = jest.fn((...args) => { diff --git a/packages/metro/src/DeltaBundler/__tests__/test-utils.js b/packages/metro/src/DeltaBundler/__tests__/test-utils.js index 18528f0845..49ab7756f1 100644 --- a/packages/metro/src/DeltaBundler/__tests__/test-utils.js +++ b/packages/metro/src/DeltaBundler/__tests__/test-utils.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import type EventEmitter from 'events'; +import type EventEmitter from 'node:events'; export type FileEntry = string | [string, {isSymlink?: boolean, modifiedTime?: number}]; diff --git a/packages/metro/src/DeltaBundler/buildSubgraph.js b/packages/metro/src/DeltaBundler/buildSubgraph.js index 210a631b48..0b26dbde04 100644 --- a/packages/metro/src/DeltaBundler/buildSubgraph.js +++ b/packages/metro/src/DeltaBundler/buildSubgraph.js @@ -20,7 +20,7 @@ import type { import {deriveAbsolutePathFromContext} from '../lib/contextModule'; import {isResolvedDependency} from '../lib/isResolvedDependency'; -import path from 'path'; +import path from 'node:path'; type Parameters = Readonly<{ resolve: ResolveFn, diff --git a/packages/metro/src/DeltaBundler/getTransformCacheKey.js b/packages/metro/src/DeltaBundler/getTransformCacheKey.js index 94f57ab32b..717e691643 100644 --- a/packages/metro/src/DeltaBundler/getTransformCacheKey.js +++ b/packages/metro/src/DeltaBundler/getTransformCacheKey.js @@ -12,8 +12,8 @@ import type {TransformerConfig} from './Worker'; import type {JsTransformerConfig} from 'metro-transform-worker'; -import crypto from 'crypto'; import {getCacheKey} from 'metro-cache-key'; +import crypto from 'node:crypto'; // eslint-disable-next-line import/no-commonjs const VERSION = require('../../package.json').version; diff --git a/packages/metro/src/IncrementalBundler.js b/packages/metro/src/IncrementalBundler.js index dc899b7748..1225d0641f 100644 --- a/packages/metro/src/IncrementalBundler.js +++ b/packages/metro/src/IncrementalBundler.js @@ -25,9 +25,9 @@ import ResourceNotFoundError from './IncrementalBundler/ResourceNotFoundError'; import getGraphId from './lib/getGraphId'; import getPrependedScripts from './lib/getPrependedScripts'; import * as transformHelpers from './lib/transformHelpers'; -import crypto from 'crypto'; -import fs from 'fs'; -import path from 'path'; +import crypto from 'node:crypto'; +import fs from 'node:fs'; +import path from 'node:path'; export opaque type RevisionId: string = string; diff --git a/packages/metro/src/ModuleGraph/worker/collectDependencies.js b/packages/metro/src/ModuleGraph/worker/collectDependencies.js index 8fa68302c6..ef19248847 100644 --- a/packages/metro/src/ModuleGraph/worker/collectDependencies.js +++ b/packages/metro/src/ModuleGraph/worker/collectDependencies.js @@ -26,8 +26,8 @@ import template from '@babel/template'; import traverse from '@babel/traverse'; import * as types from '@babel/types'; import {isImport, isProgram} from '@babel/types'; -import crypto from 'crypto'; import invariant from 'invariant'; +import crypto from 'node:crypto'; import nullthrows from 'nullthrows'; type ImportDependencyOptions = Readonly<{ diff --git a/packages/metro/src/Server.js b/packages/metro/src/Server.js index a071c36bf4..29f5a88f3b 100644 --- a/packages/metro/src/Server.js +++ b/packages/metro/src/Server.js @@ -33,7 +33,6 @@ import type { SplitBundleOptions, } from './shared/types'; import type {IncomingMessage} from 'connect'; -import type {ServerResponse} from 'http'; import type {CacheStore} from 'metro-cache'; import type {ConfigT, RootPerfLogger} from 'metro-config'; import type { @@ -42,6 +41,7 @@ import type { } from 'metro-core/private/Logger'; import type {CustomResolverOptions} from 'metro-resolver/private/types'; import type {CustomTransformOptions} from 'metro-transform-worker'; +import type {ServerResponse} from 'node:http'; import {getAsset} from './Assets'; import baseJSBundle from './DeltaBundler/Serializers/baseJSBundle'; @@ -71,10 +71,10 @@ import * as fs from 'graceful-fs'; import * as jscSafeUrl from 'jsc-safe-url'; import {Logger} from 'metro-core'; import mime from 'mime-types'; +import path from 'node:path'; +import {performance} from 'node:perf_hooks'; +import querystring from 'node:querystring'; import nullthrows from 'nullthrows'; -import path from 'path'; -import {performance} from 'perf_hooks'; -import querystring from 'querystring'; const debug = debugModule('Metro:Server'); diff --git a/packages/metro/src/Server/MultipartResponse.js b/packages/metro/src/Server/MultipartResponse.js index 6ccf965cbf..7be4367d41 100644 --- a/packages/metro/src/Server/MultipartResponse.js +++ b/packages/metro/src/Server/MultipartResponse.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import type {IncomingMessage, ServerResponse} from 'http'; +import type {IncomingMessage, ServerResponse} from 'node:http'; import accepts from 'accepts'; diff --git a/packages/metro/src/Server/__tests__/Server-test.js b/packages/metro/src/Server/__tests__/Server-test.js index 17dd41b143..b92318109e 100644 --- a/packages/metro/src/Server/__tests__/Server-test.js +++ b/packages/metro/src/Server/__tests__/Server-test.js @@ -30,7 +30,7 @@ import MockResponse from 'mock-res'; const { getDefaultConfig: {getDefaultValues}, } = require('metro-config'); -const path = require('path'); +const path = require('node:path'); jest .mock('jest-worker', () => ({})) @@ -78,8 +78,8 @@ describe('processRequest', () => { getAsset = jest.fn(); let i = 0; - jest.doMock('crypto', () => ({ - ...jest.requireActual('crypto'), + jest.doMock('node:crypto', () => ({ + ...jest.requireActual('node:crypto'), randomBytes: jest.fn().mockImplementation(() => `XXXXX-${i++}`), })); @@ -97,13 +97,16 @@ describe('processRequest', () => { getResolveDependencyFn, })); + const mockFs = new (require('metro-memory-fs'))(); + jest.doMock('fs', () => mockFs); + jest.doMock('node:fs', () => mockFs); + Bundler = require('../../Bundler').default; jest .spyOn(Bundler.prototype, 'getDependencyGraph') .mockImplementation(getDependencyGraph); - jest.mock('fs', () => new (require('metro-memory-fs'))()); - fs = require('fs'); + fs = mockFs; DeltaBundler = require('../../DeltaBundler').default; jest @@ -326,7 +329,9 @@ describe('processRequest', () => { ); // $FlowFixMe[cannot-write] - fs.realpath = jest.fn((file, cb) => cb?.(null, '/root/foo.js')); + fs.realpath = jest.fn((file, cb) => { + cb?.(null, '/root/foo.js'); + }); }); test.each(['?', '//&'])( diff --git a/packages/metro/src/__tests__/Assets-test.js b/packages/metro/src/__tests__/Assets-test.js index f010240f24..66f91d46c9 100644 --- a/packages/metro/src/__tests__/Assets-test.js +++ b/packages/metro/src/__tests__/Assets-test.js @@ -10,15 +10,16 @@ 'use strict'; -jest.mock('fs', () => new (require('metro-memory-fs'))()); +jest.mock('node:fs', () => new (require('metro-memory-fs'))()); jest.mock('image-size'); jest.useRealTimers(); const {getAsset, getAssetData} = require('../Assets'); -const crypto = require('crypto'); -const fs = require('fs'); -const path = require('path'); +const crypto = require('node:crypto'); +const path = require('node:path'); + +const fs = jest.requireMock('node:fs'); const mockImageWidth = 300; const mockImageHeight = 200; diff --git a/packages/metro/src/__tests__/HmrServer-test.js b/packages/metro/src/__tests__/HmrServer-test.js index 6d97abe4c1..7d0018a003 100644 --- a/packages/metro/src/__tests__/HmrServer-test.js +++ b/packages/metro/src/__tests__/HmrServer-test.js @@ -18,8 +18,8 @@ import DeltaBundler from '../DeltaBundler'; import HmrServer from '../HmrServer'; import IncrementalBundler from '../IncrementalBundler'; import getGraphId from '../lib/getGraphId'; -import EventEmitter from 'events'; import {mergeConfig} from 'metro-config'; +import EventEmitter from 'node:events'; const { getDefaultConfig: {getDefaultValues}, @@ -29,7 +29,7 @@ jest.mock('../lib/transformHelpers', () => ({ getResolveDependencyFn: () => (from: string, to: TransformResultDependency) => ({ type: 'sourceFile', - filePath: `${require('path').resolve(from, to.name)}.js`, + filePath: `${require('node:path').resolve(from, to.name)}.js`, }), })); diff --git a/packages/metro/src/cli-utils.js b/packages/metro/src/cli-utils.js index fdca5ffb22..d3d61f602d 100644 --- a/packages/metro/src/cli-utils.js +++ b/packages/metro/src/cli-utils.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import fs from 'fs'; +import fs from 'node:fs'; export const watchFile = async function ( filename: string, diff --git a/packages/metro/src/commands/dependencies.js b/packages/metro/src/commands/dependencies.js index b9710b42ef..6f4ad430bd 100644 --- a/packages/metro/src/commands/dependencies.js +++ b/packages/metro/src/commands/dependencies.js @@ -15,10 +15,10 @@ import typeof Yargs from 'yargs'; import {makeAsyncCommand} from '../cli-utils'; import Server from '../Server'; -import fs from 'fs'; import {loadConfig} from 'metro-config'; -import path from 'path'; -import {promisify} from 'util'; +import fs from 'node:fs'; +import path from 'node:path'; +import {promisify} from 'node:util'; type Args = Readonly<{ _: unknown, diff --git a/packages/metro/src/commands/serve.js b/packages/metro/src/commands/serve.js index 0f4f9cbb3d..244fbf6611 100644 --- a/packages/metro/src/commands/serve.js +++ b/packages/metro/src/commands/serve.js @@ -9,13 +9,13 @@ * @oncall react_native */ -import type {ServerOptions as HttpsServerOptions} from 'https'; +import type {ServerOptions as HttpsServerOptions} from 'node:https'; import type {CommandModule} from 'yargs'; import typeof Yargs from 'yargs'; import {makeAsyncCommand, watchFile} from '../cli-utils'; import {loadConfig, resolveConfig} from 'metro-config'; -import {promisify} from 'util'; +import {promisify} from 'node:util'; type Args = Readonly<{ _: unknown, diff --git a/packages/metro/src/index.flow.js b/packages/metro/src/index.flow.js index df9c524e2e..8a9dbbc61e 100644 --- a/packages/metro/src/index.flow.js +++ b/packages/metro/src/index.flow.js @@ -14,11 +14,6 @@ import type {ReadOnlyGraph} from './DeltaBundler'; import type {ServerOptions} from './Server'; import type {BuildOptions, OutputOptions, RequestOptions} from './shared/types'; import type {HandleFunction} from 'connect'; -import type {Server as HttpServer} from 'http'; -import type { - Server as HttpsServer, - ServerOptions as HttpsServerOptions, -} from 'https'; import type {TransformProfile} from 'metro-babel-transformer'; import type { ConfigT, @@ -28,6 +23,11 @@ import type { } from 'metro-config'; import type {CustomResolverOptions} from 'metro-resolver'; import type {CustomTransformOptions} from 'metro-transform-worker'; +import type {Server as HttpServer} from 'node:http'; +import type { + Server as HttpsServer, + ServerOptions as HttpsServerOptions, +} from 'node:https'; import type {Server as WebSocketServer} from 'ws'; import typeof Yargs from 'yargs'; @@ -41,9 +41,6 @@ import JsonReporter from './lib/JsonReporter'; import TerminalReporter from './lib/TerminalReporter'; import MetroServer from './Server'; import * as outputBundle from './shared/output/bundle'; -import fs from 'fs'; -import http from 'http'; -import https from 'https'; import { getDefaultConfig, loadConfig, @@ -51,9 +48,12 @@ import { resolveConfig, } from 'metro-config'; import {Terminal} from 'metro-core'; -import net from 'net'; +import fs from 'node:fs'; +import http from 'node:http'; +import https from 'node:https'; +import net from 'node:net'; +import util from 'node:util'; import nullthrows from 'nullthrows'; -import util from 'util'; const DEFAULTS = MetroServer.DEFAULT_BUNDLE_OPTIONS; diff --git a/packages/metro/src/integration_tests/__tests__/build-errors-test.js b/packages/metro/src/integration_tests/__tests__/build-errors-test.js index a94a3326d4..9b010f345a 100644 --- a/packages/metro/src/integration_tests/__tests__/build-errors-test.js +++ b/packages/metro/src/integration_tests/__tests__/build-errors-test.js @@ -12,7 +12,7 @@ 'use strict'; const Metro = require('../../..'); -const path = require('path'); +const path = require('node:path'); jest.setTimeout(30 * 1000); const BUILD_ERRORS_SRC_DIR = diff --git a/packages/metro/src/integration_tests/__tests__/build-test.js b/packages/metro/src/integration_tests/__tests__/build-test.js index 218b424988..0014c6cd85 100644 --- a/packages/metro/src/integration_tests/__tests__/build-test.js +++ b/packages/metro/src/integration_tests/__tests__/build-test.js @@ -14,7 +14,7 @@ const Metro = require('../../..'); const execBundle = require('../execBundle'); const MetroConfig = require('metro-config'); -const path = require('path'); +const path = require('node:path'); jest.setTimeout(30 * 1000); diff --git a/packages/metro/src/integration_tests/__tests__/buildGraph-test.js b/packages/metro/src/integration_tests/__tests__/buildGraph-test.js index 27559711b4..32f58b7a76 100644 --- a/packages/metro/src/integration_tests/__tests__/buildGraph-test.js +++ b/packages/metro/src/integration_tests/__tests__/buildGraph-test.js @@ -13,7 +13,7 @@ import CountingSet from '../../lib/CountingSet'; const Metro = require('../../..'); -const path = require('path'); +const path = require('node:path'); jest.useRealTimers(); jest.setTimeout(120 * 1000); diff --git a/packages/metro/src/integration_tests/__tests__/rambundle-test.js b/packages/metro/src/integration_tests/__tests__/rambundle-test.js index b18867d400..a18230599f 100644 --- a/packages/metro/src/integration_tests/__tests__/rambundle-test.js +++ b/packages/metro/src/integration_tests/__tests__/rambundle-test.js @@ -12,10 +12,10 @@ import * as Metro from '../../..'; import RamBundleParser from '../../lib/RamBundleParser'; import * as ramBundleOutput from '../../shared/output/unbundle'; -const fs = require('fs'); -const os = require('os'); -const path = require('path'); -const vm = require('vm'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const vm = require('node:vm'); jest.setTimeout(30 * 1000); diff --git a/packages/metro/src/integration_tests/__tests__/server-endpoints-test.js b/packages/metro/src/integration_tests/__tests__/server-endpoints-test.js index d44f6e4809..f55e1c93dd 100644 --- a/packages/metro/src/integration_tests/__tests__/server-endpoints-test.js +++ b/packages/metro/src/integration_tests/__tests__/server-endpoints-test.js @@ -11,8 +11,8 @@ 'use strict'; const Metro = require('../../..'); -const http = require('http'); -const https = require('https'); +const http = require('node:http'); +const https = require('node:https'); const selfsigned = require('selfsigned'); const WebSocket = require('ws'); diff --git a/packages/metro/src/integration_tests/__tests__/server-test.js b/packages/metro/src/integration_tests/__tests__/server-test.js index 90c36476c8..39b5a5169a 100644 --- a/packages/metro/src/integration_tests/__tests__/server-test.js +++ b/packages/metro/src/integration_tests/__tests__/server-test.js @@ -12,8 +12,8 @@ const Metro = require('../../..'); const execBundle = require('../execBundle'); -const fs = require('fs'); -const path = require('path'); +const fs = require('node:fs'); +const path = require('node:path'); jest.useRealTimers(); jest.setTimeout(60 * 1000); diff --git a/packages/metro/src/integration_tests/__tests__/server-tls-test.js b/packages/metro/src/integration_tests/__tests__/server-tls-test.js index 6fe8e07fcd..0dd6a14b75 100644 --- a/packages/metro/src/integration_tests/__tests__/server-tls-test.js +++ b/packages/metro/src/integration_tests/__tests__/server-tls-test.js @@ -11,11 +11,11 @@ 'use strict'; const Metro = require('../../..'); -const fs = require('fs'); -const http = require('http'); -const https = require('https'); -const os = require('os'); -const path = require('path'); +const fs = require('node:fs'); +const http = require('node:http'); +const https = require('node:https'); +const os = require('node:os'); +const path = require('node:path'); const selfsigned = require('selfsigned'); jest.useRealTimers(); diff --git a/packages/metro/src/integration_tests/__tests__/server-torn-down-test.js b/packages/metro/src/integration_tests/__tests__/server-torn-down-test.js index a9c4997a1a..a6fd0593d3 100644 --- a/packages/metro/src/integration_tests/__tests__/server-torn-down-test.js +++ b/packages/metro/src/integration_tests/__tests__/server-torn-down-test.js @@ -11,7 +11,7 @@ const Metro = require('../../..'); // $FlowFixMe[cannot-resolve-module] - Untyped module -const asyncHooks = require('async_hooks'); +const asyncHooks = require('node:async_hooks'); jest.useRealTimers(); diff --git a/packages/metro/src/integration_tests/__tests__/sourcemap-test.js b/packages/metro/src/integration_tests/__tests__/sourcemap-test.js index f68a23dd6e..88af6bd978 100644 --- a/packages/metro/src/integration_tests/__tests__/sourcemap-test.js +++ b/packages/metro/src/integration_tests/__tests__/sourcemap-test.js @@ -12,7 +12,7 @@ const Metro = require('../../..'); const execBundle = require('../execBundle'); -const fs = require('fs'); +const fs = require('node:fs'); const sourceMap = require('source-map'); const stackTrace = require('stack-trace'); diff --git a/packages/metro/src/integration_tests/execBundle.js b/packages/metro/src/integration_tests/execBundle.js index 838db3dcdf..5ca37e54a9 100644 --- a/packages/metro/src/integration_tests/execBundle.js +++ b/packages/metro/src/integration_tests/execBundle.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import vm from 'vm'; +import vm from 'node:vm'; module.exports = function execBundle(code: string, context: any = {}): unknown { if (vm.isContext(context)) { diff --git a/packages/metro/src/integration_tests/metro.config.js b/packages/metro/src/integration_tests/metro.config.js index 590f7dc4d9..0a6c003319 100644 --- a/packages/metro/src/integration_tests/metro.config.js +++ b/packages/metro/src/integration_tests/metro.config.js @@ -10,7 +10,7 @@ 'use strict'; -const path = require('path'); +const path = require('node:path'); const ROOT_PATH = path.resolve(__dirname, 'basic_bundle'); diff --git a/packages/metro/src/lib/BatchProcessor.js b/packages/metro/src/lib/BatchProcessor.js index a5ad95d45b..c705f3432c 100644 --- a/packages/metro/src/lib/BatchProcessor.js +++ b/packages/metro/src/lib/BatchProcessor.js @@ -10,7 +10,7 @@ */ import invariant from 'invariant'; -import {clearTimeout, setTimeout} from 'timers'; +import {clearTimeout, setTimeout} from 'node:timers'; type ProcessBatch = ( batch: Array, diff --git a/packages/metro/src/lib/JsonReporter.js b/packages/metro/src/lib/JsonReporter.js index a24ef905cc..0d67d40f73 100644 --- a/packages/metro/src/lib/JsonReporter.js +++ b/packages/metro/src/lib/JsonReporter.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import type {Writable} from 'stream'; +import type {Writable} from 'node:stream'; export type SerializedError = { message: string, diff --git a/packages/metro/src/lib/TerminalReporter.js b/packages/metro/src/lib/TerminalReporter.js index 5104dd7e64..b9e9d6a048 100644 --- a/packages/metro/src/lib/TerminalReporter.js +++ b/packages/metro/src/lib/TerminalReporter.js @@ -12,7 +12,7 @@ import type {BundleDetails, ReportableEvent} from './reporting'; import type {Terminal} from 'metro-core'; import type {HealthCheckResult, WatcherStatus} from 'metro-file-map'; -import type {BackgroundColors, ForegroundColors, Modifiers} from 'util'; +import type {BackgroundColors, ForegroundColors, Modifiers} from 'node:util'; import {calculateBundleProgressRatio} from './bundleProgressUtils'; import logToConsole from './logToConsole'; @@ -20,8 +20,8 @@ import * as reporting from './reporting'; // $FlowFixMe[untyped-import] lodash.throttle import throttle from 'lodash.throttle'; import {AmbiguousModuleResolutionError} from 'metro-core'; -import path from 'path'; -import util from 'util'; +import path from 'node:path'; +import util from 'node:util'; type StyleFormat = ReadonlyArray< ForegroundColors | BackgroundColors | Modifiers, diff --git a/packages/metro/src/lib/__mocks__/getAbsolutePath.js b/packages/metro/src/lib/__mocks__/getAbsolutePath.js index a5b56d2f27..7f311e8e9a 100644 --- a/packages/metro/src/lib/__mocks__/getAbsolutePath.js +++ b/packages/metro/src/lib/__mocks__/getAbsolutePath.js @@ -11,7 +11,7 @@ 'use strict'; -const path = require('path'); +const path = require('node:path'); export default (file: string, roots: ReadonlyArray): string => path.resolve(roots[0], file); diff --git a/packages/metro/src/lib/__tests__/contextModuleTemplates-test.js b/packages/metro/src/lib/__tests__/contextModuleTemplates-test.js index f2d6f41110..f174e06ef6 100644 --- a/packages/metro/src/lib/__tests__/contextModuleTemplates-test.js +++ b/packages/metro/src/lib/__tests__/contextModuleTemplates-test.js @@ -53,7 +53,7 @@ describe('getContextModuleTemplate', () => { test('creates posix paths on windows for sync template', () => { jest.resetModules(); const mockPath = jest.requireActual<{win32: unknown}>('path'); - jest.mock('path', () => mockPath.win32); + jest.mock('node:path', () => mockPath.win32); const { getContextModuleTemplate: getWindowsTemplate, } = require('../contextModuleTemplates'); diff --git a/packages/metro/src/lib/__tests__/getPreludeCode-test.js b/packages/metro/src/lib/__tests__/getPreludeCode-test.js index 8c3d0e908c..a218c3339b 100644 --- a/packages/metro/src/lib/__tests__/getPreludeCode-test.js +++ b/packages/metro/src/lib/__tests__/getPreludeCode-test.js @@ -11,7 +11,7 @@ import getPreludeCode from '../getPreludeCode'; -const vm = require('vm'); +const vm = require('node:vm'); ['development', 'production'].forEach((mode: string) => { describe(`${mode} mode`, () => { diff --git a/packages/metro/src/lib/contextModule.js b/packages/metro/src/lib/contextModule.js index 69378c3824..37d773e098 100644 --- a/packages/metro/src/lib/contextModule.js +++ b/packages/metro/src/lib/contextModule.js @@ -14,9 +14,9 @@ import type { RequireContextParams, } from '../ModuleGraph/worker/collectDependencies'; -import crypto from 'crypto'; +import crypto from 'node:crypto'; +import path from 'node:path'; import nullthrows from 'nullthrows'; -import path from 'path'; export type RequireContext = Readonly<{ /* Should search for files recursively. Optional, default `true` when `require.context` is used */ diff --git a/packages/metro/src/lib/contextModuleTemplates.js b/packages/metro/src/lib/contextModuleTemplates.js index e701a8de14..03f48e2430 100644 --- a/packages/metro/src/lib/contextModuleTemplates.js +++ b/packages/metro/src/lib/contextModuleTemplates.js @@ -11,8 +11,8 @@ import type {ContextMode} from '../ModuleGraph/worker/collectDependencies'; -import * as os from 'os'; -import * as path from 'path'; +import * as os from 'node:os'; +import * as path from 'node:path'; function createFileMap( modulePath: string, diff --git a/packages/metro/src/lib/createWebsocketServer.js b/packages/metro/src/lib/createWebsocketServer.js index d11993d43c..81015cfa39 100644 --- a/packages/metro/src/lib/createWebsocketServer.js +++ b/packages/metro/src/lib/createWebsocketServer.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import {clearInterval, setInterval} from 'timers'; +import {clearInterval, setInterval} from 'node:timers'; import ws from 'ws'; type WebsocketServiceInterface = interface { diff --git a/packages/metro/src/lib/formatBundlingError.js b/packages/metro/src/lib/formatBundlingError.js index da10f67487..ba92716b6e 100644 --- a/packages/metro/src/lib/formatBundlingError.js +++ b/packages/metro/src/lib/formatBundlingError.js @@ -16,8 +16,8 @@ import RevisionNotFoundError from '../IncrementalBundler/RevisionNotFoundError'; import {UnableToResolveError} from '../node-haste/DependencyGraph/ModuleResolution'; import {codeFrameColumns} from '@babel/code-frame'; import ErrorStackParser from 'error-stack-parser'; -import fs from 'fs'; import {AmbiguousModuleResolutionError} from 'metro-core'; +import fs from 'node:fs'; import serializeError from 'serialize-error'; export type CustomError = Error & diff --git a/packages/metro/src/lib/logToConsole.js b/packages/metro/src/lib/logToConsole.js index 6cb83915e1..c4a12d2ab8 100644 --- a/packages/metro/src/lib/logToConsole.js +++ b/packages/metro/src/lib/logToConsole.js @@ -11,9 +11,9 @@ /* eslint-disable no-console */ import type {Terminal} from 'metro-core'; -import type {BackgroundColors, ForegroundColors, Modifiers} from 'util'; +import type {BackgroundColors, ForegroundColors, Modifiers} from 'node:util'; -import util from 'util'; +import util from 'node:util'; const groupStack = []; let collapsedGuardTimer; diff --git a/packages/metro/src/lib/parseBundleOptionsFromBundleRequestUrl.js b/packages/metro/src/lib/parseBundleOptionsFromBundleRequestUrl.js index c30d0c7bf1..2e13cf101d 100644 --- a/packages/metro/src/lib/parseBundleOptionsFromBundleRequestUrl.js +++ b/packages/metro/src/lib/parseBundleOptionsFromBundleRequestUrl.js @@ -18,7 +18,7 @@ import parseCustomResolverOptions from './parseCustomResolverOptions'; import parseCustomTransformOptions from './parseCustomTransformOptions'; import debugModule from 'debug'; import * as jscSafeUrl from 'jsc-safe-url'; -import path from 'path'; +import path from 'node:path'; const debug = debugModule( 'Metro:Server:parseBundleOptionsFromBundleRequestUrl', diff --git a/packages/metro/src/lib/parseJsonBody.js b/packages/metro/src/lib/parseJsonBody.js index 562da693fc..f08877a2fe 100644 --- a/packages/metro/src/lib/parseJsonBody.js +++ b/packages/metro/src/lib/parseJsonBody.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import type {IncomingMessage} from 'http'; +import type {IncomingMessage} from 'node:http'; const CONTENT_TYPE = 'application/json'; const SIZE_LIMIT = 100 * 1024 * 1024; // 100MB diff --git a/packages/metro/src/lib/pathUtils.js b/packages/metro/src/lib/pathUtils.js index 0015e27e95..68ae29b571 100644 --- a/packages/metro/src/lib/pathUtils.js +++ b/packages/metro/src/lib/pathUtils.js @@ -8,7 +8,7 @@ * @format */ -import * as path from 'path'; +import * as path from 'node:path'; export const normalizePathSeparatorsToPosix: string => string = path.sep === '/' diff --git a/packages/metro/src/lib/relativizeSourceMap.js b/packages/metro/src/lib/relativizeSourceMap.js index 9d5bdf1696..aa69fb3fa5 100644 --- a/packages/metro/src/lib/relativizeSourceMap.js +++ b/packages/metro/src/lib/relativizeSourceMap.js @@ -11,7 +11,7 @@ import type {MixedSourceMap} from 'metro-source-map'; -import path from 'path'; +import path from 'node:path'; export default function relativizeSourceMapInline( sourceMap: MixedSourceMap, diff --git a/packages/metro/src/lib/reporting.js b/packages/metro/src/lib/reporting.js index e7818aaf3b..25b3a1b01e 100644 --- a/packages/metro/src/lib/reporting.js +++ b/packages/metro/src/lib/reporting.js @@ -14,8 +14,8 @@ import type {HealthCheckResult, WatcherStatus} from 'metro-file-map'; import type {CustomResolverOptions} from 'metro-resolver'; import type {CustomTransformOptions} from 'metro-transform-worker'; -import tty from 'tty'; -import util from 'util'; +import tty from 'node:tty'; +import util from 'node:util'; const supportsColor = (): boolean => process.stdout instanceof tty.WriteStream && process.stdout.hasColors(); diff --git a/packages/metro/src/node-haste/DependencyGraph.js b/packages/metro/src/node-haste/DependencyGraph.js index 5ced330d7c..a1d0abf6c8 100644 --- a/packages/metro/src/node-haste/DependencyGraph.js +++ b/packages/metro/src/node-haste/DependencyGraph.js @@ -29,8 +29,6 @@ import type {FileSystemLookup} from 'metro-resolver'; import createFileMap from './DependencyGraph/createFileMap'; import {ModuleResolver} from './DependencyGraph/ModuleResolution'; import {PackageCache} from './PackageCache'; -import EventEmitter from 'events'; -import fs from 'fs'; import { AmbiguousModuleResolutionError, Logger, @@ -39,8 +37,10 @@ import { import canonicalize from 'metro-core/private/canonicalize'; import {DuplicateHasteCandidatesError} from 'metro-file-map'; import {InvalidPackageError} from 'metro-resolver'; +import EventEmitter from 'node:events'; +import fs from 'node:fs'; +import path from 'node:path'; import nullthrows from 'nullthrows'; -import path from 'path'; const {createActionStartEntry, createActionEndEntry, log} = Logger; diff --git a/packages/metro/src/node-haste/DependencyGraph/ModuleResolution.js b/packages/metro/src/node-haste/DependencyGraph/ModuleResolution.js index 0ef694a387..24fc3f93f4 100644 --- a/packages/metro/src/node-haste/DependencyGraph/ModuleResolution.js +++ b/packages/metro/src/node-haste/DependencyGraph/ModuleResolution.js @@ -26,12 +26,12 @@ import type { import type {PackageForModule, PackageJson} from 'metro-resolver/private/types'; import {codeFrameColumns} from '@babel/code-frame'; -import fs from 'fs'; import invariant from 'invariant'; import * as Resolver from 'metro-resolver'; import createDefaultContext from 'metro-resolver/private/createDefaultContext'; -import path from 'path'; -import util from 'util'; +import fs from 'node:fs'; +import path from 'node:path'; +import util from 'node:util'; export type DirExistsFn = (filePath: string) => boolean; diff --git a/packages/metro/src/node-haste/PackageCache.js b/packages/metro/src/node-haste/PackageCache.js index ad28792476..5018725305 100644 --- a/packages/metro/src/node-haste/PackageCache.js +++ b/packages/metro/src/node-haste/PackageCache.js @@ -11,8 +11,8 @@ import type {PackageJson} from 'metro-resolver/private/types'; -import {readFileSync} from 'fs'; -import {dirname, sep} from 'path'; +import {readFileSync} from 'node:fs'; +import {dirname, sep} from 'node:path'; type GetClosestPackageFn = (absoluteFilePath: string) => ?{ packageJsonPath: string, diff --git a/packages/metro/src/node-haste/__tests__/PackageCache-test.js b/packages/metro/src/node-haste/__tests__/PackageCache-test.js index b2f6a26f57..ea89d7087e 100644 --- a/packages/metro/src/node-haste/__tests__/PackageCache-test.js +++ b/packages/metro/src/node-haste/__tests__/PackageCache-test.js @@ -9,12 +9,14 @@ * @oncall react_native */ -import {sep} from 'path'; +import {sep} from 'node:path'; const {PackageCache} = require('../PackageCache'); const mockReadFileSync = jest.fn(); -jest.mock('fs', () => ({readFileSync: (...args) => mockReadFileSync(...args)})); +jest.mock('node:fs', () => ({ + readFileSync: (...args) => mockReadFileSync(...args), +})); type ClosestPackageMap = Map< string, diff --git a/packages/metro/src/node-haste/lib/AssetPaths.js b/packages/metro/src/node-haste/lib/AssetPaths.js index 3b6abb43e8..3ab5cdb0c8 100644 --- a/packages/metro/src/node-haste/lib/AssetPaths.js +++ b/packages/metro/src/node-haste/lib/AssetPaths.js @@ -10,7 +10,7 @@ */ import parsePlatformFilePath from './parsePlatformFilePath'; -import path from 'path'; +import path from 'node:path'; export type AssetPath = { assetName: string, diff --git a/packages/metro/src/node-haste/lib/parsePlatformFilePath.js b/packages/metro/src/node-haste/lib/parsePlatformFilePath.js index c1539ec25d..5087ecabaa 100644 --- a/packages/metro/src/node-haste/lib/parsePlatformFilePath.js +++ b/packages/metro/src/node-haste/lib/parsePlatformFilePath.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import path from 'path'; +import path from 'node:path'; type PlatformFilePathParts = { dirPath: string, diff --git a/packages/metro/src/shared/output/RamBundle/as-assets.js b/packages/metro/src/shared/output/RamBundle/as-assets.js index 46a6cd1bfc..4b15a00977 100644 --- a/packages/metro/src/shared/output/RamBundle/as-assets.js +++ b/packages/metro/src/shared/output/RamBundle/as-assets.js @@ -19,8 +19,8 @@ import buildSourcemapWithMetadata from './buildSourcemapWithMetadata'; import MAGIC_RAM_BUNDLE_NUMBER from './magic-number'; import {joinModules} from './util'; import writeSourceMap from './write-sourcemap'; -import {promises as fsPromises} from 'fs'; -import path from 'path'; +import {promises as fsPromises} from 'node:fs'; +import path from 'node:path'; // must not start with a dot, as that won't go into the apk const MAGIC_RAM_BUNDLE_FILENAME = 'UNBUNDLE'; diff --git a/packages/metro/src/shared/output/RamBundle/as-indexed-file.js b/packages/metro/src/shared/output/RamBundle/as-indexed-file.js index 5704a9bc0e..9e88f479f2 100644 --- a/packages/metro/src/shared/output/RamBundle/as-indexed-file.js +++ b/packages/metro/src/shared/output/RamBundle/as-indexed-file.js @@ -15,14 +15,14 @@ import type { ModuleTransportLike, OutputOptions, } from '../../types'; -import type {WriteStream} from 'fs'; +import type {WriteStream} from 'node:fs'; import relativizeSourceMapInline from '../../../lib/relativizeSourceMap'; import buildSourcemapWithMetadata from './buildSourcemapWithMetadata'; import MAGIC_UNBUNDLE_FILE_HEADER from './magic-number'; import {joinModules} from './util'; import writeSourceMap from './write-sourcemap'; -import fs from 'fs'; +import fs from 'node:fs'; const SIZEOF_UINT32 = 4; diff --git a/packages/metro/src/shared/output/meta.js b/packages/metro/src/shared/output/meta.js index 0e63d38e5b..5e737954dd 100644 --- a/packages/metro/src/shared/output/meta.js +++ b/packages/metro/src/shared/output/meta.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import crypto from 'crypto'; +import crypto from 'node:crypto'; const isUTF8 = (encoding: 'ascii' | 'utf16le' | 'utf8') => /^utf-?8$/i.test(encoding); diff --git a/packages/metro/src/shared/output/writeFile.js b/packages/metro/src/shared/output/writeFile.js index 85613544e8..c66c026b20 100644 --- a/packages/metro/src/shared/output/writeFile.js +++ b/packages/metro/src/shared/output/writeFile.js @@ -9,7 +9,7 @@ * @oncall react_native */ -import fs from 'fs'; +import fs from 'node:fs'; import throat from 'throat'; const writeFileWithThroat: typeof fs.promises.writeFile = throat( diff --git a/packages/metro/types/Bundler.d.ts b/packages/metro/types/Bundler.d.ts index e4be4d6ff7..91aeac83de 100644 --- a/packages/metro/types/Bundler.d.ts +++ b/packages/metro/types/Bundler.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/Bundler.js @@ -17,8 +17,8 @@ import type {TransformResultWithSource} from './DeltaBundler'; import type {TransformOptions} from './DeltaBundler/Worker'; -import type EventEmitter from 'events'; import type {ConfigT} from 'metro-config'; +import type EventEmitter from 'node:events'; import DependencyGraph from './node-haste/DependencyGraph'; diff --git a/packages/metro/types/DeltaBundler.d.ts b/packages/metro/types/DeltaBundler.d.ts index 94524f74b8..def57f5f78 100644 --- a/packages/metro/types/DeltaBundler.d.ts +++ b/packages/metro/types/DeltaBundler.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<9fb6b7178cc917f17b839e36feb87ee8>> + * @generated SignedSource<<81e6b665d983033e84ac6517c1012086>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/DeltaBundler.js @@ -16,7 +16,7 @@ */ import type {DeltaResult, Graph, MixedOutput, Options, ReadOnlyGraph} from './DeltaBundler/types'; -import type EventEmitter from 'events'; +import type EventEmitter from 'node:events'; export type {DeltaResult, Graph, Dependencies, MixedOutput, Module, ReadOnlyGraph, TransformFn, TransformResult, TransformResultDependency, TransformResultWithSource} from './DeltaBundler/types'; /** diff --git a/packages/metro/types/DeltaBundler/DeltaCalculator.d.ts b/packages/metro/types/DeltaBundler/DeltaCalculator.d.ts index e356286916..2a763230b1 100644 --- a/packages/metro/types/DeltaBundler/DeltaCalculator.d.ts +++ b/packages/metro/types/DeltaBundler/DeltaCalculator.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<973161c2431719eaa4e5f3a5414b31bb>> + * @generated SignedSource<<9685e297be806c39ff9bf6b57103357c>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/DeltaBundler/DeltaCalculator.js @@ -18,7 +18,7 @@ import type {DeltaResult, Options} from './types'; import {Graph} from './Graph'; -import EventEmitter from 'events'; +import EventEmitter from 'node:events'; /** * This class is in charge of calculating the delta of changed modules that * happen between calls. To do so, it subscribes to file changes, so it can diff --git a/packages/metro/types/DeltaBundler/Serializers/helpers/js.d.ts b/packages/metro/types/DeltaBundler/Serializers/helpers/js.d.ts index 02049014f7..b3ea436de3 100644 --- a/packages/metro/types/DeltaBundler/Serializers/helpers/js.d.ts +++ b/packages/metro/types/DeltaBundler/Serializers/helpers/js.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/DeltaBundler/Serializers/helpers/js.js @@ -18,7 +18,7 @@ import type {MixedOutput, Module} from '../../types'; import type {JsOutput} from 'metro-transform-worker'; -import path from 'path'; +import path from 'node:path'; export type Options = Readonly<{ createModuleId: ($$PARAM_0$$: string) => number | string; diff --git a/packages/metro/types/Server.d.ts b/packages/metro/types/Server.d.ts index 03b30f3e0c..688eaf0385 100644 --- a/packages/metro/types/Server.d.ts +++ b/packages/metro/types/Server.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/Server.js @@ -19,10 +19,10 @@ import type {AssetData} from './Assets'; import type {RamBundleInfo} from './DeltaBundler/Serializers/getRamBundleInfo'; import type {BuildOptions, BundleOptions} from './shared/types'; import type {IncomingMessage} from 'connect'; -import type {ServerResponse} from 'http'; import type {ConfigT} from 'metro-config'; import type {CustomResolverOptions} from 'metro-resolver/private/types'; import type {CustomTransformOptions} from 'metro-transform-worker'; +import type {ServerResponse} from 'node:http'; import IncrementalBundler from './IncrementalBundler'; import {SourcePathsMode} from './shared/types'; diff --git a/packages/metro/types/Server/MultipartResponse.d.ts b/packages/metro/types/Server/MultipartResponse.d.ts index ab2760f85e..4eb38acd52 100644 --- a/packages/metro/types/Server/MultipartResponse.d.ts +++ b/packages/metro/types/Server/MultipartResponse.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<5a0b37c39c07c685f750eb9419dc5b5b>> + * @generated SignedSource<<1ea61133bb1f20cfa2e82c2ba414d139>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/Server/MultipartResponse.js @@ -15,7 +15,7 @@ * yarn run build-ts-defs (OSS) */ -import type {IncomingMessage, ServerResponse} from 'http'; +import type {IncomingMessage, ServerResponse} from 'node:http'; type Data = string | Buffer | Uint8Array; type Headers = {[$$Key$$: string]: string | number}; diff --git a/packages/metro/types/index.d.ts b/packages/metro/types/index.d.ts index 23292b6859..0fe870cbf1 100644 --- a/packages/metro/types/index.d.ts +++ b/packages/metro/types/index.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<4b2bbfa101b60fd30d555640425678d8>> + * @generated SignedSource<<4aca97550eb6e579e435254037e38616>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/index.flow.js @@ -20,12 +20,12 @@ import type {ReadOnlyGraph} from './DeltaBundler'; import type {ServerOptions} from './Server'; import type {BuildOptions, OutputOptions, RequestOptions} from './shared/types'; import type {HandleFunction} from 'connect'; -import type {Server as HttpServer} from 'http'; -import type {Server as HttpsServer, ServerOptions as HttpsServerOptions} from 'https'; import type {TransformProfile} from 'metro-babel-transformer'; import type {ConfigT, InputConfigT, MetroConfig, Middleware} from 'metro-config'; import type {CustomResolverOptions} from 'metro-resolver'; import type {CustomTransformOptions} from 'metro-transform-worker'; +import type {Server as HttpServer} from 'node:http'; +import type {Server as HttpsServer, ServerOptions as HttpsServerOptions} from 'node:https'; import type {Server as WebSocketServer} from 'ws'; import type $$IMPORT_TYPEOF_1$$ from 'yargs'; diff --git a/packages/metro/types/lib/JsonReporter.d.ts b/packages/metro/types/lib/JsonReporter.d.ts index d47aeba011..ae637cb643 100644 --- a/packages/metro/types/lib/JsonReporter.d.ts +++ b/packages/metro/types/lib/JsonReporter.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<> + * @generated SignedSource<<1c9e77c89ab61bbb8fea403a63e33ab2>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/lib/JsonReporter.js @@ -15,7 +15,7 @@ * yarn run build-ts-defs (OSS) */ -import type {Writable} from 'stream'; +import type {Writable} from 'node:stream'; export type SerializedError = { message: string; diff --git a/packages/metro/types/lib/parseJsonBody.d.ts b/packages/metro/types/lib/parseJsonBody.d.ts index 408ca296e7..5a656b8771 100644 --- a/packages/metro/types/lib/parseJsonBody.d.ts +++ b/packages/metro/types/lib/parseJsonBody.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<5a1c2735728a43c6b899b683a08aea0e>> + * @generated SignedSource<<209b39c4ed4b1d1fb864533ac8c70ec3>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/lib/parseJsonBody.js @@ -15,7 +15,7 @@ * yarn run build-ts-defs (OSS) */ -import type {IncomingMessage} from 'http'; +import type {IncomingMessage} from 'node:http'; export type JsonData = {[$$Key$$: string]: JsonData} | Array | string | number | boolean | null; /** diff --git a/packages/metro/types/node-haste/DependencyGraph.d.ts b/packages/metro/types/node-haste/DependencyGraph.d.ts index f0327b6180..c887241180 100644 --- a/packages/metro/types/node-haste/DependencyGraph.d.ts +++ b/packages/metro/types/node-haste/DependencyGraph.d.ts @@ -6,7 +6,7 @@ * * @noformat * @oncall react_native - * @generated SignedSource<<55a0e038f230fd92a5284a87b111235f>> + * @generated SignedSource<<30d76234544ec70f02b4a784d55cd7af>> * * This file was translated from Flow by scripts/generateTypeScriptDefinitions.js * Original file: packages/metro/src/node-haste/DependencyGraph.js @@ -19,7 +19,7 @@ import type {BundlerResolution, TransformResultDependency} from '../DeltaBundler import type {ResolverInputOptions} from '../shared/types'; import type {ConfigT} from 'metro-config'; -import EventEmitter from 'events'; +import EventEmitter from 'node:events'; declare class DependencyGraph extends EventEmitter { constructor( diff --git a/private/metro-memory-fs/src/__tests__/index-test.js b/private/metro-memory-fs/src/__tests__/index-test.js index 65ab619197..c59528bc1e 100644 --- a/private/metro-memory-fs/src/__tests__/index-test.js +++ b/private/metro-memory-fs/src/__tests__/index-test.js @@ -16,7 +16,7 @@ jest.useRealTimers(); const MemoryFs = require('../index'); -const path = require('path'); +const path = require('node:path'); let fs; diff --git a/private/metro-memory-fs/src/index.js b/private/metro-memory-fs/src/index.js index 058bd6765f..a134279c26 100644 --- a/private/metro-memory-fs/src/index.js +++ b/private/metro-memory-fs/src/index.js @@ -14,9 +14,9 @@ /* eslint-disable no-bitwise */ // $FlowFixMe[cannot-resolve-module]: not defined by Flow -const constants = require('constants'); -const {EventEmitter} = require('events'); -const stream = require('stream'); +const constants = require('node:constants'); +const {EventEmitter} = require('node:events'); +const stream = require('node:stream'); type NodeBase = { gid: number, diff --git a/scripts/__tests__/babel-lib-defs-test.js b/scripts/__tests__/babel-lib-defs-test.js index 2beb6d9c00..49704a1d7e 100644 --- a/scripts/__tests__/babel-lib-defs-test.js +++ b/scripts/__tests__/babel-lib-defs-test.js @@ -11,7 +11,7 @@ 'use strict'; import generateBabelFlowLibraryDefinitions from '../support/generateBabelFlowLibraryDefinitions'; -import {promises as fsPromises} from 'fs'; +import {promises as fsPromises} from 'node:fs'; test('Babel Flow library definitions should be up to date', async () => { // Run `yarn update-babel-flow-lib-defs` in the Metro monorepo if this test fails. diff --git a/scripts/__tests__/subpackages-test.js b/scripts/__tests__/subpackages-test.js index 028d97e629..40d12f62b3 100644 --- a/scripts/__tests__/subpackages-test.js +++ b/scripts/__tests__/subpackages-test.js @@ -9,8 +9,8 @@ * @oncall react_native */ -import fs from 'fs'; -import path from 'path'; +import fs from 'node:fs'; +import path from 'node:path'; const WORKSPACE_ROOT = path.resolve(__dirname, '../..'); diff --git a/scripts/_getPackages.js b/scripts/_getPackages.js index 54c8a7dba7..88b40d106e 100644 --- a/scripts/_getPackages.js +++ b/scripts/_getPackages.js @@ -8,8 +8,8 @@ * @oncall react_native */ -const fs = require('fs'); -const path = require('path'); +const fs = require('node:fs'); +const path = require('node:path'); const PACKAGES_DIR = path.resolve(__dirname, '../packages'); diff --git a/scripts/build.js b/scripts/build.js index bb874bef27..1fe84efc5e 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -27,10 +27,10 @@ const getPackages = require('./_getPackages'); const babel = require('@babel/core'); -const fs = require('fs'); -const path = require('path'); +const fs = require('node:fs'); +const path = require('node:path'); +const {styleText} = require('node:util'); const prettier = require('prettier'); -const {styleText} = require('util'); const SRC_DIR = 'src'; const TYPES_DIR = 'types'; diff --git a/scripts/eslint/base.js b/scripts/eslint/base.js index a7646d4223..2c193409ab 100644 --- a/scripts/eslint/base.js +++ b/scripts/eslint/base.js @@ -10,7 +10,7 @@ 'use strict'; -const path = require('path'); +const path = require('node:path'); require('eslint-plugin-lint').load(path.join(__dirname, 'rules')); @@ -28,6 +28,7 @@ module.exports = { rules: { 'babel/quotes': ['error', 'single', 'avoid-escape'], 'consistent-return': 'error', + 'import/enforce-node-protocol-usage': ['warn', 'always'], 'import/no-extraneous-dependencies': 'error', 'fb-www/extra-arrow-initializer': 'off', 'lint/metro-deep-imports': 'warn', diff --git a/scripts/eslint/typescript.js b/scripts/eslint/typescript.js index 717103ea02..42c393b58a 100644 --- a/scripts/eslint/typescript.js +++ b/scripts/eslint/typescript.js @@ -10,7 +10,7 @@ 'use strict'; -const path = require('path'); +const path = require('node:path'); require('eslint-plugin-lint').load(path.join(__dirname, 'rules')); diff --git a/scripts/generateTypeScriptDefinitions.js b/scripts/generateTypeScriptDefinitions.js index 69b969f2a4..c720b9a3a4 100644 --- a/scripts/generateTypeScriptDefinitions.js +++ b/scripts/generateTypeScriptDefinitions.js @@ -15,9 +15,9 @@ import { translateFlowDefToTSDef, translateFlowToFlowDef, } from 'flow-api-translator'; -import fs from 'fs'; +import fs from 'node:fs'; +import path from 'node:path'; import nullthrows from 'nullthrows'; -import path from 'path'; import * as prettier from 'prettier'; // $FlowFixMe[untyped-import] in OSS only import SignedSource from 'signedsource'; diff --git a/scripts/jestFilter.js b/scripts/jestFilter.js index 1f85f6bfc8..63b47468e0 100644 --- a/scripts/jestFilter.js +++ b/scripts/jestFilter.js @@ -9,7 +9,7 @@ * @oncall react_native */ -const path = require('path'); +const path = require('node:path'); // TODO: fix on windows const BROKEN_ON_WINDOWS = [ diff --git a/scripts/nativePrettier.js b/scripts/nativePrettier.js index 67df557253..21d22896cf 100644 --- a/scripts/nativePrettier.js +++ b/scripts/nativePrettier.js @@ -10,9 +10,9 @@ 'use strict'; -const fs = require('fs'); -const Module = require('module'); -const path = require('path'); +const fs = require('node:fs'); +const Module = require('node:module'); +const path = require('node:path'); const prettierPath = [ path.resolve(__dirname, '../node_modules/prettier'), diff --git a/scripts/setupJest.js b/scripts/setupJest.js index 509113404d..0e93aac8fe 100644 --- a/scripts/setupJest.js +++ b/scripts/setupJest.js @@ -19,6 +19,6 @@ require('metro-babel-register').unstable_registerForMetroMonorepo = () => {}; * using the orginal node `require` function. */ jest.mock('prettier', () => { - const module = jest.requireActual('module'); + const module = jest.requireActual('node:module'); return module.prototype.require(require.resolve('prettier')); }); diff --git a/scripts/support/updateBabelTraverseFlowLibraryDefinition.js b/scripts/support/updateBabelTraverseFlowLibraryDefinition.js index ced788edac..4f211d5518 100644 --- a/scripts/support/updateBabelTraverseFlowLibraryDefinition.js +++ b/scripts/support/updateBabelTraverseFlowLibraryDefinition.js @@ -12,7 +12,7 @@ const virtualTypes = require('@babel/traverse/lib/path/lib/virtual-types'); const t = require('@babel/types'); -const fs = require('fs'); +const fs = require('node:fs'); const NODE_PREFIX = 'BabelNode'; const VISITOR_METHODS_MARKER_NAME = 'VISITOR METHODS'; diff --git a/scripts/updateBabelFlowLibraryDefinitions.js b/scripts/updateBabelFlowLibraryDefinitions.js index 3155ea652b..cf6b02446c 100644 --- a/scripts/updateBabelFlowLibraryDefinitions.js +++ b/scripts/updateBabelFlowLibraryDefinitions.js @@ -14,7 +14,7 @@ */ import generateBabelFlowLibraryDefinitions from './support/generateBabelFlowLibraryDefinitions'; -import {promises as fsPromises} from 'fs'; +import {promises as fsPromises} from 'node:fs'; async function main() { const newContentByFile = await generateBabelFlowLibraryDefinitions(); diff --git a/scripts/updateVersion.js b/scripts/updateVersion.js index 9b808eb12a..8a9bd56068 100644 --- a/scripts/updateVersion.js +++ b/scripts/updateVersion.js @@ -11,9 +11,9 @@ 'use strict'; -const fs = require('fs'); const invariant = require('invariant'); -const path = require('path'); +const fs = require('node:fs'); +const path = require('node:path'); function updateVersion(version /*: ?string */) { if (version == null) {