/** * 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 */ /** * There are some env vars which affect transformations, so the Metro/Babel cache should be invalidated when at least one of them changed. * * If any issues found with such approach, we can fallback to the implementation which always invalidates caches, but also makes bundling significantly slower: * export default function getCacheKey() { return Math.random().toString(36); } */ import {default as flipperEnv} from './flipper-env'; import fs from 'fs-extra'; import path from 'path'; let selfChecksum: string | undefined; function getSelfChecksum() { if (!selfChecksum) { selfChecksum = fs .readFileSync(path.resolve(__dirname, '..', 'lib', 'checksum.txt')) .toString(); } return selfChecksum; } export default function getCacheKey() { const key = [ getSelfChecksum(), ...Object.entries(flipperEnv) .sort(([name1, _value1], [name2, _value2]) => name1.localeCompare(name2)) .map(([name, value]) => `${name}=${value}`), ].join('|'); return key; }