requirejs.onError = function handleRequireError(eo) { 'use strict'; if (OK.fn.isDebug()) { console.error(eo); } /** * @param {Error} err */ function parse(err) { var /** @type {string} */ s = '\n', /** @type {RegExp} */ re = /(^|@)\S+\:\d+/, /* FIREFOX/SAFARI */ /** @type {RegExp} */ alt = /\s+at .*(\S+\:\d+|\(native\))/, /* CHROME/IE */ /** @type {string} */ res; if (err.stack.match(alt)) { /* Use alt */ re = alt; } res = err.stack .split(s) .filter(function (line) { return !!line.match(re); }) .join(s); return err + s + res; } var /** @type {Object} */ err = eo.originalError || eo, /** @type {Object} */ r = requirejs.s.contexts._, /** @type {string} */ clob = '', /** @type {string} */ info = '', /** @type {object} */ context = '', /** @type {string[]} */ deps = []; if (eo.requireMap) { context = r.registry[eo.requireMap.id]; deps = context.depMaps.map(function (item) { return item.id; }); info = (context.factory.name || 'anonymous') + ',[' + deps + ']'; /* Function code */ clob = 'Executing ' + context.factory + '\n'; } else { info = eo.requireType + ',[' + eo.requireModules + ']'; } if (err.stack) { clob += parse(err); } else { clob += err + '\n@' + info; } OK.logger.clob('rjs', clob, info, err.name); if (Array.isArray(eo.requireModules)) { eo.requireModules.forEach(function (path) { if (path.indexOf('/res/react') === 0) { sendReactError(path); } }); } function sendReactError(reactPath) { var clob = 'message=' + err.message + '\n' + 'requireType=' + eo.requireType + '\n' + 'requireModules=' + eo.requireModules.toString() + '\n' + 'stack=' + err.stack; var tagName = reactPath.split('.')[0].split('_')[1]; if (!tagName) { tagName = reactPath; } OK.logger.clob('react-error', clob, tagName, 'react-module-error'); } };