diff --git a/packages/core/core/src/PackagerRunner.js b/packages/core/core/src/PackagerRunner.js index 238023a540db..26c9ad1b6cbb 100644 --- a/packages/core/core/src/PackagerRunner.js +++ b/packages/core/core/src/PackagerRunner.js @@ -81,12 +81,15 @@ export default class PackagerRunner { map }; - if ( - cacheKey != null && - // TODO This skips caching all packages that return Readable streams. - !(result.contents instanceof Readable) - ) { + if (cacheKey != null) { await this.writeToCache(cacheKey, result.contents, map); + + if (result.contents instanceof Readable) { + return { + contents: this.options.cache.getStream(getContentKey(cacheKey)), + map: result.map + }; + } } return result; @@ -301,8 +304,8 @@ export default class PackagerRunner { contents: Readable, map: ?Readable |}> { - let contentKey = md5FromString(`${cacheKey}:content`); - let mapKey = md5FromString(`${cacheKey}:map`); + let contentKey = getContentKey(cacheKey); + let mapKey = getMapKey(cacheKey); let contentExists = await this.options.cache.blobExists(contentKey); if (!contentExists) { @@ -318,12 +321,12 @@ export default class PackagerRunner { } async writeToCache(cacheKey: string, contents: Blob, map: ?Blob) { - let contentKey = md5FromString(`${cacheKey}:content`); + let contentKey = getContentKey(cacheKey); await this.options.cache.setStream(contentKey, blobToStream(contents)); if (map != null) { - let mapKey = md5FromString(`${cacheKey}:map`); + let mapKey = getMapKey(cacheKey); await this.options.cache.setStream(mapKey, blobToStream(map)); } } @@ -410,3 +413,11 @@ function replaceReferences( return output; } + +function getContentKey(cacheKey: string) { + return md5FromString(`${cacheKey}:content`); +} + +function getMapKey(cacheKey: string) { + return md5FromString(`${cacheKey}:map`); +}