@vue/language-core 2.0.26-alpha.1 → 2.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/codegen/script/component.d.ts +2 -0
- package/lib/codegen/script/component.js +57 -41
- package/lib/codegen/script/globalTypes.js +3 -2
- package/lib/codegen/script/scriptSetup.js +12 -12
- package/lib/languageModule.js +4 -4
- package/lib/parsers/scriptSetupRanges.d.ts +3 -1
- package/lib/parsers/scriptSetupRanges.js +8 -0
- package/lib/plugins/vue-tsx.d.ts +3 -1
- package/package.json +4 -4
|
@@ -7,3 +7,5 @@ export declare function generateComponent(options: ScriptCodegenOptions, ctx: Sc
|
|
|
7
7
|
export declare function generateComponentSetupReturns(scriptSetupRanges: ScriptSetupRanges): Generator<Code>;
|
|
8
8
|
export declare function generateScriptOptions(script: NonNullable<Sfc['script']>, scriptRanges: ScriptRanges): Generator<Code>;
|
|
9
9
|
export declare function generateScriptSetupOptions(options: ScriptCodegenOptions, ctx: ScriptCodegenContext, scriptSetup: NonNullable<Sfc['scriptSetup']>, scriptSetupRanges: ScriptSetupRanges): Generator<Code>;
|
|
10
|
+
export declare function generatePropsOption(options: ScriptCodegenOptions, ctx: ScriptCodegenContext, scriptSetup: NonNullable<Sfc['scriptSetup']>, scriptSetupRanges: ScriptSetupRanges): Generator<Code, void, unknown>;
|
|
11
|
+
export declare function generateEmitsOption(options: ScriptCodegenOptions, scriptSetup: NonNullable<Sfc['scriptSetup']>, scriptSetupRanges: ScriptSetupRanges): Generator<Code>;
|
|
@@ -4,6 +4,8 @@ exports.generateComponent = generateComponent;
|
|
|
4
4
|
exports.generateComponentSetupReturns = generateComponentSetupReturns;
|
|
5
5
|
exports.generateScriptOptions = generateScriptOptions;
|
|
6
6
|
exports.generateScriptSetupOptions = generateScriptSetupOptions;
|
|
7
|
+
exports.generatePropsOption = generatePropsOption;
|
|
8
|
+
exports.generateEmitsOption = generateEmitsOption;
|
|
7
9
|
const common_1 = require("../common");
|
|
8
10
|
const index_1 = require("./index");
|
|
9
11
|
function* generateComponent(options, ctx, scriptSetup, scriptSetupRanges) {
|
|
@@ -51,58 +53,72 @@ function* generateScriptOptions(script, scriptRanges) {
|
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
55
|
function* generateScriptSetupOptions(options, ctx, scriptSetup, scriptSetupRanges) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
yield `${ctx.helperTypes.TypePropsToOption.name}<`;
|
|
62
|
-
yield `__VLS_PublicProps>`;
|
|
63
|
-
if (scriptSetupRanges.props.withDefaults?.arg) {
|
|
64
|
-
yield `, typeof __VLS_withDefaultsArg>`;
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
if (scriptSetupRanges.props.define?.arg) {
|
|
69
|
-
const { arg } = scriptSetupRanges.props.define;
|
|
70
|
-
propsCodegens.push(function* () {
|
|
71
|
-
yield (0, common_1.generateSfcBlockSection)(scriptSetup, arg.start, arg.end, index_1.codeFeatures.navigation);
|
|
72
|
-
});
|
|
56
|
+
yield* generatePropsOption(options, ctx, scriptSetup, scriptSetupRanges);
|
|
57
|
+
yield* generateEmitsOption(options, scriptSetup, scriptSetupRanges);
|
|
58
|
+
}
|
|
59
|
+
function* generatePropsOption(options, ctx, scriptSetup, scriptSetupRanges) {
|
|
60
|
+
if (options.vueCompilerOptions.target >= 3.5 && ctx.generatedPropsType) {
|
|
61
|
+
yield `__typeProps: {} as __VLS_PublicProps,${common_1.newLine}`;
|
|
73
62
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
63
|
+
else {
|
|
64
|
+
const codegens = [];
|
|
65
|
+
if (ctx.generatedPropsType) {
|
|
66
|
+
codegens.push(function* () {
|
|
67
|
+
yield `{} as `;
|
|
68
|
+
if (scriptSetupRanges.props.withDefaults?.arg) {
|
|
69
|
+
yield `${ctx.helperTypes.WithDefaults.name}<`;
|
|
70
|
+
}
|
|
71
|
+
yield `${ctx.helperTypes.TypePropsToOption.name}<`;
|
|
72
|
+
yield `__VLS_PublicProps>`;
|
|
73
|
+
if (scriptSetupRanges.props.withDefaults?.arg) {
|
|
74
|
+
yield `, typeof __VLS_withDefaultsArg>`;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
78
77
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
78
|
+
if (scriptSetupRanges.props.define?.arg) {
|
|
79
|
+
const { arg } = scriptSetupRanges.props.define;
|
|
80
|
+
codegens.push(function* () {
|
|
81
|
+
yield (0, common_1.generateSfcBlockSection)(scriptSetup, arg.start, arg.end, index_1.codeFeatures.navigation);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
if (codegens.length === 1) {
|
|
85
|
+
yield `props: `;
|
|
86
|
+
for (const generate of codegens) {
|
|
87
|
+
yield* generate();
|
|
88
|
+
}
|
|
86
89
|
yield `,${common_1.newLine}`;
|
|
87
90
|
}
|
|
88
|
-
|
|
91
|
+
else if (codegens.length >= 2) {
|
|
92
|
+
yield `props: {${common_1.newLine}`;
|
|
93
|
+
for (const generate of codegens) {
|
|
94
|
+
yield `...`;
|
|
95
|
+
yield* generate();
|
|
96
|
+
yield `,${common_1.newLine}`;
|
|
97
|
+
}
|
|
98
|
+
yield `},${common_1.newLine}`;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
function* generateEmitsOption(options, scriptSetup, scriptSetupRanges) {
|
|
103
|
+
if (!scriptSetupRanges.emits.define && !scriptSetupRanges.defineProp.some(p => p.isModel)) {
|
|
104
|
+
return;
|
|
89
105
|
}
|
|
90
|
-
if (
|
|
91
|
-
yield `emits: ({} as __VLS_NormalizeEmits<
|
|
92
|
-
if (scriptSetupRanges
|
|
106
|
+
if (options.vueCompilerOptions.target < 3.5 || scriptSetupRanges.emits.define?.arg || scriptSetupRanges.emits.define?.hasUnionTypeArg) {
|
|
107
|
+
yield `emits: ({} as __VLS_NormalizeEmits<__VLS_ModelEmitsType`;
|
|
108
|
+
if (scriptSetupRanges?.emits.define) {
|
|
93
109
|
yield ` & typeof `;
|
|
94
110
|
yield scriptSetupRanges.emits.name ?? '__VLS_emit';
|
|
95
111
|
}
|
|
96
112
|
yield `>),${common_1.newLine}`;
|
|
97
113
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
yield `__typeEmits: ${scriptSetupRanges.emits.name ?? '__VLS_emit'},${common_1.newLine}`;
|
|
114
|
+
else {
|
|
115
|
+
yield `__typeEmits: {} as __VLS_ModelEmitsType`;
|
|
116
|
+
const typeArg = scriptSetupRanges.emits.define?.typeArg;
|
|
117
|
+
if (typeArg) {
|
|
118
|
+
yield ` & `;
|
|
119
|
+
yield scriptSetup.content.slice(typeArg.start, typeArg.end);
|
|
105
120
|
}
|
|
121
|
+
yield `,${common_1.newLine}`;
|
|
106
122
|
}
|
|
107
123
|
}
|
|
108
124
|
//# sourceMappingURL=component.js.map
|
|
@@ -15,8 +15,9 @@ declare global {
|
|
|
15
15
|
type __VLS_Element = ${vueCompilerOptions.target >= 3.3
|
|
16
16
|
? `import('${vueCompilerOptions.lib}/jsx-runtime').JSX.Element;`
|
|
17
17
|
: `globalThis.JSX.Element;`}
|
|
18
|
-
type __VLS_GlobalComponents =
|
|
19
|
-
|
|
18
|
+
type __VLS_GlobalComponents = ${vueCompilerOptions.target >= 3.5
|
|
19
|
+
? `import('${vueCompilerOptions.lib}').GlobalComponents`
|
|
20
|
+
: `import('${vueCompilerOptions.lib}').GlobalComponents & Pick<typeof import('${vueCompilerOptions.lib}'), 'Transition' | 'TransitionGroup' | 'KeepAlive' | 'Suspense' | 'Teleport'>;`}
|
|
20
21
|
type __VLS_BuiltInPublicProps = ${vueCompilerOptions.target >= 3.4
|
|
21
22
|
? `import('${vueCompilerOptions.lib}').PublicProps;`
|
|
22
23
|
: vueCompilerOptions.target >= 3.0
|
|
@@ -37,7 +37,7 @@ function* generateScriptSetup(options, ctx, scriptSetup, scriptSetupRanges) {
|
|
|
37
37
|
+ ` __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>['expose'],${common_1.newLine}`
|
|
38
38
|
+ ` __VLS_setup = (async () => {${common_1.newLine}`;
|
|
39
39
|
yield* generateSetupFunction(options, ctx, scriptSetup, scriptSetupRanges, undefined, definePropMirrors);
|
|
40
|
-
const emitTypes = ['
|
|
40
|
+
const emitTypes = ['__VLS_ModelEmitsType'];
|
|
41
41
|
if (scriptSetupRanges.emits.define) {
|
|
42
42
|
emitTypes.unshift(`typeof ${scriptSetupRanges.emits.name ?? '__VLS_emit'}`);
|
|
43
43
|
}
|
|
@@ -231,14 +231,7 @@ function* generateComponentProps(options, ctx, scriptSetup, scriptSetupRanges, d
|
|
|
231
231
|
yield (0, common_1.generateSfcBlockSection)(scriptSetup, scriptSetupRanges.props.define.arg.start, scriptSetupRanges.props.define.arg.end, index_1.codeFeatures.navigation);
|
|
232
232
|
yield `,${common_1.newLine}`;
|
|
233
233
|
}
|
|
234
|
-
|
|
235
|
-
yield ` emits: ({} as __VLS_NormalizeEmits<typeof __VLS_modelEmitsType`;
|
|
236
|
-
if (scriptSetupRanges.emits.define) {
|
|
237
|
-
yield ` & typeof `;
|
|
238
|
-
yield scriptSetupRanges.emits.name ?? '__VLS_emit';
|
|
239
|
-
}
|
|
240
|
-
yield `>),${common_1.newLine}`;
|
|
241
|
-
}
|
|
234
|
+
yield* (0, component_1.generateEmitsOption)(options, scriptSetup, scriptSetupRanges);
|
|
242
235
|
yield `})${common_1.endOfLine}`;
|
|
243
236
|
yield `let __VLS_functionalComponentProps!: `;
|
|
244
237
|
yield `${ctx.helperTypes.OmitKeepDiscriminatedUnion.name}<InstanceType<typeof __VLS_fnComponent>['$props'], keyof __VLS_BuiltInPublicProps>`;
|
|
@@ -329,9 +322,13 @@ function* generateComponentProps(options, ctx, scriptSetup, scriptSetupRanges, d
|
|
|
329
322
|
yield common_1.endOfLine;
|
|
330
323
|
}
|
|
331
324
|
function* generateModelEmits(options, scriptSetup, scriptSetupRanges) {
|
|
332
|
-
yield `
|
|
325
|
+
yield `type __VLS_ModelEmitsType = `;
|
|
333
326
|
if (scriptSetupRanges.defineProp.filter(p => p.isModel).length) {
|
|
334
|
-
|
|
327
|
+
if (options.vueCompilerOptions.target < 3.5) {
|
|
328
|
+
yield `typeof __VLS_modelEmitsType${common_1.endOfLine}`;
|
|
329
|
+
yield `const __VLS_modelEmitsType = (await import('${options.vueCompilerOptions.lib}')).defineEmits<`;
|
|
330
|
+
}
|
|
331
|
+
yield `{${common_1.newLine}`;
|
|
335
332
|
for (const defineProp of scriptSetupRanges.defineProp) {
|
|
336
333
|
if (!defineProp.isModel) {
|
|
337
334
|
continue;
|
|
@@ -350,7 +347,10 @@ function* generateModelEmits(options, scriptSetup, scriptSetupRanges) {
|
|
|
350
347
|
}
|
|
351
348
|
yield `]${common_1.endOfLine}`;
|
|
352
349
|
}
|
|
353
|
-
yield `}
|
|
350
|
+
yield `}`;
|
|
351
|
+
if (options.vueCompilerOptions.target < 3.5) {
|
|
352
|
+
yield `>()`;
|
|
353
|
+
}
|
|
354
354
|
}
|
|
355
355
|
else {
|
|
356
356
|
yield `{}`;
|
package/lib/languageModule.js
CHANGED
|
@@ -73,11 +73,11 @@ function createVueLanguagePlugin(ts, asFileName, getProjectVersion, isRootFile,
|
|
|
73
73
|
createVirtualCode(scriptId, languageId, snapshot) {
|
|
74
74
|
if (languageId === 'vue' || languageId === 'markdown' || languageId === 'html') {
|
|
75
75
|
const fileName = asFileName(scriptId);
|
|
76
|
-
if (
|
|
76
|
+
if (getProjectVersion() !== canonicalRootFileNamesVersion) {
|
|
77
77
|
canonicalRootFileNamesVersion = getProjectVersion();
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
}
|
|
79
|
+
if (!pluginContext.globalTypesHolder && isRootFile(fileName)) {
|
|
80
|
+
pluginContext.globalTypesHolder = fileName;
|
|
81
81
|
}
|
|
82
82
|
const fileRegistry = getFileRegistry(pluginContext.globalTypesHolder === fileName);
|
|
83
83
|
const code = fileRegistry.get(fileName);
|
|
@@ -32,7 +32,9 @@ export declare function parseScriptSetupRanges(ts: typeof import('typescript'),
|
|
|
32
32
|
define?: ReturnType<(node: ts.CallExpression) => TextRange & {
|
|
33
33
|
arg?: TextRange;
|
|
34
34
|
typeArg?: TextRange;
|
|
35
|
-
}
|
|
35
|
+
}> & {
|
|
36
|
+
hasUnionTypeArg?: boolean;
|
|
37
|
+
};
|
|
36
38
|
};
|
|
37
39
|
expose: {
|
|
38
40
|
name?: string;
|
|
@@ -168,6 +168,14 @@ function parseScriptSetupRanges(ts, ast, vueCompilerOptions) {
|
|
|
168
168
|
if (ts.isVariableDeclaration(parent)) {
|
|
169
169
|
emits.name = getNodeText(ts, parent.name, ast);
|
|
170
170
|
}
|
|
171
|
+
if (node.typeArguments?.length && ts.isTypeLiteralNode(node.typeArguments[0]) && node.typeArguments[0].members.at(0)) {
|
|
172
|
+
for (const member of node.typeArguments[0].members) {
|
|
173
|
+
if (ts.isCallSignatureDeclaration(member) && member.parameters[0].type && ts.isUnionTypeNode(member.parameters[0].type)) {
|
|
174
|
+
emits.define.hasUnionTypeArg = true;
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
171
179
|
}
|
|
172
180
|
else if (vueCompilerOptions.macros.defineExpose.includes(callText)) {
|
|
173
181
|
expose.define = parseDefineFunction(node);
|
package/lib/plugins/vue-tsx.d.ts
CHANGED
|
@@ -43,7 +43,9 @@ export declare const tsCodegen: WeakMap<Sfc, {
|
|
|
43
43
|
define?: ReturnType<(node: import("typescript").CallExpression) => import("../types").TextRange & {
|
|
44
44
|
arg?: import("../types").TextRange;
|
|
45
45
|
typeArg?: import("../types").TextRange;
|
|
46
|
-
}
|
|
46
|
+
}> & {
|
|
47
|
+
hasUnionTypeArg?: boolean;
|
|
48
|
+
};
|
|
47
49
|
};
|
|
48
50
|
expose: {
|
|
49
51
|
name?: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vue/language-core",
|
|
3
|
-
"version": "2.0.26
|
|
3
|
+
"version": "2.0.26",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"directory": "packages/language-core"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@volar/language-core": "~2.4.0-alpha.
|
|
15
|
+
"@volar/language-core": "~2.4.0-alpha.15",
|
|
16
16
|
"@vue/compiler-dom": "^3.4.0",
|
|
17
17
|
"@vue/shared": "^3.4.0",
|
|
18
18
|
"computeds": "^0.0.1",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"@types/minimatch": "^5.1.2",
|
|
26
26
|
"@types/node": "latest",
|
|
27
27
|
"@types/path-browserify": "^1.0.1",
|
|
28
|
-
"@volar/typescript": "~2.4.0-alpha.
|
|
28
|
+
"@volar/typescript": "~2.4.0-alpha.15",
|
|
29
29
|
"@vue/compiler-sfc": "^3.4.0"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
@@ -36,5 +36,5 @@
|
|
|
36
36
|
"optional": true
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "47924f61e9409501d11ab04e9d3417cc5c86232c"
|
|
40
40
|
}
|