DDD Types, State, And Mocks

SkillDev tools

Structure a simple Ledger Wallet data layer where one API response maps to one entity slice. Use when creating or reviewing domain/entity schemas, inferred types, initial state, mocks, selectors, slices, domain/api clients, and their tests.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the DDD Types, State, And Mocks skill

What this skill tells your AI

The instructions your AI receives, as published by ledgerhq/ledger-live in .agents/skills/ddd-types-state-mocks/SKILL.md and read by ahel’s review.

Apply this pattern when one API resource maps to one entity slice. Use ddd-data-layer-advanced when one response hydrates several entities.

Source: Types, Initial State & Mocks

Place Files

domain/entity/<entity>/src/
├── schema.ts
├── schema.mock.ts
├── schema.test.ts
├── selectors.ts
├── selectors.test.ts
├── slice.ts
└── slice.test.ts

domain/api/<entity>/src/
├── api.ts
└── api.test.ts

Export only the contracts consumers need from each package index.ts.

Keep Ownership Clear

FileResponsibility
schema.tsDefine the runtime schema, infer the TypeScript type, and declare a complete initial state
schema.mock.tsBuild valid entity data with sensible defaults and optional overrides
slice.tsOwn focused entity reducers and actions
selectors.tsRead or derive entity state without importing an app store type
api.tsOwn transport contracts, network calls, and transformations

Follow the package's runtime-schema precedent (Zod or Typia). Do not maintain a separate handwritten type that can drift from the schema.

Validate The Contract

  • Give every entity property an explicit initial value.
  • Make every mock pass the runtime schema.
  • Keep mock-only helpers out of production behavior.
  • Give reducers one clear state transition each.
  • Parse untrusted API data before storing it when the API layer does not already guarantee the contract.
  • Register reducers and API middleware in each app composition root; never import an app store from a domain package.

Test

  • Schema: accept a mock, reject an invalid payload, and cover initial defaults.
  • Mock: return valid data and honor supported overrides.
  • Slice: cover initial state, replacement/reset, and focused updates.
  • Selectors: cover direct and derived values with a minimal local state shape.
  • API: cover success, relevant failures, and transformations with a local test store or existing domain test harness.

Signals

GitHub stars
618
Forks
490
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
ddd-types-state-mocks
Source
github.com/ledgerhq/ledger-live