@simplysm/core-common 13.0.100 → 14.0.4

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 (184) hide show
  1. package/README.md +86 -92
  2. package/dist/common.types.d.ts +14 -14
  3. package/dist/common.types.js +2 -1
  4. package/dist/common.types.js.map +1 -6
  5. package/dist/env.d.ts +8 -1
  6. package/dist/env.d.ts.map +1 -1
  7. package/dist/env.js +13 -9
  8. package/dist/env.js.map +1 -6
  9. package/dist/errors/argument-error.d.ts +10 -10
  10. package/dist/errors/argument-error.d.ts.map +1 -1
  11. package/dist/errors/argument-error.js +31 -14
  12. package/dist/errors/argument-error.js.map +1 -6
  13. package/dist/errors/not-implemented-error.d.ts +8 -8
  14. package/dist/errors/not-implemented-error.js +30 -12
  15. package/dist/errors/not-implemented-error.js.map +1 -6
  16. package/dist/errors/sd-error.d.ts +10 -10
  17. package/dist/errors/sd-error.d.ts.map +1 -1
  18. package/dist/errors/sd-error.js +45 -24
  19. package/dist/errors/sd-error.js.map +1 -6
  20. package/dist/errors/timeout-error.d.ts +10 -10
  21. package/dist/errors/timeout-error.js +34 -15
  22. package/dist/errors/timeout-error.js.map +1 -6
  23. package/dist/extensions/arr-ext.d.ts +2 -2
  24. package/dist/extensions/arr-ext.helpers.d.ts +10 -10
  25. package/dist/extensions/arr-ext.helpers.js +112 -89
  26. package/dist/extensions/arr-ext.helpers.js.map +1 -6
  27. package/dist/extensions/arr-ext.js +458 -422
  28. package/dist/extensions/arr-ext.js.map +1 -6
  29. package/dist/extensions/arr-ext.types.d.ts +57 -57
  30. package/dist/extensions/arr-ext.types.d.ts.map +1 -1
  31. package/dist/extensions/arr-ext.types.js +6 -1
  32. package/dist/extensions/arr-ext.types.js.map +1 -6
  33. package/dist/extensions/map-ext.d.ts +16 -16
  34. package/dist/extensions/map-ext.js +27 -22
  35. package/dist/extensions/map-ext.js.map +1 -6
  36. package/dist/extensions/set-ext.d.ts +11 -11
  37. package/dist/extensions/set-ext.js +32 -25
  38. package/dist/extensions/set-ext.js.map +1 -6
  39. package/dist/features/debounce-queue.d.ts +17 -17
  40. package/dist/features/debounce-queue.js +98 -70
  41. package/dist/features/debounce-queue.js.map +1 -6
  42. package/dist/features/event-emitter.d.ts +20 -20
  43. package/dist/features/event-emitter.js +101 -78
  44. package/dist/features/event-emitter.js.map +1 -6
  45. package/dist/features/serial-queue.d.ts +11 -11
  46. package/dist/features/serial-queue.js +78 -57
  47. package/dist/features/serial-queue.js.map +1 -6
  48. package/dist/globals.d.ts +4 -4
  49. package/dist/globals.js +9 -1
  50. package/dist/globals.js.map +1 -6
  51. package/dist/index.js +28 -27
  52. package/dist/index.js.map +1 -6
  53. package/dist/types/date-only.d.ts +64 -64
  54. package/dist/types/date-only.d.ts.map +1 -1
  55. package/dist/types/date-only.js +263 -252
  56. package/dist/types/date-only.js.map +1 -6
  57. package/dist/types/date-time.d.ts +36 -36
  58. package/dist/types/date-time.d.ts.map +1 -1
  59. package/dist/types/date-time.js +196 -288
  60. package/dist/types/date-time.js.map +1 -6
  61. package/dist/types/lazy-gc-map.d.ts +26 -26
  62. package/dist/types/lazy-gc-map.d.ts.map +1 -1
  63. package/dist/types/lazy-gc-map.js +202 -159
  64. package/dist/types/lazy-gc-map.js.map +1 -6
  65. package/dist/types/time.d.ts +23 -23
  66. package/dist/types/time.d.ts.map +1 -1
  67. package/dist/types/time.js +169 -158
  68. package/dist/types/time.js.map +1 -6
  69. package/dist/types/uuid.d.ts +11 -11
  70. package/dist/types/uuid.d.ts.map +1 -1
  71. package/dist/types/uuid.js +95 -70
  72. package/dist/types/uuid.js.map +1 -6
  73. package/dist/utils/bytes.d.ts +17 -17
  74. package/dist/utils/bytes.js +137 -81
  75. package/dist/utils/bytes.js.map +1 -6
  76. package/dist/utils/date-format.d.ts +40 -40
  77. package/dist/utils/date-format.js +187 -101
  78. package/dist/utils/date-format.js.map +1 -6
  79. package/dist/utils/error.d.ts +4 -4
  80. package/dist/utils/error.js +11 -6
  81. package/dist/utils/error.js.map +1 -6
  82. package/dist/utils/json.d.ts +19 -19
  83. package/dist/utils/json.js +187 -135
  84. package/dist/utils/json.js.map +1 -6
  85. package/dist/utils/num.d.ts +20 -20
  86. package/dist/utils/num.js +76 -34
  87. package/dist/utils/num.js.map +1 -6
  88. package/dist/utils/obj.d.ts +111 -111
  89. package/dist/utils/obj.d.ts.map +1 -1
  90. package/dist/utils/obj.js +706 -496
  91. package/dist/utils/obj.js.map +1 -6
  92. package/dist/utils/path.d.ts +10 -10
  93. package/dist/utils/path.js +35 -18
  94. package/dist/utils/path.js.map +1 -6
  95. package/dist/utils/primitive.d.ts +5 -5
  96. package/dist/utils/primitive.js +34 -14
  97. package/dist/utils/primitive.js.map +1 -6
  98. package/dist/utils/str.d.ts +38 -38
  99. package/dist/utils/str.js +217 -113
  100. package/dist/utils/str.js.map +1 -6
  101. package/dist/utils/template-strings.d.ts +26 -26
  102. package/dist/utils/template-strings.js +113 -40
  103. package/dist/utils/template-strings.js.map +1 -6
  104. package/dist/utils/transferable.d.ts +18 -18
  105. package/dist/utils/transferable.js +218 -151
  106. package/dist/utils/transferable.js.map +1 -6
  107. package/dist/utils/wait.d.ts +9 -9
  108. package/dist/utils/wait.js +30 -15
  109. package/dist/utils/wait.js.map +1 -6
  110. package/dist/utils/xml.d.ts +13 -13
  111. package/dist/utils/xml.js +84 -46
  112. package/dist/utils/xml.js.map +1 -6
  113. package/dist/utils/zip.d.ts +22 -22
  114. package/dist/utils/zip.js +172 -148
  115. package/dist/utils/zip.js.map +1 -6
  116. package/docs/array-extensions.md +430 -0
  117. package/docs/env.md +52 -0
  118. package/docs/errors.md +41 -56
  119. package/docs/features.md +82 -97
  120. package/docs/type-utilities.md +91 -0
  121. package/docs/types.md +221 -201
  122. package/docs/utils.md +319 -435
  123. package/package.json +7 -5
  124. package/src/common.types.ts +14 -14
  125. package/src/env.ts +12 -3
  126. package/src/errors/argument-error.ts +15 -15
  127. package/src/errors/not-implemented-error.ts +9 -9
  128. package/src/errors/sd-error.ts +12 -12
  129. package/src/errors/timeout-error.ts +12 -12
  130. package/src/extensions/arr-ext.helpers.ts +16 -16
  131. package/src/extensions/arr-ext.ts +35 -35
  132. package/src/extensions/arr-ext.types.ts +57 -57
  133. package/src/extensions/map-ext.ts +16 -16
  134. package/src/extensions/set-ext.ts +11 -11
  135. package/src/features/debounce-queue.ts +23 -23
  136. package/src/features/event-emitter.ts +25 -25
  137. package/src/features/serial-queue.ts +13 -13
  138. package/src/globals.ts +4 -4
  139. package/src/index.ts +5 -5
  140. package/src/types/date-only.ts +84 -83
  141. package/src/types/date-time.ts +43 -42
  142. package/src/types/lazy-gc-map.ts +44 -44
  143. package/src/types/time.ts +29 -29
  144. package/src/types/uuid.ts +15 -15
  145. package/src/utils/bytes.ts +35 -35
  146. package/src/utils/date-format.ts +59 -59
  147. package/src/utils/error.ts +4 -4
  148. package/src/utils/json.ts +41 -41
  149. package/src/utils/num.ts +20 -20
  150. package/src/utils/obj.ts +138 -138
  151. package/src/utils/path.ts +10 -10
  152. package/src/utils/primitive.ts +6 -6
  153. package/src/utils/str.ts +48 -48
  154. package/src/utils/template-strings.ts +29 -29
  155. package/src/utils/transferable.ts +38 -38
  156. package/src/utils/wait.ts +10 -10
  157. package/src/utils/xml.ts +19 -19
  158. package/src/utils/zip.ts +25 -25
  159. package/docs/extensions.md +0 -387
  160. package/tests/errors/errors.spec.ts +0 -80
  161. package/tests/extensions/array-extension.spec.ts +0 -654
  162. package/tests/extensions/map-extension.spec.ts +0 -117
  163. package/tests/extensions/set-extension.spec.ts +0 -67
  164. package/tests/types/date-only.spec.ts +0 -533
  165. package/tests/types/date-time.spec.ts +0 -246
  166. package/tests/types/lazy-gc-map.spec.ts +0 -606
  167. package/tests/types/time.spec.ts +0 -428
  168. package/tests/types/uuid.spec.ts +0 -74
  169. package/tests/utils/bytes-utils.spec.ts +0 -197
  170. package/tests/utils/date-format.spec.ts +0 -350
  171. package/tests/utils/debounce-queue.spec.ts +0 -226
  172. package/tests/utils/json.spec.ts +0 -400
  173. package/tests/utils/number.spec.ts +0 -136
  174. package/tests/utils/object.spec.ts +0 -810
  175. package/tests/utils/path.spec.ts +0 -70
  176. package/tests/utils/primitive.spec.ts +0 -43
  177. package/tests/utils/sd-event-emitter.spec.ts +0 -189
  178. package/tests/utils/serial-queue.spec.ts +0 -305
  179. package/tests/utils/string.spec.ts +0 -265
  180. package/tests/utils/template-strings.spec.ts +0 -48
  181. package/tests/utils/transferable.spec.ts +0 -639
  182. package/tests/utils/wait.spec.ts +0 -123
  183. package/tests/utils/xml.spec.ts +0 -146
  184. package/tests/utils/zip.spec.ts +0 -221
package/dist/utils/str.js CHANGED
@@ -1,128 +1,232 @@
1
+ /**
2
+ * 문자열 유틸리티 함수
3
+ */
4
+ //#region 한국어 조사 처리
5
+ // 한국어 조사 매핑 테이블 (모듈 로드 시 한 번만 생성)
1
6
  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" }
7
+ 을: { t: "", f: "" },
8
+ 은: { t: "", f: "" },
9
+ 이: { t: "", f: "" },
10
+ 와: { t: "", f: "" },
11
+ 랑: { t: "이랑", f: "" },
12
+ 로: { t: "으로", f: "" },
13
+ 라: { t: "이라", f: "" },
9
14
  };
10
- function getKoreanSuffix(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;
15
+ /**
16
+ * 받침 유무에 따라 적절한 한국어 조사 반환
17
+ * @param text 확인할 텍스트
18
+ * @param type 조사 타입
19
+ * - `"을"`: 을/를 (목적격 조사)
20
+ * - `"은"`: 은/는 (주격 보조사)
21
+ * - `"이"`: 이/가 (주격 조사)
22
+ * - `"와"`: 과/와 (접속 조사)
23
+ * - `"랑"`: 이랑/랑 (접속 조사)
24
+ * - `"로"`: 으로/로 (도구격 조사)
25
+ * - `"라"`: 이라/라 (서술격 조사)
26
+ *
27
+ * @example
28
+ * getKoreanSuffix("Apple", "을") // "를"
29
+ * getKoreanSuffix("책", "이") // "이"
30
+ */
31
+ export function getKoreanSuffix(text, type) {
32
+ const table = suffixTable;
33
+ if (text.length === 0) {
34
+ return table[type].f;
35
+ }
36
+ const lastCharCode = text.charCodeAt(text.length - 1);
37
+ // 한글 범위 확인 (0xAC00 ~ 0xD7A3)
38
+ if (lastCharCode < 0xac00 || lastCharCode > 0xd7a3) {
39
+ return table[type].f;
40
+ }
41
+ // 받침(종성) 존재 여부 판단
42
+ const jongseongIndex = (lastCharCode - 0xac00) % 28;
43
+ const hasLast = jongseongIndex !== 0;
44
+ // "로" 조사 특수 처리: 받침이 ㄹ (종성 인덱스 8)이면 "로" 사용
45
+ if (type === "로" && jongseongIndex === 8) {
46
+ return table[type].f;
47
+ }
48
+ return hasLast ? table[type].t : table[type].f;
25
49
  }
50
+ //#endregion
51
+ //#region 전각 → 반각 변환
52
+ // 전각 → 반각 매핑 테이블 (모듈 로드 시 한 번만 생성)
26
53
  const fullWidthCharMap = {
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": "("
54
+ "": "A",
55
+ "": "B",
56
+ "": "C",
57
+ "": "D",
58
+ "": "E",
59
+ "": "F",
60
+ "": "G",
61
+ "": "H",
62
+ "": "I",
63
+ "": "J",
64
+ "": "K",
65
+ "": "L",
66
+ "": "M",
67
+ "": "N",
68
+ "": "O",
69
+ "": "P",
70
+ "": "Q",
71
+ "": "R",
72
+ "": "S",
73
+ "": "T",
74
+ "": "U",
75
+ "": "V",
76
+ "": "W",
77
+ "": "X",
78
+ "": "Y",
79
+ "": "Z",
80
+ "": "a",
81
+ "": "b",
82
+ "": "c",
83
+ "": "d",
84
+ "": "e",
85
+ "": "f",
86
+ "": "g",
87
+ "": "h",
88
+ "": "i",
89
+ "": "j",
90
+ "": "k",
91
+ "": "l",
92
+ "": "m",
93
+ "": "n",
94
+ "": "o",
95
+ "": "p",
96
+ "": "q",
97
+ "": "r",
98
+ "": "s",
99
+ "": "t",
100
+ "": "u",
101
+ "": "v",
102
+ "": "w",
103
+ "": "x",
104
+ "": "y",
105
+ "": "z",
106
+ "": "0",
107
+ "": "1",
108
+ "": "2",
109
+ "": "3",
110
+ "": "4",
111
+ "": "5",
112
+ "": "6",
113
+ "": "7",
114
+ "": "8",
115
+ "": "9",
116
+ " ": " ",
117
+ "": ")",
118
+ "": "(",
92
119
  };
120
+ // 정규식도 한 번만 생성
93
121
  const fullWidthCharRegex = new RegExp(`[${Object.keys(fullWidthCharMap).join("")}]`, "g");
94
- function replaceFullWidth(str) {
95
- return str.replace(fullWidthCharRegex, (char) => fullWidthCharMap[char] ?? char);
122
+ /**
123
+ * 전각 문자를 반각 문자로 변환
124
+ *
125
+ * 변환 대상:
126
+ * - 전각 대문자 (A-Z → A-Z)
127
+ * - 전각 소문자 (a-z → a-z)
128
+ * - 전각 숫자 (0-9 → 0-9)
129
+ * - 전각 공백 (  → 일반 공백)
130
+ * - 전각 괄호 (() → ())
131
+ *
132
+ * @example
133
+ * replaceFullWidth("A123") // "A123"
134
+ * replaceFullWidth("(株)") // "(株)"
135
+ */
136
+ export function replaceFullWidth(str) {
137
+ return str.replace(fullWidthCharRegex, (char) => fullWidthCharMap[char] ?? char);
96
138
  }
97
- function toPascalCase(str) {
98
- return str.replace(/[-._][a-z]/g, (m) => m[1].toUpperCase()).replace(/^[a-z]/, (m) => m.toUpperCase());
139
+ //#endregion
140
+ //#region 대소문자 변환
141
+ /**
142
+ * PascalCase로 변환
143
+ * @example "hello-world" → "HelloWorld"
144
+ * @example "hello_world" → "HelloWorld"
145
+ * @example "hello.world" → "HelloWorld"
146
+ */
147
+ export function toPascalCase(str) {
148
+ return str
149
+ .replace(/[-._][a-z]/g, (m) => m[1].toUpperCase())
150
+ .replace(/^[a-z]/, (m) => m.toUpperCase());
99
151
  }
100
- function toCamelCase(str) {
101
- return str.replace(/[-._][a-z]/g, (m) => m[1].toUpperCase()).replace(/^[A-Z]/, (m) => m.toLowerCase());
152
+ /**
153
+ * camelCase로 변환
154
+ * @example "hello-world" → "helloWorld"
155
+ * @example "hello_world" → "helloWorld"
156
+ * @example "HelloWorld" → "helloWorld"
157
+ */
158
+ export function toCamelCase(str) {
159
+ return str
160
+ .replace(/[-._][a-z]/g, (m) => m[1].toUpperCase())
161
+ .replace(/^[A-Z]/, (m) => m.toLowerCase());
102
162
  }
103
- function toKebabCase(str) {
104
- return toCaseWithSeparator(str, "-");
163
+ /**
164
+ * kebab-case로 변환
165
+ *
166
+ * @example "HelloWorld" → "hello-world"
167
+ * @example "helloWorld" → "hello-world"
168
+ * @example "hello_world" → "hello_world" (소문자만이면 변환 없음)
169
+ * @example "Hello_World" → "hello-_world" (기존 구분자 유지)
170
+ * @example "Hello-World" → "hello--world" (기존 구분자 유지)
171
+ * @example "XMLParser" → "x-m-l-parser" (연속 대문자 분리)
172
+ */
173
+ export function toKebabCase(str) {
174
+ return toCaseWithSeparator(str, "-");
105
175
  }
106
- function toSnakeCase(str) {
107
- return toCaseWithSeparator(str, "_");
176
+ /**
177
+ * snake_case로 변환
178
+ *
179
+ * @example "HelloWorld" → "hello_world"
180
+ * @example "helloWorld" → "hello_world"
181
+ * @example "hello-world" → "hello-world" (소문자만이면 변환 없음)
182
+ * @example "Hello-World" → "hello_-world" (기존 구분자 유지)
183
+ * @example "Hello_World" → "hello__world" (기존 구분자 유지)
184
+ * @example "XMLParser" → "x_m_l_parser" (연속 대문자 분리)
185
+ */
186
+ export function toSnakeCase(str) {
187
+ return toCaseWithSeparator(str, "_");
108
188
  }
109
189
  function toCaseWithSeparator(str, separator) {
110
- return str.replace(/^[A-Z]/, (m) => m.toLowerCase()).replace(/[-_]?[A-Z]/g, (m) => separator + m.toLowerCase());
190
+ return str
191
+ .replace(/^[A-Z]/, (m) => m.toLowerCase())
192
+ .replace(/[-_]?[A-Z]/g, (m) => separator + m.toLowerCase());
111
193
  }
112
- function isNullOrEmpty(str) {
113
- return str == null || str === "";
194
+ //#endregion
195
+ //#region 기타
196
+ /**
197
+ * 문자열이 undefined 또는 빈 문자열인지 검사 (타입 가드)
198
+ *
199
+ * @param str 검사할 문자열
200
+ * @returns undefined, null, 또는 빈 문자열이면 true
201
+ *
202
+ * @example
203
+ * const name: string | undefined = getValue();
204
+ * if (isNullOrEmpty(name)) {
205
+ * // name: "" | undefined
206
+ * console.log("Name is empty");
207
+ * } else {
208
+ * // name: string (non-empty string)
209
+ * console.log(`Name: ${name}`);
210
+ * }
211
+ */
212
+ export function isNullOrEmpty(str) {
213
+ return str == null || str === "";
114
214
  }
115
- function insert(str, index, insertString) {
116
- return str.substring(0, index) + insertString + str.substring(index);
215
+ /**
216
+ * 특정 위치에 문자열 삽입
217
+ *
218
+ * @param str 원본 문자열
219
+ * @param index 삽입할 위치 (0부터 시작)
220
+ * @param insertString 삽입할 문자열
221
+ * @returns 삽입이 적용된 새 문자열
222
+ *
223
+ * @example
224
+ * insert("Hello World", 5, ","); // "Hello, World"
225
+ * insert("abc", 0, "X"); // "Xabc"
226
+ * insert("abc", 3, "X"); // "abcX"
227
+ */
228
+ export function insert(str, index, insertString) {
229
+ return str.substring(0, index) + insertString + str.substring(index);
117
230
  }
118
- export {
119
- getKoreanSuffix,
120
- insert,
121
- isNullOrEmpty,
122
- replaceFullWidth,
123
- toCamelCase,
124
- toKebabCase,
125
- toPascalCase,
126
- toSnakeCase
127
- };
128
- //# sourceMappingURL=str.js.map
231
+ //#endregion
232
+ //# sourceMappingURL=str.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/str.ts"],
4
- "mappings": "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",
5
- "names": []
6
- }
1
+ {"version":3,"file":"str.js","sourceRoot":"","sources":["../../src/utils/str.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  /**
2
- * Template string tag functions
3
- * For IDE code highlighting support (actual behavior is string concatenation + indent normalization)
2
+ * 템플릿 문자열 태그 함수
3
+ * IDE 코드 하이라이팅 지원용 (실제 동작은 문자열 결합 + 들여쓰기 정규화)
4
4
  */
5
5
  /**
6
- * Template tag for JavaScript code highlighting
7
- * @param strings Template string array
8
- * @param values Interpolated values
9
- * @returns String with normalized indentation
6
+ * JavaScript 코드 하이라이팅용 템플릿 태그
7
+ * @param strings 템플릿 문자열 배열
8
+ * @param values 보간된 값들
9
+ * @returns 들여쓰기가 정규화된 문자열
10
10
  * @example
11
11
  * const code = js`
12
12
  * function hello() {
@@ -16,10 +16,10 @@
16
16
  */
17
17
  export declare function js(strings: TemplateStringsArray, ...values: unknown[]): string;
18
18
  /**
19
- * Template tag for TypeScript code highlighting
20
- * @param strings Template string array
21
- * @param values Interpolated values
22
- * @returns String with normalized indentation
19
+ * TypeScript 코드 하이라이팅용 템플릿 태그
20
+ * @param strings 템플릿 문자열 배열
21
+ * @param values 보간된 값들
22
+ * @returns 들여쓰기가 정규화된 문자열
23
23
  * @example
24
24
  * const code = ts`
25
25
  * interface User {
@@ -30,10 +30,10 @@ export declare function js(strings: TemplateStringsArray, ...values: unknown[]):
30
30
  */
31
31
  export declare function ts(strings: TemplateStringsArray, ...values: unknown[]): string;
32
32
  /**
33
- * Template tag for HTML markup highlighting
34
- * @param strings Template string array
35
- * @param values Interpolated values
36
- * @returns String with normalized indentation
33
+ * HTML 마크업 하이라이팅용 템플릿 태그
34
+ * @param strings 템플릿 문자열 배열
35
+ * @param values 보간된 값들
36
+ * @returns 들여쓰기가 정규화된 문자열
37
37
  * @example
38
38
  * const markup = html`
39
39
  * <div class="container">
@@ -43,10 +43,10 @@ export declare function ts(strings: TemplateStringsArray, ...values: unknown[]):
43
43
  */
44
44
  export declare function html(strings: TemplateStringsArray, ...values: unknown[]): string;
45
45
  /**
46
- * Template tag for MSSQL T-SQL highlighting
47
- * @param strings Template string array
48
- * @param values Interpolated values
49
- * @returns String with normalized indentation
46
+ * MSSQL T-SQL 하이라이팅용 템플릿 태그
47
+ * @param strings 템플릿 문자열 배열
48
+ * @param values 보간된 값들
49
+ * @returns 들여쓰기가 정규화된 문자열
50
50
  * @example
51
51
  * const query = tsql`
52
52
  * SELECT TOP 10 *
@@ -56,10 +56,10 @@ export declare function html(strings: TemplateStringsArray, ...values: unknown[]
56
56
  */
57
57
  export declare function tsql(strings: TemplateStringsArray, ...values: unknown[]): string;
58
58
  /**
59
- * Template tag for MySQL SQL highlighting
60
- * @param strings Template string array
61
- * @param values Interpolated values
62
- * @returns String with normalized indentation
59
+ * MySQL SQL 하이라이팅용 템플릿 태그
60
+ * @param strings 템플릿 문자열 배열
61
+ * @param values 보간된 값들
62
+ * @returns 들여쓰기가 정규화된 문자열
63
63
  * @example
64
64
  * const query = mysql`
65
65
  * SELECT *
@@ -69,10 +69,10 @@ export declare function tsql(strings: TemplateStringsArray, ...values: unknown[]
69
69
  */
70
70
  export declare function mysql(strings: TemplateStringsArray, ...values: unknown[]): string;
71
71
  /**
72
- * Template tag for PostgreSQL SQL highlighting
73
- * @param strings Template string array
74
- * @param values Interpolated values
75
- * @returns String with normalized indentation
72
+ * PostgreSQL SQL 하이라이팅용 템플릿 태그
73
+ * @param strings 템플릿 문자열 배열
74
+ * @param values 보간된 값들
75
+ * @returns 들여쓰기가 정규화된 문자열
76
76
  * @example
77
77
  * const query = pgsql`
78
78
  * SELECT *
@@ -1,49 +1,122 @@
1
- function js(strings, ...values) {
2
- return _combine(strings, values);
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 function js(strings, ...values) {
18
+ return _combine(strings, values);
3
19
  }
4
- function ts(strings, ...values) {
5
- return _combine(strings, values);
20
+ /**
21
+ * TypeScript 코드 하이라이팅용 템플릿 태그
22
+ * @param strings 템플릿 문자열 배열
23
+ * @param values 보간된 값들
24
+ * @returns 들여쓰기가 정규화된 문자열
25
+ * @example
26
+ * const code = ts`
27
+ * interface User {
28
+ * name: string;
29
+ * age: number;
30
+ * }
31
+ * `;
32
+ */
33
+ export function ts(strings, ...values) {
34
+ return _combine(strings, values);
6
35
  }
7
- function html(strings, ...values) {
8
- return _combine(strings, values);
36
+ /**
37
+ * HTML 마크업 하이라이팅용 템플릿 태그
38
+ * @param strings 템플릿 문자열 배열
39
+ * @param values 보간된 값들
40
+ * @returns 들여쓰기가 정규화된 문자열
41
+ * @example
42
+ * const markup = html`
43
+ * <div class="container">
44
+ * <span>${name}</span>
45
+ * </div>
46
+ * `;
47
+ */
48
+ export function html(strings, ...values) {
49
+ return _combine(strings, values);
9
50
  }
10
- function tsql(strings, ...values) {
11
- return _combine(strings, values);
51
+ /**
52
+ * MSSQL T-SQL 하이라이팅용 템플릿 태그
53
+ * @param strings 템플릿 문자열 배열
54
+ * @param values 보간된 값들
55
+ * @returns 들여쓰기가 정규화된 문자열
56
+ * @example
57
+ * const query = tsql`
58
+ * SELECT TOP 10 *
59
+ * FROM Users
60
+ * WHERE Name LIKE '%${keyword}%'
61
+ * `;
62
+ */
63
+ export function tsql(strings, ...values) {
64
+ return _combine(strings, values);
12
65
  }
13
- function mysql(strings, ...values) {
14
- return _combine(strings, values);
66
+ /**
67
+ * MySQL SQL 하이라이팅용 템플릿 태그
68
+ * @param strings 템플릿 문자열 배열
69
+ * @param values 보간된 값들
70
+ * @returns 들여쓰기가 정규화된 문자열
71
+ * @example
72
+ * const query = mysql`
73
+ * SELECT *
74
+ * FROM users
75
+ * LIMIT 10
76
+ * `;
77
+ */
78
+ export function mysql(strings, ...values) {
79
+ return _combine(strings, values);
15
80
  }
16
- function pgsql(strings, ...values) {
17
- return _combine(strings, values);
81
+ /**
82
+ * PostgreSQL SQL 하이라이팅용 템플릿 태그
83
+ * @param strings 템플릿 문자열 배열
84
+ * @param values 보간된 값들
85
+ * @returns 들여쓰기가 정규화된 문자열
86
+ * @example
87
+ * const query = pgsql`
88
+ * SELECT *
89
+ * FROM users
90
+ * OFFSET 0 LIMIT 10
91
+ * `;
92
+ */
93
+ export function pgsql(strings, ...values) {
94
+ return _combine(strings, values);
18
95
  }
19
96
  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);
97
+ const raw = strings.reduce((result, str, i) => {
98
+ const value = values[i] !== undefined ? String(values[i]) : "";
99
+ return result + str + value;
100
+ }, "");
101
+ return _trimIndent(raw);
25
102
  }
26
103
  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
104
+ const lines = text.split("\n");
105
+ // 앞뒤 제거 (연속된 줄 모두 제거)
106
+ while (lines.length > 0 && lines[0].trim() === "") {
107
+ lines.shift();
108
+ }
109
+ while (lines.length > 0 && lines[lines.length - 1].trim() === "") {
110
+ lines.pop();
111
+ }
112
+ // 최소 들여쓰기 계산
113
+ const minIndent = lines
114
+ .filter((line) => line.trim() !== "")
115
+ .reduce((min, line) => {
116
+ const indent = line.match(/^ */)?.[0].length ?? 0;
117
+ return Math.min(min, indent);
118
+ }, Infinity);
119
+ // 들여쓰기 제거
120
+ return lines.map((line) => (line.trim() === "" ? "" : line.slice(minIndent))).join("\n");
121
+ }
122
+ //# sourceMappingURL=template-strings.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/template-strings.ts"],
4
- "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;",
5
- "names": []
6
- }
1
+ {"version":3,"file":"template-strings.js","sourceRoot":"","sources":["../../src/utils/template-strings.ts"],"names":[],"mappings":"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"}