New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Vue2.7 defineEmits/defineProps compile error #13122
Comments
How did you find this problem? I don’t see why one would write a sequence when defining the emit function? |
Because of istanbuljs's instrumentation process. The VariableDeclaration code after instrumenting will be compiled to SequenceExpression. Like this code: <script setup>
const emits = defineEmits(['input']);
</script> after intrument, it will become like this: <script setup>
// some unrelated report init code
const emits = (report(0), defineEmits(['input']));
</script> |
Aah I see! Given that Vitest manages to pull off the coverage on Vue components, this might be a misconfiguration: Istanbul should maybe instrument the code after and use source maps to refer to the original place |
oh cool! thanks, I'll have a look. Supporting SuequenceExpression for @vue/compile-sfc seems like a nice thing too. Maybe I'll try to make a PullRequest for that. |
have submitted a PullRequest(#13124) about this |
I'm not convinced that this complexity should be dealt with in Vue - instrumenting raw SFC code just sounds wrong. Only handling sequences also seems like an incomplete fix, as there are other cases where the macros won't be compiled. For example, what if the instrumentation wraps the Even just for sequences, the PR also has even more edge cases:
In principle, |
Version
2.7.15
Reproduction link
codepen.io
Steps to reproduce
compile the code below:
defineEmits
will not transform to options memberemits
ofdefineComponent
in compiled dist.same on the
defineProps
What is expected?
the CallExpression
defineEmits
be compiled normally to a option memberemits
ofdefineComponent
in compiled dist.What is actually happening?
the CallExpression
defineEmits
is not be compiled.it should a bug of
@vue/compile-sfc
.the calling of
isCallOf
atprocessDefineEmits
andprocessDefineProps
is only check CallExpression but not check SequenceExpression.The text was updated successfully, but these errors were encountered: