synesia-data-schema
v0.0.9
Published
Synesia data schema utilities: types, validation, and JSON Schema conversion
Maintainers
Readme
synesia-data-schema
Synesia data schema toolkit: define your data once, validate it, generate defaults, and convert to/from JSON Schema.
Why synesia-data-schema?
- Single source of truth: strong types for your schema, shared across apps.
- Built-in validation:
validateDatawith precise messages and error paths. - Smart defaults:
generateDefaultDatausing enum, formats, min/max, etc. - JSON Schema interop: bidirectional conversion
toJSONSchema/fromJSONSchema. - TypeScript native: autocomplete and type safety.
DataSchema is a simplified, opinionated adaptation of JSON Schema tailored to Synesia’s needs. It keeps the essentials (types, enum, formats, min/max/step, objects/arrays) for clear, robust application use, while remaining convertible to/from JSON Schema when needed.
Installation
pnpm add synesia-data-schemaQuick Start
import { validateData, generateDefaultData } from "synesia-data-schema";
import { DataSchema } from "synesia-data-schema";
const userSchema: DataSchema = {
id: "user",
name: "User",
type: "object",
required: true,
schema: [
{
id: "email",
name: "email",
type: "text",
required: true,
format: "email",
},
{ id: "age", name: "age", type: "number", required: false, min: 0 },
{
id: "roles",
name: "roles",
type: "array",
required: false,
childSchema: { id: "role", name: "role", type: "text", required: true },
},
],
};
const defaults = generateDefaultData(userSchema, true);
const result = validateData({ email: "bad", age: -1 }, userSchema);JSON Schema conversion
import { toJSONSchema, fromJSONSchema } from "synesia-data-schema";
const jsonSchema = toJSONSchema({
type: "object",
properties: {
title: { type: "string", format: "email" },
count: { type: "number", minimum: 0 },
},
required: ["title"],
});const backToJsonSchema = fromJSONSchema({
id: "root",
name: "root",
type: "object",
schema: [
{
id: "title",
name: "title",
type: "text",
required: true,
format: "email",
},
{ id: "count", name: "count", type: "number", required: false, min: 0 },
],
});API
generateDefaultData(schema, includeOptional?) => unknown- Generates default values based on
defaultValue,enum,format,min/max/step.
- Generates default values based on
validateData(data, schema, strict?) => { isValid: boolean; errors: { message: string; path: string[] }[] }- Recursively validates input and returns precise error paths.
- When
strict=true, every field must be present even ifrequired=false.
toJSONSchema(json, name?) => DataSchema- Converts a JSON Schema into a strongly typed
DataSchema.
- Converts a JSON Schema into a strongly typed
fromJSONSchema(schema, strict?) => any- Converts a
DataSchemato JSON Schema.strictforces all object keys to be required.
- Converts a
Supported formats
email, uuid, date, time, datetime (mapped to date-time in JSON Schema). Patterns are backed by TEXT_VALIDATION_REGEX and covered by tests.
Types
Exposed types: DataSchema, TextDataSchema, NumberDataSchema, BooleanDataSchema, ArrayDataSchema, ObjectDataSchema, EmptyDataSchema, and InputEnum<T>.
Tests & Quality
pnpm run test
pnpm run test:coverageHigh coverage (~95%) with unit tests covering validation, default generation, and conversions.
Contributing
- Fork, create a feature branch, open a PR with a clear description
- Keep strict TypeScript style and high coverage
License
MIT
