mirror of
https://github.com/transloadit/uppy.git
synced 2026-01-23 02:25:07 +00:00
Add CLAUDE.md
This commit is contained in:
parent
2aea7922c1
commit
a703ca7997
1 changed files with 130 additions and 0 deletions
130
CLAUDE.md
Normal file
130
CLAUDE.md
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Repository Overview
|
||||
|
||||
Uppy is a modular JavaScript file uploader that integrates seamlessly with any application. It's built using a monorepo structure with Yarn workspaces, Turbo for build orchestration, and Biome for linting/formatting.
|
||||
|
||||
## Development Commands
|
||||
|
||||
### Core Commands
|
||||
- `yarn build` - Build all packages (uses Turbo)
|
||||
- `yarn build:watch` - Watch mode for building packages
|
||||
- `yarn test` - Run tests for all packages
|
||||
- `yarn test:watch` - Run tests in watch mode
|
||||
- `yarn typecheck` - Type checking across all packages
|
||||
- `yarn check` - Run Biome linting and formatting
|
||||
- `yarn check:ci` - Run Biome in CI mode (no writes)
|
||||
|
||||
### Development Server
|
||||
- `yarn dev` - Start development server (from private/dev workspace)
|
||||
- `yarn dev:with-companion` - Start dev server with Companion backend
|
||||
- `yarn start:companion` - Start only the Companion server
|
||||
|
||||
### Single Test Execution
|
||||
To run tests for a specific package:
|
||||
```bash
|
||||
yarn workspace @uppy/[package-name] test
|
||||
# Example: yarn workspace @uppy/core test
|
||||
```
|
||||
|
||||
### Individual Package Development
|
||||
```bash
|
||||
yarn workspace @uppy/[package-name] build
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
### Monorepo Structure
|
||||
- `packages/@uppy/` - Core Uppy packages (plugins, utilities)
|
||||
- `packages/uppy/` - Main bundle package
|
||||
- `examples/` - Example implementations for various frameworks
|
||||
- `private/` - Internal development tools
|
||||
|
||||
### Core Architecture
|
||||
- **Uppy Core** (`@uppy/core`) - Main class that manages plugins, state, and events
|
||||
- **Plugins** - Modular components for different functionalities:
|
||||
- **UI Plugins**: Dashboard, Drag & Drop, File Input, Webcam, etc.
|
||||
- **Provider Plugins**: Google Drive, Dropbox, Instagram, etc. (require Companion)
|
||||
- **Uploader Plugins**: Tus (resumable), XHR Upload, AWS S3, etc.
|
||||
- **Utility Plugins**: Golden Retriever (recovery), Thumbnail Generator, etc.
|
||||
|
||||
### Plugin Types
|
||||
1. **Acquirer** - Gets files (File Input, Webcam, Google Drive)
|
||||
2. **Modifier** - Modifies files (Image Editor, Compressor)
|
||||
3. **Uploader** - Uploads files (Tus, XHR, AWS S3)
|
||||
4. **Presenter** - Shows UI (Dashboard, Progress Bar, Status Bar)
|
||||
5. **Orchestrator** - Manages workflow
|
||||
6. **Logger** - Handles logging
|
||||
|
||||
### Key Packages
|
||||
- `@uppy/core` - Main Uppy class and plugin system
|
||||
- `@uppy/dashboard` - Complete UI with file management
|
||||
- `@uppy/companion` - Server-side component for remote providers
|
||||
- `@uppy/companion-client` - Client for communicating with Companion
|
||||
- `@uppy/utils` - Shared utilities
|
||||
- `@uppy/components` - Headless Preact components (with framework wrappers)
|
||||
|
||||
## Build System
|
||||
|
||||
### Turbo Configuration
|
||||
The build system uses Turbo (turbo.json) for task orchestration:
|
||||
- Builds have dependency ordering (`dependsOn: ["^build"]`)
|
||||
- TypeScript builds output to `lib/` and `dist/` directories
|
||||
- CSS builds process SCSS files to CSS
|
||||
- Special handling for the main `uppy` package bundle
|
||||
|
||||
### TypeScript Configuration
|
||||
- Shared config in `tsconfig.shared.json`
|
||||
- Individual packages have `tsconfig.json` and `tsconfig.build.json`
|
||||
- Build outputs include declaration files (.d.ts) and source maps
|
||||
|
||||
## Code Standards
|
||||
|
||||
### Linting and Formatting
|
||||
- **Biome** is used for linting and formatting (replaces ESLint/Prettier)
|
||||
- Configuration in `biome.json`
|
||||
- Use single quotes, semicolons as needed
|
||||
- 2-space indentation
|
||||
|
||||
### Framework Integration
|
||||
- **Preact** for UI components with framework wrappers generated for React, Vue, Svelte
|
||||
- **TypeScript** throughout the codebase
|
||||
- Components in `@uppy/components` use Tailwind CSS with `uppy:` prefix
|
||||
|
||||
### Plugin Development
|
||||
- All plugins extend `BasePlugin` or `UIPlugin`
|
||||
- Plugins must have unique IDs and specify their type
|
||||
- State management through Uppy's store system
|
||||
- Event-driven architecture using namespace-emitter
|
||||
|
||||
## Testing
|
||||
|
||||
### Test Framework
|
||||
- **Vitest** for unit tests (migrated from Jest)
|
||||
- **Vitest Browser Mode** for browser testing (migrated from Cypress)
|
||||
- Unit tests use `.test.{ts,tsx}` extensions and browser tests `.browser.test.{ts,tsx}`
|
||||
|
||||
### Running Tests
|
||||
- Tests run in parallel across packages via Turbo
|
||||
- Examples also include tests (React, Vue, SvelteKit examples)
|
||||
- Use `yarn test` for development
|
||||
|
||||
## Companion Server
|
||||
|
||||
The Companion server enables integration with remote file sources:
|
||||
- Handles OAuth flows for providers like Google Drive, Dropbox
|
||||
- Proxies file downloads to avoid CORS issues
|
||||
- Provides search functionality for providers
|
||||
- Located in `packages/@uppy/companion/`
|
||||
|
||||
## Important Notes
|
||||
|
||||
- Never commit sensitive information (API keys, tokens)
|
||||
- Follow existing code conventions and patterns within each package
|
||||
- Use the `@uppy/utils` package for shared functionality
|
||||
- UI components should be accessible and support internationalization
|
||||
- Always run `yarn check` and `yarn typecheck` before committing
|
||||
- When adding a new component to `@uppy/components`, you have to run `yarn migrate:components` from root.
|
||||
This is not needed for changing existing components.
|
||||
Loading…
Add table
Add a link
Reference in a new issue