Thank you for your interest in contributing! This guide will help you get started.
# Clone the repository
git clone https://github.com/billymaulana/nuxt-actions.git
cd nuxt-actions
# Install dependencies
pnpm install
# Generate type stubs
pnpm run dev:prepare
# Start development with the playground
pnpm run devsrc/
module.ts # Nuxt module definition, action scanning, type generation
devtools.ts # Nuxt DevTools integration
runtime/
composables/ # Client-side composables (useAction, useOptimisticAction, etc.)
server/utils/ # Server utilities (defineAction, createActionClient, etc.)
types.ts # Shared TypeScript types
test/
unit/ # Unit tests (100% coverage target)
types/ # Compile-time type tests
fixtures/ # Test fixtures (Nuxt apps for E2E)
basic.test.ts # E2E integration tests
docs/ # VitePress documentation site
playground/ # Development playground app
- ESLint with
@nuxt/eslint-config(stylistic rules enabled, no Prettier) - 2-space indentation, LF line endings
- Run
pnpm run lintbefore committing - Auto-fix available:
pnpm run lint --fix
# Run unit tests
pnpm run test
# Run with watch mode
pnpm run test:watch
# Run with coverage (100% threshold enforced)
pnpm run test:coverage
# Run type checking
pnpm run test:types
# Run compile-time type tests
pnpm run test:type-testsAll pull requests must pass unit tests and maintain 100% code coverage for src/runtime/.
We use Conventional Commits:
type(scope): description
Types: feat, fix, docs, chore, test, ci, build, refactor, perf
Scopes: module, composables, server, docs, ci, deps
Examples:
feat(composables): add timeout option to useAction
fix(server): handle empty body in defineAction
docs: update middleware guide
test(unit): add edge case tests for streaming
- Fork the repository
- Create a branch from
main(git checkout -b feat/my-feature) - Write tests for your changes
- Ensure all checks pass:
pnpm run lint && pnpm run test && pnpm run test:types - Open a pull request to
main - Fill out the PR template
Releases are handled by the maintainer using changelogen:
pnpm run releaseThis runs: lint → test → build → changelogen → npm publish → git push tags.
CI automatically creates GitHub Releases when a version tag is pushed.