stylelint
Version:
A mighty CSS linter that helps you avoid errors and enforce conventions.
41 lines (33 loc) • 975 B
JavaScript
import MemoryCache from './MemoryCache.mjs';
import dynamicImport from './dynamicImport.mjs';
/** @type {MemoryCache<Promise<any>>} */
const moduleCache = new MemoryCache();
/**
* Cached dynamic import - stores the Promise to avoid repeated resolution.
*
* While Node.js caches ES modules, we can avoid repeated async overhead by
* caching the Promise itself.
*
* @param {string} modulePath
* @returns {Promise<any>}
*/
export default function cachedImport(modulePath) {
const cached = moduleCache.get(modulePath);
if (cached) {
return cached;
}
const importPromise = dynamicImport(modulePath).catch((error) => {
// Remove failed imports from cache so they can be retried.
moduleCache.delete(modulePath);
throw error;
});
moduleCache.set(modulePath, importPromise);
return importPromise;
}
/**
* Clear the module cache. Useful for testing or when modules need to be
* reloaded.
*/
export function clearModuleCache() {
moduleCache.clear();
}