UNPKG

@applitools/monitoring-commons

Version:
126 lines 3.66 kB
'use strict'; function makeTiming({ parentPerformance = undefined, nowService = Date.now } = {}) { const performance = parentPerformance || {}; /** * * @template T * @param {string} name * @param {()=>Promise<T>} f * @returns {Promise<T>} */ function timeItAsync(name, f) { const start = nowService(); return f().then((v) => ((performance[name] = (performance[name] || 0) + nowService() - start), v), (v) => ((performance[name] = (performance[name] || 0) + nowService() - start), Promise.reject(v))); } /** * * @param {string} name * @returns {()=>void} */ function getTimeItCallback(name) { const start = nowService(); return () => { performance[name] = (performance[name] || 0) + nowService() - start; }; } /** * * @template T * @param {string} name * @param {()=>T} f * @returns {T} */ function timeIt(name, f) { const start = nowService(); try { const ret = f(); performance[name] = (performance[name] || 0) + nowService() - start; return ret; } catch (err) { performance[name] = (performance[name] || 0) + nowService() - start; throw err; } } return { timeItAsync, timeIt, getTimeItCallback, performance, }; } function makeOrderedTiming({ parentPerformance = undefined, nowService = Date.now } = {}) { let index = 0; const performance = parentPerformance || {}; /** * * @template T * @param {string} name * @param {()=>Promise<T>} f * @returns {Promise<T>} */ function timeItAsync(name, f) { const start = nowService(); const number = index; index++; const prefix = numberToPrefix(number); const nameWithPrefix = `${prefix}. ${name}`; return f().then((v) => ((performance[nameWithPrefix] = nowService() - start), v), (v) => ((performance[nameWithPrefix] = nowService() - start), Promise.reject(v))); } /** * * @param {string} name * @returns {()=>void} */ function getTimeItCallback(name) { const number = index; index++; const prefix = numberToPrefix(number); const nameWithPrefix = `${prefix}. ${name}`; const start = nowService(); return () => { performance[nameWithPrefix] = nowService() - start; }; } /** * * @template T * @param {string} name * @param {()=>T} f * @returns {T} */ function timeIt(name, f) { const start = nowService(); const number = index; const prefix = numberToPrefix(number); const nameWithPrefix = `${prefix}. ${name}`; index++; try { const ret = f(); performance[nameWithPrefix] = nowService() - start; return ret; } catch (err) { performance[nameWithPrefix] = nowService() - start; throw err; } } function numberToPrefix(number) { const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; const digits = Math.floor(number / letters.length); const remainder = number % letters.length; const zPrefix = digits ? new Array(digits - 1).fill('Z').join('') : ''; return zPrefix + letters[remainder]; } return { timeItAsync, timeIt, getTimeItCallback, performance, }; } module.exports = { makeTiming, makeOrderedTiming, }; //# sourceMappingURL=monitoring-commons.js.map