{"version":3,"file":"website-carbon-meter-badge.umd.cjs","sources":["../../website-carbon-meter/node_modules/@tgwf/co2/dist/esm/1byte.js","../../website-carbon-meter/node_modules/@tgwf/co2/dist/esm/constants/file-size.js","../../website-carbon-meter/node_modules/@tgwf/co2/dist/esm/data/average-intensities.min.js","../../website-carbon-meter/node_modules/@tgwf/co2/dist/esm/constants/index.js","../../website-carbon-meter/node_modules/@tgwf/co2/dist/esm/helpers/index.js","../../website-carbon-meter/node_modules/@tgwf/co2/dist/esm/sustainable-web-design.js","../../website-carbon-meter/node_modules/@tgwf/co2/dist/esm/co2.js","../../website-carbon-meter/node_modules/@tgwf/co2/dist/esm/hosting-json.js","../../website-carbon-meter/node_modules/@tgwf/co2/dist/esm/hosting-api.js","../../website-carbon-meter/node_modules/@tgwf/co2/dist/esm/hosting.js","../../website-carbon-meter/node_modules/@tgwf/co2/dist/esm/data/marginal-intensities-2021.min.js","../../website-carbon-meter/node_modules/@tgwf/co2/dist/esm/index.js","../../website-carbon-meter/lib/carbon.js","../lib/carbon-meter-badge.ts"],"sourcesContent":["const CO2_PER_KWH_IN_DC_GREY = 519;\nconst CO2_PER_KWH_NETWORK_GREY = 475;\nconst CO2_PER_KWH_IN_DC_GREEN = 0;\nconst KWH_PER_BYTE_IN_DC = 72e-12;\nconst FIXED_NETWORK_WIRED = 429e-12;\nconst FIXED_NETWORK_WIFI = 152e-12;\nconst FOUR_G_MOBILE = 884e-12;\nconst KWH_PER_BYTE_FOR_NETWORK = (FIXED_NETWORK_WIRED + FIXED_NETWORK_WIFI + FOUR_G_MOBILE) / 3;\nconst KWH_PER_BYTE_FOR_DEVICES = 13e-11;\nclass OneByte {\n  constructor(options) {\n    this.options = options;\n    this.KWH_PER_BYTE_FOR_NETWORK = KWH_PER_BYTE_FOR_NETWORK;\n  }\n  perByte(bytes, green) {\n    if (bytes < 1) {\n      return 0;\n    }\n    if (green) {\n      const Co2ForDC = bytes * KWH_PER_BYTE_IN_DC * CO2_PER_KWH_IN_DC_GREEN;\n      const Co2forNetwork = bytes * KWH_PER_BYTE_FOR_NETWORK * CO2_PER_KWH_NETWORK_GREY;\n      return Co2ForDC + Co2forNetwork;\n    }\n    const KwHPerByte = KWH_PER_BYTE_IN_DC + KWH_PER_BYTE_FOR_NETWORK;\n    return bytes * KwHPerByte * CO2_PER_KWH_IN_DC_GREY;\n  }\n}\nvar byte_default = OneByte;\nexport {\n  OneByte,\n  byte_default as default\n};\n","const GIGABYTE = 1e3 * 1e3 * 1e3;\nvar file_size_default = {\n  GIGABYTE\n};\nexport {\n  file_size_default as default\n};\n","const data = { \"AFG\": 132.53, \"AFRICA\": 559.42, \"ALB\": 24.29, \"DZA\": 634.61, \"ASM\": 611.11, \"AGO\": 174.73, \"ATG\": 611.11, \"ARG\": 394.62, \"ARM\": 264.54, \"ABW\": 561.22, \"ASEAN\": 554.5, \"ASIA\": 591.19, \"AUS\": 570.35, \"AUT\": 110.81, \"AZE\": 671.39, \"BHS\": 660.1, \"BHR\": 904.62, \"BGD\": 678.11, \"BRB\": 605.51, \"BLR\": 441.74, \"BEL\": 138.11, \"BLZ\": 225.81, \"BEN\": 584.07, \"BTN\": 23.33, \"BOL\": 489.14, \"BIH\": 600, \"BWA\": 847.91, \"BRA\": 105.51, \"BRN\": 893.91, \"BGR\": 335.33, \"BFA\": 467.53, \"BDI\": 250, \"CPV\": 558.14, \"KHM\": 417.71, \"CMR\": 305.42, \"CAN\": 161.43, \"CYM\": 642.86, \"CAF\": 0, \"TCD\": 628.57, \"CHL\": 353.52, \"CHN\": 585.82, \"COL\": 214.88, \"COM\": 642.86, \"COG\": 700, \"COD\": 24.46, \"COK\": 250, \"CRI\": 26.46, \"CIV\": 393.89, \"HRV\": 204.96, \"CUB\": 637.61, \"CYP\": 534.32, \"CZE\": 449.72, \"DNK\": 151.65, \"DJI\": 692.31, \"DMA\": 529.41, \"DOM\": 580.78, \"ECU\": 150.69, \"EGY\": 570.13, \"SLV\": 116.54, \"GNQ\": 591.84, \"ERI\": 631.58, \"EST\": 416.67, \"SWZ\": 172.41, \"ETH\": 24.64, \"EU\": 243.83, \"EUROPE\": 327.69, \"FLK\": 500, \"FRO\": 404.76, \"FJI\": 288.46, \"FIN\": 79.16, \"FRA\": 56.04, \"GUF\": 217.82, \"PYF\": 442.86, \"G20\": 482.92, \"G7\": 361.52, \"GAB\": 491.6, \"GMB\": 666.67, \"GEO\": 167.02, \"DEU\": 380.95, \"GHA\": 484, \"GRC\": 336.57, \"GRL\": 178.57, \"GRD\": 640, \"GLP\": 500, \"GUM\": 622.86, \"GTM\": 328.27, \"GIN\": 236.84, \"GNB\": 625, \"GUY\": 640.35, \"HTI\": 567.31, \"HND\": 282.27, \"HKG\": 699.5, \"HUN\": 204.19, \"ISL\": 27.68, \"IND\": 705.13, \"IDN\": 675.93, \"IRN\": 665.15, \"IRQ\": 688.81, \"IRL\": 290.81, \"ISR\": 582.93, \"ITA\": 330.72, \"JAM\": 555.56, \"JPN\": 512.81, \"JOR\": 540.92, \"KAZ\": 830.41, \"KEN\": 83.33, \"KIR\": 666.67, \"XKX\": 894.65, \"KWT\": 649.2, \"KGZ\": 147.29, \"LAO\": 265.51, \"LATIN AMERICA AND CARIBBEAN\": 260.28, \"LVA\": 123.2, \"LBN\": 599.01, \"LSO\": 20, \"LBR\": 227.85, \"LBY\": 818.69, \"LTU\": 160.07, \"LUX\": 105.26, \"MAC\": 448.98, \"MDG\": 436.44, \"MWI\": 66.67, \"MYS\": 605.83, \"MDV\": 611.77, \"MLI\": 408, \"MLT\": 459.14, \"MTQ\": 523.18, \"MRT\": 464.71, \"MUS\": 632.48, \"MEX\": 475.36, \"MIDDLE EAST\": 660.46, \"MDA\": 648.5, \"MNG\": 771.8, \"MNE\": 417.07, \"MSR\": 1e3, \"MAR\": 662.64, \"MOZ\": 135.65, \"MMR\": 483.57, \"NAM\": 59.26, \"NRU\": 750, \"NPL\": 24.44, \"NLD\": 267.62, \"NCL\": 660.58, \"NZL\": 110.89, \"NIC\": 265.12, \"NER\": 670.89, \"NGA\": 516.23, \"NORTH AMERICA\": 356.01, \"PRK\": 389.59, \"MKD\": 565.35, \"NOR\": 30.08, \"OCEANIA\": 507.63, \"OECD\": 360.53, \"OMN\": 564.69, \"PAK\": 463.66, \"PSE\": 516.13, \"PAN\": 161.68, \"PNG\": 507.25, \"PRY\": 24.31, \"PER\": 251.74, \"POL\": 661.93, \"PRT\": 165.55, \"PRI\": 678.74, \"QAT\": 602.59, \"REU\": 572.82, \"ROU\": 240.58, \"RUS\": 436.28, \"RWA\": 316.33, \"KNA\": 636.36, \"LCA\": 666.67, \"SPM\": 600, \"VCT\": 529.41, \"WSM\": 473.68, \"STP\": 642.86, \"SAU\": 706.79, \"SEN\": 511.6, \"SRB\": 636.06, \"SYC\": 564.52, \"SLE\": 50, \"SGP\": 474, \"SVK\": 116.77, \"SVN\": 231.28, \"SLB\": 700, \"SOM\": 578.95, \"ZAF\": 729.67, \"KOR\": 441.65, \"SSD\": 629.03, \"ESP\": 174.05, \"LKA\": 509.78, \"SDN\": 263.16, \"SUR\": 349.28, \"SWE\": 40.7, \"CHE\": 34.84, \"SYR\": 701.66, \"TWN\": 639.53, \"TJK\": 116.86, \"TZA\": 339.25, \"THA\": 560.74, \"PHL\": 601.1, \"TGO\": 443.18, \"TON\": 625, \"TTO\": 681.53, \"TUN\": 564.62, \"TUR\": 464.59, \"TKM\": 1306.03, \"TCA\": 653.85, \"UGA\": 44.53, \"UKR\": 259.69, \"ARE\": 561.14, \"GBR\": 237.59, \"USA\": 385.98, \"URY\": 112.65, \"UZB\": 1167.6, \"VUT\": 571.43, \"VEN\": 185.8, \"VNM\": 409.8, \"VGB\": 647.06, \"VIR\": 632.35, \"WORLD\": 485.99, \"YEM\": 566.1, \"ZMB\": 111.97, \"ZWE\": 297.87 };\nconst type = \"average\";\nvar average_intensities_min_default = { data, type };\nexport {\n  data,\n  average_intensities_min_default as default,\n  type\n};\n","import fileSize from \"./file-size.js\";\nimport averageIntensity from \"../data/average-intensities.min.js\";\nconst KWH_PER_GB = 0.81;\nconst END_USER_DEVICE_ENERGY = 0.52;\nconst NETWORK_ENERGY = 0.14;\nconst DATACENTER_ENERGY = 0.15;\nconst PRODUCTION_ENERGY = 0.19;\nconst GLOBAL_GRID_INTENSITY = averageIntensity.data[\"WORLD\"];\nconst RENEWABLES_GRID_INTENSITY = 50;\nconst FIRST_TIME_VIEWING_PERCENTAGE = 0.75;\nconst RETURNING_VISITOR_PERCENTAGE = 0.25;\nconst PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD = 0.02;\nexport {\n  DATACENTER_ENERGY,\n  END_USER_DEVICE_ENERGY,\n  FIRST_TIME_VIEWING_PERCENTAGE,\n  GLOBAL_GRID_INTENSITY,\n  KWH_PER_GB,\n  NETWORK_ENERGY,\n  PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD,\n  PRODUCTION_ENERGY,\n  RENEWABLES_GRID_INTENSITY,\n  RETURNING_VISITOR_PERCENTAGE,\n  fileSize\n};\n","import { averageIntensity } from \"../index.js\";\nimport {\n  GLOBAL_GRID_INTENSITY,\n  PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD,\n  FIRST_TIME_VIEWING_PERCENTAGE,\n  RETURNING_VISITOR_PERCENTAGE\n} from \"../constants/index.js\";\nconst formatNumber = (num) => parseFloat(num.toFixed(2));\nfunction parseOptions(options) {\n  var _a, _b, _c, _d, _e, _f;\n  if (typeof options !== \"object\") {\n    throw new Error(\"Options must be an object\");\n  }\n  const adjustments = {};\n  if (options == null ? void 0 : options.gridIntensity) {\n    adjustments.gridIntensity = {};\n    const { device, dataCenter, network } = options.gridIntensity;\n    if (device || device === 0) {\n      if (typeof device === \"object\") {\n        if (!averageIntensity.data[(_a = device.country) == null ? void 0 : _a.toUpperCase()]) {\n          console.warn(`\"${device.country}\" is not a valid country. Please use a valid 3 digit ISO 3166 country code. \nSee https://developers.thegreenwebfoundation.org/co2js/data/ for more information. \nFalling back to global average grid intensity.`);\n          adjustments.gridIntensity[\"device\"] = {\n            value: GLOBAL_GRID_INTENSITY\n          };\n        }\n        adjustments.gridIntensity[\"device\"] = {\n          country: device.country,\n          value: parseFloat(averageIntensity.data[(_b = device.country) == null ? void 0 : _b.toUpperCase()])\n        };\n      } else if (typeof device === \"number\") {\n        adjustments.gridIntensity[\"device\"] = {\n          value: device\n        };\n      } else {\n        adjustments.gridIntensity[\"device\"] = {\n          value: GLOBAL_GRID_INTENSITY\n        };\n        console.warn(`The device grid intensity must be a number or an object. You passed in a ${typeof device}. \nFalling back to global average grid intensity.`);\n      }\n    }\n    if (dataCenter || dataCenter === 0) {\n      if (typeof dataCenter === \"object\") {\n        if (!averageIntensity.data[(_c = dataCenter.country) == null ? void 0 : _c.toUpperCase()]) {\n          console.warn(`\"${dataCenter.country}\" is not a valid country. Please use a valid 3 digit ISO 3166 country code. \nSee https://developers.thegreenwebfoundation.org/co2js/data/ for more information.  \nFalling back to global average grid intensity.`);\n          adjustments.gridIntensity[\"dataCenter\"] = {\n            value: GLOBAL_GRID_INTENSITY\n          };\n        }\n        adjustments.gridIntensity[\"dataCenter\"] = {\n          country: dataCenter.country,\n          value: parseFloat(averageIntensity.data[(_d = dataCenter.country) == null ? void 0 : _d.toUpperCase()])\n        };\n      } else if (typeof dataCenter === \"number\") {\n        adjustments.gridIntensity[\"dataCenter\"] = {\n          value: dataCenter\n        };\n      } else {\n        adjustments.gridIntensity[\"dataCenter\"] = {\n          value: GLOBAL_GRID_INTENSITY\n        };\n        console.warn(`The data center grid intensity must be a number or an object. You passed in a ${typeof dataCenter}. \nFalling back to global average grid intensity.`);\n      }\n    }\n    if (network || network === 0) {\n      if (typeof network === \"object\") {\n        if (!averageIntensity.data[(_e = network.country) == null ? void 0 : _e.toUpperCase()]) {\n          console.warn(`\"${network.country}\" is not a valid country. Please use a valid 3 digit ISO 3166 country code. \nSee https://developers.thegreenwebfoundation.org/co2js/data/ for more information.  Falling back to global average grid intensity. \nFalling back to global average grid intensity.`);\n          adjustments.gridIntensity[\"network\"] = {\n            value: GLOBAL_GRID_INTENSITY\n          };\n        }\n        adjustments.gridIntensity[\"network\"] = {\n          country: network.country,\n          value: parseFloat(averageIntensity.data[(_f = network.country) == null ? void 0 : _f.toUpperCase()])\n        };\n      } else if (typeof network === \"number\") {\n        adjustments.gridIntensity[\"network\"] = {\n          value: network\n        };\n      } else {\n        adjustments.gridIntensity[\"network\"] = {\n          value: GLOBAL_GRID_INTENSITY\n        };\n        console.warn(`The network grid intensity must be a number or an object. You passed in a ${typeof network}. \nFalling back to global average grid intensity.`);\n      }\n    }\n  }\n  if ((options == null ? void 0 : options.dataReloadRatio) || options.dataReloadRatio === 0) {\n    if (typeof options.dataReloadRatio === \"number\") {\n      if (options.dataReloadRatio >= 0 && options.dataReloadRatio <= 1) {\n        adjustments.dataReloadRatio = options.dataReloadRatio;\n      } else {\n        adjustments.dataReloadRatio = PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD;\n        console.warn(`The dataReloadRatio option must be a number between 0 and 1. You passed in ${options.dataReloadRatio}. \nFalling back to default value.`);\n      }\n    } else {\n      adjustments.dataReloadRatio = PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD;\n      console.warn(`The dataReloadRatio option must be a number. You passed in a ${typeof options.dataReloadRatio}. \nFalling back to default value.`);\n    }\n  }\n  if ((options == null ? void 0 : options.firstVisitPercentage) || options.firstVisitPercentage === 0) {\n    if (typeof options.firstVisitPercentage === \"number\") {\n      if (options.firstVisitPercentage >= 0 && options.firstVisitPercentage <= 1) {\n        adjustments.firstVisitPercentage = options.firstVisitPercentage;\n      } else {\n        adjustments.firstVisitPercentage = FIRST_TIME_VIEWING_PERCENTAGE;\n        console.warn(`The firstVisitPercentage option must be a number between 0 and 1. You passed in ${options.firstVisitPercentage}. \nFalling back to default value.`);\n      }\n    } else {\n      adjustments.firstVisitPercentage = FIRST_TIME_VIEWING_PERCENTAGE;\n      console.warn(`The firstVisitPercentage option must be a number. You passed in a ${typeof options.firstVisitPercentage}. \nFalling back to default value.`);\n    }\n  }\n  if ((options == null ? void 0 : options.returnVisitPercentage) || options.returnVisitPercentage === 0) {\n    if (typeof options.returnVisitPercentage === \"number\") {\n      if (options.returnVisitPercentage >= 0 && options.returnVisitPercentage <= 1) {\n        adjustments.returnVisitPercentage = options.returnVisitPercentage;\n      } else {\n        adjustments.returnVisitPercentage = RETURNING_VISITOR_PERCENTAGE;\n        console.warn(`The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}. \nFalling back to default value.`);\n      }\n    } else {\n      adjustments.returnVisitPercentage = RETURNING_VISITOR_PERCENTAGE;\n      console.warn(`The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}. \nFalling back to default value.`);\n    }\n  }\n  return adjustments;\n}\nfunction getApiRequestHeaders(comment = \"\") {\n  return { \"User-Agent\": `co2js/${\"0.15.0\"} ${comment}` };\n}\nexport {\n  formatNumber,\n  getApiRequestHeaders,\n  parseOptions\n};\n","\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nimport {\n  fileSize,\n  KWH_PER_GB,\n  END_USER_DEVICE_ENERGY,\n  NETWORK_ENERGY,\n  DATACENTER_ENERGY,\n  PRODUCTION_ENERGY,\n  GLOBAL_GRID_INTENSITY,\n  RENEWABLES_GRID_INTENSITY,\n  FIRST_TIME_VIEWING_PERCENTAGE,\n  RETURNING_VISITOR_PERCENTAGE,\n  PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD\n} from \"./constants/index.js\";\nimport { formatNumber } from \"./helpers/index.js\";\nclass SustainableWebDesign {\n  constructor(options) {\n    this.options = options;\n  }\n  energyPerByteByComponent(bytes) {\n    const transferedBytesToGb = bytes / fileSize.GIGABYTE;\n    const energyUsage = transferedBytesToGb * KWH_PER_GB;\n    return {\n      consumerDeviceEnergy: energyUsage * END_USER_DEVICE_ENERGY,\n      networkEnergy: energyUsage * NETWORK_ENERGY,\n      productionEnergy: energyUsage * PRODUCTION_ENERGY,\n      dataCenterEnergy: energyUsage * DATACENTER_ENERGY\n    };\n  }\n  co2byComponent(energyByComponent, carbonIntensity = GLOBAL_GRID_INTENSITY, options = {}) {\n    let deviceCarbonIntensity = GLOBAL_GRID_INTENSITY;\n    let networkCarbonIntensity = GLOBAL_GRID_INTENSITY;\n    let dataCenterCarbonIntensity = GLOBAL_GRID_INTENSITY;\n    let globalEmissions = GLOBAL_GRID_INTENSITY;\n    if (options == null ? void 0 : options.gridIntensity) {\n      const { device, network, dataCenter } = options.gridIntensity;\n      if ((device == null ? void 0 : device.value) || (device == null ? void 0 : device.value) === 0) {\n        deviceCarbonIntensity = device.value;\n      }\n      if ((network == null ? void 0 : network.value) || (network == null ? void 0 : network.value) === 0) {\n        networkCarbonIntensity = network.value;\n      }\n      if ((dataCenter == null ? void 0 : dataCenter.value) || (dataCenter == null ? void 0 : dataCenter.value) === 0) {\n        dataCenterCarbonIntensity = dataCenter.value;\n      }\n    }\n    if (carbonIntensity === true) {\n      dataCenterCarbonIntensity = RENEWABLES_GRID_INTENSITY;\n    }\n    const returnCO2ByComponent = {};\n    for (const [key, value] of Object.entries(energyByComponent)) {\n      if (key.startsWith(\"dataCenterEnergy\")) {\n        returnCO2ByComponent[key.replace(\"Energy\", \"CO2\")] = value * dataCenterCarbonIntensity;\n      } else if (key.startsWith(\"consumerDeviceEnergy\")) {\n        returnCO2ByComponent[key.replace(\"Energy\", \"CO2\")] = value * deviceCarbonIntensity;\n      } else if (key.startsWith(\"networkEnergy\")) {\n        returnCO2ByComponent[key.replace(\"Energy\", \"CO2\")] = value * networkCarbonIntensity;\n      } else {\n        returnCO2ByComponent[key.replace(\"Energy\", \"CO2\")] = value * globalEmissions;\n      }\n    }\n    return returnCO2ByComponent;\n  }\n  perByte(bytes, carbonIntensity = false, segmentResults = false, options = {}) {\n    if (bytes < 1) {\n      bytes = 0;\n    }\n    const energyBycomponent = this.energyPerByteByComponent(bytes, options);\n    if (typeof carbonIntensity !== \"boolean\") {\n      throw new Error(`perByte expects a boolean for the carbon intensity value. Received: ${carbonIntensity}`);\n    }\n    const co2ValuesbyComponent = this.co2byComponent(energyBycomponent, carbonIntensity, options);\n    const co2Values = Object.values(co2ValuesbyComponent);\n    const co2ValuesSum = co2Values.reduce((prevValue, currentValue) => prevValue + currentValue);\n    if (segmentResults) {\n      return __spreadProps(__spreadValues({}, co2ValuesbyComponent), { total: co2ValuesSum });\n    }\n    return co2ValuesSum;\n  }\n  perVisit(bytes, carbonIntensity = false, segmentResults = false, options = {}) {\n    const energyBycomponent = this.energyPerVisitByComponent(bytes, options);\n    if (typeof carbonIntensity !== \"boolean\") {\n      throw new Error(`perVisit expects a boolean for the carbon intensity value. Received: ${carbonIntensity}`);\n    }\n    const co2ValuesbyComponent = this.co2byComponent(energyBycomponent, carbonIntensity, options);\n    const co2Values = Object.values(co2ValuesbyComponent);\n    const co2ValuesSum = co2Values.reduce((prevValue, currentValue) => prevValue + currentValue);\n    if (segmentResults) {\n      return __spreadProps(__spreadValues({}, co2ValuesbyComponent), { total: co2ValuesSum });\n    }\n    return co2ValuesSum;\n  }\n  energyPerByte(bytes) {\n    const energyByComponent = this.energyPerByteByComponent(bytes);\n    const energyValues = Object.values(energyByComponent);\n    return energyValues.reduce((prevValue, currentValue) => prevValue + currentValue);\n  }\n  energyPerVisitByComponent(bytes, options = {}, firstView = FIRST_TIME_VIEWING_PERCENTAGE, returnView = RETURNING_VISITOR_PERCENTAGE, dataReloadRatio = PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD) {\n    if (options.dataReloadRatio || options.dataReloadRatio === 0) {\n      dataReloadRatio = options.dataReloadRatio;\n    }\n    if (options.firstVisitPercentage || options.firstVisitPercentage === 0) {\n      firstView = options.firstVisitPercentage;\n    }\n    if (options.returnVisitPercentage || options.returnVisitPercentage === 0) {\n      returnView = options.returnVisitPercentage;\n    }\n    const energyBycomponent = this.energyPerByteByComponent(bytes);\n    const cacheAdjustedSegmentEnergy = {};\n    const energyValues = Object.values(energyBycomponent);\n    for (const [key, value] of Object.entries(energyBycomponent)) {\n      cacheAdjustedSegmentEnergy[`${key} - first`] = value * firstView;\n      cacheAdjustedSegmentEnergy[`${key} - subsequent`] = value * returnView * dataReloadRatio;\n    }\n    return cacheAdjustedSegmentEnergy;\n  }\n  energyPerVisit(bytes) {\n    let firstVisits = 0;\n    let subsequentVisits = 0;\n    const energyBycomponent = Object.entries(this.energyPerVisitByComponent(bytes));\n    for (const [key, val] of energyBycomponent) {\n      if (key.indexOf(\"first\") > 0) {\n        firstVisits += val;\n      }\n    }\n    for (const [key, val] of energyBycomponent) {\n      if (key.indexOf(\"subsequent\") > 0) {\n        subsequentVisits += val;\n      }\n    }\n    return firstVisits + subsequentVisits;\n  }\n  emissionsPerVisitInGrams(energyPerVisit, carbonintensity = GLOBAL_GRID_INTENSITY) {\n    return formatNumber(energyPerVisit * carbonintensity);\n  }\n  annualEnergyInKwh(energyPerVisit, monthlyVisitors = 1e3) {\n    return energyPerVisit * monthlyVisitors * 12;\n  }\n  annualEmissionsInGrams(co2grams, monthlyVisitors = 1e3) {\n    return co2grams * monthlyVisitors * 12;\n  }\n  annualSegmentEnergy(annualEnergy) {\n    return {\n      consumerDeviceEnergy: formatNumber(annualEnergy * END_USER_DEVICE_ENERGY),\n      networkEnergy: formatNumber(annualEnergy * NETWORK_ENERGY),\n      dataCenterEnergy: formatNumber(annualEnergy * DATACENTER_ENERGY),\n      productionEnergy: formatNumber(annualEnergy * PRODUCTION_ENERGY)\n    };\n  }\n}\nvar sustainable_web_design_default = SustainableWebDesign;\nexport {\n  SustainableWebDesign,\n  sustainable_web_design_default as default\n};\n","\"use strict\";\nimport OneByte from \"./1byte.js\";\nimport SustainableWebDesign from \"./sustainable-web-design.js\";\nimport {\n  GLOBAL_GRID_INTENSITY,\n  RENEWABLES_GRID_INTENSITY\n} from \"./constants/index.js\";\nimport { parseOptions } from \"./helpers/index.js\";\nclass CO2 {\n  constructor(options) {\n    this.model = new SustainableWebDesign();\n    if ((options == null ? void 0 : options.model) === \"1byte\") {\n      this.model = new OneByte();\n    } else if ((options == null ? void 0 : options.model) === \"swd\") {\n      this.model = new SustainableWebDesign();\n    } else if (options == null ? void 0 : options.model) {\n      throw new Error(`\"${options.model}\" is not a valid model. Please use \"1byte\" for the OneByte model, and \"swd\" for the Sustainable Web Design model.\nSee https://developers.thegreenwebfoundation.org/co2js/models/ to learn more about the models available in CO2.js.`);\n    }\n    this._segment = (options == null ? void 0 : options.results) === \"segment\";\n  }\n  perByte(bytes, green = false) {\n    return this.model.perByte(bytes, green, this._segment);\n  }\n  perVisit(bytes, green = false) {\n    var _a;\n    if ((_a = this.model) == null ? void 0 : _a.perVisit) {\n      return this.model.perVisit(bytes, green, this._segment);\n    } else {\n      throw new Error(`The perVisit() method is not supported in the model you are using. Try using perByte() instead.\nSee https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`);\n    }\n  }\n  perByteTrace(bytes, green = false, options = {}) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n    let adjustments = {};\n    if (options) {\n      adjustments = parseOptions(options);\n    }\n    return {\n      co2: this.model.perByte(bytes, green, this._segment, adjustments),\n      green,\n      variables: {\n        description: \"Below are the variables used to calculate this CO2 estimate.\",\n        bytes,\n        gridIntensity: {\n          description: \"The grid intensity (grams per kilowatt-hour) used to calculate this CO2 estimate.\",\n          network: (_c = (_b = (_a = adjustments == null ? void 0 : adjustments.gridIntensity) == null ? void 0 : _a.network) == null ? void 0 : _b.value) != null ? _c : GLOBAL_GRID_INTENSITY,\n          dataCenter: green ? RENEWABLES_GRID_INTENSITY : (_f = (_e = (_d = adjustments == null ? void 0 : adjustments.gridIntensity) == null ? void 0 : _d.dataCenter) == null ? void 0 : _e.value) != null ? _f : GLOBAL_GRID_INTENSITY,\n          production: GLOBAL_GRID_INTENSITY,\n          device: (_i = (_h = (_g = adjustments == null ? void 0 : adjustments.gridIntensity) == null ? void 0 : _g.device) == null ? void 0 : _h.value) != null ? _i : GLOBAL_GRID_INTENSITY\n        }\n      }\n    };\n  }\n  perVisitTrace(bytes, green = false, options = {}) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;\n    if ((_a = this.model) == null ? void 0 : _a.perVisit) {\n      let adjustments = {};\n      if (options) {\n        adjustments = parseOptions(options);\n      }\n      return {\n        co2: this.model.perVisit(bytes, green, this._segment, adjustments),\n        green,\n        variables: {\n          description: \"Below are the variables used to calculate this CO2 estimate.\",\n          bytes,\n          gridIntensity: {\n            description: \"The grid intensity (grams per kilowatt-hour) used to calculate this CO2 estimate.\",\n            network: (_d = (_c = (_b = adjustments == null ? void 0 : adjustments.gridIntensity) == null ? void 0 : _b.network) == null ? void 0 : _c.value) != null ? _d : GLOBAL_GRID_INTENSITY,\n            dataCenter: green ? RENEWABLES_GRID_INTENSITY : (_g = (_f = (_e = adjustments == null ? void 0 : adjustments.gridIntensity) == null ? void 0 : _e.dataCenter) == null ? void 0 : _f.value) != null ? _g : GLOBAL_GRID_INTENSITY,\n            production: GLOBAL_GRID_INTENSITY,\n            device: (_j = (_i = (_h = adjustments == null ? void 0 : adjustments.gridIntensity) == null ? void 0 : _h.device) == null ? void 0 : _i.value) != null ? _j : GLOBAL_GRID_INTENSITY\n          },\n          dataReloadRatio: (_k = adjustments == null ? void 0 : adjustments.dataReloadRatio) != null ? _k : 0.02,\n          firstVisitPercentage: (_l = adjustments == null ? void 0 : adjustments.firstVisitPercentage) != null ? _l : 0.75,\n          returnVisitPercentage: (_m = adjustments == null ? void 0 : adjustments.returnVisitPercentage) != null ? _m : 0.25\n        }\n      };\n    } else {\n      throw new Error(`The perVisitDetailed() method is not supported in the model you are using. Try using perByte() instead.\nSee https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`);\n    }\n  }\n}\nvar co2_default = CO2;\nexport {\n  CO2,\n  co2_default as default\n};\n","\"use strict\";\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __commonJS = (cb, mod) => function __require() {\n  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar require_hosting_json = __commonJS({\n  \"src/hosting-json.js\"(exports, module) {\n    async function check(domain, db) {\n      if (typeof domain === \"string\") {\n        return checkInJSON(domain, db);\n      } else {\n        return checkDomainsInJSON(domain, db);\n      }\n    }\n    function checkInJSON(domain, db) {\n      if (db.indexOf(domain) > -1) {\n        return true;\n      }\n      return false;\n    }\n    function greenDomainsFromResults(greenResults) {\n      const entries = Object.entries(greenResults);\n      const greenEntries = entries.filter(([key, val]) => val.green);\n      return greenEntries.map(([key, val]) => val.url);\n    }\n    function checkDomainsInJSON(domains, db) {\n      let greenDomains = [];\n      for (let domain of domains) {\n        if (db.indexOf(domain) > -1) {\n          greenDomains.push(domain);\n        }\n      }\n      return greenDomains;\n    }\n    function find(domain, db) {\n      if (typeof domain === \"string\") {\n        return findInJSON(domain, db);\n      } else {\n        return findDomainsInJSON(domain, db);\n      }\n    }\n    function findInJSON(domain, db) {\n      if (db.indexOf(domain) > -1) {\n        return domain;\n      }\n      return {\n        url: domain,\n        green: false\n      };\n    }\n    function findDomainsInJSON(domains, db) {\n      const result = {};\n      for (let domain of domains) {\n        result[domain] = findInJSON(domain, db);\n      }\n      return result;\n    }\n    module.exports = {\n      check,\n      greenDomainsFromResults,\n      find\n    };\n  }\n});\nexport default require_hosting_json();\n","\"use strict\";\nimport { getApiRequestHeaders } from \"./helpers/index.js\";\nimport hostingJSON from \"./hosting-json.js\";\nfunction check(domain, optionsOrAgentId) {\n  const options = typeof optionsOrAgentId === \"string\" ? { userAgentIdentifier: optionsOrAgentId } : optionsOrAgentId;\n  if ((options == null ? void 0 : options.db) && options.verbose) {\n    throw new Error(\"verbose mode cannot be used with a local lookup database\");\n  }\n  if (typeof domain === \"string\") {\n    return checkAgainstAPI(domain, options);\n  } else {\n    return checkDomainsAgainstAPI(domain, options);\n  }\n}\nasync function checkAgainstAPI(domain, options = {}) {\n  const req = await fetch(`https://api.thegreenwebfoundation.org/greencheck/${domain}`, {\n    headers: getApiRequestHeaders(options.userAgentIdentifier)\n  });\n  if (options == null ? void 0 : options.db) {\n    return hostingJSON.check(domain, options.db);\n  }\n  const res = await req.json();\n  return options.verbose ? res : res.green;\n}\nasync function checkDomainsAgainstAPI(domains, options = {}) {\n  try {\n    const apiPath = \"https://api.thegreenwebfoundation.org/v2/greencheckmulti\";\n    const domainsString = JSON.stringify(domains);\n    const req = await fetch(`${apiPath}/${domainsString}`, {\n      headers: getApiRequestHeaders(options.userAgentIdentifier)\n    });\n    const allGreenCheckResults = await req.json();\n    return options.verbose ? allGreenCheckResults : greenDomainsFromResults(allGreenCheckResults);\n  } catch (e) {\n    return options.verbose ? {} : [];\n  }\n}\nfunction greenDomainsFromResults(greenResults) {\n  const entries = Object.entries(greenResults);\n  const greenEntries = entries.filter(([key, val]) => val.green);\n  return greenEntries.map(([key, val]) => val.url);\n}\nvar hosting_api_default = {\n  check\n};\nexport {\n  hosting_api_default as default\n};\n","\"use strict\";\nimport hostingAPI from \"./hosting-api.js\";\nfunction check(domain, optionsOrAgentId) {\n  return hostingAPI.check(domain, optionsOrAgentId);\n}\nvar hosting_default = {\n  check\n};\nexport {\n  hosting_default as default\n};\n","const data = { \"AFG\": \"414\", \"ALB\": \"0\", \"DZA\": \"528\", \"ASM\": \"753\", \"AND\": \"188\", \"AGO\": \"1476\", \"AIA\": \"753\", \"ATG\": \"753\", \"ARG\": \"478\", \"ARM\": \"390\", \"ABW\": \"753\", \"AUS\": \"808\", \"AUT\": \"242\", \"AZE\": \"534\", \"AZORES (PORTUGAL)\": \"753\", \"BHS\": \"753\", \"BHR\": \"726\", \"BGD\": \"528\", \"BRB\": \"749\", \"BLR\": \"400\", \"BEL\": \"252\", \"BLZ\": \"403\", \"BEN\": \"745\", \"BMU\": \"753\", \"BTN\": \"0\", \"BOL\": \"604\", \"BES\": \"753\", \"BIH\": \"1197\", \"BWA\": \"1486\", \"BRA\": \"284\", \"VGB\": \"753\", \"BRN\": \"681\", \"BGR\": \"911\", \"BFA\": \"753\", \"BDI\": \"414\", \"KHM\": \"1046\", \"CMR\": \"659\", \"CAN\": \"372\", \"CYM\": \"753\", \"CPV\": \"753\", \"CAF\": \"188\", \"TCD\": \"753\", \"CHANNEL ISLANDS (U.K)\": \"753\", \"CHL\": \"657\", \"CHN\": \"899\", \"COL\": \"410\", \"COM\": \"753\", \"COD\": \"0\", \"COG\": \"659\", \"COK\": \"753\", \"CRI\": \"108\", \"CIV\": \"466\", \"HRV\": \"294\", \"CUB\": \"559\", \"CUW\": \"876\", \"CYP\": \"751\", \"CZE\": \"902\", \"DNK\": \"362\", \"DJI\": \"753\", \"DMA\": \"753\", \"DOM\": \"601\", \"ECU\": \"560\", \"EGY\": \"554\", \"SLV\": \"547\", \"GNQ\": \"632\", \"ERI\": \"915\", \"EST\": \"1057\", \"SWZ\": \"0\", \"ETH\": \"0\", \"FLK\": \"753\", \"FRO\": \"753\", \"FJI\": \"640\", \"FIN\": \"267\", \"FRA\": \"158\", \"GUF\": \"423\", \"PYF\": \"753\", \"GAB\": \"946\", \"GMB\": \"753\", \"GEO\": \"289\", \"DEU\": \"650\", \"GHA\": \"495\", \"GIB\": \"779\", \"GRC\": \"507\", \"GRL\": \"264\", \"GRD\": \"753\", \"GLP\": \"753\", \"GUM\": \"753\", \"GTM\": \"798\", \"GIN\": \"753\", \"GNB\": \"753\", \"GUY\": \"847\", \"HTI\": \"1048\", \"HND\": \"662\", \"HUN\": \"296\", \"ISL\": \"0\", \"IND\": \"951\", \"IDN\": \"783\", \"IRN\": \"592\", \"IRQ\": \"1080\", \"IRL\": \"380\", \"IMN\": \"436\", \"ISR\": \"394\", \"ITA\": \"414\", \"JAM\": \"711\", \"JPN\": \"471\", \"JOR\": \"529\", \"KAZ\": \"797\", \"KEN\": \"574\", \"KIR\": \"753\", \"PRK\": \"754\", \"KOR\": \"555\", \"XKX\": \"1145\", \"KWT\": \"675\", \"KGZ\": \"217\", \"LAO\": \"1069\", \"LVA\": \"240\", \"LBN\": \"794\", \"LSO\": \"0\", \"LBR\": \"677\", \"LBY\": \"668\", \"LIE\": \"151\", \"LTU\": \"211\", \"LUX\": \"220\", \"MDG\": \"876\", \"MADEIRA (PORTUGAL)\": \"663\", \"MWI\": \"489\", \"MYS\": \"551\", \"MDV\": \"753\", \"MLI\": \"1076\", \"MLT\": \"520\", \"MHL\": \"753\", \"MTQ\": \"753\", \"MRT\": \"753\", \"MUS\": \"700\", \"MYT\": \"753\", \"MEX\": \"531\", \"FSM\": \"753\", \"MDA\": \"541\", \"MCO\": \"158\", \"MNG\": \"1366\", \"MNE\": \"899\", \"MSR\": \"753\", \"MAR\": \"729\", \"MOZ\": \"234\", \"MMR\": \"719\", \"NAM\": \"355\", \"NRU\": \"753\", \"NPL\": \"0\", \"NLD\": \"326\", \"NCL\": \"779\", \"NZL\": \"246\", \"NIC\": \"675\", \"NER\": \"772\", \"NGA\": \"526\", \"NIU\": \"753\", \"MKD\": \"851\", \"MNP\": \"753\", \"NOR\": \"47\", \"OMN\": \"479\", \"PAK\": \"592\", \"PLW\": \"753\", \"PSE\": \"719\", \"PAN\": \"477\", \"PNG\": \"597\", \"PRY\": \"0\", \"PER\": \"473\", \"PHL\": \"672\", \"POL\": \"828\", \"PRT\": \"389\", \"PRI\": \"596\", \"QAT\": \"503\", \"REU\": \"772\", \"ROU\": \"489\", \"RUS\": \"476\", \"RWA\": \"712\", \"SHN\": \"753\", \"KNA\": \"753\", \"LCA\": \"753\", \"MAF\": \"753\", \"SPM\": \"753\", \"VCT\": \"753\", \"WSM\": \"753\", \"SMR\": \"414\", \"STP\": \"753\", \"SAU\": \"592\", \"SEN\": \"870\", \"SRB\": \"1086\", \"SYC\": \"753\", \"SLE\": \"489\", \"SGP\": \"379\", \"SXM\": \"753\", \"SVK\": \"332\", \"SVN\": \"620\", \"SLB\": \"753\", \"SOM\": \"753\", \"ZAF\": \"1070\", \"SSD\": \"890\", \"ESP\": \"402\", \"LKA\": \"731\", \"SDN\": \"736\", \"SUR\": \"1029\", \"SWE\": \"68\", \"CHE\": \"48\", \"SYR\": \"713\", \"TWN\": \"484\", \"TJK\": \"255\", \"TZA\": \"531\", \"THA\": \"450\", \"TLS\": \"753\", \"TGO\": \"859\", \"TON\": \"753\", \"TTO\": \"559\", \"TUN\": \"468\", \"TUR\": \"376\", \"TKM\": \"927\", \"TCA\": \"753\", \"TUV\": \"753\", \"UGA\": \"279\", \"UKR\": \"768\", \"ARE\": \"556\", \"GBR\": \"380\", \"USA\": \"416\", \"URY\": \"174\", \"UZB\": \"612\", \"VUT\": \"753\", \"VEN\": \"711\", \"VNM\": \"560\", \"VIR\": \"650\", \"YEM\": \"807\", \"ZMB\": \"416\", \"ZWE\": \"1575\", \"MEMO:  EU 27\": \"409\" };\nconst type = \"marginal\";\nconst year = \"2021\";\nvar marginal_intensities_2021_min_default = { data, type, year };\nexport {\n  data,\n  marginal_intensities_2021_min_default as default,\n  type,\n  year\n};\n","import co2 from \"./co2.js\";\nimport hosting from \"./hosting.js\";\nimport averageIntensity from \"./data/average-intensities.min.js\";\nimport marginalIntensity from \"./data/marginal-intensities-2021.min.js\";\nvar src_default = { co2, hosting, averageIntensity, marginalIntensity };\nexport {\n  averageIntensity,\n  co2,\n  src_default as default,\n  hosting,\n  marginalIntensity\n};\n","import tgwf from '@tgwf/co2';\r\n\r\nexport default class CarbonMeter {\r\n\r\n    #listner = (totalEmission, estimatedCO2) => { };\r\n    #location = 'de';\r\n    #co2 = undefined;\r\n    #totalEmissionsCacheEntry = new CacheEntry(window.sessionStorage, \"carbonMeter.totalEmission\", Number.MAX_SAFE_INTEGER);\r\n    #carbonIntensityCacheEntry;\r\n    #forecastDataCacheEntry;\r\n\r\n    constructor(location) {\r\n        if (location) {\r\n            this.#location = location;\r\n            console.info(`CarbonMeter: Choose '${location}' for gathering grid carbon intensity`);\r\n        }\r\n        this.#co2 = new tgwf.co2();\r\n        let tenMinutes = 600000;\r\n        let fourHours = 14400000;\r\n        this.#carbonIntensityCacheEntry = new CacheEntry(window.sessionStorage, `carbonMeter.${location}.carbonIntensity`, tenMinutes);\r\n        this.#forecastDataCacheEntry = new CacheEntry(window.localStorage, `carbonMeter.${location}.forecastData`, fourHours);\r\n    }\r\n\r\n    start() {\r\n        setTimeout(() => {\r\n            this.#startMetering();\r\n        }, 1);\r\n    }\r\n\r\n    /**\r\n     * Registers a listener function to handle metering data.\r\n     *\r\n     * @param {function(number, number): void} listnerFunc - The listener function that will be called with the total CO2 emissions and the estimated CO2 emissions for the current metering event.\r\n     */\r\n    onMetering(listnerFunc) {\r\n        this.#listner = listnerFunc;\r\n\r\n    }\r\n\r\n    async #startMetering() {\r\n        await this.#getEmissionsFromBrowserRessources();\r\n        await this.#observerEmissionsFromBackgroundTransfer();\r\n    }\r\n\r\n    async #observerEmissionsFromBackgroundTransfer() {\r\n        let carbonIntensity = await this.#getCarbonIntensity();\r\n        const observer = new PerformanceObserver((list) => {\r\n            setTimeout(() => {                \r\n                for (const entry of list.getEntries()) {\r\n                    if (entry.initiatorType === \"fetch\" || entry.initiatorType === \"xmlhttprequest\" || entry.initiatorType === \"img\" || entry.initiatorType === \"script\" ) {\r\n                        let bytesSent = entry.transferSize;\r\n                        this.#calculateAndReportEmissions(\"From Background\",bytesSent, carbonIntensity);\r\n                        console.debug(`${entry.initiatorType}: Count ${bytesSent} bytes in background from ${entry.name}`);\r\n                    }\r\n                }\r\n            }, 1);\r\n\r\n        });\r\n\r\n        observer.observe({\r\n            entryTypes: [\"resource\"]\r\n        });\r\n    }\r\n    async #getEmissionsFromBrowserRessources() {\r\n        let carbonIntensity = await this.#getCarbonIntensity();\r\n        let bytesSent = this.#getTransferSize();\r\n        this.#calculateAndReportEmissions(\"From Browser\", bytesSent, carbonIntensity);\r\n    }\r\n    #calculateAndReportEmissions(context, bytesTransfered, carbonIntensity) {\r\n        let result = this.#co2.perByteTrace(\r\n            bytesTransfered,\r\n            false,\r\n            {\r\n                gridIntensity: {\r\n                    device: carbonIntensity,\r\n                    dataCenter: carbonIntensity,\r\n                    networks: carbonIntensity,\r\n                }\r\n            }\r\n        )        \r\n        let estimatedCO2 = parseFloat(result.co2.toFixed(2));\r\n        console.debug(`Report: ${context}, Bytes transfered: ${bytesTransfered}, Grid intensity: ${carbonIntensity}, Carbon: ${estimatedCO2}`);\r\n        this.#reportEmissions(estimatedCO2);\r\n    }\r\n    #reportEmissions(estimatedCO2) {\r\n        let totalEmission = parseFloat(this.#totalEmissionsCacheEntry.getItem());\r\n\r\n        if (totalEmission) {\r\n            totalEmission += estimatedCO2;\r\n        }\r\n        else {\r\n            totalEmission = estimatedCO2;\r\n        }\r\n        this.#totalEmissionsCacheEntry.setItem(totalEmission);\r\n        if (this.#listner) {\r\n            this.#listner(totalEmission, estimatedCO2);\r\n        }\r\n\r\n    }\r\n    #getTransferSize = () => {\r\n        let totalTransferSize = 0;\r\n\r\n        performance.getEntriesByType('resource').map((resource) => {\r\n            const data = resource.toJSON();\r\n            totalTransferSize += data.transferSize;\r\n            console.debug(`Count ${data.transferSize} bytes in browser from ${data.name}`);\r\n        });\r\n        performance.getEntriesByType('navigation').map((resource) => {\r\n            const data = resource.toJSON();\r\n            totalTransferSize += data.transferSize;\r\n            console.debug(`Count ${data.transferSize} bytes in browser from ${data.name}`);\r\n        });\r\n\r\n        return totalTransferSize;\r\n    };\r\n    #calculateCarbonIntensityFromForecast(forecastJson) {\r\n        let forecast = JSON.parse(forecastJson);\r\n        let start = forecast.Start;\r\n        let intervall = forecast.Interval;\r\n        let ratings = forecast.Ratings;\r\n        let now = Date.now();\r\n        let currentIndex = Math.round((now - start) / intervall);\r\n        if (currentIndex >= 0 && currentIndex < ratings.length) {\r\n            let rating = ratings[currentIndex];\r\n            console.debug(`Current Grid CO2 Intensity: ${rating}`);\r\n            return rating;\r\n        }\r\n        return null;\r\n    }\r\n    async #getCarbonIntensity() {\r\n        let carbonIntensity = parseFloat(this.#carbonIntensityCacheEntry.getItem());\r\n        if (carbonIntensity === undefined || Number.isNaN(carbonIntensity)) {\r\n            let forecastDataJson = this.#forecastDataCacheEntry.getItem();\r\n            if (forecastDataJson === undefined) {\r\n                let forecastData = await this.#getForcastFromServer();\r\n                forecastDataJson = JSON.stringify(forecastData)\r\n                this.#forecastDataCacheEntry.setItem(forecastDataJson);\r\n            }\r\n            carbonIntensity = this.#calculateCarbonIntensityFromForecast(forecastDataJson);\r\n            if (carbonIntensity) {\r\n                this.#carbonIntensityCacheEntry.setItem(carbonIntensity);\r\n            }\r\n        }\r\n        return carbonIntensity;\r\n\r\n    }\r\n    async #getForcastFromServer() {\r\n        let forecast = await this.#fetchData(this.#location);\r\n        return forecast;\r\n    }\r\n    async #fetchData(location) {\r\n        let response = await fetch(`https://carbonawarecomputing.blob.core.windows.net/forecasts/${location}.min.json`);\r\n        let data = await response.json();\r\n        return data;\r\n\r\n    }\r\n}\r\n\r\nclass CacheEntry {\r\n    #keyName;\r\n    #dueKeyName;\r\n    #due;\r\n    #cacheProvider;\r\n    constructor(cacheProvider, keyName, dueInMiliSeconds) {\r\n        this.#due = dueInMiliSeconds;\r\n        this.#keyName = keyName;\r\n        this.#dueKeyName = keyName + \".Updated\"\r\n        this.#cacheProvider = cacheProvider;\r\n    }\r\n\r\n    getItem() {\r\n        let item = this.#cacheProvider.getItem(this.#keyName);\r\n        if (item) {\r\n            let lastUpdate = parseInt(this.#cacheProvider.getItem(this.#dueKeyName));\r\n            if (lastUpdate + this.#due > Date.now()) {\r\n                return item;\r\n            }\r\n        }\r\n        return undefined;\r\n    }\r\n    setItem(value) {\r\n        this.#cacheProvider.setItem(this.#keyName, value);\r\n        this.#cacheProvider.setItem(this.#dueKeyName, Date.now());\r\n    }\r\n\r\n}","import CarbonMeter from 'website-carbon-meter';\r\n\r\n/**\r\n * @tag carbon-meter-badge\r\n * @tagname carbon-meter-badge\r\n */\r\nexport class CarbonMeterBadge extends HTMLElement {\r\n\r\n    location: \"de\";\r\n    theme: \"light\" | \"dark\";\r\n    link: string;\r\n    label: string;\r\n    labelDarkTheme: string;\r\n    labelLightTheme: string;\r\n    appearance: \"compact\" | \"inherit\"\r\n    carbonData: {\r\n        total: string,\r\n        lastRequest: string,\r\n        isLOD: boolean\r\n    }\r\n    meter: CarbonMeter;\r\n    tooltip: string;\r\n    numberFormat: Intl.NumberFormat;\r\n\r\n\r\n    constructor() {\r\n        super();\r\n        this.attachShadow({ mode: 'open' });\r\n        this.location = 'de';\r\n        this.theme = 'light';\r\n        this.appearance = 'compact'\r\n        this.link = 'https://github.com/bluehands/Website-Carbon-Meter';\r\n        this.label = ''\r\n        this.labelDarkTheme = '🌡️🌍'\r\n        this.labelLightTheme = '👣🌍'\r\n        this.carbonData = {\r\n            total: \"0\",\r\n            lastRequest: \"0\",\r\n            isLOD: false \r\n        }\r\n        this.numberFormat = new Intl.NumberFormat();\r\n        this.numberFormat = new Intl.NumberFormat(this.numberFormat.resolvedOptions().locale, { maximumFractionDigits: 2, minimumFractionDigits: 2 });\r\n        this.tooltip = 'Total CO&#8322;e emissions of this website while surfing (cumulated).';\r\n        this.meter = new CarbonMeter();\r\n    }\r\n\r\n    static get observedAttributes() {\r\n        return ['theme', 'link', 'label', 'tooltip', 'location', 'appearance'];\r\n    }\r\n\r\n    attributeChangedCallback(name: string, oldValue: any, newValue: any) {\r\n        console.log(`${name}: ${newValue}`);\r\n        if (name === 'theme') {\r\n            this.theme = newValue;\r\n            this.updateView();\r\n        }\r\n        if (name === 'link') {\r\n            this.link = newValue;\r\n            this.updateView();\r\n        }\r\n        if (name === 'label') {\r\n            this.label = newValue;\r\n            this.updateView();\r\n        }\r\n        if (name === 'tooltip') {\r\n            this.tooltip = newValue;\r\n            this.updateView();\r\n        }\r\n        if (name === 'appearance') {\r\n            this.appearance = newValue;\r\n            this.updateView();\r\n        }\r\n    }\r\n\r\n    connectedCallback() {\r\n        this.meter = new CarbonMeter(this.location);\r\n        this.meter.onMetering((total: number, lastRequest: number) => {\r\n            this.carbonData = {\r\n                total: this.numberFormat.format(total),\r\n                lastRequest: this.numberFormat.format(lastRequest),\r\n                isLOD: total<=0.01\r\n            }\r\n            this.updateView();\r\n        })\r\n        this.updateView();\r\n        this.meter.start();\r\n    }\r\n\r\n    updateView = () => {\r\n        if (this.shadowRoot) {\r\n            this.shadowRoot.innerHTML = this.render(this.carbonData.total, this.carbonData.lastRequest, this.carbonData.isLOD);\r\n        }\r\n    }\r\n\r\n    render = (total: string, lastRequest: string, isLOD: boolean) => {\r\n        let badgeLabel = this.label;\r\n        if (this.label === '') {\r\n            badgeLabel = this.theme === 'dark' ? this.labelDarkTheme : this.labelLightTheme;\r\n        }\r\n        if (isLOD){\r\n            total= \"< \" + this.numberFormat.format(0.01)\r\n        }\r\n        return `\r\n        <style>\r\n            a:link { \r\n                text-decoration: none; \r\n                color: inherit;\r\n            } \r\n            a:visited { \r\n                text-decoration: none; \r\n                color: inherit;\r\n            } \r\n            a:hover { \r\n                text-decoration: none; \r\n                color: inherit;\r\n            } \r\n            a:active { \r\n                text-decoration: none; \r\n                color: inherit;\r\n            }\r\n            .badge-container {\r\n                display: flex;                \r\n            }\r\n            .compact {\r\n                font-size:x-small;             \r\n                line-height:16px   \r\n            }\r\n            .badge {\r\n                display: flex;\r\n                border-radius: 8px;\r\n                overflow: hidden;\r\n                font-family: Arial, sans-serif;\r\n            }\r\n            .badge + .badge {\r\n                margin-top: 5px; /* Add margin between badges */\r\n            }\r\n            .key {\r\n                padding: 3px 8px;\r\n                position: relative;\r\n            }\r\n            .value {\r\n                padding: 3px 8px;\r\n                flex-grow: 1;\r\n                max-width: 100%;\r\n            }                \r\n            .light-theme .key {\r\n                background-color: #f0f0f0;\r\n                color: #333;\r\n            }\r\n            .light-theme .value {\r\n                background-color: #fff;\r\n                color: #333;\r\n            }\r\n            .dark-theme .key {\r\n                background-color: #333;\r\n                color: #fff;\r\n            }\r\n            .dark-theme .value {\r\n                background-color: #555;\r\n                color: #fff;\r\n            }\r\n            .tooltip {\r\n                position: absolute;\r\n                bottom: 100%;\r\n                left: 50%;\r\n                transform: translateX(-50%);\r\n                background-color: #333;\r\n                color: #fff;\r\n                padding: 5px;\r\n                border-radius: 4px;\r\n                white-space: nowrap;\r\n                z-index: 10;\r\n                opacity: 0;\r\n                transition: opacity 0.3s;\r\n            }\r\n            .key:hover .tooltip {\r\n                opacity: 1;\r\n            }\r\n            .key a {\r\n                text-decoration: none;\r\n                color: inherit;\r\n            }\r\n        </style>\r\n        <div class=\"badge-container ${this.appearance} ${this.theme}-theme\">\r\n            <div class=\"badge\" title=\"${this.tooltip}\">\r\n                <div class=\"key\" >\r\n                    <a href=\"${this.link}\" target=\"_blank\" rel=\"noreferrer noopener\">${badgeLabel}</a>\r\n                </div>\r\n                <div class=\"value\"><a href=\"${this.link}\" target=\"_blank\" rel=\"noreferrer noopener\">${total} g CO&#8322;</a></div>\r\n            </div>\r\n\r\n        </div>\r\n        `;\r\n    }\r\n}\r\n\r\ncustomElements.define('carbon-meter-badge', CarbonMeterBadge);"],"names":["KWH_PER_BYTE_FOR_NETWORK","OneByte","options","bytes","green","Co2ForDC","Co2forNetwork","KwHPerByte","byte_default","file_size_default","average_intensities_min_default","KWH_PER_GB","END_USER_DEVICE_ENERGY","NETWORK_ENERGY","DATACENTER_ENERGY","PRODUCTION_ENERGY","GLOBAL_GRID_INTENSITY","averageIntensity","RENEWABLES_GRID_INTENSITY","FIRST_TIME_VIEWING_PERCENTAGE","RETURNING_VISITOR_PERCENTAGE","PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD","formatNumber","num","parseOptions","_a","_b","_c","_d","_e","_f","adjustments","device","dataCenter","network","getApiRequestHeaders","comment","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","key","value","__spreadValues","a","b","prop","__spreadProps","SustainableWebDesign","energyUsage","fileSize","energyByComponent","carbonIntensity","deviceCarbonIntensity","networkCarbonIntensity","dataCenterCarbonIntensity","globalEmissions","returnCO2ByComponent","segmentResults","energyBycomponent","co2ValuesbyComponent","co2ValuesSum","prevValue","currentValue","firstView","returnView","dataReloadRatio","cacheAdjustedSegmentEnergy","firstVisits","subsequentVisits","val","energyPerVisit","carbonintensity","monthlyVisitors","co2grams","annualEnergy","sustainable_web_design_default","CO2","_g","_h","_i","_j","_k","_l","_m","co2_default","__getOwnPropNames","__commonJS","cb","mod","require_hosting_json","exports","module","check","domain","db","checkInJSON","checkDomainsInJSON","greenDomainsFromResults","greenResults","domains","greenDomains","find","findInJSON","findDomainsInJSON","result","hostingJSON","optionsOrAgentId","checkAgainstAPI","checkDomainsAgainstAPI","req","res","apiPath","domainsString","allGreenCheckResults","hosting_api_default","hostingAPI","hosting_default","marginal_intensities_2021_min_default","src_default","co2","hosting","marginalIntensity","CarbonMeter","location","__privateAdd","_CarbonMeter_instances","_listner","totalEmission","estimatedCO2","_location","_co2","_totalEmissionsCacheEntry","CacheEntry","_carbonIntensityCacheEntry","_forecastDataCacheEntry","_getTransferSize","totalTransferSize","resource","data","__privateSet","tgwf","tenMinutes","fourHours","__privateMethod","startMetering_fn","listnerFunc","getEmissionsFromBrowserRessources_fn","observerEmissionsFromBackgroundTransfer_fn","getCarbonIntensity_fn","list","entry","bytesSent","calculateAndReportEmissions_fn","__privateGet","context","bytesTransfered","reportEmissions_fn","calculateCarbonIntensityFromForecast_fn","forecastJson","forecast","start","intervall","ratings","now","currentIndex","rating","forecastDataJson","forecastData","getForcastFromServer_fn","fetchData_fn","cacheProvider","keyName","dueInMiliSeconds","_keyName","_dueKeyName","_due","_cacheProvider","item","CarbonMeterBadge","total","lastRequest","isLOD","badgeLabel","name","oldValue","newValue"],"mappings":"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IAAO,MAAO,IAAO,MAAO,IAAO,IAAK,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,OAAQ,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,OAAQ,IAAO,MAAO,IAAO,MAAO,IAAO,OAAQ,IAAO,MAAO,IAAO,MAAO,IAAO,IAAK,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,qBAAsB,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,OAAQ,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,OAAQ,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,IAAK,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,KAAM,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,IAAK,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,OAAQ,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,OAAQ,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,OAAQ,IAAO,KAAM,IAAO,KAAM,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAAO,IAAO,MAA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11]}