Skip to content

Commit 15c3005

Browse files
fix(language-core): ensure <script> content generates before <script setup> (#5795)
1 parent 54a19d4 commit 15c3005

File tree

3 files changed

+26
-14
lines changed

3 files changed

+26
-14
lines changed

packages/language-core/lib/codegen/script/index.ts

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,17 @@ function* generateWorker(
5656

5757
// <script> + <script setup>
5858
if (script && scriptRanges && scriptSetup && scriptSetupRanges) {
59-
// <script> head
59+
// <script>
6060
const { exportDefault, componentOptions } = scriptRanges;
6161
if (exportDefault) {
62-
yield* generateSfcBlockSection(script, 0, exportDefault.start, codeFeatures.all, true);
62+
const { expression: options } = componentOptions ?? exportDefault;
63+
yield* generateSfcBlockSection(script, 0, options.start, codeFeatures.all);
64+
yield exportExpression;
65+
yield* generateSfcBlockSection(script, options.end, script.content.length, codeFeatures.all, true);
6366
}
6467
else {
6568
yield* generateSfcBlockSection(script, 0, script.content.length, codeFeatures.all, true);
69+
yield `export default ${exportExpression}${endOfLine}`;
6670
}
6771

6872
// <script setup>
@@ -95,17 +99,6 @@ function* generateWorker(
9599
);
96100
yield `})()${endOfLine}`;
97101
}
98-
99-
// <script> tail
100-
if (exportDefault) {
101-
const { expression } = componentOptions ?? exportDefault;
102-
yield* generateSfcBlockSection(script, exportDefault.start, expression.start, codeFeatures.all);
103-
yield exportExpression;
104-
yield* generateSfcBlockSection(script, expression.end, script.content.length, codeFeatures.all);
105-
}
106-
else {
107-
yield `export default ${exportExpression}${endOfLine}`;
108-
}
109102
}
110103
// only <script setup>
111104
else if (scriptSetup && scriptSetupRanges) {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<script setup lang="ts">
2+
import { ref } from 'vue';
3+
4+
defineProps<{ msg: string }>();
5+
6+
const count = ref(eee);
7+
</script>
8+
9+
<script lang="ts">
10+
export default {
11+
name: '1212'
12+
}
13+
export const eee = 1
14+
</script>
15+
16+
<template>
17+
<div class="flex items-center justify-center w-screen h-screen">
18+
{{ count }}
19+
</div>
20+
</template>

test-workspace/tsc/passedFixtures/vue3/script-setup-scope/export-order.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,5 @@ export const useTwo = async () => ({ two: 'two' })
1010

1111
<script lang="ts" setup>
1212
useOne()
13-
// @ts-expect-error
1413
useTwo()
1514
</script>

0 commit comments

Comments
 (0)