mirror of https://github.com/status-im/metro.git
Pass cache keys instead of cache props when talking to the GlobalTransformCache
Reviewed By: jeanlauliac Differential Revision: D7031064 fbshipit-source-id: a99fb2775b84ce6b866c80be68f966dcd4ea57ca
This commit is contained in:
parent
6da4bc4d30
commit
e4b1e773b1
|
@ -39,6 +39,8 @@ type FetchOptions = {agent?: ?HttpAgent | HttpsAgent};
|
||||||
* application's top-level `Server` class.
|
* application's top-level `Server` class.
|
||||||
*/
|
*/
|
||||||
export type GlobalTransformCache = {
|
export type GlobalTransformCache = {
|
||||||
|
keyOf(props: FetchProps): string,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Synchronously determine if it is worth trying to fetch a result from the
|
* Synchronously determine if it is worth trying to fetch a result from the
|
||||||
* cache. This can be used, for instance, to exclude sets of options we know
|
* cache. This can be used, for instance, to exclude sets of options we know
|
||||||
|
@ -50,7 +52,7 @@ export type GlobalTransformCache = {
|
||||||
* Try to fetch a result. It doesn't actually need to fetch from a server,
|
* Try to fetch a result. It doesn't actually need to fetch from a server,
|
||||||
* the global cache could be instantiated locally for example.
|
* the global cache could be instantiated locally for example.
|
||||||
*/
|
*/
|
||||||
fetch(props: FetchProps): Promise<?CachedResult>,
|
fetch(key: string): Promise<?CachedResult>,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Try to store a result. Callsites won't necessarily wait for the success or
|
* Try to store a result. Callsites won't necessarily wait for the success or
|
||||||
|
@ -60,7 +62,7 @@ export type GlobalTransformCache = {
|
||||||
* no-op in production, and only do the storage operation from a script
|
* no-op in production, and only do the storage operation from a script
|
||||||
* running on a Continuous Integration platform.
|
* running on a Continuous Integration platform.
|
||||||
*/
|
*/
|
||||||
store(props: FetchProps, result: CachedResult): Promise<void>,
|
store(key: string, result: CachedResult): Promise<void>,
|
||||||
};
|
};
|
||||||
|
|
||||||
type FetchResultURIs = (keys: Array<string>) => Promise<Map<string, string>>;
|
type FetchResultURIs = (keys: Array<string>) => Promise<Map<string, string>>;
|
||||||
|
@ -361,17 +363,17 @@ class URIBasedGlobalTransformCache {
|
||||||
* This may return `null` if either the cache doesn't have a value for that
|
* This may return `null` if either the cache doesn't have a value for that
|
||||||
* key yet, or an error happened, processed separately.
|
* key yet, or an error happened, processed separately.
|
||||||
*/
|
*/
|
||||||
async fetch(props: FetchProps): Promise<?CachedResult> {
|
async fetch(key: string): Promise<?CachedResult> {
|
||||||
const uri = await this._fetcher.fetch(this.keyOf(props));
|
const uri = await this._fetcher.fetch(key);
|
||||||
if (uri == null) {
|
if (uri == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return await this._fetchResultFromURI(uri);
|
return await this._fetchResultFromURI(uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
async store(props: FetchProps, result: CachedResult): Promise<void> {
|
async store(key: string, result: CachedResult): Promise<void> {
|
||||||
if (this._store != null) {
|
if (this._store != null) {
|
||||||
await this._store.store(this.keyOf(props), result);
|
await this._store.store(key, result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,18 +46,22 @@ describe('GlobalTransformCache', () => {
|
||||||
const transformOptions = await getTransformOptions();
|
const transformOptions = await getTransformOptions();
|
||||||
|
|
||||||
const result = await Promise.all([
|
const result = await Promise.all([
|
||||||
cache.fetch({
|
cache.fetch(
|
||||||
localPath: 'some/where/foo.js',
|
cache.keyOf({
|
||||||
sourceCode: '/* beep */',
|
localPath: 'some/where/foo.js',
|
||||||
getTransformCacheKey: () => 'abcd',
|
sourceCode: '/* beep */',
|
||||||
transformOptions,
|
getTransformCacheKey: () => 'abcd',
|
||||||
}),
|
transformOptions,
|
||||||
cache.fetch({
|
}),
|
||||||
localPath: 'some/where/else/bar.js',
|
),
|
||||||
sourceCode: '/* boop */',
|
cache.fetch(
|
||||||
getTransformCacheKey: () => 'abcd',
|
cache.keyOf({
|
||||||
transformOptions,
|
localPath: 'some/where/else/bar.js',
|
||||||
}),
|
sourceCode: '/* boop */',
|
||||||
|
getTransformCacheKey: () => 'abcd',
|
||||||
|
transformOptions,
|
||||||
|
}),
|
||||||
|
),
|
||||||
]);
|
]);
|
||||||
expect(result).toMatchSnapshot();
|
expect(result).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
|
@ -263,7 +263,7 @@ class Module {
|
||||||
globalCache: GlobalTransformCache,
|
globalCache: GlobalTransformCache,
|
||||||
): Promise<TransformedCode> {
|
): Promise<TransformedCode> {
|
||||||
const result = await this._transformCodeFor(cacheProps);
|
const result = await this._transformCodeFor(cacheProps);
|
||||||
globalCache.store(cacheProps, result);
|
globalCache.store(globalCache.keyOf(cacheProps), result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,7 +274,9 @@ class Module {
|
||||||
if (globalCache == null || !globalCache.shouldFetch(cacheProps)) {
|
if (globalCache == null || !globalCache.shouldFetch(cacheProps)) {
|
||||||
return await this._transformCodeFor(cacheProps);
|
return await this._transformCodeFor(cacheProps);
|
||||||
}
|
}
|
||||||
const globalCachedResult = await globalCache.fetch(cacheProps);
|
const globalCachedResult = await globalCache.fetch(
|
||||||
|
globalCache.keyOf(cacheProps),
|
||||||
|
);
|
||||||
if (globalCachedResult != null) {
|
if (globalCachedResult != null) {
|
||||||
return globalCachedResult;
|
return globalCachedResult;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue