@simplysm/sd-cli 13.0.10 → 13.0.12

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 (154) hide show
  1. package/dist/builders/BaseBuilder.d.ts +15 -4
  2. package/dist/builders/BaseBuilder.d.ts.map +1 -1
  3. package/dist/builders/BaseBuilder.js +50 -0
  4. package/dist/builders/BaseBuilder.js.map +1 -1
  5. package/dist/builders/DtsBuilder.d.ts.map +1 -1
  6. package/dist/builders/DtsBuilder.js +2 -39
  7. package/dist/builders/DtsBuilder.js.map +1 -1
  8. package/dist/builders/LibraryBuilder.d.ts.map +1 -1
  9. package/dist/builders/LibraryBuilder.js +2 -39
  10. package/dist/builders/LibraryBuilder.js.map +1 -1
  11. package/dist/builders/types.d.ts +2 -2
  12. package/dist/builders/types.d.ts.map +1 -1
  13. package/dist/capacitor/capacitor.d.ts.map +1 -1
  14. package/dist/capacitor/capacitor.js +2 -1
  15. package/dist/capacitor/capacitor.js.map +1 -1
  16. package/dist/commands/add-client.d.ts.map +1 -1
  17. package/dist/commands/add-client.js +1 -9
  18. package/dist/commands/add-client.js.map +1 -1
  19. package/dist/commands/add-server.d.ts.map +1 -1
  20. package/dist/commands/add-server.js +1 -9
  21. package/dist/commands/add-server.js.map +1 -1
  22. package/dist/commands/build.d.ts +1 -2
  23. package/dist/commands/build.d.ts.map +1 -1
  24. package/dist/commands/build.js +12 -311
  25. package/dist/commands/build.js.map +1 -1
  26. package/dist/commands/dev.d.ts +1 -1
  27. package/dist/commands/dev.d.ts.map +1 -1
  28. package/dist/commands/dev.js +11 -432
  29. package/dist/commands/dev.js.map +1 -1
  30. package/dist/commands/device.d.ts.map +1 -1
  31. package/dist/commands/device.js +17 -32
  32. package/dist/commands/device.js.map +1 -1
  33. package/dist/commands/init.d.ts.map +1 -1
  34. package/dist/commands/init.js +1 -9
  35. package/dist/commands/init.js.map +1 -1
  36. package/dist/commands/lint.d.ts +1 -1
  37. package/dist/commands/lint.d.ts.map +1 -1
  38. package/dist/commands/lint.js +71 -118
  39. package/dist/commands/lint.js.map +2 -2
  40. package/dist/commands/publish.d.ts.map +1 -1
  41. package/dist/commands/publish.js +47 -69
  42. package/dist/commands/publish.js.map +1 -1
  43. package/dist/commands/typecheck.d.ts +1 -1
  44. package/dist/commands/typecheck.d.ts.map +1 -1
  45. package/dist/commands/typecheck.js +11 -24
  46. package/dist/commands/typecheck.js.map +1 -1
  47. package/dist/index.d.ts +1 -0
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +4 -0
  50. package/dist/index.js.map +1 -1
  51. package/dist/infra/ResultCollector.d.ts +1 -1
  52. package/dist/infra/ResultCollector.d.ts.map +1 -1
  53. package/dist/infra/ResultCollector.js +1 -1
  54. package/dist/infra/ResultCollector.js.map +1 -1
  55. package/dist/orchestrators/BuildOrchestrator.d.ts +53 -0
  56. package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -0
  57. package/dist/orchestrators/BuildOrchestrator.js +338 -0
  58. package/dist/orchestrators/BuildOrchestrator.js.map +6 -0
  59. package/dist/orchestrators/DevOrchestrator.d.ts +64 -0
  60. package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -0
  61. package/dist/orchestrators/DevOrchestrator.js +524 -0
  62. package/dist/orchestrators/DevOrchestrator.js.map +6 -0
  63. package/dist/orchestrators/WatchOrchestrator.d.ts +1 -1
  64. package/dist/orchestrators/WatchOrchestrator.d.ts.map +1 -1
  65. package/dist/orchestrators/WatchOrchestrator.js +30 -21
  66. package/dist/orchestrators/WatchOrchestrator.js.map +1 -1
  67. package/dist/orchestrators/index.d.ts +2 -0
  68. package/dist/orchestrators/index.d.ts.map +1 -1
  69. package/dist/orchestrators/index.js +4 -0
  70. package/dist/orchestrators/index.js.map +1 -1
  71. package/dist/sd-cli-entry.js +14 -14
  72. package/dist/sd-cli-entry.js.map +1 -1
  73. package/dist/sd-cli.js +6 -4
  74. package/dist/sd-cli.js.map +1 -1
  75. package/dist/utils/output-utils.d.ts +0 -1
  76. package/dist/utils/output-utils.d.ts.map +1 -1
  77. package/dist/utils/output-utils.js +1 -1
  78. package/dist/utils/output-utils.js.map +1 -1
  79. package/dist/utils/package-utils.d.ts +5 -1
  80. package/dist/utils/package-utils.d.ts.map +1 -1
  81. package/dist/utils/package-utils.js +12 -0
  82. package/dist/utils/package-utils.js.map +1 -1
  83. package/dist/utils/rebuild-manager.d.ts +15 -0
  84. package/dist/utils/rebuild-manager.d.ts.map +1 -0
  85. package/dist/utils/rebuild-manager.js +50 -0
  86. package/dist/utils/rebuild-manager.js.map +6 -0
  87. package/dist/utils/replace-deps.d.ts.map +1 -1
  88. package/dist/utils/replace-deps.js +7 -14
  89. package/dist/utils/replace-deps.js.map +1 -1
  90. package/dist/utils/vite-config.d.ts.map +1 -1
  91. package/dist/utils/vite-config.js +43 -5
  92. package/dist/utils/vite-config.js.map +1 -1
  93. package/dist/utils/worker-events.d.ts +5 -4
  94. package/dist/utils/worker-events.d.ts.map +1 -1
  95. package/dist/utils/worker-events.js +4 -0
  96. package/dist/utils/worker-events.js.map +1 -1
  97. package/dist/utils/worker-utils.d.ts +13 -0
  98. package/dist/utils/worker-utils.d.ts.map +1 -0
  99. package/dist/utils/worker-utils.js +15 -0
  100. package/dist/utils/worker-utils.js.map +6 -0
  101. package/dist/workers/client.worker.d.ts.map +1 -1
  102. package/dist/workers/client.worker.js +2 -14
  103. package/dist/workers/client.worker.js.map +1 -1
  104. package/dist/workers/library.worker.d.ts.map +1 -1
  105. package/dist/workers/library.worker.js +2 -14
  106. package/dist/workers/library.worker.js.map +1 -1
  107. package/dist/workers/server-runtime.worker.d.ts.map +1 -1
  108. package/dist/workers/server-runtime.worker.js +11 -11
  109. package/dist/workers/server-runtime.worker.js.map +1 -1
  110. package/dist/workers/server.worker.d.ts.map +1 -1
  111. package/dist/workers/server.worker.js +2 -14
  112. package/dist/workers/server.worker.js.map +1 -1
  113. package/package.json +4 -5
  114. package/src/builders/BaseBuilder.ts +71 -4
  115. package/src/builders/DtsBuilder.ts +2 -49
  116. package/src/builders/LibraryBuilder.ts +2 -51
  117. package/src/builders/types.ts +2 -2
  118. package/src/capacitor/capacitor.ts +2 -1
  119. package/src/commands/add-client.ts +1 -14
  120. package/src/commands/add-server.ts +1 -13
  121. package/src/commands/build.ts +13 -443
  122. package/src/commands/dev.ts +12 -582
  123. package/src/commands/device.ts +17 -34
  124. package/src/commands/init.ts +1 -13
  125. package/src/commands/lint.ts +85 -146
  126. package/src/commands/publish.ts +58 -76
  127. package/src/commands/typecheck.ts +13 -46
  128. package/src/index.ts +1 -0
  129. package/src/infra/ResultCollector.ts +2 -2
  130. package/src/orchestrators/BuildOrchestrator.ts +499 -0
  131. package/src/orchestrators/DevOrchestrator.ts +703 -0
  132. package/src/orchestrators/WatchOrchestrator.ts +42 -25
  133. package/src/orchestrators/index.ts +2 -0
  134. package/src/sd-cli-entry.ts +14 -14
  135. package/src/sd-cli.ts +6 -4
  136. package/src/utils/output-utils.ts +1 -2
  137. package/src/utils/package-utils.ts +16 -1
  138. package/src/utils/rebuild-manager.ts +65 -0
  139. package/src/utils/replace-deps.ts +26 -25
  140. package/src/utils/vite-config.ts +84 -6
  141. package/src/utils/worker-events.ts +13 -5
  142. package/src/utils/worker-utils.ts +26 -0
  143. package/src/workers/client.worker.ts +3 -19
  144. package/src/workers/library.worker.ts +2 -19
  145. package/src/workers/server-runtime.worker.ts +16 -17
  146. package/src/workers/server.worker.ts +2 -19
  147. package/templates/add-client/__CLIENT__/package.json.hbs +1 -1
  148. package/templates/add-server/__SERVER__/package.json.hbs +2 -2
  149. package/templates/init/package.json.hbs +3 -3
  150. package/dist/utils/listr-manager.d.ts +0 -37
  151. package/dist/utils/listr-manager.d.ts.map +0 -1
  152. package/dist/utils/listr-manager.js +0 -59
  153. package/dist/utils/listr-manager.js.map +0 -6
  154. package/src/utils/listr-manager.ts +0 -89
@@ -0,0 +1,524 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { Worker } from "@simplysm/core-node";
4
+ import { consola } from "consola";
5
+ import { loadSdConfig } from "../utils/sd-config.js";
6
+ import { getVersion } from "../utils/build-env.js";
7
+ import { setupReplaceDeps, watchReplaceDeps } from "../utils/replace-deps.js";
8
+ import { Capacitor } from "../capacitor/capacitor.js";
9
+ import { filterPackagesByTargets, getWatchScopes } from "../utils/package-utils.js";
10
+ import { printErrors, printServers } from "../utils/output-utils.js";
11
+ import { RebuildManager } from "../utils/rebuild-manager.js";
12
+ import {
13
+ registerWorkerEventHandlers
14
+ } from "../utils/worker-events.js";
15
+ import { SignalHandler } from "../infra/SignalHandler.js";
16
+ class DevOrchestrator {
17
+ _options;
18
+ _logger = consola.withTag("sd:cli:dev");
19
+ _cwd;
20
+ // Config
21
+ _sdConfig;
22
+ _baseEnv;
23
+ _watchScopes = [];
24
+ // Package classification
25
+ _serverPackages = [];
26
+ _clientPackages = [];
27
+ _serverClientsMap = /* @__PURE__ */ new Map();
28
+ _hasPackages = false;
29
+ // Workers
30
+ _standaloneClientWorkers = [];
31
+ _viteClientWorkers = [];
32
+ _serverBuildWorkers = /* @__PURE__ */ new Map();
33
+ _serverRuntimeWorkers = /* @__PURE__ */ new Map();
34
+ // State
35
+ _results = /* @__PURE__ */ new Map();
36
+ _clientPorts = {};
37
+ _rebuildManager;
38
+ _signalHandler;
39
+ _replaceDepWatcher;
40
+ constructor(options) {
41
+ this._cwd = process.cwd();
42
+ this._options = options;
43
+ }
44
+ /**
45
+ * Orchestrator 초기화
46
+ * - sd.config.ts 로드
47
+ * - 패키지 분류
48
+ * - 환경변수 준비
49
+ */
50
+ async initialize() {
51
+ const { targets } = this._options;
52
+ this._logger.debug("dev \uC2DC\uC791", { targets });
53
+ try {
54
+ this._sdConfig = await loadSdConfig({ cwd: this._cwd, dev: true, opt: this._options.options });
55
+ this._logger.debug("sd.config.ts \uB85C\uB4DC \uC644\uB8CC");
56
+ } catch (err) {
57
+ this._logger.error(`sd.config.ts \uB85C\uB4DC \uC2E4\uD328: ${err instanceof Error ? err.message : err}`);
58
+ process.exitCode = 1;
59
+ throw err;
60
+ }
61
+ if (this._sdConfig.replaceDeps != null) {
62
+ await setupReplaceDeps(this._cwd, this._sdConfig.replaceDeps);
63
+ this._replaceDepWatcher = await watchReplaceDeps(this._cwd, this._sdConfig.replaceDeps);
64
+ }
65
+ const version = await getVersion(this._cwd);
66
+ this._baseEnv = { VER: version, DEV: "true" };
67
+ const rootPkgJsonPath = path.join(this._cwd, "package.json");
68
+ const rootPkgName = JSON.parse(fs.readFileSync(rootPkgJsonPath, "utf-8")).name;
69
+ this._watchScopes = getWatchScopes(rootPkgName);
70
+ const allPackages = filterPackagesByTargets(this._sdConfig.packages, targets);
71
+ for (const [name, config] of Object.entries(allPackages)) {
72
+ if (config.target === "server") {
73
+ this._serverPackages.push({ name, config });
74
+ } else if (config.target === "client") {
75
+ this._clientPackages.push({ name, config });
76
+ }
77
+ }
78
+ if (this._serverPackages.length === 0 && this._clientPackages.length === 0) {
79
+ process.stdout.write("\u26A0 dev\uD560 client/server \uD328\uD0A4\uC9C0\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.\n");
80
+ return;
81
+ }
82
+ this._hasPackages = true;
83
+ const serverNames = new Set(this._serverPackages.map(({ name }) => name));
84
+ for (const { name, config } of this._clientPackages) {
85
+ if (typeof config.server === "string" && serverNames.has(config.server)) {
86
+ const clients = this._serverClientsMap.get(config.server) ?? [];
87
+ clients.push(name);
88
+ this._serverClientsMap.set(config.server, clients);
89
+ }
90
+ }
91
+ this._rebuildManager = new RebuildManager(this._logger);
92
+ this._signalHandler = new SignalHandler();
93
+ this._rebuildManager.on("batchComplete", () => {
94
+ printErrors(this._results);
95
+ printServers(this._results, this._serverClientsMap);
96
+ });
97
+ }
98
+ /**
99
+ * Dev 모드 시작
100
+ * - Worker 생성
101
+ * - 이벤트 핸들러 등록
102
+ * - 초기 빌드 및 서버 시작
103
+ * - Capacitor 초기화
104
+ */
105
+ async start() {
106
+ if (!this._hasPackages) {
107
+ return;
108
+ }
109
+ const serverNames = new Set(this._serverPackages.map(({ name }) => name));
110
+ const clientWorkerPath = import.meta.resolve("../workers/client.worker");
111
+ const serverWorkerPath = import.meta.resolve("../workers/server.worker");
112
+ const serverRuntimeWorkerPath = import.meta.resolve("../workers/server-runtime.worker");
113
+ this._standaloneClientWorkers = this._clientPackages.filter(
114
+ ({ config }) => typeof config.server === "number" || typeof config.server === "string" && !serverNames.has(config.server)
115
+ ).map(({ name, config }) => ({
116
+ name,
117
+ config,
118
+ worker: Worker.create(clientWorkerPath),
119
+ isInitialBuild: true,
120
+ buildResolver: void 0
121
+ }));
122
+ this._viteClientWorkers = this._clientPackages.filter(({ config }) => typeof config.server === "string" && serverNames.has(config.server)).map(({ name, config }) => ({
123
+ name,
124
+ config,
125
+ worker: Worker.create(clientWorkerPath),
126
+ isInitialBuild: true,
127
+ buildResolver: void 0
128
+ }));
129
+ const standaloneClientBuildPromises = /* @__PURE__ */ new Map();
130
+ for (const workerInfo of this._standaloneClientWorkers) {
131
+ standaloneClientBuildPromises.set(
132
+ workerInfo.name,
133
+ new Promise((resolve) => {
134
+ workerInfo.buildResolver = resolve;
135
+ })
136
+ );
137
+ }
138
+ const viteClientBuildPromises = /* @__PURE__ */ new Map();
139
+ const viteClientReadyPromises = /* @__PURE__ */ new Map();
140
+ for (const workerInfo of this._viteClientWorkers) {
141
+ viteClientBuildPromises.set(
142
+ workerInfo.name,
143
+ new Promise((resolve) => {
144
+ workerInfo.buildResolver = resolve;
145
+ })
146
+ );
147
+ let readyResolver;
148
+ const readyPromise = new Promise((resolve) => {
149
+ readyResolver = resolve;
150
+ });
151
+ viteClientReadyPromises.set(workerInfo.name, { promise: readyPromise, resolver: readyResolver });
152
+ }
153
+ for (const { name } of this._serverPackages) {
154
+ let resolver;
155
+ const promise = new Promise((resolve) => {
156
+ resolver = resolve;
157
+ });
158
+ this._serverBuildWorkers.set(name, {
159
+ worker: Worker.create(serverWorkerPath),
160
+ buildPromise: promise,
161
+ buildResolver: resolver
162
+ });
163
+ }
164
+ const serverRuntimePromises = /* @__PURE__ */ new Map();
165
+ for (const { name } of this._serverPackages) {
166
+ let resolver;
167
+ const promise = new Promise((resolve) => {
168
+ resolver = resolve;
169
+ });
170
+ serverRuntimePromises.set(name, { promise, resolver });
171
+ }
172
+ const clientCompleteTasks = /* @__PURE__ */ new Map();
173
+ for (const workerInfo of this._standaloneClientWorkers) {
174
+ const completeTask = registerWorkerEventHandlers(
175
+ workerInfo,
176
+ {
177
+ resultKey: `${workerInfo.name}:build`,
178
+ listrTitle: `${workerInfo.name} (client)`,
179
+ resultType: "build"
180
+ },
181
+ this._results,
182
+ this._rebuildManager
183
+ );
184
+ clientCompleteTasks.set(workerInfo.name, completeTask);
185
+ workerInfo.worker.on("serverReady", (data) => {
186
+ const event = data;
187
+ completeTask({
188
+ name: workerInfo.name,
189
+ target: workerInfo.config.target,
190
+ type: "server",
191
+ status: "running",
192
+ port: event.port
193
+ });
194
+ });
195
+ }
196
+ for (const workerInfo of this._viteClientWorkers) {
197
+ const completeTask = registerWorkerEventHandlers(
198
+ workerInfo,
199
+ {
200
+ resultKey: `${workerInfo.name}:build`,
201
+ listrTitle: `${workerInfo.name} (client)`,
202
+ resultType: "build"
203
+ },
204
+ this._results,
205
+ this._rebuildManager
206
+ );
207
+ clientCompleteTasks.set(workerInfo.name, completeTask);
208
+ workerInfo.worker.on("serverReady", (data) => {
209
+ const event = data;
210
+ this._logger.debug(`[${workerInfo.name}] Vite serverReady (port: ${String(event.port)})`);
211
+ this._clientPorts[workerInfo.name] = event.port;
212
+ viteClientReadyPromises.get(workerInfo.name)?.resolver();
213
+ completeTask({
214
+ name: workerInfo.name,
215
+ target: workerInfo.config.target,
216
+ type: "build",
217
+ status: "success"
218
+ });
219
+ });
220
+ workerInfo.worker.on("error", () => {
221
+ viteClientReadyPromises.get(workerInfo.name)?.resolver();
222
+ });
223
+ }
224
+ for (const { name } of this._serverPackages) {
225
+ const serverBuild = this._serverBuildWorkers.get(name);
226
+ let isFirstBuild = true;
227
+ serverBuild.worker.on("buildStart", () => {
228
+ if (!isFirstBuild) {
229
+ const resolver = this._rebuildManager.registerBuild(`${name}:server`, `${name} (server)`);
230
+ this._serverBuildWorkers.set(name, {
231
+ ...serverBuild,
232
+ buildResolver: resolver
233
+ });
234
+ }
235
+ });
236
+ serverBuild.worker.on("build", (data) => {
237
+ const event = data;
238
+ this._logger.debug(`[${name}] server build: success=${String(event.success)}`);
239
+ if (!event.success) {
240
+ this._results.set(`${name}:build`, {
241
+ name,
242
+ target: "server",
243
+ type: "build",
244
+ status: "error",
245
+ message: event.errors?.join("\n")
246
+ });
247
+ if (isFirstBuild) {
248
+ isFirstBuild = false;
249
+ serverRuntimePromises.get(name)?.resolver();
250
+ }
251
+ serverBuild.buildResolver();
252
+ return;
253
+ }
254
+ void startServerRuntime(name, event.mainJsPath).catch((err) => {
255
+ const message = err instanceof Error ? err.message : String(err);
256
+ this._logger.error(`[${name}] Server Runtime \uC2DC\uC791 \uC911 \uC624\uB958:`, message);
257
+ this._results.set(`${name}:server`, {
258
+ name,
259
+ target: "server",
260
+ type: "server",
261
+ status: "error",
262
+ message
263
+ });
264
+ if (isFirstBuild) {
265
+ isFirstBuild = false;
266
+ serverRuntimePromises.get(name)?.resolver();
267
+ }
268
+ const updatedBuild = this._serverBuildWorkers.get(name);
269
+ updatedBuild.buildResolver();
270
+ });
271
+ });
272
+ const startServerRuntime = async (serverName, mainJsPath) => {
273
+ this._logger.debug(`[${serverName}] startServerRuntime: ${mainJsPath}`);
274
+ const updatedBuild = this._serverBuildWorkers.get(serverName);
275
+ updatedBuild.mainJsPath = mainJsPath;
276
+ const existingRuntime = this._serverRuntimeWorkers.get(serverName);
277
+ if (existingRuntime != null) {
278
+ this._logger.info(`[${serverName}] \uC11C\uBC84 \uC7AC\uC2DC\uC791 \uC911...`);
279
+ await existingRuntime.terminate();
280
+ }
281
+ const runtimeWorker = Worker.create(serverRuntimeWorkerPath);
282
+ this._serverRuntimeWorkers.set(serverName, runtimeWorker);
283
+ const connectedClients = this._serverClientsMap.get(serverName) ?? [];
284
+ const clientReadyPromises = connectedClients.map((clientName) => viteClientReadyPromises.get(clientName)?.promise).filter((p) => p != null);
285
+ this._logger.debug(`[${serverName}] \uD074\uB77C\uC774\uC5B8\uD2B8 \uB300\uAE30: ${String(clientReadyPromises.length)}\uAC1C`);
286
+ if (clientReadyPromises.length > 0) {
287
+ await Promise.all(clientReadyPromises);
288
+ }
289
+ const serverClientPorts = {};
290
+ for (const clientName of connectedClients) {
291
+ if (clientName in this._clientPorts) {
292
+ serverClientPorts[clientName] = this._clientPorts[clientName];
293
+ }
294
+ }
295
+ runtimeWorker.on("serverReady", (readyData) => {
296
+ const readyEvent = readyData;
297
+ this._results.set(`${serverName}:server`, {
298
+ name: serverName,
299
+ target: "server",
300
+ type: "server",
301
+ status: "running",
302
+ port: readyEvent.port
303
+ });
304
+ if (isFirstBuild) {
305
+ isFirstBuild = false;
306
+ serverRuntimePromises.get(serverName)?.resolver();
307
+ }
308
+ updatedBuild.buildResolver();
309
+ });
310
+ runtimeWorker.on("error", (errorData) => {
311
+ const errorEvent = errorData;
312
+ this._results.set(`${serverName}:server`, {
313
+ name: serverName,
314
+ target: "server",
315
+ type: "server",
316
+ status: "error",
317
+ message: errorEvent.message
318
+ });
319
+ if (isFirstBuild) {
320
+ isFirstBuild = false;
321
+ serverRuntimePromises.get(serverName)?.resolver();
322
+ }
323
+ updatedBuild.buildResolver();
324
+ });
325
+ runtimeWorker.start({
326
+ mainJsPath,
327
+ clientPorts: serverClientPorts
328
+ }).catch((err) => {
329
+ const message = err instanceof Error ? err.message : String(err);
330
+ this._logger.error(`[${serverName}] Server Runtime Worker \uD06C\uB798\uC2DC:`, message);
331
+ this._results.set(`${serverName}:server`, {
332
+ name: serverName,
333
+ target: "server",
334
+ type: "server",
335
+ status: "error",
336
+ message
337
+ });
338
+ if (isFirstBuild) {
339
+ isFirstBuild = false;
340
+ serverRuntimePromises.get(serverName)?.resolver();
341
+ }
342
+ updatedBuild.buildResolver();
343
+ });
344
+ };
345
+ serverBuild.worker.on("error", (data) => {
346
+ const event = data;
347
+ this._results.set(`${name}:build`, {
348
+ name,
349
+ target: "server",
350
+ type: "build",
351
+ status: "error",
352
+ message: event.message
353
+ });
354
+ if (isFirstBuild) {
355
+ isFirstBuild = false;
356
+ serverRuntimePromises.get(name)?.resolver();
357
+ }
358
+ serverBuild.buildResolver();
359
+ });
360
+ }
361
+ for (const workerInfo of this._standaloneClientWorkers) {
362
+ const pkgDir = path.join(this._cwd, "packages", workerInfo.name);
363
+ const completeTask = clientCompleteTasks.get(workerInfo.name);
364
+ const clientConfig = {
365
+ ...workerInfo.config,
366
+ env: { ...this._baseEnv, ...workerInfo.config.env }
367
+ };
368
+ workerInfo.worker.startWatch({
369
+ name: workerInfo.name,
370
+ config: clientConfig,
371
+ cwd: this._cwd,
372
+ pkgDir,
373
+ watchScopes: this._watchScopes
374
+ }).catch((err) => {
375
+ completeTask({
376
+ name: workerInfo.name,
377
+ target: workerInfo.config.target,
378
+ type: "build",
379
+ status: "error",
380
+ message: err instanceof Error ? err.message : String(err)
381
+ });
382
+ });
383
+ }
384
+ for (const workerInfo of this._viteClientWorkers) {
385
+ const pkgDir = path.join(this._cwd, "packages", workerInfo.name);
386
+ const completeTask = clientCompleteTasks.get(workerInfo.name);
387
+ const viteConfig = {
388
+ ...workerInfo.config,
389
+ server: 0,
390
+ // Vite가 자동으로 포트 할당
391
+ env: { ...this._baseEnv, ...workerInfo.config.env }
392
+ };
393
+ workerInfo.worker.startWatch({
394
+ name: workerInfo.name,
395
+ config: viteConfig,
396
+ cwd: this._cwd,
397
+ pkgDir,
398
+ watchScopes: this._watchScopes
399
+ }).catch((err) => {
400
+ completeTask({
401
+ name: workerInfo.name,
402
+ target: workerInfo.config.target,
403
+ type: "build",
404
+ status: "error",
405
+ message: err instanceof Error ? err.message : String(err)
406
+ });
407
+ });
408
+ }
409
+ for (const { name, config } of this._serverPackages) {
410
+ const pkgDir = path.join(this._cwd, "packages", name);
411
+ const serverBuild = this._serverBuildWorkers.get(name);
412
+ serverBuild.worker.startWatch({
413
+ name,
414
+ cwd: this._cwd,
415
+ pkgDir,
416
+ env: { ...this._baseEnv, ...config.env },
417
+ configs: config.configs,
418
+ externals: config.externals
419
+ }).catch((err) => {
420
+ this._results.set(`${name}:build`, {
421
+ name,
422
+ target: "server",
423
+ type: "build",
424
+ status: "error",
425
+ message: err instanceof Error ? err.message : String(err)
426
+ });
427
+ serverRuntimePromises.get(name)?.resolver();
428
+ serverBuild.buildResolver();
429
+ });
430
+ }
431
+ this._logger.debug("\uCD08\uAE30 \uBE4C\uB4DC \uC2DC\uC791 (Promise.allSettled)");
432
+ const initialBuildPromises = [
433
+ // Standalone client
434
+ ...this._standaloneClientWorkers.map((workerInfo) => ({
435
+ name: `${workerInfo.name} (client)`,
436
+ promise: standaloneClientBuildPromises.get(workerInfo.name) ?? Promise.resolve()
437
+ })),
438
+ // Vite client (서버 연결)
439
+ ...this._viteClientWorkers.map((workerInfo) => ({
440
+ name: `${workerInfo.name} (client)`,
441
+ promise: viteClientBuildPromises.get(workerInfo.name) ?? Promise.resolve()
442
+ })),
443
+ // Server 빌드 + 런타임 시작
444
+ ...this._serverPackages.map(({ name }) => ({
445
+ name: `${name} (server)`,
446
+ promise: serverRuntimePromises.get(name)?.promise ?? Promise.resolve()
447
+ }))
448
+ ];
449
+ const initialResults = await Promise.allSettled(initialBuildPromises.map((item) => item.promise));
450
+ initialResults.forEach((result, index) => {
451
+ const taskName = initialBuildPromises[index].name;
452
+ if (result.status === "rejected") {
453
+ this._logger.debug(`[${taskName}] \uCD08\uAE30 \uBE4C\uB4DC \uC2E4\uD328:`, result.reason);
454
+ } else {
455
+ this._logger.debug(`[${taskName}] \uCD08\uAE30 \uBE4C\uB4DC \uC644\uB8CC`);
456
+ }
457
+ });
458
+ const capacitorPackages = [];
459
+ for (const { name, config } of this._clientPackages) {
460
+ if (config.capacitor != null) {
461
+ capacitorPackages.push([name, config]);
462
+ }
463
+ }
464
+ if (capacitorPackages.length > 0) {
465
+ for (const [name, config] of capacitorPackages) {
466
+ const taskName = `${name} (capacitor)`;
467
+ this._logger.start(taskName);
468
+ const pkgDir = path.join(this._cwd, "packages", name);
469
+ try {
470
+ const cap = await Capacitor.create(pkgDir, config.capacitor);
471
+ await cap.initialize();
472
+ this._results.set(`${name}:capacitor`, {
473
+ name,
474
+ target: "client",
475
+ type: "capacitor",
476
+ status: "success"
477
+ });
478
+ this._logger.success(taskName);
479
+ } catch (err) {
480
+ this._results.set(`${name}:capacitor`, {
481
+ name,
482
+ target: "client",
483
+ type: "capacitor",
484
+ status: "error",
485
+ message: err instanceof Error ? err.message : String(err)
486
+ });
487
+ this._logger.fail(taskName);
488
+ }
489
+ }
490
+ }
491
+ printErrors(this._results);
492
+ printServers(this._results, this._serverClientsMap);
493
+ }
494
+ /**
495
+ * 종료 시그널 대기
496
+ */
497
+ async awaitTermination() {
498
+ if (!this._hasPackages) {
499
+ return;
500
+ }
501
+ await this._signalHandler.waitForTermination();
502
+ }
503
+ /**
504
+ * Orchestrator 종료
505
+ */
506
+ async shutdown() {
507
+ if (!this._hasPackages) {
508
+ return;
509
+ }
510
+ process.stdout.write("\u23F3 \uC885\uB8CC \uC911...\n");
511
+ await Promise.all([
512
+ ...this._standaloneClientWorkers.map(({ worker }) => worker.terminate()),
513
+ ...this._viteClientWorkers.map(({ worker }) => worker.terminate()),
514
+ ...[...this._serverBuildWorkers.values()].map(({ worker }) => worker.terminate()),
515
+ ...[...this._serverRuntimeWorkers.values()].map((worker) => worker.terminate())
516
+ ]);
517
+ this._replaceDepWatcher?.dispose();
518
+ process.stdout.write("\u2714 \uC644\uB8CC\n");
519
+ }
520
+ }
521
+ export {
522
+ DevOrchestrator
523
+ };
524
+ //# sourceMappingURL=DevOrchestrator.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/orchestrators/DevOrchestrator.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -34,7 +34,7 @@ export declare class WatchOrchestrator {
34
34
  initialize(): Promise<void>;
35
35
  /**
36
36
  * Watch 모드 시작
37
- * - 초기 빌드 Listr 실행
37
+ * - 초기 빌드 실행
38
38
  * - 결과 출력
39
39
  */
40
40
  start(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"WatchOrchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrators/WatchOrchestrator.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAE3D,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,kBAAkB,CAAoC;gBAElD,OAAO,EAAE,wBAAwB;IAK7C;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2EjC;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6C5B;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOvC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAiBhC"}
1
+ {"version":3,"file":"WatchOrchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrators/WatchOrchestrator.ts"],"names":[],"mappings":"AAiBA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAE3D,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,kBAAkB,CAAoC;gBAElD,OAAO,EAAE,wBAAwB;IAK7C;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2EjC;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+D5B;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAOvC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAiBhC"}
@@ -1,11 +1,10 @@
1
1
  import path from "path";
2
- import { Listr } from "listr2";
3
2
  import { consola } from "consola";
4
3
  import { loadSdConfig } from "../utils/sd-config.js";
5
4
  import { filterPackagesByTargets } from "../utils/package-utils.js";
6
5
  import { setupReplaceDeps, watchReplaceDeps } from "../utils/replace-deps.js";
7
6
  import { printErrors } from "../utils/output-utils.js";
8
- import { RebuildListrManager } from "../utils/listr-manager.js";
7
+ import { RebuildManager } from "../utils/rebuild-manager.js";
9
8
  import { ResultCollector } from "../infra/ResultCollector.js";
10
9
  import { SignalHandler } from "../infra/SignalHandler.js";
11
10
  import { LibraryBuilder } from "../builders/LibraryBuilder.js";
@@ -44,7 +43,7 @@ class WatchOrchestrator {
44
43
  });
45
44
  this._logger.debug("sd.config.ts \uB85C\uB4DC \uC644\uB8CC");
46
45
  } catch (err) {
47
- consola.error(`sd.config.ts \uB85C\uB4DC \uC2E4\uD328: ${err instanceof Error ? err.message : err}`);
46
+ this._logger.error(`sd.config.ts \uB85C\uB4DC \uC2E4\uD328: ${err instanceof Error ? err.message : err}`);
48
47
  process.exitCode = 1;
49
48
  throw err;
50
49
  }
@@ -71,7 +70,7 @@ class WatchOrchestrator {
71
70
  }));
72
71
  this._resultCollector = new ResultCollector();
73
72
  this._signalHandler = new SignalHandler();
74
- this._rebuildManager = new RebuildListrManager(this._logger);
73
+ this._rebuildManager = new RebuildManager(this._logger);
75
74
  this._rebuildManager.on("batchComplete", () => {
76
75
  printErrors(this._resultCollector.toMap());
77
76
  });
@@ -87,7 +86,7 @@ class WatchOrchestrator {
87
86
  }
88
87
  /**
89
88
  * Watch 모드 시작
90
- * - 초기 빌드 Listr 실행
89
+ * - 초기 빌드 실행
91
90
  * - 결과 출력
92
91
  */
93
92
  async start() {
@@ -96,21 +95,6 @@ class WatchOrchestrator {
96
95
  }
97
96
  const buildPromises = this._libraryBuilder.getInitialBuildPromises();
98
97
  const dtsPromises = this._dtsBuilder.getInitialBuildPromises();
99
- const initialListr = new Listr(
100
- [
101
- // Library 빌드 태스크
102
- ...this._packages.map((pkg) => ({
103
- title: `${pkg.name} (${pkg.config.target})`,
104
- task: () => buildPromises.get(`${pkg.name}:build`) ?? Promise.resolve()
105
- })),
106
- // DTS 태스크
107
- ...this._packages.map((pkg) => ({
108
- title: `${pkg.name} (dts)`,
109
- task: () => dtsPromises.get(`${pkg.name}:dts`) ?? Promise.resolve()
110
- }))
111
- ],
112
- { concurrent: true }
113
- );
114
98
  for (const pkg of this._packages) {
115
99
  const buildConfig = pkg.config;
116
100
  if (buildConfig.copySrc != null && buildConfig.copySrc.length > 0) {
@@ -120,7 +104,32 @@ class WatchOrchestrator {
120
104
  }
121
105
  void this._libraryBuilder.startWatch();
122
106
  void this._dtsBuilder.startWatch();
123
- await initialListr.run();
107
+ this._logger.start("\uCD08\uAE30 \uBE4C\uB4DC \uC9C4\uD589 \uC911...");
108
+ const allBuildTasks = [];
109
+ for (const pkg of this._packages) {
110
+ const promise = buildPromises.get(`${pkg.name}:build`) ?? Promise.resolve();
111
+ allBuildTasks.push({
112
+ name: `${pkg.name}:build`,
113
+ promise: (async () => {
114
+ this._logger.debug(`${pkg.name} (${pkg.config.target}) \uBE4C\uB4DC \uC2DC\uC791`);
115
+ await promise;
116
+ this._logger.debug(`${pkg.name} (${pkg.config.target}) \uBE4C\uB4DC \uC644\uB8CC`);
117
+ })()
118
+ });
119
+ }
120
+ for (const pkg of this._packages) {
121
+ const promise = dtsPromises.get(`${pkg.name}:dts`) ?? Promise.resolve();
122
+ allBuildTasks.push({
123
+ name: `${pkg.name}:dts`,
124
+ promise: (async () => {
125
+ this._logger.debug(`${pkg.name} (dts) \uC2DC\uC791`);
126
+ await promise;
127
+ this._logger.debug(`${pkg.name} (dts) \uC644\uB8CC`);
128
+ })()
129
+ });
130
+ }
131
+ await Promise.allSettled(allBuildTasks.map((task) => task.promise));
132
+ this._logger.success("\uCD08\uAE30 \uBE4C\uB4DC \uC644\uB8CC");
124
133
  printErrors(this._resultCollector.toMap());
125
134
  }
126
135
  /**