@onereach/billing-shared 11.66.2-beta.3422.0 → 11.67.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.
@@ -1,8 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.formatDateToString = formatDateToString;
4
+ exports.dateRangesOverlap = dateRangesOverlap;
5
+ exports.parseDateString = parseDateString;
4
6
  function formatDateToString(date) {
5
7
  var targetDate = date || new Date();
6
8
  return targetDate.toISOString().split('T')[0];
7
9
  }
10
+ function dateRangesOverlap(start1, end1, start2, end2) {
11
+ return start1 <= end2 && start2 <= end1;
12
+ }
13
+ function parseDateString(dateStr) {
14
+ var ddmmyyyyMatch = dateStr.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
15
+ if (ddmmyyyyMatch && ddmmyyyyMatch[1] && ddmmyyyyMatch[2] && ddmmyyyyMatch[3]) {
16
+ var day = ddmmyyyyMatch[1], month = ddmmyyyyMatch[2], year = ddmmyyyyMatch[3];
17
+ var date_1 = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day)));
18
+ if (!isNaN(date_1.getTime())) {
19
+ return date_1;
20
+ }
21
+ }
22
+ var ddmmyyyyDashMatch = dateStr.match(/^(\d{1,2})-(\d{1,2})-(\d{4})$/);
23
+ if (ddmmyyyyDashMatch && ddmmyyyyDashMatch[1] && ddmmyyyyDashMatch[2] && ddmmyyyyDashMatch[3]) {
24
+ var day = ddmmyyyyDashMatch[1], month = ddmmyyyyDashMatch[2], year = ddmmyyyyDashMatch[3];
25
+ var date_2 = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day)));
26
+ if (!isNaN(date_2.getTime())) {
27
+ return date_2;
28
+ }
29
+ }
30
+ var date = new Date(dateStr);
31
+ if (!isNaN(date.getTime())) {
32
+ return date;
33
+ }
34
+ return new Date('invalid');
35
+ }
8
36
  //# sourceMappingURL=date.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.js","sourceRoot":"","sources":["../../../src/utils/date.ts"],"names":[],"mappings":";;AASA,gDAGC;AAHD,SAAgB,kBAAkB,CAAC,IAAW;IAC5C,IAAM,UAAU,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../../src/utils/date.ts"],"names":[],"mappings":";;AASA,gDAGC;AA0BD,8CAOC;AAYD,0CA6BC;AA7ED,SAAgB,kBAAkB,CAAC,IAAW;IAC5C,IAAM,UAAU,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AA0BD,SAAgB,iBAAiB,CAC/B,MAAY,EACZ,IAAU,EACV,MAAY,EACZ,IAAU;IAEV,OAAO,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC;AAC1C,CAAC;AAYD,SAAgB,eAAe,CAAC,OAAe;IAE7C,IAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvE,IAAI,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAA,GAAG,GAAiB,aAAa,GAA9B,EAAE,KAAK,GAAU,aAAa,GAAvB,EAAE,IAAI,GAAI,aAAa,GAAjB,CAAkB;QAC3C,IAAM,MAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,KAAK,CAAC,MAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3B,OAAO,MAAI,CAAC;QACd,CAAC;IACH,CAAC;IAGD,IAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACzE,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,IAAA,GAAG,GAAiB,iBAAiB,GAAlC,EAAE,KAAK,GAAU,iBAAiB,GAA3B,EAAE,IAAI,GAAI,iBAAiB,GAArB,CAAsB;QAC/C,IAAM,MAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,KAAK,CAAC,MAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3B,OAAO,MAAI,CAAC;QACd,CAAC;IACH,CAAC;IAGD,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC"}
@@ -2,4 +2,30 @@ export function formatDateToString(date) {
2
2
  const targetDate = date || new Date();
3
3
  return targetDate.toISOString().split('T')[0];
4
4
  }
5
+ export function dateRangesOverlap(start1, end1, start2, end2) {
6
+ return start1 <= end2 && start2 <= end1;
7
+ }
8
+ export function parseDateString(dateStr) {
9
+ const ddmmyyyyMatch = dateStr.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
10
+ if (ddmmyyyyMatch && ddmmyyyyMatch[1] && ddmmyyyyMatch[2] && ddmmyyyyMatch[3]) {
11
+ const [, day, month, year] = ddmmyyyyMatch;
12
+ const date = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day)));
13
+ if (!isNaN(date.getTime())) {
14
+ return date;
15
+ }
16
+ }
17
+ const ddmmyyyyDashMatch = dateStr.match(/^(\d{1,2})-(\d{1,2})-(\d{4})$/);
18
+ if (ddmmyyyyDashMatch && ddmmyyyyDashMatch[1] && ddmmyyyyDashMatch[2] && ddmmyyyyDashMatch[3]) {
19
+ const [, day, month, year] = ddmmyyyyDashMatch;
20
+ const date = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day)));
21
+ if (!isNaN(date.getTime())) {
22
+ return date;
23
+ }
24
+ }
25
+ const date = new Date(dateStr);
26
+ if (!isNaN(date.getTime())) {
27
+ return date;
28
+ }
29
+ return new Date('invalid');
30
+ }
5
31
  //# sourceMappingURL=date.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.js","sourceRoot":"","sources":["../../../src/utils/date.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,kBAAkB,CAAC,IAAW;IAC5C,MAAM,UAAU,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../../src/utils/date.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,kBAAkB,CAAC,IAAW;IAC5C,MAAM,UAAU,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,OAAO,UAAU,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AA0BD,MAAM,UAAU,iBAAiB,CAC/B,MAAY,EACZ,IAAU,EACV,MAAY,EACZ,IAAU;IAEV,OAAO,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC;AAC1C,CAAC;AAYD,MAAM,UAAU,eAAe,CAAC,OAAe;IAE7C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvE,IAAI,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,aAAa,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAGD,MAAM,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACzE,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,iBAAiB,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAGD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC"}
@@ -1,2 +1,4 @@
1
1
  export declare function formatDateToString(date?: Date): string;
2
+ export declare function dateRangesOverlap(start1: Date, end1: Date, start2: Date, end2: Date): boolean;
3
+ export declare function parseDateString(dateStr: string): Date;
2
4
  //# sourceMappingURL=date.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../../src/utils/date.ts"],"names":[],"mappings":"AASA,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAGtD"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../../src/utils/date.ts"],"names":[],"mappings":"AASA,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAGtD;AA0BD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,IAAI,EACZ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,IAAI,EACZ,IAAI,EAAE,IAAI,GACT,OAAO,CAET;AAYD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CA6BrD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onereach/billing-shared",
3
- "version": "11.66.2-beta.3422.0",
3
+ "version": "11.67.0",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
package/src/utils/date.ts CHANGED
@@ -11,3 +11,77 @@ export function formatDateToString(date?: Date): string {
11
11
  const targetDate = date || new Date();
12
12
  return targetDate.toISOString().split('T')[0];
13
13
  }
14
+
15
+ /**
16
+ * Checks if two date ranges overlap
17
+ * @param start1 Start date of the first range
18
+ * @param end1 End date of the first range
19
+ * @param start2 Start date of the second range
20
+ * @param end2 End date of the second range
21
+ * @returns True if the date ranges overlap, false otherwise
22
+ * @example
23
+ * // Overlapping ranges
24
+ * dateRangesOverlap(
25
+ * new Date('2024-01-01'),
26
+ * new Date('2024-01-15'),
27
+ * new Date('2024-01-10'),
28
+ * new Date('2024-01-20')
29
+ * ) // returns true
30
+ *
31
+ * // Non-overlapping ranges
32
+ * dateRangesOverlap(
33
+ * new Date('2024-01-01'),
34
+ * new Date('2024-01-15'),
35
+ * new Date('2024-01-20'),
36
+ * new Date('2024-01-30')
37
+ * ) // returns false
38
+ */
39
+ export function dateRangesOverlap(
40
+ start1: Date,
41
+ end1: Date,
42
+ start2: Date,
43
+ end2: Date,
44
+ ): boolean {
45
+ return start1 <= end2 && start2 <= end1;
46
+ }
47
+
48
+ /**
49
+ * Parses a date string supporting multiple formats including dd/MM/yyyy and MM/dd/yyyy
50
+ * @param dateStr The date string to parse
51
+ * @returns A Date object, or invalid Date if parsing fails
52
+ * @example
53
+ * parseDateString('20/06/2025') // returns Date for June 20, 2025
54
+ * parseDateString('06/20/2025') // returns Date for June 20, 2025
55
+ * parseDateString('2025-06-20') // returns Date for June 20, 2025
56
+ * parseDateString('invalid') // returns new Date('invalid')
57
+ */
58
+ export function parseDateString(dateStr: string): Date {
59
+ // Try dd/MM/yyyy format first (prioritize European format for CSV imports)
60
+ const ddmmyyyyMatch = dateStr.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
61
+ if (ddmmyyyyMatch && ddmmyyyyMatch[1] && ddmmyyyyMatch[2] && ddmmyyyyMatch[3]) {
62
+ const [, day, month, year] = ddmmyyyyMatch;
63
+ const date = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day)));
64
+ if (!isNaN(date.getTime())) {
65
+ return date;
66
+ }
67
+ }
68
+
69
+ // Try dd-MM-yyyy format
70
+ const ddmmyyyyDashMatch = dateStr.match(/^(\d{1,2})-(\d{1,2})-(\d{4})$/);
71
+ if (ddmmyyyyDashMatch && ddmmyyyyDashMatch[1] && ddmmyyyyDashMatch[2] && ddmmyyyyDashMatch[3]) {
72
+ const [, day, month, year] = ddmmyyyyDashMatch;
73
+ const date = new Date(Date.UTC(parseInt(year), parseInt(month) - 1, parseInt(day)));
74
+ if (!isNaN(date.getTime())) {
75
+ return date;
76
+ }
77
+ }
78
+
79
+ // Finally try standard Date constructor (handles ISO format and MM/dd/yyyy)
80
+ const date = new Date(dateStr);
81
+ if (!isNaN(date.getTime())) {
82
+ return date;
83
+ }
84
+
85
+ // Return invalid date if no format matches
86
+ return new Date('invalid');
87
+ }