Source: anime/utils.js

'use strict';

/**
 * Utilty functions for animation module.
 * @module engine/anime/utils
 */

/**
 * Get the real target and its property key from
 * a root context and full path of the target property.
 * @param  {object} context  Root context that contains the target
 * @param  {string} fullPath Full path of the target property
 * @return {array}           [target, key] or undefined if no property matches
 */
module.exports.getTargetAndKey = function(context, fullPath) {
  let path = fullPath.split('.');
  // Path is just the property key
  if (path.length === 1) {
    return [context, fullPath];
  }
  else {
    let target = context;
    for (let i = 0; i < path.length - 1; i++) {
      if (target.hasOwnProperty(path[i])) {
        target = target[path[i]];
      }
      else {
        console.log(`[Warning]: anim target "${path[i]}" not found`);
        return undefined;
      }
    }

    if (!target.hasOwnProperty(path[path.length - 1])) {
      console.log(`[Warning]: anim target "${path[path.length - 1]}" not found`);
      return undefined;
    }
    return [target, path[path.length - 1]];
  }
};