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

Lines changed: 5 additions & 6 deletions
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

Lines changed: 1 addition & 4 deletions
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

Lines changed: 9 additions & 15 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy