@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.
Files changed (151) hide show
  1. package/README.md +66 -267
  2. package/dist/common.types.d.ts +14 -14
  3. package/dist/errors/argument-error.d.ts +10 -10
  4. package/dist/errors/argument-error.d.ts.map +1 -1
  5. package/dist/errors/argument-error.js +2 -2
  6. package/dist/errors/argument-error.js.map +1 -1
  7. package/dist/errors/not-implemented-error.d.ts +8 -8
  8. package/dist/errors/not-implemented-error.js +2 -2
  9. package/dist/errors/not-implemented-error.js.map +1 -1
  10. package/dist/errors/sd-error.d.ts +10 -10
  11. package/dist/errors/sd-error.d.ts.map +1 -1
  12. package/dist/errors/timeout-error.d.ts +10 -10
  13. package/dist/errors/timeout-error.js +3 -3
  14. package/dist/errors/timeout-error.js.map +1 -1
  15. package/dist/extensions/arr-ext.d.ts +2 -2
  16. package/dist/extensions/arr-ext.helpers.d.ts +8 -8
  17. package/dist/extensions/arr-ext.helpers.js +1 -1
  18. package/dist/extensions/arr-ext.helpers.js.map +1 -1
  19. package/dist/extensions/arr-ext.js +13 -13
  20. package/dist/extensions/arr-ext.js.map +1 -1
  21. package/dist/extensions/arr-ext.types.d.ts +57 -57
  22. package/dist/extensions/arr-ext.types.d.ts.map +1 -1
  23. package/dist/extensions/map-ext.d.ts +16 -16
  24. package/dist/extensions/set-ext.d.ts +11 -11
  25. package/dist/features/debounce-queue.d.ts +17 -15
  26. package/dist/features/debounce-queue.d.ts.map +1 -1
  27. package/dist/features/debounce-queue.js +6 -6
  28. package/dist/features/debounce-queue.js.map +1 -1
  29. package/dist/features/event-emitter.d.ts +20 -20
  30. package/dist/features/event-emitter.js +17 -17
  31. package/dist/features/serial-queue.d.ts +11 -11
  32. package/dist/features/serial-queue.js +5 -5
  33. package/dist/features/serial-queue.js.map +1 -1
  34. package/dist/globals.d.ts +4 -4
  35. package/dist/types/date-only.d.ts +64 -64
  36. package/dist/types/date-only.d.ts.map +1 -1
  37. package/dist/types/date-only.js +63 -63
  38. package/dist/types/date-time.d.ts +37 -37
  39. package/dist/types/date-time.d.ts.map +1 -1
  40. package/dist/types/date-time.js +54 -37
  41. package/dist/types/date-time.js.map +1 -1
  42. package/dist/types/lazy-gc-map.d.ts +26 -26
  43. package/dist/types/lazy-gc-map.d.ts.map +1 -1
  44. package/dist/types/lazy-gc-map.js +26 -26
  45. package/dist/types/lazy-gc-map.js.map +1 -1
  46. package/dist/types/time.d.ts +25 -25
  47. package/dist/types/time.d.ts.map +1 -1
  48. package/dist/types/time.js +25 -25
  49. package/dist/types/time.js.map +1 -1
  50. package/dist/types/uuid.d.ts +11 -11
  51. package/dist/types/uuid.d.ts.map +1 -1
  52. package/dist/types/uuid.js +12 -12
  53. package/dist/types/uuid.js.map +1 -1
  54. package/dist/utils/bytes.d.ts +17 -17
  55. package/dist/utils/bytes.js +4 -4
  56. package/dist/utils/bytes.js.map +1 -1
  57. package/dist/utils/date-format.d.ts +45 -45
  58. package/dist/utils/date-format.js +1 -1
  59. package/dist/utils/date-format.js.map +1 -1
  60. package/dist/utils/error.d.ts +4 -4
  61. package/dist/utils/json.d.ts +17 -17
  62. package/dist/utils/json.js +3 -3
  63. package/dist/utils/json.js.map +1 -1
  64. package/dist/utils/num.d.ts +23 -23
  65. package/dist/utils/obj.d.ts +111 -111
  66. package/dist/utils/obj.d.ts.map +1 -1
  67. package/dist/utils/obj.js +3 -3
  68. package/dist/utils/obj.js.map +1 -1
  69. package/dist/utils/path.d.ts +10 -10
  70. package/dist/utils/primitive.d.ts +5 -5
  71. package/dist/utils/primitive.js +1 -1
  72. package/dist/utils/primitive.js.map +1 -1
  73. package/dist/utils/str.d.ts +46 -46
  74. package/dist/utils/str.d.ts.map +1 -1
  75. package/dist/utils/str.js +5 -5
  76. package/dist/utils/str.js.map +1 -1
  77. package/dist/utils/template-strings.d.ts +26 -26
  78. package/dist/utils/transferable.d.ts +18 -18
  79. package/dist/utils/transferable.js +1 -1
  80. package/dist/utils/transferable.js.map +1 -1
  81. package/dist/utils/wait.d.ts +9 -9
  82. package/dist/utils/xml.d.ts +13 -13
  83. package/dist/utils/xml.d.ts.map +1 -1
  84. package/dist/utils/xml.js +1 -0
  85. package/dist/utils/xml.js.map +1 -1
  86. package/dist/zip/sd-zip.d.ts +22 -22
  87. package/dist/zip/sd-zip.js +16 -16
  88. package/package.json +4 -4
  89. package/src/common.types.ts +17 -17
  90. package/src/errors/argument-error.ts +15 -15
  91. package/src/errors/not-implemented-error.ts +9 -9
  92. package/src/errors/sd-error.ts +12 -12
  93. package/src/errors/timeout-error.ts +12 -12
  94. package/src/extensions/arr-ext.helpers.ts +10 -10
  95. package/src/extensions/arr-ext.ts +57 -57
  96. package/src/extensions/arr-ext.types.ts +59 -59
  97. package/src/extensions/map-ext.ts +16 -16
  98. package/src/extensions/set-ext.ts +11 -11
  99. package/src/features/debounce-queue.ts +21 -19
  100. package/src/features/event-emitter.ts +25 -25
  101. package/src/features/serial-queue.ts +13 -13
  102. package/src/globals.ts +4 -4
  103. package/src/index.ts +1 -1
  104. package/src/types/date-only.ts +83 -83
  105. package/src/types/date-time.ts +64 -44
  106. package/src/types/lazy-gc-map.ts +45 -45
  107. package/src/types/time.ts +34 -34
  108. package/src/types/uuid.ts +17 -17
  109. package/src/utils/bytes.ts +35 -35
  110. package/src/utils/date-format.ts +65 -65
  111. package/src/utils/error.ts +4 -4
  112. package/src/utils/json.ts +39 -39
  113. package/src/utils/num.ts +23 -23
  114. package/src/utils/obj.ts +138 -138
  115. package/src/utils/path.ts +10 -10
  116. package/src/utils/primitive.ts +6 -6
  117. package/src/utils/str.ts +260 -261
  118. package/src/utils/template-strings.ts +29 -29
  119. package/src/utils/transferable.ts +284 -284
  120. package/src/utils/wait.ts +10 -10
  121. package/src/utils/xml.ts +20 -19
  122. package/src/zip/sd-zip.ts +25 -25
  123. package/tests/errors/errors.spec.ts +80 -0
  124. package/tests/extensions/array-extension.spec.ts +796 -0
  125. package/tests/extensions/map-extension.spec.ts +147 -0
  126. package/tests/extensions/set-extension.spec.ts +74 -0
  127. package/tests/types/date-only.spec.ts +638 -0
  128. package/tests/types/date-time.spec.ts +391 -0
  129. package/tests/types/lazy-gc-map.spec.ts +692 -0
  130. package/tests/types/time.spec.ts +559 -0
  131. package/tests/types/uuid.spec.ts +74 -0
  132. package/tests/utils/bytes-utils.spec.ts +230 -0
  133. package/tests/utils/date-format.spec.ts +373 -0
  134. package/tests/utils/debounce-queue.spec.ts +272 -0
  135. package/tests/utils/json.spec.ts +486 -0
  136. package/tests/utils/number.spec.ts +157 -0
  137. package/tests/utils/object.spec.ts +829 -0
  138. package/tests/utils/path.spec.ts +78 -0
  139. package/tests/utils/primitive.spec.ts +43 -0
  140. package/tests/utils/sd-event-emitter.spec.ts +216 -0
  141. package/tests/utils/serial-queue.spec.ts +365 -0
  142. package/tests/utils/string.spec.ts +281 -0
  143. package/tests/utils/template-strings.spec.ts +57 -0
  144. package/tests/utils/transferable.spec.ts +703 -0
  145. package/tests/utils/wait.spec.ts +145 -0
  146. package/tests/utils/xml.spec.ts +146 -0
  147. package/tests/zip/sd-zip.spec.ts +238 -0
  148. package/docs/extensions.md +0 -503
  149. package/docs/features.md +0 -109
  150. package/docs/types.md +0 -486
  151. package/docs/utils.md +0 -780
@@ -1,32 +1,32 @@
1
1
  /**
2
- * Set 확장 메서드
2
+ * Set extension methods
3
3
  */
4
4
  declare global {
5
5
  interface Set<T> {
6
6
  /**
7
- * 여러 값을 번에 추가
7
+ * Add multiple values at once
8
8
  */
9
9
  adds(...values: T[]): this;
10
10
  /**
11
- * 값을 토글한다 (있으면 제거, 없으면 추가)
11
+ * Toggle value (remove if exists, add if not)
12
12
  *
13
- * @param value 토글할
14
- * @param addOrDel 강제로 추가("add") 또는 제거("del") 지정 (생략 자동 토글)
15
- * @returns this (메서드 체이닝 가능)
13
+ * @param value Value to toggle
14
+ * @param addOrDel Force add ("add") or remove ("del") (if omitted, toggle automatically)
15
+ * @returns this (method chaining available)
16
16
  *
17
17
  * @remarks
18
- * addOrDel 파라미터로 조건부 추가/제거를 간결하게 표현할 있다.
18
+ * addOrDel parameter allows concise expression of conditional add/remove.
19
19
  *
20
20
  * @example
21
21
  * ```typescript
22
22
  * const set = new Set<number>([1, 2, 3]);
23
23
  *
24
- * set.toggle(2); // 2 있으므로 제거 → {1, 3}
25
- * set.toggle(4); // 4 없으므로 추가 → {1, 3, 4}
24
+ * set.toggle(2); // 2 exists, so remove → {1, 3}
25
+ * set.toggle(4); // 4 doesn't exist, so add → {1, 3, 4}
26
26
  *
27
- * // 조건부 토글
27
+ * // Conditional toggle
28
28
  * const isAdmin = true;
29
- * set.toggle(5, isAdmin ? "add" : "del"); // 강제 추가
29
+ * set.toggle(5, isAdmin ? "add" : "del"); // Force add
30
30
  * ```
31
31
  */
32
32
  toggle(value: T, addOrDel?: "add" | "del"): this;
@@ -1,21 +1,23 @@
1
1
  /**
2
- * 비동기 함수 디바운스 큐
2
+ * Asynchronous debounce queue
3
3
  *
4
- * 짧은 시간 내에 여러 호출되면 마지막 요청만 실행하고 이전 요청은 무시합니다.
5
- * 입력 필드 자동완성, 연속적인 상태 변경 배치 처리 등에 유용합니다.
4
+ * When called multiple times within a short time, only the last request is executed
5
+ * and previous requests are ignored. Useful for input field auto-complete,
6
+ * batching consecutive state changes, and more.
6
7
  *
7
8
  * @remarks
8
- * 실행 중에 추가된 요청은 디바운스 지연 없이 현재 실행이 완료된 직후 처리됩니다.
9
- * 이는 실행 완료 전에 들어온 요청이 누락되지 않도록 하기 위한 의도적 설계입니다.
9
+ * Requests added during execution are processed immediately after the current execution
10
+ * completes without debounce delay. This is an intentional design to ensure that
11
+ * requests arriving before execution completes are not missed.
10
12
  *
11
13
  * @example
12
- * const queue = new DebounceQueue(300); // 300ms 딜레이
13
- * queue.run(() => console.log("1")); // 무시됨
14
- * queue.run(() => console.log("2")); // 무시됨
15
- * queue.run(() => console.log("3")); // 300ms 실행됨
14
+ * const queue = new DebounceQueue(300); // 300ms delay
15
+ * queue.run(() => console.log("1")); // ignored
16
+ * queue.run(() => console.log("2")); // ignored
17
+ * queue.run(() => console.log("3")); // executed after 300ms
16
18
  *
17
19
  * @example
18
- * // 에러 처리
20
+ * // Error handling
19
21
  * queue.on("error", (err) => console.error(err));
20
22
  */
21
23
  import { SdError } from "../errors/sd-error";
@@ -31,20 +33,20 @@ export declare class DebounceQueue extends EventEmitter<DebounceQueueEvents> {
31
33
  private _isDisposed;
32
34
  private _timer;
33
35
  /**
34
- * @param _delay 디바운스 지연 시간 (밀리초). 생략 즉시 실행 (다음 이벤트 루프)
36
+ * @param _delay Debounce delay time (milliseconds). If omitted, executes immediately (next event loop)
35
37
  */
36
38
  constructor(_delay?: number | undefined);
37
39
  /**
38
- * 대기 중인 작업과 타이머 정리
40
+ * Clean up pending tasks and timers
39
41
  */
40
42
  dispose(): void;
41
43
  /**
42
- * using 문 지원
44
+ * Supports using statement
43
45
  */
44
46
  [Symbol.dispose](): void;
45
47
  /**
46
- * 함수를 큐에 추가
47
- * 이전에 추가된 함수가 있으면 대체됨
48
+ * Add a function to the queue
49
+ * If there was a previously added function, it will be replaced
48
50
  */
49
51
  run(fn: () => void | Promise<void>): void;
50
52
  private _processLast;
@@ -1 +1 @@
1
- {"version":3,"file":"debounce-queue.d.ts","sourceRoot":"","sources":["../../src/features/debounce-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,UAAU,mBAAmB;IAC3B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,aAAc,SAAQ,YAAY,CAAC,mBAAmB,CAAC;IAWtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAVpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAEnE,OAAO,CAAC,UAAU,CAA2C;IAC7D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAA4C;IAE1D;;OAEG;gBAC0B,MAAM,CAAC,EAAE,MAAM,YAAA;IAI5C;;OAEG;IACM,OAAO,IAAI,IAAI;IAUxB;;OAEG;IACM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAIjC;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;YAiB3B,YAAY;CA+B3B"}
1
+ {"version":3,"file":"debounce-queue.d.ts","sourceRoot":"","sources":["../../src/features/debounce-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,UAAU,mBAAmB;IAC3B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,qBAAa,aAAc,SAAQ,YAAY,CAAC,mBAAmB,CAAC;IAWtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAVpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAEnE,OAAO,CAAC,UAAU,CAA2C;IAC7D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAA4C;IAE1D;;OAEG;gBAC0B,MAAM,CAAC,EAAE,MAAM,YAAA;IAI5C;;OAEG;IACM,OAAO,IAAI,IAAI;IAUxB;;OAEG;IACM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAIjC;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;YAiB3B,YAAY;CA+B3B"}
@@ -3,7 +3,7 @@ import { EventEmitter } from "./event-emitter.js";
3
3
  import consola from "consola";
4
4
  class DebounceQueue extends EventEmitter {
5
5
  /**
6
- * @param _delay 디바운스 지연 시간 (밀리초). 생략 즉시 실행 (다음 이벤트 루프)
6
+ * @param _delay Debounce delay time (milliseconds). If omitted, executes immediately (next event loop)
7
7
  */
8
8
  constructor(_delay) {
9
9
  super();
@@ -15,7 +15,7 @@ class DebounceQueue extends EventEmitter {
15
15
  _isDisposed = false;
16
16
  _timer;
17
17
  /**
18
- * 대기 중인 작업과 타이머 정리
18
+ * Clean up pending tasks and timers
19
19
  */
20
20
  dispose() {
21
21
  this._isDisposed = true;
@@ -27,14 +27,14 @@ class DebounceQueue extends EventEmitter {
27
27
  super.dispose();
28
28
  }
29
29
  /**
30
- * using 문 지원
30
+ * Supports using statement
31
31
  */
32
32
  [Symbol.dispose]() {
33
33
  this.dispose();
34
34
  }
35
35
  /**
36
- * 함수를 큐에 추가
37
- * 이전에 추가된 함수가 있으면 대체됨
36
+ * Add a function to the queue
37
+ * If there was a previously added function, it will be replaced
38
38
  */
39
39
  run(fn) {
40
40
  if (this._isDisposed) return;
@@ -61,7 +61,7 @@ class DebounceQueue extends EventEmitter {
61
61
  await currentFn();
62
62
  } catch (err) {
63
63
  const error = err instanceof Error ? err : new Error(String(err));
64
- const sdError = new SdError(error, "\uC791\uC5C5 \uC2E4\uD589 \uC911 \uC624\uB958 \uBC1C\uC0DD");
64
+ const sdError = new SdError(error, "Error occurred while executing task");
65
65
  if (this.listenerCount("error") > 0) {
66
66
  this.emit("error", sdError);
67
67
  } else {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/features/debounce-queue.ts"],
4
- "mappings": "AAoBA,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAC7B,OAAO,aAAa;AAMb,MAAM,sBAAsB,aAAkC;AAAA;AAAA;AAAA;AAAA,EAWnE,YAA6B,QAAiB;AAC5C,UAAM;AADqB;AAAA,EAE7B;AAAA,EAZA,OAAwB,UAAU,QAAQ,QAAQ,eAAe;AAAA,EAEzD;AAAA,EACA,aAAa;AAAA,EACb,cAAc;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAYC,UAAgB;AACvB,SAAK,cAAc;AACnB,QAAI,KAAK,QAAQ;AACf,mBAAa,KAAK,MAAM;AACxB,WAAK,SAAS;AAAA,IAChB;AACA,SAAK,aAAa;AAClB,UAAM,QAAQ;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,CAAU,OAAO,OAAO,IAAU;AAChC,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,IAAsC;AACxC,QAAI,KAAK,YAAa;AAEtB,SAAK,aAAa;AAElB,QAAI,KAAK,QAAQ;AACf,mBAAa,KAAK,MAAM;AACxB,WAAK,SAAS;AAAA,IAChB;AAEA,QAAI,CAAC,KAAK,YAAY;AACpB,WAAK,SAAS,WAAW,MAAM;AAC7B,aAAK,KAAK,aAAa;AAAA,MACzB,GAAG,KAAK,MAAM;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,MAAc,eAA8B;AAC1C,QAAI,KAAK,eAAe,KAAK,cAAc,CAAC,KAAK,WAAY;AAE7D,SAAK,aAAa;AAClB,SAAK,SAAS;AAEd,QAAI;AAGF,aAAO,KAAK,YAAY;AACtB,cAAM,YAAY,KAAK;AACvB,aAAK,aAAa;AAElB,YAAI;AACF,gBAAM,UAAU;AAAA,QAClB,SAAS,KAAK;AACZ,gBAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAChE,gBAAM,UAAU,IAAI,QAAQ,OAAO,4DAAe;AAGlD,cAAI,KAAK,cAAc,OAAO,IAAI,GAAG;AACnC,iBAAK,KAAK,SAAS,OAAO;AAAA,UAC5B,OAAO;AACL,0BAAc,QAAQ,MAAM,OAAO;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAAA,IACF,UAAE;AACA,WAAK,aAAa;AAAA,IACpB;AAAA,EACF;AACF;",
4
+ "mappings": "AAsBA,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAC7B,OAAO,aAAa;AAMb,MAAM,sBAAsB,aAAkC;AAAA;AAAA;AAAA;AAAA,EAWnE,YAA6B,QAAiB;AAC5C,UAAM;AADqB;AAAA,EAE7B;AAAA,EAZA,OAAwB,UAAU,QAAQ,QAAQ,eAAe;AAAA,EAEzD;AAAA,EACA,aAAa;AAAA,EACb,cAAc;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAYC,UAAgB;AACvB,SAAK,cAAc;AACnB,QAAI,KAAK,QAAQ;AACf,mBAAa,KAAK,MAAM;AACxB,WAAK,SAAS;AAAA,IAChB;AACA,SAAK,aAAa;AAClB,UAAM,QAAQ;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,CAAU,OAAO,OAAO,IAAU;AAChC,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,IAAsC;AACxC,QAAI,KAAK,YAAa;AAEtB,SAAK,aAAa;AAElB,QAAI,KAAK,QAAQ;AACf,mBAAa,KAAK,MAAM;AACxB,WAAK,SAAS;AAAA,IAChB;AAEA,QAAI,CAAC,KAAK,YAAY;AACpB,WAAK,SAAS,WAAW,MAAM;AAC7B,aAAK,KAAK,aAAa;AAAA,MACzB,GAAG,KAAK,MAAM;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,MAAc,eAA8B;AAC1C,QAAI,KAAK,eAAe,KAAK,cAAc,CAAC,KAAK,WAAY;AAE7D,SAAK,aAAa;AAClB,SAAK,SAAS;AAEd,QAAI;AAGF,aAAO,KAAK,YAAY;AACtB,cAAM,YAAY,KAAK;AACvB,aAAK,aAAa;AAElB,YAAI;AACF,gBAAM,UAAU;AAAA,QAClB,SAAS,KAAK;AACZ,gBAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAChE,gBAAM,UAAU,IAAI,QAAQ,OAAO,qCAAqC;AAGxE,cAAI,KAAK,cAAc,OAAO,IAAI,GAAG;AACnC,iBAAK,KAAK,SAAS,OAAO;AAAA,UAC5B,OAAO;AACL,0BAAc,QAAQ,MAAM,OAAO;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAAA,IACF,UAAE;AACA,WAAK,aAAa;AAAA,IACpB;AAAA,EACF;AACF;",
5
5
  "names": []
6
6
  }
@@ -1,10 +1,10 @@
1
1
  /**
2
- * EventTarget 래퍼 - EventEmitter 유사한 API 제공
2
+ * EventTarget wrapper - provides EventEmitter-like API
3
3
  *
4
- * 브라우저와 Node.js 모두에서 사용 가능한 타입 안전한 이벤트 에미터이다.
5
- * 내부적으로 EventTarget을 사용하여 구현되어 있다.
4
+ * A type-safe event emitter that can be used in both browsers and Node.js.
5
+ * Internally implemented using EventTarget.
6
6
  *
7
- * @typeParam TEvents 이벤트 타입 맵. 키는 이벤트 이름, 값은 이벤트 데이터 타입
7
+ * @typeParam TEvents Event type map. Keys are event names, values are event data types
8
8
  *
9
9
  * @example
10
10
  * interface MyEvents {
@@ -18,7 +18,7 @@
18
18
  * const emitter = new MyEmitter();
19
19
  * emitter.on("data", (data) => console.log(data)); // data: string
20
20
  * emitter.emit("data", "hello");
21
- * emitter.emit("done"); // void 타입은 인자 없이 호출
21
+ * emitter.emit("done"); // void type is called without arguments
22
22
  */
23
23
  export declare class EventEmitter<TEvents extends {
24
24
  [K in keyof TEvents]: unknown;
@@ -26,40 +26,40 @@ export declare class EventEmitter<TEvents extends {
26
26
  private readonly _target;
27
27
  private readonly _listenerMap;
28
28
  /**
29
- * 이벤트 리스너 등록
29
+ * Register an event listener
30
30
  *
31
- * @param type 이벤트 타입
32
- * @param listener 이벤트 핸들러
33
- * @note 같은 리스너를 같은 이벤트에 중복 등록하면 무시됨
31
+ * @param type Event type
32
+ * @param listener Event handler
33
+ * @note Duplicate registration of the same listener to the same event is ignored
34
34
  */
35
35
  on<K extends keyof TEvents & string>(type: K, listener: (data: TEvents[K]) => void): void;
36
36
  /**
37
- * 이벤트 리스너 제거
37
+ * Remove an event listener
38
38
  *
39
- * @param type 이벤트 타입
40
- * @param listener 제거할 이벤트 핸들러
39
+ * @param type Event type
40
+ * @param listener Event handler to remove
41
41
  */
42
42
  off<K extends keyof TEvents & string>(type: K, listener: (data: TEvents[K]) => void): void;
43
43
  /**
44
- * 이벤트 발생
44
+ * Emit an event
45
45
  *
46
- * @param type 이벤트 타입
47
- * @param args 이벤트 데이터 (void 타입이면 생략)
46
+ * @param type Event type
47
+ * @param args Event data (omitted if void type)
48
48
  */
49
49
  emit<K extends keyof TEvents & string>(type: K, ...args: TEvents[K] extends void ? [] : [data: TEvents[K]]): void;
50
50
  /**
51
- * 특정 이벤트의 리스너 반환
51
+ * Return the number of listeners for a specific event
52
52
  *
53
- * @param type 이벤트 타입
54
- * @returns 등록된 리스너
53
+ * @param type Event type
54
+ * @returns Number of registered listeners
55
55
  */
56
56
  listenerCount<K extends keyof TEvents & string>(type: K): number;
57
57
  /**
58
- * 모든 이벤트 리스너를 제거한다.
58
+ * Remove all event listeners
59
59
  */
60
60
  dispose(): void;
61
61
  /**
62
- * using 문 지원
62
+ * Supports using statement
63
63
  */
64
64
  [Symbol.dispose](): void;
65
65
  }
@@ -1,14 +1,14 @@
1
1
  class EventEmitter {
2
2
  _target = new EventTarget();
3
- // 이벤트 타입별로 리스너 관리 (같은 리스너를 다른 이벤트에 등록 가능)
4
- // 다형적 리스너 관리를 위해 Function 타입 사용
3
+ // Manage listener maps by event type (same listener can be registered to different events)
4
+ // Use Function type for polymorphic listener management
5
5
  _listenerMap = /* @__PURE__ */ new Map();
6
6
  /**
7
- * 이벤트 리스너 등록
7
+ * Register an event listener
8
8
  *
9
- * @param type 이벤트 타입
10
- * @param listener 이벤트 핸들러
11
- * @note 같은 리스너를 같은 이벤트에 중복 등록하면 무시됨
9
+ * @param type Event type
10
+ * @param listener Event handler
11
+ * @note Duplicate registration of the same listener to the same event is ignored
12
12
  */
13
13
  on(type, listener) {
14
14
  let typeMap = this._listenerMap.get(type);
@@ -22,10 +22,10 @@ class EventEmitter {
22
22
  this._target.addEventListener(type, wrappedListener);
23
23
  }
24
24
  /**
25
- * 이벤트 리스너 제거
25
+ * Remove an event listener
26
26
  *
27
- * @param type 이벤트 타입
28
- * @param listener 제거할 이벤트 핸들러
27
+ * @param type Event type
28
+ * @param listener Event handler to remove
29
29
  */
30
30
  off(type, listener) {
31
31
  const typeMap = this._listenerMap.get(type);
@@ -40,26 +40,26 @@ class EventEmitter {
40
40
  }
41
41
  }
42
42
  /**
43
- * 이벤트 발생
43
+ * Emit an event
44
44
  *
45
- * @param type 이벤트 타입
46
- * @param args 이벤트 데이터 (void 타입이면 생략)
45
+ * @param type Event type
46
+ * @param args Event data (omitted if void type)
47
47
  */
48
48
  emit(type, ...args) {
49
49
  this._target.dispatchEvent(new CustomEvent(type, { detail: args[0] }));
50
50
  }
51
51
  /**
52
- * 특정 이벤트의 리스너 반환
52
+ * Return the number of listeners for a specific event
53
53
  *
54
- * @param type 이벤트 타입
55
- * @returns 등록된 리스너
54
+ * @param type Event type
55
+ * @returns Number of registered listeners
56
56
  */
57
57
  listenerCount(type) {
58
58
  var _a;
59
59
  return ((_a = this._listenerMap.get(type)) == null ? void 0 : _a.size) ?? 0;
60
60
  }
61
61
  /**
62
- * 모든 이벤트 리스너를 제거한다.
62
+ * Remove all event listeners
63
63
  */
64
64
  dispose() {
65
65
  for (const [type, typeMap] of this._listenerMap) {
@@ -70,7 +70,7 @@ class EventEmitter {
70
70
  this._listenerMap.clear();
71
71
  }
72
72
  /**
73
- * using 문 지원
73
+ * Supports using statement
74
74
  */
75
75
  [Symbol.dispose]() {
76
76
  this.dispose();
@@ -1,18 +1,18 @@
1
1
  /**
2
- * 비동기 함수 직렬 큐
2
+ * Asynchronous serial queue
3
3
  *
4
- * 큐에 추가된 함수들을 순서대로 실행합니다.
5
- * 작업이 완료되어야 다음 작업이 시작됩니다.
6
- * 에러가 발생해도 후속 작업은 계속 실행됩니다.
4
+ * Functions added to the queue are executed sequentially.
5
+ * The next task starts only after one task completes.
6
+ * Subsequent tasks continue to execute even if an error occurs.
7
7
  *
8
8
  * @example
9
9
  * const queue = new SerialQueue();
10
10
  * queue.run(async () => { await fetch("/api/1"); });
11
- * queue.run(async () => { await fetch("/api/2"); }); // 1번 완료 실행
12
- * queue.run(async () => { await fetch("/api/3"); }); // 2번 완료 실행
11
+ * queue.run(async () => { await fetch("/api/2"); }); // executed after 1 completes
12
+ * queue.run(async () => { await fetch("/api/3"); }); // executed after 2 completes
13
13
  *
14
14
  * @example
15
- * // 에러 처리
15
+ * // Error handling
16
16
  * queue.on("error", (err) => console.error(err));
17
17
  */
18
18
  import { SdError } from "../errors/sd-error";
@@ -26,19 +26,19 @@ export declare class SerialQueue extends EventEmitter<SerialQueueEvents> {
26
26
  private readonly _queue;
27
27
  private _isQueueRunning;
28
28
  /**
29
- * @param _gap 작업 사이의 간격 (ms)
29
+ * @param _gap Gap between each task (ms)
30
30
  */
31
31
  constructor(_gap?: number);
32
32
  /**
33
- * 대기 중인 비우기 (현재 실행 중인 작업은 완료됨)
33
+ * Clear pending queue (currently executing task will complete)
34
34
  */
35
35
  dispose(): void;
36
36
  /**
37
- * using 문 지원
37
+ * Supports using statement
38
38
  */
39
39
  [Symbol.dispose](): void;
40
40
  /**
41
- * 함수를 큐에 추가하고 실행
41
+ * Add a function to the queue and execute it
42
42
  */
43
43
  run(fn: () => void | Promise<void>): void;
44
44
  private _process;
@@ -4,7 +4,7 @@ import consola from "consola";
4
4
  import { waitTime } from "../utils/wait.js";
5
5
  class SerialQueue extends EventEmitter {
6
6
  /**
7
- * @param _gap 작업 사이의 간격 (ms)
7
+ * @param _gap Gap between each task (ms)
8
8
  */
9
9
  constructor(_gap = 0) {
10
10
  super();
@@ -14,20 +14,20 @@ class SerialQueue extends EventEmitter {
14
14
  _queue = [];
15
15
  _isQueueRunning = false;
16
16
  /**
17
- * 대기 중인 비우기 (현재 실행 중인 작업은 완료됨)
17
+ * Clear pending queue (currently executing task will complete)
18
18
  */
19
19
  dispose() {
20
20
  this._queue.length = 0;
21
21
  super.dispose();
22
22
  }
23
23
  /**
24
- * using 문 지원
24
+ * Supports using statement
25
25
  */
26
26
  [Symbol.dispose]() {
27
27
  this.dispose();
28
28
  }
29
29
  /**
30
- * 함수를 큐에 추가하고 실행
30
+ * Add a function to the queue and execute it
31
31
  */
32
32
  run(fn) {
33
33
  this._queue.push(fn);
@@ -44,7 +44,7 @@ class SerialQueue extends EventEmitter {
44
44
  await fn();
45
45
  } catch (err) {
46
46
  const error = err instanceof Error ? err : new Error(String(err));
47
- const sdError = new SdError(error, "\uD050 \uC791\uC5C5 \uC2E4\uD589 \uC911 \uC624\uB958 \uBC1C\uC0DD");
47
+ const sdError = new SdError(error, "Error occurred while executing queue task");
48
48
  if (this.listenerCount("error") > 0) {
49
49
  this.emit("error", sdError);
50
50
  } else {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/features/serial-queue.ts"],
4
- "mappings": "AAiBA,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAC7B,OAAO,aAAa;AACpB,SAAS,gBAAgB;AAMlB,MAAM,oBAAoB,aAAgC;AAAA;AAAA;AAAA;AAAA,EAS/D,YAA6B,OAAe,GAAG;AAC7C,UAAM;AADqB;AAAA,EAE7B;AAAA,EAVA,OAAwB,UAAU,QAAQ,QAAQ,aAAa;AAAA,EAE9C,SAAyC,CAAC;AAAA,EACnD,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAYjB,UAAgB;AACvB,SAAK,OAAO,SAAS;AACrB,UAAM,QAAQ;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,CAAU,OAAO,OAAO,IAAU;AAChC,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAsC;AACxC,SAAK,OAAO,KAAK,EAAE;AACnB,SAAK,KAAK,SAAS;AAAA,EACrB;AAAA,EAEA,MAAc,WAA0B;AACtC,QAAI,KAAK,gBAAiB;AAC1B,SAAK,kBAAkB;AAEvB,QAAI;AACF,aAAO,KAAK,OAAO,SAAS,GAAG;AAC7B,cAAM,KAAK,KAAK,OAAO,MAAM;AAC7B,YAAI,CAAC,GAAI;AAET,YAAI;AACF,gBAAM,GAAG;AAAA,QACX,SAAS,KAAK;AACZ,gBAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAChE,gBAAM,UAAU,IAAI,QAAQ,OAAO,mEAAiB;AAGpD,cAAI,KAAK,cAAc,OAAO,IAAI,GAAG;AACnC,iBAAK,KAAK,SAAS,OAAO;AAAA,UAC5B,OAAO;AACL,wBAAY,QAAQ,MAAM,OAAO;AAAA,UACnC;AAAA,QACF;AAEA,YAAI,KAAK,OAAO,KAAK,KAAK,OAAO,SAAS,GAAG;AAC3C,gBAAM,SAAS,KAAK,IAAI;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,UAAE;AACA,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AACF;",
4
+ "mappings": "AAiBA,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAC7B,OAAO,aAAa;AACpB,SAAS,gBAAgB;AAMlB,MAAM,oBAAoB,aAAgC;AAAA;AAAA;AAAA;AAAA,EAS/D,YAA6B,OAAe,GAAG;AAC7C,UAAM;AADqB;AAAA,EAE7B;AAAA,EAVA,OAAwB,UAAU,QAAQ,QAAQ,aAAa;AAAA,EAE9C,SAAyC,CAAC;AAAA,EACnD,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAYjB,UAAgB;AACvB,SAAK,OAAO,SAAS;AACrB,UAAM,QAAQ;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,CAAU,OAAO,OAAO,IAAU;AAChC,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAsC;AACxC,SAAK,OAAO,KAAK,EAAE;AACnB,SAAK,KAAK,SAAS;AAAA,EACrB;AAAA,EAEA,MAAc,WAA0B;AACtC,QAAI,KAAK,gBAAiB;AAC1B,SAAK,kBAAkB;AAEvB,QAAI;AACF,aAAO,KAAK,OAAO,SAAS,GAAG;AAC7B,cAAM,KAAK,KAAK,OAAO,MAAM;AAC7B,YAAI,CAAC,GAAI;AAET,YAAI;AACF,gBAAM,GAAG;AAAA,QACX,SAAS,KAAK;AACZ,gBAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAChE,gBAAM,UAAU,IAAI,QAAQ,OAAO,2CAA2C;AAG9E,cAAI,KAAK,cAAc,OAAO,IAAI,GAAG;AACnC,iBAAK,KAAK,SAAS,OAAO;AAAA,UAC5B,OAAO;AACL,wBAAY,QAAQ,MAAM,OAAO;AAAA,UACnC;AAAA,QACF;AAEA,YAAI,KAAK,OAAO,KAAK,KAAK,OAAO,SAAS,GAAG;AAC3C,gBAAM,SAAS,KAAK,IAAI;AAAA,QAC1B;AAAA,MACF;AAAA,IACF,UAAE;AACA,WAAK,kBAAkB;AAAA,IACzB;AAAA,EACF;AACF;",
5
5
  "names": []
6
6
  }
package/dist/globals.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  /**
2
- * 개발 모드 여부
2
+ * Whether development mode is enabled
3
3
  *
4
- * 빌드 시점에 치환됨:
5
- * - 라이브러리 빌드: 치환하지 않음 (그대로 유지)
6
- * - client/server 빌드: `define: { '__DEV__': 'true/false' }`로 치환
4
+ * Substituted at build time:
5
+ * - Library build: Not substituted (kept as-is)
6
+ * - Client/Server build: Substituted with `define: { '__DEV__': 'true/false' }`
7
7
  */
8
8
  export {};
9
9
  declare global {