From ae35075ccfd6a40fa389abb22db7417c7d110a1d Mon Sep 17 00:00:00 2001 From: Mauricio Robayo Date: Mon, 20 Feb 2023 09:51:34 -0500 Subject: [PATCH] 493/options parameter with month (#494) * fix(#493): options parameter with month closes #493 * add tests * remove unused import * update docs * more tests --- .DS_Store | Bin 0 -> 6148 bytes README.md | 50 +++++- src/helpers.ts | 15 +- src/index.test.ts | 234 +++++++++++++++++----------- src/index.ts | 54 +++++-- src/utils/holidaysWithinInterval.ts | 6 +- src/utils/isHoliday.ts | 2 +- 7 files changed, 235 insertions(+), 126 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..89bb970eae20b0b84c16225a4b81ccd731ee7598 GIT binary patch literal 6148 zcmeHKK}rKb5Ue(V1U#6d$N7Rk7(zUF_5->b5piJ!@xC{ot<^mpNV14G4^jm^HQUoY zvs;JhZ2-3Y*xvvf0Bf2vK7E+O*WG5gNY8?7zDGZF<2bl?l}o>p=Poed1>OGrIR6cg z=<&+&8Bce^*muL&G1%Yq%Izz``3fh|hmH77f)tPfQa}nw0V!~%K-S0g<(XfPQa}nw z0lyy#&ABE|jpORz5G??CNq2zr=q1R-9psukHKvEKmP&4^mMw<0boxui)#RyhONYhD z+$T@A>`*LDr@urvtTxst1*E{K0^WNQ8?XPjv>*C^j}fGR6!@nK*m8Hj+w$YGw$47& wYi*%D&< = { 1976: [ { date: "1976-01-01", celebrationDate: "1976-01-01", - name: expect.objectContaining({es: "Año Nuevo"}), + name: expect.objectContaining({ es: "Año Nuevo" }), nextMonday: false, }, { date: "1976-01-06", celebrationDate: "1976-01-06", - name: expect.objectContaining({es: "Reyes Magos"}), + name: expect.objectContaining({ es: "Reyes Magos" }), nextMonday: false, }, { date: "1976-03-19", celebrationDate: "1976-03-19", - name: expect.objectContaining({es: "San José"}), + name: expect.objectContaining({ es: "San José" }), nextMonday: false, }, { date: "1976-04-15", celebrationDate: "1976-04-15", - name: expect.objectContaining({es: "Jueves Santo"}), + name: expect.objectContaining({ es: "Jueves Santo" }), nextMonday: false, }, { date: "1976-04-16", celebrationDate: "1976-04-16", - name: expect.objectContaining({es: "Viernes Santo"}), + name: expect.objectContaining({ es: "Viernes Santo" }), nextMonday: false, }, { date: "1976-05-01", celebrationDate: "1976-05-01", - name: expect.objectContaining({es: "Día del Trabajo"}), + name: expect.objectContaining({ es: "Día del Trabajo" }), nextMonday: false, }, { date: "1976-05-27", celebrationDate: "1976-05-27", - name: expect.objectContaining({es: "Ascensión del Señor"}), + name: expect.objectContaining({ es: "Ascensión del Señor" }), nextMonday: false, }, { date: "1976-06-17", celebrationDate: "1976-06-17", - name: expect.objectContaining({es: "Corpus Christi"}), + name: expect.objectContaining({ es: "Corpus Christi" }), nextMonday: false, }, { date: "1976-06-25", celebrationDate: "1976-06-25", - name: expect.objectContaining({es: "Sagrado Corazón de Jesús"}), + name: expect.objectContaining({ es: "Sagrado Corazón de Jesús" }), nextMonday: false, }, { date: "1976-06-29", celebrationDate: "1976-06-29", - name: expect.objectContaining({es: "San Pedro y San Pablo"}), + name: expect.objectContaining({ es: "San Pedro y San Pablo" }), nextMonday: false, }, { date: "1976-07-20", celebrationDate: "1976-07-20", - name: expect.objectContaining({es: "Grito de la Independencia"}), + name: expect.objectContaining({ es: "Grito de la Independencia" }), nextMonday: false, }, { date: "1976-08-07", celebrationDate: "1976-08-07", - name: expect.objectContaining({es: "Batalla de Boyacá"}), + name: expect.objectContaining({ es: "Batalla de Boyacá" }), nextMonday: false, }, { date: "1976-08-15", celebrationDate: "1976-08-15", - name: expect.objectContaining({es: "Asunción de la Virgen"}), + name: expect.objectContaining({ es: "Asunción de la Virgen" }), nextMonday: false, }, { date: "1976-10-12", celebrationDate: "1976-10-12", - name: expect.objectContaining({es: "Día de la Raza"}), + name: expect.objectContaining({ es: "Día de la Raza" }), nextMonday: false, }, { date: "1976-11-01", celebrationDate: "1976-11-01", - name: expect.objectContaining({es: "Todos los Santos"}), + name: expect.objectContaining({ es: "Todos los Santos" }), nextMonday: false, }, { date: "1976-11-11", celebrationDate: "1976-11-11", - name: expect.objectContaining({es: "Independencia de Cartagena"}), + name: expect.objectContaining({ es: "Independencia de Cartagena" }), nextMonday: false, }, { date: "1976-12-08", celebrationDate: "1976-12-08", - name: expect.objectContaining({es: "Inmaculada Concepción"}), + name: expect.objectContaining({ es: "Inmaculada Concepción" }), nextMonday: false, }, { date: "1976-12-25", celebrationDate: "1976-12-25", - name: expect.objectContaining({es: "Navidad"}), + name: expect.objectContaining({ es: "Navidad" }), nextMonday: false, }, ], @@ -117,109 +117,109 @@ const holidaysYears: Record = { { date: "1983-01-01", celebrationDate: "1983-01-01", - name: expect.objectContaining({es: "Año Nuevo"}), + name: expect.objectContaining({ es: "Año Nuevo" }), nextMonday: false, }, { date: "1983-01-06", celebrationDate: "1983-01-06", - name: expect.objectContaining({es: "Reyes Magos"}), + name: expect.objectContaining({ es: "Reyes Magos" }), nextMonday: false, }, { date: "1983-03-19", celebrationDate: "1983-03-19", - name: expect.objectContaining({es: "San José"}), + name: expect.objectContaining({ es: "San José" }), nextMonday: false, }, { date: "1983-03-31", celebrationDate: "1983-03-31", - name: expect.objectContaining({es: "Jueves Santo"}), + name: expect.objectContaining({ es: "Jueves Santo" }), nextMonday: false, }, { date: "1983-04-01", celebrationDate: "1983-04-01", - name: expect.objectContaining({es: "Viernes Santo"}), + name: expect.objectContaining({ es: "Viernes Santo" }), nextMonday: false, }, { date: "1983-05-01", celebrationDate: "1983-05-01", - name: expect.objectContaining({es: "Día del Trabajo"}), + name: expect.objectContaining({ es: "Día del Trabajo" }), nextMonday: false, }, { date: "1983-05-12", celebrationDate: "1983-05-12", - name: expect.objectContaining({es: "Ascensión del Señor"}), + name: expect.objectContaining({ es: "Ascensión del Señor" }), nextMonday: false, }, { date: "1983-06-02", celebrationDate: "1983-06-02", - name: expect.objectContaining({es: "Corpus Christi"}), + name: expect.objectContaining({ es: "Corpus Christi" }), nextMonday: false, }, { date: "1983-06-10", celebrationDate: "1983-06-10", - name: expect.objectContaining({es: "Sagrado Corazón de Jesús"}), + name: expect.objectContaining({ es: "Sagrado Corazón de Jesús" }), nextMonday: false, }, { date: "1983-06-29", celebrationDate: "1983-06-29", - name: expect.objectContaining({es: "San Pedro y San Pablo"}), + name: expect.objectContaining({ es: "San Pedro y San Pablo" }), nextMonday: false, }, { date: "1983-07-20", celebrationDate: "1983-07-20", - name: expect.objectContaining({es: "Grito de la Independencia"}), + name: expect.objectContaining({ es: "Grito de la Independencia" }), nextMonday: false, }, { date: "1983-08-07", celebrationDate: "1983-08-07", - name: expect.objectContaining({es: "Batalla de Boyacá"}), + name: expect.objectContaining({ es: "Batalla de Boyacá" }), nextMonday: false, }, { date: "1983-08-15", celebrationDate: "1983-08-15", - name: expect.objectContaining({es: "Asunción de la Virgen"}), + name: expect.objectContaining({ es: "Asunción de la Virgen" }), nextMonday: false, }, { date: "1983-10-12", celebrationDate: "1983-10-12", - name: expect.objectContaining({es: "Día de la Raza"}), + name: expect.objectContaining({ es: "Día de la Raza" }), nextMonday: false, }, { date: "1983-11-01", celebrationDate: "1983-11-01", - name: expect.objectContaining({es: "Todos los Santos"}), + name: expect.objectContaining({ es: "Todos los Santos" }), nextMonday: false, }, { date: "1983-11-11", celebrationDate: "1983-11-11", - name: expect.objectContaining({es: "Independencia de Cartagena"}), + name: expect.objectContaining({ es: "Independencia de Cartagena" }), nextMonday: false, }, { date: "1983-12-08", celebrationDate: "1983-12-08", - name: expect.objectContaining({es: "Inmaculada Concepción"}), + name: expect.objectContaining({ es: "Inmaculada Concepción" }), nextMonday: false, }, { date: "1983-12-25", celebrationDate: "1983-12-25", - name: expect.objectContaining({es: "Navidad"}), + name: expect.objectContaining({ es: "Navidad" }), nextMonday: false, }, ], @@ -227,109 +227,109 @@ const holidaysYears: Record = { { date: "2015-01-01", celebrationDate: "2015-01-01", - name: expect.objectContaining({es: "Año Nuevo"}), + name: expect.objectContaining({ es: "Año Nuevo" }), nextMonday: false, }, { date: "2015-01-06", celebrationDate: "2015-01-12", - name: expect.objectContaining({es: "Reyes Magos"}), + name: expect.objectContaining({ es: "Reyes Magos" }), nextMonday: true, }, { date: "2015-03-19", celebrationDate: "2015-03-23", - name: expect.objectContaining({es: "San José"}), + name: expect.objectContaining({ es: "San José" }), nextMonday: true, }, { date: "2015-04-02", celebrationDate: "2015-04-02", - name: expect.objectContaining({es: "Jueves Santo"}), + name: expect.objectContaining({ es: "Jueves Santo" }), nextMonday: false, }, { date: "2015-04-03", celebrationDate: "2015-04-03", - name: expect.objectContaining({es: "Viernes Santo"}), + name: expect.objectContaining({ es: "Viernes Santo" }), nextMonday: false, }, { date: "2015-05-01", celebrationDate: "2015-05-01", - name: expect.objectContaining({es: "Día del Trabajo"}), + name: expect.objectContaining({ es: "Día del Trabajo" }), nextMonday: false, }, { date: "2015-05-14", celebrationDate: "2015-05-18", - name: expect.objectContaining({es: "Ascensión del Señor"}), + name: expect.objectContaining({ es: "Ascensión del Señor" }), nextMonday: true, }, { date: "2015-06-04", celebrationDate: "2015-06-08", - name: expect.objectContaining({es: "Corpus Christi"}), + name: expect.objectContaining({ es: "Corpus Christi" }), nextMonday: true, }, { date: "2015-06-12", celebrationDate: "2015-06-15", - name: expect.objectContaining({es: "Sagrado Corazón de Jesús"}), + name: expect.objectContaining({ es: "Sagrado Corazón de Jesús" }), nextMonday: true, }, { date: "2015-06-29", celebrationDate: "2015-06-29", - name: expect.objectContaining({es: "San Pedro y San Pablo"}), + name: expect.objectContaining({ es: "San Pedro y San Pablo" }), nextMonday: true, }, { date: "2015-07-20", celebrationDate: "2015-07-20", - name: expect.objectContaining({es: "Grito de la Independencia"}), + name: expect.objectContaining({ es: "Grito de la Independencia" }), nextMonday: false, }, { date: "2015-08-07", celebrationDate: "2015-08-07", - name: expect.objectContaining({es: "Batalla de Boyacá"}), + name: expect.objectContaining({ es: "Batalla de Boyacá" }), nextMonday: false, }, { date: "2015-08-15", celebrationDate: "2015-08-17", - name: expect.objectContaining({es: "Asunción de la Virgen"}), + name: expect.objectContaining({ es: "Asunción de la Virgen" }), nextMonday: true, }, { date: "2015-10-12", celebrationDate: "2015-10-12", - name: expect.objectContaining({es: "Día de la Raza"}), + name: expect.objectContaining({ es: "Día de la Raza" }), nextMonday: true, }, { date: "2015-11-01", celebrationDate: "2015-11-02", - name: expect.objectContaining({es: "Todos los Santos"}), + name: expect.objectContaining({ es: "Todos los Santos" }), nextMonday: true, }, { date: "2015-11-11", celebrationDate: "2015-11-16", - name: expect.objectContaining({es: "Independencia de Cartagena"}), + name: expect.objectContaining({ es: "Independencia de Cartagena" }), nextMonday: true, }, { date: "2015-12-08", celebrationDate: "2015-12-08", - name: expect.objectContaining({es: "Inmaculada Concepción"}), + name: expect.objectContaining({ es: "Inmaculada Concepción" }), nextMonday: false, }, { date: "2015-12-25", celebrationDate: "2015-12-25", - name: expect.objectContaining({es: "Navidad"}), + name: expect.objectContaining({ es: "Navidad" }), nextMonday: false, }, ], @@ -337,114 +337,115 @@ const holidaysYears: Record = { { date: "2018-01-01", celebrationDate: "2018-01-01", - name: expect.objectContaining({es: "Año Nuevo"}), + name: expect.objectContaining({ es: "Año Nuevo" }), nextMonday: false, }, { date: "2018-01-06", celebrationDate: "2018-01-08", - name: expect.objectContaining({es: "Reyes Magos"}), + name: expect.objectContaining({ es: "Reyes Magos" }), nextMonday: true, }, { date: "2018-03-19", celebrationDate: "2018-03-19", - name: expect.objectContaining({es: "San José"}), + name: expect.objectContaining({ es: "San José" }), nextMonday: true, }, { date: "2018-03-29", celebrationDate: "2018-03-29", - name: expect.objectContaining({es: "Jueves Santo"}), + name: expect.objectContaining({ es: "Jueves Santo" }), nextMonday: false, }, { date: "2018-03-30", celebrationDate: "2018-03-30", - name: expect.objectContaining({es: "Viernes Santo"}), + name: expect.objectContaining({ es: "Viernes Santo" }), nextMonday: false, }, { date: "2018-05-01", celebrationDate: "2018-05-01", - name: expect.objectContaining({es: "Día del Trabajo"}), + name: expect.objectContaining({ es: "Día del Trabajo" }), nextMonday: false, }, { date: "2018-05-10", celebrationDate: "2018-05-14", - name: expect.objectContaining({es: "Ascensión del Señor"}), + name: expect.objectContaining({ es: "Ascensión del Señor" }), nextMonday: true, }, { date: "2018-05-31", celebrationDate: "2018-06-04", - name: expect.objectContaining({es: "Corpus Christi"}), + name: expect.objectContaining({ es: "Corpus Christi" }), nextMonday: true, }, { date: "2018-06-08", celebrationDate: "2018-06-11", - name: expect.objectContaining({es: "Sagrado Corazón de Jesús"}), + name: expect.objectContaining({ es: "Sagrado Corazón de Jesús" }), nextMonday: true, }, { date: "2018-06-29", celebrationDate: "2018-07-02", - name: expect.objectContaining({es: "San Pedro y San Pablo"}), + name: expect.objectContaining({ es: "San Pedro y San Pablo" }), nextMonday: true, }, { date: "2018-07-20", celebrationDate: "2018-07-20", - name: expect.objectContaining({es: "Grito de la Independencia"}), + name: expect.objectContaining({ es: "Grito de la Independencia" }), nextMonday: false, }, { date: "2018-08-07", celebrationDate: "2018-08-07", - name: expect.objectContaining({es: "Batalla de Boyacá"}), + name: expect.objectContaining({ es: "Batalla de Boyacá" }), nextMonday: false, }, { date: "2018-08-15", celebrationDate: "2018-08-20", - name: expect.objectContaining({es: "Asunción de la Virgen"}), + name: expect.objectContaining({ es: "Asunción de la Virgen" }), nextMonday: true, }, { date: "2018-10-12", celebrationDate: "2018-10-15", - name: expect.objectContaining({es: "Día de la Raza"}), + name: expect.objectContaining({ es: "Día de la Raza" }), nextMonday: true, }, { date: "2018-11-01", celebrationDate: "2018-11-05", - name: expect.objectContaining({es: "Todos los Santos"}), + name: expect.objectContaining({ es: "Todos los Santos" }), nextMonday: true, }, { date: "2018-11-11", celebrationDate: "2018-11-12", - name: expect.objectContaining({es: "Independencia de Cartagena"}), + name: expect.objectContaining({ es: "Independencia de Cartagena" }), nextMonday: true, }, { date: "2018-12-08", celebrationDate: "2018-12-08", - name: expect.objectContaining({es: "Inmaculada Concepción"}), + name: expect.objectContaining({ es: "Inmaculada Concepción" }), nextMonday: false, }, { date: "2018-12-25", celebrationDate: "2018-12-25", - name: expect.objectContaining({es: "Navidad"}), + name: expect.objectContaining({ es: "Navidad" }), nextMonday: false, }, ], }; const years = Object.keys(holidaysYears).map(Number); +const months = Array.from({ length: 12 }, (_, i) => i + 1); const timezones: TimeZone[] = [ "US/Pacific", "US/Eastern", @@ -459,19 +460,43 @@ afterEach(() => { }); describe.each(years)("Gets all holidays for %p", (year) => { - it.each(timezones)( - "Should return holidays formatted as string for %p if no options given", - (timezone) => { - timezone_mock.register(timezone); - expect(colombianHolidays(year)).toEqual(holidaysYears[year]); + describe.each(months)( + "Get only corresponding holidays for month %p", + (month) => { + it.each(timezones)("should return all holidays for %p", (timezone) => { + timezone_mock.register(timezone); + const holidays = colombianHolidays({ year, month }); + const expected = holidaysYears[year].filter( + (holiday) => Number(holiday.celebrationDate.slice(5, 7)) === month + ); + expect(holidays).toEqual(expected); + }); + + it.each(timezones)( + "should return all holidays for %p when using native dates", + (timezone) => { + timezone_mock.register(timezone); + const holidays = colombianHolidays({ + year, + month, + returnNativeDate: true, + }); + const expected = holidaysYears[year] + .filter( + (holiday) => Number(holiday.celebrationDate.slice(5, 7)) === month + ) + .map(transformStringsToDates); + expect(holidays).toEqual(expected); + } + ); } ); it.each(timezones)( - "Should return holidays formatted as string for %p if options is empty", + "Should return holidays formatted as string for %p if no options given", (timezone) => { timezone_mock.register(timezone); - expect(colombianHolidays(year, {})).toEqual(holidaysYears[year]); + expect(colombianHolidays({ year })).toEqual(holidaysYears[year]); } ); @@ -479,7 +504,7 @@ describe.each(years)("Gets all holidays for %p", (year) => { "Should return holidays formatted as string for %p if returnNativeDate is set to false", (timezone) => { timezone_mock.register(timezone); - expect(colombianHolidays(year, { returnNativeDate: false })).toEqual( + expect(colombianHolidays({ year, returnNativeDate: false })).toEqual( holidaysYears[year] ); } @@ -489,13 +514,8 @@ describe.each(years)("Gets all holidays for %p", (year) => { "Should return holidays with native JS date for %p if returnNativeDate is set to true", (timezone) => { timezone_mock.register(timezone); - expect(colombianHolidays(year, { returnNativeDate: true })).toEqual( - holidaysYears[year].map((holiday) => ({ - date: new Date(holiday.date), - celebrationDate: new Date(holiday.celebrationDate), - name: holiday.name, - nextMonday: holiday.nextMonday, - })) + expect(colombianHolidays({ year, returnNativeDate: true })).toEqual( + holidaysYears[year].map(transformStringsToDates) ); } ); @@ -506,19 +526,47 @@ describe("Gets all holidays for the current year", () => { const currYear = new Date().getFullYear(); const currHols = colombianHolidays(); const holidaysInAYear = 18; - expect(currHols).toEqual(colombianHolidays(currYear)); + expect(currHols).toEqual(colombianHolidays({ year: currYear })); expect(Array.isArray(currHols)).toBe(true); expect(currHols.length).toBe(holidaysInAYear); }); + + describe("Current year", () => { + it("should return 2 holidays for month 1 for current year when no year is given", () => { + const holidays = colombianHolidays({ month: 1 }); + expect(Array.isArray(holidays)).toBe(true); + expect(holidays.length).toBe(2); + }); + + it("Should return holidays for the current year when no year is given", () => { + const currYear = new Date().getFullYear(); + const currHols = colombianHolidays(); + const holidaysInAYear = 18; + expect(currHols).toEqual(colombianHolidays({ year: currYear })); + expect(Array.isArray(currHols)).toBe(true); + expect(currHols.length).toBe(holidaysInAYear); + }); + }); }); describe("Should throw an error for a non valid year", () => { it(`should throw an error for a year below ${FIRST_HOLIDAY_YEAR}`, () => { - expect(() => colombianHolidays(FIRST_HOLIDAY_YEAR)).not.toThrow(); - expect(() => colombianHolidays(FIRST_HOLIDAY_YEAR - 1)).toThrow(); + expect(() => colombianHolidays({ year: FIRST_HOLIDAY_YEAR })).not.toThrow(); + expect(() => colombianHolidays({ year: FIRST_HOLIDAY_YEAR - 1 })).toThrow(); }); it(`should throw an error for a year above ${LAST_HOLIDAY_YEAR}`, () => { - expect(() => colombianHolidays(LAST_HOLIDAY_YEAR)).not.toThrow(); - expect(() => colombianHolidays(LAST_HOLIDAY_YEAR + 1)).toThrow(); + expect(() => colombianHolidays({ year: LAST_HOLIDAY_YEAR })).not.toThrow(); + expect(() => colombianHolidays({ year: LAST_HOLIDAY_YEAR + 1 })).toThrow(); }); }); + +function transformStringsToDates( + holiday: ColombianHoliday +): ColombianHolidayWithNativeDate { + return { + date: new Date(holiday.date), + celebrationDate: new Date(holiday.celebrationDate), + name: holiday.name, + nextMonday: holiday.nextMonday, + }; +} diff --git a/src/index.ts b/src/index.ts index 6aefa0a..7a3eb12 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,22 +6,33 @@ import { ColombianHoliday, ColombianHolidayWithNativeDate } from "./types"; export const FIRST_HOLIDAY_YEAR = 1583; export const LAST_HOLIDAY_YEAR = 4099; -function colombianHolidays( - year?: number, - options?: undefined | { returnNativeDate?: false | undefined } +type MonthNumbers = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12; +export type Month = MonthNumbers | Omit; + +export function colombianHolidays( + options?: + | undefined + | { year?: number; month?: Month; returnNativeDate: false | undefined } ): ColombianHoliday[]; -function colombianHolidays( - year?: number, - options?: { returnNativeDate?: true } -): ColombianHolidayWithNativeDate[]; -function colombianHolidays( - year?: number, - options?: { returnNativeDate?: boolean } -): ColombianHoliday[] | ColombianHolidayWithNativeDate[]; -function colombianHolidays( - year: number = new Date().getFullYear(), - { returnNativeDate = false }: { returnNativeDate?: boolean } = {} -): unknown { +export function colombianHolidays(options?: { + year?: number; + month?: Month; + returnNativeDate: true; +}): ColombianHolidayWithNativeDate[]; +export function colombianHolidays(options?: { + year?: number; + month?: Month; + returnNativeDate?: boolean; +}): ColombianHoliday[] | ColombianHolidayWithNativeDate[]; +export function colombianHolidays({ + year = new Date().getUTCFullYear(), + month, + returnNativeDate = false, +}: { + year?: number; + month?: Month; + returnNativeDate?: boolean; +} = {}): unknown { if (year < FIRST_HOLIDAY_YEAR || year > LAST_HOLIDAY_YEAR) { throw new Error( `The year should be between ${FIRST_HOLIDAY_YEAR} and ${LAST_HOLIDAY_YEAR}` @@ -29,7 +40,18 @@ function colombianHolidays( } return holidays - .map((holiday) => getHoliday(holiday, year, { returnNativeDate })) + .map((holiday) => getHoliday(holiday, { year, returnNativeDate })) + .filter((holiday) => { + if (month === undefined) { + return true; + } + + if (typeof holiday.celebrationDate === "string") { + return Number(holiday.celebrationDate.slice(5, 7)) === month; + } + + return holiday.celebrationDate.getUTCMonth() + 1 === month; + }) .sort((a, b) => { if ( a.celebrationDate instanceof Date && diff --git a/src/utils/holidaysWithinInterval.ts b/src/utils/holidaysWithinInterval.ts index 649b500..65bd5f3 100644 --- a/src/utils/holidaysWithinInterval.ts +++ b/src/utils/holidaysWithinInterval.ts @@ -4,12 +4,12 @@ import { ColombianHoliday, ColombianHolidayWithNativeDate } from "../types"; export function holidaysWithinInterval(options: { start: Date; end: Date; - returnNativeDate?: false; + returnNativeDate: false | undefined; }): ColombianHoliday[]; export function holidaysWithinInterval(options: { start: Date; end: Date; - returnNativeDate?: true; + returnNativeDate: true; }): ColombianHolidayWithNativeDate[]; export function holidaysWithinInterval(options: { start: Date; @@ -32,7 +32,7 @@ export function holidaysWithinInterval({ const yearStart = start.getUTCFullYear(); const holidays = Array.from({ length: yearEnd - yearStart + 1 }, (_, i) => - colombianHolidays(i + yearStart, { returnNativeDate }) + colombianHolidays({ year: i + yearStart, returnNativeDate }) ).flat(); return holidays.filter(({ celebrationDate }) => { diff --git a/src/utils/isHoliday.ts b/src/utils/isHoliday.ts index eef97c4..7595ff8 100644 --- a/src/utils/isHoliday.ts +++ b/src/utils/isHoliday.ts @@ -1,7 +1,7 @@ import colombianHolidays from ".."; export function isHoliday(date: Date): boolean { - return colombianHolidays(date.getUTCFullYear()).some( + return colombianHolidays({ year: date.getUTCFullYear() }).some( ({ celebrationDate }) => { const d = new Date(celebrationDate); return (