@simplysm/core-common 13.0.69 → 13.0.71
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/README.md +66 -267
- package/dist/common.types.d.ts +14 -14
- package/dist/errors/argument-error.d.ts +10 -10
- package/dist/errors/argument-error.d.ts.map +1 -1
- package/dist/errors/argument-error.js +2 -2
- package/dist/errors/argument-error.js.map +1 -1
- package/dist/errors/not-implemented-error.d.ts +8 -8
- package/dist/errors/not-implemented-error.js +2 -2
- package/dist/errors/not-implemented-error.js.map +1 -1
- package/dist/errors/sd-error.d.ts +10 -10
- package/dist/errors/sd-error.d.ts.map +1 -1
- package/dist/errors/timeout-error.d.ts +10 -10
- package/dist/errors/timeout-error.js +3 -3
- package/dist/errors/timeout-error.js.map +1 -1
- package/dist/extensions/arr-ext.d.ts +2 -2
- package/dist/extensions/arr-ext.helpers.d.ts +8 -8
- package/dist/extensions/arr-ext.helpers.js +1 -1
- package/dist/extensions/arr-ext.helpers.js.map +1 -1
- package/dist/extensions/arr-ext.js +13 -13
- package/dist/extensions/arr-ext.js.map +1 -1
- package/dist/extensions/arr-ext.types.d.ts +57 -57
- package/dist/extensions/arr-ext.types.d.ts.map +1 -1
- package/dist/extensions/map-ext.d.ts +16 -16
- package/dist/extensions/set-ext.d.ts +11 -11
- package/dist/features/debounce-queue.d.ts +17 -15
- package/dist/features/debounce-queue.d.ts.map +1 -1
- package/dist/features/debounce-queue.js +6 -6
- package/dist/features/debounce-queue.js.map +1 -1
- package/dist/features/event-emitter.d.ts +20 -20
- package/dist/features/event-emitter.js +17 -17
- package/dist/features/serial-queue.d.ts +11 -11
- package/dist/features/serial-queue.js +5 -5
- package/dist/features/serial-queue.js.map +1 -1
- package/dist/globals.d.ts +4 -4
- package/dist/types/date-only.d.ts +64 -64
- package/dist/types/date-only.d.ts.map +1 -1
- package/dist/types/date-only.js +63 -63
- package/dist/types/date-time.d.ts +37 -37
- package/dist/types/date-time.d.ts.map +1 -1
- package/dist/types/date-time.js +54 -37
- package/dist/types/date-time.js.map +1 -1
- package/dist/types/lazy-gc-map.d.ts +26 -26
- package/dist/types/lazy-gc-map.d.ts.map +1 -1
- package/dist/types/lazy-gc-map.js +26 -26
- package/dist/types/lazy-gc-map.js.map +1 -1
- package/dist/types/time.d.ts +25 -25
- package/dist/types/time.d.ts.map +1 -1
- package/dist/types/time.js +25 -25
- package/dist/types/time.js.map +1 -1
- package/dist/types/uuid.d.ts +11 -11
- package/dist/types/uuid.d.ts.map +1 -1
- package/dist/types/uuid.js +12 -12
- package/dist/types/uuid.js.map +1 -1
- package/dist/utils/bytes.d.ts +17 -17
- package/dist/utils/bytes.js +4 -4
- package/dist/utils/bytes.js.map +1 -1
- package/dist/utils/date-format.d.ts +45 -45
- package/dist/utils/date-format.js +1 -1
- package/dist/utils/date-format.js.map +1 -1
- package/dist/utils/error.d.ts +4 -4
- package/dist/utils/json.d.ts +17 -17
- package/dist/utils/json.js +3 -3
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/num.d.ts +23 -23
- package/dist/utils/obj.d.ts +111 -111
- package/dist/utils/obj.d.ts.map +1 -1
- package/dist/utils/obj.js +3 -3
- package/dist/utils/obj.js.map +1 -1
- package/dist/utils/path.d.ts +10 -10
- package/dist/utils/primitive.d.ts +5 -5
- package/dist/utils/primitive.js +1 -1
- package/dist/utils/primitive.js.map +1 -1
- package/dist/utils/str.d.ts +46 -46
- package/dist/utils/str.d.ts.map +1 -1
- package/dist/utils/str.js +5 -5
- package/dist/utils/str.js.map +1 -1
- package/dist/utils/template-strings.d.ts +26 -26
- package/dist/utils/transferable.d.ts +18 -18
- package/dist/utils/transferable.js +1 -1
- package/dist/utils/transferable.js.map +1 -1
- package/dist/utils/wait.d.ts +9 -9
- package/dist/utils/xml.d.ts +13 -13
- package/dist/utils/xml.d.ts.map +1 -1
- package/dist/utils/xml.js +1 -0
- package/dist/utils/xml.js.map +1 -1
- package/dist/zip/sd-zip.d.ts +22 -22
- package/dist/zip/sd-zip.js +16 -16
- package/package.json +4 -4
- package/src/common.types.ts +17 -17
- package/src/errors/argument-error.ts +15 -15
- package/src/errors/not-implemented-error.ts +9 -9
- package/src/errors/sd-error.ts +12 -12
- package/src/errors/timeout-error.ts +12 -12
- package/src/extensions/arr-ext.helpers.ts +10 -10
- package/src/extensions/arr-ext.ts +57 -57
- package/src/extensions/arr-ext.types.ts +59 -59
- package/src/extensions/map-ext.ts +16 -16
- package/src/extensions/set-ext.ts +11 -11
- package/src/features/debounce-queue.ts +21 -19
- package/src/features/event-emitter.ts +25 -25
- package/src/features/serial-queue.ts +13 -13
- package/src/globals.ts +4 -4
- package/src/index.ts +1 -1
- package/src/types/date-only.ts +83 -83
- package/src/types/date-time.ts +64 -44
- package/src/types/lazy-gc-map.ts +45 -45
- package/src/types/time.ts +34 -34
- package/src/types/uuid.ts +17 -17
- package/src/utils/bytes.ts +35 -35
- package/src/utils/date-format.ts +65 -65
- package/src/utils/error.ts +4 -4
- package/src/utils/json.ts +39 -39
- package/src/utils/num.ts +23 -23
- package/src/utils/obj.ts +138 -138
- package/src/utils/path.ts +10 -10
- package/src/utils/primitive.ts +6 -6
- package/src/utils/str.ts +260 -261
- package/src/utils/template-strings.ts +29 -29
- package/src/utils/transferable.ts +284 -284
- package/src/utils/wait.ts +10 -10
- package/src/utils/xml.ts +20 -19
- package/src/zip/sd-zip.ts +25 -25
- package/tests/errors/errors.spec.ts +80 -0
- package/tests/extensions/array-extension.spec.ts +796 -0
- package/tests/extensions/map-extension.spec.ts +147 -0
- package/tests/extensions/set-extension.spec.ts +74 -0
- package/tests/types/date-only.spec.ts +638 -0
- package/tests/types/date-time.spec.ts +391 -0
- package/tests/types/lazy-gc-map.spec.ts +692 -0
- package/tests/types/time.spec.ts +559 -0
- package/tests/types/uuid.spec.ts +74 -0
- package/tests/utils/bytes-utils.spec.ts +230 -0
- package/tests/utils/date-format.spec.ts +373 -0
- package/tests/utils/debounce-queue.spec.ts +272 -0
- package/tests/utils/json.spec.ts +486 -0
- package/tests/utils/number.spec.ts +157 -0
- package/tests/utils/object.spec.ts +829 -0
- package/tests/utils/path.spec.ts +78 -0
- package/tests/utils/primitive.spec.ts +43 -0
- package/tests/utils/sd-event-emitter.spec.ts +216 -0
- package/tests/utils/serial-queue.spec.ts +365 -0
- package/tests/utils/string.spec.ts +281 -0
- package/tests/utils/template-strings.spec.ts +57 -0
- package/tests/utils/transferable.spec.ts +703 -0
- package/tests/utils/wait.spec.ts +145 -0
- package/tests/utils/xml.spec.ts +146 -0
- package/tests/zip/sd-zip.spec.ts +238 -0
- package/docs/extensions.md +0 -503
- package/docs/features.md +0 -109
- package/docs/types.md +0 -486
- package/docs/utils.md +0 -780
package/dist/types/date-time.js
CHANGED
|
@@ -22,17 +22,17 @@ class DateTime {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* Parse a string to create DateTime instance
|
|
26
26
|
*
|
|
27
|
-
* @param str
|
|
28
|
-
* @returns
|
|
29
|
-
* @throws ArgumentError
|
|
27
|
+
* @param str DateTime string
|
|
28
|
+
* @returns Parsed DateTime instance
|
|
29
|
+
* @throws ArgumentError If unsupported format
|
|
30
30
|
*
|
|
31
31
|
* @example
|
|
32
32
|
* DateTime.parse("2025-01-15 10:30:00") // yyyy-MM-dd HH:mm:ss
|
|
33
33
|
* DateTime.parse("2025-01-15 10:30:00.123") // yyyy-MM-dd HH:mm:ss.fff
|
|
34
34
|
* DateTime.parse("20250115103000") // yyyyMMddHHmmss
|
|
35
|
-
* DateTime.parse("2025-01-15
|
|
35
|
+
* DateTime.parse("2025-01-15 AM 10:30:00") // yyyy-MM-dd AM/PM HH:mm:ss
|
|
36
36
|
* DateTime.parse("2025-01-15T10:30:00Z") // ISO 8601
|
|
37
37
|
*/
|
|
38
38
|
static parse(str) {
|
|
@@ -40,12 +40,12 @@ class DateTime {
|
|
|
40
40
|
if (!Number.isNaN(parsedTick)) {
|
|
41
41
|
return new DateTime(parsedTick);
|
|
42
42
|
}
|
|
43
|
-
const match1 = /^([0-9]{4})-([0-9]{2})-([0-9]{2}) (
|
|
43
|
+
const match1 = /^([0-9]{4})-([0-9]{2})-([0-9]{2}) (AM|PM) ([0-9]{1,2}):([0-9]{2}):([0-9]{2})(\.([0-9]{1,3}))?$/i.exec(
|
|
44
44
|
str
|
|
45
45
|
);
|
|
46
46
|
if (match1 != null) {
|
|
47
47
|
const rawHour = Number(match1[5]);
|
|
48
|
-
const isPM = match1[4] === "
|
|
48
|
+
const isPM = match1[4].toUpperCase() === "PM";
|
|
49
49
|
const hour = convert12To24(rawHour, isPM);
|
|
50
50
|
return new DateTime(
|
|
51
51
|
Number(match1[1]),
|
|
@@ -57,6 +57,23 @@ class DateTime {
|
|
|
57
57
|
match1[9] ? Number(match1[9].padEnd(3, "0")) : void 0
|
|
58
58
|
);
|
|
59
59
|
}
|
|
60
|
+
const matchKorean = /^([0-9]{4})-([0-9]{2})-([0-9]{2}) (오전|오후) ([0-9]{1,2}):([0-9]{2}):([0-9]{2})(\.([0-9]{1,3}))?$/.exec(
|
|
61
|
+
str
|
|
62
|
+
);
|
|
63
|
+
if (matchKorean != null) {
|
|
64
|
+
const rawHour = Number(matchKorean[5]);
|
|
65
|
+
const isPM = matchKorean[4] === "\uC624\uD6C4";
|
|
66
|
+
const hour = convert12To24(rawHour, isPM);
|
|
67
|
+
return new DateTime(
|
|
68
|
+
Number(matchKorean[1]),
|
|
69
|
+
Number(matchKorean[2]),
|
|
70
|
+
Number(matchKorean[3]),
|
|
71
|
+
hour,
|
|
72
|
+
Number(matchKorean[6]),
|
|
73
|
+
Number(matchKorean[7]),
|
|
74
|
+
matchKorean[9] ? Number(matchKorean[9].padEnd(3, "0")) : void 0
|
|
75
|
+
);
|
|
76
|
+
}
|
|
60
77
|
const match2 = /^[0-9]{14}$/.exec(str);
|
|
61
78
|
if (match2 != null) {
|
|
62
79
|
return new DateTime(
|
|
@@ -83,11 +100,11 @@ class DateTime {
|
|
|
83
100
|
);
|
|
84
101
|
}
|
|
85
102
|
throw new ArgumentError(
|
|
86
|
-
|
|
103
|
+
`Failed to parse datetime format. Supported formats: 'yyyy-MM-dd HH:mm:ss', 'yyyyMMddHHmmss', 'yyyy-MM-dd AM/PM HH:mm:ss', ISO 8601`,
|
|
87
104
|
{ input: str }
|
|
88
105
|
);
|
|
89
106
|
}
|
|
90
|
-
//#region Getters (
|
|
107
|
+
//#region Getters (read-only)
|
|
91
108
|
get year() {
|
|
92
109
|
return this.date.getFullYear();
|
|
93
110
|
}
|
|
@@ -112,20 +129,20 @@ class DateTime {
|
|
|
112
129
|
get tick() {
|
|
113
130
|
return this.date.getTime();
|
|
114
131
|
}
|
|
115
|
-
/**
|
|
132
|
+
/** Day of week (Sunday~Saturday: 0~6) */
|
|
116
133
|
get dayOfWeek() {
|
|
117
134
|
return this.date.getDay();
|
|
118
135
|
}
|
|
119
136
|
get timezoneOffsetMinutes() {
|
|
120
137
|
return -this.date.getTimezoneOffset();
|
|
121
138
|
}
|
|
122
|
-
/**
|
|
139
|
+
/** Whether the datetime is set correctly */
|
|
123
140
|
get isValid() {
|
|
124
141
|
return this.date instanceof Date && !Number.isNaN(this.date.getTime());
|
|
125
142
|
}
|
|
126
143
|
//#endregion
|
|
127
|
-
//#region
|
|
128
|
-
/**
|
|
144
|
+
//#region Immutable transformation methods (returns new instance)
|
|
145
|
+
/** Return new instance with specified year */
|
|
129
146
|
setYear(year) {
|
|
130
147
|
return new DateTime(
|
|
131
148
|
year,
|
|
@@ -138,10 +155,10 @@ class DateTime {
|
|
|
138
155
|
);
|
|
139
156
|
}
|
|
140
157
|
/**
|
|
141
|
-
*
|
|
142
|
-
* @param month
|
|
143
|
-
* @note
|
|
144
|
-
* (
|
|
158
|
+
* Return new DateTime instance with specified month
|
|
159
|
+
* @param month Month to set (1-12, out-of-range values are adjusted in year)
|
|
160
|
+
* @note If current day is greater than target month's day count, it will be adjusted to last day of month
|
|
161
|
+
* (e.g., setMonth(2) on Jan 31 → Feb 28 or 29)
|
|
145
162
|
*/
|
|
146
163
|
setMonth(month) {
|
|
147
164
|
const normalized = normalizeMonth(this.year, month, this.day);
|
|
@@ -156,10 +173,10 @@ class DateTime {
|
|
|
156
173
|
);
|
|
157
174
|
}
|
|
158
175
|
/**
|
|
159
|
-
*
|
|
160
|
-
* @param day
|
|
161
|
-
* @note
|
|
162
|
-
*
|
|
176
|
+
* Return new DateTime instance with specified day
|
|
177
|
+
* @param day Day to set
|
|
178
|
+
* @note Days outside valid month range are automatically adjusted to next/previous month per JavaScript Date behavior
|
|
179
|
+
* (e.g., day=32 in January → February 1)
|
|
163
180
|
*/
|
|
164
181
|
setDay(day) {
|
|
165
182
|
return new DateTime(
|
|
@@ -172,7 +189,7 @@ class DateTime {
|
|
|
172
189
|
this.millisecond
|
|
173
190
|
);
|
|
174
191
|
}
|
|
175
|
-
/**
|
|
192
|
+
/** Return new instance with specified hour */
|
|
176
193
|
setHour(hour) {
|
|
177
194
|
return new DateTime(
|
|
178
195
|
this.year,
|
|
@@ -184,7 +201,7 @@ class DateTime {
|
|
|
184
201
|
this.millisecond
|
|
185
202
|
);
|
|
186
203
|
}
|
|
187
|
-
/**
|
|
204
|
+
/** Return new instance with specified minute */
|
|
188
205
|
setMinute(minute) {
|
|
189
206
|
return new DateTime(
|
|
190
207
|
this.year,
|
|
@@ -196,7 +213,7 @@ class DateTime {
|
|
|
196
213
|
this.millisecond
|
|
197
214
|
);
|
|
198
215
|
}
|
|
199
|
-
/**
|
|
216
|
+
/** Return new instance with specified second */
|
|
200
217
|
setSecond(second) {
|
|
201
218
|
return new DateTime(
|
|
202
219
|
this.year,
|
|
@@ -208,7 +225,7 @@ class DateTime {
|
|
|
208
225
|
this.millisecond
|
|
209
226
|
);
|
|
210
227
|
}
|
|
211
|
-
/**
|
|
228
|
+
/** Return new instance with specified millisecond */
|
|
212
229
|
setMillisecond(millisecond) {
|
|
213
230
|
return new DateTime(
|
|
214
231
|
this.year,
|
|
@@ -221,41 +238,41 @@ class DateTime {
|
|
|
221
238
|
);
|
|
222
239
|
}
|
|
223
240
|
//#endregion
|
|
224
|
-
//#region
|
|
225
|
-
/**
|
|
241
|
+
//#region Arithmetic methods (returns new instance)
|
|
242
|
+
/** Return new instance with specified years added */
|
|
226
243
|
addYears(years) {
|
|
227
244
|
return this.setYear(this.year + years);
|
|
228
245
|
}
|
|
229
|
-
/**
|
|
246
|
+
/** Return new instance with specified months added */
|
|
230
247
|
addMonths(months) {
|
|
231
248
|
return this.setMonth(this.month + months);
|
|
232
249
|
}
|
|
233
|
-
/**
|
|
250
|
+
/** Return new instance with specified days added */
|
|
234
251
|
addDays(days) {
|
|
235
252
|
return new DateTime(this.tick + days * 24 * 60 * 60 * 1e3);
|
|
236
253
|
}
|
|
237
|
-
/**
|
|
254
|
+
/** Return new instance with specified hours added */
|
|
238
255
|
addHours(hours) {
|
|
239
256
|
return new DateTime(this.tick + hours * 60 * 60 * 1e3);
|
|
240
257
|
}
|
|
241
|
-
/**
|
|
258
|
+
/** Return new instance with specified minutes added */
|
|
242
259
|
addMinutes(minutes) {
|
|
243
260
|
return new DateTime(this.tick + minutes * 60 * 1e3);
|
|
244
261
|
}
|
|
245
|
-
/**
|
|
262
|
+
/** Return new instance with specified seconds added */
|
|
246
263
|
addSeconds(seconds) {
|
|
247
264
|
return new DateTime(this.tick + seconds * 1e3);
|
|
248
265
|
}
|
|
249
|
-
/**
|
|
266
|
+
/** Return new instance with specified milliseconds added */
|
|
250
267
|
addMilliseconds(milliseconds) {
|
|
251
268
|
return new DateTime(this.tick + milliseconds);
|
|
252
269
|
}
|
|
253
270
|
//#endregion
|
|
254
|
-
//#region
|
|
271
|
+
//#region Formatting
|
|
255
272
|
/**
|
|
256
|
-
*
|
|
257
|
-
* @param format
|
|
258
|
-
* @see dtFormat
|
|
273
|
+
* Convert to string with specified format
|
|
274
|
+
* @param format Format string
|
|
275
|
+
* @see dtFormat for supported format strings
|
|
259
276
|
*/
|
|
260
277
|
toFormatString(formatStr) {
|
|
261
278
|
return formatDate(formatStr, {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/types/date-time.ts"],
|
|
4
|
-
"mappings": "AAAA,SAAS,qBAAqB;AAC9B,SAAS,eAAe,YAAY,sBAAsB;AAanD,MAAM,SAAS;AAAA,EACX;AAAA,EAkBT,YACE,MACA,MACA,MACA,MACA,MACA,MACA,MACA;AACA,QAAI,SAAS,QAAW;AACtB,WAAK,OAAO,oBAAI,KAAK;AAAA,IACvB,WAAW,SAAS,UAAa,SAAS,QAAW;AACnD,WAAK,OAAO,IAAI;AAAA,QACd;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF,WAAW,gBAAgB,MAAM;AAC/B,WAAK,OAAO,IAAI,KAAK,KAAK,QAAQ,CAAC;AAAA,IACrC,OAAO;AACL,WAAK,OAAO,IAAI,KAAK,IAAI;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,OAAO,MAAM,KAAuB;AAClC,UAAM,aAAa,KAAK,MAAM,GAAG;AACjC,QAAI,CAAC,OAAO,MAAM,UAAU,GAAG;AAC7B,aAAO,IAAI,SAAS,UAAU;AAAA,IAChC;AAEA,UAAM,SACJ,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Map with automatic expiration feature
|
|
3
|
+
* Updates access time in LRU manner, auto-deletes if not accessed for specified time
|
|
4
4
|
*
|
|
5
|
-
* @note
|
|
6
|
-
*
|
|
5
|
+
* @note Must call dispose() or use 'using' statement after use.
|
|
6
|
+
* Otherwise GC timer continues running and causes memory leak.
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
|
-
* // using
|
|
9
|
+
* // using statement (recommended)
|
|
10
10
|
* using map = new LazyGcMap({ gcInterval: 10000, expireTime: 60000 });
|
|
11
11
|
*
|
|
12
|
-
* //
|
|
12
|
+
* // Or explicit dispose() call
|
|
13
13
|
* const map = new LazyGcMap({ gcInterval: 10000, expireTime: 60000 });
|
|
14
14
|
* try {
|
|
15
|
-
* // ...
|
|
15
|
+
* // ... usage
|
|
16
16
|
* } finally {
|
|
17
17
|
* map.dispose();
|
|
18
18
|
* }
|
|
@@ -25,46 +25,46 @@ export declare class LazyGcMap<TKey, TValue> {
|
|
|
25
25
|
private _isGcRunning;
|
|
26
26
|
private _isDestroyed;
|
|
27
27
|
/**
|
|
28
|
-
* @param _options
|
|
29
|
-
* @param _options.gcInterval GC
|
|
30
|
-
* @param _options.expireTime
|
|
31
|
-
* @param _options.onExpire
|
|
28
|
+
* @param _options Configuration options
|
|
29
|
+
* @param _options.gcInterval GC interval in milliseconds. Default: 1/10 of expireTime (minimum 1000ms)
|
|
30
|
+
* @param _options.expireTime Expiration time in milliseconds. Deleted after this time since last access. Example: 60000 (60 seconds)
|
|
31
|
+
* @param _options.onExpire Callback called on expiration. Can be async function, errors are logged and continue execution
|
|
32
32
|
*/
|
|
33
33
|
constructor(_options: {
|
|
34
34
|
gcInterval?: number;
|
|
35
35
|
expireTime: number;
|
|
36
36
|
onExpire?: (key: TKey, value: TValue) => void | Promise<void>;
|
|
37
37
|
});
|
|
38
|
-
/**
|
|
38
|
+
/** Number of stored items */
|
|
39
39
|
get size(): number;
|
|
40
|
-
/**
|
|
40
|
+
/** Check if key exists (does not update access time) */
|
|
41
41
|
has(key: TKey): boolean;
|
|
42
|
-
/**
|
|
42
|
+
/** Get value (updates access time) */
|
|
43
43
|
get(key: TKey): TValue | undefined;
|
|
44
|
-
/**
|
|
44
|
+
/** Store value (sets access time and starts GC timer) */
|
|
45
45
|
set(key: TKey, value: TValue): void;
|
|
46
|
-
/**
|
|
46
|
+
/** Delete item (stops GC timer if empty) */
|
|
47
47
|
delete(key: TKey): boolean;
|
|
48
|
-
/**
|
|
48
|
+
/** Clean up instance (stop GC timer and delete data) */
|
|
49
49
|
dispose(): void;
|
|
50
|
-
/** using
|
|
50
|
+
/** Support for 'using' statement */
|
|
51
51
|
[Symbol.dispose](): void;
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
53
|
+
* Delete all items (instance can still be used)
|
|
54
54
|
*/
|
|
55
55
|
clear(): void;
|
|
56
56
|
/**
|
|
57
|
-
*
|
|
58
|
-
* @param key
|
|
59
|
-
* @param factory
|
|
60
|
-
* @returns
|
|
57
|
+
* Return value for key, or create and store via factory if not found
|
|
58
|
+
* @param key Key to look up
|
|
59
|
+
* @param factory Function to create value if key not found
|
|
60
|
+
* @returns Existing or newly created value
|
|
61
61
|
*/
|
|
62
62
|
getOrCreate(key: TKey, factory: () => TValue): TValue;
|
|
63
|
-
/**
|
|
63
|
+
/** Iterate over values only (Iterator) */
|
|
64
64
|
values(): IterableIterator<TValue>;
|
|
65
|
-
/**
|
|
65
|
+
/** Iterate over keys only (Iterator) */
|
|
66
66
|
keys(): IterableIterator<TKey>;
|
|
67
|
-
/**
|
|
67
|
+
/** Iterate over entries (Iterator) */
|
|
68
68
|
entries(): IterableIterator<[TKey, TValue]>;
|
|
69
69
|
private _startGc;
|
|
70
70
|
private _runGc;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-gc-map.d.ts","sourceRoot":"","sources":["../../src/types/lazy-gc-map.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,SAAS,CAAC,IAAI,EAAE,MAAM;IAoB/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAnB3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAgC;IAG/D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0D;IAG/E,OAAO,CAAC,QAAQ,CAAC,CAAiC;IAElD,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,YAAY,CAAS;IAE7B;;;;;OAKG;gBAEgB,QAAQ,EAAE;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/D;IAGH,
|
|
1
|
+
{"version":3,"file":"lazy-gc-map.d.ts","sourceRoot":"","sources":["../../src/types/lazy-gc-map.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,SAAS,CAAC,IAAI,EAAE,MAAM;IAoB/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAnB3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAgC;IAG/D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0D;IAG/E,OAAO,CAAC,QAAQ,CAAC,CAAiC;IAElD,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,YAAY,CAAS;IAE7B;;;;;OAKG;gBAEgB,QAAQ,EAAE;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/D;IAGH,6BAA6B;IAC7B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,wDAAwD;IACxD,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO;IAKvB,sCAAsC;IACtC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS;IAUlC,yDAAyD;IACzD,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOnC,4CAA4C;IAC5C,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO;IAU1B,wDAAwD;IACxD,OAAO,IAAI,IAAI;IAOf,oCAAoC;IACpC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAIxB;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,GAAG,MAAM;IAerD,0CAA0C;IACzC,MAAM,IAAI,gBAAgB,CAAC,MAAM,CAAC;IAOnC,wCAAwC;IACvC,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC;IAK/B,sCAAsC;IACrC,OAAO,IAAI,gBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAS5C,OAAO,CAAC,QAAQ;YAUF,MAAM;IAmDpB,OAAO,CAAC,OAAO;CAQhB"}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
import consola from "consola";
|
|
2
2
|
class LazyGcMap {
|
|
3
3
|
/**
|
|
4
|
-
* @param _options
|
|
5
|
-
* @param _options.gcInterval GC
|
|
6
|
-
* @param _options.expireTime
|
|
7
|
-
* @param _options.onExpire
|
|
4
|
+
* @param _options Configuration options
|
|
5
|
+
* @param _options.gcInterval GC interval in milliseconds. Default: 1/10 of expireTime (minimum 1000ms)
|
|
6
|
+
* @param _options.expireTime Expiration time in milliseconds. Deleted after this time since last access. Example: 60000 (60 seconds)
|
|
7
|
+
* @param _options.onExpire Callback called on expiration. Can be async function, errors are logged and continue execution
|
|
8
8
|
*/
|
|
9
9
|
constructor(_options) {
|
|
10
10
|
this._options = _options;
|
|
11
11
|
}
|
|
12
12
|
static _logger = consola.withTag("LazyGcMap");
|
|
13
|
-
//
|
|
13
|
+
// Store actual data and last access time together
|
|
14
14
|
_map = /* @__PURE__ */ new Map();
|
|
15
|
-
// GC
|
|
15
|
+
// GC timer
|
|
16
16
|
_gcTimer;
|
|
17
|
-
//
|
|
17
|
+
// Flag to prevent duplicate GC runs
|
|
18
18
|
_isGcRunning = false;
|
|
19
|
-
//
|
|
19
|
+
// Whether dispose() has been called
|
|
20
20
|
_isDestroyed = false;
|
|
21
|
-
/**
|
|
21
|
+
/** Number of stored items */
|
|
22
22
|
get size() {
|
|
23
23
|
return this._map.size;
|
|
24
24
|
}
|
|
25
|
-
/**
|
|
25
|
+
/** Check if key exists (does not update access time) */
|
|
26
26
|
has(key) {
|
|
27
27
|
if (this._isDestroyed) return false;
|
|
28
28
|
return this._map.has(key);
|
|
29
29
|
}
|
|
30
|
-
/**
|
|
30
|
+
/** Get value (updates access time) */
|
|
31
31
|
get(key) {
|
|
32
32
|
if (this._isDestroyed) return void 0;
|
|
33
33
|
const item = this._map.get(key);
|
|
@@ -35,13 +35,13 @@ class LazyGcMap {
|
|
|
35
35
|
item.lastAccess = Date.now();
|
|
36
36
|
return item.value;
|
|
37
37
|
}
|
|
38
|
-
/**
|
|
38
|
+
/** Store value (sets access time and starts GC timer) */
|
|
39
39
|
set(key, value) {
|
|
40
40
|
if (this._isDestroyed) return;
|
|
41
41
|
this._map.set(key, { value, lastAccess: Date.now() });
|
|
42
42
|
this._startGc();
|
|
43
43
|
}
|
|
44
|
-
/**
|
|
44
|
+
/** Delete item (stops GC timer if empty) */
|
|
45
45
|
delete(key) {
|
|
46
46
|
if (this._isDestroyed) return false;
|
|
47
47
|
const result = this._map.delete(key);
|
|
@@ -50,19 +50,19 @@ class LazyGcMap {
|
|
|
50
50
|
}
|
|
51
51
|
return result;
|
|
52
52
|
}
|
|
53
|
-
/**
|
|
53
|
+
/** Clean up instance (stop GC timer and delete data) */
|
|
54
54
|
dispose() {
|
|
55
55
|
if (this._isDestroyed) return;
|
|
56
56
|
this._isDestroyed = true;
|
|
57
57
|
this._map.clear();
|
|
58
58
|
this._stopGc();
|
|
59
59
|
}
|
|
60
|
-
/** using
|
|
60
|
+
/** Support for 'using' statement */
|
|
61
61
|
[Symbol.dispose]() {
|
|
62
62
|
this.dispose();
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
|
-
*
|
|
65
|
+
* Delete all items (instance can still be used)
|
|
66
66
|
*/
|
|
67
67
|
clear() {
|
|
68
68
|
if (this._isDestroyed) return;
|
|
@@ -70,14 +70,14 @@ class LazyGcMap {
|
|
|
70
70
|
this._stopGc();
|
|
71
71
|
}
|
|
72
72
|
/**
|
|
73
|
-
*
|
|
74
|
-
* @param key
|
|
75
|
-
* @param factory
|
|
76
|
-
* @returns
|
|
73
|
+
* Return value for key, or create and store via factory if not found
|
|
74
|
+
* @param key Key to look up
|
|
75
|
+
* @param factory Function to create value if key not found
|
|
76
|
+
* @returns Existing or newly created value
|
|
77
77
|
*/
|
|
78
78
|
getOrCreate(key, factory) {
|
|
79
79
|
if (this._isDestroyed) {
|
|
80
|
-
throw new Error("LazyGcMap
|
|
80
|
+
throw new Error("LazyGcMap has already been disposed.");
|
|
81
81
|
}
|
|
82
82
|
const item = this._map.get(key);
|
|
83
83
|
if (item == null) {
|
|
@@ -88,26 +88,26 @@ class LazyGcMap {
|
|
|
88
88
|
item.lastAccess = Date.now();
|
|
89
89
|
return item.value;
|
|
90
90
|
}
|
|
91
|
-
/**
|
|
91
|
+
/** Iterate over values only (Iterator) */
|
|
92
92
|
*values() {
|
|
93
93
|
if (this._isDestroyed) return;
|
|
94
94
|
for (const item of this._map.values()) {
|
|
95
95
|
yield item.value;
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
-
/**
|
|
98
|
+
/** Iterate over keys only (Iterator) */
|
|
99
99
|
*keys() {
|
|
100
100
|
if (this._isDestroyed) return;
|
|
101
101
|
yield* this._map.keys();
|
|
102
102
|
}
|
|
103
|
-
/**
|
|
103
|
+
/** Iterate over entries (Iterator) */
|
|
104
104
|
*entries() {
|
|
105
105
|
if (this._isDestroyed) return;
|
|
106
106
|
for (const [key, item] of this._map.entries()) {
|
|
107
107
|
yield [key, item.value];
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
-
//#region GC
|
|
110
|
+
//#region GC logic
|
|
111
111
|
_startGc() {
|
|
112
112
|
if (this._isDestroyed) return;
|
|
113
113
|
if (this._gcTimer != null) return;
|
|
@@ -136,7 +136,7 @@ class LazyGcMap {
|
|
|
136
136
|
try {
|
|
137
137
|
await this._options.onExpire(key, item.value);
|
|
138
138
|
} catch (err) {
|
|
139
|
-
LazyGcMap._logger.error("onExpire
|
|
139
|
+
LazyGcMap._logger.error("onExpire callback error", err);
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
const afterItem = this._map.get(key);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/types/lazy-gc-map.ts"],
|
|
4
|
-
"mappings": "AAAA,OAAO,aAAa;AAqBb,MAAM,UAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBnC,YACmB,UAKjB;AALiB;AAAA,EAKhB;AAAA,EAxBH,OAAwB,UAAU,QAAQ,QAAQ,WAAW;AAAA;AAAA,EAG5C,OAAO,oBAAI,IAAiD;AAAA;AAAA,EAGrE;AAAA;AAAA,EAEA,eAAe;AAAA;AAAA,EAEf,eAAe;AAAA;AAAA,EAiBvB,IAAI,OAAe;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA;AAAA,EAGA,IAAI,KAAoB;AACtB,QAAI,KAAK,aAAc,QAAO;AAC9B,WAAO,KAAK,KAAK,IAAI,GAAG;AAAA,EAC1B;AAAA;AAAA,EAGA,IAAI,KAA+B;AACjC,QAAI,KAAK,aAAc,QAAO;AAC9B,UAAM,OAAO,KAAK,KAAK,IAAI,GAAG;AAC9B,QAAI,QAAQ,KAAM,QAAO;AAGzB,SAAK,aAAa,KAAK,IAAI;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,KAAW,OAAqB;AAClC,QAAI,KAAK,aAAc;AACvB,SAAK,KAAK,IAAI,KAAK,EAAE,OAAO,YAAY,KAAK,IAAI,EAAE,CAAC;AAEpD,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA,EAGA,OAAO,KAAoB;AACzB,QAAI,KAAK,aAAc,QAAO;AAC9B,UAAM,SAAS,KAAK,KAAK,OAAO,GAAG;AAEnC,QAAI,KAAK,KAAK,SAAS,GAAG;AACxB,WAAK,QAAQ;AAAA,IACf;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,UAAgB;AACd,QAAI,KAAK,aAAc;AACvB,SAAK,eAAe;AACpB,SAAK,KAAK,MAAM;AAChB,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA,EAGA,CAAC,OAAO,OAAO,IAAU;AACvB,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,QAAI,KAAK,aAAc;AACvB,SAAK,KAAK,MAAM;AAChB,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,KAAW,SAA+B;AACpD,QAAI,KAAK,cAAc;AACrB,YAAM,IAAI,MAAM,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/types/time.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Time class (without date: HH:mm:ss.fff, immutable)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* 24
|
|
4
|
+
* An immutable class that stores only time without date information.
|
|
5
|
+
* Values exceeding 24 hours or negative values are automatically normalized.
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
8
8
|
* const now = new Time();
|
|
@@ -12,26 +12,26 @@
|
|
|
12
12
|
export declare class Time {
|
|
13
13
|
private static readonly MS_PER_DAY;
|
|
14
14
|
private readonly _tick;
|
|
15
|
-
/**
|
|
15
|
+
/** Create with current time */
|
|
16
16
|
constructor();
|
|
17
|
-
/**
|
|
17
|
+
/** Create with hour, minute, second, millisecond */
|
|
18
18
|
constructor(hour: number, minute: number, second?: number, millisecond?: number);
|
|
19
|
-
/** tick (
|
|
19
|
+
/** Create from tick (millisecond) */
|
|
20
20
|
constructor(tick: number);
|
|
21
|
-
/**
|
|
21
|
+
/** Create by extracting time part only from Date object */
|
|
22
22
|
constructor(date: Date);
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* Parse a string to create Time instance
|
|
25
25
|
*
|
|
26
|
-
* @param str
|
|
27
|
-
* @returns
|
|
28
|
-
* @throws ArgumentError
|
|
26
|
+
* @param str Time string
|
|
27
|
+
* @returns Parsed Time instance
|
|
28
|
+
* @throws ArgumentError If unsupported format
|
|
29
29
|
*
|
|
30
30
|
* @example
|
|
31
31
|
* Time.parse("10:30:00") // HH:mm:ss
|
|
32
32
|
* Time.parse("10:30:00.123") // HH:mm:ss.fff
|
|
33
|
-
* Time.parse("
|
|
34
|
-
* Time.parse("2025-01-15T10:30:00") // ISO 8601 (
|
|
33
|
+
* Time.parse("AM 10:30:00") // AM/PM HH:mm:ss
|
|
34
|
+
* Time.parse("2025-01-15T10:30:00") // ISO 8601 (extract time part only)
|
|
35
35
|
*/
|
|
36
36
|
static parse(str: string): Time;
|
|
37
37
|
get hour(): number;
|
|
@@ -39,28 +39,28 @@ export declare class Time {
|
|
|
39
39
|
get second(): number;
|
|
40
40
|
get millisecond(): number;
|
|
41
41
|
get tick(): number;
|
|
42
|
-
/**
|
|
42
|
+
/** Whether time is set correctly */
|
|
43
43
|
get isValid(): boolean;
|
|
44
|
-
/**
|
|
44
|
+
/** Return new instance with specified hour */
|
|
45
45
|
setHour(hour: number): Time;
|
|
46
|
-
/**
|
|
46
|
+
/** Return new instance with specified minute */
|
|
47
47
|
setMinute(minute: number): Time;
|
|
48
|
-
/**
|
|
48
|
+
/** Return new instance with specified second */
|
|
49
49
|
setSecond(second: number): Time;
|
|
50
|
-
/**
|
|
50
|
+
/** Return new instance with specified millisecond */
|
|
51
51
|
setMillisecond(millisecond: number): Time;
|
|
52
|
-
/**
|
|
52
|
+
/** Return new instance with specified hours added (24-hour wraparound) */
|
|
53
53
|
addHours(hours: number): Time;
|
|
54
|
-
/**
|
|
54
|
+
/** Return new instance with specified minutes added (24-hour wraparound) */
|
|
55
55
|
addMinutes(minutes: number): Time;
|
|
56
|
-
/**
|
|
56
|
+
/** Return new instance with specified seconds added (24-hour wraparound) */
|
|
57
57
|
addSeconds(seconds: number): Time;
|
|
58
|
-
/**
|
|
58
|
+
/** Return new instance with specified milliseconds added (24-hour wraparound) */
|
|
59
59
|
addMilliseconds(milliseconds: number): Time;
|
|
60
60
|
/**
|
|
61
|
-
*
|
|
62
|
-
* @param format
|
|
63
|
-
* @see dtFormat
|
|
61
|
+
* Convert to string with specified format
|
|
62
|
+
* @param format Format string
|
|
63
|
+
* @see dtFormat for supported format strings
|
|
64
64
|
*/
|
|
65
65
|
toFormatString(formatStr: string): string;
|
|
66
66
|
toString(): string;
|
package/dist/types/time.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../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
|
|
1
|
+
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../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,+BAA+B;;IAE/B,oDAAoD;gBACxC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IAC/E,qCAAqC;gBACzB,IAAI,EAAE,MAAM;IACxB,2DAA2D;gBAC/C,IAAI,EAAE,IAAI;IA8BtB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IA+C/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,oCAAoC;IACpC,IAAI,OAAO,IAAI,OAAO,CAErB;IAMD,8CAA8C;IAC9C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,gDAAgD;IAChD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,gDAAgD;IAChD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,qDAAqD;IACrD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQzC,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7B,4EAA4E;IAC5E,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjC,4EAA4E;IAC5E,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMjC,iFAAiF;IACjF,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAU3C;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IASzC,QAAQ,IAAI,MAAM;CAKnB"}
|