# pmcelhaney/bizallele architecture

> Architecture diagram of the GitHub repository pmcelhaney/bizallele, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/pmcelhaney/bizallele
- Repository: https://github.com/pmcelhaney/bizallele

## Overview

Bizallele is a JavaScript/TypeScript library for reusable field rules across records, collections, forms, tables, and backend validation. The primary workflow is to compose field definitions, bind them to values in a Record, validate and edit those values, then expose model state through Lit controls or manage multiple records through a Recordset and table. Separate schema adapters extend the model toward API and database ecosystems. Edges are limited to README statements and relationships visible in the supplied source index or excerpts; unsampled adapter behavior is not inferred.

Main entry points: [`src/field-type-builder.ts`](https://github.com/pmcelhaney/bizallele/blob/main/src/field-type-builder.ts) (Field definitions), [`src/recordset.js`](https://github.com/pmcelhaney/bizallele/blob/main/src/recordset.js) (Recordset), [`src/record.js`](https://github.com/pmcelhaney/bizallele/blob/main/src/record.js) (Record), [`src/index.js`](https://github.com/pmcelhaney/bizallele/blob/main/src/index.js) (Public API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_rules["Field rules"]
  node_public_api["Public API<br/>[index.js]"]
  node_field_builders["Field definitions"]
  node_field_runtime["Field behavior<br/>[field-type.js]"]
  node_primitive_fields["Built-in fields<br/>[primitives.js]"]
end

subgraph group_model["Record model"]
  node_record["Record<br/>[record.js]"]
  node_field["Field access<br/>[field.js]"]
  node_recordset["Recordset<br/>[recordset.js]"]
  node_columns["Table columns<br/>[column.js]"]
  node_events["Recordset events"]
  node_observable["Observable"]
end

subgraph group_ui["Lit interfaces"]
  node_lit_record["Record element<br/>[fdl-record.ts]"]
  node_record_context["Record binding<br/>[record-context.ts]"]
  node_lit_field["Field control<br/>[fdl-field.ts]"]
  node_form_element["Form adapter<br/>[form-element.ts]"]
  node_lit_address["Address control<br/>[fdl-address.ts]"]
  node_lit_table["Table element<br/>[fdl-table.ts]"]
end

subgraph group_adapters["Schema adapters"]
  node_openapi["OpenAPI adapter<br/>[openapi.ts]"]
  node_prisma["Prisma adapter<br/>[prisma.ts]"]
  node_zod["Zod adapter<br/>[zod.ts]"]
end

node_consumer(("Application"))
node_backend(("Backend validation"))

node_consumer -->|"imports"| node_public_api
node_consumer -->|"composes"| node_field_builders
node_public_api -->|"exports"| node_field_runtime
node_public_api -->|"exports"| node_primitive_fields
node_field_builders -->|"finalizes"| node_field_runtime
node_primitive_fields -->|"builds"| node_field_builders
node_consumer -->|"binds values"| node_record
node_record -->|"resolves rules"| node_field_runtime
node_record -->|"creates accessors"| node_field
node_consumer -->|"manages records"| node_recordset
node_recordset -->|"creates"| node_record
node_recordset -->|"creates"| node_columns
node_recordset -->|"uses updates"| node_observable
node_recordset -->|"dispatches events"| node_events
node_consumer -->|"groups controls"| node_lit_record
node_lit_record -->|"binds record"| node_record_context
node_lit_field -->|"requests record"| node_record_context
node_lit_field -->|"extends"| node_form_element
node_lit_address -->|"uses control"| node_lit_field
node_consumer -->|"renders table"| node_lit_table
node_lit_table -->|"uses collection"| node_recordset
node_backend -->|"reuses rules"| node_field_builders
node_field_builders -->|"supports schema"| node_openapi
node_field_builders -.->|"supports mapping"| node_prisma
node_field_builders -.->|"supports schema"| node_zod

click node_public_api "https://github.com/pmcelhaney/bizallele/blob/main/src/index.js"
click node_field_builders "https://github.com/pmcelhaney/bizallele/blob/main/src/field-type-builder.ts"
click node_field_runtime "https://github.com/pmcelhaney/bizallele/blob/main/src/field-type.js"
click node_primitive_fields "https://github.com/pmcelhaney/bizallele/blob/main/src/primitives.js"
click node_record "https://github.com/pmcelhaney/bizallele/blob/main/src/record.js"
click node_field "https://github.com/pmcelhaney/bizallele/blob/main/src/field.js"
click node_recordset "https://github.com/pmcelhaney/bizallele/blob/main/src/recordset.js"
click node_columns "https://github.com/pmcelhaney/bizallele/blob/main/src/column.js"
click node_events "https://github.com/pmcelhaney/bizallele/blob/main/src/recordset.events.ts"
click node_observable "https://github.com/pmcelhaney/bizallele/blob/main/src/types/observable.types.ts"
click node_lit_record "https://github.com/pmcelhaney/bizallele/blob/main/src/lit/fdl-record.ts"
click node_record_context "https://github.com/pmcelhaney/bizallele/blob/main/src/lit/record-context.ts"
click node_lit_field "https://github.com/pmcelhaney/bizallele/blob/main/src/lit/fdl-field.ts"
click node_form_element "https://github.com/pmcelhaney/bizallele/blob/main/src/lit/form-element.ts"
click node_lit_address "https://github.com/pmcelhaney/bizallele/blob/main/src/lit/fdl-address.ts"
click node_lit_table "https://github.com/pmcelhaney/bizallele/blob/main/src/lit/fdl-table.ts"
click node_openapi "https://github.com/pmcelhaney/bizallele/blob/main/src/openapi.ts"
click node_prisma "https://github.com/pmcelhaney/bizallele/blob/main/src/prisma.ts"
click node_zod "https://github.com/pmcelhaney/bizallele/blob/main/src/zod.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_public_api,node_field_builders,node_field_runtime,node_primitive_fields toneBlue
class node_record,node_field,node_recordset,node_columns,node_events,node_observable toneAmber
class node_lit_record,node_record_context,node_lit_field,node_form_element,node_lit_address,node_lit_table toneMint
class node_openapi,node_prisma,node_zod toneRose
class node_consumer,node_backend toneIndigo
```

## Components

### Field rules

- [Public API](https://github.com/pmcelhaney/bizallele/blob/main/src/index.js): `src/index.js`
- [Field definitions](https://github.com/pmcelhaney/bizallele/blob/main/src/field-type-builder.ts): `src/field-type-builder.ts`
- [Field behavior](https://github.com/pmcelhaney/bizallele/blob/main/src/field-type.js): `src/field-type.js`
- [Built-in fields](https://github.com/pmcelhaney/bizallele/blob/main/src/primitives.js): `src/primitives.js`

### Record model

- [Record](https://github.com/pmcelhaney/bizallele/blob/main/src/record.js): `src/record.js`
- [Field access](https://github.com/pmcelhaney/bizallele/blob/main/src/field.js): `src/field.js`
- [Recordset](https://github.com/pmcelhaney/bizallele/blob/main/src/recordset.js): `src/recordset.js`
- [Table columns](https://github.com/pmcelhaney/bizallele/blob/main/src/column.js): `src/column.js`
- [Recordset events](https://github.com/pmcelhaney/bizallele/blob/main/src/recordset.events.ts): `src/recordset.events.ts`
- [Observable](https://github.com/pmcelhaney/bizallele/blob/main/src/types/observable.types.ts): `src/types/observable.types.ts`

### Lit interfaces

- [Record element](https://github.com/pmcelhaney/bizallele/blob/main/src/lit/fdl-record.ts): `src/lit/fdl-record.ts`
- [Record binding](https://github.com/pmcelhaney/bizallele/blob/main/src/lit/record-context.ts): `src/lit/record-context.ts`
- [Field control](https://github.com/pmcelhaney/bizallele/blob/main/src/lit/fdl-field.ts): `src/lit/fdl-field.ts`
- [Form adapter](https://github.com/pmcelhaney/bizallele/blob/main/src/lit/form-element.ts): `src/lit/form-element.ts`
- [Address control](https://github.com/pmcelhaney/bizallele/blob/main/src/lit/fdl-address.ts): `src/lit/fdl-address.ts`
- [Table element](https://github.com/pmcelhaney/bizallele/blob/main/src/lit/fdl-table.ts): `src/lit/fdl-table.ts`

### Schema adapters

- [OpenAPI adapter](https://github.com/pmcelhaney/bizallele/blob/main/src/openapi.ts): `src/openapi.ts`
- [Prisma adapter](https://github.com/pmcelhaney/bizallele/blob/main/src/prisma.ts): `src/prisma.ts`
- [Zod adapter](https://github.com/pmcelhaney/bizallele/blob/main/src/zod.ts): `src/zod.ts`

### Other components

- **Application**
- **Backend validation**

## Connections

- Application → Public API: imports (evidence: `src/index.js`)
- Application → Field definitions: composes (evidence: `README.md`)
- Public API → Field behavior: exports (evidence: `src/index.js`)
- Public API → Built-in fields: exports (evidence: `src/index.js`)
- Field definitions → Field behavior: finalizes (evidence: `src/field-type-builder.ts`)
- Built-in fields → Field definitions: builds (evidence: `src/primitives.js`)
- Application → Record: binds values (evidence: `README.md`)
- Record → Field behavior: resolves rules (evidence: `src/record.js`)
- Record → Field access: creates accessors (evidence: `src/record.js`)
- Application → Recordset: manages records (evidence: `README.md`)
- Recordset → Record: creates (evidence: `src/recordset.js`)
- Recordset → Table columns: creates (evidence: `src/recordset.js`)
- Recordset → Observable: uses updates (evidence: `src/recordset.js`)
- Recordset → Recordset events: dispatches events (evidence: `src/recordset.js`)
- Application → Record element: groups controls (evidence: `README.md`)
- Record element → Record binding: binds record (evidence: `src/lit/fdl-record.ts`)
- Field control → Record binding: requests record (evidence: `src/lit/record-context.ts`)
- Field control → Form adapter: extends (evidence: `src/lit/fdl-field.ts`)
- Address control → Field control: uses control (evidence: `src/lit/fdl-address.ts`)
- Application → Table element: renders table (evidence: `README.md`)
- Table element → Recordset: uses collection (evidence: `src/lit/fdl-table.ts`)
- Backend validation → Field definitions: reuses rules (evidence: `README.md`)
- Field definitions → OpenAPI adapter: supports schema (evidence: `src/openapi.ts`)
- Field definitions → Prisma adapter: supports mapping
- Field definitions → Zod adapter: supports schema
