diff --git a/flow-typed/graceful-fs.js b/flow-typed/graceful-fs.js deleted file mode 100644 index 4dfac9fb1b..0000000000 --- a/flow-typed/graceful-fs.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) Meta Platforms, Inc. and affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @flow strict-local - * @format - * @oncall react_native - */ - -declare module 'graceful-fs' { - declare module.exports: { - ...$Exports<'fs'>, - gracefulify(fs: {...}): void, - }; -} diff --git a/packages/metro-file-map/package.json b/packages/metro-file-map/package.json index 76885be966..8055f94681 100644 --- a/packages/metro-file-map/package.json +++ b/packages/metro-file-map/package.json @@ -22,7 +22,6 @@ "debug": "^4.4.0", "fb-watchman": "^2.0.0", "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "nullthrows": "^1.1.1" diff --git a/packages/metro-file-map/src/__tests__/index-test.js b/packages/metro-file-map/src/__tests__/index-test.js index 9d980c1b55..33e854a1e6 100644 --- a/packages/metro-file-map/src/__tests__/index-test.js +++ b/packages/metro-file-map/src/__tests__/index-test.js @@ -345,7 +345,7 @@ describe('FileMap', () => { // $FlowFixMe[incompatible-type] mockChangedFiles = null; - fs = require('graceful-fs'); + fs = require('node:fs'); consoleWarn = console.warn; consoleError = console.error; diff --git a/packages/metro-file-map/src/__tests__/worker-test.js b/packages/metro-file-map/src/__tests__/worker-test.js index f27483749c..19c7f8ec5c 100644 --- a/packages/metro-file-map/src/__tests__/worker-test.js +++ b/packages/metro-file-map/src/__tests__/worker-test.js @@ -18,7 +18,7 @@ import {Worker} from '../worker'; import * as path from 'node:path'; import * as vm from 'node:vm'; -jest.mock('fs', () => { +jest.mock('node:fs', () => { const path = require('node:path'); const mockFs = { [path.join('/project', 'fruits', 'Banana.js')]: ` @@ -47,7 +47,7 @@ jest.mock('fs', () => { }; return { - ...jest.createMockFromModule('fs'), + ...jest.createMockFromModule('node:fs'), readFileSync: jest.fn((path, options) => { const entry = mockFs[path]; if (entry) { @@ -64,7 +64,7 @@ jest.mock('fs', () => { }; }); -const fs: FS = jest.requireMock('fs'); +const fs: FS = jest.requireMock('node:fs'); const defaults: WorkerMessage = { computeSha1: false, @@ -240,7 +240,7 @@ describe('worker', () => { test('can be loaded directly without transpilation', async () => { const code = await jest - .requireActual('fs') + .requireActual('node:fs') .promises.readFile(require.resolve('../worker.js'), 'utf8'); expect(() => new vm.Script(code)).not.toThrow(); }); diff --git a/packages/metro-file-map/src/crawlers/__tests__/node-test.js b/packages/metro-file-map/src/crawlers/__tests__/node-test.js index 48765e6ce8..a102f17ddb 100644 --- a/packages/metro-file-map/src/crawlers/__tests__/node-test.js +++ b/packages/metro-file-map/src/crawlers/__tests__/node-test.js @@ -13,12 +13,12 @@ import type TreeFSType from '../../lib/TreeFS'; let mockPathModule; jest.mock('node:path', () => mockPathModule); -// The platform-specific path helper `p` for the graceful-fs mock +// The platform-specific path helper `p` for the fs mock let mockP: string => string; jest.useRealTimers(); -jest.mock('graceful-fs', () => { +jest.mock('node:fs', () => { const slash = require('slash'); let mtime = 32; const size = 42; @@ -265,7 +265,7 @@ describe.each([['win32'], ['posix']])('node crawler on %s', platform => { test('uses the withFileTypes option with readdir', async () => { nodeCrawl = require('../node').default; - const fs = require('graceful-fs'); + const fs = require('node:fs'); const {changedFiles, removedFiles} = await nodeCrawl({ console: global.console, @@ -374,7 +374,7 @@ describe.each([['win32'], ['posix']])('node crawler on %s', platform => { }); test('crawls from a filesystem root without doubling separators', async () => { - const fs = require('graceful-fs'); + const fs = require('node:fs'); nodeCrawl = require('../node').default; const ignore = jest.fn(pearMatcher); diff --git a/packages/metro-file-map/src/crawlers/node/index.js b/packages/metro-file-map/src/crawlers/node/index.js index 1958af23d6..7f724e3de9 100644 --- a/packages/metro-file-map/src/crawlers/node/index.js +++ b/packages/metro-file-map/src/crawlers/node/index.js @@ -12,7 +12,7 @@ import type {CrawlerOptions, CrawlResult, FileData} from '../../flow-types'; import {RootPathUtils} from '../../lib/RootPathUtils'; -import * as fs from 'graceful-fs'; +import fs from 'node:fs'; import * as path from 'node:path'; function find(options: CrawlerOptions): Promise { 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 0248022c6c..b6506cd743 100644 --- a/packages/metro-file-map/src/lib/__tests__/FileProcessor-test.js +++ b/packages/metro-file-map/src/lib/__tests__/FileProcessor-test.js @@ -555,7 +555,7 @@ describe('processRegularFile', () => { jest.resetModules(); jest.clearAllMocks(); jest.unmock('../../worker.js'); - jest.mock('fs', () => ({ + jest.mock('node:fs', () => ({ readFileSync: mockReadFileSync, })); FileProcessor = require('../FileProcessor').FileProcessor; diff --git a/packages/metro-file-map/src/worker.js b/packages/metro-file-map/src/worker.js index 3a01fe354e..3d6110a577 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 fs = require('graceful-fs'); const {createHash} = require('node:crypto'); +const fs = require('node:fs'); function sha1hex(content /*: string | Buffer */) /*: string */ { return createHash('sha1').update(content).digest('hex'); diff --git a/packages/metro/package.json b/packages/metro/package.json index 8eada2d021..1a15e791ea 100644 --- a/packages/metro/package.json +++ b/packages/metro/package.json @@ -31,7 +31,6 @@ "debug": "^4.4.0", "error-stack-parser": "^2.0.6", "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", "flow-parser": "0.335.0", "invariant": "^2.2.4", "jest-worker": "^29.7.0", diff --git a/packages/metro/src/DeltaBundler/__tests__/resolver-test.js b/packages/metro/src/DeltaBundler/__tests__/resolver-test.js index 64a974ac13..73641ba08f 100644 --- a/packages/metro/src/DeltaBundler/__tests__/resolver-test.js +++ b/packages/metro/src/DeltaBundler/__tests__/resolver-test.js @@ -37,7 +37,6 @@ jest endianness: () => 'LE', release: () => '', })) - .mock('graceful-fs', () => jest.requireMock('node:fs')) .spyOn(console, 'warn') .mockImplementation(() => {}); diff --git a/packages/metro/src/Server.js b/packages/metro/src/Server.js index 58410a62b3..4846da83e1 100644 --- a/packages/metro/src/Server.js +++ b/packages/metro/src/Server.js @@ -68,10 +68,10 @@ import symbolicate from './Server/symbolicate'; import {SourcePathsMode} from './shared/types'; import {codeFrameColumns} from '@babel/code-frame'; import debugModule from 'debug'; -import * as fs from 'graceful-fs'; import * as jscSafeUrl from 'jsc-safe-url'; import {Logger} from 'metro-core'; import mime from 'mime-types'; +import fs from 'node:fs'; import path from 'node:path'; import {performance} from 'node:perf_hooks'; import querystring from 'node:querystring';