2
0
mirror of https://github.com/tenrok/vue-meta.git synced 2026-06-22 11:40:34 +03:00

fix: dont use object.assign/spread

so we dont need a polyfill
This commit is contained in:
pimlie
2019-03-11 17:15:25 +01:00
committed by Alexander Lichter
parent 93f021b757
commit d717dbf4e1
7 changed files with 26 additions and 18 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
import { version } from '../package.json' import { version } from '../package.json'
import createMixin from './shared/mixin' import createMixin from './shared/mixin'
import setOptions from './shared/options' import { setOptions } from './shared/options'
import { isUndefined } from './utils/is-type' import { isUndefined } from './utils/is-type'
import $meta from './client/$meta' import $meta from './client/$meta'
import { hasMetaInfo } from './shared/meta-helpers' import { hasMetaInfo } from './shared/meta-helpers'
+2 -1
View File
@@ -1,3 +1,4 @@
import { getOptions } from '../shared/options'
import { pause, resume } from '../shared/pausing' import { pause, resume } from '../shared/pausing'
import refresh from './refresh' import refresh from './refresh'
@@ -12,7 +13,7 @@ export default function _$meta(options = {}) {
*/ */
return function $meta() { return function $meta() {
return { return {
getOptions: () => Object.freeze({ ...options }), getOptions: () => getOptions(options),
refresh: _refresh.bind(this), refresh: _refresh.bind(this),
inject, inject,
pause: pause.bind(this), pause: pause.bind(this),
+1 -1
View File
@@ -1,6 +1,6 @@
import { version } from '../package.json' import { version } from '../package.json'
import createMixin from './shared/mixin' import createMixin from './shared/mixin'
import setOptions from './shared/options' import { setOptions } from './shared/options'
import $meta from './server/$meta' import $meta from './server/$meta'
import { hasMetaInfo } from './shared/meta-helpers' import { hasMetaInfo } from './shared/meta-helpers'
+3 -2
View File
@@ -1,5 +1,6 @@
import refresh from '../client/refresh' import { getOptions } from '../shared/options'
import { pause, resume } from '../shared/pausing' import { pause, resume } from '../shared/pausing'
import refresh from '../client/refresh'
import inject from './inject' import inject from './inject'
export default function _$meta(options = {}) { export default function _$meta(options = {}) {
@@ -13,7 +14,7 @@ export default function _$meta(options = {}) {
*/ */
return function $meta() { return function $meta() {
return { return {
getOptions: () => Object.freeze({ ...options }), getOptions: () => getOptions(options),
refresh: _refresh.bind(this), refresh: _refresh.bind(this),
inject: _inject.bind(this), inject: _inject.bind(this),
pause: pause.bind(this), pause: pause.bind(this),
+5 -7
View File
@@ -1,4 +1,5 @@
import { isFunction, isObject } from '../utils/is-type' import { isFunction, isObject } from '../utils/is-type'
import { findIndex } from '../utils/array'
import { merge } from './merge' import { merge } from './merge'
import { applyTemplate } from './template' import { applyTemplate } from './template'
import { inMetaInfoBranch } from './meta-helpers' import { inMetaInfoBranch } from './meta-helpers'
@@ -17,8 +18,8 @@ import { inMetaInfoBranch } from './meta-helpers'
* @param {Object} [result={}] - result so far * @param {Object} [result={}] - result so far
* @return {Object} result - final aggregated result * @return {Object} result - final aggregated result
*/ */
export default function getComponentOption(options = {}, result = {}) { export default function getComponentOption(options = {}, component, result = {}) {
const { component, keyName, metaTemplateKeyName, tagIDKeyName } = options const { keyName, metaTemplateKeyName, tagIDKeyName } = options
const { $options, $children } = component const { $options, $children } = component
if (component._inactive) { if (component._inactive) {
@@ -52,10 +53,7 @@ export default function getComponentOption(options = {}, result = {}) {
return return
} }
result = getComponentOption({ result = getComponentOption(options, childComponent, result)
...options,
component: childComponent
}, result)
}) })
} }
@@ -69,7 +67,7 @@ export default function getComponentOption(options = {}, result = {}) {
// keep meta item if it doesnt has a vmid // keep meta item if it doesnt has a vmid
!metaItem.hasOwnProperty(tagIDKeyName) || !metaItem.hasOwnProperty(tagIDKeyName) ||
// or if it's the first item in the array with this vmid // or if it's the first item in the array with this vmid
index === arr.findIndex(item => item[tagIDKeyName] === metaItem[tagIDKeyName]) index === findIndex(arr, item => item[tagIDKeyName] === metaItem[tagIDKeyName])
) )
}) })
} }
+9 -1
View File
@@ -1,7 +1,7 @@
import { isObject } from '../utils/is-type' import { isObject } from '../utils/is-type'
import { defaultOptions } from './constants' import { defaultOptions } from './constants'
export default function setOptions(options) { export function setOptions(options) {
// combine options // combine options
options = isObject(options) ? options : {} options = isObject(options) ? options : {}
@@ -13,3 +13,11 @@ export default function setOptions(options) {
return options return options
} }
export function getOptions(options) {
const optionsCopy = {}
for (const key in options) {
optionsCopy[key] = options[key]
}
return optionsCopy
}
+5 -5
View File
@@ -9,13 +9,13 @@ describe('getComponentOption', () => {
test('returns an empty object when no matching options are found', () => { test('returns an empty object when no matching options are found', () => {
const component = new Vue() const component = new Vue()
const mergedOption = getComponentOption({ component, keyName: 'noop' }) const mergedOption = getComponentOption({ keyName: 'noop' }, component)
expect(mergedOption).toEqual({}) expect(mergedOption).toEqual({})
}) })
test('fetches the given option from the given component', () => { test('fetches the given option from the given component', () => {
const component = new Vue({ someOption: { foo: 'bar' } }) const component = new Vue({ someOption: { foo: 'bar' } })
const mergedOption = getComponentOption({ component, keyName: 'someOption' }) const mergedOption = getComponentOption({ keyName: 'someOption' }, component)
expect(mergedOption.foo).toBeDefined() expect(mergedOption.foo).toBeDefined()
expect(mergedOption.foo).toEqual('bar') expect(mergedOption.foo).toEqual('bar')
}) })
@@ -27,7 +27,7 @@ describe('getComponentOption', () => {
return { opt: this.$options.name } return { opt: this.$options.name }
} }
}) })
const mergedOption = getComponentOption({ component, keyName: 'someFunc' }) const mergedOption = getComponentOption({ keyName: 'someFunc' }, component)
// TODO: Should this be foobar or Foobar // TODO: Should this be foobar or Foobar
expect(mergedOption.opt).toBeDefined() expect(mergedOption.opt).toBeDefined()
expect(mergedOption.opt).toEqual('Foobar') expect(mergedOption.opt).toEqual('Foobar')
@@ -44,7 +44,7 @@ describe('getComponentOption', () => {
const wrapper = mount(component, { localVue }) const wrapper = mount(component, { localVue })
const mergedOption = getComponentOption({ component: wrapper.vm, keyName: 'foo' }) const mergedOption = getComponentOption({ keyName: 'foo' }, wrapper.vm)
expect(mergedOption).toEqual({ bar: 'baz', fizz: 'buzz' }) expect(mergedOption).toEqual({ bar: 'baz', fizz: 'buzz' })
}) })
@@ -111,7 +111,7 @@ describe('getComponentOption', () => {
const wrapper = mount(component, { localVue }) const wrapper = mount(component, { localVue })
const mergedOption = getComponentOption({ component: wrapper.vm, keyName: 'foo' }) const mergedOption = getComponentOption({ keyName: 'foo' }, wrapper.vm)
expect(mergedOption).toEqual({ bar: 'baz' }) expect(mergedOption).toEqual({ bar: 'baz' })
expect(wrapper.vm.$children[0]._vueMeta).toBe(true) expect(wrapper.vm.$children[0]._vueMeta).toBe(true)