z3tz3r0 5108b20954
feat(rules): add vue and nuxt rule sets (#2250)
* feat(rules): add vue and nuxt rule sets

Add rules/vue/ and rules/nuxt/, each with the standard 5-file layout (coding-style, hooks, patterns, security, testing) that extends common/, following the Adding a New Language convention in rules/README.md.

Vue rules reference the frontend-patterns and vite-patterns skills. Nuxt rules reference the nuxt4-patterns and vite-patterns skills. Content is concise (1.5 to 4 KB per file) since rules load as always-on context.

* fix(rules): address PR review on vue and nuxt rule sets

- nuxt/coding-style: generalize the srcDir-override note (drop project-specific 'this repo' phrasing so it is correct for any Nuxt project).

- vue/hooks: add **/*.ts and **/*.tsx to paths so the lint/typecheck guidance loads when editing composables and stores.

- nuxt/hooks: add **/*.vue to paths (covers pages/layouts/components) and wrap nuxi typecheck in a timeout, mirroring web/hooks.md.

- nuxt/security: tighten the /security-review auto-trigger scope to external fetch, credential handling, and sensitive mutations, with examples.

- nuxt/testing: correct 'Vitest-only' to note built-in Playwright E2E, and drop the @nuxt/test-utils version pin.

- README: register vue and nuxt in the structure tree and install examples.

Skipped: 'X specific' -> 'X-specific' hyphenation (all existing rule sets use the unhyphenated form, changing only vue/nuxt would be inconsistent); repeating the 80%/TDD mandate in nuxt/testing (already inherited from common/testing.md).
2026-06-15 14:01:38 -04:00

2.1 KiB

paths
paths
**/nuxt.config.*
**/app.config.*
**/app.vue
**/pages/**
**/layouts/**
**/middleware/**

Nuxt Coding Style

This file extends common/coding-style.md with Nuxt specific content.

Directory layout

  • Default srcDir is app/. Framework files live at app/pages/, app/layouts/, app/middleware/, app/plugins/, app/app.config.ts. nuxt.config.ts and server/ stay at project root.
  • Some projects override srcDir to src/ for a Feature-Sliced Design layout, remapping dir.pages (for example to src/app/routes), dir.layouts, and the @/~ aliases. Always check nuxt.config.ts before assuming a path.

Auto-imports discipline

  • Composables in app/composables/ and server/utils/ auto-import. Do NOT manually import Nuxt composables (useFetch, useState, navigateTo) or defineStore / storeToRefs.
  • Do NOT add a standalone vue-router dep (Nuxt bundles v5) or hand-mount createApp / createPinia / createRouter. The framework wires these.

Compiler macros

  • definePageMeta is a compile-time macro. Static values only, no reactive data and no side-effect calls inside it.
  • Augment typed PageMeta via declare module '#app' rather than casting.

Config file separation

Three distinct files, do not conflate.

  • nuxt.config.ts = build-time only (routeRules, modules, nitro, ssr flag). Not reactive.
  • runtimeConfig (inside nuxt.config) = per-env runtime values, env-overridable via NUXT_*. Root keys are server-only, public keys are client-visible.
  • app/app.config.ts = public build-fixed reactive settings (theme tokens, feature flags). No env override. NEVER secrets.

Head and meta

  • app.head in nuxt.config.ts takes static values only.
  • Reactive meta goes through useHead / useSeoMeta in component setup, never via app.head.

Reference