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,141 @@
1
+ import dayjs from 'dayjs';
2
+ import customParseFormat from 'dayjs/plugin/customParseFormat.js';
3
+
4
+ // src/utils/date-utils.ts
5
+ dayjs.locale("ko");
6
+ dayjs.extend(customParseFormat);
7
+ function getLastDay(year, month) {
8
+ switch (month) {
9
+ case 2:
10
+ return year % 4 === 0 ? 29 : 28;
11
+ case 4:
12
+ case 6:
13
+ case 9:
14
+ case 11:
15
+ return 30;
16
+ default:
17
+ return 31;
18
+ }
19
+ }
20
+ var getOneMonthLater = (value, format) => {
21
+ const str = value ? value.split(".").join("") : "";
22
+ const date = value ? new Date(Number(str.substring(0, 4)), Number(str.substring(4, 6)) - 1, Number(str.substring(6, 8))) : /* @__PURE__ */ new Date();
23
+ try {
24
+ return dayjs(new Date(date.setMonth(date.getMonth() + 1))).format(format || "YYYY.MM.DD");
25
+ } catch (err) {
26
+ console.warn(err);
27
+ return "";
28
+ }
29
+ };
30
+ var getDateDiff = (date1, date2) => {
31
+ const diff1 = dayjs(date1);
32
+ const diff2 = dayjs(date2);
33
+ return diff1.diff(diff2, "day");
34
+ };
35
+ var validateBirthdate = (front, back) => {
36
+ const year = parseInt(front.slice(0, 2));
37
+ const month = parseInt(front.slice(2, 4));
38
+ const day = parseInt(front.slice(4, 6));
39
+ let birthYear = 0;
40
+ switch (back) {
41
+ case "1":
42
+ case "2":
43
+ case "5":
44
+ case "6":
45
+ birthYear = 1900 + year;
46
+ break;
47
+ case "3":
48
+ case "4":
49
+ case "7":
50
+ case "8":
51
+ birthYear = 2e3 + year;
52
+ break;
53
+ case "9":
54
+ case "0":
55
+ return false;
56
+ default:
57
+ return false;
58
+ }
59
+ const birthdate = new Date(birthYear, month - 1, day);
60
+ const currdate = /* @__PURE__ */ new Date();
61
+ return birthdate < currdate;
62
+ };
63
+ function isDateAfter(targetDate, compareDate) {
64
+ const targetDateTime = new Date(convertDateFormat(targetDate, "YYYY-MM-DD")).getTime();
65
+ const compareDateTime = new Date(convertDateFormat(compareDate, "YYYY-MM-DD")).getTime();
66
+ return targetDateTime > compareDateTime;
67
+ }
68
+ var convertDateFormat = (value, format) => {
69
+ if (!value) {
70
+ return "";
71
+ }
72
+ return dayjs(value).format(format || "YYYY.MM.DD");
73
+ };
74
+ var isFutureDate = (dateString, format) => {
75
+ if (!dateString) {
76
+ return false;
77
+ }
78
+ const today = dayjs().startOf("day");
79
+ const date = dayjs(dateString, format || "YYYYMMDD", true);
80
+ return date.isValid() && date.isAfter(today);
81
+ };
82
+ var convertDateString = ({ dateString, fromFormat, toFormat }) => {
83
+ return dayjs(dateString, fromFormat).format(toFormat);
84
+ };
85
+ var isDate = (value) => {
86
+ return value instanceof Date && !isNaN(+value);
87
+ };
88
+ var isValidDate = (dateString, format) => {
89
+ if (!dateString) {
90
+ return false;
91
+ }
92
+ const date = dayjs(dateString, format || "YYYYMMDD", true);
93
+ return date.isValid();
94
+ };
95
+ var getPeriodDate = (periodType) => {
96
+ const lastMonth = dayjs().subtract(1, "M");
97
+ const today = /* @__PURE__ */ new Date();
98
+ today.setHours(0, 0, 0, 0);
99
+ const endDate = new Date(today);
100
+ let startDate;
101
+ switch (periodType) {
102
+ case "today":
103
+ startDate = new Date(today);
104
+ return { startDate, endDate };
105
+ case "week":
106
+ startDate = new Date(today);
107
+ startDate.setDate(startDate.getDate() - 6);
108
+ return { startDate, endDate };
109
+ case "month":
110
+ startDate = new Date(today);
111
+ startDate.setDate(startDate.getDate() - 29);
112
+ return { startDate, endDate };
113
+ case "thisWeek":
114
+ return { startDate: dayjs().day(0).toDate(), endDate: dayjs().day(6).toDate() };
115
+ case "lastWeek":
116
+ return {
117
+ startDate: dayjs().subtract(1, "w").day(0).toDate(),
118
+ endDate: dayjs().subtract(1, "w").day(6).toDate()
119
+ };
120
+ case "last7Days":
121
+ return { startDate: dayjs().subtract(7, "d").toDate(), endDate: dayjs().toDate() };
122
+ case "thisMonth":
123
+ return {
124
+ startDate: dayjs().date(1).toDate(),
125
+ endDate: dayjs().date(dayjs().daysInMonth()).toDate()
126
+ };
127
+ case "lastMonth":
128
+ return {
129
+ startDate: lastMonth.date(1).toDate(),
130
+ endDate: lastMonth.date(lastMonth.daysInMonth()).toDate()
131
+ };
132
+ case "last365Days":
133
+ return { startDate: dayjs().subtract(365, "d").toDate(), endDate: dayjs().toDate() };
134
+ default:
135
+ return null;
136
+ }
137
+ };
138
+
139
+ export { convertDateFormat, convertDateString, getDateDiff, getLastDay, getOneMonthLater, getPeriodDate, isDate, isDateAfter, isFutureDate, isValidDate, validateBirthdate };
140
+ //# sourceMappingURL=date-utils.js.map
141
+ //# sourceMappingURL=date-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/date-utils.ts"],"names":[],"mappings":"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","file":"date-utils.js","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,187 @@
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
+
12
+ // src/utils/environment-utils.ts
13
+ var getSubdomain = (hostname) => {
14
+ if (!hostname || hostname === "localhost" || hostname === "127.0.0.1") {
15
+ return "";
16
+ }
17
+ const parts = hostname.split(".");
18
+ if (parts.length < 3) {
19
+ return "";
20
+ }
21
+ return parts[0] ?? "";
22
+ };
23
+ var getEnvironmentFromHostname = (hostname) => {
24
+ const debugModeEnv = getCookie("dsp-debug-mode-env")?.toLowerCase();
25
+ if (debugModeEnv) {
26
+ return debugModeEnv;
27
+ }
28
+ const subDomain = getSubdomain(hostname);
29
+ if (hostname === "localhost" || hostname === "127.0.0.1" || hostname.startsWith("localhost")) {
30
+ return "local";
31
+ }
32
+ if (subDomain.includes(`dev`)) {
33
+ return "dev";
34
+ }
35
+ if (subDomain.includes("stg")) {
36
+ return "stg";
37
+ }
38
+ return "prd";
39
+ };
40
+ var isClient = () => {
41
+ try {
42
+ return !!window;
43
+ } catch {
44
+ return false;
45
+ }
46
+ };
47
+ var isStorybookEnv = () => {
48
+ try {
49
+ return window.isStorybookEnv === true;
50
+ } catch {
51
+ return false;
52
+ }
53
+ };
54
+ var getBusinessWorkDivisionCode = () => {
55
+ return location.pathname.split("/")[1] ?? "";
56
+ };
57
+ var getServicePath = () => {
58
+ if (typeof window.isStorybookEnv === "boolean") {
59
+ return "";
60
+ } else {
61
+ return `/${getBusinessWorkDivisionCode()}`;
62
+ }
63
+ };
64
+ var getApiHostNameFromEnvironment = (currentHostname, forceApiHostName) => {
65
+ if (forceApiHostName) {
66
+ return forceApiHostName;
67
+ }
68
+ const environment = getEnvironmentFromHostname(currentHostname);
69
+ switch (environment) {
70
+ case "dev":
71
+ return `https://nxl-dsp-dev.hanwhalife.com`;
72
+ case "local":
73
+ case "stg":
74
+ return `https://nxl-dsp-stg.hanwhalife.com`;
75
+ case "prd":
76
+ return `https://nxl-dsp.hanwhalife.com`;
77
+ default:
78
+ console.warn("DSP API environment is not defined");
79
+ return "";
80
+ }
81
+ };
82
+ var getCdnHostNameFromEnvironment = (currentHostname, forceApiHostName) => {
83
+ if (!isClient()) {
84
+ return "";
85
+ }
86
+ if (forceApiHostName) {
87
+ return forceApiHostName;
88
+ }
89
+ const environment = getEnvironmentFromHostname(currentHostname);
90
+ switch (environment) {
91
+ case "dev":
92
+ return `https://dev-dsp-static.hanwhalife.com`;
93
+ case "local":
94
+ case "stg":
95
+ return `https://stg-dsp-static.hanwhalife.com`;
96
+ case "prd":
97
+ return `https://dsp-static.hanwhalife.com'`;
98
+ default:
99
+ console.warn("DSP environment is not defined");
100
+ return "";
101
+ }
102
+ };
103
+ var getDudApiBasePathFromEnvironment = (hostname) => {
104
+ if (!isClient()) {
105
+ return "";
106
+ }
107
+ const environment = getEnvironmentFromHostname(hostname || location.hostname);
108
+ switch (environment) {
109
+ /**
110
+ * local에서 호출시, rewrite동작을 위해 상대주소를 호출합니다.
111
+ * (cors이슈 해결을 위해 필수)
112
+ */
113
+ case "local":
114
+ return `${getServicePath()}/api/dud`;
115
+ /**
116
+ * local 이 아닌 환경에서는 전체주소를 호출합니다.
117
+ */
118
+ case "dev":
119
+ return `https://dsp-dud-dev.hanwhalife.com:10101/api`;
120
+ case "stg":
121
+ return `https://dsp-dud-stg.hanwhalife.com:10102/api`;
122
+ case "prd":
123
+ return `https://dsp-dud.hanwhalife.com/api`;
124
+ default:
125
+ console.warn("DUD API environment is not defined");
126
+ return "";
127
+ }
128
+ };
129
+ var getDspApiBasePathFromEnvironment = (serviceCodeTo, hostname) => {
130
+ if (!isClient()) {
131
+ return "";
132
+ }
133
+ const environment = getEnvironmentFromHostname(hostname || location.hostname);
134
+ switch (environment) {
135
+ /**
136
+ * local에서 호출시, rewrite동작을 위해 상대주소를 호출합니다.
137
+ * (cors이슈 해결을 위해 필수)
138
+ */
139
+ case "local":
140
+ return `${getServicePath()}/api/${serviceCodeTo}`;
141
+ /**
142
+ * local 이 아닌 환경에서는 전체주소를 호출합니다.
143
+ */
144
+ case "dev":
145
+ return `https://nxl-dsp-dev.hanwhalife.com/api/${serviceCodeTo}`;
146
+ case "stg":
147
+ return `https://nxl-dsp-stg.hanwhalife.com/api/${serviceCodeTo}`;
148
+ case "prd":
149
+ return `https://nxl-dsp.hanwhalife.com/api/${serviceCodeTo}`;
150
+ default:
151
+ console.warn("DSP API environment is not defined");
152
+ return "";
153
+ }
154
+ };
155
+ var getNlcHostFromEnvironment = (hostname) => {
156
+ if (!isClient()) {
157
+ return "";
158
+ }
159
+ const environment = getEnvironmentFromHostname(hostname || location.hostname);
160
+ switch (environment) {
161
+ case "local":
162
+ return `https://nxl-nlc-stg.hanwhalife.com`;
163
+ case "dev":
164
+ return `https://nxl-nlc-dev.hanwhalife.com`;
165
+ case "stg":
166
+ return `https://nxl-nlc-stg.hanwhalife.com`;
167
+ case "prd":
168
+ return `https://nxl-nlc.hanwhalife.com`;
169
+ default:
170
+ console.warn("NLC environment is not defined");
171
+ return "";
172
+ }
173
+ };
174
+
175
+ exports.getApiHostNameFromEnvironment = getApiHostNameFromEnvironment;
176
+ exports.getBusinessWorkDivisionCode = getBusinessWorkDivisionCode;
177
+ exports.getCdnHostNameFromEnvironment = getCdnHostNameFromEnvironment;
178
+ exports.getDspApiBasePathFromEnvironment = getDspApiBasePathFromEnvironment;
179
+ exports.getDudApiBasePathFromEnvironment = getDudApiBasePathFromEnvironment;
180
+ exports.getEnvironmentFromHostname = getEnvironmentFromHostname;
181
+ exports.getNlcHostFromEnvironment = getNlcHostFromEnvironment;
182
+ exports.getServicePath = getServicePath;
183
+ exports.getSubdomain = getSubdomain;
184
+ exports.isClient = isClient;
185
+ exports.isStorybookEnv = isStorybookEnv;
186
+ //# sourceMappingURL=environment-utils.cjs.map
187
+ //# sourceMappingURL=environment-utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/cookie-utils.ts","../../src/utils/environment-utils.ts"],"names":[],"mappings":"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","file":"environment-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","import { getCookie } from './cookie-utils';\n\n/**\n * 호스트명에서 서브도메인을 추출합니다.\n * @param hostname 호스트명\n * @returns 서브도메인 (예: nxl-dsp-dev)\n */\nexport const getSubdomain = (hostname: string): string => {\n if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1') {\n return '';\n }\n\n const parts = hostname.split('.');\n\n // 최소 3개 부분이 있어야 서브도메인 존재 (subdomain.domain.com)\n if (parts.length < 3) {\n return '';\n }\n\n // 첫 번째 부분이 서브도메인\n return parts[0] ?? '';\n};\n\n/**\n * 호스트명을 기반으로 환경을 판단합니다.\n * @param hostname 호스트명\n * @returns 환경 구분 문자열 ('local' | 'dev' | 'stg' | 'prd')\n */\nexport const getEnvironmentFromHostname = (hostname: string): 'local' | 'dev' | 'stg' | 'prd' => {\n const debugModeEnv = getCookie('dsp-debug-mode-env')?.toLowerCase();\n if (debugModeEnv) {\n return debugModeEnv as 'local' | 'dev' | 'stg' | 'prd';\n }\n const subDomain = getSubdomain(hostname);\n\n // localhost 판단\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname.startsWith('localhost')) {\n return 'local';\n }\n\n // dev 환경 판단\n if (subDomain.includes(`dev`)) {\n return 'dev';\n }\n\n // stg 환경 판단\n if (subDomain.includes('stg')) {\n return 'stg';\n }\n\n // 기본 운영\n return 'prd';\n};\n\n/**\n * @see https://github.com/storybookjs/storybook/issues/32028#issuecomment-3298982086\n * @note 스토리북에서 버그로인해 window객체를 정상적으로 탐지하지 못하는 이슈우회\n */\nexport const isClient = () => {\n try {\n return !!window;\n } catch {\n return false;\n }\n};\n\n// window.isStorybookEnv 접근을 위한 타입캐스팅\ndeclare const window: Window & { isStorybookEnv?: boolean };\n/**\n * 현재 실행 환경이 Storybook인지 확인하는 함수\n *\n * 사용 전, `viteFinal` 설정에서 `window.isStorybookEnv`를 `true`로 정의해야 정상 동작합니다.\n *\n * 예시:\n * ```ts\n * const config: StorybookConfig = {\n * viteFinal: (config) => {\n * // window.isStorybookEnv를 true로 설정 (boolean 값으로 처리됨)\n * config.define = {\n * ...config.define,\n * 'window.isStorybookEnv': 'true',\n * };\n *\n * return config;\n * },\n * };\n * ```\n */\nexport const isStorybookEnv = () => {\n try {\n return window.isStorybookEnv === true;\n } catch {\n // window가 존재하지 않는 등 예외 상황에서는 false 반환\n return false;\n }\n};\n\n/**\n * 현재 업무구분 코드 구하기\n * 원칙: pathname의 첫 번째가 업무구분코드를 사용할 경우 해당 값을 반환\n * @returns\n */\nexport const getBusinessWorkDivisionCode = () => {\n return location.pathname.split('/')[1] ?? '';\n};\n\n/**\n * @description storybook에서 동작을 고려하여 수정한 버전\n * @returns\n */\nexport const getServicePath = () => {\n if (typeof window.isStorybookEnv === 'boolean') {\n return '';\n } else {\n return `/${getBusinessWorkDivisionCode()}`;\n }\n};\n\n/**\n * 환경에 맞는 API 호스트명을 반환합니다.\n * 호스트명을 강제하고 싶으면 두 번째 파라미터로 넘기세요.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\n\nexport const getApiHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n switch (environment) {\n case 'dev':\n return `https://nxl-dsp-dev.hanwhalife.com`;\n\n case 'local':\n case 'stg':\n return `https://nxl-dsp-stg.hanwhalife.com`;\n\n case 'prd':\n return `https://nxl-dsp.hanwhalife.com`;\n\n default:\n console.warn('DSP API environment is not defined');\n\n return '';\n }\n};\n\n/**\n * 환경에 맞는 CDN 호스트명을 반환합니다.\n * 호스트명을 강제하고 싶으면 두 번째 파라미터로 넘기세요.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\nexport const getCdnHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (!isClient()) {\n return '';\n }\n\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n switch (environment) {\n case 'dev':\n return `https://dev-dsp-static.hanwhalife.com`;\n\n case 'local':\n case 'stg':\n return `https://stg-dsp-static.hanwhalife.com`;\n\n case 'prd':\n return `https://dsp-static.hanwhalife.com'`;\n\n default:\n console.warn('DSP environment is not defined');\n\n return '';\n }\n};\n\n/**\n * @description\n * 환경에 맞는 비정형PI 호스트명을 반환합니다.\n * client side에서 사용하는 함수입니다.\n * @param serviceCode dea,dis,dcm\n * @param hostname window.location.hostname\n * @returns\n */\nexport const getDudApiBasePathFromEnvironment = (hostname?: string) => {\n if (!isClient()) {\n return '';\n }\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n\n switch (environment) {\n /**\n * local에서 호출시, rewrite동작을 위해 상대주소를 호출합니다.\n * (cors이슈 해결을 위해 필수)\n */\n case 'local':\n return `${getServicePath()}/api/dud`;\n /**\n * local 이 아닌 환경에서는 전체주소를 호출합니다.\n */\n case 'dev':\n return `https://dsp-dud-dev.hanwhalife.com:10101/api`;\n\n case 'stg':\n return `https://dsp-dud-stg.hanwhalife.com:10102/api`;\n\n case 'prd':\n return `https://dsp-dud.hanwhalife.com/api`;\n\n default:\n console.warn('DUD API environment is not defined');\n\n return '';\n }\n};\n\n/**\n * @description\n * 환경에 맞는 Dsp 호스트명을 반환합니다.\n * client side에서 사용하는 함수입니다.\n * @param serviceCodeTo dea,dis 같은 api서버명\n * @param hostname window.location.hostname\n * @returns\n */\nexport const getDspApiBasePathFromEnvironment = (serviceCodeTo: string, hostname?: string) => {\n if (!isClient()) {\n return '';\n }\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n\n switch (environment) {\n /**\n * local에서 호출시, rewrite동작을 위해 상대주소를 호출합니다.\n * (cors이슈 해결을 위해 필수)\n */\n case 'local':\n return `${getServicePath()}/api/${serviceCodeTo}`;\n /**\n * local 이 아닌 환경에서는 전체주소를 호출합니다.\n */\n case 'dev':\n return `https://nxl-dsp-dev.hanwhalife.com/api/${serviceCodeTo}`;\n\n case 'stg':\n return `https://nxl-dsp-stg.hanwhalife.com/api/${serviceCodeTo}`;\n\n case 'prd':\n return `https://nxl-dsp.hanwhalife.com/api/${serviceCodeTo}`;\n\n default:\n console.warn('DSP API environment is not defined');\n\n return '';\n }\n};\n\n\n/**\n * @description\n * 환경에 맞는 NLC 호스트명을 반환합니다.\n * client side에서 사용하는 함수입니다.\n * @param hostname window.location.hostname\n * @returns\n */\nexport const getNlcHostFromEnvironment = (hostname?: string) => {\n if (!isClient()) {\n return '';\n }\n\n const environment = getEnvironmentFromHostname(hostname || location.hostname);\n\n switch (environment) {\n case 'local':\n return `https://nxl-nlc-stg.hanwhalife.com`;\n\n case 'dev':\n return `https://nxl-nlc-dev.hanwhalife.com`;\n\n case 'stg':\n return `https://nxl-nlc-stg.hanwhalife.com`;\n\n case 'prd':\n return `https://nxl-nlc.hanwhalife.com`;\n\n default:\n console.warn('NLC environment is not defined');\n\n return '';\n }\n};\n\n"]}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * 호스트명에서 서브도메인을 추출합니다.
3
+ * @param hostname 호스트명
4
+ * @returns 서브도메인 (예: nxl-dsp-dev)
5
+ */
6
+ declare const getSubdomain: (hostname: string) => string;
7
+ /**
8
+ * 호스트명을 기반으로 환경을 판단합니다.
9
+ * @param hostname 호스트명
10
+ * @returns 환경 구분 문자열 ('local' | 'dev' | 'stg' | 'prd')
11
+ */
12
+ declare const getEnvironmentFromHostname: (hostname: string) => "local" | "dev" | "stg" | "prd";
13
+ /**
14
+ * @see https://github.com/storybookjs/storybook/issues/32028#issuecomment-3298982086
15
+ * @note 스토리북에서 버그로인해 window객체를 정상적으로 탐지하지 못하는 이슈우회
16
+ */
17
+ declare const isClient: () => boolean;
18
+ /**
19
+ * 현재 실행 환경이 Storybook인지 확인하는 함수
20
+ *
21
+ * 사용 전, `viteFinal` 설정에서 `window.isStorybookEnv`를 `true`로 정의해야 정상 동작합니다.
22
+ *
23
+ * 예시:
24
+ * ```ts
25
+ * const config: StorybookConfig = {
26
+ * viteFinal: (config) => {
27
+ * // window.isStorybookEnv를 true로 설정 (boolean 값으로 처리됨)
28
+ * config.define = {
29
+ * ...config.define,
30
+ * 'window.isStorybookEnv': 'true',
31
+ * };
32
+ *
33
+ * return config;
34
+ * },
35
+ * };
36
+ * ```
37
+ */
38
+ declare const isStorybookEnv: () => boolean;
39
+ /**
40
+ * 현재 업무구분 코드 구하기
41
+ * 원칙: pathname의 첫 번째가 업무구분코드를 사용할 경우 해당 값을 반환
42
+ * @returns
43
+ */
44
+ declare const getBusinessWorkDivisionCode: () => string;
45
+ /**
46
+ * @description storybook에서 동작을 고려하여 수정한 버전
47
+ * @returns
48
+ */
49
+ declare const getServicePath: () => string;
50
+ /**
51
+ * 환경에 맞는 API 호스트명을 반환합니다.
52
+ * 호스트명을 강제하고 싶으면 두 번째 파라미터로 넘기세요.
53
+ * @param currentHostname
54
+ * @param forceApiHostName
55
+ * @returns
56
+ */
57
+ declare const getApiHostNameFromEnvironment: (currentHostname: string, forceApiHostName?: string) => string;
58
+ /**
59
+ * 환경에 맞는 CDN 호스트명을 반환합니다.
60
+ * 호스트명을 강제하고 싶으면 두 번째 파라미터로 넘기세요.
61
+ * @param currentHostname
62
+ * @param forceApiHostName
63
+ * @returns
64
+ */
65
+ declare const getCdnHostNameFromEnvironment: (currentHostname: string, forceApiHostName?: string) => string;
66
+ /**
67
+ * @description
68
+ * 환경에 맞는 비정형PI 호스트명을 반환합니다.
69
+ * client side에서 사용하는 함수입니다.
70
+ * @param serviceCode dea,dis,dcm
71
+ * @param hostname window.location.hostname
72
+ * @returns
73
+ */
74
+ declare const getDudApiBasePathFromEnvironment: (hostname?: string) => string;
75
+ /**
76
+ * @description
77
+ * 환경에 맞는 Dsp 호스트명을 반환합니다.
78
+ * client side에서 사용하는 함수입니다.
79
+ * @param serviceCodeTo dea,dis 같은 api서버명
80
+ * @param hostname window.location.hostname
81
+ * @returns
82
+ */
83
+ declare const getDspApiBasePathFromEnvironment: (serviceCodeTo: string, hostname?: string) => string;
84
+ /**
85
+ * @description
86
+ * 환경에 맞는 NLC 호스트명을 반환합니다.
87
+ * client side에서 사용하는 함수입니다.
88
+ * @param hostname window.location.hostname
89
+ * @returns
90
+ */
91
+ declare const getNlcHostFromEnvironment: (hostname?: string) => "" | "https://nxl-nlc-stg.hanwhalife.com" | "https://nxl-nlc-dev.hanwhalife.com" | "https://nxl-nlc.hanwhalife.com";
92
+
93
+ export { getApiHostNameFromEnvironment, getBusinessWorkDivisionCode, getCdnHostNameFromEnvironment, getDspApiBasePathFromEnvironment, getDudApiBasePathFromEnvironment, getEnvironmentFromHostname, getNlcHostFromEnvironment, getServicePath, getSubdomain, isClient, isStorybookEnv };
@@ -0,0 +1,93 @@
1
+ /**
2
+ * 호스트명에서 서브도메인을 추출합니다.
3
+ * @param hostname 호스트명
4
+ * @returns 서브도메인 (예: nxl-dsp-dev)
5
+ */
6
+ declare const getSubdomain: (hostname: string) => string;
7
+ /**
8
+ * 호스트명을 기반으로 환경을 판단합니다.
9
+ * @param hostname 호스트명
10
+ * @returns 환경 구분 문자열 ('local' | 'dev' | 'stg' | 'prd')
11
+ */
12
+ declare const getEnvironmentFromHostname: (hostname: string) => "local" | "dev" | "stg" | "prd";
13
+ /**
14
+ * @see https://github.com/storybookjs/storybook/issues/32028#issuecomment-3298982086
15
+ * @note 스토리북에서 버그로인해 window객체를 정상적으로 탐지하지 못하는 이슈우회
16
+ */
17
+ declare const isClient: () => boolean;
18
+ /**
19
+ * 현재 실행 환경이 Storybook인지 확인하는 함수
20
+ *
21
+ * 사용 전, `viteFinal` 설정에서 `window.isStorybookEnv`를 `true`로 정의해야 정상 동작합니다.
22
+ *
23
+ * 예시:
24
+ * ```ts
25
+ * const config: StorybookConfig = {
26
+ * viteFinal: (config) => {
27
+ * // window.isStorybookEnv를 true로 설정 (boolean 값으로 처리됨)
28
+ * config.define = {
29
+ * ...config.define,
30
+ * 'window.isStorybookEnv': 'true',
31
+ * };
32
+ *
33
+ * return config;
34
+ * },
35
+ * };
36
+ * ```
37
+ */
38
+ declare const isStorybookEnv: () => boolean;
39
+ /**
40
+ * 현재 업무구분 코드 구하기
41
+ * 원칙: pathname의 첫 번째가 업무구분코드를 사용할 경우 해당 값을 반환
42
+ * @returns
43
+ */
44
+ declare const getBusinessWorkDivisionCode: () => string;
45
+ /**
46
+ * @description storybook에서 동작을 고려하여 수정한 버전
47
+ * @returns
48
+ */
49
+ declare const getServicePath: () => string;
50
+ /**
51
+ * 환경에 맞는 API 호스트명을 반환합니다.
52
+ * 호스트명을 강제하고 싶으면 두 번째 파라미터로 넘기세요.
53
+ * @param currentHostname
54
+ * @param forceApiHostName
55
+ * @returns
56
+ */
57
+ declare const getApiHostNameFromEnvironment: (currentHostname: string, forceApiHostName?: string) => string;
58
+ /**
59
+ * 환경에 맞는 CDN 호스트명을 반환합니다.
60
+ * 호스트명을 강제하고 싶으면 두 번째 파라미터로 넘기세요.
61
+ * @param currentHostname
62
+ * @param forceApiHostName
63
+ * @returns
64
+ */
65
+ declare const getCdnHostNameFromEnvironment: (currentHostname: string, forceApiHostName?: string) => string;
66
+ /**
67
+ * @description
68
+ * 환경에 맞는 비정형PI 호스트명을 반환합니다.
69
+ * client side에서 사용하는 함수입니다.
70
+ * @param serviceCode dea,dis,dcm
71
+ * @param hostname window.location.hostname
72
+ * @returns
73
+ */
74
+ declare const getDudApiBasePathFromEnvironment: (hostname?: string) => string;
75
+ /**
76
+ * @description
77
+ * 환경에 맞는 Dsp 호스트명을 반환합니다.
78
+ * client side에서 사용하는 함수입니다.
79
+ * @param serviceCodeTo dea,dis 같은 api서버명
80
+ * @param hostname window.location.hostname
81
+ * @returns
82
+ */
83
+ declare const getDspApiBasePathFromEnvironment: (serviceCodeTo: string, hostname?: string) => string;
84
+ /**
85
+ * @description
86
+ * 환경에 맞는 NLC 호스트명을 반환합니다.
87
+ * client side에서 사용하는 함수입니다.
88
+ * @param hostname window.location.hostname
89
+ * @returns
90
+ */
91
+ declare const getNlcHostFromEnvironment: (hostname?: string) => "" | "https://nxl-nlc-stg.hanwhalife.com" | "https://nxl-nlc-dev.hanwhalife.com" | "https://nxl-nlc.hanwhalife.com";
92
+
93
+ export { getApiHostNameFromEnvironment, getBusinessWorkDivisionCode, getCdnHostNameFromEnvironment, getDspApiBasePathFromEnvironment, getDudApiBasePathFromEnvironment, getEnvironmentFromHostname, getNlcHostFromEnvironment, getServicePath, getSubdomain, isClient, isStorybookEnv };