UNPKG

lmd

Version:

LMD: Lazy Module Declaration

1,398 lines (1,272 loc) 91.8 kB
// This file was automatically generated from "index.lmd.json" (function (global, main, modules, modules_options, options) { var initialized_modules = {}, global_eval = function (code) { return global.Function('return ' + code)(); }, global_noop = function () {}, global_document = global.document, local_undefined, /** * @param {String} moduleName module name or path to file * @param {*} module module content * * @returns {*} */ register_module = function (moduleName, module) { lmd_trigger('lmd-register:before-register', moduleName, module); // Predefine in case of recursive require var output = {'exports': {}}; initialized_modules[moduleName] = 1; modules[moduleName] = output.exports; if (!module) { // if undefined - try to pick up module from globals (like jQuery) // or load modules from nodejs/worker environment module = lmd_trigger('js:request-environment-module', moduleName, module)[1] || global[moduleName]; } else if (typeof module === 'function') { // Ex-Lazy LMD module or unpacked module ("pack": false) var module_require = lmd_trigger('lmd-register:decorate-require', moduleName, lmd_require)[1]; // Make sure that sandboxed modules cant require if (modules_options[moduleName] && modules_options[moduleName].sandbox && typeof module_require === 'function') { module_require = local_undefined; } module = module(module_require, output.exports, output) || output.exports; } module = lmd_trigger('lmd-register:after-register', moduleName, module)[1]; return modules[moduleName] = module; }, /** * List of All lmd Events * * @important Do not rename it! */ lmd_events = {}, /** * LMD event trigger function * * @important Do not rename it! */ lmd_trigger = function (event, data, data2, data3) { var list = lmd_events[event], result; if (list) { for (var i = 0, c = list.length; i < c; i++) { result = list[i](data, data2, data3) || result; if (result) { // enable decoration data = result[0] || data; data2 = result[1] || data2; data3 = result[2] || data3; } } } return result || [data, data2, data3]; }, /** * LMD event register function * * @important Do not rename it! */ lmd_on = function (event, callback) { if (!lmd_events[event]) { lmd_events[event] = []; } lmd_events[event].push(callback); }, /** * @param {String} moduleName module name or path to file * * @returns {*} */ lmd_require = function (moduleName) { var module = modules[moduleName]; var replacement = lmd_trigger('*:rewrite-shortcut', moduleName, module); if (replacement) { moduleName = replacement[0]; module = replacement[1]; } lmd_trigger('*:before-check', moduleName, module); // Already inited - return as is if (initialized_modules[moduleName] && module) { return module; } lmd_trigger('*:before-init', moduleName, module); // Lazy LMD module not a string if (typeof module === 'string' && module.indexOf('(function(') === 0) { module = global_eval(module); } return register_module(moduleName, module); }, output = {'exports': {}}, /** * Sandbox object for plugins * * @important Do not rename it! */ sandbox = { 'global': global, 'modules': modules, 'modules_options': modules_options, 'options': options, 'eval': global_eval, 'register': register_module, 'require': lmd_require, 'initialized': initialized_modules, 'noop': global_noop, 'document': global_document, 'on': lmd_on, 'trigger': lmd_trigger, 'undefined': local_undefined }; for (var moduleName in modules) { // reset module init flag in case of overwriting initialized_modules[moduleName] = 0; } /** * @name sandbox */ (function (sb) { var domOnlyLoaders = { 'css': true, 'image': true }; var reEvalable = /(java|ecma)script|json/, reJson = /json/; /** * Load off-package LMD module * * @param {String|Array} moduleName same origin path to LMD module * @param {Function} [callback] callback(result) undefined on error others on success */ sb.on('*:preload', function (moduleName, callback, type) { var replacement = sb.trigger('*:request-off-package', moduleName, callback, type), // [[returnResult, moduleName, module, true], callback, type] returnResult = [replacement[0][0], callback, type]; if (replacement[0][3]) { // isReturnASAP return returnResult; } var module = replacement[0][2], XMLHttpRequestConstructor = sb.global.XMLHttpRequest || sb.global.ActiveXObject; callback = replacement[1]; moduleName = replacement[0][1]; if (!XMLHttpRequestConstructor) { sb.trigger('preload:require-environment-file', moduleName, module, callback); return returnResult; } // Optimized tiny ajax get // @see https://gist.github.com/1625623 var xhr = new XMLHttpRequestConstructor("Microsoft.XMLHTTP"); xhr.onreadystatechange = function () { if (xhr.readyState == 4) { // 3. Check for correct status 200 or 0 - OK? if (xhr.status < 201) { var contentType = xhr.getResponseHeader('content-type'); module = xhr.responseText; if (reEvalable.test(contentType)) { module = sb.trigger('*:wrap-module', moduleName, module, contentType)[1]; if (!reJson.test(contentType)) { module = sb.trigger('*:coverage-apply', moduleName, module)[1]; } sb.trigger('preload:before-callback', moduleName, module); module = sb.eval(module); } else { sb.trigger('preload:before-callback', moduleName, module); } if (type === 'preload') { // 4. Declare it sb.modules[moduleName] = module; // 5. Then callback it callback(moduleName); } else { // 4. Callback it callback(sb.register(moduleName, module)); } } else { sb.trigger('*:request-error', moduleName, module); callback(); } } }; xhr.open('get', moduleName); xhr.send(); return returnResult; }); /** * @event *:request-off-package * * @param {String} moduleName * @param {Function} callback * @param {String} type * * @retuns yes [asap, returnResult] */ sb.on('*:request-off-package', function (moduleName, callback, type) { var returnResult = sb.require; callback = callback || sb.noop; if (typeof moduleName !== "string") { callback = sb.trigger('*:request-parallel', moduleName, callback, sb.require[type])[1]; if (!callback) { return [[returnResult, moduleName, module, true], callback, type]; } } var module = sb.modules[moduleName]; var replacement = sb.trigger('*:rewrite-shortcut', moduleName, module); if (replacement) { moduleName = replacement[0]; module = replacement[1]; } sb.trigger('*:before-check', moduleName, module, type); // If module exists or its a node.js env if (module || (domOnlyLoaders[type] && !sb.document)) { callback(type === "preload" ? moduleName : sb.initialized[moduleName] ? module : sb.require(moduleName)); return [[returnResult, moduleName, module, true], callback, type]; } sb.trigger('*:before-init', moduleName, module); callback = sb.trigger('*:request-race', moduleName, callback)[1]; // if already called if (!callback) { return [[returnResult, moduleName, module, true], callback, type] } return [[returnResult, moduleName, module, false], callback, type]; }); }(sandbox)); /** * Async loader of css files * * Flag "css" * * This plugin provides require.css() function */ /** * @name sandbox */ (function (sb) { /** * Loads any CSS file * * Inspired by yepnope.css.js * * @see https://github.com/SlexAxton/yepnope.js/blob/master/plugins/yepnope.css.js * * @param {String|Array} moduleName path to css file * @param {Function} [callback] callback(result) undefined on error HTMLLinkElement on success */ sb.require.css = function (moduleName, callback) { var replacement = sb.trigger('*:request-off-package', moduleName, callback, 'css'), // [[returnResult, moduleName, module, true], callback, type] returnResult = replacement[0][0]; if (replacement[0][3]) { // isReturnASAP return returnResult; } var module = replacement[0][2], isNotLoaded = 1, head; callback = replacement[1]; moduleName = replacement[0][1]; // Create stylesheet link var link = sb.document.createElement("link"), id = +new sb.global.Date, onload = function (e) { if (isNotLoaded) { isNotLoaded = 0; // register or cleanup link.removeAttribute('id'); if (!e) { sb.trigger('*:request-error', moduleName, module); } callback(e ? sb.register(moduleName, link) : head.removeChild(link) && sb.undefined); // e === undefined if error } }; // Add attributes link.href = moduleName; link.rel = "stylesheet"; link.id = id; sb.global.setTimeout(onload, 3000, 0); head = sb.document.getElementsByTagName("head")[0]; head.insertBefore(link, head.firstChild); (function poll() { if (isNotLoaded) { var sheets = sb.document.styleSheets, j = 0, k = sheets.length; try { for (; j < k; j++) { if((sheets[j].ownerNode || sheets[j].owningElement).id == id && (sheets[j].cssRules || sheets[j].rules).length) { //#JSCOVERAGE_IF 0 return onload(1); //#JSCOVERAGE_ENDIF } } // if we get here, its not in document.styleSheets (we never saw the ID) throw 1; } catch(e) { // Keep polling sb.global.setTimeout(poll, 90); } } }()); return returnResult; }; }(sandbox)); /** * Package usage statistics * * @see /README.md near "Application statistics. Require, load, eval, call statistics" for details * * Flag "stats" * * This plugin provides require.stats() function and bunch of private functions */ /** * @name LineReport * @type {Object} * * @property {Boolean} lines if false -> not called * @property {Array[]} conditions list of unused conditions [[0, 2], [7, 0]] * @property {String[]} functions list of unused functions in that line */ /** * @name TypeReport * @type {Object} * * @property {Number} total * @property {Number} covered * @property {Number} percentage */ /** * @name LmdCoverage * @type {Object} * * @property {TypeReport} lines * @property {TypeReport} conditions * @property {TypeReport} functions * * @property {Object} report {lineNum: LineReport} */ /** * @name lmdStats * @type {Object} * * @property {String} name module name * @property {Object} moduleAccessTimes module access times {byModuleName: accessTimes} * @property {Number[]} accessTimes access times * @property {Number} initTime module init time: load+eval+call * @property {String[]} shortcuts list of used shortcuts * * @property {String} type module type: global, in-package, off-package * * @property {String[]} lines list of all statements * @property {String[]} conditions list of all conditions * @property {String[]} functions list of all functions * * @property {Object} runLines {lineId: callTimes} * @property {Object} runConditions {conditionId: [falseTimes, trueTimes]} * @property {Object} runFunctions {functionId: callTimes} * * @property {LmdCoverage} coverage * * @example * { * name: "pewpew", * type: "in-package", * accessTimes: [0], * moduleAccessTimes: [{ * time: 0, * byModule: "main" * }], * initTime: 10, * shortcuts: ["ololo"], * * lines: ["4", "5", "8"], * conditions: ["4:1", "5:2"], * functions: ["FunctionName:5:1", "FunctionName2:9:1"], * * runLines: { * "4": 1 * "5": 0, * "8": 14 * }, * * runConditions: { * "4:1": [1, 0], * "5:2": [0, 0] * }, * * runFunctions: { * "FunctionName:5:1": 10 * "FunctionName2:9:1": 0 * } * * coverage: { * lines: { * total: 3, * covered: 2, * percentage: 66.66667 * }, * * conditions: { * total: 2, * covered: 0.5, * percentage: 25 * }, * * functions: { * total: 2, * covered: 1, * percentage: 50 * }, * * report: { * "4": { * conditions: [[1, 0]] * }, * "5": { * lines: false, * conditions: [[0, 0]] * }, * "9": { * functions: ["FunctionName2"] * } * } * } * } */ /** * @name sandbox */ (function (sb) { /** * @type {lmdStats} */ var stats_results = {}, stats_Date = sb.global.Date, stats_startTime = +new stats_Date; function stats_get(moduleName) { return stats_results[moduleName] ? stats_results[moduleName] : stats_results[moduleName] = { name: moduleName, accessTimes: [], moduleAccessTimes: {}, initTime: -1 }; } function stats_initStart(moduleName) { stats_get(moduleName).initTime = +new stats_Date; } function stats_initEnd(moduleName) { var stat = stats_get(moduleName); stat.initTime = +new stats_Date - stat.initTime; } function stats_require(moduleName) { var stat = stats_get(moduleName); stat.accessTimes.push(+new stats_Date - stats_startTime); } function stats_require_module(moduleName, byModuleName) { var stat = stats_get(moduleName); if (!stat.moduleAccessTimes[byModuleName]) { stat.moduleAccessTimes[byModuleName] = []; } stat.moduleAccessTimes[byModuleName].push(+new stats_Date - stats_startTime); } function stats_wrap_require_method(method, thisObject, byModuleName) { return function (moduleName) { stats_require_modules(moduleName, byModuleName); return method.apply(thisObject, arguments); } } function stats_require_modules(moduleName, byModuleName) { var moduleNames = []; if (Object.prototype.toString.call(moduleName) !== "[object Array]") { moduleNames = [moduleName]; } else { moduleNames = moduleName; } for (var i = 0, c = moduleNames.length, moduleNamesItem, module; i < c; i++) { moduleNamesItem = moduleNames[i]; module = sb.modules[moduleNamesItem]; var replacement = sb.trigger('stats:before-require-count', moduleNamesItem, module); if (replacement) { moduleNamesItem = replacement[0]; } stats_require_module(moduleNamesItem, byModuleName); } } function stats_wrap_require(require, byModuleName) { var wrappedRequire = stats_wrap_require_method(require, this, byModuleName); for (var name in require) { wrappedRequire[name] = require[name]; } if (require.async) { wrappedRequire.async = stats_wrap_require_method(require.async, this, byModuleName); } if (require.css) { wrappedRequire.css = stats_wrap_require_method(require.css, this, byModuleName); } if (require.js) { wrappedRequire.js = stats_wrap_require_method(require.js, this, byModuleName); } return wrappedRequire; } function stats_type(moduleName, type) { var stat = stats_get(moduleName); stat.type = type; } function stats_shortcut(moduleName, shortcut) { var module = stats_get(moduleName.replace('@', '')), shortcuts = module.shortcuts, index; if (!shortcuts) { shortcuts = module.shortcuts = []; } // Link shortcut and real module if (!stats_results[shortcut]) { stats_results[shortcut] = module; } // ie6 indexOf hackz index = sb.trigger('*:request-indexof', [].indexOf)[0].call(shortcuts, shortcut); if (index === -1) { shortcuts.push(shortcut); } } /** * Returns module statistics or all statistics * * @param {String} [moduleName] * @return {Object} */ sb.require.stats = function (moduleName) { var replacement = sb.trigger('stats:before-return-stats', moduleName, stats_results); if (replacement && replacement[1]) { return replacement[1]; } return moduleName ? stats_results[moduleName] : stats_results; }; /** * @event lmd-register:decorate-require request for fake require * * @param {String} moduleName * @param {Object} module * * @retuns yes wraps require */ sb.on('lmd-register:decorate-require', function (moduleName, require) { var options = sb.modules_options[moduleName] || {}; if (options.sandbox) { return; } return [moduleName, stats_wrap_require(require, moduleName)]; }); /** * @event lmd-register:after-register after module register event * * @param {String} moduleName * @param {Object} module * * @retuns no */ sb.on('lmd-register:after-register', function (moduleName) { stats_initEnd(moduleName); }); /** * @event lmd-register:before-register before module register event * * @param {String} moduleName * @param {Object} module * * @retuns no */ sb.on('lmd-register:before-register', function (moduleName, module) { stats_type(moduleName, !module ? 'global' : typeof sb.modules[moduleName] === "undefined" ? 'off-package' : 'in-package'); }); /** * @event *:before-check before module cache check * * @param {String} moduleName * @param {Object} module * @param {String} type * * @retuns no */ sb.on('*:before-check', function (moduleName, module, type) { switch (type) { case "css": if (!(module || !sb.document) || sb.initialized[moduleName]) { stats_require(moduleName); } break; case "js": case "async": if (!module || sb.initialized[moduleName]) { stats_require(moduleName); } break; default: stats_require(moduleName); } }); /** * @event *:before-init calls when module is goint to eval or call * * @param {String} moduleName * @param {Object} module * * @retuns no */ sb.on('*:before-init', function (moduleName) { stats_initStart(moduleName); }); /** * @event *:request-error module load error * * @param {String} moduleName * @param {Object} module * * @retuns no */ sb.on('*:request-error', function (moduleName) { stats_initEnd(moduleName); }); /** * @event shortcuts:before-resolve moduleName is shortcut and its goint to resolve with actual name * * @param {String} moduleName * @param {Object} module * * @retuns no */ sb.on('shortcuts:before-resolve', function (moduleName, module) { // assign shortcut name for module stats_shortcut(module, moduleName); }); /** * @event *:stats-get somethins is request raw module stats * * @param {String} moduleName * @param {Object} result default stats * * @retuns yes */ sb.on('*:stats-get', function (moduleName, result) { return [moduleName, stats_get(moduleName)]; }); /** * @event *:stats-type something tells stats to overwrite module type * * @param {String} moduleName * @param {String} packageType * * @retuns no */ sb.on('*:stats-type', function (moduleName, packageType) { stats_type(moduleName, packageType); }); /** * @event *:stats-results somethins is request processed module stats * * @param {String} moduleName * @param {Object} result default stats * * @retuns yes */ sb.on('*:stats-results', function (moduleName, result) { return [moduleName, stats_results[moduleName]]; }); }(sandbox)); /** * @name sandbox */ (function (sb) { /** * Calculate coverage total * * @param moduleName */ function stats_calculate_coverage(moduleName) { var stats = sb.trigger('*:stats-get', moduleName, null)[1], total, covered, lineId, lineNum, parts; var lineReport = {}; if (!stats.lines) { return; } stats.coverage = {}; covered = 0; total = stats.lines.length; for (lineId in stats.runLines) { if (stats.runLines[lineId] > 0) { covered++; } else { lineNum = lineId; if (!lineReport[lineNum]) { lineReport[lineNum] = {}; } lineReport[lineNum].lines = false; } } stats.coverage.lines = { total: total, covered: covered, percentage: 100.0 * (total ? covered / total : 1) }; covered = 0; total = stats.functions.length; for (lineId in stats.runFunctions) { if (stats.runFunctions[lineId] > 0) { covered++; } else { parts = lineId.split(':'); lineNum = parts[1]; if (!lineReport[lineNum]) { lineReport[lineNum] = {}; } if (!lineReport[lineNum].functions) { lineReport[lineNum].functions = []; } lineReport[lineNum].functions.push(parts[0]); } } stats.coverage.functions = { total:total, covered:covered, percentage:100.0 * (total ? covered / total : 1) }; covered = 0; total = stats.conditions.length; for (lineId in stats.runConditions) { if (stats.runConditions[lineId][1] > 0) { covered += 1; } if (stats.runConditions[lineId][1] === 0) { parts = lineId.split(':'); lineNum = parts[1]; if (!lineReport[lineNum]) { lineReport[lineNum] = {}; } if (!lineReport[lineNum].conditions) { lineReport[lineNum].conditions = []; } lineReport[lineNum].conditions.push(stats.runConditions[lineId]); } } stats.coverage.conditions = { total:total, covered:covered, percentage:100.0 * (total ? covered / total : 1) }; stats.coverage.report = lineReport; } /** * Line counter * * @private */ sb.require.coverage_line = function (moduleName, lineId) { sb.trigger('*:stats-results', moduleName, null)[1].runLines[lineId] += 1; }; /** * Function call counter * * @private */ sb.require.coverage_function = function (moduleName, lineId) { sb.trigger('*:stats-results', moduleName, null)[1].runFunctions[lineId] += 1; }; /** * Condition counter * * @private */ sb.require.coverage_condition = function (moduleName, lineId, condition) { sb.trigger('*:stats-results', moduleName, null)[1].runConditions[lineId][condition ? 1 : 0] += 1; return condition; }; /** * Registers module * * @private */ function coverage_module(moduleName, lines, conditions, functions) { var stats = sb.trigger('*:stats-get', moduleName, null)[1]; if (stats.lines) { return; } stats.lines = lines; stats.conditions = conditions; stats.functions = functions; stats.runLines = {}; stats.runConditions = {}; stats.runFunctions = {}; for (var i = 0, c = lines.length; i < c; i += 1) { stats.runLines[lines[i]] = 0; } for (i = 0, c = conditions.length; i < c; i += 1) { stats.runConditions[conditions[i]] = [0, 0]; } for (i = 0, c = functions.length; i < c; i += 1) { stats.runFunctions[functions[i]] = 0; } } (function () { var moduleOption; for (var moduleName in sb.modules_options) { if (sb.modules_options.hasOwnProperty(moduleName)) { moduleOption = sb.modules_options[moduleName]; if (!moduleOption.coverage) { continue; } coverage_module(moduleName, moduleOption.lines, moduleOption.conditions, moduleOption.functions); sb.trigger('*:stats-type', moduleName, 'in-package'); } } })(); /** * @event *:stats-coverage adds module parameters for statistics * * @param {String} moduleName * @param {Object} moduleOption preprocessed data for lines, conditions and functions * * @retuns no */ sb.on('*:stats-coverage', function (moduleName, moduleOption) { coverage_module(moduleName, moduleOption.lines, moduleOption.conditions, moduleOption.functions); }); sb.on('lmd-register:decorate-require', function (moduleName, require) { var options = sb.modules_options[moduleName] || {}; if (!options.sandbox) { return; } return [moduleName, { coverage_line: require.coverage_line, coverage_function: require.coverage_function, coverage_condition: require.coverage_condition }]; }); /** * @event stats:before-return-stats stats is going to return stats data * this event can modify that data * * @param {String|undefined} moduleName * @param {Object} stats_results default stats * * @retuns yes depend on moduleName value returns empty array or replaces stats_results */ sb.on('stats:before-return-stats', function (moduleName, stats_results) { if (moduleName) { stats_calculate_coverage(moduleName); return []; } else { for (var moduleNameId in stats_results) { stats_calculate_coverage(moduleNameId); } // calculate global coverage var result = { modules: stats_results, global: { lines: { total: 0, covered: 0, percentage: 0 }, conditions: { total: 0, covered: 0, percentage: 0 }, functions: { total: 0, covered: 0, percentage: 0 } } }, modulesCount = 0, moduleStats; for (var moduleName in stats_results) { moduleStats = stats_results[moduleName]; // not a shortcut if (moduleName === moduleStats.name && moduleStats.coverage) { modulesCount++; for (var statName in moduleStats.coverage) { if (statName !== "report") { result.global[statName].total += moduleStats.coverage[statName].total; result.global[statName].covered += moduleStats.coverage[statName].covered; result.global[statName].percentage += moduleStats.coverage[statName].percentage; } } } } for (statName in result.global) { // avg percentage result.global[statName].percentage /= modulesCount; } return [moduleName, result]; } }); }(sandbox)); main(lmd_trigger('lmd-register:decorate-require', 'main', lmd_require)[1], output.exports, output); })/*DO NOT ADD ; !*/ (this,(function(require, exports, module) { var require = arguments[0]; require.coverage_function("main", "(?):0:1"); require.coverage_line("main", "5"); var sha512 = require("sha512"); require.coverage_line("main", "7"); function decorateInputs() { require.coverage_function("main", "decorateInputs:7:154"); require.coverage_line("main", "8"); return require.css("css/b-input.css"); } require.coverage_line("main", "11"); $(function() { require.coverage_function("main", "(?):11:230"); require.coverage_line("main", "12"); var $button = $(".b-button"), $result = $(".b-result"), $input = $(".b-input"); require.coverage_line("main", "16"); function calculateSha512OfMd5() { require.coverage_function("main", "calculateSha512OfMd5:16:349"); require.coverage_line("main", "17"); var md5 = require("md5"); require.coverage_line("main", "18"); var value = $input.val(); require.coverage_line("main", "19"); $result.val(sha512(md5(value))); require.coverage_line("main", "20"); decorateInputs(); } require.coverage_line("main", "23"); $button.click(calculateSha512OfMd5); require.coverage_line("main", "25"); require("statsLogger"); }); }),{ "unused": (function(require, exports, module) { var require = arguments[0]; require.coverage_function("unused", "(?):0:1"); require.coverage_line("unused", "2"); $(function() { require.coverage_function("unused", "(?):2:67"); require.coverage_line("unused", "3"); if (require.coverage_condition("unused", "if:3:89", Math.random() > .5)) { require.coverage_line("unused", "4"); console.log(123); } }); }), "sha512": (function(require, exports, module) { var require = arguments[0]; require.coverage_function("sha512", "(?):0:1"); require.coverage_line("sha512", "14"); var hexcase = 0; require.coverage_line("sha512", "15"); var b64pad = ""; require.coverage_line("sha512", "21"); function hex_sha512(s) { require.coverage_function("sha512", "hex_sha512:21:840"); require.coverage_line("sha512", "21"); return rstr2hex(rstr_sha512(str2rstr_utf8(s))); } require.coverage_line("sha512", "22"); function b64_sha512(s) { require.coverage_function("sha512", "b64_sha512:22:918"); require.coverage_line("sha512", "22"); return rstr2b64(rstr_sha512(str2rstr_utf8(s))); } require.coverage_line("sha512", "23"); function any_sha512(s, e) { require.coverage_function("sha512", "any_sha512:23:996"); require.coverage_line("sha512", "23"); return rstr2any(rstr_sha512(str2rstr_utf8(s)), e); } require.coverage_line("sha512", "24"); function hex_hmac_sha512(k, d) { require.coverage_function("sha512", "hex_hmac_sha512:24:1076"); require.coverage_line("sha512", "25"); return rstr2hex(rstr_hmac_sha512(str2rstr_utf8(k), str2rstr_utf8(d))); } require.coverage_line("sha512", "26"); function b64_hmac_sha512(k, d) { require.coverage_function("sha512", "b64_hmac_sha512:26:1184"); require.coverage_line("sha512", "27"); return rstr2b64(rstr_hmac_sha512(str2rstr_utf8(k), str2rstr_utf8(d))); } require.coverage_line("sha512", "28"); function any_hmac_sha512(k, d, e) { require.coverage_function("sha512", "any_hmac_sha512:28:1292"); require.coverage_line("sha512", "29"); return rstr2any(rstr_hmac_sha512(str2rstr_utf8(k), str2rstr_utf8(d)), e); } require.coverage_line("sha512", "34"); function sha512_vm_test() { require.coverage_function("sha512", "sha512_vm_test:34:1471"); require.coverage_line("sha512", "36"); return hex_sha512("abc").toLowerCase() == "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" + "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"; } require.coverage_line("sha512", "44"); function rstr_sha512(s) { require.coverage_function("sha512", "rstr_sha512:44:1739"); require.coverage_line("sha512", "46"); return binb2rstr(binb_sha512(rstr2binb(s), s.length * 8)); } require.coverage_line("sha512", "52"); function rstr_hmac_sha512(key, data) { require.coverage_function("sha512", "rstr_hmac_sha512:52:1903"); require.coverage_line("sha512", "54"); var bkey = rstr2binb(key); require.coverage_line("sha512", "55"); if (require.coverage_condition("sha512", "if:55:1976", bkey.length > 32)) { require.coverage_line("sha512", "55"); bkey = binb_sha512(bkey, key.length * 8); } require.coverage_line("sha512", "57"); var ipad = Array(32), opad = Array(32); require.coverage_line("sha512", "58"); for (var i = 0; i < 32; i++) { require.coverage_line("sha512", "60"); ipad[i] = bkey[i] ^ 909522486; require.coverage_line("sha512", "61"); opad[i] = bkey[i] ^ 1549556828; } require.coverage_line("sha512", "64"); var hash = binb_sha512(ipad.concat(rstr2binb(data)), 1024 + data.length * 8); require.coverage_line("sha512", "65"); return binb2rstr(binb_sha512(opad.concat(hash), 1024 + 512)); } require.coverage_line("sha512", "71"); function rstr2hex(input) { require.coverage_function("sha512", "rstr2hex:71:2384"); require.coverage_line("sha512", "73"); try { require.coverage_line("sha512", "73"); hexcase; } catch (e) { require.coverage_line("sha512", "73"); hexcase = 0; } require.coverage_line("sha512", "74"); var hex_tab = require.coverage_condition("sha512", "conditional:74:2469", hexcase) ? "0123456789ABCDEF" : "0123456789abcdef"; require.coverage_line("sha512", "75"); var output = ""; require.coverage_line("sha512", "76"); var x; require.coverage_line("sha512", "77"); for (var i = 0; i < input.length; i++) { require.coverage_line("sha512", "79"); x = input.charCodeAt(i); require.coverage_line("sha512", "80"); output += hex_tab.charAt(x >>> 4 & 15) + hex_tab.charAt(x & 15); } require.coverage_line("sha512", "83"); return output; } require.coverage_line("sha512", "89"); function rstr2b64(input) { require.coverage_function("sha512", "rstr2b64:89:2791"); require.coverage_line("sha512", "91"); try { require.coverage_line("sha512", "91"); b64pad; } catch (e) { require.coverage_line("sha512", "91"); b64pad = ""; } require.coverage_line("sha512", "92"); var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; require.coverage_line("sha512", "93"); var output = ""; require.coverage_line("sha512", "94"); var len = input.length; require.coverage_line("sha512", "95"); for (var i = 0; i < len; i += 3) { require.coverage_line("sha512", "97"); var triplet = input.charCodeAt(i) << 16 | (require.coverage_condition("sha512", "conditional:98:s", i + 1 < len) ? input.charCodeAt(i + 1) << 8 : 0) | (require.coverage_condition("sha512", "conditional:99:s", i + 2 < len) ? input.charCodeAt(i + 2) : 0); require.coverage_line("sha512", "100"); for (var j = 0; j < 4; j++) { require.coverage_line("sha512", "102"); if (require.coverage_condition("sha512", "if:102:3245", i * 8 + j * 6 > input.length * 8)) { require.coverage_line("sha512", "102"); output += b64pad; } else { require.coverage_line("sha512", "103"); output += tab.charAt(triplet >>> 6 * (3 - j) & 63); } } } require.coverage_line("sha512", "106"); return output; } require.coverage_line("sha512", "112"); function rstr2any(input, encoding) { require.coverage_function("sha512", "rstr2any:112:3453"); require.coverage_line("sha512", "114"); var divisor = encoding.length; require.coverage_line("sha512", "115"); var i, j, q, x, quotient; require.coverage_line("sha512", "118"); var dividend = Array(Math.ceil(input.length / 2)); require.coverage_line("sha512", "119"); for (i = 0; i < dividend.length; i++) { require.coverage_line("sha512", "121"); dividend[i] = input.charCodeAt(i * 2) << 8 | input.charCodeAt(i * 2 + 1); } require.coverage_line("sha512", "130"); var full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2))); require.coverage_line("sha512", "132"); var remainders = Array(full_length); require.coverage_line("sha512", "133"); for (j = 0; j < full_length; j++) { require.coverage_line("sha512", "135"); quotient = Array(); require.coverage_line("sha512", "136"); x = 0; require.coverage_line("sha512", "137"); for (i = 0; i < dividend.length; i++) { require.coverage_line("sha512", "139"); x = (x << 16) + dividend[i]; require.coverage_line("sha512", "140"); q = Math.floor(x / divisor); require.coverage_line("sha512", "141"); x -= q * divisor; require.coverage_line("sha512", "142"); if (require.coverage_condition("sha512", "if:142:4457", quotient.length > 0) || require.coverage_condition("sha512", "if:142:4484", q > 0)) { require.coverage_line("sha512", "143"); quotient[quotient.length] = q; } } require.coverage_line("sha512", "145"); remainders[j] = x; require.coverage_line("sha512", "146"); dividend = quotient; } require.coverage_line("sha512", "150"); var output = ""; require.coverage_line("sha512", "151"); for (i = remainders.length - 1; i >= 0; i--) { require.coverage_line("sha512", "152"); output += encoding.charAt(remainders[i]); } require.coverage_line("sha512", "154"); return output; } require.coverage_line("sha512", "161"); function str2rstr_utf8(input) { require.coverage_function("sha512", "str2rstr_utf8:161:4864"); require.coverage_line("sha512", "163"); var output = ""; require.coverage_line("sha512", "164"); var i = -1; require.coverage_line("sha512", "165"); var x, y; require.coverage_line("sha512", "167"); while (++i < input.length) { require.coverage_line("sha512", "170"); x = input.charCodeAt(i); require.coverage_line("sha512", "171"); y = require.coverage_condition("sha512", "undefined:s", i + 1 < input.length) ? input.charCodeAt(i + 1) : 0; require.coverage_line("sha512", "172"); if (require.coverage_condition("sha512", "if:172:5110", 55296 <= x) && require.coverage_condition("sha512", "if:172:5110", x <= 56319) && require.coverage_condition("sha512", "if:172:5110", 56320 <= y) && require.coverage_condition("sha512", "if:172:5160", y <= 57343)) { require.coverage_line("sha512", "174"); x = 65536 + ((x & 1023) << 10) + (y & 1023); require.coverage_line("sha512", "175"); i++; } require.coverage_line("sha512", "179"); if (require.coverage_condition("sha512", "if:179:5289", x <= 127)) { require.coverage_line("sha512", "180"); output += String.fromCharCode(x); } else { require.coverage_line("sha512", "181"); if (require.coverage_condition("sha512", "if:181:5352", x <= 2047)) { require.coverage_line("sha512", "182"); output += String.fromCharCode(192 | x >>> 6 & 31, 128 | x & 63); } else { require.coverage_line("sha512", "184"); if (require.coverage_condition("sha512", "if:184:5505", x <= 65535)) { require.coverage_line("sha512", "185"); output += String.fromCharCode(224 | x >>> 12 & 15, 128 | x >>> 6 & 63, 128 | x & 63); } else { require.coverage_line("sha512", "188"); if (require.coverage_condition("sha512", "if:188:5723", x <= 2097151)) { require.coverage_line("sha512", "189"); output += String.fromCharCode(240 | x >>> 18 & 7, 128 | x >>> 12 & 63, 128 | x >>> 6 & 63, 128 | x & 63); } } } } } require.coverage_line("sha512", "194"); return output; } require.coverage_line("sha512", "200"); function str2rstr_utf16le(input) { require.coverage_function("sha512", "str2rstr_utf16le:200:6055"); require.coverage_line("sha512", "202"); var output = ""; require.coverage_line("sha512", "203"); for (var i = 0; i < input.length; i++) { require.coverage_line("sha512", "204"); output += String.fromCharCode(input.charCodeAt(i) & 255, input.charCodeAt(i) >>> 8 & 255); } require.coverage_line("sha512", "206"); return output; } require.coverage_line("sha512", "209"); function str2rstr_utf16be(input) { require.coverage_function("sha512", "str2rstr_utf16be:209:6310"); require.coverage_line("sha512", "211"); var output = ""; require.coverage_line("sha512", "212"); for (var i = 0; i < input.length; i++) { require.coverage_line("sha512", "213"); output += String.fromCharCode(input.charCodeAt(i) >>> 8 & 255, input.charCodeAt(i) & 255); } require.coverage_line("sha512", "215"); return output; } require.coverage_line("sha512", "222"); function rstr2binb(input) { require.coverage_function("sha512", "rstr2binb:222:6686"); require.coverage_line("sha512", "224"); var output = Array(input.length >> 2); require.coverage_line("sha512", "225"); for (var i = 0; i < output.length; i++) { require.coverage_line("sha512", "226"); output[i] = 0; } require.coverage_line("sha512", "227"); for (var i = 0; i < input.length * 8; i += 8) { require.coverage_line("sha512", "228"); output[i >> 5] |= (input.charCodeAt(i / 8) & 255) << 24 - i % 32; } require.coverage_line("sha512", "229"); return output; } require.coverage_line("sha512", "235"); function binb2rstr(input) { require.coverage_function("sha512", "binb2rstr:235:7012"); require.coverage_line("sha512", "237"); var output = ""; require.coverage_line("sha512", "238"); for (var i = 0; i < input.length * 32; i += 8) { require.coverage_line("sha512", "239"); output += String.fromCharCode(input[i >> 5] >>> 24 - i % 32 & 255); } require.coverage_line("sha512", "240"); return output; } require.coverage_line("sha512", "246"); var sha512_k; require.coverage_line("sha512", "247"); function binb_sha512(x, len) { require.coverage_function("sha512", "binb_sha512:247:7299"); require.coverage_line("sha512", "249"); if (require.coverage_condition("sha512", "if:249:7335", sha512_k == undefined)) { require.coverage_line("sha512", "252"); sha512_k = new Array(new int64(1116352408, -685199838), new int64(1899447441, 602891725), new int64(-1245643825, -330482897), new int64(-373957723, -2121671748), new int64(961987163, -213338824), new int64(1508970993, -1241133031), new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736), new int64(-670586216, -1560083902), new int64(310598401, 1164996542), new int64(607225278, 1323610764), new int64(1426881987, -704662302), new int64(1925078388, -226784913), new int64(-2132889090, 991336113), new int64(-1680079193, 633803317), new int64(-1046744716, -815192428), new int64(-459576895, -1628353838), new int64(-272742522, 944711139), new int64(264347078, -1953704523), new int64(604807628, 2007800933), new int64(770255983, 1495990901), new int64(1249150122, 1856431235), new int64(1555081692, -1119749164), new int64(1996064986, -2096016459), new int64(-1740746414, -295247957), new int64(-1473132947, 766784016), new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340), new int64(-958395405, 1034457026), new int64(-710438585, -1828018395), new int64(113926993, -536640913), new int64(338241895, 168717936), new int64(666307205, 1188179964), new int64(773529912, 1546045734), new int64(1294757372, 1522805485), new int64(1396182291, -1651133473), new int64(1695183700, -1951439906), new int64(1986661051, 1014477480), new int64(-2117940946, 1206759142), new int64(-1838011259, 344077627), new int64(-1564481375, 1290863460), new int64(-1474664885, -1136513023), new int64(-1035236496, -789014639), new int64(-949202525, 106217008), new int64(-778901479, -688958952), new int64(-694614492, 1432725776), new int64(-200395387, 1467031594), new int64(275423344, 851169720), new int64(430227734, -1194143544), new int64(506948616, 1363258195), new int64(659060556, -544281703), new int64(883997877, -509917016), new int64(958139571, -976659869), new int64(1322822218, -482243893), new int64(1537002063, 2003034995), new int64(1747873779, -692930397), new int64(1955562222, 1575990012), new int64(2024104815, 1125592928), new int64(-2067236844, -1578062990), new int64(-1933114872, 442776044), new int64(-1866530822, 593698344), new int64(-1538233109, -561857047), new int64(-1090935817, -1295615723), new int64(-965641998, -479046869), new int64(-903397682, -366583396), new int64(-779700025, 566280711), new int64(-354779690, -840897762), new int64(-176337025, -294727304), new int64(116418474, 1914138554), new int64(174292421, -1563912026), new int64(289380356, -1090974290), new int64(460393269, 320620315), new int64(685471733, 587496836), new int64(852142971, 1086792851), new int64(1017036298, 365543100), new int64(1126000580, -1676669620), new int64(1288033470, -885112138), new int64(1501505948, -60457430), new int64(1607167915, 987167468), new int64(1816402316, 1246189591)); } require.coverage_line("sha512", "296"); var H = new Array(new int64(1779033703, -205731576), new int64(-1150833019, -2067093701), new int64(1013904242, -23791573), new int64(-1521486534, 1595750129), new int64(1359