Files
open-gsio/workers/site/sdk/sdk.ts
geoffsee 33679583af init
2025-05-22 23:14:01 -04:00

63 lines
1.7 KiB
TypeScript

export class Sdk {
static getSeason(date: string): string {
const hemispheres = {
Northern: ["Winter", "Spring", "Summer", "Autumn"],
Southern: ["Summer", "Autumn", "Winter", "Spring"],
};
const d = new Date(date);
const month = d.getMonth();
const day = d.getDate();
const hemisphere = "Northern";
if (month < 2 || (month === 2 && day <= 20) || month === 11)
return hemispheres[hemisphere][0];
if (month < 5 || (month === 5 && day <= 21))
return hemispheres[hemisphere][1];
if (month < 8 || (month === 8 && day <= 22))
return hemispheres[hemisphere][2];
return hemispheres[hemisphere][3];
}
static getTimezone(timezone) {
if (timezone) {
return timezone;
}
return Intl.DateTimeFormat().resolvedOptions().timeZone;
}
static getCurrentDate() {
return new Date().toISOString();
}
static isAssetUrl(url) {
const { pathname } = new URL(url);
return pathname.startsWith("/assets/");
}
static selectEquitably({ a, b, c, d }, itemCount = 9) {
const sources = [a, b, c, d];
const result = {};
let combinedItems = [];
sources.forEach((source, index) => {
combinedItems.push(
...Object.keys(source).map((key) => ({ source: index, key })),
);
});
combinedItems = combinedItems.sort(() => Math.random() - 0.5);
let selectedCount = 0;
while (selectedCount < itemCount && combinedItems.length > 0) {
const { source, key } = combinedItems.shift();
const sourceObject = sources[source];
if (!result[key]) {
result[key] = sourceObject[key];
selectedCount++;
}
}
return result;
}
}