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);
}