@arkyn/shared 1.4.48 → 1.4.50

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/dist/index.d.ts CHANGED
@@ -21,5 +21,6 @@ export { normalizeRange, within } from "./services/range";
21
21
  export { truncateLargeFields } from "./services/truncateLargeFields";
22
22
  export { regex } from "./validations/regex";
23
23
  export { validateCPF } from "./validations/validateCPF";
24
+ export { validateDate } from "./validations/validateDate";
24
25
  export { validatePhone } from "./validations/validatePhone";
25
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC"}
package/dist/index.js CHANGED
@@ -26,4 +26,5 @@ export { truncateLargeFields } from "./services/truncateLargeFields";
26
26
  // validations
27
27
  export { regex } from "./validations/regex";
28
28
  export { validateCPF } from "./validations/validateCPF";
29
+ export { validateDate } from "./validations/validateDate";
29
30
  export { validatePhone } from "./validations/validatePhone";
@@ -0,0 +1,8 @@
1
+ type Format = "DD/MM/YYYY" | "MM-DD-YYYY" | "YYYY-MM-DD";
2
+ type Config = {
3
+ minYear?: number;
4
+ maxYear?: number;
5
+ };
6
+ declare function validateDate(date: string, format: Format, config?: Config): boolean;
7
+ export { validateDate };
8
+ //# sourceMappingURL=validateDate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateDate.d.ts","sourceRoot":"","sources":["../../src/validations/validateDate.ts"],"names":[],"mappings":"AAAA,KAAK,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC;AAEzD,KAAK,MAAM,GAAG;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,iBAAS,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CA6C5E;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,47 @@
1
+ function validateDate(date, format, config) {
2
+ let day, month, year;
3
+ const minYear = config?.minYear || 0;
4
+ const maxYear = config?.maxYear || 3000;
5
+ if (format === "DD/MM/YYYY") {
6
+ const dateRegex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
7
+ if (!dateRegex.test(date))
8
+ return false;
9
+ [, day, month, year] = date.match(dateRegex) || [];
10
+ }
11
+ else if (format === "MM-DD-YYYY") {
12
+ const dateRegex = /^(\d{2})-(\d{2})-(\d{4})$/;
13
+ if (!dateRegex.test(date))
14
+ return false;
15
+ [, month, day, year] = date.match(dateRegex) || [];
16
+ }
17
+ else if (format === "YYYY-MM-DD") {
18
+ const dateRegex = /^(\d{4})-(\d{2})-(\d{2})$/;
19
+ if (!dateRegex.test(date))
20
+ return false;
21
+ [, year, month, day] = date.match(dateRegex) || [];
22
+ }
23
+ else {
24
+ throw new Error("Invalid date format");
25
+ }
26
+ const dayNum = parseInt(day, 10);
27
+ const monthNum = parseInt(month, 10);
28
+ const yearNum = parseInt(year, 10);
29
+ if (dayNum < 1 || dayNum > 31)
30
+ return false;
31
+ if (monthNum < 1 || monthNum > 12)
32
+ return false;
33
+ const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
34
+ if (monthNum === 2) {
35
+ const isLeapYear = (yearNum % 4 === 0 && yearNum % 100 !== 0) || yearNum % 400 === 0;
36
+ if (dayNum > (isLeapYear ? 29 : 28))
37
+ return false;
38
+ }
39
+ else if (dayNum > daysInMonth[monthNum - 1]) {
40
+ return false;
41
+ }
42
+ if (yearNum < minYear || yearNum > maxYear)
43
+ return false;
44
+ const isValidDate = new Date(yearNum, monthNum - 1, dayNum).getDate() === dayNum;
45
+ return isValidDate;
46
+ }
47
+ export { validateDate };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arkyn/shared",
3
- "version": "1.4.48",
3
+ "version": "1.4.50",
4
4
  "main": "./dist/bundle.js",
5
5
  "module": "./src/index.ts",
6
6
  "type": "module",
package/src/index.ts CHANGED
@@ -30,4 +30,5 @@ export { truncateLargeFields } from "./services/truncateLargeFields";
30
30
  // validations
31
31
  export { regex } from "./validations/regex";
32
32
  export { validateCPF } from "./validations/validateCPF";
33
+ export { validateDate } from "./validations/validateDate";
33
34
  export { validatePhone } from "./validations/validatePhone";
@@ -0,0 +1,55 @@
1
+ type Format = "DD/MM/YYYY" | "MM-DD-YYYY" | "YYYY-MM-DD";
2
+
3
+ type Config = {
4
+ minYear?: number;
5
+ maxYear?: number;
6
+ };
7
+
8
+ function validateDate(date: string, format: Format, config?: Config): boolean {
9
+ let day: string, month: string, year: string;
10
+
11
+ const minYear = config?.minYear || 0;
12
+ const maxYear = config?.maxYear || 3000;
13
+
14
+ if (format === "DD/MM/YYYY") {
15
+ const dateRegex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
16
+ if (!dateRegex.test(date)) return false;
17
+ [, day, month, year] = date.match(dateRegex) || [];
18
+ } else if (format === "MM-DD-YYYY") {
19
+ const dateRegex = /^(\d{2})-(\d{2})-(\d{4})$/;
20
+ if (!dateRegex.test(date)) return false;
21
+ [, month, day, year] = date.match(dateRegex) || [];
22
+ } else if (format === "YYYY-MM-DD") {
23
+ const dateRegex = /^(\d{4})-(\d{2})-(\d{2})$/;
24
+ if (!dateRegex.test(date)) return false;
25
+ [, year, month, day] = date.match(dateRegex) || [];
26
+ } else {
27
+ throw new Error("Invalid date format");
28
+ }
29
+
30
+ const dayNum = parseInt(day, 10);
31
+ const monthNum = parseInt(month, 10);
32
+ const yearNum = parseInt(year, 10);
33
+
34
+ if (dayNum < 1 || dayNum > 31) return false;
35
+ if (monthNum < 1 || monthNum > 12) return false;
36
+
37
+ const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
38
+
39
+ if (monthNum === 2) {
40
+ const isLeapYear =
41
+ (yearNum % 4 === 0 && yearNum % 100 !== 0) || yearNum % 400 === 0;
42
+ if (dayNum > (isLeapYear ? 29 : 28)) return false;
43
+ } else if (dayNum > daysInMonth[monthNum - 1]) {
44
+ return false;
45
+ }
46
+
47
+ if (yearNum < minYear || yearNum > maxYear) return false;
48
+
49
+ const isValidDate =
50
+ new Date(yearNum, monthNum - 1, dayNum).getDate() === dayNum;
51
+
52
+ return isValidDate;
53
+ }
54
+
55
+ export { validateDate };