sales-frontend-utils 0.0.41 → 0.0.42

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.
Files changed (85) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.cts +11 -442
  4. package/dist/index.d.ts +11 -442
  5. package/dist/index.js +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/types/common.types.cjs +4 -0
  8. package/dist/types/common.types.cjs.map +1 -0
  9. package/dist/types/common.types.d.cts +11 -0
  10. package/dist/types/common.types.d.ts +11 -0
  11. package/dist/types/common.types.js +3 -0
  12. package/dist/types/common.types.js.map +1 -0
  13. package/dist/types/window.types.d.cjs +4 -0
  14. package/dist/types/window.types.d.cjs.map +1 -0
  15. package/dist/types/window.types.d.d.cts +6 -0
  16. package/dist/types/window.types.d.d.ts +6 -0
  17. package/dist/types/window.types.d.js +3 -0
  18. package/dist/types/window.types.d.js.map +1 -0
  19. package/dist/utils/age-utils.cjs +214 -0
  20. package/dist/utils/age-utils.cjs.map +1 -0
  21. package/dist/utils/age-utils.d.cts +63 -0
  22. package/dist/utils/age-utils.d.ts +63 -0
  23. package/dist/utils/age-utils.js +207 -0
  24. package/dist/utils/age-utils.js.map +1 -0
  25. package/dist/utils/astx2-utils.cjs +108 -0
  26. package/dist/utils/astx2-utils.cjs.map +1 -0
  27. package/dist/utils/astx2-utils.d.cts +28 -0
  28. package/dist/utils/astx2-utils.d.ts +28 -0
  29. package/dist/utils/astx2-utils.js +102 -0
  30. package/dist/utils/astx2-utils.js.map +1 -0
  31. package/dist/utils/canvas-utils.cjs +70 -0
  32. package/dist/utils/canvas-utils.cjs.map +1 -0
  33. package/dist/utils/canvas-utils.d.cts +30 -0
  34. package/dist/utils/canvas-utils.d.ts +30 -0
  35. package/dist/utils/canvas-utils.js +67 -0
  36. package/dist/utils/canvas-utils.js.map +1 -0
  37. package/dist/utils/cookie-utils.cjs +43 -0
  38. package/dist/utils/cookie-utils.cjs.map +1 -0
  39. package/dist/utils/cookie-utils.d.cts +13 -0
  40. package/dist/utils/cookie-utils.d.ts +13 -0
  41. package/dist/utils/cookie-utils.js +39 -0
  42. package/dist/utils/cookie-utils.js.map +1 -0
  43. package/dist/utils/date-utils.cjs +158 -0
  44. package/dist/utils/date-utils.cjs.map +1 -0
  45. package/dist/utils/date-utils.d.cts +100 -0
  46. package/dist/utils/date-utils.d.ts +100 -0
  47. package/dist/utils/date-utils.js +141 -0
  48. package/dist/utils/date-utils.js.map +1 -0
  49. package/dist/utils/environment-utils.cjs +187 -0
  50. package/dist/utils/environment-utils.cjs.map +1 -0
  51. package/dist/utils/environment-utils.d.cts +93 -0
  52. package/dist/utils/environment-utils.d.ts +93 -0
  53. package/dist/utils/environment-utils.js +175 -0
  54. package/dist/utils/environment-utils.js.map +1 -0
  55. package/dist/utils/event-handler-utils.cjs +53 -0
  56. package/dist/utils/event-handler-utils.cjs.map +1 -0
  57. package/dist/utils/event-handler-utils.d.cts +29 -0
  58. package/dist/utils/event-handler-utils.d.ts +29 -0
  59. package/dist/utils/event-handler-utils.js +51 -0
  60. package/dist/utils/event-handler-utils.js.map +1 -0
  61. package/dist/utils/file-utils.cjs +116 -0
  62. package/dist/utils/file-utils.cjs.map +1 -0
  63. package/dist/utils/file-utils.d.cts +20 -0
  64. package/dist/utils/file-utils.d.ts +20 -0
  65. package/dist/utils/file-utils.js +106 -0
  66. package/dist/utils/file-utils.js.map +1 -0
  67. package/dist/utils/formatting.cjs +41 -0
  68. package/dist/utils/formatting.cjs.map +1 -0
  69. package/dist/utils/formatting.d.cts +7 -0
  70. package/dist/utils/formatting.d.ts +7 -0
  71. package/dist/utils/formatting.js +35 -0
  72. package/dist/utils/formatting.js.map +1 -0
  73. package/dist/utils/timing-utils.cjs +40 -0
  74. package/dist/utils/timing-utils.cjs.map +1 -0
  75. package/dist/utils/timing-utils.d.cts +16 -0
  76. package/dist/utils/timing-utils.d.ts +16 -0
  77. package/dist/utils/timing-utils.js +37 -0
  78. package/dist/utils/timing-utils.js.map +1 -0
  79. package/dist/utils/user-agent-utils.cjs +328 -0
  80. package/dist/utils/user-agent-utils.cjs.map +1 -0
  81. package/dist/utils/user-agent-utils.d.cts +113 -0
  82. package/dist/utils/user-agent-utils.d.ts +113 -0
  83. package/dist/utils/user-agent-utils.js +307 -0
  84. package/dist/utils/user-agent-utils.js.map +1 -0
  85. package/package.json +111 -1
@@ -0,0 +1,67 @@
1
+ // src/utils/canvas-utils.ts
2
+ var convertTextToImg = ({
3
+ targetStr,
4
+ canvasWidth,
5
+ canvasHeight,
6
+ backgroundColor,
7
+ fontColor,
8
+ fontSize,
9
+ fontWeight,
10
+ fontFamily = `'Malgun Gothic', '\uB9D1\uC740 \uACE0\uB515', 'sans-serif', 'Arial'`
11
+ }) => {
12
+ const canvas = document.createElement("canvas");
13
+ const ctx = canvas.getContext("2d");
14
+ if (!ctx) {
15
+ throw new Error("Canvas context\uB97C \uAC00\uC838\uC62C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.");
16
+ }
17
+ const defaultHeight = 150;
18
+ const calculatedWidth = targetStr.length * 70;
19
+ canvas.width = canvasWidth ?? calculatedWidth;
20
+ canvas.height = canvasHeight ?? defaultHeight;
21
+ if (backgroundColor) {
22
+ ctx.fillStyle = backgroundColor;
23
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
24
+ }
25
+ ctx.fillStyle = fontColor ?? "black";
26
+ ctx.textAlign = "center";
27
+ ctx.font = `${fontWeight ?? "bold"} ${fontSize ?? 75}px ${fontFamily}`;
28
+ console.log("font", `${fontWeight ?? "bold"} ${fontSize ?? 75}px ${fontFamily}`);
29
+ ctx.textBaseline = "middle";
30
+ ctx.fillText(targetStr, canvas.width / 2, canvas.height / 2);
31
+ return canvas.toDataURL();
32
+ };
33
+ function drawImageResizeCentered(base64, size) {
34
+ return new Promise((resolve) => {
35
+ const { canvasHeight, canvasWidth } = size;
36
+ const canvas = document.createElement("canvas");
37
+ canvas.width = canvasWidth;
38
+ canvas.height = canvasHeight;
39
+ const ctx = canvas.getContext("2d");
40
+ const img = new Image();
41
+ img.src = base64;
42
+ img.onload = () => {
43
+ const imageWidth = img.width;
44
+ const imageHeight = img.height;
45
+ const canvasRatio = canvasWidth / canvasHeight;
46
+ const imageRatio = imageWidth / imageHeight;
47
+ let newWidth;
48
+ let newHeight;
49
+ if (imageRatio > canvasRatio) {
50
+ newWidth = canvasWidth;
51
+ newHeight = newWidth / imageRatio;
52
+ } else {
53
+ newHeight = canvasHeight;
54
+ newWidth = newHeight * imageRatio;
55
+ }
56
+ const x = (canvasWidth - newWidth) / 2;
57
+ const y = (canvasHeight - newHeight) / 2;
58
+ ctx?.clearRect(0, 0, canvasWidth, canvasHeight);
59
+ ctx?.drawImage(img, x, y, newWidth, newHeight);
60
+ resolve(canvas.toDataURL());
61
+ };
62
+ });
63
+ }
64
+
65
+ export { convertTextToImg, drawImageResizeCentered };
66
+ //# sourceMappingURL=canvas-utils.js.map
67
+ //# sourceMappingURL=canvas-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/canvas-utils.ts"],"names":[],"mappings":"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","file":"canvas-utils.js","sourcesContent":["interface ConvertTextToImgParams {\n /** 이미지로 변환할 문자열 */\n targetStr: string;\n /** 캔버스 너비 (지정하지 않으면 텍스트 길이에 따라 자동 계산) */\n canvasWidth?: number;\n /** 캔버스 높이 (지정하지 않으면 기본값 150px) */\n canvasHeight?: number;\n /** 배경색 (지정하지 않으면 투명) */\n backgroundColor?: string;\n /** 폰트 크기 (지정하지 않으면 기본값 75px) */\n fontSize?: number;\n /** 폰트 색상 (지정하지 않으면 기본값 검정색) */\n fontColor?: string;\n /** 폰트 두께 (지정하지 않으면 기본값 bold) */\n fontWeight?: string;\n /** 폰트 패밀리 (지정하지 않으면 기본값 ) */\n fontFamily?: string;\n}\n\n/**\n * 텍스트를 이미지(Base64)로 변환하는 함수\n * @param params - 변환에 필요한 파라미터 객체\n * @returns Base64로 인코딩된 이미지 데이터 URL\n */\nexport const convertTextToImg = ({\n targetStr,\n canvasWidth,\n canvasHeight,\n backgroundColor,\n fontColor,\n fontSize,\n fontWeight,\n fontFamily = `'Malgun Gothic', '맑은 고딕', 'sans-serif', 'Arial'`\n}: ConvertTextToImgParams): string => {\n // 1. 메모리에 캔버스 요소 생성\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n // 캔버스 컨텍스트를 가져올 수 없는 경우 에러 처리\n throw new Error('Canvas context를 가져올 수 없습니다.');\n }\n\n // 2. 캔버스 크기 설정\n const defaultHeight = 150;\n const calculatedWidth = targetStr.length * 70; // 글자 수 기반 너비 계산\n\n canvas.width = canvasWidth ?? calculatedWidth;\n canvas.height = canvasHeight ?? defaultHeight;\n\n // 3. 배경색 처리\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n // 4. 텍스트 그리기\n ctx.fillStyle = fontColor ?? 'black';\n ctx.textAlign = 'center';\n ctx.font = `${fontWeight ?? 'bold'} ${fontSize ?? 75}px ${fontFamily}`;\n\n console.log('font', `${fontWeight ?? 'bold'} ${fontSize ?? 75}px ${fontFamily}`);\n ctx.textBaseline = 'middle'; // 텍스트를 수직 중앙에 더 잘 맞추기 위해 추가\n\n // 텍스트를 캔버스 중앙에 그립니다.\n ctx.fillText(targetStr, canvas.width / 2, canvas.height / 2);\n\n // 5. Base64 이미지 데이터로 변환하여 반환\n return canvas.toDataURL(); // 기본적으로 'image/png'\n};\n\nexport function drawImageResizeCentered(base64: string, size: { canvasWidth: number; canvasHeight: number }) {\n return new Promise((resolve) => {\n const { canvasHeight, canvasWidth } = size;\n\n const canvas = document.createElement('canvas');\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n const ctx = canvas.getContext('2d');\n\n const img = new Image();\n img.src = base64;\n img.onload = () => {\n const imageWidth = img.width;\n const imageHeight = img.height;\n\n const canvasRatio = canvasWidth / canvasHeight;\n const imageRatio = imageWidth / imageHeight;\n\n let newWidth;\n let newHeight;\n\n if (imageRatio > canvasRatio) {\n newWidth = canvasWidth;\n newHeight = newWidth / imageRatio;\n } else {\n newHeight = canvasHeight;\n newWidth = newHeight * imageRatio;\n }\n\n const x = (canvasWidth - newWidth) / 2;\n const y = (canvasHeight - newHeight) / 2;\n\n ctx?.clearRect(0, 0, canvasWidth, canvasHeight);\n ctx?.drawImage(img, x, y, newWidth, newHeight);\n\n resolve(canvas.toDataURL());\n };\n });\n}\n"]}
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ // src/utils/cookie-utils.ts
4
+ var getCookie = (name) => {
5
+ if (typeof document === "undefined") {
6
+ return "";
7
+ }
8
+ const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));
9
+ return match ? decodeURIComponent(match[2] || "") : "";
10
+ };
11
+ var setCookie = (name, value, options = {}) => {
12
+ if (typeof document === "undefined") {
13
+ return;
14
+ }
15
+ let cookieString = `${name}=${encodeURIComponent(value)}`;
16
+ if (options.expires) {
17
+ let expiresDate;
18
+ if (typeof options.expires === "number") {
19
+ expiresDate = /* @__PURE__ */ new Date();
20
+ expiresDate.setDate(expiresDate.getDate() + options.expires);
21
+ } else {
22
+ expiresDate = options.expires;
23
+ }
24
+ cookieString += `; expires=${expiresDate.toUTCString()}`;
25
+ }
26
+ cookieString += `; path=${options.path || "/"}`;
27
+ if (options.domain) {
28
+ cookieString += `; domain=${options.domain}`;
29
+ }
30
+ if (options.secure) {
31
+ cookieString += "; secure";
32
+ }
33
+ document.cookie = cookieString;
34
+ };
35
+ var deleteCookie = (name, options = {}) => {
36
+ setCookie(name, "", { ...options, expires: -1 });
37
+ };
38
+
39
+ exports.deleteCookie = deleteCookie;
40
+ exports.getCookie = getCookie;
41
+ exports.setCookie = setCookie;
42
+ //# sourceMappingURL=cookie-utils.cjs.map
43
+ //# sourceMappingURL=cookie-utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cookie-utils.ts"],"names":[],"mappings":";;;AAAa,IAAA,SAAA,GAAY,CAAC,IAAyB,KAAA;AACjD,EAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,IAAO,OAAA,EAAA;AAAA;AAET,EAAM,MAAA,KAAA,GAAQ,SAAS,MAAO,CAAA,KAAA,CAAM,IAAI,MAAO,CAAA,CAAA,OAAA,EAAU,IAAI,CAAA,QAAA,CAAU,CAAC,CAAA;AAExE,EAAA,OAAO,QAAQ,kBAAmB,CAAA,KAAA,CAAM,CAAC,CAAA,IAAK,EAAE,CAAI,GAAA,EAAA;AACtD;AAEO,IAAM,YAAY,CACvB,IAAA,EACA,KACA,EAAA,OAAA,GAKI,EACK,KAAA;AACT,EAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,IAAA;AAAA;AAGF,EAAA,IAAI,eAAe,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AAEvD,EAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,IAAI,IAAA,WAAA;AACJ,IAAI,IAAA,OAAO,OAAQ,CAAA,OAAA,KAAY,QAAU,EAAA;AACvC,MAAA,WAAA,uBAAkB,IAAK,EAAA;AACvB,MAAA,WAAA,CAAY,OAAQ,CAAA,WAAA,CAAY,OAAQ,EAAA,GAAI,QAAQ,OAAO,CAAA;AAAA,KACtD,MAAA;AACL,MAAA,WAAA,GAAc,OAAQ,CAAA,OAAA;AAAA;AAExB,IAAgB,YAAA,IAAA,CAAA,UAAA,EAAa,WAAY,CAAA,WAAA,EAAa,CAAA,CAAA;AAAA;AAGxD,EAAgB,YAAA,IAAA,CAAA,OAAA,EAAU,OAAQ,CAAA,IAAA,IAAQ,GAAG,CAAA,CAAA;AAE7C,EAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,IAAgB,YAAA,IAAA,CAAA,SAAA,EAAY,QAAQ,MAAM,CAAA,CAAA;AAAA;AAG5C,EAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,IAAgB,YAAA,IAAA,UAAA;AAAA;AAGlB,EAAA,QAAA,CAAS,MAAS,GAAA,YAAA;AACpB;AAEO,IAAM,YAAe,GAAA,CAAC,IAAc,EAAA,OAAA,GAA8C,EAAa,KAAA;AACpG,EAAA,SAAA,CAAU,MAAM,EAAI,EAAA,EAAE,GAAG,OAAS,EAAA,OAAA,EAAS,IAAI,CAAA;AACjD","file":"cookie-utils.cjs","sourcesContent":["export const getCookie = (name: string): string => {\n if (typeof document === 'undefined') {\n return '';\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n\n return match ? decodeURIComponent(match[2] || '') : '';\n};\n\nexport const setCookie = (\n name: string,\n value: string,\n options: {\n expires?: number | Date; // number of days\n path?: string;\n domain?: string;\n secure?: boolean;\n } = {}\n): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (options.expires) {\n let expiresDate: Date;\n if (typeof options.expires === 'number') {\n expiresDate = new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n\n cookieString += `; path=${options.path || '/'}`;\n\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n\n if (options.secure) {\n cookieString += '; secure';\n }\n\n document.cookie = cookieString;\n};\n\nexport const deleteCookie = (name: string, options: { path?: string; domain?: string } = {}): void => {\n setCookie(name, '', { ...options, expires: -1 });\n};\n"]}
@@ -0,0 +1,13 @@
1
+ declare const getCookie: (name: string) => string;
2
+ declare const setCookie: (name: string, value: string, options?: {
3
+ expires?: number | Date;
4
+ path?: string;
5
+ domain?: string;
6
+ secure?: boolean;
7
+ }) => void;
8
+ declare const deleteCookie: (name: string, options?: {
9
+ path?: string;
10
+ domain?: string;
11
+ }) => void;
12
+
13
+ export { deleteCookie, getCookie, setCookie };
@@ -0,0 +1,13 @@
1
+ declare const getCookie: (name: string) => string;
2
+ declare const setCookie: (name: string, value: string, options?: {
3
+ expires?: number | Date;
4
+ path?: string;
5
+ domain?: string;
6
+ secure?: boolean;
7
+ }) => void;
8
+ declare const deleteCookie: (name: string, options?: {
9
+ path?: string;
10
+ domain?: string;
11
+ }) => void;
12
+
13
+ export { deleteCookie, getCookie, setCookie };
@@ -0,0 +1,39 @@
1
+ // src/utils/cookie-utils.ts
2
+ var getCookie = (name) => {
3
+ if (typeof document === "undefined") {
4
+ return "";
5
+ }
6
+ const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));
7
+ return match ? decodeURIComponent(match[2] || "") : "";
8
+ };
9
+ var setCookie = (name, value, options = {}) => {
10
+ if (typeof document === "undefined") {
11
+ return;
12
+ }
13
+ let cookieString = `${name}=${encodeURIComponent(value)}`;
14
+ if (options.expires) {
15
+ let expiresDate;
16
+ if (typeof options.expires === "number") {
17
+ expiresDate = /* @__PURE__ */ new Date();
18
+ expiresDate.setDate(expiresDate.getDate() + options.expires);
19
+ } else {
20
+ expiresDate = options.expires;
21
+ }
22
+ cookieString += `; expires=${expiresDate.toUTCString()}`;
23
+ }
24
+ cookieString += `; path=${options.path || "/"}`;
25
+ if (options.domain) {
26
+ cookieString += `; domain=${options.domain}`;
27
+ }
28
+ if (options.secure) {
29
+ cookieString += "; secure";
30
+ }
31
+ document.cookie = cookieString;
32
+ };
33
+ var deleteCookie = (name, options = {}) => {
34
+ setCookie(name, "", { ...options, expires: -1 });
35
+ };
36
+
37
+ export { deleteCookie, getCookie, setCookie };
38
+ //# sourceMappingURL=cookie-utils.js.map
39
+ //# sourceMappingURL=cookie-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cookie-utils.ts"],"names":[],"mappings":";AAAa,IAAA,SAAA,GAAY,CAAC,IAAyB,KAAA;AACjD,EAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,IAAO,OAAA,EAAA;AAAA;AAET,EAAM,MAAA,KAAA,GAAQ,SAAS,MAAO,CAAA,KAAA,CAAM,IAAI,MAAO,CAAA,CAAA,OAAA,EAAU,IAAI,CAAA,QAAA,CAAU,CAAC,CAAA;AAExE,EAAA,OAAO,QAAQ,kBAAmB,CAAA,KAAA,CAAM,CAAC,CAAA,IAAK,EAAE,CAAI,GAAA,EAAA;AACtD;AAEO,IAAM,YAAY,CACvB,IAAA,EACA,KACA,EAAA,OAAA,GAKI,EACK,KAAA;AACT,EAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,IAAA;AAAA;AAGF,EAAA,IAAI,eAAe,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AAEvD,EAAA,IAAI,QAAQ,OAAS,EAAA;AACnB,IAAI,IAAA,WAAA;AACJ,IAAI,IAAA,OAAO,OAAQ,CAAA,OAAA,KAAY,QAAU,EAAA;AACvC,MAAA,WAAA,uBAAkB,IAAK,EAAA;AACvB,MAAA,WAAA,CAAY,OAAQ,CAAA,WAAA,CAAY,OAAQ,EAAA,GAAI,QAAQ,OAAO,CAAA;AAAA,KACtD,MAAA;AACL,MAAA,WAAA,GAAc,OAAQ,CAAA,OAAA;AAAA;AAExB,IAAgB,YAAA,IAAA,CAAA,UAAA,EAAa,WAAY,CAAA,WAAA,EAAa,CAAA,CAAA;AAAA;AAGxD,EAAgB,YAAA,IAAA,CAAA,OAAA,EAAU,OAAQ,CAAA,IAAA,IAAQ,GAAG,CAAA,CAAA;AAE7C,EAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,IAAgB,YAAA,IAAA,CAAA,SAAA,EAAY,QAAQ,MAAM,CAAA,CAAA;AAAA;AAG5C,EAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,IAAgB,YAAA,IAAA,UAAA;AAAA;AAGlB,EAAA,QAAA,CAAS,MAAS,GAAA,YAAA;AACpB;AAEO,IAAM,YAAe,GAAA,CAAC,IAAc,EAAA,OAAA,GAA8C,EAAa,KAAA;AACpG,EAAA,SAAA,CAAU,MAAM,EAAI,EAAA,EAAE,GAAG,OAAS,EAAA,OAAA,EAAS,IAAI,CAAA;AACjD","file":"cookie-utils.js","sourcesContent":["export const getCookie = (name: string): string => {\n if (typeof document === 'undefined') {\n return '';\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n\n return match ? decodeURIComponent(match[2] || '') : '';\n};\n\nexport const setCookie = (\n name: string,\n value: string,\n options: {\n expires?: number | Date; // number of days\n path?: string;\n domain?: string;\n secure?: boolean;\n } = {}\n): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (options.expires) {\n let expiresDate: Date;\n if (typeof options.expires === 'number') {\n expiresDate = new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n\n cookieString += `; path=${options.path || '/'}`;\n\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n\n if (options.secure) {\n cookieString += '; secure';\n }\n\n document.cookie = cookieString;\n};\n\nexport const deleteCookie = (name: string, options: { path?: string; domain?: string } = {}): void => {\n setCookie(name, '', { ...options, expires: -1 });\n};\n"]}
@@ -0,0 +1,158 @@
1
+ 'use strict';
2
+
3
+ var dayjs = require('dayjs');
4
+ var customParseFormat = require('dayjs/plugin/customParseFormat.js');
5
+
6
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
+
8
+ var dayjs__default = /*#__PURE__*/_interopDefault(dayjs);
9
+ var customParseFormat__default = /*#__PURE__*/_interopDefault(customParseFormat);
10
+
11
+ // src/utils/date-utils.ts
12
+ dayjs__default.default.locale("ko");
13
+ dayjs__default.default.extend(customParseFormat__default.default);
14
+ function getLastDay(year, month) {
15
+ switch (month) {
16
+ case 2:
17
+ return year % 4 === 0 ? 29 : 28;
18
+ case 4:
19
+ case 6:
20
+ case 9:
21
+ case 11:
22
+ return 30;
23
+ default:
24
+ return 31;
25
+ }
26
+ }
27
+ var getOneMonthLater = (value, format) => {
28
+ const str = value ? value.split(".").join("") : "";
29
+ const date = value ? new Date(Number(str.substring(0, 4)), Number(str.substring(4, 6)) - 1, Number(str.substring(6, 8))) : /* @__PURE__ */ new Date();
30
+ try {
31
+ return dayjs__default.default(new Date(date.setMonth(date.getMonth() + 1))).format(format || "YYYY.MM.DD");
32
+ } catch (err) {
33
+ console.warn(err);
34
+ return "";
35
+ }
36
+ };
37
+ var getDateDiff = (date1, date2) => {
38
+ const diff1 = dayjs__default.default(date1);
39
+ const diff2 = dayjs__default.default(date2);
40
+ return diff1.diff(diff2, "day");
41
+ };
42
+ var validateBirthdate = (front, back) => {
43
+ const year = parseInt(front.slice(0, 2));
44
+ const month = parseInt(front.slice(2, 4));
45
+ const day = parseInt(front.slice(4, 6));
46
+ let birthYear = 0;
47
+ switch (back) {
48
+ case "1":
49
+ case "2":
50
+ case "5":
51
+ case "6":
52
+ birthYear = 1900 + year;
53
+ break;
54
+ case "3":
55
+ case "4":
56
+ case "7":
57
+ case "8":
58
+ birthYear = 2e3 + year;
59
+ break;
60
+ case "9":
61
+ case "0":
62
+ return false;
63
+ default:
64
+ return false;
65
+ }
66
+ const birthdate = new Date(birthYear, month - 1, day);
67
+ const currdate = /* @__PURE__ */ new Date();
68
+ return birthdate < currdate;
69
+ };
70
+ function isDateAfter(targetDate, compareDate) {
71
+ const targetDateTime = new Date(convertDateFormat(targetDate, "YYYY-MM-DD")).getTime();
72
+ const compareDateTime = new Date(convertDateFormat(compareDate, "YYYY-MM-DD")).getTime();
73
+ return targetDateTime > compareDateTime;
74
+ }
75
+ var convertDateFormat = (value, format) => {
76
+ if (!value) {
77
+ return "";
78
+ }
79
+ return dayjs__default.default(value).format(format || "YYYY.MM.DD");
80
+ };
81
+ var isFutureDate = (dateString, format) => {
82
+ if (!dateString) {
83
+ return false;
84
+ }
85
+ const today = dayjs__default.default().startOf("day");
86
+ const date = dayjs__default.default(dateString, format || "YYYYMMDD", true);
87
+ return date.isValid() && date.isAfter(today);
88
+ };
89
+ var convertDateString = ({ dateString, fromFormat, toFormat }) => {
90
+ return dayjs__default.default(dateString, fromFormat).format(toFormat);
91
+ };
92
+ var isDate = (value) => {
93
+ return value instanceof Date && !isNaN(+value);
94
+ };
95
+ var isValidDate = (dateString, format) => {
96
+ if (!dateString) {
97
+ return false;
98
+ }
99
+ const date = dayjs__default.default(dateString, format || "YYYYMMDD", true);
100
+ return date.isValid();
101
+ };
102
+ var getPeriodDate = (periodType) => {
103
+ const lastMonth = dayjs__default.default().subtract(1, "M");
104
+ const today = /* @__PURE__ */ new Date();
105
+ today.setHours(0, 0, 0, 0);
106
+ const endDate = new Date(today);
107
+ let startDate;
108
+ switch (periodType) {
109
+ case "today":
110
+ startDate = new Date(today);
111
+ return { startDate, endDate };
112
+ case "week":
113
+ startDate = new Date(today);
114
+ startDate.setDate(startDate.getDate() - 6);
115
+ return { startDate, endDate };
116
+ case "month":
117
+ startDate = new Date(today);
118
+ startDate.setDate(startDate.getDate() - 29);
119
+ return { startDate, endDate };
120
+ case "thisWeek":
121
+ return { startDate: dayjs__default.default().day(0).toDate(), endDate: dayjs__default.default().day(6).toDate() };
122
+ case "lastWeek":
123
+ return {
124
+ startDate: dayjs__default.default().subtract(1, "w").day(0).toDate(),
125
+ endDate: dayjs__default.default().subtract(1, "w").day(6).toDate()
126
+ };
127
+ case "last7Days":
128
+ return { startDate: dayjs__default.default().subtract(7, "d").toDate(), endDate: dayjs__default.default().toDate() };
129
+ case "thisMonth":
130
+ return {
131
+ startDate: dayjs__default.default().date(1).toDate(),
132
+ endDate: dayjs__default.default().date(dayjs__default.default().daysInMonth()).toDate()
133
+ };
134
+ case "lastMonth":
135
+ return {
136
+ startDate: lastMonth.date(1).toDate(),
137
+ endDate: lastMonth.date(lastMonth.daysInMonth()).toDate()
138
+ };
139
+ case "last365Days":
140
+ return { startDate: dayjs__default.default().subtract(365, "d").toDate(), endDate: dayjs__default.default().toDate() };
141
+ default:
142
+ return null;
143
+ }
144
+ };
145
+
146
+ exports.convertDateFormat = convertDateFormat;
147
+ exports.convertDateString = convertDateString;
148
+ exports.getDateDiff = getDateDiff;
149
+ exports.getLastDay = getLastDay;
150
+ exports.getOneMonthLater = getOneMonthLater;
151
+ exports.getPeriodDate = getPeriodDate;
152
+ exports.isDate = isDate;
153
+ exports.isDateAfter = isDateAfter;
154
+ exports.isFutureDate = isFutureDate;
155
+ exports.isValidDate = isValidDate;
156
+ exports.validateBirthdate = validateBirthdate;
157
+ //# sourceMappingURL=date-utils.cjs.map
158
+ //# sourceMappingURL=date-utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/date-utils.ts"],"names":["dayjs","customParseFormat"],"mappings":"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","file":"date-utils.cjs","sourcesContent":["\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\n\n/*****************************\n * 날짜 관련 유틸\n ******************************/\ndayjs.locale('ko');\ndayjs.extend(customParseFormat);\n\n/**\n *\n * @param year\n * @param month\n * @returns\n */\nexport function getLastDay(year: number, month: number) {\n switch (month) {\n case 2:\n return year % 4 === 0 ? 29 : 28;\n case 4:\n case 6:\n case 9:\n case 11:\n return 30;\n default:\n return 31;\n }\n}\n\n/**\n * 한달뒤 날짜를 포맷형태로 리턴\n * @param 20200101 or 2020.01.01\n * @param 'YYYY.MM.DD'\n * @returns\n */\nexport const getOneMonthLater = (value?: string, format?: string): string => {\n const str = value ? value.split('.').join('') : '';\n const date = value\n ? new Date(Number(str.substring(0, 4)), Number(str.substring(4, 6)) - 1, Number(str.substring(6, 8)))\n : new Date();\n try {\n return dayjs(new Date(date.setMonth(date.getMonth() + 1))).format(format || 'YYYY.MM.DD');\n } catch (err) {\n console.warn(err);\n\n return '';\n }\n};\n\n/**\n * 날짜 차이를 구한다. 포맷에 맞지 않으면 Not a Number 리턴\n * @param date1 (yyyymmdd or yyyy.mm.dd or yyyy-mm-dd)\n * @param date2 (yyyymmdd or yyyy.mm.dd or yyyy-mm-dd)\n * @returns date1 - date2\n */\nexport const getDateDiff = (date1: string | number | dayjs.Dayjs | Date, date2: string | number | dayjs.Dayjs | Date): number => {\n const diff1 = dayjs(date1);\n const diff2 = dayjs(date2);\n\n /** diff1 - diff2: 현재: 0 */\n return diff1.diff(diff2, 'day');\n};\n\n/**\n * 입력되어진 생년월일 값이 당일 기준으로 미래시점인 경우 false를 반환합니다. (회원체계 기준 9, 0 일 경우 오류)\n * @param front 주민등록번호 앞 6자리\n * @param back 주민등록번호 뒤 첫자리\n * @returns boolean\n */\nexport const validateBirthdate = (front: string, back: string) => {\n const year = parseInt(front.slice(0, 2));\n const month = parseInt(front.slice(2, 4));\n const day = parseInt(front.slice(4, 6));\n let birthYear = 0;\n\n switch (back) {\n case '1':\n case '2':\n case '5':\n case '6':\n birthYear = 1900 + year;\n break;\n case '3':\n case '4':\n case '7':\n case '8':\n birthYear = 2000 + year;\n break;\n case '9':\n case '0':\n // birthYear = 1800 + year;\n return false;\n default:\n return false;\n }\n\n const birthdate = new Date(birthYear, month - 1, day);\n const currdate = new Date();\n\n return birthdate < currdate;\n};\n\n/**\n * 목표 날짜가 비교 날짜 이후 인지 확인하는 함수 (YYYYMMDD 형식)\n * @param targetDate\n * @param compareDate\n * @returns boolean\n */\nexport function isDateAfter(targetDate: string | number | dayjs.Dayjs | Date, compareDate: string | number | dayjs.Dayjs | Date) {\n const targetDateTime = new Date(convertDateFormat(targetDate, 'YYYY-MM-DD')).getTime();\n const compareDateTime = new Date(convertDateFormat(compareDate, 'YYYY-MM-DD')).getTime();\n\n return targetDateTime > compareDateTime;\n}\n\n/**\n * 날짜를 포맷형태로 리턴\n * @param 20200101 string\n * @param 'YYYY.MM.DD\n * @returns 포맷화된 날짜\n */\nexport const convertDateFormat = (value?: string | number | dayjs.Dayjs | Date, format?: string): string => {\n if (!value) {\n return '';\n }\n\n return dayjs(value).format(format || 'YYYY.MM.DD');\n};\n\n/**\n * 주어진 날짜가 오늘 날짜 이후인지 확인합니다.\n *\n * @param {string} dateString - 확인할 날짜 문자열입니다.\n * @param {dayjs.OptionType} [format] - 날짜 문자열의 형식입니다.\n * @returns {boolean} - 주어진 날짜가 오늘 이후라면 true를 반환합니다.\n */\nexport const isFutureDate = (dateString?: string | number | dayjs.Dayjs | Date, format?: dayjs.OptionType) => {\n if (!dateString) {\n return false;\n }\n\n const today = dayjs().startOf('day');\n const date = dayjs(dateString, format || 'YYYYMMDD', true);\n\n return date.isValid() && date.isAfter(today);\n};\n\n\n\n/**\n * 자주 사용하는 타입들 추가해두었습니다. 필요하신 형태 있으면 추가해주세요.\n */\nexport type DateFormat =\n | 'YYYY-MM-DD'\n | 'YYYY.MM.DD'\n | 'YYYY-MM'\n | 'YYYY-MM-DD HH:mm:ss'\n | 'YYYY.MM.DD HH:mm:ss'\n | 'YYYY-MM-DD HH:mm'\n | 'YYYYMMDD'\n | 'YYYY.M.D'\n | 'YYYY.M'\n | 'YYYY.MM.DD(dd) HH:mm:ss'\n | 'HH:mm:ss'\n | 'YYYY.M.D(dd)'\n | 'HH:mm';\n\ninterface Props {\n /** 날짜 문자열 */\n dateString: string | number | Date | dayjs.Dayjs;\n /** 현재 날짜 포맷 */\n fromFormat?: string;\n /** 컨버팅할 날짜 포맷 */\n toFormat: string;\n}\n\n/**\n * date string 을 입력받고 패턴에 맞게 포맷팅을 변경하는 유틸 함수\n * fromFormat 현재 날짜 포맷\n * toFormat 리턴 날짜 포맷\n */\nexport const convertDateString = ({ dateString, fromFormat, toFormat }: Props) => {\n return dayjs(dateString, fromFormat).format(toFormat);\n};\n\nexport const isDate = (value: unknown) => {\n return value instanceof Date && !isNaN(+value);\n};\n\n\n/**\n * 날짜 유효성 검사\n *\n * @param {string} dateString - 검사할 날짜 문자열.\n * @param {dayjs.OptionType} [format] - 날짜 문자열의 형식입니다.\n * @returns {boolean} - 유효한 날짜이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.\n */\nexport const isValidDate = (dateString?: string | number | dayjs.Dayjs | Date, format?: dayjs.OptionType) => {\n if (!dateString) {\n return false;\n }\n\n const date = dayjs(dateString, format || 'YYYYMMDD', true);\n\n return date.isValid();\n};\n\n\nexport type PeriodType = 'thisWeek' | 'lastWeek' | 'last7Days' | 'thisMonth' | 'lastMonth' | 'last365Days' | 'week' | 'month' | 'today';\n/**\n * @description\n * today 당일\n * week 7일: 오늘 기준 7일 전\n * month 30: 오늘 기준 30일 전\n * thisWeek 이번 주 (일요일 ~ 토요일)\n * lastWeek 지난 주 (일요일 ~ 토요일)\n * last7Days 최근 7일 (오늘 포함)\n * thisMonth 이번 달 (1일 ~ 말일)\n * lastMonth 지난 달 (1일 ~ 말일)\n * last365Days 최근 365일 (오늘 포함)\n * @param periodType \n * @returns \n */\nexport const getPeriodDate = (periodType: PeriodType | 'today') => {\n\n const lastMonth = dayjs().subtract(1, 'M');\n\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n const endDate = new Date(today);\n let startDate: Date;\n\n switch (periodType) {\n case 'today':\n // 당일\n startDate = new Date(today);\n\n return { startDate, endDate };\n\n case 'week':\n // 7일: 오늘 기준 7일 전\n startDate = new Date(today);\n startDate.setDate(startDate.getDate() - 6);\n\n return { startDate, endDate };\n case 'month':\n // 30일: 오늘 기준 30일 전\n startDate = new Date(today);\n startDate.setDate(startDate.getDate() - 29);\n\n return { startDate, endDate };\n\n case 'thisWeek':\n // 이번 주 (일요일 ~ 토요일)\n return ({ startDate: dayjs().day(0).toDate(), endDate: dayjs().day(6).toDate() });\n case 'lastWeek':\n // 지난 주 (일요일 ~ 토요일)\n return ({\n startDate: dayjs().subtract(1, 'w').day(0).toDate(),\n endDate: dayjs().subtract(1, 'w').day(6).toDate()\n });\n case 'last7Days':\n // 최근 7일 (오늘 포함)\n return ({ startDate: dayjs().subtract(7, 'd').toDate(), endDate: dayjs().toDate() });\n case 'thisMonth':\n // 이번 달 (1일 ~ 말일)\n return ({\n startDate: dayjs().date(1).toDate(),\n endDate: dayjs().date(dayjs().daysInMonth()).toDate()\n });\n case 'lastMonth':\n // 지난 달 (1일 ~ 말일)\n return ({\n startDate: lastMonth.date(1).toDate(),\n endDate: lastMonth.date(lastMonth.daysInMonth()).toDate()\n });\n case 'last365Days':\n // 최근 365일 (오늘 포함)\n return ({ startDate: dayjs().subtract(365, 'd').toDate(), endDate: dayjs().toDate() });\n default:\n return null;\n }\n\n\n};\n\n\n"]}
@@ -0,0 +1,100 @@
1
+ import dayjs from 'dayjs';
2
+
3
+ /**
4
+ *
5
+ * @param year
6
+ * @param month
7
+ * @returns
8
+ */
9
+ declare function getLastDay(year: number, month: number): 29 | 28 | 30 | 31;
10
+ /**
11
+ * 한달뒤 날짜를 포맷형태로 리턴
12
+ * @param 20200101 or 2020.01.01
13
+ * @param 'YYYY.MM.DD'
14
+ * @returns
15
+ */
16
+ declare const getOneMonthLater: (value?: string, format?: string) => string;
17
+ /**
18
+ * 날짜 차이를 구한다. 포맷에 맞지 않으면 Not a Number 리턴
19
+ * @param date1 (yyyymmdd or yyyy.mm.dd or yyyy-mm-dd)
20
+ * @param date2 (yyyymmdd or yyyy.mm.dd or yyyy-mm-dd)
21
+ * @returns date1 - date2
22
+ */
23
+ declare const getDateDiff: (date1: string | number | dayjs.Dayjs | Date, date2: string | number | dayjs.Dayjs | Date) => number;
24
+ /**
25
+ * 입력되어진 생년월일 값이 당일 기준으로 미래시점인 경우 false를 반환합니다. (회원체계 기준 9, 0 일 경우 오류)
26
+ * @param front 주민등록번호 앞 6자리
27
+ * @param back 주민등록번호 뒤 첫자리
28
+ * @returns boolean
29
+ */
30
+ declare const validateBirthdate: (front: string, back: string) => boolean;
31
+ /**
32
+ * 목표 날짜가 비교 날짜 이후 인지 확인하는 함수 (YYYYMMDD 형식)
33
+ * @param targetDate
34
+ * @param compareDate
35
+ * @returns boolean
36
+ */
37
+ declare function isDateAfter(targetDate: string | number | dayjs.Dayjs | Date, compareDate: string | number | dayjs.Dayjs | Date): boolean;
38
+ /**
39
+ * 날짜를 포맷형태로 리턴
40
+ * @param 20200101 string
41
+ * @param 'YYYY.MM.DD
42
+ * @returns 포맷화된 날짜
43
+ */
44
+ declare const convertDateFormat: (value?: string | number | dayjs.Dayjs | Date, format?: string) => string;
45
+ /**
46
+ * 주어진 날짜가 오늘 날짜 이후인지 확인합니다.
47
+ *
48
+ * @param {string} dateString - 확인할 날짜 문자열입니다.
49
+ * @param {dayjs.OptionType} [format] - 날짜 문자열의 형식입니다.
50
+ * @returns {boolean} - 주어진 날짜가 오늘 이후라면 true를 반환합니다.
51
+ */
52
+ declare const isFutureDate: (dateString?: string | number | dayjs.Dayjs | Date, format?: dayjs.OptionType) => boolean;
53
+ /**
54
+ * 자주 사용하는 타입들 추가해두었습니다. 필요하신 형태 있으면 추가해주세요.
55
+ */
56
+ type DateFormat = 'YYYY-MM-DD' | 'YYYY.MM.DD' | 'YYYY-MM' | 'YYYY-MM-DD HH:mm:ss' | 'YYYY.MM.DD HH:mm:ss' | 'YYYY-MM-DD HH:mm' | 'YYYYMMDD' | 'YYYY.M.D' | 'YYYY.M' | 'YYYY.MM.DD(dd) HH:mm:ss' | 'HH:mm:ss' | 'YYYY.M.D(dd)' | 'HH:mm';
57
+ interface Props {
58
+ /** 날짜 문자열 */
59
+ dateString: string | number | Date | dayjs.Dayjs;
60
+ /** 현재 날짜 포맷 */
61
+ fromFormat?: string;
62
+ /** 컨버팅할 날짜 포맷 */
63
+ toFormat: string;
64
+ }
65
+ /**
66
+ * date string 을 입력받고 패턴에 맞게 포맷팅을 변경하는 유틸 함수
67
+ * fromFormat 현재 날짜 포맷
68
+ * toFormat 리턴 날짜 포맷
69
+ */
70
+ declare const convertDateString: ({ dateString, fromFormat, toFormat }: Props) => string;
71
+ declare const isDate: (value: unknown) => boolean;
72
+ /**
73
+ * 날짜 유효성 검사
74
+ *
75
+ * @param {string} dateString - 검사할 날짜 문자열.
76
+ * @param {dayjs.OptionType} [format] - 날짜 문자열의 형식입니다.
77
+ * @returns {boolean} - 유효한 날짜이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
78
+ */
79
+ declare const isValidDate: (dateString?: string | number | dayjs.Dayjs | Date, format?: dayjs.OptionType) => boolean;
80
+ type PeriodType = 'thisWeek' | 'lastWeek' | 'last7Days' | 'thisMonth' | 'lastMonth' | 'last365Days' | 'week' | 'month' | 'today';
81
+ /**
82
+ * @description
83
+ * today 당일
84
+ * week 7일: 오늘 기준 7일 전
85
+ * month 30: 오늘 기준 30일 전
86
+ * thisWeek 이번 주 (일요일 ~ 토요일)
87
+ * lastWeek 지난 주 (일요일 ~ 토요일)
88
+ * last7Days 최근 7일 (오늘 포함)
89
+ * thisMonth 이번 달 (1일 ~ 말일)
90
+ * lastMonth 지난 달 (1일 ~ 말일)
91
+ * last365Days 최근 365일 (오늘 포함)
92
+ * @param periodType
93
+ * @returns
94
+ */
95
+ declare const getPeriodDate: (periodType: PeriodType | "today") => {
96
+ startDate: Date;
97
+ endDate: Date;
98
+ } | null;
99
+
100
+ export { type DateFormat, type PeriodType, convertDateFormat, convertDateString, getDateDiff, getLastDay, getOneMonthLater, getPeriodDate, isDate, isDateAfter, isFutureDate, isValidDate, validateBirthdate };
@@ -0,0 +1,100 @@
1
+ import dayjs from 'dayjs';
2
+
3
+ /**
4
+ *
5
+ * @param year
6
+ * @param month
7
+ * @returns
8
+ */
9
+ declare function getLastDay(year: number, month: number): 29 | 28 | 30 | 31;
10
+ /**
11
+ * 한달뒤 날짜를 포맷형태로 리턴
12
+ * @param 20200101 or 2020.01.01
13
+ * @param 'YYYY.MM.DD'
14
+ * @returns
15
+ */
16
+ declare const getOneMonthLater: (value?: string, format?: string) => string;
17
+ /**
18
+ * 날짜 차이를 구한다. 포맷에 맞지 않으면 Not a Number 리턴
19
+ * @param date1 (yyyymmdd or yyyy.mm.dd or yyyy-mm-dd)
20
+ * @param date2 (yyyymmdd or yyyy.mm.dd or yyyy-mm-dd)
21
+ * @returns date1 - date2
22
+ */
23
+ declare const getDateDiff: (date1: string | number | dayjs.Dayjs | Date, date2: string | number | dayjs.Dayjs | Date) => number;
24
+ /**
25
+ * 입력되어진 생년월일 값이 당일 기준으로 미래시점인 경우 false를 반환합니다. (회원체계 기준 9, 0 일 경우 오류)
26
+ * @param front 주민등록번호 앞 6자리
27
+ * @param back 주민등록번호 뒤 첫자리
28
+ * @returns boolean
29
+ */
30
+ declare const validateBirthdate: (front: string, back: string) => boolean;
31
+ /**
32
+ * 목표 날짜가 비교 날짜 이후 인지 확인하는 함수 (YYYYMMDD 형식)
33
+ * @param targetDate
34
+ * @param compareDate
35
+ * @returns boolean
36
+ */
37
+ declare function isDateAfter(targetDate: string | number | dayjs.Dayjs | Date, compareDate: string | number | dayjs.Dayjs | Date): boolean;
38
+ /**
39
+ * 날짜를 포맷형태로 리턴
40
+ * @param 20200101 string
41
+ * @param 'YYYY.MM.DD
42
+ * @returns 포맷화된 날짜
43
+ */
44
+ declare const convertDateFormat: (value?: string | number | dayjs.Dayjs | Date, format?: string) => string;
45
+ /**
46
+ * 주어진 날짜가 오늘 날짜 이후인지 확인합니다.
47
+ *
48
+ * @param {string} dateString - 확인할 날짜 문자열입니다.
49
+ * @param {dayjs.OptionType} [format] - 날짜 문자열의 형식입니다.
50
+ * @returns {boolean} - 주어진 날짜가 오늘 이후라면 true를 반환합니다.
51
+ */
52
+ declare const isFutureDate: (dateString?: string | number | dayjs.Dayjs | Date, format?: dayjs.OptionType) => boolean;
53
+ /**
54
+ * 자주 사용하는 타입들 추가해두었습니다. 필요하신 형태 있으면 추가해주세요.
55
+ */
56
+ type DateFormat = 'YYYY-MM-DD' | 'YYYY.MM.DD' | 'YYYY-MM' | 'YYYY-MM-DD HH:mm:ss' | 'YYYY.MM.DD HH:mm:ss' | 'YYYY-MM-DD HH:mm' | 'YYYYMMDD' | 'YYYY.M.D' | 'YYYY.M' | 'YYYY.MM.DD(dd) HH:mm:ss' | 'HH:mm:ss' | 'YYYY.M.D(dd)' | 'HH:mm';
57
+ interface Props {
58
+ /** 날짜 문자열 */
59
+ dateString: string | number | Date | dayjs.Dayjs;
60
+ /** 현재 날짜 포맷 */
61
+ fromFormat?: string;
62
+ /** 컨버팅할 날짜 포맷 */
63
+ toFormat: string;
64
+ }
65
+ /**
66
+ * date string 을 입력받고 패턴에 맞게 포맷팅을 변경하는 유틸 함수
67
+ * fromFormat 현재 날짜 포맷
68
+ * toFormat 리턴 날짜 포맷
69
+ */
70
+ declare const convertDateString: ({ dateString, fromFormat, toFormat }: Props) => string;
71
+ declare const isDate: (value: unknown) => boolean;
72
+ /**
73
+ * 날짜 유효성 검사
74
+ *
75
+ * @param {string} dateString - 검사할 날짜 문자열.
76
+ * @param {dayjs.OptionType} [format] - 날짜 문자열의 형식입니다.
77
+ * @returns {boolean} - 유효한 날짜이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
78
+ */
79
+ declare const isValidDate: (dateString?: string | number | dayjs.Dayjs | Date, format?: dayjs.OptionType) => boolean;
80
+ type PeriodType = 'thisWeek' | 'lastWeek' | 'last7Days' | 'thisMonth' | 'lastMonth' | 'last365Days' | 'week' | 'month' | 'today';
81
+ /**
82
+ * @description
83
+ * today 당일
84
+ * week 7일: 오늘 기준 7일 전
85
+ * month 30: 오늘 기준 30일 전
86
+ * thisWeek 이번 주 (일요일 ~ 토요일)
87
+ * lastWeek 지난 주 (일요일 ~ 토요일)
88
+ * last7Days 최근 7일 (오늘 포함)
89
+ * thisMonth 이번 달 (1일 ~ 말일)
90
+ * lastMonth 지난 달 (1일 ~ 말일)
91
+ * last365Days 최근 365일 (오늘 포함)
92
+ * @param periodType
93
+ * @returns
94
+ */
95
+ declare const getPeriodDate: (periodType: PeriodType | "today") => {
96
+ startDate: Date;
97
+ endDate: Date;
98
+ } | null;
99
+
100
+ export { type DateFormat, type PeriodType, convertDateFormat, convertDateString, getDateDiff, getLastDay, getOneMonthLater, getPeriodDate, isDate, isDateAfter, isFutureDate, isValidDate, validateBirthdate };