vue-component-meta 2.1.10 → 2.2.2
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.js +38 -30
- package/package.json +7 -7
package/lib/base.js
CHANGED
|
@@ -99,10 +99,10 @@ function baseCreate(ts, getCommandLine, checkerOptions, rootPath, globalComponen
|
|
|
99
99
|
const directoryExists = languageServiceHost.directoryExists?.bind(languageServiceHost);
|
|
100
100
|
const fileExists = languageServiceHost.fileExists.bind(languageServiceHost);
|
|
101
101
|
const getScriptSnapshot = languageServiceHost.getScriptSnapshot.bind(languageServiceHost);
|
|
102
|
-
const globalTypesName =
|
|
103
|
-
const globalTypesContents = `// @ts-nocheck\nexport {};\n` + vue.generateGlobalTypes(commandLine.vueOptions
|
|
102
|
+
const globalTypesName = vue.getGlobalTypesFileName(commandLine.vueOptions);
|
|
103
|
+
const globalTypesContents = `// @ts-nocheck\nexport {};\n` + vue.generateGlobalTypes(commandLine.vueOptions);
|
|
104
104
|
const globalTypesSnapshot = {
|
|
105
|
-
getText: (start, end) => globalTypesContents.
|
|
105
|
+
getText: (start, end) => globalTypesContents.slice(start, end),
|
|
106
106
|
getLength: () => globalTypesContents.length,
|
|
107
107
|
getChangeRange: () => undefined,
|
|
108
108
|
};
|
|
@@ -174,11 +174,11 @@ function baseCreate(ts, getCommandLine, checkerOptions, rootPath, globalComponen
|
|
|
174
174
|
function getMetaFileName(fileName) {
|
|
175
175
|
return (commandLine.vueOptions.extensions.some(ext => fileName.endsWith(ext))
|
|
176
176
|
? fileName
|
|
177
|
-
: fileName.
|
|
177
|
+
: fileName.slice(0, fileName.lastIndexOf('.'))) + '.meta.ts';
|
|
178
178
|
}
|
|
179
179
|
function getMetaScriptContent(fileName) {
|
|
180
180
|
let code = `
|
|
181
|
-
import * as Components from '${fileName.
|
|
181
|
+
import * as Components from '${fileName.slice(0, -'.meta.ts'.length)}';
|
|
182
182
|
export default {} as { [K in keyof typeof Components]: ComponentMeta<typeof Components[K]>; };
|
|
183
183
|
|
|
184
184
|
interface ComponentMeta<T> {
|
|
@@ -250,7 +250,7 @@ ${commandLine.vueOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1
|
|
|
250
250
|
const { resolveNestedProperties, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, language);
|
|
251
251
|
return resolveNestedProperties(prop);
|
|
252
252
|
})
|
|
253
|
-
.filter(prop => !prop.name
|
|
253
|
+
.filter(prop => !propEventRegex.test(prop.name));
|
|
254
254
|
}
|
|
255
255
|
// fill global
|
|
256
256
|
if (componentPath !== globalComponentName) {
|
|
@@ -261,13 +261,14 @@ ${commandLine.vueOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1
|
|
|
261
261
|
}
|
|
262
262
|
// fill defaults
|
|
263
263
|
const printer = ts.createPrinter(checkerOptions.printer);
|
|
264
|
-
const
|
|
265
|
-
const
|
|
264
|
+
const sourceScript = language.scripts.get(componentPath);
|
|
265
|
+
const { snapshot } = sourceScript;
|
|
266
|
+
const vueFile = sourceScript.generated?.root;
|
|
266
267
|
const vueDefaults = vueFile && exportName === 'default'
|
|
267
|
-
? (vueFile instanceof vue.VueVirtualCode ? readVueComponentDefaultProps(vueFile, printer, ts
|
|
268
|
+
? (vueFile instanceof vue.VueVirtualCode ? readVueComponentDefaultProps(vueFile, printer, ts) : {})
|
|
268
269
|
: {};
|
|
269
|
-
const tsDefaults = !vueFile ? readTsComponentDefaultProps(componentPath.
|
|
270
|
-
snapshot.getText(0, snapshot.getLength()), exportName, printer, ts) : {};
|
|
270
|
+
const tsDefaults = !vueFile ? readTsComponentDefaultProps(ts.createSourceFile('/tmp.' + componentPath.slice(componentPath.lastIndexOf('.') + 1), // ts | js | tsx | jsx
|
|
271
|
+
snapshot.getText(0, snapshot.getLength()), ts.ScriptTarget.Latest), exportName, printer, ts) : {};
|
|
271
272
|
for (const [propName, defaultExp] of Object.entries({
|
|
272
273
|
...vueDefaults,
|
|
273
274
|
...tsDefaults,
|
|
@@ -528,9 +529,9 @@ function createSchemaResolvers(typeChecker, symbolNode, { rawType, schema: optio
|
|
|
528
529
|
}
|
|
529
530
|
function getDeclaration(declaration) {
|
|
530
531
|
const fileName = declaration.getSourceFile().fileName;
|
|
531
|
-
const
|
|
532
|
-
if (
|
|
533
|
-
const script =
|
|
532
|
+
const sourceScript = language.scripts.get(fileName);
|
|
533
|
+
if (sourceScript?.generated) {
|
|
534
|
+
const script = sourceScript.generated.languagePlugin.typescript?.getServiceScript(sourceScript.generated.root);
|
|
534
535
|
if (script) {
|
|
535
536
|
for (const [sourceScript, map] of language.maps.forEach(script.code)) {
|
|
536
537
|
for (const [start] of map.toSourceLocation(declaration.getStart())) {
|
|
@@ -558,18 +559,20 @@ function createSchemaResolvers(typeChecker, symbolNode, { rawType, schema: optio
|
|
|
558
559
|
resolveSchema,
|
|
559
560
|
};
|
|
560
561
|
}
|
|
561
|
-
function readVueComponentDefaultProps(
|
|
562
|
+
function readVueComponentDefaultProps(root, printer, ts) {
|
|
562
563
|
let result = {};
|
|
563
564
|
scriptSetupWorker();
|
|
564
565
|
scriptWorker();
|
|
565
566
|
return result;
|
|
566
567
|
function scriptSetupWorker() {
|
|
567
|
-
const
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
568
|
+
const ast = root._sfc.scriptSetup?.ast;
|
|
569
|
+
if (!ast) {
|
|
570
|
+
return;
|
|
571
|
+
}
|
|
572
|
+
const codegen = vue.tsCodegen.get(root._sfc);
|
|
573
|
+
const scriptSetupRanges = codegen?.getScriptSetupRanges();
|
|
574
|
+
if (scriptSetupRanges?.withDefaults?.argNode) {
|
|
575
|
+
const obj = findObjectLiteralExpression(scriptSetupRanges.withDefaults.argNode);
|
|
573
576
|
if (obj) {
|
|
574
577
|
for (const prop of obj.properties) {
|
|
575
578
|
if (ts.isPropertyAssignment(prop)) {
|
|
@@ -583,10 +586,8 @@ function readVueComponentDefaultProps(vueSourceFile, printer, ts, vueCompilerOpt
|
|
|
583
586
|
}
|
|
584
587
|
}
|
|
585
588
|
}
|
|
586
|
-
else if (
|
|
587
|
-
const
|
|
588
|
-
const ast = ts.createSourceFile('/tmp.' + descriptor.scriptSetup.lang, '(' + defaultsText + ')', ts.ScriptTarget.Latest);
|
|
589
|
-
const obj = findObjectLiteralExpression(ast);
|
|
589
|
+
else if (scriptSetupRanges?.defineProps?.argNode) {
|
|
590
|
+
const obj = findObjectLiteralExpression(scriptSetupRanges.defineProps.argNode);
|
|
590
591
|
if (obj) {
|
|
591
592
|
result = {
|
|
592
593
|
...result,
|
|
@@ -594,6 +595,14 @@ function readVueComponentDefaultProps(vueSourceFile, printer, ts, vueCompilerOpt
|
|
|
594
595
|
};
|
|
595
596
|
}
|
|
596
597
|
}
|
|
598
|
+
else if (scriptSetupRanges?.defineProps?.destructured) {
|
|
599
|
+
for (const [prop, initializer] of scriptSetupRanges.defineProps.destructured) {
|
|
600
|
+
if (initializer) {
|
|
601
|
+
const expText = printer?.printNode(ts.EmitHint.Expression, initializer, ast) ?? initializer.getText(ast);
|
|
602
|
+
result[prop] = { default: expText };
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
}
|
|
597
606
|
function findObjectLiteralExpression(node) {
|
|
598
607
|
if (ts.isObjectLiteralExpression(node)) {
|
|
599
608
|
return node;
|
|
@@ -608,17 +617,16 @@ function readVueComponentDefaultProps(vueSourceFile, printer, ts, vueCompilerOpt
|
|
|
608
617
|
}
|
|
609
618
|
}
|
|
610
619
|
function scriptWorker() {
|
|
611
|
-
const
|
|
612
|
-
if (
|
|
613
|
-
const scriptResult = readTsComponentDefaultProps(
|
|
620
|
+
const sfc = root._sfc;
|
|
621
|
+
if (sfc.script) {
|
|
622
|
+
const scriptResult = readTsComponentDefaultProps(sfc.script.ast, 'default', printer, ts);
|
|
614
623
|
for (const [key, value] of Object.entries(scriptResult)) {
|
|
615
624
|
result[key] = value;
|
|
616
625
|
}
|
|
617
626
|
}
|
|
618
627
|
}
|
|
619
628
|
}
|
|
620
|
-
function readTsComponentDefaultProps(
|
|
621
|
-
const ast = ts.createSourceFile('/tmp.' + lang, tsFileText, ts.ScriptTarget.Latest);
|
|
629
|
+
function readTsComponentDefaultProps(ast, exportName, printer, ts) {
|
|
622
630
|
const props = getPropsNode();
|
|
623
631
|
if (props) {
|
|
624
632
|
return resolvePropsOption(ast, props, printer, ts);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vue-component-meta",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
"directory": "packages/component-meta"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@volar/typescript": "~2.4.
|
|
17
|
-
"@vue/language-core": "2.
|
|
16
|
+
"@volar/typescript": "~2.4.11",
|
|
17
|
+
"@vue/language-core": "2.2.2",
|
|
18
18
|
"path-browserify": "^1.0.1",
|
|
19
|
-
"vue-component-type-helpers": "2.
|
|
19
|
+
"vue-component-type-helpers": "2.2.2"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"typescript": "*"
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@types/node": "
|
|
31
|
-
"@types/path-browserify": "
|
|
30
|
+
"@types/node": "^22.10.4",
|
|
31
|
+
"@types/path-browserify": "^1.0.1"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "30757908b67f40f779c36795665163634fb81868"
|
|
34
34
|
}
|