UNPKG

js-gravatar

Version:

A vanilla JS library to get a user's gravatar and if it doesn't exist provides one different from gravatar default

43 lines (31 loc) 1.33 kB
import md5 from 'md5'; import { Types, Errors } from './types'; export function validateOptions(options) { const { email, md5Hash, size, defaultImage } = options; if (!email && !md5Hash) throw new Error(Errors.MISSING_ARGUMENT_ERROR('email or md5Hash')); if (size && Number.isNaN(Number(size))) throw new Error(Errors.INVALID_ARGUMENT_TYPE(size, 'number')); if (size > 2048 || size < 1) throw new Error(Errors.IMAGE_SIZE_ERROR); if (defaultImage && !Types.GRAVATAR_DEFAULTS.includes(defaultImage)) throw new Error(Errors.DEFAULT_IMAGE_ERROR); } function getMd5Hash(options) { const { email, md5Hash } = options; if (md5Hash) return md5Hash; return md5(email.trim().toLowerCase()); } export function buildQueryStringFromOptions(options) { const { size, defaultImage } = options; let queryString = '?'; if (size) queryString += `s=${size}&`; if (defaultImage) queryString += `d=${defaultImage}&`; if (queryString.endsWith('&') || queryString.endsWith('?')) { return queryString.substr(0, queryString.length - 1); } return queryString; } function jsGravatar(options) { validateOptions(options); const emailHash = getMd5Hash(options); const queryString = buildQueryStringFromOptions(options); return `${Types.BASE_URL}/${emailHash}${queryString}`; } export default jsGravatar;