@@ -4,7 +4,15 @@ import resolveModule from '../utils/resolve-module';
44
55const moduleCache = new Map ( ) ;
66
7+ /**
8+ * Deletes the cache of all modules that use module and module itself
9+ */
710export function deleteCache ( module ) {
11+ moduleCache . forEach ( ( value ) => {
12+ if ( value . requires . includes ( module . id ) ) {
13+ deleteCache ( value . module ) ;
14+ }
15+ } ) ;
816 moduleCache . delete ( module . id ) ;
917}
1018
@@ -28,6 +36,7 @@ function evaluate(code, require) {
2836
2937export default function evaluateJS ( mainModule , modules , directories , manifest , depth ) {
3038 try {
39+ const requires = [ ] ;
3140 require = function require ( path ) { // eslint-disable-line no-unused-vars
3241 const dependencyManifest = manifest [ path ] || manifest [ `${ path } .js` ] ;
3342 if ( dependencyManifest ) return window . dependencies ( dependencyManifest . id ) ;
@@ -36,9 +45,11 @@ export default function evaluateJS(mainModule, modules, directories, manifest, d
3645 if ( mainModule === module ) throw new Error ( `${ mainModule . title } is importing itself` ) ;
3746 if ( ! module ) throw new Error ( `Cannot find module in path: ${ path } ` ) ;
3847
48+ requires . push ( module . id ) ;
3949 // Check if this module has been evaluated before, if so return that
40- return moduleCache . get ( module . id ) ||
41- evalModule ( module , modules , directories , manifest , depth + 1 ) ;
50+ const cache = moduleCache . get ( module . id ) ;
51+
52+ return cache ? cache . exports : evalModule ( module , modules , directories , manifest , depth + 1 ) ;
4253 } ;
4354
4455 const compiledCode = compileCode ( mainModule . code , mainModule . title ) ;
@@ -47,7 +58,7 @@ export default function evaluateJS(mainModule, modules, directories, manifest, d
4758 const exports = evaluate ( compiledCode , require ) ;
4859
4960 // Always set a (if no error) new cache for this module, because we know this changed
50- moduleCache . set ( mainModule . id , exports ) ;
61+ moduleCache . set ( mainModule . id , { exports, module : mainModule , requires } ) ;
5162 return exports ;
5263 } catch ( e ) {
5364 // Remove cache
0 commit comments