Skip to content

Commit 5924512

Browse files
Merge branch 'main' into chore-perf
2 parents ba5a705 + 37a14a5 commit 5924512

40 files changed

+667
-373
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
"prettier": "^2.7.1",
8888
"pug": "^3.0.1",
8989
"puppeteer": "~19.6.0",
90-
"rollup": "^3.20.2",
90+
"rollup": "^3.26.0",
9191
"rollup-plugin-dts": "^5.3.0",
9292
"rollup-plugin-esbuild": "^5.0.0",
9393
"rollup-plugin-polyfill-node": "^0.12.0",
@@ -97,7 +97,7 @@
9797
"terser": "^5.15.1",
9898
"todomvc-app-css": "^2.3.0",
9999
"tslib": "^2.5.0",
100-
"typescript": "^5.0.0",
100+
"typescript": "^5.1.6",
101101
"vite": "^4.3.0",
102102
"vitest": "^0.30.1"
103103
}

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

Lines changed: 48 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,24 @@ return { fn }
6262
})"
6363
`;
6464
65+
exports[`SFC compile <script setup> > <script> and <script setup> co-usage > keep original semi style 1`] = `
66+
"export default {
67+
props: ['item'],
68+
emits: ['change'],
69+
setup(__props, { expose: __expose, emit: __emit }) {
70+
__expose();
71+
72+
console.log('test')
73+
const props = __props;
74+
const emit = __emit;
75+
(function () {})()
76+
77+
return { props, emit }
78+
}
79+
80+
}"
81+
`;
82+
6583
exports[`SFC compile <script setup> > <script> and <script setup> co-usage > script first 1`] = `
6684
"import { x } from './x'
6785
@@ -612,75 +630,6 @@ return { foo, bar, baz, y, z }
612630
}"
613631
`;
614632
615-
exports[`SFC compile <script setup> > defineProps/defineEmits in multi-variable declaration (full removal) 1`] = `
616-
"export default {
617-
props: ['item'],
618-
emits: ['a'],
619-
setup(__props, { expose: __expose, emit }) {
620-
__expose();
621-
622-
const props = __props;
623-
624-
625-
626-
return { props, emit }
627-
}
628-
629-
}"
630-
`;
631-
632-
exports[`SFC compile <script setup> > defineProps/defineEmits in multi-variable declaration 1`] = `
633-
"export default {
634-
props: ['item'],
635-
emits: ['a'],
636-
setup(__props, { expose: __expose, emit }) {
637-
__expose();
638-
639-
const props = __props;
640-
641-
const a = 1;
642-
643-
return { props, a, emit }
644-
}
645-
646-
}"
647-
`;
648-
649-
exports[`SFC compile <script setup> > defineProps/defineEmits in multi-variable declaration fix #6757 1`] = `
650-
"export default {
651-
props: ['item'],
652-
emits: ['a'],
653-
setup(__props, { expose: __expose, emit }) {
654-
__expose();
655-
656-
const props = __props;
657-
658-
const a = 1;
659-
660-
return { a, props, emit }
661-
}
662-
663-
}"
664-
`;
665-
666-
exports[`SFC compile <script setup> > defineProps/defineEmits in multi-variable declaration fix #7422 1`] = `
667-
"export default {
668-
props: ['item'],
669-
emits: ['foo'],
670-
setup(__props, { expose: __expose, emit: emits }) {
671-
__expose();
672-
673-
const props = __props;
674-
675-
const a = 0,
676-
b = 0;
677-
678-
return { props, emits, a, b }
679-
}
680-
681-
}"
682-
`;
683-
684633
exports[`SFC compile <script setup> > dev mode import usage check > TS annotations 1`] = `
685634
"import { defineComponent as _defineComponent } from 'vue'
686635
import { Foo, Bar, Baz, Qux, Fred } from './x'
@@ -745,6 +694,21 @@ return { get vMyDir() { return vMyDir } }
745694
})"
746695
`;
747696
697+
exports[`SFC compile <script setup> > dev mode import usage check > dynamic arguments 1`] = `
698+
"import { defineComponent as _defineComponent } from 'vue'
699+
import { FooBar, foo, bar, unused } from './x'
700+
701+
export default /*#__PURE__*/_defineComponent({
702+
setup(__props, { expose: __expose }) {
703+
__expose();
704+
705+
706+
return { get FooBar() { return FooBar }, get foo() { return foo }, get bar() { return bar } }
707+
}
708+
709+
})"
710+
`;
711+
748712
exports[`SFC compile <script setup> > dev mode import usage check > js template string interpolations 1`] = `
749713
"import { defineComponent as _defineComponent } from 'vue'
750714
import { VAR, VAR2, VAR3 } from './x'
@@ -775,6 +739,21 @@ return { get FooBaz() { return FooBaz }, get Last() { return Last } }
775739
})"
776740
`;
777741
742+
exports[`SFC compile <script setup> > dev mode import usage check > template ref 1`] = `
743+
"import { defineComponent as _defineComponent } from 'vue'
744+
import { foo, bar, Baz } from './foo'
745+
746+
export default /*#__PURE__*/_defineComponent({
747+
setup(__props, { expose: __expose }) {
748+
__expose();
749+
750+
751+
return { get foo() { return foo }, get bar() { return bar }, get Baz() { return Baz } }
752+
}
753+
754+
})"
755+
`;
756+
778757
exports[`SFC compile <script setup> > dev mode import usage check > vue interpolations 1`] = `
779758
"import { defineComponent as _defineComponent } from 'vue'
780759
import { x, y, z, x$y } from './x'

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

Lines changed: 54 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -68,64 +68,6 @@ describe('SFC compile <script setup>', () => {
6868
assertCode(content)
6969
})
7070

71-
test('defineProps/defineEmits in multi-variable declaration', () => {
72-
const { content } = compile(`
73-
<script setup>
74-
const props = defineProps(['item']),
75-
a = 1,
76-
emit = defineEmits(['a']);
77-
</script>
78-
`)
79-
assertCode(content)
80-
expect(content).toMatch(`const a = 1;`) // test correct removal
81-
expect(content).toMatch(`props: ['item'],`)
82-
expect(content).toMatch(`emits: ['a'],`)
83-
})
84-
85-
// #6757
86-
test('defineProps/defineEmits in multi-variable declaration fix #6757 ', () => {
87-
const { content } = compile(`
88-
<script setup>
89-
const a = 1,
90-
props = defineProps(['item']),
91-
emit = defineEmits(['a']);
92-
</script>
93-
`)
94-
assertCode(content)
95-
expect(content).toMatch(`const a = 1;`) // test correct removal
96-
expect(content).toMatch(`props: ['item'],`)
97-
expect(content).toMatch(`emits: ['a'],`)
98-
})
99-
100-
// #7422
101-
test('defineProps/defineEmits in multi-variable declaration fix #7422', () => {
102-
const { content } = compile(`
103-
<script setup>
104-
const props = defineProps(['item']),
105-
emits = defineEmits(['foo']),
106-
a = 0,
107-
b = 0;
108-
</script>
109-
`)
110-
assertCode(content)
111-
expect(content).toMatch(`props: ['item'],`)
112-
expect(content).toMatch(`emits: ['foo'],`)
113-
expect(content).toMatch(`const a = 0,`)
114-
expect(content).toMatch(`b = 0;`)
115-
})
116-
117-
test('defineProps/defineEmits in multi-variable declaration (full removal)', () => {
118-
const { content } = compile(`
119-
<script setup>
120-
const props = defineProps(['item']),
121-
emit = defineEmits(['a']);
122-
</script>
123-
`)
124-
assertCode(content)
125-
expect(content).toMatch(`props: ['item'],`)
126-
expect(content).toMatch(`emits: ['a'],`)
127-
})
128-
12971
describe('<script> and <script setup> co-usage', () => {
13072
test('script first', () => {
13173
const { content } = compile(`
@@ -156,6 +98,24 @@ describe('SFC compile <script setup>', () => {
15698
assertCode(content)
15799
})
158100

101+
// #7805
102+
test('keep original semi style', () => {
103+
const { content } = compile(`
104+
<script setup>
105+
console.log('test')
106+
const props = defineProps(['item']);
107+
const emit = defineEmits(['change']);
108+
(function () {})()
109+
</script>
110+
`)
111+
assertCode(content)
112+
113+
expect(content).toMatch(`console.log('test')`)
114+
expect(content).toMatch(`const props = __props;`)
115+
expect(content).toMatch(`const emit = __emit;`)
116+
expect(content).toMatch(`(function () {})()`)
117+
})
118+
159119
test('script setup first, named default export', () => {
160120
const { content } = compile(`
161121
<script setup>
@@ -413,6 +373,25 @@ describe('SFC compile <script setup>', () => {
413373
assertCode(content)
414374
})
415375

376+
test('dynamic arguments', () => {
377+
const { content } = compile(`
378+
<script setup lang="ts">
379+
import { FooBar, foo, bar, unused } from './x'
380+
</script>
381+
<template>
382+
<FooBar #[foo.slotName] />
383+
<FooBar #unused />
384+
<div :[bar.attrName]="15"></div>
385+
<div unused="unused"></div>
386+
</template>
387+
`)
388+
expect(content).toMatch(
389+
`return { get FooBar() { return FooBar }, get foo() { return foo }, ` +
390+
`get bar() { return bar } }`
391+
)
392+
assertCode(content)
393+
})
394+
416395
// https://github.com/vuejs/core/issues/4599
417396
test('attribute expressions', () => {
418397
const { content } = compile(`
@@ -513,6 +492,23 @@ describe('SFC compile <script setup>', () => {
513492
</template>
514493
`)
515494
})
495+
496+
test('template ref', () => {
497+
const { content } = compile(`
498+
<script setup lang="ts">
499+
import { foo, bar, Baz } from './foo'
500+
</script>
501+
<template>
502+
<div ref="foo"></div>
503+
<div ref=""></div>
504+
<Baz ref="bar" />
505+
</template>
506+
`)
507+
expect(content).toMatch(
508+
'return { get foo() { return foo }, get bar() { return bar }, get Baz() { return Baz } }'
509+
)
510+
assertCode(content)
511+
})
516512
})
517513

518514
describe('inlineTemplate mode', () => {

0 commit comments

Comments
 (0)