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