mirror of https://github.com/status-im/metro.git
Add per-field cache invalidation
Summary: Jest needs this for efficient caching of resolution responses. public Reviewed By: voideanvalue Differential Revision: D2873291 fb-gh-sync-id: fee27d2ffdfe64bd68fdb4d9e4259e721b33631f
This commit is contained in:
parent
6891e98578
commit
f51d9718da
|
@ -303,4 +303,33 @@ describe('Cache', () => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('invalidate', () => {
|
||||
it('invalidates the cache per file or per-field', () => {
|
||||
fs.stat.mockImpl((file, callback) =>
|
||||
callback(null, {
|
||||
mtime: {
|
||||
getTime: () => {},
|
||||
},
|
||||
})
|
||||
);
|
||||
|
||||
var cache = new Cache({
|
||||
cacheKey: 'cache',
|
||||
});
|
||||
var loaderCb = jest.genMockFn().mockImpl(() =>
|
||||
Promise.resolve('banana')
|
||||
);
|
||||
var file = '/rootDir/someFile';
|
||||
|
||||
return cache.get(file, 'field', loaderCb).then(() => {
|
||||
expect(cache.has(file)).toBe(true);
|
||||
cache.invalidate(file, 'field');
|
||||
expect(cache.has(file)).toBe(true);
|
||||
expect(cache.has(file, 'field')).toBe(false);
|
||||
cache.invalidate(file);
|
||||
expect(cache.has(file)).toBe(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -58,9 +58,13 @@ class Cache {
|
|||
return recordP.then(record => record);
|
||||
}
|
||||
|
||||
invalidate(filepath) {
|
||||
if (this.has(filepath)) {
|
||||
delete this._data[filepath];
|
||||
invalidate(filepath, field) {
|
||||
if (this.has(filepath, field)) {
|
||||
if (field == null) {
|
||||
delete this._data[filepath];
|
||||
} else {
|
||||
delete this._data[filepath].data[field];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -70,7 +74,7 @@ class Cache {
|
|||
|
||||
has(filepath, field) {
|
||||
return Object.prototype.hasOwnProperty.call(this._data, filepath) &&
|
||||
(!field || Object.prototype.hasOwnProperty.call(this._data[filepath].data, field));
|
||||
(field == null || Object.prototype.hasOwnProperty.call(this._data[filepath].data, field));
|
||||
}
|
||||
|
||||
_set(filepath, field, loaderPromise) {
|
||||
|
|
|
@ -59,7 +59,7 @@ class DependencyGraph {
|
|||
mocksPattern,
|
||||
extractRequires,
|
||||
shouldThrowOnUnresolvedErrors,
|
||||
transformCode
|
||||
transformCode,
|
||||
};
|
||||
this._cache = cache;
|
||||
this._helpers = new DependencyGraphHelpers(this._opts);
|
||||
|
|
Loading…
Reference in New Issue