@esheet/core
v0.0.1
Published
Pure TypeScript foundation for eSheet — types, state management, validation, and conditional logic. **React-free** by design; framework wrappers live in consumer packages.
Readme
@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/coreKey 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 registrationBuilding
Run nx build @esheet/core to build the library.
Running unit tests
Run nx test @esheet/core to execute the unit tests via Vitest.
