vue-component-meta 3.1.0 → 3.1.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 +29 -23
- package/package.json +4 -4
- package/lib/helpers.d.ts +0 -1
- package/lib/helpers.js +0 -3
package/lib/base.js
CHANGED
|
@@ -17,15 +17,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
exports.createCheckerByJsonConfigBase = createCheckerByJsonConfigBase;
|
|
18
18
|
exports.createCheckerBase = createCheckerBase;
|
|
19
19
|
const typescript_1 = require("@volar/typescript");
|
|
20
|
-
const
|
|
20
|
+
const core = require("@vue/language-core");
|
|
21
21
|
const path_browserify_1 = require("path-browserify");
|
|
22
22
|
__exportStar(require("./types"), exports);
|
|
23
23
|
const windowsPathReg = /\\/g;
|
|
24
24
|
function createCheckerByJsonConfigBase(ts, rootDir, json, checkerOptions = {}) {
|
|
25
25
|
rootDir = rootDir.replace(windowsPathReg, '/');
|
|
26
26
|
return baseCreate(ts, () => {
|
|
27
|
-
const commandLine =
|
|
28
|
-
const { fileNames } = ts.parseJsonConfigFileContent(json, ts.sys, rootDir, {}, undefined, undefined,
|
|
27
|
+
const commandLine = core.createParsedCommandLineByJson(ts, ts.sys, rootDir, json);
|
|
28
|
+
const { fileNames } = ts.parseJsonConfigFileContent(json, ts.sys, rootDir, {}, undefined, undefined, core.getAllExtensions(commandLine.vueOptions)
|
|
29
29
|
.map(extension => ({
|
|
30
30
|
extension: extension.slice(1),
|
|
31
31
|
isMixedContent: true,
|
|
@@ -37,8 +37,8 @@ function createCheckerByJsonConfigBase(ts, rootDir, json, checkerOptions = {}) {
|
|
|
37
37
|
function createCheckerBase(ts, tsconfig, checkerOptions = {}) {
|
|
38
38
|
tsconfig = tsconfig.replace(windowsPathReg, '/');
|
|
39
39
|
return baseCreate(ts, () => {
|
|
40
|
-
const commandLine =
|
|
41
|
-
const { fileNames } = ts.parseJsonSourceFileConfigFileContent(ts.readJsonConfigFile(tsconfig, ts.sys.readFile), ts.sys, path_browserify_1.posix.dirname(tsconfig), {}, tsconfig, undefined,
|
|
40
|
+
const commandLine = core.createParsedCommandLine(ts, ts.sys, tsconfig);
|
|
41
|
+
const { fileNames } = ts.parseJsonSourceFileConfigFileContent(ts.readJsonConfigFile(tsconfig, ts.sys.readFile), ts.sys, path_browserify_1.posix.dirname(tsconfig), {}, tsconfig, undefined, core.getAllExtensions(commandLine.vueOptions)
|
|
42
42
|
.map(extension => ({
|
|
43
43
|
extension: extension.slice(1),
|
|
44
44
|
isMixedContent: true,
|
|
@@ -48,19 +48,19 @@ function createCheckerBase(ts, tsconfig, checkerOptions = {}) {
|
|
|
48
48
|
}, checkerOptions, path_browserify_1.posix.dirname(tsconfig), tsconfig + '.global.vue');
|
|
49
49
|
}
|
|
50
50
|
function baseCreate(ts, getConfigAndFiles, checkerOptions, rootPath, globalComponentName) {
|
|
51
|
-
let [
|
|
51
|
+
let [{ vueOptions, options, projectReferences }, fileNames] = getConfigAndFiles();
|
|
52
52
|
/**
|
|
53
53
|
* Used to lookup if a file is referenced.
|
|
54
54
|
*/
|
|
55
|
-
let
|
|
55
|
+
let fileNamesSet = new Set(fileNames.map(path => path.replace(windowsPathReg, '/')));
|
|
56
56
|
let projectVersion = 0;
|
|
57
|
-
|
|
57
|
+
vueOptions.globalTypesPath = core.createGlobalTypesWriter(vueOptions, ts.sys.writeFile);
|
|
58
58
|
const projectHost = {
|
|
59
59
|
getCurrentDirectory: () => rootPath,
|
|
60
60
|
getProjectVersion: () => projectVersion.toString(),
|
|
61
|
-
getCompilationSettings: () =>
|
|
62
|
-
getScriptFileNames: () => [...
|
|
63
|
-
getProjectReferences: () =>
|
|
61
|
+
getCompilationSettings: () => options,
|
|
62
|
+
getScriptFileNames: () => [...fileNamesSet],
|
|
63
|
+
getProjectReferences: () => projectReferences,
|
|
64
64
|
};
|
|
65
65
|
const globalComponentSnapshot = ts.ScriptSnapshot.fromString('<script setup lang="ts"></script>');
|
|
66
66
|
const scriptSnapshots = new Map();
|
|
@@ -75,15 +75,15 @@ function baseCreate(ts, getConfigAndFiles, checkerOptions, rootPath, globalCompo
|
|
|
75
75
|
getMetaFileName(globalComponentName),
|
|
76
76
|
];
|
|
77
77
|
};
|
|
78
|
-
const vueLanguagePlugin =
|
|
79
|
-
const language =
|
|
78
|
+
const vueLanguagePlugin = core.createVueLanguagePlugin(ts, projectHost.getCompilationSettings(), vueOptions, id => id);
|
|
79
|
+
const language = core.createLanguage([
|
|
80
80
|
vueLanguagePlugin,
|
|
81
81
|
{
|
|
82
82
|
getLanguageId(fileName) {
|
|
83
83
|
return (0, typescript_1.resolveFileLanguageId)(fileName);
|
|
84
84
|
},
|
|
85
85
|
},
|
|
86
|
-
], new
|
|
86
|
+
], new core.FileMap(ts.sys.useCaseSensitiveFileNames), fileName => {
|
|
87
87
|
let snapshot = scriptSnapshots.get(fileName);
|
|
88
88
|
if (fileName === globalComponentName) {
|
|
89
89
|
snapshot = globalComponentSnapshot;
|
|
@@ -119,7 +119,7 @@ function baseCreate(ts, getConfigAndFiles, checkerOptions, rootPath, globalCompo
|
|
|
119
119
|
const getScriptKind = languageServiceHost.getScriptKind?.bind(languageServiceHost);
|
|
120
120
|
languageServiceHost.getScriptKind = fileName => {
|
|
121
121
|
const scriptKind = getScriptKind(fileName);
|
|
122
|
-
if (
|
|
122
|
+
if (vueOptions.extensions.some(ext => fileName.endsWith(ext))) {
|
|
123
123
|
if (scriptKind === ts.ScriptKind.JS) {
|
|
124
124
|
return ts.ScriptKind.TS;
|
|
125
125
|
}
|
|
@@ -138,17 +138,18 @@ function baseCreate(ts, getConfigAndFiles, checkerOptions, rootPath, globalCompo
|
|
|
138
138
|
fileName = fileName.replace(windowsPathReg, '/');
|
|
139
139
|
scriptSnapshots.set(fileName, ts.ScriptSnapshot.fromString(text));
|
|
140
140
|
// Ensure the file is referenced
|
|
141
|
-
|
|
141
|
+
fileNamesSet.add(fileName);
|
|
142
142
|
projectVersion++;
|
|
143
143
|
},
|
|
144
144
|
deleteFile(fileName) {
|
|
145
145
|
fileName = fileName.replace(windowsPathReg, '/');
|
|
146
|
-
|
|
146
|
+
fileNamesSet.delete(fileName);
|
|
147
147
|
projectVersion++;
|
|
148
148
|
},
|
|
149
149
|
reload() {
|
|
150
|
-
[
|
|
151
|
-
|
|
150
|
+
[{ vueOptions, options, projectReferences }, fileNames] = getConfigAndFiles();
|
|
151
|
+
vueOptions.globalTypesPath = core.createGlobalTypesWriter(vueOptions, ts.sys.writeFile);
|
|
152
|
+
fileNamesSet = new Set(fileNames.map(path => path.replace(windowsPathReg, '/')));
|
|
152
153
|
this.clearCache();
|
|
153
154
|
},
|
|
154
155
|
clearCache() {
|
|
@@ -163,13 +164,18 @@ function baseCreate(ts, getConfigAndFiles, checkerOptions, rootPath, globalCompo
|
|
|
163
164
|
return fileName.endsWith('.meta.ts');
|
|
164
165
|
}
|
|
165
166
|
function getMetaFileName(fileName) {
|
|
166
|
-
return (
|
|
167
|
+
return (vueOptions.extensions.some(ext => fileName.endsWith(ext))
|
|
167
168
|
? fileName
|
|
168
169
|
: fileName.slice(0, fileName.lastIndexOf('.'))) + '.meta.ts';
|
|
169
170
|
}
|
|
170
171
|
function getMetaScriptContent(fileName) {
|
|
172
|
+
const helpersPath = require.resolve('vue-component-type-helpers').replace(windowsPathReg, '/');
|
|
173
|
+
let helpersRelativePath = path_browserify_1.posix.relative(path_browserify_1.posix.dirname(fileName), helpersPath);
|
|
174
|
+
if (!helpersRelativePath.startsWith('./') && !helpersRelativePath.startsWith('../')) {
|
|
175
|
+
helpersRelativePath = './' + helpersRelativePath;
|
|
176
|
+
}
|
|
171
177
|
let code = `
|
|
172
|
-
import type { ComponentType, ComponentProps, ComponentEmit, ComponentSlots, ComponentExposed } from '
|
|
178
|
+
import type { ComponentType, ComponentProps, ComponentEmit, ComponentSlots, ComponentExposed } from '${helpersRelativePath}';
|
|
173
179
|
import type * as Components from '${fileName.slice(0, -'.meta.ts'.length)}';
|
|
174
180
|
|
|
175
181
|
export default {} as { [K in keyof typeof Components]: ComponentMeta<typeof Components[K]>; };
|
|
@@ -258,7 +264,7 @@ interface ComponentMeta<T> {
|
|
|
258
264
|
const { snapshot } = sourceScript;
|
|
259
265
|
const vueFile = sourceScript.generated?.root;
|
|
260
266
|
const vueDefaults = vueFile && exportName === 'default'
|
|
261
|
-
? (vueFile instanceof
|
|
267
|
+
? (vueFile instanceof core.VueVirtualCode ? readVueComponentDefaultProps(vueFile, printer, ts) : {})
|
|
262
268
|
: {};
|
|
263
269
|
const tsDefaults = !vueFile
|
|
264
270
|
? readTsComponentDefaultProps(ts.createSourceFile('/tmp.' + componentPath.slice(componentPath.lastIndexOf('.') + 1), // ts | js | tsx | jsx
|
|
@@ -596,7 +602,7 @@ function readVueComponentDefaultProps(root, printer, ts) {
|
|
|
596
602
|
return;
|
|
597
603
|
}
|
|
598
604
|
const { ast } = sfc.scriptSetup;
|
|
599
|
-
const codegen =
|
|
605
|
+
const codegen = core.tsCodegen.get(sfc);
|
|
600
606
|
const scriptSetupRanges = codegen?.getScriptSetupRanges();
|
|
601
607
|
if (scriptSetupRanges?.withDefaults?.argNode) {
|
|
602
608
|
const obj = findObjectLiteralExpression(scriptSetupRanges.withDefaults.argNode);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vue-component-meta",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"**/*.js",
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@volar/typescript": "2.4.23",
|
|
17
|
-
"@vue/language-core": "3.1.
|
|
17
|
+
"@vue/language-core": "3.1.2",
|
|
18
18
|
"path-browserify": "^1.0.1",
|
|
19
|
-
"vue-component-type-helpers": "3.1.
|
|
19
|
+
"vue-component-type-helpers": "3.1.2"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"typescript": "*"
|
|
@@ -25,5 +25,5 @@
|
|
|
25
25
|
"@types/node": "^22.10.4",
|
|
26
26
|
"@types/path-browserify": "^1.0.1"
|
|
27
27
|
},
|
|
28
|
-
"gitHead": "
|
|
28
|
+
"gitHead": "77db3d889305e8c02740f4c14793bff0156ccdb8"
|
|
29
29
|
}
|
package/lib/helpers.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export type * from 'vue-component-type-helpers';
|
package/lib/helpers.js
DELETED