@istebit/easyforms-core
v1.0.7
Published
Headless SDK for EasyForms — types, API client, and validation
Readme
@istebit/easyforms-core
Headless JavaScript & TypeScript core engine for EasyForms. Provides full type definitions, API clients, form logic, conditional evaluation, response validation, and direct storage upload utilities.
Installation
# npm
npm install @istebit/easyforms-core
# pnpm
pnpm add @istebit/easyforms-core
# yarn
yarn add @istebit/easyforms-coreFeatures
- 🔒 Full TypeScript Type Definitions: Form, Question, Condition, Theme, Submission, and Responses.
- 🚀 Typed API Client (
EasyFormsClient): Fetch published forms, submit answers, upload files, and verify status. - ⚡ Client-side Logic & Validation: Built-in conditional branch evaluation (
evaluateConditions), answer validators (validateFormAnswers), and page partitioners (splitIntoPages). - 🌐 Zero React/DOM Dependencies: Usable in Node.js, Next.js API routes, Svelte, Vue, Angular, React Native, or Vanilla JS.
Quick Example (API Client)
import { EasyFormsClient } from "@istebit/easyforms-core";
const client = new EasyFormsClient({
endpoint: "https://your-easyforms-backend.com/api",
apiKey: "ef_live_optional_key",
});
// 1. Fetch form metadata and questions
const form = await client.getForm("6a6f3afb2cb2a05f24a4e754");
console.log("Form Title:", form.title);
// 2. Submit responses
const result = await client.submitForm("6a6f3afb2cb2a05f24a4e754", {
answers: [
{ questionId: "q1", value: "Alex Doe" },
{ questionId: "q2", value: ["Option A", "Option B"] },
],
respondent: {
name: "Alex Doe",
email: "[email protected]",
},
googleToken: "OPTIONAL_GOOGLE_GSI_JWT",
});
console.log("Submission ID:", result.id);Validation & Logic Helpers
import {
validateFormAnswers,
evaluateConditions,
splitIntoPages
} from "@istebit/easyforms-core";
// Validate mandatory fields and constraints before submitting
const validation = validateFormAnswers(form.questions, currentAnswers);
if (!validation.isValid) {
console.error("Errors:", validation.issues);
}
// Check if a question should be shown based on condition rules
const isVisible = evaluateConditions(question.conditions, question.logicOperator, currentAnswers);
// Split multi-page forms at section breaks
const pages = splitIntoPages(form.questions);License
MIT © ISTEBITS
