diff --git a/packager/src/lib/GlobalTransformCache.js b/packager/src/lib/GlobalTransformCache.js index 82527bbe55..2304f0ab6c 100644 --- a/packager/src/lib/GlobalTransformCache.js +++ b/packager/src/lib/GlobalTransformCache.js @@ -225,7 +225,7 @@ class URIBasedGlobalTransformCache { keyOf(props: FetchProps) { const hash = crypto.createHash('sha1'); const {sourceCode, filePath, transformOptions} = props; - this._optionsHasher.hashTransformWorkerOptions(hash, transformOptions); + hash.update(this._optionsHasher.getTransformWorkerOptionsDigest(transformOptions)); const cacheKey = props.getTransformCacheKey(sourceCode, filePath, transformOptions); hash.update(JSON.stringify(cacheKey)); hash.update(crypto.createHash('sha1').update(sourceCode).digest('hex')); @@ -313,9 +313,23 @@ class URIBasedGlobalTransformCache { class OptionsHasher { _rootPath: string; + _cache: WeakMap; constructor(rootPath: string) { this._rootPath = rootPath; + this._cache = new WeakMap(); + } + + getTransformWorkerOptionsDigest(options: TransformWorkerOptions): string { + const digest = this._cache.get(options); + if (digest != null) { + return digest; + } + const hash = crypto.createHash('sha1'); + this.hashTransformWorkerOptions(hash, options); + const newDigest = hash.digest('hex'); + this._cache.set(options, newDigest); + return newDigest; } /** diff --git a/packager/src/lib/__tests__/__snapshots__/GlobalTransformCache-test.js.snap b/packager/src/lib/__tests__/__snapshots__/GlobalTransformCache-test.js.snap index ed139b3864..112b9621c5 100644 --- a/packager/src/lib/__tests__/__snapshots__/GlobalTransformCache-test.js.snap +++ b/packager/src/lib/__tests__/__snapshots__/GlobalTransformCache-test.js.snap @@ -19,12 +19,12 @@ Object { exports[`GlobalTransformCache fetches results 1`] = ` Array [ Object { - "code": "/* code from http://globalcache.com/fb94b11256237327e4eef5daa08bad33573b3781-foo.js */", + "code": "/* code from http://globalcache.com/43e279be6916de8be463ef98bd72ded391608371-foo.js */", "dependencies": Array [], "dependencyOffsets": Array [], }, Object { - "code": "/* code from http://globalcache.com/b902b4a8841fcea2919c2fe9b21e68d96dff59c9-bar.js */", + "code": "/* code from http://globalcache.com/e09598ad4c807cb22b32d68cfc16e0cba7fdb85c-bar.js */", "dependencies": Array [], "dependencyOffsets": Array [], },