soff-date 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Soff Date
2
2
 
3
3
  [![npm](https://img.shields.io/npm/v/soff-date)](https://www.npmjs.com/package/soff-date)
4
- [![License](https://img.shields.io/npm/l/soff-date)](LICENSE)
4
+ [![License](https://img.shields.io/github/license/bledxs/soff-date)](LICENSE)
5
5
  [![Build Status](https://github.com/bledxs/soff-date/actions/workflows/ci.yml/badge.svg)](https://github.com/bledxs/soff-date/actions)
6
6
  [![codecov](https://codecov.io/gh/bledxs/soff-date/branch/main/graph/badge.svg)](https://codecov.io/gh/bledxs/soff-date)
7
7
  [![minzipped size](https://img.shields.io/bundlephobia/minzip/soff-date)](https://bundlephobia.com/package/soff-date)
@@ -22,7 +22,7 @@ Lightweight, tree-shakeable holiday calculator with algorithmic date computation
22
22
  - [Available Locales](#available-locales)
23
23
  - [Available Languages](#available-languages)
24
24
  - [Shift Rules Explained](#shift-rules-explained)
25
- - [Emiliani (Colombia, Argentina, Chile)](#emiliani-colombia-argentina-chile)
25
+ - [Emiliani (Colombia, Argentina)](#emiliani-colombia-argentina)
26
26
  - [Observed US (USA, UK)](#observed-us-usa-uk)
27
27
  - [Advanced: Create Your Own Locale](#advanced-create-your-own-locale)
28
28
  - [Advanced: Use Algorithms Directly](#advanced-use-algorithms-directly)
@@ -107,7 +107,7 @@ getHolidays(2025, { lang: { ...en, newYear: 'Happy New Year!' } });
107
107
 
108
108
  ## Shift Rules Explained
109
109
 
110
- ### Emiliani (Colombia, Argentina, Chile)
110
+ ### Emiliani (Colombia, Argentina)
111
111
 
112
112
  Holidays falling on weekends **move to Monday**.
113
113
 
@@ -205,6 +205,8 @@ Tree-shaking ensures you only ship what you import.
205
205
 
206
206
  Returns all holidays for a given year.
207
207
 
208
+ > **Note:** Some holidays might fall on the same date (e.g., a fixed holiday coinciding with a movable one). Always use `holiday.key` as the unique identifier, not the date.
209
+
208
210
  ```typescript
209
211
  interface GetHolidaysOptions {
210
212
  lang?: HolidayNames; // Custom translations
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';function d(t){let n=t%19,o=Math.floor(t/100),e=t%100,a=Math.floor(o/4),i=o%4,s=Math.floor((o+8)/25),r=Math.floor((o-s+1)/3),l=(19*n+o-a-r+15)%30,p=Math.floor(e/4),T=e%4,c=(32+2*i+2*p-l-T)%7,h=Math.floor((n+11*l+22*c)/451),g=Math.floor((l+c-7*h+114)/31),C=(l+c-7*h+114)%31+1;return new Date(Date.UTC(t,g-1,C))}function y(t,n,o,e){if(e>0){let i=new Date(Date.UTC(t,n-1,1)).getUTCDay(),r=1+(o-i+7)%7+(e-1)*7;return new Date(Date.UTC(t,n-1,r))}else {let a=new Date(Date.UTC(t,n,0)),s=(a.getUTCDay()-o+7)%7,r=a.getUTCDate()-s+(e+1)*7;return new Date(Date.UTC(t,n-1,r))}}function u(t,n){let o=t.getUTCDay();if(n==="none")return {date:t,shifted:false};let e=new Date(t);switch(n){case "emiliani":case "nextMonday":{if(o===1)return {date:t,shifted:false};let a=(8-o)%7;e.setUTCDate(t.getUTCDate()+a);break}case "observedUS":if(o===0)e.setUTCDate(t.getUTCDate()+1);else if(o===6)e.setUTCDate(t.getUTCDate()-1);else return {date:t,shifted:false};break;case "nearestMonday":if(o===2)e.setUTCDate(t.getUTCDate()-1);else if(o===3)e.setUTCDate(t.getUTCDate()-2);else if(o===4)e.setUTCDate(t.getUTCDate()+4);else if(o===5)e.setUTCDate(t.getUTCDate()+3);else return {date:t,shifted:false};break;default:return {date:t,shifted:false}}return {date:e,shifted:true}}function U(t,n){switch(t.type){case "fixed":return new Date(Date.UTC(n,t.month-1,t.day));case "nthWeekday":return y(n,t.month,t.weekday,t.n);case "easterRelative":{let o=d(n),e=new Date(o);return e.setUTCDate(o.getUTCDate()+t.offset),e}case "custom":return t.calc(n)}}function D(t){return t.toISOString().split("T")[0]}function f(t,n,o={}){return t.map(e=>{let a=U(e.rule,n);if(!a)return null;let{date:i,shifted:s}=u(a,e.shift??"none");return {date:D(i),key:e.key,name:o[e.key]??e.key,...s&&{isShifted:true}}}).filter(e=>e!==null).sort((e,a)=>e.date.localeCompare(a.date))}function m(t,n,o){let e=n.getUTCFullYear(),a=D(n);return f(t,e,o).find(s=>s.date===a)??null}function H(t,n,o){let e=D(n),a=n.getUTCFullYear(),i=f(t,a,o),s=i.find(r=>r.date>=e);return s||(i=f(t,a+1,o),s=i[0]),s??null}exports.applyShift=u;exports.checkIsHoliday=m;exports.findNextHoliday=H;exports.getEasterSunday=d;exports.getNthWeekday=y;exports.resolveHolidays=f;//# sourceMappingURL=index.cjs.map
1
+ 'use strict';function d(e){let o=e%19,n=Math.floor(e/100),t=e%100,a=Math.floor(n/4),s=n%4,i=Math.floor((n+8)/25),r=Math.floor((n-i+1)/3),l=(19*o+n-a-r+15)%30,g=Math.floor(t/4),C=t%4,c=(32+2*s+2*g-l-C)%7,p=Math.floor((o+11*l+22*c)/451),U=Math.floor((l+c-7*p+114)/31),H=(l+c-7*p+114)%31+1;return new Date(Date.UTC(e,U-1,H))}function u(e,o,n,t){if(t>0){let s=new Date(Date.UTC(e,o-1,1)).getUTCDay(),r=1+(n-s+7)%7+(t-1)*7;return new Date(Date.UTC(e,o-1,r))}else {let a=new Date(Date.UTC(e,o,0)),i=(a.getUTCDay()-n+7)%7,r=a.getUTCDate()-i+(t+1)*7;return new Date(Date.UTC(e,o-1,r))}}function y(e,o){let n=e.getUTCDay();if(o==="none")return {date:e,shifted:false};let t=new Date(e);switch(o){case "emiliani":case "nextMonday":{if(n===1)return {date:e,shifted:false};let a=(8-n)%7;t.setUTCDate(e.getUTCDate()+a);break}case "observedUS":if(n===0)t.setUTCDate(e.getUTCDate()+1);else if(n===6)t.setUTCDate(e.getUTCDate()-1);else return {date:e,shifted:false};break;case "nearestMonday":if(n===2)t.setUTCDate(e.getUTCDate()-1);else if(n===3)t.setUTCDate(e.getUTCDate()-2);else if(n===4)t.setUTCDate(e.getUTCDate()+4);else if(n===5)t.setUTCDate(e.getUTCDate()+3);else return {date:e,shifted:false};break;default:return {date:e,shifted:false}}return {date:t,shifted:true}}function k(e,o){switch(e.type){case "fixed":return new Date(Date.UTC(o,e.month-1,e.day));case "nthWeekday":return u(o,e.month,e.weekday,e.n);case "easterRelative":{let n=d(o),t=new Date(n);return t.setUTCDate(n.getUTCDate()+e.offset),t}case "custom":return e.calc(o)}}function D(e){return e.toISOString().split("T")[0]}function f(e,o,n={}){return e.map(t=>{let a=k(t.rule,o);if(!a)return null;let{date:s,shifted:i}=y(a,t.shift??"none");return {date:D(s),key:t.key,name:n[t.key]??t.key,...i&&{isShifted:true}}}).filter(t=>t!==null).sort((t,a)=>t.date.localeCompare(a.date))}function h(e,o,n){let t=o.getUTCFullYear(),a=D(o);return f(e,t,n).find(i=>i.date===a)??null}function x(e,o,n){let t=D(o),a=o.getUTCFullYear(),s=f(e,a,n),i=s.find(r=>r.date>=t);return i||(s=f(e,a+1,n),i=s[0]),i??null}function m(e){let o=e.getUTCDay();return o===0||o===6}function T(e,o){return m(o)?false:h(e,o)===null}function b(e,o,n){let t=new Date(o),a=Math.abs(n),s=n>=0?1:-1;for(;a>0;)t.setUTCDate(t.getUTCDate()+s),T(e,t)&&a--;return t}exports.addBusinessDays=b;exports.applyShift=y;exports.checkIsBusinessDay=T;exports.checkIsHoliday=h;exports.findNextHoliday=x;exports.getEasterSunday=d;exports.getNthWeekday=u;exports.isWeekend=m;exports.resolveHolidays=f;//# sourceMappingURL=index.cjs.map
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/algorithms/easter.ts","../src/core/algorithms/nth-weekday.ts","../src/core/algorithms/shifts.ts","../src/core/engine.ts"],"names":["getEasterSunday","year","a","b","c","d","e","f","g","h","i","k","l","m","month","day","getNthWeekday","weekday","n","firstWeekday","last","diff","applyShift","date","rule","result","daysToNextMonday","resolveRule","easter","toISODate","resolveHolidays","definitions","names","def","rawDate","shifted","checkIsHoliday","isoDate","findNextHoliday","from","isoFrom","holidays","next"],"mappings":"aAIO,SAASA,CAAAA,CAAgBC,CAAAA,CAAoB,CAClD,IAAMC,EAAID,CAAAA,CAAO,EAAA,CACXE,CAAAA,CAAI,IAAA,CAAK,KAAA,CAAMF,CAAAA,CAAO,GAAG,CAAA,CACzBG,EAAIH,CAAAA,CAAO,GAAA,CACXI,CAAAA,CAAI,IAAA,CAAK,KAAA,CAAMF,CAAAA,CAAI,CAAC,CAAA,CACpBG,EAAIH,CAAAA,CAAI,CAAA,CACRI,CAAAA,CAAI,IAAA,CAAK,KAAA,CAAA,CAAOJ,CAAAA,CAAI,CAAA,EAAK,EAAE,EAC3BK,CAAAA,CAAI,IAAA,CAAK,KAAA,CAAA,CAAOL,CAAAA,CAAII,CAAAA,CAAI,CAAA,EAAK,CAAC,CAAA,CAC9BE,GAAK,EAAA,CAAKP,CAAAA,CAAIC,CAAAA,CAAIE,CAAAA,CAAIG,CAAAA,CAAI,EAAA,EAAM,EAAA,CAChCE,CAAAA,CAAI,KAAK,KAAA,CAAMN,CAAAA,CAAI,CAAC,CAAA,CACpBO,CAAAA,CAAIP,CAAAA,CAAI,CAAA,CACRQ,CAAAA,CAAAA,CAAK,GAAK,CAAA,CAAIN,CAAAA,CAAI,CAAA,CAAII,CAAAA,CAAID,CAAAA,CAAIE,CAAAA,EAAK,CAAA,CACnCE,CAAAA,CAAI,KAAK,KAAA,CAAA,CAAOX,CAAAA,CAAI,EAAA,CAAKO,CAAAA,CAAI,EAAA,CAAKG,CAAAA,EAAK,GAAG,CAAA,CAC1CE,EAAQ,IAAA,CAAK,KAAA,CAAA,CAAOL,CAAAA,CAAIG,CAAAA,CAAI,CAAA,CAAIC,CAAAA,CAAI,GAAA,EAAO,EAAE,EAC7CE,CAAAA,CAAAA,CAAQN,CAAAA,CAAIG,CAAAA,CAAI,CAAA,CAAIC,CAAAA,CAAI,GAAA,EAAO,EAAA,CAAM,CAAA,CAE3C,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAIZ,CAAAA,CAAMa,CAAAA,CAAQ,CAAA,CAAGC,CAAG,CAAC,CAChD,CCdO,SAASC,CAAAA,CAAcf,CAAAA,CAAca,CAAAA,CAAeG,CAAAA,CAAiBC,CAAAA,CAAiB,CAC3F,GAAIA,CAAAA,CAAI,CAAA,CAAG,CAGT,IAAMC,CAAAA,CADQ,IAAI,IAAA,CAAK,KAAK,GAAA,CAAIlB,CAAAA,CAAMa,CAAAA,CAAQ,CAAA,CAAG,CAAC,CAAC,CAAA,CACxB,SAAA,GAErBC,CAAAA,CAAM,CAAA,CAAA,CADEE,CAAAA,CAAUE,CAAAA,CAAe,GAAK,CAAA,CAAA,CACpBD,CAAAA,CAAI,CAAA,EAAK,CAAA,CACjC,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAIjB,CAAAA,CAAMa,CAAAA,CAAQ,CAAA,CAAGC,CAAG,CAAC,CAChD,CAAA,KAAO,CAGL,IAAMK,CAAAA,CAAO,IAAI,IAAA,CAAK,IAAA,CAAK,IAAInB,CAAAA,CAAMa,CAAAA,CAAO,CAAC,CAAC,CAAA,CAExCO,CAAAA,CAAAA,CADcD,CAAAA,CAAK,SAAA,GACGH,CAAAA,CAAU,CAAA,EAAK,CAAA,CACrCF,CAAAA,CAAMK,CAAAA,CAAK,UAAA,EAAW,CAAIC,CAAAA,CAAAA,CAAQH,EAAI,CAAA,EAAK,CAAA,CACjD,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,GAAA,CAAIjB,CAAAA,CAAMa,EAAQ,CAAA,CAAGC,CAAG,CAAC,CAChD,CACF,CClBO,SAASO,CAAAA,CAAWC,EAAYC,CAAAA,CAAmD,CACxF,IAAMT,CAAAA,CAAMQ,CAAAA,CAAK,SAAA,EAAU,CAE3B,GAAIC,IAAS,MAAA,CACX,OAAO,CAAE,IAAA,CAAAD,EAAM,OAAA,CAAS,KAAM,CAAA,CAGhC,IAAME,EAAS,IAAI,IAAA,CAAKF,CAAI,CAAA,CAE5B,OAAQC,CAAAA,EACN,KAAK,WACL,KAAK,YAAA,CAAc,CAEjB,GAAIT,CAAAA,GAAQ,CAAA,CACV,OAAO,CAAE,KAAAQ,CAAAA,CAAM,OAAA,CAAS,KAAM,CAAA,CAOhC,IAAMG,CAAAA,CAAAA,CAAoB,CAAA,CAAIX,CAAAA,EAAO,EACrCU,CAAAA,CAAO,UAAA,CAAWF,CAAAA,CAAK,UAAA,EAAW,CAAIG,CAAgB,CAAA,CACtD,KACF,CAEA,KAAK,YAAA,CAEH,GAAIX,CAAAA,GAAQ,CAAA,CAEVU,CAAAA,CAAO,UAAA,CAAWF,CAAAA,CAAK,YAAW,CAAI,CAAC,CAAA,CAAA,KAAA,GAC9BR,CAAAA,GAAQ,CAAA,CAEjBU,CAAAA,CAAO,UAAA,CAAWF,CAAAA,CAAK,YAAW,CAAI,CAAC,CAAA,CAAA,KAEvC,OAAO,CAAE,IAAA,CAAAA,CAAAA,CAAM,OAAA,CAAS,KAAM,CAAA,CAEhC,MAEF,KAAK,eAAA,CAIH,GAAIR,CAAAA,GAAQ,CAAA,CAEVU,CAAAA,CAAO,UAAA,CAAWF,EAAK,UAAA,EAAW,CAAI,CAAC,CAAA,CAAA,KAAA,GAC9BR,CAAAA,GAAQ,CAAA,CAEjBU,CAAAA,CAAO,UAAA,CAAWF,EAAK,UAAA,EAAW,CAAI,CAAC,CAAA,CAAA,KAAA,GAC9BR,CAAAA,GAAQ,CAAA,CAEjBU,CAAAA,CAAO,UAAA,CAAWF,EAAK,UAAA,EAAW,CAAI,CAAC,CAAA,CAAA,KAAA,GAC9BR,CAAAA,GAAQ,CAAA,CAEjBU,CAAAA,CAAO,UAAA,CAAWF,EAAK,UAAA,EAAW,CAAI,CAAC,CAAA,CAAA,KAEvC,OAAO,CAAE,IAAA,CAAAA,CAAAA,CAAM,QAAS,KAAM,CAAA,CAEhC,MAEF,QACE,OAAO,CAAE,IAAA,CAAAA,CAAAA,CAAM,QAAS,KAAM,CAClC,CAEA,OAAO,CAAE,IAAA,CAAME,CAAAA,CAAQ,OAAA,CAAS,IAAK,CACvC,CCjEA,SAASE,CAAAA,CAAYH,CAAAA,CAAmBvB,CAAAA,CAA2B,CACjE,OAAQuB,EAAK,IAAA,EACX,KAAK,OAAA,CACH,OAAO,IAAI,IAAA,CAAK,IAAA,CAAK,IAAIvB,CAAAA,CAAMuB,CAAAA,CAAK,KAAA,CAAQ,CAAA,CAAGA,CAAAA,CAAK,GAAG,CAAC,CAAA,CAE1D,KAAK,YAAA,CACH,OAAOR,CAAAA,CAAcf,CAAAA,CAAMuB,CAAAA,CAAK,KAAA,CAAOA,CAAAA,CAAK,OAAA,CAASA,EAAK,CAAC,CAAA,CAE7D,KAAK,gBAAA,CAAkB,CACrB,IAAMI,CAAAA,CAAS5B,CAAAA,CAAgBC,CAAI,CAAA,CAC7BwB,CAAAA,CAAS,IAAI,IAAA,CAAKG,CAAM,CAAA,CAC9B,OAAAH,CAAAA,CAAO,WAAWG,CAAAA,CAAO,UAAA,EAAW,CAAIJ,CAAAA,CAAK,MAAM,CAAA,CAC5CC,CACT,CAEA,KAAK,QAAA,CACH,OAAOD,CAAAA,CAAK,IAAA,CAAKvB,CAAI,CACzB,CACF,CAGA,SAAS4B,CAAAA,CAAUN,CAAAA,CAAoB,CACrC,OAAOA,CAAAA,CAAK,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CACxC,CAGO,SAASO,CAAAA,CACdC,CAAAA,CACA9B,CAAAA,CACA+B,CAAAA,CAAgC,EAAC,CACtB,CACX,OAAOD,CAAAA,CACJ,GAAA,CAAKE,CAAAA,EAAQ,CACZ,IAAMC,EAAUP,CAAAA,CAAYM,CAAAA,CAAI,IAAA,CAAMhC,CAAI,CAAA,CAC1C,GAAI,CAACiC,CAAAA,CAAS,OAAO,IAAA,CAErB,GAAM,CAAE,IAAA,CAAAX,CAAAA,CAAM,OAAA,CAAAY,CAAQ,CAAA,CAAIb,EAAWY,CAAAA,CAASD,CAAAA,CAAI,KAAA,EAAS,MAAM,CAAA,CAEjE,OAAO,CACL,IAAA,CAAMJ,EAAUN,CAAI,CAAA,CACpB,GAAA,CAAKU,CAAAA,CAAI,GAAA,CACT,IAAA,CAAMD,CAAAA,CAAMC,CAAAA,CAAI,GAAG,CAAA,EAAKA,CAAAA,CAAI,GAAA,CAC5B,GAAIE,CAAAA,EAAW,CAAE,SAAA,CAAW,IAAK,CACnC,CACF,CAAC,CAAA,CACA,MAAA,CAAQ1B,CAAAA,EAAoBA,CAAAA,GAAM,IAAI,CAAA,CACtC,KAAK,CAACP,CAAAA,CAAGC,CAAAA,GAAMD,CAAAA,CAAE,KAAK,aAAA,CAAcC,CAAAA,CAAE,IAAI,CAAC,CAChD,CAGO,SAASiC,CAAAA,CACdL,CAAAA,CACAR,CAAAA,CACAS,CAAAA,CACgB,CAChB,IAAM/B,EAAOsB,CAAAA,CAAK,cAAA,EAAe,CAC3Bc,CAAAA,CAAUR,CAAAA,CAAUN,CAAI,CAAA,CAE9B,OADiBO,EAAgBC,CAAAA,CAAa9B,CAAAA,CAAM+B,CAAK,CAAA,CACzC,IAAA,CAAMvB,CAAAA,EAAMA,CAAAA,CAAE,IAAA,GAAS4B,CAAO,CAAA,EAAK,IACrD,CAGO,SAASC,CAAAA,CACdP,CAAAA,CACAQ,CAAAA,CACAP,CAAAA,CACgB,CAChB,IAAMQ,CAAAA,CAAUX,CAAAA,CAAUU,CAAI,CAAA,CACxBtC,CAAAA,CAAOsC,CAAAA,CAAK,cAAA,GAGdE,CAAAA,CAAWX,CAAAA,CAAgBC,CAAAA,CAAa9B,CAAAA,CAAM+B,CAAK,CAAA,CACnDU,CAAAA,CAAOD,CAAAA,CAAS,KAAMhC,CAAAA,EAAMA,CAAAA,CAAE,IAAA,EAAQ+B,CAAO,CAAA,CAGjD,OAAKE,CAAAA,GACHD,CAAAA,CAAWX,EAAgBC,CAAAA,CAAa9B,CAAAA,CAAO,CAAA,CAAG+B,CAAK,EACvDU,CAAAA,CAAOD,CAAAA,CAAS,CAAC,CAAA,CAAA,CAGZC,GAAQ,IACjB","file":"index.cjs","sourcesContent":["/**\n * Calculates Easter Sunday (Meeus/Jones/Butcher algorithm)\n * Valid for Gregorian calendar (1583+)\n */\nexport function getEasterSunday(year: number): Date {\n const a = year % 19;\n const b = Math.floor(year / 100);\n const c = year % 100;\n const d = Math.floor(b / 4);\n const e = b % 4;\n const f = Math.floor((b + 8) / 25);\n const g = Math.floor((b - f + 1) / 3);\n const h = (19 * a + b - d - g + 15) % 30;\n const i = Math.floor(c / 4);\n const k = c % 4;\n const l = (32 + 2 * e + 2 * i - h - k) % 7;\n const m = Math.floor((a + 11 * h + 22 * l) / 451);\n const month = Math.floor((h + l - 7 * m + 114) / 31);\n const day = ((h + l - 7 * m + 114) % 31) + 1;\n\n return new Date(Date.UTC(year, month - 1, day));\n}\n","/**\n * Calculates the Nth weekday of a month\n * @param year - Year\n * @param month - Month (1-12)\n * @param weekday - Weekday (0=Sun, 1=Mon, ..., 6=Sat)\n * @param n - Occurrence (1=first, 2=second, -1=last)\n */\nexport function getNthWeekday(year: number, month: number, weekday: number, n: number): Date {\n if (n > 0) {\n // From start of month\n const first = new Date(Date.UTC(year, month - 1, 1));\n const firstWeekday = first.getUTCDay();\n const diff = (weekday - firstWeekday + 7) % 7;\n const day = 1 + diff + (n - 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n } else {\n // From end of month (n = -1 = last)\n // month is 1-12. Date.UTC(year, month, 0) gives the last day of month 'month'\n const last = new Date(Date.UTC(year, month, 0));\n const lastWeekday = last.getUTCDay();\n const diff = (lastWeekday - weekday + 7) % 7;\n const day = last.getUTCDate() - diff + (n + 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n }\n}\n","import type { ShiftRule } from '../types';\n\n/**\n * Applies a shift rule to a date\n * @returns { date: Date, shifted: boolean }\n */\nexport function applyShift(date: Date, rule: ShiftRule): { date: Date; shifted: boolean } {\n const day = date.getUTCDay(); // 0=Sun, 6=Sat\n\n if (rule === 'none') {\n return { date, shifted: false };\n }\n\n const result = new Date(date);\n\n switch (rule) {\n case 'emiliani':\n case 'nextMonday': {\n // If it's already Monday (1), do not move\n if (day === 1) {\n return { date, shifted: false };\n }\n // Move to next Monday\n // (8 - day) % 7 gives days until next Monday\n // Ex: Sun(0) -> (8-0)%7 = 1 (+1 day) -> Mon\n // Ex: Sat(6) -> (8-6)%7 = 2 (+2 days) -> Mon\n // Ex: Wed(3) -> (8-3)%7 = 5 (+5 days) -> Mon\n const daysToNextMonday = (8 - day) % 7;\n result.setUTCDate(date.getUTCDate() + daysToNextMonday);\n break;\n }\n\n case 'observedUS':\n // Only affects weekends\n if (day === 0) {\n // Sunday -> Monday (+1)\n result.setUTCDate(date.getUTCDate() + 1);\n } else if (day === 6) {\n // Saturday -> Friday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else {\n return { date, shifted: false };\n }\n break;\n\n case 'nearestMonday':\n // Argentina rule:\n // Tue/Wed -> Previous Monday\n // Thu/Fri -> Next Monday\n if (day === 2) {\n // Tuesday -> Monday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else if (day === 3) {\n // Wednesday -> Monday (-2)\n result.setUTCDate(date.getUTCDate() - 2);\n } else if (day === 4) {\n // Thursday -> Next Monday (+4)\n result.setUTCDate(date.getUTCDate() + 4);\n } else if (day === 5) {\n // Friday -> Next Monday (+3)\n result.setUTCDate(date.getUTCDate() + 3);\n } else {\n return { date, shifted: false };\n }\n break;\n\n default:\n return { date, shifted: false };\n }\n\n return { date: result, shifted: true };\n}\n","import type { HolidayDefinition, HolidayRule, Holiday } from './types';\nimport { getEasterSunday } from './algorithms/easter';\nimport { getNthWeekday } from './algorithms/nth-weekday';\nimport { applyShift } from './algorithms/shifts';\n\n/** Resolves a rule to a concrete date */\nfunction resolveRule(rule: HolidayRule, year: number): Date | null {\n switch (rule.type) {\n case 'fixed':\n return new Date(Date.UTC(year, rule.month - 1, rule.day));\n\n case 'nthWeekday':\n return getNthWeekday(year, rule.month, rule.weekday, rule.n);\n\n case 'easterRelative': {\n const easter = getEasterSunday(year);\n const result = new Date(easter);\n result.setUTCDate(easter.getUTCDate() + rule.offset);\n return result;\n }\n\n case 'custom':\n return rule.calc(year);\n }\n}\n\n/** Formats Date to ISO string (date only) */\nfunction toISODate(date: Date): string {\n return date.toISOString().split('T')[0];\n}\n\n/** Generates holidays for a year */\nexport function resolveHolidays(\n definitions: HolidayDefinition[],\n year: number,\n names: Record<string, string> = {},\n): Holiday[] {\n return definitions\n .map((def) => {\n const rawDate = resolveRule(def.rule, year);\n if (!rawDate) return null;\n\n const { date, shifted } = applyShift(rawDate, def.shift ?? 'none');\n\n return {\n date: toISODate(date),\n key: def.key,\n name: names[def.key] ?? def.key,\n ...(shifted && { isShifted: true }),\n };\n })\n .filter((h): h is Holiday => h !== null)\n .sort((a, b) => a.date.localeCompare(b.date));\n}\n\n/** Checks if a date is a holiday */\nexport function checkIsHoliday(\n definitions: HolidayDefinition[],\n date: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const year = date.getUTCFullYear();\n const isoDate = toISODate(date);\n const holidays = resolveHolidays(definitions, year, names);\n return holidays.find((h) => h.date === isoDate) ?? null;\n}\n\n/** Gets the next holiday from a date */\nexport function findNextHoliday(\n definitions: HolidayDefinition[],\n from: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const isoFrom = toISODate(from);\n const year = from.getUTCFullYear();\n\n // Search in current year\n let holidays = resolveHolidays(definitions, year, names);\n let next = holidays.find((h) => h.date >= isoFrom);\n\n // If none, search in next year\n if (!next) {\n holidays = resolveHolidays(definitions, year + 1, names);\n next = holidays[0];\n }\n\n return next ?? null;\n}\n"]}
1
+ {"version":3,"sources":["../src/core/algorithms/easter.ts","../src/core/algorithms/nth-weekday.ts","../src/core/algorithms/shifts.ts","../src/core/engine.ts","../src/core/business.ts"],"names":["getEasterSunday","year","a","b","c","d","e","f","g","h","i","k","l","m","month","day","getNthWeekday","weekday","n","firstWeekday","last","diff","applyShift","date","rule","result","daysToNextMonday","resolveRule","easter","toISODate","resolveHolidays","definitions","names","def","rawDate","shifted","checkIsHoliday","isoDate","findNextHoliday","from","isoFrom","holidays","next","isWeekend","checkIsBusinessDay","addBusinessDays","startDate","amount","remaining","direction"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Calculates Easter Sunday (Meeus/Jones/Butcher algorithm)\n * Valid for Gregorian calendar (1583+)\n */\nexport function getEasterSunday(year: number): Date {\n const a = year % 19;\n const b = Math.floor(year / 100);\n const c = year % 100;\n const d = Math.floor(b / 4);\n const e = b % 4;\n const f = Math.floor((b + 8) / 25);\n const g = Math.floor((b - f + 1) / 3);\n const h = (19 * a + b - d - g + 15) % 30;\n const i = Math.floor(c / 4);\n const k = c % 4;\n const l = (32 + 2 * e + 2 * i - h - k) % 7;\n const m = Math.floor((a + 11 * h + 22 * l) / 451);\n const month = Math.floor((h + l - 7 * m + 114) / 31);\n const day = ((h + l - 7 * m + 114) % 31) + 1;\n\n return new Date(Date.UTC(year, month - 1, day));\n}\n","/**\n * Calculates the Nth weekday of a month\n * @param year - Year\n * @param month - Month (1-12)\n * @param weekday - Weekday (0=Sun, 1=Mon, ..., 6=Sat)\n * @param n - Occurrence (1=first, 2=second, -1=last)\n */\nexport function getNthWeekday(year: number, month: number, weekday: number, n: number): Date {\n if (n > 0) {\n // From start of month\n const first = new Date(Date.UTC(year, month - 1, 1));\n const firstWeekday = first.getUTCDay();\n const diff = (weekday - firstWeekday + 7) % 7;\n const day = 1 + diff + (n - 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n } else {\n // From end of month (n = -1 = last)\n // month is 1-12. Date.UTC(year, month, 0) gives the last day of month 'month'\n const last = new Date(Date.UTC(year, month, 0));\n const lastWeekday = last.getUTCDay();\n const diff = (lastWeekday - weekday + 7) % 7;\n const day = last.getUTCDate() - diff + (n + 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n }\n}\n","import type { ShiftRule } from '../types';\n\n/**\n * Applies a shift rule to a date\n * @returns { date: Date, shifted: boolean }\n */\nexport function applyShift(date: Date, rule: ShiftRule): { date: Date; shifted: boolean } {\n const day = date.getUTCDay(); // 0=Sun, 6=Sat\n\n if (rule === 'none') {\n return { date, shifted: false };\n }\n\n const result = new Date(date);\n\n switch (rule) {\n case 'emiliani':\n case 'nextMonday': {\n // If it's already Monday (1), do not move\n if (day === 1) {\n return { date, shifted: false };\n }\n // Move to next Monday\n // (8 - day) % 7 gives days until next Monday\n // Ex: Sun(0) -> (8-0)%7 = 1 (+1 day) -> Mon\n // Ex: Sat(6) -> (8-6)%7 = 2 (+2 days) -> Mon\n // Ex: Wed(3) -> (8-3)%7 = 5 (+5 days) -> Mon\n const daysToNextMonday = (8 - day) % 7;\n result.setUTCDate(date.getUTCDate() + daysToNextMonday);\n break;\n }\n\n case 'observedUS':\n // Only affects weekends\n if (day === 0) {\n // Sunday -> Monday (+1)\n result.setUTCDate(date.getUTCDate() + 1);\n } else if (day === 6) {\n // Saturday -> Friday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else {\n return { date, shifted: false };\n }\n break;\n\n case 'nearestMonday':\n // Argentina rule:\n // Tue/Wed -> Previous Monday\n // Thu/Fri -> Next Monday\n if (day === 2) {\n // Tuesday -> Monday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else if (day === 3) {\n // Wednesday -> Monday (-2)\n result.setUTCDate(date.getUTCDate() - 2);\n } else if (day === 4) {\n // Thursday -> Next Monday (+4)\n result.setUTCDate(date.getUTCDate() + 4);\n } else if (day === 5) {\n // Friday -> Next Monday (+3)\n result.setUTCDate(date.getUTCDate() + 3);\n } else {\n return { date, shifted: false };\n }\n break;\n\n default:\n return { date, shifted: false };\n }\n\n return { date: result, shifted: true };\n}\n","import type { HolidayDefinition, HolidayRule, Holiday } from './types';\nimport { getEasterSunday } from './algorithms/easter';\nimport { getNthWeekday } from './algorithms/nth-weekday';\nimport { applyShift } from './algorithms/shifts';\n\n/** Resolves a rule to a concrete date */\nfunction resolveRule(rule: HolidayRule, year: number): Date | null {\n switch (rule.type) {\n case 'fixed':\n return new Date(Date.UTC(year, rule.month - 1, rule.day));\n\n case 'nthWeekday':\n return getNthWeekday(year, rule.month, rule.weekday, rule.n);\n\n case 'easterRelative': {\n const easter = getEasterSunday(year);\n const result = new Date(easter);\n result.setUTCDate(easter.getUTCDate() + rule.offset);\n return result;\n }\n\n case 'custom':\n return rule.calc(year);\n }\n}\n\n/** Formats Date to ISO string (date only) */\nfunction toISODate(date: Date): string {\n return date.toISOString().split('T')[0];\n}\n\n/** Generates holidays for a year */\nexport function resolveHolidays(\n definitions: HolidayDefinition[],\n year: number,\n names: Record<string, string> = {},\n): Holiday[] {\n return definitions\n .map((def) => {\n const rawDate = resolveRule(def.rule, year);\n if (!rawDate) return null;\n\n const { date, shifted } = applyShift(rawDate, def.shift ?? 'none');\n\n return {\n date: toISODate(date),\n key: def.key,\n name: names[def.key] ?? def.key,\n ...(shifted && { isShifted: true }),\n };\n })\n .filter((h): h is Holiday => h !== null)\n .sort((a, b) => a.date.localeCompare(b.date));\n}\n\n/** Checks if a date is a holiday */\nexport function checkIsHoliday(\n definitions: HolidayDefinition[],\n date: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const year = date.getUTCFullYear();\n const isoDate = toISODate(date);\n const holidays = resolveHolidays(definitions, year, names);\n return holidays.find((h) => h.date === isoDate) ?? null;\n}\n\n/** Gets the next holiday from a date */\nexport function findNextHoliday(\n definitions: HolidayDefinition[],\n from: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const isoFrom = toISODate(from);\n const year = from.getUTCFullYear();\n\n // Search in current year\n let holidays = resolveHolidays(definitions, year, names);\n let next = holidays.find((h) => h.date >= isoFrom);\n\n // If none, search in next year\n if (!next) {\n holidays = resolveHolidays(definitions, year + 1, names);\n next = holidays[0];\n }\n\n return next ?? null;\n}\n","import type { HolidayDefinition } from './types';\nimport { checkIsHoliday } from './engine';\n\n/**\n * Checks if a date is a weekend (Saturday or Sunday)\n * Uses UTC date to avoid timezone issues\n */\nexport function isWeekend(date: Date): boolean {\n const day = date.getUTCDay();\n return day === 0 || day === 6; // 0 = Sunday, 6 = Saturday\n}\n\n/**\n * Checks if a date is a business day (not weekend AND not holiday)\n */\nexport function checkIsBusinessDay(definitions: HolidayDefinition[], date: Date): boolean {\n if (isWeekend(date)) return false;\n return checkIsHoliday(definitions, date) === null;\n}\n\n/**\n * Adds (or subtracts) business days to a date\n */\nexport function addBusinessDays(\n definitions: HolidayDefinition[],\n startDate: Date,\n amount: number,\n): Date {\n const result = new Date(startDate);\n let remaining = Math.abs(amount);\n const direction = amount >= 0 ? 1 : -1;\n\n while (remaining > 0) {\n result.setUTCDate(result.getUTCDate() + direction);\n if (checkIsBusinessDay(definitions, result)) {\n remaining--;\n }\n }\n\n return result;\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,22 @@
1
1
  export { checkIsHoliday, findNextHoliday, resolveHolidays } from './core/engine.cjs';
2
+ import { HolidayDefinition } from './core/types.cjs';
3
+ export { Holiday, HolidayNames, HolidayRule, ShiftRule } from './core/types.cjs';
2
4
  export { getEasterSunday } from './core/algorithms/easter.cjs';
3
5
  export { getNthWeekday } from './core/algorithms/nth-weekday.cjs';
4
6
  export { applyShift } from './core/algorithms/shifts.cjs';
5
- export { Holiday, HolidayDefinition, HolidayNames, HolidayRule, ShiftRule } from './core/types.cjs';
7
+
8
+ /**
9
+ * Checks if a date is a weekend (Saturday or Sunday)
10
+ * Uses UTC date to avoid timezone issues
11
+ */
12
+ declare function isWeekend(date: Date): boolean;
13
+ /**
14
+ * Checks if a date is a business day (not weekend AND not holiday)
15
+ */
16
+ declare function checkIsBusinessDay(definitions: HolidayDefinition[], date: Date): boolean;
17
+ /**
18
+ * Adds (or subtracts) business days to a date
19
+ */
20
+ declare function addBusinessDays(definitions: HolidayDefinition[], startDate: Date, amount: number): Date;
21
+
22
+ export { HolidayDefinition, addBusinessDays, checkIsBusinessDay, isWeekend };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,22 @@
1
1
  export { checkIsHoliday, findNextHoliday, resolveHolidays } from './core/engine.js';
2
+ import { HolidayDefinition } from './core/types.js';
3
+ export { Holiday, HolidayNames, HolidayRule, ShiftRule } from './core/types.js';
2
4
  export { getEasterSunday } from './core/algorithms/easter.js';
3
5
  export { getNthWeekday } from './core/algorithms/nth-weekday.js';
4
6
  export { applyShift } from './core/algorithms/shifts.js';
5
- export { Holiday, HolidayDefinition, HolidayNames, HolidayRule, ShiftRule } from './core/types.js';
7
+
8
+ /**
9
+ * Checks if a date is a weekend (Saturday or Sunday)
10
+ * Uses UTC date to avoid timezone issues
11
+ */
12
+ declare function isWeekend(date: Date): boolean;
13
+ /**
14
+ * Checks if a date is a business day (not weekend AND not holiday)
15
+ */
16
+ declare function checkIsBusinessDay(definitions: HolidayDefinition[], date: Date): boolean;
17
+ /**
18
+ * Adds (or subtracts) business days to a date
19
+ */
20
+ declare function addBusinessDays(definitions: HolidayDefinition[], startDate: Date, amount: number): Date;
21
+
22
+ export { HolidayDefinition, addBusinessDays, checkIsBusinessDay, isWeekend };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- function d(t){let n=t%19,o=Math.floor(t/100),e=t%100,a=Math.floor(o/4),i=o%4,s=Math.floor((o+8)/25),r=Math.floor((o-s+1)/3),l=(19*n+o-a-r+15)%30,p=Math.floor(e/4),T=e%4,c=(32+2*i+2*p-l-T)%7,h=Math.floor((n+11*l+22*c)/451),g=Math.floor((l+c-7*h+114)/31),C=(l+c-7*h+114)%31+1;return new Date(Date.UTC(t,g-1,C))}function y(t,n,o,e){if(e>0){let i=new Date(Date.UTC(t,n-1,1)).getUTCDay(),r=1+(o-i+7)%7+(e-1)*7;return new Date(Date.UTC(t,n-1,r))}else {let a=new Date(Date.UTC(t,n,0)),s=(a.getUTCDay()-o+7)%7,r=a.getUTCDate()-s+(e+1)*7;return new Date(Date.UTC(t,n-1,r))}}function u(t,n){let o=t.getUTCDay();if(n==="none")return {date:t,shifted:false};let e=new Date(t);switch(n){case "emiliani":case "nextMonday":{if(o===1)return {date:t,shifted:false};let a=(8-o)%7;e.setUTCDate(t.getUTCDate()+a);break}case "observedUS":if(o===0)e.setUTCDate(t.getUTCDate()+1);else if(o===6)e.setUTCDate(t.getUTCDate()-1);else return {date:t,shifted:false};break;case "nearestMonday":if(o===2)e.setUTCDate(t.getUTCDate()-1);else if(o===3)e.setUTCDate(t.getUTCDate()-2);else if(o===4)e.setUTCDate(t.getUTCDate()+4);else if(o===5)e.setUTCDate(t.getUTCDate()+3);else return {date:t,shifted:false};break;default:return {date:t,shifted:false}}return {date:e,shifted:true}}function U(t,n){switch(t.type){case "fixed":return new Date(Date.UTC(n,t.month-1,t.day));case "nthWeekday":return y(n,t.month,t.weekday,t.n);case "easterRelative":{let o=d(n),e=new Date(o);return e.setUTCDate(o.getUTCDate()+t.offset),e}case "custom":return t.calc(n)}}function D(t){return t.toISOString().split("T")[0]}function f(t,n,o={}){return t.map(e=>{let a=U(e.rule,n);if(!a)return null;let{date:i,shifted:s}=u(a,e.shift??"none");return {date:D(i),key:e.key,name:o[e.key]??e.key,...s&&{isShifted:true}}}).filter(e=>e!==null).sort((e,a)=>e.date.localeCompare(a.date))}function m(t,n,o){let e=n.getUTCFullYear(),a=D(n);return f(t,e,o).find(s=>s.date===a)??null}function H(t,n,o){let e=D(n),a=n.getUTCFullYear(),i=f(t,a,o),s=i.find(r=>r.date>=e);return s||(i=f(t,a+1,o),s=i[0]),s??null}export{u as applyShift,m as checkIsHoliday,H as findNextHoliday,d as getEasterSunday,y as getNthWeekday,f as resolveHolidays};//# sourceMappingURL=index.js.map
1
+ function d(e){let o=e%19,n=Math.floor(e/100),t=e%100,a=Math.floor(n/4),s=n%4,i=Math.floor((n+8)/25),r=Math.floor((n-i+1)/3),l=(19*o+n-a-r+15)%30,g=Math.floor(t/4),C=t%4,c=(32+2*s+2*g-l-C)%7,p=Math.floor((o+11*l+22*c)/451),U=Math.floor((l+c-7*p+114)/31),H=(l+c-7*p+114)%31+1;return new Date(Date.UTC(e,U-1,H))}function u(e,o,n,t){if(t>0){let s=new Date(Date.UTC(e,o-1,1)).getUTCDay(),r=1+(n-s+7)%7+(t-1)*7;return new Date(Date.UTC(e,o-1,r))}else {let a=new Date(Date.UTC(e,o,0)),i=(a.getUTCDay()-n+7)%7,r=a.getUTCDate()-i+(t+1)*7;return new Date(Date.UTC(e,o-1,r))}}function y(e,o){let n=e.getUTCDay();if(o==="none")return {date:e,shifted:false};let t=new Date(e);switch(o){case "emiliani":case "nextMonday":{if(n===1)return {date:e,shifted:false};let a=(8-n)%7;t.setUTCDate(e.getUTCDate()+a);break}case "observedUS":if(n===0)t.setUTCDate(e.getUTCDate()+1);else if(n===6)t.setUTCDate(e.getUTCDate()-1);else return {date:e,shifted:false};break;case "nearestMonday":if(n===2)t.setUTCDate(e.getUTCDate()-1);else if(n===3)t.setUTCDate(e.getUTCDate()-2);else if(n===4)t.setUTCDate(e.getUTCDate()+4);else if(n===5)t.setUTCDate(e.getUTCDate()+3);else return {date:e,shifted:false};break;default:return {date:e,shifted:false}}return {date:t,shifted:true}}function k(e,o){switch(e.type){case "fixed":return new Date(Date.UTC(o,e.month-1,e.day));case "nthWeekday":return u(o,e.month,e.weekday,e.n);case "easterRelative":{let n=d(o),t=new Date(n);return t.setUTCDate(n.getUTCDate()+e.offset),t}case "custom":return e.calc(o)}}function D(e){return e.toISOString().split("T")[0]}function f(e,o,n={}){return e.map(t=>{let a=k(t.rule,o);if(!a)return null;let{date:s,shifted:i}=y(a,t.shift??"none");return {date:D(s),key:t.key,name:n[t.key]??t.key,...i&&{isShifted:true}}}).filter(t=>t!==null).sort((t,a)=>t.date.localeCompare(a.date))}function h(e,o,n){let t=o.getUTCFullYear(),a=D(o);return f(e,t,n).find(i=>i.date===a)??null}function x(e,o,n){let t=D(o),a=o.getUTCFullYear(),s=f(e,a,n),i=s.find(r=>r.date>=t);return i||(s=f(e,a+1,n),i=s[0]),i??null}function m(e){let o=e.getUTCDay();return o===0||o===6}function T(e,o){return m(o)?false:h(e,o)===null}function b(e,o,n){let t=new Date(o),a=Math.abs(n),s=n>=0?1:-1;for(;a>0;)t.setUTCDate(t.getUTCDate()+s),T(e,t)&&a--;return t}export{b as addBusinessDays,y as applyShift,T as checkIsBusinessDay,h as checkIsHoliday,x as findNextHoliday,d as getEasterSunday,u as getNthWeekday,m as isWeekend,f as resolveHolidays};//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/algorithms/easter.ts","../src/core/algorithms/nth-weekday.ts","../src/core/algorithms/shifts.ts","../src/core/engine.ts"],"names":["getEasterSunday","year","a","b","c","d","e","f","g","h","i","k","l","m","month","day","getNthWeekday","weekday","n","firstWeekday","last","diff","applyShift","date","rule","result","daysToNextMonday","resolveRule","easter","toISODate","resolveHolidays","definitions","names","def","rawDate","shifted","checkIsHoliday","isoDate","findNextHoliday","from","isoFrom","holidays","next"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Calculates Easter Sunday (Meeus/Jones/Butcher algorithm)\n * Valid for Gregorian calendar (1583+)\n */\nexport function getEasterSunday(year: number): Date {\n const a = year % 19;\n const b = Math.floor(year / 100);\n const c = year % 100;\n const d = Math.floor(b / 4);\n const e = b % 4;\n const f = Math.floor((b + 8) / 25);\n const g = Math.floor((b - f + 1) / 3);\n const h = (19 * a + b - d - g + 15) % 30;\n const i = Math.floor(c / 4);\n const k = c % 4;\n const l = (32 + 2 * e + 2 * i - h - k) % 7;\n const m = Math.floor((a + 11 * h + 22 * l) / 451);\n const month = Math.floor((h + l - 7 * m + 114) / 31);\n const day = ((h + l - 7 * m + 114) % 31) + 1;\n\n return new Date(Date.UTC(year, month - 1, day));\n}\n","/**\n * Calculates the Nth weekday of a month\n * @param year - Year\n * @param month - Month (1-12)\n * @param weekday - Weekday (0=Sun, 1=Mon, ..., 6=Sat)\n * @param n - Occurrence (1=first, 2=second, -1=last)\n */\nexport function getNthWeekday(year: number, month: number, weekday: number, n: number): Date {\n if (n > 0) {\n // From start of month\n const first = new Date(Date.UTC(year, month - 1, 1));\n const firstWeekday = first.getUTCDay();\n const diff = (weekday - firstWeekday + 7) % 7;\n const day = 1 + diff + (n - 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n } else {\n // From end of month (n = -1 = last)\n // month is 1-12. Date.UTC(year, month, 0) gives the last day of month 'month'\n const last = new Date(Date.UTC(year, month, 0));\n const lastWeekday = last.getUTCDay();\n const diff = (lastWeekday - weekday + 7) % 7;\n const day = last.getUTCDate() - diff + (n + 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n }\n}\n","import type { ShiftRule } from '../types';\n\n/**\n * Applies a shift rule to a date\n * @returns { date: Date, shifted: boolean }\n */\nexport function applyShift(date: Date, rule: ShiftRule): { date: Date; shifted: boolean } {\n const day = date.getUTCDay(); // 0=Sun, 6=Sat\n\n if (rule === 'none') {\n return { date, shifted: false };\n }\n\n const result = new Date(date);\n\n switch (rule) {\n case 'emiliani':\n case 'nextMonday': {\n // If it's already Monday (1), do not move\n if (day === 1) {\n return { date, shifted: false };\n }\n // Move to next Monday\n // (8 - day) % 7 gives days until next Monday\n // Ex: Sun(0) -> (8-0)%7 = 1 (+1 day) -> Mon\n // Ex: Sat(6) -> (8-6)%7 = 2 (+2 days) -> Mon\n // Ex: Wed(3) -> (8-3)%7 = 5 (+5 days) -> Mon\n const daysToNextMonday = (8 - day) % 7;\n result.setUTCDate(date.getUTCDate() + daysToNextMonday);\n break;\n }\n\n case 'observedUS':\n // Only affects weekends\n if (day === 0) {\n // Sunday -> Monday (+1)\n result.setUTCDate(date.getUTCDate() + 1);\n } else if (day === 6) {\n // Saturday -> Friday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else {\n return { date, shifted: false };\n }\n break;\n\n case 'nearestMonday':\n // Argentina rule:\n // Tue/Wed -> Previous Monday\n // Thu/Fri -> Next Monday\n if (day === 2) {\n // Tuesday -> Monday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else if (day === 3) {\n // Wednesday -> Monday (-2)\n result.setUTCDate(date.getUTCDate() - 2);\n } else if (day === 4) {\n // Thursday -> Next Monday (+4)\n result.setUTCDate(date.getUTCDate() + 4);\n } else if (day === 5) {\n // Friday -> Next Monday (+3)\n result.setUTCDate(date.getUTCDate() + 3);\n } else {\n return { date, shifted: false };\n }\n break;\n\n default:\n return { date, shifted: false };\n }\n\n return { date: result, shifted: true };\n}\n","import type { HolidayDefinition, HolidayRule, Holiday } from './types';\nimport { getEasterSunday } from './algorithms/easter';\nimport { getNthWeekday } from './algorithms/nth-weekday';\nimport { applyShift } from './algorithms/shifts';\n\n/** Resolves a rule to a concrete date */\nfunction resolveRule(rule: HolidayRule, year: number): Date | null {\n switch (rule.type) {\n case 'fixed':\n return new Date(Date.UTC(year, rule.month - 1, rule.day));\n\n case 'nthWeekday':\n return getNthWeekday(year, rule.month, rule.weekday, rule.n);\n\n case 'easterRelative': {\n const easter = getEasterSunday(year);\n const result = new Date(easter);\n result.setUTCDate(easter.getUTCDate() + rule.offset);\n return result;\n }\n\n case 'custom':\n return rule.calc(year);\n }\n}\n\n/** Formats Date to ISO string (date only) */\nfunction toISODate(date: Date): string {\n return date.toISOString().split('T')[0];\n}\n\n/** Generates holidays for a year */\nexport function resolveHolidays(\n definitions: HolidayDefinition[],\n year: number,\n names: Record<string, string> = {},\n): Holiday[] {\n return definitions\n .map((def) => {\n const rawDate = resolveRule(def.rule, year);\n if (!rawDate) return null;\n\n const { date, shifted } = applyShift(rawDate, def.shift ?? 'none');\n\n return {\n date: toISODate(date),\n key: def.key,\n name: names[def.key] ?? def.key,\n ...(shifted && { isShifted: true }),\n };\n })\n .filter((h): h is Holiday => h !== null)\n .sort((a, b) => a.date.localeCompare(b.date));\n}\n\n/** Checks if a date is a holiday */\nexport function checkIsHoliday(\n definitions: HolidayDefinition[],\n date: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const year = date.getUTCFullYear();\n const isoDate = toISODate(date);\n const holidays = resolveHolidays(definitions, year, names);\n return holidays.find((h) => h.date === isoDate) ?? null;\n}\n\n/** Gets the next holiday from a date */\nexport function findNextHoliday(\n definitions: HolidayDefinition[],\n from: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const isoFrom = toISODate(from);\n const year = from.getUTCFullYear();\n\n // Search in current year\n let holidays = resolveHolidays(definitions, year, names);\n let next = holidays.find((h) => h.date >= isoFrom);\n\n // If none, search in next year\n if (!next) {\n holidays = resolveHolidays(definitions, year + 1, names);\n next = holidays[0];\n }\n\n return next ?? null;\n}\n"]}
1
+ {"version":3,"sources":["../src/core/algorithms/easter.ts","../src/core/algorithms/nth-weekday.ts","../src/core/algorithms/shifts.ts","../src/core/engine.ts","../src/core/business.ts"],"names":["getEasterSunday","year","a","b","c","d","e","f","g","h","i","k","l","m","month","day","getNthWeekday","weekday","n","firstWeekday","last","diff","applyShift","date","rule","result","daysToNextMonday","resolveRule","easter","toISODate","resolveHolidays","definitions","names","def","rawDate","shifted","checkIsHoliday","isoDate","findNextHoliday","from","isoFrom","holidays","next","isWeekend","checkIsBusinessDay","addBusinessDays","startDate","amount","remaining","direction"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Calculates Easter Sunday (Meeus/Jones/Butcher algorithm)\n * Valid for Gregorian calendar (1583+)\n */\nexport function getEasterSunday(year: number): Date {\n const a = year % 19;\n const b = Math.floor(year / 100);\n const c = year % 100;\n const d = Math.floor(b / 4);\n const e = b % 4;\n const f = Math.floor((b + 8) / 25);\n const g = Math.floor((b - f + 1) / 3);\n const h = (19 * a + b - d - g + 15) % 30;\n const i = Math.floor(c / 4);\n const k = c % 4;\n const l = (32 + 2 * e + 2 * i - h - k) % 7;\n const m = Math.floor((a + 11 * h + 22 * l) / 451);\n const month = Math.floor((h + l - 7 * m + 114) / 31);\n const day = ((h + l - 7 * m + 114) % 31) + 1;\n\n return new Date(Date.UTC(year, month - 1, day));\n}\n","/**\n * Calculates the Nth weekday of a month\n * @param year - Year\n * @param month - Month (1-12)\n * @param weekday - Weekday (0=Sun, 1=Mon, ..., 6=Sat)\n * @param n - Occurrence (1=first, 2=second, -1=last)\n */\nexport function getNthWeekday(year: number, month: number, weekday: number, n: number): Date {\n if (n > 0) {\n // From start of month\n const first = new Date(Date.UTC(year, month - 1, 1));\n const firstWeekday = first.getUTCDay();\n const diff = (weekday - firstWeekday + 7) % 7;\n const day = 1 + diff + (n - 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n } else {\n // From end of month (n = -1 = last)\n // month is 1-12. Date.UTC(year, month, 0) gives the last day of month 'month'\n const last = new Date(Date.UTC(year, month, 0));\n const lastWeekday = last.getUTCDay();\n const diff = (lastWeekday - weekday + 7) % 7;\n const day = last.getUTCDate() - diff + (n + 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n }\n}\n","import type { ShiftRule } from '../types';\n\n/**\n * Applies a shift rule to a date\n * @returns { date: Date, shifted: boolean }\n */\nexport function applyShift(date: Date, rule: ShiftRule): { date: Date; shifted: boolean } {\n const day = date.getUTCDay(); // 0=Sun, 6=Sat\n\n if (rule === 'none') {\n return { date, shifted: false };\n }\n\n const result = new Date(date);\n\n switch (rule) {\n case 'emiliani':\n case 'nextMonday': {\n // If it's already Monday (1), do not move\n if (day === 1) {\n return { date, shifted: false };\n }\n // Move to next Monday\n // (8 - day) % 7 gives days until next Monday\n // Ex: Sun(0) -> (8-0)%7 = 1 (+1 day) -> Mon\n // Ex: Sat(6) -> (8-6)%7 = 2 (+2 days) -> Mon\n // Ex: Wed(3) -> (8-3)%7 = 5 (+5 days) -> Mon\n const daysToNextMonday = (8 - day) % 7;\n result.setUTCDate(date.getUTCDate() + daysToNextMonday);\n break;\n }\n\n case 'observedUS':\n // Only affects weekends\n if (day === 0) {\n // Sunday -> Monday (+1)\n result.setUTCDate(date.getUTCDate() + 1);\n } else if (day === 6) {\n // Saturday -> Friday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else {\n return { date, shifted: false };\n }\n break;\n\n case 'nearestMonday':\n // Argentina rule:\n // Tue/Wed -> Previous Monday\n // Thu/Fri -> Next Monday\n if (day === 2) {\n // Tuesday -> Monday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else if (day === 3) {\n // Wednesday -> Monday (-2)\n result.setUTCDate(date.getUTCDate() - 2);\n } else if (day === 4) {\n // Thursday -> Next Monday (+4)\n result.setUTCDate(date.getUTCDate() + 4);\n } else if (day === 5) {\n // Friday -> Next Monday (+3)\n result.setUTCDate(date.getUTCDate() + 3);\n } else {\n return { date, shifted: false };\n }\n break;\n\n default:\n return { date, shifted: false };\n }\n\n return { date: result, shifted: true };\n}\n","import type { HolidayDefinition, HolidayRule, Holiday } from './types';\nimport { getEasterSunday } from './algorithms/easter';\nimport { getNthWeekday } from './algorithms/nth-weekday';\nimport { applyShift } from './algorithms/shifts';\n\n/** Resolves a rule to a concrete date */\nfunction resolveRule(rule: HolidayRule, year: number): Date | null {\n switch (rule.type) {\n case 'fixed':\n return new Date(Date.UTC(year, rule.month - 1, rule.day));\n\n case 'nthWeekday':\n return getNthWeekday(year, rule.month, rule.weekday, rule.n);\n\n case 'easterRelative': {\n const easter = getEasterSunday(year);\n const result = new Date(easter);\n result.setUTCDate(easter.getUTCDate() + rule.offset);\n return result;\n }\n\n case 'custom':\n return rule.calc(year);\n }\n}\n\n/** Formats Date to ISO string (date only) */\nfunction toISODate(date: Date): string {\n return date.toISOString().split('T')[0];\n}\n\n/** Generates holidays for a year */\nexport function resolveHolidays(\n definitions: HolidayDefinition[],\n year: number,\n names: Record<string, string> = {},\n): Holiday[] {\n return definitions\n .map((def) => {\n const rawDate = resolveRule(def.rule, year);\n if (!rawDate) return null;\n\n const { date, shifted } = applyShift(rawDate, def.shift ?? 'none');\n\n return {\n date: toISODate(date),\n key: def.key,\n name: names[def.key] ?? def.key,\n ...(shifted && { isShifted: true }),\n };\n })\n .filter((h): h is Holiday => h !== null)\n .sort((a, b) => a.date.localeCompare(b.date));\n}\n\n/** Checks if a date is a holiday */\nexport function checkIsHoliday(\n definitions: HolidayDefinition[],\n date: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const year = date.getUTCFullYear();\n const isoDate = toISODate(date);\n const holidays = resolveHolidays(definitions, year, names);\n return holidays.find((h) => h.date === isoDate) ?? null;\n}\n\n/** Gets the next holiday from a date */\nexport function findNextHoliday(\n definitions: HolidayDefinition[],\n from: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const isoFrom = toISODate(from);\n const year = from.getUTCFullYear();\n\n // Search in current year\n let holidays = resolveHolidays(definitions, year, names);\n let next = holidays.find((h) => h.date >= isoFrom);\n\n // If none, search in next year\n if (!next) {\n holidays = resolveHolidays(definitions, year + 1, names);\n next = holidays[0];\n }\n\n return next ?? null;\n}\n","import type { HolidayDefinition } from './types';\nimport { checkIsHoliday } from './engine';\n\n/**\n * Checks if a date is a weekend (Saturday or Sunday)\n * Uses UTC date to avoid timezone issues\n */\nexport function isWeekend(date: Date): boolean {\n const day = date.getUTCDay();\n return day === 0 || day === 6; // 0 = Sunday, 6 = Saturday\n}\n\n/**\n * Checks if a date is a business day (not weekend AND not holiday)\n */\nexport function checkIsBusinessDay(definitions: HolidayDefinition[], date: Date): boolean {\n if (isWeekend(date)) return false;\n return checkIsHoliday(definitions, date) === null;\n}\n\n/**\n * Adds (or subtracts) business days to a date\n */\nexport function addBusinessDays(\n definitions: HolidayDefinition[],\n startDate: Date,\n amount: number,\n): Date {\n const result = new Date(startDate);\n let remaining = Math.abs(amount);\n const direction = amount >= 0 ? 1 : -1;\n\n while (remaining > 0) {\n result.setUTCDate(result.getUTCDate() + direction);\n if (checkIsBusinessDay(definitions, result)) {\n remaining--;\n }\n }\n\n return result;\n}\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';function m(e){let n=e%19,a=Math.floor(e/100),t=e%100,o=Math.floor(a/4),s=a%4,i=Math.floor((a+8)/25),r=Math.floor((a-i+1)/3),d=(19*n+a-o-r+15)%30,v=Math.floor(t/4),T=t%4,c=(32+2*s+2*v-d-T)%7,f=Math.floor((n+11*d+22*c)/451),H=Math.floor((d+c-7*f+114)/31),k=(d+c-7*f+114)%31+1;return new Date(Date.UTC(e,H-1,k))}function p(e,n,a,t){if(t>0){let s=new Date(Date.UTC(e,n-1,1)).getUTCDay(),r=1+(a-s+7)%7+(t-1)*7;return new Date(Date.UTC(e,n-1,r))}else {let o=new Date(Date.UTC(e,n,0)),i=(o.getUTCDay()-a+7)%7,r=o.getUTCDate()-i+(t+1)*7;return new Date(Date.UTC(e,n-1,r))}}function h(e,n){let a=e.getUTCDay();if(n==="none")return {date:e,shifted:false};let t=new Date(e);switch(n){case "emiliani":case "nextMonday":{if(a===1)return {date:e,shifted:false};let o=(8-a)%7;t.setUTCDate(e.getUTCDate()+o);break}case "observedUS":if(a===0)t.setUTCDate(e.getUTCDate()+1);else if(a===6)t.setUTCDate(e.getUTCDate()-1);else return {date:e,shifted:false};break;case "nearestMonday":if(a===2)t.setUTCDate(e.getUTCDate()-1);else if(a===3)t.setUTCDate(e.getUTCDate()-2);else if(a===4)t.setUTCDate(e.getUTCDate()+4);else if(a===5)t.setUTCDate(e.getUTCDate()+3);else return {date:e,shifted:false};break;default:return {date:e,shifted:false}}return {date:t,shifted:true}}function x(e,n){switch(e.type){case "fixed":return new Date(Date.UTC(n,e.month-1,e.day));case "nthWeekday":return p(n,e.month,e.weekday,e.n);case "easterRelative":{let a=m(n),t=new Date(a);return t.setUTCDate(a.getUTCDate()+e.offset),t}case "custom":return e.calc(n)}}function u(e){return e.toISOString().split("T")[0]}function l(e,n,a={}){return e.map(t=>{let o=x(t.rule,n);if(!o)return null;let{date:s,shifted:i}=h(o,t.shift??"none");return {date:u(s),key:t.key,name:a[t.key]??t.key,...i&&{isShifted:true}}}).filter(t=>t!==null).sort((t,o)=>t.date.localeCompare(o.date))}function g(e,n,a){let t=n.getUTCFullYear(),o=u(n);return l(e,t,a).find(i=>i.date===o)??null}function C(e,n,a){let t=u(n),o=n.getUTCFullYear(),s=l(e,o,a),i=s.find(r=>r.date>=t);return i||(s=l(e,o+1,a),i=s[0]),i??null}var y={newYear:"A\xF1o Nuevo",epiphany:"D\xEDa de los Reyes Magos",holyThursday:"Jueves Santo",goodFriday:"Viernes Santo",easterSunday:"Domingo de Pascua",laborDay:"D\xEDa del Trabajo",ascension:"Ascensi\xF3n del Se\xF1or",corpusChristi:"Corpus Christi",christmas:"Navidad",christmasEve:"Nochebuena",newYearsEve:"Nochevieja",allSaints:"D\xEDa de Todos los Santos",saintJoseph:"D\xEDa de San Jos\xE9",sacredHeart:"Sagrado Coraz\xF3n",saintPeterPaul:"San Pedro y San Pablo",independenceDay:"D\xEDa de la Independencia",boyacaBattle:"Batalla de Boyac\xE1",assumptionMary:"Asunci\xF3n de la Virgen",columbusDay:"D\xEDa de la Raza",independenceCartagena:"Independencia de Cartagena",immaculateConception:"Inmaculada Concepci\xF3n",constitutionDay:"D\xEDa de la Constituci\xF3n",benitoJuarez:"Natalicio de Benito Ju\xE1rez",revolutionDay:"D\xEDa de la Revoluci\xF3n",virginGuadalupe:"D\xEDa de la Virgen de Guadalupe",transmissionExecutive:"Transmisi\xF3n del Poder Ejecutivo Federal",carnivalMonday:"Lunes de Carnaval",carnivalTuesday:"Martes de Carnaval",memoryDay:"D\xEDa Nacional de la Memoria por la Verdad y la Justicia",malvinasDay:"D\xEDa del Veterano y de los Ca\xEDdos en la Guerra de Malvinas",mayRevolution:"D\xEDa de la Revoluci\xF3n de Mayo",guemesDay:"Paso a la Inmortalidad del Gral. Don Mart\xEDn Miguel de G\xFCemes",belgranoDay:"Paso a la Inmortalidad del Gral. Manuel Belgrano",sanMartinDay:"Paso a la Inmortalidad del Gral. Jos\xE9 de San Mart\xEDn",diversityDay:"D\xEDa del Respeto a la Diversidad Cultural",sovereigntyDay:"D\xEDa de la Soberan\xEDa Nacional",mlkDay:"D\xEDa de Martin Luther King Jr.",presidentsDay:"D\xEDa de los Presidentes",memorialDay:"D\xEDa de los Ca\xEDdos",independenceDayUS:"D\xEDa de la Independencia",thanksgivingDay:"D\xEDa de Acci\xF3n de Gracias",veteransDay:"D\xEDa de los Veteranos"};var D=[{key:"newYear",rule:{type:"fixed",month:1,day:1}},{key:"carnivalMonday",rule:{type:"easterRelative",offset:-48}},{key:"carnivalTuesday",rule:{type:"easterRelative",offset:-47}},{key:"memoryDay",rule:{type:"fixed",month:3,day:24}},{key:"malvinasDay",rule:{type:"fixed",month:4,day:2}},{key:"goodFriday",rule:{type:"easterRelative",offset:-2}},{key:"laborDay",rule:{type:"fixed",month:5,day:1}},{key:"mayRevolution",rule:{type:"fixed",month:5,day:25}},{key:"guemesDay",rule:{type:"fixed",month:6,day:17},shift:"nearestMonday"},{key:"belgranoDay",rule:{type:"fixed",month:6,day:20}},{key:"independenceDay",rule:{type:"fixed",month:7,day:9}},{key:"sanMartinDay",rule:{type:"fixed",month:8,day:17},shift:"nearestMonday"},{key:"diversityDay",rule:{type:"fixed",month:10,day:12},shift:"nearestMonday"},{key:"sovereigntyDay",rule:{type:"fixed",month:11,day:20},shift:"nearestMonday"},{key:"immaculateConception",rule:{type:"fixed",month:12,day:8}},{key:"christmas",rule:{type:"fixed",month:12,day:25}}];function J(e,n){let a=n?.lang??y;return l(D,e,a)}function E(e,n){let a=n?.lang??y;return g(D,e,a)}function F(e=new Date,n){let a=n?.lang??y;return C(D,e,a)}exports.getHolidays=J;exports.getNextHoliday=F;exports.isHoliday=E;//# sourceMappingURL=ar.cjs.map
1
+ 'use strict';function h(e){let a=e%19,n=Math.floor(e/100),t=e%100,o=Math.floor(n/4),i=n%4,s=Math.floor((n+8)/25),r=Math.floor((n-s+1)/3),y=(19*a+n-o-r+15)%30,k=Math.floor(t/4),v=t%4,D=(32+2*i+2*k-y-v)%7,p=Math.floor((a+11*y+22*D)/451),x=Math.floor((y+D-7*p+114)/31),U=(y+D-7*p+114)%31+1;return new Date(Date.UTC(e,x-1,U))}function g(e,a,n,t){if(t>0){let i=new Date(Date.UTC(e,a-1,1)).getUTCDay(),r=1+(n-i+7)%7+(t-1)*7;return new Date(Date.UTC(e,a-1,r))}else {let o=new Date(Date.UTC(e,a,0)),s=(o.getUTCDay()-n+7)%7,r=o.getUTCDate()-s+(t+1)*7;return new Date(Date.UTC(e,a-1,r))}}function C(e,a){let n=e.getUTCDay();if(a==="none")return {date:e,shifted:false};let t=new Date(e);switch(a){case "emiliani":case "nextMonday":{if(n===1)return {date:e,shifted:false};let o=(8-n)%7;t.setUTCDate(e.getUTCDate()+o);break}case "observedUS":if(n===0)t.setUTCDate(e.getUTCDate()+1);else if(n===6)t.setUTCDate(e.getUTCDate()-1);else return {date:e,shifted:false};break;case "nearestMonday":if(n===2)t.setUTCDate(e.getUTCDate()-1);else if(n===3)t.setUTCDate(e.getUTCDate()-2);else if(n===4)t.setUTCDate(e.getUTCDate()+4);else if(n===5)t.setUTCDate(e.getUTCDate()+3);else return {date:e,shifted:false};break;default:return {date:e,shifted:false}}return {date:t,shifted:true}}function b(e,a){switch(e.type){case "fixed":return new Date(Date.UTC(a,e.month-1,e.day));case "nthWeekday":return g(a,e.month,e.weekday,e.n);case "easterRelative":{let n=h(a),t=new Date(n);return t.setUTCDate(n.getUTCDate()+e.offset),t}case "custom":return e.calc(a)}}function f(e){return e.toISOString().split("T")[0]}function l(e,a,n={}){return e.map(t=>{let o=b(t.rule,a);if(!o)return null;let{date:i,shifted:s}=C(o,t.shift??"none");return {date:f(i),key:t.key,name:n[t.key]??t.key,...s&&{isShifted:true}}}).filter(t=>t!==null).sort((t,o)=>t.date.localeCompare(o.date))}function u(e,a,n){let t=a.getUTCFullYear(),o=f(a);return l(e,t,n).find(s=>s.date===o)??null}function H(e,a,n){let t=f(a),o=a.getUTCFullYear(),i=l(e,o,n),s=i.find(r=>r.date>=t);return s||(i=l(e,o+1,n),s=i[0]),s??null}function M(e){let a=e.getUTCDay();return a===0||a===6}function m(e,a){return M(a)?false:u(e,a)===null}function T(e,a,n){let t=new Date(a),o=Math.abs(n),i=n>=0?1:-1;for(;o>0;)t.setUTCDate(t.getUTCDate()+i),m(e,t)&&o--;return t}var c={newYear:"A\xF1o Nuevo",epiphany:"D\xEDa de los Reyes Magos",holyThursday:"Jueves Santo",goodFriday:"Viernes Santo",easterSunday:"Domingo de Pascua",laborDay:"D\xEDa del Trabajo",ascension:"Ascensi\xF3n del Se\xF1or",corpusChristi:"Corpus Christi",christmas:"Navidad",christmasEve:"Nochebuena",newYearsEve:"Nochevieja",allSaints:"D\xEDa de Todos los Santos",saintJoseph:"D\xEDa de San Jos\xE9",sacredHeart:"Sagrado Coraz\xF3n",saintPeterPaul:"San Pedro y San Pablo",independenceDay:"D\xEDa de la Independencia",boyacaBattle:"Batalla de Boyac\xE1",assumptionMary:"Asunci\xF3n de la Virgen",columbusDay:"D\xEDa de la Raza",independenceCartagena:"Independencia de Cartagena",immaculateConception:"Inmaculada Concepci\xF3n",constitutionDay:"D\xEDa de la Constituci\xF3n",benitoJuarez:"Natalicio de Benito Ju\xE1rez",revolutionDay:"D\xEDa de la Revoluci\xF3n",virginGuadalupe:"D\xEDa de la Virgen de Guadalupe",transmissionExecutive:"Transmisi\xF3n del Poder Ejecutivo Federal",carnivalMonday:"Lunes de Carnaval",carnivalTuesday:"Martes de Carnaval",memoryDay:"D\xEDa Nacional de la Memoria por la Verdad y la Justicia",malvinasDay:"D\xEDa del Veterano y de los Ca\xEDdos en la Guerra de Malvinas",mayRevolution:"D\xEDa de la Revoluci\xF3n de Mayo",guemesDay:"Paso a la Inmortalidad del Gral. Don Mart\xEDn Miguel de G\xFCemes",belgranoDay:"Paso a la Inmortalidad del Gral. Manuel Belgrano",sanMartinDay:"Paso a la Inmortalidad del Gral. Jos\xE9 de San Mart\xEDn",diversityDay:"D\xEDa del Respeto a la Diversidad Cultural",sovereigntyDay:"D\xEDa de la Soberan\xEDa Nacional",mlkDay:"D\xEDa de Martin Luther King Jr.",presidentsDay:"D\xEDa de los Presidentes",memorialDay:"D\xEDa de los Ca\xEDdos",independenceDayUS:"D\xEDa de la Independencia",thanksgivingDay:"D\xEDa de Acci\xF3n de Gracias",veteransDay:"D\xEDa de los Veteranos"};var d=[{key:"newYear",rule:{type:"fixed",month:1,day:1}},{key:"carnivalMonday",rule:{type:"easterRelative",offset:-48}},{key:"carnivalTuesday",rule:{type:"easterRelative",offset:-47}},{key:"memoryDay",rule:{type:"fixed",month:3,day:24}},{key:"malvinasDay",rule:{type:"fixed",month:4,day:2}},{key:"goodFriday",rule:{type:"easterRelative",offset:-2}},{key:"laborDay",rule:{type:"fixed",month:5,day:1}},{key:"mayRevolution",rule:{type:"fixed",month:5,day:25}},{key:"guemesDay",rule:{type:"fixed",month:6,day:17},shift:"nearestMonday"},{key:"belgranoDay",rule:{type:"fixed",month:6,day:20}},{key:"independenceDay",rule:{type:"fixed",month:7,day:9}},{key:"sanMartinDay",rule:{type:"fixed",month:8,day:17},shift:"nearestMonday"},{key:"diversityDay",rule:{type:"fixed",month:10,day:12},shift:"nearestMonday"},{key:"sovereigntyDay",rule:{type:"fixed",month:11,day:20},shift:"nearestMonday"},{key:"immaculateConception",rule:{type:"fixed",month:12,day:8}},{key:"christmas",rule:{type:"fixed",month:12,day:25}}];function V(e,a){let n=a?.lang??c;return l(d,e,n)}function Y(e,a){let n=a?.lang??c;return u(d,e,n)}function z(e=new Date,a){let n=a?.lang??c;return H(d,e,n)}function A(e){return m(d,e)}function j(e,a){return T(d,e,a)}exports.businessDays=j;exports.getHolidays=V;exports.getNextHoliday=z;exports.isBusinessDay=A;exports.isHoliday=Y;//# sourceMappingURL=ar.cjs.map
2
2
  //# sourceMappingURL=ar.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/algorithms/easter.ts","../../src/core/algorithms/nth-weekday.ts","../../src/core/algorithms/shifts.ts","../../src/core/engine.ts","../../src/i18n/es.ts","../../src/locales/ar.ts"],"names":["getEasterSunday","year","a","b","c","d","e","f","g","h","i","k","l","m","month","day","getNthWeekday","weekday","n","firstWeekday","last","diff","applyShift","date","rule","result","daysToNextMonday","resolveRule","easter","toISODate","resolveHolidays","definitions","names","def","rawDate","shifted","checkIsHoliday","isoDate","findNextHoliday","from","isoFrom","holidays","next","es","getHolidays","options","isHoliday","getNextHoliday"],"mappings":"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","file":"ar.cjs","sourcesContent":["/**\n * Calculates Easter Sunday (Meeus/Jones/Butcher algorithm)\n * Valid for Gregorian calendar (1583+)\n */\nexport function getEasterSunday(year: number): Date {\n const a = year % 19;\n const b = Math.floor(year / 100);\n const c = year % 100;\n const d = Math.floor(b / 4);\n const e = b % 4;\n const f = Math.floor((b + 8) / 25);\n const g = Math.floor((b - f + 1) / 3);\n const h = (19 * a + b - d - g + 15) % 30;\n const i = Math.floor(c / 4);\n const k = c % 4;\n const l = (32 + 2 * e + 2 * i - h - k) % 7;\n const m = Math.floor((a + 11 * h + 22 * l) / 451);\n const month = Math.floor((h + l - 7 * m + 114) / 31);\n const day = ((h + l - 7 * m + 114) % 31) + 1;\n\n return new Date(Date.UTC(year, month - 1, day));\n}\n","/**\n * Calculates the Nth weekday of a month\n * @param year - Year\n * @param month - Month (1-12)\n * @param weekday - Weekday (0=Sun, 1=Mon, ..., 6=Sat)\n * @param n - Occurrence (1=first, 2=second, -1=last)\n */\nexport function getNthWeekday(year: number, month: number, weekday: number, n: number): Date {\n if (n > 0) {\n // From start of month\n const first = new Date(Date.UTC(year, month - 1, 1));\n const firstWeekday = first.getUTCDay();\n const diff = (weekday - firstWeekday + 7) % 7;\n const day = 1 + diff + (n - 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n } else {\n // From end of month (n = -1 = last)\n // month is 1-12. Date.UTC(year, month, 0) gives the last day of month 'month'\n const last = new Date(Date.UTC(year, month, 0));\n const lastWeekday = last.getUTCDay();\n const diff = (lastWeekday - weekday + 7) % 7;\n const day = last.getUTCDate() - diff + (n + 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n }\n}\n","import type { ShiftRule } from '../types';\n\n/**\n * Applies a shift rule to a date\n * @returns { date: Date, shifted: boolean }\n */\nexport function applyShift(date: Date, rule: ShiftRule): { date: Date; shifted: boolean } {\n const day = date.getUTCDay(); // 0=Sun, 6=Sat\n\n if (rule === 'none') {\n return { date, shifted: false };\n }\n\n const result = new Date(date);\n\n switch (rule) {\n case 'emiliani':\n case 'nextMonday': {\n // If it's already Monday (1), do not move\n if (day === 1) {\n return { date, shifted: false };\n }\n // Move to next Monday\n // (8 - day) % 7 gives days until next Monday\n // Ex: Sun(0) -> (8-0)%7 = 1 (+1 day) -> Mon\n // Ex: Sat(6) -> (8-6)%7 = 2 (+2 days) -> Mon\n // Ex: Wed(3) -> (8-3)%7 = 5 (+5 days) -> Mon\n const daysToNextMonday = (8 - day) % 7;\n result.setUTCDate(date.getUTCDate() + daysToNextMonday);\n break;\n }\n\n case 'observedUS':\n // Only affects weekends\n if (day === 0) {\n // Sunday -> Monday (+1)\n result.setUTCDate(date.getUTCDate() + 1);\n } else if (day === 6) {\n // Saturday -> Friday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else {\n return { date, shifted: false };\n }\n break;\n\n case 'nearestMonday':\n // Argentina rule:\n // Tue/Wed -> Previous Monday\n // Thu/Fri -> Next Monday\n if (day === 2) {\n // Tuesday -> Monday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else if (day === 3) {\n // Wednesday -> Monday (-2)\n result.setUTCDate(date.getUTCDate() - 2);\n } else if (day === 4) {\n // Thursday -> Next Monday (+4)\n result.setUTCDate(date.getUTCDate() + 4);\n } else if (day === 5) {\n // Friday -> Next Monday (+3)\n result.setUTCDate(date.getUTCDate() + 3);\n } else {\n return { date, shifted: false };\n }\n break;\n\n default:\n return { date, shifted: false };\n }\n\n return { date: result, shifted: true };\n}\n","import type { HolidayDefinition, HolidayRule, Holiday } from './types';\nimport { getEasterSunday } from './algorithms/easter';\nimport { getNthWeekday } from './algorithms/nth-weekday';\nimport { applyShift } from './algorithms/shifts';\n\n/** Resolves a rule to a concrete date */\nfunction resolveRule(rule: HolidayRule, year: number): Date | null {\n switch (rule.type) {\n case 'fixed':\n return new Date(Date.UTC(year, rule.month - 1, rule.day));\n\n case 'nthWeekday':\n return getNthWeekday(year, rule.month, rule.weekday, rule.n);\n\n case 'easterRelative': {\n const easter = getEasterSunday(year);\n const result = new Date(easter);\n result.setUTCDate(easter.getUTCDate() + rule.offset);\n return result;\n }\n\n case 'custom':\n return rule.calc(year);\n }\n}\n\n/** Formats Date to ISO string (date only) */\nfunction toISODate(date: Date): string {\n return date.toISOString().split('T')[0];\n}\n\n/** Generates holidays for a year */\nexport function resolveHolidays(\n definitions: HolidayDefinition[],\n year: number,\n names: Record<string, string> = {},\n): Holiday[] {\n return definitions\n .map((def) => {\n const rawDate = resolveRule(def.rule, year);\n if (!rawDate) return null;\n\n const { date, shifted } = applyShift(rawDate, def.shift ?? 'none');\n\n return {\n date: toISODate(date),\n key: def.key,\n name: names[def.key] ?? def.key,\n ...(shifted && { isShifted: true }),\n };\n })\n .filter((h): h is Holiday => h !== null)\n .sort((a, b) => a.date.localeCompare(b.date));\n}\n\n/** Checks if a date is a holiday */\nexport function checkIsHoliday(\n definitions: HolidayDefinition[],\n date: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const year = date.getUTCFullYear();\n const isoDate = toISODate(date);\n const holidays = resolveHolidays(definitions, year, names);\n return holidays.find((h) => h.date === isoDate) ?? null;\n}\n\n/** Gets the next holiday from a date */\nexport function findNextHoliday(\n definitions: HolidayDefinition[],\n from: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const isoFrom = toISODate(from);\n const year = from.getUTCFullYear();\n\n // Search in current year\n let holidays = resolveHolidays(definitions, year, names);\n let next = holidays.find((h) => h.date >= isoFrom);\n\n // If none, search in next year\n if (!next) {\n holidays = resolveHolidays(definitions, year + 1, names);\n next = holidays[0];\n }\n\n return next ?? null;\n}\n","import type { HolidayNames } from '../core/types';\n\nexport const es: HolidayNames = {\n // Comunes\n newYear: 'Año Nuevo',\n epiphany: 'Día de los Reyes Magos',\n holyThursday: 'Jueves Santo',\n goodFriday: 'Viernes Santo',\n easterSunday: 'Domingo de Pascua',\n laborDay: 'Día del Trabajo',\n ascension: 'Ascensión del Señor',\n corpusChristi: 'Corpus Christi',\n christmas: 'Navidad',\n christmasEve: 'Nochebuena',\n newYearsEve: 'Nochevieja',\n allSaints: 'Día de Todos los Santos',\n\n // Colombia\n saintJoseph: 'Día de San José',\n sacredHeart: 'Sagrado Corazón',\n saintPeterPaul: 'San Pedro y San Pablo',\n independenceDay: 'Día de la Independencia',\n boyacaBattle: 'Batalla de Boyacá',\n assumptionMary: 'Asunción de la Virgen',\n columbusDay: 'Día de la Raza',\n independenceCartagena: 'Independencia de Cartagena',\n immaculateConception: 'Inmaculada Concepción',\n\n // México\n constitutionDay: 'Día de la Constitución',\n benitoJuarez: 'Natalicio de Benito Juárez',\n revolutionDay: 'Día de la Revolución',\n virginGuadalupe: 'Día de la Virgen de Guadalupe',\n transmissionExecutive: 'Transmisión del Poder Ejecutivo Federal',\n\n // Argentina\n carnivalMonday: 'Lunes de Carnaval',\n carnivalTuesday: 'Martes de Carnaval',\n memoryDay: 'Día Nacional de la Memoria por la Verdad y la Justicia',\n malvinasDay: 'Día del Veterano y de los Caídos en la Guerra de Malvinas',\n mayRevolution: 'Día de la Revolución de Mayo',\n guemesDay: 'Paso a la Inmortalidad del Gral. Don Martín Miguel de Güemes',\n belgranoDay: 'Paso a la Inmortalidad del Gral. Manuel Belgrano',\n sanMartinDay: 'Paso a la Inmortalidad del Gral. José de San Martín',\n diversityDay: 'Día del Respeto a la Diversidad Cultural',\n sovereigntyDay: 'Día de la Soberanía Nacional',\n\n // USA\n mlkDay: 'Día de Martin Luther King Jr.',\n presidentsDay: 'Día de los Presidentes',\n memorialDay: 'Día de los Caídos',\n independenceDayUS: 'Día de la Independencia',\n thanksgivingDay: 'Día de Acción de Gracias',\n veteransDay: 'Día de los Veteranos',\n};\n","import type { HolidayDefinition, Holiday, HolidayNames } from '../core/types';\nimport { resolveHolidays, checkIsHoliday, findNextHoliday } from '../core/engine';\nimport { es } from '../i18n/es';\n\nconst definitions: HolidayDefinition[] = [\n { key: 'newYear', rule: { type: 'fixed', month: 1, day: 1 } },\n { key: 'carnivalMonday', rule: { type: 'easterRelative', offset: -48 } },\n { key: 'carnivalTuesday', rule: { type: 'easterRelative', offset: -47 } },\n { key: 'memoryDay', rule: { type: 'fixed', month: 3, day: 24 } },\n { key: 'malvinasDay', rule: { type: 'fixed', month: 4, day: 2 } },\n { key: 'goodFriday', rule: { type: 'easterRelative', offset: -2 } },\n { key: 'laborDay', rule: { type: 'fixed', month: 5, day: 1 } },\n { key: 'mayRevolution', rule: { type: 'fixed', month: 5, day: 25 } },\n {\n key: 'guemesDay',\n rule: { type: 'fixed', month: 6, day: 17 },\n shift: 'nearestMonday',\n },\n { key: 'belgranoDay', rule: { type: 'fixed', month: 6, day: 20 } },\n { key: 'independenceDay', rule: { type: 'fixed', month: 7, day: 9 } },\n {\n key: 'sanMartinDay',\n rule: { type: 'fixed', month: 8, day: 17 },\n shift: 'nearestMonday',\n },\n {\n key: 'diversityDay',\n rule: { type: 'fixed', month: 10, day: 12 },\n shift: 'nearestMonday',\n },\n {\n key: 'sovereigntyDay',\n rule: { type: 'fixed', month: 11, day: 20 },\n shift: 'nearestMonday',\n },\n { key: 'immaculateConception', rule: { type: 'fixed', month: 12, day: 8 } },\n { key: 'christmas', rule: { type: 'fixed', month: 12, day: 25 } },\n];\n\nexport interface GetHolidaysOptions {\n lang?: HolidayNames;\n}\n\nexport function getHolidays(year: number, options?: GetHolidaysOptions): Holiday[] {\n const names = options?.lang ?? es;\n return resolveHolidays(definitions, year, names);\n}\n\nexport function isHoliday(date: Date, options?: GetHolidaysOptions): Holiday | null {\n const names = options?.lang ?? es;\n return checkIsHoliday(definitions, date, names);\n}\n\nexport function getNextHoliday(\n from: Date = new Date(),\n options?: GetHolidaysOptions,\n): Holiday | null {\n const names = options?.lang ?? es;\n return findNextHoliday(definitions, from, names);\n}\n"]}
1
+ {"version":3,"sources":["../../src/core/algorithms/easter.ts","../../src/core/algorithms/nth-weekday.ts","../../src/core/algorithms/shifts.ts","../../src/core/engine.ts","../../src/core/business.ts","../../src/i18n/es.ts","../../src/locales/ar.ts"],"names":["getEasterSunday","year","b","c","d","e","f","g","h","i","k","l","m","month","day","getNthWeekday","weekday","n","firstWeekday","last","diff","applyShift","date","rule","result","daysToNextMonday","resolveRule","easter","toISODate","resolveHolidays","definitions","names","def","rawDate","shifted","a","checkIsHoliday","isoDate","findNextHoliday","from","isoFrom","holidays","next","isWeekend","checkIsBusinessDay","addBusinessDays","startDate","amount","remaining","direction","es","getHolidays","options","isHoliday","getNextHoliday","isBusinessDay","businessDays"],"mappings":"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","file":"ar.cjs","sourcesContent":["/**\n * Calculates Easter Sunday (Meeus/Jones/Butcher algorithm)\n * Valid for Gregorian calendar (1583+)\n */\nexport function getEasterSunday(year: number): Date {\n const a = year % 19;\n const b = Math.floor(year / 100);\n const c = year % 100;\n const d = Math.floor(b / 4);\n const e = b % 4;\n const f = Math.floor((b + 8) / 25);\n const g = Math.floor((b - f + 1) / 3);\n const h = (19 * a + b - d - g + 15) % 30;\n const i = Math.floor(c / 4);\n const k = c % 4;\n const l = (32 + 2 * e + 2 * i - h - k) % 7;\n const m = Math.floor((a + 11 * h + 22 * l) / 451);\n const month = Math.floor((h + l - 7 * m + 114) / 31);\n const day = ((h + l - 7 * m + 114) % 31) + 1;\n\n return new Date(Date.UTC(year, month - 1, day));\n}\n","/**\n * Calculates the Nth weekday of a month\n * @param year - Year\n * @param month - Month (1-12)\n * @param weekday - Weekday (0=Sun, 1=Mon, ..., 6=Sat)\n * @param n - Occurrence (1=first, 2=second, -1=last)\n */\nexport function getNthWeekday(year: number, month: number, weekday: number, n: number): Date {\n if (n > 0) {\n // From start of month\n const first = new Date(Date.UTC(year, month - 1, 1));\n const firstWeekday = first.getUTCDay();\n const diff = (weekday - firstWeekday + 7) % 7;\n const day = 1 + diff + (n - 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n } else {\n // From end of month (n = -1 = last)\n // month is 1-12. Date.UTC(year, month, 0) gives the last day of month 'month'\n const last = new Date(Date.UTC(year, month, 0));\n const lastWeekday = last.getUTCDay();\n const diff = (lastWeekday - weekday + 7) % 7;\n const day = last.getUTCDate() - diff + (n + 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n }\n}\n","import type { ShiftRule } from '../types';\n\n/**\n * Applies a shift rule to a date\n * @returns { date: Date, shifted: boolean }\n */\nexport function applyShift(date: Date, rule: ShiftRule): { date: Date; shifted: boolean } {\n const day = date.getUTCDay(); // 0=Sun, 6=Sat\n\n if (rule === 'none') {\n return { date, shifted: false };\n }\n\n const result = new Date(date);\n\n switch (rule) {\n case 'emiliani':\n case 'nextMonday': {\n // If it's already Monday (1), do not move\n if (day === 1) {\n return { date, shifted: false };\n }\n // Move to next Monday\n // (8 - day) % 7 gives days until next Monday\n // Ex: Sun(0) -> (8-0)%7 = 1 (+1 day) -> Mon\n // Ex: Sat(6) -> (8-6)%7 = 2 (+2 days) -> Mon\n // Ex: Wed(3) -> (8-3)%7 = 5 (+5 days) -> Mon\n const daysToNextMonday = (8 - day) % 7;\n result.setUTCDate(date.getUTCDate() + daysToNextMonday);\n break;\n }\n\n case 'observedUS':\n // Only affects weekends\n if (day === 0) {\n // Sunday -> Monday (+1)\n result.setUTCDate(date.getUTCDate() + 1);\n } else if (day === 6) {\n // Saturday -> Friday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else {\n return { date, shifted: false };\n }\n break;\n\n case 'nearestMonday':\n // Argentina rule:\n // Tue/Wed -> Previous Monday\n // Thu/Fri -> Next Monday\n if (day === 2) {\n // Tuesday -> Monday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else if (day === 3) {\n // Wednesday -> Monday (-2)\n result.setUTCDate(date.getUTCDate() - 2);\n } else if (day === 4) {\n // Thursday -> Next Monday (+4)\n result.setUTCDate(date.getUTCDate() + 4);\n } else if (day === 5) {\n // Friday -> Next Monday (+3)\n result.setUTCDate(date.getUTCDate() + 3);\n } else {\n return { date, shifted: false };\n }\n break;\n\n default:\n return { date, shifted: false };\n }\n\n return { date: result, shifted: true };\n}\n","import type { HolidayDefinition, HolidayRule, Holiday } from './types';\nimport { getEasterSunday } from './algorithms/easter';\nimport { getNthWeekday } from './algorithms/nth-weekday';\nimport { applyShift } from './algorithms/shifts';\n\n/** Resolves a rule to a concrete date */\nfunction resolveRule(rule: HolidayRule, year: number): Date | null {\n switch (rule.type) {\n case 'fixed':\n return new Date(Date.UTC(year, rule.month - 1, rule.day));\n\n case 'nthWeekday':\n return getNthWeekday(year, rule.month, rule.weekday, rule.n);\n\n case 'easterRelative': {\n const easter = getEasterSunday(year);\n const result = new Date(easter);\n result.setUTCDate(easter.getUTCDate() + rule.offset);\n return result;\n }\n\n case 'custom':\n return rule.calc(year);\n }\n}\n\n/** Formats Date to ISO string (date only) */\nfunction toISODate(date: Date): string {\n return date.toISOString().split('T')[0];\n}\n\n/** Generates holidays for a year */\nexport function resolveHolidays(\n definitions: HolidayDefinition[],\n year: number,\n names: Record<string, string> = {},\n): Holiday[] {\n return definitions\n .map((def) => {\n const rawDate = resolveRule(def.rule, year);\n if (!rawDate) return null;\n\n const { date, shifted } = applyShift(rawDate, def.shift ?? 'none');\n\n return {\n date: toISODate(date),\n key: def.key,\n name: names[def.key] ?? def.key,\n ...(shifted && { isShifted: true }),\n };\n })\n .filter((h): h is Holiday => h !== null)\n .sort((a, b) => a.date.localeCompare(b.date));\n}\n\n/** Checks if a date is a holiday */\nexport function checkIsHoliday(\n definitions: HolidayDefinition[],\n date: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const year = date.getUTCFullYear();\n const isoDate = toISODate(date);\n const holidays = resolveHolidays(definitions, year, names);\n return holidays.find((h) => h.date === isoDate) ?? null;\n}\n\n/** Gets the next holiday from a date */\nexport function findNextHoliday(\n definitions: HolidayDefinition[],\n from: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const isoFrom = toISODate(from);\n const year = from.getUTCFullYear();\n\n // Search in current year\n let holidays = resolveHolidays(definitions, year, names);\n let next = holidays.find((h) => h.date >= isoFrom);\n\n // If none, search in next year\n if (!next) {\n holidays = resolveHolidays(definitions, year + 1, names);\n next = holidays[0];\n }\n\n return next ?? null;\n}\n","import type { HolidayDefinition } from './types';\nimport { checkIsHoliday } from './engine';\n\n/**\n * Checks if a date is a weekend (Saturday or Sunday)\n * Uses UTC date to avoid timezone issues\n */\nexport function isWeekend(date: Date): boolean {\n const day = date.getUTCDay();\n return day === 0 || day === 6; // 0 = Sunday, 6 = Saturday\n}\n\n/**\n * Checks if a date is a business day (not weekend AND not holiday)\n */\nexport function checkIsBusinessDay(definitions: HolidayDefinition[], date: Date): boolean {\n if (isWeekend(date)) return false;\n return checkIsHoliday(definitions, date) === null;\n}\n\n/**\n * Adds (or subtracts) business days to a date\n */\nexport function addBusinessDays(\n definitions: HolidayDefinition[],\n startDate: Date,\n amount: number,\n): Date {\n const result = new Date(startDate);\n let remaining = Math.abs(amount);\n const direction = amount >= 0 ? 1 : -1;\n\n while (remaining > 0) {\n result.setUTCDate(result.getUTCDate() + direction);\n if (checkIsBusinessDay(definitions, result)) {\n remaining--;\n }\n }\n\n return result;\n}\n","import type { HolidayNames } from '../core/types';\n\nexport const es: HolidayNames = {\n // Comunes\n newYear: 'Año Nuevo',\n epiphany: 'Día de los Reyes Magos',\n holyThursday: 'Jueves Santo',\n goodFriday: 'Viernes Santo',\n easterSunday: 'Domingo de Pascua',\n laborDay: 'Día del Trabajo',\n ascension: 'Ascensión del Señor',\n corpusChristi: 'Corpus Christi',\n christmas: 'Navidad',\n christmasEve: 'Nochebuena',\n newYearsEve: 'Nochevieja',\n allSaints: 'Día de Todos los Santos',\n\n // Colombia\n saintJoseph: 'Día de San José',\n sacredHeart: 'Sagrado Corazón',\n saintPeterPaul: 'San Pedro y San Pablo',\n independenceDay: 'Día de la Independencia',\n boyacaBattle: 'Batalla de Boyacá',\n assumptionMary: 'Asunción de la Virgen',\n columbusDay: 'Día de la Raza',\n independenceCartagena: 'Independencia de Cartagena',\n immaculateConception: 'Inmaculada Concepción',\n\n // México\n constitutionDay: 'Día de la Constitución',\n benitoJuarez: 'Natalicio de Benito Juárez',\n revolutionDay: 'Día de la Revolución',\n virginGuadalupe: 'Día de la Virgen de Guadalupe',\n transmissionExecutive: 'Transmisión del Poder Ejecutivo Federal',\n\n // Argentina\n carnivalMonday: 'Lunes de Carnaval',\n carnivalTuesday: 'Martes de Carnaval',\n memoryDay: 'Día Nacional de la Memoria por la Verdad y la Justicia',\n malvinasDay: 'Día del Veterano y de los Caídos en la Guerra de Malvinas',\n mayRevolution: 'Día de la Revolución de Mayo',\n guemesDay: 'Paso a la Inmortalidad del Gral. Don Martín Miguel de Güemes',\n belgranoDay: 'Paso a la Inmortalidad del Gral. Manuel Belgrano',\n sanMartinDay: 'Paso a la Inmortalidad del Gral. José de San Martín',\n diversityDay: 'Día del Respeto a la Diversidad Cultural',\n sovereigntyDay: 'Día de la Soberanía Nacional',\n\n // USA\n mlkDay: 'Día de Martin Luther King Jr.',\n presidentsDay: 'Día de los Presidentes',\n memorialDay: 'Día de los Caídos',\n independenceDayUS: 'Día de la Independencia',\n thanksgivingDay: 'Día de Acción de Gracias',\n veteransDay: 'Día de los Veteranos',\n};\n","import type { HolidayDefinition, Holiday, HolidayNames } from '../core/types';\nimport { resolveHolidays, checkIsHoliday, findNextHoliday } from '../core/engine';\nimport { checkIsBusinessDay, addBusinessDays } from '../core/business';\nimport { es } from '../i18n/es';\n\nconst definitions: HolidayDefinition[] = [\n { key: 'newYear', rule: { type: 'fixed', month: 1, day: 1 } },\n { key: 'carnivalMonday', rule: { type: 'easterRelative', offset: -48 } },\n { key: 'carnivalTuesday', rule: { type: 'easterRelative', offset: -47 } },\n { key: 'memoryDay', rule: { type: 'fixed', month: 3, day: 24 } },\n { key: 'malvinasDay', rule: { type: 'fixed', month: 4, day: 2 } },\n { key: 'goodFriday', rule: { type: 'easterRelative', offset: -2 } },\n { key: 'laborDay', rule: { type: 'fixed', month: 5, day: 1 } },\n { key: 'mayRevolution', rule: { type: 'fixed', month: 5, day: 25 } },\n {\n key: 'guemesDay',\n rule: { type: 'fixed', month: 6, day: 17 },\n shift: 'nearestMonday',\n },\n { key: 'belgranoDay', rule: { type: 'fixed', month: 6, day: 20 } },\n { key: 'independenceDay', rule: { type: 'fixed', month: 7, day: 9 } },\n {\n key: 'sanMartinDay',\n rule: { type: 'fixed', month: 8, day: 17 },\n shift: 'nearestMonday',\n },\n {\n key: 'diversityDay',\n rule: { type: 'fixed', month: 10, day: 12 },\n shift: 'nearestMonday',\n },\n {\n key: 'sovereigntyDay',\n rule: { type: 'fixed', month: 11, day: 20 },\n shift: 'nearestMonday',\n },\n { key: 'immaculateConception', rule: { type: 'fixed', month: 12, day: 8 } },\n { key: 'christmas', rule: { type: 'fixed', month: 12, day: 25 } },\n];\n\nexport interface GetHolidaysOptions {\n lang?: HolidayNames;\n}\n\nexport function getHolidays(year: number, options?: GetHolidaysOptions): Holiday[] {\n const names = options?.lang ?? es;\n return resolveHolidays(definitions, year, names);\n}\n\nexport function isHoliday(date: Date, options?: GetHolidaysOptions): Holiday | null {\n const names = options?.lang ?? es;\n return checkIsHoliday(definitions, date, names);\n}\n\nexport function getNextHoliday(\n from: Date = new Date(),\n options?: GetHolidaysOptions,\n): Holiday | null {\n const names = options?.lang ?? es;\n return findNextHoliday(definitions, from, names);\n}\n\nexport function isBusinessDay(date: Date): boolean {\n return checkIsBusinessDay(definitions, date);\n}\n\nexport function businessDays(date: Date, amount: number): Date {\n return addBusinessDays(definitions, date, amount);\n}\n"]}
@@ -6,5 +6,7 @@ interface GetHolidaysOptions {
6
6
  declare function getHolidays(year: number, options?: GetHolidaysOptions): Holiday[];
7
7
  declare function isHoliday(date: Date, options?: GetHolidaysOptions): Holiday | null;
8
8
  declare function getNextHoliday(from?: Date, options?: GetHolidaysOptions): Holiday | null;
9
+ declare function isBusinessDay(date: Date): boolean;
10
+ declare function businessDays(date: Date, amount: number): Date;
9
11
 
10
- export { type GetHolidaysOptions, getHolidays, getNextHoliday, isHoliday };
12
+ export { type GetHolidaysOptions, businessDays, getHolidays, getNextHoliday, isBusinessDay, isHoliday };
@@ -6,5 +6,7 @@ interface GetHolidaysOptions {
6
6
  declare function getHolidays(year: number, options?: GetHolidaysOptions): Holiday[];
7
7
  declare function isHoliday(date: Date, options?: GetHolidaysOptions): Holiday | null;
8
8
  declare function getNextHoliday(from?: Date, options?: GetHolidaysOptions): Holiday | null;
9
+ declare function isBusinessDay(date: Date): boolean;
10
+ declare function businessDays(date: Date, amount: number): Date;
9
11
 
10
- export { type GetHolidaysOptions, getHolidays, getNextHoliday, isHoliday };
12
+ export { type GetHolidaysOptions, businessDays, getHolidays, getNextHoliday, isBusinessDay, isHoliday };
@@ -1,2 +1,2 @@
1
- function m(e){let n=e%19,a=Math.floor(e/100),t=e%100,o=Math.floor(a/4),s=a%4,i=Math.floor((a+8)/25),r=Math.floor((a-i+1)/3),d=(19*n+a-o-r+15)%30,v=Math.floor(t/4),T=t%4,c=(32+2*s+2*v-d-T)%7,f=Math.floor((n+11*d+22*c)/451),H=Math.floor((d+c-7*f+114)/31),k=(d+c-7*f+114)%31+1;return new Date(Date.UTC(e,H-1,k))}function p(e,n,a,t){if(t>0){let s=new Date(Date.UTC(e,n-1,1)).getUTCDay(),r=1+(a-s+7)%7+(t-1)*7;return new Date(Date.UTC(e,n-1,r))}else {let o=new Date(Date.UTC(e,n,0)),i=(o.getUTCDay()-a+7)%7,r=o.getUTCDate()-i+(t+1)*7;return new Date(Date.UTC(e,n-1,r))}}function h(e,n){let a=e.getUTCDay();if(n==="none")return {date:e,shifted:false};let t=new Date(e);switch(n){case "emiliani":case "nextMonday":{if(a===1)return {date:e,shifted:false};let o=(8-a)%7;t.setUTCDate(e.getUTCDate()+o);break}case "observedUS":if(a===0)t.setUTCDate(e.getUTCDate()+1);else if(a===6)t.setUTCDate(e.getUTCDate()-1);else return {date:e,shifted:false};break;case "nearestMonday":if(a===2)t.setUTCDate(e.getUTCDate()-1);else if(a===3)t.setUTCDate(e.getUTCDate()-2);else if(a===4)t.setUTCDate(e.getUTCDate()+4);else if(a===5)t.setUTCDate(e.getUTCDate()+3);else return {date:e,shifted:false};break;default:return {date:e,shifted:false}}return {date:t,shifted:true}}function x(e,n){switch(e.type){case "fixed":return new Date(Date.UTC(n,e.month-1,e.day));case "nthWeekday":return p(n,e.month,e.weekday,e.n);case "easterRelative":{let a=m(n),t=new Date(a);return t.setUTCDate(a.getUTCDate()+e.offset),t}case "custom":return e.calc(n)}}function u(e){return e.toISOString().split("T")[0]}function l(e,n,a={}){return e.map(t=>{let o=x(t.rule,n);if(!o)return null;let{date:s,shifted:i}=h(o,t.shift??"none");return {date:u(s),key:t.key,name:a[t.key]??t.key,...i&&{isShifted:true}}}).filter(t=>t!==null).sort((t,o)=>t.date.localeCompare(o.date))}function g(e,n,a){let t=n.getUTCFullYear(),o=u(n);return l(e,t,a).find(i=>i.date===o)??null}function C(e,n,a){let t=u(n),o=n.getUTCFullYear(),s=l(e,o,a),i=s.find(r=>r.date>=t);return i||(s=l(e,o+1,a),i=s[0]),i??null}var y={newYear:"A\xF1o Nuevo",epiphany:"D\xEDa de los Reyes Magos",holyThursday:"Jueves Santo",goodFriday:"Viernes Santo",easterSunday:"Domingo de Pascua",laborDay:"D\xEDa del Trabajo",ascension:"Ascensi\xF3n del Se\xF1or",corpusChristi:"Corpus Christi",christmas:"Navidad",christmasEve:"Nochebuena",newYearsEve:"Nochevieja",allSaints:"D\xEDa de Todos los Santos",saintJoseph:"D\xEDa de San Jos\xE9",sacredHeart:"Sagrado Coraz\xF3n",saintPeterPaul:"San Pedro y San Pablo",independenceDay:"D\xEDa de la Independencia",boyacaBattle:"Batalla de Boyac\xE1",assumptionMary:"Asunci\xF3n de la Virgen",columbusDay:"D\xEDa de la Raza",independenceCartagena:"Independencia de Cartagena",immaculateConception:"Inmaculada Concepci\xF3n",constitutionDay:"D\xEDa de la Constituci\xF3n",benitoJuarez:"Natalicio de Benito Ju\xE1rez",revolutionDay:"D\xEDa de la Revoluci\xF3n",virginGuadalupe:"D\xEDa de la Virgen de Guadalupe",transmissionExecutive:"Transmisi\xF3n del Poder Ejecutivo Federal",carnivalMonday:"Lunes de Carnaval",carnivalTuesday:"Martes de Carnaval",memoryDay:"D\xEDa Nacional de la Memoria por la Verdad y la Justicia",malvinasDay:"D\xEDa del Veterano y de los Ca\xEDdos en la Guerra de Malvinas",mayRevolution:"D\xEDa de la Revoluci\xF3n de Mayo",guemesDay:"Paso a la Inmortalidad del Gral. Don Mart\xEDn Miguel de G\xFCemes",belgranoDay:"Paso a la Inmortalidad del Gral. Manuel Belgrano",sanMartinDay:"Paso a la Inmortalidad del Gral. Jos\xE9 de San Mart\xEDn",diversityDay:"D\xEDa del Respeto a la Diversidad Cultural",sovereigntyDay:"D\xEDa de la Soberan\xEDa Nacional",mlkDay:"D\xEDa de Martin Luther King Jr.",presidentsDay:"D\xEDa de los Presidentes",memorialDay:"D\xEDa de los Ca\xEDdos",independenceDayUS:"D\xEDa de la Independencia",thanksgivingDay:"D\xEDa de Acci\xF3n de Gracias",veteransDay:"D\xEDa de los Veteranos"};var D=[{key:"newYear",rule:{type:"fixed",month:1,day:1}},{key:"carnivalMonday",rule:{type:"easterRelative",offset:-48}},{key:"carnivalTuesday",rule:{type:"easterRelative",offset:-47}},{key:"memoryDay",rule:{type:"fixed",month:3,day:24}},{key:"malvinasDay",rule:{type:"fixed",month:4,day:2}},{key:"goodFriday",rule:{type:"easterRelative",offset:-2}},{key:"laborDay",rule:{type:"fixed",month:5,day:1}},{key:"mayRevolution",rule:{type:"fixed",month:5,day:25}},{key:"guemesDay",rule:{type:"fixed",month:6,day:17},shift:"nearestMonday"},{key:"belgranoDay",rule:{type:"fixed",month:6,day:20}},{key:"independenceDay",rule:{type:"fixed",month:7,day:9}},{key:"sanMartinDay",rule:{type:"fixed",month:8,day:17},shift:"nearestMonday"},{key:"diversityDay",rule:{type:"fixed",month:10,day:12},shift:"nearestMonday"},{key:"sovereigntyDay",rule:{type:"fixed",month:11,day:20},shift:"nearestMonday"},{key:"immaculateConception",rule:{type:"fixed",month:12,day:8}},{key:"christmas",rule:{type:"fixed",month:12,day:25}}];function J(e,n){let a=n?.lang??y;return l(D,e,a)}function E(e,n){let a=n?.lang??y;return g(D,e,a)}function F(e=new Date,n){let a=n?.lang??y;return C(D,e,a)}export{J as getHolidays,F as getNextHoliday,E as isHoliday};//# sourceMappingURL=ar.js.map
1
+ function h(e){let a=e%19,n=Math.floor(e/100),t=e%100,o=Math.floor(n/4),i=n%4,s=Math.floor((n+8)/25),r=Math.floor((n-s+1)/3),y=(19*a+n-o-r+15)%30,k=Math.floor(t/4),v=t%4,D=(32+2*i+2*k-y-v)%7,p=Math.floor((a+11*y+22*D)/451),x=Math.floor((y+D-7*p+114)/31),U=(y+D-7*p+114)%31+1;return new Date(Date.UTC(e,x-1,U))}function g(e,a,n,t){if(t>0){let i=new Date(Date.UTC(e,a-1,1)).getUTCDay(),r=1+(n-i+7)%7+(t-1)*7;return new Date(Date.UTC(e,a-1,r))}else {let o=new Date(Date.UTC(e,a,0)),s=(o.getUTCDay()-n+7)%7,r=o.getUTCDate()-s+(t+1)*7;return new Date(Date.UTC(e,a-1,r))}}function C(e,a){let n=e.getUTCDay();if(a==="none")return {date:e,shifted:false};let t=new Date(e);switch(a){case "emiliani":case "nextMonday":{if(n===1)return {date:e,shifted:false};let o=(8-n)%7;t.setUTCDate(e.getUTCDate()+o);break}case "observedUS":if(n===0)t.setUTCDate(e.getUTCDate()+1);else if(n===6)t.setUTCDate(e.getUTCDate()-1);else return {date:e,shifted:false};break;case "nearestMonday":if(n===2)t.setUTCDate(e.getUTCDate()-1);else if(n===3)t.setUTCDate(e.getUTCDate()-2);else if(n===4)t.setUTCDate(e.getUTCDate()+4);else if(n===5)t.setUTCDate(e.getUTCDate()+3);else return {date:e,shifted:false};break;default:return {date:e,shifted:false}}return {date:t,shifted:true}}function b(e,a){switch(e.type){case "fixed":return new Date(Date.UTC(a,e.month-1,e.day));case "nthWeekday":return g(a,e.month,e.weekday,e.n);case "easterRelative":{let n=h(a),t=new Date(n);return t.setUTCDate(n.getUTCDate()+e.offset),t}case "custom":return e.calc(a)}}function f(e){return e.toISOString().split("T")[0]}function l(e,a,n={}){return e.map(t=>{let o=b(t.rule,a);if(!o)return null;let{date:i,shifted:s}=C(o,t.shift??"none");return {date:f(i),key:t.key,name:n[t.key]??t.key,...s&&{isShifted:true}}}).filter(t=>t!==null).sort((t,o)=>t.date.localeCompare(o.date))}function u(e,a,n){let t=a.getUTCFullYear(),o=f(a);return l(e,t,n).find(s=>s.date===o)??null}function H(e,a,n){let t=f(a),o=a.getUTCFullYear(),i=l(e,o,n),s=i.find(r=>r.date>=t);return s||(i=l(e,o+1,n),s=i[0]),s??null}function M(e){let a=e.getUTCDay();return a===0||a===6}function m(e,a){return M(a)?false:u(e,a)===null}function T(e,a,n){let t=new Date(a),o=Math.abs(n),i=n>=0?1:-1;for(;o>0;)t.setUTCDate(t.getUTCDate()+i),m(e,t)&&o--;return t}var c={newYear:"A\xF1o Nuevo",epiphany:"D\xEDa de los Reyes Magos",holyThursday:"Jueves Santo",goodFriday:"Viernes Santo",easterSunday:"Domingo de Pascua",laborDay:"D\xEDa del Trabajo",ascension:"Ascensi\xF3n del Se\xF1or",corpusChristi:"Corpus Christi",christmas:"Navidad",christmasEve:"Nochebuena",newYearsEve:"Nochevieja",allSaints:"D\xEDa de Todos los Santos",saintJoseph:"D\xEDa de San Jos\xE9",sacredHeart:"Sagrado Coraz\xF3n",saintPeterPaul:"San Pedro y San Pablo",independenceDay:"D\xEDa de la Independencia",boyacaBattle:"Batalla de Boyac\xE1",assumptionMary:"Asunci\xF3n de la Virgen",columbusDay:"D\xEDa de la Raza",independenceCartagena:"Independencia de Cartagena",immaculateConception:"Inmaculada Concepci\xF3n",constitutionDay:"D\xEDa de la Constituci\xF3n",benitoJuarez:"Natalicio de Benito Ju\xE1rez",revolutionDay:"D\xEDa de la Revoluci\xF3n",virginGuadalupe:"D\xEDa de la Virgen de Guadalupe",transmissionExecutive:"Transmisi\xF3n del Poder Ejecutivo Federal",carnivalMonday:"Lunes de Carnaval",carnivalTuesday:"Martes de Carnaval",memoryDay:"D\xEDa Nacional de la Memoria por la Verdad y la Justicia",malvinasDay:"D\xEDa del Veterano y de los Ca\xEDdos en la Guerra de Malvinas",mayRevolution:"D\xEDa de la Revoluci\xF3n de Mayo",guemesDay:"Paso a la Inmortalidad del Gral. Don Mart\xEDn Miguel de G\xFCemes",belgranoDay:"Paso a la Inmortalidad del Gral. Manuel Belgrano",sanMartinDay:"Paso a la Inmortalidad del Gral. Jos\xE9 de San Mart\xEDn",diversityDay:"D\xEDa del Respeto a la Diversidad Cultural",sovereigntyDay:"D\xEDa de la Soberan\xEDa Nacional",mlkDay:"D\xEDa de Martin Luther King Jr.",presidentsDay:"D\xEDa de los Presidentes",memorialDay:"D\xEDa de los Ca\xEDdos",independenceDayUS:"D\xEDa de la Independencia",thanksgivingDay:"D\xEDa de Acci\xF3n de Gracias",veteransDay:"D\xEDa de los Veteranos"};var d=[{key:"newYear",rule:{type:"fixed",month:1,day:1}},{key:"carnivalMonday",rule:{type:"easterRelative",offset:-48}},{key:"carnivalTuesday",rule:{type:"easterRelative",offset:-47}},{key:"memoryDay",rule:{type:"fixed",month:3,day:24}},{key:"malvinasDay",rule:{type:"fixed",month:4,day:2}},{key:"goodFriday",rule:{type:"easterRelative",offset:-2}},{key:"laborDay",rule:{type:"fixed",month:5,day:1}},{key:"mayRevolution",rule:{type:"fixed",month:5,day:25}},{key:"guemesDay",rule:{type:"fixed",month:6,day:17},shift:"nearestMonday"},{key:"belgranoDay",rule:{type:"fixed",month:6,day:20}},{key:"independenceDay",rule:{type:"fixed",month:7,day:9}},{key:"sanMartinDay",rule:{type:"fixed",month:8,day:17},shift:"nearestMonday"},{key:"diversityDay",rule:{type:"fixed",month:10,day:12},shift:"nearestMonday"},{key:"sovereigntyDay",rule:{type:"fixed",month:11,day:20},shift:"nearestMonday"},{key:"immaculateConception",rule:{type:"fixed",month:12,day:8}},{key:"christmas",rule:{type:"fixed",month:12,day:25}}];function V(e,a){let n=a?.lang??c;return l(d,e,n)}function Y(e,a){let n=a?.lang??c;return u(d,e,n)}function z(e=new Date,a){let n=a?.lang??c;return H(d,e,n)}function A(e){return m(d,e)}function j(e,a){return T(d,e,a)}export{j as businessDays,V as getHolidays,z as getNextHoliday,A as isBusinessDay,Y as isHoliday};//# sourceMappingURL=ar.js.map
2
2
  //# sourceMappingURL=ar.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/algorithms/easter.ts","../../src/core/algorithms/nth-weekday.ts","../../src/core/algorithms/shifts.ts","../../src/core/engine.ts","../../src/i18n/es.ts","../../src/locales/ar.ts"],"names":["getEasterSunday","year","a","b","c","d","e","f","g","h","i","k","l","m","month","day","getNthWeekday","weekday","n","firstWeekday","last","diff","applyShift","date","rule","result","daysToNextMonday","resolveRule","easter","toISODate","resolveHolidays","definitions","names","def","rawDate","shifted","checkIsHoliday","isoDate","findNextHoliday","from","isoFrom","holidays","next","es","getHolidays","options","isHoliday","getNextHoliday"],"mappings":"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","file":"ar.js","sourcesContent":["/**\n * Calculates Easter Sunday (Meeus/Jones/Butcher algorithm)\n * Valid for Gregorian calendar (1583+)\n */\nexport function getEasterSunday(year: number): Date {\n const a = year % 19;\n const b = Math.floor(year / 100);\n const c = year % 100;\n const d = Math.floor(b / 4);\n const e = b % 4;\n const f = Math.floor((b + 8) / 25);\n const g = Math.floor((b - f + 1) / 3);\n const h = (19 * a + b - d - g + 15) % 30;\n const i = Math.floor(c / 4);\n const k = c % 4;\n const l = (32 + 2 * e + 2 * i - h - k) % 7;\n const m = Math.floor((a + 11 * h + 22 * l) / 451);\n const month = Math.floor((h + l - 7 * m + 114) / 31);\n const day = ((h + l - 7 * m + 114) % 31) + 1;\n\n return new Date(Date.UTC(year, month - 1, day));\n}\n","/**\n * Calculates the Nth weekday of a month\n * @param year - Year\n * @param month - Month (1-12)\n * @param weekday - Weekday (0=Sun, 1=Mon, ..., 6=Sat)\n * @param n - Occurrence (1=first, 2=second, -1=last)\n */\nexport function getNthWeekday(year: number, month: number, weekday: number, n: number): Date {\n if (n > 0) {\n // From start of month\n const first = new Date(Date.UTC(year, month - 1, 1));\n const firstWeekday = first.getUTCDay();\n const diff = (weekday - firstWeekday + 7) % 7;\n const day = 1 + diff + (n - 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n } else {\n // From end of month (n = -1 = last)\n // month is 1-12. Date.UTC(year, month, 0) gives the last day of month 'month'\n const last = new Date(Date.UTC(year, month, 0));\n const lastWeekday = last.getUTCDay();\n const diff = (lastWeekday - weekday + 7) % 7;\n const day = last.getUTCDate() - diff + (n + 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n }\n}\n","import type { ShiftRule } from '../types';\n\n/**\n * Applies a shift rule to a date\n * @returns { date: Date, shifted: boolean }\n */\nexport function applyShift(date: Date, rule: ShiftRule): { date: Date; shifted: boolean } {\n const day = date.getUTCDay(); // 0=Sun, 6=Sat\n\n if (rule === 'none') {\n return { date, shifted: false };\n }\n\n const result = new Date(date);\n\n switch (rule) {\n case 'emiliani':\n case 'nextMonday': {\n // If it's already Monday (1), do not move\n if (day === 1) {\n return { date, shifted: false };\n }\n // Move to next Monday\n // (8 - day) % 7 gives days until next Monday\n // Ex: Sun(0) -> (8-0)%7 = 1 (+1 day) -> Mon\n // Ex: Sat(6) -> (8-6)%7 = 2 (+2 days) -> Mon\n // Ex: Wed(3) -> (8-3)%7 = 5 (+5 days) -> Mon\n const daysToNextMonday = (8 - day) % 7;\n result.setUTCDate(date.getUTCDate() + daysToNextMonday);\n break;\n }\n\n case 'observedUS':\n // Only affects weekends\n if (day === 0) {\n // Sunday -> Monday (+1)\n result.setUTCDate(date.getUTCDate() + 1);\n } else if (day === 6) {\n // Saturday -> Friday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else {\n return { date, shifted: false };\n }\n break;\n\n case 'nearestMonday':\n // Argentina rule:\n // Tue/Wed -> Previous Monday\n // Thu/Fri -> Next Monday\n if (day === 2) {\n // Tuesday -> Monday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else if (day === 3) {\n // Wednesday -> Monday (-2)\n result.setUTCDate(date.getUTCDate() - 2);\n } else if (day === 4) {\n // Thursday -> Next Monday (+4)\n result.setUTCDate(date.getUTCDate() + 4);\n } else if (day === 5) {\n // Friday -> Next Monday (+3)\n result.setUTCDate(date.getUTCDate() + 3);\n } else {\n return { date, shifted: false };\n }\n break;\n\n default:\n return { date, shifted: false };\n }\n\n return { date: result, shifted: true };\n}\n","import type { HolidayDefinition, HolidayRule, Holiday } from './types';\nimport { getEasterSunday } from './algorithms/easter';\nimport { getNthWeekday } from './algorithms/nth-weekday';\nimport { applyShift } from './algorithms/shifts';\n\n/** Resolves a rule to a concrete date */\nfunction resolveRule(rule: HolidayRule, year: number): Date | null {\n switch (rule.type) {\n case 'fixed':\n return new Date(Date.UTC(year, rule.month - 1, rule.day));\n\n case 'nthWeekday':\n return getNthWeekday(year, rule.month, rule.weekday, rule.n);\n\n case 'easterRelative': {\n const easter = getEasterSunday(year);\n const result = new Date(easter);\n result.setUTCDate(easter.getUTCDate() + rule.offset);\n return result;\n }\n\n case 'custom':\n return rule.calc(year);\n }\n}\n\n/** Formats Date to ISO string (date only) */\nfunction toISODate(date: Date): string {\n return date.toISOString().split('T')[0];\n}\n\n/** Generates holidays for a year */\nexport function resolveHolidays(\n definitions: HolidayDefinition[],\n year: number,\n names: Record<string, string> = {},\n): Holiday[] {\n return definitions\n .map((def) => {\n const rawDate = resolveRule(def.rule, year);\n if (!rawDate) return null;\n\n const { date, shifted } = applyShift(rawDate, def.shift ?? 'none');\n\n return {\n date: toISODate(date),\n key: def.key,\n name: names[def.key] ?? def.key,\n ...(shifted && { isShifted: true }),\n };\n })\n .filter((h): h is Holiday => h !== null)\n .sort((a, b) => a.date.localeCompare(b.date));\n}\n\n/** Checks if a date is a holiday */\nexport function checkIsHoliday(\n definitions: HolidayDefinition[],\n date: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const year = date.getUTCFullYear();\n const isoDate = toISODate(date);\n const holidays = resolveHolidays(definitions, year, names);\n return holidays.find((h) => h.date === isoDate) ?? null;\n}\n\n/** Gets the next holiday from a date */\nexport function findNextHoliday(\n definitions: HolidayDefinition[],\n from: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const isoFrom = toISODate(from);\n const year = from.getUTCFullYear();\n\n // Search in current year\n let holidays = resolveHolidays(definitions, year, names);\n let next = holidays.find((h) => h.date >= isoFrom);\n\n // If none, search in next year\n if (!next) {\n holidays = resolveHolidays(definitions, year + 1, names);\n next = holidays[0];\n }\n\n return next ?? null;\n}\n","import type { HolidayNames } from '../core/types';\n\nexport const es: HolidayNames = {\n // Comunes\n newYear: 'Año Nuevo',\n epiphany: 'Día de los Reyes Magos',\n holyThursday: 'Jueves Santo',\n goodFriday: 'Viernes Santo',\n easterSunday: 'Domingo de Pascua',\n laborDay: 'Día del Trabajo',\n ascension: 'Ascensión del Señor',\n corpusChristi: 'Corpus Christi',\n christmas: 'Navidad',\n christmasEve: 'Nochebuena',\n newYearsEve: 'Nochevieja',\n allSaints: 'Día de Todos los Santos',\n\n // Colombia\n saintJoseph: 'Día de San José',\n sacredHeart: 'Sagrado Corazón',\n saintPeterPaul: 'San Pedro y San Pablo',\n independenceDay: 'Día de la Independencia',\n boyacaBattle: 'Batalla de Boyacá',\n assumptionMary: 'Asunción de la Virgen',\n columbusDay: 'Día de la Raza',\n independenceCartagena: 'Independencia de Cartagena',\n immaculateConception: 'Inmaculada Concepción',\n\n // México\n constitutionDay: 'Día de la Constitución',\n benitoJuarez: 'Natalicio de Benito Juárez',\n revolutionDay: 'Día de la Revolución',\n virginGuadalupe: 'Día de la Virgen de Guadalupe',\n transmissionExecutive: 'Transmisión del Poder Ejecutivo Federal',\n\n // Argentina\n carnivalMonday: 'Lunes de Carnaval',\n carnivalTuesday: 'Martes de Carnaval',\n memoryDay: 'Día Nacional de la Memoria por la Verdad y la Justicia',\n malvinasDay: 'Día del Veterano y de los Caídos en la Guerra de Malvinas',\n mayRevolution: 'Día de la Revolución de Mayo',\n guemesDay: 'Paso a la Inmortalidad del Gral. Don Martín Miguel de Güemes',\n belgranoDay: 'Paso a la Inmortalidad del Gral. Manuel Belgrano',\n sanMartinDay: 'Paso a la Inmortalidad del Gral. José de San Martín',\n diversityDay: 'Día del Respeto a la Diversidad Cultural',\n sovereigntyDay: 'Día de la Soberanía Nacional',\n\n // USA\n mlkDay: 'Día de Martin Luther King Jr.',\n presidentsDay: 'Día de los Presidentes',\n memorialDay: 'Día de los Caídos',\n independenceDayUS: 'Día de la Independencia',\n thanksgivingDay: 'Día de Acción de Gracias',\n veteransDay: 'Día de los Veteranos',\n};\n","import type { HolidayDefinition, Holiday, HolidayNames } from '../core/types';\nimport { resolveHolidays, checkIsHoliday, findNextHoliday } from '../core/engine';\nimport { es } from '../i18n/es';\n\nconst definitions: HolidayDefinition[] = [\n { key: 'newYear', rule: { type: 'fixed', month: 1, day: 1 } },\n { key: 'carnivalMonday', rule: { type: 'easterRelative', offset: -48 } },\n { key: 'carnivalTuesday', rule: { type: 'easterRelative', offset: -47 } },\n { key: 'memoryDay', rule: { type: 'fixed', month: 3, day: 24 } },\n { key: 'malvinasDay', rule: { type: 'fixed', month: 4, day: 2 } },\n { key: 'goodFriday', rule: { type: 'easterRelative', offset: -2 } },\n { key: 'laborDay', rule: { type: 'fixed', month: 5, day: 1 } },\n { key: 'mayRevolution', rule: { type: 'fixed', month: 5, day: 25 } },\n {\n key: 'guemesDay',\n rule: { type: 'fixed', month: 6, day: 17 },\n shift: 'nearestMonday',\n },\n { key: 'belgranoDay', rule: { type: 'fixed', month: 6, day: 20 } },\n { key: 'independenceDay', rule: { type: 'fixed', month: 7, day: 9 } },\n {\n key: 'sanMartinDay',\n rule: { type: 'fixed', month: 8, day: 17 },\n shift: 'nearestMonday',\n },\n {\n key: 'diversityDay',\n rule: { type: 'fixed', month: 10, day: 12 },\n shift: 'nearestMonday',\n },\n {\n key: 'sovereigntyDay',\n rule: { type: 'fixed', month: 11, day: 20 },\n shift: 'nearestMonday',\n },\n { key: 'immaculateConception', rule: { type: 'fixed', month: 12, day: 8 } },\n { key: 'christmas', rule: { type: 'fixed', month: 12, day: 25 } },\n];\n\nexport interface GetHolidaysOptions {\n lang?: HolidayNames;\n}\n\nexport function getHolidays(year: number, options?: GetHolidaysOptions): Holiday[] {\n const names = options?.lang ?? es;\n return resolveHolidays(definitions, year, names);\n}\n\nexport function isHoliday(date: Date, options?: GetHolidaysOptions): Holiday | null {\n const names = options?.lang ?? es;\n return checkIsHoliday(definitions, date, names);\n}\n\nexport function getNextHoliday(\n from: Date = new Date(),\n options?: GetHolidaysOptions,\n): Holiday | null {\n const names = options?.lang ?? es;\n return findNextHoliday(definitions, from, names);\n}\n"]}
1
+ {"version":3,"sources":["../../src/core/algorithms/easter.ts","../../src/core/algorithms/nth-weekday.ts","../../src/core/algorithms/shifts.ts","../../src/core/engine.ts","../../src/core/business.ts","../../src/i18n/es.ts","../../src/locales/ar.ts"],"names":["getEasterSunday","year","b","c","d","e","f","g","h","i","k","l","m","month","day","getNthWeekday","weekday","n","firstWeekday","last","diff","applyShift","date","rule","result","daysToNextMonday","resolveRule","easter","toISODate","resolveHolidays","definitions","names","def","rawDate","shifted","a","checkIsHoliday","isoDate","findNextHoliday","from","isoFrom","holidays","next","isWeekend","checkIsBusinessDay","addBusinessDays","startDate","amount","remaining","direction","es","getHolidays","options","isHoliday","getNextHoliday","isBusinessDay","businessDays"],"mappings":"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","file":"ar.js","sourcesContent":["/**\n * Calculates Easter Sunday (Meeus/Jones/Butcher algorithm)\n * Valid for Gregorian calendar (1583+)\n */\nexport function getEasterSunday(year: number): Date {\n const a = year % 19;\n const b = Math.floor(year / 100);\n const c = year % 100;\n const d = Math.floor(b / 4);\n const e = b % 4;\n const f = Math.floor((b + 8) / 25);\n const g = Math.floor((b - f + 1) / 3);\n const h = (19 * a + b - d - g + 15) % 30;\n const i = Math.floor(c / 4);\n const k = c % 4;\n const l = (32 + 2 * e + 2 * i - h - k) % 7;\n const m = Math.floor((a + 11 * h + 22 * l) / 451);\n const month = Math.floor((h + l - 7 * m + 114) / 31);\n const day = ((h + l - 7 * m + 114) % 31) + 1;\n\n return new Date(Date.UTC(year, month - 1, day));\n}\n","/**\n * Calculates the Nth weekday of a month\n * @param year - Year\n * @param month - Month (1-12)\n * @param weekday - Weekday (0=Sun, 1=Mon, ..., 6=Sat)\n * @param n - Occurrence (1=first, 2=second, -1=last)\n */\nexport function getNthWeekday(year: number, month: number, weekday: number, n: number): Date {\n if (n > 0) {\n // From start of month\n const first = new Date(Date.UTC(year, month - 1, 1));\n const firstWeekday = first.getUTCDay();\n const diff = (weekday - firstWeekday + 7) % 7;\n const day = 1 + diff + (n - 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n } else {\n // From end of month (n = -1 = last)\n // month is 1-12. Date.UTC(year, month, 0) gives the last day of month 'month'\n const last = new Date(Date.UTC(year, month, 0));\n const lastWeekday = last.getUTCDay();\n const diff = (lastWeekday - weekday + 7) % 7;\n const day = last.getUTCDate() - diff + (n + 1) * 7;\n return new Date(Date.UTC(year, month - 1, day));\n }\n}\n","import type { ShiftRule } from '../types';\n\n/**\n * Applies a shift rule to a date\n * @returns { date: Date, shifted: boolean }\n */\nexport function applyShift(date: Date, rule: ShiftRule): { date: Date; shifted: boolean } {\n const day = date.getUTCDay(); // 0=Sun, 6=Sat\n\n if (rule === 'none') {\n return { date, shifted: false };\n }\n\n const result = new Date(date);\n\n switch (rule) {\n case 'emiliani':\n case 'nextMonday': {\n // If it's already Monday (1), do not move\n if (day === 1) {\n return { date, shifted: false };\n }\n // Move to next Monday\n // (8 - day) % 7 gives days until next Monday\n // Ex: Sun(0) -> (8-0)%7 = 1 (+1 day) -> Mon\n // Ex: Sat(6) -> (8-6)%7 = 2 (+2 days) -> Mon\n // Ex: Wed(3) -> (8-3)%7 = 5 (+5 days) -> Mon\n const daysToNextMonday = (8 - day) % 7;\n result.setUTCDate(date.getUTCDate() + daysToNextMonday);\n break;\n }\n\n case 'observedUS':\n // Only affects weekends\n if (day === 0) {\n // Sunday -> Monday (+1)\n result.setUTCDate(date.getUTCDate() + 1);\n } else if (day === 6) {\n // Saturday -> Friday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else {\n return { date, shifted: false };\n }\n break;\n\n case 'nearestMonday':\n // Argentina rule:\n // Tue/Wed -> Previous Monday\n // Thu/Fri -> Next Monday\n if (day === 2) {\n // Tuesday -> Monday (-1)\n result.setUTCDate(date.getUTCDate() - 1);\n } else if (day === 3) {\n // Wednesday -> Monday (-2)\n result.setUTCDate(date.getUTCDate() - 2);\n } else if (day === 4) {\n // Thursday -> Next Monday (+4)\n result.setUTCDate(date.getUTCDate() + 4);\n } else if (day === 5) {\n // Friday -> Next Monday (+3)\n result.setUTCDate(date.getUTCDate() + 3);\n } else {\n return { date, shifted: false };\n }\n break;\n\n default:\n return { date, shifted: false };\n }\n\n return { date: result, shifted: true };\n}\n","import type { HolidayDefinition, HolidayRule, Holiday } from './types';\nimport { getEasterSunday } from './algorithms/easter';\nimport { getNthWeekday } from './algorithms/nth-weekday';\nimport { applyShift } from './algorithms/shifts';\n\n/** Resolves a rule to a concrete date */\nfunction resolveRule(rule: HolidayRule, year: number): Date | null {\n switch (rule.type) {\n case 'fixed':\n return new Date(Date.UTC(year, rule.month - 1, rule.day));\n\n case 'nthWeekday':\n return getNthWeekday(year, rule.month, rule.weekday, rule.n);\n\n case 'easterRelative': {\n const easter = getEasterSunday(year);\n const result = new Date(easter);\n result.setUTCDate(easter.getUTCDate() + rule.offset);\n return result;\n }\n\n case 'custom':\n return rule.calc(year);\n }\n}\n\n/** Formats Date to ISO string (date only) */\nfunction toISODate(date: Date): string {\n return date.toISOString().split('T')[0];\n}\n\n/** Generates holidays for a year */\nexport function resolveHolidays(\n definitions: HolidayDefinition[],\n year: number,\n names: Record<string, string> = {},\n): Holiday[] {\n return definitions\n .map((def) => {\n const rawDate = resolveRule(def.rule, year);\n if (!rawDate) return null;\n\n const { date, shifted } = applyShift(rawDate, def.shift ?? 'none');\n\n return {\n date: toISODate(date),\n key: def.key,\n name: names[def.key] ?? def.key,\n ...(shifted && { isShifted: true }),\n };\n })\n .filter((h): h is Holiday => h !== null)\n .sort((a, b) => a.date.localeCompare(b.date));\n}\n\n/** Checks if a date is a holiday */\nexport function checkIsHoliday(\n definitions: HolidayDefinition[],\n date: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const year = date.getUTCFullYear();\n const isoDate = toISODate(date);\n const holidays = resolveHolidays(definitions, year, names);\n return holidays.find((h) => h.date === isoDate) ?? null;\n}\n\n/** Gets the next holiday from a date */\nexport function findNextHoliday(\n definitions: HolidayDefinition[],\n from: Date,\n names?: Record<string, string>,\n): Holiday | null {\n const isoFrom = toISODate(from);\n const year = from.getUTCFullYear();\n\n // Search in current year\n let holidays = resolveHolidays(definitions, year, names);\n let next = holidays.find((h) => h.date >= isoFrom);\n\n // If none, search in next year\n if (!next) {\n holidays = resolveHolidays(definitions, year + 1, names);\n next = holidays[0];\n }\n\n return next ?? null;\n}\n","import type { HolidayDefinition } from './types';\nimport { checkIsHoliday } from './engine';\n\n/**\n * Checks if a date is a weekend (Saturday or Sunday)\n * Uses UTC date to avoid timezone issues\n */\nexport function isWeekend(date: Date): boolean {\n const day = date.getUTCDay();\n return day === 0 || day === 6; // 0 = Sunday, 6 = Saturday\n}\n\n/**\n * Checks if a date is a business day (not weekend AND not holiday)\n */\nexport function checkIsBusinessDay(definitions: HolidayDefinition[], date: Date): boolean {\n if (isWeekend(date)) return false;\n return checkIsHoliday(definitions, date) === null;\n}\n\n/**\n * Adds (or subtracts) business days to a date\n */\nexport function addBusinessDays(\n definitions: HolidayDefinition[],\n startDate: Date,\n amount: number,\n): Date {\n const result = new Date(startDate);\n let remaining = Math.abs(amount);\n const direction = amount >= 0 ? 1 : -1;\n\n while (remaining > 0) {\n result.setUTCDate(result.getUTCDate() + direction);\n if (checkIsBusinessDay(definitions, result)) {\n remaining--;\n }\n }\n\n return result;\n}\n","import type { HolidayNames } from '../core/types';\n\nexport const es: HolidayNames = {\n // Comunes\n newYear: 'Año Nuevo',\n epiphany: 'Día de los Reyes Magos',\n holyThursday: 'Jueves Santo',\n goodFriday: 'Viernes Santo',\n easterSunday: 'Domingo de Pascua',\n laborDay: 'Día del Trabajo',\n ascension: 'Ascensión del Señor',\n corpusChristi: 'Corpus Christi',\n christmas: 'Navidad',\n christmasEve: 'Nochebuena',\n newYearsEve: 'Nochevieja',\n allSaints: 'Día de Todos los Santos',\n\n // Colombia\n saintJoseph: 'Día de San José',\n sacredHeart: 'Sagrado Corazón',\n saintPeterPaul: 'San Pedro y San Pablo',\n independenceDay: 'Día de la Independencia',\n boyacaBattle: 'Batalla de Boyacá',\n assumptionMary: 'Asunción de la Virgen',\n columbusDay: 'Día de la Raza',\n independenceCartagena: 'Independencia de Cartagena',\n immaculateConception: 'Inmaculada Concepción',\n\n // México\n constitutionDay: 'Día de la Constitución',\n benitoJuarez: 'Natalicio de Benito Juárez',\n revolutionDay: 'Día de la Revolución',\n virginGuadalupe: 'Día de la Virgen de Guadalupe',\n transmissionExecutive: 'Transmisión del Poder Ejecutivo Federal',\n\n // Argentina\n carnivalMonday: 'Lunes de Carnaval',\n carnivalTuesday: 'Martes de Carnaval',\n memoryDay: 'Día Nacional de la Memoria por la Verdad y la Justicia',\n malvinasDay: 'Día del Veterano y de los Caídos en la Guerra de Malvinas',\n mayRevolution: 'Día de la Revolución de Mayo',\n guemesDay: 'Paso a la Inmortalidad del Gral. Don Martín Miguel de Güemes',\n belgranoDay: 'Paso a la Inmortalidad del Gral. Manuel Belgrano',\n sanMartinDay: 'Paso a la Inmortalidad del Gral. José de San Martín',\n diversityDay: 'Día del Respeto a la Diversidad Cultural',\n sovereigntyDay: 'Día de la Soberanía Nacional',\n\n // USA\n mlkDay: 'Día de Martin Luther King Jr.',\n presidentsDay: 'Día de los Presidentes',\n memorialDay: 'Día de los Caídos',\n independenceDayUS: 'Día de la Independencia',\n thanksgivingDay: 'Día de Acción de Gracias',\n veteransDay: 'Día de los Veteranos',\n};\n","import type { HolidayDefinition, Holiday, HolidayNames } from '../core/types';\nimport { resolveHolidays, checkIsHoliday, findNextHoliday } from '../core/engine';\nimport { checkIsBusinessDay, addBusinessDays } from '../core/business';\nimport { es } from '../i18n/es';\n\nconst definitions: HolidayDefinition[] = [\n { key: 'newYear', rule: { type: 'fixed', month: 1, day: 1 } },\n { key: 'carnivalMonday', rule: { type: 'easterRelative', offset: -48 } },\n { key: 'carnivalTuesday', rule: { type: 'easterRelative', offset: -47 } },\n { key: 'memoryDay', rule: { type: 'fixed', month: 3, day: 24 } },\n { key: 'malvinasDay', rule: { type: 'fixed', month: 4, day: 2 } },\n { key: 'goodFriday', rule: { type: 'easterRelative', offset: -2 } },\n { key: 'laborDay', rule: { type: 'fixed', month: 5, day: 1 } },\n { key: 'mayRevolution', rule: { type: 'fixed', month: 5, day: 25 } },\n {\n key: 'guemesDay',\n rule: { type: 'fixed', month: 6, day: 17 },\n shift: 'nearestMonday',\n },\n { key: 'belgranoDay', rule: { type: 'fixed', month: 6, day: 20 } },\n { key: 'independenceDay', rule: { type: 'fixed', month: 7, day: 9 } },\n {\n key: 'sanMartinDay',\n rule: { type: 'fixed', month: 8, day: 17 },\n shift: 'nearestMonday',\n },\n {\n key: 'diversityDay',\n rule: { type: 'fixed', month: 10, day: 12 },\n shift: 'nearestMonday',\n },\n {\n key: 'sovereigntyDay',\n rule: { type: 'fixed', month: 11, day: 20 },\n shift: 'nearestMonday',\n },\n { key: 'immaculateConception', rule: { type: 'fixed', month: 12, day: 8 } },\n { key: 'christmas', rule: { type: 'fixed', month: 12, day: 25 } },\n];\n\nexport interface GetHolidaysOptions {\n lang?: HolidayNames;\n}\n\nexport function getHolidays(year: number, options?: GetHolidaysOptions): Holiday[] {\n const names = options?.lang ?? es;\n return resolveHolidays(definitions, year, names);\n}\n\nexport function isHoliday(date: Date, options?: GetHolidaysOptions): Holiday | null {\n const names = options?.lang ?? es;\n return checkIsHoliday(definitions, date, names);\n}\n\nexport function getNextHoliday(\n from: Date = new Date(),\n options?: GetHolidaysOptions,\n): Holiday | null {\n const names = options?.lang ?? es;\n return findNextHoliday(definitions, from, names);\n}\n\nexport function isBusinessDay(date: Date): boolean {\n return checkIsBusinessDay(definitions, date);\n}\n\nexport function businessDays(date: Date, amount: number): Date {\n return addBusinessDays(definitions, date, amount);\n}\n"]}