From bd0482811d95edeeea36b19dce634c210207dacc Mon Sep 17 00:00:00 2001 From: zhiyuanzmj <32807958+zhiyuanzmj@users.noreply.github.com> Date: Tue, 10 Oct 2023 11:40:22 +0800 Subject: [PATCH] fix(volar): compatible with volar@1.8.14 (#520) --- .changeset/slow-rabbits-yell.md | 5 +++++ packages/volar/src/common.ts | 13 +++++-------- packages/volar/src/define-models.ts | 23 +++++++++++++++-------- packages/volar/src/export-expose.ts | 6 +++--- 4 files changed, 28 insertions(+), 19 deletions(-) create mode 100644 .changeset/slow-rabbits-yell.md 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'