Skip to Content
@jetio/schema-builder docs are live 🎉
ExamplesE-Commerce Product

E-Commerce Product

A full product schema combining $defs, references, arrays, and if/then/elseIf conditionals that add category-specific requirements.

const productSchema = new SchemaBuilder() .$id("https://example.com/schemas/product.json") .$defs({ price: (s) => s .object() .properties({ amount: (s) => s.number().minimum(0), currency: (s) => s.string().pattern("^[A-Z]{3}$"), }) .required(["amount", "currency"]), dimensions: (s) => s .object() .properties({ length: (s) => s.number().minimum(0), width: (s) => s.number().minimum(0), height: (s) => s.number().minimum(0), unit: (s) => s.string().enum(["cm", "in", "m"]), }) .required(["length", "width", "height", "unit"]), }) .object() .properties({ id: (s) => s.string().pattern("^PROD-\\d{6}$"), name: (s) => s.string().minLength(3).maxLength(100), description: (s) => s.string().maxLength(1000), category: (s) => s.string().enum(["electronics", "clothing", "food", "books"]), price: (s) => s.$ref("#/$defs/price"), stock: (s) => s.integer().minimum(0), dimensions: (s) => s.$ref("#/$defs/dimensions"), tags: (s) => s .array() .items((s) => s.string()) .minItems(1) .maxItems(10) .uniqueItems(true), availability: (s) => s.string().enum(["in_stock", "out_of_stock", "preorder"]), }) .required(["id", "name", "category", "price", "stock", "availability"]) .if((s) => s.object().properties({ category: (s) => s.const("electronics") }), ) .then((s) => s .object() .properties({ warranty: (s) => s .object() .properties({ months: (s) => s.integer().minimum(0), type: (s) => s.string().enum(["limited", "full"]), }) .required(["months", "type"]), }) .required(["warranty"]), ) .elseIf((s) => s.object().properties({ category: (s) => s.const("clothing") }), ) .then((s) => s .object() .properties({ sizes: (s) => s .array() .items((s) => s.string().enum(["XS", "S", "M", "L", "XL", "XXL"])) .minItems(1), colors: (s) => s .array() .items((s) => s.string()) .minItems(1), }) .required(["sizes", "colors"]), ) .build();
Last updated on