@tgwf/co2 0.16.1 → 0.16.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/CONTRIBUTING.md +10 -10
  3. package/README.md +10 -4
  4. package/dist/cjs/1byte.js.map +1 -1
  5. package/dist/cjs/co2.js +38 -13
  6. package/dist/cjs/co2.js.map +2 -2
  7. package/dist/cjs/constants/index.js +4 -1
  8. package/dist/cjs/constants/index.js.map +2 -2
  9. package/dist/cjs/data/average-intensities.min.js +1 -1
  10. package/dist/cjs/data/average-intensities.min.js.map +2 -2
  11. package/dist/cjs/data/marginal-intensities-2021.min.js.map +2 -2
  12. package/dist/cjs/helpers/index.js +79 -94
  13. package/dist/cjs/helpers/index.js.map +3 -3
  14. package/dist/cjs/hosting-api.js +10 -4
  15. package/dist/cjs/hosting-api.js.map +2 -2
  16. package/dist/cjs/hosting-json.js.map +1 -1
  17. package/dist/cjs/hosting-json.node.js +4 -1
  18. package/dist/cjs/hosting-json.node.js.map +2 -2
  19. package/dist/cjs/hosting-node.js +35 -12
  20. package/dist/cjs/hosting-node.js.map +2 -2
  21. package/dist/cjs/hosting.js +4 -1
  22. package/dist/cjs/hosting.js.map +2 -2
  23. package/dist/cjs/index-node.js +4 -1
  24. package/dist/cjs/index-node.js.map +2 -2
  25. package/dist/cjs/index.js +4 -1
  26. package/dist/cjs/index.js.map +2 -2
  27. package/dist/cjs/sustainable-web-design-v3.js +30 -10
  28. package/dist/cjs/sustainable-web-design-v3.js.map +1 -1
  29. package/dist/cjs/sustainable-web-design-v4.js.map +2 -2
  30. package/dist/esm/co2.js +34 -13
  31. package/dist/esm/data/average-intensities.min.js +1 -1
  32. package/dist/esm/helpers/index.js +79 -94
  33. package/dist/esm/hosting-api.js +6 -4
  34. package/dist/esm/hosting-json.js +0 -1
  35. package/dist/esm/hosting.js +0 -1
  36. package/dist/esm/sustainable-web-design-v3.js +30 -11
  37. package/dist/esm/sustainable-web-design-v4.js +0 -1
  38. package/package.json +2 -2
@@ -80,11 +80,19 @@ class SustainableWebDesign {
80
80
  }
81
81
  const energyBycomponent = this.energyPerByteByComponent(bytes, options);
82
82
  if (typeof carbonIntensity !== "boolean") {
83
- throw new Error(`perByte expects a boolean for the carbon intensity value. Received: ${carbonIntensity}`);
84
- }
85
- const co2ValuesbyComponent = this.co2byComponent(energyBycomponent, carbonIntensity, options);
83
+ throw new Error(
84
+ `perByte expects a boolean for the carbon intensity value. Received: ${carbonIntensity}`
85
+ );
86
+ }
87
+ const co2ValuesbyComponent = this.co2byComponent(
88
+ energyBycomponent,
89
+ carbonIntensity,
90
+ options
91
+ );
86
92
  const co2Values = Object.values(co2ValuesbyComponent);
87
- const co2ValuesSum = co2Values.reduce((prevValue, currentValue) => prevValue + currentValue);
93
+ const co2ValuesSum = co2Values.reduce(
94
+ (prevValue, currentValue) => prevValue + currentValue
95
+ );
88
96
  let rating = null;
89
97
  if (ratingResults) {
90
98
  rating = this.ratingScale(co2ValuesSum);
@@ -107,11 +115,19 @@ class SustainableWebDesign {
107
115
  perVisit(bytes, carbonIntensity = false, segmentResults = false, ratingResults = false, options = {}) {
108
116
  const energyBycomponent = this.energyPerVisitByComponent(bytes, options);
109
117
  if (typeof carbonIntensity !== "boolean") {
110
- throw new Error(`perVisit expects a boolean for the carbon intensity value. Received: ${carbonIntensity}`);
111
- }
112
- const co2ValuesbyComponent = this.co2byComponent(energyBycomponent, carbonIntensity, options);
118
+ throw new Error(
119
+ `perVisit expects a boolean for the carbon intensity value. Received: ${carbonIntensity}`
120
+ );
121
+ }
122
+ const co2ValuesbyComponent = this.co2byComponent(
123
+ energyBycomponent,
124
+ carbonIntensity,
125
+ options
126
+ );
113
127
  const co2Values = Object.values(co2ValuesbyComponent);
114
- const co2ValuesSum = co2Values.reduce((prevValue, currentValue) => prevValue + currentValue);
128
+ const co2ValuesSum = co2Values.reduce(
129
+ (prevValue, currentValue) => prevValue + currentValue
130
+ );
115
131
  let rating = null;
116
132
  if (ratingResults) {
117
133
  rating = this.ratingScale(co2ValuesSum);
@@ -134,7 +150,9 @@ class SustainableWebDesign {
134
150
  energyPerByte(bytes) {
135
151
  const energyByComponent = this.energyPerByteByComponent(bytes);
136
152
  const energyValues = Object.values(energyByComponent);
137
- return energyValues.reduce((prevValue, currentValue) => prevValue + currentValue);
153
+ return energyValues.reduce(
154
+ (prevValue, currentValue) => prevValue + currentValue
155
+ );
138
156
  }
139
157
  energyPerVisitByComponent(bytes, options = {}, firstView = import_constants.FIRST_TIME_VIEWING_PERCENTAGE, returnView = import_constants.RETURNING_VISITOR_PERCENTAGE, dataReloadRatio = import_constants.PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD) {
140
158
  if (options.dataReloadRatio || options.dataReloadRatio === 0) {
@@ -158,7 +176,9 @@ class SustainableWebDesign {
158
176
  energyPerVisit(bytes) {
159
177
  let firstVisits = 0;
160
178
  let subsequentVisits = 0;
161
- const energyBycomponent = Object.entries(this.energyPerVisitByComponent(bytes));
179
+ const energyBycomponent = Object.entries(
180
+ this.energyPerVisitByComponent(bytes)
181
+ );
162
182
  for (const [key, val] of energyBycomponent) {
163
183
  if (key.indexOf("first") > 0) {
164
184
  firstVisits += val;
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/sustainable-web-design-v3.js"],
4
4
  "sourcesContent": ["\"use strict\";\n\n/**\n * Sustainable Web Design\n *\n * Updated calculations and figures from\n * https://sustainablewebdesign.org/calculating-digital-emissions/\n *\n */\n\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, outputRating } from \"./helpers/index.js\";\n\nclass SustainableWebDesign {\n constructor(options) {\n this.allowRatings = true;\n this.options = options;\n this.version = 3;\n }\n\n /**\n * Accept a figure for bytes transferred and return an object representing\n * the share of the total enrgy use of the entire system, broken down\n * by each corresponding system component\n *\n * @param {number} bytes - the data transferred in bytes\n * @return {object} Object containing the energy in kilowatt hours, keyed by system component\n */\n energyPerByteByComponent(bytes) {\n const transferedBytesToGb = bytes / fileSize.GIGABYTE;\n const energyUsage = transferedBytesToGb * KWH_PER_GB;\n\n // return the total energy, with breakdown by component\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 /**\n * Accept an object keys by the different system components, and\n * return an object with the co2 figures key by the each component\n *\n * @param {object} energyByComponent - energy grouped by the four system components\n * @param {number} [carbonIntensity] - carbon intensity to apply to the datacentre values\n * @return {number} the total number in grams of CO2 equivalent emissions\n */\n co2byComponent(\n energyByComponent,\n carbonIntensity = GLOBAL_GRID_INTENSITY,\n options = {}\n ) {\n let deviceCarbonIntensity = GLOBAL_GRID_INTENSITY;\n let networkCarbonIntensity = GLOBAL_GRID_INTENSITY;\n let dataCenterCarbonIntensity = GLOBAL_GRID_INTENSITY;\n\n let globalEmissions = GLOBAL_GRID_INTENSITY;\n\n if (options?.gridIntensity) {\n const { device, network, dataCenter } = options.gridIntensity;\n\n if (device?.value || device?.value === 0) {\n deviceCarbonIntensity = device.value;\n }\n if (network?.value || network?.value === 0) {\n networkCarbonIntensity = network.value;\n }\n // If the user has set a carbon intensity value for the datacentre, then that overrides everything and is used\n if (dataCenter?.value || dataCenter?.value === 0) {\n dataCenterCarbonIntensity = dataCenter.value;\n }\n }\n\n // If the user passes in a TRUE value (green web host), then use the renewables intensity value\n if (carbonIntensity === true) {\n dataCenterCarbonIntensity = RENEWABLES_GRID_INTENSITY;\n }\n\n const returnCO2ByComponent = {};\n for (const [key, value] of Object.entries(energyByComponent)) {\n // we update the datacentre, as that's what we have information\n // about.\n if (key.startsWith(\"dataCenterEnergy\")) {\n returnCO2ByComponent[key.replace(\"Energy\", \"CO2\")] =\n value * dataCenterCarbonIntensity;\n } else if (key.startsWith(\"consumerDeviceEnergy\")) {\n returnCO2ByComponent[key.replace(\"Energy\", \"CO2\")] =\n value * deviceCarbonIntensity;\n } else if (key.startsWith(\"networkEnergy\")) {\n returnCO2ByComponent[key.replace(\"Energy\", \"CO2\")] =\n value * networkCarbonIntensity;\n } else {\n // Use the global intensity for the remaining segments\n returnCO2ByComponent[key.replace(\"Energy\", \"CO2\")] =\n value * globalEmissions;\n }\n }\n\n return returnCO2ByComponent;\n }\n\n /**\n * Accept a figure for bytes transferred and return a single figure for CO2\n * emissions. Where information exists about the origin data is being\n * fetched from, a different carbon intensity figure\n * is applied for the data centre share of the carbon intensity.\n *\n * @param {number} bytes - the data transferred in bytes\n * @param {boolean} carbonIntensity - a boolean indicating whether the data center is green or not\n * @param {boolean} segmentResults - a boolean indicating whether to return the results broken down by component\n * @param {boolean} ratingResults - a boolean indicating whether to return the rating based on the Sustainable Web Design Model\n * @param {object} options - an object containing the grid intensity and first/return visitor values\n * @return {number|object} the total number in grams of CO2 equivalent emissions, or an object containing the breakdown by component\n */\n perByte(\n bytes,\n carbonIntensity = false,\n segmentResults = false,\n ratingResults = false,\n options = {}\n ) {\n if (bytes < 1) {\n bytes = 0;\n }\n\n const energyBycomponent = this.energyPerByteByComponent(bytes, options);\n\n // otherwise when faced with non numeric values throw an error\n if (typeof carbonIntensity !== \"boolean\") {\n throw new Error(\n `perByte expects a boolean for the carbon intensity value. Received: ${carbonIntensity}`\n );\n }\n\n const co2ValuesbyComponent = this.co2byComponent(\n energyBycomponent,\n carbonIntensity,\n options\n );\n\n // pull out our values\u2026\n const co2Values = Object.values(co2ValuesbyComponent);\n const co2ValuesSum = co2Values.reduce(\n (prevValue, currentValue) => prevValue + currentValue\n );\n\n let rating = null;\n if (ratingResults) {\n rating = this.ratingScale(co2ValuesSum);\n }\n\n if (segmentResults) {\n if (ratingResults) {\n return {\n ...co2ValuesbyComponent,\n total: co2ValuesSum,\n rating: rating,\n };\n }\n\n return { ...co2ValuesbyComponent, total: co2ValuesSum };\n }\n\n if (ratingResults) {\n return { total: co2ValuesSum, rating: rating };\n }\n\n return co2ValuesSum;\n }\n\n /**\n * Accept a figure for bytes transferred and return a single figure for CO2\n * emissions. This method applies caching assumptions from the original Sustainable Web Design model.\n *\n * @param {number} bytes - the data transferred in bytes\n * @param {boolean} carbonIntensity - a boolean indicating whether the data center is green or not\n * @param {boolean} segmentResults - a boolean indicating whether to return the results broken down by component\n * @param {boolean} ratingResults - a boolean indicating whether to return the rating based on the Sustainable Web Design Model\n * @param {object} options - an object containing the grid intensity and first/return visitor values\n * @return {number|object} the total number in grams of CO2 equivalent emissions, or an object containing the breakdown by component\n */\n perVisit(\n bytes,\n carbonIntensity = false,\n segmentResults = false,\n ratingResults = false,\n options = {}\n ) {\n const energyBycomponent = this.energyPerVisitByComponent(bytes, options);\n\n if (typeof carbonIntensity !== \"boolean\") {\n // otherwise when faced with non numeric values throw an error\n throw new Error(\n `perVisit expects a boolean for the carbon intensity value. Received: ${carbonIntensity}`\n );\n }\n\n const co2ValuesbyComponent = this.co2byComponent(\n energyBycomponent,\n carbonIntensity,\n options\n );\n\n // pull out our values\u2026\n const co2Values = Object.values(co2ValuesbyComponent);\n const co2ValuesSum = co2Values.reduce(\n (prevValue, currentValue) => prevValue + currentValue\n );\n\n let rating = null;\n if (ratingResults) {\n rating = this.ratingScale(co2ValuesSum);\n }\n\n if (segmentResults) {\n if (ratingResults) {\n return {\n ...co2ValuesbyComponent,\n total: co2ValuesSum,\n rating: rating,\n };\n }\n return { ...co2ValuesbyComponent, total: co2ValuesSum };\n }\n\n if (ratingResults) {\n return { total: co2ValuesSum, rating: rating };\n }\n\n // so we can return their sum\n return co2ValuesSum;\n }\n\n /**\n * Accept a figure for bytes transferred and return the number of kilowatt hours used\n * by the total system for this data transfer\n *\n * @param {number} bytes\n * @return {number} the number of kilowatt hours used\n */\n energyPerByte(bytes) {\n const energyByComponent = this.energyPerByteByComponent(bytes);\n\n // pull out our values\u2026\n const energyValues = Object.values(energyByComponent);\n\n // so we can return their sum\n return energyValues.reduce(\n (prevValue, currentValue) => prevValue + currentValue\n );\n }\n\n /**\n * Accept a figure for bytes transferred, and return an object containing figures\n * per system component, with the caching assumptions applied. This tries to account\n * for webpages being loaded from a cache by browsers, so if you had a thousand page views,\n * and tried to work out the energy per visit, the numbers would reflect the reduced amounts\n * of transfer.\n *\n * @param {number} bytes - the data transferred in bytes for loading a webpage\n * @param {number} firstView - what percentage of visits are loading this page for the first time\n * @param {number} returnView - what percentage of visits are loading this page for subsequent times\n * @param {number} dataReloadRatio - what percentage of a page is reloaded on each subsequent page view\n *\n * @return {object} Object containing the energy in kilowatt hours, keyed by system component\n */\n energyPerVisitByComponent(\n bytes,\n options = {},\n firstView = FIRST_TIME_VIEWING_PERCENTAGE,\n returnView = RETURNING_VISITOR_PERCENTAGE,\n dataReloadRatio = PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD\n ) {\n if (options.dataReloadRatio || options.dataReloadRatio === 0) {\n dataReloadRatio = options.dataReloadRatio;\n }\n\n if (options.firstVisitPercentage || options.firstVisitPercentage === 0) {\n firstView = options.firstVisitPercentage;\n }\n\n if (options.returnVisitPercentage || options.returnVisitPercentage === 0) {\n returnView = options.returnVisitPercentage;\n }\n\n const energyBycomponent = this.energyPerByteByComponent(bytes);\n const cacheAdjustedSegmentEnergy = {};\n\n const energyValues = Object.values(energyBycomponent);\n\n // for this, we want\n for (const [key, value] of Object.entries(energyBycomponent)) {\n // represent the first load\n cacheAdjustedSegmentEnergy[`${key} - first`] = value * firstView;\n\n // then represent the subsequent load\n cacheAdjustedSegmentEnergy[`${key} - subsequent`] =\n value * returnView * dataReloadRatio;\n }\n\n return cacheAdjustedSegmentEnergy;\n }\n\n /**\n * Accept a figure for bytes, and return the total figure for energy per visit\n * using the default caching assumptions for loading a single website\n *\n * @param {number} bytes\n * @return {number} the total energy use for the visit, after applying the caching assumptions\n */\n energyPerVisit(bytes) {\n // fetch the values using the default caching assumptions\n // const energyValues = Object.values(this.energyPerVisitByComponent(bytes));\n\n let firstVisits = 0;\n let subsequentVisits = 0;\n\n const energyBycomponent = Object.entries(\n this.energyPerVisitByComponent(bytes)\n );\n\n for (const [key, val] of energyBycomponent) {\n if (key.indexOf(\"first\") > 0) {\n firstVisits += val;\n }\n }\n\n for (const [key, val] of energyBycomponent) {\n if (key.indexOf(\"subsequent\") > 0) {\n subsequentVisits += val;\n }\n }\n\n return firstVisits + subsequentVisits;\n }\n\n emissionsPerVisitInGrams(\n energyPerVisit,\n carbonintensity = GLOBAL_GRID_INTENSITY\n ) {\n return formatNumber(energyPerVisit * carbonintensity);\n }\n\n annualEnergyInKwh(energyPerVisit, monthlyVisitors = 1000) {\n return energyPerVisit * monthlyVisitors * 12;\n }\n\n annualEmissionsInGrams(co2grams, monthlyVisitors = 1000) {\n return co2grams * monthlyVisitors * 12;\n }\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\n /**\n * Determines the rating of a website's sustainability based on its CO2 emissions.\n *\n * @param {number} co2e - The CO2 emissions of the website in grams.\n * @returns {string} The sustainability rating, ranging from \"A+\" (best) to \"F\" (worst).\n */\n ratingScale(co2e) {\n return outputRating(co2e, this.version);\n }\n}\n\nexport { SustainableWebDesign };\nexport default SustainableWebDesign;\n"],
5
- "mappings": "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",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,uBAYO;AACP,qBAA2C;AAE3C,MAAM,qBAAqB;AAAA,EACzB,YAAY,SAAS;AACnB,SAAK,eAAe;AACpB,SAAK,UAAU;AACf,SAAK,UAAU;AAAA,EACjB;AAAA,EAUA,yBAAyB,OAAO;AAC9B,UAAM,sBAAsB,QAAQ,0BAAS;AAC7C,UAAM,cAAc,sBAAsB;AAG1C,WAAO;AAAA,MACL,sBAAsB,cAAc;AAAA,MACpC,eAAe,cAAc;AAAA,MAC7B,kBAAkB,cAAc;AAAA,MAChC,kBAAkB,cAAc;AAAA,IAClC;AAAA,EACF;AAAA,EASA,eACE,mBACA,kBAAkB,wCAClB,UAAU,CAAC,GACX;AACA,QAAI,wBAAwB;AAC5B,QAAI,yBAAyB;AAC7B,QAAI,4BAA4B;AAEhC,QAAI,kBAAkB;AAEtB,QAAI,mCAAS,eAAe;AAC1B,YAAM,EAAE,QAAQ,SAAS,WAAW,IAAI,QAAQ;AAEhD,WAAI,iCAAQ,WAAS,iCAAQ,WAAU,GAAG;AACxC,gCAAwB,OAAO;AAAA,MACjC;AACA,WAAI,mCAAS,WAAS,mCAAS,WAAU,GAAG;AAC1C,iCAAyB,QAAQ;AAAA,MACnC;AAEA,WAAI,yCAAY,WAAS,yCAAY,WAAU,GAAG;AAChD,oCAA4B,WAAW;AAAA,MACzC;AAAA,IACF;AAGA,QAAI,oBAAoB,MAAM;AAC5B,kCAA4B;AAAA,IAC9B;AAEA,UAAM,uBAAuB,CAAC;AAC9B,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,iBAAiB,GAAG;AAG5D,UAAI,IAAI,WAAW,kBAAkB,GAAG;AACtC,6BAAqB,IAAI,QAAQ,UAAU,KAAK,KAC9C,QAAQ;AAAA,MACZ,WAAW,IAAI,WAAW,sBAAsB,GAAG;AACjD,6BAAqB,IAAI,QAAQ,UAAU,KAAK,KAC9C,QAAQ;AAAA,MACZ,WAAW,IAAI,WAAW,eAAe,GAAG;AAC1C,6BAAqB,IAAI,QAAQ,UAAU,KAAK,KAC9C,QAAQ;AAAA,MACZ,OAAO;AAEL,6BAAqB,IAAI,QAAQ,UAAU,KAAK,KAC9C,QAAQ;AAAA,MACZ;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAeA,QACE,OACA,kBAAkB,OAClB,iBAAiB,OACjB,gBAAgB,OAChB,UAAU,CAAC,GACX;AACA,QAAI,QAAQ,GAAG;AACb,cAAQ;AAAA,IACV;AAEA,UAAM,oBAAoB,KAAK,yBAAyB,OAAO,OAAO;AAGtE,QAAI,OAAO,oBAAoB,WAAW;AACxC,YAAM,IAAI;AAAA,QACR,uEAAuE;AAAA,MACzE;AAAA,IACF;AAEA,UAAM,uBAAuB,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAGA,UAAM,YAAY,OAAO,OAAO,oBAAoB;AACpD,UAAM,eAAe,UAAU;AAAA,MAC7B,CAAC,WAAW,iBAAiB,YAAY;AAAA,IAC3C;AAEA,QAAI,SAAS;AACb,QAAI,eAAe;AACjB,eAAS,KAAK,YAAY,YAAY;AAAA,IACxC;AAEA,QAAI,gBAAgB;AAClB,UAAI,eAAe;AACjB,eAAO;AAAA,UACL,GAAG;AAAA,UACH,OAAO;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAEA,aAAO,EAAE,GAAG,sBAAsB,OAAO,aAAa;AAAA,IACxD;AAEA,QAAI,eAAe;AACjB,aAAO,EAAE,OAAO,cAAc,OAAe;AAAA,IAC/C;AAEA,WAAO;AAAA,EACT;AAAA,EAaA,SACE,OACA,kBAAkB,OAClB,iBAAiB,OACjB,gBAAgB,OAChB,UAAU,CAAC,GACX;AACA,UAAM,oBAAoB,KAAK,0BAA0B,OAAO,OAAO;AAEvE,QAAI,OAAO,oBAAoB,WAAW;AAExC,YAAM,IAAI;AAAA,QACR,wEAAwE;AAAA,MAC1E;AAAA,IACF;AAEA,UAAM,uBAAuB,KAAK;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAGA,UAAM,YAAY,OAAO,OAAO,oBAAoB;AACpD,UAAM,eAAe,UAAU;AAAA,MAC7B,CAAC,WAAW,iBAAiB,YAAY;AAAA,IAC3C;AAEA,QAAI,SAAS;AACb,QAAI,eAAe;AACjB,eAAS,KAAK,YAAY,YAAY;AAAA,IACxC;AAEA,QAAI,gBAAgB;AAClB,UAAI,eAAe;AACjB,eAAO;AAAA,UACL,GAAG;AAAA,UACH,OAAO;AAAA,UACP;AAAA,QACF;AAAA,MACF;AACA,aAAO,EAAE,GAAG,sBAAsB,OAAO,aAAa;AAAA,IACxD;AAEA,QAAI,eAAe;AACjB,aAAO,EAAE,OAAO,cAAc,OAAe;AAAA,IAC/C;AAGA,WAAO;AAAA,EACT;AAAA,EASA,cAAc,OAAO;AACnB,UAAM,oBAAoB,KAAK,yBAAyB,KAAK;AAG7D,UAAM,eAAe,OAAO,OAAO,iBAAiB;AAGpD,WAAO,aAAa;AAAA,MAClB,CAAC,WAAW,iBAAiB,YAAY;AAAA,IAC3C;AAAA,EACF;AAAA,EAgBA,0BACE,OACA,UAAU,CAAC,GACX,YAAY,gDACZ,aAAa,+CACb,kBAAkB,+DAClB;AACA,QAAI,QAAQ,mBAAmB,QAAQ,oBAAoB,GAAG;AAC5D,wBAAkB,QAAQ;AAAA,IAC5B;AAEA,QAAI,QAAQ,wBAAwB,QAAQ,yBAAyB,GAAG;AACtE,kBAAY,QAAQ;AAAA,IACtB;AAEA,QAAI,QAAQ,yBAAyB,QAAQ,0BAA0B,GAAG;AACxE,mBAAa,QAAQ;AAAA,IACvB;AAEA,UAAM,oBAAoB,KAAK,yBAAyB,KAAK;AAC7D,UAAM,6BAA6B,CAAC;AAEpC,UAAM,eAAe,OAAO,OAAO,iBAAiB;AAGpD,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,iBAAiB,GAAG;AAE5D,iCAA2B,GAAG,iBAAiB,QAAQ;AAGvD,iCAA2B,GAAG,sBAC5B,QAAQ,aAAa;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA,EASA,eAAe,OAAO;AAIpB,QAAI,cAAc;AAClB,QAAI,mBAAmB;AAEvB,UAAM,oBAAoB,OAAO;AAAA,MAC/B,KAAK,0BAA0B,KAAK;AAAA,IACtC;AAEA,eAAW,CAAC,KAAK,GAAG,KAAK,mBAAmB;AAC1C,UAAI,IAAI,QAAQ,OAAO,IAAI,GAAG;AAC5B,uBAAe;AAAA,MACjB;AAAA,IACF;AAEA,eAAW,CAAC,KAAK,GAAG,KAAK,mBAAmB;AAC1C,UAAI,IAAI,QAAQ,YAAY,IAAI,GAAG;AACjC,4BAAoB;AAAA,MACtB;AAAA,IACF;AAEA,WAAO,cAAc;AAAA,EACvB;AAAA,EAEA,yBACE,gBACA,kBAAkB,wCAClB;AACA,eAAO,6BAAa,iBAAiB,eAAe;AAAA,EACtD;AAAA,EAEA,kBAAkB,gBAAgB,kBAAkB,KAAM;AACxD,WAAO,iBAAiB,kBAAkB;AAAA,EAC5C;AAAA,EAEA,uBAAuB,UAAU,kBAAkB,KAAM;AACvD,WAAO,WAAW,kBAAkB;AAAA,EACtC;AAAA,EAEA,oBAAoB,cAAc;AAChC,WAAO;AAAA,MACL,0BAAsB,6BAAa,eAAe,uCAAsB;AAAA,MACxE,mBAAe,6BAAa,eAAe,+BAAc;AAAA,MACzD,sBAAkB,6BAAa,eAAe,kCAAiB;AAAA,MAC/D,sBAAkB,6BAAa,eAAe,kCAAiB;AAAA,IACjE;AAAA,EACF;AAAA,EAQA,YAAY,MAAM;AAChB,eAAO,6BAAa,MAAM,KAAK,OAAO;AAAA,EACxC;AACF;AAGA,IAAO,oCAAQ;",
6
6
  "names": []
7
7
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/sustainable-web-design-v4.js"],
4
4
  "sourcesContent": ["\"use strict\";\n\n/**\n * Sustainable Web Design version 4\n *\n * Updated calculations and figures from\n * https://sustainablewebdesign.org/estimating-digital-emissions/\n *\n */\n\nimport { fileSize, SWDV4 } from \"./constants/index.js\";\nimport { outputRating } from \"./helpers/index.js\";\n\nconst {\n OPERATIONAL_KWH_PER_GB_DATACENTER,\n OPERATIONAL_KWH_PER_GB_NETWORK,\n OPERATIONAL_KWH_PER_GB_DEVICE,\n EMBODIED_KWH_PER_GB_DATACENTER,\n EMBODIED_KWH_PER_GB_NETWORK,\n EMBODIED_KWH_PER_GB_DEVICE,\n GLOBAL_GRID_INTENSITY,\n} = SWDV4;\n\n/**\n * Output the CO2e emissions for each system segment\n * @param {object} operationalEmissions\n * @param {object} embodiedEmissions\n * @returns {object}\n */\nfunction outputSegments(operationalEmissions, embodiedEmissions) {\n const totalOperationalCO2e =\n operationalEmissions.dataCenter +\n operationalEmissions.network +\n operationalEmissions.device;\n const totalEmbodiedCO2e =\n embodiedEmissions.dataCenter +\n embodiedEmissions.network +\n embodiedEmissions.device;\n\n const dataCenterCO2e =\n operationalEmissions.dataCenter + embodiedEmissions.dataCenter;\n const networkCO2e = operationalEmissions.network + embodiedEmissions.network;\n const consumerDeviceCO2e =\n operationalEmissions.device + embodiedEmissions.device;\n\n return {\n dataCenterOperationalCO2e: operationalEmissions.dataCenter,\n networkOperationalCO2e: operationalEmissions.network,\n consumerDeviceOperationalCO2e: operationalEmissions.device,\n dataCenterEmbodiedCO2e: embodiedEmissions.dataCenter,\n networkEmbodiedCO2e: embodiedEmissions.network,\n consumerDeviceEmbodiedCO2e: embodiedEmissions.device,\n totalEmbodiedCO2e,\n totalOperationalCO2e,\n dataCenterCO2e,\n networkCO2e,\n consumerDeviceCO2e,\n };\n}\n\n/**\n * Determine the green hosting factor\n * @param {boolean} green\n * @param {object} options\n * @returns {number}\n */\nfunction getGreenHostingFactor(green, options) {\n if (green) {\n return 1.0;\n } else if (options?.greenHostingFactor || options?.greenHostingFactor === 0) {\n return options.greenHostingFactor;\n }\n return 0;\n}\nclass SustainableWebDesign {\n constructor(options) {\n this.allowRatings = true;\n this.options = options;\n this.version = 4;\n }\n\n /**\n * Calculate the operational energy of data transfer for each system segment\n *\n * @param {number} bytes\n * @returns {object}\n */\n operationalEnergyPerSegment(bytes) {\n const transferedBytesToGb = bytes / fileSize.GIGABYTE;\n const dataCenter = transferedBytesToGb * OPERATIONAL_KWH_PER_GB_DATACENTER;\n const network = transferedBytesToGb * OPERATIONAL_KWH_PER_GB_NETWORK;\n const device = transferedBytesToGb * OPERATIONAL_KWH_PER_GB_DEVICE;\n\n return {\n dataCenter,\n network,\n device,\n };\n }\n\n /**\n * Calculate the operational emissions of data transfer for each system segment\n *\n * @param {number} bytes\n * @param {object} options\n * @returns {object}\n */\n operationalEmissions(bytes, options = {}) {\n const { dataCenter, network, device } =\n this.operationalEnergyPerSegment(bytes);\n\n let dataCenterGridIntensity = GLOBAL_GRID_INTENSITY;\n let networkGridIntensity = GLOBAL_GRID_INTENSITY;\n let deviceGridIntensity = GLOBAL_GRID_INTENSITY;\n\n if (options?.gridIntensity) {\n const { device, network, dataCenter } = options.gridIntensity;\n\n if (device?.value || device?.value === 0) {\n deviceGridIntensity = device.value;\n }\n\n if (network?.value || network?.value === 0) {\n networkGridIntensity = network.value;\n }\n\n if (dataCenter?.value || dataCenter?.value === 0) {\n dataCenterGridIntensity = dataCenter.value;\n }\n }\n\n const dataCenterEmissions = dataCenter * dataCenterGridIntensity;\n const networkEmissions = network * networkGridIntensity;\n const deviceEmissions = device * deviceGridIntensity;\n\n return {\n dataCenter: dataCenterEmissions,\n network: networkEmissions,\n device: deviceEmissions,\n };\n }\n\n /**\n * Calculate the embodied energy of data transfer for each system segment\n *\n * @param {number} bytes\n * @returns {object}\n */\n embodiedEnergyPerSegment(bytes) {\n const transferedBytesToGb = bytes / fileSize.GIGABYTE;\n const dataCenter = transferedBytesToGb * EMBODIED_KWH_PER_GB_DATACENTER;\n const network = transferedBytesToGb * EMBODIED_KWH_PER_GB_NETWORK;\n const device = transferedBytesToGb * EMBODIED_KWH_PER_GB_DEVICE;\n\n return {\n dataCenter,\n network,\n device,\n };\n }\n\n /**\n * Calculate the embodied emissions of data transfer for each system segment\n *\n * @param {number} bytes\n * @returns {object}\n */\n embodiedEmissions(bytes) {\n const { dataCenter, network, device } =\n this.embodiedEnergyPerSegment(bytes);\n\n const dataCenterGridIntensity = GLOBAL_GRID_INTENSITY;\n const networkGridIntensity = GLOBAL_GRID_INTENSITY;\n const deviceGridIntensity = GLOBAL_GRID_INTENSITY;\n\n // NOTE: Per the guidance in the SWDM v4, the grid intensity values for embodied emissions are fixed to the global grid intensity.\n\n const dataCenterEmissions = dataCenter * dataCenterGridIntensity;\n const networkEmissions = network * networkGridIntensity;\n const deviceEmissions = device * deviceGridIntensity;\n\n return {\n dataCenter: dataCenterEmissions,\n network: networkEmissions,\n device: deviceEmissions,\n };\n }\n\n // NOTE: Setting green: true should result in a greenHostingFactor of 1.0\n perByte(\n bytes,\n green = false,\n segmented = false,\n ratingResults = false,\n options = {}\n ) {\n if (bytes < 1) {\n return 0;\n }\n\n const operationalEmissions = this.operationalEmissions(bytes, options);\n const embodiedEmissions = this.embodiedEmissions(bytes);\n const greenHostingFactor = getGreenHostingFactor(green, options);\n\n const totalEmissions = {\n dataCenter:\n operationalEmissions.dataCenter * (1 - greenHostingFactor) +\n embodiedEmissions.dataCenter,\n network: operationalEmissions.network + embodiedEmissions.network,\n device: operationalEmissions.device + embodiedEmissions.device,\n };\n\n const total =\n totalEmissions.dataCenter +\n totalEmissions.network +\n totalEmissions.device;\n\n let rating = null;\n if (ratingResults) {\n rating = this.ratingScale(total);\n }\n\n if (segmented) {\n const segments = {\n ...outputSegments(operationalEmissions, embodiedEmissions),\n };\n\n if (ratingResults) {\n return {\n ...segments,\n total,\n rating,\n };\n }\n return { ...segments, total };\n }\n\n if (ratingResults) {\n return { total, rating };\n }\n\n return total;\n }\n\n perVisit(\n bytes,\n green = false,\n segmented = false,\n ratingResults = false,\n options = {}\n ) {\n let firstViewRatio = 1;\n let returnViewRatio = 0;\n let dataReloadRatio = 0;\n const greenHostingFactor = getGreenHostingFactor(green, options);\n const operationalEmissions = this.operationalEmissions(bytes, options);\n const embodiedEmissions = this.embodiedEmissions(bytes);\n\n if (bytes < 1) {\n return 0;\n }\n\n if (options.firstVisitPercentage || options.firstVisitPercentage === 0) {\n firstViewRatio = options.firstVisitPercentage;\n }\n\n if (options.returnVisitPercentage || options.returnVisitPercentage === 0) {\n returnViewRatio = options.returnVisitPercentage;\n }\n\n if (options.dataReloadRatio || options.dataReloadRatio === 0) {\n dataReloadRatio = options.dataReloadRatio;\n }\n\n // NOTE: First visit emissions are calculated as the sum of all three segments without any caching.\n\n const firstVisitEmissions =\n operationalEmissions.dataCenter * (1 - greenHostingFactor) +\n embodiedEmissions.dataCenter +\n operationalEmissions.network +\n embodiedEmissions.network +\n operationalEmissions.device +\n embodiedEmissions.device;\n\n // NOTE: First visit emissions are calculated as the sum of all three segments with caching applied.\n\n const returnVisitEmissions =\n (operationalEmissions.dataCenter * (1 - greenHostingFactor) +\n embodiedEmissions.dataCenter +\n operationalEmissions.network +\n embodiedEmissions.network +\n operationalEmissions.device +\n embodiedEmissions.device) *\n (1 - dataReloadRatio);\n\n // NOTE: The total emissions account for the percentage of first and return visits.\n const total =\n firstVisitEmissions * firstViewRatio +\n returnVisitEmissions * returnViewRatio;\n\n let rating = null;\n if (ratingResults) {\n rating = this.ratingScale(total);\n }\n\n if (segmented) {\n const segments = {\n ...outputSegments(operationalEmissions, embodiedEmissions),\n firstVisitCO2e: firstVisitEmissions,\n returnVisitCO2e: returnVisitEmissions,\n };\n\n if (ratingResults) {\n return {\n ...segments,\n total,\n rating,\n };\n }\n\n return { ...segments, total };\n }\n\n if (ratingResults) {\n return { total, rating };\n }\n\n return total;\n }\n\n /**\n * Determines the rating of a website's sustainability based on its CO2 emissions.\n *\n * @param {number} co2e - The CO2 emissions of the website in grams.\n * @returns {string} The sustainability rating, ranging from \"A+\" (best) to \"F\" (worst).\n */\n ratingScale(co2e) {\n return outputRating(co2e, this.version);\n }\n}\n\nexport { SustainableWebDesign };\nexport default SustainableWebDesign;\n"],
5
- "mappings": "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",
6
- "names": []
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,uBAAgC;AAChC,qBAA6B;AAE7B,MAAM;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAI;AAQJ,SAAS,eAAe,sBAAsB,mBAAmB;AAC/D,QAAM,uBACJ,qBAAqB,aACrB,qBAAqB,UACrB,qBAAqB;AACvB,QAAM,oBACJ,kBAAkB,aAClB,kBAAkB,UAClB,kBAAkB;AAEpB,QAAM,iBACJ,qBAAqB,aAAa,kBAAkB;AACtD,QAAM,cAAc,qBAAqB,UAAU,kBAAkB;AACrE,QAAM,qBACJ,qBAAqB,SAAS,kBAAkB;AAElD,SAAO;AAAA,IACL,2BAA2B,qBAAqB;AAAA,IAChD,wBAAwB,qBAAqB;AAAA,IAC7C,+BAA+B,qBAAqB;AAAA,IACpD,wBAAwB,kBAAkB;AAAA,IAC1C,qBAAqB,kBAAkB;AAAA,IACvC,4BAA4B,kBAAkB;AAAA,IAC9C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAQA,SAAS,sBAAsB,OAAO,SAAS;AAC7C,MAAI,OAAO;AACT,WAAO;AAAA,EACT,YAAW,mCAAS,wBAAsB,mCAAS,wBAAuB,GAAG;AAC3E,WAAO,QAAQ;AAAA,EACjB;AACA,SAAO;AACT;AACA,MAAM,qBAAqB;AAAA,EACzB,YAAY,SAAS;AACnB,SAAK,eAAe;AACpB,SAAK,UAAU;AACf,SAAK,UAAU;AAAA,EACjB;AAAA,EAQA,4BAA4B,OAAO;AACjC,UAAM,sBAAsB,QAAQ,0BAAS;AAC7C,UAAM,aAAa,sBAAsB;AACzC,UAAM,UAAU,sBAAsB;AACtC,UAAM,SAAS,sBAAsB;AAErC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EASA,qBAAqB,OAAO,UAAU,CAAC,GAAG;AACxC,UAAM,EAAE,YAAY,SAAS,OAAO,IAClC,KAAK,4BAA4B,KAAK;AAExC,QAAI,0BAA0B;AAC9B,QAAI,uBAAuB;AAC3B,QAAI,sBAAsB;AAE1B,QAAI,mCAAS,eAAe;AAC1B,YAAM,EAAE,QAAAA,SAAQ,SAAAC,UAAS,YAAAC,YAAW,IAAI,QAAQ;AAEhD,WAAIF,WAAA,gBAAAA,QAAQ,WAASA,WAAA,gBAAAA,QAAQ,WAAU,GAAG;AACxC,8BAAsBA,QAAO;AAAA,MAC/B;AAEA,WAAIC,YAAA,gBAAAA,SAAS,WAASA,YAAA,gBAAAA,SAAS,WAAU,GAAG;AAC1C,+BAAuBA,SAAQ;AAAA,MACjC;AAEA,WAAIC,eAAA,gBAAAA,YAAY,WAASA,eAAA,gBAAAA,YAAY,WAAU,GAAG;AAChD,kCAA0BA,YAAW;AAAA,MACvC;AAAA,IACF;AAEA,UAAM,sBAAsB,aAAa;AACzC,UAAM,mBAAmB,UAAU;AACnC,UAAM,kBAAkB,SAAS;AAEjC,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAQA,yBAAyB,OAAO;AAC9B,UAAM,sBAAsB,QAAQ,0BAAS;AAC7C,UAAM,aAAa,sBAAsB;AACzC,UAAM,UAAU,sBAAsB;AACtC,UAAM,SAAS,sBAAsB;AAErC,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAQA,kBAAkB,OAAO;AACvB,UAAM,EAAE,YAAY,SAAS,OAAO,IAClC,KAAK,yBAAyB,KAAK;AAErC,UAAM,0BAA0B;AAChC,UAAM,uBAAuB;AAC7B,UAAM,sBAAsB;AAI5B,UAAM,sBAAsB,aAAa;AACzC,UAAM,mBAAmB,UAAU;AACnC,UAAM,kBAAkB,SAAS;AAEjC,WAAO;AAAA,MACL,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAGA,QACE,OACA,QAAQ,OACR,YAAY,OACZ,gBAAgB,OAChB,UAAU,CAAC,GACX;AACA,QAAI,QAAQ,GAAG;AACb,aAAO;AAAA,IACT;AAEA,UAAM,uBAAuB,KAAK,qBAAqB,OAAO,OAAO;AACrE,UAAM,oBAAoB,KAAK,kBAAkB,KAAK;AACtD,UAAM,qBAAqB,sBAAsB,OAAO,OAAO;AAE/D,UAAM,iBAAiB;AAAA,MACrB,YACE,qBAAqB,cAAc,IAAI,sBACvC,kBAAkB;AAAA,MACpB,SAAS,qBAAqB,UAAU,kBAAkB;AAAA,MAC1D,QAAQ,qBAAqB,SAAS,kBAAkB;AAAA,IAC1D;AAEA,UAAM,QACJ,eAAe,aACf,eAAe,UACf,eAAe;AAEjB,QAAI,SAAS;AACb,QAAI,eAAe;AACjB,eAAS,KAAK,YAAY,KAAK;AAAA,IACjC;AAEA,QAAI,WAAW;AACb,YAAM,WAAW;AAAA,QACf,GAAG,eAAe,sBAAsB,iBAAiB;AAAA,MAC3D;AAEA,UAAI,eAAe;AACjB,eAAO;AAAA,UACL,GAAG;AAAA,UACH;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,aAAO,EAAE,GAAG,UAAU,MAAM;AAAA,IAC9B;AAEA,QAAI,eAAe;AACjB,aAAO,EAAE,OAAO,OAAO;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,SACE,OACA,QAAQ,OACR,YAAY,OACZ,gBAAgB,OAChB,UAAU,CAAC,GACX;AACA,QAAI,iBAAiB;AACrB,QAAI,kBAAkB;AACtB,QAAI,kBAAkB;AACtB,UAAM,qBAAqB,sBAAsB,OAAO,OAAO;AAC/D,UAAM,uBAAuB,KAAK,qBAAqB,OAAO,OAAO;AACrE,UAAM,oBAAoB,KAAK,kBAAkB,KAAK;AAEtD,QAAI,QAAQ,GAAG;AACb,aAAO;AAAA,IACT;AAEA,QAAI,QAAQ,wBAAwB,QAAQ,yBAAyB,GAAG;AACtE,uBAAiB,QAAQ;AAAA,IAC3B;AAEA,QAAI,QAAQ,yBAAyB,QAAQ,0BAA0B,GAAG;AACxE,wBAAkB,QAAQ;AAAA,IAC5B;AAEA,QAAI,QAAQ,mBAAmB,QAAQ,oBAAoB,GAAG;AAC5D,wBAAkB,QAAQ;AAAA,IAC5B;AAIA,UAAM,sBACJ,qBAAqB,cAAc,IAAI,sBACvC,kBAAkB,aAClB,qBAAqB,UACrB,kBAAkB,UAClB,qBAAqB,SACrB,kBAAkB;AAIpB,UAAM,wBACH,qBAAqB,cAAc,IAAI,sBACtC,kBAAkB,aAClB,qBAAqB,UACrB,kBAAkB,UAClB,qBAAqB,SACrB,kBAAkB,WACnB,IAAI;AAGP,UAAM,QACJ,sBAAsB,iBACtB,uBAAuB;AAEzB,QAAI,SAAS;AACb,QAAI,eAAe;AACjB,eAAS,KAAK,YAAY,KAAK;AAAA,IACjC;AAEA,QAAI,WAAW;AACb,YAAM,WAAW;AAAA,QACf,GAAG,eAAe,sBAAsB,iBAAiB;AAAA,QACzD,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,MACnB;AAEA,UAAI,eAAe;AACjB,eAAO;AAAA,UACL,GAAG;AAAA,UACH;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAEA,aAAO,EAAE,GAAG,UAAU,MAAM;AAAA,IAC9B;AAEA,QAAI,eAAe;AACjB,aAAO,EAAE,OAAO,OAAO;AAAA,IACzB;AAEA,WAAO;AAAA,EACT;AAAA,EAQA,YAAY,MAAM;AAChB,eAAO,6BAAa,MAAM,KAAK,OAAO;AAAA,EACxC;AACF;AAGA,IAAO,oCAAQ;",
6
+ "names": ["device", "network", "dataCenter"]
7
7
  }
package/dist/esm/co2.js CHANGED
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
4
3
  var __hasOwnProp = Object.prototype.hasOwnProperty;
@@ -46,19 +45,25 @@ class CO2 {
46
45
  this.model = new SustainableWebDesignV4();
47
46
  }
48
47
  } else if (options == null ? void 0 : options.model) {
49
- 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.
50
- See https://developers.thegreenwebfoundation.org/co2js/models/ to learn more about the models available in CO2.js.`);
48
+ throw new Error(
49
+ `"${options.model}" is not a valid model. Please use "1byte" for the OneByte model, and "swd" for the Sustainable Web Design model.
50
+ See https://developers.thegreenwebfoundation.org/co2js/models/ to learn more about the models available in CO2.js.`
51
+ );
51
52
  }
52
53
  if ((options == null ? void 0 : options.rating) && typeof options.rating !== "boolean") {
53
- throw new Error(`The rating option must be a boolean. Please use true or false.
54
- See https://developers.thegreenwebfoundation.org/co2js/options/ to learn more about the options available in CO2.js.`);
54
+ throw new Error(
55
+ `The rating option must be a boolean. Please use true or false.
56
+ See https://developers.thegreenwebfoundation.org/co2js/options/ to learn more about the options available in CO2.js.`
57
+ );
55
58
  }
56
59
  const allowRatings = !!this.model.allowRatings;
57
60
  this._segment = (options == null ? void 0 : options.results) === "segment";
58
61
  this._rating = (options == null ? void 0 : options.rating) === true;
59
62
  if (!allowRatings && this._rating) {
60
- throw new Error(`The rating system is not supported in the model you are using. Try using the Sustainable Web Design model instead.
61
- See https://developers.thegreenwebfoundation.org/co2js/models/ to learn more about the models available in CO2.js.`);
63
+ throw new Error(
64
+ `The rating system is not supported in the model you are using. Try using the Sustainable Web Design model instead.
65
+ See https://developers.thegreenwebfoundation.org/co2js/models/ to learn more about the models available in CO2.js.`
66
+ );
62
67
  }
63
68
  }
64
69
  perByte(bytes, green = false) {
@@ -69,8 +74,10 @@ See https://developers.thegreenwebfoundation.org/co2js/models/ to learn more abo
69
74
  if ((_a = this.model) == null ? void 0 : _a.perVisit) {
70
75
  return this.model.perVisit(bytes, green, this._segment, this._rating);
71
76
  } else {
72
- throw new Error(`The perVisit() method is not supported in the model you are using. Try using perByte() instead.
73
- See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`);
77
+ throw new Error(
78
+ `The perVisit() method is not supported in the model you are using. Try using perByte() instead.
79
+ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`
80
+ );
74
81
  }
75
82
  }
76
83
  perByteTrace(bytes, green = false, options = {}) {
@@ -86,7 +93,13 @@ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more ab
86
93
  "returnVisitPercentage"
87
94
  ]);
88
95
  return {
89
- co2: this.model.perByte(bytes, green, this._segment, this._rating, adjustments),
96
+ co2: this.model.perByte(
97
+ bytes,
98
+ green,
99
+ this._segment,
100
+ this._rating,
101
+ adjustments
102
+ ),
90
103
  green,
91
104
  variables: __spreadValues({
92
105
  description: "Below are the variables used to calculate this CO2 estimate.",
@@ -103,7 +116,13 @@ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more ab
103
116
  const adjustments = parseOptions(options, this.model.version, green);
104
117
  const _b = adjustments, { gridIntensity } = _b, variables = __objRest(_b, ["gridIntensity"]);
105
118
  return {
106
- co2: this.model.perVisit(bytes, green, this._segment, this._rating, adjustments),
119
+ co2: this.model.perVisit(
120
+ bytes,
121
+ green,
122
+ this._segment,
123
+ this._rating,
124
+ adjustments
125
+ ),
107
126
  green,
108
127
  variables: __spreadValues({
109
128
  description: "Below are the variables used to calculate this CO2 estimate.",
@@ -114,8 +133,10 @@ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more ab
114
133
  }, variables)
115
134
  };
116
135
  } else {
117
- throw new Error(`The perVisitTrace() method is not supported in the model you are using. Try using perByte() instead.
118
- See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`);
136
+ throw new Error(
137
+ `The perVisitTrace() method is not supported in the model you are using. Try using perByte() instead.
138
+ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`
139
+ );
119
140
  }
120
141
  }
121
142
  SustainableWebDesignV3() {
@@ -1,4 +1,4 @@
1
- const data = { "AFG": 132.53, "AFRICA": 547.83, "ALB": 24.29, "DZA": 634.61, "ASM": 611.11, "AGO": 174.73, "ATG": 611.11, "ARG": 353.96, "ARM": 264.54, "ABW": 561.22, "ASEAN": 570.41, "ASIA": 591.13, "AUS": 556.3, "AUT": 110.81, "AZE": 671.39, "BHS": 660.1, "BHR": 904.62, "BGD": 691.41, "BRB": 605.51, "BLR": 441.74, "BEL": 138.11, "BLZ": 225.81, "BEN": 584.07, "BTN": 23.33, "BOL": 531.69, "BIH": 601.29, "BWA": 847.91, "BRA": 96.4, "BRN": 893.91, "BGR": 335.33, "BFA": 467.53, "BDI": 250, "CPV": 558.14, "KHM": 417.71, "CMR": 305.42, "CAN": 165.15, "CYM": 642.86, "CAF": 0, "TCD": 628.57, "CHL": 291.11, "CHN": 583.61, "COL": 259.51, "COM": 642.86, "COG": 700, "COD": 24.46, "COK": 250, "CRI": 53.38, "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": 166.91, "EGY": 574.04, "SLV": 224.76, "GNQ": 591.84, "ERI": 631.58, "EST": 416.67, "SWZ": 172.41, "ETH": 24.64, "EU": 243.93, "EUROPE": 302.29, "FLK": 500, "FRO": 404.76, "FJI": 288.46, "FIN": 79.16, "FRA": 56.02, "GUF": 217.82, "PYF": 442.86, "G20": 477.89, "G7": 341.44, "GAB": 491.6, "GMB": 666.67, "GEO": 167.59, "DEU": 381.41, "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": 713.01, "IDN": 682.43, "IRN": 641.73, "IRQ": 688.81, "IRL": 282.98, "ISR": 582.93, "ITA": 330.72, "JAM": 555.56, "JPN": 493.59, "JOR": 540.92, "KAZ": 821.9, "KEN": 71.2, "KIR": 666.67, "XKX": 894.65, "KWT": 649.16, "KGZ": 147.29, "LAO": 265.51, "LATIN AMERICA AND CARIBBEAN": 256.03, "LVA": 123.99, "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": 607.88, "MDV": 611.77, "MLI": 408, "MLT": 459.14, "MTQ": 523.18, "MRT": 464.71, "MUS": 632.48, "MEX": 492.34, "MIDDLE EAST": 643.04, "MDA": 643.46, "MNG": 775.31, "MNE": 418.09, "MSR": 1e3, "MAR": 624.45, "MOZ": 135.65, "MMR": 436.92, "NAM": 59.26, "NRU": 750, "NPL": 24.44, "NLD": 268.48, "NCL": 660.58, "NZL": 112.76, "NIC": 265.12, "NER": 670.89, "NGA": 523.25, "NORTH AMERICA": 342.95, "PRK": 389.59, "MKD": 556.19, "NOR": 30.05, "OCEANIA": 495.74, "OECD": 341.27, "OMN": 564.55, "PAK": 440.61, "PSE": 516.13, "PAN": 161.68, "PNG": 507.25, "PRY": 24.31, "PER": 266.48, "POL": 661.93, "PRT": 165.55, "PRI": 677.96, "QAT": 602.5, "REU": 572.82, "ROU": 240.58, "RUS": 445.02, "RWA": 316.33, "KNA": 636.36, "LCA": 666.67, "SPM": 600, "VCT": 529.41, "WSM": 473.68, "STP": 642.86, "SAU": 696.31, "SEN": 511.6, "SRB": 647.52, "SYC": 564.52, "SLE": 50, "SGP": 470.78, "SVK": 116.77, "SVN": 231.28, "SLB": 700, "SOM": 578.95, "ZAF": 709.69, "KOR": 432.11, "SSD": 629.03, "ESP": 174.05, "LKA": 509.78, "SDN": 263.16, "SUR": 349.28, "SWE": 40.7, "CHE": 34.68, "SYR": 701.66, "TWN": 644.36, "TJK": 116.86, "TZA": 339.25, "THA": 549.85, "PHL": 610.74, "TGO": 443.18, "TON": 625, "TTO": 681.53, "TUN": 563.96, "TUR": 464.59, "TKM": 1306.03, "TCA": 653.85, "UGA": 44.53, "UKR": 256.21, "ARE": 492.7, "GBR": 228.25, "USA": 369.47, "URY": 128.79, "UZB": 1167.6, "VUT": 571.43, "VEN": 185.8, "VNM": 472.47, "VGB": 647.06, "VIR": 632.35, "WORLD": 481.65, "YEM": 566.1, "ZMB": 111.97, "ZWE": 297.87 };
1
+ const data = { "AFG": 132.53, "AFRICA": 547.83, "ALB": 24.29, "DZA": 634.61, "ASM": 611.11, "AGO": 174.73, "ATG": 611.11, "ARG": 353.96, "ARM": 264.54, "ABW": 561.22, "ASEAN": 570.41, "ASIA": 591.13, "AUS": 556.3, "AUT": 110.78, "AZE": 671.39, "BHS": 660.1, "BHR": 904.62, "BGD": 691.41, "BRB": 605.51, "BLR": 441.74, "BEL": 138.11, "BLZ": 225.81, "BEN": 584.07, "BTN": 23.33, "BOL": 531.69, "BIH": 600.94, "BWA": 847.91, "BRA": 96.4, "BRN": 893.91, "BGR": 335.33, "BFA": 467.53, "BDI": 250, "CPV": 558.14, "KHM": 417.71, "CMR": 305.42, "CAN": 165.15, "CYM": 642.86, "CAF": 0, "TCD": 628.57, "CHL": 291.11, "CHN": 583.61, "COL": 259.51, "COM": 642.86, "COG": 700, "COD": 24.46, "COK": 250, "CRI": 53.38, "CIV": 393.89, "HRV": 204.96, "CUB": 637.61, "CYP": 526.02, "CZE": 449.72, "DNK": 151.65, "DJI": 692.31, "DMA": 529.41, "DOM": 580.78, "ECU": 166.91, "EGY": 574.04, "SLV": 224.76, "GNQ": 591.84, "ERI": 631.58, "EST": 416.67, "SWZ": 172.41, "ETH": 24.64, "EU": 243.89, "EUROPE": 302.27, "FLK": 500, "FRO": 404.76, "FJI": 288.46, "FIN": 79.12, "FRA": 56.02, "GUF": 217.82, "PYF": 442.86, "G20": 477.87, "G7": 341.49, "GAB": 491.6, "GMB": 666.67, "GEO": 167.59, "DEU": 381.41, "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.01, "ISL": 27.68, "IND": 713.01, "IDN": 682.43, "IRN": 641.73, "IRQ": 688.81, "IRL": 282.98, "ISR": 582.93, "ITA": 330.72, "JAM": 555.56, "JPN": 493.59, "JOR": 540.92, "KAZ": 821.9, "KEN": 71.2, "KIR": 666.67, "XKX": 894.65, "KWT": 649.16, "KGZ": 147.29, "LAO": 265.51, "LATIN AMERICA AND CARIBBEAN": 256.03, "LVA": 123.99, "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": 607.88, "MDV": 611.77, "MLI": 408, "MLT": 444.03, "MTQ": 523.18, "MRT": 464.71, "MUS": 632.48, "MEX": 492.34, "MIDDLE EAST": 643.04, "MDA": 643.46, "MNG": 775.31, "MNE": 418.09, "MSR": 1e3, "MAR": 624.45, "MOZ": 135.65, "MMR": 436.92, "NAM": 59.26, "NRU": 750, "NPL": 24.44, "NLD": 268.48, "NCL": 660.58, "NZL": 112.76, "NIC": 265.12, "NER": 670.89, "NGA": 523.25, "NORTH AMERICA": 343.03, "PRK": 389.59, "MKD": 539.55, "NOR": 30.05, "OCEANIA": 495.74, "OECD": 341.31, "OMN": 564.55, "PAK": 440.61, "PSE": 516.13, "PAN": 161.68, "PNG": 507.25, "PRY": 24.31, "PER": 266.48, "POL": 661.93, "PRT": 165.55, "PRI": 677.96, "QAT": 602.5, "REU": 572.82, "ROU": 240.58, "RUS": 445.02, "RWA": 316.33, "KNA": 636.36, "LCA": 666.67, "SPM": 600, "VCT": 529.41, "WSM": 473.68, "STP": 642.86, "SAU": 696.31, "SEN": 511.6, "SRB": 648.2, "SYC": 564.52, "SLE": 50, "SGP": 470.78, "SVK": 116.77, "SVN": 231.28, "SLB": 700, "SOM": 578.95, "ZAF": 709.69, "KOR": 432.11, "SSD": 629.03, "ESP": 174.05, "LKA": 509.78, "SDN": 263.16, "SUR": 349.28, "SWE": 40.7, "CHE": 34.7, "SYR": 701.66, "TWN": 644.36, "TJK": 116.86, "TZA": 339.25, "THA": 549.85, "PHL": 610.74, "TGO": 443.18, "TON": 625, "TTO": 681.53, "TUN": 563.96, "TUR": 464.59, "TKM": 1306.03, "TCA": 653.85, "UGA": 44.53, "UKR": 256.21, "ARE": 492.7, "GBR": 228.25, "USA": 369.53, "URY": 128.79, "UZB": 1167.6, "VUT": 571.43, "VEN": 185.8, "VNM": 472.47, "VGB": 647.06, "VIR": 632.35, "WORLD": 481.63, "YEM": 566.1, "ZMB": 111.97, "ZWE": 297.87 };
2
2
  const type = "average";
3
3
  var average_intensities_min_default = { data, type };
4
4
  export {
@@ -12,93 +12,56 @@ const SWDM4_GLOBAL_GRID_INTENSITY = SWDV4.GLOBAL_GRID_INTENSITY;
12
12
  const formatNumber = (num) => parseFloat(num.toFixed(2));
13
13
  const lessThanEqualTo = (num, limit) => num <= limit;
14
14
  function parseOptions(options = {}, version = 3, green = false) {
15
- var _a, _b, _c, _d, _e, _f;
16
15
  const globalGridIntensity = version === 4 ? SWDM4_GLOBAL_GRID_INTENSITY : SWDM3_GLOBAL_GRID_INTENSITY;
17
16
  if (typeof options !== "object") {
18
17
  throw new Error("Options must be an object");
19
18
  }
20
19
  const adjustments = {};
21
- if (options == null ? void 0 : options.gridIntensity) {
22
- adjustments.gridIntensity = {};
23
- const { device, dataCenter, network } = options.gridIntensity;
24
- if (device || device === 0) {
25
- if (typeof device === "object") {
26
- if (!averageIntensity.data[(_a = device.country) == null ? void 0 : _a.toUpperCase()]) {
27
- console.warn(`"${device.country}" is not a valid country. Please use a valid 3 digit ISO 3166 country code.
20
+ function setIntensity(segment, segmentIntensity) {
21
+ var _a, _b;
22
+ if (segmentIntensity || segmentIntensity === 0) {
23
+ if (typeof segmentIntensity === "object") {
24
+ if (!averageIntensity.data[(_a = segmentIntensity.country) == null ? void 0 : _a.toUpperCase()]) {
25
+ console.warn(
26
+ `"${segmentIntensity.country}" is not a valid country. Please use a valid 3 digit ISO 3166 country code.
28
27
  See https://developers.thegreenwebfoundation.org/co2js/data/ for more information.
29
- Falling back to global average grid intensity.`);
30
- adjustments.gridIntensity["device"] = {
28
+ Falling back to global average grid intensity.`
29
+ );
30
+ adjustments.gridIntensity[segment] = {
31
31
  value: globalGridIntensity
32
32
  };
33
33
  }
34
- adjustments.gridIntensity["device"] = {
35
- country: device.country,
36
- value: parseFloat(averageIntensity.data[(_b = device.country) == null ? void 0 : _b.toUpperCase()])
37
- };
38
- } else if (typeof device === "number") {
39
- adjustments.gridIntensity["device"] = {
40
- value: device
41
- };
42
- } else {
43
- adjustments.gridIntensity["device"] = {
44
- value: globalGridIntensity
45
- };
46
- console.warn(`The device grid intensity must be a number or an object. You passed in a ${typeof device}.
47
- Falling back to global average grid intensity.`);
48
- }
49
- }
50
- if (dataCenter || dataCenter === 0) {
51
- if (typeof dataCenter === "object") {
52
- if (!averageIntensity.data[(_c = dataCenter.country) == null ? void 0 : _c.toUpperCase()]) {
53
- console.warn(`"${dataCenter.country}" is not a valid country. Please use a valid 3 digit ISO 3166 country code.
54
- See https://developers.thegreenwebfoundation.org/co2js/data/ for more information.
55
- Falling back to global average grid intensity.`);
56
- adjustments.gridIntensity["dataCenter"] = {
57
- value: SWDM3_GLOBAL_GRID_INTENSITY
58
- };
59
- }
60
- adjustments.gridIntensity["dataCenter"] = {
61
- country: dataCenter.country,
62
- value: parseFloat(averageIntensity.data[(_d = dataCenter.country) == null ? void 0 : _d.toUpperCase()])
34
+ adjustments.gridIntensity[segment] = {
35
+ country: segmentIntensity.country,
36
+ value: parseFloat(
37
+ averageIntensity.data[(_b = segmentIntensity.country) == null ? void 0 : _b.toUpperCase()]
38
+ )
63
39
  };
64
- } else if (typeof dataCenter === "number") {
65
- adjustments.gridIntensity["dataCenter"] = {
66
- value: dataCenter
40
+ } else if (typeof segmentIntensity === "number") {
41
+ adjustments.gridIntensity[segment] = {
42
+ value: segmentIntensity
67
43
  };
68
44
  } else {
69
- adjustments.gridIntensity["dataCenter"] = {
45
+ adjustments.gridIntensity[segment] = {
70
46
  value: globalGridIntensity
71
47
  };
72
- console.warn(`The data center grid intensity must be a number or an object. You passed in a ${typeof dataCenter}.
73
- Falling back to global average grid intensity.`);
74
- }
75
- }
76
- if (network || network === 0) {
77
- if (typeof network === "object") {
78
- if (!averageIntensity.data[(_e = network.country) == null ? void 0 : _e.toUpperCase()]) {
79
- console.warn(`"${network.country}" is not a valid country. Please use a valid 3 digit ISO 3166 country code.
80
- See https://developers.thegreenwebfoundation.org/co2js/data/ for more information. Falling back to global average grid intensity.
81
- Falling back to global average grid intensity.`);
82
- adjustments.gridIntensity["network"] = {
83
- value: globalGridIntensity
84
- };
85
- }
86
- adjustments.gridIntensity["network"] = {
87
- country: network.country,
88
- value: parseFloat(averageIntensity.data[(_f = network.country) == null ? void 0 : _f.toUpperCase()])
89
- };
90
- } else if (typeof network === "number") {
91
- adjustments.gridIntensity["network"] = {
92
- value: network
93
- };
94
- } else {
95
- adjustments.gridIntensity["network"] = {
96
- value: globalGridIntensity
97
- };
98
- console.warn(`The network grid intensity must be a number or an object. You passed in a ${typeof network}.
99
- Falling back to global average grid intensity.`);
48
+ console.warn(
49
+ `The ${segment} grid intensity must be a number or an object. You passed in a ${typeof segmentIntensity}.
50
+ Falling back to global average grid intensity.`
51
+ );
100
52
  }
53
+ } else {
54
+ adjustments.gridIntensity[segment] = {
55
+ value: globalGridIntensity
56
+ };
101
57
  }
58
+ }
59
+ if (options == null ? void 0 : options.gridIntensity) {
60
+ adjustments.gridIntensity = {};
61
+ const { device, dataCenter, network } = options.gridIntensity;
62
+ setIntensity("device", device);
63
+ setIntensity("dataCenter", dataCenter);
64
+ setIntensity("network", network);
102
65
  } else {
103
66
  adjustments.gridIntensity = {
104
67
  device: { value: globalGridIntensity },
@@ -112,18 +75,24 @@ Falling back to global average grid intensity.`);
112
75
  adjustments.dataReloadRatio = options.dataReloadRatio;
113
76
  } else {
114
77
  adjustments.dataReloadRatio = version === 3 ? PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD : 0;
115
- console.warn(`The dataReloadRatio option must be a number between 0 and 1. You passed in ${options.dataReloadRatio}.
116
- Falling back to default value.`);
78
+ console.warn(
79
+ `The dataReloadRatio option must be a number between 0 and 1. You passed in ${options.dataReloadRatio}.
80
+ Falling back to default value.`
81
+ );
117
82
  }
118
83
  } else {
119
84
  adjustments.dataReloadRatio = version === 3 ? PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD : 0;
120
- console.warn(`The dataReloadRatio option must be a number. You passed in a ${typeof options.dataReloadRatio}.
121
- Falling back to default value.`);
85
+ console.warn(
86
+ `The dataReloadRatio option must be a number. You passed in a ${typeof options.dataReloadRatio}.
87
+ Falling back to default value.`
88
+ );
122
89
  }
123
90
  } else {
124
91
  adjustments.dataReloadRatio = version === 3 ? PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD : 0;
125
- console.warn(`The dataReloadRatio option must be a number. You passed in a ${typeof options.dataReloadRatio}.
126
- Falling back to default value.`);
92
+ console.warn(
93
+ `The dataReloadRatio option must be a number. You passed in a ${typeof options.dataReloadRatio}.
94
+ Falling back to default value.`
95
+ );
127
96
  }
128
97
  if ((options == null ? void 0 : options.firstVisitPercentage) || options.firstVisitPercentage === 0) {
129
98
  if (typeof options.firstVisitPercentage === "number") {
@@ -131,18 +100,24 @@ Falling back to default value.`);
131
100
  adjustments.firstVisitPercentage = options.firstVisitPercentage;
132
101
  } else {
133
102
  adjustments.firstVisitPercentage = version === 3 ? FIRST_TIME_VIEWING_PERCENTAGE : 1;
134
- console.warn(`The firstVisitPercentage option must be a number between 0 and 1. You passed in ${options.firstVisitPercentage}.
135
- Falling back to default value.`);
103
+ console.warn(
104
+ `The firstVisitPercentage option must be a number between 0 and 1. You passed in ${options.firstVisitPercentage}.
105
+ Falling back to default value.`
106
+ );
136
107
  }
137
108
  } else {
138
109
  adjustments.firstVisitPercentage = version === 3 ? FIRST_TIME_VIEWING_PERCENTAGE : 1;
139
- console.warn(`The firstVisitPercentage option must be a number. You passed in a ${typeof options.firstVisitPercentage}.
140
- Falling back to default value.`);
110
+ console.warn(
111
+ `The firstVisitPercentage option must be a number. You passed in a ${typeof options.firstVisitPercentage}.
112
+ Falling back to default value.`
113
+ );
141
114
  }
142
115
  } else {
143
116
  adjustments.firstVisitPercentage = version === 3 ? FIRST_TIME_VIEWING_PERCENTAGE : 1;
144
- console.warn(`The firstVisitPercentage option must be a number. You passed in a ${typeof options.firstVisitPercentage}.
145
- Falling back to default value.`);
117
+ console.warn(
118
+ `The firstVisitPercentage option must be a number. You passed in a ${typeof options.firstVisitPercentage}.
119
+ Falling back to default value.`
120
+ );
146
121
  }
147
122
  if ((options == null ? void 0 : options.returnVisitPercentage) || options.returnVisitPercentage === 0) {
148
123
  if (typeof options.returnVisitPercentage === "number") {
@@ -150,18 +125,24 @@ Falling back to default value.`);
150
125
  adjustments.returnVisitPercentage = options.returnVisitPercentage;
151
126
  } else {
152
127
  adjustments.returnVisitPercentage = version === 3 ? RETURNING_VISITOR_PERCENTAGE : 0;
153
- console.warn(`The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}.
154
- Falling back to default value.`);
128
+ console.warn(
129
+ `The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}.
130
+ Falling back to default value.`
131
+ );
155
132
  }
156
133
  } else {
157
134
  adjustments.returnVisitPercentage = version === 3 ? RETURNING_VISITOR_PERCENTAGE : 0;
158
- console.warn(`The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}.
159
- Falling back to default value.`);
135
+ console.warn(
136
+ `The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}.
137
+ Falling back to default value.`
138
+ );
160
139
  }
161
140
  } else {
162
141
  adjustments.returnVisitPercentage = version === 3 ? RETURNING_VISITOR_PERCENTAGE : 0;
163
- console.warn(`The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}.
164
- Falling back to default value.`);
142
+ console.warn(
143
+ `The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}.
144
+ Falling back to default value.`
145
+ );
165
146
  }
166
147
  if ((options == null ? void 0 : options.greenHostingFactor) || options.greenHostingFactor === 0 && version === 4) {
167
148
  if (typeof options.greenHostingFactor === "number") {
@@ -169,13 +150,17 @@ Falling back to default value.`);
169
150
  adjustments.greenHostingFactor = options.greenHostingFactor;
170
151
  } else {
171
152
  adjustments.greenHostingFactor = 0;
172
- console.warn(`The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}.
173
- Falling back to default value.`);
153
+ console.warn(
154
+ `The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}.
155
+ Falling back to default value.`
156
+ );
174
157
  }
175
158
  } else {
176
159
  adjustments.greenHostingFactor = 0;
177
- console.warn(`The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}.
178
- Falling back to default value.`);
160
+ console.warn(
161
+ `The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}.
162
+ Falling back to default value.`
163
+ );
179
164
  }
180
165
  } else if (version === 4) {
181
166
  adjustments.greenHostingFactor = 0;
@@ -186,7 +171,7 @@ Falling back to default value.`);
186
171
  return adjustments;
187
172
  }
188
173
  function getApiRequestHeaders(comment = "") {
189
- return { "User-Agent": `co2js/${"0.16.1"} ${comment}` };
174
+ return { "User-Agent": `co2js/${"0.16.3"} ${comment}` };
190
175
  }
191
176
  function outputRating(co2e, swdmVersion) {
192
177
  let {
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import { getApiRequestHeaders } from "./helpers/index.js";
3
2
  import hostingJSON from "./hosting-json.js";
4
3
  function check(domain, optionsOrAgentId) {
@@ -13,9 +12,12 @@ function check(domain, optionsOrAgentId) {
13
12
  }
14
13
  }
15
14
  async function checkAgainstAPI(domain, options = {}) {
16
- const req = await fetch(`https://api.thegreenwebfoundation.org/greencheck/${domain}`, {
17
- headers: getApiRequestHeaders(options.userAgentIdentifier)
18
- });
15
+ const req = await fetch(
16
+ `https://api.thegreenwebfoundation.org/greencheck/${domain}`,
17
+ {
18
+ headers: getApiRequestHeaders(options.userAgentIdentifier)
19
+ }
20
+ );
19
21
  if (options == null ? void 0 : options.db) {
20
22
  return hostingJSON.check(domain, options.db);
21
23
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
2
  var __commonJS = (cb, mod) => function __require() {
4
3
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import hostingAPI from "./hosting-api.js";
3
2
  function check(domain, optionsOrAgentId) {
4
3
  return hostingAPI.check(domain, optionsOrAgentId);