This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Prism is an open-source API mocking and contract testing platform supporting OpenAPI v2/v3.0/v3.1 and Postman Collections. It provides a mock server and validation proxy.
# Install dependencies
npm ci
# Build (clean + compile TypeScript)
npm run build
# Run all tests
npm test
# Run tests for a specific package or file
npm test -- --testPathPattern="core"
npm test -- packages/http/src/__tests__/client.spec.ts
# Lint
npm run lint
npm run lint.fix
# Run CLI directly during development (from packages/cli)
cd packages/cli && npm run cli -- mock openapi.yaml
# Debug CLI (attaches Node inspector)
cd packages/cli && npm run cli:debug -- mock file.oas.yml
# Build binary
npm run build.binary
# Integration/harness tests (requires build.binary first)
npm run test.harnessThis is a Lerna monorepo with npm workspaces. Packages have a strict layering:
packages/
├── core/ # Base abstractions: routing, validation, mocking contracts
├── http/ # HTTP-specific: mocker, validator, forwarder, router, negotiator
├── http-server/ # HTTP server using Micri; wires http/ into a running server
└── cli/ # CLI entry point using Yargs; commands: mock, proxy
Data flow: CLI → HTTP-Server → HTTP (mocker/validator/forwarder/router) → Core
- fp-ts throughout: The codebase uses
Either,TaskEither,Reader, andOptionfrom fp-ts for error handling and dependency injection. Expect functional-style pipelines viapipe(). - IPrismConfig / IHttpConfig: Central config objects passed as dependencies control behavior (dynamic mocking, validation strictness, proxy mode).
- Pino structured logging: A logger instance is passed as a context through nearly all operations.
- Mocker pipeline (
packages/http/src/mocker/): Negotiates content type → selects example or generates withjson-schema-faker→ applies callbacks. - Validator pipeline (
packages/http/src/validator/): AJV-based validation for request/response bodies, headers, path/query params.
| File | Purpose |
|---|---|
packages/core/src/factory.ts |
Creates Prism instances |
packages/http/src/client.ts |
HTTP client factory |
packages/http/src/mocker/index.ts |
Mock response generation entrypoint |
packages/http/src/validator/index.ts |
Validation entrypoint |
packages/http/src/router/index.ts |
Matches requests to OpenAPI operations |
packages/http/src/forwarder/index.ts |
Upstream proxy forwarding |
packages/cli/src/commands/ |
mock and proxy CLI command implementations |
packages/http-server/src/index.ts |
HTTP server setup |
- Tests live in
__tests__/directories alongside source files, named*.spec.tsor*.test.ts - Jest projects are scoped per package:
HTTP-SERVER,HTTP,CORE,CLI nockis used for HTTP mocking in tests- Harness tests (
packages/cli/src/__tests__/harness/) test the compiled binary end-to-end
- Prettier: 120-char line width, single quotes, trailing commas (es5)
- ESLint with
@typescript-eslint—lint-stagedauto-fixes on commit via Husky - Arrow functions: omit parens for single parameter
- TypeScript strict mode;
ttypescript(ttsc) is used for compilation with custom transformers
- Feature branches:
feature/*,chore/*,fix/* - Releases managed via Lerna (
npm run release) - Node.js minimum: 18.20.1