Skip to content

Latest commit

 

History

History

README.md

@esheet/core

Pure TypeScript foundation for eSheet — types, state management, validation, and conditional logic. React-free by design; framework wrappers live in consumer packages.

Features

  • Type system with Zod schemas for full runtime validation
  • Vanilla Zustand stores (FormStore, UIStore) — no React dependency
  • Conditional logic engine (comparison operators + safe expression parser)
  • Normalization/hydration for flat ↔ nested field conversion
  • Field type registry for built-in and custom field types
  • Collision-free ID generators

Installation

npm install @esheet/core

Key Exports

Types & Schemas

import type {
  FieldDefinition,
  FormDefinition,
  FormResponse,
  FieldType,
  FieldOption,
  ConditionalRule,
} from '@esheet/core';

import { formDefinitionSchema, fieldDefinitionSchema } from '@esheet/core';

State Management

import { createFormStore, createUIStore } from '@esheet/core';

const form = createFormStore();
form.getState().loadDefinition(mySchema);
form.getState().setResponse('fieldId', 'value');

const responses = form.getState().responses; // Record<string, unknown>

Selectors

const field = form.getState().getField('fieldId');
const isVisible = form.getState().isVisible('fieldId');
const isEnabled = form.getState().isEnabled('fieldId');
const isRequired = form.getState().isRequired('fieldId');
const errors = form.getState().getFieldErrors('fieldId');

Builder Actions

form.getState().addField('text', { parentId: 'sectionId' });
form.getState().updateField('fieldId', { question: 'New text' });
form.getState().removeField('fieldId');
form.getState().moveField('fieldId', 2, 'newParentId');

Field Registry

import { registerFieldType, getFieldTypeMeta } from '@esheet/core';

registerFieldType({
  type: 'custom',
  label: 'Custom Field',
  category: 'basic',
  defaultProps: { question: 'New custom field' },
});

Architecture

@esheet/core
├── types/       # FieldDefinition, FormDefinition, etc.
├── schemas/     # Zod validation schemas
├── stores/      # FormStore (data + actions), UIStore (builder UI state)
├── logic/       # Condition evaluation, expression parser
├── functions/   # normalize, hydrate, ID generators
└── registry/    # Field type metadata registration

Building

Run nx build @esheet/core to build the library.

Running unit tests

Run nx test @esheet/core to execute the unit tests via Vitest.