export function parseNetDuration ( str ) { const durationRe = /^(\d\d):(\d\d):(\d\d(?:\.\d+)?)$/ ; const durationMatch = str . match ( durationRe ) ; if ( durationMatch === null ) { throw new Error ( `Invalid format: "${ str }" is not NET duration` ) ; } const [ _ , hourStr , minStr , secStr ] = durationMatch ; return ( parseInt ( hourStr ) * 3600 + parseInt ( minStr ) * 60 + parseFloat ( secStr ) ) * 1000 ; } export function parseIsoDate ( str ) { const isoDateRe = /^\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)$/ ; if ( str === undefined || ! isoDateRe . test ( str ) ) { throw new Error ( `Invalid format: "${ str }" is not ISO date` ) ; } return new Date ( str ) ; } export function getFirstNonEmptyLine ( stackTrace ) { const lines = stackTrace . split ( /\r?\n/g ) ; return lines . find ( str => ! /^\s*$/ . test ( str ) ) ; }