Skip to content

Commit 0c28448

Browse files
committed
fix: revert "fix(plugin-vue): distinguish HMR and transform descriptor (#227)"
This reverts commit aa2b59d. Fixes vuejs/vitepress#2801
1 parent ca5c634 commit 0c28448

File tree

3 files changed

+15
-25
lines changed

3 files changed

+15
-25
lines changed

packages/plugin-vue/src/handleHotUpdate.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { isCSSRequest } from 'vite'
66
import {
77
createDescriptor,
88
getDescriptor,
9-
invalidateDescriptor,
9+
setPrevDescriptor,
1010
} from './utils/descriptorCache'
1111
import {
1212
getResolvedScript,
@@ -26,14 +26,16 @@ export async function handleHotUpdate(
2626
{ file, modules, read }: HmrContext,
2727
options: ResolvedOptions,
2828
): Promise<ModuleNode[] | void> {
29-
const prevDescriptor = getDescriptor(file, options, false, true)
29+
const prevDescriptor = getDescriptor(file, options, false)
3030
if (!prevDescriptor) {
3131
// file hasn't been requested yet (e.g. async component)
3232
return
3333
}
3434

35+
setPrevDescriptor(file, prevDescriptor)
36+
3537
const content = await read()
36-
const { descriptor } = createDescriptor(file, content, options, true)
38+
const { descriptor } = createDescriptor(file, content, options)
3739

3840
let needRerender = false
3941
const affectedModules = new Set<ModuleNode | undefined>()
@@ -148,9 +150,6 @@ export async function handleHotUpdate(
148150
updateType.push(`style`)
149151
}
150152
if (updateType.length) {
151-
// invalidate the descriptor cache so that the next transform will
152-
// re-analyze the file and pick up the changes.
153-
invalidateDescriptor(file)
154153
debug(`[vue:update(${updateType.join('&')})] ${file}`)
155154
}
156155
return [...affectedModules].filter(Boolean) as ModuleNode[]

packages/plugin-vue/src/main.ts

+1-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { addMapping, fromMap, toEncodedMap } from '@jridgewell/gen-mapping'
99
import { normalizePath, transformWithEsbuild } from 'vite'
1010
import {
1111
createDescriptor,
12-
getDescriptor,
1312
getPrevDescriptor,
1413
setSrcDescriptor,
1514
} from './utils/descriptorCache'
@@ -36,12 +35,10 @@ export async function transformMain(
3635
) {
3736
const { devServer, isProduction, devToolsEnabled } = options
3837

38+
// prev descriptor is only set and used for hmr
3939
const prevDescriptor = getPrevDescriptor(filename)
4040
const { descriptor, errors } = createDescriptor(filename, code, options)
4141

42-
// set descriptor for HMR if it's not set yet
43-
getDescriptor(filename, options, true, true)
44-
4542
if (errors.length) {
4643
errors.forEach((error) =>
4744
pluginContext.error(createRollupError(filename, error)),

packages/plugin-vue/src/utils/descriptorCache.ts

+9-15
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,12 @@ export interface SFCParseResult {
1212
}
1313

1414
export const cache = new Map<string, SFCDescriptor>()
15-
export const hmrCache = new Map<string, SFCDescriptor>()
1615
const prevCache = new Map<string, SFCDescriptor | undefined>()
1716

1817
export function createDescriptor(
1918
filename: string,
2019
source: string,
2120
{ root, isProduction, sourceMap, compiler }: ResolvedOptions,
22-
hmr = false,
2321
): SFCParseResult {
2422
const { descriptor, errors } = compiler.parse(source, {
2523
filename,
@@ -30,39 +28,35 @@ export function createDescriptor(
3028
// project (relative to root) and on different systems.
3129
const normalizedPath = slash(path.normalize(path.relative(root, filename)))
3230
descriptor.id = getHash(normalizedPath + (isProduction ? source : ''))
33-
;(hmr ? hmrCache : cache).set(filename, descriptor)
31+
32+
cache.set(filename, descriptor)
3433
return { descriptor, errors }
3534
}
3635

3736
export function getPrevDescriptor(filename: string): SFCDescriptor | undefined {
3837
return prevCache.get(filename)
3938
}
4039

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-
}
40+
export function setPrevDescriptor(
41+
filename: string,
42+
entry: SFCDescriptor,
43+
): void {
44+
prevCache.set(filename, entry)
4845
}
4946

5047
export function getDescriptor(
5148
filename: string,
5249
options: ResolvedOptions,
5350
createIfNotFound = true,
54-
hmr = false,
5551
): SFCDescriptor | undefined {
56-
const _cache = hmr ? hmrCache : cache
57-
if (_cache.has(filename)) {
58-
return _cache.get(filename)!
52+
if (cache.has(filename)) {
53+
return cache.get(filename)!
5954
}
6055
if (createIfNotFound) {
6156
const { descriptor, errors } = createDescriptor(
6257
filename,
6358
fs.readFileSync(filename, 'utf-8'),
6459
options,
65-
hmr,
6660
)
6761
if (errors.length) {
6862
throw errors[0]

0 commit comments

Comments
 (0)