# Waha Shared

Shared data, types, functions, and assets used across multiple Waha projects:

- [waha-upload](https://github.com/kingdomstrategies/waha-upload)
- [waha-web](https://github.com/kingdomstrategies/waha-web)
- [waha-website](https://github.com/kingdomstrategies/waha-website)
- [waha-dashboard](https://github.com/kingdomstrategies/waha-dashboard)
- [waha-video-generation](https://github.com/kingdomstrategies/waha-video-generation)

This package is published to npm as `waha-shared` and consumed by those projects as a dependency.

## Directory Structure

```
shared/
├── types/          # TypeScript type definitions (Zod-based)
├── functions/      # Utility functions (language info, Bible data, sets, etc.)
├── data/           # JSON data files with Zod validation schemas
├── assets/         # Fonts, icons, and React components (logos, set icons)
├── translations/   # Raw translation JSON files from Crowdin
├── dist/           # Built output (do not edit directly)
└── package.json
```

## How Data Works

Each subdirectory in `data/` follows a consistent pattern:

```
data/languages/
├── languages.json        # Raw data
├── languages.zod.ts      # Zod schema defining the shape
├── languages.schema.json # JSON Schema (auto-generated)
└── index.ts              # Validates JSON against Zod and exports typed data (auto-generated)
```

## Type Generation Pipeline

Types flow through a pipeline managed by `yarn prep`:

```
Zod schema (.zod.ts) and raw data file (.json)
  → JSON Schema (.schema.json)
  → Python Pydantic models
  → Python data constants
  → TypeScript index.ts
```

When you modify a `.zod.ts` file, run `yarn prep` from the repo root to regenerate everything downstream.

## Building & Publishing

```bash
yarn update
```

This will update the `dist` folder, commit changes, and publish to the npm registry.

The `dist/` directory is the build output — never edit files in it directly.

## Adding New Data

1. Create a new directory under `data/`, e.g. `data/myNewData/`
2. Add the raw JSON file: `myNewData.json`
3. Define the Zod schema: `myNewData.zod.ts`
4. Run `yarn prep` to auto-generate the JSON schema, Python types, Python data, and index file
