Просмотр исходного кода

remove assignTo, use Object.assign instead

Adam Shaw 7 лет назад
Родитель
Сommit
2c79bd015e

+ 9 - 11
plugins/gcal/main.ts

@@ -1,5 +1,5 @@
 import * as request from 'superagent'
-import { registerEventSourceDef, refineProps, addDays, assignTo } from 'fullcalendar'
+import { registerEventSourceDef, refineProps, addDays } from 'fullcalendar'
 
 // TODO: expose somehow
 const API_BASE = 'https://www.googleapis.com/calendar/v3/calendars'
@@ -121,16 +121,14 @@ function buildRequestParams(range, apiKey: string, extraData, dateEnv) {
     endStr = addDays(range.end, 1).toISOString()
   }
 
-  params = assignTo(
-    extraData || {},
-    {
-      key: apiKey,
-      timeMin: startStr,
-      timeMax: endStr,
-      singleEvents: true,
-      maxResults: 9999
-    }
-  )
+  params = {
+    ...(extraData || {}),
+    key: apiKey,
+    timeMin: startStr,
+    timeMax: endStr,
+    singleEvents: true,
+    maxResults: 9999
+  }
 
   return params
 }

+ 4 - 5
plugins/luxon/main.ts

@@ -20,11 +20,10 @@ export function toDuration(duration: fc.Duration, calendar: fc.Calendar): Durati
     throw new Error('must supply a Calendar instance')
   }
 
-  return Duration.fromObject(
-    fc.assignTo({}, duration, {
-      locale: calendar.dateEnv.locale.codes[0]
-    })
-  )
+  return Duration.fromObject({
+    ...duration,
+    locale: calendar.dateEnv.locale.codes[0]
+  })
 }
 
 // for browser globals. TODO: better solution

+ 2 - 2
plugins/rrule/main.ts

@@ -1,5 +1,5 @@
 import { RRule, rrulestr } from 'rrule'
-import { registerRecurringType, ParsedRecurring, EventInput, refineProps, DateEnv, EventDef, DateRange, DateMarker, createDuration, assignTo } from 'fullcalendar'
+import { registerRecurringType, ParsedRecurring, EventInput, refineProps, DateEnv, EventDef, DateRange, DateMarker, createDuration } from 'fullcalendar'
 
 interface RRuleParsedRecurring extends ParsedRecurring {
   typeData: RRule
@@ -44,7 +44,7 @@ function parseRRule(input, allDayDefault: boolean | null, dateEnv: DateEnv) {
     }
 
   } else if (typeof input === 'object' && input) { // non-null object
-    let refined = assignTo({}, input) // copy
+    let refined = { ...input } // copy
     let allDay = allDayDefault
 
     if (typeof refined.dtstart === 'string') {

+ 13 - 14
src/Calendar.ts

@@ -15,7 +15,7 @@ import { Duration, createDuration } from './datelib/duration'
 import reduce from './reducers/main'
 import { parseDateSpan, DateSpanInput, DateSpan, buildDateSpanApi, DateSpanApi, buildDatePointApi, DatePointApi } from './structs/date-span'
 import { memoize, memoizeOutput } from './util/memoize'
-import { mapHash, assignTo, isPropsEqual } from './util/object'
+import { mapHash, isPropsEqual } from './util/object'
 import { DateRangeInput } from './datelib/date-range'
 import DateProfileGenerator from './DateProfileGenerator'
 import { EventSourceInput, parseEventSource, EventSourceHash } from './structs/event-source'
@@ -426,19 +426,18 @@ export default class Calendar {
       }, this.el)
     }
 
-    component.receiveProps(
-      assignTo({}, state, {
-        viewSpec,
-        dateProfile: state.dateProfile,
-        dateProfileGenerator: this.dateProfileGenerators[viewType],
-        eventStore: renderableEventStore,
-        eventUiBases,
-        dateSelection: state.dateSelection,
-        eventSelection: state.eventSelection,
-        eventDrag: state.eventDrag,
-        eventResize: state.eventResize
-      })
-    )
+    component.receiveProps({
+      ...state,
+      viewSpec,
+      dateProfile: state.dateProfile,
+      dateProfileGenerator: this.dateProfileGenerators[viewType],
+      eventStore: renderableEventStore,
+      eventUiBases,
+      dateSelection: state.dateSelection,
+      eventSelection: state.eventSelection,
+      eventDrag: state.eventDrag,
+      eventResize: state.eventResize
+    })
 
     if (savedScroll) {
       component.view.applyScroll(savedScroll)

+ 9 - 8
src/CalendarComponent.ts

@@ -4,8 +4,7 @@ import View from './View'
 import Toolbar from './Toolbar'
 import DateProfileGenerator, { DateProfile } from './DateProfileGenerator'
 import { prependToElement, createElement, removeElement, appendToElement, applyStyle } from './util/dom-manip'
-import { rangeContainsMarker, DateRange } from './datelib/date-range';
-import { assignTo } from './util/object';
+import { rangeContainsMarker, DateRange } from './datelib/date-range'
 import { EventStore } from './structs/event-store'
 import { EventUiHash } from './component/event-ui'
 import { BusinessHoursInput, parseBusinessHours } from './structs/business-hours'
@@ -134,9 +133,10 @@ export default class CalendarComponent extends Component<CalendarComponentProps>
         this.header = new Toolbar(this.context, 'fc-header-toolbar')
         prependToElement(this.el, this.header.el)
       }
-      this.header.receiveProps(
-        assignTo({ layout: headerLayout }, toolbarProps)
-      )
+      this.header.receiveProps({
+        layout: headerLayout,
+        ...toolbarProps
+      })
     } else if (this.header) {
       this.header.destroy()
       this.header = null
@@ -147,9 +147,10 @@ export default class CalendarComponent extends Component<CalendarComponentProps>
         this.footer = new Toolbar(this.context, 'fc-footer-toolbar')
         appendToElement(this.el, this.footer.el)
       }
-      this.footer.receiveProps(
-        assignTo({ layout: footerLayout }, toolbarProps)
-      )
+      this.footer.receiveProps({
+        layout: footerLayout,
+        ...toolbarProps
+      })
     } else if (this.footer) {
       this.footer.destroy()
       this.footer = null

+ 1 - 2
src/OptionsManager.ts

@@ -1,4 +1,3 @@
-import { assignTo } from './util/object'
 import { firstDefined } from './util/misc'
 import { globalDefaults, rtlDefaults, mergeOptions } from './options'
 import { getLocale } from './datelib/locale'
@@ -14,7 +13,7 @@ export default class OptionsManager {
 
 
   constructor(overrides) {
-    this.overrides = assignTo({}, overrides) // make a copy
+    this.overrides = { ...overrides } // make a copy
     this.dynamicOverrides = {}
     this.compute()
   }

+ 3 - 4
src/View.ts

@@ -1,4 +1,3 @@
-import { assignTo } from './util/object'
 import { parseFieldSpecs } from './util/misc'
 import DateProfileGenerator, { DateProfile } from './DateProfileGenerator'
 import { DateMarker, addMs } from './datelib/marker'
@@ -376,7 +375,7 @@ export default abstract class View extends DateComponent<ViewProps> {
   addScroll(scroll) {
     let queuedScroll = this.queuedScroll || (this.queuedScroll = {})
 
-    assignTo(queuedScroll, scroll)
+    Object.assign(queuedScroll, scroll)
   }
 
 
@@ -395,7 +394,7 @@ export default abstract class View extends DateComponent<ViewProps> {
     let scroll = {} as any
 
     if (this.props.dateProfile) { // dates rendered yet?
-      assignTo(scroll, this.queryDateScroll())
+      Object.assign(scroll, this.queryDateScroll())
     }
 
     return scroll
@@ -408,7 +407,7 @@ export default abstract class View extends DateComponent<ViewProps> {
       delete scroll.isDateInit
 
       if (this.props.dateProfile) { // dates rendered yet?
-        assignTo(scroll, this.computeInitialDateScroll())
+        Object.assign(scroll, this.computeInitialDateScroll())
       }
     }
 

+ 11 - 13
src/basic/DayGrid.ts

@@ -1,4 +1,3 @@
-import { assignTo } from '../util/object'
 import {
   createElement,
   insertAfterElement,
@@ -799,18 +798,17 @@ export default class DayGrid extends DateComponentProps<DayGridProps> {
       let slicedRange = intersectRanges(origRange, dayRange)
 
       if (slicedRange) {
-        newSegs.push(
-          assignTo({}, seg, {
-            eventRange: {
-              def: eventRange.def,
-              ui: assignTo({}, eventRange.ui, { durationEditable: false }), // hack to disable resizing
-              instance: eventRange.instance,
-              range: slicedRange
-            } as EventRenderRange,
-            isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(),
-            isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf()
-          })
-        )
+        newSegs.push({
+          ...seg,
+          eventRange: {
+            def: eventRange.def,
+            ui: { ...eventRange.ui, durationEditable: false }, // hack to disable resizing
+            instance: eventRange.instance,
+            range: slicedRange
+          } as EventRenderRange,
+          isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(),
+          isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf()
+        })
       }
     }
 

+ 4 - 6
src/component/Component.ts

@@ -2,7 +2,6 @@ import Calendar from '../Calendar'
 import View from '../View'
 import Theme from '../theme/Theme'
 import { DateEnv } from '../datelib/env'
-import { assignTo } from '../util/object'
 
 let guid = 0
 
@@ -48,11 +47,10 @@ export default class Component<PropsType> {
   }
 
   static addEqualityFuncs(newFuncs: EqualityFuncHash) {
-    this.prototype.equalityFuncs = assignTo(
-      {},
-      this.prototype.equalityFuncs,
-      newFuncs
-    )
+    this.prototype.equalityFuncs = {
+      ...this.prototype.equalityFuncs,
+      ...newFuncs
+    }
   }
 
   opt(name) {

+ 10 - 14
src/component/renderers/FgEventRenderer.ts

@@ -5,7 +5,6 @@ import { compareByFieldSpecs } from '../../util/misc'
 import { EventUi } from '../event-ui'
 import { EventRenderRange, filterSegsViaEls } from '../event-rendering'
 import { Seg } from '../DateComponent'
-import { assignTo } from '../../util/object'
 import { ComponentContext } from '../Component'
 
 
@@ -324,17 +323,14 @@ export function buildSegCompareObj(seg: Seg) {
   let start = range.start ? range.start.valueOf() : 0 // TODO: better support for open-range events
   let end = range.end ? range.end.valueOf() : 0 // "
 
-  return assignTo(
-    {},
-    eventDef.extendedProps,
-    eventDef,
-    {
-      id: eventDef.publicId,
-      start,
-      end,
-      duration: end - start,
-      allDay: Number(eventDef.allDay),
-      _seg: seg // for later retrieval
-    }
-  )
+  return {
+    ...eventDef.extendedProps,
+    ...eventDef,
+    id: eventDef.publicId,
+    start,
+    end,
+    duration: end - start,
+    allDay: Number(eventDef.allDay),
+    _seg: seg // for later retrieval
+  }
 }

+ 3 - 4
src/datelib/formatting-native.ts

@@ -1,4 +1,3 @@
-import { assignTo } from '../util/object'
 import { DateMarker, timeAsMs } from './marker'
 import { CalendarSystem } from './calendar-system'
 import { Locale } from './locale'
@@ -156,8 +155,8 @@ function buildNativeFormattingFunc(
   extendedSettings,
   context: DateFormattingContext
 ): (date: ZonedMarker) => string {
-  standardDateProps = assignTo({}, standardDateProps) // copy
-  extendedSettings = assignTo({}, extendedSettings) // copy
+  standardDateProps = { ...standardDateProps } // copy
+  extendedSettings = { ...extendedSettings } // copy
 
   sanitizeSettings(standardDateProps, extendedSettings)
 
@@ -167,7 +166,7 @@ function buildNativeFormattingFunc(
   let zeroFormat // needed?
 
   if (extendedSettings.omitZeroMinute) {
-    let zeroProps = assignTo({}, standardDateProps)
+    let zeroProps = { ...standardDateProps }
     delete zeroProps.minute // seconds and ms were already considered in sanitizeSettings
     zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps)
   }

+ 1 - 2
src/datelib/formatting.ts

@@ -5,7 +5,6 @@ import { Locale } from './locale'
 import { NativeFormatter } from './formatting-native'
 import { CmdFormatter, CmdFormatterFunc } from './formatting-cmd'
 import { FuncFormatter, FuncFormatterFunc } from './formatting-func'
-import { assignTo } from '../util/object'
 
 export interface ZonedMarker {
   marker: DateMarker,
@@ -55,7 +54,7 @@ export type FormatterInput = object | string | FuncFormatterFunc
 export function createFormatter(input: FormatterInput, defaultSeparator?: string): DateFormatter {
   if (typeof input === 'object' && input) { // non-null object
     if (typeof defaultSeparator === 'string') {
-      input = assignTo({ separator: defaultSeparator }, input)
+      input = { separator: defaultSeparator, ...input }
     }
     return new NativeFormatter(input)
 

+ 1 - 2
src/event-sources/json-feed-event-source.ts

@@ -1,5 +1,4 @@
 import * as request from 'superagent'
-import { assignTo } from '../util/object'
 import Calendar from '../Calendar'
 import { registerEventSourceDef } from '../structs/event-source'
 import { DateRange } from '../datelib/date-range'
@@ -100,7 +99,7 @@ function buildRequestParams(meta: JsonFeedMeta, range: DateRange, calendar: Cale
     customRequestParams = meta.extraData || {}
   }
 
-  assignTo(params, customRequestParams)
+  Object.assign(params, customRequestParams)
 
   params[startParam] = dateEnv.formatIso(range.start)
   params[endParam] = dateEnv.formatIso(range.end)

+ 1 - 1
src/exports.ts

@@ -43,7 +43,7 @@ export {
   intersectRects
 } from './util/geom'
 
-export { assignTo, isPropsEqual, mapHash, filterHash } from './util/object'
+export { isPropsEqual, mapHash, filterHash } from './util/object'
 
 export {
   findElements,

+ 4 - 5
src/formatting-api.ts

@@ -1,5 +1,4 @@
 import { DateEnv, DateInput } from './datelib/env'
-import { assignTo } from './util/object'
 import { createFormatter } from './datelib/formatting'
 import { getLocale } from './datelib/locale'
 import { globalDefaults } from './options'
@@ -43,13 +42,13 @@ function buildDateEnv(settings) {
   let locale = settings.locale || globalDefaults.locale
 
   // ensure required settings
-  settings = assignTo({
+  settings = {
     timeZone: globalDefaults.timeZone,
     timeZoneImpl: globalDefaults.timeZoneImpl,
-    calendarSystem: 'gregory'
-  }, settings, {
+    calendarSystem: 'gregory',
+    ...settings,
     locale: getLocale(locale)
-  })
+  }
 
   return new DateEnv(settings)
 }

+ 1 - 2
src/plugin-system.ts

@@ -5,7 +5,6 @@ import { eventDefMutationApplier } from './structs/event-mutation'
 import { DatePointTransform, DateSpanTransform } from './Calendar'
 import { dateSelectionJoinTransformer } from './interactions/DateSelecting'
 import { ViewConfigInputHash } from './structs/view-config'
-import { assignTo } from './util/object'
 import { ViewSpecTransformer, ViewSpec } from './structs/view-spec'
 import { ViewProps } from './View'
 import { CalendarComponentProps } from './CalendarComponent'
@@ -137,7 +136,7 @@ function combineHooks(hooks0: PluginHooks, hooks1: PluginHooks): PluginHooks {
     dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),
     datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),
     dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),
-    viewConfigs: assignTo({}, hooks0.viewConfigs, hooks1.viewConfigs),
+    viewConfigs: { ...hooks0.viewConfigs, ...hooks1.viewConfigs },
     viewSpecTransformers: hooks0.viewSpecTransformers.concat(hooks1.viewSpecTransformers),
     viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
     isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,

+ 11 - 8
src/reducers/eventSources.ts

@@ -1,6 +1,6 @@
 import { EventSource, EventSourceHash, getEventSourceDef, doesSourceNeedRange } from '../structs/event-source'
 import Calendar from '../Calendar'
-import { arrayToHash, assignTo, filterHash } from '../util/object'
+import { arrayToHash, filterHash } from '../util/object'
 import { DateRange } from '../datelib/date-range'
 import { warn } from '../util/misc'
 import { DateProfile } from '../DateProfileGenerator'
@@ -62,7 +62,7 @@ function addSources(eventSourceHash: EventSourceHash, sources: EventSource[], fe
     hash = fetchDirtySources(hash, fetchRange, calendar)
   }
 
-  return assignTo({}, eventSourceHash, hash)
+  return { ...eventSourceHash, ...hash }
 }
 
 
@@ -175,10 +175,11 @@ function fetchSource(eventSource: EventSource, fetchRange: DateRange, calendar:
     }
   )
 
-  return assignTo({}, eventSource, {
+  return {
+    ...eventSource,
     isFetching: true,
     latestFetchId: fetchId
-  })
+  }
 }
 
 
@@ -189,12 +190,14 @@ function receiveResponse(sourceHash: EventSourceHash, sourceId: string, fetchId:
     eventSource && // not already removed
     fetchId === eventSource.latestFetchId
   ) {
-    return assignTo({}, sourceHash, {
-      [sourceId]: assignTo({}, eventSource, {
+    return {
+      ...sourceHash,
+      [sourceId]: {
+        ...eventSource,
         isFetching: false,
         fetchRange
-      })
-    })
+      }
+    }
   }
 
   return sourceHash

+ 4 - 3
src/reducers/eventStore.ts

@@ -1,5 +1,5 @@
 import Calendar from '../Calendar'
-import { filterHash, assignTo, mapHash } from '../util/object'
+import { filterHash, mapHash } from '../util/object'
 import { EventMutation, applyMutationToEventStore } from '../structs/event-mutation'
 import { EventDef, EventInstance, EventInput, EventInstanceHash } from '../structs/event'
 import {
@@ -141,14 +141,15 @@ function rezoneDates(eventStore: EventStore, oldDateEnv: DateEnv, newDateEnv: Da
     if (def.allDay || def.recurringDef) {
       return instance // isn't dependent on timezone
     } else {
-      return assignTo({}, instance, {
+      return {
+        ...instance,
         range: {
           start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),
           end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo))
         },
         forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo,
         forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo
-      })
+      }
     }
   })
 

+ 3 - 3
src/reducers/main.ts

@@ -6,7 +6,6 @@ import { DateSpan } from '../structs/date-span'
 import { EventInteractionState } from '../interactions/event-interaction-state'
 import { CalendarState, Action } from './types'
 import { EventSourceHash } from '../structs/event-source'
-import { assignTo } from '../util/object'
 
 export default function(state: CalendarState, action: Action, calendar: Calendar): CalendarState {
 
@@ -14,7 +13,8 @@ export default function(state: CalendarState, action: Action, calendar: Calendar
   let dateProfile = reduceDateProfile(state.dateProfile, action, viewType, calendar)
   let eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendar)
 
-  let nextState = assignTo({}, state, {
+  let nextState = {
+    ...state,
     viewType,
     dateProfile,
     eventSources,
@@ -25,7 +25,7 @@ export default function(state: CalendarState, action: Action, calendar: Calendar
     eventResize: reduceEventResize(state.eventResize, action, eventSources, calendar),
     eventSourceLoadingLevel: computeLoadingLevel(eventSources),
     loadingLevel: computeLoadingLevel(eventSources)
-  })
+  }
 
   for (let reducerFunc of calendar.pluginSystem.hooks.reducers) {
     nextState = reducerFunc(nextState, action, calendar)

+ 4 - 4
src/structs/business-hours.ts

@@ -1,5 +1,5 @@
 import Calendar from '../Calendar'
-import { assignTo } from '../util/object'
+
 import { EventInput } from './event'
 import { EventStore, parseEvents } from './event-store'
 
@@ -30,8 +30,8 @@ export function parseBusinessHours(input: BusinessHoursInput, calendar: Calendar
   )
 }
 
-function refineInputs(input: BusinessHoursInput): EventInput[] {
-  let rawDefs: EventInput[]
+function refineInputs(input: BusinessHoursInput) {
+  let rawDefs
 
   if (input === true) {
     rawDefs = [ {} ] // will get DEF_DEFAULTS verbatim
@@ -47,7 +47,7 @@ function refineInputs(input: BusinessHoursInput): EventInput[] {
   }
 
   rawDefs = rawDefs.map(function(rawDef) {
-    return assignTo({}, DEF_DEFAULTS, rawDef)
+    return { ...DEF_DEFAULTS, ...rawDef }
   })
 
   return rawDefs

+ 5 - 6
src/structs/event-mutation.ts

@@ -1,7 +1,6 @@
 import { Duration, asRoughMs, durationsEqual } from '../datelib/duration'
 import { EventStore, createEmptyEventStore } from './event-store'
 import { EventDef, EventInstance } from './event'
-import { assignTo } from '../util/object'
 import Calendar from '../Calendar'
 import { computeAlignedDayRange } from '../util/misc'
 import { startOfDay } from '../datelib/marker'
@@ -44,7 +43,7 @@ export type eventDefMutationApplier = (eventDef: EventDef, mutation: EventMutati
 
 
 function applyMutationToEventDef(eventDef: EventDef, eventConfig: EventUi, mutation: EventMutation, appliers: eventDefMutationApplier[], calendar: Calendar): EventDef {
-  let copy = assignTo({}, eventDef)
+  let copy = { ...eventDef }
   let standardProps = mutation.standardProps || {}
 
   // if hasEnd has not been specified, guess a good value based on deltas.
@@ -60,12 +59,12 @@ function applyMutationToEventDef(eventDef: EventDef, eventConfig: EventUi, mutat
     standardProps.hasEnd = true
   }
 
-  assignTo(copy, standardProps, {
-    ui: assignTo({}, copy.ui, standardProps.ui) // the only prop we want to recursively overlay
+  Object.assign(copy, standardProps, {
+    ui: { ...copy.ui, ...standardProps.ui } // the only prop we want to recursively overlay
   })
 
   if (mutation.extendedProps) {
-    copy.extendedProps = assignTo({}, copy.extendedProps, mutation.extendedProps)
+    copy.extendedProps = { ...copy.extendedProps, ...mutation.extendedProps }
   }
 
   for (let applier of appliers) {
@@ -100,7 +99,7 @@ function applyMutationToEventInstance(
   let dateEnv = calendar.dateEnv
   let forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true
   let clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false
-  let copy = assignTo({}, eventInstance) as EventInstance
+  let copy = { ...eventInstance } as EventInstance
 
   if (forceAllDay) {
     copy.range = computeAlignedDayRange(copy.range)

+ 3 - 3
src/structs/event-store.ts

@@ -11,7 +11,7 @@ import {
 import { EventSource } from './event-source'
 import { expandRecurringRanges } from './recurring-event'
 import Calendar from '../Calendar'
-import { assignTo, filterHash } from '../util/object'
+import { filterHash } from '../util/object'
 import { DateRange } from '../datelib/date-range'
 
 /*
@@ -161,8 +161,8 @@ export function createEmptyEventStore(): EventStore {
 
 export function mergeEventStores(store0: EventStore, store1: EventStore): EventStore {
   return {
-    defs: assignTo({}, store0.defs, store1.defs),
-    instances: assignTo({}, store0.instances, store1.instances)
+    defs: { ...store0.defs, ...store1.defs },
+    instances: { ...store0.instances, ...store1.instances }
   }
 }
 

+ 1 - 2
src/structs/event.ts

@@ -1,7 +1,6 @@
 import { refineProps } from '../util/misc'
 import { DateInput } from '../datelib/env'
 import Calendar from '../Calendar'
-import { assignTo } from '../util/object'
 import { DateRange } from '../datelib/date-range'
 import { startOfDay } from '../datelib/marker'
 import { parseRecurring } from './recurring-event'
@@ -141,7 +140,7 @@ export function parseEventDef(raw: EventNonDateInput, sourceId: string, allDay:
     leftovers = newLeftovers
   }
 
-  def.extendedProps = assignTo(leftovers, def.extendedProps || {})
+  def.extendedProps = Object.assign(leftovers, def.extendedProps || {})
 
   // help out EventApi from having user modify props
   Object.freeze(def.ui.classNames)

+ 8 - 11
src/structs/view-def.ts

@@ -1,4 +1,3 @@
-import { assignTo } from '../util/object'
 import { ViewClass, ViewConfigHash } from './view-config'
 
 /*
@@ -74,16 +73,14 @@ function buildViewDef(viewType: string, hash: ViewDefHash, defaultConfigs: ViewC
   return {
     type: viewType,
     class: theClass,
-    defaults: assignTo(
-      {},
-      superDef ? superDef.defaults : {},
-      defaultConfig ? defaultConfig.options : {}
-    ),
-    overrides: assignTo(
-      {},
-      superDef ? superDef.overrides : {},
-      overrideConfig ? overrideConfig.options : {}
-    )
+    defaults: {
+      ...(superDef ? superDef.defaults : {}),
+      ...(defaultConfig ? defaultConfig.options : {})
+    },
+    overrides: {
+      ...(superDef ? superDef.overrides : {}),
+      ...(overrideConfig ? overrideConfig.options : {})
+    }
   }
 }
 

+ 11 - 12
src/structs/view-spec.ts

@@ -1,7 +1,7 @@
 import { ViewDef, compileViewDefs } from './view-def'
 import { Duration, createDuration, greatestDurationDenominator, getWeeksFromInput } from '../datelib/duration'
 import OptionsManager from '../OptionsManager'
-import { assignTo, mapHash } from '../util/object'
+import { mapHash } from '../util/object'
 import { globalDefaults } from '../options'
 import { ViewConfigInputHash, parseViewConfigs, ViewConfigHash, ViewClass } from './view-config'
 
@@ -98,17 +98,16 @@ function buildViewSpec(viewDef: ViewDef, overrideConfigs: ViewConfigHash, option
     durationUnit,
     singleUnit,
 
-    options: assignTo(
-      {},
-      globalDefaults,
-      viewDef.defaults,
-      optionsManager.dirDefaults,
-      optionsManager.localeDefaults,
-      optionsManager.overrides,
-      singleUnitOverrides,
-      viewDef.overrides,
-      optionsManager.dynamicOverrides
-    ),
+    options: {
+      ...globalDefaults,
+      ...viewDef.defaults,
+      ...optionsManager.dirDefaults,
+      ...optionsManager.localeDefaults,
+      ...optionsManager.overrides,
+      ...singleUnitOverrides,
+      ...viewDef.overrides,
+      ...optionsManager.dynamicOverrides
+    },
 
     buttonTextOverride:
       queryButtonText(optionsManager.dynamicOverrides) ||

+ 1 - 3
src/theme/Theme.ts

@@ -1,5 +1,3 @@
-import { assignTo } from '../util/object'
-
 
 export default class Theme {
 
@@ -34,7 +32,7 @@ export default class Theme {
     let buttonName
 
     if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object
-      iconClassesCopy = assignTo({}, this.iconClasses)
+      iconClassesCopy = { ...this.iconClasses }
 
       for (buttonName in iconOverrideHash) {
         iconClassesCopy[buttonName] = this.applyIconOverridePrefix(

+ 0 - 33
src/util/object.ts

@@ -1,37 +1,4 @@
 
-const hasOwnPropMethod = {}.hasOwnProperty
-
-
-export function assignTo(target, ...sources) {
-  for (let i = 0; i < sources.length; i++) {
-    let source = sources[i]
-    if (source != null) { // skip over if undefined or null
-      for (let key in source) {
-        // avoid bugs when hasOwnProperty is shadowed
-        if (hasOwnProp(source, key)) {
-          target[key] = source[key]
-        }
-      }
-    }
-  }
-  return target
-}
-
-
-export function copyOwnProps(src, dest) {
-  for (let name in src) {
-    if (hasOwnProp(src, name)) {
-      dest[name] = src[name]
-    }
-  }
-}
-
-
-function hasOwnProp(obj, name) {
-  return hasOwnPropMethod.call(obj, name)
-}
-
-
 // Merges an array of objects into a single object.
 // The second argument allows for an array of property names who's object values will be merged together.
 export function mergeProps(propObjs, complexProps?): any {