@@ -12,12 +12,14 @@ export interface SFCParseResult {
1212}
1313
1414export const cache = new Map < string , SFCDescriptor > ( )
15+ export const hmrCache = new Map < string , SFCDescriptor > ( )
1516const prevCache = new Map < string , SFCDescriptor | undefined > ( )
1617
1718export function createDescriptor (
1819 filename : string ,
1920 source : string ,
2021 { root, isProduction, sourceMap, compiler } : ResolvedOptions ,
22+ hmr = false ,
2123) : SFCParseResult {
2224 const { descriptor, errors } = compiler . parse ( source , {
2325 filename,
@@ -28,37 +30,41 @@ export function createDescriptor(
2830 // project (relative to root) and on different systems.
2931 const normalizedPath = slash ( path . normalize ( path . relative ( root , filename ) ) )
3032 descriptor . id = getHash ( normalizedPath + ( isProduction ? source : '' ) )
31-
32- cache . set ( filename , descriptor )
33+ ; ( hmr ? hmrCache : cache ) . set ( filename , descriptor )
3334 return { descriptor, errors }
3435}
3536
3637export function getPrevDescriptor ( filename : string ) : SFCDescriptor | undefined {
3738 return prevCache . get ( filename )
3839}
3940
40- export function setPrevDescriptor (
41- filename : string ,
42- entry : SFCDescriptor ,
43- ) : void {
44- prevCache . set ( filename , entry )
41+ export function invalidateDescriptor ( filename : string , hmr = false ) : void {
42+ const _cache = hmr ? hmrCache : cache
43+ const prev = _cache . get ( filename )
44+ _cache . delete ( filename )
45+ if ( prev ) {
46+ prevCache . set ( filename , prev )
47+ }
4548}
4649
4750export function getDescriptor (
4851 filename : string ,
4952 options : ResolvedOptions ,
5053 createIfNotFound = true ,
54+ hmr = false ,
5155) : SFCDescriptor | undefined {
52- if ( cache . has ( filename ) ) {
53- return cache . get ( filename ) !
56+ const _cache = hmr ? hmrCache : cache
57+ if ( _cache . has ( filename ) ) {
58+ return _cache . get ( filename ) !
5459 }
5560 if ( createIfNotFound ) {
5661 const { descriptor, errors } = createDescriptor (
5762 filename ,
5863 fs . readFileSync ( filename , 'utf-8' ) ,
5964 options ,
65+ hmr ,
6066 )
61- if ( errors . length ) {
67+ if ( errors . length && ! hmr ) {
6268 throw errors [ 0 ]
6369 }
6470 return descriptor
0 commit comments