Skip to content

Commit 39eb65c

Browse files
committed
perf(language-core): drop internal component (#5532)
1 parent aaa1c68 commit 39eb65c

File tree

22 files changed

+677
-600
lines changed

22 files changed

+677
-600
lines changed

packages/language-core/lib/codegen/globalTypes.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ export function generateGlobalTypes(options: VueCompilerOptions) {
4949
type __VLS_PickNotAny<A, B> = __VLS_IsAny<A> extends true ? B : A;
5050
type __VLS_SpreadMerge<A, B> = Omit<A, keyof B> & B;
5151
type __VLS_WithComponent<N0 extends string, LocalComponents, Self, N1 extends string, N2 extends string, N3 extends string> =
52-
N1 extends keyof LocalComponents ? N1 extends N0 ? Pick<LocalComponents, N0 extends keyof LocalComponents ? N0 : never> : { [K in N0]: LocalComponents[N1] } :
53-
N2 extends keyof LocalComponents ? N2 extends N0 ? Pick<LocalComponents, N0 extends keyof LocalComponents ? N0 : never> : { [K in N0]: LocalComponents[N2] } :
54-
N3 extends keyof LocalComponents ? N3 extends N0 ? Pick<LocalComponents, N0 extends keyof LocalComponents ? N0 : never> : { [K in N0]: LocalComponents[N3] } :
52+
N1 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N1] } :
53+
N2 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N2] } :
54+
N3 extends keyof LocalComponents ? { [K in N0]: LocalComponents[N3] } :
5555
Self extends object ? { [K in N0]: Self } :
56-
N1 extends keyof __VLS_GlobalComponents ? N1 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N1] } :
57-
N2 extends keyof __VLS_GlobalComponents ? N2 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N2] } :
58-
N3 extends keyof __VLS_GlobalComponents ? N3 extends N0 ? Pick<__VLS_GlobalComponents, N0 extends keyof __VLS_GlobalComponents ? N0 : never> : { [K in N0]: __VLS_GlobalComponents[N3] } :
56+
N1 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N1] } :
57+
N2 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N2] } :
58+
N3 extends keyof __VLS_GlobalComponents ? { [K in N0]: __VLS_GlobalComponents[N3] } :
5959
{};
6060
type __VLS_FunctionalComponentCtx<T, K> = __VLS_PickNotAny<'__ctx' extends keyof __VLS_PickNotAny<K, {}>
6161
? K extends { __ctx?: infer Ctx } ? NonNullable<Ctx> : never : any
@@ -117,6 +117,10 @@ export function generateGlobalTypes(options: VueCompilerOptions) {
117117
}
118118
>
119119
>;
120+
type __VLS_EmitsToProps<T> = __VLS_PrettifyGlobal<{
121+
[K in string & keyof T as \`on\${Capitalize<K>}\`]?:
122+
(...args: T[K] extends (...args: infer P) => any ? P : T[K] extends null ? any[] : never) => any;
123+
}>;
120124
type __VLS_ResolveEmits<
121125
Comp,
122126
Emits,
@@ -128,10 +132,16 @@ export function generateGlobalTypes(options: VueCompilerOptions) {
128132
NormalizedEmits = __VLS_NormalizeEmits<Emits> extends infer E ? string extends keyof E ? {} : E : never,
129133
> = __VLS_SpreadMerge<NormalizedEmits, TypeEmits>;
130134
type __VLS_ResolveDirectives<T> = {
131-
[K in Exclude<keyof T, keyof __VLS_GlobalDirectives> & string as \`v\${Capitalize<K>}\`]: T[K];
135+
[K in keyof T & string as \`v\${Capitalize<K>}\`]: T[K];
132136
};
133137
type __VLS_PrettifyGlobal<T> = { [K in keyof T as K]: T[K]; } & {};
138+
type __VLS_WithDefaultsGlobal<P, D> = {
139+
[K in keyof P as K extends keyof D ? K : never]-?: P[K];
140+
} & {
141+
[K in keyof P as K extends keyof D ? never : K]: P[K];
142+
};
134143
type __VLS_UseTemplateRef<T> = Readonly<import('${lib}').ShallowRef<T | null>>;
144+
type __VLS_ProxyRefs<T> = import('${lib}').ShallowUnwrapRef<T>;
135145
136146
function __VLS_getVForSourceType<T extends number | string | any[] | Iterable<any>>(source: T): [
137147
item: T extends number ? number
@@ -153,7 +163,6 @@ export function generateGlobalTypes(options: VueCompilerOptions) {
153163
: T extends (...args: any) => any
154164
? T
155165
: (arg1: unknown, arg2: unknown, arg3: unknown, arg4: unknown) => void;
156-
function __VLS_makeOptional<T>(t: T): { [K in keyof T]?: T[K] };
157166
function __VLS_asFunctionalComponent<T, K = T extends new (...args: any) => any ? InstanceType<T> : unknown>(t: T, instance?: K):
158167
T extends new (...args: any) => any ? __VLS_FunctionalComponent<K>
159168
: T extends () => any ? (props: {}, ctx?: any) => ReturnType<T>

packages/language-core/lib/codegen/localTypes.ts

Lines changed: 11 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,11 @@ import { endOfLine } from './utils';
44
export function getLocalTypesGenerator(vueCompilerOptions: VueCompilerOptions) {
55
const used = new Set<string>();
66

7-
const OmitKeepDiscriminatedUnion = defineHelper(
8-
`__VLS_OmitKeepDiscriminatedUnion`,
7+
const WithDefaultsLocal = defineHelper(
8+
`__VLS_WithDefaultsLocal`,
99
() =>
1010
`
11-
type __VLS_OmitKeepDiscriminatedUnion<T, K extends keyof any> = T extends any
12-
? Pick<T, Exclude<keyof T, K>>
13-
: never;
14-
`.trimStart(),
15-
);
16-
const WithDefaults = defineHelper(
17-
`__VLS_WithDefaults`,
18-
() =>
19-
`
20-
type __VLS_WithDefaults<P, D> = {
11+
type __VLS_WithDefaultsLocal<P, D> = {
2112
[K in keyof Pick<P, keyof P>]: K extends keyof D
2213
? ${PrettifyLocal.name}<P[K] & { default: D[K] }>
2314
: P[K]
@@ -34,11 +25,7 @@ type __VLS_WithDefaults<P, D> = {
3425
`
3526
type __VLS_WithSlots<T, S> = T & {
3627
new(): {
37-
$slots: S;${
38-
vueCompilerOptions.jsxSlots
39-
? `\n $props: ${PropsChildren.name}<S>;`
40-
: ''
41-
}
28+
$slots: S;
4229
}
4330
};
4431
`.trimStart(),
@@ -80,8 +67,7 @@ type __VLS_TypePropsToOption<T> = {
8067
);
8168
const helpers = {
8269
[PrettifyLocal.name]: PrettifyLocal,
83-
[OmitKeepDiscriminatedUnion.name]: OmitKeepDiscriminatedUnion,
84-
[WithDefaults.name]: WithDefaults,
70+
[WithDefaultsLocal.name]: WithDefaultsLocal,
8571
[WithSlots.name]: WithSlots,
8672
[PropsChildren.name]: PropsChildren,
8773
[TypePropsToOption.name]: TypePropsToOption,
@@ -91,17 +77,11 @@ type __VLS_TypePropsToOption<T> = {
9177

9278
return {
9379
generate,
94-
getUsedNames() {
95-
return used;
96-
},
9780
get PrettifyLocal() {
9881
return PrettifyLocal.name;
9982
},
100-
get OmitKeepDiscriminatedUnion() {
101-
return OmitKeepDiscriminatedUnion.name;
102-
},
103-
get WithDefaults() {
104-
return WithDefaults.name;
83+
get WithDefaultsLocal() {
84+
return WithDefaultsLocal.name;
10585
},
10686
get WithSlots() {
10787
return WithSlots.name;
@@ -117,20 +97,11 @@ type __VLS_TypePropsToOption<T> = {
11797
},
11898
};
11999

120-
function* generate(names: string[]) {
121-
const generated = new Set<string>();
122-
while (names.length) {
123-
used.clear();
124-
for (const name of names) {
125-
if (generated.has(name)) {
126-
continue;
127-
}
128-
const helper = helpers[name as keyof typeof helpers]!;
129-
yield helper.generate();
130-
generated.add(name);
131-
}
132-
names = [...used].filter(name => !generated.has(name));
100+
function* generate() {
101+
for (const name of used) {
102+
yield helpers[name]!.generate();
133103
}
104+
used.clear();
134105
}
135106

136107
function defineHelper(name: string, generate: () => string) {

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

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,18 @@ export function* generateComponent(
2929
yield `(await import('${options.vueCompilerOptions.lib}')).defineComponent({${newLine}`;
3030
}
3131

32-
const returns: Code[] = [];
32+
const returns: string[] = [];
3333
if (ctx.bypassDefineComponent) {
34-
returns.push(...generateComponentSetupReturns(scriptSetupRanges));
34+
// fill $props
35+
if (scriptSetupRanges.defineProps) {
36+
const name = scriptSetupRanges.defineProps.name ?? `__VLS_props`;
37+
// NOTE: defineProps is inaccurate for $props
38+
returns.push(name, `{} as { $props: Partial<typeof ${name}> }`);
39+
}
40+
// fill $emit
41+
if (scriptSetupRanges.defineEmits) {
42+
returns.push(`{} as { $emit: typeof ${scriptSetupRanges.defineEmits.name ?? `__VLS_emit`} }`);
43+
}
3544
}
3645
if (scriptSetupRanges.defineExpose) {
3746
returns.push(`__VLS_exposed`);
@@ -45,7 +54,7 @@ export function* generateComponent(
4554
if (!ctx.bypassDefineComponent) {
4655
const emitOptionCodes = [...generateEmitsOption(options, scriptSetupRanges)];
4756
yield* emitOptionCodes;
48-
yield* generatePropsOption(options, ctx, scriptSetup, scriptSetupRanges, !!emitOptionCodes.length, true);
57+
yield* generatePropsOption(options, ctx, scriptSetup, scriptSetupRanges, !!emitOptionCodes.length);
4958
}
5059
if (
5160
options.vueCompilerOptions.target >= 3.5
@@ -68,21 +77,7 @@ export function* generateComponent(
6877
yield `})`;
6978
}
7079

71-
export function* generateComponentSetupReturns(scriptSetupRanges: ScriptSetupRanges): Generator<string> {
72-
// fill $props
73-
if (scriptSetupRanges.defineProps) {
74-
const name = scriptSetupRanges.defineProps.name ?? `__VLS_props`;
75-
// NOTE: defineProps is inaccurate for $props
76-
yield name;
77-
yield `{} as { $props: Partial<typeof ${name}> }`;
78-
}
79-
// fill $emit
80-
if (scriptSetupRanges.defineEmits) {
81-
yield `{} as { $emit: typeof ${scriptSetupRanges.defineEmits.name ?? `__VLS_emit`} }`;
82-
}
83-
}
84-
85-
export function* generateEmitsOption(
80+
function* generateEmitsOption(
8681
options: ScriptCodegenOptions,
8782
scriptSetupRanges: ScriptSetupRanges,
8883
): Generator<Code> {
@@ -116,18 +111,17 @@ export function* generateEmitsOption(
116111
}
117112
}
118113

119-
export function* generatePropsOption(
114+
function* generatePropsOption(
120115
options: ScriptCodegenOptions,
121116
ctx: ScriptCodegenContext,
122117
scriptSetup: NonNullable<Sfc['scriptSetup']>,
123118
scriptSetupRanges: ScriptSetupRanges,
124119
hasEmitsOption: boolean,
125-
inheritAttrs: boolean,
126120
): Generator<Code> {
127121
const getOptionCodes: (() => Code)[] = [];
128122
const typeOptionCodes: Code[] = [];
129123

130-
if (inheritAttrs && options.templateCodegen?.inheritedAttrVars.size) {
124+
if (options.templateCodegen?.inheritedAttrVars.size) {
131125
let attrsType = `__VLS_InheritedAttrs`;
132126
if (hasEmitsOption) {
133127
attrsType = `Omit<${attrsType}, \`on\${string}\`>`;
@@ -145,7 +139,7 @@ export function* generatePropsOption(
145139
const propsType = `${ctx.localTypes.TypePropsToOption}<__VLS_PublicProps>`;
146140
return `{} as ` + (
147141
scriptSetupRanges.withDefaults?.arg
148-
? `${ctx.localTypes.WithDefaults}<${propsType}, typeof __VLS_withDefaultsArg>`
142+
? `${ctx.localTypes.WithDefaultsLocal}<${propsType}, typeof __VLS_defaults>`
149143
: propsType
150144
);
151145
});
@@ -166,7 +160,7 @@ export function* generatePropsOption(
166160
options.vueCompilerOptions.target >= 3.6
167161
&& scriptSetupRanges.withDefaults?.arg
168162
) {
169-
yield `__defaults: __VLS_withDefaultsArg,${newLine}`;
163+
yield `__defaults: __VLS_defaults,${newLine}`;
170164
}
171165
yield `__typeProps: `;
172166
yield* generateSpreadMerge(typeOptionCodes);

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

Lines changed: 0 additions & 65 deletions
This file was deleted.

0 commit comments

Comments
 (0)