or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

core-validation.mderror-handling.mdindex.mdjtd-schemas.mdkeywords-vocabularies.mdschema-2019.mdschema-2020.mdschema-management.mdstandalone-generation.mdtypescript-integration.md
tile.json

core-validation.mddocs/

Core Schema Validation

Primary JSON Schema validation functionality supporting Draft 7 schemas with discriminator support. The main Ajv class provides comprehensive validation, compilation, and error reporting capabilities.

Capabilities

Ajv Constructor

Creates a new Ajv validator instance with configurable options for validation behavior, error reporting, and performance optimization.

/**
 * Creates a new Ajv validator instance
 * @param options - Configuration options for the validator
 */
constructor(options?: Options);

interface Options extends CurrentOptions, DeprecatedOptions {}

interface CurrentOptions {
  // Strict mode options
  strict?: boolean | "log";
  strictSchema?: boolean | "log"; 
  strictNumbers?: boolean | "log";
  strictTypes?: boolean | "log";
  strictTuples?: boolean | "log";
  strictRequired?: boolean | "log";
  allowMatchingProperties?: boolean;
  allowUnionTypes?: boolean;
  validateFormats?: boolean;
  
  // Validation and reporting options
  $data?: boolean;
  allErrors?: boolean;
  verbose?: boolean;
  $comment?: boolean | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => void);
  formats?: {[Name in string]?: Format};
  loadSchema?: (uri: string) => Promise<AnySchemaObject>;
  
  // Options to modify validated data
  useDefaults?: boolean | "empty";
  coerceTypes?: boolean | "array";
  removeAdditional?: boolean | "all" | "failing";
  
  // Advanced options
  next?: boolean;
  unevaluated?: boolean;
  dynamicRef?: boolean;
  schemaId?: "id" | "$id";
  addUsedSchema?: boolean;
  validateSchema?: boolean | "log";
  meta?: boolean | SchemaObject;
  defaultMeta?: string | SchemaObject;
  inlineRefs?: boolean | number;
  passContext?: boolean;
  loopRequired?: number;
  ownProperties?: boolean;
  multipleOfPrecision?: number;
  discriminator?: boolean;
  unicodeRegExp?: boolean;
  int32range?: boolean;
}

Usage Examples:

import Ajv from "ajv";

// Basic validator
const ajv = new Ajv();

// Strict mode enabled
const strictAjv = new Ajv({ strict: true });

// All errors collection
const verboseAjv = new Ajv({ allErrors: true, verbose: true });

// With data coercion
const coercingAjv = new Ajv({ coerceTypes: true });

Validate Method

Primary validation method that validates data against a schema and returns a boolean result with optional error information.

/**
 * Validates data against a schema
 * @param schema - JSON Schema or schema reference
 * @param data - Data to validate
 * @returns true if valid, false otherwise. Sets errors property on instance
 */
validate(schema: Schema | string, data: unknown): boolean;
validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>;
validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T;
validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T;
validate<T>(schema: AsyncSchema, data: unknown): Promise<T>;
validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>;

Usage Examples:

import Ajv from "ajv";

const ajv = new Ajv();

// Inline schema validation
const schema = {
  type: "object",
  properties: {
    name: { type: "string" },
    age: { type: "number", minimum: 0 }
  },
  required: ["name"]
};

const data = { name: "John", age: 30 };
const valid = ajv.validate(schema, data);

if (!valid) {
  console.log("Validation errors:", ajv.errors);
}

// Pre-compiled validation function
const validateUser = ajv.compile(schema);
const isValid = ajv.validate(validateUser, data);

Compile Method

Compiles a schema into a validation function for improved performance when validating multiple data instances against the same schema.

/**
 * Compiles a schema into a validation function
 * @param schema - JSON Schema to compile
 * @param meta - Optional flag for meta-schema compilation
 * @returns Compiled validation function with type guards
 */
compile<T = unknown>(schema: Schema | JSONSchemaType<T>, meta?: boolean): ValidateFunction<T>;
compile<T = unknown>(schema: JTDSchemaType<T>, meta?: boolean): ValidateFunction<T>;
compile<T = unknown>(schema: AsyncSchema, meta?: boolean): AsyncValidateFunction<T>;
compile<T = unknown>(schema: AnySchema, meta?: boolean): AnyValidateFunction<T>;

interface ValidateFunction<T = unknown> {
  (data: unknown): data is T;
  errors?: ErrorObject[] | null;
  evaluated?: Evaluated;
  schema: AnySchema;
  schemaEnv: SchemaEnv;
  source?: SourceCode;
}

Usage Examples:

import Ajv from "ajv";

const ajv = new Ajv();

// Compile schema once
const schema = {
  type: "object",
  properties: {
    email: { type: "string", format: "email" },
    age: { type: "integer", minimum: 18 }
  },
  required: ["email", "age"]
};

const validate = ajv.compile(schema);

// Reuse compiled function multiple times
const users = [
  { email: "user1@example.com", age: 25 },
  { email: "user2@example.com", age: 30 },
  { email: "invalid-email", age: 16 }
];

users.forEach((user, index) => {
  const valid = validate(user);
  console.log(`User ${index + 1} valid:`, valid);
  if (!valid) {
    console.log("Errors:", validate.errors);
  }
});

Compile Async Method

Compiles schemas with asynchronous validation, supporting remote references and async format validators.

/**
 * Compiles schema with async validation support
 * @param schema - JSON Schema (may contain $async: true or remote $refs)
 * @param meta - Optional flag for meta-schema compilation
 * @returns Promise resolving to async validation function
 */
compileAsync<T = unknown>(schema: SchemaObject | JSONSchemaType<T>, meta?: boolean): Promise<ValidateFunction<T>>;
compileAsync<T = unknown>(schema: JTDSchemaType<T>, meta?: boolean): Promise<ValidateFunction<T>>;
compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>;
compileAsync<T = unknown>(schema: AnySchemaObject, meta?: boolean): Promise<AnyValidateFunction<T>>;

interface AsyncValidateFunction<T = unknown> extends ValidateFunction<T> {
  (data: unknown): Promise<T>;
  $async: true;
}

interface AsyncSchema extends SchemaObject {
  $async: true;
}

Usage Examples:

import Ajv from "ajv";

const ajv = new Ajv({ loadSchema: loadRemoteSchema });

// Schema with remote references
const schema = {
  $async: true,
  type: "object",
  properties: {
    user: { $ref: "https://example.com/user-schema.json" },
    metadata: { type: "object" }
  }
};

async function validateAsyncData() {
  try {
    const validate = await ajv.compileAsync(schema);
    
    const data = {
      user: { name: "Alice", email: "alice@example.com" },
      metadata: { source: "api" }
    };
    
    const result = await validate(data);
    console.log("Validated data:", result);
  } catch (error) {
    console.log("Validation failed:", error);
  }
}

// Custom remote schema loader
async function loadRemoteSchema(uri: string): Promise<SchemaObject> {
  const response = await fetch(uri);
  return response.json();
}

Error Text Formatting

Formats validation errors as human-readable text with customizable options for error presentation.

/**
 * Formats validation errors as human-readable text
 * @param errors - Array of error objects (defaults to ajv.errors)
 * @param options - Formatting options
 * @returns Formatted error string
 */
errorsText(errors?: ErrorObject[] | null, options?: ErrorsTextOptions): string;

interface ErrorsTextOptions {
  separator?: string;
  dataVar?: string;
}

Usage Examples:

import Ajv from "ajv";

const ajv = new Ajv({ allErrors: true });

const schema = {
  type: "object",
  properties: {
    name: { type: "string", minLength: 2 },
    email: { type: "string", format: "email" },
    age: { type: "number", minimum: 0 }
  },
  required: ["name", "email"]
};

const data = { name: "A", age: -5 };
const valid = ajv.validate(schema, data);

if (!valid) {
  // Default formatting
  console.log(ajv.errorsText());
  
  // Custom formatting
  console.log(ajv.errorsText(ajv.errors, {
    separator: "\n",
    dataVar: "user"
  }));
}

Validation Function Properties

Every compiled validation function includes additional properties for error inspection and schema access:

interface ValidateFunction<T = unknown> {
  /** The validation function that returns type guard */
  (data: unknown): data is T;
  
  /** Array of validation errors (null if valid) */
  errors?: ErrorObject[] | null;
  
  /** The original schema used for compilation */
  schema: AnySchema;
  
  /** Schema compilation environment with metadata */
  schemaEnv: SchemaEnv;
  
  /** Generated source code (if enabled in options) */
  sourcecode?: SourceCode;
}

Type Safety Features

The core validation system provides full TypeScript integration:

  • Type Guards: Validation functions act as TypeScript type guards
  • Generic Support: Compile-time type inference for validated data
  • Schema Types: JSONSchemaType<T> for compile-time schema validation
  • Error Types: Strongly typed error objects for better debugging