@simplysm/core-common 13.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/.cache/typecheck-browser.tsbuildinfo +1 -0
  2. package/.cache/typecheck-node.tsbuildinfo +1 -0
  3. package/.cache/typecheck-tests-browser.tsbuildinfo +1 -0
  4. package/.cache/typecheck-tests-node.tsbuildinfo +1 -0
  5. package/README.md +887 -0
  6. package/dist/common.types.d.ts +74 -0
  7. package/dist/common.types.d.ts.map +1 -0
  8. package/dist/common.types.js +5 -0
  9. package/dist/common.types.js.map +7 -0
  10. package/dist/env.d.ts +6 -0
  11. package/dist/env.d.ts.map +1 -0
  12. package/dist/env.js +9 -0
  13. package/dist/env.js.map +7 -0
  14. package/dist/errors/argument-error.d.ts +25 -0
  15. package/dist/errors/argument-error.d.ts.map +1 -0
  16. package/dist/errors/argument-error.js +18 -0
  17. package/dist/errors/argument-error.js.map +7 -0
  18. package/dist/errors/not-implemented-error.d.ts +29 -0
  19. package/dist/errors/not-implemented-error.d.ts.map +1 -0
  20. package/dist/errors/not-implemented-error.js +14 -0
  21. package/dist/errors/not-implemented-error.js.map +7 -0
  22. package/dist/errors/sd-error.d.ts +27 -0
  23. package/dist/errors/sd-error.d.ts.map +1 -0
  24. package/dist/errors/sd-error.js +23 -0
  25. package/dist/errors/sd-error.js.map +7 -0
  26. package/dist/errors/timeout-error.d.ts +31 -0
  27. package/dist/errors/timeout-error.d.ts.map +1 -0
  28. package/dist/errors/timeout-error.js +17 -0
  29. package/dist/errors/timeout-error.js.map +7 -0
  30. package/dist/extensions/arr-ext.d.ts +15 -0
  31. package/dist/extensions/arr-ext.d.ts.map +1 -0
  32. package/dist/extensions/arr-ext.helpers.d.ts +19 -0
  33. package/dist/extensions/arr-ext.helpers.d.ts.map +1 -0
  34. package/dist/extensions/arr-ext.helpers.js +35 -0
  35. package/dist/extensions/arr-ext.helpers.js.map +7 -0
  36. package/dist/extensions/arr-ext.js +546 -0
  37. package/dist/extensions/arr-ext.js.map +7 -0
  38. package/dist/extensions/arr-ext.types.d.ts +215 -0
  39. package/dist/extensions/arr-ext.types.d.ts.map +1 -0
  40. package/dist/extensions/arr-ext.types.js +1 -0
  41. package/dist/extensions/arr-ext.types.js.map +7 -0
  42. package/dist/extensions/map-ext.d.ts +57 -0
  43. package/dist/extensions/map-ext.d.ts.map +1 -0
  44. package/dist/extensions/map-ext.js +26 -0
  45. package/dist/extensions/map-ext.js.map +7 -0
  46. package/dist/extensions/set-ext.d.ts +36 -0
  47. package/dist/extensions/set-ext.d.ts.map +1 -0
  48. package/dist/extensions/set-ext.js +29 -0
  49. package/dist/extensions/set-ext.js.map +7 -0
  50. package/dist/features/debounce-queue.d.ts +53 -0
  51. package/dist/features/debounce-queue.d.ts.map +1 -0
  52. package/dist/features/debounce-queue.js +80 -0
  53. package/dist/features/debounce-queue.js.map +7 -0
  54. package/dist/features/event-emitter.d.ts +66 -0
  55. package/dist/features/event-emitter.d.ts.map +1 -0
  56. package/dist/features/event-emitter.js +82 -0
  57. package/dist/features/event-emitter.js.map +7 -0
  58. package/dist/features/serial-queue.d.ts +47 -0
  59. package/dist/features/serial-queue.d.ts.map +1 -0
  60. package/dist/features/serial-queue.js +66 -0
  61. package/dist/features/serial-queue.js.map +7 -0
  62. package/dist/globals.d.ts +12 -0
  63. package/dist/globals.d.ts.map +1 -0
  64. package/dist/globals.js +1 -0
  65. package/dist/globals.js.map +7 -0
  66. package/dist/index.d.ts +32 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +31 -0
  69. package/dist/index.js.map +7 -0
  70. package/dist/types/date-only.d.ts +152 -0
  71. package/dist/types/date-only.d.ts.map +1 -0
  72. package/dist/types/date-only.js +251 -0
  73. package/dist/types/date-only.js.map +7 -0
  74. package/dist/types/date-time.d.ts +96 -0
  75. package/dist/types/date-time.d.ts.map +1 -0
  76. package/dist/types/date-time.js +220 -0
  77. package/dist/types/date-time.js.map +7 -0
  78. package/dist/types/lazy-gc-map.d.ts +80 -0
  79. package/dist/types/lazy-gc-map.d.ts.map +1 -0
  80. package/dist/types/lazy-gc-map.js +179 -0
  81. package/dist/types/lazy-gc-map.js.map +7 -0
  82. package/dist/types/time.d.ts +68 -0
  83. package/dist/types/time.d.ts.map +1 -0
  84. package/dist/types/time.js +151 -0
  85. package/dist/types/time.js.map +7 -0
  86. package/dist/types/uuid.d.ts +35 -0
  87. package/dist/types/uuid.d.ts.map +1 -0
  88. package/dist/types/uuid.js +71 -0
  89. package/dist/types/uuid.js.map +7 -0
  90. package/dist/utils/bytes.d.ts +51 -0
  91. package/dist/utils/bytes.d.ts.map +1 -0
  92. package/dist/utils/bytes.js +89 -0
  93. package/dist/utils/bytes.js.map +7 -0
  94. package/dist/utils/date-format.d.ts +90 -0
  95. package/dist/utils/date-format.d.ts.map +1 -0
  96. package/dist/utils/date-format.js +106 -0
  97. package/dist/utils/date-format.js.map +7 -0
  98. package/dist/utils/json.d.ts +34 -0
  99. package/dist/utils/json.d.ts.map +1 -0
  100. package/dist/utils/json.js +152 -0
  101. package/dist/utils/json.js.map +7 -0
  102. package/dist/utils/num.d.ts +60 -0
  103. package/dist/utils/num.d.ts.map +1 -0
  104. package/dist/utils/num.js +39 -0
  105. package/dist/utils/num.js.map +7 -0
  106. package/dist/utils/obj.d.ts +258 -0
  107. package/dist/utils/obj.d.ts.map +1 -0
  108. package/dist/utils/obj.js +538 -0
  109. package/dist/utils/obj.js.map +7 -0
  110. package/dist/utils/path.d.ts +23 -0
  111. package/dist/utils/path.d.ts.map +1 -0
  112. package/dist/utils/path.js +21 -0
  113. package/dist/utils/path.js.map +7 -0
  114. package/dist/utils/primitive.d.ts +18 -0
  115. package/dist/utils/primitive.d.ts.map +1 -0
  116. package/dist/utils/primitive.js +20 -0
  117. package/dist/utils/primitive.js.map +7 -0
  118. package/dist/utils/str.d.ts +103 -0
  119. package/dist/utils/str.d.ts.map +1 -0
  120. package/dist/utils/str.js +128 -0
  121. package/dist/utils/str.js.map +7 -0
  122. package/dist/utils/template-strings.d.ts +84 -0
  123. package/dist/utils/template-strings.d.ts.map +1 -0
  124. package/dist/utils/template-strings.js +49 -0
  125. package/dist/utils/template-strings.js.map +7 -0
  126. package/dist/utils/transferable.d.ts +47 -0
  127. package/dist/utils/transferable.d.ts.map +1 -0
  128. package/dist/utils/transferable.js +153 -0
  129. package/dist/utils/transferable.js.map +7 -0
  130. package/dist/utils/wait.d.ts +19 -0
  131. package/dist/utils/wait.d.ts.map +1 -0
  132. package/dist/utils/wait.js +19 -0
  133. package/dist/utils/wait.js.map +7 -0
  134. package/dist/utils/xml.d.ts +36 -0
  135. package/dist/utils/xml.d.ts.map +1 -0
  136. package/dist/utils/xml.js +51 -0
  137. package/dist/utils/xml.js.map +7 -0
  138. package/dist/zip/sd-zip.d.ts +80 -0
  139. package/dist/zip/sd-zip.d.ts.map +1 -0
  140. package/dist/zip/sd-zip.js +153 -0
  141. package/dist/zip/sd-zip.js.map +7 -0
  142. package/package.json +31 -0
  143. package/src/common.types.ts +91 -0
  144. package/src/env.ts +11 -0
  145. package/src/errors/argument-error.ts +40 -0
  146. package/src/errors/not-implemented-error.ts +32 -0
  147. package/src/errors/sd-error.ts +53 -0
  148. package/src/errors/timeout-error.ts +36 -0
  149. package/src/extensions/arr-ext.helpers.ts +53 -0
  150. package/src/extensions/arr-ext.ts +777 -0
  151. package/src/extensions/arr-ext.types.ts +258 -0
  152. package/src/extensions/map-ext.ts +86 -0
  153. package/src/extensions/set-ext.ts +68 -0
  154. package/src/features/debounce-queue.ts +116 -0
  155. package/src/features/event-emitter.ts +112 -0
  156. package/src/features/serial-queue.ts +94 -0
  157. package/src/globals.ts +12 -0
  158. package/src/index.ts +55 -0
  159. package/src/types/date-only.ts +329 -0
  160. package/src/types/date-time.ts +294 -0
  161. package/src/types/lazy-gc-map.ts +244 -0
  162. package/src/types/time.ts +210 -0
  163. package/src/types/uuid.ts +113 -0
  164. package/src/utils/bytes.ts +160 -0
  165. package/src/utils/date-format.ts +239 -0
  166. package/src/utils/json.ts +230 -0
  167. package/src/utils/num.ts +97 -0
  168. package/src/utils/obj.ts +956 -0
  169. package/src/utils/path.ts +40 -0
  170. package/src/utils/primitive.ts +33 -0
  171. package/src/utils/str.ts +252 -0
  172. package/src/utils/template-strings.ts +132 -0
  173. package/src/utils/transferable.ts +269 -0
  174. package/src/utils/wait.ts +40 -0
  175. package/src/utils/xml.ts +105 -0
  176. package/src/zip/sd-zip.ts +218 -0
  177. package/tests/errors/errors.spec.ts +196 -0
  178. package/tests/extensions/array-extension.spec.ts +790 -0
  179. package/tests/extensions/map-extension.spec.ts +147 -0
  180. package/tests/extensions/set-extension.spec.ts +74 -0
  181. package/tests/types/date-only.spec.ts +636 -0
  182. package/tests/types/date-time.spec.ts +391 -0
  183. package/tests/types/lazy-gc-map.spec.ts +692 -0
  184. package/tests/types/time.spec.ts +559 -0
  185. package/tests/types/types.spec.ts +55 -0
  186. package/tests/types/uuid.spec.ts +91 -0
  187. package/tests/utils/bytes-utils.spec.ts +230 -0
  188. package/tests/utils/date-format.spec.ts +371 -0
  189. package/tests/utils/debounce-queue.spec.ts +272 -0
  190. package/tests/utils/json.spec.ts +475 -0
  191. package/tests/utils/number.spec.ts +184 -0
  192. package/tests/utils/object.spec.ts +827 -0
  193. package/tests/utils/path.spec.ts +78 -0
  194. package/tests/utils/primitive.spec.ts +55 -0
  195. package/tests/utils/sd-event-emitter.spec.ts +216 -0
  196. package/tests/utils/serial-queue.spec.ts +365 -0
  197. package/tests/utils/string.spec.ts +294 -0
  198. package/tests/utils/template-strings.spec.ts +96 -0
  199. package/tests/utils/transferable.spec.ts +698 -0
  200. package/tests/utils/wait.spec.ts +145 -0
  201. package/tests/utils/xml.spec.ts +146 -0
  202. package/tests/zip/sd-zip.spec.ts +234 -0
@@ -0,0 +1,74 @@
1
+ import { DateTime } from "./types/date-time";
2
+ import { DateOnly } from "./types/date-only";
3
+ import { Time } from "./types/time";
4
+ import { Uuid } from "./types/uuid";
5
+ /**
6
+ * Buffer 대신 사용하는 바이너리 타입
7
+ */
8
+ export type Bytes = Uint8Array;
9
+ /**
10
+ * Primitive 타입 매핑
11
+ * orm-common과 공유
12
+ */
13
+ export type PrimitiveTypeMap = {
14
+ string: string;
15
+ number: number;
16
+ boolean: boolean;
17
+ DateTime: DateTime;
18
+ DateOnly: DateOnly;
19
+ Time: Time;
20
+ Uuid: Uuid;
21
+ Bytes: Bytes;
22
+ };
23
+ /**
24
+ * Primitive 타입 문자열 키
25
+ */
26
+ export type PrimitiveTypeStr = keyof PrimitiveTypeMap;
27
+ /**
28
+ * Primitive 타입 유니온
29
+ */
30
+ export type PrimitiveType = PrimitiveTypeMap[PrimitiveTypeStr] | undefined;
31
+ /**
32
+ * 깊은 Partial 타입
33
+ *
34
+ * 객체의 모든 속성을 재귀적으로 선택적(optional)으로 만듭니다.
35
+ * Primitive 타입(string, number, boolean 등)은 그대로 유지하고,
36
+ * 객체/배열 타입만 재귀적으로 Partial을 적용합니다.
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * interface User {
41
+ * name: string;
42
+ * profile: {
43
+ * age: number;
44
+ * address: { city: string };
45
+ * };
46
+ * }
47
+ *
48
+ * // 모든 깊이의 속성이 선택적이 됨
49
+ * const partial: DeepPartial<User> = {
50
+ * profile: { address: {} }
51
+ * };
52
+ * ```
53
+ */
54
+ export type DeepPartial<T> = Partial<{
55
+ [K in keyof T]: T[K] extends PrimitiveType ? T[K] : DeepPartial<T[K]>;
56
+ }>;
57
+ /**
58
+ * 생성자 타입
59
+ *
60
+ * 클래스 생성자를 타입으로 표현할 때 사용합니다.
61
+ * 주로 의존성 주입, 팩토리 패턴, instanceof 체크 등에서 활용됩니다.
62
+ *
63
+ * @example
64
+ * function create<T>(ctor: Type<T>): T {
65
+ * return new ctor();
66
+ * }
67
+ *
68
+ * class MyClass { name = "test"; }
69
+ * const instance = create(MyClass); // MyClass 인스턴스
70
+ */
71
+ export interface Type<T> extends Function {
72
+ new (...args: unknown[]): T;
73
+ }
74
+ //# sourceMappingURL=common.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.types.d.ts","sourceRoot":"","sources":["../src/common.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIpC;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,UAAU,CAAC;AAM/B;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,gBAAgB,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;AAM3E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC;KAClC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACtE,CAAC,CAAC;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,CAAE,SAAQ,QAAQ;IACvC,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;CAC7B"}
@@ -0,0 +1,5 @@
1
+ import { DateTime } from "./types/date-time";
2
+ import { DateOnly } from "./types/date-only";
3
+ import { Time } from "./types/time";
4
+ import { Uuid } from "./types/uuid";
5
+ //# sourceMappingURL=common.types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/common.types.ts"],
4
+ "sourcesContent": ["import { DateTime } from \"./types/date-time\";\nimport { DateOnly } from \"./types/date-only\";\nimport { Time } from \"./types/time\";\nimport { Uuid } from \"./types/uuid\";\n\n//#region Bytes \uD0C0\uC785\n\n/**\n * Buffer \uB300\uC2E0 \uC0AC\uC6A9\uD558\uB294 \uBC14\uC774\uB108\uB9AC \uD0C0\uC785\n */\nexport type Bytes = Uint8Array;\n\n//#endregion\n\n//#region Primitive \uD0C0\uC785\n\n/**\n * Primitive \uD0C0\uC785 \uB9E4\uD551\n * orm-common\uACFC \uACF5\uC720\n */\nexport type PrimitiveTypeMap = {\n string: string;\n number: number;\n boolean: boolean;\n DateTime: DateTime;\n DateOnly: DateOnly;\n Time: Time;\n Uuid: Uuid;\n Bytes: Bytes;\n};\n\n/**\n * Primitive \uD0C0\uC785 \uBB38\uC790\uC5F4 \uD0A4\n */\nexport type PrimitiveTypeStr = keyof PrimitiveTypeMap;\n\n/**\n * Primitive \uD0C0\uC785 \uC720\uB2C8\uC628\n */\nexport type PrimitiveType = PrimitiveTypeMap[PrimitiveTypeStr] | undefined;\n\n//#endregion\n\n//#region \uC720\uD2F8\uB9AC\uD2F0 \uD0C0\uC785\n\n/**\n * \uAE4A\uC740 Partial \uD0C0\uC785\n *\n * \uAC1D\uCCB4\uC758 \uBAA8\uB4E0 \uC18D\uC131\uC744 \uC7AC\uADC0\uC801\uC73C\uB85C \uC120\uD0DD\uC801(optional)\uC73C\uB85C \uB9CC\uB4ED\uB2C8\uB2E4.\n * Primitive \uD0C0\uC785(string, number, boolean \uB4F1)\uC740 \uADF8\uB300\uB85C \uC720\uC9C0\uD558\uACE0,\n * \uAC1D\uCCB4/\uBC30\uC5F4 \uD0C0\uC785\uB9CC \uC7AC\uADC0\uC801\uC73C\uB85C Partial\uC744 \uC801\uC6A9\uD569\uB2C8\uB2E4.\n *\n * @example\n * ```typescript\n * interface User {\n * name: string;\n * profile: {\n * age: number;\n * address: { city: string };\n * };\n * }\n *\n * // \uBAA8\uB4E0 \uAE4A\uC774\uC758 \uC18D\uC131\uC774 \uC120\uD0DD\uC801\uC774 \uB428\n * const partial: DeepPartial<User> = {\n * profile: { address: {} }\n * };\n * ```\n */\nexport type DeepPartial<T> = Partial<{\n [K in keyof T]: T[K] extends PrimitiveType ? T[K] : DeepPartial<T[K]>;\n}>;\n\n/**\n * \uC0DD\uC131\uC790 \uD0C0\uC785\n *\n * \uD074\uB798\uC2A4 \uC0DD\uC131\uC790\uB97C \uD0C0\uC785\uC73C\uB85C \uD45C\uD604\uD560 \uB54C \uC0AC\uC6A9\uD569\uB2C8\uB2E4.\n * \uC8FC\uB85C \uC758\uC874\uC131 \uC8FC\uC785, \uD329\uD1A0\uB9AC \uD328\uD134, instanceof \uCCB4\uD06C \uB4F1\uC5D0\uC11C \uD65C\uC6A9\uB429\uB2C8\uB2E4.\n *\n * @example\n * function create<T>(ctor: Type<T>): T {\n * return new ctor();\n * }\n *\n * class MyClass { name = \"test\"; }\n * const instance = create(MyClass); // MyClass \uC778\uC2A4\uD134\uC2A4\n */\nexport interface Type<T> extends Function {\n new (...args: unknown[]): T;\n}\n\n//#endregion\n"],
5
+ "mappings": "AAAA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,YAAY;AACrB,SAAS,YAAY;",
6
+ "names": []
7
+ }
package/dist/env.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare const env: {
2
+ DEV: boolean;
3
+ VER?: string;
4
+ [key: string]: unknown;
5
+ };
6
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG,EAAE;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAKxB,CAAC"}
package/dist/env.js ADDED
@@ -0,0 +1,9 @@
1
+ const env = {
2
+ DEV: JSON.parse(process.env.DEV != null && process.env.DEV !== "" ? process.env.DEV : "false"),
3
+ VER: process.env.VER,
4
+ ...process.env
5
+ };
6
+ export {
7
+ env
8
+ };
9
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/env.ts"],
4
+ "sourcesContent": ["declare const process: { env: { DEV?: string; VER?: string; [key: string]: string | undefined } };\n\nexport const env: {\n DEV: boolean;\n VER?: string;\n [key: string]: unknown;\n} = {\n DEV: JSON.parse(process.env.DEV != null && process.env.DEV !== \"\" ? process.env.DEV : \"false\"),\n VER: process.env.VER,\n ...process.env,\n};\n"],
5
+ "mappings": "AAEO,MAAM,MAIT;AAAA,EACF,KAAK,KAAK,MAAM,QAAQ,IAAI,OAAO,QAAQ,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,MAAM,OAAO;AAAA,EAC7F,KAAK,QAAQ,IAAI;AAAA,EACjB,GAAG,QAAQ;AACb;",
6
+ "names": []
7
+ }
@@ -0,0 +1,25 @@
1
+ import { SdError } from "./sd-error";
2
+ /**
3
+ * 인수 오류
4
+ *
5
+ * 잘못된 인수를 받았을 때 발생시키는 에러이다.
6
+ * 인수 객체를 YAML 형식으로 메시지에 포함하여 디버깅을 용이하게 한다.
7
+ *
8
+ * @example
9
+ * // 인수 객체만 전달
10
+ * throw new ArgumentError({ userId: 123, name: null });
11
+ * // 결과 메시지: "인수가 잘못되었습니다.\n\nuserId: 123\nname: null"
12
+ *
13
+ * @example
14
+ * // 커스텀 메시지와 인수 객체 전달
15
+ * throw new ArgumentError("유효하지 않은 사용자", { userId: 123 });
16
+ * // 결과 메시지: "유효하지 않은 사용자\n\nuserId: 123"
17
+ */
18
+ export declare class ArgumentError extends SdError {
19
+ /** 기본 메시지("인수가 잘못되었습니다.")와 함께 인수 객체를 YAML 형식으로 출력 */
20
+ constructor(argObj: Record<string, unknown>);
21
+ /** 커스텀 메시지와 함께 인수 객체를 YAML 형식으로 출력 */
22
+ constructor(message: string, argObj: Record<string, unknown>);
23
+ constructor(arg1: Record<string, unknown> | string, arg2?: Record<string, unknown>);
24
+ }
25
+ //# sourceMappingURL=argument-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"argument-error.d.ts","sourceRoot":"","sources":["../../src/errors/argument-error.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAc,SAAQ,OAAO;IACxC,qDAAqD;gBACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3C,sCAAsC;gBAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAChD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAYnF"}
@@ -0,0 +1,18 @@
1
+ import YAML from "yaml";
2
+ import { SdError } from "./sd-error";
3
+ class ArgumentError extends SdError {
4
+ constructor(arg1, arg2) {
5
+ const message = typeof arg1 === "string" ? arg1 : void 0;
6
+ const argObj = typeof arg1 === "string" ? arg2 : arg1;
7
+ if (argObj != null) {
8
+ super((message ?? "\uC778\uC218\uAC00 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.") + "\n\n" + YAML.stringify(argObj));
9
+ } else {
10
+ super(message ?? "\uC778\uC218\uAC00 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.");
11
+ }
12
+ this.name = "ArgumentError";
13
+ }
14
+ }
15
+ export {
16
+ ArgumentError
17
+ };
18
+ //# sourceMappingURL=argument-error.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/errors/argument-error.ts"],
4
+ "sourcesContent": ["// yaml \uB77C\uC774\uBE0C\uB7EC\uB9AC\uB97C \uC0AC\uC6A9\uD558\uB294 \uC774\uC720:\n// \uC911\uCCA9\uB41C \uAC1D\uCCB4 \uAD6C\uC870\uB97C \uAC00\uB3C5\uC131 \uC88B\uAC8C \uD45C\uD604\uD558\uAE30 \uC704\uD568.\n// JSON.stringify\uBCF4\uB2E4 \uD2B8\uB9AC \uAD6C\uC870\uAC00 \uB354 \uBA85\uD655\uD558\uAC8C \uBCF4\uC784.\nimport YAML from \"yaml\";\nimport { SdError } from \"./sd-error\";\n\n/**\n * \uC778\uC218 \uC624\uB958\n *\n * \uC798\uBABB\uB41C \uC778\uC218\uB97C \uBC1B\uC558\uC744 \uB54C \uBC1C\uC0DD\uC2DC\uD0A4\uB294 \uC5D0\uB7EC\uC774\uB2E4.\n * \uC778\uC218 \uAC1D\uCCB4\uB97C YAML \uD615\uC2DD\uC73C\uB85C \uBA54\uC2DC\uC9C0\uC5D0 \uD3EC\uD568\uD558\uC5EC \uB514\uBC84\uAE45\uC744 \uC6A9\uC774\uD558\uAC8C \uD55C\uB2E4.\n *\n * @example\n * // \uC778\uC218 \uAC1D\uCCB4\uB9CC \uC804\uB2EC\n * throw new ArgumentError({ userId: 123, name: null });\n * // \uACB0\uACFC \uBA54\uC2DC\uC9C0: \"\uC778\uC218\uAC00 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\\n\\nuserId: 123\\nname: null\"\n *\n * @example\n * // \uCEE4\uC2A4\uD140 \uBA54\uC2DC\uC9C0\uC640 \uC778\uC218 \uAC1D\uCCB4 \uC804\uB2EC\n * throw new ArgumentError(\"\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uC0AC\uC6A9\uC790\", { userId: 123 });\n * // \uACB0\uACFC \uBA54\uC2DC\uC9C0: \"\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uC0AC\uC6A9\uC790\\n\\nuserId: 123\"\n */\nexport class ArgumentError extends SdError {\n /** \uAE30\uBCF8 \uBA54\uC2DC\uC9C0(\"\uC778\uC218\uAC00 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\")\uC640 \uD568\uAED8 \uC778\uC218 \uAC1D\uCCB4\uB97C YAML \uD615\uC2DD\uC73C\uB85C \uCD9C\uB825 */\n constructor(argObj: Record<string, unknown>);\n /** \uCEE4\uC2A4\uD140 \uBA54\uC2DC\uC9C0\uC640 \uD568\uAED8 \uC778\uC218 \uAC1D\uCCB4\uB97C YAML \uD615\uC2DD\uC73C\uB85C \uCD9C\uB825 */\n constructor(message: string, argObj: Record<string, unknown>);\n constructor(arg1: Record<string, unknown> | string, arg2?: Record<string, unknown>);\n constructor(arg1: Record<string, unknown> | string, arg2?: Record<string, unknown>) {\n const message = typeof arg1 === \"string\" ? arg1 : undefined;\n const argObj = typeof arg1 === \"string\" ? arg2 : arg1;\n\n if (argObj != null) {\n super((message ?? \"\uC778\uC218\uAC00 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\") + \"\\n\\n\" + YAML.stringify(argObj));\n } else {\n super(message ?? \"\uC778\uC218\uAC00 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\");\n }\n this.name = \"ArgumentError\";\n }\n}\n"],
5
+ "mappings": "AAGA,OAAO,UAAU;AACjB,SAAS,eAAe;AAkBjB,MAAM,sBAAsB,QAAQ;AAAA,EAMzC,YAAY,MAAwC,MAAgC;AAClF,UAAM,UAAU,OAAO,SAAS,WAAW,OAAO;AAClD,UAAM,SAAS,OAAO,SAAS,WAAW,OAAO;AAEjD,QAAI,UAAU,MAAM;AAClB,aAAO,WAAW,oEAAkB,SAAS,KAAK,UAAU,MAAM,CAAC;AAAA,IACrE,OAAO;AACL,YAAM,WAAW,gEAAc;AAAA,IACjC;AACA,SAAK,OAAO;AAAA,EACd;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,29 @@
1
+ import { SdError } from "./sd-error";
2
+ /**
3
+ * 미구현 오류
4
+ *
5
+ * 아직 구현되지 않은 기능을 호출했을 때 발생시키는 에러이다.
6
+ * 추상 메서드 스텁, 향후 구현 예정인 분기 등에 사용한다.
7
+ *
8
+ * @example
9
+ * // 추상 메서드 구현 전
10
+ * class BaseService {
11
+ * process(): void {
12
+ * throw new NotImplementedError("서브클래스에서 구현 필요");
13
+ * }
14
+ * }
15
+ *
16
+ * @example
17
+ * // 향후 구현 예정 분기
18
+ * switch (type) {
19
+ * case "A": return handleA();
20
+ * case "B": throw new NotImplementedError(`타입 ${type} 처리`);
21
+ * }
22
+ */
23
+ export declare class NotImplementedError extends SdError {
24
+ /**
25
+ * @param message 추가 설명 메시지
26
+ */
27
+ constructor(message?: string);
28
+ }
29
+ //# sourceMappingURL=not-implemented-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"not-implemented-error.d.ts","sourceRoot":"","sources":["../../src/errors/not-implemented-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,mBAAoB,SAAQ,OAAO;IAC9C;;OAEG;gBACS,OAAO,CAAC,EAAE,MAAM;CAI7B"}
@@ -0,0 +1,14 @@
1
+ import { SdError } from "./sd-error";
2
+ class NotImplementedError extends SdError {
3
+ /**
4
+ * @param message 추가 설명 메시지
5
+ */
6
+ constructor(message) {
7
+ super("\uAD6C\uD604\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4" + (message != null ? ": " + message : ""));
8
+ this.name = "NotImplementedError";
9
+ }
10
+ }
11
+ export {
12
+ NotImplementedError
13
+ };
14
+ //# sourceMappingURL=not-implemented-error.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/errors/not-implemented-error.ts"],
4
+ "sourcesContent": ["import { SdError } from \"./sd-error\";\n\n/**\n * \uBBF8\uAD6C\uD604 \uC624\uB958\n *\n * \uC544\uC9C1 \uAD6C\uD604\uB418\uC9C0 \uC54A\uC740 \uAE30\uB2A5\uC744 \uD638\uCD9C\uD588\uC744 \uB54C \uBC1C\uC0DD\uC2DC\uD0A4\uB294 \uC5D0\uB7EC\uC774\uB2E4.\n * \uCD94\uC0C1 \uBA54\uC11C\uB4DC \uC2A4\uD141, \uD5A5\uD6C4 \uAD6C\uD604 \uC608\uC815\uC778 \uBD84\uAE30 \uB4F1\uC5D0 \uC0AC\uC6A9\uD55C\uB2E4.\n *\n * @example\n * // \uCD94\uC0C1 \uBA54\uC11C\uB4DC \uAD6C\uD604 \uC804\n * class BaseService {\n * process(): void {\n * throw new NotImplementedError(\"\uC11C\uBE0C\uD074\uB798\uC2A4\uC5D0\uC11C \uAD6C\uD604 \uD544\uC694\");\n * }\n * }\n *\n * @example\n * // \uD5A5\uD6C4 \uAD6C\uD604 \uC608\uC815 \uBD84\uAE30\n * switch (type) {\n * case \"A\": return handleA();\n * case \"B\": throw new NotImplementedError(`\uD0C0\uC785 ${type} \uCC98\uB9AC`);\n * }\n */\nexport class NotImplementedError extends SdError {\n /**\n * @param message \uCD94\uAC00 \uC124\uBA85 \uBA54\uC2DC\uC9C0\n */\n constructor(message?: string) {\n super(\"\uAD6C\uD604\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4\" + (message != null ? \": \" + message : \"\"));\n this.name = \"NotImplementedError\";\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,eAAe;AAuBjB,MAAM,4BAA4B,QAAQ;AAAA;AAAA;AAAA;AAAA,EAI/C,YAAY,SAAkB;AAC5B,UAAM,oEAAkB,WAAW,OAAO,OAAO,UAAU,GAAG;AAC9D,SAAK,OAAO;AAAA,EACd;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * 오류의 Tree 구조 구성이 가능한 오류 클래스
3
+ * ES2024 cause 속성 활용
4
+ *
5
+ * @example
6
+ * // 원인 에러를 감싸서 생성
7
+ * try {
8
+ * await fetch(url);
9
+ * } catch (err) {
10
+ * throw new SdError(err, "API 호출 실패", "사용자 로드 실패");
11
+ * }
12
+ * // 결과 메시지: "사용자 로드 실패 => API 호출 실패 => 원본 에러 메시지"
13
+ *
14
+ * @example
15
+ * // 메시지만으로 생성
16
+ * throw new SdError("잘못된 상태", "처리 불가");
17
+ * // 결과 메시지: "처리 불가 => 잘못된 상태"
18
+ */
19
+ export declare class SdError extends Error {
20
+ cause?: Error;
21
+ /** 원인 에러를 감싸서 생성. 메시지는 역순으로 연결됨 (상위 메시지 => 하위 메시지 => 원인 메시지) */
22
+ constructor(cause: Error, ...messages: string[]);
23
+ /** 메시지만으로 생성. 메시지는 역순으로 연결됨 (상위 메시지 => 하위 메시지) */
24
+ constructor(...messages: string[]);
25
+ constructor(arg1?: unknown, ...messages: string[]);
26
+ }
27
+ //# sourceMappingURL=sd-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sd-error.d.ts","sourceRoot":"","sources":["../../src/errors/sd-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,OAAQ,SAAQ,KAAK;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;IAEvB,gEAAgE;gBACpD,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE;IAC/C,kDAAkD;gBACtC,GAAG,QAAQ,EAAE,MAAM,EAAE;gBACrB,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,MAAM,EAAE;CA2BlD"}
@@ -0,0 +1,23 @@
1
+ class SdError extends Error {
2
+ cause;
3
+ constructor(arg1, ...messages) {
4
+ const arg1Message = arg1 instanceof Error ? arg1.message : typeof arg1 === "string" ? arg1 : arg1 != null ? String(arg1) : void 0;
5
+ const fullMessage = [arg1Message, ...messages].filter((m) => m != null).reverse().join(" => ");
6
+ const cause = arg1 instanceof Error ? arg1 : void 0;
7
+ super(fullMessage, { cause });
8
+ Object.setPrototypeOf(this, new.target.prototype);
9
+ this.name = "SdError";
10
+ if ("captureStackTrace" in Error) {
11
+ Error.captureStackTrace(this, new.target);
12
+ }
13
+ if ((cause == null ? void 0 : cause.stack) != null) {
14
+ this.stack += `
15
+ ---- cause stack ----
16
+ ${cause.stack}`;
17
+ }
18
+ }
19
+ }
20
+ export {
21
+ SdError
22
+ };
23
+ //# sourceMappingURL=sd-error.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/errors/sd-error.ts"],
4
+ "sourcesContent": ["/**\n * \uC624\uB958\uC758 Tree \uAD6C\uC870 \uAD6C\uC131\uC774 \uAC00\uB2A5\uD55C \uC624\uB958 \uD074\uB798\uC2A4\n * ES2024 cause \uC18D\uC131 \uD65C\uC6A9\n *\n * @example\n * // \uC6D0\uC778 \uC5D0\uB7EC\uB97C \uAC10\uC2F8\uC11C \uC0DD\uC131\n * try {\n * await fetch(url);\n * } catch (err) {\n * throw new SdError(err, \"API \uD638\uCD9C \uC2E4\uD328\", \"\uC0AC\uC6A9\uC790 \uB85C\uB4DC \uC2E4\uD328\");\n * }\n * // \uACB0\uACFC \uBA54\uC2DC\uC9C0: \"\uC0AC\uC6A9\uC790 \uB85C\uB4DC \uC2E4\uD328 => API \uD638\uCD9C \uC2E4\uD328 => \uC6D0\uBCF8 \uC5D0\uB7EC \uBA54\uC2DC\uC9C0\"\n *\n * @example\n * // \uBA54\uC2DC\uC9C0\uB9CC\uC73C\uB85C \uC0DD\uC131\n * throw new SdError(\"\uC798\uBABB\uB41C \uC0C1\uD0DC\", \"\uCC98\uB9AC \uBD88\uAC00\");\n * // \uACB0\uACFC \uBA54\uC2DC\uC9C0: \"\uCC98\uB9AC \uBD88\uAC00 => \uC798\uBABB\uB41C \uC0C1\uD0DC\"\n */\nexport class SdError extends Error {\n override cause?: Error;\n\n /** \uC6D0\uC778 \uC5D0\uB7EC\uB97C \uAC10\uC2F8\uC11C \uC0DD\uC131. \uBA54\uC2DC\uC9C0\uB294 \uC5ED\uC21C\uC73C\uB85C \uC5F0\uACB0\uB428 (\uC0C1\uC704 \uBA54\uC2DC\uC9C0 => \uD558\uC704 \uBA54\uC2DC\uC9C0 => \uC6D0\uC778 \uBA54\uC2DC\uC9C0) */\n constructor(cause: Error, ...messages: string[]);\n /** \uBA54\uC2DC\uC9C0\uB9CC\uC73C\uB85C \uC0DD\uC131. \uBA54\uC2DC\uC9C0\uB294 \uC5ED\uC21C\uC73C\uB85C \uC5F0\uACB0\uB428 (\uC0C1\uC704 \uBA54\uC2DC\uC9C0 => \uD558\uC704 \uBA54\uC2DC\uC9C0) */\n constructor(...messages: string[]);\n constructor(arg1?: unknown, ...messages: string[]);\n constructor(arg1?: unknown, ...messages: string[]) {\n const arg1Message =\n arg1 instanceof Error ? arg1.message : typeof arg1 === \"string\" ? arg1 : arg1 != null ? String(arg1) : undefined;\n\n const fullMessage = [arg1Message, ...messages]\n .filter((m) => m != null)\n .reverse()\n .join(\" => \");\n\n const cause = arg1 instanceof Error ? arg1 : undefined;\n\n super(fullMessage, { cause });\n\n Object.setPrototypeOf(this, new.target.prototype);\n this.name = \"SdError\";\n\n // V8 \uC5D4\uC9C4(Node.js, Chrome)\uC5D0\uC11C\uB9CC \uC0AC\uC6A9 \uAC00\uB2A5\uD55C captureStackTrace\n if (\"captureStackTrace\" in Error) {\n (Error.captureStackTrace as (targetObject: object, constructorOpt?: Function) => void)(this, new.target);\n }\n\n // cause \uCCB4\uC778\uC758 stack\uC744 \uD604\uC7AC stack\uC5D0 \uCD94\uAC00\n if (cause?.stack != null) {\n this.stack += `\\n---- cause stack ----\\n${cause.stack}`;\n }\n }\n}\n"],
5
+ "mappings": "AAkBO,MAAM,gBAAgB,MAAM;AAAA,EACxB;AAAA,EAOT,YAAY,SAAmB,UAAoB;AACjD,UAAM,cACJ,gBAAgB,QAAQ,KAAK,UAAU,OAAO,SAAS,WAAW,OAAO,QAAQ,OAAO,OAAO,IAAI,IAAI;AAEzG,UAAM,cAAc,CAAC,aAAa,GAAG,QAAQ,EAC1C,OAAO,CAAC,MAAM,KAAK,IAAI,EACvB,QAAQ,EACR,KAAK,MAAM;AAEd,UAAM,QAAQ,gBAAgB,QAAQ,OAAO;AAE7C,UAAM,aAAa,EAAE,MAAM,CAAC;AAE5B,WAAO,eAAe,MAAM,WAAW,SAAS;AAChD,SAAK,OAAO;AAGZ,QAAI,uBAAuB,OAAO;AAChC,MAAC,MAAM,kBAAgF,MAAM,UAAU;AAAA,IACzG;AAGA,SAAI,+BAAO,UAAS,MAAM;AACxB,WAAK,SAAS;AAAA;AAAA,EAA4B,MAAM,KAAK;AAAA,IACvD;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,31 @@
1
+ import { SdError } from "./sd-error";
2
+ /**
3
+ * 타임아웃 오류
4
+ *
5
+ * 대기 시간이 초과되었을 때 발생하는 에러이다.
6
+ * Wait.until() 등의 비동기 대기 함수에서 최대 시도 횟수를 초과하면 자동으로 발생한다.
7
+ *
8
+ * @example
9
+ * // Wait.until에서 자동 발생
10
+ * try {
11
+ * await Wait.until(() => isReady, 100, 50); // 100ms 간격, 최대 50회
12
+ * } catch (err) {
13
+ * if (err instanceof TimeoutError) {
14
+ * console.log("시간 초과");
15
+ * }
16
+ * }
17
+ *
18
+ * @example
19
+ * // 직접 발생
20
+ * if (elapsed > maxTime) {
21
+ * throw new TimeoutError(undefined, "API 응답 대기 초과");
22
+ * }
23
+ */
24
+ export declare class TimeoutError extends SdError {
25
+ /**
26
+ * @param count 시도 횟수
27
+ * @param message 추가 메시지
28
+ */
29
+ constructor(count?: number, message?: string);
30
+ }
31
+ //# sourceMappingURL=timeout-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout-error.d.ts","sourceRoot":"","sources":["../../src/errors/timeout-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,YAAa,SAAQ,OAAO;IACvC;;;OAGG;gBACS,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAM7C"}
@@ -0,0 +1,17 @@
1
+ import { SdError } from "./sd-error";
2
+ class TimeoutError extends SdError {
3
+ /**
4
+ * @param count 시도 횟수
5
+ * @param message 추가 메시지
6
+ */
7
+ constructor(count, message) {
8
+ super(
9
+ "\uB300\uAE30 \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4" + (count != null ? `(${count}\uD68C)` : "") + (message != null ? `: ${message}` : "")
10
+ );
11
+ this.name = "TimeoutError";
12
+ }
13
+ }
14
+ export {
15
+ TimeoutError
16
+ };
17
+ //# sourceMappingURL=timeout-error.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/errors/timeout-error.ts"],
4
+ "sourcesContent": ["import { SdError } from \"./sd-error\";\n\n/**\n * \uD0C0\uC784\uC544\uC6C3 \uC624\uB958\n *\n * \uB300\uAE30 \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC744 \uB54C \uBC1C\uC0DD\uD558\uB294 \uC5D0\uB7EC\uC774\uB2E4.\n * Wait.until() \uB4F1\uC758 \uBE44\uB3D9\uAE30 \uB300\uAE30 \uD568\uC218\uC5D0\uC11C \uCD5C\uB300 \uC2DC\uB3C4 \uD69F\uC218\uB97C \uCD08\uACFC\uD558\uBA74 \uC790\uB3D9\uC73C\uB85C \uBC1C\uC0DD\uD55C\uB2E4.\n *\n * @example\n * // Wait.until\uC5D0\uC11C \uC790\uB3D9 \uBC1C\uC0DD\n * try {\n * await Wait.until(() => isReady, 100, 50); // 100ms \uAC04\uACA9, \uCD5C\uB300 50\uD68C\n * } catch (err) {\n * if (err instanceof TimeoutError) {\n * console.log(\"\uC2DC\uAC04 \uCD08\uACFC\");\n * }\n * }\n *\n * @example\n * // \uC9C1\uC811 \uBC1C\uC0DD\n * if (elapsed > maxTime) {\n * throw new TimeoutError(undefined, \"API \uC751\uB2F5 \uB300\uAE30 \uCD08\uACFC\");\n * }\n */\nexport class TimeoutError extends SdError {\n /**\n * @param count \uC2DC\uB3C4 \uD69F\uC218\n * @param message \uCD94\uAC00 \uBA54\uC2DC\uC9C0\n */\n constructor(count?: number, message?: string) {\n super(\n \"\uB300\uAE30 \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4\" + (count != null ? `(${count}\uD68C)` : \"\") + (message != null ? `: ${message}` : \"\"),\n );\n this.name = \"TimeoutError\";\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,eAAe;AAwBjB,MAAM,qBAAqB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,EAKxC,YAAY,OAAgB,SAAkB;AAC5C;AAAA,MACE,gFAAoB,SAAS,OAAO,IAAI,KAAK,YAAO,OAAO,WAAW,OAAO,KAAK,OAAO,KAAK;AAAA,IAChG;AACA,SAAK,OAAO;AAAA,EACd;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Array 확장 메서드
3
+ *
4
+ * @remarks 각 메서드의 TSDoc은 타입 정의 파일(arr-ext.types.ts) 참조
5
+ */
6
+ import "./map-ext";
7
+ import type { ReadonlyArrayExt, MutableArrayExt } from "./arr-ext.types";
8
+ declare global {
9
+ interface ReadonlyArray<T> extends ReadonlyArrayExt<T> {
10
+ }
11
+ interface Array<T> extends ReadonlyArrayExt<T>, MutableArrayExt<T> {
12
+ }
13
+ }
14
+ export type { ArrayDiffsResult, ArrayDiffs2Result, TreeArray, ComparableType } from "./arr-ext.types";
15
+ //# sourceMappingURL=arr-ext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arr-ext.d.ts","sourceRoot":"","sources":["../../src/extensions/arr-ext.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,WAAW,CAAC;AAUnB,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAIhB,MAAM,iBAAiB,CAAC;AA2uBzB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,aAAa,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;KAAG;IACzD,UAAU,KAAK,CAAC,CAAC,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;KAAG;CACtE;AAID,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Array 확장 헬퍼 함수
3
+ */
4
+ import type { ComparableType } from "./arr-ext.types";
5
+ /**
6
+ * DateTime, DateOnly, Time을 비교 가능한 primitive 값으로 변환
7
+ */
8
+ export declare function toComparable(value: ComparableType): string | number | boolean | undefined;
9
+ /**
10
+ * 정렬을 위한 비교 함수
11
+ *
12
+ * @param pp 비교 대상 1
13
+ * @param pn 비교 대상 2
14
+ * @param desc true: 내림차순, false: 오름차순
15
+ * @returns 음수: pp가 앞, 0: 같음, 양수: pn이 앞
16
+ * @note null/undefined 값은 오름차순 시 앞으로, 내림차순 시 뒤로 정렬됨
17
+ */
18
+ export declare function compareForOrder(pp: ComparableType, pn: ComparableType, desc: boolean): number;
19
+ //# sourceMappingURL=arr-ext.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arr-ext.helpers.d.ts","sourceRoot":"","sources":["../../src/extensions/arr-ext.helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAKzF;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAuB7F"}
@@ -0,0 +1,35 @@
1
+ import { DateTime } from "../types/date-time";
2
+ import { DateOnly } from "../types/date-only";
3
+ import { Time } from "../types/time";
4
+ import { ArgumentError } from "../errors/argument-error";
5
+ function toComparable(value) {
6
+ if (value instanceof DateOnly || value instanceof DateTime || value instanceof Time) {
7
+ return value.tick;
8
+ }
9
+ return value;
10
+ }
11
+ function compareForOrder(pp, pn, desc) {
12
+ const cpp = toComparable(pp);
13
+ const cpn = toComparable(pn);
14
+ if (cpn === cpp) return 0;
15
+ if (cpp == null) return desc ? 1 : -1;
16
+ if (cpn == null) return desc ? -1 : 1;
17
+ if (typeof cpn === "string" && typeof cpp === "string") {
18
+ return desc ? cpn.localeCompare(cpp) : cpp.localeCompare(cpn);
19
+ }
20
+ if (typeof cpn === "number" && typeof cpp === "number") {
21
+ if (desc) {
22
+ return cpp > cpn ? -1 : cpp < cpn ? 1 : 0;
23
+ }
24
+ return cpp < cpn ? -1 : cpp > cpn ? 1 : 0;
25
+ }
26
+ if (typeof cpn === "boolean" && typeof cpp === "boolean") {
27
+ return cpn ? desc ? 1 : -1 : desc ? -1 : 1;
28
+ }
29
+ throw new ArgumentError("orderBy\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uB294 \uD0C0\uC785\uC785\uB2C8\uB2E4.", { type1: typeof cpp, type2: typeof cpn });
30
+ }
31
+ export {
32
+ compareForOrder,
33
+ toComparable
34
+ };
35
+ //# sourceMappingURL=arr-ext.helpers.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/extensions/arr-ext.helpers.ts"],
4
+ "sourcesContent": ["/**\n * Array \uD655\uC7A5 \uD5EC\uD37C \uD568\uC218\n */\n\nimport { DateTime } from \"../types/date-time\";\nimport { DateOnly } from \"../types/date-only\";\nimport { Time } from \"../types/time\";\nimport { ArgumentError } from \"../errors/argument-error\";\nimport type { ComparableType } from \"./arr-ext.types\";\n\n/**\n * DateTime, DateOnly, Time\uC744 \uBE44\uAD50 \uAC00\uB2A5\uD55C primitive \uAC12\uC73C\uB85C \uBCC0\uD658\n */\nexport function toComparable(value: ComparableType): string | number | boolean | undefined {\n if (value instanceof DateOnly || value instanceof DateTime || value instanceof Time) {\n return value.tick;\n }\n return value;\n}\n\n/**\n * \uC815\uB82C\uC744 \uC704\uD55C \uBE44\uAD50 \uD568\uC218\n *\n * @param pp \uBE44\uAD50 \uB300\uC0C1 1\n * @param pn \uBE44\uAD50 \uB300\uC0C1 2\n * @param desc true: \uB0B4\uB9BC\uCC28\uC21C, false: \uC624\uB984\uCC28\uC21C\n * @returns \uC74C\uC218: pp\uAC00 \uC55E, 0: \uAC19\uC74C, \uC591\uC218: pn\uC774 \uC55E\n * @note null/undefined \uAC12\uC740 \uC624\uB984\uCC28\uC21C \uC2DC \uC55E\uC73C\uB85C, \uB0B4\uB9BC\uCC28\uC21C \uC2DC \uB4A4\uB85C \uC815\uB82C\uB428\n */\nexport function compareForOrder(pp: ComparableType, pn: ComparableType, desc: boolean): number {\n const cpp = toComparable(pp);\n const cpn = toComparable(pn);\n\n if (cpn === cpp) return 0;\n if (cpp == null) return desc ? 1 : -1;\n if (cpn == null) return desc ? -1 : 1;\n\n if (typeof cpn === \"string\" && typeof cpp === \"string\") {\n return desc ? cpn.localeCompare(cpp) : cpp.localeCompare(cpn);\n }\n if (typeof cpn === \"number\" && typeof cpp === \"number\") {\n if (desc) {\n return cpp > cpn ? -1 : cpp < cpn ? 1 : 0;\n }\n return cpp < cpn ? -1 : cpp > cpn ? 1 : 0;\n }\n if (typeof cpn === \"boolean\" && typeof cpp === \"boolean\") {\n // true > false: \uC624\uB984\uCC28\uC21C \uC2DC true\uAC00 \uB4A4, \uB0B4\uB9BC\uCC28\uC21C \uC2DC true\uAC00 \uC55E\n return cpn ? (desc ? 1 : -1) : desc ? -1 : 1;\n }\n\n throw new ArgumentError(\"orderBy\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uB294 \uD0C0\uC785\uC785\uB2C8\uB2E4.\", { type1: typeof cpp, type2: typeof cpn });\n}\n"],
5
+ "mappings": "AAIA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAMvB,SAAS,aAAa,OAA8D;AACzF,MAAI,iBAAiB,YAAY,iBAAiB,YAAY,iBAAiB,MAAM;AACnF,WAAO,MAAM;AAAA,EACf;AACA,SAAO;AACT;AAWO,SAAS,gBAAgB,IAAoB,IAAoB,MAAuB;AAC7F,QAAM,MAAM,aAAa,EAAE;AAC3B,QAAM,MAAM,aAAa,EAAE;AAE3B,MAAI,QAAQ,IAAK,QAAO;AACxB,MAAI,OAAO,KAAM,QAAO,OAAO,IAAI;AACnC,MAAI,OAAO,KAAM,QAAO,OAAO,KAAK;AAEpC,MAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,UAAU;AACtD,WAAO,OAAO,IAAI,cAAc,GAAG,IAAI,IAAI,cAAc,GAAG;AAAA,EAC9D;AACA,MAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,UAAU;AACtD,QAAI,MAAM;AACR,aAAO,MAAM,MAAM,KAAK,MAAM,MAAM,IAAI;AAAA,IAC1C;AACA,WAAO,MAAM,MAAM,KAAK,MAAM,MAAM,IAAI;AAAA,EAC1C;AACA,MAAI,OAAO,QAAQ,aAAa,OAAO,QAAQ,WAAW;AAExD,WAAO,MAAO,OAAO,IAAI,KAAM,OAAO,KAAK;AAAA,EAC7C;AAEA,QAAM,IAAI,cAAc,wFAA4B,EAAE,OAAO,OAAO,KAAK,OAAO,OAAO,IAAI,CAAC;AAC9F;",
6
+ "names": []
7
+ }