Skip to content

Commit 740fd20

Browse files
committed
refactor(language-core): transform template code features internally
revert 053aa3c
1 parent dfa4128 commit 740fd20

File tree

3 files changed

+43
-38
lines changed

3 files changed

+43
-38
lines changed

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,11 @@ import { codeFeatures } from '../codeFeatures';
77
import type { TemplateCodegenContext } from '../template/context';
88
import { endOfLine, generateSfcBlockSection, newLine } from '../utils';
99
import { generateComponentSelf } from './componentSelf';
10-
import { type ScriptCodegenContext } from './context';
10+
import { createScriptCodegenContext, type ScriptCodegenContext } from './context';
1111
import { generateScriptSetup, generateScriptSetupImports } from './scriptSetup';
1212
import { generateSrc } from './src';
1313
import { generateTemplate } from './template';
1414

15-
export * from './context';
16-
1715
export interface ScriptCodegenOptions {
1816
ts: typeof ts;
1917
compilerOptions: ts.CompilerOptions;
@@ -28,7 +26,19 @@ export interface ScriptCodegenOptions {
2826
templateRefNames: Set<string>;
2927
}
3028

31-
export function* generateScript(
29+
export { generate as generateScript };
30+
31+
function generate(options: ScriptCodegenOptions) {
32+
const context = createScriptCodegenContext(options);
33+
const codegen = generateScript(options, context);
34+
35+
return {
36+
...context,
37+
codes: [...codegen],
38+
};
39+
}
40+
41+
function* generateScript(
3242
options: ScriptCodegenOptions,
3343
ctx: ScriptCodegenContext,
3444
): Generator<Code> {

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,11 @@ import { getSlotsPropertyName } from '../../utils/shared';
55
import { codeFeatures } from '../codeFeatures';
66
import { endOfLine, newLine } from '../utils';
77
import { wrapWith } from '../utils/wrapWith';
8-
import type { TemplateCodegenContext } from './context';
8+
import { createTemplateCodegenContext, type TemplateCodegenContext } from './context';
99
import { generateObjectProperty } from './objectProperty';
1010
import { generateStyleScopedClassReferences } from './styleScopedClasses';
1111
import { generateTemplateChild, getVForNode } from './templateChild';
1212

13-
export * from './context';
14-
1513
export interface TemplateCodegenOptions {
1614
ts: typeof ts;
1715
compilerOptions: ts.CompilerOptions;
@@ -28,7 +26,27 @@ export interface TemplateCodegenOptions {
2826
selfComponentName?: string;
2927
}
3028

31-
export function* generateTemplate(
29+
export { generate as generateTemplate };
30+
31+
function generate(options: TemplateCodegenOptions) {
32+
const context = createTemplateCodegenContext(options, options.template.ast);
33+
const codegen = generateTemplate(options, context);
34+
35+
const codes: Code[] = [];
36+
for (const code of codegen) {
37+
if (typeof code === 'object') {
38+
code[3] = context.resolveCodeFeatures(code[3]);
39+
}
40+
codes.push(code);
41+
}
42+
43+
return {
44+
...context,
45+
codes,
46+
};
47+
}
48+
49+
function* generateTemplate(
3250
options: TemplateCodegenOptions,
3351
ctx: TemplateCodegenContext,
3452
): Generator<Code> {

packages/language-core/lib/plugins/vue-tsx.ts

Lines changed: 7 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { camelize, capitalize } from '@vue/shared';
22
import { computed } from 'alien-signals';
33
import * as path from 'path-browserify';
4-
import { createScriptCodegenContext, generateScript, type ScriptCodegenOptions } from '../codegen/script';
5-
import { createTemplateCodegenContext, generateTemplate, type TemplateCodegenOptions } from '../codegen/template';
4+
import { generateScript } from '../codegen/script';
5+
import { generateTemplate } from '../codegen/template';
66
import { parseScriptRanges } from '../parsers/scriptRanges';
77
import { parseScriptSetupRanges } from '../parsers/scriptSetupRanges';
88
import { parseVueCompilerOptions } from '../parsers/vueCompilerOptions';
9-
import type { Code, Sfc, VueLanguagePlugin } from '../types';
9+
import type { Sfc, VueLanguagePlugin } from '../types';
1010
import { computedSet } from '../utils/signals';
1111
import { CompilerOptionsResolver } from '../utils/ts';
1212

@@ -178,8 +178,7 @@ function createTsx(
178178
if (getResolvedOptions().skipTemplateCodegen || !sfc.template) {
179179
return;
180180
}
181-
182-
const options: TemplateCodegenOptions = {
181+
return generateTemplate({
183182
ts,
184183
compilerOptions: ctx.compilerOptions,
185184
vueCompilerOptions: getResolvedOptions(),
@@ -193,26 +192,11 @@ function createTsx(
193192
propsAssignName: getSetupPropsAssignName(),
194193
inheritAttrs: getSetupInheritAttrs(),
195194
selfComponentName: getComponentSelfName(),
196-
};
197-
const context = createTemplateCodegenContext(options, sfc.template.ast);
198-
const codegen = generateTemplate(options, context);
199-
200-
const codes: Code[] = [];
201-
for (const code of codegen) {
202-
if (typeof code === 'object') {
203-
code[3] = context.resolveCodeFeatures(code[3]);
204-
}
205-
codes.push(code);
206-
}
207-
208-
return {
209-
...context,
210-
codes,
211-
};
195+
});
212196
});
213197

214198
const getGeneratedScript = computed(() => {
215-
const options: ScriptCodegenOptions = {
199+
return generateScript({
216200
ts,
217201
compilerOptions: ctx.compilerOptions,
218202
vueCompilerOptions: getResolvedOptions(),
@@ -224,14 +208,7 @@ function createTsx(
224208
templateCodegen: getGeneratedTemplate(),
225209
destructuredPropNames: getSetupDestructuredPropNames(),
226210
templateRefNames: getSetupTemplateRefNames(),
227-
};
228-
const context = createScriptCodegenContext(options);
229-
const codegen = generateScript(options, context);
230-
231-
return {
232-
...context,
233-
codes: [...codegen],
234-
};
211+
});
235212
});
236213

237214
return {

0 commit comments

Comments
 (0)