aico-cli 2.1.1 → 2.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli/README.md +1 -1
- package/bin/cli/cli.js +9391 -3999
- package/bin/cli/package.json +1 -1
- package/bin/cli/sdk-tools.d.ts +83 -15
- package/dist/chunks/simple-config.mjs +1 -1
- package/package.json +2 -2
- package/templates/cursor.md +72 -15
- package/templates/personality.md +37 -13
- package/templates/skills/antfu/SKILL.md +222 -0
- package/templates/skills/antfu/references/antfu-eslint-config.md +328 -0
- package/templates/skills/antfu/references/app-development.md +60 -0
- package/templates/skills/antfu/references/github-actions.md +68 -0
- package/templates/skills/antfu/references/gitignore.md +29 -0
- package/templates/skills/antfu/references/library-development.md +85 -0
- package/templates/skills/antfu/references/monorepo.md +126 -0
- package/templates/skills/antfu/references/vscode-extensions.md +34 -0
- package/templates/skills/nuxt/GENERATION.md +5 -0
- package/templates/skills/nuxt/SKILL.md +55 -0
- package/templates/skills/nuxt/references/advanced-hooks.md +289 -0
- package/templates/skills/nuxt/references/advanced-layers.md +299 -0
- package/templates/skills/nuxt/references/advanced-module-authoring.md +554 -0
- package/templates/skills/nuxt/references/best-practices-data-fetching.md +357 -0
- package/templates/skills/nuxt/references/best-practices-ssr.md +355 -0
- package/templates/skills/nuxt/references/core-cli.md +263 -0
- package/templates/skills/nuxt/references/core-config.md +162 -0
- package/templates/skills/nuxt/references/core-data-fetching.md +236 -0
- package/templates/skills/nuxt/references/core-deployment.md +224 -0
- package/templates/skills/nuxt/references/core-directory-structure.md +269 -0
- package/templates/skills/nuxt/references/core-modules.md +292 -0
- package/templates/skills/nuxt/references/core-routing.md +226 -0
- package/templates/skills/nuxt/references/features-components-autoimport.md +328 -0
- package/templates/skills/nuxt/references/features-components.md +264 -0
- package/templates/skills/nuxt/references/features-composables.md +276 -0
- package/templates/skills/nuxt/references/features-server.md +265 -0
- package/templates/skills/nuxt/references/features-state.md +194 -0
- package/templates/skills/nuxt/references/rendering-modes.md +237 -0
- package/templates/skills/pinia/GENERATION.md +5 -0
- package/templates/skills/pinia/SKILL.md +59 -0
- package/templates/skills/pinia/references/advanced-hmr.md +61 -0
- package/templates/skills/pinia/references/advanced-nuxt.md +119 -0
- package/templates/skills/pinia/references/advanced-ssr.md +121 -0
- package/templates/skills/pinia/references/best-practices-outside-component.md +115 -0
- package/templates/skills/pinia/references/best-practices-testing.md +212 -0
- package/templates/skills/pinia/references/core-stores.md +389 -0
- package/templates/skills/pinia/references/features-composables.md +114 -0
- package/templates/skills/pinia/references/features-composing-stores.md +134 -0
- package/templates/skills/pinia/references/features-plugins.md +203 -0
- package/templates/skills/pnpm/GENERATION.md +5 -0
- package/templates/skills/pnpm/SKILL.md +42 -0
- package/templates/skills/pnpm/references/best-practices-ci.md +285 -0
- package/templates/skills/pnpm/references/best-practices-migration.md +291 -0
- package/templates/skills/pnpm/references/best-practices-performance.md +284 -0
- package/templates/skills/pnpm/references/core-cli.md +229 -0
- package/templates/skills/pnpm/references/core-config.md +188 -0
- package/templates/skills/pnpm/references/core-store.md +179 -0
- package/templates/skills/pnpm/references/core-workspaces.md +205 -0
- package/templates/skills/pnpm/references/features-aliases.md +168 -0
- package/templates/skills/pnpm/references/features-catalogs.md +159 -0
- package/templates/skills/pnpm/references/features-hooks.md +233 -0
- package/templates/skills/pnpm/references/features-overrides.md +184 -0
- package/templates/skills/pnpm/references/features-patches.md +201 -0
- package/templates/skills/pnpm/references/features-peer-deps.md +250 -0
- package/templates/skills/slidev/LICENSE.md +21 -0
- package/templates/skills/slidev/README.md +61 -0
- package/templates/skills/slidev/SKILL.md +183 -0
- package/templates/skills/slidev/SYNC.md +5 -0
- package/templates/skills/slidev/references/animation-click-marker.md +37 -0
- package/templates/skills/slidev/references/animation-drawing.md +68 -0
- package/templates/skills/slidev/references/animation-rough-marker.md +53 -0
- package/templates/skills/slidev/references/api-slide-hooks.md +37 -0
- package/templates/skills/slidev/references/build-og-image.md +36 -0
- package/templates/skills/slidev/references/build-pdf.md +40 -0
- package/templates/skills/slidev/references/build-remote-assets.md +34 -0
- package/templates/skills/slidev/references/build-seo-meta.md +43 -0
- package/templates/skills/slidev/references/code-groups.md +64 -0
- package/templates/skills/slidev/references/code-import-snippet.md +55 -0
- package/templates/skills/slidev/references/code-line-highlighting.md +50 -0
- package/templates/skills/slidev/references/code-line-numbers.md +46 -0
- package/templates/skills/slidev/references/code-magic-move.md +57 -0
- package/templates/skills/slidev/references/code-max-height.md +37 -0
- package/templates/skills/slidev/references/code-twoslash.md +42 -0
- package/templates/skills/slidev/references/core-animations.md +196 -0
- package/templates/skills/slidev/references/core-cli.md +140 -0
- package/templates/skills/slidev/references/core-components.md +197 -0
- package/templates/skills/slidev/references/core-exporting.md +148 -0
- package/templates/skills/slidev/references/core-frontmatter.md +195 -0
- package/templates/skills/slidev/references/core-global-context.md +155 -0
- package/templates/skills/slidev/references/core-headmatter.md +188 -0
- package/templates/skills/slidev/references/core-hosting.md +152 -0
- package/templates/skills/slidev/references/core-layouts.md +286 -0
- package/templates/skills/slidev/references/core-syntax.md +155 -0
- package/templates/skills/slidev/references/diagram-latex.md +55 -0
- package/templates/skills/slidev/references/diagram-mermaid.md +44 -0
- package/templates/skills/slidev/references/diagram-plantuml.md +45 -0
- package/templates/skills/slidev/references/editor-monaco-run.md +44 -0
- package/templates/skills/slidev/references/editor-monaco-write.md +24 -0
- package/templates/skills/slidev/references/editor-monaco.md +50 -0
- package/templates/skills/slidev/references/editor-prettier.md +40 -0
- package/templates/skills/slidev/references/editor-side.md +23 -0
- package/templates/skills/slidev/references/editor-vscode.md +55 -0
- package/templates/skills/slidev/references/layout-canvas-size.md +25 -0
- package/templates/skills/slidev/references/layout-draggable.md +57 -0
- package/templates/skills/slidev/references/layout-global-layers.md +50 -0
- package/templates/skills/slidev/references/layout-slots.md +75 -0
- package/templates/skills/slidev/references/layout-transform.md +33 -0
- package/templates/skills/slidev/references/layout-zoom.md +39 -0
- package/templates/skills/slidev/references/presenter-notes-ruby.md +35 -0
- package/templates/skills/slidev/references/presenter-recording.md +30 -0
- package/templates/skills/slidev/references/presenter-remote.md +40 -0
- package/templates/skills/slidev/references/presenter-timer.md +34 -0
- package/templates/skills/slidev/references/style-direction.md +34 -0
- package/templates/skills/slidev/references/style-icons.md +46 -0
- package/templates/skills/slidev/references/style-scoped.md +50 -0
- package/templates/skills/slidev/references/syntax-block-frontmatter.md +39 -0
- package/templates/skills/slidev/references/syntax-frontmatter-merging.md +49 -0
- package/templates/skills/slidev/references/syntax-importing-slides.md +60 -0
- package/templates/skills/slidev/references/syntax-mdc.md +51 -0
- package/templates/skills/slidev/references/tool-eject-theme.md +27 -0
- package/templates/skills/tech-whitepaper/SKILL.md +102 -15
- package/templates/skills/tsdown/GENERATION.md +5 -0
- package/templates/skills/tsdown/SKILL.md +59 -0
- package/templates/skills/tsdown/references/advanced-hooks.md +87 -0
- package/templates/skills/tsdown/references/advanced-plugins.md +97 -0
- package/templates/skills/tsdown/references/advanced-programmatic.md +78 -0
- package/templates/skills/tsdown/references/advanced-rolldown-options.md +114 -0
- package/templates/skills/tsdown/references/core-cli.md +116 -0
- package/templates/skills/tsdown/references/core-config.md +86 -0
- package/templates/skills/tsdown/references/core-entry.md +74 -0
- package/templates/skills/tsdown/references/features-optimization.md +83 -0
- package/templates/skills/tsdown/references/features-shims.md +92 -0
- package/templates/skills/tsdown/references/features-unbundle.md +63 -0
- package/templates/skills/tsdown/references/features-watch.md +60 -0
- package/templates/skills/tsdown/references/options-dependencies.md +88 -0
- package/templates/skills/tsdown/references/options-dts.md +104 -0
- package/templates/skills/tsdown/references/options-output.md +124 -0
- package/templates/skills/tsdown/references/options-package-exports.md +114 -0
- package/templates/skills/tsdown/references/recipes-frameworks.md +109 -0
- package/templates/skills/tsdown/references/recipes-migration.md +84 -0
- package/templates/skills/turborepo/LICENSE.md +7 -0
- package/templates/skills/turborepo/SKILL.md +914 -0
- package/templates/skills/turborepo/SYNC.md +5 -0
- package/templates/skills/turborepo/command/turborepo.md +70 -0
- package/templates/skills/turborepo/references/best-practices/README.md +241 -0
- package/templates/skills/turborepo/references/best-practices/dependencies.md +246 -0
- package/templates/skills/turborepo/references/best-practices/packages.md +335 -0
- package/templates/skills/turborepo/references/best-practices/structure.md +269 -0
- package/templates/skills/turborepo/references/boundaries/README.md +126 -0
- package/templates/skills/turborepo/references/caching/README.md +107 -0
- package/templates/skills/turborepo/references/caching/gotchas.md +169 -0
- package/templates/skills/turborepo/references/caching/remote-cache.md +127 -0
- package/templates/skills/turborepo/references/ci/README.md +79 -0
- package/templates/skills/turborepo/references/ci/github-actions.md +162 -0
- package/templates/skills/turborepo/references/ci/patterns.md +145 -0
- package/templates/skills/turborepo/references/ci/vercel.md +103 -0
- package/templates/skills/turborepo/references/cli/README.md +100 -0
- package/templates/skills/turborepo/references/cli/commands.md +297 -0
- package/templates/skills/turborepo/references/configuration/README.md +211 -0
- package/templates/skills/turborepo/references/configuration/global-options.md +195 -0
- package/templates/skills/turborepo/references/configuration/gotchas.md +348 -0
- package/templates/skills/turborepo/references/configuration/tasks.md +285 -0
- package/templates/skills/turborepo/references/environment/README.md +96 -0
- package/templates/skills/turborepo/references/environment/gotchas.md +145 -0
- package/templates/skills/turborepo/references/environment/modes.md +101 -0
- package/templates/skills/turborepo/references/filtering/README.md +148 -0
- package/templates/skills/turborepo/references/filtering/patterns.md +152 -0
- package/templates/skills/turborepo/references/watch/README.md +99 -0
- package/templates/skills/unocss/GENERATION.md +5 -0
- package/templates/skills/unocss/SKILL.md +64 -0
- package/templates/skills/unocss/references/core-config.md +187 -0
- package/templates/skills/unocss/references/core-extracting.md +137 -0
- package/templates/skills/unocss/references/core-layers.md +104 -0
- package/templates/skills/unocss/references/core-rules.md +166 -0
- package/templates/skills/unocss/references/core-safelist.md +105 -0
- package/templates/skills/unocss/references/core-shortcuts.md +89 -0
- package/templates/skills/unocss/references/core-theme.md +172 -0
- package/templates/skills/unocss/references/core-variants.md +175 -0
- package/templates/skills/unocss/references/integrations-nuxt.md +199 -0
- package/templates/skills/unocss/references/integrations-vite.md +283 -0
- package/templates/skills/unocss/references/preset-attributify.md +142 -0
- package/templates/skills/unocss/references/preset-icons.md +184 -0
- package/templates/skills/unocss/references/preset-mini.md +158 -0
- package/templates/skills/unocss/references/preset-rem-to-px.md +97 -0
- package/templates/skills/unocss/references/preset-tagify.md +134 -0
- package/templates/skills/unocss/references/preset-typography.md +95 -0
- package/templates/skills/unocss/references/preset-web-fonts.md +91 -0
- package/templates/skills/unocss/references/preset-wind3.md +194 -0
- package/templates/skills/unocss/references/preset-wind4.md +247 -0
- package/templates/skills/unocss/references/transformer-attributify-jsx.md +156 -0
- package/templates/skills/unocss/references/transformer-compile-class.md +128 -0
- package/templates/skills/unocss/references/transformer-directives.md +157 -0
- package/templates/skills/unocss/references/transformer-variant-group.md +97 -0
- package/templates/skills/vite/GENERATION.md +5 -0
- package/templates/skills/vite/SKILL.md +50 -0
- package/templates/skills/vite/references/advanced-api.md +218 -0
- package/templates/skills/vite/references/advanced-backend.md +164 -0
- package/templates/skills/vite/references/advanced-performance.md +168 -0
- package/templates/skills/vite/references/advanced-plugin-api.md +258 -0
- package/templates/skills/vite/references/build-library.md +172 -0
- package/templates/skills/vite/references/build-production.md +220 -0
- package/templates/skills/vite/references/build-ssr.md +194 -0
- package/templates/skills/vite/references/core-cli.md +137 -0
- package/templates/skills/vite/references/core-config.md +176 -0
- package/templates/skills/vite/references/core-features.md +170 -0
- package/templates/skills/vite/references/core-plugins.md +154 -0
- package/templates/skills/vite/references/features-assets.md +138 -0
- package/templates/skills/vite/references/features-css.md +215 -0
- package/templates/skills/vite/references/features-dep-bundling.md +148 -0
- package/templates/skills/vite/references/features-env.md +161 -0
- package/templates/skills/vite/references/features-glob-import.md +161 -0
- package/templates/skills/vite/references/features-hmr.md +200 -0
- package/templates/skills/vite/references/features-workers.md +115 -0
- package/templates/skills/vitepress/GENERATION.md +5 -0
- package/templates/skills/vitepress/SKILL.md +65 -0
- package/templates/skills/vitepress/references/advanced-i18n.md +299 -0
- package/templates/skills/vitepress/references/advanced-ssr.md +228 -0
- package/templates/skills/vitepress/references/core-cli.md +119 -0
- package/templates/skills/vitepress/references/core-config.md +189 -0
- package/templates/skills/vitepress/references/core-markdown.md +277 -0
- package/templates/skills/vitepress/references/core-routing.md +169 -0
- package/templates/skills/vitepress/references/features-code-blocks.md +243 -0
- package/templates/skills/vitepress/references/features-data-loading.md +220 -0
- package/templates/skills/vitepress/references/features-dynamic-routes.md +235 -0
- package/templates/skills/vitepress/references/features-vue.md +224 -0
- package/templates/skills/vitepress/references/recipes-deploy.md +240 -0
- package/templates/skills/vitepress/references/theme-config.md +315 -0
- package/templates/skills/vitepress/references/theme-custom.md +269 -0
- package/templates/skills/vitepress/references/theme-customization.md +290 -0
- package/templates/skills/vitest/GENERATION.md +5 -0
- package/templates/skills/vitest/SKILL.md +52 -0
- package/templates/skills/vitest/references/advanced-environments.md +264 -0
- package/templates/skills/vitest/references/advanced-projects.md +300 -0
- package/templates/skills/vitest/references/advanced-type-testing.md +237 -0
- package/templates/skills/vitest/references/advanced-vi.md +249 -0
- package/templates/skills/vitest/references/core-cli.md +166 -0
- package/templates/skills/vitest/references/core-config.md +174 -0
- package/templates/skills/vitest/references/core-describe.md +193 -0
- package/templates/skills/vitest/references/core-expect.md +219 -0
- package/templates/skills/vitest/references/core-hooks.md +244 -0
- package/templates/skills/vitest/references/core-test-api.md +233 -0
- package/templates/skills/vitest/references/features-concurrency.md +250 -0
- package/templates/skills/vitest/references/features-context.md +238 -0
- package/templates/skills/vitest/references/features-coverage.md +207 -0
- package/templates/skills/vitest/references/features-filtering.md +211 -0
- package/templates/skills/vitest/references/features-mocking.md +265 -0
- package/templates/skills/vitest/references/features-snapshots.md +207 -0
- package/templates/skills/vue/GENERATION.md +5 -0
- package/templates/skills/vue/SKILL.md +63 -0
- package/templates/skills/vue/references/advanced-async-suspense.md +246 -0
- package/templates/skills/vue/references/advanced-provide-inject.md +174 -0
- package/templates/skills/vue/references/components-emits.md +139 -0
- package/templates/skills/vue/references/components-lifecycle.md +192 -0
- package/templates/skills/vue/references/components-props.md +211 -0
- package/templates/skills/vue/references/components-slots.md +201 -0
- package/templates/skills/vue/references/components-v-model.md +183 -0
- package/templates/skills/vue/references/core-reactivity.md +289 -0
- package/templates/skills/vue/references/features-composables.md +262 -0
- package/templates/skills/vue/references/features-directives.md +224 -0
- package/templates/skills/vue/references/features-script-setup.md +247 -0
- package/templates/skills/vue/references/features-template-refs.md +212 -0
- package/templates/skills/vue/references/features-typescript.md +274 -0
- package/templates/skills/vue-best-practices/LICENSE.md +21 -0
- package/templates/skills/vue-best-practices/SKILL.md +38 -0
- package/templates/skills/vue-best-practices/SYNC.md +5 -0
- package/templates/skills/vue-best-practices/rules/codeactions-save-performance.md +79 -0
- package/templates/skills/vue-best-practices/rules/data-attributes-config.md +74 -0
- package/templates/skills/vue-best-practices/rules/deep-watch-numeric.md +97 -0
- package/templates/skills/vue-best-practices/rules/define-model-update-event.md +79 -0
- package/templates/skills/vue-best-practices/rules/duplicate-plugin-detection.md +102 -0
- package/templates/skills/vue-best-practices/rules/extract-component-props.md +57 -0
- package/templates/skills/vue-best-practices/rules/fallthrough-attributes.md +63 -0
- package/templates/skills/vue-best-practices/rules/hmr-vue-ssr.md +124 -0
- package/templates/skills/vue-best-practices/rules/module-resolution-bundler.md +81 -0
- package/templates/skills/vue-best-practices/rules/pinia-store-mocking.md +159 -0
- package/templates/skills/vue-best-practices/rules/script-setup-jsdoc.md +85 -0
- package/templates/skills/vue-best-practices/rules/strict-css-modules.md +68 -0
- package/templates/skills/vue-best-practices/rules/volar-3-breaking-changes.md +65 -0
- package/templates/skills/vue-best-practices/rules/vue-directive-comments.md +73 -0
- package/templates/skills/vue-best-practices/rules/vue-router-typed-params.md +81 -0
- package/templates/skills/vue-best-practices/rules/vue-tsc-strict-templates.md +69 -0
- package/templates/skills/vue-best-practices/rules/with-defaults-union-types.md +102 -0
- package/templates/skills/vueuse-functions/LICENSE.md +21 -0
- package/templates/skills/vueuse-functions/SKILL.md +418 -0
- package/templates/skills/vueuse-functions/SYNC.md +5 -0
- package/templates/skills/vueuse-functions/references/computedAsync.md +159 -0
- package/templates/skills/vueuse-functions/references/computedEager.md +62 -0
- package/templates/skills/vueuse-functions/references/computedInject.md +86 -0
- package/templates/skills/vueuse-functions/references/computedWithControl.md +100 -0
- package/templates/skills/vueuse-functions/references/createEventHook.md +86 -0
- package/templates/skills/vueuse-functions/references/createGenericProjection.md +25 -0
- package/templates/skills/vueuse-functions/references/createGlobalState.md +95 -0
- package/templates/skills/vueuse-functions/references/createInjectionState.md +215 -0
- package/templates/skills/vueuse-functions/references/createProjection.md +31 -0
- package/templates/skills/vueuse-functions/references/createRef.md +54 -0
- package/templates/skills/vueuse-functions/references/createReusableTemplate.md +357 -0
- package/templates/skills/vueuse-functions/references/createSharedComposable.md +42 -0
- package/templates/skills/vueuse-functions/references/createTemplatePromise.md +259 -0
- package/templates/skills/vueuse-functions/references/createUnrefFn.md +51 -0
- package/templates/skills/vueuse-functions/references/extendRef.md +76 -0
- package/templates/skills/vueuse-functions/references/from.md +48 -0
- package/templates/skills/vueuse-functions/references/get.md +30 -0
- package/templates/skills/vueuse-functions/references/injectLocal.md +35 -0
- package/templates/skills/vueuse-functions/references/isDefined.md +31 -0
- package/templates/skills/vueuse-functions/references/logicAnd.md +40 -0
- package/templates/skills/vueuse-functions/references/logicNot.md +36 -0
- package/templates/skills/vueuse-functions/references/logicOr.md +40 -0
- package/templates/skills/vueuse-functions/references/makeDestructurable.md +41 -0
- package/templates/skills/vueuse-functions/references/onClickOutside.md +187 -0
- package/templates/skills/vueuse-functions/references/onElementRemoval.md +64 -0
- package/templates/skills/vueuse-functions/references/onKeyStroke.md +176 -0
- package/templates/skills/vueuse-functions/references/onLongPress.md +170 -0
- package/templates/skills/vueuse-functions/references/onStartTyping.md +43 -0
- package/templates/skills/vueuse-functions/references/provideLocal.md +37 -0
- package/templates/skills/vueuse-functions/references/reactify.md +144 -0
- package/templates/skills/vueuse-functions/references/reactifyObject.md +61 -0
- package/templates/skills/vueuse-functions/references/reactiveComputed.md +34 -0
- package/templates/skills/vueuse-functions/references/reactiveOmit.md +86 -0
- package/templates/skills/vueuse-functions/references/reactivePick.md +106 -0
- package/templates/skills/vueuse-functions/references/refAutoReset.md +44 -0
- package/templates/skills/vueuse-functions/references/refDebounced.md +81 -0
- package/templates/skills/vueuse-functions/references/refDefault.md +36 -0
- package/templates/skills/vueuse-functions/references/refManualReset.md +44 -0
- package/templates/skills/vueuse-functions/references/refThrottled.md +99 -0
- package/templates/skills/vueuse-functions/references/refWithControl.md +146 -0
- package/templates/skills/vueuse-functions/references/set.md +30 -0
- package/templates/skills/vueuse-functions/references/syncRef.md +195 -0
- package/templates/skills/vueuse-functions/references/syncRefs.md +128 -0
- package/templates/skills/vueuse-functions/references/templateRef.md +86 -0
- package/templates/skills/vueuse-functions/references/toObserver.md +38 -0
- package/templates/skills/vueuse-functions/references/toReactive.md +41 -0
- package/templates/skills/vueuse-functions/references/toRef.md +75 -0
- package/templates/skills/vueuse-functions/references/toRefs.md +81 -0
- package/templates/skills/vueuse-functions/references/tryOnBeforeMount.md +34 -0
- package/templates/skills/vueuse-functions/references/tryOnBeforeUnmount.md +32 -0
- package/templates/skills/vueuse-functions/references/tryOnMounted.md +34 -0
- package/templates/skills/vueuse-functions/references/tryOnScopeDispose.md +31 -0
- package/templates/skills/vueuse-functions/references/tryOnUnmounted.md +32 -0
- package/templates/skills/vueuse-functions/references/unrefElement.md +54 -0
- package/templates/skills/vueuse-functions/references/until.md +165 -0
- package/templates/skills/vueuse-functions/references/useAbs.md +31 -0
- package/templates/skills/vueuse-functions/references/useActiveElement.md +65 -0
- package/templates/skills/vueuse-functions/references/useAnimate.md +140 -0
- package/templates/skills/vueuse-functions/references/useArrayDifference.md +84 -0
- package/templates/skills/vueuse-functions/references/useArrayEvery.md +59 -0
- package/templates/skills/vueuse-functions/references/useArrayFilter.md +63 -0
- package/templates/skills/vueuse-functions/references/useArrayFind.md +50 -0
- package/templates/skills/vueuse-functions/references/useArrayFindIndex.md +59 -0
- package/templates/skills/vueuse-functions/references/useArrayFindLast.md +52 -0
- package/templates/skills/vueuse-functions/references/useArrayIncludes.md +63 -0
- package/templates/skills/vueuse-functions/references/useArrayJoin.md +74 -0
- package/templates/skills/vueuse-functions/references/useArrayMap.md +59 -0
- package/templates/skills/vueuse-functions/references/useArrayReduce.md +81 -0
- package/templates/skills/vueuse-functions/references/useArraySome.md +59 -0
- package/templates/skills/vueuse-functions/references/useArrayUnique.md +76 -0
- package/templates/skills/vueuse-functions/references/useAsyncQueue.md +87 -0
- package/templates/skills/vueuse-functions/references/useAsyncState.md +140 -0
- package/templates/skills/vueuse-functions/references/useAsyncValidator.md +70 -0
- package/templates/skills/vueuse-functions/references/useAuth.md +114 -0
- package/templates/skills/vueuse-functions/references/useAverage.md +36 -0
- package/templates/skills/vueuse-functions/references/useAxios.md +292 -0
- package/templates/skills/vueuse-functions/references/useBase64.md +88 -0
- package/templates/skills/vueuse-functions/references/useBattery.md +67 -0
- package/templates/skills/vueuse-functions/references/useBluetooth.md +161 -0
- package/templates/skills/vueuse-functions/references/useBreakpoints.md +128 -0
- package/templates/skills/vueuse-functions/references/useBroadcastChannel.md +74 -0
- package/templates/skills/vueuse-functions/references/useBrowserLocation.md +83 -0
- package/templates/skills/vueuse-functions/references/useCached.md +53 -0
- package/templates/skills/vueuse-functions/references/useCeil.md +31 -0
- package/templates/skills/vueuse-functions/references/useChangeCase.md +79 -0
- package/templates/skills/vueuse-functions/references/useClamp.md +51 -0
- package/templates/skills/vueuse-functions/references/useClipboard.md +99 -0
- package/templates/skills/vueuse-functions/references/useClipboardItems.md +93 -0
- package/templates/skills/vueuse-functions/references/useCloned.md +91 -0
- package/templates/skills/vueuse-functions/references/useColorMode.md +171 -0
- package/templates/skills/vueuse-functions/references/useConfirmDialog.md +159 -0
- package/templates/skills/vueuse-functions/references/useCookies.md +162 -0
- package/templates/skills/vueuse-functions/references/useCountdown.md +102 -0
- package/templates/skills/vueuse-functions/references/useCounter.md +86 -0
- package/templates/skills/vueuse-functions/references/useCssVar.md +50 -0
- package/templates/skills/vueuse-functions/references/useCurrentElement.md +61 -0
- package/templates/skills/vueuse-functions/references/useCycleList.md +75 -0
- package/templates/skills/vueuse-functions/references/useDark.md +142 -0
- package/templates/skills/vueuse-functions/references/useDateFormat.md +145 -0
- package/templates/skills/vueuse-functions/references/useDebounceFn.md +100 -0
- package/templates/skills/vueuse-functions/references/useDebouncedRefHistory.md +40 -0
- package/templates/skills/vueuse-functions/references/useDeviceMotion.md +87 -0
- package/templates/skills/vueuse-functions/references/useDeviceOrientation.md +62 -0
- package/templates/skills/vueuse-functions/references/useDevicePixelRatio.md +44 -0
- package/templates/skills/vueuse-functions/references/useDevicesList.md +90 -0
- package/templates/skills/vueuse-functions/references/useDisplayMedia.md +71 -0
- package/templates/skills/vueuse-functions/references/useDocumentVisibility.md +45 -0
- package/templates/skills/vueuse-functions/references/useDraggable.md +210 -0
- package/templates/skills/vueuse-functions/references/useDrauu.md +65 -0
- package/templates/skills/vueuse-functions/references/useDropZone.md +83 -0
- package/templates/skills/vueuse-functions/references/useElementBounding.md +131 -0
- package/templates/skills/vueuse-functions/references/useElementByPoint.md +45 -0
- package/templates/skills/vueuse-functions/references/useElementHover.md +79 -0
- package/templates/skills/vueuse-functions/references/useElementSize.md +78 -0
- package/templates/skills/vueuse-functions/references/useElementVisibility.md +126 -0
- package/templates/skills/vueuse-functions/references/useEventBus.md +101 -0
- package/templates/skills/vueuse-functions/references/useEventListener.md +184 -0
- package/templates/skills/vueuse-functions/references/useEventSource.md +204 -0
- package/templates/skills/vueuse-functions/references/useExtractedObservable.md +185 -0
- package/templates/skills/vueuse-functions/references/useEyeDropper.md +71 -0
- package/templates/skills/vueuse-functions/references/useFavicon.md +67 -0
- package/templates/skills/vueuse-functions/references/useFetch.md +546 -0
- package/templates/skills/vueuse-functions/references/useFileDialog.md +91 -0
- package/templates/skills/vueuse-functions/references/useFileSystemAccess.md +162 -0
- package/templates/skills/vueuse-functions/references/useFirestore.md +104 -0
- package/templates/skills/vueuse-functions/references/useFloor.md +31 -0
- package/templates/skills/vueuse-functions/references/useFocus.md +99 -0
- package/templates/skills/vueuse-functions/references/useFocusTrap.md +245 -0
- package/templates/skills/vueuse-functions/references/useFocusWithin.md +57 -0
- package/templates/skills/vueuse-functions/references/useFps.md +28 -0
- package/templates/skills/vueuse-functions/references/useFullscreen.md +75 -0
- package/templates/skills/vueuse-functions/references/useFuse.md +107 -0
- package/templates/skills/vueuse-functions/references/useGamepad.md +223 -0
- package/templates/skills/vueuse-functions/references/useGeolocation.md +86 -0
- package/templates/skills/vueuse-functions/references/useIDBKeyval.md +93 -0
- package/templates/skills/vueuse-functions/references/useIdle.md +89 -0
- package/templates/skills/vueuse-functions/references/useImage.md +86 -0
- package/templates/skills/vueuse-functions/references/useInfiniteScroll.md +157 -0
- package/templates/skills/vueuse-functions/references/useIntersectionObserver.md +118 -0
- package/templates/skills/vueuse-functions/references/useInterval.md +69 -0
- package/templates/skills/vueuse-functions/references/useIntervalFn.md +50 -0
- package/templates/skills/vueuse-functions/references/useIpcRenderer.md +118 -0
- package/templates/skills/vueuse-functions/references/useIpcRendererInvoke.md +58 -0
- package/templates/skills/vueuse-functions/references/useIpcRendererOn.md +52 -0
- package/templates/skills/vueuse-functions/references/useJwt.md +57 -0
- package/templates/skills/vueuse-functions/references/useKeyModifier.md +87 -0
- package/templates/skills/vueuse-functions/references/useLastChanged.md +63 -0
- package/templates/skills/vueuse-functions/references/useLocalStorage.md +41 -0
- package/templates/skills/vueuse-functions/references/useMagicKeys.md +217 -0
- package/templates/skills/vueuse-functions/references/useManualRefHistory.md +204 -0
- package/templates/skills/vueuse-functions/references/useMath.md +47 -0
- package/templates/skills/vueuse-functions/references/useMax.md +36 -0
- package/templates/skills/vueuse-functions/references/useMediaControls.md +571 -0
- package/templates/skills/vueuse-functions/references/useMediaQuery.md +53 -0
- package/templates/skills/vueuse-functions/references/useMemoize.md +175 -0
- package/templates/skills/vueuse-functions/references/useMemory.md +56 -0
- package/templates/skills/vueuse-functions/references/useMin.md +36 -0
- package/templates/skills/vueuse-functions/references/useMounted.md +38 -0
- package/templates/skills/vueuse-functions/references/useMouse.md +114 -0
- package/templates/skills/vueuse-functions/references/useMouseInElement.md +123 -0
- package/templates/skills/vueuse-functions/references/useMousePressed.md +112 -0
- package/templates/skills/vueuse-functions/references/useMutationObserver.md +62 -0
- package/templates/skills/vueuse-functions/references/useNProgress.md +78 -0
- package/templates/skills/vueuse-functions/references/useNavigatorLanguage.md +57 -0
- package/templates/skills/vueuse-functions/references/useNetwork.md +106 -0
- package/templates/skills/vueuse-functions/references/useNow.md +75 -0
- package/templates/skills/vueuse-functions/references/useObjectUrl.md +55 -0
- package/templates/skills/vueuse-functions/references/useObservable.md +67 -0
- package/templates/skills/vueuse-functions/references/useOffsetPagination.md +199 -0
- package/templates/skills/vueuse-functions/references/useOnline.md +41 -0
- package/templates/skills/vueuse-functions/references/usePageLeave.md +42 -0
- package/templates/skills/vueuse-functions/references/useParallax.md +58 -0
- package/templates/skills/vueuse-functions/references/useParentElement.md +54 -0
- package/templates/skills/vueuse-functions/references/usePerformanceObserver.md +48 -0
- package/templates/skills/vueuse-functions/references/usePermission.md +78 -0
- package/templates/skills/vueuse-functions/references/usePointer.md +89 -0
- package/templates/skills/vueuse-functions/references/usePointerLock.md +60 -0
- package/templates/skills/vueuse-functions/references/usePointerSwipe.md +80 -0
- package/templates/skills/vueuse-functions/references/usePrecision.md +49 -0
- package/templates/skills/vueuse-functions/references/usePreferredColorScheme.md +42 -0
- package/templates/skills/vueuse-functions/references/usePreferredContrast.md +42 -0
- package/templates/skills/vueuse-functions/references/usePreferredDark.md +41 -0
- package/templates/skills/vueuse-functions/references/usePreferredLanguages.md +41 -0
- package/templates/skills/vueuse-functions/references/usePreferredReducedMotion.md +42 -0
- package/templates/skills/vueuse-functions/references/usePreferredReducedTransparency.md +42 -0
- package/templates/skills/vueuse-functions/references/usePrevious.md +40 -0
- package/templates/skills/vueuse-functions/references/useProjection.md +38 -0
- package/templates/skills/vueuse-functions/references/useQRCode.md +53 -0
- package/templates/skills/vueuse-functions/references/useRTDB.md +70 -0
- package/templates/skills/vueuse-functions/references/useRafFn.md +68 -0
- package/templates/skills/vueuse-functions/references/useRefHistory.md +292 -0
- package/templates/skills/vueuse-functions/references/useResizeObserver.md +110 -0
- package/templates/skills/vueuse-functions/references/useRound.md +31 -0
- package/templates/skills/vueuse-functions/references/useRouteHash.md +27 -0
- package/templates/skills/vueuse-functions/references/useRouteParams.md +38 -0
- package/templates/skills/vueuse-functions/references/useRouteQuery.md +38 -0
- package/templates/skills/vueuse-functions/references/useSSRWidth.md +47 -0
- package/templates/skills/vueuse-functions/references/useScreenOrientation.md +96 -0
- package/templates/skills/vueuse-functions/references/useScreenSafeArea.md +60 -0
- package/templates/skills/vueuse-functions/references/useScriptTag.md +116 -0
- package/templates/skills/vueuse-functions/references/useScroll.md +238 -0
- package/templates/skills/vueuse-functions/references/useScrollLock.md +66 -0
- package/templates/skills/vueuse-functions/references/useSessionStorage.md +41 -0
- package/templates/skills/vueuse-functions/references/useShare.md +68 -0
- package/templates/skills/vueuse-functions/references/useSortable.md +177 -0
- package/templates/skills/vueuse-functions/references/useSorted.md +90 -0
- package/templates/skills/vueuse-functions/references/useSpeechRecognition.md +94 -0
- package/templates/skills/vueuse-functions/references/useSpeechSynthesis.md +105 -0
- package/templates/skills/vueuse-functions/references/useStepper.md +137 -0
- package/templates/skills/vueuse-functions/references/useStorage.md +219 -0
- package/templates/skills/vueuse-functions/references/useStorageAsync.md +134 -0
- package/templates/skills/vueuse-functions/references/useStyleTag.md +131 -0
- package/templates/skills/vueuse-functions/references/useSubject.md +52 -0
- package/templates/skills/vueuse-functions/references/useSubscription.md +33 -0
- package/templates/skills/vueuse-functions/references/useSum.md +36 -0
- package/templates/skills/vueuse-functions/references/useSupported.md +29 -0
- package/templates/skills/vueuse-functions/references/useSwipe.md +75 -0
- package/templates/skills/vueuse-functions/references/useTemplateRefsList.md +37 -0
- package/templates/skills/vueuse-functions/references/useTextDirection.md +75 -0
- package/templates/skills/vueuse-functions/references/useTextSelection.md +40 -0
- package/templates/skills/vueuse-functions/references/useTextareaAutosize.md +97 -0
- package/templates/skills/vueuse-functions/references/useThrottleFn.md +57 -0
- package/templates/skills/vueuse-functions/references/useThrottledRefHistory.md +47 -0
- package/templates/skills/vueuse-functions/references/useTimeAgo.md +152 -0
- package/templates/skills/vueuse-functions/references/useTimeAgoIntl.md +116 -0
- package/templates/skills/vueuse-functions/references/useTimeout.md +75 -0
- package/templates/skills/vueuse-functions/references/useTimeoutFn.md +51 -0
- package/templates/skills/vueuse-functions/references/useTimeoutPoll.md +47 -0
- package/templates/skills/vueuse-functions/references/useTimestamp.md +85 -0
- package/templates/skills/vueuse-functions/references/useTitle.md +113 -0
- package/templates/skills/vueuse-functions/references/useToNumber.md +54 -0
- package/templates/skills/vueuse-functions/references/useToString.md +34 -0
- package/templates/skills/vueuse-functions/references/useToggle.md +56 -0
- package/templates/skills/vueuse-functions/references/useTransition.md +265 -0
- package/templates/skills/vueuse-functions/references/useTrunc.md +33 -0
- package/templates/skills/vueuse-functions/references/useUrlSearchParams.md +121 -0
- package/templates/skills/vueuse-functions/references/useUserMedia.md +1138 -0
- package/templates/skills/vueuse-functions/references/useVModel.md +116 -0
- package/templates/skills/vueuse-functions/references/useVModels.md +67 -0
- package/templates/skills/vueuse-functions/references/useVibrate.md +83 -0
- package/templates/skills/vueuse-functions/references/useVirtualList.md +184 -0
- package/templates/skills/vueuse-functions/references/useWakeLock.md +50 -0
- package/templates/skills/vueuse-functions/references/useWebNotification.md +177 -0
- package/templates/skills/vueuse-functions/references/useWebSocket.md +268 -0
- package/templates/skills/vueuse-functions/references/useWebWorker.md +60 -0
- package/templates/skills/vueuse-functions/references/useWebWorkerFn.md +102 -0
- package/templates/skills/vueuse-functions/references/useWindowFocus.md +46 -0
- package/templates/skills/vueuse-functions/references/useWindowScroll.md +62 -0
- package/templates/skills/vueuse-functions/references/useWindowSize.md +76 -0
- package/templates/skills/vueuse-functions/references/useZoomFactor.md +53 -0
- package/templates/skills/vueuse-functions/references/useZoomLevel.md +53 -0
- package/templates/skills/vueuse-functions/references/watchArray.md +53 -0
- package/templates/skills/vueuse-functions/references/watchAtMost.md +54 -0
- package/templates/skills/vueuse-functions/references/watchDebounced.md +72 -0
- package/templates/skills/vueuse-functions/references/watchDeep.md +54 -0
- package/templates/skills/vueuse-functions/references/watchExtractedObservable.md +167 -0
- package/templates/skills/vueuse-functions/references/watchIgnorable.md +120 -0
- package/templates/skills/vueuse-functions/references/watchImmediate.md +44 -0
- package/templates/skills/vueuse-functions/references/watchOnce.md +41 -0
- package/templates/skills/vueuse-functions/references/watchPausable.md +86 -0
- package/templates/skills/vueuse-functions/references/watchThrottled.md +73 -0
- package/templates/skills/vueuse-functions/references/watchTriggerable.md +97 -0
- package/templates/skills/vueuse-functions/references/watchWithFilter.md +55 -0
- package/templates/skills/vueuse-functions/references/whenever.md +100 -0
- package/templates/skills/web-design-guidelines/SKILL.md +39 -0
- package/templates/skills/web-design-guidelines/SYNC.md +5 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Mocking Pinia Stores with Vitest
|
|
3
|
+
impact: HIGH
|
|
4
|
+
impactDescription: properly mocks Pinia stores in component tests
|
|
5
|
+
type: efficiency
|
|
6
|
+
tags: pinia, vitest, testing, mock, createTestingPinia, store
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Mocking Pinia Stores with Vitest
|
|
10
|
+
|
|
11
|
+
**Impact: HIGH** - properly mocks Pinia stores in component tests
|
|
12
|
+
|
|
13
|
+
Developers struggle to properly mock Pinia stores: `createTestingPinia` requires explicit `createSpy` configuration, and "injection Symbol(pinia) not found" errors occur without proper setup.
|
|
14
|
+
|
|
15
|
+
> **Important (@pinia/testing 1.0+):** The `createSpy` option is **REQUIRED**, not optional. Omitting it throws an error: "You must configure the `createSpy` option."
|
|
16
|
+
|
|
17
|
+
## Symptoms
|
|
18
|
+
|
|
19
|
+
- "injection Symbol(pinia) not found" error
|
|
20
|
+
- "You must configure the `createSpy` option" error
|
|
21
|
+
- Actions not properly mocked
|
|
22
|
+
- Store state not reset between tests
|
|
23
|
+
|
|
24
|
+
## Fix
|
|
25
|
+
|
|
26
|
+
**Pattern 1: Basic setup with createTestingPinia**
|
|
27
|
+
```typescript
|
|
28
|
+
import { mount } from '@vue/test-utils'
|
|
29
|
+
import { createTestingPinia } from '@pinia/testing'
|
|
30
|
+
import { vi } from 'vitest'
|
|
31
|
+
import MyComponent from './MyComponent.vue'
|
|
32
|
+
import { useCounterStore } from '@/stores/counter'
|
|
33
|
+
|
|
34
|
+
test('component uses store', async () => {
|
|
35
|
+
const wrapper = mount(MyComponent, {
|
|
36
|
+
global: {
|
|
37
|
+
plugins: [
|
|
38
|
+
createTestingPinia({
|
|
39
|
+
createSpy: vi.fn, // REQUIRED in @pinia/testing 1.0+
|
|
40
|
+
initialState: {
|
|
41
|
+
counter: { count: 10 } // Set initial state
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
// Get the store instance AFTER mounting
|
|
49
|
+
const store = useCounterStore()
|
|
50
|
+
|
|
51
|
+
// Actions are automatically stubbed
|
|
52
|
+
await wrapper.find('button').trigger('click')
|
|
53
|
+
expect(store.increment).toHaveBeenCalled()
|
|
54
|
+
})
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Pattern 2: Customize action behavior**
|
|
58
|
+
```typescript
|
|
59
|
+
test('component handles async action', async () => {
|
|
60
|
+
const wrapper = mount(MyComponent, {
|
|
61
|
+
global: {
|
|
62
|
+
plugins: [
|
|
63
|
+
createTestingPinia({
|
|
64
|
+
createSpy: vi.fn,
|
|
65
|
+
stubActions: false // Don't stub, use real actions
|
|
66
|
+
})
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
const store = useCounterStore()
|
|
72
|
+
|
|
73
|
+
// Override specific action
|
|
74
|
+
store.fetchData = vi.fn().mockResolvedValue({ items: [] })
|
|
75
|
+
|
|
76
|
+
await wrapper.find('.load-button').trigger('click')
|
|
77
|
+
expect(store.fetchData).toHaveBeenCalled()
|
|
78
|
+
})
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Pattern 3: Testing store directly**
|
|
82
|
+
```typescript
|
|
83
|
+
import { setActivePinia, createPinia } from 'pinia'
|
|
84
|
+
import { useCounterStore } from '@/stores/counter'
|
|
85
|
+
|
|
86
|
+
describe('Counter Store', () => {
|
|
87
|
+
beforeEach(() => {
|
|
88
|
+
setActivePinia(createPinia())
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
test('increments count', () => {
|
|
92
|
+
const store = useCounterStore()
|
|
93
|
+
expect(store.count).toBe(0)
|
|
94
|
+
|
|
95
|
+
store.increment()
|
|
96
|
+
expect(store.count).toBe(1)
|
|
97
|
+
})
|
|
98
|
+
})
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Setup Store with Vitest
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
// stores/counter.ts - Setup store syntax
|
|
105
|
+
export const useCounterStore = defineStore('counter', () => {
|
|
106
|
+
const count = ref(0)
|
|
107
|
+
const doubleCount = computed(() => count.value * 2)
|
|
108
|
+
|
|
109
|
+
function increment() {
|
|
110
|
+
count.value++
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return { count, doubleCount, increment }
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
// Test file
|
|
117
|
+
test('setup store works', async () => {
|
|
118
|
+
const pinia = createTestingPinia({
|
|
119
|
+
createSpy: vi.fn,
|
|
120
|
+
initialState: {
|
|
121
|
+
counter: { count: 5 }
|
|
122
|
+
}
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
const wrapper = mount(MyComponent, {
|
|
126
|
+
global: { plugins: [pinia] }
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
const store = useCounterStore()
|
|
130
|
+
expect(store.count).toBe(5)
|
|
131
|
+
expect(store.doubleCount).toBe(10)
|
|
132
|
+
})
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Reset Between Tests
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
describe('Store Tests', () => {
|
|
139
|
+
let pinia: Pinia
|
|
140
|
+
|
|
141
|
+
beforeEach(() => {
|
|
142
|
+
pinia = createTestingPinia({
|
|
143
|
+
createSpy: vi.fn
|
|
144
|
+
})
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
afterEach(() => {
|
|
148
|
+
vi.clearAllMocks()
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
test('test 1', () => { /* ... */ })
|
|
152
|
+
test('test 2', () => { /* ... */ })
|
|
153
|
+
})
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Reference
|
|
157
|
+
|
|
158
|
+
- [Pinia Testing Guide](https://pinia.vuejs.org/cookbook/testing.html)
|
|
159
|
+
- [Pinia Discussion #2092](https://github.com/vuejs/pinia/discussions/2092)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: JSDoc Documentation for Script Setup Components
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: enables proper documentation for composition API components
|
|
5
|
+
type: capability
|
|
6
|
+
tags: jsdoc, script-setup, documentation, composition-api, component
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# JSDoc Documentation for Script Setup Components
|
|
10
|
+
|
|
11
|
+
**Impact: MEDIUM** - enables proper documentation for composition API components
|
|
12
|
+
|
|
13
|
+
`<script setup>` doesn't have an obvious place to attach JSDoc comments for the component itself. Use a dual-script pattern.
|
|
14
|
+
|
|
15
|
+
## Problem
|
|
16
|
+
|
|
17
|
+
**Incorrect:**
|
|
18
|
+
```vue
|
|
19
|
+
<script setup lang="ts">
|
|
20
|
+
/**
|
|
21
|
+
* This comment doesn't appear in IDE hover or docs
|
|
22
|
+
* @component
|
|
23
|
+
*/
|
|
24
|
+
import { ref } from 'vue'
|
|
25
|
+
|
|
26
|
+
const count = ref(0)
|
|
27
|
+
</script>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
JSDoc comments inside `<script setup>` don't attach to the component export because there's no explicit export statement.
|
|
31
|
+
|
|
32
|
+
## Solution
|
|
33
|
+
|
|
34
|
+
Use both `<script>` and `<script setup>` blocks:
|
|
35
|
+
|
|
36
|
+
**Correct:**
|
|
37
|
+
```vue
|
|
38
|
+
<script lang="ts">
|
|
39
|
+
/**
|
|
40
|
+
* A counter component that displays and increments a value.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```vue
|
|
44
|
+
* <Counter :initial="5" @update="handleUpdate" />
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @component
|
|
48
|
+
*/
|
|
49
|
+
export default {}
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
<script setup lang="ts">
|
|
53
|
+
import { ref } from 'vue'
|
|
54
|
+
|
|
55
|
+
const props = defineProps<{
|
|
56
|
+
/** Starting value for the counter */
|
|
57
|
+
initial?: number
|
|
58
|
+
}>()
|
|
59
|
+
|
|
60
|
+
const emit = defineEmits<{
|
|
61
|
+
/** Emitted when counter value changes */
|
|
62
|
+
update: [value: number]
|
|
63
|
+
}>()
|
|
64
|
+
|
|
65
|
+
const count = ref(props.initial ?? 0)
|
|
66
|
+
</script>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## How It Works
|
|
70
|
+
|
|
71
|
+
- The regular `<script>` block's default export is merged with `<script setup>`
|
|
72
|
+
- JSDoc on `export default {}` attaches to the component
|
|
73
|
+
- Props and emits JSDoc in `<script setup>` still work normally
|
|
74
|
+
|
|
75
|
+
## What Gets Documented
|
|
76
|
+
|
|
77
|
+
| Location | Shows In |
|
|
78
|
+
|----------|----------|
|
|
79
|
+
| `export default {}` JSDoc | Component import hover |
|
|
80
|
+
| `defineProps` JSDoc | Prop hover in templates |
|
|
81
|
+
| `defineEmits` JSDoc | Event handler hover |
|
|
82
|
+
|
|
83
|
+
## Reference
|
|
84
|
+
|
|
85
|
+
- [Vue Language Tools Discussion #5932](https://github.com/vuejs/language-tools/discussions/5932)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Enable Strict CSS Modules Type Checking
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: catches typos in CSS module class names at compile time
|
|
5
|
+
type: capability
|
|
6
|
+
tags: strictCssModules, vueCompilerOptions, css-modules, style-module
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Enable Strict CSS Modules Type Checking
|
|
10
|
+
|
|
11
|
+
**Impact: MEDIUM** - catches typos in CSS module class names at compile time
|
|
12
|
+
|
|
13
|
+
When using CSS modules with `<style module>`, Vue doesn't validate class names by default. Enable `strictCssModules` to catch typos and undefined classes.
|
|
14
|
+
|
|
15
|
+
## Problem
|
|
16
|
+
|
|
17
|
+
CSS module class name errors go undetected:
|
|
18
|
+
|
|
19
|
+
```vue
|
|
20
|
+
<script setup lang="ts">
|
|
21
|
+
// No error for typo in class name
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<template>
|
|
25
|
+
<div :class="$style.buttn">Click me</div>
|
|
26
|
+
</template>
|
|
27
|
+
|
|
28
|
+
<style module>
|
|
29
|
+
.button {
|
|
30
|
+
background: blue;
|
|
31
|
+
}
|
|
32
|
+
</style>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The typo `buttn` instead of `button` silently fails at runtime.
|
|
36
|
+
|
|
37
|
+
## Solution
|
|
38
|
+
|
|
39
|
+
Enable `strictCssModules` in your tsconfig:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
// tsconfig.json or tsconfig.app.json
|
|
43
|
+
{
|
|
44
|
+
"vueCompilerOptions": {
|
|
45
|
+
"strictCssModules": true
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Now `$style.buttn` will show a type error because `buttn` doesn't exist in the CSS module.
|
|
51
|
+
|
|
52
|
+
## What Gets Checked
|
|
53
|
+
|
|
54
|
+
| Access | With strictCssModules |
|
|
55
|
+
|--------|----------------------|
|
|
56
|
+
| `$style.validClass` | OK |
|
|
57
|
+
| `$style.typo` | Error: Property 'typo' does not exist |
|
|
58
|
+
| `$style['dynamic']` | OK (dynamic access not checked) |
|
|
59
|
+
|
|
60
|
+
## Limitations
|
|
61
|
+
|
|
62
|
+
- Only checks static property access (`$style.className`)
|
|
63
|
+
- Dynamic access (`$style[variable]`) is not validated
|
|
64
|
+
- Only works with `<style module>`, not external CSS files
|
|
65
|
+
|
|
66
|
+
## Reference
|
|
67
|
+
|
|
68
|
+
- [Vue Language Tools Wiki - Vue Compiler Options](https://github.com/vuejs/language-tools/wiki/Vue-Compiler-Options)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Volar 3.0 Breaking Changes
|
|
3
|
+
impact: HIGH
|
|
4
|
+
impactDescription: fixes editor integration after Volar/vue-language-server upgrade
|
|
5
|
+
type: capability
|
|
6
|
+
tags: volar, vue-language-server, neovim, vscode, ide, ts_ls, vtsls
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Volar 3.0 Breaking Changes
|
|
10
|
+
|
|
11
|
+
**Impact: HIGH** - fixes editor integration after Volar/vue-language-server upgrade
|
|
12
|
+
|
|
13
|
+
Volar 3.0 (vue-language-server 3.x) introduced breaking changes to the language server protocol. Editors configured for Volar 2.x will break with errors like "vue_ls doesn't work with ts_ls.. it expects vtsls".
|
|
14
|
+
|
|
15
|
+
## Symptoms
|
|
16
|
+
|
|
17
|
+
- `vue_ls doesn't work with ts_ls`
|
|
18
|
+
- TypeScript features stop working in Vue files
|
|
19
|
+
- No autocomplete, type hints, or error highlighting
|
|
20
|
+
- Editor shows "Language server initialization failed"
|
|
21
|
+
|
|
22
|
+
## Fix by Editor
|
|
23
|
+
|
|
24
|
+
### VSCode
|
|
25
|
+
|
|
26
|
+
Update the "Vue - Official" extension to latest version. It manages the language server automatically.
|
|
27
|
+
|
|
28
|
+
### NeoVim (nvim-lspconfig)
|
|
29
|
+
|
|
30
|
+
**Option 1: Use vtsls instead of ts_ls**
|
|
31
|
+
```lua
|
|
32
|
+
-- Replace ts_ls/tsserver with vtsls
|
|
33
|
+
require('lspconfig').vtsls.setup({})
|
|
34
|
+
require('lspconfig').volar.setup({})
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Option 2: Downgrade vue-language-server**
|
|
38
|
+
```bash
|
|
39
|
+
npm install -g @vue/language-server@2.1.10
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### JetBrains IDEs
|
|
43
|
+
|
|
44
|
+
Update to latest Vue plugin. If issues persist, disable and re-enable the Vue plugin.
|
|
45
|
+
|
|
46
|
+
## What Changed in 3.0
|
|
47
|
+
|
|
48
|
+
| Feature | Volar 2.x | Volar 3.0 |
|
|
49
|
+
|---------|-----------|-----------|
|
|
50
|
+
| TypeScript integration | ts_ls/tsserver | vtsls recommended (Neovim) |
|
|
51
|
+
| Hybrid mode | Optional | Default |
|
|
52
|
+
|
|
53
|
+
## Workaround: Stay on 2.x
|
|
54
|
+
|
|
55
|
+
If upgrading is not possible:
|
|
56
|
+
```bash
|
|
57
|
+
npm install -g @vue/language-server@^2.0.0
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Pin in your project's package.json to prevent accidental upgrades.
|
|
61
|
+
|
|
62
|
+
## Reference
|
|
63
|
+
|
|
64
|
+
- [vuejs/language-tools#5598](https://github.com/vuejs/language-tools/issues/5598)
|
|
65
|
+
- [NeoVim Vue Setup Guide](https://dev.to/danwalsh/solved-vue-3-typescript-inlay-hint-support-in-neovim-53ej)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Vue Template Directive Comments
|
|
3
|
+
impact: HIGH
|
|
4
|
+
impactDescription: enables fine-grained control over template type checking
|
|
5
|
+
type: capability
|
|
6
|
+
tags: vue-directive, vue-ignore, vue-expect-error, vue-skip, template, type-checking
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Vue Template Directive Comments
|
|
10
|
+
|
|
11
|
+
**Impact: HIGH** - enables fine-grained control over template type checking
|
|
12
|
+
|
|
13
|
+
Vue Language Tools supports special directive comments to control type checking behavior in templates.
|
|
14
|
+
|
|
15
|
+
## Available Directives
|
|
16
|
+
|
|
17
|
+
### @vue-ignore
|
|
18
|
+
|
|
19
|
+
Suppress type errors for the next line:
|
|
20
|
+
|
|
21
|
+
```vue
|
|
22
|
+
<template>
|
|
23
|
+
<!-- @vue-ignore -->
|
|
24
|
+
<Component :prop="valueWithTypeError" />
|
|
25
|
+
</template>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### @vue-expect-error
|
|
29
|
+
|
|
30
|
+
Assert that the next line should have a type error (useful for testing):
|
|
31
|
+
|
|
32
|
+
```vue
|
|
33
|
+
<template>
|
|
34
|
+
<!-- @vue-expect-error -->
|
|
35
|
+
<Component :invalid-prop="value" />
|
|
36
|
+
</template>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### @vue-skip
|
|
40
|
+
|
|
41
|
+
Skip type checking for an entire block:
|
|
42
|
+
|
|
43
|
+
```vue
|
|
44
|
+
<template>
|
|
45
|
+
<!-- @vue-skip -->
|
|
46
|
+
<div>
|
|
47
|
+
<!-- Everything in here is not type-checked -->
|
|
48
|
+
<LegacyComponent :any="props" :go="here" />
|
|
49
|
+
</div>
|
|
50
|
+
</template>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### @vue-generic
|
|
54
|
+
|
|
55
|
+
Declare template-level generic types:
|
|
56
|
+
|
|
57
|
+
```vue
|
|
58
|
+
<template>
|
|
59
|
+
<!-- @vue-generic {T extends string} -->
|
|
60
|
+
<GenericList :items="items as T[]" />
|
|
61
|
+
</template>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Use Cases
|
|
65
|
+
|
|
66
|
+
- Migrating legacy components with incomplete types
|
|
67
|
+
- Working with third-party components that have incorrect type definitions
|
|
68
|
+
- Temporarily suppressing errors during refactoring
|
|
69
|
+
- Testing that certain patterns produce expected type errors
|
|
70
|
+
|
|
71
|
+
## Reference
|
|
72
|
+
|
|
73
|
+
- [Vue Language Tools Wiki - Directive Comments](https://github.com/vuejs/language-tools/wiki/Directive-Comments)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Vue Router useRoute Params Union Type Narrowing
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: fixes "Property does not exist" errors with typed route params
|
|
5
|
+
type: capability
|
|
6
|
+
tags: vue-router, useRoute, unplugin-vue-router, typed-routes, params
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Vue Router useRoute Params Union Type Narrowing
|
|
10
|
+
|
|
11
|
+
**Impact: MEDIUM** - fixes "Property does not exist" errors with typed route params
|
|
12
|
+
|
|
13
|
+
With `unplugin-vue-router` typed routes, `route.params` becomes a union of ALL page param types. TypeScript cannot narrow `Record<never, never> | { id: string }` properly, causing "Property 'id' does not exist" errors even on the correct page.
|
|
14
|
+
|
|
15
|
+
## Symptoms
|
|
16
|
+
|
|
17
|
+
- "Property 'id' does not exist on type 'RouteParams'"
|
|
18
|
+
- `route.params.id` shows as `string | undefined` everywhere
|
|
19
|
+
- Union type of all route params instead of specific route
|
|
20
|
+
- Type narrowing with `if (route.name === 'users-id')` doesn't work
|
|
21
|
+
|
|
22
|
+
## Root Cause
|
|
23
|
+
|
|
24
|
+
`unplugin-vue-router` generates a union type of all possible route params. TypeScript's control flow analysis can't narrow this union based on route name checks.
|
|
25
|
+
|
|
26
|
+
## Fix
|
|
27
|
+
|
|
28
|
+
**Option 1: Pass route name to useRoute (recommended)**
|
|
29
|
+
```typescript
|
|
30
|
+
// pages/users/[id].vue
|
|
31
|
+
import { useRoute } from 'vue-router/auto'
|
|
32
|
+
|
|
33
|
+
// Specify the route path for proper typing
|
|
34
|
+
const route = useRoute('/users/[id]')
|
|
35
|
+
|
|
36
|
+
// Now properly typed as { id: string }
|
|
37
|
+
console.log(route.params.id) // string, not string | undefined
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Option 2: Type assertion with specific route**
|
|
41
|
+
```typescript
|
|
42
|
+
import { useRoute } from 'vue-router'
|
|
43
|
+
import type { RouteLocationNormalized } from 'vue-router/auto-routes'
|
|
44
|
+
|
|
45
|
+
const route = useRoute() as RouteLocationNormalized<'/users/[id]'>
|
|
46
|
+
route.params.id // Properly typed
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Option 3: Define route-specific param type**
|
|
50
|
+
```typescript
|
|
51
|
+
// In your page component
|
|
52
|
+
interface UserRouteParams {
|
|
53
|
+
id: string
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const route = useRoute()
|
|
57
|
+
const { id } = route.params as UserRouteParams
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Required tsconfig Setting
|
|
61
|
+
|
|
62
|
+
Ensure `moduleResolution: "bundler"` for unplugin-vue-router:
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"compilerOptions": {
|
|
66
|
+
"moduleResolution": "bundler"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Caveat: Route Name Format
|
|
72
|
+
|
|
73
|
+
The route name matches the file path pattern:
|
|
74
|
+
- `pages/users/[id].vue` → `/users/[id]`
|
|
75
|
+
- `pages/posts/[slug]/comments.vue` → `/posts/[slug]/comments`
|
|
76
|
+
|
|
77
|
+
## Reference
|
|
78
|
+
|
|
79
|
+
- [unplugin-vue-router#337](https://github.com/posva/unplugin-vue-router/issues/337)
|
|
80
|
+
- [unplugin-vue-router#176](https://github.com/posva/unplugin-vue-router/discussions/176)
|
|
81
|
+
- [unplugin-vue-router TypeScript docs](https://uvr.esm.is/guide/typescript.html)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Enable Strict Template Checking
|
|
3
|
+
impact: HIGH
|
|
4
|
+
impactDescription: catches undefined components and props at compile time
|
|
5
|
+
type: capability
|
|
6
|
+
tags: vue-tsc, typescript, type-checking, templates, vueCompilerOptions
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Enable Strict Template Checking
|
|
10
|
+
|
|
11
|
+
**Impact: HIGH** - catches undefined components and props at compile time
|
|
12
|
+
|
|
13
|
+
By default, vue-tsc does not report errors for undefined components in templates. Enable `strictTemplates` to catch these issues during type checking.
|
|
14
|
+
|
|
15
|
+
## Which tsconfig?
|
|
16
|
+
|
|
17
|
+
Add `vueCompilerOptions` to the tsconfig that includes Vue source files. In projects with multiple tsconfigs (like those created with `create-vue`), this is typically `tsconfig.app.json`, not the root `tsconfig.json` or `tsconfig.node.json`.
|
|
18
|
+
|
|
19
|
+
**Incorrect (missing strict checking):**
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"compilerOptions": {
|
|
24
|
+
"strict": true
|
|
25
|
+
}
|
|
26
|
+
// vueCompilerOptions not configured - undefined components won't error
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Correct (strict template checking enabled):**
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"compilerOptions": {
|
|
35
|
+
"strict": true
|
|
36
|
+
},
|
|
37
|
+
"vueCompilerOptions": {
|
|
38
|
+
"strictTemplates": true
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Available Options
|
|
44
|
+
|
|
45
|
+
| Option | Default | Effect |
|
|
46
|
+
|--------|---------|--------|
|
|
47
|
+
| `strictTemplates` | `false` | Enables all checkUnknown* options below |
|
|
48
|
+
| `checkUnknownComponents` | `false` | Error on undefined/unregistered components |
|
|
49
|
+
| `checkUnknownProps` | `false` | Error on props not declared in component definition |
|
|
50
|
+
| `checkUnknownEvents` | `false` | Error on events not declared via `defineEmits` |
|
|
51
|
+
| `checkUnknownDirectives` | `false` | Error on unregistered custom directives |
|
|
52
|
+
|
|
53
|
+
## Granular Control
|
|
54
|
+
|
|
55
|
+
If `strictTemplates` is too strict, enable individual checks:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"vueCompilerOptions": {
|
|
60
|
+
"checkUnknownComponents": true,
|
|
61
|
+
"checkUnknownProps": false
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Reference
|
|
67
|
+
|
|
68
|
+
- [Vue Compiler Options](https://github.com/vuejs/language-tools/wiki/Vue-Compiler-Options)
|
|
69
|
+
- [Vite Vue+TS Template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-vue-ts)
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: withDefaults Incorrect Default with Union Types
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: fixes spurious "Missing required prop" warning with union type props
|
|
5
|
+
type: capability
|
|
6
|
+
tags: withDefaults, defineProps, union-types, defaults, vue-3.5
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# withDefaults Incorrect Default with Union Types
|
|
10
|
+
|
|
11
|
+
**Impact: MEDIUM** - fixes spurious "Missing required prop" warning with union type props
|
|
12
|
+
|
|
13
|
+
Using `withDefaults` with union types like `false | string` may produce a Vue runtime warning "Missing required prop" even when a default is provided. The runtime value IS applied correctly, but the warning can be confusing.
|
|
14
|
+
|
|
15
|
+
## Symptoms
|
|
16
|
+
|
|
17
|
+
- Vue warns "Missing required prop" despite default being set
|
|
18
|
+
- Warning appears only with union types like `false | string`
|
|
19
|
+
- TypeScript types are correct
|
|
20
|
+
- Runtime value IS correct (the default is applied)
|
|
21
|
+
|
|
22
|
+
## Problematic Pattern
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
// This produces a spurious warning (but works at runtime)
|
|
26
|
+
interface Props {
|
|
27
|
+
value: false | string // Union type
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
31
|
+
value: 'default' // Runtime value IS correct, but Vue warns about missing prop
|
|
32
|
+
})
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Fix
|
|
36
|
+
|
|
37
|
+
**Option 1: Use Reactive Props Destructure (Vue 3.5+)**
|
|
38
|
+
```vue
|
|
39
|
+
<script setup lang="ts">
|
|
40
|
+
interface Props {
|
|
41
|
+
value: false | string
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Preferred in Vue 3.5+
|
|
45
|
+
const { value = 'default' } = defineProps<Props>()
|
|
46
|
+
</script>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Option 2: Use runtime declaration**
|
|
50
|
+
```vue
|
|
51
|
+
<script setup lang="ts">
|
|
52
|
+
const props = defineProps({
|
|
53
|
+
value: {
|
|
54
|
+
type: [Boolean, String] as PropType<false | string>,
|
|
55
|
+
default: 'default'
|
|
56
|
+
}
|
|
57
|
+
})
|
|
58
|
+
</script>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Option 3: Split into separate props**
|
|
62
|
+
```typescript
|
|
63
|
+
interface Props {
|
|
64
|
+
enabled: boolean
|
|
65
|
+
customValue?: string
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
69
|
+
enabled: false,
|
|
70
|
+
customValue: 'default'
|
|
71
|
+
})
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Why Reactive Props Destructure Works
|
|
75
|
+
|
|
76
|
+
Vue 3.5's Reactive Props Destructure handles default values at the destructuring level, bypassing the type inference issues with `withDefaults`.
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// The default is applied during destructuring, not type inference
|
|
80
|
+
const { prop = 'default' } = defineProps<{ prop?: string }>()
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Enable Reactive Props Destructure
|
|
84
|
+
|
|
85
|
+
This is enabled by default in Vue 3.5+. For older versions:
|
|
86
|
+
```javascript
|
|
87
|
+
// vite.config.js
|
|
88
|
+
export default {
|
|
89
|
+
plugins: [
|
|
90
|
+
vue({
|
|
91
|
+
script: {
|
|
92
|
+
propsDestructure: true
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Reference
|
|
100
|
+
|
|
101
|
+
- [vuejs/core#12897](https://github.com/vuejs/core/issues/12897)
|
|
102
|
+
- [Reactive Props Destructure RFC](https://github.com/vuejs/rfcs/discussions/502)
|