@emilecalixte/ffa-categories
Version:
Package utilitaire permettant de manipuler les catégories de la Fédération Française d'Athlétisme
277 lines (271 loc) • 7.82 kB
JavaScript
// src/utils/objectUtils.ts
function excludeKeys(object, keys) {
const result = { ...object };
for (const key of keys) {
delete result[key];
}
return result;
}
function objectKeys(object) {
return Object.keys(object);
}
// src/constants/categories.ts
var CATEGORIES_2015_AND_BEFORE = {
EA: "\xC9cole d'Athl\xE9tisme",
PO: "Poussins",
BE: "Benjamins",
MI: "Minimes",
CA: "Cadets",
JU: "Juniors",
ES: "Espoirs",
SE: "Seniors",
VE: "V\xE9t\xE9rans"
};
var CATEGORIES_2015_AND_BEFORE_MIN_AGE = {
EA: 0,
PO: 10,
BE: 12,
MI: 14,
CA: 16,
JU: 18,
ES: 20,
SE: 23,
VE: 40
};
var DETAILED_CATEGORIES_2015_AND_BEFORE = {
...excludeKeys(CATEGORIES_2015_AND_BEFORE, ["VE"]),
V1: "V\xE9t\xE9rans 1",
V2: "V\xE9t\xE9rans 2",
V3: "V\xE9t\xE9rans 3",
V4: "V\xE9t\xE9rans 4"
};
var DETAILED_CATEGORIES_2015_AND_BEFORE_MIN_AGE = {
...excludeKeys(CATEGORIES_2015_AND_BEFORE_MIN_AGE, ["VE"]),
V1: 40,
V2: 50,
V3: 60,
V4: 70
};
var CATEGORIES_2016_TO_2019 = {
BB: "Baby Athl\xE9",
...CATEGORIES_2015_AND_BEFORE,
VE: "Masters"
};
var CATEGORIES_2016_TO_2019_MIN_AGE = {
BB: 0,
...excludeKeys(CATEGORIES_2015_AND_BEFORE_MIN_AGE, ["EA"]),
EA: 7
};
var DETAILED_CATEGORIES_2016_TO_2019 = {
...excludeKeys(CATEGORIES_2016_TO_2019, ["VE"]),
V1: "Masters 1",
V2: "Masters 2",
V3: "Masters 3",
V4: "Masters 4",
V5: "Masters 5"
};
var DETAILED_CATEGORIES_2016_TO_2019_MIN_AGE = {
...excludeKeys(CATEGORIES_2016_TO_2019_MIN_AGE, ["VE"]),
V1: 40,
V2: 50,
V3: 60,
V4: 70,
V5: 80
};
var CATEGORIES_2020_TO_2022 = CATEGORIES_2016_TO_2019;
var CATEGORIES_2020_TO_2022_MIN_AGE = {
...excludeKeys(CATEGORIES_2016_TO_2019_MIN_AGE, ["VE"]),
VE: 35
};
var DETAILED_MASTERS_CATEGORIES_2020_AND_AFTER = {
M0: "Masters 0",
M1: "Masters 1",
M2: "Masters 2",
M3: "Masters 3",
M4: "Masters 4",
M5: "Masters 5",
M6: "Masters 6",
M7: "Masters 7",
M8: "Masters 8",
M9: "Masters 9",
M10: "Masters 10"
};
var DETAILED_CATEGORIES_2020_TO_2022 = {
...excludeKeys(CATEGORIES_2020_TO_2022, ["VE"]),
...DETAILED_MASTERS_CATEGORIES_2020_AND_AFTER
};
var DETAILED_CATEGORIES_2020_TO_2022_MIN_AGE = {
...excludeKeys(CATEGORIES_2020_TO_2022_MIN_AGE, ["VE"]),
M0: 35,
M1: 40,
M2: 45,
M3: 50,
M4: 55,
M5: 60,
M6: 65,
M7: 70,
M8: 75,
M9: 80,
M10: 85
};
var CATEGORIES_2023_TO_2024 = {
...CATEGORIES_2020_TO_2022,
EA: "\xC9veil Athl\xE9tique"
};
var CATEGORIES_2023_TO_2024_MIN_AGE = CATEGORIES_2020_TO_2022_MIN_AGE;
var DETAILED_CATEGORIES_2023_TO_2024 = {
...excludeKeys(CATEGORIES_2023_TO_2024, ["VE"]),
...DETAILED_MASTERS_CATEGORIES_2020_AND_AFTER
};
var DETAILED_CATEGORIES_2023_TO_2024_MIN_AGE = DETAILED_CATEGORIES_2020_TO_2022_MIN_AGE;
var CATEGORIES_2025_AND_AFTER = {
...excludeKeys(CATEGORIES_2023_TO_2024, ["VE"]),
MA: "Masters"
};
var CATEGORIES_2025_AND_AFTER_MIN_AGE = {
...excludeKeys(CATEGORIES_2023_TO_2024_MIN_AGE, ["VE"]),
MA: CATEGORIES_2023_TO_2024_MIN_AGE.VE
};
var DETAILED_CATEGORIES_2025_AND_AFTER = {
...excludeKeys(CATEGORIES_2025_AND_AFTER, ["MA"]),
...DETAILED_MASTERS_CATEGORIES_2020_AND_AFTER
};
var DETAILED_CATEGORIES_2025_AND_AFTER_MIN_AGE = DETAILED_CATEGORIES_2023_TO_2024_MIN_AGE;
var ALL_CATEGORY_CODES = objectKeys({
...CATEGORIES_2015_AND_BEFORE,
...DETAILED_CATEGORIES_2015_AND_BEFORE,
...CATEGORIES_2016_TO_2019,
...DETAILED_CATEGORIES_2016_TO_2019,
...CATEGORIES_2020_TO_2022,
...DETAILED_CATEGORIES_2020_TO_2022,
...CATEGORIES_2023_TO_2024,
...DETAILED_CATEGORIES_2023_TO_2024,
...CATEGORIES_2025_AND_AFTER,
...DETAILED_CATEGORIES_2025_AND_AFTER
});
var ALL_CATEGORY_NAMES = [
...Object.values(CATEGORIES_2015_AND_BEFORE),
...Object.values(DETAILED_CATEGORIES_2015_AND_BEFORE),
...Object.values(CATEGORIES_2016_TO_2019),
...Object.values(DETAILED_CATEGORIES_2016_TO_2019),
...Object.values(CATEGORIES_2020_TO_2022),
...Object.values(DETAILED_CATEGORIES_2020_TO_2022),
...Object.values(CATEGORIES_2023_TO_2024),
...Object.values(DETAILED_CATEGORIES_2023_TO_2024),
...Object.values(CATEGORIES_2025_AND_AFTER),
...Object.values(DETAILED_CATEGORIES_2025_AND_AFTER)
];
// src/constants/dates.ts
var DATE_MONTH_SEPTEMBER = 8;
var DATE_MONTH_NOVEMBER = 10;
// src/getApplicableCategoriesYear.ts
function getApplicableCategoriesYear(date) {
const time = date.getTime();
const year = date.getFullYear();
if (time >= (/* @__PURE__ */ new Date("2022-09-01T00:00:00")).getTime()) {
return date.getMonth() >= DATE_MONTH_SEPTEMBER ? year + 1 : year;
}
if (time >= (/* @__PURE__ */ new Date("2013-11-01T00:00:00")).getTime()) {
return date.getMonth() >= DATE_MONTH_NOVEMBER ? year + 1 : year;
}
return year;
}
// src/getCategories.ts
function getCategoryLists(date) {
const time = date.getTime();
if (time >= (/* @__PURE__ */ new Date("2024-09-01T00:00:00")).getTime()) {
return [
CATEGORIES_2025_AND_AFTER,
DETAILED_CATEGORIES_2025_AND_AFTER,
CATEGORIES_2025_AND_AFTER_MIN_AGE,
DETAILED_CATEGORIES_2025_AND_AFTER_MIN_AGE
];
}
if (time >= (/* @__PURE__ */ new Date("2022-09-01T00:00:00")).getTime()) {
return [
CATEGORIES_2023_TO_2024,
DETAILED_CATEGORIES_2023_TO_2024,
CATEGORIES_2023_TO_2024_MIN_AGE,
DETAILED_CATEGORIES_2023_TO_2024_MIN_AGE
];
}
if (time >= (/* @__PURE__ */ new Date("2019-11-01T00:00:00")).getTime()) {
return [
CATEGORIES_2020_TO_2022,
DETAILED_CATEGORIES_2020_TO_2022,
CATEGORIES_2020_TO_2022_MIN_AGE,
DETAILED_CATEGORIES_2020_TO_2022_MIN_AGE
];
}
if (time >= (/* @__PURE__ */ new Date("2015-11-01T00:00:00")).getTime()) {
return [
CATEGORIES_2016_TO_2019,
DETAILED_CATEGORIES_2016_TO_2019,
CATEGORIES_2016_TO_2019_MIN_AGE,
DETAILED_CATEGORIES_2016_TO_2019_MIN_AGE
];
}
return [
CATEGORIES_2015_AND_BEFORE,
DETAILED_CATEGORIES_2015_AND_BEFORE,
CATEGORIES_2015_AND_BEFORE_MIN_AGE,
DETAILED_CATEGORIES_2015_AND_BEFORE_MIN_AGE
];
}
function getCategoryList(date = /* @__PURE__ */ new Date(), detailed = true) {
return getCategoryLists(date)[detailed ? 1 : 0];
}
function getCategoryMinAges(date, detailed = true) {
return getCategoryLists(date)[detailed ? 3 : 2];
}
// src/getCategory.ts
function getCategoryDataFromCode(code, categories) {
const name = categories[code];
if (name === void 0) {
throw new Error(`No category found with code ${code}`);
}
return {
code,
name
};
}
function getCategoryFromAge(date, detailed, age) {
function rtrn(age2, categoryCode, categories2) {
if (categoryCode === null) {
throw new Error(`No category code found for age ${age2}`);
}
return getCategoryDataFromCode(categoryCode, categories2);
}
if (age < 0) {
age = 0;
}
const categories = getCategoryList(date, detailed);
const minAges = getCategoryMinAges(date, detailed);
let currentCategoryCode = null;
for (const [categoryCode, minAge] of Object.entries(minAges).sort(([, minAge1], [, minAge2]) => minAge1 - minAge2)) {
if (age < minAge) {
return rtrn(age, currentCategoryCode, categories);
}
currentCategoryCode = categoryCode;
}
return rtrn(age, currentCategoryCode, categories);
}
function getCategory(birthYear, options = {}) {
const date = options.date ?? /* @__PURE__ */ new Date();
const detailed = options.detailed ?? true;
const applicableAge = getApplicableCategoriesYear(date) - birthYear;
return getCategoryFromAge(date, detailed, applicableAge);
}
// src/isCategoryCode.ts
function isCategoryCode(value) {
return ALL_CATEGORY_CODES.includes(value);
}
export {
ALL_CATEGORY_CODES,
ALL_CATEGORY_NAMES,
getApplicableCategoriesYear,
getCategory,
getCategoryList,
isCategoryCode
};
//# sourceMappingURL=index.js.map