aico-cli 2.1.7 → 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 +8672 -3345
- package/bin/cli/package.json +1 -1
- package/bin/cli/sdk-tools.d.ts +41 -5
- package/dist/chunks/simple-config.mjs +1 -1
- package/package.json +2 -2
- 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,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Vue 3.5+ Deep Watch Numeric Depth
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: enables efficient array mutation watching with numeric deep option
|
|
5
|
+
type: capability
|
|
6
|
+
tags: watch, deep, vue-3.5, array, mutation, performance
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Vue 3.5+ Deep Watch Numeric Depth
|
|
10
|
+
|
|
11
|
+
**Impact: MEDIUM** - enables efficient array mutation watching with numeric deep option
|
|
12
|
+
|
|
13
|
+
Vue 3.5 introduced `deep: number` for watch depth control. This allows watching array mutations without the performance cost of deep traversal.
|
|
14
|
+
|
|
15
|
+
## Symptoms
|
|
16
|
+
|
|
17
|
+
- Array mutations not triggering watch callback
|
|
18
|
+
- Deep watch causing performance issues on large nested objects
|
|
19
|
+
- Unaware of new Vue 3.5 feature
|
|
20
|
+
|
|
21
|
+
> **Note:** TypeScript error "Type 'number' is not assignable to type 'boolean'" no longer occurs with Vue 3.5+ and current TypeScript versions. The types now correctly support numeric `deep` values.
|
|
22
|
+
|
|
23
|
+
## The Feature
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
// Vue 3.5+ only
|
|
27
|
+
watch(items, (newVal) => {
|
|
28
|
+
// Triggered on array mutations (push, pop, splice, etc.)
|
|
29
|
+
}, { deep: 1 })
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
| deep value | Behavior |
|
|
33
|
+
|------------|----------|
|
|
34
|
+
| `true` | Full recursive traversal (original behavior) |
|
|
35
|
+
| `false` | Only reference changes |
|
|
36
|
+
| `1` | One level deep - array mutations, not nested objects |
|
|
37
|
+
| `2` | Two levels deep |
|
|
38
|
+
| `n` | N levels deep |
|
|
39
|
+
|
|
40
|
+
## Fix
|
|
41
|
+
|
|
42
|
+
**Step 1: Ensure Vue 3.5+**
|
|
43
|
+
```bash
|
|
44
|
+
npm install vue@^3.5.0
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Step 2: Use numeric depth**
|
|
48
|
+
```typescript
|
|
49
|
+
import { watch, ref } from 'vue'
|
|
50
|
+
|
|
51
|
+
const items = ref([{ id: 1, data: { nested: 'value' } }])
|
|
52
|
+
|
|
53
|
+
// Watch array mutations only (push, pop, etc.)
|
|
54
|
+
watch(items, (newItems) => {
|
|
55
|
+
console.log('Array mutated')
|
|
56
|
+
}, { deep: 1 })
|
|
57
|
+
|
|
58
|
+
// Won't trigger on: items.value[0].data.nested = 'new'
|
|
59
|
+
// Will trigger on: items.value.push(newItem)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Performance Comparison
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
const largeNestedData = ref({ /* deeply nested structure */ })
|
|
66
|
+
|
|
67
|
+
// SLOW - traverses entire structure
|
|
68
|
+
watch(largeNestedData, handler, { deep: true })
|
|
69
|
+
|
|
70
|
+
// FAST - only watches top-level changes
|
|
71
|
+
watch(largeNestedData, handler, { deep: 1 })
|
|
72
|
+
|
|
73
|
+
// FASTEST - only reference changes
|
|
74
|
+
watch(largeNestedData, handler, { deep: false })
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Alternative: watchEffect for Selective Tracking
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
// Only tracks properties actually accessed
|
|
81
|
+
watchEffect(() => {
|
|
82
|
+
// Only re-runs when items.value.length or first item changes
|
|
83
|
+
console.log(items.value.length, items.value[0]?.id)
|
|
84
|
+
})
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## TypeScript Note
|
|
88
|
+
|
|
89
|
+
If TypeScript complains about numeric deep, ensure:
|
|
90
|
+
1. Vue version is 3.5+
|
|
91
|
+
2. TypeScript version is current (types are included with `vue` package)
|
|
92
|
+
3. tsconfig targets correct node_modules types
|
|
93
|
+
|
|
94
|
+
## Reference
|
|
95
|
+
|
|
96
|
+
- [Vue Watchers Docs](https://vuejs.org/guide/essentials/watchers.html)
|
|
97
|
+
- [Vue 3.5 Release Notes](https://blog.vuejs.org/posts/vue-3-5)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: defineModel Fires Update Event with Undefined
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: fixes runtime errors from unexpected undefined in model updates
|
|
5
|
+
type: capability
|
|
6
|
+
tags: defineModel, v-model, update-event, undefined, vue-3.5
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# defineModel Fires Update Event with Undefined
|
|
10
|
+
|
|
11
|
+
**Impact: MEDIUM** - fixes runtime errors from unexpected undefined in model updates
|
|
12
|
+
|
|
13
|
+
> **Version Note:** This issue may be resolved in Vue 3.5+. Testing with Vue 3.5.26 could not reproduce the double emission with `undefined`. If you're on Vue 3.5+, verify the issue exists in your specific scenario before applying workarounds.
|
|
14
|
+
|
|
15
|
+
Components using `defineModel` may fire the `@update:model-value` event with `undefined` in certain edge cases. TypeScript types don't always reflect this behavior, potentially causing runtime errors when the parent expects a non-nullable value.
|
|
16
|
+
|
|
17
|
+
## Symptoms
|
|
18
|
+
|
|
19
|
+
- Parent component receives `undefined` unexpectedly
|
|
20
|
+
- Runtime error: "Cannot read property of undefined"
|
|
21
|
+
- Type mismatch between expected `T` and received `T | undefined`
|
|
22
|
+
- Issue appears when clearing/resetting the model value
|
|
23
|
+
|
|
24
|
+
## Root Cause
|
|
25
|
+
|
|
26
|
+
`defineModel` returns `Ref<T | undefined>` by default, even when `T` is non-nullable. The update event can fire with `undefined` when:
|
|
27
|
+
- Component unmounts
|
|
28
|
+
- Model is explicitly cleared
|
|
29
|
+
- Internal state resets
|
|
30
|
+
|
|
31
|
+
## Fix
|
|
32
|
+
|
|
33
|
+
**Option 1: Use required option (Vue 3.5+)**
|
|
34
|
+
```typescript
|
|
35
|
+
// Returns Ref<Item> instead of Ref<Item | undefined>
|
|
36
|
+
const model = defineModel<Item>({ required: true })
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Option 2: Type parent handler to accept undefined**
|
|
40
|
+
```vue
|
|
41
|
+
<template>
|
|
42
|
+
<MyComponent
|
|
43
|
+
v-model="item"
|
|
44
|
+
@update:model-value="handleUpdate"
|
|
45
|
+
/>
|
|
46
|
+
</template>
|
|
47
|
+
|
|
48
|
+
<script setup lang="ts">
|
|
49
|
+
// Handle both value and undefined
|
|
50
|
+
const handleUpdate = (value: Item | undefined) => {
|
|
51
|
+
if (value !== undefined) {
|
|
52
|
+
item.value = value
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
</script>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Option 3: Use default value in defineModel**
|
|
59
|
+
```typescript
|
|
60
|
+
const model = defineModel<string>({ default: '' })
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Type Declaration Pattern
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
// In child component
|
|
67
|
+
interface Props {
|
|
68
|
+
modelValue: Item
|
|
69
|
+
}
|
|
70
|
+
const model = defineModel<Item>({ required: true })
|
|
71
|
+
|
|
72
|
+
// Emits will be typed as (value: Item) not (value: Item | undefined)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Reference
|
|
76
|
+
|
|
77
|
+
- [vuejs/core#12817](https://github.com/vuejs/core/issues/12817)
|
|
78
|
+
- [vuejs/core#10103](https://github.com/vuejs/core/issues/10103)
|
|
79
|
+
- [defineModel docs](https://vuejs.org/api/sfc-script-setup.html#definemodel)
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Duplicate Vue Plugin Detection
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: fixes cryptic build errors from Vue plugin registered twice
|
|
5
|
+
type: capability
|
|
6
|
+
tags: vite, plugin, vue, duplicate, config, inline
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Duplicate Vue Plugin Detection
|
|
10
|
+
|
|
11
|
+
**Impact: MEDIUM** - fixes cryptic build errors from Vue plugin registered twice
|
|
12
|
+
|
|
13
|
+
When using Vite's JavaScript API, if the Vue plugin is loaded in `vite.config.js` and specified again in `inlineConfig`, it gets registered twice, causing cryptic build errors.
|
|
14
|
+
|
|
15
|
+
## Symptoms
|
|
16
|
+
|
|
17
|
+
- Build produces unexpected output or fails silently
|
|
18
|
+
- "Cannot read property of undefined" during build
|
|
19
|
+
- Different build behavior between CLI and JavaScript API
|
|
20
|
+
- Vue components render incorrectly after build
|
|
21
|
+
|
|
22
|
+
## Root Cause
|
|
23
|
+
|
|
24
|
+
Vite doesn't deduplicate plugins by name when merging configs. The Vue plugin's internal state gets corrupted when registered twice.
|
|
25
|
+
|
|
26
|
+
## Fix
|
|
27
|
+
|
|
28
|
+
**Option 1: Use configFile: false with inline plugins**
|
|
29
|
+
```typescript
|
|
30
|
+
import { build } from 'vite'
|
|
31
|
+
import vue from '@vitejs/plugin-vue'
|
|
32
|
+
|
|
33
|
+
await build({
|
|
34
|
+
configFile: false, // Don't load vite.config.js
|
|
35
|
+
plugins: [vue()],
|
|
36
|
+
// ... rest of config
|
|
37
|
+
})
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Option 2: Don't specify plugins in inlineConfig**
|
|
41
|
+
```typescript
|
|
42
|
+
// vite.config.js already has vue plugin
|
|
43
|
+
import { build } from 'vite'
|
|
44
|
+
|
|
45
|
+
await build({
|
|
46
|
+
// Don't add vue plugin here - it's in vite.config.js
|
|
47
|
+
root: './src',
|
|
48
|
+
build: { outDir: '../dist' }
|
|
49
|
+
})
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Option 3: Filter out Vue plugin before merging**
|
|
53
|
+
```typescript
|
|
54
|
+
import { build, loadConfigFromFile } from 'vite'
|
|
55
|
+
import vue from '@vitejs/plugin-vue'
|
|
56
|
+
|
|
57
|
+
const { config } = await loadConfigFromFile({ command: 'build', mode: 'production' })
|
|
58
|
+
|
|
59
|
+
// Remove existing Vue plugin
|
|
60
|
+
const filteredPlugins = config.plugins?.filter(
|
|
61
|
+
p => !p || (Array.isArray(p) ? false : p.name !== 'vite:vue')
|
|
62
|
+
) || []
|
|
63
|
+
|
|
64
|
+
await build({
|
|
65
|
+
...config,
|
|
66
|
+
plugins: [...filteredPlugins, vue({ /* your options */ })]
|
|
67
|
+
})
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Detection Script
|
|
71
|
+
|
|
72
|
+
Add this to debug plugin registration:
|
|
73
|
+
```typescript
|
|
74
|
+
// vite.config.ts
|
|
75
|
+
export default defineConfig({
|
|
76
|
+
plugins: [
|
|
77
|
+
vue(),
|
|
78
|
+
{
|
|
79
|
+
name: 'debug-plugins',
|
|
80
|
+
configResolved(config) {
|
|
81
|
+
const vuePlugins = config.plugins.filter(p => p.name?.includes('vue'))
|
|
82
|
+
if (vuePlugins.length > 1) {
|
|
83
|
+
console.warn('WARNING: Multiple Vue plugins detected:', vuePlugins.map(p => p.name))
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
})
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Common Scenarios
|
|
92
|
+
|
|
93
|
+
| Scenario | Solution |
|
|
94
|
+
|----------|----------|
|
|
95
|
+
| Using `vite.createServer()` | Use `configFile: false` |
|
|
96
|
+
| Build script with custom config | Don't duplicate plugins |
|
|
97
|
+
| Monorepo with shared config | Check for plugin inheritance |
|
|
98
|
+
|
|
99
|
+
## Reference
|
|
100
|
+
|
|
101
|
+
- [Vite Issue #5335](https://github.com/vitejs/vite/issues/5335)
|
|
102
|
+
- [Vite JavaScript API](https://vite.dev/guide/api-javascript.html)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Extract Component Props
|
|
3
|
+
impact: HIGH
|
|
4
|
+
impactDescription: extract props, emits, slots types from .vue components
|
|
5
|
+
type: capability
|
|
6
|
+
tags: typescript, props, emits, slots, vue-component-type-helpers, wrapper, ComponentProps
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Extract Component Props
|
|
10
|
+
|
|
11
|
+
**Impact: HIGH** - extract props, emits, slots types from .vue components
|
|
12
|
+
|
|
13
|
+
Use `vue-component-type-helpers` to extract types from `.vue` components:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -D vue-component-type-helpers
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import type { ComponentProps, ComponentEmit, ComponentSlots, ComponentExposed } from 'vue-component-type-helpers'
|
|
21
|
+
import MyButton from './MyButton.vue'
|
|
22
|
+
|
|
23
|
+
type Props = ComponentProps<typeof MyButton>
|
|
24
|
+
type Emits = ComponentEmit<typeof MyButton>
|
|
25
|
+
type Slots = ComponentSlots<typeof MyButton>
|
|
26
|
+
type Exposed = ComponentExposed<typeof MyButton>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Wrapper Component Pattern
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import type { ComponentProps } from 'vue-component-type-helpers'
|
|
33
|
+
import BaseButton from './BaseButton.vue'
|
|
34
|
+
|
|
35
|
+
type BaseProps = ComponentProps<typeof BaseButton>
|
|
36
|
+
|
|
37
|
+
interface Props extends BaseProps {
|
|
38
|
+
size: 'sm' | 'md' | 'lg'
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
defineProps<Props>()
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Do NOT Use
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
// ❌ Includes Vue internal properties (onUpdate:*, class, style, etc.)
|
|
48
|
+
type Props = InstanceType<typeof MyButton>['$props']
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Note
|
|
52
|
+
|
|
53
|
+
Vue's built-in `ExtractPropTypes` is for runtime props objects (`props: { foo: String }`), not for `.vue` components.
|
|
54
|
+
|
|
55
|
+
## Reference
|
|
56
|
+
|
|
57
|
+
- [vue-component-type-helpers](https://github.com/vuejs/language-tools/tree/master/packages/component-type-helpers)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Enable Fallthrough Attributes Type Checking
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: enables IDE autocomplete for fallthrough attributes in wrapper components
|
|
5
|
+
type: capability
|
|
6
|
+
tags: fallthroughAttributes, vueCompilerOptions, component-library, wrapper-components
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Enable Fallthrough Attributes Type Checking
|
|
10
|
+
|
|
11
|
+
**Impact: MEDIUM** - enables type-aware attribute forwarding in component libraries
|
|
12
|
+
|
|
13
|
+
When building component libraries with wrapper components, enable `fallthroughAttributes` to get IDE autocomplete for attributes that will be forwarded to child elements.
|
|
14
|
+
|
|
15
|
+
## What It Does
|
|
16
|
+
|
|
17
|
+
Wrapper components that pass attributes to child elements can benefit from type-aware completion:
|
|
18
|
+
|
|
19
|
+
```vue
|
|
20
|
+
<!-- MyButton.vue - wrapper around native button -->
|
|
21
|
+
<template>
|
|
22
|
+
<button v-bind="$attrs"><slot /></button>
|
|
23
|
+
</template>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Solution
|
|
27
|
+
|
|
28
|
+
Enable `fallthroughAttributes` in your tsconfig:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
// tsconfig.json or tsconfig.app.json
|
|
32
|
+
{
|
|
33
|
+
"vueCompilerOptions": {
|
|
34
|
+
"fallthroughAttributes": true
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## How It Works
|
|
40
|
+
|
|
41
|
+
When `fallthroughAttributes: true`:
|
|
42
|
+
- Vue Language Server analyzes which element receives `$attrs`
|
|
43
|
+
- IDE autocomplete suggests valid attributes for the target element
|
|
44
|
+
- Helps developers discover available attributes
|
|
45
|
+
|
|
46
|
+
> **Note:** This primarily enables IDE autocomplete for valid fallthrough attributes. It does NOT reject invalid attributes as type errors - arbitrary attributes are still allowed.
|
|
47
|
+
|
|
48
|
+
## Related Options
|
|
49
|
+
|
|
50
|
+
Combine with `strictTemplates` for comprehensive checking:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"vueCompilerOptions": {
|
|
55
|
+
"strictTemplates": true,
|
|
56
|
+
"fallthroughAttributes": true
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Reference
|
|
62
|
+
|
|
63
|
+
- [Vue Language Tools Wiki - Vue Compiler Options](https://github.com/vuejs/language-tools/wiki/Vue-Compiler-Options)
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: HMR Debugging for Vue SSR
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: fixes Hot Module Replacement breaking in Vue SSR applications
|
|
5
|
+
type: efficiency
|
|
6
|
+
tags: vite, hmr, ssr, vue, hot-reload, server-side-rendering
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# HMR Debugging for Vue SSR
|
|
10
|
+
|
|
11
|
+
**Impact: MEDIUM** - fixes Hot Module Replacement breaking in Vue SSR applications
|
|
12
|
+
|
|
13
|
+
Hot Module Replacement breaks when modifying Vue component `<script setup>` sections in SSR applications. Changes cause errors instead of smooth updates, requiring full page reloads.
|
|
14
|
+
|
|
15
|
+
## Symptoms
|
|
16
|
+
|
|
17
|
+
- HMR works for `<template>` changes but breaks for `<script setup>`
|
|
18
|
+
- "Cannot read property of undefined" after saving
|
|
19
|
+
- Full page reload required after script changes
|
|
20
|
+
- HMR works in dev:client but not dev:ssr
|
|
21
|
+
|
|
22
|
+
## Root Cause
|
|
23
|
+
|
|
24
|
+
SSR mode has a different transformation pipeline. The Vue plugin's HMR boundary detection doesn't handle SSR modules the same way as client modules.
|
|
25
|
+
|
|
26
|
+
## Fix
|
|
27
|
+
|
|
28
|
+
**Step 1: Ensure correct SSR plugin configuration**
|
|
29
|
+
```typescript
|
|
30
|
+
// vite.config.ts
|
|
31
|
+
import { defineConfig } from 'vite'
|
|
32
|
+
import vue from '@vitejs/plugin-vue'
|
|
33
|
+
|
|
34
|
+
export default defineConfig({
|
|
35
|
+
plugins: [vue()],
|
|
36
|
+
ssr: {
|
|
37
|
+
// Don't externalize these for HMR to work
|
|
38
|
+
noExternal: ['vue', '@vue/runtime-core', '@vue/runtime-dom']
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Step 2: Configure dev server for SSR HMR**
|
|
44
|
+
```typescript
|
|
45
|
+
// server.ts
|
|
46
|
+
import { createServer } from 'vite'
|
|
47
|
+
|
|
48
|
+
const vite = await createServer({
|
|
49
|
+
server: { middlewareMode: true },
|
|
50
|
+
appType: 'custom'
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
// Use vite.ssrLoadModule for server-side imports
|
|
54
|
+
const { render } = await vite.ssrLoadModule('/src/entry-server.ts')
|
|
55
|
+
|
|
56
|
+
// Handle HMR
|
|
57
|
+
vite.watcher.on('change', async (file) => {
|
|
58
|
+
if (file.endsWith('.vue')) {
|
|
59
|
+
// Invalidate the module
|
|
60
|
+
const mod = vite.moduleGraph.getModuleById(file)
|
|
61
|
+
if (mod) {
|
|
62
|
+
vite.moduleGraph.invalidateModule(mod)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
})
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Step 3: Add HMR acceptance in entry-server**
|
|
69
|
+
```typescript
|
|
70
|
+
// entry-server.ts
|
|
71
|
+
import { createApp } from './main'
|
|
72
|
+
|
|
73
|
+
export async function render(url: string) {
|
|
74
|
+
const app = createApp()
|
|
75
|
+
// ... render logic
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Accept HMR updates
|
|
79
|
+
if (import.meta.hot) {
|
|
80
|
+
import.meta.hot.accept()
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Framework-Specific Solutions
|
|
85
|
+
|
|
86
|
+
### Nuxt 3
|
|
87
|
+
HMR should work out of the box. If not:
|
|
88
|
+
```bash
|
|
89
|
+
rm -rf .nuxt node_modules/.vite
|
|
90
|
+
npm install
|
|
91
|
+
npm run dev
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Vite SSR Template
|
|
95
|
+
Ensure you're using the latest `@vitejs/plugin-vue`:
|
|
96
|
+
```bash
|
|
97
|
+
npm install @vitejs/plugin-vue@latest
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Debugging
|
|
101
|
+
|
|
102
|
+
Enable verbose HMR logging:
|
|
103
|
+
```typescript
|
|
104
|
+
// vite.config.ts
|
|
105
|
+
export default defineConfig({
|
|
106
|
+
server: {
|
|
107
|
+
hmr: {
|
|
108
|
+
overlay: true
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
logLevel: 'info' // Shows HMR updates
|
|
112
|
+
})
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Known Limitations
|
|
116
|
+
|
|
117
|
+
- HMR for `<script>` (not `<script setup>`) may require full reload
|
|
118
|
+
- SSR components with external dependencies may not hot-reload
|
|
119
|
+
- State is not preserved for SSR components (expected behavior)
|
|
120
|
+
|
|
121
|
+
## Reference
|
|
122
|
+
|
|
123
|
+
- [vite-plugin-vue#525](https://github.com/vitejs/vite-plugin-vue/issues/525)
|
|
124
|
+
- [Vite SSR Guide](https://vite.dev/guide/ssr.html)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: moduleResolution Bundler Migration Issues
|
|
3
|
+
impact: HIGH
|
|
4
|
+
impactDescription: fixes "Cannot find module" errors after @vue/tsconfig upgrade
|
|
5
|
+
type: capability
|
|
6
|
+
tags: moduleResolution, bundler, tsconfig, vue-tsconfig, node, esm
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# moduleResolution Bundler Migration Issues
|
|
10
|
+
|
|
11
|
+
**Impact: HIGH** - fixes "Cannot find module" errors after @vue/tsconfig upgrade
|
|
12
|
+
|
|
13
|
+
Recent versions of `@vue/tsconfig` changed `moduleResolution` from `"node"` to `"bundler"`. This can break existing projects with errors like "Cannot find module 'vue'" or issues with `resolveJsonModule`.
|
|
14
|
+
|
|
15
|
+
## Symptoms
|
|
16
|
+
|
|
17
|
+
- `Cannot find module 'vue'` or other packages
|
|
18
|
+
- `Option '--resolveJsonModule' cannot be specified without 'node' module resolution`
|
|
19
|
+
- Errors appear after updating `@vue/tsconfig`
|
|
20
|
+
- Some third-party packages no longer resolve
|
|
21
|
+
|
|
22
|
+
## Root Cause
|
|
23
|
+
|
|
24
|
+
`moduleResolution: "bundler"` requires:
|
|
25
|
+
1. TypeScript 5.0+
|
|
26
|
+
2. Packages to have proper `exports` field in package.json
|
|
27
|
+
3. Different resolution rules than Node.js classic resolution
|
|
28
|
+
|
|
29
|
+
## Fix
|
|
30
|
+
|
|
31
|
+
**Option 1: Ensure TypeScript 5.0+ everywhere**
|
|
32
|
+
```bash
|
|
33
|
+
npm install -D typescript@^5.0.0
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
In monorepos, ALL packages must use TypeScript 5.0+.
|
|
37
|
+
|
|
38
|
+
**Option 2: Add compatibility workaround**
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"compilerOptions": {
|
|
42
|
+
"module": "ESNext",
|
|
43
|
+
"moduleResolution": "bundler",
|
|
44
|
+
"resolvePackageJsonExports": false
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Setting `resolvePackageJsonExports: false` restores compatibility with packages that don't have proper exports.
|
|
50
|
+
|
|
51
|
+
**Option 3: Revert to Node resolution**
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"compilerOptions": {
|
|
55
|
+
"moduleResolution": "node"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Which Packages Break?
|
|
61
|
+
|
|
62
|
+
Packages break if they:
|
|
63
|
+
- Lack `exports` field in package.json
|
|
64
|
+
- Have incorrect `exports` configuration
|
|
65
|
+
- Rely on Node.js-specific resolution behavior
|
|
66
|
+
|
|
67
|
+
## Diagnosis
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Check which resolution is being used
|
|
71
|
+
cat tsconfig.json | grep moduleResolution
|
|
72
|
+
|
|
73
|
+
# Test if a specific module resolves
|
|
74
|
+
npx tsc --traceResolution 2>&1 | grep "module-name"
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Reference
|
|
78
|
+
|
|
79
|
+
- [vuejs/tsconfig#8](https://github.com/vuejs/tsconfig/issues/8)
|
|
80
|
+
- [TypeScript moduleResolution docs](https://www.typescriptlang.org/tsconfig#moduleResolution)
|
|
81
|
+
- [Vite discussion#14001](https://github.com/vitejs/vite/discussions/14001)
|