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
JavaScript
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,
};