@tgwf/co2 0.14.3 → 0.15.0

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.
package/CHANGELOG.md CHANGED
@@ -20,6 +20,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
20
20
 
21
21
  ## Released
22
22
 
23
+ ### [0.15.0] - 2024-05-03
24
+
25
+ #### Changed
26
+
27
+ - Add access to more verbose data response from Greencheck API
28
+
29
+ #### Removed
30
+
31
+ - Removed Page X-ray specific functions:
32
+ - `perDomain`
33
+ - `perPage`
34
+ - `perContentType`
35
+ - `dirtiestResources`
36
+ - `perParty`
37
+
38
+ ### [0.14.4] - 2024-03-08
39
+
40
+ #### Changed
41
+
42
+ - Automated monthly update of annual average grid intensity data.
43
+
44
+ #### Deprecated
45
+
46
+ - Removing Page X-ray specific functions:
47
+ - `perDomain`
48
+ - `perPage`
49
+ - `perContentType`
50
+ - `dirtiestResources`
51
+ - `perParty`
52
+
53
+ ### [0.14.3] - 2024-02-21
54
+
55
+ #### Changed
56
+
57
+ - Automated monthly update of annual average grid intensity data.
58
+
23
59
  ### [0.14.2] - 2024-01-29
24
60
 
25
61
  - Adds user agent header for requests to Green Web Foundation APIs
package/dist/cjs/co2.js CHANGED
@@ -106,80 +106,6 @@ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more ab
106
106
  See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`);
107
107
  }
108
108
  }
109
- perDomain(pageXray, greenDomains) {
110
- const co2PerDomain = [];
111
- for (let domain of Object.keys(pageXray.domains)) {
112
- let co2;
113
- if (greenDomains && greenDomains.indexOf(domain) > -1) {
114
- co2 = this.perByte(pageXray.domains[domain].transferSize, true);
115
- } else {
116
- co2 = this.perByte(pageXray.domains[domain].transferSize);
117
- }
118
- co2PerDomain.push({
119
- domain,
120
- co2,
121
- transferSize: pageXray.domains[domain].transferSize
122
- });
123
- }
124
- co2PerDomain.sort((a, b) => b.co2 - a.co2);
125
- return co2PerDomain;
126
- }
127
- perPage(pageXray, green) {
128
- const domainCO2 = this.perDomain(pageXray, green);
129
- let totalCO2 = 0;
130
- for (let domain of domainCO2) {
131
- totalCO2 += domain.co2;
132
- }
133
- return totalCO2;
134
- }
135
- perContentType(pageXray, greenDomains) {
136
- const co2PerContentType = {};
137
- for (let asset of pageXray.assets) {
138
- const domain = new URL(asset.url).domain;
139
- const transferSize = asset.transferSize;
140
- const co2ForTransfer = this.perByte(transferSize, greenDomains && greenDomains.indexOf(domain) > -1);
141
- const contentType = asset.type;
142
- if (!co2PerContentType[contentType]) {
143
- co2PerContentType[contentType] = { co2: 0, transferSize: 0 };
144
- }
145
- co2PerContentType[contentType].co2 += co2ForTransfer;
146
- co2PerContentType[contentType].transferSize += transferSize;
147
- }
148
- const all = [];
149
- for (let type of Object.keys(co2PerContentType)) {
150
- all.push({
151
- type,
152
- co2: co2PerContentType[type].co2,
153
- transferSize: co2PerContentType[type].transferSize
154
- });
155
- }
156
- all.sort((a, b) => b.co2 - a.co2);
157
- return all;
158
- }
159
- dirtiestResources(pageXray, greenDomains) {
160
- const allAssets = [];
161
- for (let asset of pageXray.assets) {
162
- const domain = new URL(asset.url).domain;
163
- const transferSize = asset.transferSize;
164
- const co2ForTransfer = this.perByte(transferSize, greenDomains && greenDomains.indexOf(domain) > -1);
165
- allAssets.push({ url: asset.url, co2: co2ForTransfer, transferSize });
166
- }
167
- allAssets.sort((a, b) => b.co2 - a.co2);
168
- return allAssets.slice(0, allAssets.length > 10 ? 10 : allAssets.length);
169
- }
170
- perParty(pageXray, greenDomains) {
171
- let firstParty = 0;
172
- let thirdParty = 0;
173
- const firstPartyRegEx = pageXray.firstPartyRegEx;
174
- for (let d of Object.keys(pageXray.domains)) {
175
- if (!d.match(firstPartyRegEx)) {
176
- thirdParty += this.perByte(pageXray.domains[d].transferSize, greenDomains && greenDomains.indexOf(d) > -1);
177
- } else {
178
- firstParty += this.perByte(pageXray.domains[d].transferSize, greenDomains && greenDomains.indexOf(d) > -1);
179
- }
180
- }
181
- return { firstParty, thirdParty };
182
- }
183
109
  }
184
110
  var co2_default = CO2;
185
111
  //# sourceMappingURL=co2.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/co2.js"],
4
- "sourcesContent": ["\"use strict\";\n\n/**\n * @typedef {Object} CO2EstimateTraceResultPerByte\n * @property {number} co2 - The CO2 estimate in grams/kilowatt-hour\n * @property {boolean} green - Whether the domain is green or not\n * @property {TraceResultVariables} variables - The variables used to calculate the CO2 estimate\n */\n\n/**\n * @typedef {Object} CO2EstimateTraceResultPerVisit\n * @property {number} co2 - The CO2 estimate in grams/kilowatt-hour\n * @property {boolean} green - Whether the domain is green or not\n * @property {TraceResultVariables} variables - The variables used to calculate the CO2 estimate\n */\n\n/**\n * @typedef {Object} TraceResultVariablesPerByte\n * @property {GridIntensityVariables} gridIntensity - The grid intensity related variables\n */\n/**\n * @typedef {Object} TraceResultVariablesPerVisit\n * @property {GridIntensityVariables} gridIntensity - The grid intensity related variables\n * @property {number} dataReloadRatio - What percentage of a page is reloaded on each subsequent page view\n * @property {number} firstVisitPercentage - What percentage of visits are loading this page for subsequent times\n * @property {number} returnVisitPercentage - What percentage of visits are loading this page for the second or more time\n */\n\n/**\n * @typedef {Object} GridIntensityVariables\n * @property {string} description - The description of the variables\n * @property {number} network - The network grid intensity set by the user or the default\n * @property {number} dataCenter - The data center grid intensity set by the user or the default\n * @property {number} device - The device grid intensity set by the user or the default\n * @property {number} production - The production grid intensity set by the user or the default\n */\n\nimport OneByte from \"./1byte.js\";\nimport SustainableWebDesign from \"./sustainable-web-design.js\";\n\nimport {\n GLOBAL_GRID_INTENSITY,\n RENEWABLES_GRID_INTENSITY,\n} from \"./constants/index.js\";\nimport { parseOptions } from \"./helpers/index.js\";\n\nclass CO2 {\n constructor(options) {\n this.model = new SustainableWebDesign();\n // Using optional chaining allows an empty object to be passed\n // in without breaking the code.\n if (options?.model === \"1byte\") {\n this.model = new OneByte();\n } else if (options?.model === \"swd\") {\n this.model = new SustainableWebDesign();\n } else if (options?.model) {\n throw new Error(\n `\"${options.model}\" is not a valid model. Please use \"1byte\" for the OneByte model, and \"swd\" for the Sustainable Web Design model.\\nSee https://developers.thegreenwebfoundation.org/co2js/models/ to learn more about the models available in CO2.js.`\n );\n }\n\n /** @private */\n this._segment = options?.results === \"segment\";\n }\n\n /**\n * Accept a figure in bytes for data transfer, and a boolean for whether\n * the domain shows as 'green', and return a CO2 figure for energy used to shift the corresponding\n * the data transfer.\n *\n * @param {number} bytes\n * @param {boolean} green\n * @return {number} the amount of CO2 in grammes\n */\n perByte(bytes, green = false) {\n return this.model.perByte(bytes, green, this._segment);\n }\n\n /**\n * Accept a figure in bytes for data transfer, and a boolean for whether\n * the domain shows as 'green', and return a CO2 figure for energy used to shift the corresponding\n * the data transfer.\n *\n * @param {number} bytes\n * @param {boolean} green\n * @return {number} the amount of CO2 in grammes\n */\n perVisit(bytes, green = false) {\n if (this.model?.perVisit) {\n return this.model.perVisit(bytes, green, this._segment);\n } else {\n throw new Error(\n `The perVisit() method is not supported in the model you are using. Try using perByte() instead.\\nSee https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`\n );\n }\n }\n\n /**\n * Accept a figure in bytes for data transfer, a boolean for whether\n * the domain shows as 'green', and an options object.\n * Returns an object containing CO2 figure, green boolean, and object of the variables used in calculating the CO2 figure.\n *\n * @param {number} bytes\n * @param {boolean} green\n * @param {Object} options\n * @return {CO2EstimateTraceResultPerByte} the amount of CO2 in grammes\n */\n perByteTrace(bytes, green = false, options = {}) {\n let adjustments = {};\n if (options) {\n // If there are options, parse them and add them to the model.\n adjustments = parseOptions(options);\n }\n return {\n co2: this.model.perByte(bytes, green, this._segment, adjustments),\n green,\n variables: {\n description:\n \"Below are the variables used to calculate this CO2 estimate.\",\n bytes,\n gridIntensity: {\n description:\n \"The grid intensity (grams per kilowatt-hour) used to calculate this CO2 estimate.\",\n network:\n adjustments?.gridIntensity?.network?.value ?? GLOBAL_GRID_INTENSITY,\n dataCenter: green\n ? RENEWABLES_GRID_INTENSITY\n : adjustments?.gridIntensity?.dataCenter?.value ??\n GLOBAL_GRID_INTENSITY,\n production: GLOBAL_GRID_INTENSITY,\n device:\n adjustments?.gridIntensity?.device?.value ?? GLOBAL_GRID_INTENSITY,\n },\n },\n };\n }\n\n /**\n * Accept a figure in bytes for data transfer, a boolean for whether\n * the domain shows as 'green', and an options object.\n * Returns an object containing CO2 figure, green boolean, and object of the variables used in calculating the CO2 figure.\n *\n * @param {number} bytes\n * @param {boolean} green\n * @param {Object} options\n * @return {CO2EstimateTraceResultPerVisit} the amount of CO2 in grammes\n */\n perVisitTrace(bytes, green = false, options = {}) {\n if (this.model?.perVisit) {\n let adjustments = {};\n if (options) {\n // If there are options, parse them and add them to the model.\n adjustments = parseOptions(options);\n }\n\n return {\n co2: this.model.perVisit(bytes, green, this._segment, adjustments),\n green,\n variables: {\n description:\n \"Below are the variables used to calculate this CO2 estimate.\",\n bytes,\n gridIntensity: {\n description:\n \"The grid intensity (grams per kilowatt-hour) used to calculate this CO2 estimate.\",\n network:\n adjustments?.gridIntensity?.network?.value ??\n GLOBAL_GRID_INTENSITY,\n dataCenter: green\n ? RENEWABLES_GRID_INTENSITY\n : adjustments?.gridIntensity?.dataCenter?.value ??\n GLOBAL_GRID_INTENSITY,\n production: GLOBAL_GRID_INTENSITY,\n device:\n adjustments?.gridIntensity?.device?.value ??\n GLOBAL_GRID_INTENSITY,\n },\n dataReloadRatio: adjustments?.dataReloadRatio ?? 0.02,\n firstVisitPercentage: adjustments?.firstVisitPercentage ?? 0.75,\n returnVisitPercentage: adjustments?.returnVisitPercentage ?? 0.25,\n },\n };\n } else {\n throw new Error(\n `The perVisitDetailed() method is not supported in the model you are using. Try using perByte() instead.\\nSee https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`\n );\n }\n }\n\n perDomain(pageXray, greenDomains) {\n const co2PerDomain = [];\n for (let domain of Object.keys(pageXray.domains)) {\n let co2;\n if (greenDomains && greenDomains.indexOf(domain) > -1) {\n co2 = this.perByte(pageXray.domains[domain].transferSize, true);\n } else {\n co2 = this.perByte(pageXray.domains[domain].transferSize);\n }\n co2PerDomain.push({\n domain,\n co2,\n transferSize: pageXray.domains[domain].transferSize,\n });\n }\n co2PerDomain.sort((a, b) => b.co2 - a.co2);\n\n return co2PerDomain;\n }\n\n perPage(pageXray, green) {\n // Accept an xray object, and if we receive a boolean as the second\n // argument, we assume every request we make is sent to a server\n // running on renwewable power.\n\n // if we receive an array of domains, return a number accounting the\n // reduced CO2 from green hosted domains\n\n const domainCO2 = this.perDomain(pageXray, green);\n let totalCO2 = 0;\n for (let domain of domainCO2) {\n totalCO2 += domain.co2;\n }\n return totalCO2;\n }\n\n perContentType(pageXray, greenDomains) {\n const co2PerContentType = {};\n for (let asset of pageXray.assets) {\n const domain = new URL(asset.url).domain;\n const transferSize = asset.transferSize;\n const co2ForTransfer = this.perByte(\n transferSize,\n greenDomains && greenDomains.indexOf(domain) > -1\n );\n const contentType = asset.type;\n if (!co2PerContentType[contentType]) {\n co2PerContentType[contentType] = { co2: 0, transferSize: 0 };\n }\n co2PerContentType[contentType].co2 += co2ForTransfer;\n co2PerContentType[contentType].transferSize += transferSize;\n }\n // restructure and sort\n const all = [];\n for (let type of Object.keys(co2PerContentType)) {\n all.push({\n type,\n co2: co2PerContentType[type].co2,\n transferSize: co2PerContentType[type].transferSize,\n });\n }\n all.sort((a, b) => b.co2 - a.co2);\n return all;\n }\n\n dirtiestResources(pageXray, greenDomains) {\n const allAssets = [];\n for (let asset of pageXray.assets) {\n const domain = new URL(asset.url).domain;\n const transferSize = asset.transferSize;\n const co2ForTransfer = this.perByte(\n transferSize,\n greenDomains && greenDomains.indexOf(domain) > -1\n );\n allAssets.push({ url: asset.url, co2: co2ForTransfer, transferSize });\n }\n allAssets.sort((a, b) => b.co2 - a.co2);\n\n return allAssets.slice(0, allAssets.length > 10 ? 10 : allAssets.length);\n }\n\n perParty(pageXray, greenDomains) {\n let firstParty = 0;\n let thirdParty = 0;\n // calculate co2 per first/third party\n const firstPartyRegEx = pageXray.firstPartyRegEx;\n for (let d of Object.keys(pageXray.domains)) {\n if (!d.match(firstPartyRegEx)) {\n thirdParty += this.perByte(\n pageXray.domains[d].transferSize,\n greenDomains && greenDomains.indexOf(d) > -1\n );\n } else {\n firstParty += this.perByte(\n pageXray.domains[d].transferSize,\n greenDomains && greenDomains.indexOf(d) > -1\n );\n }\n }\n return { firstParty, thirdParty };\n }\n}\n\nexport { CO2 };\nexport default CO2;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["\"use strict\";\n\n/**\n * @typedef {Object} CO2EstimateTraceResultPerByte\n * @property {number|CO2EstimateComponentsPerByte} co2 - The CO2 estimate in grams or its separate components\n * @property {boolean} green - Whether the domain is green or not\n * @property {TraceResultVariablesPerByte} variables - The variables used to calculate the CO2 estimate\n */\n\n/**\n * @typedef {Object} CO2EstimateTraceResultPerVisit\n * @property {number|CO2EstimateComponentsPerVisit} co2 - The CO2 estimate in grams or its separate components\n * @property {boolean} green - Whether the domain is green or not\n * @property {TraceResultVariablesPerVisit} variables - The variables used to calculate the CO2 estimate\n */\n\n/**\n * @typedef {Object} TraceResultVariablesPerByte\n * @property {GridIntensityVariables} gridIntensity - The grid intensity related variables\n */\n/**\n * @typedef {Object} TraceResultVariablesPerVisit\n * @property {GridIntensityVariables} gridIntensity - The grid intensity related variables\n * @property {number} dataReloadRatio - What percentage of a page is reloaded on each subsequent page view\n * @property {number} firstVisitPercentage - What percentage of visits are loading this page for subsequent times\n * @property {number} returnVisitPercentage - What percentage of visits are loading this page for the second or more time\n */\n\n/**\n * @typedef {Object} GridIntensityVariables\n * @property {string} description - The description of the variables\n * @property {number} network - The network grid intensity set by the user or the default\n * @property {number} dataCenter - The data center grid intensity set by the user or the default\n * @property {number} device - The device grid intensity set by the user or the default\n * @property {number} production - The production grid intensity set by the user or the default\n */\n\n/**\n * @typedef {Object} CO2EstimateComponentsPerByte\n * @property {number} networkCO2 - The CO2 estimate for networking in grams\n * @property {number} dataCenterCO2 - The CO2 estimate for data centers in grams\n * @property {number} consumerDeviceCO2 - The CO2 estimate for consumer devices in grams\n * @property {number} productionCO2 - The CO2 estimate for device production in grams\n * @property {number} total - The total CO2 estimate in grams\n */\n\n/**\n * @typedef {Object} CO2EstimateComponentsPerVisit\n * @property {number} 'networkCO2 - first' - The CO2 estimate for networking in grams on first visit\n * @property {number} 'networkCO2 - subsequent' - The CO2 estimate for networking in grams on subsequent visits\n * @property {number} 'dataCenterCO2 - first' - The CO2 estimate for data centers in grams on first visit\n * @property {number} 'dataCenterCO2 - subsequent' - The CO2 estimate for data centers in grams on subsequent visits\n * @property {number} 'consumerDeviceCO2 - first' - The CO2 estimate for consumer devices in grams on first visit\n * @property {number} 'consumerDeviceCO2 - subsequent' - The CO2 estimate for consumer devices in grams on subsequent visits\n * @property {number} 'productionCO2 - first' - The CO2 estimate for device production in grams on first visit\n * @property {number} 'productionCO2 - subsequent' - The CO2 estimate for device production in grams on subsequent visits\n * @property {number} total - The total CO2 estimate in grams\n */\n\nimport OneByte from \"./1byte.js\";\nimport SustainableWebDesign from \"./sustainable-web-design.js\";\n\nimport {\n GLOBAL_GRID_INTENSITY,\n RENEWABLES_GRID_INTENSITY,\n} from \"./constants/index.js\";\nimport { parseOptions } from \"./helpers/index.js\";\n\nclass CO2 {\n constructor(options) {\n this.model = new SustainableWebDesign();\n // Using optional chaining allows an empty object to be passed\n // in without breaking the code.\n if (options?.model === \"1byte\") {\n this.model = new OneByte();\n } else if (options?.model === \"swd\") {\n this.model = new SustainableWebDesign();\n } else if (options?.model) {\n throw new Error(\n `\"${options.model}\" is not a valid model. Please use \"1byte\" for the OneByte model, and \"swd\" for the Sustainable Web Design model.\\nSee https://developers.thegreenwebfoundation.org/co2js/models/ to learn more about the models available in CO2.js.`\n );\n }\n\n /** @private */\n this._segment = options?.results === \"segment\";\n }\n\n /**\n * Accept a figure in bytes for data transfer, and a boolean for whether\n * the domain shows as 'green', and return a CO2 figure for energy used to shift the corresponding\n * the data transfer.\n *\n * @param {number} bytes\n * @param {boolean} green\n * @return {number|CO2EstimateComponentsPerByte} the amount of CO2 in grammes or its separate components\n */\n perByte(bytes, green = false) {\n return this.model.perByte(bytes, green, this._segment);\n }\n\n /**\n * Accept a figure in bytes for data transfer, and a boolean for whether\n * the domain shows as 'green', and return a CO2 figure for energy used to shift the corresponding\n * the data transfer.\n *\n * @param {number} bytes\n * @param {boolean} green\n * @return {number|CO2EstimateComponentsPerVisit} the amount of CO2 in grammes or its separate components\n */\n perVisit(bytes, green = false) {\n if (this.model?.perVisit) {\n return this.model.perVisit(bytes, green, this._segment);\n } else {\n throw new Error(\n `The perVisit() method is not supported in the model you are using. Try using perByte() instead.\\nSee https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`\n );\n }\n }\n\n /**\n * Accept a figure in bytes for data transfer, a boolean for whether\n * the domain shows as 'green', and an options object.\n * Returns an object containing CO2 figure, green boolean, and object of the variables used in calculating the CO2 figure.\n *\n * @param {number} bytes\n * @param {boolean} green\n * @param {Object} options\n * @return {CO2EstimateTraceResultPerByte} the amount of CO2 in grammes\n */\n perByteTrace(bytes, green = false, options = {}) {\n let adjustments = {};\n if (options) {\n // If there are options, parse them and add them to the model.\n adjustments = parseOptions(options);\n }\n return {\n co2: this.model.perByte(bytes, green, this._segment, adjustments),\n green,\n variables: {\n description:\n \"Below are the variables used to calculate this CO2 estimate.\",\n bytes,\n gridIntensity: {\n description:\n \"The grid intensity (grams per kilowatt-hour) used to calculate this CO2 estimate.\",\n network:\n adjustments?.gridIntensity?.network?.value ?? GLOBAL_GRID_INTENSITY,\n dataCenter: green\n ? RENEWABLES_GRID_INTENSITY\n : adjustments?.gridIntensity?.dataCenter?.value ??\n GLOBAL_GRID_INTENSITY,\n production: GLOBAL_GRID_INTENSITY,\n device:\n adjustments?.gridIntensity?.device?.value ?? GLOBAL_GRID_INTENSITY,\n },\n },\n };\n }\n\n /**\n * Accept a figure in bytes for data transfer, a boolean for whether\n * the domain shows as 'green', and an options object.\n * Returns an object containing CO2 figure, green boolean, and object of the variables used in calculating the CO2 figure.\n *\n * @param {number} bytes\n * @param {boolean} green\n * @param {Object} options\n * @return {CO2EstimateTraceResultPerVisit} the amount of CO2 in grammes\n */\n perVisitTrace(bytes, green = false, options = {}) {\n if (this.model?.perVisit) {\n let adjustments = {};\n if (options) {\n // If there are options, parse them and add them to the model.\n adjustments = parseOptions(options);\n }\n\n return {\n co2: this.model.perVisit(bytes, green, this._segment, adjustments),\n green,\n variables: {\n description:\n \"Below are the variables used to calculate this CO2 estimate.\",\n bytes,\n gridIntensity: {\n description:\n \"The grid intensity (grams per kilowatt-hour) used to calculate this CO2 estimate.\",\n network:\n adjustments?.gridIntensity?.network?.value ??\n GLOBAL_GRID_INTENSITY,\n dataCenter: green\n ? RENEWABLES_GRID_INTENSITY\n : adjustments?.gridIntensity?.dataCenter?.value ??\n GLOBAL_GRID_INTENSITY,\n production: GLOBAL_GRID_INTENSITY,\n device:\n adjustments?.gridIntensity?.device?.value ??\n GLOBAL_GRID_INTENSITY,\n },\n dataReloadRatio: adjustments?.dataReloadRatio ?? 0.02,\n firstVisitPercentage: adjustments?.firstVisitPercentage ?? 0.75,\n returnVisitPercentage: adjustments?.returnVisitPercentage ?? 0.25,\n },\n };\n } else {\n throw new Error(\n `The perVisitDetailed() method is not supported in the model you are using. Try using perByte() instead.\\nSee https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`\n );\n }\n }\n}\n\nexport { CO2 };\nexport default CO2;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2DA,kBAAoB;AACpB,oCAAiC;AAEjC,uBAGO;AACP,qBAA6B;AAE7B,MAAM,IAAI;AAAA,EACR,YAAY,SAAS;AACnB,SAAK,QAAQ,IAAI,sCAAqB;AAGtC,QAAI,oCAAS,WAAU,SAAS;AAC9B,WAAK,QAAQ,IAAI,oBAAQ;AAAA,IAC3B,WAAW,oCAAS,WAAU,OAAO;AACnC,WAAK,QAAQ,IAAI,sCAAqB;AAAA,IACxC,WAAW,mCAAS,OAAO;AACzB,YAAM,IAAI,MACR,IAAI,QAAQ;AAAA,mHACd;AAAA,IACF;AAGA,SAAK,WAAW,oCAAS,aAAY;AAAA,EACvC;AAAA,EAWA,QAAQ,OAAO,QAAQ,OAAO;AAC5B,WAAO,KAAK,MAAM,QAAQ,OAAO,OAAO,KAAK,QAAQ;AAAA,EACvD;AAAA,EAWA,SAAS,OAAO,QAAQ,OAAO;AA7GjC;AA8GI,QAAI,WAAK,UAAL,mBAAY,UAAU;AACxB,aAAO,KAAK,MAAM,SAAS,OAAO,OAAO,KAAK,QAAQ;AAAA,IACxD,OAAO;AACL,YAAM,IAAI,MACR;AAAA,qHACF;AAAA,IACF;AAAA,EACF;AAAA,EAYA,aAAa,OAAO,QAAQ,OAAO,UAAU,CAAC,GAAG;AAjInD;AAkII,QAAI,cAAc,CAAC;AACnB,QAAI,SAAS;AAEX,oBAAc,iCAAa,OAAO;AAAA,IACpC;AACA,WAAO;AAAA,MACL,KAAK,KAAK,MAAM,QAAQ,OAAO,OAAO,KAAK,UAAU,WAAW;AAAA,MAChE;AAAA,MACA,WAAW;AAAA,QACT,aACE;AAAA,QACF;AAAA,QACA,eAAe;AAAA,UACb,aACE;AAAA,UACF,SACE,wDAAa,kBAAb,mBAA4B,YAA5B,mBAAqC,UAAS;AAAA,UAChD,YAAY,QACR,6CACA,wDAAa,kBAAb,mBAA4B,eAA5B,mBAAwC,UACxC;AAAA,UACJ,YAAY;AAAA,UACZ,QACE,wDAAa,kBAAb,mBAA4B,WAA5B,mBAAoC,UAAS;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAYA,cAAc,OAAO,QAAQ,OAAO,UAAU,CAAC,GAAG;AAzKpD;AA0KI,QAAI,WAAK,UAAL,mBAAY,UAAU;AACxB,UAAI,cAAc,CAAC;AACnB,UAAI,SAAS;AAEX,sBAAc,iCAAa,OAAO;AAAA,MACpC;AAEA,aAAO;AAAA,QACL,KAAK,KAAK,MAAM,SAAS,OAAO,OAAO,KAAK,UAAU,WAAW;AAAA,QACjE;AAAA,QACA,WAAW;AAAA,UACT,aACE;AAAA,UACF;AAAA,UACA,eAAe;AAAA,YACb,aACE;AAAA,YACF,SACE,wDAAa,kBAAb,mBAA4B,YAA5B,mBAAqC,UACrC;AAAA,YACF,YAAY,QACR,6CACA,wDAAa,kBAAb,mBAA4B,eAA5B,mBAAwC,UACxC;AAAA,YACJ,YAAY;AAAA,YACZ,QACE,wDAAa,kBAAb,mBAA4B,WAA5B,mBAAoC,UACpC;AAAA,UACJ;AAAA,UACA,iBAAiB,4CAAa,oBAAmB;AAAA,UACjD,sBAAsB,4CAAa,yBAAwB;AAAA,UAC3D,uBAAuB,4CAAa,0BAAyB;AAAA,QAC/D;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,IAAI,MACR;AAAA,qHACF;AAAA,IACF;AAAA,EACF;AACF;AAGA,IAAO,cAAQ;",
6
6
  "names": []
7
7
  }
@@ -22,7 +22,7 @@ __export(average_intensities_min_exports, {
22
22
  type: () => type
23
23
  });
24
24
  module.exports = __toCommonJS(average_intensities_min_exports);
25
- const data = { "AFG": 120.48, "AFRICA": 590.8, "ALB": 23.44, "DZA": 672.64, "ASM": 687.5, "AGO": 212.42, "ATG": 657.14, "ARG": 399.5, "ARM": 280.06, "ABW": 591.4, "ASEAN": 569.34, "ASIA": 594.16, "AUS": 570.35, "AUT": 141.79, "AZE": 719.39, "BHS": 698.11, "BHR": 956.55, "BGD": 719.78, "BRB": 644.86, "BLR": 465.34, "BEL": 139.79, "BLZ": 484.38, "BEN": 666.67, "BTN": 24.44, "BOL": 497.78, "BIH": 670.09, "BWA": 867.58, "BRA": 114.48, "BRN": 961.54, "BGR": 476.9, "BFA": 611.43, "BDI": 250, "CPV": 600, "KHM": 436.13, "CMR": 278.26, "CAN": 163.01, "CYM": 684.93, "CAF": 0, "TCD": 677.42, "CHL": 353.52, "CHN": 585.82, "COL": 198.53, "COM": 714.29, "COG": 723.88, "COD": 25.36, "COK": 400, "CRI": 37.21, "CIV": 453.55, "HRV": 242.28, "CUB": 677.47, "CYP": 555.13, "CZE": 488.3, "DNK": 201.78, "DJI": 666.67, "DMA": 529.41, "DOM": 592.49, "ECU": 192.39, "EGY": 612.16, "SLV": 211.29, "GNQ": 492.96, "ERI": 688.89, "EST": 489.89, "SWZ": 189.19, "ETH": 25.19, "EU": 291.9, "EUROPE": 330.47, "FLK": 500, "FRO": 428.57, "FJI": 289.47, "FIN": 130.42, "FRA": 78.81, "GUF": 254.72, "PYF": 471.43, "G20": 489.9, "G7": 375.97, "GAB": 397.38, "GMB": 700, "GEO": 176.97, "DEU": 420.06, "GHA": 498.81, "GRC": 378.18, "GRL": 133.33, "GRD": 714.29, "GLP": 647.06, "GUM": 670.33, "GTM": 331.72, "GIN": 208.63, "GNB": 750, "GUY": 642.28, "HTI": 606.06, "HND": 378.97, "HKG": 733.05, "HUN": 228.75, "ISL": 28.56, "IND": 705.13, "IDN": 675.93, "IRN": 665.15, "IRQ": 708.1, "IRL": 333.23, "ISR": 641.17, "ITA": 378.45, "JAM": 588.51, "JPN": 512.81, "JOR": 572.74, "KAZ": 830.41, "KEN": 101.13, "KIR": 666.67, "XKX": 945.01, "KWT": 691.31, "KGZ": 124.48, "LAO": 284.21, "LATIN AMERICA AND CARIBBEAN": 278.58, "LVA": 136.27, "LBN": 663.1, "LSO": 20, "LBR": 304.35, "LBY": 861.69, "LTU": 177.18, "LUX": 144.07, "MAC": 627.12, "MDG": 497.61, "MWI": 133.8, "MYS": 605.83, "MDV": 651.52, "MLI": 463.13, "MLT": 500, "MTQ": 698.63, "MRT": 526.6, "MUS": 631.94, "MEX": 515.62, "MIDDLE EAST": 673.63, "MDA": 871.66, "MNG": 852.82, "MNE": 483.38, "MSR": 1e3, "MAR": 705.67, "MOZ": 150.25, "MMR": 575.77, "NAM": 70.06, "NRU": 750, "NPL": 24.51, "NLD": 324.99, "NCL": 610.12, "NZL": 117.46, "NIC": 352.05, "NER": 622.22, "NGA": 513.24, "NORTH AMERICA": 378.27, "PRK": 124.57, "MKD": 639.86, "NOR": 26.5, "OCEANIA": 509.12, "OECD": 373.31, "OMN": 598.27, "PAK": 435.89, "PSE": 511.63, "PAN": 175, "PNG": 526.75, "PRY": 25.49, "PER": 312.59, "POL": 733.18, "PRT": 225.19, "PRI": 719.85, "QAT": 642.01, "REU": 519.03, "ROU": 297.94, "RUS": 451.95, "RWA": 294.12, "KNA": 681.82, "LCA": 685.71, "SPM": 800, "VCT": 500, "WSM": 470.59, "STP": 600, "SAU": 706.79, "SEN": 685.05, "SRB": 695.69, "SYC": 615.39, "SLE": 47.62, "SGP": 505.22, "SVK": 142.59, "SVN": 257.49, "SLB": 727.27, "SOM": 634.15, "ZAF": 762.46, "KOR": 470.4, "SSD": 684.21, "ESP": 217.77, "LKA": 543.12, "SDN": 288.13, "SUR": 356.44, "SWE": 41.07, "CHE": 36.14, "SYR": 758.35, "TWN": 678.87, "TJK": 99.34, "TZA": 374.08, "THA": 599.02, "PHL": 641.96, "TGO": 492.06, "TON": 625, "TTO": 723.94, "TUN": 592.21, "TUR": 453.01, "TKM": 1389.72, "TCA": 703.7, "UGA": 52.27, "UKR": 271.41, "ARE": 561.14, "GBR": 255.85, "USA": 410.37, "URY": 149.49, "UZB": 1176.69, "VUT": 571.43, "VEN": 298.5, "VNM": 409.8, "VGB": 714.29, "VIR": 685.71, "WORLD": 493.92, "YEM": 613.64, "ZMB": 86.39, "ZWE": 433.38 };
25
+ const data = { "AFG": 132.53, "AFRICA": 559.42, "ALB": 24.29, "DZA": 634.61, "ASM": 611.11, "AGO": 174.73, "ATG": 611.11, "ARG": 394.62, "ARM": 264.54, "ABW": 561.22, "ASEAN": 554.5, "ASIA": 591.19, "AUS": 570.35, "AUT": 110.81, "AZE": 671.39, "BHS": 660.1, "BHR": 904.62, "BGD": 678.11, "BRB": 605.51, "BLR": 441.74, "BEL": 138.11, "BLZ": 225.81, "BEN": 584.07, "BTN": 23.33, "BOL": 489.14, "BIH": 600, "BWA": 847.91, "BRA": 105.51, "BRN": 893.91, "BGR": 335.33, "BFA": 467.53, "BDI": 250, "CPV": 558.14, "KHM": 417.71, "CMR": 305.42, "CAN": 161.43, "CYM": 642.86, "CAF": 0, "TCD": 628.57, "CHL": 353.52, "CHN": 585.82, "COL": 214.88, "COM": 642.86, "COG": 700, "COD": 24.46, "COK": 250, "CRI": 26.46, "CIV": 393.89, "HRV": 204.96, "CUB": 637.61, "CYP": 534.32, "CZE": 449.72, "DNK": 151.65, "DJI": 692.31, "DMA": 529.41, "DOM": 580.78, "ECU": 150.69, "EGY": 570.13, "SLV": 116.54, "GNQ": 591.84, "ERI": 631.58, "EST": 416.67, "SWZ": 172.41, "ETH": 24.64, "EU": 243.83, "EUROPE": 327.69, "FLK": 500, "FRO": 404.76, "FJI": 288.46, "FIN": 79.16, "FRA": 56.04, "GUF": 217.82, "PYF": 442.86, "G20": 482.92, "G7": 361.52, "GAB": 491.6, "GMB": 666.67, "GEO": 167.02, "DEU": 380.95, "GHA": 484, "GRC": 336.57, "GRL": 178.57, "GRD": 640, "GLP": 500, "GUM": 622.86, "GTM": 328.27, "GIN": 236.84, "GNB": 625, "GUY": 640.35, "HTI": 567.31, "HND": 282.27, "HKG": 699.5, "HUN": 204.19, "ISL": 27.68, "IND": 705.13, "IDN": 675.93, "IRN": 665.15, "IRQ": 688.81, "IRL": 290.81, "ISR": 582.93, "ITA": 330.72, "JAM": 555.56, "JPN": 512.81, "JOR": 540.92, "KAZ": 830.41, "KEN": 83.33, "KIR": 666.67, "XKX": 894.65, "KWT": 649.2, "KGZ": 147.29, "LAO": 265.51, "LATIN AMERICA AND CARIBBEAN": 260.28, "LVA": 123.2, "LBN": 599.01, "LSO": 20, "LBR": 227.85, "LBY": 818.69, "LTU": 160.07, "LUX": 105.26, "MAC": 448.98, "MDG": 436.44, "MWI": 66.67, "MYS": 605.83, "MDV": 611.77, "MLI": 408, "MLT": 459.14, "MTQ": 523.18, "MRT": 464.71, "MUS": 632.48, "MEX": 475.36, "MIDDLE EAST": 660.46, "MDA": 648.5, "MNG": 771.8, "MNE": 417.07, "MSR": 1e3, "MAR": 662.64, "MOZ": 135.65, "MMR": 483.57, "NAM": 59.26, "NRU": 750, "NPL": 24.44, "NLD": 267.62, "NCL": 660.58, "NZL": 110.89, "NIC": 265.12, "NER": 670.89, "NGA": 516.23, "NORTH AMERICA": 356.01, "PRK": 389.59, "MKD": 565.35, "NOR": 30.08, "OCEANIA": 507.63, "OECD": 360.53, "OMN": 564.69, "PAK": 463.66, "PSE": 516.13, "PAN": 161.68, "PNG": 507.25, "PRY": 24.31, "PER": 251.74, "POL": 661.93, "PRT": 165.55, "PRI": 678.74, "QAT": 602.59, "REU": 572.82, "ROU": 240.58, "RUS": 436.28, "RWA": 316.33, "KNA": 636.36, "LCA": 666.67, "SPM": 600, "VCT": 529.41, "WSM": 473.68, "STP": 642.86, "SAU": 706.79, "SEN": 511.6, "SRB": 636.06, "SYC": 564.52, "SLE": 50, "SGP": 474, "SVK": 116.77, "SVN": 231.28, "SLB": 700, "SOM": 578.95, "ZAF": 729.67, "KOR": 441.65, "SSD": 629.03, "ESP": 174.05, "LKA": 509.78, "SDN": 263.16, "SUR": 349.28, "SWE": 40.7, "CHE": 34.84, "SYR": 701.66, "TWN": 639.53, "TJK": 116.86, "TZA": 339.25, "THA": 560.74, "PHL": 601.1, "TGO": 443.18, "TON": 625, "TTO": 681.53, "TUN": 564.62, "TUR": 464.59, "TKM": 1306.03, "TCA": 653.85, "UGA": 44.53, "UKR": 259.69, "ARE": 561.14, "GBR": 237.59, "USA": 385.98, "URY": 112.65, "UZB": 1167.6, "VUT": 571.43, "VEN": 185.8, "VNM": 409.8, "VGB": 647.06, "VIR": 632.35, "WORLD": 485.99, "YEM": 566.1, "ZMB": 111.97, "ZWE": 297.87 };
26
26
  const type = "average";
27
27
  var average_intensities_min_default = { data, type };
28
28
  //# sourceMappingURL=average-intensities.min.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/data/average-intensities.min.js"],
4
- "sourcesContent": ["const data = {\"AFG\":120.48,\"AFRICA\":590.8,\"ALB\":23.44,\"DZA\":672.64,\"ASM\":687.5,\"AGO\":212.42,\"ATG\":657.14,\"ARG\":399.5,\"ARM\":280.06,\"ABW\":591.4,\"ASEAN\":569.34,\"ASIA\":594.16,\"AUS\":570.35,\"AUT\":141.79,\"AZE\":719.39,\"BHS\":698.11,\"BHR\":956.55,\"BGD\":719.78,\"BRB\":644.86,\"BLR\":465.34,\"BEL\":139.79,\"BLZ\":484.38,\"BEN\":666.67,\"BTN\":24.44,\"BOL\":497.78,\"BIH\":670.09,\"BWA\":867.58,\"BRA\":114.48,\"BRN\":961.54,\"BGR\":476.9,\"BFA\":611.43,\"BDI\":250,\"CPV\":600,\"KHM\":436.13,\"CMR\":278.26,\"CAN\":163.01,\"CYM\":684.93,\"CAF\":0,\"TCD\":677.42,\"CHL\":353.52,\"CHN\":585.82,\"COL\":198.53,\"COM\":714.29,\"COG\":723.88,\"COD\":25.36,\"COK\":400,\"CRI\":37.21,\"CIV\":453.55,\"HRV\":242.28,\"CUB\":677.47,\"CYP\":555.13,\"CZE\":488.3,\"DNK\":201.78,\"DJI\":666.67,\"DMA\":529.41,\"DOM\":592.49,\"ECU\":192.39,\"EGY\":612.16,\"SLV\":211.29,\"GNQ\":492.96,\"ERI\":688.89,\"EST\":489.89,\"SWZ\":189.19,\"ETH\":25.19,\"EU\":291.9,\"EUROPE\":330.47,\"FLK\":500,\"FRO\":428.57,\"FJI\":289.47,\"FIN\":130.42,\"FRA\":78.81,\"GUF\":254.72,\"PYF\":471.43,\"G20\":489.9,\"G7\":375.97,\"GAB\":397.38,\"GMB\":700,\"GEO\":176.97,\"DEU\":420.06,\"GHA\":498.81,\"GRC\":378.18,\"GRL\":133.33,\"GRD\":714.29,\"GLP\":647.06,\"GUM\":670.33,\"GTM\":331.72,\"GIN\":208.63,\"GNB\":750,\"GUY\":642.28,\"HTI\":606.06,\"HND\":378.97,\"HKG\":733.05,\"HUN\":228.75,\"ISL\":28.56,\"IND\":705.13,\"IDN\":675.93,\"IRN\":665.15,\"IRQ\":708.1,\"IRL\":333.23,\"ISR\":641.17,\"ITA\":378.45,\"JAM\":588.51,\"JPN\":512.81,\"JOR\":572.74,\"KAZ\":830.41,\"KEN\":101.13,\"KIR\":666.67,\"XKX\":945.01,\"KWT\":691.31,\"KGZ\":124.48,\"LAO\":284.21,\"LATIN AMERICA AND CARIBBEAN\":278.58,\"LVA\":136.27,\"LBN\":663.1,\"LSO\":20,\"LBR\":304.35,\"LBY\":861.69,\"LTU\":177.18,\"LUX\":144.07,\"MAC\":627.12,\"MDG\":497.61,\"MWI\":133.8,\"MYS\":605.83,\"MDV\":651.52,\"MLI\":463.13,\"MLT\":500,\"MTQ\":698.63,\"MRT\":526.6,\"MUS\":631.94,\"MEX\":515.62,\"MIDDLE EAST\":673.63,\"MDA\":871.66,\"MNG\":852.82,\"MNE\":483.38,\"MSR\":1000,\"MAR\":705.67,\"MOZ\":150.25,\"MMR\":575.77,\"NAM\":70.06,\"NRU\":750,\"NPL\":24.51,\"NLD\":324.99,\"NCL\":610.12,\"NZL\":117.46,\"NIC\":352.05,\"NER\":622.22,\"NGA\":513.24,\"NORTH AMERICA\":378.27,\"PRK\":124.57,\"MKD\":639.86,\"NOR\":26.5,\"OCEANIA\":509.12,\"OECD\":373.31,\"OMN\":598.27,\"PAK\":435.89,\"PSE\":511.63,\"PAN\":175,\"PNG\":526.75,\"PRY\":25.49,\"PER\":312.59,\"POL\":733.18,\"PRT\":225.19,\"PRI\":719.85,\"QAT\":642.01,\"REU\":519.03,\"ROU\":297.94,\"RUS\":451.95,\"RWA\":294.12,\"KNA\":681.82,\"LCA\":685.71,\"SPM\":800,\"VCT\":500,\"WSM\":470.59,\"STP\":600,\"SAU\":706.79,\"SEN\":685.05,\"SRB\":695.69,\"SYC\":615.39,\"SLE\":47.62,\"SGP\":505.22,\"SVK\":142.59,\"SVN\":257.49,\"SLB\":727.27,\"SOM\":634.15,\"ZAF\":762.46,\"KOR\":470.4,\"SSD\":684.21,\"ESP\":217.77,\"LKA\":543.12,\"SDN\":288.13,\"SUR\":356.44,\"SWE\":41.07,\"CHE\":36.14,\"SYR\":758.35,\"TWN\":678.87,\"TJK\":99.34,\"TZA\":374.08,\"THA\":599.02,\"PHL\":641.96,\"TGO\":492.06,\"TON\":625,\"TTO\":723.94,\"TUN\":592.21,\"TUR\":453.01,\"TKM\":1389.72,\"TCA\":703.7,\"UGA\":52.27,\"UKR\":271.41,\"ARE\":561.14,\"GBR\":255.85,\"USA\":410.37,\"URY\":149.49,\"UZB\":1176.69,\"VUT\":571.43,\"VEN\":298.5,\"VNM\":409.8,\"VGB\":714.29,\"VIR\":685.71,\"WORLD\":493.92,\"YEM\":613.64,\"ZMB\":86.39,\"ZWE\":433.38}; const type = \"average\"; export { data, type }; export default { data, type };"],
5
- "mappings": "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",
4
+ "sourcesContent": ["const data = {\"AFG\":132.53,\"AFRICA\":559.42,\"ALB\":24.29,\"DZA\":634.61,\"ASM\":611.11,\"AGO\":174.73,\"ATG\":611.11,\"ARG\":394.62,\"ARM\":264.54,\"ABW\":561.22,\"ASEAN\":554.5,\"ASIA\":591.19,\"AUS\":570.35,\"AUT\":110.81,\"AZE\":671.39,\"BHS\":660.1,\"BHR\":904.62,\"BGD\":678.11,\"BRB\":605.51,\"BLR\":441.74,\"BEL\":138.11,\"BLZ\":225.81,\"BEN\":584.07,\"BTN\":23.33,\"BOL\":489.14,\"BIH\":600,\"BWA\":847.91,\"BRA\":105.51,\"BRN\":893.91,\"BGR\":335.33,\"BFA\":467.53,\"BDI\":250,\"CPV\":558.14,\"KHM\":417.71,\"CMR\":305.42,\"CAN\":161.43,\"CYM\":642.86,\"CAF\":0,\"TCD\":628.57,\"CHL\":353.52,\"CHN\":585.82,\"COL\":214.88,\"COM\":642.86,\"COG\":700,\"COD\":24.46,\"COK\":250,\"CRI\":26.46,\"CIV\":393.89,\"HRV\":204.96,\"CUB\":637.61,\"CYP\":534.32,\"CZE\":449.72,\"DNK\":151.65,\"DJI\":692.31,\"DMA\":529.41,\"DOM\":580.78,\"ECU\":150.69,\"EGY\":570.13,\"SLV\":116.54,\"GNQ\":591.84,\"ERI\":631.58,\"EST\":416.67,\"SWZ\":172.41,\"ETH\":24.64,\"EU\":243.83,\"EUROPE\":327.69,\"FLK\":500,\"FRO\":404.76,\"FJI\":288.46,\"FIN\":79.16,\"FRA\":56.04,\"GUF\":217.82,\"PYF\":442.86,\"G20\":482.92,\"G7\":361.52,\"GAB\":491.6,\"GMB\":666.67,\"GEO\":167.02,\"DEU\":380.95,\"GHA\":484,\"GRC\":336.57,\"GRL\":178.57,\"GRD\":640,\"GLP\":500,\"GUM\":622.86,\"GTM\":328.27,\"GIN\":236.84,\"GNB\":625,\"GUY\":640.35,\"HTI\":567.31,\"HND\":282.27,\"HKG\":699.5,\"HUN\":204.19,\"ISL\":27.68,\"IND\":705.13,\"IDN\":675.93,\"IRN\":665.15,\"IRQ\":688.81,\"IRL\":290.81,\"ISR\":582.93,\"ITA\":330.72,\"JAM\":555.56,\"JPN\":512.81,\"JOR\":540.92,\"KAZ\":830.41,\"KEN\":83.33,\"KIR\":666.67,\"XKX\":894.65,\"KWT\":649.2,\"KGZ\":147.29,\"LAO\":265.51,\"LATIN AMERICA AND CARIBBEAN\":260.28,\"LVA\":123.2,\"LBN\":599.01,\"LSO\":20,\"LBR\":227.85,\"LBY\":818.69,\"LTU\":160.07,\"LUX\":105.26,\"MAC\":448.98,\"MDG\":436.44,\"MWI\":66.67,\"MYS\":605.83,\"MDV\":611.77,\"MLI\":408,\"MLT\":459.14,\"MTQ\":523.18,\"MRT\":464.71,\"MUS\":632.48,\"MEX\":475.36,\"MIDDLE EAST\":660.46,\"MDA\":648.5,\"MNG\":771.8,\"MNE\":417.07,\"MSR\":1000,\"MAR\":662.64,\"MOZ\":135.65,\"MMR\":483.57,\"NAM\":59.26,\"NRU\":750,\"NPL\":24.44,\"NLD\":267.62,\"NCL\":660.58,\"NZL\":110.89,\"NIC\":265.12,\"NER\":670.89,\"NGA\":516.23,\"NORTH AMERICA\":356.01,\"PRK\":389.59,\"MKD\":565.35,\"NOR\":30.08,\"OCEANIA\":507.63,\"OECD\":360.53,\"OMN\":564.69,\"PAK\":463.66,\"PSE\":516.13,\"PAN\":161.68,\"PNG\":507.25,\"PRY\":24.31,\"PER\":251.74,\"POL\":661.93,\"PRT\":165.55,\"PRI\":678.74,\"QAT\":602.59,\"REU\":572.82,\"ROU\":240.58,\"RUS\":436.28,\"RWA\":316.33,\"KNA\":636.36,\"LCA\":666.67,\"SPM\":600,\"VCT\":529.41,\"WSM\":473.68,\"STP\":642.86,\"SAU\":706.79,\"SEN\":511.6,\"SRB\":636.06,\"SYC\":564.52,\"SLE\":50,\"SGP\":474,\"SVK\":116.77,\"SVN\":231.28,\"SLB\":700,\"SOM\":578.95,\"ZAF\":729.67,\"KOR\":441.65,\"SSD\":629.03,\"ESP\":174.05,\"LKA\":509.78,\"SDN\":263.16,\"SUR\":349.28,\"SWE\":40.7,\"CHE\":34.84,\"SYR\":701.66,\"TWN\":639.53,\"TJK\":116.86,\"TZA\":339.25,\"THA\":560.74,\"PHL\":601.1,\"TGO\":443.18,\"TON\":625,\"TTO\":681.53,\"TUN\":564.62,\"TUR\":464.59,\"TKM\":1306.03,\"TCA\":653.85,\"UGA\":44.53,\"UKR\":259.69,\"ARE\":561.14,\"GBR\":237.59,\"USA\":385.98,\"URY\":112.65,\"UZB\":1167.6,\"VUT\":571.43,\"VEN\":185.8,\"VNM\":409.8,\"VGB\":647.06,\"VIR\":632.35,\"WORLD\":485.99,\"YEM\":566.1,\"ZMB\":111.97,\"ZWE\":297.87}; const type = \"average\"; export { data, type }; export default { data, type };"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -161,6 +161,6 @@ Falling back to default value.`);
161
161
  return adjustments;
162
162
  }
163
163
  function getApiRequestHeaders(comment = "") {
164
- return { "User-Agent": `co2js/${"0.14.3"} ${comment}` };
164
+ return { "User-Agent": `co2js/${"0.15.0"} ${comment}` };
165
165
  }
166
166
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/helpers/index.js"],
4
- "sourcesContent": ["import { averageIntensity } from \"../index.js\";\nimport {\n GLOBAL_GRID_INTENSITY,\n PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD,\n FIRST_TIME_VIEWING_PERCENTAGE,\n RETURNING_VISITOR_PERCENTAGE,\n} from \"../constants/index.js\";\nconst formatNumber = (num) => parseFloat(num.toFixed(2));\n\nfunction parseOptions(options) {\n // CHeck that it is an object\n if (typeof options !== \"object\") {\n throw new Error(\"Options must be an object\");\n }\n\n const adjustments = {};\n\n if (options?.gridIntensity) {\n adjustments.gridIntensity = {};\n const { device, dataCenter, network } = options.gridIntensity;\n if (device || device === 0) {\n if (typeof device === \"object\") {\n if (!averageIntensity.data[device.country?.toUpperCase()]) {\n console.warn(\n `\"${device.country}\" is not a valid country. Please use a valid 3 digit ISO 3166 country code. \\nSee https://developers.thegreenwebfoundation.org/co2js/data/ for more information. \\nFalling back to global average grid intensity.`\n );\n adjustments.gridIntensity[\"device\"] = {\n value: GLOBAL_GRID_INTENSITY,\n };\n }\n adjustments.gridIntensity[\"device\"] = {\n country: device.country,\n value: parseFloat(\n averageIntensity.data[device.country?.toUpperCase()]\n ),\n };\n } else if (typeof device === \"number\") {\n adjustments.gridIntensity[\"device\"] = {\n value: device,\n };\n } else {\n adjustments.gridIntensity[\"device\"] = {\n value: GLOBAL_GRID_INTENSITY,\n };\n console.warn(\n `The device grid intensity must be a number or an object. You passed in a ${typeof device}. \\nFalling back to global average grid intensity.`\n );\n }\n }\n if (dataCenter || dataCenter === 0) {\n if (typeof dataCenter === \"object\") {\n if (!averageIntensity.data[dataCenter.country?.toUpperCase()]) {\n console.warn(\n `\"${dataCenter.country}\" is not a valid country. Please use a valid 3 digit ISO 3166 country code. \\nSee https://developers.thegreenwebfoundation.org/co2js/data/ for more information. \\nFalling back to global average grid intensity.`\n );\n adjustments.gridIntensity[\"dataCenter\"] = {\n value: GLOBAL_GRID_INTENSITY,\n };\n }\n adjustments.gridIntensity[\"dataCenter\"] = {\n country: dataCenter.country,\n value: parseFloat(\n averageIntensity.data[dataCenter.country?.toUpperCase()]\n ),\n };\n } else if (typeof dataCenter === \"number\") {\n adjustments.gridIntensity[\"dataCenter\"] = {\n value: dataCenter,\n };\n } else {\n adjustments.gridIntensity[\"dataCenter\"] = {\n value: GLOBAL_GRID_INTENSITY,\n };\n console.warn(\n `The data center grid intensity must be a number or an object. You passed in a ${typeof dataCenter}. \\nFalling back to global average grid intensity.`\n );\n }\n }\n if (network || network === 0) {\n if (typeof network === \"object\") {\n if (!averageIntensity.data[network.country?.toUpperCase()]) {\n console.warn(\n `\"${network.country}\" is not a valid country. Please use a valid 3 digit ISO 3166 country code. \\nSee https://developers.thegreenwebfoundation.org/co2js/data/ for more information. Falling back to global average grid intensity. \\nFalling back to global average grid intensity.`\n );\n adjustments.gridIntensity[\"network\"] = {\n value: GLOBAL_GRID_INTENSITY,\n };\n }\n adjustments.gridIntensity[\"network\"] = {\n country: network.country,\n value: parseFloat(\n averageIntensity.data[network.country?.toUpperCase()]\n ),\n };\n } else if (typeof network === \"number\") {\n adjustments.gridIntensity[\"network\"] = {\n value: network,\n };\n } else {\n adjustments.gridIntensity[\"network\"] = {\n value: GLOBAL_GRID_INTENSITY,\n };\n console.warn(\n `The network grid intensity must be a number or an object. You passed in a ${typeof network}. \\nFalling back to global average grid intensity.`\n );\n }\n }\n }\n\n if (options?.dataReloadRatio || options.dataReloadRatio === 0) {\n if (typeof options.dataReloadRatio === \"number\") {\n if (options.dataReloadRatio >= 0 && options.dataReloadRatio <= 1) {\n adjustments.dataReloadRatio = options.dataReloadRatio;\n } else {\n adjustments.dataReloadRatio =\n PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD;\n console.warn(\n `The dataReloadRatio option must be a number between 0 and 1. You passed in ${options.dataReloadRatio}. \\nFalling back to default value.`\n );\n }\n } else {\n adjustments.dataReloadRatio =\n PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD;\n console.warn(\n `The dataReloadRatio option must be a number. You passed in a ${typeof options.dataReloadRatio}. \\nFalling back to default value.`\n );\n }\n }\n\n if (options?.firstVisitPercentage || options.firstVisitPercentage === 0) {\n if (typeof options.firstVisitPercentage === \"number\") {\n if (\n options.firstVisitPercentage >= 0 &&\n options.firstVisitPercentage <= 1\n ) {\n adjustments.firstVisitPercentage = options.firstVisitPercentage;\n } else {\n adjustments.firstVisitPercentage = FIRST_TIME_VIEWING_PERCENTAGE;\n console.warn(\n `The firstVisitPercentage option must be a number between 0 and 1. You passed in ${options.firstVisitPercentage}. \\nFalling back to default value.`\n );\n }\n } else {\n adjustments.firstVisitPercentage = FIRST_TIME_VIEWING_PERCENTAGE;\n console.warn(\n `The firstVisitPercentage option must be a number. You passed in a ${typeof options.firstVisitPercentage}. \\nFalling back to default value.`\n );\n }\n }\n\n if (options?.returnVisitPercentage || options.returnVisitPercentage === 0) {\n if (typeof options.returnVisitPercentage === \"number\") {\n if (\n options.returnVisitPercentage >= 0 &&\n options.returnVisitPercentage <= 1\n ) {\n adjustments.returnVisitPercentage = options.returnVisitPercentage;\n } else {\n adjustments.returnVisitPercentage = RETURNING_VISITOR_PERCENTAGE;\n console.warn(\n `The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}. \\nFalling back to default value.`\n );\n }\n } else {\n adjustments.returnVisitPercentage = RETURNING_VISITOR_PERCENTAGE;\n console.warn(\n `The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}. \\nFalling back to default value.`\n );\n }\n }\n\n return adjustments;\n}\n\n/**\n * Returns an object containing all the HTTP headers to use when making a request to the Green Web Foundation API.\n * @param {string} comment - Optional. The app, site, or organisation that is making the request.\n *\n * @returns {import('http').OutgoingHttpHeaders}\n */\nfunction getApiRequestHeaders(comment = \"\") {\n return { \"User-Agent\": `co2js/${process.env.CO2JS_VERSION} ${comment}` };\n}\n\nexport { formatNumber, parseOptions, getApiRequestHeaders };\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { averageIntensity } from \"../index.js\";\nimport {\n GLOBAL_GRID_INTENSITY,\n PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD,\n FIRST_TIME_VIEWING_PERCENTAGE,\n RETURNING_VISITOR_PERCENTAGE,\n} from \"../constants/index.js\";\n\n// Shared type definitions to be used across different files\n\n/**\n * @typedef {Object} DomainCheckOptions options to control the behavior when checking a domain\n * @property {string} userAgentIdentifier - Optional. The app, site, or organisation that is making the request.\n * @property {boolean} verbose - Optional. Whether to return a verbose response.\n * @property {string[]} db - Optional. A database list to use for lookups.\n */\n\nconst formatNumber = (num) => parseFloat(num.toFixed(2));\n\nfunction parseOptions(options) {\n // CHeck that it is an object\n if (typeof options !== \"object\") {\n throw new Error(\"Options must be an object\");\n }\n\n const adjustments = {};\n\n if (options?.gridIntensity) {\n adjustments.gridIntensity = {};\n const { device, dataCenter, network } = options.gridIntensity;\n if (device || device === 0) {\n if (typeof device === \"object\") {\n if (!averageIntensity.data[device.country?.toUpperCase()]) {\n console.warn(\n `\"${device.country}\" is not a valid country. Please use a valid 3 digit ISO 3166 country code. \\nSee https://developers.thegreenwebfoundation.org/co2js/data/ for more information. \\nFalling back to global average grid intensity.`\n );\n adjustments.gridIntensity[\"device\"] = {\n value: GLOBAL_GRID_INTENSITY,\n };\n }\n adjustments.gridIntensity[\"device\"] = {\n country: device.country,\n value: parseFloat(\n averageIntensity.data[device.country?.toUpperCase()]\n ),\n };\n } else if (typeof device === \"number\") {\n adjustments.gridIntensity[\"device\"] = {\n value: device,\n };\n } else {\n adjustments.gridIntensity[\"device\"] = {\n value: GLOBAL_GRID_INTENSITY,\n };\n console.warn(\n `The device grid intensity must be a number or an object. You passed in a ${typeof device}. \\nFalling back to global average grid intensity.`\n );\n }\n }\n if (dataCenter || dataCenter === 0) {\n if (typeof dataCenter === \"object\") {\n if (!averageIntensity.data[dataCenter.country?.toUpperCase()]) {\n console.warn(\n `\"${dataCenter.country}\" is not a valid country. Please use a valid 3 digit ISO 3166 country code. \\nSee https://developers.thegreenwebfoundation.org/co2js/data/ for more information. \\nFalling back to global average grid intensity.`\n );\n adjustments.gridIntensity[\"dataCenter\"] = {\n value: GLOBAL_GRID_INTENSITY,\n };\n }\n adjustments.gridIntensity[\"dataCenter\"] = {\n country: dataCenter.country,\n value: parseFloat(\n averageIntensity.data[dataCenter.country?.toUpperCase()]\n ),\n };\n } else if (typeof dataCenter === \"number\") {\n adjustments.gridIntensity[\"dataCenter\"] = {\n value: dataCenter,\n };\n } else {\n adjustments.gridIntensity[\"dataCenter\"] = {\n value: GLOBAL_GRID_INTENSITY,\n };\n console.warn(\n `The data center grid intensity must be a number or an object. You passed in a ${typeof dataCenter}. \\nFalling back to global average grid intensity.`\n );\n }\n }\n if (network || network === 0) {\n if (typeof network === \"object\") {\n if (!averageIntensity.data[network.country?.toUpperCase()]) {\n console.warn(\n `\"${network.country}\" is not a valid country. Please use a valid 3 digit ISO 3166 country code. \\nSee https://developers.thegreenwebfoundation.org/co2js/data/ for more information. Falling back to global average grid intensity. \\nFalling back to global average grid intensity.`\n );\n adjustments.gridIntensity[\"network\"] = {\n value: GLOBAL_GRID_INTENSITY,\n };\n }\n adjustments.gridIntensity[\"network\"] = {\n country: network.country,\n value: parseFloat(\n averageIntensity.data[network.country?.toUpperCase()]\n ),\n };\n } else if (typeof network === \"number\") {\n adjustments.gridIntensity[\"network\"] = {\n value: network,\n };\n } else {\n adjustments.gridIntensity[\"network\"] = {\n value: GLOBAL_GRID_INTENSITY,\n };\n console.warn(\n `The network grid intensity must be a number or an object. You passed in a ${typeof network}. \\nFalling back to global average grid intensity.`\n );\n }\n }\n }\n\n if (options?.dataReloadRatio || options.dataReloadRatio === 0) {\n if (typeof options.dataReloadRatio === \"number\") {\n if (options.dataReloadRatio >= 0 && options.dataReloadRatio <= 1) {\n adjustments.dataReloadRatio = options.dataReloadRatio;\n } else {\n adjustments.dataReloadRatio =\n PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD;\n console.warn(\n `The dataReloadRatio option must be a number between 0 and 1. You passed in ${options.dataReloadRatio}. \\nFalling back to default value.`\n );\n }\n } else {\n adjustments.dataReloadRatio =\n PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD;\n console.warn(\n `The dataReloadRatio option must be a number. You passed in a ${typeof options.dataReloadRatio}. \\nFalling back to default value.`\n );\n }\n }\n\n if (options?.firstVisitPercentage || options.firstVisitPercentage === 0) {\n if (typeof options.firstVisitPercentage === \"number\") {\n if (\n options.firstVisitPercentage >= 0 &&\n options.firstVisitPercentage <= 1\n ) {\n adjustments.firstVisitPercentage = options.firstVisitPercentage;\n } else {\n adjustments.firstVisitPercentage = FIRST_TIME_VIEWING_PERCENTAGE;\n console.warn(\n `The firstVisitPercentage option must be a number between 0 and 1. You passed in ${options.firstVisitPercentage}. \\nFalling back to default value.`\n );\n }\n } else {\n adjustments.firstVisitPercentage = FIRST_TIME_VIEWING_PERCENTAGE;\n console.warn(\n `The firstVisitPercentage option must be a number. You passed in a ${typeof options.firstVisitPercentage}. \\nFalling back to default value.`\n );\n }\n }\n\n if (options?.returnVisitPercentage || options.returnVisitPercentage === 0) {\n if (typeof options.returnVisitPercentage === \"number\") {\n if (\n options.returnVisitPercentage >= 0 &&\n options.returnVisitPercentage <= 1\n ) {\n adjustments.returnVisitPercentage = options.returnVisitPercentage;\n } else {\n adjustments.returnVisitPercentage = RETURNING_VISITOR_PERCENTAGE;\n console.warn(\n `The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}. \\nFalling back to default value.`\n );\n }\n } else {\n adjustments.returnVisitPercentage = RETURNING_VISITOR_PERCENTAGE;\n console.warn(\n `The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}. \\nFalling back to default value.`\n );\n }\n }\n\n return adjustments;\n}\n\n/**\n * Returns an object containing all the HTTP headers to use when making a request to the Green Web Foundation API.\n * @param {string} comment - Optional. The app, site, or organisation that is making the request.\n *\n * @returns {import('http').OutgoingHttpHeaders}\n */\nfunction getApiRequestHeaders(comment = \"\") {\n return { \"User-Agent\": `co2js/${process.env.CO2JS_VERSION} ${comment}` };\n}\n\nexport { formatNumber, parseOptions, getApiRequestHeaders };\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,7 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
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));
18
21
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
22
  var hosting_api_exports = {};
20
23
  __export(hosting_api_exports, {
@@ -22,31 +25,39 @@ __export(hosting_api_exports, {
22
25
  });
23
26
  module.exports = __toCommonJS(hosting_api_exports);
24
27
  var import_helpers = require("./helpers/index.js");
25
- function check(domain, userAgentIdentifier) {
28
+ var import_hosting_json = __toESM(require("./hosting-json.js"));
29
+ function check(domain, optionsOrAgentId) {
30
+ const options = typeof optionsOrAgentId === "string" ? { userAgentIdentifier: optionsOrAgentId } : optionsOrAgentId;
31
+ if ((options == null ? void 0 : options.db) && options.verbose) {
32
+ throw new Error("verbose mode cannot be used with a local lookup database");
33
+ }
26
34
  if (typeof domain === "string") {
27
- return checkAgainstAPI(domain, userAgentIdentifier);
35
+ return checkAgainstAPI(domain, options);
28
36
  } else {
29
- return checkDomainsAgainstAPI(domain, userAgentIdentifier);
37
+ return checkDomainsAgainstAPI(domain, options);
30
38
  }
31
39
  }
32
- async function checkAgainstAPI(domain, userAgentIdentifier) {
40
+ async function checkAgainstAPI(domain, options = {}) {
33
41
  const req = await fetch(`https://api.thegreenwebfoundation.org/greencheck/${domain}`, {
34
- headers: (0, import_helpers.getApiRequestHeaders)(userAgentIdentifier)
42
+ headers: (0, import_helpers.getApiRequestHeaders)(options.userAgentIdentifier)
35
43
  });
44
+ if (options == null ? void 0 : options.db) {
45
+ return import_hosting_json.default.check(domain, options.db);
46
+ }
36
47
  const res = await req.json();
37
- return res.green;
48
+ return options.verbose ? res : res.green;
38
49
  }
39
- async function checkDomainsAgainstAPI(domains, userAgentIdentifier) {
50
+ async function checkDomainsAgainstAPI(domains, options = {}) {
40
51
  try {
41
52
  const apiPath = "https://api.thegreenwebfoundation.org/v2/greencheckmulti";
42
53
  const domainsString = JSON.stringify(domains);
43
54
  const req = await fetch(`${apiPath}/${domainsString}`, {
44
- headers: (0, import_helpers.getApiRequestHeaders)(userAgentIdentifier)
55
+ headers: (0, import_helpers.getApiRequestHeaders)(options.userAgentIdentifier)
45
56
  });
46
57
  const allGreenCheckResults = await req.json();
47
- return greenDomainsFromResults(allGreenCheckResults);
58
+ return options.verbose ? allGreenCheckResults : greenDomainsFromResults(allGreenCheckResults);
48
59
  } catch (e) {
49
- return [];
60
+ return options.verbose ? {} : [];
50
61
  }
51
62
  }
52
63
  function greenDomainsFromResults(greenResults) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hosting-api.js"],
4
- "sourcesContent": ["\"use strict\";\n\nimport { getApiRequestHeaders } from \"./helpers/index.js\";\n\n/**\n * Check if a string or array of domains has been provided\n * @param {string|array} domain - The domain to check, or an array of domains to be checked.\n * @param {string} userAgentIdentifier - Optional. The app, site, or organisation that is making the request.\n */\n\nfunction check(domain, userAgentIdentifier) {\n // is it a single domain or an array of them?\n if (typeof domain === \"string\") {\n return checkAgainstAPI(domain, userAgentIdentifier);\n } else {\n return checkDomainsAgainstAPI(domain, userAgentIdentifier);\n }\n}\n\n/**\n * Check if a domain is hosted by a green web host by querying the Green Web Foundation API.\n * @param {string} domain - The domain to check.\n * @param {string} userAgentIdentifier - Optional. The app, site, or organisation that is making the request.\n * @returns {boolean} - A boolean indicating whether the domain is hosted by a green web host.\n */\nasync function checkAgainstAPI(domain, userAgentIdentifier) {\n const req = await fetch(\n `https://api.thegreenwebfoundation.org/greencheck/${domain}`,\n {\n headers: getApiRequestHeaders(userAgentIdentifier),\n }\n );\n const res = await req.json();\n return res.green;\n}\n\n/**\n * Check if an array of domains is hosted by a green web host by querying the Green Web Foundation API.\n * @param {array} domains - An array of domains to check.\n * @param {string} userAgentIdentifier - Optional. The app, site, or organisation that is making the request.\n * @returns {array} - An array of domains that are hosted by a green web host.\n */\n\nasync function checkDomainsAgainstAPI(domains, userAgentIdentifier) {\n try {\n const apiPath = \"https://api.thegreenwebfoundation.org/v2/greencheckmulti\";\n const domainsString = JSON.stringify(domains);\n\n const req = await fetch(`${apiPath}/${domainsString}`, {\n headers: getApiRequestHeaders(userAgentIdentifier),\n });\n\n const allGreenCheckResults = await req.json();\n\n return greenDomainsFromResults(allGreenCheckResults);\n } catch (e) {\n return [];\n }\n}\n\n/**\n * Extract the green domains from the results of a green check.\n * @param {object} greenResults - The results of a green check.\n * @returns {array} - An array of domains that are hosted by a green web host.\n */\nfunction greenDomainsFromResults(greenResults) {\n const entries = Object.entries(greenResults);\n const greenEntries = entries.filter(([key, val]) => val.green);\n return greenEntries.map(([key, val]) => val.url);\n}\n\nexport default {\n check,\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,qBAAqC;AAQrC,eAAe,QAAQ,qBAAqB;AAE1C,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,gBAAgB,QAAQ,mBAAmB;AAAA,EACpD,OAAO;AACL,WAAO,uBAAuB,QAAQ,mBAAmB;AAAA,EAC3D;AACF;AAQA,+BAA+B,QAAQ,qBAAqB;AAC1D,QAAM,MAAM,MAAM,MAChB,oDAAoD,UACpD;AAAA,IACE,SAAS,yCAAqB,mBAAmB;AAAA,EACnD,CACF;AACA,QAAM,MAAM,MAAM,IAAI,KAAK;AAC3B,SAAO,IAAI;AACb;AASA,sCAAsC,SAAS,qBAAqB;AAClE,MAAI;AACF,UAAM,UAAU;AAChB,UAAM,gBAAgB,KAAK,UAAU,OAAO;AAE5C,UAAM,MAAM,MAAM,MAAM,GAAG,WAAW,iBAAiB;AAAA,MACrD,SAAS,yCAAqB,mBAAmB;AAAA,IACnD,CAAC;AAED,UAAM,uBAAuB,MAAM,IAAI,KAAK;AAE5C,WAAO,wBAAwB,oBAAoB;AAAA,EACrD,SAAS,GAAP;AACA,WAAO,CAAC;AAAA,EACV;AACF;AAOA,iCAAiC,cAAc;AAC7C,QAAM,UAAU,OAAO,QAAQ,YAAY;AAC3C,QAAM,eAAe,QAAQ,OAAO,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK;AAC7D,SAAO,aAAa,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,GAAG;AACjD;AAEA,IAAO,sBAAQ;AAAA,EACb;AACF;",
4
+ "sourcesContent": ["\"use strict\";\n\nimport { getApiRequestHeaders } from \"./helpers/index.js\";\nimport hostingJSON from \"./hosting-json.js\";\n\n/**\n * Check if a string or array of domains is hosted by a green web host by querying the Green Web Foundation API.\n * @param {string|array} domain - The domain to check, or an array of domains to be checked.\n * @param {string | DomainCheckOptions} optionsOrAgentId - Optional. An object of domain check options, or a string\n * representing the app, site, or organisation that is making the request.\n */\n\nfunction check(domain, optionsOrAgentId) {\n const options =\n typeof optionsOrAgentId === \"string\"\n ? { userAgentIdentifier: optionsOrAgentId }\n : optionsOrAgentId;\n\n if (options?.db && options.verbose) {\n throw new Error(\"verbose mode cannot be used with a local lookup database\");\n }\n // is it a single domain or an array of them?\n if (typeof domain === \"string\") {\n return checkAgainstAPI(domain, options);\n } else {\n return checkDomainsAgainstAPI(domain, options);\n }\n}\n\n/**\n * Check if a domain is hosted by a green web host by querying the Green Web Foundation API.\n * @param {string} domain - The domain to check.\n * @param {DomainCheckOptions} options\n * @returns - A boolean indicating whether the domain is hosted by a green web host if `options.verbose` is false,\n * otherwise an object representing the domain host information.\n */\nasync function checkAgainstAPI(domain, options = {}) {\n const req = await fetch(\n `https://api.thegreenwebfoundation.org/greencheck/${domain}`,\n {\n headers: getApiRequestHeaders(options.userAgentIdentifier),\n }\n );\n if (options?.db) {\n return hostingJSON.check(domain, options.db);\n }\n const res = await req.json();\n return options.verbose ? res : res.green;\n}\n\n/**\n * Check if an array of domains is hosted by a green web host by querying the Green Web Foundation API.\n * @param {array} domains - An array of domains to check.\n * @param {DomainCheckOptions} options\n * @returns - An array of domains that are hosted by a green web host if `options.verbose` is false,\n * otherwise a dictionary of domain to host information.\n */\n\nasync function checkDomainsAgainstAPI(domains, options = {}) {\n try {\n const apiPath = \"https://api.thegreenwebfoundation.org/v2/greencheckmulti\";\n const domainsString = JSON.stringify(domains);\n\n const req = await fetch(`${apiPath}/${domainsString}`, {\n headers: getApiRequestHeaders(options.userAgentIdentifier),\n });\n\n const allGreenCheckResults = await req.json();\n\n return options.verbose\n ? allGreenCheckResults\n : greenDomainsFromResults(allGreenCheckResults);\n } catch (e) {\n return options.verbose ? {} : [];\n }\n}\n\n/**\n * Extract the green domains from the results of a green check.\n * @param {object} greenResults - The results of a green check.\n * @returns {array} - An array of domains that are hosted by a green web host.\n */\nfunction greenDomainsFromResults(greenResults) {\n const entries = Object.entries(greenResults);\n const greenEntries = entries.filter(([key, val]) => val.green);\n return greenEntries.map(([key, val]) => val.url);\n}\n\nexport default {\n check,\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,qBAAqC;AACrC,0BAAwB;AASxB,eAAe,QAAQ,kBAAkB;AACvC,QAAM,UACJ,OAAO,qBAAqB,WACxB,EAAE,qBAAqB,iBAAiB,IACxC;AAEN,MAAI,oCAAS,OAAM,QAAQ,SAAS;AAClC,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AAEA,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,gBAAgB,QAAQ,OAAO;AAAA,EACxC,OAAO;AACL,WAAO,uBAAuB,QAAQ,OAAO;AAAA,EAC/C;AACF;AASA,+BAA+B,QAAQ,UAAU,CAAC,GAAG;AACnD,QAAM,MAAM,MAAM,MAChB,oDAAoD,UACpD;AAAA,IACE,SAAS,yCAAqB,QAAQ,mBAAmB;AAAA,EAC3D,CACF;AACA,MAAI,mCAAS,IAAI;AACf,WAAO,4BAAY,MAAM,QAAQ,QAAQ,EAAE;AAAA,EAC7C;AACA,QAAM,MAAM,MAAM,IAAI,KAAK;AAC3B,SAAO,QAAQ,UAAU,MAAM,IAAI;AACrC;AAUA,sCAAsC,SAAS,UAAU,CAAC,GAAG;AAC3D,MAAI;AACF,UAAM,UAAU;AAChB,UAAM,gBAAgB,KAAK,UAAU,OAAO;AAE5C,UAAM,MAAM,MAAM,MAAM,GAAG,WAAW,iBAAiB;AAAA,MACrD,SAAS,yCAAqB,QAAQ,mBAAmB;AAAA,IAC3D,CAAC;AAED,UAAM,uBAAuB,MAAM,IAAI,KAAK;AAE5C,WAAO,QAAQ,UACX,uBACA,wBAAwB,oBAAoB;AAAA,EAClD,SAAS,GAAP;AACA,WAAO,QAAQ,UAAU,CAAC,IAAI,CAAC;AAAA,EACjC;AACF;AAOA,iCAAiC,cAAc;AAC7C,QAAM,UAAU,OAAO,QAAQ,YAAY;AAC3C,QAAM,eAAe,QAAQ,OAAO,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK;AAC7D,SAAO,aAAa,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,GAAG;AACjD;AAEA,IAAO,sBAAQ;AAAA,EACb;AACF;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ async function check(domain, db) {
3
+ if (typeof domain === "string") {
4
+ return checkInJSON(domain, db);
5
+ } else {
6
+ return checkDomainsInJSON(domain, db);
7
+ }
8
+ }
9
+ function checkInJSON(domain, db) {
10
+ if (db.indexOf(domain) > -1) {
11
+ return true;
12
+ }
13
+ return false;
14
+ }
15
+ function greenDomainsFromResults(greenResults) {
16
+ const entries = Object.entries(greenResults);
17
+ const greenEntries = entries.filter(([key, val]) => val.green);
18
+ return greenEntries.map(([key, val]) => val.url);
19
+ }
20
+ function checkDomainsInJSON(domains, db) {
21
+ let greenDomains = [];
22
+ for (let domain of domains) {
23
+ if (db.indexOf(domain) > -1) {
24
+ greenDomains.push(domain);
25
+ }
26
+ }
27
+ return greenDomains;
28
+ }
29
+ function find(domain, db) {
30
+ if (typeof domain === "string") {
31
+ return findInJSON(domain, db);
32
+ } else {
33
+ return findDomainsInJSON(domain, db);
34
+ }
35
+ }
36
+ function findInJSON(domain, db) {
37
+ if (db.indexOf(domain) > -1) {
38
+ return domain;
39
+ }
40
+ return {
41
+ url: domain,
42
+ green: false
43
+ };
44
+ }
45
+ function findDomainsInJSON(domains, db) {
46
+ const result = {};
47
+ for (let domain of domains) {
48
+ result[domain] = findInJSON(domain, db);
49
+ }
50
+ return result;
51
+ }
52
+ module.exports = {
53
+ check,
54
+ greenDomainsFromResults,
55
+ find
56
+ };
57
+ //# sourceMappingURL=hosting-json.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/hosting-json.js"],
4
+ "sourcesContent": ["\"use strict\";\n\n/**\n * Check if a string or array of domains has been provided\n * @param {string|array} domain - The domain to check, or an array of domains to be checked.\n */\nasync function check(domain, db) {\n // is it a single domain or an array of them?\n if (typeof domain === \"string\") {\n return checkInJSON(domain, db);\n } else {\n return checkDomainsInJSON(domain, db);\n }\n}\n\n/**\n * Check if a domain is hosted by a green web host by querying the database.\n * @param {string} domain - The domain to check.\n * @param {object} db - The database to check against.\n * @returns {boolean} - A boolean indicating whether the domain is hosted by a green web host.\n */\nfunction checkInJSON(domain, db) {\n if (db.indexOf(domain) > -1) {\n return true;\n }\n return false;\n}\n\n/**\n * Extract the green domains from the results of a green check.\n * @param {object} greenResults - The results of a green check.\n * @returns {array} - An array of domains that are hosted by a green web host.\n */\nfunction greenDomainsFromResults(greenResults) {\n const entries = Object.entries(greenResults);\n const greenEntries = entries.filter(([key, val]) => val.green);\n\n return greenEntries.map(([key, val]) => val.url);\n}\n\n/**\n * Check if an array of domains is hosted by a green web host by querying the database.\n * @param {array} domains - An array of domains to check.\n * @param {object} db - The database to check against.\n * @returns {array} - An array of domains that are hosted by a green web host.\n */\nfunction checkDomainsInJSON(domains, db) {\n let greenDomains = [];\n\n for (let domain of domains) {\n if (db.indexOf(domain) > -1) {\n greenDomains.push(domain);\n }\n }\n return greenDomains;\n}\n\n/**\n * Find the provided information a string or array of domains\n * @param {string|array} domain - The domain to check, or an array of domains to be checked.\n */\nfunction find(domain, db) {\n // is it a single domain or an array of them?\n if (typeof domain === \"string\") {\n return findInJSON(domain, db);\n } else {\n return findDomainsInJSON(domain, db);\n }\n}\n\n/**\n * Check if a domain is hosted by a green web host by querying the database.\n * @param {string} domain - The domain to check.\n * @param {object} db - The database to check against.\n * @returns {object} - An object representing the domain provided host information.\n */\nfunction findInJSON(domain, db) {\n if (db.indexOf(domain) > -1) {\n return domain;\n }\n return {\n url: domain,\n green: false,\n };\n}\n\n/**\n * Check if an array of domains is hosted by a green web host by querying the database.\n * @param {array} domains - An array of domains to check.\n * @param {object} db - The database to check against.\n * @returns {array} - A dictionary of domain to provided host information.\n */\nfunction findDomainsInJSON(domains, db) {\n const result = {};\n for (let domain of domains) {\n result[domain] = findInJSON(domain, db);\n }\n return result;\n}\n\nmodule.exports = {\n check,\n greenDomainsFromResults,\n find,\n};\n"],
5
+ "mappings": ";AAMA,qBAAqB,QAAQ,IAAI;AAE/B,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,YAAY,QAAQ,EAAE;AAAA,EAC/B,OAAO;AACL,WAAO,mBAAmB,QAAQ,EAAE;AAAA,EACtC;AACF;AAQA,qBAAqB,QAAQ,IAAI;AAC/B,MAAI,GAAG,QAAQ,MAAM,IAAI,IAAI;AAC3B,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAOA,iCAAiC,cAAc;AAC7C,QAAM,UAAU,OAAO,QAAQ,YAAY;AAC3C,QAAM,eAAe,QAAQ,OAAO,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK;AAE7D,SAAO,aAAa,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,GAAG;AACjD;AAQA,4BAA4B,SAAS,IAAI;AACvC,MAAI,eAAe,CAAC;AAEpB,WAAS,UAAU,SAAS;AAC1B,QAAI,GAAG,QAAQ,MAAM,IAAI,IAAI;AAC3B,mBAAa,KAAK,MAAM;AAAA,IAC1B;AAAA,EACF;AACA,SAAO;AACT;AAMA,cAAc,QAAQ,IAAI;AAExB,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,WAAW,QAAQ,EAAE;AAAA,EAC9B,OAAO;AACL,WAAO,kBAAkB,QAAQ,EAAE;AAAA,EACrC;AACF;AAQA,oBAAoB,QAAQ,IAAI;AAC9B,MAAI,GAAG,QAAQ,MAAM,IAAI,IAAI;AAC3B,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AACF;AAQA,2BAA2B,SAAS,IAAI;AACtC,QAAM,SAAS,CAAC;AAChB,WAAS,UAAU,SAAS;AAC1B,WAAO,UAAU,WAAW,QAAQ,EAAE;AAAA,EACxC;AACA,SAAO;AACT;AAEA,OAAO,UAAU;AAAA,EACf;AAAA,EACA;AAAA,EACA;AACF;",
6
+ "names": []
7
+ }
@@ -37,36 +37,7 @@ async function loadJSON(jsonPath) {
37
37
  const jsonBuffer = jsonPath.endsWith(".gz") ? await getGzippedFileAsJson(jsonPath) : await readFile(jsonPath);
38
38
  return JSON.parse(jsonBuffer);
39
39
  }
40
- async function check(domain, db) {
41
- if (typeof domain === "string") {
42
- return checkInJSON(domain, db);
43
- } else {
44
- return checkDomainsInJSON(domain, db);
45
- }
46
- }
47
- function checkInJSON(domain, db) {
48
- if (db.indexOf(domain) > -1) {
49
- return true;
50
- }
51
- return false;
52
- }
53
- function greenDomainsFromResults(greenResults) {
54
- const entries = Object.entries(greenResults);
55
- const greenEntries = entries.filter(([key, val]) => val.green);
56
- return greenEntries.map(([key, val]) => val.url);
57
- }
58
- function checkDomainsInJSON(domains, db) {
59
- let greenDomains = [];
60
- for (let domain of domains) {
61
- if (db.indexOf(domain) > -1) {
62
- greenDomains.push(domain);
63
- }
64
- }
65
- return greenDomains;
66
- }
67
40
  module.exports = {
68
- check,
69
- loadJSON,
70
- greenDomainsFromResults
41
+ loadJSON
71
42
  };
72
43
  //# sourceMappingURL=hosting-json.node.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hosting-json.node.js"],
4
- "sourcesContent": ["\"use strict\";\n\nimport fs from \"fs\";\nimport zlib from \"zlib\";\nimport { promisify } from \"util\";\n\nconst readFile = promisify(fs.readFile);\nconst gunzip = promisify(zlib.gunzip);\n\n/**\n * Converts a readable stream to a string.\n * @param {ReadableStream} stream - The readable stream to convert.\n * @returns {Promise<string>} A promise that resolves to the string representation of the stream.\n */\nasync function streamToString(stream) {\n return new Promise((resolve, reject) => {\n const chunks = [];\n stream.on(\"error\", reject);\n stream.on(\"data\", (chunk) => chunks.push(chunk));\n stream.on(\"end\", () => resolve(Buffer.concat(chunks)));\n });\n}\n\n/**\n * Get the contents of a gzipped file as a JSON string.\n * @param {string} jsonPath - The path to the gzipped JSON file.\n * @returns {Promise<string>} A promise that resolves to the JSON string.\n */\nasync function getGzippedFileAsJson(jsonPath) {\n const readStream = fs.createReadStream(jsonPath);\n const text = await streamToString(readStream);\n const unzipped = await gunzip(text);\n return unzipped.toString();\n}\n\n/**\n * Loads JSON data from a file path.\n * @param {string} jsonPath - The path to the JSON file.\n * @returns {Promise<object>} A promise that resolves to the parsed JSON object.\n */\nasync function loadJSON(jsonPath) {\n const jsonBuffer = jsonPath.endsWith(\".gz\")\n ? await getGzippedFileAsJson(jsonPath)\n : await readFile(jsonPath);\n return JSON.parse(jsonBuffer);\n}\n\n/**\n * Check if a string or array of domains has been provided\n * @param {string|array} domain - The domain to check, or an array of domains to be checked.\n */\nasync function check(domain, db) {\n // is it a single domain or an array of them?\n if (typeof domain === \"string\") {\n return checkInJSON(domain, db);\n } else {\n return checkDomainsInJSON(domain, db);\n }\n}\n\n/**\n * Check if a domain is hosted by a green web host by querying the database.\n * @param {string} domain - The domain to check.\n * @param {object} db - The database to check against.\n * @returns {boolean} - A boolean indicating whether the domain is hosted by a green web host.\n */\nfunction checkInJSON(domain, db) {\n if (db.indexOf(domain) > -1) {\n return true;\n }\n return false;\n}\n\n/**\n * Extract the green domains from the results of a green check.\n * @param {object} greenResults - The results of a green check.\n * @returns {array} - An array of domains that are hosted by a green web host.\n */\nfunction greenDomainsFromResults(greenResults) {\n const entries = Object.entries(greenResults);\n const greenEntries = entries.filter(([key, val]) => val.green);\n\n return greenEntries.map(([key, val]) => val.url);\n}\n\n/**\n * Check if an array of domains is hosted by a green web host by querying the database.\n * @param {array} domains - An array of domains to check.\n * @param {object} db - The database to check against.\n * @returns {array} - An array of domains that are hosted by a green web host.\n */\nfunction checkDomainsInJSON(domains, db) {\n let greenDomains = [];\n\n for (let domain of domains) {\n if (db.indexOf(domain) > -1) {\n greenDomains.push(domain);\n }\n }\n return greenDomains;\n}\n\nmodule.exports = {\n check,\n loadJSON,\n greenDomainsFromResults,\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;AAEA,gBAAe;AACf,kBAAiB;AACjB,kBAA0B;AAE1B,MAAM,WAAW,2BAAU,kBAAG,QAAQ;AACtC,MAAM,SAAS,2BAAU,oBAAK,MAAM;AAOpC,8BAA8B,QAAQ;AACpC,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAS,CAAC;AAChB,WAAO,GAAG,SAAS,MAAM;AACzB,WAAO,GAAG,QAAQ,CAAC,UAAU,OAAO,KAAK,KAAK,CAAC;AAC/C,WAAO,GAAG,OAAO,MAAM,QAAQ,OAAO,OAAO,MAAM,CAAC,CAAC;AAAA,EACvD,CAAC;AACH;AAOA,oCAAoC,UAAU;AAC5C,QAAM,aAAa,kBAAG,iBAAiB,QAAQ;AAC/C,QAAM,OAAO,MAAM,eAAe,UAAU;AAC5C,QAAM,WAAW,MAAM,OAAO,IAAI;AAClC,SAAO,SAAS,SAAS;AAC3B;AAOA,wBAAwB,UAAU;AAChC,QAAM,aAAa,SAAS,SAAS,KAAK,IACtC,MAAM,qBAAqB,QAAQ,IACnC,MAAM,SAAS,QAAQ;AAC3B,SAAO,KAAK,MAAM,UAAU;AAC9B;AAMA,qBAAqB,QAAQ,IAAI;AAE/B,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,YAAY,QAAQ,EAAE;AAAA,EAC/B,OAAO;AACL,WAAO,mBAAmB,QAAQ,EAAE;AAAA,EACtC;AACF;AAQA,qBAAqB,QAAQ,IAAI;AAC/B,MAAI,GAAG,QAAQ,MAAM,IAAI,IAAI;AAC3B,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAOA,iCAAiC,cAAc;AAC7C,QAAM,UAAU,OAAO,QAAQ,YAAY;AAC3C,QAAM,eAAe,QAAQ,OAAO,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK;AAE7D,SAAO,aAAa,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,GAAG;AACjD;AAQA,4BAA4B,SAAS,IAAI;AACvC,MAAI,eAAe,CAAC;AAEpB,WAAS,UAAU,SAAS;AAC1B,QAAI,GAAG,QAAQ,MAAM,IAAI,IAAI;AAC3B,mBAAa,KAAK,MAAM;AAAA,IAC1B;AAAA,EACF;AACA,SAAO;AACT;AAEA,OAAO,UAAU;AAAA,EACf;AAAA,EACA;AAAA,EACA;AACF;",
4
+ "sourcesContent": ["\"use strict\";\n\nimport fs from \"fs\";\nimport zlib from \"zlib\";\nimport { promisify } from \"util\";\n\nconst readFile = promisify(fs.readFile);\nconst gunzip = promisify(zlib.gunzip);\n\n/**\n * Converts a readable stream to a string.\n * @param {ReadableStream} stream - The readable stream to convert.\n * @returns {Promise<string>} A promise that resolves to the string representation of the stream.\n */\nasync function streamToString(stream) {\n return new Promise((resolve, reject) => {\n const chunks = [];\n stream.on(\"error\", reject);\n stream.on(\"data\", (chunk) => chunks.push(chunk));\n stream.on(\"end\", () => resolve(Buffer.concat(chunks)));\n });\n}\n\n/**\n * Get the contents of a gzipped file as a JSON string.\n * @param {string} jsonPath - The path to the gzipped JSON file.\n * @returns {Promise<string>} A promise that resolves to the JSON string.\n */\nasync function getGzippedFileAsJson(jsonPath) {\n const readStream = fs.createReadStream(jsonPath);\n const text = await streamToString(readStream);\n const unzipped = await gunzip(text);\n return unzipped.toString();\n}\n\n/**\n * Loads JSON data from a file path.\n * @param {string} jsonPath - The path to the JSON file.\n * @returns {Promise<object>} A promise that resolves to the parsed JSON object.\n */\nasync function loadJSON(jsonPath) {\n const jsonBuffer = jsonPath.endsWith(\".gz\")\n ? await getGzippedFileAsJson(jsonPath)\n : await readFile(jsonPath);\n return JSON.parse(jsonBuffer);\n}\n\nmodule.exports = {\n loadJSON,\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;AAEA,gBAAe;AACf,kBAAiB;AACjB,kBAA0B;AAE1B,MAAM,WAAW,2BAAU,kBAAG,QAAQ;AACtC,MAAM,SAAS,2BAAU,oBAAK,MAAM;AAOpC,8BAA8B,QAAQ;AACpC,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAS,CAAC;AAChB,WAAO,GAAG,SAAS,MAAM;AACzB,WAAO,GAAG,QAAQ,CAAC,UAAU,OAAO,KAAK,KAAK,CAAC;AAC/C,WAAO,GAAG,OAAO,MAAM,QAAQ,OAAO,OAAO,MAAM,CAAC,CAAC;AAAA,EACvD,CAAC;AACH;AAOA,oCAAoC,UAAU;AAC5C,QAAM,aAAa,kBAAG,iBAAiB,QAAQ;AAC/C,QAAM,OAAO,MAAM,eAAe,UAAU;AAC5C,QAAM,WAAW,MAAM,OAAO,IAAI;AAClC,SAAO,SAAS,SAAS;AAC3B;AAOA,wBAAwB,UAAU;AAChC,QAAM,aAAa,SAAS,SAAS,KAAK,IACtC,MAAM,qBAAqB,QAAQ,IACnC,MAAM,SAAS,QAAQ;AAC3B,SAAO,KAAK,MAAM,UAAU;AAC9B;AAEA,OAAO,UAAU;AAAA,EACf;AACF;",
6
6
  "names": []
7
7
  }
@@ -24,6 +24,7 @@ __export(hosting_node_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(hosting_node_exports);
26
26
  var import_https = __toESM(require("https"));
27
+ var import_hosting_json = __toESM(require("./hosting-json.js"));
27
28
  var import_hosting_json_node = __toESM(require("./hosting-json.node.js"));
28
29
  var import_helpers = require("./helpers/index.js");
29
30
  async function getBody(url, userAgentIdentifier) {
@@ -41,36 +42,44 @@ async function getBody(url, userAgentIdentifier) {
41
42
  req.end();
42
43
  });
43
44
  }
44
- function check(domain, db, userAgentIdentifier) {
45
+ function check(domain, optionsOrDb, userAgentIdentifier) {
46
+ let db, options = {};
47
+ if (!db && Array.isArray(optionsOrDb)) {
48
+ db = optionsOrDb;
49
+ } else {
50
+ options = optionsOrDb;
51
+ if (userAgentIdentifier) {
52
+ options = { ...options, userAgentIdentifier };
53
+ }
54
+ db = optionsOrDb == null ? void 0 : optionsOrDb.db;
55
+ }
56
+ if (db && (options == null ? void 0 : options.verbose)) {
57
+ throw new Error("verbose mode cannot be used with a local lookup database");
58
+ }
45
59
  if (db) {
46
- return import_hosting_json_node.default.check(domain, db);
60
+ return import_hosting_json.default.check(domain, db);
47
61
  }
48
62
  if (typeof domain === "string") {
49
- return checkAgainstAPI(domain, userAgentIdentifier);
63
+ return checkAgainstAPI(domain, options);
50
64
  } else {
51
- return checkDomainsAgainstAPI(domain, userAgentIdentifier);
65
+ return checkDomainsAgainstAPI(domain, options);
52
66
  }
53
67
  }
54
- async function checkAgainstAPI(domain, userAgentIdentifier) {
55
- const res = JSON.parse(await getBody(`https://api.thegreenwebfoundation.org/greencheck/${domain}`, userAgentIdentifier));
56
- return res.green;
68
+ async function checkAgainstAPI(domain, options = {}) {
69
+ const res = JSON.parse(await getBody(`https://api.thegreenwebfoundation.org/greencheck/${domain}`, options.userAgentIdentifier));
70
+ return options.verbose ? res : res.green;
57
71
  }
58
- async function checkDomainsAgainstAPI(domains, userAgentIdentifier) {
72
+ async function checkDomainsAgainstAPI(domains, options = {}) {
59
73
  try {
60
- const allGreenCheckResults = JSON.parse(await getBody(`https://api.thegreenwebfoundation.org/v2/greencheckmulti/${JSON.stringify(domains)}`, userAgentIdentifier));
61
- return import_hosting_json_node.default.greenDomainsFromResults(allGreenCheckResults);
74
+ const allGreenCheckResults = JSON.parse(await getBody(`https://api.thegreenwebfoundation.org/v2/greencheckmulti/${JSON.stringify(domains)}`, options.userAgentIdentifier));
75
+ return options.verbose ? allGreenCheckResults : import_hosting_json.default.greenDomainsFromResults(allGreenCheckResults);
62
76
  } catch (e) {
63
- return [];
77
+ return options.verbose ? {} : [];
64
78
  }
65
79
  }
66
- async function checkPage(pageXray, db) {
67
- const domains = Object.keys(pageXray.domains);
68
- return check(domains, db);
69
- }
70
80
  var hosting_node_default = {
71
81
  check,
72
- checkPage,
73
- greendomains: import_hosting_json_node.default.greenDomainsFromResults,
82
+ greendomains: import_hosting_json.default.greenDomainsFromResults,
74
83
  loadJSON: import_hosting_json_node.default.loadJSON
75
84
  };
76
85
  //# sourceMappingURL=hosting-node.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hosting-node.js"],
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 hostingJSON from \"./hosting-json.node.js\";\nimport { getApiRequestHeaders } from \"./helpers/index.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 * @param {string} userAgentIdentifier - Optional. The app, site, or organisation that is making the request.\n * @return {string}\n */\nasync function getBody(url, userAgentIdentifier) {\n return new Promise(function (resolve, reject) {\n // Do async job\n const req = https.get(\n url,\n { headers: getApiRequestHeaders(userAgentIdentifier) },\n function (res) {\n if (res.statusCode < 200 || res.statusCode >= 300) {\n return reject(\n new Error(\n `Could not get info from: ${url}. Status Code: ${res.statusCode}`\n )\n );\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 );\n req.end();\n });\n}\n\n/**\n * Check if a domain is hosted by a green web host.\n * @param {string|array} domain - The domain to check, or an array of domains to be checked.\n * @param {object} db - Optional. A database object to use for lookups.\n * @param {string} userAgentIdentifier - Optional. The app, site, or organisation that is making the request.\n * @returns {boolean|array} - A boolean if a string was provided, or an array of booleans if an array of domains was provided.\n */\n\nfunction check(domain, db, userAgentIdentifier) {\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, userAgentIdentifier);\n } else {\n return checkDomainsAgainstAPI(domain, userAgentIdentifier);\n }\n}\n\n/**\n * Check if a domain is hosted by a green web host by querying the Green Web Foundation API.\n * @param {string} domain - The domain to check.\n * @param {string} userAgentIdentifier - Optional. The app, site, or organisation that is making the request.\n * @returns {boolean} - A boolean indicating whether the domain is hosted by a green web host.\n */\nasync function checkAgainstAPI(domain, userAgentIdentifier) {\n const res = JSON.parse(\n await getBody(\n `https://api.thegreenwebfoundation.org/greencheck/${domain}`,\n userAgentIdentifier\n )\n );\n return res.green;\n}\n\n/**\n * Check if an array of domains is hosted by a green web host by querying the Green Web Foundation API.\n * @param {array} domains - An array of domains to check.\n * @param {string} userAgentIdentifier - Optional. The app, site, or organisation that is making the request.\n * @returns {array} - An array of domains that are hosted by a green web host.\n */\nasync function checkDomainsAgainstAPI(domains, userAgentIdentifier) {\n try {\n const allGreenCheckResults = JSON.parse(\n await getBody(\n `https://api.thegreenwebfoundation.org/v2/greencheckmulti/${JSON.stringify(\n domains\n )}`,\n userAgentIdentifier\n )\n );\n return hostingJSON.greenDomainsFromResults(allGreenCheckResults);\n } catch (e) {\n return [];\n }\n}\n\n/**\n * Take the result of a pageXray and check the domains in it against the database.\n * @param {object} pageXray - The result of a pageXray.\n * @param {object} db - A database object to use for lookups.\n * @returns {array} - An array indicating whether the domain is hosted by a green web host.\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,+BAAwB;AACxB,qBAAqC;AAUrC,uBAAuB,KAAK,qBAAqB;AAC/C,SAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAE5C,UAAM,MAAM,qBAAM,IAChB,KACA,EAAE,SAAS,yCAAqB,mBAAmB,EAAE,GACrD,SAAU,KAAK;AACb,UAAI,IAAI,aAAa,OAAO,IAAI,cAAc,KAAK;AACjD,eAAO,OACL,IAAI,MACF,4BAA4B,qBAAqB,IAAI,YACvD,CACF;AAAA,MACF;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,CACF;AACA,QAAI,IAAI;AAAA,EACV,CAAC;AACH;AAUA,eAAe,QAAQ,IAAI,qBAAqB;AAC9C,MAAI,IAAI;AACN,WAAO,iCAAY,MAAM,QAAQ,EAAE;AAAA,EACrC;AAGA,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,gBAAgB,QAAQ,mBAAmB;AAAA,EACpD,OAAO;AACL,WAAO,uBAAuB,QAAQ,mBAAmB;AAAA,EAC3D;AACF;AAQA,+BAA+B,QAAQ,qBAAqB;AAC1D,QAAM,MAAM,KAAK,MACf,MAAM,QACJ,oDAAoD,UACpD,mBACF,CACF;AACA,SAAO,IAAI;AACb;AAQA,sCAAsC,SAAS,qBAAqB;AAClE,MAAI;AACF,UAAM,uBAAuB,KAAK,MAChC,MAAM,QACJ,4DAA4D,KAAK,UAC/D,OACF,KACA,mBACF,CACF;AACA,WAAO,iCAAY,wBAAwB,oBAAoB;AAAA,EACjE,SAAS,GAAP;AACA,WAAO,CAAC;AAAA,EACV;AACF;AAQA,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;",
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 hostingJSON from \"./hosting-json.js\";\nimport hostingJSONNode from \"./hosting-json.node.js\";\nimport { getApiRequestHeaders } from \"./helpers/index.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 * @param {string} userAgentIdentifier - Optional. The app, site, or organisation that is making the request.\n * @return {string}\n */\nasync function getBody(url, userAgentIdentifier) {\n return new Promise(function (resolve, reject) {\n // Do async job\n const req = https.get(\n url,\n { headers: getApiRequestHeaders(userAgentIdentifier) },\n function (res) {\n if (res.statusCode < 200 || res.statusCode >= 300) {\n return reject(\n new Error(\n `Could not get info from: ${url}. Status Code: ${res.statusCode}`\n )\n );\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 );\n req.end();\n });\n}\n\n/**\n * Check if a domain is hosted by a green web host.\n * @param {string|array} domain - The domain to check, or an array of domains to be checked.\n * @param {string[] | DomainCheckOptions} optionsOrDb - Optional. An object of domain check options, or a database list to use for lookups.\n * @param {string } userAgentIdentifier - Optional. The app, site, or organisation that is making the request.\n * @returns - A boolean if a string was provided, or an array of booleans if an array of domains was provided.\n * if a string was provided for `domain`: a boolean indicating whether the domain is hosted by a green web host if `options.verbose` is false,\n * otherwise an object representing the domain host information.\n * if an array was provided for `domain`: an array of domains that are hosted by a green web host if `options.verbose` is false,\n * otherwise a dictionary of domain to host information.\n */\n\nfunction check(domain, optionsOrDb, userAgentIdentifier) {\n let db,\n options = {};\n if (!db && Array.isArray(optionsOrDb)) {\n db = optionsOrDb;\n } else {\n options = optionsOrDb;\n if (userAgentIdentifier) {\n options = { ...options, userAgentIdentifier };\n }\n db = optionsOrDb?.db;\n }\n\n if (db && options?.verbose) {\n throw new Error(\"verbose mode cannot be used with a local lookup database\");\n }\n if (db) {\n return hostingJSON.check(domain, db);\n }\n // is it a single domain or an array of them?\n if (typeof domain === \"string\") {\n return checkAgainstAPI(domain, options);\n } else {\n return checkDomainsAgainstAPI(domain, options);\n }\n}\n\n/**\n * Check if a domain is hosted by a green web host by querying the Green Web Foundation API.\n * @param {string} domain - The domain to check.\n * @param {DomainCheckOptions} options\n * @returns {boolean} - A boolean indicating whether the domain is hosted by a green web host if `options.verbose` is false,\n * otherwise an object representing the domain host information.\n */\nasync function checkAgainstAPI(domain, options = {}) {\n const res = JSON.parse(\n await getBody(\n `https://api.thegreenwebfoundation.org/greencheck/${domain}`,\n options.userAgentIdentifier\n )\n );\n return options.verbose ? res : res.green;\n}\n\n/**\n * Check if an array of domains is hosted by a green web host by querying the Green Web Foundation API.\n * @param {array} domains - An array of domains to check.\n * @param {DomainCheckOptions} options\n * @returns {array} - An array of domains that are hosted by a green web host if `options.verbose` is false,\n * otherwise a dictionary of domain to host information.\n */\nasync function checkDomainsAgainstAPI(domains, options = {}) {\n try {\n const allGreenCheckResults = JSON.parse(\n await getBody(\n `https://api.thegreenwebfoundation.org/v2/greencheckmulti/${JSON.stringify(\n domains\n )}`,\n options.userAgentIdentifier\n )\n );\n return options.verbose\n ? allGreenCheckResults\n : hostingJSON.greenDomainsFromResults(allGreenCheckResults);\n } catch (e) {\n return options.verbose ? {} : [];\n }\n}\n\nexport default {\n check,\n greendomains: hostingJSON.greenDomainsFromResults,\n loadJSON: hostingJSONNode.loadJSON,\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,mBAAkB;AAElB,0BAAwB;AACxB,+BAA4B;AAC5B,qBAAqC;AAUrC,uBAAuB,KAAK,qBAAqB;AAC/C,SAAO,IAAI,QAAQ,SAAU,SAAS,QAAQ;AAE5C,UAAM,MAAM,qBAAM,IAChB,KACA,EAAE,SAAS,yCAAqB,mBAAmB,EAAE,GACrD,SAAU,KAAK;AACb,UAAI,IAAI,aAAa,OAAO,IAAI,cAAc,KAAK;AACjD,eAAO,OACL,IAAI,MACF,4BAA4B,qBAAqB,IAAI,YACvD,CACF;AAAA,MACF;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,CACF;AACA,QAAI,IAAI;AAAA,EACV,CAAC;AACH;AAcA,eAAe,QAAQ,aAAa,qBAAqB;AACvD,MAAI,IACF,UAAU,CAAC;AACb,MAAI,CAAC,MAAM,MAAM,QAAQ,WAAW,GAAG;AACrC,SAAK;AAAA,EACP,OAAO;AACL,cAAU;AACV,QAAI,qBAAqB;AACvB,gBAAU,EAAE,GAAG,SAAS,oBAAoB;AAAA,IAC9C;AACA,SAAK,2CAAa;AAAA,EACpB;AAEA,MAAI,MAAM,oCAAS,UAAS;AAC1B,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AACA,MAAI,IAAI;AACN,WAAO,4BAAY,MAAM,QAAQ,EAAE;AAAA,EACrC;AAEA,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,gBAAgB,QAAQ,OAAO;AAAA,EACxC,OAAO;AACL,WAAO,uBAAuB,QAAQ,OAAO;AAAA,EAC/C;AACF;AASA,+BAA+B,QAAQ,UAAU,CAAC,GAAG;AACnD,QAAM,MAAM,KAAK,MACf,MAAM,QACJ,oDAAoD,UACpD,QAAQ,mBACV,CACF;AACA,SAAO,QAAQ,UAAU,MAAM,IAAI;AACrC;AASA,sCAAsC,SAAS,UAAU,CAAC,GAAG;AAC3D,MAAI;AACF,UAAM,uBAAuB,KAAK,MAChC,MAAM,QACJ,4DAA4D,KAAK,UAC/D,OACF,KACA,QAAQ,mBACV,CACF;AACA,WAAO,QAAQ,UACX,uBACA,4BAAY,wBAAwB,oBAAoB;AAAA,EAC9D,SAAS,GAAP;AACA,WAAO,QAAQ,UAAU,CAAC,IAAI,CAAC;AAAA,EACjC;AACF;AAEA,IAAO,uBAAQ;AAAA,EACb;AAAA,EACA,cAAc,4BAAY;AAAA,EAC1B,UAAU,iCAAgB;AAC5B;",
6
6
  "names": []
7
7
  }
@@ -25,8 +25,8 @@ __export(hosting_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(hosting_exports);
27
27
  var import_hosting_api = __toESM(require("./hosting-api.js"));
28
- function check(domain, userAgentIdentifier) {
29
- return import_hosting_api.default.check(domain, userAgentIdentifier);
28
+ function check(domain, optionsOrAgentId) {
29
+ return import_hosting_api.default.check(domain, optionsOrAgentId);
30
30
  }
31
31
  var hosting_default = {
32
32
  check
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/hosting.js"],
4
- "sourcesContent": ["\"use strict\";\n\nimport hostingAPI from \"./hosting-api.js\";\n\n/**\n * Check if a domain is hosted by a green web host.\n * @param {string|array} domain - The domain to check, or an array of domains to be checked.\n * @param {string} userAgentIdentifier - Optional. The app, site, or organisation that is making the request.\n * @returns {boolean|array} - A boolean if a string was provided, or an array of booleans if an array of domains was provided.\n */\nfunction check(domain, userAgentIdentifier) {\n return hostingAPI.check(domain, userAgentIdentifier);\n}\n\nexport default {\n check,\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,yBAAuB;AAQvB,eAAe,QAAQ,qBAAqB;AAC1C,SAAO,2BAAW,MAAM,QAAQ,mBAAmB;AACrD;AAEA,IAAO,kBAAQ;AAAA,EACb;AACF;",
4
+ "sourcesContent": ["\"use strict\";\n\nimport hostingAPI from \"./hosting-api.js\";\n\n/**\n * Check if a domain is hosted by a green web host.\n * @param {string|array} domain - The domain to check, or an array of domains to be checked.\n * @param {string} optionsOrAgentId - Optional. An object of domain check options, or a string\n * representing the app, site, or organisation that is making the request.\n * @returns - A boolean if a string was provided, or an array of booleans if an array of domains was provided.\n * if a string was provided for `domain`: a boolean indicating whether the domain is hosted by a green web host if `options.verbose` is false,\n * otherwise an object representing the domain host information.\n * if an array was provided for `domain`: an array of domains that are hosted by a green web host if `options.verbose` is false,\n * otherwise a dictionary of domain to host information.\n */\nfunction check(domain, optionsOrAgentId) {\n return hostingAPI.check(domain, optionsOrAgentId);\n}\n\nexport default {\n check,\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,yBAAuB;AAavB,eAAe,QAAQ,kBAAkB;AACvC,SAAO,2BAAW,MAAM,QAAQ,gBAAgB;AAClD;AAEA,IAAO,kBAAQ;AAAA,EACb;AACF;",
6
6
  "names": []
7
7
  }
package/dist/esm/co2.js CHANGED
@@ -83,80 +83,6 @@ See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more ab
83
83
  See https://developers.thegreenwebfoundation.org/co2js/methods/ to learn more about the methods available in CO2.js.`);
84
84
  }
85
85
  }
86
- perDomain(pageXray, greenDomains) {
87
- const co2PerDomain = [];
88
- for (let domain of Object.keys(pageXray.domains)) {
89
- let co2;
90
- if (greenDomains && greenDomains.indexOf(domain) > -1) {
91
- co2 = this.perByte(pageXray.domains[domain].transferSize, true);
92
- } else {
93
- co2 = this.perByte(pageXray.domains[domain].transferSize);
94
- }
95
- co2PerDomain.push({
96
- domain,
97
- co2,
98
- transferSize: pageXray.domains[domain].transferSize
99
- });
100
- }
101
- co2PerDomain.sort((a, b) => b.co2 - a.co2);
102
- return co2PerDomain;
103
- }
104
- perPage(pageXray, green) {
105
- const domainCO2 = this.perDomain(pageXray, green);
106
- let totalCO2 = 0;
107
- for (let domain of domainCO2) {
108
- totalCO2 += domain.co2;
109
- }
110
- return totalCO2;
111
- }
112
- perContentType(pageXray, greenDomains) {
113
- const co2PerContentType = {};
114
- for (let asset of pageXray.assets) {
115
- const domain = new URL(asset.url).domain;
116
- const transferSize = asset.transferSize;
117
- const co2ForTransfer = this.perByte(transferSize, greenDomains && greenDomains.indexOf(domain) > -1);
118
- const contentType = asset.type;
119
- if (!co2PerContentType[contentType]) {
120
- co2PerContentType[contentType] = { co2: 0, transferSize: 0 };
121
- }
122
- co2PerContentType[contentType].co2 += co2ForTransfer;
123
- co2PerContentType[contentType].transferSize += transferSize;
124
- }
125
- const all = [];
126
- for (let type of Object.keys(co2PerContentType)) {
127
- all.push({
128
- type,
129
- co2: co2PerContentType[type].co2,
130
- transferSize: co2PerContentType[type].transferSize
131
- });
132
- }
133
- all.sort((a, b) => b.co2 - a.co2);
134
- return all;
135
- }
136
- dirtiestResources(pageXray, greenDomains) {
137
- const allAssets = [];
138
- for (let asset of pageXray.assets) {
139
- const domain = new URL(asset.url).domain;
140
- const transferSize = asset.transferSize;
141
- const co2ForTransfer = this.perByte(transferSize, greenDomains && greenDomains.indexOf(domain) > -1);
142
- allAssets.push({ url: asset.url, co2: co2ForTransfer, transferSize });
143
- }
144
- allAssets.sort((a, b) => b.co2 - a.co2);
145
- return allAssets.slice(0, allAssets.length > 10 ? 10 : allAssets.length);
146
- }
147
- perParty(pageXray, greenDomains) {
148
- let firstParty = 0;
149
- let thirdParty = 0;
150
- const firstPartyRegEx = pageXray.firstPartyRegEx;
151
- for (let d of Object.keys(pageXray.domains)) {
152
- if (!d.match(firstPartyRegEx)) {
153
- thirdParty += this.perByte(pageXray.domains[d].transferSize, greenDomains && greenDomains.indexOf(d) > -1);
154
- } else {
155
- firstParty += this.perByte(pageXray.domains[d].transferSize, greenDomains && greenDomains.indexOf(d) > -1);
156
- }
157
- }
158
- return { firstParty, thirdParty };
159
- }
160
86
  }
161
87
  var co2_default = CO2;
162
88
  export {
@@ -1,4 +1,4 @@
1
- const data = { "AFG": 120.48, "AFRICA": 590.8, "ALB": 23.44, "DZA": 672.64, "ASM": 687.5, "AGO": 212.42, "ATG": 657.14, "ARG": 399.5, "ARM": 280.06, "ABW": 591.4, "ASEAN": 569.34, "ASIA": 594.16, "AUS": 570.35, "AUT": 141.79, "AZE": 719.39, "BHS": 698.11, "BHR": 956.55, "BGD": 719.78, "BRB": 644.86, "BLR": 465.34, "BEL": 139.79, "BLZ": 484.38, "BEN": 666.67, "BTN": 24.44, "BOL": 497.78, "BIH": 670.09, "BWA": 867.58, "BRA": 114.48, "BRN": 961.54, "BGR": 476.9, "BFA": 611.43, "BDI": 250, "CPV": 600, "KHM": 436.13, "CMR": 278.26, "CAN": 163.01, "CYM": 684.93, "CAF": 0, "TCD": 677.42, "CHL": 353.52, "CHN": 585.82, "COL": 198.53, "COM": 714.29, "COG": 723.88, "COD": 25.36, "COK": 400, "CRI": 37.21, "CIV": 453.55, "HRV": 242.28, "CUB": 677.47, "CYP": 555.13, "CZE": 488.3, "DNK": 201.78, "DJI": 666.67, "DMA": 529.41, "DOM": 592.49, "ECU": 192.39, "EGY": 612.16, "SLV": 211.29, "GNQ": 492.96, "ERI": 688.89, "EST": 489.89, "SWZ": 189.19, "ETH": 25.19, "EU": 291.9, "EUROPE": 330.47, "FLK": 500, "FRO": 428.57, "FJI": 289.47, "FIN": 130.42, "FRA": 78.81, "GUF": 254.72, "PYF": 471.43, "G20": 489.9, "G7": 375.97, "GAB": 397.38, "GMB": 700, "GEO": 176.97, "DEU": 420.06, "GHA": 498.81, "GRC": 378.18, "GRL": 133.33, "GRD": 714.29, "GLP": 647.06, "GUM": 670.33, "GTM": 331.72, "GIN": 208.63, "GNB": 750, "GUY": 642.28, "HTI": 606.06, "HND": 378.97, "HKG": 733.05, "HUN": 228.75, "ISL": 28.56, "IND": 705.13, "IDN": 675.93, "IRN": 665.15, "IRQ": 708.1, "IRL": 333.23, "ISR": 641.17, "ITA": 378.45, "JAM": 588.51, "JPN": 512.81, "JOR": 572.74, "KAZ": 830.41, "KEN": 101.13, "KIR": 666.67, "XKX": 945.01, "KWT": 691.31, "KGZ": 124.48, "LAO": 284.21, "LATIN AMERICA AND CARIBBEAN": 278.58, "LVA": 136.27, "LBN": 663.1, "LSO": 20, "LBR": 304.35, "LBY": 861.69, "LTU": 177.18, "LUX": 144.07, "MAC": 627.12, "MDG": 497.61, "MWI": 133.8, "MYS": 605.83, "MDV": 651.52, "MLI": 463.13, "MLT": 500, "MTQ": 698.63, "MRT": 526.6, "MUS": 631.94, "MEX": 515.62, "MIDDLE EAST": 673.63, "MDA": 871.66, "MNG": 852.82, "MNE": 483.38, "MSR": 1e3, "MAR": 705.67, "MOZ": 150.25, "MMR": 575.77, "NAM": 70.06, "NRU": 750, "NPL": 24.51, "NLD": 324.99, "NCL": 610.12, "NZL": 117.46, "NIC": 352.05, "NER": 622.22, "NGA": 513.24, "NORTH AMERICA": 378.27, "PRK": 124.57, "MKD": 639.86, "NOR": 26.5, "OCEANIA": 509.12, "OECD": 373.31, "OMN": 598.27, "PAK": 435.89, "PSE": 511.63, "PAN": 175, "PNG": 526.75, "PRY": 25.49, "PER": 312.59, "POL": 733.18, "PRT": 225.19, "PRI": 719.85, "QAT": 642.01, "REU": 519.03, "ROU": 297.94, "RUS": 451.95, "RWA": 294.12, "KNA": 681.82, "LCA": 685.71, "SPM": 800, "VCT": 500, "WSM": 470.59, "STP": 600, "SAU": 706.79, "SEN": 685.05, "SRB": 695.69, "SYC": 615.39, "SLE": 47.62, "SGP": 505.22, "SVK": 142.59, "SVN": 257.49, "SLB": 727.27, "SOM": 634.15, "ZAF": 762.46, "KOR": 470.4, "SSD": 684.21, "ESP": 217.77, "LKA": 543.12, "SDN": 288.13, "SUR": 356.44, "SWE": 41.07, "CHE": 36.14, "SYR": 758.35, "TWN": 678.87, "TJK": 99.34, "TZA": 374.08, "THA": 599.02, "PHL": 641.96, "TGO": 492.06, "TON": 625, "TTO": 723.94, "TUN": 592.21, "TUR": 453.01, "TKM": 1389.72, "TCA": 703.7, "UGA": 52.27, "UKR": 271.41, "ARE": 561.14, "GBR": 255.85, "USA": 410.37, "URY": 149.49, "UZB": 1176.69, "VUT": 571.43, "VEN": 298.5, "VNM": 409.8, "VGB": 714.29, "VIR": 685.71, "WORLD": 493.92, "YEM": 613.64, "ZMB": 86.39, "ZWE": 433.38 };
1
+ const data = { "AFG": 132.53, "AFRICA": 559.42, "ALB": 24.29, "DZA": 634.61, "ASM": 611.11, "AGO": 174.73, "ATG": 611.11, "ARG": 394.62, "ARM": 264.54, "ABW": 561.22, "ASEAN": 554.5, "ASIA": 591.19, "AUS": 570.35, "AUT": 110.81, "AZE": 671.39, "BHS": 660.1, "BHR": 904.62, "BGD": 678.11, "BRB": 605.51, "BLR": 441.74, "BEL": 138.11, "BLZ": 225.81, "BEN": 584.07, "BTN": 23.33, "BOL": 489.14, "BIH": 600, "BWA": 847.91, "BRA": 105.51, "BRN": 893.91, "BGR": 335.33, "BFA": 467.53, "BDI": 250, "CPV": 558.14, "KHM": 417.71, "CMR": 305.42, "CAN": 161.43, "CYM": 642.86, "CAF": 0, "TCD": 628.57, "CHL": 353.52, "CHN": 585.82, "COL": 214.88, "COM": 642.86, "COG": 700, "COD": 24.46, "COK": 250, "CRI": 26.46, "CIV": 393.89, "HRV": 204.96, "CUB": 637.61, "CYP": 534.32, "CZE": 449.72, "DNK": 151.65, "DJI": 692.31, "DMA": 529.41, "DOM": 580.78, "ECU": 150.69, "EGY": 570.13, "SLV": 116.54, "GNQ": 591.84, "ERI": 631.58, "EST": 416.67, "SWZ": 172.41, "ETH": 24.64, "EU": 243.83, "EUROPE": 327.69, "FLK": 500, "FRO": 404.76, "FJI": 288.46, "FIN": 79.16, "FRA": 56.04, "GUF": 217.82, "PYF": 442.86, "G20": 482.92, "G7": 361.52, "GAB": 491.6, "GMB": 666.67, "GEO": 167.02, "DEU": 380.95, "GHA": 484, "GRC": 336.57, "GRL": 178.57, "GRD": 640, "GLP": 500, "GUM": 622.86, "GTM": 328.27, "GIN": 236.84, "GNB": 625, "GUY": 640.35, "HTI": 567.31, "HND": 282.27, "HKG": 699.5, "HUN": 204.19, "ISL": 27.68, "IND": 705.13, "IDN": 675.93, "IRN": 665.15, "IRQ": 688.81, "IRL": 290.81, "ISR": 582.93, "ITA": 330.72, "JAM": 555.56, "JPN": 512.81, "JOR": 540.92, "KAZ": 830.41, "KEN": 83.33, "KIR": 666.67, "XKX": 894.65, "KWT": 649.2, "KGZ": 147.29, "LAO": 265.51, "LATIN AMERICA AND CARIBBEAN": 260.28, "LVA": 123.2, "LBN": 599.01, "LSO": 20, "LBR": 227.85, "LBY": 818.69, "LTU": 160.07, "LUX": 105.26, "MAC": 448.98, "MDG": 436.44, "MWI": 66.67, "MYS": 605.83, "MDV": 611.77, "MLI": 408, "MLT": 459.14, "MTQ": 523.18, "MRT": 464.71, "MUS": 632.48, "MEX": 475.36, "MIDDLE EAST": 660.46, "MDA": 648.5, "MNG": 771.8, "MNE": 417.07, "MSR": 1e3, "MAR": 662.64, "MOZ": 135.65, "MMR": 483.57, "NAM": 59.26, "NRU": 750, "NPL": 24.44, "NLD": 267.62, "NCL": 660.58, "NZL": 110.89, "NIC": 265.12, "NER": 670.89, "NGA": 516.23, "NORTH AMERICA": 356.01, "PRK": 389.59, "MKD": 565.35, "NOR": 30.08, "OCEANIA": 507.63, "OECD": 360.53, "OMN": 564.69, "PAK": 463.66, "PSE": 516.13, "PAN": 161.68, "PNG": 507.25, "PRY": 24.31, "PER": 251.74, "POL": 661.93, "PRT": 165.55, "PRI": 678.74, "QAT": 602.59, "REU": 572.82, "ROU": 240.58, "RUS": 436.28, "RWA": 316.33, "KNA": 636.36, "LCA": 666.67, "SPM": 600, "VCT": 529.41, "WSM": 473.68, "STP": 642.86, "SAU": 706.79, "SEN": 511.6, "SRB": 636.06, "SYC": 564.52, "SLE": 50, "SGP": 474, "SVK": 116.77, "SVN": 231.28, "SLB": 700, "SOM": 578.95, "ZAF": 729.67, "KOR": 441.65, "SSD": 629.03, "ESP": 174.05, "LKA": 509.78, "SDN": 263.16, "SUR": 349.28, "SWE": 40.7, "CHE": 34.84, "SYR": 701.66, "TWN": 639.53, "TJK": 116.86, "TZA": 339.25, "THA": 560.74, "PHL": 601.1, "TGO": 443.18, "TON": 625, "TTO": 681.53, "TUN": 564.62, "TUR": 464.59, "TKM": 1306.03, "TCA": 653.85, "UGA": 44.53, "UKR": 259.69, "ARE": 561.14, "GBR": 237.59, "USA": 385.98, "URY": 112.65, "UZB": 1167.6, "VUT": 571.43, "VEN": 185.8, "VNM": 409.8, "VGB": 647.06, "VIR": 632.35, "WORLD": 485.99, "YEM": 566.1, "ZMB": 111.97, "ZWE": 297.87 };
2
2
  const type = "average";
3
3
  var average_intensities_min_default = { data, type };
4
4
  export {
@@ -142,7 +142,7 @@ Falling back to default value.`);
142
142
  return adjustments;
143
143
  }
144
144
  function getApiRequestHeaders(comment = "") {
145
- return { "User-Agent": `co2js/${"0.14.3"} ${comment}` };
145
+ return { "User-Agent": `co2js/${"0.15.0"} ${comment}` };
146
146
  }
147
147
  export {
148
148
  formatNumber,
@@ -1,30 +1,38 @@
1
1
  "use strict";
2
2
  import { getApiRequestHeaders } from "./helpers/index.js";
3
- function check(domain, userAgentIdentifier) {
3
+ import hostingJSON from "./hosting-json.js";
4
+ function check(domain, optionsOrAgentId) {
5
+ const options = typeof optionsOrAgentId === "string" ? { userAgentIdentifier: optionsOrAgentId } : optionsOrAgentId;
6
+ if ((options == null ? void 0 : options.db) && options.verbose) {
7
+ throw new Error("verbose mode cannot be used with a local lookup database");
8
+ }
4
9
  if (typeof domain === "string") {
5
- return checkAgainstAPI(domain, userAgentIdentifier);
10
+ return checkAgainstAPI(domain, options);
6
11
  } else {
7
- return checkDomainsAgainstAPI(domain, userAgentIdentifier);
12
+ return checkDomainsAgainstAPI(domain, options);
8
13
  }
9
14
  }
10
- async function checkAgainstAPI(domain, userAgentIdentifier) {
15
+ async function checkAgainstAPI(domain, options = {}) {
11
16
  const req = await fetch(`https://api.thegreenwebfoundation.org/greencheck/${domain}`, {
12
- headers: getApiRequestHeaders(userAgentIdentifier)
17
+ headers: getApiRequestHeaders(options.userAgentIdentifier)
13
18
  });
19
+ if (options == null ? void 0 : options.db) {
20
+ return hostingJSON.check(domain, options.db);
21
+ }
14
22
  const res = await req.json();
15
- return res.green;
23
+ return options.verbose ? res : res.green;
16
24
  }
17
- async function checkDomainsAgainstAPI(domains, userAgentIdentifier) {
25
+ async function checkDomainsAgainstAPI(domains, options = {}) {
18
26
  try {
19
27
  const apiPath = "https://api.thegreenwebfoundation.org/v2/greencheckmulti";
20
28
  const domainsString = JSON.stringify(domains);
21
29
  const req = await fetch(`${apiPath}/${domainsString}`, {
22
- headers: getApiRequestHeaders(userAgentIdentifier)
30
+ headers: getApiRequestHeaders(options.userAgentIdentifier)
23
31
  });
24
32
  const allGreenCheckResults = await req.json();
25
- return greenDomainsFromResults(allGreenCheckResults);
33
+ return options.verbose ? allGreenCheckResults : greenDomainsFromResults(allGreenCheckResults);
26
34
  } catch (e) {
27
- return [];
35
+ return options.verbose ? {} : [];
28
36
  }
29
37
  }
30
38
  function greenDomainsFromResults(greenResults) {
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __commonJS = (cb, mod) => function __require() {
4
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
5
+ };
6
+ var require_hosting_json = __commonJS({
7
+ "src/hosting-json.js"(exports, module) {
8
+ async function check(domain, db) {
9
+ if (typeof domain === "string") {
10
+ return checkInJSON(domain, db);
11
+ } else {
12
+ return checkDomainsInJSON(domain, db);
13
+ }
14
+ }
15
+ function checkInJSON(domain, db) {
16
+ if (db.indexOf(domain) > -1) {
17
+ return true;
18
+ }
19
+ return false;
20
+ }
21
+ function greenDomainsFromResults(greenResults) {
22
+ const entries = Object.entries(greenResults);
23
+ const greenEntries = entries.filter(([key, val]) => val.green);
24
+ return greenEntries.map(([key, val]) => val.url);
25
+ }
26
+ function checkDomainsInJSON(domains, db) {
27
+ let greenDomains = [];
28
+ for (let domain of domains) {
29
+ if (db.indexOf(domain) > -1) {
30
+ greenDomains.push(domain);
31
+ }
32
+ }
33
+ return greenDomains;
34
+ }
35
+ function find(domain, db) {
36
+ if (typeof domain === "string") {
37
+ return findInJSON(domain, db);
38
+ } else {
39
+ return findDomainsInJSON(domain, db);
40
+ }
41
+ }
42
+ function findInJSON(domain, db) {
43
+ if (db.indexOf(domain) > -1) {
44
+ return domain;
45
+ }
46
+ return {
47
+ url: domain,
48
+ green: false
49
+ };
50
+ }
51
+ function findDomainsInJSON(domains, db) {
52
+ const result = {};
53
+ for (let domain of domains) {
54
+ result[domain] = findInJSON(domain, db);
55
+ }
56
+ return result;
57
+ }
58
+ module.exports = {
59
+ check,
60
+ greenDomainsFromResults,
61
+ find
62
+ };
63
+ }
64
+ });
65
+ export default require_hosting_json();
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  import hostingAPI from "./hosting-api.js";
3
- function check(domain, userAgentIdentifier) {
4
- return hostingAPI.check(domain, userAgentIdentifier);
3
+ function check(domain, optionsOrAgentId) {
4
+ return hostingAPI.check(domain, optionsOrAgentId);
5
5
  }
6
6
  var hosting_default = {
7
7
  check
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tgwf/co2",
3
- "version": "0.14.3",
3
+ "version": "0.15.0",
4
4
  "description": "Work out the co2 of your digital services",
5
5
  "main": "dist/cjs/index-node.js",
6
6
  "module": "dist/esm/index.js",
@@ -56,7 +56,6 @@
56
56
  "jest": "^28.1.0",
57
57
  "nock": "^13.2.4",
58
58
  "np": "^8.0.4",
59
- "pagexray": "^4.4.2",
60
59
  "prettier": "^2.6.2"
61
60
  },
62
61
  "jest": {