Skip to content

Commit fb484f4

Browse files
authored
fix(vapor): handle vapor mode with empty script (#12910)
1 parent b7977d4 commit fb484f4

File tree

4 files changed

+40
-14
lines changed

4 files changed

+40
-14
lines changed

packages-private/sfc-playground/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"vite": "catalog:"
1414
},
1515
"dependencies": {
16-
"@vue/repl": "^4.5.0",
16+
"@vue/repl": "^4.5.1",
1717
"file-saver": "^2.0.5",
1818
"jszip": "^3.10.1",
1919
"vue": "workspace:*"

packages/compiler-sfc/__tests__/parse.spec.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,17 @@ h1 { color: red }
381381
})
382382
})
383383

384+
describe('vapor mode', () => {
385+
test('on empty script', () => {
386+
const { descriptor } = parse(`<script vapor></script>`)
387+
expect(descriptor.vapor).toBe(true)
388+
})
389+
test('on template', () => {
390+
const { descriptor } = parse(`<template vapor><div/></template>`)
391+
expect(descriptor.vapor).toBe(true)
392+
})
393+
})
394+
384395
describe('warnings', () => {
385396
function assertWarning(errors: Error[], msg: string) {
386397
expect(errors.some(e => e.message.match(msg))).toBe(true)

packages/compiler-sfc/src/parse.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,9 @@ export function parse(
162162
ignoreEmpty &&
163163
node.tag !== 'template' &&
164164
isEmpty(node) &&
165-
!hasSrc(node)
165+
!hasAttr(node, 'src')
166166
) {
167+
descriptor.vapor ||= hasAttr(node, 'vapor')
167168
return
168169
}
169170
switch (node.tag) {
@@ -409,13 +410,8 @@ function padContent(
409410
}
410411
}
411412

412-
function hasSrc(node: ElementNode) {
413-
return node.props.some(p => {
414-
if (p.type !== NodeTypes.ATTRIBUTE) {
415-
return false
416-
}
417-
return p.name === 'src'
418-
})
413+
function hasAttr(node: ElementNode, name: string) {
414+
return node.props.some(p => p.type === NodeTypes.ATTRIBUTE && p.name === name)
419415
}
420416

421417
/**

pnpm-lock.yaml

Lines changed: 24 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)