Best JavaScript code snippet using wpt
filter_functions.js
Source:filter_functions.js  
1import _ from 'lodash'2function totalGoals(item) {3  let totalGoals;4  if (item.view.scores) {5    totalGoals = parseInt(item.view.scores['2'].home) + parseInt(item.view.scores['2'].away);6    return totalGoals <= 07  } else {8    return false9  }10}11function goalsDraw(item) {12  return parseInt(item.view.scores['2'].home) === parseInt(item.view.scores['2'].away);13}14function startTB(item) {15  if (item.odds['1_3']) {16    let totalOdds = item.odds['1_3'];17    let startTotalOdd = totalOdds[totalOdds.length - 1];18    //let handicaps_1_8 = ['2.5, 3.0', '3.0, 3,5'];19    //let handicaps_1_9 = ['3.5', '3.5, 4.0', '4.0, 4.5', '4.5', '4.5, 5.0', '5.0, 5.5', '5,5', '5.5, 6.0', '6.0, 6.5', '6.5', '6.5, 7.0', '7.0, 7.5', '7.5', '7.5, 8.0', '8.0, 8.5', '8.5'];20    if (startTotalOdd) {21      //let overOd = parseFloat(startTotalOdd.over_od);22      //let handicap = (startTotalOdd.handicap + '').trim();23      let handicapArray = startTotalOdd.handicap.split(',');24      return parseFloat(startTotalOdd.over_od) <= 1.75 && parseFloat(handicapArray[0]) <= 2.525        || parseFloat(startTotalOdd.over_od) < 1.95 && parseFloat(handicapArray[0]) > 326        || parseFloat(startTotalOdd.over_od) < 1.85 && parseInt(handicapArray[0]) === 327    } else {28      return false29    }30  }31}32function startResultOdd(item) {33  if (item.odds['1_1'] && item.scores ) {34    let resultOdds = item.odds['1_1'];35    let startResultOdd = resultOdds[resultOdds.length - 1];36    if (startResultOdd) {37      if (parseFloat(startResultOdd.home_od) <= 1.4 || parseFloat(startResultOdd.away_od) <= 1.4) {38        return true39      } else {40        return false41      }42    } else {43      return false44    }45  }46}47function leagueName(item) {48  if (item.league && item.league.name) {49    let leagueNameFilter = ['50', '60', '70', '80', 'Women', 'U18', 'U19', 'U20'];50    return item.league.name.indexOf(leagueNameFilter[0]) === -151      && item.league.name.indexOf(leagueNameFilter[1]) === -152      && item.league.name.indexOf(leagueNameFilter[2]) === -153      && item.league.name.indexOf(leagueNameFilter[3]) === -154      && item.league.name.indexOf(leagueNameFilter[4]) === -155      && item.league.name.indexOf(leagueNameFilter[5]) === -156      && item.league.name.indexOf(leagueNameFilter[6]) === -157      && item.league.name.indexOf(leagueNameFilter[7]) === -158  }59}60function attacksBot3(item) {61  if (item.view && item.view.stats && item.view.stats.on_target && item.view.stats.attacks && item.view.stats.dangerous_attacks) {62    let goalsOnTarget = 0;63    goalsOnTarget = parseInt(item.view.stats.on_target[0]) + parseInt(item.view.stats.on_target[1]);64    let attacksSumm = 0;65    attacksSumm = parseInt(item.view.stats.attacks[0]) + parseInt(item.view.stats.attacks[1]);66    let dangerAttacksSumm = 0;67    dangerAttacksSumm = parseInt(item.view.stats.dangerous_attacks[0]) + parseInt(item.view.stats.dangerous_attacks[1]);68    return goalsOnTarget >= 3 && attacksSumm >= 38 && dangerAttacksSumm/attacksSumm >= 0.569  } else {70    return false71  }72}73function attacksBot2(item) {74  if (item.view && item.view.stats && item.view.stats.on_target  && item.view.stats.off_target && item.view.stats.attacks && item.view.stats.dangerous_attacks) {75    let goalsOnTarget = 0;76    goalsOnTarget = parseInt(item.view.stats.on_target[0]) + parseInt(item.view.stats.on_target[1]);77    let attacksSumm = 0;78    attacksSumm = parseInt(item.view.stats.attacks[0]) + parseInt(item.view.stats.attacks[1]);79    let dangerAttacksSumm = 0;80    dangerAttacksSumm = parseInt(item.view.stats.dangerous_attacks[0]) + parseInt(item.view.stats.dangerous_attacks[1]);81    let allGoals = 0;82    allGoals = goalsOnTarget + parseInt(item.view.stats.off_target[0]) + parseInt(item.view.stats.off_target[1]);83    let dangerAttacksDiff = Math.abs(parseInt(item.view.stats.dangerous_attacks[0]) - parseInt(item.view.stats.dangerous_attacks[1]));84    let dangerAttacksKef;85    if (parseInt(item.view.stats.dangerous_attacks[0]) >= parseInt(item.view.stats.dangerous_attacks[1])) {86      dangerAttacksKef = parseInt(item.view.stats.attacks[0])/parseInt(item.view.stats.dangerous_attacks[0])87    } else {88      dangerAttacksKef = parseInt(item.view.stats.attacks[1])/parseInt(item.view.stats.dangerous_attacks[1])89    }90    let favoriteDangerAttacksKef;91    if (parseInt(item.view.stats.dangerous_attacks[0]) > parseInt(item.view.stats.dangerous_attacks[1])) {92      favoriteDangerAttacksKef = parseInt(item.view.stats.dangerous_attacks[0])/parseInt(item.view.stats.dangerous_attacks[1]);93    } else {94      favoriteDangerAttacksKef = parseInt(item.view.stats.dangerous_attacks[1])/parseInt(item.view.stats.dangerous_attacks[0]);95    }96    return goalsOnTarget >= 1 && allGoals >= 4 && (item.view.stats.dangerous_attacks[0] <= 10 || item.view.stats.dangerous_attacks[1] <= 10)97      && favoriteDangerAttacksKef >= 2.298  } else {99    return false100  }101}102function attacksBot1(item) {103  if (item.view && item.view.stats && item.view.stats.on_target && item.view.stats.attacks && item.view.stats.dangerous_attacks) {104    let goalsOnTarget = 0;105    goalsOnTarget = parseInt(item.view.stats.on_target[0]) + parseInt(item.view.stats.on_target[1]);106    let attacksSumm = 0;107    attacksSumm = parseInt(item.view.stats.attacks[0]) + parseInt(item.view.stats.attacks[1]);108    let dangerAttacksSumm = 0;109    dangerAttacksSumm = parseInt(item.view.stats.dangerous_attacks[0]) + parseInt(item.view.stats.dangerous_attacks[1]);110    let dangerAttacksDif = Math.abs(parseInt(item.view.stats.dangerous_attacks[0]) - parseInt(item.view.stats.dangerous_attacks[1]));111    let dangerAttacksKef;112    if (parseInt(item.view.stats.dangerous_attacks[0]) > parseInt(item.view.stats.dangerous_attacks[1])) {113      dangerAttacksKef = parseInt(item.view.stats.dangerous_attacks[0])/parseInt(item.view.stats.dangerous_attacks[1]);114    } else {115      dangerAttacksKef = parseInt(item.view.stats.dangerous_attacks[1])/parseInt(item.view.stats.dangerous_attacks[0]);116    }117    return dangerAttacksDif >= 10 && goalsOnTarget >= 3118  } else {119    return false120  }121}122function attacksBotTM(item) {123  if (item.view && item.view.stats && item.view.stats.on_target && item.view.stats.attacks && item.view.stats.dangerous_attacks) {124    let goalsOnTarget = 0;125    goalsOnTarget = parseInt(item.view.stats.on_target[0]) + parseInt(item.view.stats.on_target[1]);126    let goalsOffTarget = 0;127    goalsOffTarget = parseInt(item.view.stats.off_target[0]) + parseInt(item.view.stats.off_target[1]);128    let attacksSumm = 0;129    attacksSumm = parseInt(item.view.stats.attacks[0]) + parseInt(item.view.stats.attacks[1]);130    let dangerAttacksSumm = 0;131    dangerAttacksSumm = parseInt(item.view.stats.dangerous_attacks[0]) + parseInt(item.view.stats.dangerous_attacks[1]);132    let dangerAttacksDif = Math.abs(parseInt(item.view.stats.dangerous_attacks[0]) - parseInt(item.view.stats.dangerous_attacks[1]));133    let dangerAttacksKef;134    if (parseInt(item.view.stats.dangerous_attacks[0]) > parseInt(item.view.stats.dangerous_attacks[1])) {135      dangerAttacksKef = parseInt(item.view.stats.dangerous_attacks[0])/parseInt(item.view.stats.dangerous_attacks[1]);136    } else {137      dangerAttacksKef = parseInt(item.view.stats.dangerous_attacks[1])/parseInt(item.view.stats.dangerous_attacks[0]);138    }139    return dangerAttacksKef >= 2.3140  } else {141    return false142  }143}144function attacksBotCorporation(item) {145  if (item.view && item.view.stats && item.view.stats.on_target && item.view.stats.attacks && item.view.stats.dangerous_attacks) {146    let goalsOnTarget = 0;147    goalsOnTarget = parseInt(item.view.stats.on_target[0]) + parseInt(item.view.stats.on_target[1]);148    let goalsOnTargetDiff = 0;149    goalsOnTargetDiff = Math.abs(parseInt(item.view.stats.on_target[0]) - parseInt(item.view.stats.on_target[1]));150    let goalsOffTarget = 0;151    goalsOffTarget = parseInt(item.view.stats.off_target[0]) + parseInt(item.view.stats.off_target[1]);152    let attacksSumm = 0;153    attacksSumm = parseInt(item.view.stats.attacks[0]) + parseInt(item.view.stats.attacks[1]);154    let dangerAttacksSumm = 0;155    dangerAttacksSumm = parseInt(item.view.stats.dangerous_attacks[0]) + parseInt(item.view.stats.dangerous_attacks[1]);156    let dangerAttacksDif = Math.abs(parseInt(item.view.stats.dangerous_attacks[0]) - parseInt(item.view.stats.dangerous_attacks[1]));157    let dangerAttacksKef;158    if (parseInt(item.view.stats.dangerous_attacks[0]) > parseInt(item.view.stats.dangerous_attacks[1])) {159      dangerAttacksKef = parseInt(item.view.stats.dangerous_attacks[0])/parseInt(item.view.stats.dangerous_attacks[1]);160    } else {161      dangerAttacksKef = parseInt(item.view.stats.dangerous_attacks[1])/parseInt(item.view.stats.dangerous_attacks[0]);162    }163    return goalsOnTarget >= 3 && goalsOnTargetDiff >= 2 && (goalsOffTarget + goalsOnTarget) >= 5 && dangerAttacksDif >= 9;164  } else {165    return false166  }167}168function attacks(item) {169  //return item.view && item.view.stats && item.view.stats.on_target && item.view.stats.attacks && item.view.stats.dangerous_attacks170  if (item.view && item.view.stats && item.view.stats.on_target && item.view.stats.attacks && item.view.stats.dangerous_attacks && item.odds['1_1'] && parseFloat(item.odds['1_1'][0].home_od) > 1) {171    /*let goalsOnTarget = 0;172    goalsOnTarget = parseInt(item.view.stats.on_target[0]) + parseInt(item.view.stats.on_target[1]);173    let goalsOffTarget = 0;174    goalsOffTarget = parseInt(item.view.stats.off_target[0]) + parseInt(item.view.stats.off_target[1]);175    let team1AllGoals = 0;176    team1AllGoals = parseInt(item.view.stats.on_target[0]) + parseInt(item.view.stats.off_target[0]);177    let team2AllGoals = 0;178    team2AllGoals = parseInt(item.view.stats.on_target[1]) + parseInt(item.view.stats.off_target[1]);179    let attacksSumm = 0;180    attacksSumm = parseInt(item.view.stats.attacks[0]) + parseInt(item.view.stats.attacks[1]);181    let dangerAttacksSumm = 0182    dangerAttacksSumm = parseInt(item.view.stats.dangerous_attacks[0]) + parseInt(item.view.stats.dangerous_attacks[1]);183    let dangerAttacksDif = Math.abs(parseInt(item.view.stats.dangerous_attacks[0]) - parseInt(item.view.stats.dangerous_attacks[1]));184    let attacksKef = attacksSumm/dangerAttacksSumm;*/185    let dangerAttacksSumm = 0;186    dangerAttacksSumm = parseInt(item.view.stats.dangerous_attacks[0]) + parseInt(item.view.stats.dangerous_attacks[1]);187    let dangerAttacksKef;188    let advantageTeam = '';189    let dangerAttacksDiff = Math.abs(parseInt(item.view.stats.dangerous_attacks[0]) - parseInt(item.view.stats.dangerous_attacks[1]));190    let attacksDiff;191    if (parseInt(item.view.stats.dangerous_attacks[0]) > parseInt(item.view.stats.dangerous_attacks[1])) {192      dangerAttacksKef = parseInt(item.view.stats.dangerous_attacks[0])/parseInt(item.view.stats.dangerous_attacks[1]);193      attacksDiff = parseInt(item.view.stats.attacks[0]) - parseInt(item.view.stats.attacks[1]);194      advantageTeam = 'home'195    } else {196      dangerAttacksKef = parseInt(item.view.stats.dangerous_attacks[1])/parseInt(item.view.stats.dangerous_attacks[0]);197      attacksDiff = parseInt(item.view.stats.attacks[1]) - parseInt(item.view.stats.attacks[0]);198      advantageTeam = 'away'199    }200    let resultOdds = item.odds['1_1'];201    let startResultOdd = resultOdds[resultOdds.length - 1];202    let oddsKef = parseFloat(startResultOdd.home_od)/parseFloat(startResultOdd.away_od);203    let attacksRatioKefHome;204    let attacksRatioKefAway;205    if (parseInt(item.view.stats.attacks[0]) > parseInt(item.view.stats.attacks[1])) {206      attacksRatioKefHome = parseInt(item.view.stats.attacks[0])/parseInt(item.view.stats.attacks[1]);207    } else {208      attacksRatioKefAway = parseInt(item.view.stats.attacks[1])/parseInt(item.view.stats.attacks[0]);209    }210    //СÑÐ¿ÐµÑ Ð±Ð¾Ñ211    return ((dangerAttacksKef >= 3.2 && advantageTeam === 'home' || dangerAttacksKef >= 1.2 && dangerAttacksKef <= 1.5 && advantageTeam === 'away') && dangerAttacksDiff >= 3 && oddsKef >= 0.5 && oddsKef <= 1.2)212    //Ñедди213    //return (advantageTeam === 'away' && dangerAttacksDiff >= 3 && attacksRatioKefAway >= 1.2 && oddsKef >= 0.3 && oddsKef <= 1.2 && dangerAttacksSumm >= 18)214  } else {215    return false216  }217}218function trendAttacks(item) {219  //return item.view && item.view.stats && item.view.stats.on_target && item.view.stats.attacks && item.view.stats.dangerous_attacks220  if (item.trends && item.trends.dangerous_attacks) {221    let homeDangerAttacks;222    let awayDangerAttacks;223    let home45 = _.find(item.trends.dangerous_attacks.home, function(item) {224      return item.time_str === '65'225    })226    let home64 = _.find(item.trends.dangerous_attacks.home, function(item) {227      return item.time_str === '79'228    })229    let away45 = _.find(item.trends.dangerous_attacks.away, function(item) {230      return item.time_str === '65'231    })232    let away64 = _.find(item.trends.dangerous_attacks.away, function(item) {233      return item.time_str === '79'234    })235    if (home45 && home64 && away45 && away64) {236      homeDangerAttacks = home64.val - home45.val;237      awayDangerAttacks = away64.val - away45.val;238      let dangerAttacksKef;239      if (homeDangerAttacks > awayDangerAttacks) {240        dangerAttacksKef = homeDangerAttacks/awayDangerAttacks241      } else {242        dangerAttacksKef = awayDangerAttacks/homeDangerAttacks243      }244      return (dangerAttacksKef >= 1.5)245    } else {246      return false247    }248  } else {249    return false250  }251}252function mapTrendAttacks(item) {253  //return item.view && item.view.stats && item.view.stats.on_target && item.view.stats.attacks && item.view.stats.dangerous_attacks254  if (item.trends && item.trends.dangerous_attacks) {255    let homeDangerAttacks;256    let awayDangerAttacks;257    let home45 = _.find(item.trends.dangerous_attacks.home, function(item) {258      return item.time_str === '65'259    })260    let home64 = _.find(item.trends.dangerous_attacks.home, function(item) {261      return item.time_str === '79'262    })263    let away45 = _.find(item.trends.dangerous_attacks.away, function(item) {264      return item.time_str === '65'265    })266    let away64 = _.find(item.trends.dangerous_attacks.away, function(item) {267      return item.time_str === '79'268    })269    if (home45 && home64 && away45 && away64) {270      homeDangerAttacks = home64.val - home45.val;271      awayDangerAttacks = away64.val - away45.val;272      item.homeDangerAttacks = homeDangerAttacks;273      item.awayDangerAttacks = awayDangerAttacks;274      return item275    } else {276      return false277    }278  } else {279    return false280  }281}282function currentWinner(item) {283  if (item.odds['1_1'] && parseFloat(item.odds['1_1'][0].home_od) > 1) {284    let winnerOdds = item.odds['1_1'];285    let currentWinnerOdd = winnerOdds[0];286    let dangerAttacksKef = parseInt(item.view.stats.dangerous_attacks[0])/parseInt(item.view.stats.dangerous_attacks[1]);287    if (dangerAttacksKef > 1) {288      if (parseFloat(currentWinnerOdd.home_od) >= 1.8 && parseFloat(currentWinnerOdd.home_od) <= 5) {289        return true290      } else {291        return false292      }293    } else {294      if (parseFloat(currentWinnerOdd.away_od) >= 1.8 && parseFloat(currentWinnerOdd.away_od) <= 5 ) {295        return true296      } else {297        return false298      }299    }300    /*if (parseInt(item.view.stats.dangerous_attacks[0]) > parseInt(item.view.stats.dangerous_attacks[1])) {301      if (parseFloat(currentWinnerOdd.home_od) >= 1.8 && parseFloat(currentWinnerOdd.home_od) <= 2.8) {302        return true303      } else {304        return false305      }306    } else {307      if (parseFloat(currentWinnerOdd.away_od) >= 1.8 && parseFloat(currentWinnerOdd.away_od) <= 2.8) {308        return true309      } else {310        return false311      }312    }*/313  }314}315function halfTimeWinnerOdds(item) {316  //return true317  if (item.odds['1_8'] && item.odds['1_8'][0] && parseFloat(item.odds['1_8'][0].draw_od) > 1) {318    //return true319    let winnerOdds = item.odds['1_8'];320    let currentWinnerOdd = winnerOdds[0];321    if (parseFloat(currentWinnerOdd.draw_od) >= 1.75) {322      return true323    } else {324      return false325    }326    /*if (parseInt(item.view.stats.dangerous_attacks[0]) > parseInt(item.view.stats.dangerous_attacks[1])) {327      if (parseFloat(currentWinnerOdd.home_od) >= 1.8 && parseFloat(currentWinnerOdd.home_od) <= 2.8) {328        return true329      } else {330        return false331      }332    } else {333      if (parseFloat(currentWinnerOdd.away_od) >= 1.8 && parseFloat(currentWinnerOdd.away_od) <= 2.8) {334        return true335      } else {336        return false337      }338    }*/339  }340}341function favoriteLoses(item) {342  if (item.view.scores && item.view.scores['2'] && item.odds['1_1'] && parseFloat(item.odds['1_1'][0].home_od) > 1) {343    if (parseFloat(item.odds['1_1'][0].home_od) < 2 && item.view.scores['2'].home < item.view.scores['2'].away) {344      return true345    } else if (parseFloat(item.odds['1_1'][0].away_od) < 2 && item.view.scores['2'].home > item.view.scores['2'].away) {346      return true347    }348  } else {349    return false350  }351}352function currentTB1stHalf(item) {353  if (item.odds && item.odds['1_6'] && item.odds['1_6']['0']) {354    if (item.odds['1_6']['0'].over_od <= 1.95) {355      return true;356    } else {357      return false358    }359  } else {360    return false361  }362}363export const filterFunctions = {364  startTB: startTB,365  leagueName: leagueName,366  attacksBot1: attacksBot1,367  attacksBot2: attacksBot2,368  attacksBot3: attacksBot3,369  attacksBotCorporation: attacksBotCorporation,370  totalGoals: totalGoals,371  attacks: attacks,372  currentWinner: currentWinner,373  startResultOdd: startResultOdd,374  halfTimeWinnerOdds: halfTimeWinnerOdds,375  favoriteLoses: favoriteLoses,376  currentTB1stHalf: currentTB1stHalf,377  goalsDraw: goalsDraw,378  trendAttacks: trendAttacks,379  mapTrendAttacks: mapTrendAttacks,380  attacksBotTM: attacksBotTM...stats.js
Source:stats.js  
1/*2 *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.3 *4 *  Use of this source code is governed by a BSD-style license5 *  that can be found in the LICENSE file in the root of the source6 *  tree.7 */8/* More information about these options at jshint.com/docs/options */9/* exported computeBitrate, computeE2EDelay, computeRate,10   enumerateStats, extractStatAsInt, refreshStats */11'use strict';12// Return the integer stat |statName| from the object with type |statObj| in13// |stats|, or null if not present.14function extractStatAsInt(stats, statObj, statName) {15  // Ignore stats that have a 'nullish' value.16  // The correct fix is indicated in17  // https://code.google.com/p/webrtc/issues/detail?id=3377.18  var str = extractStat(stats, statObj, statName);19  if (str) {20    var val = parseInt(str);21    if (val !== -1) {22      return val;23    }24  }25  return null;26}27// Return the stat |statName| from the object with type |statObj| in |stats|28// as a string, or null if not present.29function extractStat(stats, statObj, statName) {30  var report = getStatsReport(stats, statObj, statName);31  if (report && report[statName] !== -1) {32    return report[statName];33  }34  return null;35}36// Return the stats report with type |statObj| in |stats|, with the stat37// |statName| (if specified), and value |statVal| (if specified). Return38// undef if not present.39function getStatsReport(stats, statObj, statName, statVal) {40  var result = null;41  if (stats) {42    stats.forEach(function(report, stat) {43      if (report.type === statObj) {44        var found = true;45        // If |statName| is present, ensure |report| has that stat.46        // If |statVal| is present, ensure the value matches.47        if (statName) {48          var val = statName === 'id' ? report.id : report[statName];49          found = (statVal !== undefined) ? (val === statVal) : val;50        }51        if (found) {52          result = report;53        }54      }55    });56  }57  return result;58}59// Enumerates the new standard compliant stats using local and remote track ids.60function enumerateStats(stats, localTrackIds, remoteTrackIds) {61  // Create an object structure with all the needed stats and types that we care62  // about. This allows to map the getStats stats to other stats names.63  var statsObject = {64    audio: {65      local: {66        audioLevel: 0.0,67        bytesSent: 0,68        clockRate: 0,69        codecId: '',70        mimeType: '',71        packetsSent: 0,72        payloadType: 0,73        timestamp: 0.0,74        trackId: '',75        transportId: '',76      },77      remote: {78        audioLevel: 0.0,79        bytesReceived: 0,80        clockRate: 0,81        codecId: '',82        fractionLost: 0,83        jitter: 0,84        mimeType: '',85        packetsLost: 0,86        packetsReceived: 0,87        payloadType: 0,88        timestamp: 0.0,89        trackId: '',90        transportId: '',91      }92    },93    video: {94      local: {95        bytesSent: 0,96        clockRate: 0,97        codecId: '',98        firCount: 0,99        framesEncoded: 0,100        frameHeight: 0,101        framesSent: 0,102        frameWidth: 0,103        nackCount: 0,104        packetsSent: 0,105        payloadType: 0,106        pliCount: 0,107        qpSum: 0,108        timestamp: 0.0,109        trackId: '',110        transportId: '',111      },112      remote: {113        bytesReceived: 0,114        clockRate: 0,115        codecId: '',116        firCount: 0,117        fractionLost: 0,118        frameHeight: 0,119        framesDecoded: 0,120        framesDropped: 0,121        framesReceived: 0,122        frameWidth: 0,123        nackCount: 0,124        packetsLost: 0,125        packetsReceived: 0,126        payloadType: 0,127        pliCount: 0,128        qpSum: 0,129        timestamp: 0.0,130        trackId: '',131        transportId: '',132      }133    },134    connection: {135      availableOutgoingBitrate: 0,136      bytesReceived: 0,137      bytesSent: 0,138      consentRequestsSent: 0,139      currentRoundTripTime: 0.0,140      localCandidateId: '',141      localCandidateType: '',142      localIp: '',143      localPort: 0,144      localPriority: 0,145      localProtocol: '',146      remoteCandidateId: '',147      remoteCandidateType: '',148      remoteIp: '',149      remotePort: 0,150      remotePriority: 0,151      remoteProtocol: '',152      requestsReceived: 0,153      requestsSent: 0,154      responsesReceived: 0,155      responsesSent: 0,156      timestamp: 0.0,157      totalRoundTripTime: 0.0,158    }159  };160  // Need to find the codec, local and remote ID's first.161  if (stats) {162    stats.forEach(function(report, stat) {163      switch(report.type) {164        case 'outbound-rtp':165          if (report.hasOwnProperty('trackId')) {166            if (report.trackId.indexOf(localTrackIds.audio) !== -1) {167              statsObject.audio.local.bytesSent = report.bytesSent;168              statsObject.audio.local.codecId = report.codecId;169              statsObject.audio.local.packetsSent = report.packetsSent;170              statsObject.audio.local.timestamp = report.timestamp;171              statsObject.audio.local.trackId = report.trackId;172              statsObject.audio.local.transportId = report.transportId;173            }174            if (report.trackId.indexOf(localTrackIds.video) !== -1) {175              statsObject.video.local.bytesSent = report.bytesSent;176              statsObject.video.local.codecId = report.codecId;177              statsObject.video.local.firCount = report.firCount;178              statsObject.video.local.framesEncoded = report.frameEncoded;179              statsObject.video.local.framesSent = report.framesSent;180              statsObject.video.local.packetsSent = report.packetsSent;181              statsObject.video.local.pliCount = report.pliCount;182              statsObject.video.local.qpSum = report.qpSum;183              statsObject.video.local.timestamp = report.timestamp;184              statsObject.video.local.trackId = report.trackId;185              statsObject.video.local.transportId = report.transportId;186            }187          }188          break;189        case 'inbound-rtp':190          if (report.hasOwnProperty('trackId')) {191            if(report.trackId.indexOf(remoteTrackIds.audio) !== -1) {192              statsObject.audio.remote.bytesReceived = report.bytesReceived;193              statsObject.audio.remote.codecId = report.codecId;194              statsObject.audio.remote.fractionLost = report.fractionLost;195              statsObject.audio.remote.jitter = report.jitter;196              statsObject.audio.remote.packetsLost = report.packetsLost;197              statsObject.audio.remote.packetsReceived = report.packetsReceived;198              statsObject.audio.remote.timestamp = report.timestamp;199              statsObject.audio.remote.trackId = report.trackId;200              statsObject.audio.remote.transportId = report.transportId;201            }202            if (report.trackId.indexOf(remoteTrackIds.video) !== -1) {203              statsObject.video.remote.bytesReceived = report.bytesReceived;204              statsObject.video.remote.codecId = report.codecId;205              statsObject.video.remote.firCount = report.firCount;206              statsObject.video.remote.fractionLost = report.fractionLost;207              statsObject.video.remote.nackCount = report.nackCount;208              statsObject.video.remote.packetsLost = report.patsLost;209              statsObject.video.remote.packetsReceived = report.packetsReceived;210              statsObject.video.remote.pliCount = report.pliCount;211              statsObject.video.remote.qpSum = report.qpSum;212              statsObject.video.remote.timestamp = report.timestamp;213              statsObject.video.remote.trackId = report.trackId;214              statsObject.video.remote.transportId = report.transportId;215            }216          }217          break;218        case 'candidate-pair':219          if (report.hasOwnProperty('availableOutgoingBitrate')) {220            statsObject.connection.availableOutgoingBitrate =221                report.availableOutgoingBitrate;222            statsObject.connection.bytesReceived = report.bytesReceived;223            statsObject.connection.bytesSent = report.bytesSent;224            statsObject.connection.consentRequestsSent =225                report.consentRequestsSent;226            statsObject.connection.currentRoundTripTime =227                report.currentRoundTripTime;228            statsObject.connection.localCandidateId = report.localCandidateId;229            statsObject.connection.remoteCandidateId = report.remoteCandidateId;230            statsObject.connection.requestsReceived = report.requestsReceived;231            statsObject.connection.requestsSent = report.requestsSent;232            statsObject.connection.responsesReceived = report.responsesReceived;233            statsObject.connection.responsesSent = report.responsesSent;234            statsObject.connection.timestamp = report.timestamp;235            statsObject.connection.totalRoundTripTime =236               report.totalRoundTripTime;237          }238          break;239        default:240          return;241      }242    }.bind());243    // Using the codec, local and remote candidate ID's to find the rest of the244    // relevant stats.245    stats.forEach(function(report) {246      switch(report.type) {247        case 'track':248          if (report.hasOwnProperty('trackIdentifier')) {249            if (report.trackIdentifier.indexOf(localTrackIds.video) !== -1) {250              statsObject.video.local.frameHeight = report.frameHeight;251              statsObject.video.local.framesSent = report.framesSent;252              statsObject.video.local.frameWidth = report.frameWidth;253            }254            if (report.trackIdentifier.indexOf(remoteTrackIds.video) !== -1) {255              statsObject.video.remote.frameHeight = report.frameHeight;256              statsObject.video.remote.framesDecoded = report.framesDecoded;257              statsObject.video.remote.framesDropped = report.framesDropped;258              statsObject.video.remote.framesReceived = report.framesReceived;259              statsObject.video.remote.frameWidth = report.frameWidth;260            }261            if (report.trackIdentifier.indexOf(localTrackIds.audio) !== -1) {262              statsObject.audio.local.audioLevel = report.audioLevel ;263            }264            if (report.trackIdentifier.indexOf(remoteTrackIds.audio) !== -1) {265              statsObject.audio.remote.audioLevel = report.audioLevel;266            }267          }268          break;269        case 'codec':270          if (report.hasOwnProperty('id')) {271            if (report.id.indexOf(statsObject.audio.local.codecId) !== -1) {272              statsObject.audio.local.clockRate = report.clockRate;273              statsObject.audio.local.mimeType = report.mimeType;274              statsObject.audio.local.payloadType = report.payloadType;275            }276            if (report.id.indexOf(statsObject.audio.remote.codecId) !== -1) {277              statsObject.audio.remote.clockRate = report.clockRate;278              statsObject.audio.remote.mimeType = report.mimeType;279              statsObject.audio.remote.payloadType = report.payloadType;280            }281            if (report.id.indexOf(statsObject.video.local.codecId) !== -1) {282              statsObject.video.local.clockRate = report.clockRate;283              statsObject.video.local.mimeType = report.mimeType;284              statsObject.video.local.payloadType = report.payloadType;285            }286            if (report.id.indexOf(statsObject.video.remote.codecId) !== -1) {287              statsObject.video.remote.clockRate = report.clockRate;288              statsObject.video.remote.mimeType = report.mimeType;289              statsObject.video.remote.payloadType = report.payloadType;290            }291          }292          break;293        case 'local-candidate':294          if (report.hasOwnProperty('id')) {295            if (report.id.indexOf(296                statsObject.connection.localCandidateId) !== -1) {297              statsObject.connection.localIp = report.ip;298              statsObject.connection.localPort = report.port;299              statsObject.connection.localPriority = report.priority;300              statsObject.connection.localProtocol = report.protocol;301              statsObject.connection.localType = report.candidateType;302            }303          }304          break;305        case 'remote-candidate':306          if (report.hasOwnProperty('id')) {307            if (report.id.indexOf(308                statsObject.connection.remoteCandidateId) !== -1) {309              statsObject.connection.remoteIp = report.ip;310              statsObject.connection.remotePort = report.port;311              statsObject.connection.remotePriority = report.priority;312              statsObject.connection.remoteProtocol = report.protocol;313              statsObject.connection.remoteType = report.candidateType;314            }315          }316          break;317        default:318          return;319      }320    }.bind());321  }322  return statsObject;323}324// Takes two stats reports and determines the rate based on two counter readings325// and the time between them (which is in units of milliseconds).326function computeRate(newReport, oldReport, statName) {327  var newVal = newReport[statName];328  var oldVal = (oldReport) ? oldReport[statName] : null;329  if (newVal === null || oldVal === null) {330    return null;331  }332  return (newVal - oldVal) / (newReport.timestamp - oldReport.timestamp) * 1000;333}334// Convert a byte rate to a bit rate.335function computeBitrate(newReport, oldReport, statName) {336  return computeRate(newReport, oldReport, statName) * 8;337}338// Computes end to end delay based on the capture start time (in NTP format)339// and the current render time (in seconds since start of render).340function computeE2EDelay(captureStart, remoteVideoCurrentTime) {341  if (!captureStart) {342    return null;343  }344  // Adding offset (milliseconds between 1900 and 1970) to get NTP time.345  var nowNTP = Date.now() + 2208988800000;346  return nowNTP - captureStart - remoteVideoCurrentTime * 1000;...ideologies.js
Source:ideologies.js  
1ideologies = [2    {3        "name": "Anarcho-Communism",4        "stats": {5            "econ": 100,6            "dipl": 50,7            "govt": 100,8            "scty": 909        }10    },11    {12        "name": "Libertarian Communism",13        "stats": {14            "econ": 100,15            "dipl": 70,16            "govt": 80,17            "scty": 8018        }19    },20    {21        "name": "Trotskyism",22        "stats": {23            "econ": 100,24            "dipl": 100,25            "govt": 60,26            "scty": 8027        }28    },29    {30        "name": "Marxism",31        "stats": {32            "econ": 100,33            "dipl": 70,34            "govt": 40,35            "scty": 8036        }37    },38    {39        "name": "De Leonism",40        "stats": {41            "econ": 100,42            "dipl": 30,43            "govt": 30,44            "scty": 8045        }46    },47    {48        "name": "Leninism",49        "stats": {50            "econ": 100,51            "dipl": 40,52            "govt": 20,53            "scty": 7054        }55    },56    {57        "name": "Stalinism/Maoism",58        "stats": {59            "econ": 100,60            "dipl": 20,61            "govt": 0,62            "scty": 6063        }64    },65    {66        "name": "Religious Communism",67        "stats": {68            "econ": 100,69            "dipl": 50,70            "govt": 30,71            "scty": 3072        }73    },74    {75        "name": "State Socialism",76        "stats": {77            "econ": 80,78            "dipl": 30,79            "govt": 30,80            "scty": 7081        }82    },83    {84        "name": "Theocratic Socialism",85        "stats": {86            "econ": 80,87            "dipl": 50,88            "govt": 30,89            "scty": 2090        }91    },92    {93        "name": "Religious Socialism",94        "stats": {95            "econ": 80,96            "dipl": 50,97            "govt": 70,98            "scty": 2099        }100    },101    {102        "name": "Democratic Socialism",103        "stats": {104            "econ": 80,105            "dipl": 50,106            "govt": 50,107            "scty": 80108        }109    },110    {111        "name": "Revolutionary Socialism",112        "stats": {113            "econ": 80,114            "dipl": 20,115            "govt": 50,116            "scty": 70117        }118    },119    {120        "name": "Libertarian Socialism",121        "stats": {122            "econ": 80,123            "dipl": 80,124            "govt": 80,125            "scty": 80126        }127    },128    {129        "name": "Anarcho-Syndicalism",130        "stats": {131            "econ": 80,132            "dipl": 50,133            "govt": 100,134            "scty": 80135        }136    },137    {138        "name": "Left-Wing Populism",139        "stats": {140            "econ": 60,141            "dipl": 40,142            "govt": 30,143            "scty": 70144        }145    },146    {147        "name": "Theocratic Distributism",148        "stats": {149            "econ": 60,150            "dipl": 40,151            "govt": 30,152            "scty": 20153        }154    },155    {156        "name": "Distributism",157        "stats": {158            "econ": 60,159            "dipl": 50,160            "govt": 50,161            "scty": 20162        }163    },164    {165        "name": "Social Liberalism",166        "stats": {167            "econ": 60,168            "dipl": 60,169            "govt": 60,170            "scty": 80171        }172    },173    {174        "name": "Christian Democracy",175        "stats": {176            "econ": 60,177            "dipl": 60,178            "govt": 50,179            "scty": 30180        }181    },182    {183        "name": "Social Democracy",184        "stats": {185            "econ": 60,186            "dipl": 70,187            "govt": 60,188            "scty": 80189        }190    },191    {192        "name": "Progressivism",193        "stats": {194            "econ": 60,195            "dipl": 80,196            "govt": 60,197            "scty": 100198        }199    },200    {201        "name": "Anarcho-Mutualism",202        "stats": {203            "econ": 60,204            "dipl": 50,205            "govt": 100,206            "scty": 70207        }208    },209    {210        "name": "National Totalitarianism",211        "stats": {212            "econ": 50,213            "dipl": 20,214            "govt": 0,215            "scty": 50216        }217    },218    {219        "name": "Global Totalitarianism",220        "stats": {221            "econ": 50,222            "dipl": 80,223            "govt": 0,224            "scty": 50225        }226    },227    {228        "name": "Technocracy",229        "stats": {230            "econ": 60,231            "dipl": 60,232            "govt": 20,233            "scty": 70234        }235    },236    {237        "name": "Centrist",238        "stats": {239            "econ": 50,240            "dipl": 50,241            "govt": 50,242            "scty": 50243        }244    },245    {246        "name": "Liberalism",247        "stats": {248            "econ": 50,249            "dipl": 60,250            "govt": 60,251            "scty": 60252        }253    },254    {255        "name": "Religious Anarchism",256        "stats": {257            "econ": 50,258            "dipl": 50,259            "govt": 100,260            "scty": 20261        }262    },263    {264        "name": "Right-Wing Populism",265        "stats": {266            "econ": 40,267            "dipl": 30,268            "govt": 30,269            "scty": 30270        }271    },272    {273        "name": "Moderate Conservatism",274        "stats": {275            "econ": 40,276            "dipl": 40,277            "govt": 50,278            "scty": 30279        }280    },281    {282        "name": "Reactionary",283        "stats": {284            "econ": 40,285            "dipl": 40,286            "govt": 40,287            "scty": 10288        }289    },290    {291        "name": "Social Libertarianism",292        "stats": {293            "econ": 60,294            "dipl": 70,295            "govt": 80,296            "scty": 70297        }298    },299    {300        "name": "Libertarianism",301        "stats": {302            "econ": 40,303            "dipl": 60,304            "govt": 80,305            "scty": 60306        }307    },308    {309        "name": "Anarcho-Egoism",310        "stats": {311            "econ": 40,312            "dipl": 50,313            "govt": 100,314            "scty": 50315        }316    },317    {318        "name": "Nazism",319        "stats": {320            "econ": 40,321            "dipl": 0,322            "govt": 0,323            "scty": 5324        }325    },326    {327        "name": "Autocracy",328        "stats": {329            "econ": 50,330            "dipl": 20,331            "govt": 20,332            "scty": 50333        }334    },335    {336        "name": "Fascism",337        "stats": {338            "econ": 40,339            "dipl": 20,340            "govt": 20,341            "scty": 20342        }343    },344    {345        "name": "Capitalist Fascism",346        "stats": {347            "econ": 20,348            "dipl": 20,349            "govt": 20,350            "scty": 20351        }352    },353    {354        "name": "Conservatism",355        "stats": {356            "econ": 30,357            "dipl": 40,358            "govt": 40,359            "scty": 20360        }361    },362    {363        "name": "Neo-Liberalism",364        "stats": {365            "econ": 30,366            "dipl": 30,367            "govt": 50,368            "scty": 60369        }370    },371    {372        "name": "Classical Liberalism",373        "stats": {374            "econ": 30,375            "dipl": 60,376            "govt": 60,377            "scty": 80378        }379    },380    {381        "name": "Authoritarian Capitalism",382        "stats": {383            "econ": 20,384            "dipl": 30,385            "govt": 20,386            "scty": 40387        }388    },389    {390        "name": "State Capitalism",391        "stats": {392            "econ": 20,393            "dipl": 50,394            "govt": 30,395            "scty": 50396        }397    },398    {399        "name": "Neo-Conservatism",400        "stats": {401            "econ": 20,402            "dipl": 20,403            "govt": 40,404            "scty": 20405        }406    },407    {408        "name": "Fundamentalism",409        "stats": {410            "econ": 20,411            "dipl": 30,412            "govt": 30,413            "scty": 5414        }415    },416    {417        "name": "Libertarian Capitalism",418        "stats": {419            "econ": 20,420            "dipl": 50,421            "govt": 80,422            "scty": 60423        }424    },425    {426        "name": "Market Anarchism",427        "stats": {428            "econ": 20,429            "dipl": 50,430            "govt": 100,431            "scty": 50432        }433    },434    {435        "name": "Objectivism",436        "stats": {437            "econ": 10,438            "dipl": 50,439            "govt": 90,440            "scty": 40441        }442    },443    {444        "name": "Totalitarian Capitalism",445        "stats": {446            "econ": 0,447            "dipl": 30,448            "govt": 0,449            "scty": 50450        }451    },452    {453        "name": "Ultra-Capitalism",454        "stats": {455            "econ": 0,456            "dipl": 40,457            "govt": 50,458            "scty": 50459        }460    },461    {462        "name": "Anarcho-Capitalism",463        "stats": {464            "econ": 0,465            "dipl": 50,466            "govt": 100,467            "scty": 50468        }469    }
...Compiler-caching.test.js
Source:Compiler-caching.test.js  
1/* globals describe, it */2"use strict";3const path = require("path");4const fs = require("fs");5const rimraf = require("rimraf");6const webpack = require("../");7const WebpackOptionsDefaulter = require("../lib/WebpackOptionsDefaulter");8let fixtureCount = 0;9describe("Compiler (caching)", () => {10	jest.setTimeout(15000);11	function compile(entry, options, callback) {12		options.mode = "none";13		options = new WebpackOptionsDefaulter().process(options);14		options.cache = true;15		options.entry = entry;16		options.optimization.minimize = false;17		options.context = path.join(__dirname, "fixtures");18		options.output.path = "/";19		options.output.filename = "bundle.js";20		options.output.pathinfo = true;21		const logs = {22			mkdirp: [],23			writeFile: []24		};25		const c = webpack(options);26		const files = {};27		c.outputFileSystem = {28			join() {29				return [].join.call(arguments, "/").replace(/\/+/g, "/");30			},31			mkdirp(path, callback) {32				logs.mkdirp.push(path);33				callback();34			},35			writeFile(name, content, callback) {36				logs.writeFile.push(name, content);37				files[name] = content.toString("utf-8");38				callback();39			}40		};41		c.hooks.compilation.tap(42			"CompilerCachingTest",43			compilation => (compilation.bail = true)44		);45		let compilerIteration = 1;46		function runCompiler(options, callback) {47			if (typeof options === "function") {48				callback = options;49				options = {};50			}51			c.run((err, stats) => {52				if (err) throw err;53				expect(typeof stats).toBe("object");54				stats = stats.toJson({55					modules: true,56					reasons: true57				});58				expect(typeof stats).toBe("object");59				expect(stats).toHaveProperty("errors");60				expect(Array.isArray(stats.errors)).toBe(true);61				if (options.expectErrors) {62					expect(stats.errors).toHaveLength(options.expectErrors);63				} else {64					if (stats.errors.length > 0) {65						expect(typeof stats.errors[0]).toBe("string");66						throw new Error(stats.errors[0]);67					}68				}69				stats.logs = logs;70				callback(stats, files, compilerIteration++);71			});72		}73		runCompiler(callback);74		return {75			compilerInstance: c,76			runAgain: runCompiler77		};78	}79	const tempFixturePath = path.join(80		__dirname,81		"fixtures",82		"temp-cache-fixture"83	);84	function cleanup() {85		rimraf.sync(`${tempFixturePath}-*`);86	}87	beforeAll(cleanup);88	afterAll(cleanup);89	function createTempFixture() {90		const fixturePath = `${tempFixturePath}-${fixtureCount}`;91		const aFilepath = path.join(fixturePath, "a.js");92		const cFilepath = path.join(fixturePath, "c.js");93		// Remove previous copy if present94		rimraf.sync(fixturePath);95		// Copy over file since we"ll be modifying some of them96		fs.mkdirSync(fixturePath);97		fs.createReadStream(path.join(__dirname, "fixtures", "a.js")).pipe(98			fs.createWriteStream(aFilepath)99		);100		fs.createReadStream(path.join(__dirname, "fixtures", "c.js")).pipe(101			fs.createWriteStream(cFilepath)102		);103		fixtureCount++;104		return {105			rootPath: fixturePath,106			aFilepath: aFilepath,107			cFilepath: cFilepath108		};109	}110	it("should cache single file (with manual 1s wait) ", done => {111		const options = {};112		const tempFixture = createTempFixture();113		const helper = compile(tempFixture.cFilepath, options, (stats, files) => {114			// Not cached the first time115			expect(stats.assets[0].name).toBe("bundle.js");116			expect(stats.assets[0].emitted).toBe(true);117			helper.runAgain((stats, files, iteration) => {118				// Cached the second run119				expect(stats.assets[0].name).toBe("bundle.js");120				expect(stats.assets[0].emitted).toBe(false);121				const aContent = fs122					.readFileSync(tempFixture.aFilepath)123					.toString()124					.replace("This is a", "This is a MODIFIED");125				setTimeout(() => {126					fs.writeFileSync(tempFixture.aFilepath, aContent);127					helper.runAgain((stats, files, iteration) => {128						// Cached the third run129						expect(stats.assets[0].name).toBe("bundle.js");130						expect(stats.assets[0].emitted).toBe(true);131						done();132					});133				}, 1100);134			});135		});136	});137	it("should cache single file (even with no timeout) ", done => {138		const options = {};139		const tempFixture = createTempFixture();140		const helper = compile(tempFixture.cFilepath, options, (stats, files) => {141			// Not cached the first time142			expect(stats.assets[0].name).toBe("bundle.js");143			expect(stats.assets[0].emitted).toBe(true);144			helper.runAgain((stats, files, iteration) => {145				// Cached the second run146				expect(stats.assets[0].name).toBe("bundle.js");147				expect(stats.assets[0].emitted).toBe(false);148				expect(files["/bundle.js"]).toMatch("This is a");149				const aContent = fs150					.readFileSync(tempFixture.aFilepath)151					.toString()152					.replace("This is a", "This is a MODIFIED");153				fs.writeFileSync(tempFixture.aFilepath, aContent);154				helper.runAgain((stats, files, iteration) => {155					// Cached the third run156					expect(stats.assets[0].name).toBe("bundle.js");157					expect(stats.assets[0].emitted).toBe(true);158					expect(files["/bundle.js"]).toMatch("This is a MODIFIED");159					done();160				});161			});162		});163	});164	it("should only build when modified (with manual 2s wait)", done => {165		const options = {};166		const tempFixture = createTempFixture();167		const helper = compile(tempFixture.cFilepath, options, (stats, files) => {168			// Built the first time169			expect(stats.modules[0].name).toMatch("c.js");170			expect(stats.modules[0].built).toBe(true);171			expect(stats.modules[1].name).toMatch("a.js");172			expect(stats.modules[1].built).toBe(true);173			setTimeout(() => {174				helper.runAgain((stats, files, iteration) => {175					// Not built when cached the second run176					expect(stats.modules[0].name).toMatch("c.js");177					// expect(stats.modules[0].built).toBe(false);178					expect(stats.modules[1].name).toMatch("a.js");179					// expect(stats.modules[1].built).toBe(false);180					const aContent = fs181						.readFileSync(tempFixture.aFilepath)182						.toString()183						.replace("This is a", "This is a MODIFIED");184					setTimeout(() => {185						fs.writeFileSync(tempFixture.aFilepath, aContent);186						helper.runAgain((stats, files, iteration) => {187							// And only a.js built after it was modified188							expect(stats.modules[0].name).toMatch("c.js");189							expect(stats.modules[0].built).toBe(false);190							expect(stats.modules[1].name).toMatch("a.js");191							expect(stats.modules[1].built).toBe(true);192							done();193						});194					}, 2100);195				});196			}, 4100);197		});198	});199	it("should build when modified (even with no timeout)", done => {200		const options = {};201		const tempFixture = createTempFixture();202		const helper = compile(tempFixture.cFilepath, options, (stats, files) => {203			// Built the first time204			expect(stats.modules[0].name).toMatch("c.js");205			expect(stats.modules[0].built).toBe(true);206			expect(stats.modules[1].name).toMatch("a.js");207			expect(stats.modules[1].built).toBe(true);208			helper.runAgain((stats, files, iteration) => {209				// Not built when cached the second run210				expect(stats.modules[0].name).toMatch("c.js");211				// expect(stats.modules[0].built).toBe(false);212				expect(stats.modules[1].name).toMatch("a.js");213				// expect(stats.modules[1].built).toBe(false);214				const aContent = fs215					.readFileSync(tempFixture.aFilepath)216					.toString()217					.replace("This is a", "This is a MODIFIED");218				fs.writeFileSync(tempFixture.aFilepath, aContent);219				helper.runAgain((stats, files, iteration) => {220					// And only a.js built after it was modified221					expect(stats.modules[0].name).toMatch("c.js");222					// expect(stats.modules[0].built).toBe(false);223					expect(stats.modules[1].name).toMatch("a.js");224					expect(stats.modules[1].built).toBe(true);225					done();226				});227			});228		});229	});...stats_table.js
Source:stats_table.js  
1// Copyright (c) 2013 The Chromium Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4/**5 * Maintains the stats table.6 * @param {SsrcInfoManager} ssrcInfoManager The source of the ssrc info.7 */8var StatsTable = (function(ssrcInfoManager) {9  'use strict';10  /**11   * @param {SsrcInfoManager} ssrcInfoManager The source of the ssrc info.12   * @constructor13   */14  function StatsTable(ssrcInfoManager) {15    /**16     * @type {SsrcInfoManager}17     * @private18     */19    this.ssrcInfoManager_ = ssrcInfoManager;20  }21  StatsTable.prototype = {22    /**23     * Adds |report| to the stats table of |peerConnectionElement|.24     *25     * @param {!Element} peerConnectionElement The root element.26     * @param {!Object} report The object containing stats, which is the object27     *     containing timestamp and values, which is an array of strings, whose28     *     even index entry is the name of the stat, and the odd index entry is29     *     the value.30     */31    addStatsReport: function(peerConnectionElement, report) {32      var statsTable = this.ensureStatsTable_(peerConnectionElement, report);33      if (report.stats) {34        this.addStatsToTable_(statsTable,35                              report.stats.timestamp, report.stats.values);36      }37    },38    /**39     * Ensure the DIV container for the stats tables is created as a child of40     * |peerConnectionElement|.41     *42     * @param {!Element} peerConnectionElement The root element.43     * @return {!Element} The stats table container.44     * @private45     */46    ensureStatsTableContainer_: function(peerConnectionElement) {47      var containerId = peerConnectionElement.id + '-table-container';48      var container = $(containerId);49      if (!container) {50        container = document.createElement('div');51        container.id = containerId;52        container.className = 'stats-table-container';53        var head = document.createElement('div');54        head.textContent = 'Stats Tables';55        container.appendChild(head);56        peerConnectionElement.appendChild(container);57      }58      return container;59    },60    /**61     * Ensure the stats table for track specified by |report| of PeerConnection62     * |peerConnectionElement| is created.63     *64     * @param {!Element} peerConnectionElement The root element.65     * @param {!Object} report The object containing stats, which is the object66     *     containing timestamp and values, which is an array of strings, whose67     *     even index entry is the name of the stat, and the odd index entry is68     *     the value.69     * @return {!Element} The stats table element.70     * @private71     */72     ensureStatsTable_: function(peerConnectionElement, report) {73      var tableId = peerConnectionElement.id + '-table-' + report.id;74      var table = $(tableId);75      if (!table) {76        var container = this.ensureStatsTableContainer_(peerConnectionElement);77        var details = document.createElement('details');78        container.appendChild(details);79        var summary = document.createElement('summary');80        summary.textContent = report.id;81        details.appendChild(summary);82        table = document.createElement('table');83        details.appendChild(table);84        table.id = tableId;85        table.border = 1;86        table.innerHTML = '<tr><th colspan=2></th></tr>';87        table.rows[0].cells[0].textContent = 'Statistics ' + report.id;88        if (report.type == 'ssrc') {89            table.insertRow(1);90            table.rows[1].innerHTML = '<td colspan=2></td>';91            this.ssrcInfoManager_.populateSsrcInfo(92                table.rows[1].cells[0], GetSsrcFromReport(report));93        }94      }95      return table;96    },97    /**98     * Update |statsTable| with |time| and |statsData|.99     *100     * @param {!Element} statsTable Which table to update.101     * @param {number} time The number of miliseconds since epoch.102     * @param {Array.<string>} statsData An array of stats name and value pairs.103     * @private104     */105    addStatsToTable_: function(statsTable, time, statsData) {106      var date = Date(time);107      this.updateStatsTableRow_(statsTable, 'timestamp', date.toLocaleString());108      for (var i = 0; i < statsData.length - 1; i = i + 2) {109        this.updateStatsTableRow_(statsTable, statsData[i], statsData[i + 1]);110      }111    },112    /**113     * Update the value column of the stats row of |rowName| to |value|.114     * A new row is created is this is the first report of this stats.115     *116     * @param {!Element} statsTable Which table to update.117     * @param {string} rowName The name of the row to update.118     * @param {string} value The new value to set.119     * @private120     */121    updateStatsTableRow_: function(statsTable, rowName, value) {122      var trId = statsTable.id + '-' + rowName;123      var trElement = $(trId);124      if (!trElement) {125        trElement = document.createElement('tr');126        trElement.id = trId;127        statsTable.firstChild.appendChild(trElement);128        trElement.innerHTML = '<td>' + rowName + '</td><td></td>';129      }130      trElement.cells[1].textContent = value;131      // Highlights the table for the active connection.132      if (rowName == 'googActiveConnection' && value == 'true')133        statsTable.parentElement.classList.add('stats-table-active-connection');134    }135  };136  return StatsTable;...MultiStats.unittest.js
Source:MultiStats.unittest.js  
1"use strict";2const packageJSON = require("../package.json");3const MultiStats = require("../lib/MultiStats");4const createStat = overrides => {5	return Object.assign(6		{7			hash: "foo",8			compilation: {9				name: "bar"10			},11			hasErrors: () => false,12			hasWarnings: () => false,13			toJson: () =>14				Object.assign(15					{16						hash: "foo",17						version: "version",18						warnings: [],19						errors: []20					},21					overrides22				)23		},24		overrides25	);26};27describe("MultiStats", () => {28	let packageVersion, stats, myMultiStats, result;29	beforeEach(() => {30		packageVersion = packageJSON.version;31		packageJSON.version = "1.2.3";32	});33	afterEach(() => {34		packageJSON.version = packageVersion;35	});36	describe("created", () => {37		beforeEach(() => {38			stats = [39				createStat({40					hash: "abc123"41				}),42				createStat({43					hash: "xyz890"44				})45			];46			myMultiStats = new MultiStats(stats);47		});48		it("creates a hash string", () => {49			expect(myMultiStats.hash).toBe("abc123xyz890");50		});51	});52	describe("hasErrors", () => {53		describe("when both have errors", () => {54			beforeEach(() => {55				stats = [56					createStat({57						hasErrors: () => true58					}),59					createStat({60						hasErrors: () => true61					})62				];63				myMultiStats = new MultiStats(stats);64			});65			it("returns true", () => {66				expect(myMultiStats.hasErrors()).toBe(true);67			});68		});69		describe("when one has an error", () => {70			beforeEach(() => {71				stats = [72					createStat({73						hasErrors: () => true74					}),75					createStat()76				];77				myMultiStats = new MultiStats(stats);78			});79			it("returns true", () => {80				expect(myMultiStats.hasErrors()).toBe(true);81			});82		});83		describe("when none have errors", () => {84			beforeEach(() => {85				stats = [createStat(), createStat()];86				myMultiStats = new MultiStats(stats);87			});88			it("returns false", () => {89				expect(myMultiStats.hasErrors()).toBe(false);90			});91		});92	});93	describe("hasWarnings", () => {94		describe("when both have warnings", () => {95			beforeEach(() => {96				stats = [97					createStat({98						hasWarnings: () => true99					}),100					createStat({101						hasWarnings: () => true102					})103				];104				myMultiStats = new MultiStats(stats);105			});106			it("returns true", () => {107				expect(myMultiStats.hasWarnings()).toBe(true);108			});109		});110		describe("when one has a warning", () => {111			beforeEach(() => {112				stats = [113					createStat({114						hasWarnings: () => true115					}),116					createStat()117				];118				myMultiStats = new MultiStats(stats);119			});120			it("returns true", () => {121				expect(myMultiStats.hasWarnings()).toBe(true);122			});123		});124		describe("when none have warnings", () => {125			beforeEach(() => {126				stats = [createStat(), createStat()];127				myMultiStats = new MultiStats(stats);128			});129			it("returns false", () => {130				expect(myMultiStats.hasWarnings()).toBe(false);131			});132		});133	});134	describe("toJson", () => {135		beforeEach(() => {136			stats = [137				createStat({138					hash: "abc123",139					compilation: {140						name: "abc123-compilation"141					},142					toJson: () => ({143						warnings: ["abc123-warning"],144						errors: ["abc123-error"]145					})146				}),147				createStat({148					hash: "xyz890",149					compilation: {150						name: "xyz890-compilation"151					},152					toJson: () => ({153						warnings: ["xyz890-warning-1", "xyz890-warning-2"],154						errors: []155					})156				})157			];158		});159		it("returns plain object representation", () => {160			myMultiStats = new MultiStats(stats);161			result = myMultiStats.toJson({162				version: false,163				hash: false164			});165			expect(result).toEqual({166				errors: ["(abc123-compilation) abc123-error"],167				warnings: [168					"(abc123-compilation) abc123-warning",169					"(xyz890-compilation) xyz890-warning-1",170					"(xyz890-compilation) xyz890-warning-2"171				],172				children: [173					{174						errors: ["abc123-error"],175						name: "abc123-compilation",176						warnings: ["abc123-warning"]177					},178					{179						errors: [],180						name: "xyz890-compilation",181						warnings: ["xyz890-warning-1", "xyz890-warning-2"]182					}183				]184			});185		});186		it("returns plain object representation with json set to true", () => {187			myMultiStats = new MultiStats(stats);188			result = myMultiStats.toJson(true);189			expect(result).toEqual({190				errors: ["(abc123-compilation) abc123-error"],191				warnings: [192					"(abc123-compilation) abc123-warning",193					"(xyz890-compilation) xyz890-warning-1",194					"(xyz890-compilation) xyz890-warning-2"195				],196				children: [197					{198						warnings: ["abc123-warning"],199						errors: ["abc123-error"],200						name: "abc123-compilation"201					},202					{203						warnings: ["xyz890-warning-1", "xyz890-warning-2"],204						errors: [],205						name: "xyz890-compilation"206					}207				]208			});209		});210	});211	describe("toString", () => {212		beforeEach(() => {213			stats = [214				createStat({215					hash: "abc123",216					compilation: {217						name: "abc123-compilation"218					}219				}),220				createStat({221					hash: "xyz890",222					compilation: {223						name: "xyz890-compilation"224					}225				})226			];227			myMultiStats = new MultiStats(stats);228			result = myMultiStats.toString();229		});230		it("returns string representation", () => {231			expect(result).toEqual(232				"Hash: abc123xyz890\n" +233					"Version: webpack 1.2.3\n" +234					"Child abc123-compilation:\n" +235					"    Hash: abc123\n" +236					"Child xyz890-compilation:\n" +237					"    Hash: xyz890"238			);239		});240	});...user-stats.js
Source:user-stats.js  
1//----------------------------------------------------------------------------------------------------------------------------------------------------2// User Stats Object3//----------------------------------------------------------------------------------------------------------------------------------------------------4// A high-performance wrapper for chrome.storage.sync for storing user statistics5var StatsFactory = function() {6	// Constants7	var SAVE_STATS_MIN_INTERVAL = 500; // 500ms8	// Generate a random 10-character alphanumeric string9	var getRandomId = function() {10		var randomPool = new Uint8Array(32); // 8 * 32 = 256 bits token11		crypto.getRandomValues(randomPool);12		var hex = '';13		for (var i = 0; i < randomPool.length; ++i) {14			hex += randomPool[i].toString(16);15		}16		// e.g. db18458e2782b2b77e36769c569e263a53885a9944dd0a861e5064eac16f1a17		return hex.substr(0, 10); // e.g. db18458e2718	};19	// Default stats for new users20	var DEFAULT_STATS = {21		// Date and version of first installation22		'installVer': chrome.runtime.getManifest().version,23		'installDate': (new Date()).getTime(),24		// User type: (r)egular or (p)ro25		'type': 'r',26		// userId (aka machineId) is used to anonymously identify the machine on operations like PayPal payments27		'userId': getRandomId(),28		// analyticsId is used to anonymously identify *unique* users when reporting analytics events29		'analyticsId': getRandomId()30	};31	// Class variables32	var _saveStatsTimeout = null;33	var _stats = {};34	// Internal method: save stats to cookie35	var _saveStatsToCookie = function(callback) {36		var statsToSave = {37			analyticsId: _stats.analyticsId,38			installDate: _stats.installDate,39			installVer: _stats.installVer,40			type: _stats.type41		}42		var statsJson = JSON.stringify(statsToSave);43		var cookie = {44			url: "https://darkness.app",45			name: "darkness_stats",46			value: statsJson,47			domain: "darkness.app",48			path: "/",49			expirationDate: 2051222400,50			/* Year 2035 */51		}52		chrome.cookies.set(cookie, function(cookieSet) {53			if (cookieSet) {54				log("Cookie set: ", cookieSet);55			} else {56				logWarn("Cookie set error: ", chrome.runtime.lastError);57			}58			if (callback) callback();59		})60	}61	// Internal method: load stats from chrome.storage62	var _loadStats = function(callback) {63		log('Loading stats from Chrome');64		var keysToGet = {65			'stats': DEFAULT_STATS66		};67		chrome.storage.sync.get(keysToGet, function(store) {68			// Uncomment this to test new user:69			// store = {};70			var isNewUser = false;71			if (!store || !store.stats || !store.stats.userId) {72				logWarn("Reseting to default stats:", DEFAULT_STATS);73				store.stats = DEFAULT_STATS;74				log('First-time user, set user ID to ' + store.stats['userId']);75				isNewUser = true;76			} else {77				log('Existing user with ID ' + store.stats['userId']);78			}79			_stats = store.stats;80			log('Stats loaded', _stats);81			if (isNewUser) {82				repEventByUser('users', 'new-users');83			}84			_saveStatsToCookie(function() {85				if (callback) callback();86			});87		});88	};89	// Internal method: Save stats to chrome.storage90	var _saveStats = function(callback) {91		// log('Saving stats to Chrome:', _stats);92		if (_saveStatsTimeout) {93			// Start the count again94			clearTimeout(_saveStatsTimeout);95		}96		_saveStatsTimeout = setTimeout(function() {97			var keysToSet = {98				'stats': _stats99			};100			chrome.storage.sync.set(keysToSet, function() {101				// log('Stats saved', _stats);102				_saveStatsTimeout = null;103				if (callback) callback();104			});105		}, SAVE_STATS_MIN_INTERVAL);106	};107	// Constructor108	function Stats(callback) {109		_loadStats(function() {110			_saveStats(function() {111				callback();112			});113		});114	}115	//------------------------------------------------------------------------------------------------------------------------------------------------116	// Global objects and functions117	//------------------------------------------------------------------------------------------------------------------------------------------------118	Stats.prototype.set = function(key, val) {119		_stats[key] = val;120		_saveStats();121		if (key == 'type') {122			_saveStatsToCookie();123		}124	};125	Stats.prototype.get = function(key) {126		// Migration of older users without analyticsId: create analyticsId on the fly127		if (key == 'analyticsId' && typeof(_stats[key]) == 'undefined') {128			Stats.prototype.set(key, getRandomId());129		}130		return _stats[key];131	};132	Stats.prototype.remove = function(key) {133		if (typeof(_stats[key]) != 'undefined') delete _stats[key];134		_saveStats();135	};136	Stats.prototype.resetAllStats = function(callback) {137		var oldStats = stats.getAllStatsClone();138		chrome.storage.sync.remove(['stats'], function() {139			if (chrome.runtime.lastError) {140				logError("Error deleting all stats:", chrome.runtime.lastError);141				callback(chrome.runtime.lastError, oldStats);142			} else {143				log("Deleted all stats. Old stats were: ", oldStats);144				// _loadSettings will reset all settings to default ones145				_loadStats(function() {146					_saveStats(function() {147						callback(null, oldStats);148					});149				});150			}151		});152	};153	Stats.prototype.getAllStatsClone = function() {154		return JSON.parse(JSON.stringify(_stats))155	};156	return Stats;157};158// Run the function that builds the class...Stats.unittest.js
Source:Stats.unittest.js  
1/*globals describe it */2"use strict";3const Stats = require("../lib/Stats");4const packageJson = require("../package.json");5describe(6	"Stats",7	() => {8		describe("formatFilePath", () => {9			it("emit the file path and request", () => {10				const mockStats = new Stats({11					children: [],12					errors: ["firstError"],13					hash: "1234",14					compiler: {15						context: ""16					}17				});18				const inputPath =19					"./node_modules/ts-loader!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./src/app.vue";20				const expectPath = `./src/app.vue (${inputPath})`;21				expect(mockStats.formatFilePath(inputPath)).toBe(expectPath);22			});23		});24		describe("Error Handling", () => {25			describe("does have", () => {26				it("hasErrors", () => {27					const mockStats = new Stats({28						children: [],29						errors: ["firstError"],30						hash: "1234",31						compiler: {32							context: ""33						}34					});35					expect(mockStats.hasErrors()).toBe(true);36				});37				it("hasWarnings", () => {38					const mockStats = new Stats({39						children: [],40						warnings: ["firstError"],41						hash: "1234",42						compiler: {43							context: ""44						}45					});46					expect(mockStats.hasWarnings()).toBe(true);47				});48			});49			describe("does not have", () => {50				it("hasErrors", () => {51					const mockStats = new Stats({52						children: [],53						errors: [],54						hash: "1234",55						compiler: {56							context: ""57						}58					});59					expect(mockStats.hasErrors()).toBe(false);60				});61				it("hasWarnings", () => {62					const mockStats = new Stats({63						children: [],64						warnings: [],65						hash: "1234",66						compiler: {67							context: ""68						}69					});70					expect(mockStats.hasWarnings()).toBe(false);71				});72			});73			describe("children have", () => {74				it("hasErrors", () => {75					const mockStats = new Stats({76						children: [77							{78								getStats: () =>79									new Stats({80										errors: ["firstError"],81										hash: "5678"82									})83							}84						],85						errors: [],86						hash: "1234"87					});88					expect(mockStats.hasErrors()).toBe(true);89				});90				it("hasWarnings", () => {91					const mockStats = new Stats({92						children: [93							{94								getStats: () =>95									new Stats({96										warnings: ["firstError"],97										hash: "5678"98									})99							}100						],101						warnings: [],102						hash: "1234"103					});104					expect(mockStats.hasWarnings()).toBe(true);105				});106			});107			it("formatError handles string errors", () => {108				const mockStats = new Stats({109					errors: ["firstError"],110					warnings: [],111					assets: [],112					entrypoints: new Map(),113					namedChunkGroups: new Map(),114					chunks: [],115					modules: [],116					children: [],117					hash: "1234",118					mainTemplate: {119						outputOptions: {120							path: ""121						},122						getPublicPath: () => "path"123					},124					compiler: {125						context: ""126					}127				});128				const obj = mockStats.toJson();129				expect(obj.errors[0]).toEqual("firstError");130			});131		});132		describe("toJson", () => {133			it("returns plain object representation", () => {134				const mockStats = new Stats({135					errors: [],136					warnings: [],137					assets: [],138					entrypoints: new Map(),139					chunks: [],140					namedChunkGroups: new Map(),141					modules: [],142					children: [],143					hash: "1234",144					mainTemplate: {145						outputOptions: {146							path: "/"147						},148						getPublicPath: () => "path"149					},150					compiler: {151						context: ""152					}153				});154				const result = mockStats.toJson();155				expect(result).toEqual({156					assets: [],157					assetsByChunkName: {},158					children: [],159					chunks: [],160					entrypoints: {},161					namedChunkGroups: {},162					filteredAssets: 0,163					filteredModules: 0,164					errors: [],165					hash: "1234",166					modules: [],167					outputPath: "/",168					publicPath: "path",169					version: packageJson.version,170					warnings: []171				});172			});173		});174		describe("Presets", () => {175			describe("presetToOptions", () => {176				it("returns correct object with 'Normal'", () => {177					expect(Stats.presetToOptions("Normal")).toEqual({});178				});179				it("truthy values behave as 'normal'", () => {180					const normalOpts = Stats.presetToOptions("normal");181					expect(Stats.presetToOptions("pizza")).toEqual(normalOpts);182					expect(Stats.presetToOptions(true)).toEqual(normalOpts);183					expect(Stats.presetToOptions(1)).toEqual(normalOpts);184					expect(Stats.presetToOptions("verbose")).not.toEqual(normalOpts);185					expect(Stats.presetToOptions(false)).not.toEqual(normalOpts);186				});187				it("returns correct object with 'none'", () => {188					expect(Stats.presetToOptions("none")).toEqual({189						all: false190					});191				});192				it("falsy values behave as 'none'", () => {193					const noneOpts = Stats.presetToOptions("none");194					expect(Stats.presetToOptions("")).toEqual(noneOpts);195					expect(Stats.presetToOptions(null)).toEqual(noneOpts);196					expect(Stats.presetToOptions()).toEqual(noneOpts);197					expect(Stats.presetToOptions(0)).toEqual(noneOpts);198					expect(Stats.presetToOptions(false)).toEqual(noneOpts);199				});200			});201		});202	},203	10000...Using AI Code Generation
1var wpt = require('wpt');2wpt.stats(function (err, data) {3    if (err) {4        console.log(err);5    } else {6        console.log(data);7    }8});9var wpt = require('wpt');10wpt.history(function (err, data) {11    if (err) {12        console.log(err);13    } else {14        console.log(data);15    }16});17var wpt = require('wpt');18wpt.getLocations(function (err, data) {19    if (err) {20        console.log(err);21    } else {22        console.log(data);23    }24});25var wpt = require('wpt');26wpt.getTesters(function (err, data) {27    if (err) {28        console.log(err);29    } else {30        console.log(data);31    }32});33var wpt = require('wpt');34wpt.getTesters(function (err, data) {35    if (err) {36        console.log(err);37    } else {38        console.log(data);39    }40});41var wpt = require('wpt');42wpt.getTesters(function (err, data) {43    if (err) {44        console.log(err);45    } else {46        console.log(data);47    }48});49var wpt = require('wpt');50wpt.getTesters(function (err, data) {51    if (err) {52        console.log(err);53    } else {54        console.log(data);55    }56});57var wpt = require('wpt');58wpt.getTesters(function (err, data) {59    if (err) {60        console.log(err);61    } else {62        console.log(data);63    }64});Using AI Code Generation
1var wpt = require('webpagetest');2var webPageTest = new wpt('API_KEY');3}, function(err, data) {4    if (err) {5        console.log(err);6    } else {7        console.log(data);8        var testId = data.data.testId;9        console.log(testId);10        webPageTest.getTestResults(testId, function(err, data) {11            if (err) {12                console.log(err);13            } else {14                console.log(data);15                webPageTest.getTestStatus(testId, function(err, data) {16                    if (err) {17                        console.log(err);18                    } else {19                        console.log(data);20                        webPageTest.getTestStatusText(testId, function(err, data) {21                            if (err) {22                                console.log(err);23                            } else {24                                console.log(data);25                                webPageTest.getLocations(function(err, data) {26                                    if (err) {27                                        console.log(err);28                                    } else {29                                        console.log(data);30                                        webPageTest.getTesters(function(err, data) {31                                            if (err) {32                                                console.log(err);33                                            } else {34                                                console.log(data);35                                                webPageTest.getTesters('Dulles:Chrome', function(err, data) {36                                                    if (err) {37                                                        console.log(err);38                                                    } else {39                                                        console.log(data);40                                                        webPageTest.getTesters('Dulles:Chrome', 'Cable', function(err, data) {41                                                            if (err) {42                                                                console.log(err);43                                                            } else {44                                                                console.log(data);45                                                                webPageTest.getTesters('Dulles:Chrome', 'Cable', '3G', function(err, data) {46                                                                    if (err) {47                                                                        console.log(err);48                                                                    } else {49                                                                        console.log(data);50                                                                        webPageTest.getTesters('Dulles:Chrome', 'Cable', '3G', 'DSL', function(err, data) {51                                                                            if (err) {52                                                                                console.log(err);53                                                                            } else {54                                                                                console.log(data);55                                                                                webPageTest.getTesters('Dulles:Chrome', 'Cable', '3G', 'DSL', 'FIOS', function(err, dataUsing AI Code Generation
1    if (err) {2        console.log(err);3    } else {4        console.log(stats);5    }6});7    if (err) {8        console.log(err);9    } else {10        console.log(resp);11    }12});Using AI Code Generation
1const wpt = require('webpagetest');2const wpt = new WebPageTest('www.webpagetest.org');3const options = {4};5wpt.stats(options, function(err, data) {6    if (err) {7        console.error(err);8    } else {9        console.log(data);10    }11});12const wpt = require('webpagetest');13const wpt = new WebPageTest('www.webpagetest.org');14const options = {15};16    if (err) {17        console.error(err);18    } else {19        console.log(data);20    }21});22const wpt = require('webpagetest');23const wpt = new WebPageTest('www.webpagetest.org');24const options = {25};26    if (err) {27        console.error(err);28    } else {29        console.log(data);30    }31});32const wpt = require('webpagetest');33const wpt = new WebPageTest('www.webpagetest.org');34const options = {35};Using AI Code Generation
1var wpt = require('webpagetest');2var webPageTest = new wpt('API_KEY');3}, function(err, data) {4    if (err) {5        console.log(err);6    } else {7        console.log(data);8        var testId = data.data.testId;9        console.log(testId);10        webPageTest.getTestResults(testId, function(err, data) {11            if (err) {12                console.log(err);13            } else {14                console.log(data);15                webPageTest.getTestStatus(testId, function(err, data) {16                    if (err) {17                        console.log(err);18                    } else {19                        console.log(data);20                        webPageTest.getTestStatusText(testId, function(err, data) {21                            if (err) {22                                console.log(err);23                            } else {24                                console.log(data);25                                webPageTest.getLocations(function(err, data) {26                                    if (err) {27                                        console.log(err);28                                    } else {29                                        console.log(data);30                                        webPageTest.getTesters(function(err, data) {31                                            if (err) {32                                                console.log(err);33                                            } else {34                                                console.log(data);35                                                webPageTest.getTesters('Dulles:Chrome', function(err, data) {36                                                    if (err) {37                                                        console.log(err);38                                                    } else {39                                                        console.log(data);40                                                        webPageTest.getTesters('Dulles:Chrome', 'Cable', function(err, data) {41                                                            if (err) {42                                                                console.log(err);43                                                            } else {44                                                                console.log(data);45                                                                webPageTest.getTesters('Dulles:Chrome', 'Cable', '3G', function(err, data) {46                                                                    if (err) {47                                                                        console.log(err);48                                                                    } else {49                                                                        console.log(data);50                                                                        webPageTest.getTesters('Dulles:Chrome', 'Cable', '3G', 'DSL', function(err, data) {51                                                                            if (err) {52                                                                                console.log(err);53                                                                            } else {54                                                                                console.log(data);55                                                                                webPageTest.getTesters('Dulles:Chrome', 'Cable', '3G', 'DSL', 'FIOS', function(err, dataUsing AI Code Generation
1const wpt = require('webpagetest');2const wpt = new WebPageTest('www.webpagetest.org');3const options = {4};5wpt.stats(options, function(err, data) {6    if (err) {7        console.error(err);8    } else {9        console.log(data);10    }11});12const wpt = require('webpagetest');13const wpt = new WebPageTest('www.webpagetest.org');14const options = {15};16    if (err) {17        console.error(err);18    } else {19        console.log(data);20    }21});22const wpt = require('webpagetest');23const wpt = new WebPageTest('www.webpagetest.org');24const options = {25};26    if (err) {27        console.error(err);28    } else {29        console.log(data);30    }31});32const wpt = require('webpagetest');33const wpt = new WebPageTest('www.webpagetest.org');34const options = {35};Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
