@tgwf/co2 0.12.1 → 0.12.2

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 (36) hide show
  1. package/data/output/average-intensities-2021.js +3 -90
  2. package/data/output/average-intensities-2021.json +1 -776
  3. package/dist/cjs/1byte.js.map +1 -1
  4. package/dist/cjs/co2.js +44 -13
  5. package/dist/cjs/co2.js.map +2 -2
  6. package/dist/cjs/constants/index.js +4 -1
  7. package/dist/cjs/constants/index.js.map +2 -2
  8. package/dist/cjs/data/average-intensities-2021.min.js +1 -1
  9. package/dist/cjs/data/average-intensities-2021.min.js.map +2 -2
  10. package/dist/cjs/helpers/index.js +57 -27
  11. package/dist/cjs/helpers/index.js.map +1 -1
  12. package/dist/cjs/hosting-api.js +7 -2
  13. package/dist/cjs/hosting-api.js.map +2 -2
  14. package/dist/cjs/hosting-json.node.js +4 -1
  15. package/dist/cjs/hosting-json.node.js.map +2 -2
  16. package/dist/cjs/hosting-node.js +19 -4
  17. package/dist/cjs/hosting-node.js.map +2 -2
  18. package/dist/cjs/hosting.js +4 -1
  19. package/dist/cjs/hosting.js.map +2 -2
  20. package/dist/cjs/index-node.js +4 -1
  21. package/dist/cjs/index-node.js.map +2 -2
  22. package/dist/cjs/index.js +4 -1
  23. package/dist/cjs/index.js.map +2 -2
  24. package/dist/cjs/sustainable-web-design.js +32 -9
  25. package/dist/cjs/sustainable-web-design.js.map +2 -2
  26. package/dist/esm/co2.js +40 -13
  27. package/dist/esm/data/average-intensities-2021.min.js +1 -1
  28. package/dist/esm/helpers/index.js +57 -27
  29. package/dist/esm/hosting-api.js +3 -2
  30. package/dist/esm/hosting.js +0 -1
  31. package/dist/esm/sustainable-web-design.js +28 -9
  32. package/dist/iife/index.js +15 -15
  33. package/dist/iife/index.js.map +3 -3
  34. package/index.d.ts +2 -0
  35. package/package.json +1 -1
  36. package/src/data/average-intensities-2021.min.js +1 -1
@@ -16,7 +16,10 @@ var __copyProps = (to, from, except, desc) => {
16
16
  }
17
17
  return to;
18
18
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
+ mod
22
+ ));
20
23
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
24
  var hosting_node_exports = {};
22
25
  __export(hosting_node_exports, {
@@ -31,7 +34,11 @@ async function getBody(url) {
31
34
  return new Promise(function(resolve, reject) {
32
35
  const req = import_https.default.get(url, function(res) {
33
36
  if (res.statusCode < 200 || res.statusCode >= 300) {
34
- log("Could not get info from the Green Web Foundation API, %s for %s", res.statusCode, url);
37
+ log(
38
+ "Could not get info from the Green Web Foundation API, %s for %s",
39
+ res.statusCode,
40
+ url
41
+ );
35
42
  return reject(new Error(`Status Code: ${res.statusCode}`));
36
43
  }
37
44
  const data = [];
@@ -54,12 +61,20 @@ function check(domain, db) {
54
61
  }
55
62
  }
56
63
  async function checkAgainstAPI(domain) {
57
- const res = JSON.parse(await getBody(`https://api.thegreenwebfoundation.org/greencheck/${domain}`));
64
+ const res = JSON.parse(
65
+ await getBody(`https://api.thegreenwebfoundation.org/greencheck/${domain}`)
66
+ );
58
67
  return res.green;
59
68
  }
60
69
  async function checkDomainsAgainstAPI(domains) {
61
70
  try {
62
- const allGreenCheckResults = JSON.parse(await getBody(`https://api.thegreenwebfoundation.org/v2/greencheckmulti/${JSON.stringify(domains)}`));
71
+ const allGreenCheckResults = JSON.parse(
72
+ await getBody(
73
+ `https://api.thegreenwebfoundation.org/v2/greencheckmulti/${JSON.stringify(
74
+ domains
75
+ )}`
76
+ )
77
+ );
63
78
  return import_hosting_json_node.default.greenDomainsFromResults(allGreenCheckResults);
64
79
  } catch (e) {
65
80
  return [];
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/hosting-node.js"],
4
4
  "sourcesContent": ["/*\n\nWe have a separate node-specific hosting.js file for node.\nThis uses the node-specific APIs for making http requests,\nand doing lookups against local JSON and sqlite databases.\nThis is used in the CommonJS build of co2.js\n\nThis lets us keep the total library small, and dependencies minimal.\n*/\n\nimport https from \"https\";\n\nimport debugFactory from \"debug\";\nconst log = debugFactory(\"tgwf:hosting-node\");\n\nimport hostingJSON from \"./hosting-json.node.js\";\n\n/**\n * Accept a url and perform an http request, returning the body\n * for parsing as JSON.\n *\n * @param {string} url\n * @return {string}\n */\nasync function getBody(url) {\n return new Promise(function (resolve, reject) {\n // Do async job\n const req = https.get(url, function (res) {\n if (res.statusCode < 200 || res.statusCode >= 300) {\n log(\n \"Could not get info from the Green Web Foundation API, %s for %s\",\n res.statusCode,\n url\n );\n return reject(new Error(`Status Code: ${res.statusCode}`));\n }\n const data = [];\n\n res.on(\"data\", (chunk) => {\n data.push(chunk);\n });\n\n res.on(\"end\", () => resolve(Buffer.concat(data).toString()));\n });\n req.end();\n });\n}\n\nfunction check(domain, db) {\n if (db) {\n return hostingJSON.check(domain, db);\n }\n\n // is it a single domain or an array of them?\n if (typeof domain === \"string\") {\n return checkAgainstAPI(domain);\n } else {\n return checkDomainsAgainstAPI(domain);\n }\n}\n\nasync function checkAgainstAPI(domain) {\n const res = JSON.parse(\n await getBody(`https://api.thegreenwebfoundation.org/greencheck/${domain}`)\n );\n return res.green;\n}\n\nasync function checkDomainsAgainstAPI(domains) {\n try {\n const allGreenCheckResults = JSON.parse(\n await getBody(\n `https://api.thegreenwebfoundation.org/v2/greencheckmulti/${JSON.stringify(\n domains\n )}`\n )\n );\n return hostingJSON.greenDomainsFromResults(allGreenCheckResults);\n } catch (e) {\n return [];\n }\n}\n\nasync function checkPage(pageXray, db) {\n const domains = Object.keys(pageXray.domains);\n return check(domains, db);\n}\n\nexport default {\n check,\n checkPage,\n greendomains: hostingJSON.greenDomainsFromResults,\n loadJSON: hostingJSON.loadJSON,\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,mBAAkB;AAElB,mBAAyB;AAGzB,+BAAwB;AAFxB,MAAM,MAAM,0BAAa,mBAAmB;AAW5C,uBAAuB,KAAK;AAC1B,SAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAE5C,UAAM,MAAM,qBAAM,IAAI,KAAK,SAAU,KAAK;AACxC,UAAI,IAAI,aAAa,OAAO,IAAI,cAAc,KAAK;AACjD,YACE,mEACA,IAAI,YACJ,GACF;AACA,eAAO,OAAO,IAAI,MAAM,gBAAgB,IAAI,YAAY,CAAC;AAAA,MAC3D;AACA,YAAM,OAAO,CAAC;AAEd,UAAI,GAAG,QAAQ,CAAC,UAAU;AACxB,aAAK,KAAK,KAAK;AAAA,MACjB,CAAC;AAED,UAAI,GAAG,OAAO,MAAM,QAAQ,OAAO,OAAO,IAAI,EAAE,SAAS,CAAC,CAAC;AAAA,IAC7D,CAAC;AACD,QAAI,IAAI;AAAA,EACV,CAAC;AACH;AAEA,eAAe,QAAQ,IAAI;AACzB,MAAI,IAAI;AACN,WAAO,iCAAY,MAAM,QAAQ,EAAE;AAAA,EACrC;AAGA,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,gBAAgB,MAAM;AAAA,EAC/B,OAAO;AACL,WAAO,uBAAuB,MAAM;AAAA,EACtC;AACF;AAEA,+BAA+B,QAAQ;AACrC,QAAM,MAAM,KAAK,MACf,MAAM,QAAQ,oDAAoD,QAAQ,CAC5E;AACA,SAAO,IAAI;AACb;AAEA,sCAAsC,SAAS;AAC7C,MAAI;AACF,UAAM,uBAAuB,KAAK,MAChC,MAAM,QACJ,4DAA4D,KAAK,UAC/D,OACF,GACF,CACF;AACA,WAAO,iCAAY,wBAAwB,oBAAoB;AAAA,EACjE,SAAS,GAAP;AACA,WAAO,CAAC;AAAA,EACV;AACF;AAEA,yBAAyB,UAAU,IAAI;AACrC,QAAM,UAAU,OAAO,KAAK,SAAS,OAAO;AAC5C,SAAO,MAAM,SAAS,EAAE;AAC1B;AAEA,IAAO,uBAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA,cAAc,iCAAY;AAAA,EAC1B,UAAU,iCAAY;AACxB;",
6
- "names": []
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,mBAAkB;AAElB,mBAAyB;AAGzB,+BAAwB;AAFxB,MAAM,UAAM,aAAAA,SAAa,mBAAmB;AAW5C,eAAe,QAAQ,KAAK;AAC1B,SAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAE5C,UAAM,MAAM,aAAAC,QAAM,IAAI,KAAK,SAAU,KAAK;AACxC,UAAI,IAAI,aAAa,OAAO,IAAI,cAAc,KAAK;AACjD;AAAA,UACE;AAAA,UACA,IAAI;AAAA,UACJ;AAAA,QACF;AACA,eAAO,OAAO,IAAI,MAAM,gBAAgB,IAAI,YAAY,CAAC;AAAA,MAC3D;AACA,YAAM,OAAO,CAAC;AAEd,UAAI,GAAG,QAAQ,CAAC,UAAU;AACxB,aAAK,KAAK,KAAK;AAAA,MACjB,CAAC;AAED,UAAI,GAAG,OAAO,MAAM,QAAQ,OAAO,OAAO,IAAI,EAAE,SAAS,CAAC,CAAC;AAAA,IAC7D,CAAC;AACD,QAAI,IAAI;AAAA,EACV,CAAC;AACH;AAEA,SAAS,MAAM,QAAQ,IAAI;AACzB,MAAI,IAAI;AACN,WAAO,yBAAAC,QAAY,MAAM,QAAQ,EAAE;AAAA,EACrC;AAGA,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,gBAAgB,MAAM;AAAA,EAC/B,OAAO;AACL,WAAO,uBAAuB,MAAM;AAAA,EACtC;AACF;AAEA,eAAe,gBAAgB,QAAQ;AACrC,QAAM,MAAM,KAAK;AAAA,IACf,MAAM,QAAQ,oDAAoD,QAAQ;AAAA,EAC5E;AACA,SAAO,IAAI;AACb;AAEA,eAAe,uBAAuB,SAAS;AAC7C,MAAI;AACF,UAAM,uBAAuB,KAAK;AAAA,MAChC,MAAM;AAAA,QACJ,4DAA4D,KAAK;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,yBAAAA,QAAY,wBAAwB,oBAAoB;AAAA,EACjE,SAAS,GAAP;AACA,WAAO,CAAC;AAAA,EACV;AACF;AAEA,eAAe,UAAU,UAAU,IAAI;AACrC,QAAM,UAAU,OAAO,KAAK,SAAS,OAAO;AAC5C,SAAO,MAAM,SAAS,EAAE;AAC1B;AAEA,IAAO,uBAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA,cAAc,yBAAAA,QAAY;AAAA,EAC1B,UAAU,yBAAAA,QAAY;AACxB;",
6
+ "names": ["debugFactory", "https", "hostingJSON"]
7
7
  }
@@ -17,7 +17,10 @@ var __copyProps = (to, from, except, desc) => {
17
17
  }
18
18
  return to;
19
19
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
21
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
25
  var hosting_exports = {};
23
26
  __export(hosting_exports, {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/hosting.js"],
4
4
  "sourcesContent": ["\"use strict\";\n\nimport debugFactory from \"debug\";\nconst log = debugFactory(\"tgwf:hosting\");\n\nimport hostingAPI from \"./hosting-api.js\";\n\nfunction check(domain, db) {\n return hostingAPI.check(domain);\n}\n\nexport default {\n check,\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAyB;AAGzB,yBAAuB;AAFvB,MAAM,MAAM,0BAAa,cAAc;AAIvC,eAAe,QAAQ,IAAI;AACzB,SAAO,2BAAW,MAAM,MAAM;AAChC;AAEA,IAAO,kBAAQ;AAAA,EACb;AACF;",
6
- "names": []
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAyB;AAGzB,yBAAuB;AAFvB,MAAM,UAAM,aAAAA,SAAa,cAAc;AAIvC,SAAS,MAAM,QAAQ,IAAI;AACzB,SAAO,mBAAAC,QAAW,MAAM,MAAM;AAChC;AAEA,IAAO,kBAAQ;AAAA,EACb;AACF;",
6
+ "names": ["debugFactory", "hostingAPI"]
7
7
  }
@@ -16,7 +16,10 @@ var __copyProps = (to, from, except, desc) => {
16
16
  }
17
17
  return to;
18
18
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
+ mod
22
+ ));
20
23
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
24
  var index_node_exports = {};
22
25
  __export(index_node_exports, {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/index-node.js"],
4
4
  "sourcesContent": ["import co2 from \"./co2.js\";\nimport hosting from \"./hosting-node.js\";\nimport averageIntensity from \"./data/average-intensities-2021.min.js\";\nimport marginalIntensity from \"./data/marginal-intensities-2021.min.js\";\nexport { co2, hosting, averageIntensity, marginalIntensity };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAgB;AAChB,0BAAoB;AACpB,0CAA6B;AAC7B,2CAA8B;",
6
- "names": []
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,8DAAAA;AAAA,EAAA,sBAAAC;AAAA,EAAA,mCAAAC;AAAA,EAAA,8DAAAC;AAAA;AAAA;AAAA,iBAAgB;AAChB,0BAAoB;AACpB,0CAA6B;AAC7B,2CAA8B;",
6
+ "names": ["averageIntensity", "co2", "hosting", "marginalIntensity"]
7
7
  }
package/dist/cjs/index.js CHANGED
@@ -16,7 +16,10 @@ var __copyProps = (to, from, except, desc) => {
16
16
  }
17
17
  return to;
18
18
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
+ mod
22
+ ));
20
23
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
24
  var src_exports = {};
22
25
  __export(src_exports, {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.js"],
4
4
  "sourcesContent": ["import co2 from \"./co2.js\";\nimport hosting from \"./hosting.js\";\nimport averageIntensity from \"./data/average-intensities-2021.min.js\";\nimport marginalIntensity from \"./data/marginal-intensities-2021.min.js\";\n\nexport { co2, hosting, averageIntensity, marginalIntensity };\nexport default { co2, hosting, averageIntensity, marginalIntensity };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAgB;AAChB,qBAAoB;AACpB,0CAA6B;AAC7B,2CAA8B;AAG9B,IAAO,cAAQ,EAAE,yBAAK,iCAAS,+DAAkB,gEAAkB;",
6
- "names": []
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,8DAAAA;AAAA,EAAA,sBAAAC;AAAA,EAAA;AAAA,gCAAAC;AAAA,EAAA,8DAAAC;AAAA;AAAA;AAAA,iBAAgB;AAChB,qBAAoB;AACpB,0CAA6B;AAC7B,2CAA8B;AAG9B,IAAO,cAAQ,EAAE,gBAAAF,SAAK,wBAAAC,SAAS,sDAAAF,SAAkB,wDAAAG,QAAkB;",
6
+ "names": ["averageIntensity", "co2", "hosting", "marginalIntensity"]
7
7
  }
@@ -17,7 +17,10 @@ var __copyProps = (to, from, except, desc) => {
17
17
  }
18
18
  return to;
19
19
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
21
24
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
25
  var sustainable_web_design_exports = {};
23
26
  __export(sustainable_web_design_exports, {
@@ -80,11 +83,19 @@ class SustainableWebDesign {
80
83
  perByte(bytes, carbonIntensity = false, segmentResults = false, options = {}) {
81
84
  const energyBycomponent = this.energyPerByteByComponent(bytes, options);
82
85
  if (typeof carbonIntensity !== "boolean") {
83
- throw new Error(`perByte expects a boolean for the carbon intensity value. Received: ${carbonIntensity}`);
86
+ throw new Error(
87
+ `perByte expects a boolean for the carbon intensity value. Received: ${carbonIntensity}`
88
+ );
84
89
  }
85
- const co2ValuesbyComponent = this.co2byComponent(energyBycomponent, carbonIntensity, options);
90
+ const co2ValuesbyComponent = this.co2byComponent(
91
+ energyBycomponent,
92
+ carbonIntensity,
93
+ options
94
+ );
86
95
  const co2Values = Object.values(co2ValuesbyComponent);
87
- const co2ValuesSum = co2Values.reduce((prevValue, currentValue) => prevValue + currentValue);
96
+ const co2ValuesSum = co2Values.reduce(
97
+ (prevValue, currentValue) => prevValue + currentValue
98
+ );
88
99
  if (segmentResults) {
89
100
  return { ...co2ValuesbyComponent, total: co2ValuesSum };
90
101
  }
@@ -93,11 +104,19 @@ class SustainableWebDesign {
93
104
  perVisit(bytes, carbonIntensity = false, segmentResults = false, options = {}) {
94
105
  const energyBycomponent = this.energyPerVisitByComponent(bytes, options);
95
106
  if (typeof carbonIntensity !== "boolean") {
96
- throw new Error(`perVisit expects a boolean for the carbon intensity value. Received: ${carbonIntensity}`);
107
+ throw new Error(
108
+ `perVisit expects a boolean for the carbon intensity value. Received: ${carbonIntensity}`
109
+ );
97
110
  }
98
- const co2ValuesbyComponent = this.co2byComponent(energyBycomponent, carbonIntensity, options);
111
+ const co2ValuesbyComponent = this.co2byComponent(
112
+ energyBycomponent,
113
+ carbonIntensity,
114
+ options
115
+ );
99
116
  const co2Values = Object.values(co2ValuesbyComponent);
100
- const co2ValuesSum = co2Values.reduce((prevValue, currentValue) => prevValue + currentValue);
117
+ const co2ValuesSum = co2Values.reduce(
118
+ (prevValue, currentValue) => prevValue + currentValue
119
+ );
101
120
  if (segmentResults) {
102
121
  return { ...co2ValuesbyComponent, total: co2ValuesSum };
103
122
  }
@@ -106,7 +125,9 @@ class SustainableWebDesign {
106
125
  energyPerByte(bytes) {
107
126
  const energyByComponent = this.energyPerByteByComponent(bytes);
108
127
  const energyValues = Object.values(energyByComponent);
109
- return energyValues.reduce((prevValue, currentValue) => prevValue + currentValue);
128
+ return energyValues.reduce(
129
+ (prevValue, currentValue) => prevValue + currentValue
130
+ );
110
131
  }
111
132
  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) {
112
133
  if (options.dataReloadRatio) {
@@ -132,7 +153,9 @@ class SustainableWebDesign {
132
153
  energyPerVisit(bytes) {
133
154
  let firstVisits = 0;
134
155
  let subsequentVisits = 0;
135
- const energyBycomponent = Object.entries(this.energyPerVisitByComponent(bytes));
156
+ const energyBycomponent = Object.entries(
157
+ this.energyPerVisitByComponent(bytes)
158
+ );
136
159
  for (const [key, val] of energyBycomponent) {
137
160
  if (key.indexOf("first") > 0) {
138
161
  firstVisits += val;
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/sustainable-web-design.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 */\nimport debugFactory from \"debug\";\nconst log = debugFactory(\"tgwf:sustainable-web-design\");\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 } from \"./helpers/index.js\";\n\nclass SustainableWebDesign {\n constructor(options) {\n this.options = options;\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) {\n deviceCarbonIntensity = device.value;\n }\n if (network?.value) {\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) {\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 datacentre share of the carbon intensity.\n *\n * @param {number} bytes - the data transferred in bytes\n * @param {number} `carbonIntensity` the carbon intensity for datacentre (average figures, not marginal ones)\n * @return {number} the total number in grams of CO2 equivalent emissions\n */\n perByte(\n bytes,\n carbonIntensity = false,\n segmentResults = false,\n options = {}\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 if (segmentResults) {\n return { ...co2ValuesbyComponent, total: co2ValuesSum };\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 {number} `carbonIntensity` the carbon intensity for datacentre (average figures, not marginal ones)\n * @return {number} the total number in grams of CO2 equivalent emissions\n */\n perVisit(\n bytes,\n carbonIntensity = false,\n segmentResults = 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 if (segmentResults) {\n return { ...co2ValuesbyComponent, total: co2ValuesSum };\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) {\n dataReloadRatio = options.dataReloadRatio;\n }\n\n if (options.firstVisitPercentage) {\n firstView = options.firstVisitPercentage;\n }\n\n if (options.returnVisitPercentage) {\n returnView = options.returnVisitPercentage;\n }\n\n const energyBycomponent = this.energyPerByteByComponent(bytes);\n const cacheAdjustedSegmentEnergy = {};\n\n log({ energyBycomponent });\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 log({ cacheAdjustedSegmentEnergy });\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\nexport { SustainableWebDesign };\nexport default SustainableWebDesign;\n"],
5
- "mappings": "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",
6
- "names": []
5
+ "mappings": "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",
6
+ "names": ["debugFactory"]
7
7
  }
package/dist/esm/co2.js CHANGED
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import OneByte from "./1byte.js";
3
2
  import SustainableWebDesign from "./sustainable-web-design.js";
4
3
  import {
@@ -14,8 +13,10 @@ class CO2 {
14
13
  } else if ((options == null ? void 0 : options.model) === "swd") {
15
14
  this.model = new SustainableWebDesign();
16
15
  } else if (options == null ? void 0 : options.model) {
17
- 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.
18
- See https://developers.thegreenwebfoundation.org/co2js/models/ to learn more about the models available in CO2.js.`);
16
+ throw new Error(
17
+ `"${options.model}" is not a valid model. Please use "1byte" for the OneByte model, and "swd" for the Sustainable Web Design model.
18
+ See https://developers.thegreenwebfoundation.org/co2js/models/ to learn more about the models available in CO2.js.`
19
+ );
19
20
  }
20
21
  if ((options == null ? void 0 : options.results) === "segment") {
21
22
  this.model.results = {
@@ -35,8 +36,10 @@ See https://developers.thegreenwebfoundation.org/co2js/models/ to learn more abo
35
36
  if ((_a = this.model) == null ? void 0 : _a.perVisit) {
36
37
  return this.model.perVisit(bytes, green, this.model.results.segment);
37
38
  } else {
38
- throw new Error(`The perVisit() method is not supported in the model you are using. Try using perByte() instead.
39
- See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`);
39
+ throw new Error(
40
+ `The perVisit() method is not supported in the model you are using. Try using perByte() instead.
41
+ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`
42
+ );
40
43
  }
41
44
  }
42
45
  perByteTrace(bytes, green = false, options = {}) {
@@ -46,7 +49,12 @@ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more ab
46
49
  adjustments = parseOptions(options);
47
50
  }
48
51
  return {
49
- co2: this.model.perByte(bytes, green, this.model.results.segment, adjustments),
52
+ co2: this.model.perByte(
53
+ bytes,
54
+ green,
55
+ this.model.results.segment,
56
+ adjustments
57
+ ),
50
58
  green,
51
59
  variables: {
52
60
  description: "Below are the variables used to calculate this CO2 estimate.",
@@ -69,7 +77,12 @@ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more ab
69
77
  adjustments = parseOptions(options);
70
78
  }
71
79
  return {
72
- co2: this.model.perVisit(bytes, green, this.model.results.segment, adjustments),
80
+ co2: this.model.perVisit(
81
+ bytes,
82
+ green,
83
+ this.model.results.segment,
84
+ adjustments
85
+ ),
73
86
  green,
74
87
  variables: {
75
88
  description: "Below are the variables used to calculate this CO2 estimate.",
@@ -87,8 +100,10 @@ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more ab
87
100
  }
88
101
  };
89
102
  } else {
90
- throw new Error(`The perVisitDetailed() method is not supported in the model you are using. Try using perByte() instead.
91
- See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`);
103
+ throw new Error(
104
+ `The perVisitDetailed() method is not supported in the model you are using. Try using perByte() instead.
105
+ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`
106
+ );
92
107
  }
93
108
  }
94
109
  perDomain(pageXray, greenDomains) {
@@ -122,7 +137,10 @@ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more ab
122
137
  for (let asset of pageXray.assets) {
123
138
  const domain = new URL(asset.url).domain;
124
139
  const transferSize = asset.transferSize;
125
- const co2ForTransfer = this.perByte(transferSize, greenDomains && greenDomains.indexOf(domain) > -1);
140
+ const co2ForTransfer = this.perByte(
141
+ transferSize,
142
+ greenDomains && greenDomains.indexOf(domain) > -1
143
+ );
126
144
  const contentType = asset.type;
127
145
  if (!co2PerContentType[contentType]) {
128
146
  co2PerContentType[contentType] = { co2: 0, transferSize: 0 };
@@ -146,7 +164,10 @@ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more ab
146
164
  for (let asset of pageXray.assets) {
147
165
  const domain = new URL(asset.url).domain;
148
166
  const transferSize = asset.transferSize;
149
- const co2ForTransfer = this.perByte(transferSize, greenDomains && greenDomains.indexOf(domain) > -1);
167
+ const co2ForTransfer = this.perByte(
168
+ transferSize,
169
+ greenDomains && greenDomains.indexOf(domain) > -1
170
+ );
150
171
  allAssets.push({ url: asset.url, co2: co2ForTransfer, transferSize });
151
172
  }
152
173
  allAssets.sort((a, b) => b.co2 - a.co2);
@@ -158,9 +179,15 @@ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more ab
158
179
  const firstPartyRegEx = pageXray.firstPartyRegEx;
159
180
  for (let d of Object.keys(pageXray.domains)) {
160
181
  if (!d.match(firstPartyRegEx)) {
161
- thirdParty += this.perByte(pageXray.domains[d].transferSize, greenDomains && greenDomains.indexOf(d) > -1);
182
+ thirdParty += this.perByte(
183
+ pageXray.domains[d].transferSize,
184
+ greenDomains && greenDomains.indexOf(d) > -1
185
+ );
162
186
  } else {
163
- firstParty += this.perByte(pageXray.domains[d].transferSize, greenDomains && greenDomains.indexOf(d) > -1);
187
+ firstParty += this.perByte(
188
+ pageXray.domains[d].transferSize,
189
+ greenDomains && greenDomains.indexOf(d) > -1
190
+ );
164
191
  }
165
192
  }
166
193
  return { firstParty, thirdParty };
@@ -1,4 +1,4 @@
1
- const data = { "AFRICA": "489.26", "ARG": "365.292", "ARM": "206.522", "ASIA": "543.57", "AUS": "526.876", "AUT": "145.083", "AZE": "536.585", "BGD": "559.606", "BLR": "472.727", "BEL": "156.063", "BOL": "311.475", "BIH": "470.982", "BRA": "144.677", "BGR": "364.136", "BDI": "275.862", "CAN": "123.859", "CHL": "395.565", "CHN": "549.288", "CRI": "30.903", "HRV": "212.161", "CYP": "601.19", "CZE": "401.272", "DNK": "240.419", "ECU": "132.964", "EGY": "470.879", "SLV": "180.87", "EST": "488.529", "EU": "261.43", "EUROPE": "277.64", "FIN": "152.651", "FRA": "67.781", "G20": "445.9", "G7": "338.04", "GEO": "105.685", "DEU": "363.982", "GRC": "363.388", "HUN": "236.271", "IND": "632.656", "IRL": "361.274", "ITA": "340.937", "JPN": "460.647", "KAZ": "656.097", "KEN": "104.0", "LATIN AMERICA AND CARIBBEAN": "261.51", "LVA": "226.351", "LTU": "247.475", "LUX": "183.824", "MLT": "452.055", "MEX": "391.582", "MDA": "642.512", "MNG": "725.26", "MNE": "335.958", "NLD": "386.189", "NORTH AMERICA": "345.38", "MKD": "444.191", "NOR": "26.131", "OCEANIA": "479.98", "OECD": "338.24", "PAK": "363.065", "PER": "241.492", "PHL": "579.689", "POL": "657.138", "PRT": "222.632", "ROU": "255.718", "RUS": "355.431", "SAU": "568.967", "SEN": "540.098", "SRB": "549.083", "SGP": "488.21", "SVK": "173.854", "SVN": "241.956", "ZAF": "706.991", "KOR": "442.389", "ESP": "193.737", "SWE": "43.9", "CHE": "58.952", "TWN": "565.629", "TJK": "72.823", "THA": "503.034", "TUN": "470.848", "TUR": "432.293", "UKR": "240.28", "GBR": "268.255", "USA": "378.625", "VNM": "491.192", "WORLD": "442.37" };
1
+ const data = { "AFG": "120.48", "AFRICA": "483.89", "DZA": "488.39", "ASM": "687.5", "AGO": "168.59", "ATG": "657.14", "ARG": "357.79", "ARM": "222.68", "ABW": "591.4", "ASIA": "543.26", "AUS": "531.25", "AUT": "147.57", "AZE": "532.9", "BHS": "698.11", "BHR": "489.92", "BGD": "560.51", "BRB": "644.86", "BLR": "415.77", "BEL": "156.92", "BLZ": "484.38", "BEN": "666.67", "BMU": "", "BTN": "24.44", "BOL": "306.89", "BIH": "489.07", "BWA": "794.52", "BRA": "158.59", "BRN": "658.85", "BGR": "354.33", "BFA": "611.43", "BDI": "250", "CPV": "600", "KHM": "399.31", "CMR": "278.26", "CAN": "128.46", "CYM": "684.93", "CAF": "0", "TCD": "677.42", "CHL": "416.88", "CHN": "544.36", "COL": "181.68", "COM": "714.29", "COD": "25.36", "COG": "398.01", "COK": "400", "CRI": "33.05", "CIV": "390.71", "HRV": "210.98", "CUB": "574.68", "CYP": "599.61", "CZE": "405.59", "DNK": "221.42", "DJI": "666.67", "DMA": "529.41", "DOM": "540.39", "ECU": "136.05", "EGY": "464.43", "SLV": "185.98", "GNQ": "492.96", "ERI": "688.89", "EST": "481.22", "SWZ": "189.19", "ETH": "25.19", "EU": "261.91", "EUROPE": "288.13", "FLK": "500", "FRO": "428.57", "FJI": "292.04", "FIN": "146.21", "FRA": "67.39", "GUF": "", "PYF": "471.43", "G20": "446.08", "G7": "340.97", "GAB": "397.38", "GMB": "700", "GEO": "111.55", "DEU": "365.98", "GHA": "362.94", "GIB": "", "GRC": "353.34", "GRL": "133.33", "GRD": "714.29", "GLP": "", "GUM": "670.33", "GTM": "313.02", "GIN": "208.63", "GNB": "750", "GUY": "634.15", "HTI": "606.06", "HND": "374.27", "HKG": "684.82", "HUN": "233.04", "IND": "637.18", "IDN": "623.28", "IRN": "492.68", "IRQ": "500.21", "IRL": "363.61", "ISR": "550.49", "ITA": "340.79", "JAM": "524.14", "JPN": "478.55", "JOR": "399.91", "KAZ": "656.1", "KEN": "87.07", "KIR": "666.67", "PRK": "157.79", "KWT": "489.61", "KGZ": "104.35", "LAO": "242.18", "LATIN AMERICA AND CARIBBEAN": "261.4", "LVA": "223.93", "LBN": "545.94", "LSO": "20", "LBR": "304.35", "LBY": "496.57", "LTU": "244.6", "LUX": "186.99", "MAC": "491.53", "MDG": "483.25", "MWI": "133.8", "MYS": "548.61", "MDV": "651.52", "MLI": "466.08", "MLT": "451.61", "MTQ": "", "MRT": "526.6", "MUS": "611.11", "MEX": "399.85", "MDA": "645.65", "MNG": "741.57", "MNE": "335.96", "MSR": "1000", "MAR": "610.41", "MOZ": "125.06", "MMR": "348.84", "NAM": "63.69", "NRU": "750", "NPL": "24.51", "NLD": "388.62", "NCL": "610.12", "NZL": "133.35", "NIC": "354.21", "NER": "622.22", "NGA": "377.19", "NIU": "", "NORTH AMERICA": "346.48", "MKD": "487.37", "NOR": "26.07", "OCEANIA": "474.92", "OECD": "341.29", "OMN": "488.24", "PAK": "365.19", "PSE": "465.12", "PAN": "193.92", "PNG": "526.75", "PRY": "25.49", "PER": "228.59", "PHL": "581.15", "POL": "660.12", "PRT": "219.05", "PRI": "681.47", "QAT": "489.9", "REU": "", "ROU": "255.88", "RUS": "359.94", "RWA": "294.12", "SHN": "", "KNA": "681.82", "LCA": "685.71", "SPM": "800", "VCT": "500", "WSM": "470.59", "STP": "600", "SAU": "571.34", "SEN": "502.67", "SRB": "548.94", "SYC": "615.39", "SLE": "47.62", "SGP": "488.59", "SVK": "168.28", "SVN": "238.61", "SLB": "727.27", "SOM": "634.15", "ZAF": "715.68", "KOR": "458.08", "SSD": "684.21", "ESP": "193.86", "LKA": "479.83", "SDN": "242.92", "SUR": "356.44", "SWE": "45.82", "CHE": "47.1", "SYR": "540.57", "TWN": "573.28", "TJK": "84.14", "TZA": "361.08", "THA": "506.64", "TLS": "698.11", "TGO": "507.94", "TON": "625", "TTO": "520.05", "TUN": "468.23", "TUR": "432.29", "TKM": "544.39", "TCA": "703.7", "UGA": "52.27", "UKR": "240.18", "ARE": "461.85", "GBR": "268.33", "USA": "379.38", "URY": "147.28", "UZB": "506.16", "VUT": "571.43", "VEN": "189.45", "VNM": "448.22", "VGB": "714.29", "VIR": "685.71", "ESH": "", "WORLD": "441.27", "YEM": "528.41", "ZMB": "84.7", "ZWE": "393.04" };
2
2
  const type = "average";
3
3
  const year = "2021";
4
4
  var average_intensities_2021_min_default = { data, type, year };
@@ -18,16 +18,20 @@ function parseOptions(options) {
18
18
  if (device) {
19
19
  if (typeof device === "object") {
20
20
  if (!averageIntensity.data[(_a = device.country) == null ? void 0 : _a.toUpperCase()]) {
21
- console.warn(`"${device.country}" is not a valid country. Please use a valid 3 digit ISO 3166 country code.
21
+ console.warn(
22
+ `"${device.country}" is not a valid country. Please use a valid 3 digit ISO 3166 country code.
22
23
  See https://developers.thegreenwebfoundation.org/co2js/data/ for more information.
23
- Falling back to global average grid intensity.`);
24
+ Falling back to global average grid intensity.`
25
+ );
24
26
  adjustments.gridIntensity["device"] = {
25
27
  value: GLOBAL_GRID_INTENSITY
26
28
  };
27
29
  }
28
30
  adjustments.gridIntensity["device"] = {
29
31
  country: device.country,
30
- value: parseFloat(averageIntensity.data[(_b = device.country) == null ? void 0 : _b.toUpperCase()])
32
+ value: parseFloat(
33
+ averageIntensity.data[(_b = device.country) == null ? void 0 : _b.toUpperCase()]
34
+ )
31
35
  };
32
36
  } else if (typeof device === "number") {
33
37
  adjustments.gridIntensity["device"] = {
@@ -37,23 +41,29 @@ Falling back to global average grid intensity.`);
37
41
  adjustments.gridIntensity["device"] = {
38
42
  value: GLOBAL_GRID_INTENSITY
39
43
  };
40
- console.warn(`The device grid intensity must be a number or an object. You passed in a ${typeof device}.
41
- Falling back to global average grid intensity.`);
44
+ console.warn(
45
+ `The device grid intensity must be a number or an object. You passed in a ${typeof device}.
46
+ Falling back to global average grid intensity.`
47
+ );
42
48
  }
43
49
  }
44
50
  if (dataCenter) {
45
51
  if (typeof dataCenter === "object") {
46
52
  if (!averageIntensity.data[(_c = dataCenter.country) == null ? void 0 : _c.toUpperCase()]) {
47
- console.warn(`"${dataCenter.country}" is not a valid country. Please use a valid 3 digit ISO 3166 country code.
53
+ console.warn(
54
+ `"${dataCenter.country}" is not a valid country. Please use a valid 3 digit ISO 3166 country code.
48
55
  See https://developers.thegreenwebfoundation.org/co2js/data/ for more information.
49
- Falling back to global average grid intensity.`);
56
+ Falling back to global average grid intensity.`
57
+ );
50
58
  adjustments.gridIntensity["dataCenter"] = {
51
59
  value: GLOBAL_GRID_INTENSITY
52
60
  };
53
61
  }
54
62
  adjustments.gridIntensity["dataCenter"] = {
55
63
  country: dataCenter.country,
56
- value: parseFloat(averageIntensity.data[(_d = dataCenter.country) == null ? void 0 : _d.toUpperCase()])
64
+ value: parseFloat(
65
+ averageIntensity.data[(_d = dataCenter.country) == null ? void 0 : _d.toUpperCase()]
66
+ )
57
67
  };
58
68
  } else if (typeof dataCenter === "number") {
59
69
  adjustments.gridIntensity["dataCenter"] = {
@@ -63,23 +73,29 @@ Falling back to global average grid intensity.`);
63
73
  adjustments.gridIntensity["dataCenter"] = {
64
74
  value: GLOBAL_GRID_INTENSITY
65
75
  };
66
- console.warn(`The data center grid intensity must be a number or an object. You passed in a ${typeof dataCenter}.
67
- Falling back to global average grid intensity.`);
76
+ console.warn(
77
+ `The data center grid intensity must be a number or an object. You passed in a ${typeof dataCenter}.
78
+ Falling back to global average grid intensity.`
79
+ );
68
80
  }
69
81
  }
70
82
  if (network) {
71
83
  if (typeof network === "object") {
72
84
  if (!averageIntensity.data[(_e = network.country) == null ? void 0 : _e.toUpperCase()]) {
73
- console.warn(`"${network.country}" is not a valid country. Please use a valid 3 digit ISO 3166 country code.
85
+ console.warn(
86
+ `"${network.country}" is not a valid country. Please use a valid 3 digit ISO 3166 country code.
74
87
  See https://developers.thegreenwebfoundation.org/co2js/data/ for more information. Falling back to global average grid intensity.
75
- Falling back to global average grid intensity.`);
88
+ Falling back to global average grid intensity.`
89
+ );
76
90
  adjustments.gridIntensity["network"] = {
77
91
  value: GLOBAL_GRID_INTENSITY
78
92
  };
79
93
  }
80
94
  adjustments.gridIntensity["network"] = {
81
95
  country: network.country,
82
- value: parseFloat(averageIntensity.data[(_f = network.country) == null ? void 0 : _f.toUpperCase()])
96
+ value: parseFloat(
97
+ averageIntensity.data[(_f = network.country) == null ? void 0 : _f.toUpperCase()]
98
+ )
83
99
  };
84
100
  } else if (typeof network === "number") {
85
101
  adjustments.gridIntensity["network"] = {
@@ -89,8 +105,10 @@ Falling back to global average grid intensity.`);
89
105
  adjustments.gridIntensity["network"] = {
90
106
  value: GLOBAL_GRID_INTENSITY
91
107
  };
92
- console.warn(`The network grid intensity must be a number or an object. You passed in a ${typeof network}.
93
- Falling back to global average grid intensity.`);
108
+ console.warn(
109
+ `The network grid intensity must be a number or an object. You passed in a ${typeof network}.
110
+ Falling back to global average grid intensity.`
111
+ );
94
112
  }
95
113
  }
96
114
  }
@@ -100,13 +118,17 @@ Falling back to global average grid intensity.`);
100
118
  adjustments.dataReloadRatio = options.dataReloadRatio;
101
119
  } else {
102
120
  adjustments.dataReloadRatio = PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD;
103
- console.warn(`The dataReloadRatio option must be a number between 0 and 1. You passed in ${options.dataReloadRatio}.
104
- Falling back to default value.`);
121
+ console.warn(
122
+ `The dataReloadRatio option must be a number between 0 and 1. You passed in ${options.dataReloadRatio}.
123
+ Falling back to default value.`
124
+ );
105
125
  }
106
126
  } else {
107
127
  adjustments.dataReloadRatio = PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD;
108
- console.warn(`The dataReloadRatio option must be a number. You passed in a ${typeof options.dataReloadRatio}.
109
- Falling back to default value.`);
128
+ console.warn(
129
+ `The dataReloadRatio option must be a number. You passed in a ${typeof options.dataReloadRatio}.
130
+ Falling back to default value.`
131
+ );
110
132
  }
111
133
  }
112
134
  if (options == null ? void 0 : options.firstVisitPercentage) {
@@ -115,13 +137,17 @@ Falling back to default value.`);
115
137
  adjustments.firstVisitPercentage = options.firstVisitPercentage;
116
138
  } else {
117
139
  adjustments.firstVisitPercentage = FIRST_TIME_VIEWING_PERCENTAGE;
118
- console.warn(`The firstVisitPercentage option must be a number between 0 and 1. You passed in ${options.firstVisitPercentage}.
119
- Falling back to default value.`);
140
+ console.warn(
141
+ `The firstVisitPercentage option must be a number between 0 and 1. You passed in ${options.firstVisitPercentage}.
142
+ Falling back to default value.`
143
+ );
120
144
  }
121
145
  } else {
122
146
  adjustments.firstVisitPercentage = FIRST_TIME_VIEWING_PERCENTAGE;
123
- console.warn(`The firstVisitPercentage option must be a number. You passed in a ${typeof options.firstVisitPercentage}.
124
- Falling back to default value.`);
147
+ console.warn(
148
+ `The firstVisitPercentage option must be a number. You passed in a ${typeof options.firstVisitPercentage}.
149
+ Falling back to default value.`
150
+ );
125
151
  }
126
152
  }
127
153
  if (options == null ? void 0 : options.returnVisitPercentage) {
@@ -130,13 +156,17 @@ Falling back to default value.`);
130
156
  adjustments.returnVisitPercentage = options.returnVisitPercentage;
131
157
  } else {
132
158
  adjustments.returnVisitPercentage = RETURNING_VISITOR_PERCENTAGE;
133
- console.warn(`The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}.
134
- Falling back to default value.`);
159
+ console.warn(
160
+ `The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}.
161
+ Falling back to default value.`
162
+ );
135
163
  }
136
164
  } else {
137
165
  adjustments.returnVisitPercentage = RETURNING_VISITOR_PERCENTAGE;
138
- console.warn(`The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}.
139
- Falling back to default value.`);
166
+ console.warn(
167
+ `The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}.
168
+ Falling back to default value.`
169
+ );
140
170
  }
141
171
  }
142
172
  return adjustments;
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import debugFactory from "debug";
3
2
  const log = debugFactory("tgwf:hostingAPI");
4
3
  function check(domain) {
@@ -9,7 +8,9 @@ function check(domain) {
9
8
  }
10
9
  }
11
10
  async function checkAgainstAPI(domain) {
12
- const req = await fetch(`https://api.thegreenwebfoundation.org/greencheck/${domain}`);
11
+ const req = await fetch(
12
+ `https://api.thegreenwebfoundation.org/greencheck/${domain}`
13
+ );
13
14
  const res = await req.json();
14
15
  return res.green;
15
16
  }
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  import debugFactory from "debug";
3
2
  const log = debugFactory("tgwf:hosting");
4
3
  import hostingAPI from "./hosting-api.js";