From c32593ed4ffd037b29562eb6bd105d60d65da9db Mon Sep 17 00:00:00 2001 From: Oskar Eichler Date: Mon, 31 Aug 2026 02:45:13 +0300 Subject: [PATCH] Invalidate preset cache on dependency updates --- .../src/__tests__/cache-key-test.js | 29 +++++++++++++++++++ .../react-native-babel-preset/src/index.js | 1 + 2 files changed, 30 insertions(+) create mode 100644 packages/react-native-babel-preset/src/__tests__/cache-key-test.js diff --git a/packages/react-native-babel-preset/src/__tests__/cache-key-test.js b/packages/react-native-babel-preset/src/__tests__/cache-key-test.js new file mode 100644 index 00000000000..a14ad66633c --- /dev/null +++ b/packages/react-native-babel-preset/src/__tests__/cache-key-test.js @@ -0,0 +1,29 @@ +/** + * 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. + * + * @format + * @noflow + */ + +'use strict'; + +function getCacheKey(packageContents) { + jest.resetModules(); + jest.doMock('node:fs', () => ({ + readFileSync: filename => + filename.endsWith('package.json') + ? Buffer.from(packageContents) + : Buffer.from(filename), + })); + + return require('../index').getCacheKey(); +} + +test('cache key includes package metadata for main builds', () => { + expect(getCacheKey('{"dependency":"1.0.0"}')).not.toBe( + getCacheKey('{"dependency":"2.0.0"}'), + ); +}); diff --git a/packages/react-native-babel-preset/src/index.js b/packages/react-native-babel-preset/src/index.js index 27e558a1f7e..54131c6d50f 100644 --- a/packages/react-native-babel-preset/src/index.js +++ b/packages/react-native-babel-preset/src/index.js @@ -35,6 +35,7 @@ module.exports.getCacheKey = () => { const {readFileSync} = require('node:fs'); const key = createHash('md5'); [ + readFileSync(require.resolve('../package.json')), readFileSync(__filename), readFileSync(require.resolve('./configs/main.js')), readFileSync(require.resolve('./configs/hmr.js')),