2
0
mirror of https://github.com/tenrok/vue-meta.git synced 2026-06-20 05:10:33 +03:00

fix: dont inline typeof definitions

This commit is contained in:
pimlie
2019-02-11 10:37:56 +01:00
parent b4feec0232
commit 5031acf0fa
9 changed files with 53 additions and 22 deletions
+4 -2
View File
@@ -1,6 +1,8 @@
import { isUndefined } from '../shared/typeof'
// fallback to timers if rAF not present
const stopUpdate = (typeof window !== 'undefined' ? window.cancelAnimationFrame : null) || clearTimeout
const startUpdate = (typeof window !== 'undefined' ? window.requestAnimationFrame : null) || (cb => setTimeout(cb, 0))
const stopUpdate = (!isUndefined(window) ? window.cancelAnimationFrame : null) || clearTimeout
const startUpdate = (!isUndefined(window) ? window.requestAnimationFrame : null) || (cb => setTimeout(cb, 0))
/**
* Performs a batched update. Uses requestAnimationFrame to prevent
+2 -1
View File
@@ -1,4 +1,5 @@
import getMetaInfo from '../shared/getMetaInfo'
import { isFunction } from '../shared/typeof'
import updateClientMetaInfo from './updateClientMetaInfo'
export default function _refresh(options = {}) {
@@ -18,7 +19,7 @@ export default function _refresh(options = {}) {
const tags = updateClientMetaInfo(options, metaInfo)
// emit "event" with new info
if (tags && typeof metaInfo.changed === 'function') {
if (tags && isFunction(metaInfo.changed)) {
metaInfo.changed.call(this, metaInfo, tags.addedTags, tags.removedTags)
}
+4 -2
View File
@@ -1,3 +1,5 @@
import { isUndefined } from '../../shared/typeof'
/**
* Updates meta tags inside <head> and <body> on the client. Borrowed from `react-helmet`:
* https://github.com/nfl/react-helmet/blob/004d448f8de5f823d10f838b02317521180f34da/src/Helmet.js#L195-L245
@@ -43,10 +45,10 @@ export default function updateTag({ attribute, tagIDKeyName } = {}, type, tags,
}
} else if ([tagIDKeyName, 'body'].includes(attr)) {
const _attr = `data-${attr}`
const value = (typeof tag[attr] === 'undefined') ? '' : tag[attr]
const value = isUndefined(tag[attr]) ? '' : tag[attr]
newElement.setAttribute(_attr, value)
} else {
const value = (typeof tag[attr] === 'undefined') ? '' : tag[attr]
const value = isUndefined(tag[attr]) ? '' : tag[attr]
newElement.setAttribute(attr, value)
}
}
+5 -3
View File
@@ -1,3 +1,5 @@
import { isUndefined } from '../../shared/typeof'
/**
* Generates tag attributes for use on the server.
*
@@ -15,9 +17,9 @@ export default function attributeGenerator({ attribute } = {}, type, data) {
if (data.hasOwnProperty(attr)) {
watchedAttrs.push(attr)
attributeStr += typeof data[attr] !== 'undefined'
? `${attr}="${data[attr]}"`
: attr
attributeStr += isUndefined(data[attr])
? attr
: `${attr}="${data[attr]}"`
attributeStr += ' '
}
+2 -1
View File
@@ -1,4 +1,5 @@
import { tagsWithoutEndTag, tagsWithInnerContent, tagAttributeAsInnerContent } from '../../shared/constants'
import { isUndefined } from '../../shared/typeof'
/**
* Generates meta, base, link, style, script, noscript tags for use on the server
@@ -33,7 +34,7 @@ export default function tagGenerator({ attribute, tagIDKeyName } = {}, type, tag
prefix = 'data-'
}
return typeof tag[attr] === 'undefined'
return isUndefined(tag[attr])
? `${attrsStr} ${prefix}${attr}`
: `${attrsStr} ${prefix}${attr}="${tag[attr]}"`
}, '')
+6 -5
View File
@@ -1,5 +1,6 @@
import deepmerge from 'deepmerge'
import uniqueId from 'lodash.uniqueid'
import { isUndefined, isFunction, isObject } from '../shared/typeof'
import uniqBy from './uniqBy'
/**
@@ -24,15 +25,15 @@ export default function getComponentOption({ component, deep, arrayMerge, keyNam
}
// only collect option data if it exists
if (typeof $options[keyName] !== 'undefined' && $options[keyName] !== null) {
if (!isUndefined($options[keyName]) && $options[keyName] !== null) {
let data = $options[keyName]
// if option is a function, replace it with it's result
if (typeof data === 'function') {
if (isFunction(data)) {
data = data.call(component)
}
if (typeof data === 'object') {
if (isObject(data)) {
// merge with existing options
result = deepmerge(result, data, { arrayMerge })
} else {
@@ -55,7 +56,7 @@ export default function getComponentOption({ component, deep, arrayMerge, keyNam
if (metaTemplateKeyName && result.hasOwnProperty('meta')) {
result.meta = Object.keys(result.meta).map((metaKey) => {
const metaObject = result.meta[metaKey]
if (!metaObject.hasOwnProperty(metaTemplateKeyName) || !metaObject.hasOwnProperty(contentKeyName) || typeof metaObject[metaTemplateKeyName] === 'undefined') {
if (!metaObject.hasOwnProperty(metaTemplateKeyName) || !metaObject.hasOwnProperty(contentKeyName) || isUndefined(metaObject[metaTemplateKeyName])) {
return result.meta[metaKey]
}
@@ -63,7 +64,7 @@ export default function getComponentOption({ component, deep, arrayMerge, keyNam
delete metaObject[metaTemplateKeyName]
if (template) {
metaObject.content = typeof template === 'function' ? template(metaObject.content) : template.replace(/%s/g, metaObject.content)
metaObject.content = isFunction(template) ? template(metaObject.content) : template.replace(/%s/g, metaObject.content)
}
return metaObject
+4 -3
View File
@@ -1,9 +1,10 @@
import deepmerge from 'deepmerge'
import isPlainObject from 'lodash.isplainobject'
import { isUndefined, isFunction, isString } from '../shared/typeof'
import isArray from './isArray'
import getComponentOption from './getComponentOption'
const escapeHTML = str => typeof window === 'undefined'
const escapeHTML = str => isUndefined(window)
// server-side escape sequence
? String(str)
.replace(/&/g, '&amp;')
@@ -20,7 +21,7 @@ const escapeHTML = str => typeof window === 'undefined'
.replace(/'/g, '\u0027')
const applyTemplate = (component, template, chunk) =>
typeof template === 'function' ? template.call(component, chunk) : template.replace(/%s/g, chunk)
isFunction(template) ? template.call(component, chunk) : template.replace(/%s/g, chunk)
/**
* Returns the correct meta info for the given component
@@ -137,7 +138,7 @@ export default function getMetaInfo({ keyName, tagIDKeyName, metaTemplateKeyName
}
if (!isDisabled) {
if (typeof val === 'string') {
if (isString(val)) {
escaped[key] = escapeHTML(val)
} else if (isPlainObject(val)) {
escaped[key] = escape(val)
+6 -5
View File
@@ -1,4 +1,5 @@
import batchUpdate from '../client/batchUpdate'
import { isUndefined, isFunction, isObject } from '../shared/typeof'
import $meta from './$meta'
import {
@@ -11,7 +12,7 @@ import {
} from './constants'
// automatic install
if (typeof window !== 'undefined' && typeof window.Vue !== 'undefined') {
if (!isUndefined(window) && !isUndefined(window.Vue)) {
Vue.use(VueMeta)
}
@@ -31,7 +32,7 @@ export default function VueMeta(Vue, options = {}) {
}
// combine options
options = typeof options === 'object' ? options : {}
options = isObject('object') ? options : {}
for (const key in defaultOptions) {
if (!options[key]) {
@@ -59,13 +60,13 @@ export default function VueMeta(Vue, options = {}) {
// Add a marker to know if it uses metaInfo
// _vnode is used to know that it's attached to a real component
// useful if we use some mixin to add some meta tags (like nuxt-i18n)
if (typeof this.$options[options.keyName] !== 'undefined' && this.$options[options.keyName] !== null) {
if (!isUndefined(this.$options[options.keyName]) && this.$options[options.keyName] !== null) {
this._hasMetaInfo = true
// coerce function-style metaInfo to a computed prop so we can observe
// it on creation
if (typeof this.$options[options.keyName] === 'function') {
if (typeof this.$options.computed === 'undefined') {
if (isFunction(this.$options[options.keyName])) {
if (isUndefined(this.$options.computed)) {
this.$options.computed = {}
}
this.$options.computed.$metaInfo = this.$options[options.keyName]
+20
View File
@@ -0,0 +1,20 @@
export function isType(arg, type) {
return typeof arg === type
}
export function isUndefined(arg) {
return isType(arg, 'undefined')
}
export function isObject(arg) {
return isType(arg, 'object')
}
export function isFunction(arg) {
return isType(arg, 'function')
}
export function isString(arg) {
return isType(arg, 'string')
}