JSON Schema Support

Complete mapping of JSON Schema Draft-07 features to Luq plugins

Quick Setup

Full Feature Import

import { Builder } from "@maroonedog/luq";
import { jsonSchemaFullFeaturePlugin } from "@maroonedog/luq/plugins/jsonSchemaFullFeature";

const validator = Builder()
  .use(jsonSchemaFullFeaturePlugin)
  .fromJsonSchema(schema)
  .build();

Selective Import

import { Builder } from "@maroonedog/luq";
import { jsonSchemaPlugin } from "@maroonedog/luq/plugins/jsonSchema";
import { requiredPlugin } from "@maroonedog/luq/plugins/required";
import { stringMinPlugin } from "@maroonedog/luq/plugins/stringMin";
import { stringEmailPlugin } from "@maroonedog/luq/plugins/stringEmail";

const validator = Builder()
  .use(jsonSchemaPlugin)
  .use(requiredPlugin)
  .use(stringMinPlugin)
  .use(stringEmailPlugin)
  .fromJsonSchema(schema)
  .build();

Complete Feature Mapping

Core Types

JSON Schema Feature Luq Plugin Description
type: "string" Built-in String type validation
type: "number" Built-in Number type validation
type: "integer" numberIntegerPlugin Integer validation
type: "boolean" Built-in Boolean type validation
type: "null" nullablePlugin Null type validation
type: "array" Built-in Array type validation
type: "object" Built-in Object type validation

String Constraints

JSON Schema Feature Luq Plugin Description
minLength stringMinPlugin Minimum string length
maxLength stringMaxPlugin Maximum string length
pattern stringPatternPlugin Regex pattern matching

String Formats

JSON Schema Feature Luq Plugin Description
format: "email" stringEmailPlugin Email validation
format: "url"/"uri" stringUrlPlugin URL/URI validation
format: "uuid" uuidPlugin UUID validation
format: "ipv4" stringIpv4Plugin IPv4 address validation
format: "ipv6" stringIpv6Plugin IPv6 address validation
format: "hostname" stringHostnamePlugin Hostname validation
format: "date-time" stringDatetimePlugin ISO 8601 date-time with timezone support
format: "date" stringDatePlugin ISO 8601 date (YYYY-MM-DD)
format: "time" stringTimePlugin Time format (HH:MM:SS)
format: "duration" stringDurationPlugin ISO 8601 duration
format: "json-pointer" stringJsonPointerPlugin JSON Pointer (RFC 6901)
format: "relative-json-pointer" stringRelativeJsonPointerPlugin Relative JSON Pointer
format: "iri" stringIriPlugin IRI (RFC 3987)
format: "iri-reference" stringIriReferencePlugin IRI reference
format: "uri-template" stringUriTemplatePlugin URI Template (RFC 6570)

Number Constraints

JSON Schema Feature Luq Plugin Description
minimum numberMinPlugin Minimum value (inclusive)
maximum numberMaxPlugin Maximum value (inclusive)
exclusiveMinimum numberMinPlugin Minimum value (exclusive)
exclusiveMaximum numberMaxPlugin Maximum value (exclusive)
multipleOf numberMultipleOfPlugin Multiple of a number

Array Constraints

JSON Schema Feature Luq Plugin Description
minItems arrayMinLengthPlugin Minimum array length
maxItems arrayMaxLengthPlugin Maximum array length
uniqueItems arrayUniquePlugin Unique array items
contains arrayContainsPlugin Array contains schema
items (tuple) tupleBuilderPlugin Tuple validation

Object Constraints

JSON Schema Feature Luq Plugin Description
minProperties objectMinPropertiesPlugin Minimum properties count
maxProperties objectMaxPropertiesPlugin Maximum properties count
required requiredPlugin Required properties
additionalProperties objectAdditionalPropertiesPlugin Additional properties validation
properties Built-in Object properties definition
patternProperties objectPatternPropertiesPlugin Pattern-based properties
propertyNames objectPropertyNamesPlugin Property name validation
dependentRequired objectDependentRequiredPlugin Conditional required fields
dependentSchemas objectDependentSchemasPlugin Conditional schemas

Value Constraints

JSON Schema Feature Luq Plugin Description
enum oneOfPlugin Enumeration values
const literalPlugin Constant value

Schema Composition

JSON Schema Feature Luq Plugin Description
allOf customPlugin All schemas must match
anyOf customPlugin Any schema must match
oneOf oneOfPlugin + customPlugin Exactly one schema must match
not customPlugin Schema must not match

Conditional Validation

JSON Schema Feature Luq Plugin Description
if/then/else requiredIfPlugin + customPlugin Conditional validation

References

JSON Schema Feature Luq Plugin Description
$ref Built-in (jsonSchemaPlugin) Schema references
definitions/$defs Built-in (jsonSchemaPlugin) Schema definitions

Content Validation

JSON Schema Feature Luq Plugin Description
contentEncoding stringContentEncodingPlugin Content encoding validation
contentMediaType stringContentMediaTypePlugin Media type validation

Access Control

JSON Schema Feature Luq Plugin Description
readOnly readOnlyWriteOnlyPlugin Read-only field validation
writeOnly readOnlyWriteOnlyPlugin Write-only field validation

Complete Example

JSON Schema to Luq Conversion

// JSON Schema Definition
const userSchema = {
  type: "object",
  properties: {
    name: {
      type: "string",
      minLength: 3,
      maxLength: 50
    },
    email: {
      type: "string",
      format: "email"
    },
    age: {
      type: "number",
      minimum: 18,
      maximum: 120
    },
    roles: {
      type: "array",
      items: {
        type: "string",
        enum: ["admin", "user", "guest"]
      },
      minItems: 1,
      uniqueItems: true
    }
  },
  required: ["name", "email"],
  additionalProperties: false
};

// Luq Validator
const validator = Builder()
  .use(jsonSchemaFullFeaturePlugin)
  .fromJsonSchema(userSchema)
  .build();

// Validation
const result = validator.validate({
  name: "John Doe",
  email: "john@example.com",
  age: 25,
  roles: ["admin"]
});

if (result.isValid()) {
  console.log("Valid data:", result.unwrap());
} else {
  console.log("Validation errors:", result.errors);
}