vue-component-meta 2.0.6 → 2.0.10
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/base.d.ts +1 -1
- package/lib/base.js +27 -40
- package/package.json +5 -5
package/lib/base.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ export declare function createCheckerBase(ts: typeof import('typescript'), tscon
|
|
|
24
24
|
tsLs: ts.LanguageService;
|
|
25
25
|
};
|
|
26
26
|
};
|
|
27
|
-
export declare function baseCreate(ts: typeof import('typescript'),
|
|
27
|
+
export declare function baseCreate(ts: typeof import('typescript'), host: vue.TypeScriptProjectHost, vueCompilerOptions: vue.VueCompilerOptions, checkerOptions: MetaCheckerOptions, globalComponentName: string): {
|
|
28
28
|
getExportNames: (componentPath: string) => string[];
|
|
29
29
|
getComponentMeta: (componentPath: string, exportName?: string) => ComponentMeta;
|
|
30
30
|
__internal__: {
|
package/lib/base.js
CHANGED
|
@@ -40,14 +40,15 @@ function createCheckerWorker(ts, loadParsedCommandLine, checkerOptions, rootPath
|
|
|
40
40
|
let fileNames = parsedCommandLine.fileNames.map(path => path.replace(windowsPathReg, '/'));
|
|
41
41
|
let projectVersion = 0;
|
|
42
42
|
const scriptSnapshots = new Map();
|
|
43
|
-
const
|
|
44
|
-
|
|
43
|
+
const projectHost = {
|
|
44
|
+
...ts.sys,
|
|
45
|
+
configFileName,
|
|
45
46
|
getCurrentDirectory: () => rootPath,
|
|
46
47
|
getProjectVersion: () => projectVersion.toString(),
|
|
47
48
|
getCompilationSettings: () => parsedCommandLine.options,
|
|
48
49
|
getScriptFileNames: () => fileNames,
|
|
49
50
|
getProjectReferences: () => parsedCommandLine.projectReferences,
|
|
50
|
-
getScriptSnapshot:
|
|
51
|
+
getScriptSnapshot: fileName => {
|
|
51
52
|
if (!scriptSnapshots.has(fileName)) {
|
|
52
53
|
const fileText = ts.sys.readFile(fileName);
|
|
53
54
|
if (fileText !== undefined) {
|
|
@@ -57,14 +58,16 @@ function createCheckerWorker(ts, loadParsedCommandLine, checkerOptions, rootPath
|
|
|
57
58
|
return scriptSnapshots.get(fileName);
|
|
58
59
|
},
|
|
59
60
|
getLanguageId: fileName => {
|
|
60
|
-
if (
|
|
61
|
+
if (parsedCommandLine.vueOptions.extensions.some(ext => fileName.endsWith(ext))) {
|
|
61
62
|
return 'vue';
|
|
62
63
|
}
|
|
63
64
|
return vue.resolveCommonLanguageId(fileName);
|
|
64
65
|
},
|
|
66
|
+
scriptIdToFileName: id => id,
|
|
67
|
+
fileNameToScriptId: id => id,
|
|
65
68
|
};
|
|
66
69
|
return {
|
|
67
|
-
...baseCreate(ts,
|
|
70
|
+
...baseCreate(ts, projectHost, parsedCommandLine.vueOptions, checkerOptions, globalComponentName),
|
|
68
71
|
updateFile(fileName, text) {
|
|
69
72
|
fileName = fileName.replace(windowsPathReg, '/');
|
|
70
73
|
scriptSnapshots.set(fileName, ts.ScriptSnapshot.fromString(text));
|
|
@@ -86,7 +89,7 @@ function createCheckerWorker(ts, loadParsedCommandLine, checkerOptions, rootPath
|
|
|
86
89
|
},
|
|
87
90
|
};
|
|
88
91
|
}
|
|
89
|
-
function baseCreate(ts,
|
|
92
|
+
function baseCreate(ts, host, vueCompilerOptions, checkerOptions, globalComponentName) {
|
|
90
93
|
const globalComponentSnapshot = ts.ScriptSnapshot.fromString('<script setup lang="ts"></script>');
|
|
91
94
|
const metaSnapshots = {};
|
|
92
95
|
const getScriptFileNames = host.getScriptFileNames;
|
|
@@ -100,7 +103,7 @@ function baseCreate(ts, configFileName, host, vueCompilerOptions, checkerOptions
|
|
|
100
103
|
getMetaFileName(globalComponentName),
|
|
101
104
|
];
|
|
102
105
|
};
|
|
103
|
-
host.getScriptSnapshot =
|
|
106
|
+
host.getScriptSnapshot = fileName => {
|
|
104
107
|
if (isMetaFileName(fileName)) {
|
|
105
108
|
if (!metaSnapshots[fileName]) {
|
|
106
109
|
metaSnapshots[fileName] = ts.ScriptSnapshot.fromString(getMetaScriptContent(fileName));
|
|
@@ -114,29 +117,13 @@ function baseCreate(ts, configFileName, host, vueCompilerOptions, checkerOptions
|
|
|
114
117
|
return getScriptSnapshot(fileName);
|
|
115
118
|
}
|
|
116
119
|
};
|
|
117
|
-
const vueLanguagePlugin = vue.createVueLanguagePlugin(ts, id => id,
|
|
118
|
-
|
|
119
|
-
return host.getScriptFileNames().includes(fileName) ?? false;
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
const lowerFileName = fileName.toLowerCase();
|
|
123
|
-
for (const rootFile of host.getScriptFileNames()) {
|
|
124
|
-
if (rootFile.toLowerCase() === lowerFileName) {
|
|
125
|
-
return true;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
}, host.getCompilationSettings(), vueCompilerOptions);
|
|
131
|
-
const language = (0, typescript_1.createLanguage)(ts, ts.sys, [vueLanguagePlugin], configFileName, host, {
|
|
132
|
-
fileIdToFileName: id => id,
|
|
133
|
-
fileNameToFileId: id => id,
|
|
134
|
-
});
|
|
120
|
+
const vueLanguagePlugin = vue.createVueLanguagePlugin(ts, id => id, ts.sys.useCaseSensitiveFileNames, () => host.getProjectVersion?.() ?? '', () => host.getScriptFileNames(), host.getCompilationSettings(), vueCompilerOptions);
|
|
121
|
+
const language = (0, typescript_1.createTypeScriptLanguage)(ts, [vueLanguagePlugin], host);
|
|
135
122
|
const { languageServiceHost } = language.typescript;
|
|
136
123
|
const tsLs = ts.createLanguageService(languageServiceHost);
|
|
137
124
|
if (checkerOptions.forceUseTs) {
|
|
138
125
|
const getScriptKind = languageServiceHost.getScriptKind?.bind(languageServiceHost);
|
|
139
|
-
languageServiceHost.getScriptKind =
|
|
126
|
+
languageServiceHost.getScriptKind = fileName => {
|
|
140
127
|
if (fileName.endsWith('.vue.js')) {
|
|
141
128
|
return ts.ScriptKind.TS;
|
|
142
129
|
}
|
|
@@ -186,7 +173,7 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
|
|
|
186
173
|
const program = tsLs.getProgram();
|
|
187
174
|
const typeChecker = program.getTypeChecker();
|
|
188
175
|
const { symbolNode, exports } = _getExports(program, typeChecker, componentPath);
|
|
189
|
-
const _export = exports.find(
|
|
176
|
+
const _export = exports.find(property => property.getName() === exportName);
|
|
190
177
|
if (!_export) {
|
|
191
178
|
throw `Could not find export ${exportName}`;
|
|
192
179
|
}
|
|
@@ -230,11 +217,11 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
|
|
|
230
217
|
const type = typeChecker.getTypeOfSymbolAtLocation($props, symbolNode);
|
|
231
218
|
const properties = type.getProperties();
|
|
232
219
|
result = properties
|
|
233
|
-
.map(
|
|
220
|
+
.map(prop => {
|
|
234
221
|
const { resolveNestedProperties, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, language);
|
|
235
222
|
return resolveNestedProperties(prop);
|
|
236
223
|
})
|
|
237
|
-
.filter(
|
|
224
|
+
.filter(prop => !prop.name.match(propEventRegex));
|
|
238
225
|
}
|
|
239
226
|
// fill global
|
|
240
227
|
if (componentPath !== globalComponentName) {
|
|
@@ -246,7 +233,7 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
|
|
|
246
233
|
// fill defaults
|
|
247
234
|
const printer = ts.createPrinter(checkerOptions.printer);
|
|
248
235
|
const snapshot = host.getScriptSnapshot(componentPath);
|
|
249
|
-
const vueFile = language.
|
|
236
|
+
const vueFile = language.scripts.get(componentPath)?.generated?.root;
|
|
250
237
|
const vueDefaults = vueFile && exportName === 'default'
|
|
251
238
|
? (vueFile instanceof vue.VueGeneratedCode ? readVueComponentDefaultProps(vueFile, printer, ts, vueCompilerOptions) : {})
|
|
252
239
|
: {};
|
|
@@ -274,7 +261,7 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
|
|
|
274
261
|
if ($emit) {
|
|
275
262
|
const type = typeChecker.getTypeOfSymbolAtLocation($emit, symbolNode);
|
|
276
263
|
const calls = type.getCallSignatures();
|
|
277
|
-
return calls.map(
|
|
264
|
+
return calls.map(call => {
|
|
278
265
|
const { resolveEventSignature, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, language);
|
|
279
266
|
return resolveEventSignature(call);
|
|
280
267
|
}).filter(event => event.name);
|
|
@@ -286,7 +273,7 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
|
|
|
286
273
|
if ($slots) {
|
|
287
274
|
const type = typeChecker.getTypeOfSymbolAtLocation($slots, symbolNode);
|
|
288
275
|
const properties = type.getProperties();
|
|
289
|
-
return properties.map(
|
|
276
|
+
return properties.map(prop => {
|
|
290
277
|
const { resolveSlotProperties, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, language);
|
|
291
278
|
return resolveSlotProperties(prop);
|
|
292
279
|
});
|
|
@@ -300,7 +287,7 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
|
|
|
300
287
|
const properties = type.getProperties().filter(prop =>
|
|
301
288
|
// only exposed props will not have a valueDeclaration
|
|
302
289
|
!prop.valueDeclaration);
|
|
303
|
-
return properties.map(
|
|
290
|
+
return properties.map(prop => {
|
|
304
291
|
const { resolveExposedProperties, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, language);
|
|
305
292
|
return resolveExposedProperties(prop);
|
|
306
293
|
});
|
|
@@ -337,7 +324,7 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
|
|
|
337
324
|
}
|
|
338
325
|
}
|
|
339
326
|
exports.baseCreate = baseCreate;
|
|
340
|
-
function createSchemaResolvers(typeChecker, symbolNode, { rawType, schema: options, noDeclarations }, ts,
|
|
327
|
+
function createSchemaResolvers(typeChecker, symbolNode, { rawType, schema: options, noDeclarations }, ts, language) {
|
|
341
328
|
const visited = new Set();
|
|
342
329
|
function shouldIgnore(subtype) {
|
|
343
330
|
const name = typeChecker.typeToString(subtype);
|
|
@@ -351,8 +338,9 @@ function createSchemaResolvers(typeChecker, symbolNode, { rawType, schema: optio
|
|
|
351
338
|
for (const item of options.ignore ?? []) {
|
|
352
339
|
if (typeof item === 'function') {
|
|
353
340
|
const result = item(name, subtype, typeChecker);
|
|
354
|
-
if (typeof result === 'boolean')
|
|
341
|
+
if (typeof result === 'boolean') {
|
|
355
342
|
return result;
|
|
343
|
+
}
|
|
356
344
|
}
|
|
357
345
|
else if (name === item) {
|
|
358
346
|
return true;
|
|
@@ -392,7 +380,7 @@ function createSchemaResolvers(typeChecker, symbolNode, { rawType, schema: optio
|
|
|
392
380
|
const propType = typeChecker.getNonNullableType(typeChecker.getTypeOfSymbolAtLocation(prop, symbolNode));
|
|
393
381
|
const signatures = propType.getCallSignatures();
|
|
394
382
|
const paramType = signatures[0].parameters[0];
|
|
395
|
-
const subtype = typeChecker.getTypeOfSymbolAtLocation(paramType, symbolNode);
|
|
383
|
+
const subtype = paramType ? typeChecker.getTypeOfSymbolAtLocation(paramType, symbolNode) : typeChecker.getAnyType();
|
|
396
384
|
let schema;
|
|
397
385
|
let declarations;
|
|
398
386
|
return {
|
|
@@ -507,12 +495,11 @@ function createSchemaResolvers(typeChecker, symbolNode, { rawType, schema: optio
|
|
|
507
495
|
}
|
|
508
496
|
function getDeclaration(declaration) {
|
|
509
497
|
const fileName = declaration.getSourceFile().fileName;
|
|
510
|
-
const sourceFile =
|
|
498
|
+
const sourceFile = language.scripts.get(fileName);
|
|
511
499
|
if (sourceFile?.generated) {
|
|
512
|
-
const script = sourceFile.generated.languagePlugin.typescript?.
|
|
500
|
+
const script = sourceFile.generated.languagePlugin.typescript?.getServiceScript(sourceFile.generated.root);
|
|
513
501
|
if (script) {
|
|
514
|
-
const
|
|
515
|
-
for (const [source, [_, map]] of maps) {
|
|
502
|
+
for (const [source, [_, map]] of language.maps.forEach(script.code)) {
|
|
516
503
|
const start = map.getSourceOffset(declaration.getStart());
|
|
517
504
|
const end = map.getSourceOffset(declaration.getEnd());
|
|
518
505
|
if (start && end) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vue-component-meta",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.10",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
"directory": "packages/component-meta"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@volar/typescript": "~2.
|
|
16
|
-
"@vue/language-core": "2.0.
|
|
15
|
+
"@volar/typescript": "~2.2.0-alpha.5",
|
|
16
|
+
"@vue/language-core": "2.0.10",
|
|
17
17
|
"path-browserify": "^1.0.1",
|
|
18
|
-
"vue-component-type-helpers": "2.0.
|
|
18
|
+
"vue-component-type-helpers": "2.0.10"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"typescript": "*"
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
"@types/node": "latest",
|
|
30
30
|
"@types/path-browserify": "latest"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "a20a2ee950b63a949660b7e8faf0faed0e5bad33"
|
|
33
33
|
}
|