UNPKG

@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
// 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