Skip to content

Commit bb47510

Browse files
committed
wip: fix tests
1 parent b4f7ab4 commit bb47510

File tree

3 files changed

+62
-51
lines changed

3 files changed

+62
-51
lines changed

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

+36-35
Original file line numberDiff line numberDiff line change
@@ -290,23 +290,24 @@ describe('SFC compile <script setup>', () => {
290290

291291
describe('errors', () => {
292292
test('<script> and <script setup> must have same lang', () => {
293-
expect(() =>
294-
compile(`<script>foo()</script><script setup lang="ts">bar()</script>`)
295-
).toThrow(`<script> and <script setup> must have the same language type`)
293+
expect(
294+
parse(`<script>foo()</script><script setup lang="ts">bar()</script>`)
295+
.errors[0].message
296+
).toMatch(`<script> and <script setup> must have the same language type`)
296297
})
297298

298299
test('export local as default', () => {
299-
expect(() =>
300-
compile(`<script setup>
300+
expect(
301+
parse(`<script setup>
301302
const bar = 1
302303
export { bar as default }
303-
</script>`)
304-
).toThrow(`Cannot export locally defined variable as default`)
304+
</script>`).errors[0].message
305+
).toMatch(`Cannot export locally defined variable as default`)
305306
})
306307

307308
test('export default referencing local var', () => {
308-
expect(() =>
309-
compile(`<script setup>
309+
expect(
310+
parse(`<script setup>
310311
const bar = 1
311312
export default {
312313
props: {
@@ -315,19 +316,19 @@ describe('SFC compile <script setup>', () => {
315316
}
316317
}
317318
}
318-
</script>`)
319-
).toThrow(`cannot reference locally declared variables`)
319+
</script>`).errors[0].message
320+
).toMatch(`cannot reference locally declared variables`)
320321
})
321322

322323
test('export default referencing exports', () => {
323-
expect(() =>
324-
compile(`<script setup>
324+
expect(
325+
parse(`<script setup>
325326
export const bar = 1
326327
export default {
327328
props: bar
328329
}
329-
</script>`)
330-
).toThrow(`cannot reference locally declared variables`)
330+
</script>`).errors[0].message
331+
).toMatch(`cannot reference locally declared variables`)
331332
})
332333

333334
test('should allow export default referencing scope var', () => {
@@ -377,62 +378,62 @@ describe('SFC compile <script setup>', () => {
377378
})
378379

379380
test('error on duplicated defalut export', () => {
380-
expect(() =>
381-
compile(`
381+
expect(
382+
parse(`
382383
<script>
383384
export default {}
384385
</script>
385386
<script setup>
386387
export default {}
387388
</script>
388-
`)
389-
).toThrow(`Default export is already declared`)
389+
`).errors[0].message
390+
).toMatch(`Default export is already declared`)
390391

391-
expect(() =>
392-
compile(`
392+
expect(
393+
parse(`
393394
<script>
394395
export default {}
395396
</script>
396397
<script setup>
397398
const x = {}
398399
export { x as default }
399400
</script>
400-
`)
401-
).toThrow(`Default export is already declared`)
401+
`).errors[0].message
402+
).toMatch(`Default export is already declared`)
402403

403-
expect(() =>
404-
compile(`
404+
expect(
405+
parse(`
405406
<script>
406407
export default {}
407408
</script>
408409
<script setup>
409410
export { x as default } from './y'
410411
</script>
411-
`)
412-
).toThrow(`Default export is already declared`)
412+
`).errors[0].message
413+
).toMatch(`Default export is already declared`)
413414

414-
expect(() =>
415-
compile(`
415+
expect(
416+
parse(`
416417
<script>
417418
export { x as default } from './y'
418419
</script>
419420
<script setup>
420421
export default {}
421422
</script>
422-
`)
423-
).toThrow(`Default export is already declared`)
423+
`).errors[0].message
424+
).toMatch(`Default export is already declared`)
424425

425-
expect(() =>
426-
compile(`
426+
expect(
427+
parse(`
427428
<script>
428429
const x = {}
429430
export { x as default }
430431
</script>
431432
<script setup>
432433
export default {}
433434
</script>
434-
`)
435-
).toThrow(`Default export is already declared`)
435+
`).errors[0].message
436+
).toMatch(`Default export is already declared`)
436437
})
437438
})
438439
})

packages/compiler-sfc/src/compileScript.ts

+20-12
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ import { walk } from 'estree-walker'
2020
import { RawSourceMap } from 'source-map'
2121

2222
export interface SFCScriptCompileOptions {
23+
/**
24+
* https://babeljs.io/docs/en/babel-parser#plugins
25+
*/
2326
babelParserPlugins?: ParserPlugin[]
2427
}
2528

@@ -63,6 +66,7 @@ export function compileScript(
6366
)
6467
}
6568

69+
const defaultTempVar = `__default__`
6670
const bindings: BindingMetadata = {}
6771
const imports: Record<string, string> = {}
6872
const setupScopeVars: Record<string, boolean> = {}
@@ -121,7 +125,7 @@ export function compileScript(
121125
s.overwrite(
122126
start,
123127
start + `export default`.length,
124-
`const __default__ =`
128+
`const ${defaultTempVar} =`
125129
)
126130
} else if (node.type === 'ExportNamedDeclaration' && node.specifiers) {
127131
const defaultSpecifier = node.specifiers.find(
@@ -146,14 +150,16 @@ export function compileScript(
146150
// rewrite to `import { x as __default__ } from './x'` and
147151
// add to top
148152
s.prepend(
149-
`import { ${defaultSpecifier.local.name} as __default__ } from '${
150-
node.source.value
151-
}'\n`
153+
`import { ${
154+
defaultSpecifier.local.name
155+
} as ${defaultTempVar} } from '${node.source.value}'\n`
152156
)
153157
} else {
154158
// export { x as default }
155159
// rewrite to `const __default__ = x` and move to end
156-
s.append(`\nconst __default__ = ${defaultSpecifier.local.name}\n`)
160+
s.append(
161+
`\nconst ${defaultTempVar} = ${defaultSpecifier.local.name}\n`
162+
)
157163
}
158164
}
159165
}
@@ -283,7 +289,7 @@ export function compileScript(
283289
s.overwrite(
284290
specifier.exported.start! + startOffset,
285291
specifier.exported.start! + startOffset + 7,
286-
'__default__'
292+
defaultTempVar
287293
)
288294
} else if (specifier.type === 'ExportSpecifier') {
289295
if (specifier.exported.name === 'default') {
@@ -319,15 +325,15 @@ export function compileScript(
319325
)
320326
}
321327
// rewrite to `const __default__ = x` and move to end
322-
s.append(`\nconst __default__ = ${local}\n`)
328+
s.append(`\nconst ${defaultTempVar} = ${local}\n`)
323329
} else {
324330
// export { x as default } from './x'
325331
// rewrite to `import { x as __default__ } from './x'` and
326332
// add to top
327333
s.prepend(
328-
`import { ${specifier.local.name} as __default__ } from '${
329-
node.source.value
330-
}'\n`
334+
`import { ${
335+
specifier.local.name
336+
} as ${defaultTempVar} } from '${node.source.value}'\n`
331337
)
332338
}
333339
} else {
@@ -514,15 +520,17 @@ export function compileScript(
514520
s.prepend(`import { defineComponent as __define__ } from 'vue'\n`)
515521
// we have to use object spread for types to be merged properly
516522
// user's TS setting should compile it down to proper targets
517-
const def = defaultExport ? `\n ...__default__,` : ``
523+
const def = defaultExport ? `\n ...${defaultTempVar},` : ``
518524
const runtimeProps = genRuntimeProps(typeDeclaredProps)
519525
const runtimeEmits = genRuntimeEmits(typeDeclaredEmits)
520526
s.append(
521527
`export default __define__({${def}${runtimeProps}${runtimeEmits}\n setup\n})`
522528
)
523529
} else {
524530
if (defaultExport) {
525-
s.append(`__default__.setup = setup\nexport default __default__`)
531+
s.append(
532+
`${defaultTempVar}.setup = setup\nexport default ${defaultTempVar}`
533+
)
526534
} else {
527535
s.append(`export default { setup }`)
528536
}

packages/compiler-sfc/src/parse.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,18 @@ import * as CompilerDOM from '@vue/compiler-dom'
99
import { RawSourceMap, SourceMapGenerator } from 'source-map'
1010
import { generateCodeFrame } from '@vue/shared'
1111
import { TemplateCompiler } from './compileTemplate'
12-
import { compileScript, BindingMetadata } from './compileScript'
13-
import { ParserPlugin } from '@babel/parser'
12+
import {
13+
compileScript,
14+
BindingMetadata,
15+
SFCScriptCompileOptions
16+
} from './compileScript'
1417

15-
export interface SFCParseOptions {
18+
export interface SFCParseOptions extends SFCScriptCompileOptions {
1619
filename?: string
1720
sourceMap?: boolean
1821
sourceRoot?: string
1922
pad?: boolean | 'line' | 'space'
2023
compiler?: TemplateCompiler
21-
babelParserPlugins?: ParserPlugin[]
2224
}
2325

2426
export interface SFCBlock {

0 commit comments

Comments
 (0)