@simplysm/core-common 13.0.99 → 14.0.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.
Files changed (181) hide show
  1. package/dist/common.types.d.ts +14 -14
  2. package/dist/common.types.js +2 -1
  3. package/dist/common.types.js.map +1 -6
  4. package/dist/env.d.ts +5 -0
  5. package/dist/env.d.ts.map +1 -1
  6. package/dist/env.js +12 -8
  7. package/dist/env.js.map +1 -6
  8. package/dist/errors/argument-error.d.ts +10 -10
  9. package/dist/errors/argument-error.d.ts.map +1 -1
  10. package/dist/errors/argument-error.js +31 -14
  11. package/dist/errors/argument-error.js.map +1 -6
  12. package/dist/errors/not-implemented-error.d.ts +8 -8
  13. package/dist/errors/not-implemented-error.js +30 -12
  14. package/dist/errors/not-implemented-error.js.map +1 -6
  15. package/dist/errors/sd-error.d.ts +10 -10
  16. package/dist/errors/sd-error.d.ts.map +1 -1
  17. package/dist/errors/sd-error.js +45 -24
  18. package/dist/errors/sd-error.js.map +1 -6
  19. package/dist/errors/timeout-error.d.ts +10 -10
  20. package/dist/errors/timeout-error.js +34 -15
  21. package/dist/errors/timeout-error.js.map +1 -6
  22. package/dist/extensions/arr-ext.d.ts +2 -2
  23. package/dist/extensions/arr-ext.helpers.d.ts +10 -10
  24. package/dist/extensions/arr-ext.helpers.js +112 -89
  25. package/dist/extensions/arr-ext.helpers.js.map +1 -6
  26. package/dist/extensions/arr-ext.js +458 -422
  27. package/dist/extensions/arr-ext.js.map +1 -6
  28. package/dist/extensions/arr-ext.types.d.ts +57 -57
  29. package/dist/extensions/arr-ext.types.d.ts.map +1 -1
  30. package/dist/extensions/arr-ext.types.js +6 -1
  31. package/dist/extensions/arr-ext.types.js.map +1 -6
  32. package/dist/extensions/map-ext.d.ts +16 -16
  33. package/dist/extensions/map-ext.js +27 -22
  34. package/dist/extensions/map-ext.js.map +1 -6
  35. package/dist/extensions/set-ext.d.ts +11 -11
  36. package/dist/extensions/set-ext.js +32 -25
  37. package/dist/extensions/set-ext.js.map +1 -6
  38. package/dist/features/debounce-queue.d.ts +17 -17
  39. package/dist/features/debounce-queue.js +98 -70
  40. package/dist/features/debounce-queue.js.map +1 -6
  41. package/dist/features/event-emitter.d.ts +20 -20
  42. package/dist/features/event-emitter.js +101 -78
  43. package/dist/features/event-emitter.js.map +1 -6
  44. package/dist/features/serial-queue.d.ts +11 -11
  45. package/dist/features/serial-queue.js +78 -57
  46. package/dist/features/serial-queue.js.map +1 -6
  47. package/dist/globals.d.ts +4 -4
  48. package/dist/globals.js +9 -1
  49. package/dist/globals.js.map +1 -6
  50. package/dist/index.js +28 -27
  51. package/dist/index.js.map +1 -6
  52. package/dist/types/date-only.d.ts +64 -64
  53. package/dist/types/date-only.d.ts.map +1 -1
  54. package/dist/types/date-only.js +263 -252
  55. package/dist/types/date-only.js.map +1 -6
  56. package/dist/types/date-time.d.ts +36 -36
  57. package/dist/types/date-time.d.ts.map +1 -1
  58. package/dist/types/date-time.js +196 -288
  59. package/dist/types/date-time.js.map +1 -6
  60. package/dist/types/lazy-gc-map.d.ts +26 -26
  61. package/dist/types/lazy-gc-map.d.ts.map +1 -1
  62. package/dist/types/lazy-gc-map.js +202 -159
  63. package/dist/types/lazy-gc-map.js.map +1 -6
  64. package/dist/types/time.d.ts +23 -23
  65. package/dist/types/time.d.ts.map +1 -1
  66. package/dist/types/time.js +169 -158
  67. package/dist/types/time.js.map +1 -6
  68. package/dist/types/uuid.d.ts +11 -11
  69. package/dist/types/uuid.d.ts.map +1 -1
  70. package/dist/types/uuid.js +95 -70
  71. package/dist/types/uuid.js.map +1 -6
  72. package/dist/utils/bytes.d.ts +17 -17
  73. package/dist/utils/bytes.js +137 -81
  74. package/dist/utils/bytes.js.map +1 -6
  75. package/dist/utils/date-format.d.ts +40 -40
  76. package/dist/utils/date-format.js +187 -101
  77. package/dist/utils/date-format.js.map +1 -6
  78. package/dist/utils/error.d.ts +4 -4
  79. package/dist/utils/error.js +11 -6
  80. package/dist/utils/error.js.map +1 -6
  81. package/dist/utils/json.d.ts +19 -19
  82. package/dist/utils/json.js +187 -135
  83. package/dist/utils/json.js.map +1 -6
  84. package/dist/utils/num.d.ts +20 -20
  85. package/dist/utils/num.js +76 -34
  86. package/dist/utils/num.js.map +1 -6
  87. package/dist/utils/obj.d.ts +111 -111
  88. package/dist/utils/obj.d.ts.map +1 -1
  89. package/dist/utils/obj.js +706 -496
  90. package/dist/utils/obj.js.map +1 -6
  91. package/dist/utils/path.d.ts +10 -10
  92. package/dist/utils/path.js +35 -18
  93. package/dist/utils/path.js.map +1 -6
  94. package/dist/utils/primitive.d.ts +5 -5
  95. package/dist/utils/primitive.js +34 -14
  96. package/dist/utils/primitive.js.map +1 -6
  97. package/dist/utils/str.d.ts +38 -38
  98. package/dist/utils/str.js +217 -113
  99. package/dist/utils/str.js.map +1 -6
  100. package/dist/utils/template-strings.d.ts +26 -26
  101. package/dist/utils/template-strings.js +113 -40
  102. package/dist/utils/template-strings.js.map +1 -6
  103. package/dist/utils/transferable.d.ts +18 -18
  104. package/dist/utils/transferable.js +218 -151
  105. package/dist/utils/transferable.js.map +1 -6
  106. package/dist/utils/wait.d.ts +9 -9
  107. package/dist/utils/wait.js +30 -15
  108. package/dist/utils/wait.js.map +1 -6
  109. package/dist/utils/xml.d.ts +13 -13
  110. package/dist/utils/xml.js +84 -46
  111. package/dist/utils/xml.js.map +1 -6
  112. package/dist/utils/zip.d.ts +22 -22
  113. package/dist/utils/zip.js +172 -148
  114. package/dist/utils/zip.js.map +1 -6
  115. package/package.json +5 -7
  116. package/src/common.types.ts +14 -14
  117. package/src/env.ts +9 -1
  118. package/src/errors/argument-error.ts +15 -15
  119. package/src/errors/not-implemented-error.ts +9 -9
  120. package/src/errors/sd-error.ts +12 -12
  121. package/src/errors/timeout-error.ts +12 -12
  122. package/src/extensions/arr-ext.helpers.ts +16 -16
  123. package/src/extensions/arr-ext.ts +35 -35
  124. package/src/extensions/arr-ext.types.ts +57 -57
  125. package/src/extensions/map-ext.ts +16 -16
  126. package/src/extensions/set-ext.ts +11 -11
  127. package/src/features/debounce-queue.ts +23 -23
  128. package/src/features/event-emitter.ts +25 -25
  129. package/src/features/serial-queue.ts +13 -13
  130. package/src/globals.ts +4 -4
  131. package/src/index.ts +5 -5
  132. package/src/types/date-only.ts +84 -83
  133. package/src/types/date-time.ts +43 -42
  134. package/src/types/lazy-gc-map.ts +44 -44
  135. package/src/types/time.ts +29 -29
  136. package/src/types/uuid.ts +15 -15
  137. package/src/utils/bytes.ts +35 -35
  138. package/src/utils/date-format.ts +59 -59
  139. package/src/utils/error.ts +4 -4
  140. package/src/utils/json.ts +41 -41
  141. package/src/utils/num.ts +20 -20
  142. package/src/utils/obj.ts +138 -138
  143. package/src/utils/path.ts +10 -10
  144. package/src/utils/primitive.ts +6 -6
  145. package/src/utils/str.ts +48 -48
  146. package/src/utils/template-strings.ts +29 -29
  147. package/src/utils/transferable.ts +38 -38
  148. package/src/utils/wait.ts +10 -10
  149. package/src/utils/xml.ts +19 -19
  150. package/src/utils/zip.ts +25 -25
  151. package/README.md +0 -160
  152. package/docs/errors.md +0 -119
  153. package/docs/extensions.md +0 -387
  154. package/docs/features.md +0 -143
  155. package/docs/types.md +0 -287
  156. package/docs/utils.md +0 -757
  157. package/tests/errors/errors.spec.ts +0 -80
  158. package/tests/extensions/array-extension.spec.ts +0 -654
  159. package/tests/extensions/map-extension.spec.ts +0 -117
  160. package/tests/extensions/set-extension.spec.ts +0 -67
  161. package/tests/types/date-only.spec.ts +0 -533
  162. package/tests/types/date-time.spec.ts +0 -246
  163. package/tests/types/lazy-gc-map.spec.ts +0 -606
  164. package/tests/types/time.spec.ts +0 -428
  165. package/tests/types/uuid.spec.ts +0 -74
  166. package/tests/utils/bytes-utils.spec.ts +0 -197
  167. package/tests/utils/date-format.spec.ts +0 -350
  168. package/tests/utils/debounce-queue.spec.ts +0 -226
  169. package/tests/utils/json.spec.ts +0 -400
  170. package/tests/utils/number.spec.ts +0 -136
  171. package/tests/utils/object.spec.ts +0 -810
  172. package/tests/utils/path.spec.ts +0 -70
  173. package/tests/utils/primitive.spec.ts +0 -43
  174. package/tests/utils/sd-event-emitter.spec.ts +0 -189
  175. package/tests/utils/serial-queue.spec.ts +0 -305
  176. package/tests/utils/string.spec.ts +0 -265
  177. package/tests/utils/template-strings.spec.ts +0 -48
  178. package/tests/utils/transferable.spec.ts +0 -639
  179. package/tests/utils/wait.spec.ts +0 -123
  180. package/tests/utils/xml.spec.ts +0 -146
  181. package/tests/utils/zip.spec.ts +0 -221
@@ -1,161 +1,172 @@
1
1
  import { ArgumentError } from "../errors/argument-error.js";
2
2
  import { convert12To24, format } from "../utils/date-format.js";
3
- class Time {
4
- static MS_PER_DAY = 24 * 60 * 60 * 1e3;
5
- _tick;
6
- constructor(arg1, arg2, arg3, arg4) {
7
- if (arg1 === void 0) {
8
- const now = /* @__PURE__ */ new Date();
9
- this._tick = (now.getMilliseconds() + now.getSeconds() * 1e3 + now.getMinutes() * 60 * 1e3 + now.getHours() * 60 * 60 * 1e3) % Time.MS_PER_DAY;
10
- } else if (arg2 !== void 0) {
11
- let tick = ((arg4 ?? 0) + (arg3 ?? 0) * 1e3 + arg2 * 60 * 1e3 + arg1 * 60 * 60 * 1e3) % Time.MS_PER_DAY;
12
- if (tick < 0) tick += Time.MS_PER_DAY;
13
- this._tick = tick;
14
- } else if (arg1 instanceof Date) {
15
- this._tick = (arg1.getMilliseconds() + arg1.getSeconds() * 1e3 + arg1.getMinutes() * 60 * 1e3 + arg1.getHours() * 60 * 60 * 1e3) % Time.MS_PER_DAY;
16
- } else {
17
- let tick = arg1 % Time.MS_PER_DAY;
18
- if (tick < 0) tick += Time.MS_PER_DAY;
19
- this._tick = tick;
20
- }
21
- }
22
- /**
23
- * Parse a string to create Time instance
24
- *
25
- * @param str Time string
26
- * @returns Parsed Time instance
27
- * @throws ArgumentError If unsupported format
28
- *
29
- * @example
30
- * Time.parse("10:30:00") // HH:mm:ss
31
- * Time.parse("10:30:00.123") // HH:mm:ss.fff
32
- * Time.parse("AM 10:30:00") // AM/PM HH:mm:ss
33
- * Time.parse("2025-01-15T10:30:00") // ISO 8601 (extract time part only)
34
- */
35
- static parse(str) {
36
- const match1 = /(AM|PM) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})(\.([0-9]{1,3}))?$/i.exec(str);
37
- if (match1 != null) {
38
- const rawHour = Number(match1[2]);
39
- const isPM = match1[1].toUpperCase() === "PM";
40
- const hour = convert12To24(rawHour, isPM);
41
- return new Time(
42
- hour,
43
- Number(match1[3]),
44
- Number(match1[4]),
45
- Number(match1[6] ? match1[6].padEnd(3, "0") : "0")
46
- );
47
- }
48
- const match2 = /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})(\.([0-9]{1,3}))?$/.exec(str);
49
- if (match2 != null) {
50
- return new Time(
51
- Number(match2[1]),
52
- Number(match2[2]),
53
- Number(match2[3]),
54
- Number(match2[5] ? match2[5].padEnd(3, "0") : "0")
55
- );
56
- }
57
- const isoMatch = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.exec(str);
58
- if (isoMatch != null) {
59
- const date = new Date(str);
60
- if (!Number.isNaN(date.getTime())) {
61
- return new Time(
62
- date.getHours(),
63
- date.getMinutes(),
64
- date.getSeconds(),
65
- date.getMilliseconds()
66
- );
67
- }
68
- }
69
- throw new ArgumentError(
70
- `Failed to parse time format. Supported formats: 'HH:mm:ss', 'HH:mm:ss.fff', 'AM/PM HH:mm:ss', ISO 8601`,
71
- { input: str }
72
- );
73
- }
74
- //#region Getters (read-only)
75
- get hour() {
76
- return Math.floor(this._tick / (60 * 60 * 1e3));
77
- }
78
- get minute() {
79
- return Math.floor(this._tick / (60 * 1e3)) % 60;
80
- }
81
- get second() {
82
- return Math.floor(this._tick / 1e3) % 60;
83
- }
84
- get millisecond() {
85
- return this._tick % 1e3;
86
- }
87
- get tick() {
88
- return this._tick;
89
- }
90
- /** Whether time is set correctly */
91
- get isValid() {
92
- return !Number.isNaN(this._tick);
93
- }
94
- //#endregion
95
- //#region Immutable transformation methods (returns new instance)
96
- /** Return new instance with specified hour */
97
- setHour(hour) {
98
- return new Time(hour, this.minute, this.second, this.millisecond);
99
- }
100
- /** Return new instance with specified minute */
101
- setMinute(minute) {
102
- return new Time(this.hour, minute, this.second, this.millisecond);
103
- }
104
- /** Return new instance with specified second */
105
- setSecond(second) {
106
- return new Time(this.hour, this.minute, second, this.millisecond);
107
- }
108
- /** Return new instance with specified millisecond */
109
- setMillisecond(millisecond) {
110
- return new Time(this.hour, this.minute, this.second, millisecond);
111
- }
112
- //#endregion
113
- //#region Arithmetic methods (returns new instance)
114
- /** Return new instance with specified hours added (24-hour wraparound) */
115
- addHours(hours) {
116
- let newTick = (this._tick + hours * 60 * 60 * 1e3) % Time.MS_PER_DAY;
117
- if (newTick < 0) newTick += Time.MS_PER_DAY;
118
- return new Time(newTick);
119
- }
120
- /** Return new instance with specified minutes added (24-hour wraparound) */
121
- addMinutes(minutes) {
122
- let newTick = (this._tick + minutes * 60 * 1e3) % Time.MS_PER_DAY;
123
- if (newTick < 0) newTick += Time.MS_PER_DAY;
124
- return new Time(newTick);
125
- }
126
- /** Return new instance with specified seconds added (24-hour wraparound) */
127
- addSeconds(seconds) {
128
- let newTick = (this._tick + seconds * 1e3) % Time.MS_PER_DAY;
129
- if (newTick < 0) newTick += Time.MS_PER_DAY;
130
- return new Time(newTick);
131
- }
132
- /** Return new instance with specified milliseconds added (24-hour wraparound) */
133
- addMilliseconds(milliseconds) {
134
- let newTick = (this._tick + milliseconds) % Time.MS_PER_DAY;
135
- if (newTick < 0) newTick += Time.MS_PER_DAY;
136
- return new Time(newTick);
137
- }
138
- //#endregion
139
- //#region Formatting
140
- /**
141
- * Convert to string with specified format
142
- * @param format Format string
143
- * @see dtFormat for supported format strings
144
- */
145
- toFormatString(formatStr) {
146
- return format(formatStr, {
147
- hour: this.hour,
148
- minute: this.minute,
149
- second: this.second,
150
- millisecond: this.millisecond
151
- });
152
- }
153
- toString() {
154
- return this.toFormatString("HH:mm:ss.fff");
155
- }
156
- //#endregion
3
+ /**
4
+ * 시간 클래스 (날짜 제외: HH:mm:ss.fff, 불변)
5
+ *
6
+ * 날짜 정보 없이 시간만 저장하는 불변 클래스.
7
+ * 24시간을 초과하거나 음수인 값은 자동으로 정규화됨.
8
+ *
9
+ * @example
10
+ * const now = new Time();
11
+ * const specific = new Time(10, 30, 0);
12
+ * const parsed = Time.parse("10:30:00");
13
+ */
14
+ export class Time {
15
+ static MS_PER_DAY = 24 * 60 * 60 * 1000;
16
+ _tick;
17
+ constructor(arg1, arg2, arg3, arg4) {
18
+ if (arg1 === undefined) {
19
+ const now = new Date();
20
+ this._tick =
21
+ (now.getMilliseconds() +
22
+ now.getSeconds() * 1000 +
23
+ now.getMinutes() * 60 * 1000 +
24
+ now.getHours() * 60 * 60 * 1000) %
25
+ Time.MS_PER_DAY;
26
+ }
27
+ else if (arg2 !== undefined) {
28
+ let tick = ((arg4 ?? 0) + (arg3 ?? 0) * 1000 + arg2 * 60 * 1000 + arg1 * 60 * 60 * 1000) %
29
+ Time.MS_PER_DAY;
30
+ if (tick < 0)
31
+ tick += Time.MS_PER_DAY;
32
+ this._tick = tick;
33
+ }
34
+ else if (arg1 instanceof Date) {
35
+ this._tick =
36
+ (arg1.getMilliseconds() +
37
+ arg1.getSeconds() * 1000 +
38
+ arg1.getMinutes() * 60 * 1000 +
39
+ arg1.getHours() * 60 * 60 * 1000) %
40
+ Time.MS_PER_DAY;
41
+ }
42
+ else {
43
+ let tick = arg1 % Time.MS_PER_DAY;
44
+ if (tick < 0)
45
+ tick += Time.MS_PER_DAY;
46
+ this._tick = tick;
47
+ }
48
+ }
49
+ /**
50
+ * 문자열을 파싱하여 Time 인스턴스 생성
51
+ *
52
+ * @param str 시간 문자열
53
+ * @returns 파싱된 Time 인스턴스
54
+ * @throws ArgumentError 지원하지 않는 형식인 경우
55
+ *
56
+ * @example
57
+ * Time.parse("10:30:00") // HH:mm:ss
58
+ * Time.parse("10:30:00.123") // HH:mm:ss.fff
59
+ * Time.parse("AM 10:30:00") // AM/PM HH:mm:ss
60
+ * Time.parse("2025-01-15T10:30:00") // ISO 8601 (extract time part only)
61
+ */
62
+ static parse(str) {
63
+ const match1 = /(AM|PM) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})(\.([0-9]{1,3}))?$/i.exec(str);
64
+ if (match1 != null) {
65
+ const rawHour = Number(match1[2]);
66
+ const isPM = match1[1].toUpperCase() === "PM";
67
+ const hour = convert12To24(rawHour, isPM);
68
+ return new Time(hour, Number(match1[3]), Number(match1[4]), Number(match1[6] ? match1[6].padEnd(3, "0") : "0"));
69
+ }
70
+ const match2 = /([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})(\.([0-9]{1,3}))?$/.exec(str);
71
+ if (match2 != null) {
72
+ return new Time(Number(match2[1]), Number(match2[2]), Number(match2[3]), Number(match2[5] ? match2[5].padEnd(3, "0") : "0"));
73
+ }
74
+ // ISO 8601 형식 (예: 2025-01-15T10:30:00.123Z, 2025-01-15T10:30:00+09:00)
75
+ // 타임존 변환 처리를 위해 Date 객체 사용
76
+ const isoMatch = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.exec(str);
77
+ if (isoMatch != null) {
78
+ const date = new Date(str);
79
+ if (!Number.isNaN(date.getTime())) {
80
+ return new Time(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
81
+ }
82
+ }
83
+ throw new ArgumentError(`시간 형식 파싱 실패. 지원 형식: 'HH:mm:ss', 'HH:mm:ss.fff', 'AM/PM HH:mm:ss', ISO 8601`, { input: str });
84
+ }
85
+ //#region Getters (읽기 전용)
86
+ get hour() {
87
+ return Math.floor(this._tick / (60 * 60 * 1000));
88
+ }
89
+ get minute() {
90
+ return Math.floor(this._tick / (60 * 1000)) % 60;
91
+ }
92
+ get second() {
93
+ return Math.floor(this._tick / 1000) % 60;
94
+ }
95
+ get millisecond() {
96
+ return this._tick % 1000;
97
+ }
98
+ get tick() {
99
+ return this._tick;
100
+ }
101
+ /** 시간이 올바르게 설정되었는지 여부 */
102
+ get isValid() {
103
+ return !Number.isNaN(this._tick);
104
+ }
105
+ //#endregion
106
+ //#region 불변 변환 메서드 ( 인스턴스 반환)
107
+ /** 지정된 시로 새 인스턴스 반환 */
108
+ setHour(hour) {
109
+ return new Time(hour, this.minute, this.second, this.millisecond);
110
+ }
111
+ /** 지정된 분으로 새 인스턴스 반환 */
112
+ setMinute(minute) {
113
+ return new Time(this.hour, minute, this.second, this.millisecond);
114
+ }
115
+ /** 지정된 초로 새 인스턴스 반환 */
116
+ setSecond(second) {
117
+ return new Time(this.hour, this.minute, second, this.millisecond);
118
+ }
119
+ /** 지정된 밀리초로 새 인스턴스 반환 */
120
+ setMillisecond(millisecond) {
121
+ return new Time(this.hour, this.minute, this.second, millisecond);
122
+ }
123
+ //#endregion
124
+ //#region 산술 메서드 (새 인스턴스 반환)
125
+ /** 지정된 시간을 더한 새 인스턴스 반환 (24시간 순환) */
126
+ addHours(hours) {
127
+ let newTick = (this._tick + hours * 60 * 60 * 1000) % Time.MS_PER_DAY;
128
+ if (newTick < 0)
129
+ newTick += Time.MS_PER_DAY;
130
+ return new Time(newTick);
131
+ }
132
+ /** 지정된 분을 더한 인스턴스 반환 (24시간 순환) */
133
+ addMinutes(minutes) {
134
+ let newTick = (this._tick + minutes * 60 * 1000) % Time.MS_PER_DAY;
135
+ if (newTick < 0)
136
+ newTick += Time.MS_PER_DAY;
137
+ return new Time(newTick);
138
+ }
139
+ /** 지정된 초를 더한 새 인스턴스 반환 (24시간 순환) */
140
+ addSeconds(seconds) {
141
+ let newTick = (this._tick + seconds * 1000) % Time.MS_PER_DAY;
142
+ if (newTick < 0)
143
+ newTick += Time.MS_PER_DAY;
144
+ return new Time(newTick);
145
+ }
146
+ /** 지정된 밀리초를 더한 새 인스턴스 반환 (24시간 순환) */
147
+ addMilliseconds(milliseconds) {
148
+ let newTick = (this._tick + milliseconds) % Time.MS_PER_DAY;
149
+ if (newTick < 0)
150
+ newTick += Time.MS_PER_DAY;
151
+ return new Time(newTick);
152
+ }
153
+ //#endregion
154
+ //#region Formatting
155
+ /**
156
+ * 지정된 형식으로 문자열 변환
157
+ * @param format 형식 문자열
158
+ * @see dtFormat 지원되는 형식 문자열 참조
159
+ */
160
+ toFormatString(formatStr) {
161
+ return format(formatStr, {
162
+ hour: this.hour,
163
+ minute: this.minute,
164
+ second: this.second,
165
+ millisecond: this.millisecond,
166
+ });
167
+ }
168
+ toString() {
169
+ return this.toFormatString("HH:mm:ss.fff");
170
+ }
157
171
  }
158
- export {
159
- Time
160
- };
161
- //# sourceMappingURL=time.js.map
172
+ //# sourceMappingURL=time.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/types/time.ts"],
4
- "mappings": "AAAA,SAAS,qBAAqB;AAC9B,SAAS,eAAe,cAAc;AAa/B,MAAM,KAAK;AAAA,EAChB,OAAwB,aAAa,KAAK,KAAK,KAAK;AAAA,EAEnC;AAAA,EAUjB,YAAY,MAAsB,MAAe,MAAe,MAAe;AAC7E,QAAI,SAAS,QAAW;AACtB,YAAM,MAAM,oBAAI,KAAK;AACrB,WAAK,SACF,IAAI,gBAAgB,IACnB,IAAI,WAAW,IAAI,MACnB,IAAI,WAAW,IAAI,KAAK,MACxB,IAAI,SAAS,IAAI,KAAK,KAAK,OAC7B,KAAK;AAAA,IACT,WAAW,SAAS,QAAW;AAC7B,UAAI,SACA,QAAQ,MAAM,QAAQ,KAAK,MAAO,OAAO,KAAK,MAAQ,OAAkB,KAAK,KAAK,OACpF,KAAK;AACP,UAAI,OAAO,EAAG,SAAQ,KAAK;AAC3B,WAAK,QAAQ;AAAA,IACf,WAAW,gBAAgB,MAAM;AAC/B,WAAK,SACF,KAAK,gBAAgB,IACpB,KAAK,WAAW,IAAI,MACpB,KAAK,WAAW,IAAI,KAAK,MACzB,KAAK,SAAS,IAAI,KAAK,KAAK,OAC9B,KAAK;AAAA,IACT,OAAO;AACL,UAAI,OAAO,OAAO,KAAK;AACvB,UAAI,OAAO,EAAG,SAAQ,KAAK;AAC3B,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,OAAO,MAAM,KAAmB;AAC9B,UAAM,SAAS,oEAAoE,KAAK,GAAG;AAC3F,QAAI,UAAU,MAAM;AAClB,YAAM,UAAU,OAAO,OAAO,CAAC,CAAC;AAChC,YAAM,OAAO,OAAO,CAAC,EAAE,YAAY,MAAM;AACzC,YAAM,OAAO,cAAc,SAAS,IAAI;AACxC,aAAO,IAAI;AAAA,QACT;AAAA,QACA,OAAO,OAAO,CAAC,CAAC;AAAA,QAChB,OAAO,OAAO,CAAC,CAAC;AAAA,QAChB,OAAO,OAAO,CAAC,IAAI,OAAO,CAAC,EAAE,OAAO,GAAG,GAAG,IAAI,GAAG;AAAA,MACnD;AAAA,IACF;AAEA,UAAM,SAAS,2DAA2D,KAAK,GAAG;AAClF,QAAI,UAAU,MAAM;AAClB,aAAO,IAAI;AAAA,QACT,OAAO,OAAO,CAAC,CAAC;AAAA,QAChB,OAAO,OAAO,CAAC,CAAC;AAAA,QAChB,OAAO,OAAO,CAAC,CAAC;AAAA,QAChB,OAAO,OAAO,CAAC,IAAI,OAAO,CAAC,EAAE,OAAO,GAAG,GAAG,IAAI,GAAG;AAAA,MACnD;AAAA,IACF;AAIA,UAAM,WAAW,uCAAuC,KAAK,GAAG;AAChE,QAAI,YAAY,MAAM;AACpB,YAAM,OAAO,IAAI,KAAK,GAAG;AACzB,UAAI,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,GAAG;AACjC,eAAO,IAAI;AAAA,UACT,KAAK,SAAS;AAAA,UACd,KAAK,WAAW;AAAA,UAChB,KAAK,WAAW;AAAA,UAChB,KAAK,gBAAgB;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,IAAI;AAAA,MACR;AAAA,MACA,EAAE,OAAO,IAAI;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAIA,IAAI,OAAe;AACjB,WAAO,KAAK,MAAM,KAAK,SAAS,KAAK,KAAK,IAAK;AAAA,EACjD;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK,MAAM,KAAK,SAAS,KAAK,IAAK,IAAI;AAAA,EAChD;AAAA,EAEA,IAAI,SAAiB;AACnB,WAAO,KAAK,MAAM,KAAK,QAAQ,GAAI,IAAI;AAAA,EACzC;AAAA,EAEA,IAAI,cAAsB;AACxB,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,UAAmB;AACrB,WAAO,CAAC,OAAO,MAAM,KAAK,KAAK;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,MAAoB;AAC1B,WAAO,IAAI,KAAK,MAAM,KAAK,QAAQ,KAAK,QAAQ,KAAK,WAAW;AAAA,EAClE;AAAA;AAAA,EAGA,UAAU,QAAsB;AAC9B,WAAO,IAAI,KAAK,KAAK,MAAM,QAAQ,KAAK,QAAQ,KAAK,WAAW;AAAA,EAClE;AAAA;AAAA,EAGA,UAAU,QAAsB;AAC9B,WAAO,IAAI,KAAK,KAAK,MAAM,KAAK,QAAQ,QAAQ,KAAK,WAAW;AAAA,EAClE;AAAA;AAAA,EAGA,eAAe,aAA2B;AACxC,WAAO,IAAI,KAAK,KAAK,MAAM,KAAK,QAAQ,KAAK,QAAQ,WAAW;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,OAAqB;AAC5B,QAAI,WAAW,KAAK,QAAQ,QAAQ,KAAK,KAAK,OAAQ,KAAK;AAC3D,QAAI,UAAU,EAAG,YAAW,KAAK;AACjC,WAAO,IAAI,KAAK,OAAO;AAAA,EACzB;AAAA;AAAA,EAGA,WAAW,SAAuB;AAChC,QAAI,WAAW,KAAK,QAAQ,UAAU,KAAK,OAAQ,KAAK;AACxD,QAAI,UAAU,EAAG,YAAW,KAAK;AACjC,WAAO,IAAI,KAAK,OAAO;AAAA,EACzB;AAAA;AAAA,EAGA,WAAW,SAAuB;AAChC,QAAI,WAAW,KAAK,QAAQ,UAAU,OAAQ,KAAK;AACnD,QAAI,UAAU,EAAG,YAAW,KAAK;AACjC,WAAO,IAAI,KAAK,OAAO;AAAA,EACzB;AAAA;AAAA,EAGA,gBAAgB,cAA4B;AAC1C,QAAI,WAAW,KAAK,QAAQ,gBAAgB,KAAK;AACjD,QAAI,UAAU,EAAG,YAAW,KAAK;AACjC,WAAO,IAAI,KAAK,OAAO;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,eAAe,WAA2B;AACxC,WAAO,OAAO,WAAW;AAAA,MACvB,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,MACb,aAAa,KAAK;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK,eAAe,cAAc;AAAA,EAC3C;AAAA;AAGF;",
5
- "names": []
6
- }
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/types/time.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import type { Bytes } from "../common.types";
2
2
  /**
3
- * UUID v4 class
3
+ * UUID v4 클래스
4
4
  *
5
- * Generates cryptographically secure UUIDs based on crypto.getRandomValues. (Chrome 79+, Node.js compatible)
5
+ * crypto.getRandomValues 기반으로 암호학적으로 안전한 UUID를 생성. (Chrome 79+, Node.js 호환)
6
6
  *
7
7
  * @example
8
8
  * const id = Uuid.generate();
@@ -11,25 +11,25 @@ import type { Bytes } from "../common.types";
11
11
  export declare class Uuid {
12
12
  private static readonly _hexTable;
13
13
  private static readonly _uuidRegex;
14
- /** Convert 16-byte array to UUID string */
14
+ /** 16바이트 배열을 UUID 문자열로 변환 */
15
15
  private static _bytesToUuidStr;
16
- /** Create new UUID v4 instance */
16
+ /** UUID v4 인스턴스 생성 */
17
17
  static generate(): Uuid;
18
18
  /**
19
- * Create UUID from 16-byte Uint8Array
20
- * @param bytes 16-byte array
21
- * @throws {ArgumentError} If byte size is not 16
19
+ * 16바이트 Uint8Array로 UUID 생성
20
+ * @param bytes 16바이트 배열
21
+ * @throws {ArgumentError} 바이트 크기가 16이 아닌 경우
22
22
  */
23
23
  static fromBytes(bytes: Bytes): Uuid;
24
24
  private readonly _uuid;
25
25
  /**
26
- * @param uuid UUID string (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
27
- * @throws {ArgumentError} If format is invalid
26
+ * @param uuid UUID 문자열 (형식: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
27
+ * @throws {ArgumentError} 형식이 유효하지 않은 경우
28
28
  */
29
29
  constructor(uuid: string);
30
- /** Convert UUID to string */
30
+ /** UUID 문자열로 변환 */
31
31
  toString(): string;
32
- /** Convert UUID to 16-byte Uint8Array */
32
+ /** UUID 16바이트 Uint8Array 변환 */
33
33
  toBytes(): Bytes;
34
34
  }
35
35
  //# sourceMappingURL=uuid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../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,CAE/B;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CACkC;IAEpE,2CAA2C;IAC3C,OAAO,CAAC,MAAM,CAAC,eAAe;IA0B9B,kCAAkC;IAClC,MAAM,CAAC,QAAQ,IAAI,IAAI;IAWvB;;;;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,6BAA6B;IAC7B,QAAQ,IAAI,MAAM;IAIlB,yCAAyC;IACzC,OAAO,IAAI,KAAK;CAuBjB"}
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../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,CAE/B;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CACkC;IAEpE,6BAA6B;IAC7B,OAAO,CAAC,MAAM,CAAC,eAAe;IA0B9B,wBAAwB;IACxB,MAAM,CAAC,QAAQ,IAAI,IAAI;IAWvB;;;;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"}
@@ -1,74 +1,99 @@
1
1
  import { ArgumentError } from "../errors/argument-error.js";
2
- class Uuid {
3
- // Pre-calculate hex strings for 0x00 ~ 0xFF (256 entries)
4
- static _hexTable = Array.from(
5
- { length: 256 },
6
- (_, i) => i.toString(16).padStart(2, "0")
7
- );
8
- static _uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
9
- /** Convert 16-byte array to UUID string */
10
- static _bytesToUuidStr(bytes) {
11
- const h = Uuid._hexTable;
12
- return h[bytes[0]] + h[bytes[1]] + h[bytes[2]] + h[bytes[3]] + "-" + h[bytes[4]] + h[bytes[5]] + "-" + h[bytes[6]] + h[bytes[7]] + "-" + h[bytes[8]] + h[bytes[9]] + "-" + h[bytes[10]] + h[bytes[11]] + h[bytes[12]] + h[bytes[13]] + h[bytes[14]] + h[bytes[15]];
13
- }
14
- /** Create new UUID v4 instance */
15
- static generate() {
16
- const bytes = new Uint8Array(16);
17
- crypto.getRandomValues(bytes);
18
- bytes[6] = bytes[6] & 15 | 64;
19
- bytes[8] = bytes[8] & 63 | 128;
20
- return new Uuid(Uuid._bytesToUuidStr(bytes));
21
- }
22
- /**
23
- * Create UUID from 16-byte Uint8Array
24
- * @param bytes 16-byte array
25
- * @throws {ArgumentError} If byte size is not 16
26
- */
27
- static fromBytes(bytes) {
28
- if (bytes.length !== 16) {
29
- throw new ArgumentError("UUID byte size must be 16.", { length: bytes.length });
2
+ /**
3
+ * UUID v4 클래스
4
+ *
5
+ * crypto.getRandomValues 기반으로 암호학적으로 안전한 UUID를 생성. (Chrome 79+, Node.js 호환)
6
+ *
7
+ * @example
8
+ * const id = Uuid.generate();
9
+ * const fromStr = new Uuid("550e8400-e29b-41d4-a716-446655440000");
10
+ */
11
+ export class Uuid {
12
+ // 0x00 ~ 0xFF에 대한 hex 문자열 사전 계산 (256개 항목)
13
+ static _hexTable = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0"));
14
+ static _uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
15
+ /** 16바이트 배열을 UUID 문자열로 변환 */
16
+ static _bytesToUuidStr(bytes) {
17
+ const h = Uuid._hexTable;
18
+ return (h[bytes[0]] +
19
+ h[bytes[1]] +
20
+ h[bytes[2]] +
21
+ h[bytes[3]] +
22
+ "-" +
23
+ h[bytes[4]] +
24
+ h[bytes[5]] +
25
+ "-" +
26
+ h[bytes[6]] +
27
+ h[bytes[7]] +
28
+ "-" +
29
+ h[bytes[8]] +
30
+ h[bytes[9]] +
31
+ "-" +
32
+ h[bytes[10]] +
33
+ h[bytes[11]] +
34
+ h[bytes[12]] +
35
+ h[bytes[13]] +
36
+ h[bytes[14]] +
37
+ h[bytes[15]]);
30
38
  }
31
- return new Uuid(Uuid._bytesToUuidStr(bytes));
32
- }
33
- _uuid;
34
- /**
35
- * @param uuid UUID string (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
36
- * @throws {ArgumentError} If format is invalid
37
- */
38
- constructor(uuid) {
39
- if (!Uuid._uuidRegex.test(uuid)) {
40
- throw new ArgumentError("Invalid UUID format.", { uuid });
39
+ /** UUID v4 인스턴스 생성 */
40
+ static generate() {
41
+ const bytes = new Uint8Array(16);
42
+ crypto.getRandomValues(bytes);
43
+ // UUID v4 비트 설정
44
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
45
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
46
+ return new Uuid(Uuid._bytesToUuidStr(bytes));
47
+ }
48
+ /**
49
+ * 16바이트 Uint8Array로 UUID 생성
50
+ * @param bytes 16바이트 배열
51
+ * @throws {ArgumentError} 바이트 크기가 16이 아닌 경우
52
+ */
53
+ static fromBytes(bytes) {
54
+ if (bytes.length !== 16) {
55
+ throw new ArgumentError("UUID 바이트 크기는 16이어야 합니다.", { length: bytes.length });
56
+ }
57
+ return new Uuid(Uuid._bytesToUuidStr(bytes));
58
+ }
59
+ _uuid;
60
+ /**
61
+ * @param uuid UUID 문자열 (형식: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
62
+ * @throws {ArgumentError} 형식이 유효하지 않은 경우
63
+ */
64
+ constructor(uuid) {
65
+ if (!Uuid._uuidRegex.test(uuid)) {
66
+ throw new ArgumentError("유효하지 않은 UUID 형식입니다.", { uuid });
67
+ }
68
+ this._uuid = uuid;
69
+ }
70
+ /** UUID를 문자열로 변환 */
71
+ toString() {
72
+ return this._uuid;
73
+ }
74
+ /** UUID를 16바이트 Uint8Array로 변환 */
75
+ toBytes() {
76
+ const u = this._uuid;
77
+ // UUID format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)
78
+ // Hyphen positions: 8, 13, 18, 23
79
+ return new Uint8Array([
80
+ Number.parseInt(u.substring(0, 2), 16),
81
+ Number.parseInt(u.substring(2, 4), 16),
82
+ Number.parseInt(u.substring(4, 6), 16),
83
+ Number.parseInt(u.substring(6, 8), 16),
84
+ Number.parseInt(u.substring(9, 11), 16),
85
+ Number.parseInt(u.substring(11, 13), 16),
86
+ Number.parseInt(u.substring(14, 16), 16),
87
+ Number.parseInt(u.substring(16, 18), 16),
88
+ Number.parseInt(u.substring(19, 21), 16),
89
+ Number.parseInt(u.substring(21, 23), 16),
90
+ Number.parseInt(u.substring(24, 26), 16),
91
+ Number.parseInt(u.substring(26, 28), 16),
92
+ Number.parseInt(u.substring(28, 30), 16),
93
+ Number.parseInt(u.substring(30, 32), 16),
94
+ Number.parseInt(u.substring(32, 34), 16),
95
+ Number.parseInt(u.substring(34, 36), 16),
96
+ ]);
41
97
  }
42
- this._uuid = uuid;
43
- }
44
- /** Convert UUID to string */
45
- toString() {
46
- return this._uuid;
47
- }
48
- /** Convert UUID to 16-byte Uint8Array */
49
- toBytes() {
50
- const u = this._uuid;
51
- return new Uint8Array([
52
- Number.parseInt(u.substring(0, 2), 16),
53
- Number.parseInt(u.substring(2, 4), 16),
54
- Number.parseInt(u.substring(4, 6), 16),
55
- Number.parseInt(u.substring(6, 8), 16),
56
- Number.parseInt(u.substring(9, 11), 16),
57
- Number.parseInt(u.substring(11, 13), 16),
58
- Number.parseInt(u.substring(14, 16), 16),
59
- Number.parseInt(u.substring(16, 18), 16),
60
- Number.parseInt(u.substring(19, 21), 16),
61
- Number.parseInt(u.substring(21, 23), 16),
62
- Number.parseInt(u.substring(24, 26), 16),
63
- Number.parseInt(u.substring(26, 28), 16),
64
- Number.parseInt(u.substring(28, 30), 16),
65
- Number.parseInt(u.substring(30, 32), 16),
66
- Number.parseInt(u.substring(32, 34), 16),
67
- Number.parseInt(u.substring(34, 36), 16)
68
- ]);
69
- }
70
98
  }
71
- export {
72
- Uuid
73
- };
74
- //# sourceMappingURL=uuid.js.map
99
+ //# sourceMappingURL=uuid.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/types/uuid.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }
1
+ {"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../src/types/uuid.ts"],"names":[],"mappings":"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"}