'use strict'; /** * optimize try catch * @param {Function} fn * @return {Object} * - {Error} error * - {Mix} value */ exports.try = function (fn) { var res = { error: undefined, value: undefined }; try { res.value = fn(); } catch (err) { res.error = err instanceof Error ? err : new Error(err); } return res; }; /** * @description Deal with typescript */ exports.UNSTABLE_METHOD = { try: exports.try, }; /** * avoid if (a && a.b && a.b.c) * @param {Object} obj * @param {...String} keys * @return {Object} */ exports.dig = function (obj) { if (!obj) { return; } if (arguments.length <= 1) { return obj; } var value = obj[arguments[1]]; for (var i = 2; i < arguments.length; i++) { if (!value) { break; } value = value[arguments[i]]; } return value; }; /** * optimize arguments to array * @param {Arguments} args * @return {Array} */ exports.argumentsToArray = function (args) { var res = new Array(args.length); for (var i = 0; i < args.length; i++) { res[i] = args[i]; } return res; };