Creates Vue 3 components, builds vanilla JS composables, configures Vite projects, and sets up routing and state management using JavaScript only — no TypeScript. Generates JSDoc-typed code with @typedef, @param, and @returns annotations for full type coverage without a TS compiler. Use when building Vue 3 applications with JavaScript only (no TypeScript), when projects require JSDoc-based type hints, when migrating from Vue 2 Options API to Composition API in JS, or when teams prefer vanilla JavaScript, .mjs modules, or need quick prototypes without TypeScript setup.
98
100%
Does it follow best practices?
Impact
97%
1.21xAverage score across 6 eval scenarios
Passed
No known issues
JSDoc-typed composable authoring
JS file extensions
100%
100%
No TypeScript syntax
100%
100%
No CommonJS require()
100%
100%
@typedef for PaginatedResponse
80%
100%
@typedef for MetricItem
100%
100%
@type for Ref<T>
100%
100%
@type for ComputedRef
0%
0%
@template generic type
0%
0%
@returns on composable functions
100%
100%
@param on function parameters
100%
100%
Return type @typedef
0%
100%
toValue() for MaybeRef param
0%
100%
toRefs() for filter destructuring
100%
100%
Vue SFC and Pinia store with JSDoc
No lang attribute on script
100%
100%
No .ts files
100%
100%
Setup Store syntax
100%
100%
storeToRefs() usage
0%
100%
readonly() on provided value
0%
100%
@typedef in types.js
100%
100%
Types.js empty export
0%
100%
@type for store Refs
100%
100%
@param on store actions
100%
100%
@returns on store actions
100%
100%
No CommonJS require()
100%
100%
JSDoc in component
100%
100%
No TypeScript syntax
100%
100%
Vitest component and store testing
Vitest imports
100%
83%
.js test file extension
100%
100%
mount() from @vue/test-utils
100%
100%
createTestingPinia usage
100%
100%
flushPromises() for async
0%
100%
initialState in createTestingPinia
100%
100%
data-test selectors
100%
100%
Action spy assertion
100%
100%
No TypeScript syntax
100%
100%
No CommonJS require()
100%
100%
ESLint JSDoc plugin setup and verification
eslint-plugin-jsdoc installed
100%
100%
jsdoc plugin in ESLint config
100%
100%
jsdoc rules enabled
100%
100%
@param on exported functions
100%
100%
@returns on exported functions
100%
100%
@typedef for complex objects
0%
100%
@type on reactive variables
0%
100%
No TypeScript syntax
100%
100%
No .ts file extensions
100%
100%
No CommonJS require()
100%
100%
ESLint run evidence
57%
100%
Module-level singleton composable with lifecycle cleanup
Module-level ref state
100%
100%
onUnmounted cleanup
100%
100%
readonly() on exposed state
100%
100%
@typedef for notification shape
100%
100%
@type on module-level ref
100%
100%
@param on exported functions
100%
100%
@returns on composable function
100%
100%
Return type @typedef
0%
100%
No TypeScript syntax
100%
100%
No .ts file extensions
100%
100%
No CommonJS require()
100%
100%
Demo component uses composable
100%
100%
Provide/inject with readonly, .mjs modules, and type coverage note
.mjs for standalone modules
100%
100%
readonly() on provide
100%
100%
Symbol injection key
0%
100%
@typedef in .mjs types file
100%
100%
Types empty export
0%
100%
@param on composable functions
100%
100%
@returns on composable functions
100%
100%
@type on reactive variables
100%
100%
Type coverage note present
100%
100%
No TypeScript syntax
100%
100%
No .ts file extensions
100%
100%
No CommonJS require()
100%
100%
5b76101
Table of Contents
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.