@simplysm/sd-cli 13.0.69 → 13.0.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -26,16 +26,16 @@ import { SignalHandler } from "../infra/SignalHandler";
26
26
  //#region Types
27
27
 
28
28
  /**
29
- * Dev Orchestrator 옵션
29
+ * Dev Orchestrator options
30
30
  */
31
31
  export interface DevOrchestratorOptions {
32
- /** dev할 패키지 필터 ( 배열이면 모든 패키지) */
32
+ /** Filter for packages to develop (empty array means all packages) */
33
33
  targets: string[];
34
34
  options: string[];
35
35
  }
36
36
 
37
37
  /**
38
- * Client Worker 정보 (Vite dev server)
38
+ * Client Worker info (for Vite dev server)
39
39
  */
40
40
  interface ClientWorkerInfo {
41
41
  name: string;
@@ -50,14 +50,14 @@ interface ClientWorkerInfo {
50
50
  //#region DevOrchestrator
51
51
 
52
52
  /**
53
- * Dev 모드 실행을 조율하는 Orchestrator
53
+ * Orchestrator that coordinates dev mode execution
54
54
  *
55
- * Client Server 패키지의 개발 모드 실행을 관리한다.
56
- * - `client` 타겟: Vite dev server 시작
57
- * - `server` 타겟: Server Build Worker + Server Runtime Worker
58
- * - Server-Client 프록시 연결 지원
59
- * - Capacitor 초기화 지원
60
- * - SIGINT/SIGTERM 시그널로 종료
55
+ * Manages development mode execution for Client and Server packages.
56
+ * - `client` target: Start Vite dev server
57
+ * - `server` target: Server Build Worker + Server Runtime Worker
58
+ * - Support for Server-Client proxy connections
59
+ * - Support for Capacitor initialization
60
+ * - Shutdown via SIGINT/SIGTERM signals
61
61
  */
62
62
  export class DevOrchestrator {
63
63
  private readonly _options: DevOrchestratorOptions;
@@ -104,9 +104,9 @@ export class DevOrchestrator {
104
104
  }
105
105
 
106
106
  /**
107
- * 서버 URL 출력 (debounce 300ms)
107
+ * Print server URL (debounce 300ms)
108
108
  *
109
- * 서버 리빌드와 scope 리빌드가 동시에 발생할 중복 출력을 방지한다.
109
+ * Prevents duplicate output when server rebuild and scope rebuild occur simultaneously.
110
110
  */
111
111
  private _schedulePrintServers(): void {
112
112
  if (this._printServersTimer != null) clearTimeout(this._printServersTimer);
@@ -116,42 +116,42 @@ export class DevOrchestrator {
116
116
  }
117
117
 
118
118
  /**
119
- * Orchestrator 초기화
120
- * - sd.config.ts 로드
121
- * - 패키지 분류
122
- * - 환경변수 준비
119
+ * Initialize Orchestrator
120
+ * - Load sd.config.ts
121
+ * - Classify packages
122
+ * - Prepare environment variables
123
123
  */
124
124
  async initialize(): Promise<void> {
125
125
  const { targets } = this._options;
126
- this._logger.debug("dev 시작", { targets });
126
+ this._logger.debug("Starting dev mode", { targets });
127
127
 
128
- // sd.config.ts 로드 (dev 패키지 빌드 정보가 필요하므로 필수)
128
+ // Load sd.config.ts (required for dev mode to access package build information)
129
129
  try {
130
130
  this._sdConfig = await loadSdConfig({
131
131
  cwd: this._cwd,
132
132
  dev: true,
133
133
  opt: this._options.options,
134
134
  });
135
- this._logger.debug("sd.config.ts 로드 완료");
135
+ this._logger.debug("sd.config.ts loaded successfully");
136
136
  } catch (err) {
137
- this._logger.error(`sd.config.ts 로드 실패: ${err instanceof Error ? err.message : err}`);
137
+ this._logger.error(`Failed to load sd.config.ts: ${err instanceof Error ? err.message : err}`);
138
138
  process.exitCode = 1;
139
139
  throw err;
140
140
  }
141
141
 
142
- // replaceDeps 설정이 있으면 watch 시작 (초기 교체는 sd-cli.ts에서 처리됨)
142
+ // Start watch for replaceDeps if configured (initial replacement is handled in sd-cli.ts)
143
143
  if (this._sdConfig.replaceDeps != null) {
144
144
  this._replaceDepWatcher = await watchReplaceDeps(this._cwd, this._sdConfig.replaceDeps);
145
145
  }
146
146
 
147
- // VER, DEV 환경변수 준비
147
+ // Prepare VER, DEV environment variables
148
148
  const version = await getVersion(this._cwd);
149
149
  this._baseEnv = { VER: version, DEV: "true" };
150
150
 
151
- // targets 필터링
151
+ // Filter targets
152
152
  const allPackages = filterPackagesByTargets(this._sdConfig.packages, targets);
153
153
 
154
- // client/server 패키지만 필터링
154
+ // Filter only client/server packages
155
155
  for (const [name, config] of Object.entries(allPackages)) {
156
156
  if (config.target === "server") {
157
157
  this._serverPackages.push({ name, config });
@@ -161,13 +161,13 @@ export class DevOrchestrator {
161
161
  }
162
162
 
163
163
  if (this._serverPackages.length === 0 && this._clientPackages.length === 0) {
164
- process.stdout.write("⚠ dev할 client/server 패키지가 없습니다.\n");
164
+ process.stdout.write("⚠ No client/server packages to develop.\n");
165
165
  return;
166
166
  }
167
167
 
168
168
  this._hasPackages = true;
169
169
 
170
- // 서버와 연결된 클라이언트 찾기 (서버가 dev 대상인 경우만)
170
+ // Find clients connected to servers (only if server is a dev target)
171
171
  const serverNames = new Set(this._serverPackages.map(({ name }) => name));
172
172
  for (const { name, config } of this._clientPackages) {
173
173
  if (typeof config.server === "string" && serverNames.has(config.server)) {
@@ -177,11 +177,11 @@ export class DevOrchestrator {
177
177
  }
178
178
  }
179
179
 
180
- // 인프라 초기화
180
+ // Initialize infrastructure
181
181
  this._rebuildManager = new RebuildManager(this._logger);
182
182
  this._signalHandler = new SignalHandler();
183
183
 
184
- // 배치 완료 에러와 서버 URL 출력
184
+ // Print errors and server URL when batch is complete
185
185
  this._rebuildManager.on("batchComplete", () => {
186
186
  printErrors(this._results);
187
187
  this._schedulePrintServers();
@@ -189,11 +189,11 @@ export class DevOrchestrator {
189
189
  }
190
190
 
191
191
  /**
192
- * Dev 모드 시작
193
- * - Worker 생성
194
- * - 이벤트 핸들러 등록
195
- * - 초기 빌드 서버 시작
196
- * - Capacitor 초기화
192
+ * Start dev mode
193
+ * - Create workers
194
+ * - Register event handlers
195
+ * - Initial build and server startup
196
+ * - Initialize Capacitor
197
197
  */
198
198
  async start(): Promise<void> {
199
199
  if (!this._hasPackages) {
@@ -202,14 +202,14 @@ export class DevOrchestrator {
202
202
 
203
203
  const serverNames = new Set(this._serverPackages.map(({ name }) => name));
204
204
 
205
- // Worker 경로
205
+ // Worker paths
206
206
  const clientWorkerPath = import.meta.resolve("../workers/client.worker");
207
207
  const serverWorkerPath = import.meta.resolve("../workers/server.worker");
208
208
  const serverRuntimeWorkerPath = import.meta.resolve("../workers/server-runtime.worker");
209
209
 
210
- // 클라이언트가 단독 실행인 경우:
211
- // - server 숫자인 경우
212
- // - server 문자열이지만 해당 서버가 dev 대상이 아닌 경우
210
+ // Standalone client cases:
211
+ // - server is a number
212
+ // - server is a string but the server is not a dev target
213
213
  this._standaloneClientWorkers = this._clientPackages
214
214
  .filter(
215
215
  ({ config }) =>
@@ -224,7 +224,7 @@ export class DevOrchestrator {
224
224
  buildResolver: undefined,
225
225
  }));
226
226
 
227
- // 서버에 연결된 클라이언트의 Vite Worker (서버가 dev 대상인 경우만)
227
+ // Vite workers for clients connected to servers (only if server is a dev target)
228
228
  this._viteClientWorkers = this._clientPackages
229
229
  .filter(({ config }) => typeof config.server === "string" && serverNames.has(config.server))
230
230
  .map(({ name, config }) => ({
@@ -235,7 +235,7 @@ export class DevOrchestrator {
235
235
  buildResolver: undefined,
236
236
  }));
237
237
 
238
- // 섹션별 setup 워커 시작
238
+ // Setup and start workers for each section
239
239
  const standaloneClientPromises = this._setupStandaloneClients();
240
240
  const { buildPromises: viteClientPromises, readyPromises: viteClientReadyPromises } =
241
241
  this._setupViteClients();
@@ -245,8 +245,8 @@ export class DevOrchestrator {
245
245
  viteClientReadyPromises,
246
246
  );
247
247
 
248
- // 초기 빌드 완료까지 대기 (병렬 실행)
249
- this._logger.debug("초기 빌드 시작 (Promise.allSettled)");
248
+ // Wait for initial build to complete (parallel execution)
249
+ this._logger.debug("Starting initial build (Promise.allSettled)");
250
250
  const initialBuildPromises: Array<{ name: string; promise: Promise<void> }> = [
251
251
  ...standaloneClientPromises,
252
252
  ...viteClientPromises,
@@ -260,13 +260,13 @@ export class DevOrchestrator {
260
260
  initialResults.forEach((result, index) => {
261
261
  const taskName = initialBuildPromises[index].name;
262
262
  if (result.status === "rejected") {
263
- this._logger.debug(`[${taskName}] 초기 빌드 실패:`, result.reason);
263
+ this._logger.debug(`[${taskName}] Initial build failed:`, result.reason);
264
264
  } else {
265
- this._logger.debug(`[${taskName}] 초기 빌드 완료`);
265
+ this._logger.debug(`[${taskName}] Initial build completed`);
266
266
  }
267
267
  });
268
268
 
269
- // Capacitor 초기화 (client 타겟 capacitor 설정이 있는 패키지)
269
+ // Initialize Capacitor (for packages in client target with capacitor configuration)
270
270
  const capacitorPackages: Array<[string, SdClientPackageConfig]> = [];
271
271
  for (const { name, config } of this._clientPackages) {
272
272
  if (config.capacitor != null) {
@@ -302,13 +302,13 @@ export class DevOrchestrator {
302
302
  }
303
303
  }
304
304
 
305
- // 초기 빌드 결과 출력
305
+ // Print initial build results
306
306
  printErrors(this._results);
307
307
  printServers(this._results, this._serverClientsMap);
308
308
  }
309
309
 
310
310
  /**
311
- * Standalone client Worker 설정 시작
311
+ * Setup and start standalone client workers
312
312
  */
313
313
  private _setupStandaloneClients(): Array<{ name: string; promise: Promise<void> }> {
314
314
  const buildPromises = new Map<string, Promise<void>>();
@@ -321,7 +321,7 @@ export class DevOrchestrator {
321
321
  );
322
322
  }
323
323
 
324
- // 이벤트 핸들러 등록
324
+ // Register event handlers
325
325
  for (const workerInfo of this._standaloneClientWorkers) {
326
326
  const completeTask = registerWorkerEventHandlers(
327
327
  workerInfo as unknown as BaseWorkerInfo,
@@ -346,12 +346,12 @@ export class DevOrchestrator {
346
346
  });
347
347
  });
348
348
 
349
- // scope 패키지 리빌드 감지 서버 URL 출력
349
+ // Print server URL when scope package rebuild is detected
350
350
  workerInfo.worker.on("scopeRebuild", () => {
351
351
  this._schedulePrintServers();
352
352
  });
353
353
 
354
- // 워커 시작
354
+ // Start worker
355
355
  const pkgDir = path.join(this._cwd, "packages", workerInfo.name);
356
356
  const clientConfig: SdClientPackageConfig = {
357
357
  ...workerInfo.config,
@@ -383,7 +383,7 @@ export class DevOrchestrator {
383
383
  }
384
384
 
385
385
  /**
386
- * Vite client (서버 연결) Worker 설정 및 시작
386
+ * Setup and start Vite client (server-connected) workers
387
387
  */
388
388
  private _setupViteClients(): {
389
389
  buildPromises: Array<{ name: string; promise: Promise<void> }>;
@@ -398,7 +398,7 @@ export class DevOrchestrator {
398
398
  workerInfo.buildResolver = resolve;
399
399
  }),
400
400
  );
401
- // Vite 서버 준비 완료 Promise (서버가 클라이언트 포트를 때까지 대기)
401
+ // Vite server ready promise (wait until server knows client port)
402
402
  let readyResolver!: () => void;
403
403
  const readyPromise = new Promise<void>((resolve) => {
404
404
  readyResolver = resolve;
@@ -409,7 +409,7 @@ export class DevOrchestrator {
409
409
  });
410
410
  }
411
411
 
412
- // 이벤트 핸들러 등록
412
+ // Register event handlers
413
413
  for (const workerInfo of this._viteClientWorkers) {
414
414
  const completeTask = registerWorkerEventHandlers(
415
415
  workerInfo as unknown as BaseWorkerInfo,
@@ -422,14 +422,14 @@ export class DevOrchestrator {
422
422
  this._rebuildManager,
423
423
  );
424
424
 
425
- // serverReady - Vite 포트를 clientPorts 저장 (URL 서버를 통해 출력)
425
+ // serverReady - Store Vite port in clientPorts (URL is printed via server)
426
426
  workerInfo.worker.on("serverReady", (data) => {
427
427
  const event = data as ServerReadyEventData;
428
428
  this._logger.debug(`[${workerInfo.name}] Vite serverReady (port: ${String(event.port)})`);
429
429
  this._clientPorts[workerInfo.name] = event.port;
430
- // Vite 서버 준비 완료 알림 (서버가 프록시 설정을 위해 대기 )
430
+ // Notify Vite server ready (server is waiting for proxy setup)
431
431
  readyPromises.get(workerInfo.name)?.resolver();
432
- // 빌드 완료를 위해 completeTask 호출 (Vite build 이벤트를 발생시키지 않음)
432
+ // Call completeTask for build completion (Vite doesn't emit build event)
433
433
  completeTask({
434
434
  name: workerInfo.name,
435
435
  target: workerInfo.config.target,
@@ -438,23 +438,23 @@ export class DevOrchestrator {
438
438
  });
439
439
  });
440
440
 
441
- // Vite client error 시에도 readyPromises resolve
442
- // (서버가 await Promise.all(clientReadyPromises)에서 무한 대기하지 않도록)
441
+ // Also resolve readyPromises on Vite client error
442
+ // (prevent server from hanging indefinitely in await Promise.all(clientReadyPromises))
443
443
  workerInfo.worker.on("error", () => {
444
444
  readyPromises.get(workerInfo.name)?.resolver();
445
445
  });
446
446
 
447
- // scope 패키지 리빌드 감지 서버 URL 출력
447
+ // Print server URL when scope package rebuild is detected
448
448
  workerInfo.worker.on("scopeRebuild", () => {
449
449
  this._schedulePrintServers();
450
450
  });
451
451
 
452
- // 워커 시작
452
+ // Start worker
453
453
  const pkgDir = path.join(this._cwd, "packages", workerInfo.name);
454
- // Vite 자동으로 포트를 할당하도록 설정
454
+ // Allow Vite to automatically assign port
455
455
  const viteConfig: SdClientPackageConfig = {
456
456
  ...workerInfo.config,
457
- server: 0, // Vite 자동으로 포트 할당
457
+ server: 0, // Vite will automatically assign port
458
458
  env: { ...this._baseEnv, ...workerInfo.config.env },
459
459
  };
460
460
  workerInfo.worker
@@ -486,14 +486,14 @@ export class DevOrchestrator {
486
486
  }
487
487
 
488
488
  /**
489
- * Server Build/Runtime Worker 설정 및 시작
489
+ * Setup and start Server Build/Runtime workers
490
490
  */
491
491
  private _setupServers(
492
492
  serverWorkerPath: string,
493
493
  serverRuntimeWorkerPath: string,
494
494
  viteClientReadyPromises: Map<string, { promise: Promise<void>; resolver: () => void }>,
495
495
  ): Array<{ name: string; promise: Promise<void> }> {
496
- // Server Build Worker Promise 생성
496
+ // Create Server Build Worker and promise
497
497
  for (const { name } of this._serverPackages) {
498
498
  let resolver!: () => void;
499
499
  const promise = new Promise<void>((resolve) => {
@@ -506,7 +506,7 @@ export class DevOrchestrator {
506
506
  });
507
507
  }
508
508
 
509
- // Server Runtime Promise (초기 서버 시작 완료 대기용)
509
+ // Server Runtime Promise (wait for initial server startup to complete)
510
510
  const serverRuntimePromises = new Map<
511
511
  string,
512
512
  { promise: Promise<void>; resolver: () => void }
@@ -519,14 +519,14 @@ export class DevOrchestrator {
519
519
  serverRuntimePromises.set(name, { promise, resolver });
520
520
  }
521
521
 
522
- // Server Build Worker 이벤트 핸들러 등록
522
+ // Register Server Build Worker event handlers
523
523
  for (const { name } of this._serverPackages) {
524
524
  const serverBuild = this._serverBuildWorkers.get(name)!;
525
525
  let isFirstBuild = true;
526
526
 
527
527
  serverBuild.worker.on("buildStart", () => {
528
528
  if (!isFirstBuild) {
529
- // 리빌드 RebuildManager 등록
529
+ // Register with RebuildManager on rebuild
530
530
  const resolver = this._rebuildManager.registerBuild(`${name}:server`, `${name} (server)`);
531
531
  this._serverBuildWorkers.set(name, {
532
532
  ...serverBuild,
@@ -539,7 +539,7 @@ export class DevOrchestrator {
539
539
  const event = data as ServerBuildEventData;
540
540
  this._logger.debug(`[${name}] server build: success=${String(event.success)}`);
541
541
 
542
- // warnings 출력
542
+ // Print warnings
543
543
  if (event.warnings != null && event.warnings.length > 0) {
544
544
  this._logger.warn(formatBuildMessages(name, "server", event.warnings));
545
545
  }
@@ -561,10 +561,10 @@ export class DevOrchestrator {
561
561
  return;
562
562
  }
563
563
 
564
- // 빌드 성공 런타임 워커 시작 (async 로직은 별도 함수로 분리하여 에러 전파 방지)
564
+ // Start runtime worker on build success (separate async function to prevent error propagation)
565
565
  void startServerRuntime(name, event.mainJsPath).catch((err: unknown) => {
566
566
  const message = errorMessage(err);
567
- this._logger.error(`[${name}] Server Runtime 시작 중 오류:`, message);
567
+ this._logger.error(`[${name}] Error starting Server Runtime:`, message);
568
568
 
569
569
  this._results.set(`${name}:server`, {
570
570
  name,
@@ -584,39 +584,39 @@ export class DevOrchestrator {
584
584
  });
585
585
 
586
586
  /**
587
- * 서버 런타임 워커 시작.
588
- * async 이벤트 핸들러의 에러를 catch 있도록 별도 함수로 분리.
587
+ * Start server runtime worker.
588
+ * Separated as a dedicated function to catch errors from async event handlers.
589
589
  */
590
590
  const startServerRuntime = async (serverName: string, mainJsPath: string): Promise<void> => {
591
591
  this._logger.debug(`[${serverName}] startServerRuntime: ${mainJsPath}`);
592
592
  const updatedBuild = this._serverBuildWorkers.get(serverName)!;
593
593
  updatedBuild.mainJsPath = mainJsPath;
594
594
 
595
- // 기존 Server Runtime Worker 종료
595
+ // Terminate existing Server Runtime Worker
596
596
  const existingRuntime = this._serverRuntimeWorkers.get(serverName);
597
597
  if (existingRuntime != null) {
598
- this._logger.info(`[${serverName}] 서버 재시작 중...`);
598
+ this._logger.info(`[${serverName}] Restarting server...`);
599
599
  await existingRuntime.terminate();
600
600
  }
601
601
 
602
- // Server Runtime Worker 생성 및 시작
602
+ // Create and start new Server Runtime Worker
603
603
  const runtimeWorker =
604
604
  Worker.create<typeof ServerRuntimeWorkerModule>(serverRuntimeWorkerPath);
605
605
  this._serverRuntimeWorkers.set(serverName, runtimeWorker);
606
606
 
607
- // 서버에 연결된 클라이언트들의 Vite 서버가 준비될 때까지 대기
607
+ // Wait for Vite servers of clients connected to this server to be ready
608
608
  const connectedClients = this._serverClientsMap.get(serverName) ?? [];
609
609
  const clientReadyPromises = connectedClients
610
610
  .map((clientName) => viteClientReadyPromises.get(clientName)?.promise)
611
611
  .filter((p): p is Promise<void> => p != null);
612
612
  this._logger.debug(
613
- `[${serverName}] 클라이언트 대기: ${String(clientReadyPromises.length)}개`,
613
+ `[${serverName}] Waiting for clients: ${String(clientReadyPromises.length)} total`,
614
614
  );
615
615
  if (clientReadyPromises.length > 0) {
616
616
  await Promise.all(clientReadyPromises);
617
617
  }
618
618
 
619
- // 서버에 연결된 클라이언트 포트 수집
619
+ // Collect client ports for this server
620
620
  const serverClientPorts: Record<string, number> = {};
621
621
  for (const clientName of connectedClients) {
622
622
  if (clientName in this._clientPorts) {
@@ -624,7 +624,7 @@ export class DevOrchestrator {
624
624
  }
625
625
  }
626
626
 
627
- // Server Runtime 이벤트 핸들러
627
+ // Server Runtime event handlers
628
628
  runtimeWorker.on("serverReady", (readyData) => {
629
629
  const readyEvent = readyData as ServerReadyEventData;
630
630
  this._results.set(`${serverName}:server`, {
@@ -659,9 +659,9 @@ export class DevOrchestrator {
659
659
  updatedBuild.buildResolver();
660
660
  });
661
661
 
662
- // Server Runtime 시작
663
- // Worker가 크래시하면 "serverReady"/"error" 이벤트 없이 종료되므로
664
- // promise rejection catch하여 무한 대기를 방지
662
+ // Start Server Runtime
663
+ // If worker crashes, it terminates without emitting "serverReady"/"error" events,
664
+ // so catch promise rejection to prevent hanging
665
665
  runtimeWorker
666
666
  .start({
667
667
  mainJsPath,
@@ -669,7 +669,7 @@ export class DevOrchestrator {
669
669
  })
670
670
  .catch((err: unknown) => {
671
671
  const message = errorMessage(err);
672
- this._logger.error(`[${serverName}] Server Runtime Worker 크래시:`, message);
672
+ this._logger.error(`[${serverName}] Server Runtime Worker crashed:`, message);
673
673
 
674
674
  this._results.set(`${serverName}:server`, {
675
675
  name: serverName,
@@ -704,7 +704,7 @@ export class DevOrchestrator {
704
704
  });
705
705
  }
706
706
 
707
- // Server Build 워커 시작
707
+ // Start Server Build workers
708
708
  for (const { name, config } of this._serverPackages) {
709
709
  const pkgDir = path.join(this._cwd, "packages", name);
710
710
  const serverBuild = this._serverBuildWorkers.get(name)!;
@@ -738,7 +738,7 @@ export class DevOrchestrator {
738
738
  }
739
739
 
740
740
  /**
741
- * 종료 시그널 대기
741
+ * Wait for termination signal
742
742
  */
743
743
  async awaitTermination(): Promise<void> {
744
744
  if (!this._hasPackages) {
@@ -748,15 +748,15 @@ export class DevOrchestrator {
748
748
  }
749
749
 
750
750
  /**
751
- * Orchestrator 종료
751
+ * Shutdown orchestrator
752
752
  */
753
753
  async shutdown(): Promise<void> {
754
754
  if (!this._hasPackages) {
755
755
  return;
756
756
  }
757
757
 
758
- // Worker 종료 (모든 워커)
759
- process.stdout.write("⏳ 종료 중...\n");
758
+ // Terminate workers (all workers)
759
+ process.stdout.write("⏳ Shutting down...\n");
760
760
  await Promise.all([
761
761
  ...this._standaloneClientWorkers.map(({ worker }) => worker.terminate()),
762
762
  ...this._viteClientWorkers.map(({ worker }) => worker.terminate()),
@@ -764,7 +764,7 @@ export class DevOrchestrator {
764
764
  ...[...this._serverRuntimeWorkers.values()].map((worker) => worker.terminate()),
765
765
  ]);
766
766
  this._replaceDepWatcher?.dispose();
767
- process.stdout.write("✔ 완료\n");
767
+ process.stdout.write("✔ Done\n");
768
768
  }
769
769
  }
770
770