Skip to content

Commit 8692e57

Browse files
committed
separate options parsing for byteTrace and visitTrace functions
Signed-off-by: alexzurbonsen <alexander.zur.bonsen@tngtech.com>
1 parent 870e621 commit 8692e57

File tree

2 files changed

+44
-36
lines changed

2 files changed

+44
-36
lines changed

src/co2.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,7 @@ import OneByte from "./1byte.js";
6363
import SustainableWebDesignV3 from "./sustainable-web-design-v3.js";
6464
import SustainableWebDesignV4 from "./sustainable-web-design-v4.js";
6565

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

7268
class CO2 {
7369
constructor(options) {
@@ -152,7 +148,7 @@ class CO2 {
152148
* @return {CO2EstimateTraceResultPerByte} the amount of CO2 in grammes
153149
*/
154150
perByteTrace(bytes, green = false, options = {}) {
155-
const adjustments = parseOptions(options, this.model.version, green);
151+
const adjustments = parseByteTraceOptions(options, this.model.version, green);
156152

157153
// Filter out the trace items that aren't relevant to this function.
158154
const { gridIntensity, ...traceVariables } = adjustments;
@@ -197,7 +193,7 @@ class CO2 {
197193
*/
198194
perVisitTrace(bytes, green = false, options = {}) {
199195
if (this.model?.perVisit) {
200-
const adjustments = parseOptions(options, this.model.version, green);
196+
const adjustments = parseVisitTraceOptions(options, this.model.version, green);
201197
const { gridIntensity, ...variables } = adjustments;
202198

203199
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
@@ -131,6 +131,44 @@ function parseOptions(options = {}, version = 3, green = false) {
131131
};
132132
}
133133

134+
if (
135+
options?.greenHostingFactor ||
136+
(options.greenHostingFactor === 0 && version === 4)
137+
) {
138+
if (typeof options.greenHostingFactor === "number") {
139+
if (options.greenHostingFactor >= 0 && options.greenHostingFactor <= 1) {
140+
adjustments.greenHostingFactor = options.greenHostingFactor;
141+
} else {
142+
adjustments.greenHostingFactor = 0;
143+
console.warn(
144+
`The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}. \nFalling back to default value.`
145+
);
146+
}
147+
} else {
148+
adjustments.greenHostingFactor = 0;
149+
console.warn(
150+
`The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}. \nFalling back to default value.`
151+
);
152+
}
153+
} else if (version === 4) {
154+
adjustments.greenHostingFactor = 0;
155+
}
156+
157+
if (green) {
158+
adjustments.greenHostingFactor = 1;
159+
}
160+
161+
return adjustments;
162+
}
163+
164+
function parseVisitTraceOptions(options = {}, version = 3, green = false) {
165+
// CHeck that it is an object
166+
if (typeof options !== "object") {
167+
throw new Error("Options must be an object");
168+
}
169+
170+
const adjustments = parseByteTraceOptions(options, version, green);
171+
134172
if (options?.dataReloadRatio || options.dataReloadRatio === 0) {
135173
if (typeof options.dataReloadRatio === "number") {
136174
if (options.dataReloadRatio >= 0 && options.dataReloadRatio <= 1) {
@@ -215,33 +253,6 @@ function parseOptions(options = {}, version = 3, green = false) {
215253
);
216254
}
217255

218-
if (
219-
options?.greenHostingFactor ||
220-
(options.greenHostingFactor === 0 && version === 4)
221-
) {
222-
if (typeof options.greenHostingFactor === "number") {
223-
if (options.greenHostingFactor >= 0 && options.greenHostingFactor <= 1) {
224-
adjustments.greenHostingFactor = options.greenHostingFactor;
225-
} else {
226-
adjustments.greenHostingFactor = 0;
227-
console.warn(
228-
`The returnVisitPercentage option must be a number between 0 and 1. You passed in ${options.returnVisitPercentage}. \nFalling back to default value.`
229-
);
230-
}
231-
} else {
232-
adjustments.greenHostingFactor = 0;
233-
console.warn(
234-
`The returnVisitPercentage option must be a number. You passed in a ${typeof options.returnVisitPercentage}. \nFalling back to default value.`
235-
);
236-
}
237-
} else if (version === 4) {
238-
adjustments.greenHostingFactor = 0;
239-
}
240-
241-
if (green) {
242-
adjustments.greenHostingFactor = 1;
243-
}
244-
245256
return adjustments;
246257
}
247258

@@ -299,7 +310,8 @@ function outputRating(co2e, swdmVersion) {
299310

300311
export {
301312
formatNumber,
302-
parseOptions,
313+
parseByteTraceOptions,
314+
parseVisitTraceOptions,
303315
getApiRequestHeaders,
304316
lessThanEqualTo,
305317
outputRating,

0 commit comments

Comments
 (0)