From 252e464ecfb8641fbc07d4efa9d3c56719e1ef28 Mon Sep 17 00:00:00 2001 From: Johnson Chu Date: Mon, 17 Apr 2023 20:46:56 +0800 Subject: [PATCH] fix: allow unknown props for new codegen [skip ci] close #2570, close #2587, close #2570, close #2584, close #2567, close #2609, close #2594, close #2606, close #2601 --- .../vue-language-core/src/languageModule.ts | 32 +++++++++---------- .../vue-test-workspace/vue-tsc/tsconfig.json | 1 - .../vue-tsc/unknownProp/main.vue | 13 ++++++++ 3 files changed, 28 insertions(+), 18 deletions(-) create mode 100644 packages/vue-test-workspace/vue-tsc/unknownProp/main.vue diff --git a/packages/vue-language-core/src/languageModule.ts b/packages/vue-language-core/src/languageModule.ts index d788d0e528..804c298e35 100644 --- a/packages/vue-language-core/src/languageModule.ts +++ b/packages/vue-language-core/src/languageModule.ts @@ -66,24 +66,22 @@ export function createLanguageModules( return sharedTypesSnapshot; } let snapshot = host.getScriptSnapshot(fileName); - if (snapshot) { - if (!vueCompilerOptions.strictTemplates && ( - // for vue 2.6 and vue 3 - basename === 'runtime-dom.d.ts' || - // for vue 2.7 - basename === 'jsx.d.ts' - )) { - if (!patchSnapshots.has(snapshot)) { - // allow arbitrary attributes - let tsScriptText = snapshot.getText(0, snapshot.getLength()); - tsScriptText = tsScriptText.replace( - 'type ReservedProps = {', - 'type ReservedProps = { [name: string]: any', - ); - patchSnapshots.set(snapshot, ts.ScriptSnapshot.fromString(tsScriptText)); - } - snapshot = patchSnapshots.get(snapshot)!; + if ( + snapshot + && !vueCompilerOptions.strictTemplates + && ( + // vue 3 + fileName.endsWith('/node_modules/@vue/runtime-core/dist/runtime-core.d.ts') + // vue 2.7 + || fileName.endsWith('/node_modules/vue/types/v3-component-proxy.d.ts') + ) + ) { + if (!patchSnapshots.has(snapshot)) { + let text = snapshot.getText(0, snapshot.getLength()); + text = text.replace(/\$props: [^;]*/g, match => `$props: Record & (${match.slice('$props: '.length)})`); + patchSnapshots.set(snapshot, ts.ScriptSnapshot.fromString(text)); } + snapshot = patchSnapshots.get(snapshot)!; } return snapshot; }, diff --git a/packages/vue-test-workspace/vue-tsc/tsconfig.json b/packages/vue-test-workspace/vue-tsc/tsconfig.json index 35f34374b9..34e44b61da 100644 --- a/packages/vue-test-workspace/vue-tsc/tsconfig.json +++ b/packages/vue-test-workspace/vue-tsc/tsconfig.json @@ -5,7 +5,6 @@ "noPropertyAccessFromIndexSignature": true, }, "vueCompilerOptions": { - "strictTemplates": true, "plugins": ["../../vue-language-plugin-pug"] }, "include": [ diff --git a/packages/vue-test-workspace/vue-tsc/unknownProp/main.vue b/packages/vue-test-workspace/vue-tsc/unknownProp/main.vue new file mode 100644 index 0000000000..af1e580381 --- /dev/null +++ b/packages/vue-test-workspace/vue-tsc/unknownProp/main.vue @@ -0,0 +1,13 @@ + + +