Skip to content

Commit 2a6369a

Browse files
authored
Separate options parsing for perByteTrace and perVisitTrace functions
2 parents 38b7849 + 4897ca2 commit 2a6369a

File tree

2 files changed

+54
-35
lines changed

2 files changed

+54
-35
lines changed

src/co2.js

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,9 @@ import SustainableWebDesignV3 from "./sustainable-web-design-v3.js";
6464
import SustainableWebDesignV4 from "./sustainable-web-design-v4.js";
6565

6666
import {
67-
GLOBAL_GRID_INTENSITY,
68-
RENEWABLES_GRID_INTENSITY,
69-
} from "./constants/index.js";
70-
import { parseOptions } from "./helpers/index.js";
67+
parseByteTraceOptions,
68+
parseVisitTraceOptions,
69+
} from "./helpers/index.js";
7170

7271
class CO2 {
7372
constructor(options) {
@@ -152,7 +151,11 @@ class CO2 {
152151
* @return {CO2EstimateTraceResultPerByte} the amount of CO2 in grammes
153152
*/
154153
perByteTrace(bytes, green = false, options = {}) {
155-
const adjustments = parseOptions(options, this.model.version, green);
154+
const adjustments = parseByteTraceOptions(
155+
options,
156+
this.model.version,
157+
green
158+
);
156159

157160
// Filter out the trace items that aren't relevant to this function.
158161
const { gridIntensity, ...traceVariables } = adjustments;
@@ -197,7 +200,11 @@ class CO2 {
197200
*/
198201
perVisitTrace(bytes, green = false, options = {}) {
199202
if (this.model?.perVisit) {
200-
const adjustments = parseOptions(options, this.model.version, green);
203+
const adjustments = parseVisitTraceOptions(
204+
options,
205+
this.model.version,
206+
green
207+
);
201208
const { gridIntensity, ...variables } = adjustments;
202209

203210
return {

src/helpers/index.js

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const formatNumber = (num) => parseFloat(num.toFixed(2));
2323

2424
const lessThanEqualTo = (num, limit) => num <= limit;
2525

26-
function parseOptions(options = {}, version = 3, green = false) {
26+
function parseByteTraceOptions(options = {}, version = 3, green = false) {
2727
const globalGridIntensity =
2828
version === 4 ? SWDM4_GLOBAL_GRID_INTENSITY : SWDM3_GLOBAL_GRID_INTENSITY;
2929
// CHeck that it is an object
@@ -88,6 +88,44 @@ function parseOptions(options = {}, version = 3, green = false) {
8888
};
8989
}
9090

91+
if (
92+
options?.greenHostingFactor ||
93+
(options.greenHostingFactor === 0 && version === 4)
94+
) {
95+
if (typeof options.greenHostingFactor === "number") {
96+
if (options.greenHostingFactor >= 0 && options.greenHostingFactor <= 1) {
97+
adjustments.greenHostingFactor = options.greenHostingFactor;
98+
} else {
99+
adjustments.greenHostingFactor = 0;
100+
console.warn(
101+
`The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}. \nFalling back to default value.`
102+
);
103+
}
104+
} else {
105+
adjustments.greenHostingFactor = 0;
106+
console.warn(
107+
`The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}. \nFalling back to default value.`
108+
);
109+
}
110+
} else if (version === 4) {
111+
adjustments.greenHostingFactor = 0;
112+
}
113+
114+
if (green) {
115+
adjustments.greenHostingFactor = 1;
116+
}
117+
118+
return adjustments;
119+
}
120+
121+
function parseVisitTraceOptions(options = {}, version = 3, green = false) {
122+
// CHeck that it is an object
123+
if (typeof options !== "object") {
124+
throw new Error("Options must be an object");
125+
}
126+
127+
const adjustments = parseByteTraceOptions(options, version, green);
128+
91129
if (options?.dataReloadRatio || options.dataReloadRatio === 0) {
92130
if (typeof options.dataReloadRatio === "number") {
93131
if (options.dataReloadRatio >= 0 && options.dataReloadRatio <= 1) {
@@ -172,33 +210,6 @@ function parseOptions(options = {}, version = 3, green = false) {
172210
);
173211
}
174212

175-
if (
176-
options?.greenHostingFactor ||
177-
(options.greenHostingFactor === 0 && version === 4)
178-
) {
179-
if (typeof options.greenHostingFactor === "number") {
180-
if (options.greenHostingFactor >= 0 && options.greenHostingFactor <= 1) {
181-
adjustments.greenHostingFactor = options.greenHostingFactor;
182-
} else {
183-
adjustments.greenHostingFactor = 0;
184-
console.warn(
185-
`The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}. \nFalling back to default value.`
186-
);
187-
}
188-
} else {
189-
adjustments.greenHostingFactor = 0;
190-
console.warn(
191-
`The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}. \nFalling back to default value.`
192-
);
193-
}
194-
} else if (version === 4) {
195-
adjustments.greenHostingFactor = 0;
196-
}
197-
198-
if (green) {
199-
adjustments.greenHostingFactor = 1;
200-
}
201-
202213
return adjustments;
203214
}
204215

@@ -256,7 +267,8 @@ function outputRating(co2e, swdmVersion) {
256267

257268
export {
258269
formatNumber,
259-
parseOptions,
270+
parseByteTraceOptions,
271+
parseVisitTraceOptions,
260272
getApiRequestHeaders,
261273
lessThanEqualTo,
262274
outputRating,

0 commit comments

Comments
 (0)