UNPKG

ap-ssg

Version:

A fast, modular, SEO-optimized static site generator that minifies CSS, JS, and HTML for improved performance. It also supports JSON-LD, sitemap generation, and more, making it ideal for production-ready websites.

80 lines (71 loc) 2.73 kB
const Joi = require("joi"); const contactSchema = Joi.object({ "@context": Joi.string() .valid("https://schema.org") .default("https://schema.org"), "@type": Joi.string().valid("ContactPoint").default("ContactPoint"), telephone: Joi.string().required(), contactType: Joi.string().required(), availableLanguage: Joi.array().items(Joi.string()).required(), areaServed: Joi.array().items(Joi.string()).required(), }); const addressSchema = Joi.object({ "@context": Joi.string() .valid("https://schema.org") .default("https://schema.org"), "@type": Joi.string().valid("PostalAddress").default("PostalAddress"), addressLocality: Joi.string().optional(), postalCode: Joi.string().optional(), streetAddress: Joi.string().optional(), addressRegion: Joi.string().optional(), }); const personSchema = Joi.object({ "@context": Joi.string() .valid("https://schema.org") .default("https://schema.org"), "@type": Joi.string().valid("Person").default("Person"), address: addressSchema.optional(), email: Joi.string().email().optional(), gender: Joi.string().valid("Male", "Female", "Nonbinary", "Other").optional(), jobTitle: Joi.string().optional(), name: Joi.string().optional(), telephone: Joi.string().optional(), birthDate: Joi.string().isoDate().optional(), nationality: Joi.string().optional(), url: Joi.string().uri().optional().messages({ "string.uri": "The URL must be a valid web address.", }), children: Joi.array().items(Joi.link("#personSchema")).optional(), }).id("personSchema"); const organizationSchema = Joi.object({ "@context": Joi.string() .valid("https://schema.org") .default("https://schema.org"), "@type": Joi.string().valid("Organization").default("Organization"), name: Joi.string().optional(), email: Joi.string().email().optional(), url: Joi.string().uri().optional(), logo: Joi.string().uri().optional(), sameAs: Joi.array().items(Joi.string().uri()).optional(), foundingDate: Joi.string().isoDate().optional(), foundingLocation: Joi.string().optional(), address: addressSchema.optional(), contactPoint: Joi.array().items(contactSchema).optional(), alumni: Joi.array().items(personSchema).optional(), }); const websiteSchema = Joi.object({ "@context": Joi.string() .valid("https://schema.org") .default("https://schema.org"), "@type": Joi.string().valid("WebSite").default("WebSite"), url: Joi.string().uri().required(), name: Joi.string().required(), description: Joi.string().required(), }); module.exports = { contactSchema, addressSchema, organizationSchema, personSchema, websiteSchema, };