diff --git a/.changeset/slow-rabbits-yell.md b/.changeset/slow-rabbits-yell.md new file mode 100644 index 000000000..1c3afb31f --- /dev/null +++ b/.changeset/slow-rabbits-yell.md @@ -0,0 +1,5 @@ +--- +'@vue-macros/volar': patch +--- + +compatible with volar@1.8.14 diff --git a/packages/volar/src/common.ts b/packages/volar/src/common.ts index b3a7aeaa7..6bcffeda4 100644 --- a/packages/volar/src/common.ts +++ b/packages/volar/src/common.ts @@ -2,7 +2,7 @@ import { type Segment, type Sfc, type VueCompilerOptions, - replace, + replaceAll, } from '@vue/language-core' import { type FileRangeCapabilities } from '@volar/language-core' import { type VolarOptions } from '..' @@ -16,9 +16,9 @@ export function addProps( decl: Segment[], vueLibName: string ) { - replace( + replaceAll( content, - /setup\(\) {/, + /setup\(\) {/g, 'props: ({} as ', ...decl, '),\n', @@ -35,12 +35,9 @@ export function addEmits( content: Segment[], decl: Segment[] ) { - const idx = content.indexOf('setup() {\n') - if (idx === -1) return false - - replace( + replaceAll( content, - /setup\(\) {/, + /setup\(\) {/g, 'emits: ({} as ', ...decl, '),\n', diff --git a/packages/volar/src/define-models.ts b/packages/volar/src/define-models.ts index 108895dfe..976eb7bdd 100644 --- a/packages/volar/src/define-models.ts +++ b/packages/volar/src/define-models.ts @@ -54,20 +54,27 @@ function transformDefineModels({ ) function mergeProps() { - const idx = codes.indexOf('__VLS_TypePropsToRuntimeProps<') - if (idx === -1) return false + const indexes = codes.reduce((res: number[], code, index) => { + if (code === '__VLS_TypePropsToRuntimeProps<') res.unshift(index) + return res + }, []) + if (indexes.length === 0) return false - codes.splice(idx + 2, 0, ' & __VLS_ModelToProps<', seg, '>') + for (const idx of indexes) + codes.splice(idx + 2, 0, ' & __VLS_ModelToProps<', seg, '>') return true } function mergeEmits() { - const idx = codes.indexOf( - 'emits: ({} as __VLS_UnionToIntersection<__VLS_ConstructorOverloads<' - ) - if (idx === -1) return false + const indexes = codes.reduce((res: number[], code, index) => { + if (code === 'emits: ({} as __VLS_NormalizeEmits> & __VLS_ModelToEmits<', seg, '>),\n') + for (const idx of indexes) + codes.splice(idx + 2, 1, ' & __VLS_ModelToEmits<', seg, '>>),\n') return true } } diff --git a/packages/volar/src/export-expose.ts b/packages/volar/src/export-expose.ts index b3acc089f..06d841179 100644 --- a/packages/volar/src/export-expose.ts +++ b/packages/volar/src/export-expose.ts @@ -5,7 +5,7 @@ import { type Sfc, type VueEmbeddedFile, type VueLanguagePlugin, - replace, + replaceAll, replaceSourceRange, } from '@vue/language-core' import { createFilter } from '@rollup/pluginutils' @@ -62,9 +62,9 @@ function transform({ ',\n', ]) - replace( + replaceAll( file.content, - 'return {\n', + /return {\n/g, 'return {\n...{ ', ...exposedStrings, ' },\n'