vue-component-meta 1.9.0-alpha.3 → 2.0.1

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.
@@ -1,14 +1,23 @@
1
- import type { MetaCheckerOptions } from './types';
2
- export * from './types';
1
+ import * as ts from 'typescript';
2
+ import type { MetaCheckerOptions } from './lib/types';
3
+ export * from './lib/types';
4
+ /**
5
+ * @deprecated Use `createCheckerByJson` instead.
6
+ */
7
+ export declare const createComponentMetaCheckerByJsonConfig: typeof createCheckerByJson;
8
+ /**
9
+ * @deprecated Use `createCheckerByJson` instead.
10
+ */
11
+ export declare const createComponentMetaChecker: typeof createChecker;
3
12
  export declare function createCheckerByJson(rootPath: string, json: any, checkerOptions?: MetaCheckerOptions): {
4
13
  updateFile(fileName: string, text: string): void;
5
14
  deleteFile(fileName: string): void;
6
15
  reload(): void;
7
16
  clearCache(): void;
8
17
  getExportNames: (componentPath: string) => string[];
9
- getComponentMeta: (componentPath: string, exportName?: string) => import("./types").ComponentMeta;
18
+ getComponentMeta: (componentPath: string, exportName?: string) => import("./lib/types").ComponentMeta;
10
19
  __internal__: {
11
- tsLs: import("typescript/lib/tsserverlibrary").LanguageService;
20
+ tsLs: ts.LanguageService;
12
21
  };
13
22
  };
14
23
  export declare function createChecker(tsconfig: string, checkerOptions?: MetaCheckerOptions): {
@@ -17,9 +26,8 @@ export declare function createChecker(tsconfig: string, checkerOptions?: MetaChe
17
26
  reload(): void;
18
27
  clearCache(): void;
19
28
  getExportNames: (componentPath: string) => string[];
20
- getComponentMeta: (componentPath: string, exportName?: string) => import("./types").ComponentMeta;
29
+ getComponentMeta: (componentPath: string, exportName?: string) => import("./lib/types").ComponentMeta;
21
30
  __internal__: {
22
- tsLs: import("typescript/lib/tsserverlibrary").LanguageService;
31
+ tsLs: ts.LanguageService;
23
32
  };
24
33
  };
25
- //# sourceMappingURL=index.d.ts.map
@@ -14,12 +14,20 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.createChecker = exports.createCheckerByJson = void 0;
17
+ exports.createChecker = exports.createCheckerByJson = exports.createComponentMetaChecker = exports.createComponentMetaCheckerByJsonConfig = void 0;
18
18
  const ts = require("typescript");
19
- const base_1 = require("./base");
20
- __exportStar(require("./types"), exports);
19
+ const base_1 = require("./lib/base");
20
+ __exportStar(require("./lib/types"), exports);
21
+ /**
22
+ * @deprecated Use `createCheckerByJson` instead.
23
+ */
24
+ exports.createComponentMetaCheckerByJsonConfig = createCheckerByJson;
25
+ /**
26
+ * @deprecated Use `createCheckerByJson` instead.
27
+ */
28
+ exports.createComponentMetaChecker = createChecker;
21
29
  function createCheckerByJson(rootPath, json, checkerOptions = {}) {
22
- return (0, base_1.createCheckerByJsonBase)(ts, rootPath, json, checkerOptions);
30
+ return (0, base_1.createCheckerByJsonConfigBase)(ts, rootPath, json, checkerOptions);
23
31
  }
24
32
  exports.createCheckerByJson = createCheckerByJson;
25
33
  function createChecker(tsconfig, checkerOptions = {}) {
@@ -1,8 +1,8 @@
1
1
  import * as vue from '@vue/language-core';
2
- import type * as ts from 'typescript/lib/tsserverlibrary';
2
+ import type * as ts from 'typescript';
3
3
  import type { MetaCheckerOptions, ComponentMeta } from './types';
4
4
  export * from './types';
5
- export declare function createCheckerByJsonBase(ts: typeof import('typescript/lib/tsserverlibrary'), rootPath: string, json: any, checkerOptions?: MetaCheckerOptions): {
5
+ export declare function createCheckerByJsonConfigBase(ts: typeof import('typescript'), rootDir: string, json: any, checkerOptions?: MetaCheckerOptions): {
6
6
  updateFile(fileName: string, text: string): void;
7
7
  deleteFile(fileName: string): void;
8
8
  reload(): void;
@@ -13,7 +13,7 @@ export declare function createCheckerByJsonBase(ts: typeof import('typescript/li
13
13
  tsLs: ts.LanguageService;
14
14
  };
15
15
  };
16
- export declare function createCheckerBase(ts: typeof import('typescript/lib/tsserverlibrary'), tsconfig: string, checkerOptions?: MetaCheckerOptions): {
16
+ export declare function createCheckerBase(ts: typeof import('typescript'), tsconfig: string, checkerOptions?: MetaCheckerOptions): {
17
17
  updateFile(fileName: string, text: string): void;
18
18
  deleteFile(fileName: string): void;
19
19
  reload(): void;
@@ -24,11 +24,10 @@ export declare function createCheckerBase(ts: typeof import('typescript/lib/tsse
24
24
  tsLs: ts.LanguageService;
25
25
  };
26
26
  };
27
- export declare function baseCreate(ts: typeof import('typescript/lib/tsserverlibrary'), _host: vue.TypeScriptLanguageHost, vueCompilerOptions: vue.VueCompilerOptions, checkerOptions: MetaCheckerOptions, globalComponentName: string): {
27
+ export declare function baseCreate(ts: typeof import('typescript'), configFileName: string | undefined, 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__: {
31
31
  tsLs: ts.LanguageService;
32
32
  };
33
33
  };
34
- //# sourceMappingURL=base.d.ts.map
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.baseCreate = exports.createCheckerBase = exports.createCheckerByJsonBase = void 0;
17
+ exports.baseCreate = exports.createCheckerBase = exports.createCheckerByJsonConfigBase = void 0;
18
18
  const vue = require("@vue/language-core");
19
19
  const path = require("path-browserify");
20
20
  const vue_component_type_helpers_1 = require("vue-component-type-helpers");
@@ -22,17 +22,17 @@ const vue2_1 = require("vue-component-type-helpers/vue2");
22
22
  const typescript_1 = require("@volar/typescript");
23
23
  __exportStar(require("./types"), exports);
24
24
  const windowsPathReg = /\\/g;
25
- function createCheckerByJsonBase(ts, rootPath, json, checkerOptions = {}) {
26
- rootPath = rootPath.replace(windowsPathReg, '/');
27
- return createCheckerWorker(ts, () => vue.createParsedCommandLineByJson(ts, ts.sys, rootPath, json), checkerOptions, rootPath, path.join(rootPath, 'jsconfig.json.global.vue'));
25
+ function createCheckerByJsonConfigBase(ts, rootDir, json, checkerOptions = {}) {
26
+ rootDir = rootDir.replace(windowsPathReg, '/');
27
+ return createCheckerWorker(ts, () => vue.createParsedCommandLineByJson(ts, ts.sys, rootDir, json), checkerOptions, rootDir, path.join(rootDir, 'jsconfig.json.global.vue'), undefined);
28
28
  }
29
- exports.createCheckerByJsonBase = createCheckerByJsonBase;
29
+ exports.createCheckerByJsonConfigBase = createCheckerByJsonConfigBase;
30
30
  function createCheckerBase(ts, tsconfig, checkerOptions = {}) {
31
31
  tsconfig = tsconfig.replace(windowsPathReg, '/');
32
- return createCheckerWorker(ts, () => vue.createParsedCommandLine(ts, ts.sys, tsconfig), checkerOptions, path.dirname(tsconfig), tsconfig + '.global.vue');
32
+ return createCheckerWorker(ts, () => vue.createParsedCommandLine(ts, ts.sys, tsconfig), checkerOptions, path.dirname(tsconfig), tsconfig + '.global.vue', tsconfig);
33
33
  }
34
34
  exports.createCheckerBase = createCheckerBase;
35
- function createCheckerWorker(ts, loadParsedCommandLine, checkerOptions, rootPath, globalComponentName) {
35
+ function createCheckerWorker(ts, loadParsedCommandLine, checkerOptions, rootPath, globalComponentName, configFileName) {
36
36
  /**
37
37
  * Original Host
38
38
  */
@@ -41,8 +41,7 @@ function createCheckerWorker(ts, loadParsedCommandLine, checkerOptions, rootPath
41
41
  let projectVersion = 0;
42
42
  const scriptSnapshots = new Map();
43
43
  const _host = {
44
- workspacePath: rootPath,
45
- rootPath: rootPath,
44
+ getCurrentDirectory: () => rootPath,
46
45
  getProjectVersion: () => projectVersion.toString(),
47
46
  getCompilationSettings: () => parsedCommandLine.options,
48
47
  getScriptFileNames: () => fileNames,
@@ -56,9 +55,10 @@ function createCheckerWorker(ts, loadParsedCommandLine, checkerOptions, rootPath
56
55
  }
57
56
  return scriptSnapshots.get(fileName);
58
57
  },
58
+ getLanguageId: vue.resolveCommonLanguageId,
59
59
  };
60
60
  return {
61
- ...baseCreate(ts, _host, vue.resolveVueCompilerOptions(parsedCommandLine.vueOptions), checkerOptions, globalComponentName),
61
+ ...baseCreate(ts, configFileName, _host, vue.resolveVueCompilerOptions(parsedCommandLine.vueOptions), checkerOptions, globalComponentName),
62
62
  updateFile(fileName, text) {
63
63
  fileName = fileName.replace(windowsPathReg, '/');
64
64
  scriptSnapshots.set(fileName, ts.ScriptSnapshot.fromString(text));
@@ -80,49 +80,44 @@ function createCheckerWorker(ts, loadParsedCommandLine, checkerOptions, rootPath
80
80
  },
81
81
  };
82
82
  }
83
- function baseCreate(ts, _host, vueCompilerOptions, checkerOptions, globalComponentName) {
83
+ function baseCreate(ts, configFileName, host, vueCompilerOptions, checkerOptions, globalComponentName) {
84
84
  const globalComponentSnapshot = ts.ScriptSnapshot.fromString('<script setup lang="ts"></script>');
85
85
  const metaSnapshots = {};
86
- const host = new Proxy({
87
- getScriptFileNames: () => {
88
- const names = _host.getScriptFileNames();
89
- return [
90
- ...names,
91
- ...names.map(getMetaFileName),
92
- globalComponentName,
93
- getMetaFileName(globalComponentName),
94
- ];
95
- },
96
- getScriptSnapshot: fileName => {
97
- if (isMetaFileName(fileName)) {
98
- if (!metaSnapshots[fileName]) {
99
- metaSnapshots[fileName] = ts.ScriptSnapshot.fromString(getMetaScriptContent(fileName));
100
- }
101
- return metaSnapshots[fileName];
102
- }
103
- else if (fileName === globalComponentName) {
104
- return globalComponentSnapshot;
105
- }
106
- else {
107
- return _host.getScriptSnapshot(fileName);
108
- }
109
- },
110
- }, {
111
- get(target, prop) {
112
- if (prop in target) {
113
- return target[prop];
86
+ const getScriptFileNames = host.getScriptFileNames;
87
+ const getScriptSnapshot = host.getScriptSnapshot;
88
+ host.getScriptFileNames = () => {
89
+ const names = getScriptFileNames();
90
+ return [
91
+ ...names,
92
+ ...names.map(getMetaFileName),
93
+ globalComponentName,
94
+ getMetaFileName(globalComponentName),
95
+ ];
96
+ };
97
+ host.getScriptSnapshot = (fileName) => {
98
+ if (isMetaFileName(fileName)) {
99
+ if (!metaSnapshots[fileName]) {
100
+ metaSnapshots[fileName] = ts.ScriptSnapshot.fromString(getMetaScriptContent(fileName));
114
101
  }
115
- return _host[prop];
116
- },
102
+ return metaSnapshots[fileName];
103
+ }
104
+ else if (fileName === globalComponentName) {
105
+ return globalComponentSnapshot;
106
+ }
107
+ else {
108
+ return getScriptSnapshot(fileName);
109
+ }
110
+ };
111
+ const vueLanguagePlugin = vue.createVueLanguagePlugin(ts, id => id, host.getCompilationSettings(), vueCompilerOptions);
112
+ const language = (0, typescript_1.createLanguage)(ts, ts.sys, [vueLanguagePlugin], configFileName, host, {
113
+ fileIdToFileName: id => id,
114
+ fileNameToFileId: id => id,
117
115
  });
118
- const vueLanguages = vue.createLanguages(ts, host.getCompilationSettings(), vueCompilerOptions);
119
- const core = vue.createLanguageContext(host, vueLanguages);
120
- const tsLsHost = (0, typescript_1.createLanguageServiceHost)(core, ts, ts.sys);
121
- const tsLs = ts.createLanguageService(tsLsHost);
122
- (0, typescript_1.decorateLanguageService)(core.virtualFiles, tsLs, false);
116
+ const { languageServiceHost } = language.typescript;
117
+ const tsLs = ts.createLanguageService(languageServiceHost);
123
118
  if (checkerOptions.forceUseTs) {
124
- const getScriptKind = tsLsHost.getScriptKind;
125
- tsLsHost.getScriptKind = (fileName) => {
119
+ const getScriptKind = languageServiceHost.getScriptKind?.bind(languageServiceHost);
120
+ languageServiceHost.getScriptKind = (fileName) => {
126
121
  if (fileName.endsWith('.vue.js')) {
127
122
  return ts.ScriptKind.TS;
128
123
  }
@@ -217,7 +212,7 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
217
212
  const properties = type.getProperties();
218
213
  result = properties
219
214
  .map((prop) => {
220
- const { resolveNestedProperties, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, core);
215
+ const { resolveNestedProperties, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, language);
221
216
  return resolveNestedProperties(prop);
222
217
  })
223
218
  .filter((prop) => !prop.name.match(propEventRegex));
@@ -232,11 +227,11 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
232
227
  // fill defaults
233
228
  const printer = ts.createPrinter(checkerOptions.printer);
234
229
  const snapshot = host.getScriptSnapshot(componentPath);
235
- const vueSourceFile = core.virtualFiles.getSource(componentPath)?.root;
236
- const vueDefaults = vueSourceFile && exportName === 'default'
237
- ? (vueSourceFile instanceof vue.VueFile ? readVueComponentDefaultProps(vueSourceFile, printer, ts, vueCompilerOptions) : {})
230
+ const vueFile = language.files.get(componentPath)?.generated?.code;
231
+ const vueDefaults = vueFile && exportName === 'default'
232
+ ? (vueFile instanceof vue.VueGeneratedCode ? readVueComponentDefaultProps(vueFile, printer, ts, vueCompilerOptions) : {})
238
233
  : {};
239
- const tsDefaults = !vueSourceFile ? readTsComponentDefaultProps(componentPath.substring(componentPath.lastIndexOf('.') + 1), // ts | js | tsx | jsx
234
+ const tsDefaults = !vueFile ? readTsComponentDefaultProps(componentPath.substring(componentPath.lastIndexOf('.') + 1), // ts | js | tsx | jsx
240
235
  snapshot.getText(0, snapshot.getLength()), exportName, printer, ts) : {};
241
236
  for (const [propName, defaultExp] of Object.entries({
242
237
  ...vueDefaults,
@@ -261,7 +256,7 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
261
256
  const type = typeChecker.getTypeOfSymbolAtLocation($emit, symbolNode);
262
257
  const calls = type.getCallSignatures();
263
258
  return calls.map((call) => {
264
- const { resolveEventSignature, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, core);
259
+ const { resolveEventSignature, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, language);
265
260
  return resolveEventSignature(call);
266
261
  }).filter(event => event.name);
267
262
  }
@@ -273,7 +268,7 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
273
268
  const type = typeChecker.getTypeOfSymbolAtLocation($slots, symbolNode);
274
269
  const properties = type.getProperties();
275
270
  return properties.map((prop) => {
276
- const { resolveSlotProperties, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, core);
271
+ const { resolveSlotProperties, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, language);
277
272
  return resolveSlotProperties(prop);
278
273
  });
279
274
  }
@@ -287,7 +282,7 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
287
282
  // only exposed props will not have a valueDeclaration
288
283
  !prop.valueDeclaration);
289
284
  return properties.map((prop) => {
290
- const { resolveExposedProperties, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, core);
285
+ const { resolveExposedProperties, } = createSchemaResolvers(typeChecker, symbolNode, checkerOptions, ts, language);
291
286
  return resolveExposedProperties(prop);
292
287
  });
293
288
  }
@@ -323,7 +318,7 @@ ${vueCompilerOptions.target < 3 ? vue2_1.code : vue_component_type_helpers_1.cod
323
318
  }
324
319
  }
325
320
  exports.baseCreate = baseCreate;
326
- function createSchemaResolvers(typeChecker, symbolNode, { rawType, schema: options, noDeclarations }, ts, core) {
321
+ function createSchemaResolvers(typeChecker, symbolNode, { rawType, schema: options, noDeclarations }, ts, context) {
327
322
  const visited = new Set();
328
323
  function shouldIgnore(subtype) {
329
324
  const name = typeChecker.typeToString(subtype);
@@ -493,19 +488,22 @@ function createSchemaResolvers(typeChecker, symbolNode, { rawType, schema: optio
493
488
  }
494
489
  function getDeclaration(declaration) {
495
490
  const fileName = declaration.getSourceFile().fileName;
496
- const [virtualFile] = core.virtualFiles.getVirtualFile(fileName);
497
- if (virtualFile) {
498
- const maps = core.virtualFiles.getMaps(virtualFile);
499
- for (const [source, [_, map]] of maps) {
500
- const start = map.toSourceOffset(declaration.getStart());
501
- const end = map.toSourceOffset(declaration.getEnd());
502
- if (start && end) {
503
- return {
504
- file: source,
505
- range: [start[0], end[0]],
506
- };
491
+ const sourceFile = context.files.get(fileName);
492
+ if (sourceFile?.generated) {
493
+ const script = sourceFile.generated.languagePlugin.typescript?.getScript(sourceFile.generated.code);
494
+ if (script) {
495
+ const maps = context.files.getMaps(script.code);
496
+ for (const [source, [_, map]] of maps) {
497
+ const start = map.getSourceOffset(declaration.getStart());
498
+ const end = map.getSourceOffset(declaration.getEnd());
499
+ if (start && end) {
500
+ return {
501
+ file: source,
502
+ range: [start[0], end[0]],
503
+ };
504
+ }
505
+ ;
507
506
  }
508
- ;
509
507
  }
510
508
  return undefined;
511
509
  }
@@ -1,5 +1,5 @@
1
- import type * as ts from 'typescript/lib/tsserverlibrary';
2
- export type Checker = ReturnType<typeof import('./base')['baseCreate']>;
1
+ import type * as ts from 'typescript';
2
+ export type ComponentMetaChecker = ReturnType<typeof import('./base')['baseCreate']>;
3
3
  export interface Declaration {
4
4
  file: string;
5
5
  range: [number, number];
@@ -86,4 +86,3 @@ export interface MetaCheckerOptions {
86
86
  rawType?: boolean;
87
87
  noDeclarations?: boolean;
88
88
  }
89
- //# sourceMappingURL=types.d.ts.map
package/package.json CHANGED
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "name": "vue-component-meta",
3
- "version": "1.9.0-alpha.3",
4
- "main": "out/index.js",
3
+ "version": "2.0.1",
5
4
  "license": "MIT",
6
5
  "files": [
7
- "out/**/*.js",
8
- "out/**/*.d.ts"
6
+ "**/*.js",
7
+ "**/*.d.ts"
9
8
  ],
10
9
  "repository": {
11
10
  "type": "git",
@@ -13,10 +12,10 @@
13
12
  "directory": "packages/component-meta"
14
13
  },
15
14
  "dependencies": {
16
- "@volar/typescript": "~1.11.0",
17
- "@vue/language-core": "1.9.0-alpha.3",
15
+ "@volar/typescript": "~2.1.0",
16
+ "@vue/language-core": "2.0.1",
18
17
  "path-browserify": "^1.0.1",
19
- "vue-component-type-helpers": "1.9.0-alpha.3"
18
+ "vue-component-type-helpers": "2.0.1"
20
19
  },
21
20
  "peerDependencies": {
22
21
  "typescript": "*"
@@ -30,5 +29,5 @@
30
29
  "@types/node": "latest",
31
30
  "@types/path-browserify": "latest"
32
31
  },
33
- "gitHead": "cf6564bc8c649151c2e72a93d0aa482d4a59a773"
32
+ "gitHead": "adedfd0983c910370d080e955702cca7d2275420"
34
33
  }
File without changes