@simplysm/core-node 13.0.0-beta.1
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/.cache/typecheck-node.tsbuildinfo +1 -0
- package/.cache/typecheck-tests-node.tsbuildinfo +1 -0
- package/README.md +375 -0
- package/dist/core-common/src/common.types.d.ts +74 -0
- package/dist/core-common/src/common.types.d.ts.map +1 -0
- package/dist/core-common/src/env.d.ts +6 -0
- package/dist/core-common/src/env.d.ts.map +1 -0
- package/dist/core-common/src/errors/argument-error.d.ts +25 -0
- package/dist/core-common/src/errors/argument-error.d.ts.map +1 -0
- package/dist/core-common/src/errors/not-implemented-error.d.ts +29 -0
- package/dist/core-common/src/errors/not-implemented-error.d.ts.map +1 -0
- package/dist/core-common/src/errors/sd-error.d.ts +27 -0
- package/dist/core-common/src/errors/sd-error.d.ts.map +1 -0
- package/dist/core-common/src/errors/timeout-error.d.ts +31 -0
- package/dist/core-common/src/errors/timeout-error.d.ts.map +1 -0
- package/dist/core-common/src/extensions/arr-ext.d.ts +15 -0
- package/dist/core-common/src/extensions/arr-ext.d.ts.map +1 -0
- package/dist/core-common/src/extensions/arr-ext.helpers.d.ts +19 -0
- package/dist/core-common/src/extensions/arr-ext.helpers.d.ts.map +1 -0
- package/dist/core-common/src/extensions/arr-ext.types.d.ts +215 -0
- package/dist/core-common/src/extensions/arr-ext.types.d.ts.map +1 -0
- package/dist/core-common/src/extensions/map-ext.d.ts +57 -0
- package/dist/core-common/src/extensions/map-ext.d.ts.map +1 -0
- package/dist/core-common/src/extensions/set-ext.d.ts +36 -0
- package/dist/core-common/src/extensions/set-ext.d.ts.map +1 -0
- package/dist/core-common/src/features/debounce-queue.d.ts +53 -0
- package/dist/core-common/src/features/debounce-queue.d.ts.map +1 -0
- package/dist/core-common/src/features/event-emitter.d.ts +66 -0
- package/dist/core-common/src/features/event-emitter.d.ts.map +1 -0
- package/dist/core-common/src/features/serial-queue.d.ts +47 -0
- package/dist/core-common/src/features/serial-queue.d.ts.map +1 -0
- package/dist/core-common/src/index.d.ts +32 -0
- package/dist/core-common/src/index.d.ts.map +1 -0
- package/dist/core-common/src/types/date-only.d.ts +152 -0
- package/dist/core-common/src/types/date-only.d.ts.map +1 -0
- package/dist/core-common/src/types/date-time.d.ts +96 -0
- package/dist/core-common/src/types/date-time.d.ts.map +1 -0
- package/dist/core-common/src/types/lazy-gc-map.d.ts +80 -0
- package/dist/core-common/src/types/lazy-gc-map.d.ts.map +1 -0
- package/dist/core-common/src/types/time.d.ts +68 -0
- package/dist/core-common/src/types/time.d.ts.map +1 -0
- package/dist/core-common/src/types/uuid.d.ts +35 -0
- package/dist/core-common/src/types/uuid.d.ts.map +1 -0
- package/dist/core-common/src/utils/bytes.d.ts +51 -0
- package/dist/core-common/src/utils/bytes.d.ts.map +1 -0
- package/dist/core-common/src/utils/date-format.d.ts +90 -0
- package/dist/core-common/src/utils/date-format.d.ts.map +1 -0
- package/dist/core-common/src/utils/json.d.ts +34 -0
- package/dist/core-common/src/utils/json.d.ts.map +1 -0
- package/dist/core-common/src/utils/num.d.ts +60 -0
- package/dist/core-common/src/utils/num.d.ts.map +1 -0
- package/dist/core-common/src/utils/obj.d.ts +258 -0
- package/dist/core-common/src/utils/obj.d.ts.map +1 -0
- package/dist/core-common/src/utils/path.d.ts +23 -0
- package/dist/core-common/src/utils/path.d.ts.map +1 -0
- package/dist/core-common/src/utils/primitive.d.ts +18 -0
- package/dist/core-common/src/utils/primitive.d.ts.map +1 -0
- package/dist/core-common/src/utils/str.d.ts +103 -0
- package/dist/core-common/src/utils/str.d.ts.map +1 -0
- package/dist/core-common/src/utils/template-strings.d.ts +84 -0
- package/dist/core-common/src/utils/template-strings.d.ts.map +1 -0
- package/dist/core-common/src/utils/transferable.d.ts +47 -0
- package/dist/core-common/src/utils/transferable.d.ts.map +1 -0
- package/dist/core-common/src/utils/wait.d.ts +19 -0
- package/dist/core-common/src/utils/wait.d.ts.map +1 -0
- package/dist/core-common/src/utils/xml.d.ts +36 -0
- package/dist/core-common/src/utils/xml.d.ts.map +1 -0
- package/dist/core-common/src/zip/sd-zip.d.ts +80 -0
- package/dist/core-common/src/zip/sd-zip.d.ts.map +1 -0
- package/dist/core-node/src/features/fs-watcher.d.ts +70 -0
- package/dist/core-node/src/features/fs-watcher.d.ts.map +1 -0
- package/dist/core-node/src/index.d.ts +7 -0
- package/dist/core-node/src/index.d.ts.map +1 -0
- package/dist/core-node/src/utils/fs.d.ts +197 -0
- package/dist/core-node/src/utils/fs.d.ts.map +1 -0
- package/dist/core-node/src/utils/path.d.ts +75 -0
- package/dist/core-node/src/utils/path.d.ts.map +1 -0
- package/dist/core-node/src/worker/create-worker.d.ts +23 -0
- package/dist/core-node/src/worker/create-worker.d.ts.map +1 -0
- package/dist/core-node/src/worker/types.d.ts +67 -0
- package/dist/core-node/src/worker/types.d.ts.map +1 -0
- package/dist/core-node/src/worker/worker.d.ts +27 -0
- package/dist/core-node/src/worker/worker.d.ts.map +1 -0
- package/dist/features/fs-watcher.js +100 -0
- package/dist/features/fs-watcher.js.map +7 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +7 -0
- package/dist/utils/fs.js +305 -0
- package/dist/utils/fs.js.map +7 -0
- package/dist/utils/path.js +48 -0
- package/dist/utils/path.js.map +7 -0
- package/dist/worker/create-worker.js +85 -0
- package/dist/worker/create-worker.js.map +7 -0
- package/dist/worker/types.js +1 -0
- package/dist/worker/types.js.map +7 -0
- package/dist/worker/worker.js +142 -0
- package/dist/worker/worker.js.map +7 -0
- package/lib/worker-dev-proxy.js +12 -0
- package/package.json +23 -0
- package/src/features/fs-watcher.ts +176 -0
- package/src/index.ts +11 -0
- package/src/utils/fs.ts +550 -0
- package/src/utils/path.ts +128 -0
- package/src/worker/create-worker.ts +141 -0
- package/src/worker/types.ts +86 -0
- package/src/worker/worker.ts +207 -0
- package/tests/utils/fs-watcher.spec.ts +295 -0
- package/tests/utils/fs.spec.ts +754 -0
- package/tests/utils/path.spec.ts +192 -0
- package/tests/worker/fixtures/test-worker.ts +35 -0
- package/tests/worker/sd-worker.spec.ts +183 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 날짜 클래스 (시간제외: yyyy-MM-dd, 불변)
|
|
3
|
+
*
|
|
4
|
+
* 시간 정보 없이 날짜만 저장하는 불변 클래스이다.
|
|
5
|
+
* 로컬 타임존을 기준으로 동작한다.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const today = new DateOnly();
|
|
9
|
+
* const specific = new DateOnly(2025, 1, 15);
|
|
10
|
+
* const parsed = DateOnly.parse("2025-01-15");
|
|
11
|
+
*/
|
|
12
|
+
export declare class DateOnly {
|
|
13
|
+
private static readonly MS_PER_DAY;
|
|
14
|
+
readonly date: Date;
|
|
15
|
+
/** 현재시간 */
|
|
16
|
+
constructor();
|
|
17
|
+
/** 연월일로 초기화 */
|
|
18
|
+
constructor(year: number, month: number, day: number);
|
|
19
|
+
/** tick (millisecond)으로 생성 */
|
|
20
|
+
constructor(tick: number);
|
|
21
|
+
/** Date 타입으로 생성 */
|
|
22
|
+
constructor(date: Date);
|
|
23
|
+
/**
|
|
24
|
+
* 문자열을 DateOnly로 파싱
|
|
25
|
+
* @param str 날짜 문자열
|
|
26
|
+
* @returns DateOnly 인스턴스
|
|
27
|
+
*
|
|
28
|
+
* 지원 형식:
|
|
29
|
+
* - `yyyy-MM-dd` (예: '2024-01-15') - 문자열에서 직접 추출, 타임존 영향 없음
|
|
30
|
+
* - `yyyyMMdd` (예: '20240115') - 문자열에서 직접 추출, 타임존 영향 없음
|
|
31
|
+
* - ISO 8601 (예: '2024-01-15T00:00:00Z') - UTC로 해석 후 로컬 타임존 변환
|
|
32
|
+
*
|
|
33
|
+
* @note 서버/클라이언트 타임존이 다른 경우 `yyyy-MM-dd` 형식 사용 권장
|
|
34
|
+
* @note DST(일광절약시간) 지역에서 ISO 8601 형식 파싱 시, 파싱 대상 날짜의 오프셋을 사용합니다.
|
|
35
|
+
*/
|
|
36
|
+
static parse(str: string): DateOnly;
|
|
37
|
+
/**
|
|
38
|
+
* 기준 연도와 월을 주차 정보를 기반으로 반환
|
|
39
|
+
* @param weekStartDay 주의 시작 요일 (0=일요일, 1=월요일, ..., 6=토요일). 기본값: 1(월요일)
|
|
40
|
+
* @param minDaysInFirstWeek 첫 주로 간주할 최소 일수 (1~7). 기본값: 4 (ISO 8601 표준)
|
|
41
|
+
* @returns 해당 날짜가 속한 주차의 기준 연도와 월
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* // ISO 8601 표준 (월요일 시작, 첫 주 최소 4일)
|
|
45
|
+
* new DateOnly(2024, 1, 1).getBaseYearMonthSeqForWeekSeq(1, 4)
|
|
46
|
+
* // 미국식 (일요일 시작, 첫 주 최소 1일)
|
|
47
|
+
* new DateOnly(2024, 1, 1).getBaseYearMonthSeqForWeekSeq(0, 1)
|
|
48
|
+
*/
|
|
49
|
+
getBaseYearMonthSeqForWeekSeq(weekStartDay?: number, minDaysInFirstWeek?: number): {
|
|
50
|
+
year: number;
|
|
51
|
+
monthSeq: number;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* 주차 정보를 기반으로 해당 주의 시작 날짜 계산
|
|
55
|
+
* @param weekStartDay 주의 시작 요일 (0=일요일, 1=월요일, ..., 6=토요일). 기본값: 1(월요일)
|
|
56
|
+
* @param minDaysInFirstWeek 첫 주로 간주할 최소 일수 (1~7). 기본값: 4 (ISO 8601 표준)
|
|
57
|
+
* @returns 해당 날짜가 속한 주의 시작 날짜
|
|
58
|
+
*/
|
|
59
|
+
getWeekSeqStartDate(weekStartDay?: number, minDaysInFirstWeek?: number): DateOnly;
|
|
60
|
+
/**
|
|
61
|
+
* 연도 및 주차 순서 정보를 반환
|
|
62
|
+
* @param weekStartDay 주의 시작 요일 (0=일요일, 1=월요일, ..., 6=토요일). 기본값: 1(월요일)
|
|
63
|
+
* @param minDaysInFirstWeek 첫 주로 간주할 최소 일수 (1~7). 기본값: 4 (ISO 8601 표준)
|
|
64
|
+
* @returns 연도와 해당 연도 기준 주차 번호
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* // ISO 8601 표준 (월요일 시작, 첫 주 4일 이상)
|
|
68
|
+
* new DateOnly(2025, 1, 6).getWeekSeqOfYear(); // { year: 2025, weekSeq: 2 }
|
|
69
|
+
*
|
|
70
|
+
* // 미국식 (일요일 시작, 첫 주 1일 이상)
|
|
71
|
+
* new DateOnly(2025, 1, 1).getWeekSeqOfYear(0, 1); // { year: 2025, weekSeq: 1 }
|
|
72
|
+
*/
|
|
73
|
+
getWeekSeqOfYear(weekStartDay?: number, minDaysInFirstWeek?: number): {
|
|
74
|
+
year: number;
|
|
75
|
+
weekSeq: number;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* 해당 날짜의 연도, 월 및 주차(weekSeq) 정보를 반환
|
|
79
|
+
* @param weekStartDay 주의 시작 요일 (0=일요일, 1=월요일, ..., 6=토요일). 기본값: 1(월요일)
|
|
80
|
+
* @param minDaysInFirstWeek 첫 주로 간주할 최소 일수 (1~7). 기본값: 4 (ISO 8601 표준)
|
|
81
|
+
* @returns 연도, 월 및 해당 월 기준 주차 번호
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* // ISO 8601 표준 (월요일 시작, 첫 주 4일 이상)
|
|
85
|
+
* new DateOnly(2025, 1, 15).getWeekSeqOfMonth(); // { year: 2025, monthSeq: 1, weekSeq: 3 }
|
|
86
|
+
*
|
|
87
|
+
* // 미국식 (일요일 시작, 첫 주 1일 이상)
|
|
88
|
+
* new DateOnly(2025, 1, 15).getWeekSeqOfMonth(0, 1); // { year: 2025, monthSeq: 1, weekSeq: 3 }
|
|
89
|
+
*/
|
|
90
|
+
getWeekSeqOfMonth(weekStartDay?: number, minDaysInFirstWeek?: number): {
|
|
91
|
+
year: number;
|
|
92
|
+
monthSeq: number;
|
|
93
|
+
weekSeq: number;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* 주차 정보를 기반으로 해당 주의 시작 날짜 가져오기
|
|
97
|
+
* @param arg 연도, 선택적 월, 주차 번호
|
|
98
|
+
* @param weekStartDay 주의 시작 요일 (0=일요일, 1=월요일, ..., 6=토요일). 기본값: 1(월요일)
|
|
99
|
+
* @param minDaysInFirstWeek 첫 주로 간주할 최소 일수 (1~7). 기본값: 4 (ISO 8601 표준)
|
|
100
|
+
* @returns 해당 주차의 시작 날짜
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* // 2025년 2주차의 시작일 (ISO 8601 표준)
|
|
104
|
+
* DateOnly.getDateByYearWeekSeq({ year: 2025, weekSeq: 2 }); // 2025-01-06 (월요일)
|
|
105
|
+
*
|
|
106
|
+
* // 2025년 1월 3주차의 시작일
|
|
107
|
+
* DateOnly.getDateByYearWeekSeq({ year: 2025, month: 1, weekSeq: 3 }); // 2025-01-13 (월요일)
|
|
108
|
+
*/
|
|
109
|
+
static getDateByYearWeekSeq(arg: {
|
|
110
|
+
year: number;
|
|
111
|
+
month?: number;
|
|
112
|
+
weekSeq: number;
|
|
113
|
+
}, weekStartDay?: number, minDaysInFirstWeek?: number): DateOnly;
|
|
114
|
+
/** 날짜 세팅이 제대로 되었는지 여부 */
|
|
115
|
+
get isValid(): boolean;
|
|
116
|
+
get year(): number;
|
|
117
|
+
get month(): number;
|
|
118
|
+
get day(): number;
|
|
119
|
+
get tick(): number;
|
|
120
|
+
/** 요일 (일~토: 0~6) */
|
|
121
|
+
get dayOfWeek(): number;
|
|
122
|
+
/** 지정된 연도로 새 인스턴스 반환 */
|
|
123
|
+
setYear(year: number): DateOnly;
|
|
124
|
+
/**
|
|
125
|
+
* 지정된 월로 새 DateOnly 인스턴스를 반환
|
|
126
|
+
* @param month 설정할 월 (1-12, 범위 외 값은 연도 조정)
|
|
127
|
+
* @note 대상 월의 일수보다 현재 일자가 크면 해당 월의 마지막 날로 조정됨
|
|
128
|
+
* (예: 1월 31일에서 setMonth(2) → 2월 28일 또는 29일)
|
|
129
|
+
*/
|
|
130
|
+
setMonth(month: number): DateOnly;
|
|
131
|
+
/**
|
|
132
|
+
* 지정된 일자로 새 DateOnly 인스턴스를 반환
|
|
133
|
+
* @param day 설정할 일자
|
|
134
|
+
* @note 해당 월의 유효 범위를 벗어나는 일자는 JavaScript Date 기본 동작에 따라
|
|
135
|
+
* 자동으로 다음/이전 달로 조정됨 (예: 1월에 day=32 → 2월 1일)
|
|
136
|
+
*/
|
|
137
|
+
setDay(day: number): DateOnly;
|
|
138
|
+
/** 지정된 연수를 더한 새 인스턴스 반환 */
|
|
139
|
+
addYears(years: number): DateOnly;
|
|
140
|
+
/** 지정된 월수를 더한 새 인스턴스 반환 */
|
|
141
|
+
addMonths(months: number): DateOnly;
|
|
142
|
+
/** 지정된 일수를 더한 새 인스턴스 반환 */
|
|
143
|
+
addDays(days: number): DateOnly;
|
|
144
|
+
/**
|
|
145
|
+
* 지정된 포맷으로 문자열 변환
|
|
146
|
+
* @param format 포맷 문자열
|
|
147
|
+
* @see dtFormat 지원 포맷 문자열 참조
|
|
148
|
+
*/
|
|
149
|
+
toFormatString(formatStr: string): string;
|
|
150
|
+
toString(): string;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=date-only.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-only.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/types/date-only.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAEzD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAEpB,WAAW;;IAEX,eAAe;gBACH,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IACpD,8BAA8B;gBAClB,IAAI,EAAE,MAAM;IACxB,mBAAmB;gBACP,IAAI,EAAE,IAAI;IAiBtB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;IAiCnC;;;;;;;;;;;OAWG;IACH,6BAA6B,CAAC,YAAY,GAAE,MAAU,EAAE,kBAAkB,GAAE,MAAU;;;;IA2BtF;;;;;OAKG;IACH,mBAAmB,CAAC,YAAY,GAAE,MAAU,EAAE,kBAAkB,GAAE,MAAU;IAW5E;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,YAAY,GAAE,MAAU,EAAE,kBAAkB,GAAE,MAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAY7G;;;;;;;;;;;;OAYG;IACH,iBAAiB,CACf,YAAY,GAAE,MAAU,EACxB,kBAAkB,GAAE,MAAU,GAC7B;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAgBtD;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,oBAAoB,CACzB,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EACtD,YAAY,GAAE,MAAU,EACxB,kBAAkB,GAAE,MAAU;IAYhC,yBAAyB;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,oBAAoB;IACpB,IAAI,SAAS,IAAI,MAAM,CAEtB;IAMD,wBAAwB;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAI/B;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAKjC;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;IAQ7B,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAIjC,2BAA2B;IAC3B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAInC,2BAA2B;IAC3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAQ/B;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAQzC,QAAQ,IAAI,MAAM;CAKnB"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 날짜시간 클래스 (불변)
|
|
3
|
+
*
|
|
4
|
+
* JavaScript Date 객체를 래핑하여 불변성과 편리한 API를 제공한다.
|
|
5
|
+
* 밀리초 단위까지 지원하며, 로컬 타임존을 기준으로 동작한다.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const now = new DateTime();
|
|
9
|
+
* const specific = new DateTime(2025, 1, 15, 10, 30, 0);
|
|
10
|
+
* const parsed = DateTime.parse("2025-01-15 10:30:00");
|
|
11
|
+
*/
|
|
12
|
+
export declare class DateTime {
|
|
13
|
+
readonly date: Date;
|
|
14
|
+
/** 현재 시간으로 생성 */
|
|
15
|
+
constructor();
|
|
16
|
+
/** 연월일시분초밀리초로 생성 */
|
|
17
|
+
constructor(year: number, month: number, day: number, hour?: number, minute?: number, second?: number, millisecond?: number);
|
|
18
|
+
/** tick (밀리초)으로 생성 */
|
|
19
|
+
constructor(tick: number);
|
|
20
|
+
/** Date 객체로 생성 */
|
|
21
|
+
constructor(date: Date);
|
|
22
|
+
/**
|
|
23
|
+
* 문자열을 파싱하여 DateTime 인스턴스를 생성
|
|
24
|
+
*
|
|
25
|
+
* @param str 날짜시간 문자열
|
|
26
|
+
* @returns 파싱된 DateTime 인스턴스
|
|
27
|
+
* @throws ArgumentError 지원하지 않는 형식인 경우
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* DateTime.parse("2025-01-15 10:30:00") // yyyy-MM-dd HH:mm:ss
|
|
31
|
+
* DateTime.parse("2025-01-15 10:30:00.123") // yyyy-MM-dd HH:mm:ss.fff
|
|
32
|
+
* DateTime.parse("20250115103000") // yyyyMMddHHmmss
|
|
33
|
+
* DateTime.parse("2025-01-15 오전 10:30:00") // yyyy-MM-dd 오전/오후 HH:mm:ss
|
|
34
|
+
* DateTime.parse("2025-01-15T10:30:00Z") // ISO 8601
|
|
35
|
+
*/
|
|
36
|
+
static parse(str: string): DateTime;
|
|
37
|
+
get year(): number;
|
|
38
|
+
get month(): number;
|
|
39
|
+
get day(): number;
|
|
40
|
+
get hour(): number;
|
|
41
|
+
get minute(): number;
|
|
42
|
+
get second(): number;
|
|
43
|
+
get millisecond(): number;
|
|
44
|
+
get tick(): number;
|
|
45
|
+
/** 요일 (일~토: 0~6) */
|
|
46
|
+
get dayOfWeek(): number;
|
|
47
|
+
get timezoneOffsetMinutes(): number;
|
|
48
|
+
/** 날짜시간 세팅이 제대로 되었는지 여부 */
|
|
49
|
+
get isValid(): boolean;
|
|
50
|
+
/** 지정된 연도로 새 인스턴스 반환 */
|
|
51
|
+
setYear(year: number): DateTime;
|
|
52
|
+
/**
|
|
53
|
+
* 지정된 월로 새 DateTime 인스턴스를 반환
|
|
54
|
+
* @param month 설정할 월 (1-12, 범위 외 값은 연도 조정)
|
|
55
|
+
* @note 대상 월의 일수보다 현재 일자가 크면 해당 월의 마지막 날로 조정됨
|
|
56
|
+
* (예: 1월 31일에서 setMonth(2) → 2월 28일 또는 29일)
|
|
57
|
+
*/
|
|
58
|
+
setMonth(month: number): DateTime;
|
|
59
|
+
/**
|
|
60
|
+
* 지정된 일자로 새 DateTime 인스턴스를 반환
|
|
61
|
+
* @param day 설정할 일자
|
|
62
|
+
* @note 해당 월의 유효 범위를 벗어나는 일자는 JavaScript Date 기본 동작에 따라
|
|
63
|
+
* 자동으로 다음/이전 달로 조정됨 (예: 1월에 day=32 → 2월 1일)
|
|
64
|
+
*/
|
|
65
|
+
setDay(day: number): DateTime;
|
|
66
|
+
/** 지정된 시로 새 인스턴스 반환 */
|
|
67
|
+
setHour(hour: number): DateTime;
|
|
68
|
+
/** 지정된 분으로 새 인스턴스 반환 */
|
|
69
|
+
setMinute(minute: number): DateTime;
|
|
70
|
+
/** 지정된 초로 새 인스턴스 반환 */
|
|
71
|
+
setSecond(second: number): DateTime;
|
|
72
|
+
/** 지정된 밀리초로 새 인스턴스 반환 */
|
|
73
|
+
setMillisecond(millisecond: number): DateTime;
|
|
74
|
+
/** 지정된 연수를 더한 새 인스턴스 반환 */
|
|
75
|
+
addYears(years: number): DateTime;
|
|
76
|
+
/** 지정된 월수를 더한 새 인스턴스 반환 */
|
|
77
|
+
addMonths(months: number): DateTime;
|
|
78
|
+
/** 지정된 일수를 더한 새 인스턴스 반환 */
|
|
79
|
+
addDays(days: number): DateTime;
|
|
80
|
+
/** 지정된 시간을 더한 새 인스턴스 반환 */
|
|
81
|
+
addHours(hours: number): DateTime;
|
|
82
|
+
/** 지정된 분을 더한 새 인스턴스 반환 */
|
|
83
|
+
addMinutes(minutes: number): DateTime;
|
|
84
|
+
/** 지정된 초를 더한 새 인스턴스 반환 */
|
|
85
|
+
addSeconds(seconds: number): DateTime;
|
|
86
|
+
/** 지정된 밀리초를 더한 새 인스턴스 반환 */
|
|
87
|
+
addMilliseconds(milliseconds: number): DateTime;
|
|
88
|
+
/**
|
|
89
|
+
* 지정된 포맷으로 문자열 변환
|
|
90
|
+
* @param format 포맷 문자열
|
|
91
|
+
* @see dtFormat 지원 포맷 문자열 참조
|
|
92
|
+
*/
|
|
93
|
+
toFormatString(formatStr: string): string;
|
|
94
|
+
toString(): string;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=date-time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-time.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/types/date-time.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,qBAAa,QAAQ;IACnB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAEpB,iBAAiB;;IAEjB,oBAAoB;gBAElB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM;IAEtB,sBAAsB;gBACV,IAAI,EAAE,MAAM;IACxB,kBAAkB;gBACN,IAAI,EAAE,IAAI;IAqBtB;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;IAwDnC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,oBAAoB;IACpB,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,qBAAqB,IAAI,MAAM,CAElC;IAED,2BAA2B;IAC3B,IAAI,OAAO,IAAI,OAAO,CAErB;IAMD,wBAAwB;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAI/B;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAajC;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ;IAI7B,uBAAuB;IACvB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAI/B,wBAAwB;IACxB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAInC,uBAAuB;IACvB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAInC,yBAAyB;IACzB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ;IAQ7C,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAIjC,2BAA2B;IAC3B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ;IAInC,2BAA2B;IAC3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAI/B,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAIjC,0BAA0B;IAC1B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ;IAIrC,0BAA0B;IAC1B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ;IAIrC,4BAA4B;IAC5B,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ;IAQ/C;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAazC,QAAQ,IAAI,MAAM;CAKnB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 자동 만료 기능이 있는 Map
|
|
3
|
+
* LRU 방식으로 접근 시간 갱신, 일정 시간 미접근 시 자동 삭제
|
|
4
|
+
*
|
|
5
|
+
* @note 인스턴스 사용 후 반드시 dispose()를 호출하거나 using 문을 사용해야 함.
|
|
6
|
+
* 그렇지 않으면 GC 타이머가 계속 동작하여 메모리 누수 발생.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* // using 문 사용 (권장)
|
|
10
|
+
* using map = new LazyGcMap({ gcInterval: 10000, expireTime: 60000 });
|
|
11
|
+
*
|
|
12
|
+
* // 또는 명시적 dispose() 호출
|
|
13
|
+
* const map = new LazyGcMap({ gcInterval: 10000, expireTime: 60000 });
|
|
14
|
+
* try {
|
|
15
|
+
* // ... 사용
|
|
16
|
+
* } finally {
|
|
17
|
+
* map.dispose();
|
|
18
|
+
* }
|
|
19
|
+
*/
|
|
20
|
+
export declare class LazyGcMap<K, V> {
|
|
21
|
+
private readonly _options;
|
|
22
|
+
private static readonly _logger;
|
|
23
|
+
/**
|
|
24
|
+
* dispose() 미호출 감지용 registry
|
|
25
|
+
* @note FinalizationRegistry는 Chrome 84+, Node 14.6+ 지원
|
|
26
|
+
* 미지원 환경에서는 경고 없이 동작하지만, dispose() 미호출 시 메모리 누수 가능
|
|
27
|
+
*/
|
|
28
|
+
private static readonly _registry;
|
|
29
|
+
private readonly _map;
|
|
30
|
+
private _gcTimer?;
|
|
31
|
+
private _isGcRunning;
|
|
32
|
+
private _isDestroyed;
|
|
33
|
+
private readonly _instanceId;
|
|
34
|
+
/**
|
|
35
|
+
* @param _options 설정 옵션
|
|
36
|
+
* @param _options.gcInterval GC 주기 (밀리초). 기본값: expireTime의 1/10 (최소 1000ms)
|
|
37
|
+
* @param _options.expireTime 만료 시간 (밀리초). 마지막 접근 후 이 시간이 지나면 삭제됨. 예: 60000 (60초)
|
|
38
|
+
* @param _options.onExpire 만료 시 호출되는 콜백. 비동기 함수도 가능하며, 에러 발생 시 로깅 후 계속 진행됨
|
|
39
|
+
*/
|
|
40
|
+
constructor(_options: {
|
|
41
|
+
gcInterval?: number;
|
|
42
|
+
expireTime: number;
|
|
43
|
+
onExpire?: (key: K, value: V) => void | Promise<void>;
|
|
44
|
+
});
|
|
45
|
+
/** 저장된 항목 수 */
|
|
46
|
+
get size(): number;
|
|
47
|
+
/** 키 존재 여부 확인 (접근 시간 갱신 안함) */
|
|
48
|
+
has(key: K): boolean;
|
|
49
|
+
/** 값 조회 (접근 시간 갱신됨) */
|
|
50
|
+
get(key: K): V | undefined;
|
|
51
|
+
/** 값 저장 (접근 시간 설정 및 GC 타이머 시작) */
|
|
52
|
+
set(key: K, value: V): void;
|
|
53
|
+
/** 항목 삭제 (비었으면 GC 타이머 중지) */
|
|
54
|
+
delete(key: K): boolean;
|
|
55
|
+
/** 인스턴스 정리 (GC 타이머 중지 및 데이터 삭제) */
|
|
56
|
+
dispose(): void;
|
|
57
|
+
/** using 문 지원 */
|
|
58
|
+
[Symbol.dispose](): void;
|
|
59
|
+
/**
|
|
60
|
+
* 모든 항목 삭제 (인스턴스는 계속 사용 가능)
|
|
61
|
+
*/
|
|
62
|
+
clear(): void;
|
|
63
|
+
/**
|
|
64
|
+
* 키에 해당하는 값을 반환하고, 없으면 factory로 생성 후 저장하여 반환
|
|
65
|
+
* @param key 조회할 키
|
|
66
|
+
* @param factory 키가 없을 때 값을 생성하는 함수
|
|
67
|
+
* @returns 기존 값 또는 새로 생성된 값
|
|
68
|
+
*/
|
|
69
|
+
getOrCreate(key: K, factory: () => V): V;
|
|
70
|
+
/** 값들만 순회 (Iterator) */
|
|
71
|
+
values(): IterableIterator<V>;
|
|
72
|
+
/** 키들만 순회 (Iterator) */
|
|
73
|
+
keys(): IterableIterator<K>;
|
|
74
|
+
/** 엔트리 순회 (Iterator) */
|
|
75
|
+
entries(): IterableIterator<[K, V]>;
|
|
76
|
+
private _startGc;
|
|
77
|
+
private _runGc;
|
|
78
|
+
private _stopGc;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=lazy-gc-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-gc-map.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/types/lazy-gc-map.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,SAAS,CAAC,CAAC,EAAE,CAAC;IAkCvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAjC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAEvE;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAKjB;IAGhB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkD;IAGvE,OAAO,CAAC,QAAQ,CAAC,CAAiC;IAElD,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IAEnE;;;;;OAKG;gBAEgB,QAAQ,EAAE;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACvD;IAKH,eAAe;IACf,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,+BAA+B;IAC/B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAKpB,uBAAuB;IACvB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAU1B,kCAAkC;IAClC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAO3B,6BAA6B;IAC7B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAUvB,mCAAmC;IACnC,OAAO,IAAI,IAAI;IASf,iBAAiB;IACjB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAIxB;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;IAexC,wBAAwB;IACvB,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAO9B,wBAAwB;IACvB,IAAI,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAK5B,wBAAwB;IACvB,OAAO,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IASpC,OAAO,CAAC,QAAQ;YAUF,MAAM;IAmDpB,OAAO,CAAC,OAAO;CAQhB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 시간 클래스 (날짜제외: HH:mm:ss.fff, 불변)
|
|
3
|
+
*
|
|
4
|
+
* 날짜 정보 없이 시간만 저장하는 불변 클래스이다.
|
|
5
|
+
* 24시간을 초과하거나 음수인 경우 자동으로 정규화된다.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const now = new Time();
|
|
9
|
+
* const specific = new Time(10, 30, 0);
|
|
10
|
+
* const parsed = Time.parse("10:30:00");
|
|
11
|
+
*/
|
|
12
|
+
export declare class Time {
|
|
13
|
+
private static readonly MS_PER_DAY;
|
|
14
|
+
private readonly _tick;
|
|
15
|
+
/** 현재 시간으로 생성 */
|
|
16
|
+
constructor();
|
|
17
|
+
/** 시분초밀리초로 생성 */
|
|
18
|
+
constructor(hour: number, minute: number, second?: number, millisecond?: number);
|
|
19
|
+
/** tick (밀리초)으로 생성 */
|
|
20
|
+
constructor(tick: number);
|
|
21
|
+
/** Date 객체에서 시간 부분만 추출하여 생성 */
|
|
22
|
+
constructor(date: Date);
|
|
23
|
+
/**
|
|
24
|
+
* 문자열을 파싱하여 Time 인스턴스를 생성
|
|
25
|
+
*
|
|
26
|
+
* @param str 시간 문자열
|
|
27
|
+
* @returns 파싱된 Time 인스턴스
|
|
28
|
+
* @throws ArgumentError 지원하지 않는 형식인 경우
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* Time.parse("10:30:00") // HH:mm:ss
|
|
32
|
+
* Time.parse("10:30:00.123") // HH:mm:ss.fff
|
|
33
|
+
* Time.parse("오전 10:30:00") // 오전/오후 HH:mm:ss
|
|
34
|
+
* Time.parse("2025-01-15T10:30:00") // ISO 8601 (시간 부분만 추출)
|
|
35
|
+
*/
|
|
36
|
+
static parse(str: string): Time;
|
|
37
|
+
get hour(): number;
|
|
38
|
+
get minute(): number;
|
|
39
|
+
get second(): number;
|
|
40
|
+
get millisecond(): number;
|
|
41
|
+
get tick(): number;
|
|
42
|
+
/** 시간 세팅이 제대로 되었는지 여부 */
|
|
43
|
+
get isValid(): boolean;
|
|
44
|
+
/** 지정된 시로 새 인스턴스 반환 */
|
|
45
|
+
setHour(hour: number): Time;
|
|
46
|
+
/** 지정된 분으로 새 인스턴스 반환 */
|
|
47
|
+
setMinute(minute: number): Time;
|
|
48
|
+
/** 지정된 초로 새 인스턴스 반환 */
|
|
49
|
+
setSecond(second: number): Time;
|
|
50
|
+
/** 지정된 밀리초로 새 인스턴스 반환 */
|
|
51
|
+
setMillisecond(millisecond: number): Time;
|
|
52
|
+
/** 지정된 시간을 더한 새 인스턴스 반환 (24시간 순환) */
|
|
53
|
+
addHours(hours: number): Time;
|
|
54
|
+
/** 지정된 분을 더한 새 인스턴스 반환 (24시간 순환) */
|
|
55
|
+
addMinutes(minutes: number): Time;
|
|
56
|
+
/** 지정된 초를 더한 새 인스턴스 반환 (24시간 순환) */
|
|
57
|
+
addSeconds(seconds: number): Time;
|
|
58
|
+
/** 지정된 밀리초를 더한 새 인스턴스 반환 (24시간 순환) */
|
|
59
|
+
addMilliseconds(milliseconds: number): Time;
|
|
60
|
+
/**
|
|
61
|
+
* 지정된 포맷으로 문자열 변환
|
|
62
|
+
* @param format 포맷 문자열
|
|
63
|
+
* @see dtFormat 지원 포맷 문자열 참조
|
|
64
|
+
*/
|
|
65
|
+
toFormatString(formatStr: string): string;
|
|
66
|
+
toString(): string;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/types/time.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,qBAAa,IAAI;IACf,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAEzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,iBAAiB;;IAEjB,iBAAiB;gBACL,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IAC/E,sBAAsB;gBACV,IAAI,EAAE,MAAM;IACxB,+BAA+B;gBACnB,IAAI,EAAE,IAAI;IA6BtB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAqC/B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,yBAAyB;IACzB,IAAI,OAAO,IAAI,OAAO,CAErB;IAMD,uBAAuB;IACvB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,wBAAwB;IACxB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,uBAAuB;IACvB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,yBAAyB;IACzB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQzC,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7B,oCAAoC;IACpC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjC,oCAAoC;IACpC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjC,sCAAsC;IACtC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAU3C;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IASzC,QAAQ,IAAI,MAAM;CAKnB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Bytes } from "../common.types";
|
|
2
|
+
/**
|
|
3
|
+
* UUID v4 클래스
|
|
4
|
+
*
|
|
5
|
+
* crypto.getRandomValues 기반으로 암호학적으로 안전한 UUID를 생성한다. (Chrome 79+, Node.js 공용)
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const id = Uuid.new();
|
|
9
|
+
* const fromStr = new Uuid("550e8400-e29b-41d4-a716-446655440000");
|
|
10
|
+
*/
|
|
11
|
+
export declare class Uuid {
|
|
12
|
+
private static readonly _hexTable;
|
|
13
|
+
private static readonly _uuidRegex;
|
|
14
|
+
/** 16바이트 배열을 UUID 문자열로 변환 */
|
|
15
|
+
private static _bytesToUuidStr;
|
|
16
|
+
/** 새 UUID v4 인스턴스 생성 */
|
|
17
|
+
static new(): Uuid;
|
|
18
|
+
/**
|
|
19
|
+
* 16바이트 Uint8Array에서 UUID 생성
|
|
20
|
+
* @param bytes 16바이트 배열
|
|
21
|
+
* @throws {ArgumentError} 바이트 크기가 16이 아닌 경우
|
|
22
|
+
*/
|
|
23
|
+
static fromBytes(bytes: Bytes): Uuid;
|
|
24
|
+
private readonly _uuid;
|
|
25
|
+
/**
|
|
26
|
+
* @param uuid UUID 문자열 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 형식)
|
|
27
|
+
* @throws {ArgumentError} 형식이 올바르지 않은 경우
|
|
28
|
+
*/
|
|
29
|
+
constructor(uuid: string);
|
|
30
|
+
/** UUID를 문자열로 변환 */
|
|
31
|
+
toString(): string;
|
|
32
|
+
/** UUID를 16바이트 Uint8Array로 변환 */
|
|
33
|
+
toBytes(): Bytes;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=uuid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/types/uuid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C;;;;;;;;GAQG;AACH,qBAAa,IAAI;IAEf,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAoF;IAErH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAqE;IAEvG,6BAA6B;IAC7B,OAAO,CAAC,MAAM,CAAC,eAAe;IA0B9B,wBAAwB;IACxB,MAAM,CAAC,GAAG,IAAI,IAAI;IAWlB;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAQpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B;;;OAGG;gBACS,IAAI,EAAE,MAAM;IAOxB,oBAAoB;IACpB,QAAQ,IAAI,MAAM;IAIlB,iCAAiC;IACjC,OAAO,IAAI,KAAK;CAuBjB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Bytes } from "../common.types";
|
|
2
|
+
/**
|
|
3
|
+
* 여러 Uint8Array 연결
|
|
4
|
+
* @param arrays 연결할 Uint8Array 배열
|
|
5
|
+
* @returns 연결된 새 Uint8Array
|
|
6
|
+
* @example
|
|
7
|
+
* const a = new Uint8Array([1, 2]);
|
|
8
|
+
* const b = new Uint8Array([3, 4]);
|
|
9
|
+
* bytesConcat([a, b]);
|
|
10
|
+
* // Uint8Array([1, 2, 3, 4])
|
|
11
|
+
*/
|
|
12
|
+
export declare function bytesConcat(arrays: Bytes[]): Bytes;
|
|
13
|
+
/**
|
|
14
|
+
* hex 문자열로 변환
|
|
15
|
+
* @param bytes 변환할 Uint8Array
|
|
16
|
+
* @returns 소문자 hex 문자열
|
|
17
|
+
* @example
|
|
18
|
+
* bytesToHex(new Uint8Array([255, 0, 127]));
|
|
19
|
+
* // "ff007f"
|
|
20
|
+
*/
|
|
21
|
+
export declare function bytesToHex(bytes: Bytes): string;
|
|
22
|
+
/**
|
|
23
|
+
* hex 문자열에서 Uint8Array로 변환
|
|
24
|
+
* @param hex 변환할 hex 문자열 (소문자/대문자 모두 허용)
|
|
25
|
+
* @returns 변환된 Uint8Array
|
|
26
|
+
* @throws {ArgumentError} 홀수 길이 또는 유효하지 않은 hex 문자가 포함된 경우
|
|
27
|
+
* @example
|
|
28
|
+
* bytesFromHex("ff007f");
|
|
29
|
+
* // Uint8Array([255, 0, 127])
|
|
30
|
+
*/
|
|
31
|
+
export declare function bytesFromHex(hex: string): Bytes;
|
|
32
|
+
/**
|
|
33
|
+
* Bytes를 base64 문자열로 변환
|
|
34
|
+
* @param bytes 변환할 Uint8Array
|
|
35
|
+
* @returns base64 인코딩된 문자열
|
|
36
|
+
* @example
|
|
37
|
+
* bytesToBase64(new Uint8Array([72, 101, 108, 108, 111]));
|
|
38
|
+
* // "SGVsbG8="
|
|
39
|
+
*/
|
|
40
|
+
export declare function bytesToBase64(bytes: Bytes): string;
|
|
41
|
+
/**
|
|
42
|
+
* base64 문자열을 Bytes로 변환
|
|
43
|
+
* @param base64 변환할 base64 문자열
|
|
44
|
+
* @returns 디코딩된 Uint8Array
|
|
45
|
+
* @throws {ArgumentError} 유효하지 않은 base64 문자가 포함된 경우
|
|
46
|
+
* @example
|
|
47
|
+
* bytesFromBase64("SGVsbG8=");
|
|
48
|
+
* // Uint8Array([72, 101, 108, 108, 111])
|
|
49
|
+
*/
|
|
50
|
+
export declare function bytesFromBase64(base64: string): Bytes;
|
|
51
|
+
//# sourceMappingURL=bytes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/bytes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AA0B7C;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CASlD;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAO/C;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAY/C;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAiBlD;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAoCrD"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 월 설정 시 연도/월/일 정규화 결과
|
|
3
|
+
*/
|
|
4
|
+
export interface DtNormalizedMonth {
|
|
5
|
+
year: number;
|
|
6
|
+
month: number;
|
|
7
|
+
day: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 월 설정 시 연도/월/일을 정규화
|
|
11
|
+
* - 월이 1-12 범위를 벗어나면 연도를 조정
|
|
12
|
+
* - 대상 월의 일수보다 현재 일자가 크면 해당 월의 마지막 날로 조정
|
|
13
|
+
*
|
|
14
|
+
* @param year 기준 연도
|
|
15
|
+
* @param month 설정할 월 (1-12 범위 외의 값도 허용)
|
|
16
|
+
* @param day 기준 일자
|
|
17
|
+
* @returns 정규화된 연도, 월, 일
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* normalizeMonth(2025, 13, 15) // { year: 2026, month: 1, day: 15 }
|
|
21
|
+
* normalizeMonth(2025, 2, 31) // { year: 2025, month: 2, day: 28 }
|
|
22
|
+
*/
|
|
23
|
+
export declare function normalizeMonth(year: number, month: number, day: number): DtNormalizedMonth;
|
|
24
|
+
/**
|
|
25
|
+
* 12시간제를 24시간제로 변환
|
|
26
|
+
* - 오전 12시 = 0시, 오후 12시 = 12시
|
|
27
|
+
* - 오전 1-11시 = 1-11시, 오후 1-11시 = 13-23시
|
|
28
|
+
*
|
|
29
|
+
* @param rawHour 12시간제 시 (1-12)
|
|
30
|
+
* @param isPM 오후 여부
|
|
31
|
+
* @returns 24시간제 시 (0-23)
|
|
32
|
+
*/
|
|
33
|
+
export declare function convert12To24(rawHour: number, isPM: boolean): number;
|
|
34
|
+
/**
|
|
35
|
+
* 포맷 문자열에 따라 날짜/시간을 문자열로 변환한다
|
|
36
|
+
*
|
|
37
|
+
* @param formatString 포맷 문자열
|
|
38
|
+
* @param args 날짜/시간 구성 요소
|
|
39
|
+
*
|
|
40
|
+
* @remarks
|
|
41
|
+
* C#과 동일한 포맷 문자열을 지원한다:
|
|
42
|
+
*
|
|
43
|
+
* | 포맷 | 설명 | 예시 |
|
|
44
|
+
* |------|------|------|
|
|
45
|
+
* | yyyy | 4자리 연도 | 2024 |
|
|
46
|
+
* | yy | 2자리 연도 | 24 |
|
|
47
|
+
* | MM | 0으로 패딩된 월 | 01~12 |
|
|
48
|
+
* | M | 월 | 1~12 |
|
|
49
|
+
* | ddd | 요일 (한글) | 일, 월, 화, 수, 목, 금, 토 |
|
|
50
|
+
* | dd | 0으로 패딩된 일 | 01~31 |
|
|
51
|
+
* | d | 일 | 1~31 |
|
|
52
|
+
* | tt | 오전/오후 | 오전, 오후 |
|
|
53
|
+
* | hh | 0으로 패딩된 12시간 | 01~12 |
|
|
54
|
+
* | h | 12시간 | 1~12 |
|
|
55
|
+
* | HH | 0으로 패딩된 24시간 | 00~23 |
|
|
56
|
+
* | H | 24시간 | 0~23 |
|
|
57
|
+
* | mm | 0으로 패딩된 분 | 00~59 |
|
|
58
|
+
* | m | 분 | 0~59 |
|
|
59
|
+
* | ss | 0으로 패딩된 초 | 00~59 |
|
|
60
|
+
* | s | 초 | 0~59 |
|
|
61
|
+
* | fff | 밀리초 (3자리) | 000~999 |
|
|
62
|
+
* | ff | 밀리초 (2자리) | 00~99 |
|
|
63
|
+
* | f | 밀리초 (1자리) | 0~9 |
|
|
64
|
+
* | zzz | 타임존 오프셋 (±HH:mm) | +09:00 |
|
|
65
|
+
* | zz | 타임존 오프셋 (±HH) | +09 |
|
|
66
|
+
* | z | 타임존 오프셋 (±H) | +9 |
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* formatDate("yyyy-MM-dd", { year: 2024, month: 3, day: 15 });
|
|
71
|
+
* // "2024-03-15"
|
|
72
|
+
*
|
|
73
|
+
* formatDate("yyyy년 M월 d일 (ddd)", { year: 2024, month: 3, day: 15 });
|
|
74
|
+
* // "2024년 3월 15일 (금)"
|
|
75
|
+
*
|
|
76
|
+
* formatDate("tt h:mm:ss", { hour: 14, minute: 30, second: 45 });
|
|
77
|
+
* // "오후 2:30:45"
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export declare function formatDate(formatString: string, args: {
|
|
81
|
+
year?: number;
|
|
82
|
+
month?: number;
|
|
83
|
+
day?: number;
|
|
84
|
+
hour?: number;
|
|
85
|
+
minute?: number;
|
|
86
|
+
second?: number;
|
|
87
|
+
millisecond?: number;
|
|
88
|
+
timezoneOffsetMinutes?: number;
|
|
89
|
+
}): string;
|
|
90
|
+
//# sourceMappingURL=date-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-format.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/date-format.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAY1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAKpE;AAyCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,UAAU,CACxB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,GACA,MAAM,CAwFR"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 객체를 JSON 문자열로 직렬화
|
|
3
|
+
* DateTime, DateOnly, Time, Uuid, Set, Map, Error, Uint8Array 등 커스텀 타입 지원
|
|
4
|
+
*
|
|
5
|
+
* @param obj 직렬화할 객체
|
|
6
|
+
* @param options 직렬화 옵션
|
|
7
|
+
* @param options.space JSON 들여쓰기 (숫자: 공백 수, 문자열: 들여쓰기 문자열)
|
|
8
|
+
* @param options.replacer 커스텀 replacer 함수. 기본 타입 변환 전에 호출됨
|
|
9
|
+
* @param options.redactBytes true 시 Uint8Array 내용을 "__hidden__"으로 대체 (로깅용). 이 옵션으로 직렬화한 결과는 jsonParse()로 원본 Uint8Array를 복원할 수 없음
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* - 순환 참조가 있는 객체는 TypeError를 던짐
|
|
13
|
+
* - 객체의 toJSON 메서드가 있으면 호출하여 결과를 사용함 (Date, DateTime 등 커스텀 타입 제외)
|
|
14
|
+
* - 전역 프로토타입을 수정하지 않아 Worker 환경에서도 안전함
|
|
15
|
+
*/
|
|
16
|
+
export declare function jsonStringify(obj: unknown, options?: {
|
|
17
|
+
space?: string | number;
|
|
18
|
+
replacer?: (key: string | undefined, value: unknown) => unknown;
|
|
19
|
+
redactBytes?: boolean;
|
|
20
|
+
}): string;
|
|
21
|
+
/**
|
|
22
|
+
* JSON 문자열을 객체로 역직렬화
|
|
23
|
+
* DateTime, DateOnly, Time, Uuid, Set, Map, Error, Uint8Array 등 커스텀 타입 복원
|
|
24
|
+
*
|
|
25
|
+
* @remarks
|
|
26
|
+
* `__type__`과 `data` 키를 가진 객체는 타입 복원에 사용된다.
|
|
27
|
+
* 사용자 데이터에 `{ __type__: "Date" | "DateTime" | "DateOnly" | "Time" | "Uuid" | "Set" | "Map" | "Error" | "Uint8Array", data: ... }`
|
|
28
|
+
* 형태가 있으면 의도치 않게 타입 변환될 수 있으므로 주의한다.
|
|
29
|
+
*
|
|
30
|
+
* @security 개발 모드(`__DEV__`)에서만 에러 메시지에 JSON 문자열 전체가 포함된다.
|
|
31
|
+
* 프로덕션 모드에서는 JSON 길이만 포함된다.
|
|
32
|
+
*/
|
|
33
|
+
export declare function jsonParse<T = unknown>(json: string): T;
|
|
34
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../../../core-common/src/utils/json.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,MAAM,CAkHR;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAqDtD"}
|