export function isDefined (d) { return d !== null && typeof d !== 'undefined' } export function isNotDefined (d) { return !isDefined(d) } export const isArray = Array.isArray export function isObject (d) { return isDefined(d) && typeof d === 'object' && !Array.isArray(d) } export function isEmpty (obj) { for (var key in obj) { if (obj.hasOwnProperty(key)) return false } return true } export function isString (value) { return typeof value === 'string' || value instanceof String } export function validObject (object, ...keys) { return keys.reduce((a, b) => (a || {})[b], object) !== undefined } export function mergeDeep (target, ...sources) { if (!sources.length) return target const source = sources.shift() if (isObject(target) && isObject(source)) { for (const key in source) { if (isObject(source[key])) { if (!target[key]) Object.assign(target, { [key]: {} }) mergeDeep(target[key], source[key]) } else { Object.assign(target, { [key]: source[key] }) } } } return mergeDeep(target, ...sources) } export function deleteCookie (c) { document.cookie.split(';').forEach(function (c) { document.cookie = c .replace(/^ +/, '') .replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/') }) } export function slugify (string) { const a = 'àáäâãåèéëêìíïîòóöôùúüûñçßÿœæŕśńṕẃǵǹḿǘẍźḧ·/_,:;' const b = 'aaaaaaeeeeiiiioooouuuuncsyoarsnpwgnmuxzh------' const p = new RegExp(a.split('').join('|'), 'g') return string .toString() .toLowerCase() .replace(/\s+/g, '-') // Replace spaces with - .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters .replace(/&/g, '-and-') // Replace & with 'and' .replace(/[^\w-]+/g, '') // Remove all non-word characters .replace(/--+/g, '-') // Replace multiple - with single - .replace(/^-+/, '') // Trim - from start of text .replace(/-+$/, '') // Trim - from end of text }