diff --git a/packages/plugin-vue/src/handleHotUpdate.ts b/packages/plugin-vue/src/handleHotUpdate.ts index e47d3b17..ae07de16 100644 --- a/packages/plugin-vue/src/handleHotUpdate.ts +++ b/packages/plugin-vue/src/handleHotUpdate.ts @@ -144,7 +144,7 @@ export async function handleHotUpdate({ return [...affectedModules].filter(Boolean) as ModuleNode[] } -export function isEqualBlock(a: SFCBlock | null, b: SFCBlock | null) { +export function isEqualBlock(a: SFCBlock | null, b: SFCBlock | null): boolean { if (!a && !b) return true if (!a || !b) return false // src imports will trigger their own updates @@ -161,7 +161,7 @@ export function isEqualBlock(a: SFCBlock | null, b: SFCBlock | null) { export function isOnlyTemplateChanged( prev: SFCDescriptor, next: SFCDescriptor -) { +): boolean { return ( isEqualBlock(prev.script, next.script) && isEqualBlock(prev.scriptSetup, next.scriptSetup) && diff --git a/packages/plugin-vue/src/script.ts b/packages/plugin-vue/src/script.ts index a80341c7..4857ad8c 100644 --- a/packages/plugin-vue/src/script.ts +++ b/packages/plugin-vue/src/script.ts @@ -17,7 +17,7 @@ export function setResolvedScript( descriptor: SFCDescriptor, script: SFCScriptBlock, ssr: boolean -) { +): void { ;(ssr ? ssrCache : clientCache).set(descriptor, script) } @@ -25,7 +25,7 @@ export function resolveScript( descriptor: SFCDescriptor, options: ResolvedOptions, ssr: boolean -) { +): SFCScriptBlock | null { if (!descriptor.script && !descriptor.scriptSetup) { return null } diff --git a/packages/plugin-vue/src/utils/descriptorCache.ts b/packages/plugin-vue/src/utils/descriptorCache.ts index dc1cc7fc..d03643dc 100644 --- a/packages/plugin-vue/src/utils/descriptorCache.ts +++ b/packages/plugin-vue/src/utils/descriptorCache.ts @@ -1,7 +1,13 @@ import path from 'path' import slash from 'slash' import hash from 'hash-sum' -import { parse, SFCDescriptor } from '@vue/compiler-sfc' +import { CompilerError, parse, SFCDescriptor } from '@vue/compiler-sfc' + +// node_modules/@vue/compiler-sfc/dist/compiler-sfc.d.ts SFCParseResult should be exported so it can be re-used +export interface SFCParseResult { + descriptor: SFCDescriptor + errors: Array +} const cache = new Map() const prevCache = new Map() @@ -11,7 +17,7 @@ export function createDescriptor( source: string, root: string, isProduction: boolean | undefined -) { +): SFCParseResult { const { descriptor, errors } = parse(source, { filename, sourceMap: true @@ -26,15 +32,21 @@ export function createDescriptor( return { descriptor, errors } } -export function getPrevDescriptor(filename: string) { +export function getPrevDescriptor(filename: string): SFCDescriptor | undefined { return prevCache.get(filename) } -export function setPrevDescriptor(filename: string, entry: SFCDescriptor) { +export function setPrevDescriptor( + filename: string, + entry: SFCDescriptor +): void { prevCache.set(filename, entry) } -export function getDescriptor(filename: string, errorOnMissing = true) { +export function getDescriptor( + filename: string, + errorOnMissing = true +): SFCDescriptor | undefined { if (cache.has(filename)) { return cache.get(filename)! } @@ -46,6 +58,6 @@ export function getDescriptor(filename: string, errorOnMissing = true) { } } -export function setDescriptor(filename: string, entry: SFCDescriptor) { +export function setDescriptor(filename: string, entry: SFCDescriptor): void { cache.set(filename, entry) } diff --git a/packages/plugin-vue/src/utils/query.ts b/packages/plugin-vue/src/utils/query.ts index c0bafedc..bd1c6394 100644 --- a/packages/plugin-vue/src/utils/query.ts +++ b/packages/plugin-vue/src/utils/query.ts @@ -9,7 +9,9 @@ export interface VueQuery { raw?: boolean } -export function parseVueRequest(id: string) { +export function parseVueRequest( + id: string +): { filename: string; query: VueQuery } { const [filename, rawQuery] = id.split(`?`, 2) const query = qs.parse(rawQuery) as VueQuery if (query.vue != null) {