Skip to content

feat: introduce tsdown, support mixed js & ts in codebase#2916

Merged
FloEdelmann merged 43 commits intovuejs:masterfrom
9romise:rewrite-ts
Jan 16, 2026
Merged

feat: introduce tsdown, support mixed js & ts in codebase#2916
FloEdelmann merged 43 commits intovuejs:masterfrom
9romise:rewrite-ts

Conversation

@9romise
Copy link
Contributor

@9romise 9romise commented Aug 22, 2025

Hi 👋, Vue team!

I've been trying to contribute to eslint-plugin-vue and recently noticed there might be plans to rewrite it in TypeScript, though things seem to have stalled. I’d like to help move this effort forward.

This PR introduces tsdown, a tool that can gradually transform mixed JavaScript/TypeScript codebases into pure JavaScript output. This allows us to incrementally migrate the entire project to TypeScript. I’ve already successfully rewritten several files — it works well.

Going forward, I can split the changes into multiple PRs to make review easier.

If there’s anything you’d like me to adjust in this PR, or if you have any feedback, I’d really appreciate your thoughts! 💚

Related: #2777

@changeset-bot
Copy link

changeset-bot bot commented Aug 22, 2025

🦋 Changeset detected

Latest commit: c030176

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
eslint-plugin-vue Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@9romise 9romise changed the title feat: introduce tsdown, support js & ts feat: introduce tsdown, support mixed js & ts in codebase Aug 22, 2025
@9romise 9romise marked this pull request as draft August 22, 2025 02:24
@9romise 9romise marked this pull request as ready for review August 22, 2025 02:47
Copy link
Member

@FloEdelmann FloEdelmann left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really nice, thank you!

@9romise

This comment was marked as resolved.

@9romise

This comment was marked as resolved.

Copy link
Contributor

@2nofa11 2nofa11 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If pull request #2931 is merged and incorporated into this PR, it may resolve some of the CI failures!!!

I believe this PR is an excellent fix 😍

Copy link
Member

@FloEdelmann FloEdelmann left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested locally and it seems to work fine. Thank you for kicking off TypeScript support!

@FloEdelmann FloEdelmann merged commit ce20297 into vuejs:master Jan 16, 2026
16 checks passed
@github-actions github-actions bot mentioned this pull request Jan 16, 2026
@9romise
Copy link
Contributor Author

9romise commented Jan 16, 2026

Thrilled to see this PR finally merged!
Big thanks to everyone who contributed their time to it. 💚

@9romise 9romise deleted the rewrite-ts branch January 16, 2026 15:15
beatrizsmerino added a commit to beatrizsmerino/vue-users that referenced this pull request Jan 16, 2026
Error:
- `npm install` fails with "Unexpected top-level property default" error
- ESLint cannot parse configuration from `eslint-plugin-vue` v10.7.0

Reason:
- Version `^10.6.2` allows automatic updates to `10.7.0`
- `eslint-plugin-vue@10.7.0` introduced TypeScript in build process generating `export default`
- This is incompatible with ESLint 8 legacy config format (`.eslintrc.js`)
- Upgrading to ESLint 9 is not viable because `@vue/cli-plugin-eslint` does not support it
- Project uses Vue 2 with vue-cli which requires ESLint 8

Solution:
- Pin exact version `10.6.2` (remove caret) to prevent automatic updates

References:
- PR #1036
- vuejs/eslint-plugin-vue#2916
beatrizsmerino added a commit to beatrizsmerino/vue-todolist that referenced this pull request Jan 17, 2026
Error:
- `npm install` fails with "Unexpected top-level property default" error
- ESLint cannot parse configuration from `eslint-plugin-vue` v10.7.0

Reason:
- Version `^10.6.2` allows automatic updates to `10.7.0`
- `eslint-plugin-vue@10.7.0` introduced TypeScript in build process generating `export default`
- This is incompatible with ESLint 8 legacy config format (`.eslintrc.js`)
- Upgrading to ESLint 9 is not viable because `@vue/cli-plugin-eslint` does not support it
- Project uses Vue 2 with vue-cli which requires ESLint 8

Solution:
- Pin exact version `10.6.2` (remove caret) to prevent automatic updates

References:
- Issue #989
- vuejs/eslint-plugin-vue#2916
beatrizsmerino added a commit to beatrizsmerino/vue-gh-pages that referenced this pull request Jan 17, 2026
Error:
- `npm install` fails with "Unexpected top-level property default" error
- ESLint cannot parse configuration from `eslint-plugin-vue` v10.7.0

Reason:
- Version `^10.6.2` allows automatic updates to `10.7.0`
- `eslint-plugin-vue@10.7.0` introduced TypeScript in build process generating `export default`
- This is incompatible with ESLint 8 legacy config format (`.eslintrc.js`)
- Upgrading to ESLint 9 is not viable because `@vue/cli-plugin-eslint` does not support it
- Project uses Vue 2 with vue-cli which requires ESLint 8

Solution:
- Pin exact version `10.6.2` (remove caret) to prevent automatic updates

References:
- PR #907
- vuejs/eslint-plugin-vue#2916
beatrizsmerino added a commit to beatrizsmerino/vue-editor that referenced this pull request Jan 17, 2026
Error:
- `npm install` fails with "Unexpected top-level property default" error
- ESLint cannot parse configuration from `eslint-plugin-vue` v10.7.0

Reason:
- Version `^10.6.2` allows automatic updates to `10.7.0`
- `eslint-plugin-vue@10.7.0` introduced TypeScript in build process generating `export default`
- This is incompatible with ESLint 8 legacy config format (`.eslintrc.js`)
- Upgrading to ESLint 9 is not viable because `@vue/cli-plugin-eslint` does not support it
- Project uses Vue 2 with vue-cli which requires ESLint 8

Solution:
- Pin exact version `10.6.2` (remove caret) to prevent automatic updates

References:
- PR #821
- vuejs/eslint-plugin-vue#2916
@susnux
Copy link

susnux commented Jan 19, 2026

This breaks custom Vue rules - not sure if officially supported - but it was working in past.

In 10.6 and before you could create your own rules by using defineTemplateBodyVisitor from 'eslint-plugin-vue/lib/utils/index.js'.

But this is no longer available in the package.
Meaning you can no longer create your own Vue Template related rules.

susnux added a commit to nextcloud-libraries/eslint-config that referenced this pull request Jan 19, 2026
Ref: vuejs/eslint-plugin-vue#2916 (comment)

The utils are no longer exported, and unless this becomes a ESLint
language plugin[1] we cannot really add our own Vue Template rules.

[1]: vuejs/eslint-plugin-vue#2778

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
marmitar added a commit to marmitar/thelounge that referenced this pull request Jan 31, 2026
Renamed:
- `vue3-recommended` config to just `recommended` (vuejs/eslint-plugin-vue#2648)
- `component-tags-order` rule to `block-order` (vuejs/eslint-plugin-vue#2627)

Does not work with 10.7.0 because of vuejs/eslint-plugin-vue#2916.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants