UNPKG

sanity-advanced-validators

Version:
96 lines (90 loc) 3.65 kB
// src/referencedDocumentRequires.ts var referencedDocumentRequires = (documentType, field, message = `{documentType}\u2019s {field} must be filled.`) => async (value, context) => { if (!(value == null ? void 0 : value._ref)) { return true; } const client = context.getClient({ apiVersion: "2022-08-12" }); const data = await client.fetch(` *[_type == "${documentType}" && _id == "${value._ref}"]{ ${field} }[0] `); if (!data[field]) { return message.replace("{documentType}", documentType).replace("{field}", field); } return true; }; // src/fileExtension.ts import { getExtension } from "@sanity/asset-utils"; var fileExtension = (validFileExtension, message = `Image must be of type {validFileExtension}`) => (value) => { if (!value || !value.asset) { return true; } const validExtensions = typeof validFileExtension === "string" ? [validFileExtension] : validFileExtension; const filetype = getExtension(value.asset._ref); if (!validExtensions.includes(filetype)) { return message.replace("{validFileExtension}", validExtensions.join(", or ")); } return true; }; // src/minDimensions.ts import { getImageDimensions } from "@sanity/asset-utils"; var minDimensions = ({ x, y }, message) => (value) => { if (!value || !value.asset) { return true; } const { width, height } = getImageDimensions(value.asset._ref); if (!!x && width < x) { return message ? message.replace("{x}", x.toString()).replace("{y}", !y ? "(any)" : y.toString()) : `Image must be at least ${x} pixels wide.`; } if (!!y && height < y) { return message ? message.replace("{x}", !x ? "(any)" : x.toString()).replace("{y}", y.toString()) : `Image must be at least ${y} pixels tall.`; } return true; }; // src/maxDepth.ts var maxDepth = (maxDepth2, nestedValueName, message = `Error: You can only nest {nestedValueName} {maxDepth} levels deep.`) => (_, context) => { let regex = new RegExp(String.raw`topLevelItems|${nestedValueName}`); const paths = context.path.filter((e) => typeof e === "string" && e.match(regex)); if (paths.length > maxDepth2) { return message.replace("{nestedValueName}", nestedValueName).replace("{maxDepth}", maxDepth2.toString()); } return true; }; // src/requiredIfSlugEq.ts var requiredIfSlugEq = (slug, slugKey = "slug", message = `This is a required field.`) => (value, context) => { var _a, _b; const slugs = typeof slug === "string" ? [slug] : slug; const currentSlugValue = (_b = (_a = context.parent) == null ? void 0 : _a[slugKey]) == null ? void 0 : _b.current; if (!value && !!currentSlugValue && slugs.includes(currentSlugValue)) { return message.replace("{slugKey}", slugKey).replace("{slug}", slugs.join(", or ")); } return true; }; // src/requiredIfSiblingEq.ts var requiredIfSiblingEq = (key, comparison, message = "Required if {key} equals {value}.") => (value, context) => { var _a; const sibling = getSibling(key, context); const comparisons = Array.isArray(comparison) ? comparison : [comparison]; if (!value && comparisons.includes(sibling)) { return message.replace("{key}", key).replace("{value}", (_a = comparisons.join(", or ")) != null ? _a : "null"); } return true; }; // src/lib/getSibling.ts import { get } from "lodash-es"; var getSibling = (key, context) => { const pathToParentObject = context.path.slice(0, -1); const sibling = get(context.document, [...pathToParentObject, key]); return sibling; }; export { fileExtension, getSibling, maxDepth, minDimensions, referencedDocumentRequires, requiredIfSiblingEq, requiredIfSlugEq }; //# sourceMappingURL=index.js.map