Replace redundant components with updated feature flag hooks and views. Add comprehensive documentation and ESLint config for improved development workflow.

This commit is contained in:
2025-09-12 15:35:44 +02:00
parent 453b9eac7c
commit 81780ab7a9
27 changed files with 13326 additions and 260 deletions

105
CLAUDE.md Normal file
View File

@@ -0,0 +1,105 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
This is a Payload CMS v3 plugin for feature flags (@xtr-dev/payload-feature-flags). The plugin enables feature toggles, A/B testing, and gradual rollouts through a dedicated collection and server-side hooks.
## Key Commands
### Development
- `pnpm dev` - Start Next.js dev server with Payload CMS admin panel
- `pnpm dev:payload` - Run Payload CLI commands for development
- `pnpm dev:generate-types` - Generate TypeScript types from Payload config
- `pnpm dev:generate-importmap` - Generate import map for admin panel
### Building
- `pnpm build` - Full production build (copies files, builds types, compiles with SWC)
- `pnpm build:types` - Generate TypeScript declarations only
- `pnpm build:swc` - Compile TypeScript to JavaScript using SWC
- `pnpm clean` - Remove dist directory and build artifacts
- `pnpm copyfiles` - Copy non-TS assets to dist
### Testing & Quality
- `pnpm test` - Run all tests (integration + e2e)
- `pnpm test:int` - Run integration tests with Vitest
- `pnpm test:e2e` - Run end-to-end tests with Playwright
- `pnpm lint` - Run ESLint
- `pnpm lint:fix` - Run ESLint with auto-fix
### Publishing
- `pnpm prepublishOnly` - Clean and build before publishing (runs automatically)
## Architecture
### Plugin Structure
The plugin follows Payload's plugin architecture with multiple exports:
- **Main export (`src/index.ts`)**: Core plugin configuration function
- **RSC export (`src/exports/rsc.ts`)**: Server-side hooks for React Server Components
- **Client export (`src/exports/client.ts`)**: Client-side components (currently placeholder)
### Core Components
#### Plugin Configuration (`src/index.ts`)
- `PayloadFeatureFlagsConfig`: Main configuration type
- `payloadFeatureFlags()`: Plugin factory function that creates a Payload collection and optional API endpoints
- Collection overrides support for full customization
- Feature toggles for rollouts, variants, and API endpoints
#### Server Hooks (`src/hooks/server.ts`)
- `getFeatureFlag()`: Fetch individual flag data
- `isFeatureEnabled()`: Simple boolean check
- `getAllFeatureFlags()`: Get all active flags
- `isUserInRollout()`: Check percentage-based rollouts with consistent hashing
- `getUserVariant()`: A/B testing variant selection
- `getFeatureFlagsByTag()`: Query flags by tags
#### API Endpoints (`src/endpoints/customEndpointHandler.ts`)
- `GET /api/feature-flags` - List all active feature flags
- `GET /api/feature-flags/:flag` - Get specific flag data
- Only created when `enableApi: true`
### Collection Schema
The plugin creates a feature flags collection with these key fields:
- `name` (unique): Flag identifier
- `enabled`: On/off toggle
- `rolloutPercentage`: 0-100% rollout control
- `variants`: Array for A/B testing with weights
- `tags`: Organization and filtering
- `metadata`: Additional JSON data
### Development Environment
- Uses MongoDB Memory Server for testing
- Next.js for admin panel development
- SWC for fast compilation
- Vitest for integration testing
- Playwright for E2E testing
### Export Strategy
The plugin publishes with different entry points:
- **Development**: Points to TypeScript sources (`src/`)
- **Production**: Points to compiled JavaScript (`dist/`)
- Supports both CommonJS and ESM through package.json exports
## Important Notes
### Plugin Integration
The plugin integrates with Payload by:
1. Creating a feature flags collection with configurable slug and fields
2. Adding optional REST API endpoints
3. Providing server-side hooks that work with any collection slug
4. Supporting full collection customization through `collectionOverrides`
### Security Considerations
- REST API endpoints are disabled by default (`enableApi: false`)
- Server-side hooks are the preferred method for accessing feature flags
- Collection access can be restricted through `collectionOverrides.access`
### Testing Setup
The development configuration (`dev/payload.config.ts`) includes:
- MongoDB Memory Server for isolated testing
- Test collections (posts, media)
- Example plugin configuration with collection overrides
- Seeding functionality for development data