Advanced Features
Schema metadata
const schema = new SchemaBuilder()
.$id("https://example.com/schemas/user.json")
.$schema("https://json-schema.org/draft/2020-12/schema")
.title("User Schema")
.description("Represents a user in the system")
.object()
.properties({
id: (s) => s.integer(),
})
.build();Custom keywords
Add any custom keyword with .option().
const schema = new SchemaBuilder()
.object()
.properties({
status: (s) => s.string(),
})
.option("x-custom-validator", "myValidator")
.option("x-internal", true)
.build();
// Result includes: "x-custom-validator": "myValidator"$data references
Enable runtime data references.
const schema = new SchemaBuilder()
.object()
.properties({
minValue: (s) => s.number(),
maxValue: (s) => s.number(),
currentValue: (s) =>
s
.number()
.minimum({ $data: "1/minValue" })
.maximum({ $data: "1/maxValue" }),
})
.build();
// currentValue validated against runtime min/max valuesMultiple schema IDs
const schema = new SchemaBuilder()
.$id("https://example.com/base")
.$defs({
subSchema: (s) =>
s
.$id("sub-schema.json") // relative ID
.object()
.properties({
value: (s) => s.string(),
}),
})
.build();
// Resolves to: https://example.com/sub-schema.jsonLast updated on