@simplysm/sd-cli 14.0.8 → 14.0.9
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.
- package/dist/angular/client-transform-stylesheet.d.ts.map +1 -1
- package/dist/angular/client-transform-stylesheet.js.map +1 -1
- package/dist/angular/vite-angular-plugin.d.ts.map +1 -1
- package/dist/angular/vite-angular-plugin.js +15 -8
- package/dist/angular/vite-angular-plugin.js.map +1 -1
- package/dist/angular/vite-postcss-inline-plugin.d.ts.map +1 -1
- package/dist/angular/vite-postcss-inline-plugin.js.map +1 -1
- package/dist/capacitor/capacitor.d.ts.map +1 -1
- package/dist/capacitor/capacitor.js +41 -41
- package/dist/capacitor/capacitor.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/replace-deps.d.ts.map +1 -1
- package/dist/commands/replace-deps.js.map +1 -1
- package/dist/commands/typecheck.d.ts.map +1 -1
- package/dist/commands/typecheck.js +12 -12
- package/dist/commands/typecheck.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js.map +1 -1
- package/dist/electron/electron.d.ts.map +1 -1
- package/dist/electron/electron.js +26 -27
- package/dist/electron/electron.js.map +1 -1
- package/dist/engines/BaseEngine.d.ts +1 -5
- package/dist/engines/BaseEngine.d.ts.map +1 -1
- package/dist/engines/BaseEngine.js +7 -16
- package/dist/engines/BaseEngine.js.map +1 -1
- package/dist/engines/NgtscEngine.d.ts.map +1 -1
- package/dist/engines/NgtscEngine.js +10 -11
- package/dist/engines/NgtscEngine.js.map +1 -1
- package/dist/engines/ServerEsbuildEngine.d.ts.map +1 -1
- package/dist/engines/ServerEsbuildEngine.js +10 -11
- package/dist/engines/ServerEsbuildEngine.js.map +1 -1
- package/dist/engines/TscEngine.d.ts.map +1 -1
- package/dist/engines/TscEngine.js +10 -11
- package/dist/engines/TscEngine.js.map +1 -1
- package/dist/engines/ViteEngine.d.ts.map +1 -1
- package/dist/engines/ViteEngine.js +3 -13
- package/dist/engines/ViteEngine.js.map +1 -1
- package/dist/engines/index.d.ts.map +1 -1
- package/dist/engines/index.js.map +1 -1
- package/dist/engines/types.d.ts +3 -6
- package/dist/engines/types.d.ts.map +1 -1
- package/dist/engines/types.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/infra/ResultCollector.d.ts +1 -1
- package/dist/infra/ResultCollector.d.ts.map +1 -1
- package/dist/infra/ResultCollector.js.map +1 -1
- package/dist/infra/SignalHandler.d.ts.map +1 -1
- package/dist/infra/SignalHandler.js.map +1 -1
- package/dist/infra/WorkerManager.d.ts.map +1 -1
- package/dist/infra/WorkerManager.js.map +1 -1
- package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/BuildOrchestrator.js +30 -61
- package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
- package/dist/orchestrators/DevWatchOrchestrator.d.ts +2 -0
- package/dist/orchestrators/DevWatchOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/DevWatchOrchestrator.js +40 -44
- package/dist/orchestrators/DevWatchOrchestrator.js.map +1 -1
- package/dist/sd-cli-entry.d.ts.map +1 -1
- package/dist/sd-cli-entry.js +2 -13
- package/dist/sd-cli-entry.js.map +1 -1
- package/dist/sd-cli.d.ts.map +1 -1
- package/dist/sd-cli.js.map +1 -1
- package/dist/sd-config.types.d.ts.map +1 -1
- package/dist/sd-config.types.js.map +1 -1
- package/dist/utils/SdCliReporter.d.ts +18 -0
- package/dist/utils/SdCliReporter.d.ts.map +1 -0
- package/dist/utils/SdCliReporter.js +144 -0
- package/dist/utils/SdCliReporter.js.map +1 -0
- package/dist/utils/angular-build.d.ts.map +1 -1
- package/dist/utils/angular-build.js.map +1 -1
- package/dist/utils/angular-compiler.d.ts.map +1 -1
- package/dist/utils/angular-compiler.js +11 -4
- package/dist/utils/angular-compiler.js.map +1 -1
- package/dist/utils/build-env.d.ts.map +1 -1
- package/dist/utils/build-env.js +2 -1
- package/dist/utils/build-env.js.map +1 -1
- package/dist/utils/concurrency.d.ts.map +1 -1
- package/dist/utils/concurrency.js.map +1 -1
- package/dist/utils/copy-public.d.ts.map +1 -1
- package/dist/utils/copy-public.js +21 -21
- package/dist/utils/copy-public.js.map +1 -1
- package/dist/utils/copy-src.d.ts.map +1 -1
- package/dist/utils/copy-src.js +12 -12
- package/dist/utils/copy-src.js.map +1 -1
- package/dist/utils/diagnostic-utils.d.ts.map +1 -1
- package/dist/utils/diagnostic-utils.js +3 -2
- package/dist/utils/diagnostic-utils.js.map +1 -1
- package/dist/utils/engine-stop.d.ts.map +1 -1
- package/dist/utils/engine-stop.js.map +1 -1
- package/dist/utils/esbuild-config.d.ts.map +1 -1
- package/dist/utils/esbuild-config.js +2 -0
- package/dist/utils/esbuild-config.js.map +1 -1
- package/dist/utils/generate-pwa-icons.d.ts.map +1 -1
- package/dist/utils/generate-pwa-icons.js.map +1 -1
- package/dist/utils/hmr-candidates.d.ts.map +1 -1
- package/dist/utils/hmr-candidates.js.map +1 -1
- package/dist/utils/lint-utils.d.ts.map +1 -1
- package/dist/utils/lint-utils.js.map +1 -1
- package/dist/utils/lint-with-program.d.ts.map +1 -1
- package/dist/utils/lint-with-program.js +7 -3
- package/dist/utils/lint-with-program.js.map +1 -1
- package/dist/utils/ngtsc-build-core.d.ts +2 -10
- package/dist/utils/ngtsc-build-core.d.ts.map +1 -1
- package/dist/utils/ngtsc-build-core.js +16 -15
- package/dist/utils/ngtsc-build-core.js.map +1 -1
- package/dist/utils/orchestrator-utils.d.ts.map +1 -1
- package/dist/utils/orchestrator-utils.js.map +1 -1
- package/dist/utils/output-path-rewriter.d.ts.map +1 -1
- package/dist/utils/output-path-rewriter.js +7 -7
- package/dist/utils/output-path-rewriter.js.map +1 -1
- package/dist/utils/output-utils.d.ts.map +1 -1
- package/dist/utils/output-utils.js +1 -1
- package/dist/utils/output-utils.js.map +1 -1
- package/dist/utils/package-utils.d.ts +4 -0
- package/dist/utils/package-utils.d.ts.map +1 -1
- package/dist/utils/package-utils.js +34 -13
- package/dist/utils/package-utils.js.map +1 -1
- package/dist/utils/rebuild-manager.d.ts +1 -1
- package/dist/utils/rebuild-manager.d.ts.map +1 -1
- package/dist/utils/rebuild-manager.js +3 -1
- package/dist/utils/rebuild-manager.js.map +1 -1
- package/dist/utils/replace-deps.d.ts.map +1 -1
- package/dist/utils/replace-deps.js +10 -10
- package/dist/utils/replace-deps.js.map +1 -1
- package/dist/utils/scss-compiler.d.ts.map +1 -1
- package/dist/utils/scss-compiler.js.map +1 -1
- package/dist/utils/sd-config.d.ts.map +1 -1
- package/dist/utils/sd-config.js +2 -3
- package/dist/utils/sd-config.js.map +1 -1
- package/dist/utils/tsc-build.d.ts +3 -1
- package/dist/utils/tsc-build.d.ts.map +1 -1
- package/dist/utils/tsc-build.js +7 -4
- package/dist/utils/tsc-build.js.map +1 -1
- package/dist/utils/tsconfig.d.ts.map +1 -1
- package/dist/utils/tsconfig.js.map +1 -1
- package/dist/utils/typecheck-non-package.d.ts.map +1 -1
- package/dist/utils/typecheck-non-package.js +10 -5
- package/dist/utils/typecheck-non-package.js.map +1 -1
- package/dist/utils/typecheck-serialization.d.ts.map +1 -1
- package/dist/utils/typecheck-serialization.js.map +1 -1
- package/dist/utils/vite-config.d.ts.map +1 -1
- package/dist/utils/vite-config.js +2 -1
- package/dist/utils/vite-config.js.map +1 -1
- package/dist/utils/vite-scope-watch-plugin.d.ts.map +1 -1
- package/dist/utils/vite-scope-watch-plugin.js.map +1 -1
- package/dist/utils/worker-events.d.ts +1 -1
- package/dist/utils/worker-events.d.ts.map +1 -1
- package/dist/utils/worker-events.js +1 -0
- package/dist/utils/worker-events.js.map +1 -1
- package/dist/utils/worker-utils.d.ts +1 -1
- package/dist/utils/worker-utils.d.ts.map +1 -1
- package/dist/utils/worker-utils.js +3 -1
- package/dist/utils/worker-utils.js.map +1 -1
- package/dist/vitest-plugin.d.ts.map +1 -1
- package/dist/vitest-plugin.js.map +1 -1
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +4 -0
- package/dist/workers/client.worker.js.map +1 -1
- package/dist/workers/library-build.worker.d.ts +2 -10
- package/dist/workers/library-build.worker.d.ts.map +1 -1
- package/dist/workers/library-build.worker.js +38 -14
- package/dist/workers/library-build.worker.js.map +1 -1
- package/dist/workers/lint.worker.d.ts.map +1 -1
- package/dist/workers/lint.worker.js.map +1 -1
- package/dist/workers/ngtsc-build.worker.d.ts.map +1 -1
- package/dist/workers/ngtsc-build.worker.js +40 -14
- package/dist/workers/ngtsc-build.worker.js.map +1 -1
- package/dist/workers/server-build.worker.d.ts +2 -10
- package/dist/workers/server-build.worker.d.ts.map +1 -1
- package/dist/workers/server-build.worker.js +28 -19
- package/dist/workers/server-build.worker.js.map +1 -1
- package/dist/workers/server-runtime.worker.d.ts.map +1 -1
- package/dist/workers/server-runtime.worker.js.map +1 -1
- package/package.json +4 -4
- package/src/angular/vite-angular-plugin.ts +18 -9
- package/src/capacitor/capacitor.ts +41 -41
- package/src/commands/typecheck.ts +12 -12
- package/src/electron/electron.ts +26 -27
- package/src/engines/BaseEngine.ts +8 -19
- package/src/engines/NgtscEngine.ts +11 -11
- package/src/engines/ServerEsbuildEngine.ts +11 -11
- package/src/engines/TscEngine.ts +11 -11
- package/src/engines/ViteEngine.ts +3 -14
- package/src/engines/types.ts +3 -6
- package/src/infra/ResultCollector.ts +1 -1
- package/src/orchestrators/BuildOrchestrator.ts +31 -62
- package/src/orchestrators/DevWatchOrchestrator.ts +41 -44
- package/src/sd-cli-entry.ts +2 -12
- package/src/utils/SdCliReporter.ts +177 -0
- package/src/utils/angular-compiler.ts +11 -4
- package/src/utils/build-env.ts +2 -1
- package/src/utils/copy-public.ts +21 -21
- package/src/utils/copy-src.ts +12 -12
- package/src/utils/diagnostic-utils.ts +3 -2
- package/src/utils/esbuild-config.ts +2 -0
- package/src/utils/lint-with-program.ts +7 -3
- package/src/utils/ngtsc-build-core.ts +18 -18
- package/src/utils/output-path-rewriter.ts +7 -7
- package/src/utils/output-utils.ts +1 -1
- package/src/utils/package-utils.ts +37 -13
- package/src/utils/rebuild-manager.ts +4 -2
- package/src/utils/replace-deps.ts +10 -10
- package/src/utils/sd-config.ts +2 -3
- package/src/utils/tsc-build.ts +9 -4
- package/src/utils/typecheck-non-package.ts +10 -5
- package/src/utils/vite-config.ts +2 -1
- package/src/utils/worker-events.ts +2 -1
- package/src/utils/worker-utils.ts +3 -1
- package/src/workers/client.worker.ts +4 -0
- package/src/workers/library-build.worker.ts +48 -18
- package/src/workers/ngtsc-build.worker.ts +48 -13
- package/src/workers/server-build.worker.ts +30 -23
- package/tests/angular/vite-angular-plugin-hmr-fallback.spec.ts +11 -7
- package/tests/angular/vite-angular-plugin-lint.spec.ts +6 -1
- package/tests/capacitor/capacitor-build.spec.ts +5 -0
- package/tests/capacitor/capacitor-icon.spec.ts +5 -0
- package/tests/capacitor/capacitor-init.spec.ts +5 -0
- package/tests/capacitor/capacitor-run.spec.ts +5 -0
- package/tests/capacitor/capacitor-workspace.spec.ts +5 -0
- package/tests/commands/typecheck.spec.ts +20 -31
- package/tests/electron/electron.spec.ts +5 -0
- package/tests/engines/base-engine.spec.ts +15 -21
- package/tests/engines/engine-lint-integration.spec.ts +5 -10
- package/tests/engines/ngtsc-engine.spec.ts +27 -41
- package/tests/engines/server-esbuild-engine.spec.ts +18 -29
- package/tests/engines/tsc-engine.spec.ts +14 -23
- package/tests/engines/vite-engine.spec.ts +10 -15
- package/tests/infra/result-collector.spec.ts +2 -2
- package/tests/orchestrators/build-orchestrator.spec.ts +19 -29
- package/tests/orchestrators/dev-watch-orchestrator.spec.ts +110 -95
- package/tests/utils/copy-src.spec.ts +25 -19
- package/tests/utils/diagnostic-utils.spec.ts +72 -0
- package/tests/utils/ngtsc-build-core-angular-compiler.spec.ts +2 -3
- package/tests/utils/output-path-rewriter.spec.ts +7 -6
- package/tests/utils/output-utils.spec.ts +5 -5
- package/tests/utils/rebuild-manager.spec.ts +1 -1
- package/tests/utils/sd-config.spec.ts +4 -0
- package/tests/utils/tsc-build.spec.ts +23 -5
- package/tests/workers/library-build-worker.spec.ts +113 -20
- package/tests/workers/ngtsc-build-lint.spec.ts +3 -6
- package/tests/workers/ngtsc-build-worker.spec.ts +11 -13
- package/tests/workers/server-build-lint.spec.ts +4 -1
- package/tests/workers/server-build-worker.spec.ts +19 -22
- package/tests/angular/migration-cleanup.spec.ts +0 -59
|
@@ -15,8 +15,7 @@ const logger = consola.withTag("sd:cli:engine");
|
|
|
15
15
|
export interface CommonBuildWorkerEvents extends Record<string, unknown> {
|
|
16
16
|
buildStart: Record<string, never>;
|
|
17
17
|
build: {
|
|
18
|
-
|
|
19
|
-
dts: { success: boolean; errors?: string[] };
|
|
18
|
+
build: { success: boolean; errors?: string[]; warnings?: string[] };
|
|
20
19
|
lint?: LintWithProgramResult;
|
|
21
20
|
};
|
|
22
21
|
error: { message: string };
|
|
@@ -132,7 +131,7 @@ export abstract class BaseEngine<
|
|
|
132
131
|
const workerKey = `${this._pkg.name}:build`;
|
|
133
132
|
|
|
134
133
|
this._worker!.on("buildStart", () => {
|
|
135
|
-
if (
|
|
134
|
+
if (this._rebuildManager != null) {
|
|
136
135
|
resolver = this._rebuildManager.registerBuild(
|
|
137
136
|
workerKey,
|
|
138
137
|
`${this._pkg.name} (${this._getTarget()})`,
|
|
@@ -143,30 +142,20 @@ export abstract class BaseEngine<
|
|
|
143
142
|
this._worker!.on("build", (data) => {
|
|
144
143
|
const event = data;
|
|
145
144
|
|
|
146
|
-
if (event.
|
|
147
|
-
logger.warn(`${this._pkg.name}: ${event.
|
|
145
|
+
if (event.build.warnings != null && event.build.warnings.length > 0) {
|
|
146
|
+
logger.warn(`${this._pkg.name}: ${event.build.warnings.join(", ")}`);
|
|
148
147
|
}
|
|
149
148
|
|
|
150
|
-
//
|
|
149
|
+
// 빌드 결과 보고
|
|
151
150
|
const buildResult: BuildResult = {
|
|
152
151
|
name: this._pkg.name,
|
|
153
152
|
target: this._getTarget(),
|
|
154
153
|
type: "build",
|
|
155
|
-
status: event.
|
|
156
|
-
message: event.
|
|
154
|
+
status: event.build.success ? "success" : "error",
|
|
155
|
+
message: event.build.errors?.join("\n"),
|
|
157
156
|
};
|
|
158
157
|
this._resultCollector?.add(buildResult);
|
|
159
158
|
|
|
160
|
-
// DTS 결과 보고
|
|
161
|
-
const dtsResult: BuildResult = {
|
|
162
|
-
name: this._pkg.name,
|
|
163
|
-
target: this._getTarget(),
|
|
164
|
-
type: "dts",
|
|
165
|
-
status: event.dts.success ? "success" : "error",
|
|
166
|
-
message: event.dts.errors?.join("\n"),
|
|
167
|
-
};
|
|
168
|
-
this._resultCollector?.add(dtsResult);
|
|
169
|
-
|
|
170
159
|
// 린트 결과 보고 (있는 경우)
|
|
171
160
|
if (event.lint != null) {
|
|
172
161
|
const lintResult: BuildResult = {
|
|
@@ -184,7 +173,7 @@ export abstract class BaseEngine<
|
|
|
184
173
|
|
|
185
174
|
if (isInitialBuild) {
|
|
186
175
|
isInitialBuild = false;
|
|
187
|
-
logger.debug(`[${this._pkg.name}] 초기 빌드 완료 (success: ${event.
|
|
176
|
+
logger.debug(`[${this._pkg.name}] 초기 빌드 완료 (success: ${event.build.success})`);
|
|
188
177
|
resolve();
|
|
189
178
|
}
|
|
190
179
|
});
|
|
@@ -3,6 +3,9 @@ import type { ResultCollector } from "../infra/ResultCollector";
|
|
|
3
3
|
import type { RebuildManager } from "../utils/rebuild-manager";
|
|
4
4
|
import type { BuildOutput, BuildPackageInfo, EngineResult } from "./types";
|
|
5
5
|
import { BaseEngine, type CommonBuildWorkerModule } from "./BaseEngine";
|
|
6
|
+
import { consola } from "consola";
|
|
7
|
+
|
|
8
|
+
const logger = consola.withTag("sd:cli:engine:ngtsc");
|
|
6
9
|
|
|
7
10
|
/**
|
|
8
11
|
* NgtscEngine options
|
|
@@ -41,6 +44,7 @@ export class NgtscEngine extends BaseEngine<
|
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
protected async _callBuild(output: BuildOutput): Promise<EngineResult> {
|
|
47
|
+
logger.debug(`[${this._pkg.name}] worker.build 호출`);
|
|
44
48
|
const result = await this._worker!.build({
|
|
45
49
|
name: this._pkg.name,
|
|
46
50
|
cwd: this._cwd,
|
|
@@ -49,23 +53,19 @@ export class NgtscEngine extends BaseEngine<
|
|
|
49
53
|
});
|
|
50
54
|
|
|
51
55
|
return {
|
|
52
|
-
success: result.
|
|
53
|
-
|
|
54
|
-
success: result.
|
|
55
|
-
errors: result.
|
|
56
|
-
warnings: result.
|
|
57
|
-
|
|
58
|
-
dts: {
|
|
59
|
-
success: result.dts.success,
|
|
60
|
-
errors: result.dts.errors ?? [],
|
|
61
|
-
warnings: [],
|
|
62
|
-
diagnostics: result.dts.diagnostics,
|
|
56
|
+
success: result.build.success,
|
|
57
|
+
build: {
|
|
58
|
+
success: result.build.success,
|
|
59
|
+
errors: result.build.errors ?? [],
|
|
60
|
+
warnings: result.build.warnings ?? [],
|
|
61
|
+
diagnostics: result.build.diagnostics,
|
|
63
62
|
},
|
|
64
63
|
lint: result.lint,
|
|
65
64
|
};
|
|
66
65
|
}
|
|
67
66
|
|
|
68
67
|
protected async _callStartWatch(output: BuildOutput): Promise<void> {
|
|
68
|
+
logger.debug(`[${this._pkg.name}] worker.startWatch 호출`);
|
|
69
69
|
await this._worker!.startWatch({
|
|
70
70
|
name: this._pkg.name,
|
|
71
71
|
cwd: this._cwd,
|
|
@@ -3,6 +3,9 @@ import type { ResultCollector } from "../infra/ResultCollector";
|
|
|
3
3
|
import type { RebuildManager } from "../utils/rebuild-manager";
|
|
4
4
|
import type { BuildOutput, EngineResult, ServerPackageInfo } from "./types";
|
|
5
5
|
import { BaseEngine, type CommonBuildWorkerModule } from "./BaseEngine";
|
|
6
|
+
import { consola } from "consola";
|
|
7
|
+
|
|
8
|
+
const logger = consola.withTag("sd:cli:engine:server");
|
|
6
9
|
|
|
7
10
|
/**
|
|
8
11
|
* ServerEsbuildEngine options
|
|
@@ -41,6 +44,7 @@ export class ServerEsbuildEngine extends BaseEngine<
|
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
protected async _callBuild(output: BuildOutput): Promise<EngineResult> {
|
|
47
|
+
logger.debug(`[${this._pkg.name}] worker.build 호출`);
|
|
44
48
|
const result = await this._worker!.build({
|
|
45
49
|
name: this._pkg.name,
|
|
46
50
|
cwd: this._cwd,
|
|
@@ -54,23 +58,19 @@ export class ServerEsbuildEngine extends BaseEngine<
|
|
|
54
58
|
});
|
|
55
59
|
|
|
56
60
|
return {
|
|
57
|
-
success: result.
|
|
58
|
-
|
|
59
|
-
success: result.
|
|
60
|
-
errors: result.
|
|
61
|
-
warnings: result.
|
|
62
|
-
|
|
63
|
-
dts: {
|
|
64
|
-
success: result.dts.success,
|
|
65
|
-
errors: result.dts.errors ?? [],
|
|
66
|
-
warnings: [],
|
|
67
|
-
diagnostics: result.dts.diagnostics,
|
|
61
|
+
success: result.build.success,
|
|
62
|
+
build: {
|
|
63
|
+
success: result.build.success,
|
|
64
|
+
errors: result.build.errors ?? [],
|
|
65
|
+
warnings: result.build.warnings ?? [],
|
|
66
|
+
diagnostics: result.build.diagnostics,
|
|
68
67
|
},
|
|
69
68
|
lint: result.lint,
|
|
70
69
|
};
|
|
71
70
|
}
|
|
72
71
|
|
|
73
72
|
protected async _callStartWatch(output: BuildOutput): Promise<void> {
|
|
73
|
+
logger.debug(`[${this._pkg.name}] worker.startWatch 호출`);
|
|
74
74
|
await this._worker!.startWatch({
|
|
75
75
|
name: this._pkg.name,
|
|
76
76
|
cwd: this._cwd,
|
package/src/engines/TscEngine.ts
CHANGED
|
@@ -3,6 +3,9 @@ import type { ResultCollector } from "../infra/ResultCollector";
|
|
|
3
3
|
import type { RebuildManager } from "../utils/rebuild-manager";
|
|
4
4
|
import type { BuildOutput, BuildPackageInfo, EngineResult } from "./types";
|
|
5
5
|
import { BaseEngine, type CommonBuildWorkerModule } from "./BaseEngine";
|
|
6
|
+
import { consola } from "consola";
|
|
7
|
+
|
|
8
|
+
const logger = consola.withTag("sd:cli:engine:tsc");
|
|
6
9
|
|
|
7
10
|
/**
|
|
8
11
|
* TscEngine options
|
|
@@ -41,6 +44,7 @@ export class TscEngine extends BaseEngine<
|
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
protected async _callBuild(output: BuildOutput): Promise<EngineResult> {
|
|
47
|
+
logger.debug(`[${this._pkg.name}] worker.build 호출`);
|
|
44
48
|
const result = await this._worker!.build({
|
|
45
49
|
name: this._pkg.name,
|
|
46
50
|
config: this._pkg.config,
|
|
@@ -50,23 +54,19 @@ export class TscEngine extends BaseEngine<
|
|
|
50
54
|
});
|
|
51
55
|
|
|
52
56
|
return {
|
|
53
|
-
success: result.
|
|
54
|
-
|
|
55
|
-
success: result.
|
|
56
|
-
errors: result.
|
|
57
|
-
warnings: result.
|
|
58
|
-
|
|
59
|
-
dts: {
|
|
60
|
-
success: result.dts.success,
|
|
61
|
-
errors: result.dts.errors ?? [],
|
|
62
|
-
warnings: [],
|
|
63
|
-
diagnostics: result.dts.diagnostics,
|
|
57
|
+
success: result.build.success,
|
|
58
|
+
build: {
|
|
59
|
+
success: result.build.success,
|
|
60
|
+
errors: result.build.errors ?? [],
|
|
61
|
+
warnings: result.build.warnings ?? [],
|
|
62
|
+
diagnostics: result.build.diagnostics,
|
|
64
63
|
},
|
|
65
64
|
lint: result.lint,
|
|
66
65
|
};
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
protected async _callStartWatch(output: BuildOutput): Promise<void> {
|
|
69
|
+
logger.debug(`[${this._pkg.name}] worker.startWatch 호출`);
|
|
70
70
|
await this._worker!.startWatch({
|
|
71
71
|
name: this._pkg.name,
|
|
72
72
|
config: this._pkg.config,
|
|
@@ -69,15 +69,10 @@ export class ViteEngine implements BuildEngine {
|
|
|
69
69
|
logger.debug(`[${this._pkg.name}] ViteEngine.run 완료 (success: ${result.success})`);
|
|
70
70
|
return {
|
|
71
71
|
success: result.success,
|
|
72
|
-
|
|
72
|
+
build: {
|
|
73
73
|
success: result.success,
|
|
74
74
|
errors: result.errors ?? [],
|
|
75
75
|
warnings: result.warnings ?? [],
|
|
76
|
-
},
|
|
77
|
-
dts: {
|
|
78
|
-
success: true,
|
|
79
|
-
errors: [],
|
|
80
|
-
warnings: [],
|
|
81
76
|
diagnostics: [],
|
|
82
77
|
},
|
|
83
78
|
lint: result.lint,
|
|
@@ -185,22 +180,16 @@ export class ViteEngine implements BuildEngine {
|
|
|
185
180
|
message: result.errors?.join("\n"),
|
|
186
181
|
};
|
|
187
182
|
this._resultCollector?.add(buildResult);
|
|
188
|
-
|
|
189
|
-
const dtsResult: BuildResult = {
|
|
190
|
-
name: this._pkg.name,
|
|
191
|
-
target: "client",
|
|
192
|
-
type: "dts",
|
|
193
|
-
status: "success",
|
|
194
|
-
};
|
|
195
|
-
this._resultCollector?.add(dtsResult);
|
|
196
183
|
}
|
|
197
184
|
|
|
198
185
|
/**
|
|
199
186
|
* 엔진을 중지하고 리소스를 정리한다
|
|
200
187
|
*/
|
|
201
188
|
async stop(): Promise<void> {
|
|
189
|
+
logger.debug(`[${this._pkg.name}] ViteEngine stop 시작`);
|
|
202
190
|
await stopEngineWorker(this._worker, this._isWatchMode);
|
|
203
191
|
this._worker = undefined;
|
|
192
|
+
logger.debug(`[${this._pkg.name}] ViteEngine stop 완료`);
|
|
204
193
|
}
|
|
205
194
|
|
|
206
195
|
/**
|
package/src/engines/types.ts
CHANGED
|
@@ -37,6 +37,8 @@ export interface BuildOutput {
|
|
|
37
37
|
lint?: boolean;
|
|
38
38
|
/** Typecheck environment. When set, adjusts compilerOptions via getCompilerOptionsForEnv(). */
|
|
39
39
|
env?: TypecheckEnv;
|
|
40
|
+
/** Include tests/ files in typecheck scope. Only used by check command. */
|
|
41
|
+
includeTests?: boolean;
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
/**
|
|
@@ -44,12 +46,7 @@ export interface BuildOutput {
|
|
|
44
46
|
*/
|
|
45
47
|
export interface EngineResult {
|
|
46
48
|
success: boolean;
|
|
47
|
-
|
|
48
|
-
success: boolean;
|
|
49
|
-
errors: string[];
|
|
50
|
-
warnings: string[];
|
|
51
|
-
};
|
|
52
|
-
dts: {
|
|
49
|
+
build: {
|
|
53
50
|
success: boolean;
|
|
54
51
|
errors: string[];
|
|
55
52
|
warnings: string[];
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import path from "path";
|
|
2
1
|
import ts from "typescript";
|
|
3
|
-
import { fsx } from "@simplysm/core-node";
|
|
2
|
+
import { fsx, pathx } from "@simplysm/core-node";
|
|
4
3
|
import { consola } from "consola";
|
|
5
4
|
import type {
|
|
6
5
|
SdConfig,
|
|
@@ -37,7 +36,7 @@ export interface BuildOrchestratorOptions {
|
|
|
37
36
|
interface BuildStepResult {
|
|
38
37
|
name: string;
|
|
39
38
|
target: string;
|
|
40
|
-
type: "
|
|
39
|
+
type: "build" | "lint";
|
|
41
40
|
success: boolean;
|
|
42
41
|
errors?: string[];
|
|
43
42
|
warnings?: string[];
|
|
@@ -101,7 +100,7 @@ export function classifyPackages(
|
|
|
101
100
|
* Delete dist folders
|
|
102
101
|
*/
|
|
103
102
|
async function cleanDistFolders(cwd: string, packageNames: string[]): Promise<void> {
|
|
104
|
-
await Promise.all(packageNames.map((name) => fsx.rm(
|
|
103
|
+
await Promise.all(packageNames.map((name) => fsx.rm(pathx.posixResolve(cwd, "packages", name, "dist"))));
|
|
105
104
|
}
|
|
106
105
|
|
|
107
106
|
//#endregion
|
|
@@ -227,7 +226,7 @@ export class BuildOrchestrator {
|
|
|
227
226
|
|
|
228
227
|
// buildPackages: JS build + dts generation via BuildEngine
|
|
229
228
|
for (const { name, config } of classified.buildPackages) {
|
|
230
|
-
const pkgDir =
|
|
229
|
+
const pkgDir = pathx.posixResolve(this._cwd, "packages", name);
|
|
231
230
|
|
|
232
231
|
buildTasks.push(async () => {
|
|
233
232
|
this._logger.debug(`[${name}] (${config.target}) 빌드 시작`);
|
|
@@ -239,28 +238,18 @@ export class BuildOrchestrator {
|
|
|
239
238
|
try {
|
|
240
239
|
const engineResult = await engine.run({ js: true, dts: true, lint: true });
|
|
241
240
|
|
|
242
|
-
//
|
|
241
|
+
// 빌드 결과 처리
|
|
242
|
+
const diagnostics = engineResult.build.diagnostics.map((d) => deserializeDiagnostic(d, fileCache));
|
|
243
243
|
results.push({
|
|
244
244
|
name,
|
|
245
245
|
target: config.target,
|
|
246
|
-
type: "
|
|
247
|
-
success: engineResult.
|
|
248
|
-
errors: engineResult.
|
|
249
|
-
warnings: engineResult.
|
|
250
|
-
});
|
|
251
|
-
if (!engineResult.js.success) state.hasError = true;
|
|
252
|
-
|
|
253
|
-
// DTS 결과 처리
|
|
254
|
-
const diagnostics = engineResult.dts.diagnostics.map((d) => deserializeDiagnostic(d, fileCache));
|
|
255
|
-
results.push({
|
|
256
|
-
name,
|
|
257
|
-
target: config.target,
|
|
258
|
-
type: "dts",
|
|
259
|
-
success: engineResult.dts.success,
|
|
260
|
-
errors: engineResult.dts.errors.length > 0 ? engineResult.dts.errors : undefined,
|
|
246
|
+
type: "build",
|
|
247
|
+
success: engineResult.build.success,
|
|
248
|
+
errors: engineResult.build.errors.length > 0 ? engineResult.build.errors : undefined,
|
|
249
|
+
warnings: engineResult.build.warnings.length > 0 ? engineResult.build.warnings : undefined,
|
|
261
250
|
diagnostics,
|
|
262
251
|
});
|
|
263
|
-
if (!engineResult.
|
|
252
|
+
if (!engineResult.build.success) state.hasError = true;
|
|
264
253
|
|
|
265
254
|
// 린트 결과 처리
|
|
266
255
|
if (engineResult.lint != null) {
|
|
@@ -289,7 +278,7 @@ export class BuildOrchestrator {
|
|
|
289
278
|
|
|
290
279
|
// serverPackages: JS build + typecheck via BuildEngine
|
|
291
280
|
for (const { name, config } of classified.serverPackages) {
|
|
292
|
-
const pkgDir =
|
|
281
|
+
const pkgDir = pathx.posixResolve(this._cwd, "packages", name);
|
|
293
282
|
|
|
294
283
|
buildTasks.push(async () => {
|
|
295
284
|
this._logger.debug(`[${name}] (server) 빌드 시작`);
|
|
@@ -301,28 +290,18 @@ export class BuildOrchestrator {
|
|
|
301
290
|
try {
|
|
302
291
|
const engineResult = await engine.run({ js: true, dts: false, lint: true });
|
|
303
292
|
|
|
304
|
-
//
|
|
293
|
+
// 빌드 결과 처리
|
|
294
|
+
const diagnostics = engineResult.build.diagnostics.map((d) => deserializeDiagnostic(d, fileCache));
|
|
305
295
|
results.push({
|
|
306
296
|
name,
|
|
307
297
|
target: "server",
|
|
308
|
-
type: "
|
|
309
|
-
success: engineResult.
|
|
310
|
-
errors: engineResult.
|
|
311
|
-
warnings: engineResult.
|
|
312
|
-
});
|
|
313
|
-
if (!engineResult.js.success) state.hasError = true;
|
|
314
|
-
|
|
315
|
-
// DTS/타입체크 결과 처리
|
|
316
|
-
const diagnostics = engineResult.dts.diagnostics.map((d) => deserializeDiagnostic(d, fileCache));
|
|
317
|
-
results.push({
|
|
318
|
-
name,
|
|
319
|
-
target: "server",
|
|
320
|
-
type: "dts",
|
|
321
|
-
success: engineResult.dts.success,
|
|
322
|
-
errors: engineResult.dts.errors.length > 0 ? engineResult.dts.errors : undefined,
|
|
298
|
+
type: "build",
|
|
299
|
+
success: engineResult.build.success,
|
|
300
|
+
errors: engineResult.build.errors.length > 0 ? engineResult.build.errors : undefined,
|
|
301
|
+
warnings: engineResult.build.warnings.length > 0 ? engineResult.build.warnings : undefined,
|
|
323
302
|
diagnostics,
|
|
324
303
|
});
|
|
325
|
-
if (!engineResult.
|
|
304
|
+
if (!engineResult.build.success) state.hasError = true;
|
|
326
305
|
|
|
327
306
|
// 린트 결과 처리
|
|
328
307
|
if (engineResult.lint != null) {
|
|
@@ -345,7 +324,7 @@ export class BuildOrchestrator {
|
|
|
345
324
|
|
|
346
325
|
// clientPackages: Vite production build via ViteEngine (no dts)
|
|
347
326
|
for (const { name, config } of classified.clientPackages) {
|
|
348
|
-
const pkgDir =
|
|
327
|
+
const pkgDir = pathx.posixResolve(this._cwd, "packages", name);
|
|
349
328
|
|
|
350
329
|
buildTasks.push(async () => {
|
|
351
330
|
this._logger.debug(`[${name}] (client) 빌드 시작`);
|
|
@@ -357,28 +336,18 @@ export class BuildOrchestrator {
|
|
|
357
336
|
try {
|
|
358
337
|
const engineResult = await engine.run({ js: true, dts: false, lint: true });
|
|
359
338
|
|
|
360
|
-
//
|
|
361
|
-
|
|
362
|
-
name,
|
|
363
|
-
target: "client",
|
|
364
|
-
type: "js",
|
|
365
|
-
success: engineResult.js.success,
|
|
366
|
-
errors: engineResult.js.errors.length > 0 ? engineResult.js.errors : undefined,
|
|
367
|
-
warnings: engineResult.js.warnings.length > 0 ? engineResult.js.warnings : undefined,
|
|
368
|
-
});
|
|
369
|
-
if (!engineResult.js.success) state.hasError = true;
|
|
370
|
-
|
|
371
|
-
// DTS 결과 처리
|
|
372
|
-
const diagnostics = engineResult.dts.diagnostics.map((d) => deserializeDiagnostic(d, fileCache));
|
|
339
|
+
// 빌드 결과 처리
|
|
340
|
+
const diagnostics = engineResult.build.diagnostics.map((d) => deserializeDiagnostic(d, fileCache));
|
|
373
341
|
results.push({
|
|
374
342
|
name,
|
|
375
343
|
target: "client",
|
|
376
|
-
type: "
|
|
377
|
-
success: engineResult.
|
|
378
|
-
errors: engineResult.
|
|
344
|
+
type: "build",
|
|
345
|
+
success: engineResult.build.success,
|
|
346
|
+
errors: engineResult.build.errors.length > 0 ? engineResult.build.errors : undefined,
|
|
347
|
+
warnings: engineResult.build.warnings.length > 0 ? engineResult.build.warnings : undefined,
|
|
379
348
|
diagnostics,
|
|
380
349
|
});
|
|
381
|
-
if (!engineResult.
|
|
350
|
+
if (!engineResult.build.success) state.hasError = true;
|
|
382
351
|
|
|
383
352
|
// 린트 결과 처리
|
|
384
353
|
if (engineResult.lint != null) {
|
|
@@ -392,9 +361,9 @@ export class BuildOrchestrator {
|
|
|
392
361
|
if (!engineResult.lint.success) state.hasError = true;
|
|
393
362
|
}
|
|
394
363
|
|
|
395
|
-
// 네이티브 빌드 (
|
|
396
|
-
if (engineResult.
|
|
397
|
-
const distPath =
|
|
364
|
+
// 네이티브 빌드 (빌드 성공 시에만 실행)
|
|
365
|
+
if (engineResult.build.success) {
|
|
366
|
+
const distPath = pathx.posixResolve(pkgDir, "dist");
|
|
398
367
|
const nativeBuildPromises: Array<Promise<void>> = [];
|
|
399
368
|
|
|
400
369
|
if (config.capacitor != null) {
|
|
@@ -462,7 +431,7 @@ export class BuildOrchestrator {
|
|
|
462
431
|
// 결과 출력
|
|
463
432
|
const allDiagnostics: ts.Diagnostic[] = [];
|
|
464
433
|
for (const result of results) {
|
|
465
|
-
const typeLabel = result.type === "
|
|
434
|
+
const typeLabel = result.type === "lint" ? "lint" : result.target;
|
|
466
435
|
|
|
467
436
|
// 경고 출력
|
|
468
437
|
if (result.warnings != null) {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import path from "path";
|
|
2
1
|
import { spawn, type ChildProcess } from "child_process";
|
|
3
2
|
import { consola } from "consola";
|
|
4
|
-
import { Worker, type WorkerProxy } from "@simplysm/core-node";
|
|
3
|
+
import { Worker, type WorkerProxy, pathx } from "@simplysm/core-node";
|
|
5
4
|
import { FsWatcher } from "@simplysm/core-node";
|
|
6
5
|
import { err as errNs } from "@simplysm/core-common";
|
|
7
6
|
import type {
|
|
@@ -12,7 +11,7 @@ import type {
|
|
|
12
11
|
SdServerPackageConfig,
|
|
13
12
|
} from "../sd-config.types";
|
|
14
13
|
import { loadSdConfig } from "../utils/sd-config";
|
|
15
|
-
import {
|
|
14
|
+
import { filterPackagesByTargets, validateTargets, classifyWatchPackages, classifyDevPackages, buildPathMapFromConfig } from "../utils/package-utils";
|
|
16
15
|
import { getVersion } from "../utils/build-env";
|
|
17
16
|
import { watchReplaceDeps, type WatchReplaceDepResult } from "../utils/replace-deps";
|
|
18
17
|
import { printErrors, printServers } from "../utils/output-utils";
|
|
@@ -72,6 +71,7 @@ export class DevWatchOrchestrator {
|
|
|
72
71
|
private _baseEnv: { VER: string; DEV: string } | undefined;
|
|
73
72
|
private readonly _serverRuntimeWorkers = new Map<string, WorkerProxy<typeof ServerRuntimeWorkerModule>>();
|
|
74
73
|
private _printServersTimer: ReturnType<typeof setTimeout> | undefined;
|
|
74
|
+
private _serverRestartTimer: ReturnType<typeof setTimeout> | undefined;
|
|
75
75
|
|
|
76
76
|
// Watchers
|
|
77
77
|
private _copySrcWatchers: FsWatcher[] = [];
|
|
@@ -107,13 +107,11 @@ export class DevWatchOrchestrator {
|
|
|
107
107
|
throw err;
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
//
|
|
111
|
-
|
|
112
|
-
const { merged, pathMap } = mergeTestsPackagesIntoConfig(sdConfig.packages, workspacePackages);
|
|
113
|
-
this._pathMap = pathMap;
|
|
110
|
+
// Build pathMap from config packages only (tests packages are excluded from watch/dev)
|
|
111
|
+
this._pathMap = buildPathMapFromConfig(sdConfig.packages);
|
|
114
112
|
|
|
115
113
|
// Validate targets
|
|
116
|
-
validateTargets(this._options.targets,
|
|
114
|
+
validateTargets(this._options.targets, sdConfig.packages);
|
|
117
115
|
|
|
118
116
|
// Store replaceDeps for engine creation
|
|
119
117
|
this._replaceDeps = sdConfig.replaceDeps;
|
|
@@ -130,7 +128,7 @@ export class DevWatchOrchestrator {
|
|
|
130
128
|
}
|
|
131
129
|
|
|
132
130
|
// Filter by targets
|
|
133
|
-
const allPackages = filterPackagesByTargets(
|
|
131
|
+
const allPackages = filterPackagesByTargets(sdConfig.packages, this._options.targets);
|
|
134
132
|
|
|
135
133
|
// Classify packages based on mode
|
|
136
134
|
if (this._options.mode === "watch") {
|
|
@@ -161,12 +159,12 @@ export class DevWatchOrchestrator {
|
|
|
161
159
|
|
|
162
160
|
// Batch complete handler
|
|
163
161
|
if (this._options.mode === "watch") {
|
|
164
|
-
this._rebuildManager.on("batchComplete", () => {
|
|
162
|
+
this._rebuildManager.on("batchComplete", (_completedKeys) => {
|
|
165
163
|
printErrors(this._resultCollector.toMap());
|
|
166
164
|
});
|
|
167
165
|
} else {
|
|
168
|
-
this._rebuildManager.on("batchComplete", () => {
|
|
169
|
-
this._onDevBatchComplete();
|
|
166
|
+
this._rebuildManager.on("batchComplete", (completedKeys) => {
|
|
167
|
+
this._onDevBatchComplete(completedKeys);
|
|
170
168
|
});
|
|
171
169
|
}
|
|
172
170
|
|
|
@@ -223,8 +221,10 @@ export class DevWatchOrchestrator {
|
|
|
223
221
|
|
|
224
222
|
async start(): Promise<void> {
|
|
225
223
|
if (!this._hasPackages) {
|
|
224
|
+
this._logger.debug("대상 패키지 없음, start 건너뜀");
|
|
226
225
|
return;
|
|
227
226
|
}
|
|
227
|
+
this._logger.debug("start 시작");
|
|
228
228
|
|
|
229
229
|
if (this._options.mode === "watch") {
|
|
230
230
|
await this._startWatchMode();
|
|
@@ -244,6 +244,7 @@ export class DevWatchOrchestrator {
|
|
|
244
244
|
if (!this._hasPackages) {
|
|
245
245
|
return;
|
|
246
246
|
}
|
|
247
|
+
this._logger.debug("shutdown 시작");
|
|
247
248
|
|
|
248
249
|
process.stdout.write("⏳ 종료 중...\n");
|
|
249
250
|
|
|
@@ -280,6 +281,7 @@ export class DevWatchOrchestrator {
|
|
|
280
281
|
// --- Watch mode ---
|
|
281
282
|
|
|
282
283
|
private async _startWatchMode(): Promise<void> {
|
|
284
|
+
this._logger.debug("watch 모드 시작");
|
|
283
285
|
// Start copySrc watchers for library packages
|
|
284
286
|
for (const pkg of this._libraryPackages) {
|
|
285
287
|
if (pkg.config.copySrc != null && pkg.config.copySrc.length > 0) {
|
|
@@ -295,7 +297,7 @@ export class DevWatchOrchestrator {
|
|
|
295
297
|
|
|
296
298
|
const watchPromises = this._libraryEngines.map(async (engine, i) => {
|
|
297
299
|
const pkgName = this._libraryPackages[i].name;
|
|
298
|
-
await engine.startWatch({ js: true, dts: true, lint:
|
|
300
|
+
await engine.startWatch({ js: true, dts: true, lint: false });
|
|
299
301
|
completed++;
|
|
300
302
|
this._logger.info(` [${completed}/${total}] ${pkgName} 완료`);
|
|
301
303
|
});
|
|
@@ -309,7 +311,7 @@ export class DevWatchOrchestrator {
|
|
|
309
311
|
// Start watch hook watchers for scripts+watch packages
|
|
310
312
|
for (const pkg of this._watchHookPackages) {
|
|
311
313
|
const watchConfig = pkg.config.watch!;
|
|
312
|
-
const watchTargets = watchConfig.target.map((t) =>
|
|
314
|
+
const watchTargets = watchConfig.target.map((t) => pathx.posixResolve(pkg.dir, t));
|
|
313
315
|
|
|
314
316
|
// Run initial hook
|
|
315
317
|
this._runWatchHookCmd(pkg.name, pkg.dir, watchConfig.cmd, watchConfig.args);
|
|
@@ -355,14 +357,14 @@ export class DevWatchOrchestrator {
|
|
|
355
357
|
for (const [name, engine] of this._clientEngines) {
|
|
356
358
|
initialBuildPromises.push({
|
|
357
359
|
name: `${name} (client)`,
|
|
358
|
-
promise: engine.startWatch({ js: true, dts: false, lint:
|
|
360
|
+
promise: engine.startWatch({ js: true, dts: false, lint: false }),
|
|
359
361
|
});
|
|
360
362
|
}
|
|
361
363
|
|
|
362
364
|
for (const [name, engine] of this._serverEngines) {
|
|
363
365
|
initialBuildPromises.push({
|
|
364
366
|
name: `${name} (server)`,
|
|
365
|
-
promise: engine.startWatch({ js: true, dts: false, lint:
|
|
367
|
+
promise: engine.startWatch({ js: true, dts: false, lint: false }),
|
|
366
368
|
});
|
|
367
369
|
}
|
|
368
370
|
|
|
@@ -398,34 +400,13 @@ export class DevWatchOrchestrator {
|
|
|
398
400
|
}
|
|
399
401
|
}
|
|
400
402
|
|
|
401
|
-
// Start runtimes for successful initial builds
|
|
402
|
-
for (const { name, config } of this._serverPackages) {
|
|
403
|
-
const buildResult = this._resultCollector.get(`${name}:build`);
|
|
404
|
-
if (buildResult?.status === "success") {
|
|
405
|
-
const mainJsPath = path.join(this._cwd, "packages", name, "dist", "main.js");
|
|
406
|
-
const clientPorts = this._collectClientPorts(name);
|
|
407
|
-
try {
|
|
408
|
-
await this._startServerRuntime(name, mainJsPath, { ...this._baseEnv, ...config.env }, clientPorts);
|
|
409
|
-
} catch (err) {
|
|
410
|
-
this._logger.error(`[${name}] 서버 런타임 시작 실패:`, errNs.message(err));
|
|
411
|
-
this._resultCollector.add({
|
|
412
|
-
name,
|
|
413
|
-
target: "server",
|
|
414
|
-
type: "server",
|
|
415
|
-
status: "error",
|
|
416
|
-
message: errNs.message(err),
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
|
|
422
403
|
// Start native apps for client packages with capacitor/electron config
|
|
423
404
|
for (const { name, config } of this._clientPackages) {
|
|
424
405
|
const port = this._getClientPort(name);
|
|
425
406
|
if (port == null) continue;
|
|
426
407
|
|
|
427
408
|
const devServerUrl = `http://localhost:${port}`;
|
|
428
|
-
const pkgDir =
|
|
409
|
+
const pkgDir = pathx.posixResolve(this._cwd, "packages", name);
|
|
429
410
|
|
|
430
411
|
if (config.capacitor != null) {
|
|
431
412
|
try {
|
|
@@ -466,12 +447,28 @@ export class DevWatchOrchestrator {
|
|
|
466
447
|
printServers(this._resultCollector.toMap(), this._serverClientsMap);
|
|
467
448
|
}
|
|
468
449
|
|
|
469
|
-
private _onDevBatchComplete(): void {
|
|
450
|
+
private _onDevBatchComplete(completedKeys: string[]): void {
|
|
451
|
+
this._logger.debug(`배치 완료 (${completedKeys.join(", ")})`);
|
|
452
|
+
const serverBuildKeys = this._serverPackages.map((p) => `${p.name}:build`);
|
|
453
|
+
if (!completedKeys.some((k) => serverBuildKeys.includes(k))) {
|
|
454
|
+
printErrors(this._resultCollector.toMap());
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
if (this._serverRestartTimer != null) clearTimeout(this._serverRestartTimer);
|
|
459
|
+
this._serverRestartTimer = setTimeout(() => {
|
|
460
|
+
this._serverRestartTimer = undefined;
|
|
461
|
+
void this._restartServers();
|
|
462
|
+
}, 100);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
private async _restartServers(): Promise<void> {
|
|
466
|
+
this._logger.debug("서버 재시작 시작");
|
|
470
467
|
const restartPromises: Array<Promise<void>> = [];
|
|
471
468
|
for (const { name, config } of this._serverPackages) {
|
|
472
469
|
const buildResult = this._resultCollector.get(`${name}:build`);
|
|
473
470
|
if (buildResult?.status === "success") {
|
|
474
|
-
const mainJsPath =
|
|
471
|
+
const mainJsPath = pathx.posixResolve(this._cwd, "packages", name, "dist", "main.js");
|
|
475
472
|
const clientPorts = this._collectClientPorts(name);
|
|
476
473
|
restartPromises.push(
|
|
477
474
|
this._startServerRuntime(name, mainJsPath, { ...this._baseEnv, ...config.env }, clientPorts)
|
|
@@ -488,10 +485,10 @@ export class DevWatchOrchestrator {
|
|
|
488
485
|
);
|
|
489
486
|
}
|
|
490
487
|
}
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
488
|
+
await Promise.all(restartPromises);
|
|
489
|
+
this._logger.debug("서버 재시작 완료");
|
|
490
|
+
printErrors(this._resultCollector.toMap());
|
|
491
|
+
this._schedulePrintServers();
|
|
495
492
|
}
|
|
496
493
|
|
|
497
494
|
private _schedulePrintServers(): void {
|