Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: vuejs/language-tools
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.7.12
Choose a base ref
...
head repository: vuejs/language-tools
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.7.13
Choose a head ref
  • 13 commits
  • 120 files changed
  • 6 contributors

Commits on Jun 14, 2023

  1. fix: inline variables are wrongly transformed as ctxVars (#3280)

    Co-authored-by: Johnson Chu <johnsoncodehk@gmail.com>
    so1ve and johnsoncodehk authored Jun 14, 2023

    Verified

    This commit was signed with the committer’s verified signature.
    baywet Vincent Biret
    Copy the full SHA
    22b07e7 View commit details
  2. feat: support defineEmits' new syntax (#3283)

    Co-authored-by: Johnson Chu <johnsoncodehk@gmail.com>
    so1ve and johnsoncodehk authored Jun 14, 2023

    Verified

    This commit was signed with the committer’s verified signature.
    baywet Vincent Biret
    Copy the full SHA
    c1297e1 View commit details
  3. test: strict template unknown props (#3284)

    Co-authored-by: Johnson Chu <johnsoncodehk@gmail.com>
    sapphi-red and johnsoncodehk authored Jun 14, 2023

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    8a610ef View commit details
  4. chore: dont minify pre-release

    Co-Authored-By: Johnson Chu <johnsoncodehk@gmail.com>
    johnsoncodehk committed Jun 14, 2023
    Copy the full SHA
    0873a6b View commit details
  5. feat: allow comments for directive comments

    Co-Authored-By: Johnson Chu <johnsoncodehk@gmail.com>
    johnsoncodehk committed Jun 14, 2023
    Copy the full SHA
    b6c9487 View commit details
  6. fix: fix TS 5.1.3 functional component typecheck

    close #3255
    
    Co-Authored-By: Johnson Chu <johnsoncodehk@gmail.com>
    johnsoncodehk committed Jun 14, 2023
    Copy the full SHA
    1667a53 View commit details
  7. Copy the full SHA
    e29e064 View commit details
  8. refactor: better default inlay hint settings (#3147)

    Co-authored-by: wenfangdu <wenfangdu@users.noreply.github.com>
    Co-authored-by: Johnson Chu <johnsoncodehk@gmail.com>
    Co-authored-by: johnsoncodehk <johnsoncodehk@users.noreply.github.com>
    4 people authored Jun 14, 2023
    Copy the full SHA
    8cb14b0 View commit details
  9. Copy the full SHA
    57f18cb View commit details
  10. Copy the full SHA
    ba49f84 View commit details
  11. Copy the full SHA
    889d686 View commit details
  12. chore: changelog

    johnsoncodehk committed Jun 14, 2023
    Copy the full SHA
    45eae2a View commit details
  13. v1.7.13

    johnsoncodehk committed Jun 14, 2023
    Copy the full SHA
    32d5d5e View commit details
Showing with 476 additions and 467 deletions.
  1. +0 −2 .github/workflows/update-html-data.yml
  2. +28 −17 CHANGELOG.md
  3. +1 −1 lerna.json
  4. +1 −1 package.json
  5. +3 −3 packages/typescript-vue-plugin/package.json
  6. +2 −2 packages/vscode-typescript-vue-plugin/package.json
  7. +10 −10 packages/vscode-vue/package.json
  8. +4 −4 packages/vue-component-meta/package.json
  9. +17 −0 packages/vue-component-meta/src/index.ts
  10. +7 −0 packages/vue-component-meta/src/types.ts
  11. +30 −1 packages/vue-component-meta/tests/index.spec.ts
  12. +13 −8 packages/vue-component-type-helpers/index.d.ts
  13. +20 −15 packages/vue-component-type-helpers/index.js
  14. +1 −1 packages/vue-component-type-helpers/package.json
  15. +3 −3 packages/vue-language-core/package.json
  16. +7 −4 packages/vue-language-core/src/generators/script.ts
  17. +13 −38 packages/vue-language-core/src/generators/template.ts
  18. +28 −14 packages/vue-language-core/src/utils/transform.ts
  19. +3 −3 packages/vue-language-plugin-pug/package.json
  20. +7 −7 packages/vue-language-server/package.json
  21. +26 −26 packages/vue-language-service/data/template/en.json
  22. +6 −6 packages/vue-language-service/package.json
  23. +2 −2 packages/vue-test-workspace/package.json
  24. +1 −0 packages/vue-test-workspace/vue-component-meta/non-component/component.ts
  25. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2166/main.vue
  26. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2206/main.vue
  27. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2225/main.vue
  28. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2236/main.vue
  29. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2250/main.vue
  30. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2308/main.vue
  31. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2370/main.vue
  32. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2399/main.vue
  33. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2431/main.vue
  34. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2468/main.vue
  35. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2472/Comp.vue
  36. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2472/GenericComp.vue
  37. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2472/env.d.ts
  38. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2472/main.vue
  39. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2514/main.vue
  40. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2554/main.vue
  41. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2586/main.vue
  42. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2588/main.vue
  43. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2590/comp.vue
  44. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2617/main.vue
  45. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2629/main.vue
  46. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2638/main.vue
  47. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2639/Bar.vue
  48. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2639/Foo.vue
  49. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2640/main.vue
  50. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2646/main.vue
  51. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2647/main.vue
  52. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2678/main.vue
  53. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2683/main.vue
  54. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2691/main.vue
  55. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2700/main.vue
  56. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2709/App.vue
  57. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2709/MyList.vue
  58. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2712/main.vue
  59. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2720/main.vue
  60. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2725/main.vue
  61. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2726/main.vue
  62. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2730/main.vue
  63. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2744/comp.vue
  64. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2744/main.vue
  65. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2754/comp.vue
  66. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2754/main.vue
  67. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2758/app.vue
  68. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#2758/main.vue
  69. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#3100/comp.vue
  70. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#3100/main.vue
  71. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#3102/main.vue
  72. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#3106/main.vue
  73. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#3121/main.vue
  74. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#3164/main.vue
  75. +3 −0 packages/vue-test-workspace/vue-tsc/non-strict-template/#3255/main.vue
  76. +8 −0 packages/vue-test-workspace/vue-tsc/non-strict-template/#3258/main.vue
  77. +15 −0 packages/vue-test-workspace/vue-tsc/non-strict-template/#3258/side-effect.vue
  78. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/#625/main.vue
  79. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/components/main.vue
  80. 0 ...ges/vue-test-workspace/vue-tsc/{ → non-strict-template}/components/script-setup-default-props.vue
  81. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/components/script-setup-expose.vue
  82. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/components/script-setup-generic.vue
  83. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/components/script-setup-type-only.vue
  84. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/components/script-setup.vue
  85. +3 −0 packages/vue-test-workspace/vue-tsc/non-strict-template/defineEmits-new-syntax/Comp.vue
  86. +8 −0 packages/vue-test-workspace/vue-tsc/non-strict-template/defineEmits-new-syntax/main.vue
  87. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/defineModel/main.vue
  88. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/defineModel/script-setup.vue
  89. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/defineProp_A/script-setup.vue
  90. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/defineProp_B/main.vue
  91. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/defineProp_B/script-setup-generic.vue
  92. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/defineProp_B/script-setup.vue
  93. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/directives/main.vue
  94. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/dynamic-component/main.vue
  95. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/events/main.vue
  96. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/events/union_type.vue
  97. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/generic-interface/main.vue
  98. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/input-radio/main.vue
  99. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/namespace-component/component.vue
  100. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/namespace-component/main.vue
  101. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/no-script-block/main.vue
  102. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/petite-vue/main.html
  103. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/reference-type-in-template/main.vue
  104. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/script-setup-scope/export-order.vue
  105. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/script-setup-scope/main.vue
  106. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/slots/main.vue
  107. +4 −0 packages/vue-test-workspace/vue-tsc/non-strict-template/tsconfig.json
  108. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/type-helpers/main.vue
  109. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/unknownProp/main.vue
  110. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/v-for/generic.vue
  111. +1 −1 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/v-for/main.vue
  112. 0 packages/vue-test-workspace/vue-tsc/{ → non-strict-template}/v-if/main.vue
  113. +7 −0 packages/vue-test-workspace/vue-tsc/strict-template/tsconfig.json
  114. +17 −0 packages/vue-test-workspace/vue-tsc/strict-template/unknownProp/main.vue
  115. +1 −6 packages/vue-test-workspace/vue-tsc/{tsconfig.json → tsconfig.base.json}
  116. +2 −2 packages/vue-tsc-eslint-hook/package.json
  117. +3 −3 packages/vue-tsc/package.json
  118. +10 −4 packages/vue-tsc/tests/index.spec.ts
  119. +3 −3 packages/vue-typescript/package.json
  120. +144 −266 pnpm-lock.yaml
2 changes: 0 additions & 2 deletions .github/workflows/update-html-data.yml
Original file line number Diff line number Diff line change
@@ -4,8 +4,6 @@ on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
push:
branches: [ master ]

jobs:
update-html-data:
45 changes: 28 additions & 17 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
# Changelog

## 1.7.12 (2023/6/14) - pre-release
## 1.7.13 (2023/6/15) - pre-release

- feat: reintroduce `nativeTags` ([#3279](https://github.com/johnsoncodehk/volar/issues/3279))
- fix: compatible with TS 5.1.3 ([#3274](https://github.com/johnsoncodehk/volar/issues/3274)) ([#3277](https://github.com/johnsoncodehk/volar/issues/3277)) - thanks @so1ve
- perf(vue-tsc): addressed a performance regression since 1.5.1 by reintroducing `nativeTags` ([#3148](https://github.com/johnsoncodehk/volar/issues/3148))
- feat: support Vue 3.3 `defineEmits` shorthand ([#3169](https://github.com/vuejs/language-tools/issues/3169)) ([#3283](https://github.com/vuejs/language-tools/issues/3283)) - thanks @so1ve
- feat: allow trailing text for directive comments (https://github.com/vuejs/language-tools/pull/3215#issuecomment-1591397008)
- feat: switch `vue.inlayHints.optionsWrapper` to disabled by default ([#3147](https://github.com/vuejs/language-tools/issues/3147)) - thanks @wenfangdu
- feat(component-meta): expose component type ([#3151](https://github.com/vuejs/language-tools/issues/3151)) ([#3286](https://github.com/vuejs/language-tools/issues/3286))
- fix: can't define variables in inline event handler ([#3258](https://github.com/vuejs/language-tools/issues/3258)) ([#3280](https://github.com/vuejs/language-tools/issues/3280)) - thanks @so1ve
- fix(vue-tsc): `--emitDeclarationOnly` not working since 1.7.9
- fix(vue-tsc): `@vue-expect-error`, `@vue-ignore` not working for vue-tsc ([#3284](https://github.com/vuejs/language-tools/issues/3284)) - thanks @sapphi-red
- fix: compatible functional component typecheck with TS 5.1.3 ([#3255](https://github.com/vuejs/language-tools/issues/3255))

---

@@ -42,22 +47,28 @@
</h5>
</p>

## 1.7.12 (2023/6/14) - pre-release

- feat: reintroduce `nativeTags` ([#3279](https://github.com/vuejs/language-tools/issues/3279))
- fix: compatible with TS 5.1.3 ([#3274](https://github.com/vuejs/language-tools/issues/3274)) ([#3277](https://github.com/vuejs/language-tools/issues/3277)) - thanks @so1ve
- perf(vue-tsc): addressed a performance regression since 1.5.1 by reintroducing `nativeTags` ([#3148](https://github.com/vuejs/language-tools/issues/3148))

## 1.7.11 (2023/6/9) - pre-release

- fix: ignore errors for `statSync` ([#3260](https://github.com/johnsoncodehk/volar/issues/3260))
- fix: ignore errors for `statSync` ([#3260](https://github.com/vuejs/language-tools/issues/3260))

## 1.7.10 (2023/6/9) - pre-release

- feat: upgrade framework to v1.7 ([#3248](https://github.com/johnsoncodehk/volar/issues/3248))
- fix: `strictTemplates` not working for IntrinsicElement ([#3214](https://github.com/johnsoncodehk/volar/issues/3214))
- fix: failed to load tsconfig json schema ([#3224](https://github.com/johnsoncodehk/volar/issues/3224)) ([#3228](https://github.com/johnsoncodehk/volar/issues/3228)) - thanks @tjx666
- fix(vue-tsc): `vue-tsc` ignores type errors in `.vue` files if the incremental setting is true ([#2756](https://github.com/johnsoncodehk/volar/issues/2756)) ([#3218](https://github.com/johnsoncodehk/volar/issues/3218)) - thanks @lucasavila00
- fix: properly merge `defineModel` and `defineProps` types ([#3164](https://github.com/johnsoncodehk/volar/issues/3164))
- feat: upgrade framework to v1.7 ([#3248](https://github.com/vuejs/language-tools/issues/3248))
- fix: `strictTemplates` not working for IntrinsicElement ([#3214](https://github.com/vuejs/language-tools/issues/3214))
- fix: failed to load tsconfig json schema ([#3224](https://github.com/vuejs/language-tools/issues/3224)) ([#3228](https://github.com/vuejs/language-tools/issues/3228)) - thanks @tjx666
- fix(vue-tsc): `vue-tsc` ignores type errors in `.vue` files if the incremental setting is true ([#2756](https://github.com/vuejs/language-tools/issues/2756)) ([#3218](https://github.com/vuejs/language-tools/issues/3218)) - thanks @lucasavila00
- fix: properly merge `defineModel` and `defineProps` types ([#3164](https://github.com/vuejs/language-tools/issues/3164))
- fix(language-server): show component meta command not working

**Breaking changes**

- Simplify `JSX.IntrinsicElements` type inference for better TS performance ([#3259](https://github.com/johnsoncodehk/volar/issues/3259))
- Simplify `JSX.IntrinsicElements` type inference for better TS performance ([#3259](https://github.com/vuejs/language-tools/issues/3259))
- Update `@vue-expected-error` to `@vue-expect-error` (https://github.com/vuejs/language-tools/pull/3215#issuecomment-1560355284)

## 1.7.8 (2023/5/22) - pre-release
@@ -66,7 +77,7 @@

## 1.7.7 (2023/5/22) - pre-release

- feat: support for `@vue-ignore`, `@vue-skip`, `@vue-expected-error` directive comments ([#3215](https://github.com/johnsoncodehk/volar/issues/3215))
- feat: support for `@vue-ignore`, `@vue-skip`, `@vue-expected-error` directive comments ([#3215](https://github.com/vuejs/language-tools/issues/3215))
- refactor(language-service): removed `vscode-languageserver-protocol` runtime dependency
- perf(monaco): much faster first time intellisense
- fix: ts project not updated when virtual ts file created / deleted
@@ -79,14 +90,14 @@
## 1.7.4 (2023/5/18) - pre-release

- feat: more reliable intellisense for monaco
- fix: avoid adds ".js" extension when auto importing components ([#3150](https://github.com/johnsoncodehk/volar/issues/3150))
- fix: avoid adds ".js" extension when auto importing components ([#3150](https://github.com/vuejs/language-tools/issues/3150))

## 1.6.5 (2023/5/13), 1.7.3 (2023/5/13) - pre-release

- chore: bump vue deps to 3.3 stable ([#3167](https://github.com/johnsoncodehk/volar/issues/3167)) - thanks @ferferga
- fix(vue-tsc): avoid throw when composite is enabled ([#2622](https://github.com/johnsoncodehk/volar/issues/2622))
- perf(language-service): avoid request name casing from language client multiple times ([#3158](https://github.com/johnsoncodehk/volar/issues/3158)) - thanks @kalvenschraut
- fix: avoid slot name report TS8013 in js component ([#3121](https://github.com/johnsoncodehk/volar/issues/3121))
- chore: bump vue deps to 3.3 stable ([#3167](https://github.com/vuejs/language-tools/issues/3167)) - thanks @ferferga
- fix(vue-tsc): avoid throw when composite is enabled ([#2622](https://github.com/vuejs/language-tools/issues/2622))
- perf(language-service): avoid request name casing from language client multiple times ([#3158](https://github.com/vuejs/language-tools/issues/3158)) - thanks @kalvenschraut
- fix: avoid slot name report TS8013 in js component ([#3121](https://github.com/vuejs/language-tools/issues/3121))

## 1.7.2 (2023/5/11) - pre-release

2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -4,5 +4,5 @@
"packages": [
"packages/*"
],
"version": "1.7.12"
"version": "1.7.13"
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -22,7 +22,7 @@
},
"devDependencies": {
"@types/node": "latest",
"@volar/language-service": "1.7.4",
"@volar/language-service": "1.7.5",
"typescript": "latest",
"vite": "latest",
"vitest": "latest"
6 changes: 3 additions & 3 deletions packages/typescript-vue-plugin/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "typescript-vue-plugin",
"version": "1.7.12",
"version": "1.7.13",
"main": "out/index.js",
"license": "MIT",
"files": [
@@ -13,8 +13,8 @@
"directory": "packages/typescript-vue-plugin"
},
"dependencies": {
"@vue/language-core": "1.7.12",
"@vue/typescript": "1.7.12",
"@vue/language-core": "1.7.13",
"@vue/typescript": "1.7.13",
"vscode-uri": "^3.0.7"
}
}
4 changes: 2 additions & 2 deletions packages/vscode-typescript-vue-plugin/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"private": true,
"name": "vscode-typescript-vue-plugin",
"version": "1.7.12",
"version": "1.7.13",
"repository": {
"type": "git",
"url": "https://github.com/vuejs/language-tools.git",
@@ -41,7 +41,7 @@
},
"devDependencies": {
"esbuild": "0.15.18",
"typescript-vue-plugin": "1.7.12",
"typescript-vue-plugin": "1.7.13",
"vsce": "latest"
}
}
20 changes: 10 additions & 10 deletions packages/vscode-vue/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"private": true,
"name": "volar",
"version": "1.7.12",
"version": "1.7.13",
"repository": {
"type": "git",
"url": "https://github.com/vuejs/language-tools.git",
@@ -584,7 +584,7 @@
},
"vue.inlayHints.optionsWrapper": {
"type": "boolean",
"default": true,
"default": false,
"description": "Show inlay hints for component options wrapper for type support."
}
}
@@ -723,18 +723,18 @@
"prebuild": "cd ../.. && npm run build",
"build": "node scripts/build",
"watch": "npm run build -- --watch",
"prepack": "npm run prebuild && npm run build -- --minify",
"pack": "npm run prepack && vsce package",
"release": "npm run prepack && vsce publish",
"release:next": "npm run release -- --pre-release",
"bundle-size": "npm run prepack -- --metafile && esbuild-visualizer --metadata ./meta.json && open ./stats.html"
"pack": "npm run build -- --minify && vsce package",
"pack:next": "npm run build && vsce package",
"release": "npm run build -- --minify && vsce publish",
"release:next": "npm run build && vsce publish --pre-release",
"bundle-size": "npm run build -- --minify --metafile && esbuild-visualizer --metadata ./meta.json && open ./stats.html"
},
"devDependencies": {
"@types/semver": "^7.3.13",
"@types/vscode": "1.67.0",
"@volar/vscode": "1.7.4",
"@vue/language-core": "1.7.12",
"@vue/language-server": "1.7.12",
"@volar/vscode": "1.7.5",
"@vue/language-core": "1.7.13",
"@vue/language-server": "1.7.13",
"esbuild": "0.15.18",
"esbuild-plugin-copy": "latest",
"esbuild-visualizer": "latest",
8 changes: 4 additions & 4 deletions packages/vue-component-meta/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "vue-component-meta",
"version": "1.7.12",
"version": "1.7.13",
"main": "out/index.js",
"license": "MIT",
"files": [
@@ -13,10 +13,10 @@
"directory": "packages/vue-component-meta"
},
"dependencies": {
"@volar/typescript": "1.7.4",
"@vue/language-core": "1.7.12",
"@volar/typescript": "1.7.5",
"@vue/language-core": "1.7.13",
"typesafe-path": "^0.2.2",
"vue-component-type-helpers": "1.7.12"
"vue-component-type-helpers": "1.7.13"
},
"peerDependencies": {
"typescript": "*"
17 changes: 17 additions & 0 deletions packages/vue-component-meta/src/index.ts
Original file line number Diff line number Diff line change
@@ -194,6 +194,7 @@ import * as Components from '${fileName.substring(0, fileName.length - '.meta.ts
export default {} as { [K in keyof typeof Components]: ComponentMeta<typeof Components[K]>; };
interface ComponentMeta<T> {
type: ComponentType<T>;
props: ComponentProps<T>;
emit: ComponentEmit<T>;
slots: ${vueCompilerOptions.target < 3 ? 'Vue2ComponentSlots' : 'ComponentSlots'}<T>;
@@ -225,12 +226,16 @@ ${typeHelpersCode}
const componentType = typeChecker.getTypeOfSymbolAtLocation(_export, symbolNode!);
const symbolProperties = componentType.getProperties() ?? [];

let _type: ReturnType<typeof getType> | undefined;
let _props: ReturnType<typeof getProps> | undefined;
let _events: ReturnType<typeof getEvents> | undefined;
let _slots: ReturnType<typeof getSlots> | undefined;
let _exposed: ReturnType<typeof getExposed> | undefined;

return {
get type() {
return _type ?? (_type = getType());
},
get props() {
return _props ?? (_props = getProps());
},
@@ -245,6 +250,18 @@ ${typeHelpersCode}
},
};

function getType() {

const $type = symbolProperties.find(prop => prop.escapedName === 'type');

if ($type) {
const type = typeChecker.getTypeOfSymbolAtLocation($type, symbolNode!);
return Number(typeChecker.typeToString(type));
}

return 0;
}

function getProps() {

const $props = symbolProperties.find(prop => prop.escapedName === 'props');
7 changes: 7 additions & 0 deletions packages/vue-component-meta/src/types.ts
Original file line number Diff line number Diff line change
@@ -6,12 +6,19 @@ export interface Declaration {
}

export interface ComponentMeta {
type: TypeMeta;
props: PropertyMeta[];
events: EventMeta[];
slots: SlotMeta[];
exposed: ExposeMeta[];
}

export enum TypeMeta {
Unknown = 0,
Class = 1,
Function = 2,
}

export interface PropertyMeta {
name: string;
default?: string;
31 changes: 30 additions & 1 deletion packages/vue-component-meta/tests/index.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as path from 'path';
import { describe, expect, test } from 'vitest';
import { createComponentMetaChecker, createComponentMetaCheckerByJsonConfig, MetaCheckerOptions, ComponentMetaChecker } from '..';
import { createComponentMetaChecker, createComponentMetaCheckerByJsonConfig, MetaCheckerOptions, ComponentMetaChecker, TypeMeta } from '..';

const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describe(`vue-component-meta ${withTsconfig ? 'with tsconfig' : 'without tsconfig'}`, () => {

@@ -23,6 +23,8 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
const componentPath = path.resolve(__dirname, '../../vue-test-workspace/vue-component-meta/reference-type-props/component.vue');
const meta = checker.getComponentMeta(componentPath);

expect(meta.type).toEqual(TypeMeta.Class);

const foo = meta.props.find(prop => prop.name === 'foo');
const bar = meta.props.find(prop => prop.name === 'bar');
const baz = meta.props.find(prop => prop.name === 'baz');
@@ -342,6 +344,8 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
const componentPath = path.resolve(__dirname, '../../vue-test-workspace/vue-component-meta/reference-type-props/component-js.vue');
const meta = checker.getComponentMeta(componentPath);

expect(meta.type).toEqual(TypeMeta.Class);

const foo = meta.props.find(prop => prop.name === 'foo');
const bar = meta.props.find(prop => prop.name === 'bar');
const baz = meta.props.find(prop => prop.name === 'baz');
@@ -384,6 +388,8 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
const componentPath = path.resolve(__dirname, '../../vue-test-workspace/vue-component-meta/reference-type-props/component-js-setup.vue');
const meta = checker.getComponentMeta(componentPath);

expect(meta.type).toEqual(TypeMeta.Class);

const foo = meta.props.find(prop => prop.name === 'foo');
const bar = meta.props.find(prop => prop.name === 'bar');
const baz = meta.props.find(prop => prop.name === 'baz');
@@ -456,6 +462,8 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
const componentPath = path.resolve(__dirname, '../../vue-test-workspace/vue-component-meta/reference-type-events/component.vue');
const meta = checker.getComponentMeta(componentPath);

expect(meta.type).toEqual(TypeMeta.Class);

const onFoo = meta.events.find(event => event.name === 'foo');
const onBar = meta.events.find(event => event.name === 'bar');
const onBaz = meta.events.find(event => event.name === 'baz');
@@ -531,6 +539,8 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
const componentPath = path.resolve(__dirname, '../../vue-test-workspace/vue-component-meta/template-slots/component.vue');
const meta = checker.getComponentMeta(componentPath);

expect(meta.type).toEqual(TypeMeta.Class);

const a = meta.slots.find(slot =>
slot.name === 'default'
&& slot.type === '{ num: number; }'
@@ -557,6 +567,8 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
const componentPath = path.resolve(__dirname, '../../vue-test-workspace/vue-component-meta/template-slots/component-no-script.vue');
const meta = checker.getComponentMeta(componentPath);

expect(meta.type).toEqual(TypeMeta.Class);

const a = meta.slots.find(slot =>
slot.name === 'default'
&& slot.type === '{ num: number; }'
@@ -583,6 +595,8 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
const componentPath = path.resolve(__dirname, '../../vue-test-workspace/vue-component-meta/class-slots/component.vue');
const meta = checker.getComponentMeta(componentPath);

expect(meta.type).toEqual(TypeMeta.Class);

const a = meta.slots.find(slot =>
slot.name === 'default'
&& slot.type === '{ num: number; }'
@@ -600,6 +614,8 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
const componentPath = path.resolve(__dirname, '../../vue-test-workspace/vue-component-meta/reference-type-exposed/component.vue');
const meta = checker.getComponentMeta(componentPath);

expect(meta.type).toEqual(TypeMeta.Class);

const counter = meta.exposed.find(exposed =>
exposed.name === 'counter'
&& exposed.type === 'string'
@@ -613,6 +629,8 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
const componentPath = path.resolve(__dirname, '../../vue-test-workspace/vue-component-meta/ts-component/component.ts');
const meta = checker.getComponentMeta(componentPath);

expect(meta.type).toEqual(TypeMeta.Function);

const a = meta.props.find(prop =>
prop.name === 'foo'
&& prop.required === true
@@ -634,6 +652,8 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
const Foo = checker.getComponentMeta(componentPath, 'Foo');
const Bar = checker.getComponentMeta(componentPath, 'Bar');

expect(Foo.type).toEqual(TypeMeta.Function);
expect(Bar.type).toEqual(TypeMeta.Function);
expect(exportNames).toEqual(['Foo', 'Bar']);

const a = Foo.props.find(prop =>
@@ -656,6 +676,8 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
const componentPath = path.resolve(__dirname, '../../vue-test-workspace/vue-component-meta/options-api/component.ts');
const meta = checker.getComponentMeta(componentPath);

expect(meta.type).toEqual(TypeMeta.Class);

// const submitEvent = meta.events.find(evt => evt.name === 'submit');

// expect(submitEvent).toBeDefined();
@@ -703,6 +725,13 @@ const worker = (checker: ComponentMetaChecker, withTsconfig: boolean) => describ
expect(propArrayDefault).toBeDefined();
expect(propArrayDefault?.default).toEqual(`[1, 2, 3]`);
});

test('non-component', () => {
const componentPath = path.resolve(__dirname, '../../vue-test-workspace/vue-component-meta/non-component/component.ts');
const meta = checker.getComponentMeta(componentPath);

expect(meta.type).toEqual(TypeMeta.Unknown);
});
});

const checkerOptions: MetaCheckerOptions = {
Loading