@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,21 @@
1
+ function pathJoin(...segments) {
2
+ return segments.map((s, i) => i === 0 ? s.replace(/\/+$/, "") : s.replace(/^\/+|\/+$/g, "")).filter(Boolean).join("/");
3
+ }
4
+ function pathBasename(filePath, ext) {
5
+ const name = filePath.split("/").pop() ?? "";
6
+ if (ext != null && ext !== "" && name.endsWith(ext)) {
7
+ return name.slice(0, -ext.length);
8
+ }
9
+ return name;
10
+ }
11
+ function pathExtname(filePath) {
12
+ const name = filePath.split("/").pop() ?? "";
13
+ const dotIndex = name.lastIndexOf(".");
14
+ return dotIndex > 0 ? name.slice(dotIndex) : "";
15
+ }
16
+ export {
17
+ pathBasename,
18
+ pathExtname,
19
+ pathJoin
20
+ };
21
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/path.ts"],
4
+ "sourcesContent": ["/**\n * \uACBD\uB85C \uC720\uD2F8\uB9AC\uD2F0 \uD568\uC218\n * Node.js path \uBAA8\uB4C8 \uB300\uCCB4\uC6A9 (\uBE0C\uB77C\uC6B0\uC800 \uD658\uACBD \uC9C0\uC6D0)\n *\n * @note \uC774 \uC720\uD2F8\uB9AC\uD2F0\uB294 POSIX \uC2A4\uD0C0\uC77C \uACBD\uB85C(\uC2AC\uB798\uC2DC `/`)\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4.\n * Windows \uBC31\uC2AC\uB798\uC2DC(`\\`) \uACBD\uB85C\uB294 \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.\n * \uBE0C\uB77C\uC6B0\uC800 \uD658\uACBD \uBC0F Capacitor \uD50C\uB7EC\uADF8\uC778\uC6A9\uC73C\uB85C \uC124\uACC4\uB418\uC5C8\uC2B5\uB2C8\uB2E4.\n */\n\n/**\n * \uACBD\uB85C \uC870\uD569 (path.join \uB300\uCCB4)\n * @note POSIX \uC2A4\uD0C0\uC77C \uACBD\uB85C\uB9CC \uC9C0\uC6D0 (\uC2AC\uB798\uC2DC `/`)\n */\nexport function pathJoin(...segments: string[]): string {\n return segments\n .map((s, i) => (i === 0 ? s.replace(/\\/+$/, \"\") : s.replace(/^\\/+|\\/+$/g, \"\")))\n .filter(Boolean)\n .join(\"/\");\n}\n\n/**\n * \uD30C\uC77C\uBA85 \uCD94\uCD9C (path.basename \uB300\uCCB4)\n */\nexport function pathBasename(filePath: string, ext?: string): string {\n const name = filePath.split(\"/\").pop() ?? \"\";\n if (ext != null && ext !== \"\" && name.endsWith(ext)) {\n return name.slice(0, -ext.length);\n }\n return name;\n}\n\n/**\n * \uD655\uC7A5\uC790 \uCD94\uCD9C (path.extname \uB300\uCCB4)\n * @note \uC228\uAE40 \uD30C\uC77C(\uC608: `.gitignore`)\uC740 \uBE48 \uBB38\uC790\uC5F4\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4 (Node.js path.extname\uACFC \uB3D9\uC77C)\n */\nexport function pathExtname(filePath: string): string {\n const name = filePath.split(\"/\").pop() ?? \"\";\n const dotIndex = name.lastIndexOf(\".\");\n return dotIndex > 0 ? name.slice(dotIndex) : \"\";\n}\n"],
5
+ "mappings": "AAaO,SAAS,YAAY,UAA4B;AACtD,SAAO,SACJ,IAAI,CAAC,GAAG,MAAO,MAAM,IAAI,EAAE,QAAQ,QAAQ,EAAE,IAAI,EAAE,QAAQ,cAAc,EAAE,CAAE,EAC7E,OAAO,OAAO,EACd,KAAK,GAAG;AACb;AAKO,SAAS,aAAa,UAAkB,KAAsB;AACnE,QAAM,OAAO,SAAS,MAAM,GAAG,EAAE,IAAI,KAAK;AAC1C,MAAI,OAAO,QAAQ,QAAQ,MAAM,KAAK,SAAS,GAAG,GAAG;AACnD,WAAO,KAAK,MAAM,GAAG,CAAC,IAAI,MAAM;AAAA,EAClC;AACA,SAAO;AACT;AAMO,SAAS,YAAY,UAA0B;AACpD,QAAM,OAAO,SAAS,MAAM,GAAG,EAAE,IAAI,KAAK;AAC1C,QAAM,WAAW,KAAK,YAAY,GAAG;AACrC,SAAO,WAAW,IAAI,KAAK,MAAM,QAAQ,IAAI;AAC/C;",
6
+ "names": []
7
+ }
@@ -0,0 +1,18 @@
1
+ import type { PrimitiveTypeMap, PrimitiveTypeStr } from "../common.types";
2
+ /**
3
+ * 값에서 PrimitiveTypeStr 추론
4
+ *
5
+ * 런타임에서 값의 타입을 검사하여 해당하는 PrimitiveTypeStr을 반환합니다.
6
+ *
7
+ * @param value 타입을 추론할 값
8
+ * @returns 값에 해당하는 PrimitiveTypeStr
9
+ * @throws ArgumentError 지원하지 않는 타입인 경우
10
+ *
11
+ * @example
12
+ * getPrimitiveTypeStr("hello") // "string"
13
+ * getPrimitiveTypeStr(123) // "number"
14
+ * getPrimitiveTypeStr(new DateTime()) // "DateTime"
15
+ * getPrimitiveTypeStr(new Uint8Array()) // "Bytes"
16
+ */
17
+ export declare function getPrimitiveTypeStr(value: PrimitiveTypeMap[PrimitiveTypeStr]): PrimitiveTypeStr;
18
+ //# sourceMappingURL=primitive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitive.d.ts","sourceRoot":"","sources":["../../src/utils/primitive.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE1E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAU/F"}
@@ -0,0 +1,20 @@
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
+ import { ArgumentError } from "../errors/argument-error";
6
+ function getPrimitiveTypeStr(value) {
7
+ if (typeof value === "string") return "string";
8
+ if (typeof value === "number") return "number";
9
+ if (typeof value === "boolean") return "boolean";
10
+ if (value instanceof DateTime) return "DateTime";
11
+ if (value instanceof DateOnly) return "DateOnly";
12
+ if (value instanceof Time) return "Time";
13
+ if (value instanceof Uuid) return "Uuid";
14
+ if (value instanceof Uint8Array) return "Bytes";
15
+ throw new ArgumentError("\uC54C \uC218 \uC5C6\uB294 \uAC12 \uD0C0\uC785\uC785\uB2C8\uB2E4.", { type: typeof value });
16
+ }
17
+ export {
18
+ getPrimitiveTypeStr
19
+ };
20
+ //# sourceMappingURL=primitive.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/primitive.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\";\nimport { ArgumentError } from \"../errors/argument-error\";\nimport type { PrimitiveTypeMap, PrimitiveTypeStr } from \"../common.types\";\n\n/**\n * \uAC12\uC5D0\uC11C PrimitiveTypeStr \uCD94\uB860\n *\n * \uB7F0\uD0C0\uC784\uC5D0\uC11C \uAC12\uC758 \uD0C0\uC785\uC744 \uAC80\uC0AC\uD558\uC5EC \uD574\uB2F9\uD558\uB294 PrimitiveTypeStr\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4.\n *\n * @param value \uD0C0\uC785\uC744 \uCD94\uB860\uD560 \uAC12\n * @returns \uAC12\uC5D0 \uD574\uB2F9\uD558\uB294 PrimitiveTypeStr\n * @throws ArgumentError \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uD0C0\uC785\uC778 \uACBD\uC6B0\n *\n * @example\n * getPrimitiveTypeStr(\"hello\") // \"string\"\n * getPrimitiveTypeStr(123) // \"number\"\n * getPrimitiveTypeStr(new DateTime()) // \"DateTime\"\n * getPrimitiveTypeStr(new Uint8Array()) // \"Bytes\"\n */\nexport function getPrimitiveTypeStr(value: PrimitiveTypeMap[PrimitiveTypeStr]): PrimitiveTypeStr {\n if (typeof value === \"string\") return \"string\";\n if (typeof value === \"number\") return \"number\";\n if (typeof value === \"boolean\") return \"boolean\";\n if (value instanceof DateTime) return \"DateTime\";\n if (value instanceof DateOnly) return \"DateOnly\";\n if (value instanceof Time) return \"Time\";\n if (value instanceof Uuid) return \"Uuid\";\n if (value instanceof Uint8Array) return \"Bytes\";\n throw new ArgumentError(\"\uC54C \uC218 \uC5C6\uB294 \uAC12 \uD0C0\uC785\uC785\uB2C8\uB2E4.\", { type: typeof value });\n}\n"],
5
+ "mappings": "AAAA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,YAAY;AACrB,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAkBvB,SAAS,oBAAoB,OAA6D;AAC/F,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,OAAO,UAAU,UAAW,QAAO;AACvC,MAAI,iBAAiB,SAAU,QAAO;AACtC,MAAI,iBAAiB,SAAU,QAAO;AACtC,MAAI,iBAAiB,KAAM,QAAO;AAClC,MAAI,iBAAiB,KAAM,QAAO;AAClC,MAAI,iBAAiB,WAAY,QAAO;AACxC,QAAM,IAAI,cAAc,qEAAmB,EAAE,MAAM,OAAO,MAAM,CAAC;AACnE;",
6
+ "names": []
7
+ }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * 문자열 유틸리티 함수
3
+ */
4
+ /**
5
+ * 한글 조사를 받침에 따라 적절히 반환
6
+ * @param text 텍스트
7
+ * @param type 조사 타입
8
+ * - `"을"`: 을/를
9
+ * - `"은"`: 은/는
10
+ * - `"이"`: 이/가
11
+ * - `"와"`: 과/와
12
+ * - `"랑"`: 이랑/랑
13
+ * - `"로"`: 으로/로
14
+ * - `"라"`: 이라/라
15
+ *
16
+ * @example
17
+ * getSuffix("사과", "을") // "를"
18
+ * getSuffix("책", "이") // "이"
19
+ */
20
+ export declare function strGetSuffix(text: string, type: "을" | "은" | "이" | "와" | "랑" | "로" | "라"): string;
21
+ /**
22
+ * 전각(Full-width) 문자를 반각(Half-width) 문자로 변환
23
+ *
24
+ * 변환 대상:
25
+ * - 전각 영문 대문자 (A-Z → A-Z)
26
+ * - 전각 영문 소문자 (a-z → a-z)
27
+ * - 전각 숫자 (0-9 → 0-9)
28
+ * - 전각 공백 (  → 일반 공백)
29
+ * - 전각 괄호 (() → ())
30
+ *
31
+ * @example
32
+ * replaceSpecialDefaultChar("A123") // "A123"
33
+ * replaceSpecialDefaultChar("(株)") // "(株)"
34
+ */
35
+ export declare function strReplaceFullWidth(str: string): string;
36
+ /**
37
+ * PascalCase로 변환
38
+ * @example "hello-world" → "HelloWorld"
39
+ * @example "hello_world" → "HelloWorld"
40
+ * @example "hello.world" → "HelloWorld"
41
+ */
42
+ export declare function strToPascalCase(str: string): string;
43
+ /**
44
+ * camelCase로 변환
45
+ * @example "hello-world" → "helloWorld"
46
+ * @example "hello_world" → "helloWorld"
47
+ * @example "HelloWorld" → "helloWorld"
48
+ */
49
+ export declare function strToCamelCase(str: string): string;
50
+ /**
51
+ * kebab-case로 변환
52
+ *
53
+ * @example "HelloWorld" → "hello-world"
54
+ * @example "helloWorld" → "hello-world"
55
+ * @example "hello_world" → "hello_world" (소문자만 있으면 변환 안됨)
56
+ * @example "Hello_World" → "hello-_world" (기존 분리자는 유지됨)
57
+ * @example "Hello-World" → "hello--world" (기존 분리자는 유지됨)
58
+ * @example "XMLParser" → "x-m-l-parser" (연속된 대문자는 각각 분리됨)
59
+ */
60
+ export declare function strToKebabCase(str: string): string;
61
+ /**
62
+ * snake_case로 변환
63
+ *
64
+ * @example "HelloWorld" → "hello_world"
65
+ * @example "helloWorld" → "hello_world"
66
+ * @example "hello-world" → "hello-world" (소문자만 있으면 변환 안됨)
67
+ * @example "Hello-World" → "hello_-world" (기존 분리자는 유지됨)
68
+ * @example "Hello_World" → "hello__world" (기존 분리자는 유지됨)
69
+ * @example "XMLParser" → "x_m_l_parser" (연속된 대문자는 각각 분리됨)
70
+ */
71
+ export declare function strToSnakeCase(str: string): string;
72
+ /**
73
+ * undefined 또는 빈 문자열 여부 체크 (타입 가드)
74
+ *
75
+ * @param str 체크할 문자열
76
+ * @returns undefined, null, 빈 문자열이면 true
77
+ *
78
+ * @example
79
+ * const name: string | undefined = getValue();
80
+ * if (strIsNullOrEmpty(name)) {
81
+ * // name: "" | undefined
82
+ * console.log("이름이 비어있습니다");
83
+ * } else {
84
+ * // name: string (비어있지 않은 문자열)
85
+ * console.log(`이름: ${name}`);
86
+ * }
87
+ */
88
+ export declare function strIsNullOrEmpty(str: string | undefined): str is "" | undefined;
89
+ /**
90
+ * 문자열 특정 위치에 삽입
91
+ *
92
+ * @param str 원본 문자열
93
+ * @param index 삽입할 위치 (0부터 시작)
94
+ * @param insertString 삽입할 문자열
95
+ * @returns 삽입된 새 문자열
96
+ *
97
+ * @example
98
+ * strInsert("Hello World", 5, ","); // "Hello, World"
99
+ * strInsert("abc", 0, "X"); // "Xabc"
100
+ * strInsert("abc", 3, "X"); // "abcX"
101
+ */
102
+ export declare function strInsert(str: string, index: number, insertString: string): string;
103
+ //# sourceMappingURL=str.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"str.d.ts","sourceRoot":"","sources":["../../src/utils/str.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,MAAM,CAyBhG;AA8ED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAUD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,IAAI,EAAE,GAAG,SAAS,CAE/E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAElF"}
@@ -0,0 +1,128 @@
1
+ const suffixTable = {
2
+ \uC744: { t: "\uC744", f: "\uB97C" },
3
+ \uC740: { t: "\uC740", f: "\uB294" },
4
+ \uC774: { t: "\uC774", f: "\uAC00" },
5
+ \uC640: { t: "\uACFC", f: "\uC640" },
6
+ \uB791: { t: "\uC774\uB791", f: "\uB791" },
7
+ \uB85C: { t: "\uC73C\uB85C", f: "\uB85C" },
8
+ \uB77C: { t: "\uC774\uB77C", f: "\uB77C" }
9
+ };
10
+ function strGetSuffix(text, type) {
11
+ const table = suffixTable;
12
+ if (text.length === 0) {
13
+ return table[type].f;
14
+ }
15
+ const lastCharCode = text.charCodeAt(text.length - 1);
16
+ if (lastCharCode < 44032 || lastCharCode > 55203) {
17
+ return table[type].f;
18
+ }
19
+ const jongseongIndex = (lastCharCode - 44032) % 28;
20
+ const hasLast = jongseongIndex !== 0;
21
+ if (type === "\uB85C" && jongseongIndex === 8) {
22
+ return table[type].f;
23
+ }
24
+ return hasLast ? table[type].t : table[type].f;
25
+ }
26
+ const specialCharMap = {
27
+ "\uFF21": "A",
28
+ "\uFF22": "B",
29
+ "\uFF23": "C",
30
+ "\uFF24": "D",
31
+ "\uFF25": "E",
32
+ "\uFF26": "F",
33
+ "\uFF27": "G",
34
+ "\uFF28": "H",
35
+ "\uFF29": "I",
36
+ "\uFF2A": "J",
37
+ "\uFF2B": "K",
38
+ "\uFF2C": "L",
39
+ "\uFF2D": "M",
40
+ "\uFF2E": "N",
41
+ "\uFF2F": "O",
42
+ "\uFF30": "P",
43
+ "\uFF31": "Q",
44
+ "\uFF32": "R",
45
+ "\uFF33": "S",
46
+ "\uFF34": "T",
47
+ "\uFF35": "U",
48
+ "\uFF36": "V",
49
+ "\uFF37": "W",
50
+ "\uFF38": "X",
51
+ "\uFF39": "Y",
52
+ "\uFF3A": "Z",
53
+ "\uFF41": "a",
54
+ "\uFF42": "b",
55
+ "\uFF43": "c",
56
+ "\uFF44": "d",
57
+ "\uFF45": "e",
58
+ "\uFF46": "f",
59
+ "\uFF47": "g",
60
+ "\uFF48": "h",
61
+ "\uFF49": "i",
62
+ "\uFF4A": "j",
63
+ "\uFF4B": "k",
64
+ "\uFF4C": "l",
65
+ "\uFF4D": "m",
66
+ "\uFF4E": "n",
67
+ "\uFF4F": "o",
68
+ "\uFF50": "p",
69
+ "\uFF51": "q",
70
+ "\uFF52": "r",
71
+ "\uFF53": "s",
72
+ "\uFF54": "t",
73
+ "\uFF55": "u",
74
+ "\uFF56": "v",
75
+ "\uFF57": "w",
76
+ "\uFF58": "x",
77
+ "\uFF59": "y",
78
+ "\uFF5A": "z",
79
+ "\uFF10": "0",
80
+ "\uFF11": "1",
81
+ "\uFF12": "2",
82
+ "\uFF13": "3",
83
+ "\uFF14": "4",
84
+ "\uFF15": "5",
85
+ "\uFF16": "6",
86
+ "\uFF17": "7",
87
+ "\uFF18": "8",
88
+ "\uFF19": "9",
89
+ "\u3000": " ",
90
+ "\uFF09": ")",
91
+ "\uFF08": "("
92
+ };
93
+ const specialCharRegex = new RegExp(`[${Object.keys(specialCharMap).join("")}]`, "g");
94
+ function strReplaceFullWidth(str) {
95
+ return str.replace(specialCharRegex, (char) => specialCharMap[char] ?? char);
96
+ }
97
+ function strToPascalCase(str) {
98
+ return str.replace(/[-._][a-z]/g, (m) => m[1].toUpperCase()).replace(/^[a-z]/, (m) => m.toUpperCase());
99
+ }
100
+ function strToCamelCase(str) {
101
+ return str.replace(/[-._][a-z]/g, (m) => m[1].toUpperCase()).replace(/^[A-Z]/, (m) => m.toLowerCase());
102
+ }
103
+ function strToKebabCase(str) {
104
+ return toCaseWithSeparator(str, "-");
105
+ }
106
+ function strToSnakeCase(str) {
107
+ return toCaseWithSeparator(str, "_");
108
+ }
109
+ function toCaseWithSeparator(str, separator) {
110
+ return str.replace(/^[A-Z]/, (m) => m.toLowerCase()).replace(/[-_]?[A-Z]/g, (m) => separator + m.toLowerCase());
111
+ }
112
+ function strIsNullOrEmpty(str) {
113
+ return str == null || str === "";
114
+ }
115
+ function strInsert(str, index, insertString) {
116
+ return str.substring(0, index) + insertString + str.substring(index);
117
+ }
118
+ export {
119
+ strGetSuffix,
120
+ strInsert,
121
+ strIsNullOrEmpty,
122
+ strReplaceFullWidth,
123
+ strToCamelCase,
124
+ strToKebabCase,
125
+ strToPascalCase,
126
+ strToSnakeCase
127
+ };
128
+ //# sourceMappingURL=str.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/str.ts"],
4
+ "sourcesContent": ["/**\n * \uBB38\uC790\uC5F4 \uC720\uD2F8\uB9AC\uD2F0 \uD568\uC218\n */\n\n//#region \uD55C\uAE00 \uC870\uC0AC \uCC98\uB9AC\n\n// \uD55C\uAE00 \uC870\uC0AC \uB9E4\uD551 \uD14C\uC774\uBE14 (\uBAA8\uB4C8 \uB85C\uB4DC \uC2DC 1\uD68C\uB9CC \uC0DD\uC131)\nconst suffixTable = {\n \uC744: { t: \"\uC744\", f: \"\uB97C\" },\n \uC740: { t: \"\uC740\", f: \"\uB294\" },\n \uC774: { t: \"\uC774\", f: \"\uAC00\" },\n \uC640: { t: \"\uACFC\", f: \"\uC640\" },\n \uB791: { t: \"\uC774\uB791\", f: \"\uB791\" },\n \uB85C: { t: \"\uC73C\uB85C\", f: \"\uB85C\" },\n \uB77C: { t: \"\uC774\uB77C\", f: \"\uB77C\" },\n};\n\n/**\n * \uD55C\uAE00 \uC870\uC0AC\uB97C \uBC1B\uCE68\uC5D0 \uB530\uB77C \uC801\uC808\uD788 \uBC18\uD658\n * @param text \uD14D\uC2A4\uD2B8\n * @param type \uC870\uC0AC \uD0C0\uC785\n * - `\"\uC744\"`: \uC744/\uB97C\n * - `\"\uC740\"`: \uC740/\uB294\n * - `\"\uC774\"`: \uC774/\uAC00\n * - `\"\uC640\"`: \uACFC/\uC640\n * - `\"\uB791\"`: \uC774\uB791/\uB791\n * - `\"\uB85C\"`: \uC73C\uB85C/\uB85C\n * - `\"\uB77C\"`: \uC774\uB77C/\uB77C\n *\n * @example\n * getSuffix(\"\uC0AC\uACFC\", \"\uC744\") // \"\uB97C\"\n * getSuffix(\"\uCC45\", \"\uC774\") // \"\uC774\"\n */\nexport function strGetSuffix(text: string, type: \"\uC744\" | \"\uC740\" | \"\uC774\" | \"\uC640\" | \"\uB791\" | \"\uB85C\" | \"\uB77C\"): string {\n const table = suffixTable;\n\n // \uBE48 \uBB38\uC790\uC5F4 \uB610\uB294 \uB9C8\uC9C0\uB9C9 \uAE00\uC790\uAC00 \uD55C\uAE00\uC774 \uC544\uB2CC \uACBD\uC6B0 \uBC1B\uCE68 \uC5C6\uC74C\uC73C\uB85C \uCC98\uB9AC\n if (text.length === 0) {\n return table[type].f;\n }\n\n const lastCharCode = text.charCodeAt(text.length - 1);\n\n // \uD55C\uAE00 \uBC94\uC704 \uCCB4\uD06C (0xAC00 ~ 0xD7A3)\n if (lastCharCode < 0xac00 || lastCharCode > 0xd7a3) {\n return table[type].f;\n }\n\n // \uBC1B\uCE68 \uC874\uC7AC \uC5EC\uBD80 \uBC0F \uC885\uC131 \uC778\uB371\uC2A4 \uACC4\uC0B0\n const jongseongIndex = (lastCharCode - 0xac00) % 28;\n const hasLast = jongseongIndex !== 0;\n\n // \"\uB85C\" \uC870\uC0AC\uB294 \uBC1B\uCE68 \u3139(\uC885\uC131 \uC778\uB371\uC2A4 8)\uC77C \uB54C \"\uB85C\"\uB85C \uCC98\uB9AC\n if (type === \"\uB85C\" && jongseongIndex === 8) {\n return table[type].f;\n }\n\n return hasLast ? table[type].t : table[type].f;\n}\n\n//#endregion\n\n//#region \uC804\uAC01\u2192\uBC18\uAC01 \uBCC0\uD658\n\n// \uC804\uAC01 \u2192 \uBC18\uAC01 \uB9E4\uD551 \uD14C\uC774\uBE14 (\uBAA8\uB4C8 \uB85C\uB4DC \uC2DC 1\uD68C\uB9CC \uC0DD\uC131)\nconst specialCharMap: Record<string, string> = {\n \"\uFF21\": \"A\",\n \"\uFF22\": \"B\",\n \"\uFF23\": \"C\",\n \"\uFF24\": \"D\",\n \"\uFF25\": \"E\",\n \"\uFF26\": \"F\",\n \"\uFF27\": \"G\",\n \"\uFF28\": \"H\",\n \"\uFF29\": \"I\",\n \"\uFF2A\": \"J\",\n \"\uFF2B\": \"K\",\n \"\uFF2C\": \"L\",\n \"\uFF2D\": \"M\",\n \"\uFF2E\": \"N\",\n \"\uFF2F\": \"O\",\n \"\uFF30\": \"P\",\n \"\uFF31\": \"Q\",\n \"\uFF32\": \"R\",\n \"\uFF33\": \"S\",\n \"\uFF34\": \"T\",\n \"\uFF35\": \"U\",\n \"\uFF36\": \"V\",\n \"\uFF37\": \"W\",\n \"\uFF38\": \"X\",\n \"\uFF39\": \"Y\",\n \"\uFF3A\": \"Z\",\n \"\uFF41\": \"a\",\n \"\uFF42\": \"b\",\n \"\uFF43\": \"c\",\n \"\uFF44\": \"d\",\n \"\uFF45\": \"e\",\n \"\uFF46\": \"f\",\n \"\uFF47\": \"g\",\n \"\uFF48\": \"h\",\n \"\uFF49\": \"i\",\n \"\uFF4A\": \"j\",\n \"\uFF4B\": \"k\",\n \"\uFF4C\": \"l\",\n \"\uFF4D\": \"m\",\n \"\uFF4E\": \"n\",\n \"\uFF4F\": \"o\",\n \"\uFF50\": \"p\",\n \"\uFF51\": \"q\",\n \"\uFF52\": \"r\",\n \"\uFF53\": \"s\",\n \"\uFF54\": \"t\",\n \"\uFF55\": \"u\",\n \"\uFF56\": \"v\",\n \"\uFF57\": \"w\",\n \"\uFF58\": \"x\",\n \"\uFF59\": \"y\",\n \"\uFF5A\": \"z\",\n \"\uFF10\": \"0\",\n \"\uFF11\": \"1\",\n \"\uFF12\": \"2\",\n \"\uFF13\": \"3\",\n \"\uFF14\": \"4\",\n \"\uFF15\": \"5\",\n \"\uFF16\": \"6\",\n \"\uFF17\": \"7\",\n \"\uFF18\": \"8\",\n \"\uFF19\": \"9\",\n \"\u3000\": \" \",\n \"\uFF09\": \")\",\n \"\uFF08\": \"(\",\n};\n\n// \uC815\uADDC\uC2DD\uB3C4 1\uD68C\uB9CC \uC0DD\uC131\nconst specialCharRegex = new RegExp(`[${Object.keys(specialCharMap).join(\"\")}]`, \"g\");\n\n/**\n * \uC804\uAC01(Full-width) \uBB38\uC790\uB97C \uBC18\uAC01(Half-width) \uBB38\uC790\uB85C \uBCC0\uD658\n *\n * \uBCC0\uD658 \uB300\uC0C1:\n * - \uC804\uAC01 \uC601\uBB38 \uB300\uBB38\uC790 (\uFF21-\uFF3A \u2192 A-Z)\n * - \uC804\uAC01 \uC601\uBB38 \uC18C\uBB38\uC790 (\uFF41-\uFF5A \u2192 a-z)\n * - \uC804\uAC01 \uC22B\uC790 (\uFF10-\uFF19 \u2192 0-9)\n * - \uC804\uAC01 \uACF5\uBC31 (\u3000 \u2192 \uC77C\uBC18 \uACF5\uBC31)\n * - \uC804\uAC01 \uAD04\uD638 (\uFF08\uFF09 \u2192 ())\n *\n * @example\n * replaceSpecialDefaultChar(\"\uFF21\uFF11\uFF12\uFF13\") // \"A123\"\n * replaceSpecialDefaultChar(\"\uFF08\u682A\uFF09\") // \"(\u682A)\"\n */\nexport function strReplaceFullWidth(str: string): string {\n return str.replace(specialCharRegex, (char) => specialCharMap[char] ?? char);\n}\n\n//#endregion\n\n//#region \uCF00\uC774\uC2A4 \uBCC0\uD658\n\n/**\n * PascalCase\uB85C \uBCC0\uD658\n * @example \"hello-world\" \u2192 \"HelloWorld\"\n * @example \"hello_world\" \u2192 \"HelloWorld\"\n * @example \"hello.world\" \u2192 \"HelloWorld\"\n */\nexport function strToPascalCase(str: string): string {\n return str.replace(/[-._][a-z]/g, (m) => m[1].toUpperCase()).replace(/^[a-z]/, (m) => m.toUpperCase());\n}\n\n/**\n * camelCase\uB85C \uBCC0\uD658\n * @example \"hello-world\" \u2192 \"helloWorld\"\n * @example \"hello_world\" \u2192 \"helloWorld\"\n * @example \"HelloWorld\" \u2192 \"helloWorld\"\n */\nexport function strToCamelCase(str: string): string {\n return str.replace(/[-._][a-z]/g, (m) => m[1].toUpperCase()).replace(/^[A-Z]/, (m) => m.toLowerCase());\n}\n\n/**\n * kebab-case\uB85C \uBCC0\uD658\n *\n * @example \"HelloWorld\" \u2192 \"hello-world\"\n * @example \"helloWorld\" \u2192 \"hello-world\"\n * @example \"hello_world\" \u2192 \"hello_world\" (\uC18C\uBB38\uC790\uB9CC \uC788\uC73C\uBA74 \uBCC0\uD658 \uC548\uB428)\n * @example \"Hello_World\" \u2192 \"hello-_world\" (\uAE30\uC874 \uBD84\uB9AC\uC790\uB294 \uC720\uC9C0\uB428)\n * @example \"Hello-World\" \u2192 \"hello--world\" (\uAE30\uC874 \uBD84\uB9AC\uC790\uB294 \uC720\uC9C0\uB428)\n * @example \"XMLParser\" \u2192 \"x-m-l-parser\" (\uC5F0\uC18D\uB41C \uB300\uBB38\uC790\uB294 \uAC01\uAC01 \uBD84\uB9AC\uB428)\n */\nexport function strToKebabCase(str: string): string {\n return toCaseWithSeparator(str, \"-\");\n}\n\n/**\n * snake_case\uB85C \uBCC0\uD658\n *\n * @example \"HelloWorld\" \u2192 \"hello_world\"\n * @example \"helloWorld\" \u2192 \"hello_world\"\n * @example \"hello-world\" \u2192 \"hello-world\" (\uC18C\uBB38\uC790\uB9CC \uC788\uC73C\uBA74 \uBCC0\uD658 \uC548\uB428)\n * @example \"Hello-World\" \u2192 \"hello_-world\" (\uAE30\uC874 \uBD84\uB9AC\uC790\uB294 \uC720\uC9C0\uB428)\n * @example \"Hello_World\" \u2192 \"hello__world\" (\uAE30\uC874 \uBD84\uB9AC\uC790\uB294 \uC720\uC9C0\uB428)\n * @example \"XMLParser\" \u2192 \"x_m_l_parser\" (\uC5F0\uC18D\uB41C \uB300\uBB38\uC790\uB294 \uAC01\uAC01 \uBD84\uB9AC\uB428)\n */\nexport function strToSnakeCase(str: string): string {\n return toCaseWithSeparator(str, \"_\");\n}\n\nfunction toCaseWithSeparator(str: string, separator: string): string {\n return str.replace(/^[A-Z]/, (m) => m.toLowerCase()).replace(/[-_]?[A-Z]/g, (m) => separator + m.toLowerCase());\n}\n\n//#endregion\n\n//#region \uAE30\uD0C0\n\n/**\n * undefined \uB610\uB294 \uBE48 \uBB38\uC790\uC5F4 \uC5EC\uBD80 \uCCB4\uD06C (\uD0C0\uC785 \uAC00\uB4DC)\n *\n * @param str \uCCB4\uD06C\uD560 \uBB38\uC790\uC5F4\n * @returns undefined, null, \uBE48 \uBB38\uC790\uC5F4\uC774\uBA74 true\n *\n * @example\n * const name: string | undefined = getValue();\n * if (strIsNullOrEmpty(name)) {\n * // name: \"\" | undefined\n * console.log(\"\uC774\uB984\uC774 \uBE44\uC5B4\uC788\uC2B5\uB2C8\uB2E4\");\n * } else {\n * // name: string (\uBE44\uC5B4\uC788\uC9C0 \uC54A\uC740 \uBB38\uC790\uC5F4)\n * console.log(`\uC774\uB984: ${name}`);\n * }\n */\nexport function strIsNullOrEmpty(str: string | undefined): str is \"\" | undefined {\n return str == null || str === \"\";\n}\n\n/**\n * \uBB38\uC790\uC5F4 \uD2B9\uC815 \uC704\uCE58\uC5D0 \uC0BD\uC785\n *\n * @param str \uC6D0\uBCF8 \uBB38\uC790\uC5F4\n * @param index \uC0BD\uC785\uD560 \uC704\uCE58 (0\uBD80\uD130 \uC2DC\uC791)\n * @param insertString \uC0BD\uC785\uD560 \uBB38\uC790\uC5F4\n * @returns \uC0BD\uC785\uB41C \uC0C8 \uBB38\uC790\uC5F4\n *\n * @example\n * strInsert(\"Hello World\", 5, \",\"); // \"Hello, World\"\n * strInsert(\"abc\", 0, \"X\"); // \"Xabc\"\n * strInsert(\"abc\", 3, \"X\"); // \"abcX\"\n */\nexport function strInsert(str: string, index: number, insertString: string): string {\n return str.substring(0, index) + insertString + str.substring(index);\n}\n\n//#endregion\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * 템플릿 문자열 태그 함수들
3
+ * IDE 코드 하이라이팅 지원용 (실제 동작은 문자열 조합 + 들여쓰기 정리)
4
+ */
5
+ /**
6
+ * JavaScript 코드 하이라이팅용 템플릿 태그
7
+ * @param strings 템플릿 문자열 배열
8
+ * @param values 보간된 값들
9
+ * @returns 들여쓰기가 정리된 문자열
10
+ * @example
11
+ * const code = js`
12
+ * function hello() {
13
+ * return "world";
14
+ * }
15
+ * `;
16
+ */
17
+ export declare function js(strings: TemplateStringsArray, ...values: unknown[]): string;
18
+ /**
19
+ * TypeScript 코드 하이라이팅용 템플릿 태그
20
+ * @param strings 템플릿 문자열 배열
21
+ * @param values 보간된 값들
22
+ * @returns 들여쓰기가 정리된 문자열
23
+ * @example
24
+ * const code = ts`
25
+ * interface User {
26
+ * name: string;
27
+ * age: number;
28
+ * }
29
+ * `;
30
+ */
31
+ export declare function ts(strings: TemplateStringsArray, ...values: unknown[]): string;
32
+ /**
33
+ * HTML 마크업 하이라이팅용 템플릿 태그
34
+ * @param strings 템플릿 문자열 배열
35
+ * @param values 보간된 값들
36
+ * @returns 들여쓰기가 정리된 문자열
37
+ * @example
38
+ * const markup = html`
39
+ * <div class="container">
40
+ * <span>${name}</span>
41
+ * </div>
42
+ * `;
43
+ */
44
+ export declare function html(strings: TemplateStringsArray, ...values: unknown[]): string;
45
+ /**
46
+ * MSSQL T-SQL 하이라이팅용 템플릿 태그
47
+ * @param strings 템플릿 문자열 배열
48
+ * @param values 보간된 값들
49
+ * @returns 들여쓰기가 정리된 문자열
50
+ * @example
51
+ * const query = tsql`
52
+ * SELECT TOP 10 *
53
+ * FROM Users
54
+ * WHERE Name LIKE '%${keyword}%'
55
+ * `;
56
+ */
57
+ export declare function tsql(strings: TemplateStringsArray, ...values: unknown[]): string;
58
+ /**
59
+ * MySQL SQL 하이라이팅용 템플릿 태그
60
+ * @param strings 템플릿 문자열 배열
61
+ * @param values 보간된 값들
62
+ * @returns 들여쓰기가 정리된 문자열
63
+ * @example
64
+ * const query = mysql`
65
+ * SELECT *
66
+ * FROM users
67
+ * LIMIT 10
68
+ * `;
69
+ */
70
+ export declare function mysql(strings: TemplateStringsArray, ...values: unknown[]): string;
71
+ /**
72
+ * PostgreSQL SQL 하이라이팅용 템플릿 태그
73
+ * @param strings 템플릿 문자열 배열
74
+ * @param values 보간된 값들
75
+ * @returns 들여쓰기가 정리된 문자열
76
+ * @example
77
+ * const query = pgsql`
78
+ * SELECT *
79
+ * FROM users
80
+ * OFFSET 0 LIMIT 10
81
+ * `;
82
+ */
83
+ export declare function pgsql(strings: TemplateStringsArray, ...values: unknown[]): string;
84
+ //# sourceMappingURL=template-strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-strings.d.ts","sourceRoot":"","sources":["../../src/utils/template-strings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAE9E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAE9E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAEhF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAEhF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAEjF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAEjF"}
@@ -0,0 +1,49 @@
1
+ function js(strings, ...values) {
2
+ return _combine(strings, values);
3
+ }
4
+ function ts(strings, ...values) {
5
+ return _combine(strings, values);
6
+ }
7
+ function html(strings, ...values) {
8
+ return _combine(strings, values);
9
+ }
10
+ function tsql(strings, ...values) {
11
+ return _combine(strings, values);
12
+ }
13
+ function mysql(strings, ...values) {
14
+ return _combine(strings, values);
15
+ }
16
+ function pgsql(strings, ...values) {
17
+ return _combine(strings, values);
18
+ }
19
+ function _combine(strings, values) {
20
+ const raw = strings.reduce((result, str, i) => {
21
+ const value = values[i] !== void 0 ? String(values[i]) : "";
22
+ return result + str + value;
23
+ }, "");
24
+ return _trimIndent(raw);
25
+ }
26
+ function _trimIndent(text) {
27
+ const lines = text.split("\n");
28
+ while (lines.length > 0 && lines[0].trim() === "") {
29
+ lines.shift();
30
+ }
31
+ while (lines.length > 0 && lines[lines.length - 1].trim() === "") {
32
+ lines.pop();
33
+ }
34
+ const minIndent = lines.filter((line) => line.trim() !== "").reduce((min, line) => {
35
+ var _a;
36
+ const indent = ((_a = line.match(/^ */)) == null ? void 0 : _a[0].length) ?? 0;
37
+ return Math.min(min, indent);
38
+ }, Infinity);
39
+ return lines.map((line) => line.trim() === "" ? "" : line.slice(minIndent)).join("\n");
40
+ }
41
+ export {
42
+ html,
43
+ js,
44
+ mysql,
45
+ pgsql,
46
+ ts,
47
+ tsql
48
+ };
49
+ //# sourceMappingURL=template-strings.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/template-strings.ts"],
4
+ "sourcesContent": ["/**\n * \uD15C\uD50C\uB9BF \uBB38\uC790\uC5F4 \uD0DC\uADF8 \uD568\uC218\uB4E4\n * IDE \uCF54\uB4DC \uD558\uC774\uB77C\uC774\uD305 \uC9C0\uC6D0\uC6A9 (\uC2E4\uC81C \uB3D9\uC791\uC740 \uBB38\uC790\uC5F4 \uC870\uD569 + \uB4E4\uC5EC\uC4F0\uAE30 \uC815\uB9AC)\n */\n\n/**\n * JavaScript \uCF54\uB4DC \uD558\uC774\uB77C\uC774\uD305\uC6A9 \uD15C\uD50C\uB9BF \uD0DC\uADF8\n * @param strings \uD15C\uD50C\uB9BF \uBB38\uC790\uC5F4 \uBC30\uC5F4\n * @param values \uBCF4\uAC04\uB41C \uAC12\uB4E4\n * @returns \uB4E4\uC5EC\uC4F0\uAE30\uAC00 \uC815\uB9AC\uB41C \uBB38\uC790\uC5F4\n * @example\n * const code = js`\n * function hello() {\n * return \"world\";\n * }\n * `;\n */\nexport function js(strings: TemplateStringsArray, ...values: unknown[]): string {\n return _combine(strings, values);\n}\n\n/**\n * TypeScript \uCF54\uB4DC \uD558\uC774\uB77C\uC774\uD305\uC6A9 \uD15C\uD50C\uB9BF \uD0DC\uADF8\n * @param strings \uD15C\uD50C\uB9BF \uBB38\uC790\uC5F4 \uBC30\uC5F4\n * @param values \uBCF4\uAC04\uB41C \uAC12\uB4E4\n * @returns \uB4E4\uC5EC\uC4F0\uAE30\uAC00 \uC815\uB9AC\uB41C \uBB38\uC790\uC5F4\n * @example\n * const code = ts`\n * interface User {\n * name: string;\n * age: number;\n * }\n * `;\n */\nexport function ts(strings: TemplateStringsArray, ...values: unknown[]): string {\n return _combine(strings, values);\n}\n\n/**\n * HTML \uB9C8\uD06C\uC5C5 \uD558\uC774\uB77C\uC774\uD305\uC6A9 \uD15C\uD50C\uB9BF \uD0DC\uADF8\n * @param strings \uD15C\uD50C\uB9BF \uBB38\uC790\uC5F4 \uBC30\uC5F4\n * @param values \uBCF4\uAC04\uB41C \uAC12\uB4E4\n * @returns \uB4E4\uC5EC\uC4F0\uAE30\uAC00 \uC815\uB9AC\uB41C \uBB38\uC790\uC5F4\n * @example\n * const markup = html`\n * <div class=\"container\">\n * <span>${name}</span>\n * </div>\n * `;\n */\nexport function html(strings: TemplateStringsArray, ...values: unknown[]): string {\n return _combine(strings, values);\n}\n\n/**\n * MSSQL T-SQL \uD558\uC774\uB77C\uC774\uD305\uC6A9 \uD15C\uD50C\uB9BF \uD0DC\uADF8\n * @param strings \uD15C\uD50C\uB9BF \uBB38\uC790\uC5F4 \uBC30\uC5F4\n * @param values \uBCF4\uAC04\uB41C \uAC12\uB4E4\n * @returns \uB4E4\uC5EC\uC4F0\uAE30\uAC00 \uC815\uB9AC\uB41C \uBB38\uC790\uC5F4\n * @example\n * const query = tsql`\n * SELECT TOP 10 *\n * FROM Users\n * WHERE Name LIKE '%${keyword}%'\n * `;\n */\nexport function tsql(strings: TemplateStringsArray, ...values: unknown[]): string {\n return _combine(strings, values);\n}\n\n/**\n * MySQL SQL \uD558\uC774\uB77C\uC774\uD305\uC6A9 \uD15C\uD50C\uB9BF \uD0DC\uADF8\n * @param strings \uD15C\uD50C\uB9BF \uBB38\uC790\uC5F4 \uBC30\uC5F4\n * @param values \uBCF4\uAC04\uB41C \uAC12\uB4E4\n * @returns \uB4E4\uC5EC\uC4F0\uAE30\uAC00 \uC815\uB9AC\uB41C \uBB38\uC790\uC5F4\n * @example\n * const query = mysql`\n * SELECT *\n * FROM users\n * LIMIT 10\n * `;\n */\nexport function mysql(strings: TemplateStringsArray, ...values: unknown[]): string {\n return _combine(strings, values);\n}\n\n/**\n * PostgreSQL SQL \uD558\uC774\uB77C\uC774\uD305\uC6A9 \uD15C\uD50C\uB9BF \uD0DC\uADF8\n * @param strings \uD15C\uD50C\uB9BF \uBB38\uC790\uC5F4 \uBC30\uC5F4\n * @param values \uBCF4\uAC04\uB41C \uAC12\uB4E4\n * @returns \uB4E4\uC5EC\uC4F0\uAE30\uAC00 \uC815\uB9AC\uB41C \uBB38\uC790\uC5F4\n * @example\n * const query = pgsql`\n * SELECT *\n * FROM users\n * OFFSET 0 LIMIT 10\n * `;\n */\nexport function pgsql(strings: TemplateStringsArray, ...values: unknown[]): string {\n return _combine(strings, values);\n}\n\nfunction _combine(strings: TemplateStringsArray, values: unknown[]): string {\n const raw = strings.reduce((result, str, i) => {\n const value = values[i] !== undefined ? String(values[i]) : \"\";\n return result + str + value;\n }, \"\");\n return _trimIndent(raw);\n}\n\nfunction _trimIndent(text: string): string {\n const lines = text.split(\"\\n\");\n\n // \uCCAB/\uB9C8\uC9C0\uB9C9 \uBE48 \uC904 \uC81C\uAC70 (\uC5F0\uC18D\uB41C \uBE48 \uC904 \uBAA8\uB450 \uC81C\uAC70)\n while (lines.length > 0 && lines[0].trim() === \"\") {\n lines.shift();\n }\n while (lines.length > 0 && lines[lines.length - 1].trim() === \"\") {\n lines.pop();\n }\n\n // \uCD5C\uC18C \uB4E4\uC5EC\uC4F0\uAE30 \uACC4\uC0B0\n const minIndent = lines\n .filter((line) => line.trim() !== \"\")\n .reduce((min, line) => {\n const indent = line.match(/^ */)?.[0].length ?? 0;\n return Math.min(min, indent);\n }, Infinity);\n\n // \uB4E4\uC5EC\uC4F0\uAE30 \uC81C\uAC70\n return lines.map((line) => (line.trim() === \"\" ? \"\" : line.slice(minIndent))).join(\"\\n\");\n}\n"],
5
+ "mappings": "AAiBO,SAAS,GAAG,YAAkC,QAA2B;AAC9E,SAAO,SAAS,SAAS,MAAM;AACjC;AAeO,SAAS,GAAG,YAAkC,QAA2B;AAC9E,SAAO,SAAS,SAAS,MAAM;AACjC;AAcO,SAAS,KAAK,YAAkC,QAA2B;AAChF,SAAO,SAAS,SAAS,MAAM;AACjC;AAcO,SAAS,KAAK,YAAkC,QAA2B;AAChF,SAAO,SAAS,SAAS,MAAM;AACjC;AAcO,SAAS,MAAM,YAAkC,QAA2B;AACjF,SAAO,SAAS,SAAS,MAAM;AACjC;AAcO,SAAS,MAAM,YAAkC,QAA2B;AACjF,SAAO,SAAS,SAAS,MAAM;AACjC;AAEA,SAAS,SAAS,SAA+B,QAA2B;AAC1E,QAAM,MAAM,QAAQ,OAAO,CAAC,QAAQ,KAAK,MAAM;AAC7C,UAAM,QAAQ,OAAO,CAAC,MAAM,SAAY,OAAO,OAAO,CAAC,CAAC,IAAI;AAC5D,WAAO,SAAS,MAAM;AAAA,EACxB,GAAG,EAAE;AACL,SAAO,YAAY,GAAG;AACxB;AAEA,SAAS,YAAY,MAAsB;AACzC,QAAM,QAAQ,KAAK,MAAM,IAAI;AAG7B,SAAO,MAAM,SAAS,KAAK,MAAM,CAAC,EAAE,KAAK,MAAM,IAAI;AACjD,UAAM,MAAM;AAAA,EACd;AACA,SAAO,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,CAAC,EAAE,KAAK,MAAM,IAAI;AAChE,UAAM,IAAI;AAAA,EACZ;AAGA,QAAM,YAAY,MACf,OAAO,CAAC,SAAS,KAAK,KAAK,MAAM,EAAE,EACnC,OAAO,CAAC,KAAK,SAAS;AA5H3B;AA6HM,UAAM,WAAS,UAAK,MAAM,KAAK,MAAhB,mBAAoB,GAAG,WAAU;AAChD,WAAO,KAAK,IAAI,KAAK,MAAM;AAAA,EAC7B,GAAG,QAAQ;AAGb,SAAO,MAAM,IAAI,CAAC,SAAU,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,SAAS,CAAE,EAAE,KAAK,IAAI;AACzF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Worker 간 전송 가능한 객체 타입
3
+ *
4
+ * 이 코드에서는 ArrayBuffer만 사용됩니다.
5
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Transferable_objects
6
+ */
7
+ type Transferable = ArrayBuffer;
8
+ /**
9
+ * Transferable 변환 유틸리티 함수
10
+ *
11
+ * Worker 간 데이터 전송을 위한 직렬화/역직렬화를 수행합니다.
12
+ * structuredClone이 지원하지 않는 커스텀 타입들을 처리합니다.
13
+ *
14
+ * 지원 타입:
15
+ * - Date, DateTime, DateOnly, Time, Uuid, RegExp
16
+ * - Error (cause, code, detail 포함)
17
+ * - Uint8Array (다른 TypedArray는 미지원, 일반 객체로 처리됨)
18
+ * - Array, Map, Set, 일반 객체
19
+ *
20
+ * @note 순환 참조가 있으면 transferableEncode 시 TypeError 발생 (경로 정보 포함)
21
+ * @note 동일 객체가 여러 곳에서 참조되면 캐시된 인코딩 결과를 재사용합니다
22
+ *
23
+ * @example
24
+ * // Worker로 데이터 전송
25
+ * const { result, transferList } = transferableEncode(data);
26
+ * worker.postMessage(result, transferList);
27
+ *
28
+ * // Worker에서 데이터 수신
29
+ * const decoded = transferableDecode(event.data);
30
+ */
31
+ /**
32
+ * 심플리즘 타입을 사용한 객체를 일반 객체로 변환
33
+ * Worker에 전송할 수 있는 형태로 직렬화
34
+ *
35
+ * @throws 순환 참조 감지 시 TypeError
36
+ */
37
+ export declare function transferableEncode(obj: unknown): {
38
+ result: unknown;
39
+ transferList: Transferable[];
40
+ };
41
+ /**
42
+ * serialize 객체를 심플리즘 타입 사용 객체로 변환
43
+ * Worker로부터 받은 데이터를 역직렬화
44
+ */
45
+ export declare function transferableDecode(obj: unknown): unknown;
46
+ export {};
47
+ //# sourceMappingURL=transferable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transferable.d.ts","sourceRoot":"","sources":["../../src/utils/transferable.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,KAAK,YAAY,GAAG,WAAW,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B,CAMA;AAqID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CA2ExD"}