fix(compiler-sfc): use safer deindent default for compatibility with previous behavior

This commit is contained in:
Evan You 2022-07-08 09:45:11 +08:00
parent ca7daefaa1
commit b70a2585fc
2 changed files with 13 additions and 11 deletions

View File

@ -10,7 +10,6 @@ export const DEFAULT_FILENAME = 'anonymous.vue'
const splitRE = /\r?\n/g
const replaceRE = /./g
const isSpecialTag = makeMap('script,style,template', true)
const isNeedIndentLang = makeMap('pug,jade')
export interface SFCCustomBlock {
type: string
@ -179,9 +178,13 @@ export function parseComponent(
currentBlock.end = start
let text = source.slice(currentBlock.start, currentBlock.end)
if (
options.deindent ||
// certain langs like pug are indent sensitive, preserve old behavior
(currentBlock.lang && isNeedIndentLang(currentBlock.lang))
options.deindent === true ||
// by default, deindent unless it's script with default lang or ts
(options.deindent !== false &&
!(
currentBlock.type === 'script' &&
(!currentBlock.lang || currentBlock.lang === 'ts')
))
) {
text = deindent(text)
}

View File

@ -25,8 +25,7 @@ describe('Single File Component parser', () => {
<div>
<style>nested should be ignored</style>
</div>
`,
{ deindent: true }
`
)
expect(res.template!.content.trim()).toBe('<div>hi</div>')
expect(res.styles.length).toBe(4)
@ -76,8 +75,7 @@ describe('Single File Component parser', () => {
</style>
`
const deindentDefault = parseComponent(content.trim(), {
pad: false,
deindent: true
pad: false
})
const deindentEnabled = parseComponent(content.trim(), {
pad: false,
@ -89,7 +87,9 @@ describe('Single File Component parser', () => {
})
expect(deindentDefault.template!.content).toBe('\n<div></div>\n')
expect(deindentDefault.script!.content).toBe('\nexport default {}\n')
expect(deindentDefault.script!.content).toBe(
'\n export default {}\n '
)
expect(deindentDefault.styles[0].content).toBe('\nh1 { color: red }\n')
expect(deindentEnabled.template!.content).toBe('\n<div></div>\n')
expect(deindentEnabled.script!.content).toBe('\nexport default {}\n')
@ -203,8 +203,7 @@ describe('Single File Component parser', () => {
}
</test>
<custom src="./x.json"></custom>
`,
{ deindent: true }
`
)
expect(res.customBlocks.length).toBe(4)