Skip to main content

repo-structure-navigate

Navigate the Formisch monorepo structure. Use when finding code locations, understanding architecture, locating source files, or implementing features across packages and frameworks.

Informations de source

Dépôt
open-circle/formisch
Dernière activité de la source
29 juillet 2026 à 23:25
Langue détectée de SKILL.md
anglais
Étoiles
1 205
Forks
36

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
repo-structure-navigate
description
Navigate the Formisch monorepo structure. Use when finding code locations, understanding architecture, locating source files, or implementing features across packages and frameworks.
metadata
{"author":"formisch","version":"1.0"}
# Repository Navigation Quick reference for understanding and navigating the Formisch repository structure. ## Overview **Formisch** is a schema-based, headless form library with a framework-agnostic core supporting multiple frameworks (Angular, Preact, Qwik, React, React Native, Solid, Svelte, Vue). Framework-specific reactivity is injected at build time for native performance. **Architecture:** - Monorepo with pnpm workspaces - Framework-agnostic core + framework-specific wrappers - TypeScript throughout with Valibot schemas ## Directory Structure ``` formisch/ ├── packages/ # Core packages │ ├── core/ # Framework-agnostic form logic │ └── methods/ # Form manipulation methods ├── frameworks/ # Framework-specific wrappers (angular, preact, qwik, react, react-native, solid, svelte, vue) ├── playgrounds/ # Testing environments per framework ├── scripts/ # Automation scripts ├── website/ # Documentation site ├── skills/ # Agent skills (this folder) └── prompts/ # Legacy AI agent guides (deprecated) ``` ## Core Packages ### `/packages/core/` → `@formisch/core` Framework-agnostic form logic. Builds to framework-specific outputs via `tsdown.config.ts`. **Key directories:** - `src/array/` - Array field utilities - `src/field/` - Field management - `src/form/` - Form state management - `src/framework/` - Framework reactivity integration (injected at build time) - `src/types/` - TypeScript types ### `/packages/methods/` → `@formisch/methods` Form manipulation utilities. Each method in its own directory (`src/{method-name}/`). **Available methods:** focus, getDeepErrorEntries, getDeepErrors, getDirtyInput, getDirtyPaths, getErrors, getInput, handleSubmit, insert, move, pickDirty, remove, replace, reset, setErrors, setInput, submit, swap, validate ## Framework Packages ### `/frameworks/{framework}/` → `@formisch/{framework}` Thin wrappers that: 1. Export framework-specific core build 2. Provide framework-native components/primitives 3. Re-export methods **Structure:** ``` frameworks/{framework}/ ├── src/ │ ├── components/ # Form, Field components │ ├── primitives/ # createForm/useForm, useField, useFieldArray │ ├── types/ # Framework-specific types │ └── index.tsx # Main export ``` ## Playgrounds ### `/playgrounds/{framework}/` Minimal apps for testing. Use workspace dependencies (`workspace:*`). Run with `pnpm dev`. ## Website ### `/website/` Documentation site built with Qwik. Update when APIs change. ## Quick Reference ### Finding Code | Looking for... | Location | | ----------------------------- | ----------------------------------------- | | Form state logic | `/packages/core/src/form/` | | Field management | `/packages/core/src/field/` | | Array utilities | `/packages/core/src/array/` | | Methods (submit, reset, etc.) | `/packages/methods/src/{method-name}/` | | Framework components | `/frameworks/{framework}/src/components/` | | Framework primitives | `/frameworks/{framework}/src/primitives/` | | Type definitions | `/packages/core/src/types/` | | Usage examples | `/playgrounds/{framework}/src/` | | Documentation | `/website/src/routes/` | ### Commands ```bash pnpm install # Install dependencies pnpm build # Build a package pnpm test # Run tests pnpm lint # Lint and type check ``` ## Common Workflows ### Adding a Core Feature 1. Implement in `/packages/core/src/` 2. Add framework-specific code in `/packages/core/src/framework/` 3. Update exports in index files 4. Test in playgrounds 5. Update docs in `/website/` ### Adding a Method 1. Create `/packages/methods/src/{method-name}/` 2. Export from `/packages/methods/src/index.ts` 3. Test in playground and document on website ### Adding Framework Support 1. Create `/packages/core/src/framework/{framework}.ts` 2. Configure build in `tsdown.config.ts` 3. Create `/frameworks/{framework}/` package 4. Create playground in `/playgrounds/{framework}/` ## Important Rules ### Code Style - TypeScript throughout - Use Prettier and ESLint - Add JSDoc for public APIs - camelCase for functions/variables, PascalCase for components/types ### Imports - Relative imports within packages - Package imports across packages - Prefer named exports ### Testing - Tests next to implementation (`.test.ts`) - Use Vitest - Run: `pnpm test` ## Architecture **Framework-agnostic core** - Written once, compiled to framework-specific versions via `tsdown.config.ts`. Framework reactivity is injected at build time from `/packages/core/src/framework/{framework}.ts`. This ensures: - Native performance per framework - Consistent behavior across frameworks - Minimal bundle size ## Best Practices - Code differs between frameworks - always check the target framework - Check playgrounds for real-world usage examples - TypeScript types are the source of truth - Follow existing patterns in the codebase - Test incrementally (build → test → playground) - Update website docs when changing APIs - Use `workspace:*` dependencies in playgrounds
Voir sur GitHub