Skip to content

Commit fe687a6

Browse files
committed
fix(language-core): fault-tolerant complex export expression
1 parent b071638 commit fe687a6

File tree

4 files changed

+12
-5
lines changed

4 files changed

+12
-5
lines changed

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,14 +132,14 @@ function* generateWorker(
132132
}
133133
// only <script>
134134
else if (script && scriptRanges) {
135-
const { exportDefault, componentOptions } = scriptRanges;
135+
const { exportDefault } = scriptRanges;
136136
if (exportDefault) {
137-
const { expression } = componentOptions ?? exportDefault;
137+
const { expression, isObjectLiteral } = exportDefault;
138138

139139
let wrapLeft: string | undefined;
140140
let wrapRight: string | undefined;
141141
if (
142-
script.content[expression.start] === '{'
142+
isObjectLiteral
143143
&& vueCompilerOptions.optionsWrapper.length
144144
) {
145145
[wrapLeft, wrapRight] = vueCompilerOptions.optionsWrapper;
@@ -161,8 +161,7 @@ function* generateWorker(
161161
}
162162

163163
yield* generateSfcBlockSection(script, 0, expression.start, codeFeatures.all);
164-
yield exportExpression;
165-
yield endOfLine;
164+
yield `${exportExpression}${endOfLine}`;
166165
yield* generateTemplate(options, ctx, names._export);
167166
yield* generateExportDeclareEqual(script);
168167
if (wrapLeft && wrapRight) {

packages/language-core/lib/parsers/scriptRanges.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export function parseScriptRanges(
1313
let exportDefault:
1414
| TextRange & {
1515
expression: TextRange;
16+
isObjectLiteral: boolean;
1617
}
1718
| undefined;
1819
let componentOptions:
@@ -35,6 +36,7 @@ export function parseScriptRanges(
3536
exportDefault = {
3637
..._getStartEnd(raw),
3738
expression: _getStartEnd(raw.expression),
39+
isObjectLiteral: ts.isObjectLiteralExpression(raw.expression),
3840
};
3941
const comment = getClosestMultiLineCommentRange(ts, raw, [], ast);
4042
if (comment) {
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<script lang="ts">
2+
export default ({}) as any as 1;
3+
</script>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<script lang="ts">
2+
export default {} as any as 1;
3+
</script>

0 commit comments

Comments
 (0)