@simplysm/sd-cli 13.0.68 → 13.0.70

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 (201) hide show
  1. package/README.md +10 -957
  2. package/dist/builders/BaseBuilder.d.ts +23 -23
  3. package/dist/builders/BaseBuilder.d.ts.map +1 -1
  4. package/dist/builders/BaseBuilder.js +15 -15
  5. package/dist/builders/DtsBuilder.d.ts +4 -4
  6. package/dist/builders/DtsBuilder.js +1 -1
  7. package/dist/builders/LibraryBuilder.d.ts +3 -3
  8. package/dist/builders/types.d.ts +10 -10
  9. package/dist/capacitor/capacitor.d.ts +36 -36
  10. package/dist/capacitor/capacitor.js +63 -63
  11. package/dist/capacitor/capacitor.js.map +1 -1
  12. package/dist/commands/add-client.d.ts +8 -8
  13. package/dist/commands/add-client.js +15 -15
  14. package/dist/commands/add-client.js.map +1 -1
  15. package/dist/commands/add-server.d.ts +9 -9
  16. package/dist/commands/add-server.js +13 -13
  17. package/dist/commands/add-server.js.map +1 -1
  18. package/dist/commands/build.d.ts +9 -9
  19. package/dist/commands/check.js +3 -3
  20. package/dist/commands/check.js.map +1 -1
  21. package/dist/commands/dev.d.ts +9 -9
  22. package/dist/commands/device.d.ts +9 -9
  23. package/dist/commands/device.d.ts.map +1 -1
  24. package/dist/commands/device.js +17 -17
  25. package/dist/commands/device.js.map +1 -1
  26. package/dist/commands/init.d.ts +6 -6
  27. package/dist/commands/init.js +12 -12
  28. package/dist/commands/init.js.map +1 -1
  29. package/dist/commands/lint.d.ts +23 -23
  30. package/dist/commands/lint.d.ts.map +1 -1
  31. package/dist/commands/lint.js +25 -25
  32. package/dist/commands/lint.js.map +1 -1
  33. package/dist/commands/publish.d.ts +13 -13
  34. package/dist/commands/publish.d.ts.map +1 -1
  35. package/dist/commands/publish.js +61 -61
  36. package/dist/commands/publish.js.map +1 -1
  37. package/dist/commands/replace-deps.d.ts +3 -3
  38. package/dist/commands/replace-deps.d.ts.map +1 -1
  39. package/dist/commands/replace-deps.js +1 -1
  40. package/dist/commands/replace-deps.js.map +1 -1
  41. package/dist/commands/typecheck.d.ts +20 -20
  42. package/dist/commands/typecheck.d.ts.map +1 -1
  43. package/dist/commands/typecheck.js +20 -20
  44. package/dist/commands/typecheck.js.map +1 -1
  45. package/dist/commands/watch.d.ts +7 -7
  46. package/dist/electron/electron.d.ts +27 -27
  47. package/dist/electron/electron.js +32 -32
  48. package/dist/electron/electron.js.map +1 -1
  49. package/dist/infra/ResultCollector.d.ts +9 -9
  50. package/dist/infra/ResultCollector.js +5 -5
  51. package/dist/infra/SignalHandler.d.ts +7 -7
  52. package/dist/infra/SignalHandler.js +4 -4
  53. package/dist/infra/WorkerManager.d.ts +14 -14
  54. package/dist/infra/WorkerManager.js +11 -11
  55. package/dist/orchestrators/BuildOrchestrator.d.ts +19 -19
  56. package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
  57. package/dist/orchestrators/BuildOrchestrator.js +26 -26
  58. package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
  59. package/dist/orchestrators/DevOrchestrator.d.ts +25 -25
  60. package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -1
  61. package/dist/orchestrators/DevOrchestrator.js +30 -30
  62. package/dist/orchestrators/DevOrchestrator.js.map +1 -1
  63. package/dist/orchestrators/WatchOrchestrator.d.ts +13 -13
  64. package/dist/orchestrators/WatchOrchestrator.js +17 -17
  65. package/dist/orchestrators/WatchOrchestrator.js.map +1 -1
  66. package/dist/sd-cli-entry.d.ts +2 -2
  67. package/dist/sd-cli-entry.js +38 -38
  68. package/dist/sd-cli-entry.js.map +1 -1
  69. package/dist/sd-cli.d.ts +2 -2
  70. package/dist/sd-cli.js +1 -1
  71. package/dist/sd-cli.js.map +1 -1
  72. package/dist/sd-config.types.d.ts +84 -84
  73. package/dist/sd-config.types.d.ts.map +1 -1
  74. package/dist/utils/build-env.d.ts +1 -1
  75. package/dist/utils/config-editor.d.ts +5 -5
  76. package/dist/utils/config-editor.js +2 -2
  77. package/dist/utils/config-editor.js.map +1 -1
  78. package/dist/utils/copy-public.d.ts +9 -9
  79. package/dist/utils/copy-src.d.ts +9 -9
  80. package/dist/utils/esbuild-config.d.ts +30 -30
  81. package/dist/utils/esbuild-config.d.ts.map +1 -1
  82. package/dist/utils/output-utils.d.ts +6 -6
  83. package/dist/utils/package-utils.d.ts +6 -6
  84. package/dist/utils/package-utils.js +1 -1
  85. package/dist/utils/package-utils.js.map +1 -1
  86. package/dist/utils/rebuild-manager.js +3 -3
  87. package/dist/utils/rebuild-manager.js.map +1 -1
  88. package/dist/utils/replace-deps.d.ts +25 -25
  89. package/dist/utils/replace-deps.js +3 -3
  90. package/dist/utils/replace-deps.js.map +1 -1
  91. package/dist/utils/sd-config.d.ts +3 -3
  92. package/dist/utils/sd-config.js +3 -3
  93. package/dist/utils/sd-config.js.map +1 -1
  94. package/dist/utils/tailwind-config-deps.d.ts +3 -3
  95. package/dist/utils/template.d.ts +8 -8
  96. package/dist/utils/tsconfig.d.ts +16 -16
  97. package/dist/utils/tsconfig.js +2 -2
  98. package/dist/utils/tsconfig.js.map +1 -1
  99. package/dist/utils/typecheck-serialization.d.ts +8 -8
  100. package/dist/utils/vite-config.d.ts +8 -8
  101. package/dist/utils/vite-config.d.ts.map +1 -1
  102. package/dist/utils/vite-config.js +3 -3
  103. package/dist/utils/worker-events.d.ts +12 -12
  104. package/dist/utils/worker-events.d.ts.map +1 -1
  105. package/dist/utils/worker-utils.d.ts +3 -3
  106. package/dist/utils/worker-utils.js +2 -2
  107. package/dist/utils/worker-utils.js.map +1 -1
  108. package/dist/workers/client.worker.d.ts +14 -14
  109. package/dist/workers/client.worker.d.ts.map +1 -1
  110. package/dist/workers/client.worker.js +1 -1
  111. package/dist/workers/client.worker.js.map +1 -1
  112. package/dist/workers/dts.worker.d.ts +13 -13
  113. package/dist/workers/dts.worker.d.ts.map +1 -1
  114. package/dist/workers/dts.worker.js +3 -3
  115. package/dist/workers/dts.worker.js.map +1 -1
  116. package/dist/workers/library.worker.d.ts +12 -12
  117. package/dist/workers/library.worker.js +1 -1
  118. package/dist/workers/library.worker.js.map +1 -1
  119. package/dist/workers/lint.worker.d.ts +1 -1
  120. package/dist/workers/server-runtime.worker.d.ts +6 -6
  121. package/dist/workers/server-runtime.worker.js +6 -6
  122. package/dist/workers/server-runtime.worker.js.map +1 -1
  123. package/dist/workers/server.worker.d.ts +20 -20
  124. package/dist/workers/server.worker.d.ts.map +1 -1
  125. package/dist/workers/server.worker.js +6 -6
  126. package/dist/workers/server.worker.js.map +1 -1
  127. package/package.json +8 -7
  128. package/src/builders/BaseBuilder.ts +33 -33
  129. package/src/builders/DtsBuilder.ts +5 -5
  130. package/src/builders/LibraryBuilder.ts +9 -9
  131. package/src/builders/types.ts +10 -10
  132. package/src/capacitor/capacitor.ts +119 -119
  133. package/src/commands/add-client.ts +31 -31
  134. package/src/commands/add-server.ts +34 -34
  135. package/src/commands/build.ts +9 -9
  136. package/src/commands/check.ts +5 -5
  137. package/src/commands/dev.ts +9 -9
  138. package/src/commands/device.ts +30 -30
  139. package/src/commands/init.ts +25 -25
  140. package/src/commands/lint.ts +64 -64
  141. package/src/commands/publish.ts +139 -139
  142. package/src/commands/replace-deps.ts +4 -4
  143. package/src/commands/typecheck.ts +74 -74
  144. package/src/commands/watch.ts +7 -7
  145. package/src/electron/electron.ts +51 -51
  146. package/src/infra/ResultCollector.ts +9 -9
  147. package/src/infra/SignalHandler.ts +7 -7
  148. package/src/infra/WorkerManager.ts +14 -14
  149. package/src/orchestrators/BuildOrchestrator.ts +76 -76
  150. package/src/orchestrators/DevOrchestrator.ts +88 -88
  151. package/src/orchestrators/WatchOrchestrator.ts +39 -39
  152. package/src/sd-cli-entry.ts +43 -43
  153. package/src/sd-cli.ts +15 -15
  154. package/src/sd-config.types.ts +85 -85
  155. package/src/utils/build-env.ts +1 -1
  156. package/src/utils/config-editor.ts +19 -19
  157. package/src/utils/copy-public.ts +17 -17
  158. package/src/utils/copy-src.ts +11 -11
  159. package/src/utils/esbuild-config.ts +33 -33
  160. package/src/utils/output-utils.ts +11 -11
  161. package/src/utils/package-utils.ts +12 -12
  162. package/src/utils/rebuild-manager.ts +3 -3
  163. package/src/utils/replace-deps.ts +361 -361
  164. package/src/utils/sd-config.ts +44 -44
  165. package/src/utils/tailwind-config-deps.ts +98 -98
  166. package/src/utils/template.ts +56 -56
  167. package/src/utils/tsconfig.ts +127 -127
  168. package/src/utils/typecheck-serialization.ts +86 -86
  169. package/src/utils/vite-config.ts +341 -341
  170. package/src/utils/worker-events.ts +16 -16
  171. package/src/utils/worker-utils.ts +45 -45
  172. package/src/workers/client.worker.ts +34 -34
  173. package/src/workers/dts.worker.ts +467 -467
  174. package/src/workers/library.worker.ts +314 -314
  175. package/src/workers/lint.worker.ts +16 -16
  176. package/src/workers/server-runtime.worker.ts +157 -157
  177. package/src/workers/server.worker.ts +572 -572
  178. package/templates/add-client/__CLIENT__/package.json.hbs +1 -1
  179. package/templates/add-server/__SERVER__/package.json.hbs +2 -2
  180. package/templates/init/package.json.hbs +3 -3
  181. package/tests/config-editor.spec.ts +160 -0
  182. package/tests/copy-src.spec.ts +50 -0
  183. package/tests/get-compiler-options-for-package.spec.ts +139 -0
  184. package/tests/get-package-source-files.spec.ts +181 -0
  185. package/tests/get-types-from-package-json.spec.ts +107 -0
  186. package/tests/infra/ResultCollector.spec.ts +39 -0
  187. package/tests/infra/SignalHandler.spec.ts +38 -0
  188. package/tests/infra/WorkerManager.spec.ts +97 -0
  189. package/tests/load-ignore-patterns.spec.ts +188 -0
  190. package/tests/load-sd-config.spec.ts +137 -0
  191. package/tests/package-utils.spec.ts +188 -0
  192. package/tests/parse-root-tsconfig.spec.ts +89 -0
  193. package/tests/replace-deps.spec.ts +308 -0
  194. package/tests/run-lint.spec.ts +415 -0
  195. package/tests/run-typecheck.spec.ts +653 -0
  196. package/tests/run-watch.spec.ts +75 -0
  197. package/tests/sd-cli.spec.ts +330 -0
  198. package/tests/tailwind-config-deps.spec.ts +30 -0
  199. package/tests/template.spec.ts +70 -0
  200. package/tests/utils/rebuild-manager.spec.ts +43 -0
  201. package/tests/write-changed-output-files.spec.ts +97 -0
@@ -6,24 +6,24 @@ import { formatBuildMessages } from "./output-utils";
6
6
 
7
7
  const workerEventsLogger = consola.withTag("sd:cli:worker-events");
8
8
 
9
- /** Worker 빌드 완료 이벤트 데이터 */
9
+ /** Worker build completion event data */
10
10
  export interface BuildEventData {
11
11
  success: boolean;
12
12
  errors?: string[];
13
13
  warnings?: string[];
14
14
  }
15
15
 
16
- /** Worker 에러 이벤트 데이터 */
16
+ /** Worker error event data */
17
17
  export interface ErrorEventData {
18
18
  message: string;
19
19
  }
20
20
 
21
- /** Worker 서버 준비 이벤트 데이터 */
21
+ /** Worker server ready event data */
22
22
  export interface ServerReadyEventData {
23
23
  port: number;
24
24
  }
25
25
 
26
- /** Server Build 완료 이벤트 데이터 */
26
+ /** Server Build completion event data */
27
27
  export interface ServerBuildEventData {
28
28
  success: boolean;
29
29
  mainJsPath: string;
@@ -32,7 +32,7 @@ export interface ServerBuildEventData {
32
32
  }
33
33
 
34
34
  /**
35
- * 기본 Worker 정보 타입
35
+ * Base Worker info type
36
36
  */
37
37
  export interface BaseWorkerInfo<TEvents extends Record<string, unknown> = Record<string, unknown>> {
38
38
  name: string;
@@ -46,7 +46,7 @@ export interface BaseWorkerInfo<TEvents extends Record<string, unknown> = Record
46
46
  }
47
47
 
48
48
  /**
49
- * Worker 이벤트 핸들러 옵션
49
+ * Worker event handler options
50
50
  */
51
51
  export interface WorkerEventHandlerOptions {
52
52
  resultKey: string;
@@ -55,13 +55,13 @@ export interface WorkerEventHandlerOptions {
55
55
  }
56
56
 
57
57
  /**
58
- * 공통 Worker 이벤트 핸들러 등록 (buildStart, build, error - serverReady 포함하지 않음)
58
+ * Register common Worker event handlers (buildStart, build, error only - serverReady not included)
59
59
  *
60
- * @param workerInfo Worker 정보
61
- * @param opts 핸들러 옵션
62
- * @param results 결과
63
- * @param rebuildManager 리빌드 매니저
64
- * @returns completeTask 함수 (결과를 저장하고 빌드 완료를 알림)
60
+ * @param workerInfo Worker info
61
+ * @param opts Handler options
62
+ * @param results Result map
63
+ * @param rebuildManager Rebuild manager
64
+ * @returns completeTask function (saves result and signals build completion)
65
65
  */
66
66
  export function registerWorkerEventHandlers<
67
67
  TEvents extends Record<string, unknown>,
@@ -79,19 +79,19 @@ export function registerWorkerEventHandlers<
79
79
  workerInfo.isInitialBuild = false;
80
80
  };
81
81
 
82
- // 빌드 시작 (리빌드 )
82
+ // Build start (on rebuild)
83
83
  workerInfo.worker.on("buildStart", () => {
84
84
  if (!workerInfo.isInitialBuild) {
85
85
  workerInfo.buildResolver = rebuildManager.registerBuild(opts.resultKey, opts.listrTitle);
86
86
  }
87
87
  });
88
88
 
89
- // 빌드 완료
89
+ // Build completion
90
90
  workerInfo.worker.on("build", (_data) => {
91
91
  const data = _data as BuildEventData;
92
92
  workerEventsLogger.debug(`[${workerInfo.name}] build: success=${String(data.success)}`);
93
93
 
94
- // warnings 출력
94
+ // Print warnings
95
95
  if (data.warnings != null && data.warnings.length > 0) {
96
96
  workerEventsLogger.warn(
97
97
  formatBuildMessages(workerInfo.name, workerInfo.config.target, data.warnings),
@@ -107,7 +107,7 @@ export function registerWorkerEventHandlers<
107
107
  });
108
108
  });
109
109
 
110
- // 에러
110
+ // Error
111
111
  workerInfo.worker.on("error", (_data) => {
112
112
  const data = _data as ErrorEventData;
113
113
  workerEventsLogger.debug(`[${workerInfo.name}] error: ${data.message}`);
@@ -1,45 +1,45 @@
1
- import type { ConsolaInstance } from "consola";
2
-
3
- /**
4
- * Register cleanup handlers for worker process shutdown signals
5
- *
6
- * Registers SIGINT and SIGTERM handlers to gracefully cleanup resources
7
- * before process exit. Both handlers execute the cleanup function and
8
- * exit with code 0.
9
- *
10
- * @param cleanup - Async cleanup function to execute on shutdown
11
- * @param logger - Consola logger instance for error logging
12
- */
13
- export function registerCleanupHandlers(
14
- cleanup: () => Promise<void>,
15
- logger: ConsolaInstance,
16
- ): void {
17
- const handleSignal = () => {
18
- cleanup()
19
- .catch((err) => {
20
- logger.error("cleanup 실패", err);
21
- })
22
- .finally(() => {
23
- process.exit(0);
24
- });
25
- };
26
-
27
- process.on("SIGTERM", handleSignal);
28
- process.on("SIGINT", handleSignal);
29
- }
30
-
31
- /**
32
- * Worker 함수의 중복 호출을 방지하는 가드를 생성한다.
33
- *
34
- * @param label - 에러 메시지에 사용할 함수명
35
- * @returns 호출 중복이면 에러를 throw하는 가드 함수
36
- */
37
- export function createOnceGuard(label: string): () => void {
38
- let called = false;
39
- return () => {
40
- if (called) {
41
- throw new Error(`${label} Worker당 번만 호출할 있습니다.`);
42
- }
43
- called = true;
44
- };
45
- }
1
+ import type { ConsolaInstance } from "consola";
2
+
3
+ /**
4
+ * Register cleanup handlers for worker process shutdown signals
5
+ *
6
+ * Registers SIGINT and SIGTERM handlers to gracefully cleanup resources
7
+ * before process exit. Both handlers execute the cleanup function and
8
+ * exit with code 0.
9
+ *
10
+ * @param cleanup - Async cleanup function to execute on shutdown
11
+ * @param logger - Consola logger instance for error logging
12
+ */
13
+ export function registerCleanupHandlers(
14
+ cleanup: () => Promise<void>,
15
+ logger: ConsolaInstance,
16
+ ): void {
17
+ const handleSignal = () => {
18
+ cleanup()
19
+ .catch((err) => {
20
+ logger.error("cleanup failed", err);
21
+ })
22
+ .finally(() => {
23
+ process.exit(0);
24
+ });
25
+ };
26
+
27
+ process.on("SIGTERM", handleSignal);
28
+ process.on("SIGINT", handleSignal);
29
+ }
30
+
31
+ /**
32
+ * Create guard to prevent duplicate calls to Worker function
33
+ *
34
+ * @param label - Function name to use in error message
35
+ * @returns Guard function that throws error if called twice
36
+ */
37
+ export function createOnceGuard(label: string): () => void {
38
+ let called = false;
39
+ return () => {
40
+ if (called) {
41
+ throw new Error(`${label} can only be called once per Worker`);
42
+ }
43
+ called = true;
44
+ };
45
+ }
@@ -13,7 +13,7 @@ import { registerCleanupHandlers, createOnceGuard } from "../utils/worker-utils"
13
13
  //#region Types
14
14
 
15
15
  /**
16
- * Client 빌드 정보 (일회성 빌드용)
16
+ * Client build information (for one-time build)
17
17
  */
18
18
  export interface ClientBuildInfo {
19
19
  name: string;
@@ -23,7 +23,7 @@ export interface ClientBuildInfo {
23
23
  }
24
24
 
25
25
  /**
26
- * Client 빌드 결과
26
+ * Client build result
27
27
  */
28
28
  export interface ClientBuildResult {
29
29
  success: boolean;
@@ -31,19 +31,19 @@ export interface ClientBuildResult {
31
31
  }
32
32
 
33
33
  /**
34
- * Client Watch 정보
34
+ * Client watch information
35
35
  */
36
36
  export interface ClientWatchInfo {
37
37
  name: string;
38
38
  config: SdClientPackageConfig;
39
39
  cwd: string;
40
40
  pkgDir: string;
41
- /** sd.config.ts replaceDeps 설정 */
41
+ /** replaceDeps configuration from sd.config.ts */
42
42
  replaceDeps?: Record<string, string>;
43
43
  }
44
44
 
45
45
  /**
46
- * 빌드 이벤트
46
+ * Build event
47
47
  */
48
48
  export interface ClientBuildEvent {
49
49
  success: boolean;
@@ -51,21 +51,21 @@ export interface ClientBuildEvent {
51
51
  }
52
52
 
53
53
  /**
54
- * 서버 준비 이벤트
54
+ * Server ready event
55
55
  */
56
56
  export interface ClientServerReadyEvent {
57
57
  port: number;
58
58
  }
59
59
 
60
60
  /**
61
- * 에러 이벤트
61
+ * Error event
62
62
  */
63
63
  export interface ClientErrorEvent {
64
64
  message: string;
65
65
  }
66
66
 
67
67
  /**
68
- * Worker 이벤트 타입
68
+ * Worker event types
69
69
  */
70
70
  export interface ClientWorkerEvents extends Record<string, unknown> {
71
71
  buildStart: Record<string, never>;
@@ -77,19 +77,19 @@ export interface ClientWorkerEvents extends Record<string, unknown> {
77
77
 
78
78
  //#endregion
79
79
 
80
- //#region 리소스 관리
80
+ //#region Resource Management
81
81
 
82
82
  const logger = consola.withTag("sd:cli:client:worker");
83
83
 
84
- /** Vite dev server (정리 대상) */
84
+ /** Vite dev server (to be cleaned up) */
85
85
  let viteServer: ViteDevServer | undefined;
86
86
 
87
87
  /**
88
- * 리소스 정리
88
+ * Clean up resources
89
89
  */
90
90
  async function cleanup(): Promise<void> {
91
- // 전역 변수를 임시 변수로 캡처 초기화
92
- // (Promise.all 대기 다른 호출에서 전역 변수를 수정할 있으므로)
91
+ // Capture global variable to temporary variable and initialize
92
+ // (other calls can modify global variable while Promise.all is waiting)
93
93
  const serverToClose = viteServer;
94
94
  viteServer = undefined;
95
95
 
@@ -98,9 +98,9 @@ async function cleanup(): Promise<void> {
98
98
  }
99
99
  }
100
100
 
101
- // 프로세스 종료 리소스 정리 (SIGTERM/SIGINT)
102
- // 주의: worker.terminate() 핸들러들을 호출하지 않고 즉시 종료됨.
103
- // 그러나 watch 모드에서 정상 종료는 메인 프로세스의 SIGINT/SIGTERM 통해 이루어지므로 문제없음.
101
+ // Clean up resources before process termination (SIGTERM/SIGINT)
102
+ // Note: worker.terminate() terminates immediately without calling these handlers.
103
+ // However, normal shutdown in watch mode is done through SIGINT/SIGTERM of main process, so no issues.
104
104
  registerCleanupHandlers(cleanup, logger);
105
105
 
106
106
  //#endregion
@@ -108,22 +108,22 @@ registerCleanupHandlers(cleanup, logger);
108
108
  //#region Worker
109
109
 
110
110
  /**
111
- * 일회성 빌드
111
+ * One-time build
112
112
  */
113
113
  async function build(info: ClientBuildInfo): Promise<ClientBuildResult> {
114
114
  try {
115
- // tsconfig 파싱
115
+ // Parse tsconfig
116
116
  const parsedConfig = parseRootTsconfig(info.cwd);
117
117
  const tsconfigPath = path.join(info.cwd, "tsconfig.json");
118
118
 
119
- // browser 타겟용 compilerOptions 생성
119
+ // Create compilerOptions for browser target
120
120
  const compilerOptions = await getCompilerOptionsForPackage(
121
121
  parsedConfig.options,
122
122
  "browser",
123
123
  info.pkgDir,
124
124
  );
125
125
 
126
- // Vite 설정 생성 및 빌드
126
+ // Create Vite configuration and build
127
127
  const viteConfig = createViteConfig({
128
128
  pkgDir: info.pkgDir,
129
129
  name: info.name,
@@ -151,33 +151,33 @@ async function build(info: ClientBuildInfo): Promise<ClientBuildResult> {
151
151
  const guardStartWatch = createOnceGuard("startWatch");
152
152
 
153
153
  /**
154
- * watch 시작 (Vite dev server)
155
- * @remarks 함수는 Worker당 번만 호출되어야 합니다.
156
- * @throws 이미 watch 시작된 경우
154
+ * Start watch (Vite dev server)
155
+ * @remarks This function should be called only once per worker.
156
+ * @throws If watch is already started
157
157
  */
158
158
  async function startWatch(info: ClientWatchInfo): Promise<void> {
159
159
  guardStartWatch();
160
160
 
161
161
  try {
162
- // tsconfig 파싱
162
+ // Parse tsconfig
163
163
  const parsedConfig = parseRootTsconfig(info.cwd);
164
164
  const tsconfigPath = path.join(info.cwd, "tsconfig.json");
165
165
 
166
- // browser 타겟용 compilerOptions 생성
166
+ // Create compilerOptions for browser target
167
167
  const compilerOptions = await getCompilerOptionsForPackage(
168
168
  parsedConfig.options,
169
169
  "browser",
170
170
  info.pkgDir,
171
171
  );
172
172
 
173
- // server 0이면 자동 포트 할당 (서버 연결 클라이언트)
174
- // server 숫자면 해당 포트로 고정 (standalone 클라이언트)
173
+ // If server is 0, auto-assign port (server-connected client)
174
+ // If server is a number, use that port (standalone client)
175
175
  const serverPort = typeof info.config.server === "number" ? info.config.server : 0;
176
176
 
177
- // 의존성 기반 replaceDeps 수집
177
+ // Collect replaceDeps based on dependencies
178
178
  const { replaceDeps } = collectDeps(info.pkgDir, info.cwd, info.replaceDeps);
179
179
 
180
- // Vite 설정 생성
180
+ // Create Vite configuration
181
181
  const viteConfig = createViteConfig({
182
182
  pkgDir: info.pkgDir,
183
183
  name: info.name,
@@ -190,7 +190,7 @@ async function startWatch(info: ClientWatchInfo): Promise<void> {
190
190
  onScopeRebuild: () => sender.send("scopeRebuild", {}),
191
191
  });
192
192
 
193
- // Vite dev server 시작
193
+ // Start Vite dev server
194
194
  viteServer = await createServer(viteConfig);
195
195
  await viteServer.listen();
196
196
 
@@ -199,12 +199,12 @@ async function startWatch(info: ClientWatchInfo): Promise<void> {
199
199
  fs.mkdirSync(path.dirname(confDistPath), { recursive: true });
200
200
  fs.writeFileSync(confDistPath, JSON.stringify(info.config.configs ?? {}, undefined, 2));
201
201
 
202
- // 실제 할당된 포트 반환 (config.server.port 설정값이므로 httpServer에서 실제 포트를 가져옴)
202
+ // Get actual assigned port (config.server.port is the configured value, so get actual port from httpServer)
203
203
  const address = viteServer.httpServer?.address();
204
204
  const actualPort = typeof address === "object" && address != null ? address.port : undefined;
205
205
 
206
206
  if (actualPort == null) {
207
- sender.send("error", { message: "Vite dev server port를 확인할 수 없습니다." });
207
+ sender.send("error", { message: "Unable to determine Vite dev server port." });
208
208
  return;
209
209
  }
210
210
 
@@ -217,8 +217,8 @@ async function startWatch(info: ClientWatchInfo): Promise<void> {
217
217
  }
218
218
 
219
219
  /**
220
- * watch 중지
221
- * @remarks Vite dev server를 정리합니다.
220
+ * Stop watch
221
+ * @remarks Clean up Vite dev server.
222
222
  */
223
223
  async function stopWatch(): Promise<void> {
224
224
  await cleanup();