From 6eaa22ee27c7b35038193ffd0cac03cdda07f19d Mon Sep 17 00:00:00 2001 From: Romain Hamel Date: Thu, 25 Sep 2025 00:26:20 +0200 Subject: [PATCH 1/2] fix(meta): downgrade vue-component-meta --- packages/meta/package.json | 6 +- packages/meta/src/base.ts | 293 +++++++++++++++---------------------- pnpm-lock.yaml | 48 +++--- 3 files changed, 148 insertions(+), 199 deletions(-) diff --git a/packages/meta/package.json b/packages/meta/package.json index a8a1be7d..e90e7141 100644 --- a/packages/meta/package.json +++ b/packages/meta/package.json @@ -26,11 +26,11 @@ }, "dependencies": { "@volar/typescript": "^2.4.23", - "@vue/language-core": "3.0.8", + "@vue/language-core": "2.2.12", "path-browserify": "^1.0.1", "pathe": "^2.0.3", - "vue-component-meta": "^3.0.8", - "vue-component-type-helpers": "^3.0.8" + "vue-component-meta": "^2.2.12", + "vue-component-type-helpers": "^2.2.12" }, "devDependencies": { "@types/path-browserify": "^1.0.3" diff --git a/packages/meta/src/base.ts b/packages/meta/src/base.ts index 210bcb10..e294fd13 100644 --- a/packages/meta/src/base.ts +++ b/packages/meta/src/base.ts @@ -1,9 +1,10 @@ -import { createLanguageServiceHost, resolveFileLanguageId, type TypeScriptProjectHost } from '@volar/typescript' +import type { TypeScriptProjectHost } from '@volar/typescript' +import { createLanguageServiceHost, resolveFileLanguageId } from '@volar/typescript' import * as vue from '@vue/language-core' -import pathBrowserify from 'path-browserify' -import type * as ts from 'typescript' - -const { posix: path } = pathBrowserify +import path from 'pathe' +import type ts from 'typescript' +import { code as typeHelpersCode } from 'vue-component-type-helpers' +import { code as vue2TypeHelpersCode } from 'vue-component-type-helpers/vue2.js' import type { ComponentMeta, @@ -27,24 +28,7 @@ export function createCheckerByJsonConfigBase( rootDir = rootDir.replace(windowsPathReg, '/') return baseCreate( ts, - () => { - const commandLine = vue.createParsedCommandLineByJson(ts, ts.sys, rootDir, json) - const { fileNames } = ts.parseJsonConfigFileContent( - json, - ts.sys, - rootDir, - {}, - undefined, - undefined, - vue.getAllExtensions(commandLine.vueOptions) - .map(extension => ({ - extension: extension.slice(1), - isMixedContent: true, - scriptKind: ts.ScriptKind.Deferred - })) - ) - return [commandLine, fileNames] - }, + () => vue.createParsedCommandLineByJson(ts, ts.sys, rootDir, json, undefined, true), checkerOptions, rootDir, path.join(rootDir, 'jsconfig.json.global.vue') @@ -59,54 +43,29 @@ export function createCheckerBase( tsconfig = tsconfig.replace(windowsPathReg, '/') return baseCreate( ts, - () => { - const commandLine = vue.createParsedCommandLine(ts, ts.sys, tsconfig) - const { fileNames } = ts.parseJsonSourceFileConfigFileContent( - ts.readJsonConfigFile(tsconfig, ts.sys.readFile), - ts.sys, - path.dirname(tsconfig), - {}, - tsconfig, - undefined, - vue.getAllExtensions(commandLine.vueOptions) - .map(extension => ({ - extension: extension.slice(1), - isMixedContent: true, - scriptKind: ts.ScriptKind.Deferred - })) - ) - return [commandLine, fileNames] - }, + () => vue.createParsedCommandLine(ts, ts.sys, tsconfig, true), checkerOptions, path.dirname(tsconfig), tsconfig + '.global.vue' ) } -function baseCreate( +export function baseCreate( ts: typeof import('typescript'), - getConfigAndFiles: () => [ - commandLine: vue.ParsedCommandLine, - fileNames: string[] - ], + getCommandLine: () => vue.ParsedCommandLine, checkerOptions: MetaCheckerOptions, rootPath: string, globalComponentName: string ) { - let [commandLine, _fileNames] = getConfigAndFiles() - /** - * Used to lookup if a file is referenced. - */ - let fileNames = new Set(_fileNames.map(path => path.replace(windowsPathReg, '/'))) + let commandLine = getCommandLine() + let fileNames = commandLine.fileNames.map(path => path.replace(windowsPathReg, '/')) let projectVersion = 0 - vue.writeGlobalTypes(commandLine.vueOptions, ts.sys.writeFile) - const projectHost: TypeScriptProjectHost = { getCurrentDirectory: () => rootPath, getProjectVersion: () => projectVersion.toString(), - getCompilationSettings: () => commandLine.options as any, - getScriptFileNames: () => [...fileNames], + getCompilationSettings: () => commandLine.options, + getScriptFileNames: () => fileNames, getProjectReferences: () => commandLine.projectReferences } const globalComponentSnapshot = ts.ScriptSnapshot.fromString('') @@ -125,7 +84,7 @@ function baseCreate( const vueLanguagePlugin = vue.createVueLanguagePlugin( ts, - projectHost.getCompilationSettings() as any, + projectHost.getCompilationSettings(), commandLine.vueOptions, id => id ) @@ -168,8 +127,39 @@ function baseCreate( } } ) - const { languageServiceHost } = createLanguageServiceHost(ts as any, ts.sys, language, s => s, projectHost) - const tsLs = ts.createLanguageService(languageServiceHost as any) + const { languageServiceHost } = createLanguageServiceHost(ts, ts.sys, language, s => s, projectHost) + const tsLs = ts.createLanguageService(languageServiceHost) + + const directoryExists = languageServiceHost.directoryExists?.bind(languageServiceHost) + const fileExists = languageServiceHost.fileExists.bind(languageServiceHost) + const getScriptSnapshot = languageServiceHost.getScriptSnapshot.bind(languageServiceHost) + const globalTypesName = vue.getGlobalTypesFileName(commandLine.vueOptions) + const globalTypesContents = `// @ts-nocheck\nexport {};\n` + vue.generateGlobalTypes(commandLine.vueOptions) + const globalTypesSnapshot: ts.IScriptSnapshot = { + getText: (start, end) => globalTypesContents.slice(start, end), + getLength: () => globalTypesContents.length, + getChangeRange: () => undefined + } + if (directoryExists) { + languageServiceHost.directoryExists = (path) => { + if (path.endsWith('.vue-global-types')) { + return true + } + return directoryExists(path) + } + } + languageServiceHost.fileExists = (path) => { + if (path.endsWith(`.vue-global-types/${globalTypesName}`) || path.endsWith(`.vue-global-types\\${globalTypesName}`)) { + return true + } + return fileExists(path) + } + languageServiceHost.getScriptSnapshot = (path) => { + if (path.endsWith(`.vue-global-types/${globalTypesName}`) || path.endsWith(`.vue-global-types\\${globalTypesName}`)) { + return globalTypesSnapshot + } + return getScriptSnapshot(path) + } if (checkerOptions.forceUseTs) { const getScriptKind = languageServiceHost.getScriptKind?.bind(languageServiceHost) @@ -195,18 +185,16 @@ function baseCreate( updateFile(fileName: string, text: string) { fileName = fileName.replace(windowsPathReg, '/') scriptSnapshots.set(fileName, ts.ScriptSnapshot.fromString(text)) - // Ensure the file is referenced - fileNames.add(fileName) projectVersion++ }, deleteFile(fileName: string) { fileName = fileName.replace(windowsPathReg, '/') - fileNames.delete(fileName) + fileNames = fileNames.filter(f => f !== fileName) projectVersion++ }, reload() { - [commandLine, _fileNames] = getConfigAndFiles() - fileNames = new Set(_fileNames.map(path => path.replace(windowsPathReg, '/'))) + commandLine = getCommandLine() + fileNames = commandLine.fileNames.map(path => path.replace(windowsPathReg, '/')) this.clearCache() }, clearCache() { @@ -232,9 +220,7 @@ function baseCreate( function getMetaScriptContent(fileName: string) { const code = ` -import type { ComponentType, ComponentProps, ComponentEmit, ComponentSlots, ComponentExposed } from 'vue-component-meta/lib/helpers'; -import type * as Components from '${fileName.slice(0, -'.meta.ts'.length)}'; - +import * as Components from '${fileName.slice(0, -'.meta.ts'.length)}'; export default {} as { [K in keyof typeof Components]: ComponentMeta; }; interface ComponentMeta { @@ -243,7 +229,9 @@ interface ComponentMeta { emit: ComponentEmit; slots: ComponentSlots; exposed: ComponentExposed; -} +}; + +${commandLine.vueOptions.target < 3 ? vue2TypeHelpersCode : typeHelpersCode} `.trim() return code } @@ -254,7 +242,6 @@ interface ComponentMeta { return _getExports(program, typeChecker, componentPath).exports.map(e => e.getName()) } - /// >>>> Start compodium patch function getComponentMeta(componentPath: string, exportName = 'default'): ComponentMeta & { compodium?: Record } { const program = tsLs.getProgram()! const typeChecker = program.getTypeChecker() @@ -262,7 +249,7 @@ interface ComponentMeta { const _export = exports.find(property => property.getName() === exportName) if (!_export) { - throw `Could not find export ${exportName}` + throw `[Compodium] Could not find export ${exportName}` } const componentType = typeChecker.getTypeOfSymbolAtLocation(_export, symbolNode) @@ -275,7 +262,7 @@ interface ComponentMeta { let _exposed: ReturnType | undefined let _compodium: Record | undefined - const meta = { + return { get type() { return _type ?? (_type = getType()) }, @@ -291,13 +278,21 @@ interface ComponentMeta { get exposed() { return _exposed ?? (_exposed = getExposed()) }, - get compodium() { return _compodium ?? (_compodium = getCompodiumMeta()) } } - return meta + function getType() { + const $type = symbolProperties.find(prop => prop.escapedName === 'type') + + if ($type) { + const type = typeChecker.getTypeOfSymbolAtLocation($type, symbolNode) + return Number(typeChecker.typeToString(type)) + } + + return 0 + } function getCompodiumMeta(): Record | undefined { const snapshot = language.scripts.get(componentPath)?.snapshot @@ -383,32 +378,16 @@ interface ComponentMeta { // Traverse the AST to find and transform the object literal return traverse(node) } - /// >>>> End Compodium patch - - function getType() { - const $type = symbolProperties.find(prop => prop.escapedName === 'type') - - if ($type) { - const type = typeChecker.getTypeOfSymbolAtLocation($type, symbolNode) - return Number(typeChecker.typeToString(type)) - } - - return 0 - } function getProps() { const $props = symbolProperties.find(prop => prop.escapedName === 'props') - const vnodeEventRegex = /^onVnode[A-Z]/ + const propEventRegex = /^on[A-Z]/ let result: PropertyMeta[] = [] if ($props) { const type = typeChecker.getTypeOfSymbolAtLocation($props, symbolNode) const properties = type.getProperties() - const eventProps = new Set( - meta.events.map(event => `on${event.name.charAt(0).toUpperCase()}${event.name.slice(1)}`) - ) - result = properties .map((prop) => { const { @@ -417,12 +396,12 @@ interface ComponentMeta { return resolveNestedProperties(prop) }) - .filter(prop => !vnodeEventRegex.test(prop.name) && !eventProps.has(prop.name)) + .filter(prop => !propEventRegex.test(prop.name)) } // fill global if (componentPath !== globalComponentName) { - globalPropNames ??= getComponentMeta(globalComponentName).props.map(prop => prop.name) + globalPropNames ??= getComponentMeta(globalComponentName).props.map((prop: any) => prop.name) for (const prop of result) { prop.global = globalPropNames.includes(prop.name) } @@ -450,12 +429,10 @@ interface ComponentMeta { ) : {} - for ( - const [propName, defaultExp] of Object.entries({ - ...vueDefaults, - ...tsDefaults - }) - ) { + for (const [propName, defaultExp] of Object.entries({ + ...vueDefaults, + ...tsDefaults + })) { const prop = result.find(p => p.name === propName) if (prop) { prop.default = defaultExp.default @@ -539,14 +516,14 @@ interface ComponentMeta { typeChecker: ts.TypeChecker, componentPath: string ) { - const sourceFile = program.getSourceFile(getMetaFileName(componentPath)) + const sourceFile = program?.getSourceFile(getMetaFileName(componentPath)) if (!sourceFile) { - throw 'Could not find main source file' + throw '[Compodium] Could not find main source file' } const moduleSymbol = typeChecker.getSymbolAtLocation(sourceFile) if (!moduleSymbol) { - throw 'Could not find module symbol' + throw '[Compodium] Could not find module symbol' } const exportedSymbols = typeChecker.getExportsOfModule(moduleSymbol) @@ -562,7 +539,7 @@ interface ComponentMeta { } if (!symbolNode) { - throw 'Could not find symbol node' + throw '[Compodium] Could not find symbol node' } const exportDefaultType = typeChecker.getTypeAtLocation(symbolNode) @@ -585,7 +562,7 @@ function createSchemaResolvers( const visited = new Set() function shouldIgnore(subtype: ts.Type) { - const name = getFullyQualifiedName(subtype) + const name = typeChecker.typeToString(subtype) if (name === 'any') { return true } @@ -617,8 +594,8 @@ function createSchemaResolvers( function resolveNestedProperties(prop: ts.Symbol): PropertyMeta { const subtype = typeChecker.getTypeOfSymbolAtLocation(prop, symbolNode) - let schema: PropertyMetaSchema | undefined - let declarations: Declaration[] | undefined + let schema: PropertyMetaSchema + let declarations: Declaration[] return { name: prop.getEscapedName().toString(), @@ -629,7 +606,7 @@ function createSchemaResolvers( text: tag.text !== undefined ? ts.displayPartsToString(tag.text) : undefined })), required: !(prop.flags & ts.SymbolFlags.Optional), - type: getFullyQualifiedName(subtype), + type: typeChecker.typeToString(subtype), rawType: rawType ? subtype : undefined, get declarations() { return declarations ??= getDeclarations(prop.declarations ?? []) @@ -644,12 +621,12 @@ function createSchemaResolvers( const signatures = propType.getCallSignatures() const paramType = signatures[0]?.parameters[0] const subtype = paramType ? typeChecker.getTypeOfSymbolAtLocation(paramType, symbolNode) : typeChecker.getAnyType() - let schema: PropertyMetaSchema | undefined - let declarations: Declaration[] | undefined + let schema: PropertyMetaSchema + let declarations: Declaration[] return { name: prop.getName(), - type: getFullyQualifiedName(subtype), + type: typeChecker.typeToString(subtype), rawType: rawType ? subtype : undefined, description: ts.displayPartsToString(prop.getDocumentationComment(typeChecker)), get declarations() { @@ -662,12 +639,12 @@ function createSchemaResolvers( } function resolveExposedProperties(expose: ts.Symbol): ExposeMeta { const subtype = typeChecker.getTypeOfSymbolAtLocation(expose, symbolNode) - let schema: PropertyMetaSchema | undefined - let declarations: Declaration[] | undefined + let schema: PropertyMetaSchema + let declarations: Declaration[] return { name: expose.getName(), - type: getFullyQualifiedName(subtype), + type: typeChecker.typeToString(subtype), rawType: rawType ? subtype : undefined, description: ts.displayPartsToString(expose.getDocumentationComment(typeChecker)), get declarations() { @@ -679,49 +656,25 @@ function createSchemaResolvers( } } function resolveEventSignature(call: ts.Signature): EventMeta { - let schema: PropertyMetaSchema[] | undefined - let declarations: Declaration[] | undefined - let subtype = undefined - let subtypeStr = '[]' - let getSchema = () => [] as PropertyMetaSchema[] - - if (call.parameters.length >= 2) { - subtype = typeChecker.getTypeOfSymbolAtLocation(call.parameters[1]!, symbolNode) - if ((call.parameters[1]!.valueDeclaration as any)?.dotDotDotToken) { - subtypeStr = getFullyQualifiedName(subtype) - getSchema = () => typeChecker.getTypeArguments(subtype! as ts.TypeReference).map(resolveSchema) - } else { - subtypeStr = '[' - for (let i = 1; i < call.parameters.length; i++) { - subtypeStr += getFullyQualifiedName(typeChecker.getTypeOfSymbolAtLocation(call.parameters[i]!, symbolNode)) - + ', ' - } - subtypeStr = subtypeStr.slice(0, -2) + ']' - getSchema = () => { - const result: PropertyMetaSchema[] = [] - for (let i = 1; i < call.parameters.length; i++) { - result.push(resolveSchema(typeChecker.getTypeOfSymbolAtLocation(call.parameters[i]!, symbolNode))) - } - return result - } - } - } + const subtype = typeChecker.getTypeOfSymbolAtLocation(call.parameters[1] as ts.Symbol, symbolNode) + let schema: PropertyMetaSchema[] + let declarations: Declaration[] return { - name: (typeChecker.getTypeOfSymbolAtLocation(call.parameters[0]!, symbolNode) as ts.StringLiteralType).value, + name: (typeChecker.getTypeOfSymbolAtLocation(call.parameters[0] as ts.Symbol, symbolNode) as ts.StringLiteralType).value, description: ts.displayPartsToString(call.getDocumentationComment(typeChecker)), tags: call.getJsDocTags().map(tag => ({ name: tag.name, text: tag.text !== undefined ? ts.displayPartsToString(tag.text) : undefined })), - type: subtypeStr, + type: typeChecker.typeToString(subtype), rawType: rawType ? subtype : undefined, signature: typeChecker.signatureToString(call), get declarations() { return declarations ??= call.declaration ? getDeclarations([call.declaration]) : [] }, get schema() { - return schema ??= getSchema() + return schema ??= typeChecker.getTypeArguments(subtype as ts.TypeReference).map(resolveSchema) } } } @@ -732,18 +685,16 @@ function createSchemaResolvers( kind: 'event', type: typeChecker.signatureToString(signature), get schema() { - return schema ??= signature.parameters.length + return schema ??= signature.parameters.length > 0 ? typeChecker - .getTypeArguments( - typeChecker.getTypeOfSymbolAtLocation(signature.parameters[0]!, symbolNode) as ts.TypeReference - ) + .getTypeArguments(typeChecker.getTypeOfSymbolAtLocation(signature.parameters[0] as ts.Symbol, symbolNode) as ts.TypeReference) .map(resolveSchema) : undefined } } } function resolveSchema(subtype: ts.Type): PropertyMetaSchema { - const type = getFullyQualifiedName(subtype) + const type = typeChecker.typeToString(subtype) if (shouldIgnore(subtype)) { return type @@ -752,7 +703,7 @@ function createSchemaResolvers( visited.add(subtype) if (subtype.isUnion()) { - let schema: PropertyMetaSchema[] | undefined + let schema: PropertyMetaSchema[] return { kind: 'enum', type, @@ -761,7 +712,7 @@ function createSchemaResolvers( } } } else if (typeChecker.isArrayLikeType(subtype)) { - let schema: PropertyMetaSchema[] | undefined + let schema: PropertyMetaSchema[] return { kind: 'array', type, @@ -771,10 +722,9 @@ function createSchemaResolvers( } } else if ( subtype.getCallSignatures().length === 0 - && (subtype.isClassOrInterface() || subtype.isIntersection() - || (subtype as ts.ObjectType).objectFlags & ts.ObjectFlags.Anonymous) + && (subtype.isClassOrInterface() || subtype.isIntersection() || (subtype as ts.ObjectType).objectFlags & ts.ObjectFlags.Anonymous) ) { - let schema: Record | undefined + let schema: Record return { kind: 'object', type, @@ -783,22 +733,11 @@ function createSchemaResolvers( } } } else if (subtype.getCallSignatures().length === 1) { - return resolveCallbackSchema(subtype.getCallSignatures()[0]!) + return resolveCallbackSchema(subtype.getCallSignatures()[0] as ts.Signature) } return type } - function getFullyQualifiedName(type: ts.Type) { - const str = typeChecker.typeToString( - type, - undefined, - ts.TypeFormatFlags.UseFullyQualifiedType | ts.TypeFormatFlags.NoTruncation - ) - if (str.includes('import(')) { - return str.replace(/import\(.*?\)\./g, '') - } - return str - } function getDeclarations(declaration: ts.Declaration[]) { if (noDeclarations) { return [] @@ -898,13 +837,12 @@ function readVueComponentDefaultProps( } } - if (scriptSetupRanges?.defineModel) { - for (const defineModel of scriptSetupRanges.defineModel) { - const obj = defineModel.argNode ? findObjectLiteralExpression(defineModel.argNode) : undefined + if (scriptSetupRanges?.defineProp) { + for (const defineProp of scriptSetupRanges.defineProp) { + const argNode = (defineProp as any).argNode + const obj = argNode ? findObjectLiteralExpression(argNode) : undefined if (obj) { - const name = defineModel.name - ? sfc.scriptSetup.content.slice(defineModel.name.start, defineModel.name.end).slice(1, -1) - : 'modelValue' + const name = defineProp.name ? sfc.scriptSetup.content.slice(defineProp.name.start, defineProp.name.end).slice(1, -1) : 'modelValue' result[name] = resolveModelOption(ast, obj, printer, ts) } } @@ -985,10 +923,11 @@ function readTsComponentDefaultProps( // export default { ... } if (ts.isObjectLiteralExpression(component)) return component // export default defineComponent({ ... }) + // export default Vue.extend({ ... }) else if (ts.isCallExpression(component)) { if (component.arguments.length) { - const arg = component.arguments[0]! - if (ts.isObjectLiteralExpression(arg)) { + const arg = component.arguments[0] + if (arg && ts.isObjectLiteralExpression(arg)) { return arg } } @@ -1017,14 +956,10 @@ function resolvePropsOption( for (const prop of props.properties) { if (ts.isPropertyAssignment(prop)) { - const name = prop.name.getText(ast) + const name = prop.name?.getText(ast) if (ts.isObjectLiteralExpression(prop.initializer)) { - const defaultProp = prop.initializer.properties.find(p => - ts.isPropertyAssignment(p) && p.name.getText(ast) === 'default' - ) as ts.PropertyAssignment | undefined - const requiredProp = prop.initializer.properties.find(p => - ts.isPropertyAssignment(p) && p.name.getText(ast) === 'required' - ) as ts.PropertyAssignment | undefined + const defaultProp = prop.initializer.properties.find(p => ts.isPropertyAssignment(p) && p.name.getText(ast) === 'default') as ts.PropertyAssignment | undefined + const requiredProp = prop.initializer.properties.find(p => ts.isPropertyAssignment(p) && p.name.getText(ast) === 'required') as ts.PropertyAssignment | undefined result[name] = {} @@ -1072,7 +1007,7 @@ function resolveDefaultOptionExpression( ) { if (ts.isArrowFunction(_default)) { if (ts.isBlock(_default.body)) { - return _default // TODO + return _default } else if (ts.isParenthesizedExpression(_default.body)) { return _default.body.expression } else { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 803e54d7..df2266e7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -243,8 +243,8 @@ importers: specifier: ^2.4.23 version: 2.4.23 '@vue/language-core': - specifier: 3.0.8 - version: 3.0.8(typescript@5.6.3) + specifier: 2.2.12 + version: 2.2.12(typescript@5.6.3) path-browserify: specifier: ^1.0.1 version: 1.0.1 @@ -255,11 +255,11 @@ importers: specifier: '*' version: 5.6.3 vue-component-meta: - specifier: ^3.0.8 - version: 3.0.8(typescript@5.6.3) + specifier: ^2.2.12 + version: 2.2.12(typescript@5.6.3) vue-component-type-helpers: - specifier: ^3.0.8 - version: 3.0.8 + specifier: ^2.2.12 + version: 2.2.12 devDependencies: '@types/path-browserify': specifier: ^1.0.3 @@ -6849,11 +6849,22 @@ packages: vue-bundle-renderer@2.1.2: resolution: {integrity: sha512-M4WRBO/O/7G9phGaGH9AOwOnYtY9ZpPoDVpBpRzR2jO5rFL9mgIlQIgums2ljCTC2HL1jDXFQc//CzWcAQHgAw==} + vue-component-meta@2.2.12: + resolution: {integrity: sha512-dQU6/obNSNbennJ1xd+rhDid4g3vQro+9qUBBIg8HMZH2Zs1jTpkFNxuQ3z77bOlU+ew08Qck9sbYkdSePr0Pw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + vue-component-meta@3.0.8: resolution: {integrity: sha512-DEdPomVB6p/zYT4XUgav+NiA2LtkoDQ7HCY0hQaHc8YvoDwA2q0hHsQdX3uDQuFNcZTiwX+lIUuGU4iaVybDcA==} peerDependencies: typescript: '*' + vue-component-type-helpers@2.2.12: + resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==} + vue-component-type-helpers@3.0.8: resolution: {integrity: sha512-WyR30Eq15Y/+odrUUMax6FmPbZwAp/HnC7qgR1r3lVFAcqwQ4wUoV79Mbh4SxDy3NiqDa+G4TOKD5xXSgBHo5A==} @@ -9868,7 +9879,7 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/language-core@2.2.12(typescript@5.9.2)': + '@vue/language-core@2.2.12(typescript@5.6.3)': dependencies: '@volar/language-core': 2.4.15 '@vue/compiler-dom': 3.5.21 @@ -9879,20 +9890,20 @@ snapshots: muggle-string: 0.4.1 path-browserify: 1.0.1 optionalDependencies: - typescript: 5.9.2 + typescript: 5.6.3 - '@vue/language-core@3.0.8(typescript@5.6.3)': + '@vue/language-core@2.2.12(typescript@5.9.2)': dependencies: - '@volar/language-core': 2.4.23 + '@volar/language-core': 2.4.15 '@vue/compiler-dom': 3.5.21 '@vue/compiler-vue2': 2.7.16 '@vue/shared': 3.5.21 - alien-signals: 2.0.5 + alien-signals: 1.0.13 + minimatch: 9.0.5 muggle-string: 0.4.1 path-browserify: 1.0.1 - picomatch: 4.0.3 optionalDependencies: - typescript: 5.6.3 + typescript: 5.9.2 '@vue/language-core@3.0.8(typescript@5.9.2)': dependencies: @@ -14794,13 +14805,14 @@ snapshots: dependencies: ufo: 1.6.1 - vue-component-meta@3.0.8(typescript@5.6.3): + vue-component-meta@2.2.12(typescript@5.6.3): dependencies: - '@volar/typescript': 2.4.23 - '@vue/language-core': 3.0.8(typescript@5.6.3) + '@volar/typescript': 2.4.15 + '@vue/language-core': 2.2.12(typescript@5.6.3) path-browserify: 1.0.1 + vue-component-type-helpers: 2.2.12 + optionalDependencies: typescript: 5.6.3 - vue-component-type-helpers: 3.0.8 vue-component-meta@3.0.8(typescript@5.9.2): dependencies: @@ -14810,6 +14822,8 @@ snapshots: typescript: 5.9.2 vue-component-type-helpers: 3.0.8 + vue-component-type-helpers@2.2.12: {} + vue-component-type-helpers@3.0.8: {} vue-demi@0.14.10(vue@3.5.21(typescript@5.9.2)): From 03e4e8a60fe5187532580ce11db8e690551f5f42 Mon Sep 17 00:00:00 2001 From: Romain Hamel Date: Thu, 25 Sep 2025 00:34:09 +0200 Subject: [PATCH 2/2] fix(meta): typechecks --- packages/meta/src/base.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/meta/src/base.ts b/packages/meta/src/base.ts index e294fd13..6af1e659 100644 --- a/packages/meta/src/base.ts +++ b/packages/meta/src/base.ts @@ -28,7 +28,7 @@ export function createCheckerByJsonConfigBase( rootDir = rootDir.replace(windowsPathReg, '/') return baseCreate( ts, - () => vue.createParsedCommandLineByJson(ts, ts.sys, rootDir, json, undefined, true), + () => vue.createParsedCommandLineByJson(ts, ts.sys, rootDir, json, undefined), checkerOptions, rootDir, path.join(rootDir, 'jsconfig.json.global.vue') @@ -43,7 +43,7 @@ export function createCheckerBase( tsconfig = tsconfig.replace(windowsPathReg, '/') return baseCreate( ts, - () => vue.createParsedCommandLine(ts, ts.sys, tsconfig, true), + () => vue.createParsedCommandLine(ts, ts.sys, tsconfig), checkerOptions, path.dirname(tsconfig), tsconfig + '.global.vue' @@ -64,7 +64,7 @@ export function baseCreate( const projectHost: TypeScriptProjectHost = { getCurrentDirectory: () => rootPath, getProjectVersion: () => projectVersion.toString(), - getCompilationSettings: () => commandLine.options, + getCompilationSettings: () => commandLine.options as any, getScriptFileNames: () => fileNames, getProjectReferences: () => commandLine.projectReferences } @@ -84,7 +84,7 @@ export function baseCreate( const vueLanguagePlugin = vue.createVueLanguagePlugin( ts, - projectHost.getCompilationSettings(), + projectHost.getCompilationSettings() as any, commandLine.vueOptions, id => id ) @@ -97,7 +97,7 @@ export function baseCreate( } } ], - new vue.FileMap(ts.sys.useCaseSensitiveFileNames), + new vue.FileMap(ts.sys.useCaseSensitiveFileNames) as any, (fileName) => { let snapshot = scriptSnapshots.get(fileName) @@ -127,8 +127,8 @@ export function baseCreate( } } ) - const { languageServiceHost } = createLanguageServiceHost(ts, ts.sys, language, s => s, projectHost) - const tsLs = ts.createLanguageService(languageServiceHost) + const { languageServiceHost } = createLanguageServiceHost(ts as any, ts.sys, language as any, s => s, projectHost) + const tsLs = ts.createLanguageService(languageServiceHost as any) const directoryExists = languageServiceHost.directoryExists?.bind(languageServiceHost) const fileExists = languageServiceHost.fileExists.bind(languageServiceHost) @@ -748,7 +748,7 @@ function createSchemaResolvers( const fileName = declaration.getSourceFile().fileName const sourceScript = language.scripts.get(fileName) if (sourceScript?.generated) { - const script = sourceScript.generated.languagePlugin.typescript?.getServiceScript(sourceScript.generated.root) + const script = (sourceScript.generated.languagePlugin as any).typescript?.getServiceScript(sourceScript.generated.root) if (script) { for (const [sourceScript, map] of language.maps.forEach(script.code)) { for (const [start] of map.toSourceLocation(declaration.getStart())) {