UNPKG

@sprucelabs/schema

Version:

Static and dynamic binding plus runtime validation and transformation to ensure your app is sound. 🤓

51 lines (50 loc) • 1.94 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const AbstractField_1 = __importDefault(require("./AbstractField")); const ImageField_types_1 = require("./ImageField.types"); class ImageField extends AbstractField_1.default { static generateTemplateDetails(options) { const { definition, importAs, language } = options; const { isArray } = definition; const arrayNotation = isArray ? '[]' : ''; return { valueType: language === 'go' ? `${arrayNotation}${importAs}.ImageFieldValue` : `${importAs}.ImageFieldValue${arrayNotation}`, }; } validate(value) { const errors = super.validate(value); if (value && errors.length === 0 && !value.base64) { let sizes = this.getRequiredSizes(); const missing = []; for (const size of sizes) { const key = `${size}Uri`; //@ts-ignore if (value && !value[key]) { missing.push(key); } } if (missing.length > 0) { errors.push({ code: 'INVALID_PARAMETER', name: this.name, friendlyMessage: `You need to supply the remaining sizes to upload an image to ${this.label ?? this.name}: '${missing.join("', '")}'`, }); } } return errors; } getRequiredSizes() { let sizes = this.definition.options?.requiredSizes ?? []; if (sizes[0] === '*') { sizes = ImageField_types_1.requiredImageSizes.filter((s) => s !== '*'); } return sizes; } } ImageField.description = 'Images of various sizes!'; exports.default = ImageField;