@simplysm/sd-cli 14.0.11 → 14.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.
- package/README.md +58 -253
- package/dist/angular/client-transform-stylesheet.js +1 -1
- package/dist/angular/client-transform-stylesheet.js.map +1 -1
- package/dist/angular/vite-angular-plugin.d.ts +1 -1
- package/dist/angular/vite-angular-plugin.d.ts.map +1 -1
- package/dist/angular/vite-angular-plugin.js +60 -34
- package/dist/angular/vite-angular-plugin.js.map +1 -1
- package/dist/angular/vite-postcss-inline-plugin.d.ts +1 -1
- package/dist/angular/vite-postcss-inline-plugin.js +1 -1
- package/dist/capacitor/capacitor.d.ts +14 -2
- package/dist/capacitor/capacitor.d.ts.map +1 -1
- package/dist/capacitor/capacitor.js +131 -17
- package/dist/capacitor/capacitor.js.map +1 -1
- package/dist/commands/build.d.ts +3 -10
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +3 -10
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/check.js +3 -3
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/dev.d.ts +3 -9
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +3 -9
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/device.d.ts +3 -3
- package/dist/commands/device.js +5 -5
- package/dist/commands/device.js.map +1 -1
- package/dist/commands/publish.d.ts +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +18 -26
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/replace-deps.d.ts +3 -3
- package/dist/commands/replace-deps.d.ts.map +1 -1
- package/dist/commands/replace-deps.js +1 -1
- package/dist/commands/typecheck.d.ts +4 -3
- package/dist/commands/typecheck.d.ts.map +1 -1
- package/dist/commands/typecheck.js +5 -11
- package/dist/commands/typecheck.js.map +1 -1
- package/dist/commands/watch.d.ts +9 -9
- package/dist/commands/watch.js +9 -9
- package/dist/electron/electron.d.ts.map +1 -1
- package/dist/electron/electron.js +42 -3
- package/dist/electron/electron.js.map +1 -1
- package/dist/engines/BaseEngine.d.ts +1 -1
- package/dist/engines/BaseEngine.d.ts.map +1 -1
- package/dist/engines/BaseEngine.js +3 -1
- package/dist/engines/BaseEngine.js.map +1 -1
- package/dist/engines/NgtscEngine.d.ts +7 -7
- package/dist/engines/NgtscEngine.d.ts.map +1 -1
- package/dist/engines/NgtscEngine.js +3 -3
- package/dist/engines/ServerEsbuildEngine.d.ts +7 -7
- package/dist/engines/ServerEsbuildEngine.d.ts.map +1 -1
- package/dist/engines/ServerEsbuildEngine.js +3 -3
- package/dist/engines/TscEngine.d.ts +7 -7
- package/dist/engines/TscEngine.d.ts.map +1 -1
- package/dist/engines/TscEngine.js +3 -3
- package/dist/engines/ViteEngine.d.ts +1 -1
- package/dist/engines/ViteEngine.d.ts.map +1 -1
- package/dist/engines/ViteEngine.js +7 -12
- package/dist/engines/ViteEngine.js.map +1 -1
- package/dist/engines/index.d.ts +5 -5
- package/dist/engines/index.js +5 -5
- package/dist/engines/types.d.ts +20 -20
- package/dist/engines/types.d.ts.map +1 -1
- package/dist/infra/ResultCollector.d.ts +9 -9
- package/dist/infra/ResultCollector.js +8 -8
- package/dist/infra/SignalHandler.d.ts +7 -7
- package/dist/infra/SignalHandler.js +7 -7
- package/dist/infra/WorkerManager.d.ts +14 -14
- package/dist/infra/WorkerManager.js +14 -14
- package/dist/orchestrators/BuildOrchestrator.d.ts +25 -25
- package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/BuildOrchestrator.js +29 -29
- package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
- package/dist/orchestrators/DevWatchOrchestrator.d.ts +7 -7
- package/dist/orchestrators/DevWatchOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/DevWatchOrchestrator.js +34 -34
- package/dist/orchestrators/DevWatchOrchestrator.js.map +1 -1
- package/dist/sd-cli-entry.d.ts +2 -2
- package/dist/sd-cli-entry.d.ts.map +1 -1
- package/dist/sd-cli-entry.js +15 -8
- package/dist/sd-cli-entry.js.map +1 -1
- package/dist/sd-cli.d.ts +3 -3
- package/dist/sd-cli.js +16 -16
- package/dist/sd-cli.js.map +1 -1
- package/dist/sd-config.types.d.ts +105 -105
- package/dist/sd-config.types.d.ts.map +1 -1
- package/dist/utils/angular-compiler.js +5 -5
- package/dist/utils/angular-compiler.js.map +1 -1
- package/dist/utils/build-env.d.ts +1 -1
- package/dist/utils/build-env.js +1 -1
- package/dist/utils/concurrency.d.ts +7 -7
- package/dist/utils/concurrency.js +7 -7
- package/dist/utils/copy-public.d.ts +9 -9
- package/dist/utils/copy-public.js +17 -17
- package/dist/utils/copy-public.js.map +1 -1
- package/dist/utils/copy-src.d.ts +9 -9
- package/dist/utils/copy-src.js +11 -11
- package/dist/utils/copy-src.js.map +1 -1
- package/dist/utils/engine-stop.d.ts +8 -9
- package/dist/utils/engine-stop.d.ts.map +1 -1
- package/dist/utils/engine-stop.js +9 -10
- package/dist/utils/engine-stop.js.map +1 -1
- package/dist/utils/esbuild-config.d.ts +23 -23
- package/dist/utils/esbuild-config.d.ts.map +1 -1
- package/dist/utils/esbuild-config.js +25 -25
- package/dist/utils/esbuild-config.js.map +1 -1
- package/dist/utils/lint-with-program.d.ts +15 -15
- package/dist/utils/lint-with-program.d.ts.map +1 -1
- package/dist/utils/lint-with-program.js +29 -29
- package/dist/utils/lint-with-program.js.map +1 -1
- package/dist/utils/ngtsc-build-core.d.ts +8 -8
- package/dist/utils/ngtsc-build-core.d.ts.map +1 -1
- package/dist/utils/ngtsc-build-core.js +14 -14
- package/dist/utils/ngtsc-build-core.js.map +1 -1
- package/dist/utils/output-path-rewriter.d.ts +14 -14
- package/dist/utils/output-path-rewriter.js +18 -18
- package/dist/utils/output-path-rewriter.js.map +1 -1
- package/dist/utils/output-utils.d.ts +6 -6
- package/dist/utils/output-utils.js +11 -11
- package/dist/utils/output-utils.js.map +1 -1
- package/dist/utils/package-utils.d.ts +21 -21
- package/dist/utils/package-utils.d.ts.map +1 -1
- package/dist/utils/package-utils.js +56 -45
- package/dist/utils/package-utils.js.map +1 -1
- package/dist/utils/replace-deps.d.ts +25 -25
- package/dist/utils/replace-deps.d.ts.map +1 -1
- package/dist/utils/replace-deps.js +84 -65
- package/dist/utils/replace-deps.js.map +1 -1
- package/dist/utils/sd-config.d.ts +3 -3
- package/dist/utils/sd-config.js +3 -3
- package/dist/utils/tsc-build.d.ts +13 -13
- package/dist/utils/tsc-build.d.ts.map +1 -1
- package/dist/utils/tsc-build.js +9 -9
- package/dist/utils/tsc-build.js.map +1 -1
- package/dist/utils/tsconfig.d.ts +11 -9
- package/dist/utils/tsconfig.d.ts.map +1 -1
- package/dist/utils/tsconfig.js +11 -9
- package/dist/utils/tsconfig.js.map +1 -1
- package/dist/utils/typecheck-non-package.d.ts +5 -6
- package/dist/utils/typecheck-non-package.d.ts.map +1 -1
- package/dist/utils/typecheck-non-package.js +7 -8
- package/dist/utils/typecheck-non-package.js.map +1 -1
- package/dist/utils/typecheck-serialization.d.ts +8 -8
- package/dist/utils/typecheck-serialization.d.ts.map +1 -1
- package/dist/utils/typecheck-serialization.js +12 -16
- package/dist/utils/typecheck-serialization.js.map +1 -1
- package/dist/utils/vite-config.d.ts +8 -5
- package/dist/utils/vite-config.d.ts.map +1 -1
- package/dist/utils/vite-config.js +36 -29
- 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 +1 -1
- package/dist/utils/vite-scope-watch-plugin.js.map +1 -1
- package/dist/utils/worker-events.d.ts +12 -12
- package/dist/utils/worker-events.d.ts.map +1 -1
- package/dist/utils/worker-events.js +10 -10
- package/dist/utils/worker-events.js.map +1 -1
- package/dist/utils/worker-utils.d.ts +12 -13
- package/dist/utils/worker-utils.d.ts.map +1 -1
- package/dist/utils/worker-utils.js +12 -13
- package/dist/utils/worker-utils.js.map +1 -1
- package/dist/vitest-plugin.d.ts.map +1 -1
- package/dist/vitest-plugin.js +5 -7
- package/dist/vitest-plugin.js.map +1 -1
- package/dist/workers/client.worker.d.ts +4 -2
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +209 -1
- package/dist/workers/client.worker.js.map +1 -1
- package/dist/workers/library-build.worker.d.ts +1 -1
- package/dist/workers/library-build.worker.d.ts.map +1 -1
- package/dist/workers/library-build.worker.js +7 -7
- package/dist/workers/library-build.worker.js.map +1 -1
- package/dist/workers/lint.worker.d.ts +2 -2
- package/dist/workers/lint.worker.js +2 -2
- package/dist/workers/ngtsc-build.worker.js +30 -30
- package/dist/workers/ngtsc-build.worker.js.map +1 -1
- package/dist/workers/server-build.worker.d.ts +17 -17
- package/dist/workers/server-build.worker.d.ts.map +1 -1
- package/dist/workers/server-build.worker.js +46 -46
- package/dist/workers/server-build.worker.js.map +1 -1
- package/dist/workers/server-runtime.worker.d.ts +7 -7
- package/dist/workers/server-runtime.worker.d.ts.map +1 -1
- package/dist/workers/server-runtime.worker.js +17 -17
- package/dist/workers/server-runtime.worker.js.map +1 -1
- package/docs/config.md +340 -0
- package/docs/publish-configuration-types.md +87 -0
- package/docs/pwa-configuration-types.md +55 -0
- package/docs/vitest-plugin.md +47 -0
- package/package.json +9 -7
- package/src/angular/client-transform-stylesheet.ts +1 -1
- package/src/angular/vite-angular-plugin.ts +70 -37
- package/src/angular/vite-postcss-inline-plugin.ts +1 -1
- package/src/capacitor/capacitor.ts +159 -23
- package/src/commands/build.ts +3 -10
- package/src/commands/check.ts +3 -3
- package/src/commands/dev.ts +3 -9
- package/src/commands/device.ts +5 -5
- package/src/commands/publish.ts +30 -26
- package/src/commands/replace-deps.ts +3 -3
- package/src/commands/typecheck.ts +7 -13
- package/src/commands/watch.ts +9 -9
- package/src/electron/electron.ts +49 -4
- package/src/engines/BaseEngine.ts +4 -1
- package/src/engines/NgtscEngine.ts +7 -7
- package/src/engines/ServerEsbuildEngine.ts +7 -7
- package/src/engines/TscEngine.ts +7 -7
- package/src/engines/ViteEngine.ts +8 -13
- package/src/engines/index.ts +5 -5
- package/src/engines/types.ts +20 -20
- package/src/infra/ResultCollector.ts +9 -9
- package/src/infra/SignalHandler.ts +7 -7
- package/src/infra/WorkerManager.ts +14 -14
- package/src/orchestrators/BuildOrchestrator.ts +37 -37
- package/src/orchestrators/DevWatchOrchestrator.ts +36 -36
- package/src/sd-cli-entry.ts +15 -8
- package/src/sd-cli.ts +16 -16
- package/src/sd-config.types.ts +107 -107
- package/src/utils/angular-compiler.ts +5 -5
- package/src/utils/build-env.ts +1 -1
- package/src/utils/concurrency.ts +7 -7
- package/src/utils/copy-public.ts +17 -17
- package/src/utils/copy-src.ts +11 -11
- package/src/utils/engine-stop.ts +9 -10
- package/src/utils/esbuild-config.ts +29 -29
- package/src/utils/lint-with-program.ts +34 -34
- package/src/utils/ngtsc-build-core.ts +17 -17
- package/src/utils/output-path-rewriter.ts +18 -18
- package/src/utils/output-utils.ts +11 -11
- package/src/utils/package-utils.ts +57 -45
- package/src/utils/replace-deps.ts +92 -67
- package/src/utils/sd-config.ts +3 -3
- package/src/utils/tsc-build.ts +18 -18
- package/src/utils/tsconfig.ts +11 -9
- package/src/utils/typecheck-non-package.ts +7 -8
- package/src/utils/typecheck-serialization.ts +13 -15
- package/src/utils/vite-config.ts +45 -35
- package/src/utils/vite-scope-watch-plugin.ts +6 -1
- package/src/utils/worker-events.ts +16 -16
- package/src/utils/worker-utils.ts +12 -13
- package/src/vitest-plugin.ts +5 -8
- package/src/workers/client.worker.ts +236 -2
- package/src/workers/library-build.worker.ts +8 -8
- package/src/workers/lint.worker.ts +2 -2
- package/src/workers/ngtsc-build.worker.ts +31 -31
- package/src/workers/server-build.worker.ts +60 -60
- package/src/workers/server-runtime.worker.ts +22 -22
- package/tests/angular/vite-angular-plugin-hmr-fallback.spec.ts +1 -0
- package/tests/angular/vite-angular-plugin-hmr.spec.ts +78 -0
- package/tests/angular/vite-angular-plugin.spec.ts +67 -0
- package/tests/capacitor/capacitor-build.spec.ts +6 -4
- package/tests/capacitor/capacitor-icon.spec.ts +7 -5
- package/tests/capacitor/capacitor-init.spec.ts +120 -10
- package/tests/capacitor/capacitor-run.spec.ts +14 -17
- package/tests/capacitor/capacitor-workspace.spec.ts +5 -3
- package/tests/commands/check.spec.ts +2 -2
- package/tests/commands/publish.spec.ts +2 -2
- package/tests/commands/typecheck.spec.ts +8 -0
- package/tests/electron/electron.spec.ts +12 -10
- package/tests/engines/base-engine.spec.ts +37 -0
- package/tests/engines/vite-engine.spec.ts +115 -3
- package/tests/utils/vite-config.spec.ts +144 -90
- package/tests/workers/client-worker.spec.ts +690 -0
- package/tests/workers/server-build-worker.spec.ts +3 -3
package/src/engines/types.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { TypecheckEnv } from "../utils/tsconfig";
|
|
|
4
4
|
import type { LintWithProgramResult } from "../utils/lint-with-program";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* 패키지 정보
|
|
8
8
|
*/
|
|
9
9
|
export interface PackageInfo {
|
|
10
10
|
name: string;
|
|
@@ -13,36 +13,36 @@ export interface PackageInfo {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* 빌드 패키지(node/browser/neutral)로 좁혀진 PackageInfo
|
|
17
17
|
*/
|
|
18
18
|
export type BuildPackageInfo = PackageInfo & { config: SdBuildPackageConfig };
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
21
|
+
* 서버 패키지로 좁혀진 PackageInfo
|
|
22
22
|
*/
|
|
23
23
|
export type ServerPackageInfo = PackageInfo & { config: SdServerPackageConfig };
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* 클라이언트 패키지로 좁혀진 PackageInfo
|
|
27
27
|
*/
|
|
28
28
|
export type ClientPackageInfo = PackageInfo & { config: SdClientPackageConfig };
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* 빌드 출력 제어 플래그
|
|
32
32
|
*/
|
|
33
33
|
export interface BuildOutput {
|
|
34
34
|
js: boolean;
|
|
35
35
|
dts: boolean;
|
|
36
|
-
/**
|
|
36
|
+
/** true일 때, 타입체크 중 생성된 ts.Program으로 ESLint를 실행한다. */
|
|
37
37
|
lint?: boolean;
|
|
38
|
-
/**
|
|
38
|
+
/** 타입체크 환경. 설정 시 getCompilerOptionsForEnv()를 통해 compilerOptions를 조정한다. */
|
|
39
39
|
env?: TypecheckEnv;
|
|
40
|
-
/**
|
|
40
|
+
/** 타입체크 범위에 tests/ 파일을 포함한다. check 커맨드에서만 사용된다. */
|
|
41
41
|
includeTests?: boolean;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
|
-
* BuildEngine.run()
|
|
45
|
+
* BuildEngine.run() 반환값
|
|
46
46
|
*/
|
|
47
47
|
export interface EngineResult {
|
|
48
48
|
success: boolean;
|
|
@@ -52,33 +52,33 @@ export interface EngineResult {
|
|
|
52
52
|
warnings: string[];
|
|
53
53
|
diagnostics: SerializedDiagnostic[];
|
|
54
54
|
};
|
|
55
|
-
/**
|
|
55
|
+
/** 린트 결과 (BuildOutput.lint가 true일 때 존재) */
|
|
56
56
|
lint?: LintWithProgramResult;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
60
|
+
* 빌드 엔진 인터페이스
|
|
61
61
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
62
|
+
* 모든 빌드 엔진의 공통 계약.
|
|
63
|
+
* 타입체크(diagnostics)는 항상 포함되며 선택사항이 아니다.
|
|
64
64
|
*/
|
|
65
65
|
export interface BuildEngine {
|
|
66
66
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
67
|
+
* 일회성 빌드 (프로덕션)
|
|
68
|
+
* Worker를 생성하고, 빌드를 실행하고, 결합된 결과를 반환한다.
|
|
69
|
+
* 호출 후 stop()으로 리소스를 정리한다.
|
|
70
70
|
*/
|
|
71
71
|
run(output: BuildOutput): Promise<EngineResult>;
|
|
72
72
|
|
|
73
73
|
/**
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
74
|
+
* 워치 모드 시작
|
|
75
|
+
* 초기 빌드가 완료되면 Promise가 resolve된다.
|
|
76
|
+
* 이후 리빌드는 주입된 ResultCollector를 통해 보고된다.
|
|
77
77
|
*/
|
|
78
78
|
startWatch(output: BuildOutput): Promise<void>;
|
|
79
79
|
|
|
80
80
|
/**
|
|
81
|
-
*
|
|
81
|
+
* 엔진을 중지하고 리소스(Worker, esbuild context 등)를 정리한다
|
|
82
82
|
*/
|
|
83
83
|
stop(): Promise<void>;
|
|
84
84
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 빌드 결과 상태
|
|
3
3
|
*/
|
|
4
4
|
export interface BuildResult {
|
|
5
5
|
name: string;
|
|
@@ -11,17 +11,17 @@ export interface BuildResult {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* 빌드 결과를 수집·관리하는 클래스
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
16
|
+
* 여러 Builder의 빌드 결과를 중앙에서 관리하며,
|
|
17
|
+
* 상태별 필터링 및 출력 기능을 제공한다.
|
|
18
18
|
*/
|
|
19
19
|
export class ResultCollector {
|
|
20
20
|
private readonly _results = new Map<string, BuildResult>();
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
* @param result
|
|
23
|
+
* 결과를 추가한다
|
|
24
|
+
* @param result 빌드 결과
|
|
25
25
|
*/
|
|
26
26
|
add(result: BuildResult): void {
|
|
27
27
|
const key = `${result.name}:${result.type}`;
|
|
@@ -29,15 +29,15 @@ export class ResultCollector {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
* @param key
|
|
32
|
+
* 키로 결과를 조회한다
|
|
33
|
+
* @param key 결과 키 (예: "core-common:build")
|
|
34
34
|
*/
|
|
35
35
|
get(key: string): BuildResult | undefined {
|
|
36
36
|
return this._results.get(key);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
|
-
*
|
|
40
|
+
* 내부 Map을 반환한다 (외부 접근용)
|
|
41
41
|
*/
|
|
42
42
|
toMap(): Map<string, BuildResult> {
|
|
43
43
|
return this._results;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 프로세스 종료 시그널을 처리하는 클래스
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* SIGINT(Ctrl+C) 및 SIGTERM 시그널을 감지하고,
|
|
5
|
+
* 종료까지 대기하는 Promise를 제공한다.
|
|
6
6
|
*/
|
|
7
7
|
export class SignalHandler {
|
|
8
8
|
private _terminateResolver: (() => void) | null = null;
|
|
@@ -26,22 +26,22 @@ export class SignalHandler {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
|
-
*
|
|
29
|
+
* 종료 시그널이 수신될 때까지 대기한다
|
|
30
30
|
*/
|
|
31
31
|
waitForTermination(): Promise<void> {
|
|
32
32
|
return this._terminatePromise;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
36
|
+
* 종료 여부를 확인한다
|
|
37
37
|
*/
|
|
38
38
|
isTerminated(): boolean {
|
|
39
39
|
return this._terminated;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
44
|
-
* (
|
|
43
|
+
* 프로그래밍 방식으로 종료를 요청한다
|
|
44
|
+
* (테스트나 외부에서 종료를 트리거할 때 사용)
|
|
45
45
|
*/
|
|
46
46
|
requestTermination(): void {
|
|
47
47
|
if (!this._terminated) {
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { Worker, type WorkerProxy, type WorkerModule } from "@simplysm/core-node";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Worker 생명주기를 관리하는 클래스
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Worker 생성, 조회, 종료를 중앙에서 관리하여
|
|
7
|
+
* 리소스 누수를 방지하고 일관된 Worker 관리를 제공한다.
|
|
8
8
|
*/
|
|
9
9
|
export class WorkerManager {
|
|
10
10
|
private readonly _workers = new Map<string, WorkerProxy<WorkerModule>>();
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
14
|
-
* @param id Worker
|
|
15
|
-
* @param workerPath Worker
|
|
16
|
-
* @returns
|
|
13
|
+
* 새 Worker를 생성한다
|
|
14
|
+
* @param id Worker 식별자 (예: "core-common:build")
|
|
15
|
+
* @param workerPath Worker 파일 경로
|
|
16
|
+
* @returns 생성된 WorkerProxy
|
|
17
17
|
*/
|
|
18
18
|
create<TModule extends WorkerModule>(id: string, workerPath: string): WorkerProxy<TModule> {
|
|
19
19
|
const worker = Worker.create<TModule>(workerPath);
|
|
@@ -22,16 +22,16 @@ export class WorkerManager {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
26
|
-
* @param id Worker
|
|
25
|
+
* ID로 Worker를 조회한다
|
|
26
|
+
* @param id Worker 식별자
|
|
27
27
|
*/
|
|
28
28
|
get<TModule extends WorkerModule>(id: string): WorkerProxy<TModule> | undefined {
|
|
29
29
|
return this._workers.get(id) as WorkerProxy<TModule> | undefined;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
34
|
-
* @param id Worker
|
|
33
|
+
* 특정 Worker를 종료하고 제거한다
|
|
34
|
+
* @param id Worker 식별자
|
|
35
35
|
*/
|
|
36
36
|
async terminate(id: string): Promise<void> {
|
|
37
37
|
const worker = this._workers.get(id);
|
|
@@ -42,7 +42,7 @@ export class WorkerManager {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
|
-
*
|
|
45
|
+
* 모든 Worker를 종료한다
|
|
46
46
|
*/
|
|
47
47
|
async terminateAll(): Promise<void> {
|
|
48
48
|
await Promise.all([...this._workers.values()].map((w) => w.terminate()));
|
|
@@ -50,14 +50,14 @@ export class WorkerManager {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
53
|
+
* 관리 중인 Worker 수
|
|
54
54
|
*/
|
|
55
55
|
get size(): number {
|
|
56
56
|
return this._workers.size;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
60
|
+
* 모든 Worker ID 목록
|
|
61
61
|
*/
|
|
62
62
|
get ids(): string[] {
|
|
63
63
|
return [...this._workers.keys()];
|
|
@@ -21,17 +21,17 @@ import { Electron } from "../electron/electron";
|
|
|
21
21
|
//#region Types
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
24
|
+
* BuildOrchestrator 옵션
|
|
25
25
|
*/
|
|
26
26
|
export interface BuildOrchestratorOptions {
|
|
27
|
-
/**
|
|
27
|
+
/** 빌드 대상 패키지 필터 (빈 배열이면 전체) */
|
|
28
28
|
targets: string[];
|
|
29
|
-
/**
|
|
29
|
+
/** sd.config.ts에 전달할 추가 옵션 */
|
|
30
30
|
options: string[];
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* 빌드 결과
|
|
35
35
|
*/
|
|
36
36
|
interface BuildStepResult {
|
|
37
37
|
name: string;
|
|
@@ -44,14 +44,14 @@ interface BuildStepResult {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
47
|
+
* 패키지 분류 결과
|
|
48
48
|
*/
|
|
49
49
|
interface ClassifiedPackages {
|
|
50
|
-
/** node/browser/neutral
|
|
50
|
+
/** node/browser/neutral 대상 (JS + DTS) */
|
|
51
51
|
buildPackages: Array<{ name: string; config: SdBuildPackageConfig }>;
|
|
52
|
-
/** server
|
|
52
|
+
/** server 대상 (JS 빌드, DTS 없음) */
|
|
53
53
|
serverPackages: Array<{ name: string; config: SdServerPackageConfig }>;
|
|
54
|
-
/** client
|
|
54
|
+
/** client 대상 (Vite 프로덕션 빌드, DTS 없음) */
|
|
55
55
|
clientPackages: Array<{ name: string; config: SdClientPackageConfig }>;
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -60,11 +60,11 @@ interface ClassifiedPackages {
|
|
|
60
60
|
//#region Utilities
|
|
61
61
|
|
|
62
62
|
/**
|
|
63
|
-
*
|
|
64
|
-
* - node/browser/neutral: buildPackages (JS +
|
|
65
|
-
* - server: serverPackages (JS
|
|
66
|
-
* - client: clientPackages (Vite
|
|
67
|
-
* - scripts:
|
|
63
|
+
* 패키지를 target별로 분류
|
|
64
|
+
* - node/browser/neutral: buildPackages (JS + DTS)
|
|
65
|
+
* - server: serverPackages (JS 빌드, DTS 없음)
|
|
66
|
+
* - client: clientPackages (Vite 프로덕션 빌드, DTS 없음)
|
|
67
|
+
* - scripts: 제외
|
|
68
68
|
*/
|
|
69
69
|
export function classifyPackages(
|
|
70
70
|
packages: Record<
|
|
@@ -97,7 +97,7 @@ export function classifyPackages(
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
/**
|
|
100
|
-
*
|
|
100
|
+
* dist 폴더 삭제
|
|
101
101
|
*/
|
|
102
102
|
async function cleanDistFolders(cwd: string, packageNames: string[]): Promise<void> {
|
|
103
103
|
await Promise.all(packageNames.map((name) => fsx.rm(pathx.posixResolve(cwd, "packages", name, "dist"))));
|
|
@@ -108,14 +108,14 @@ async function cleanDistFolders(cwd: string, packageNames: string[]): Promise<vo
|
|
|
108
108
|
//#region BuildOrchestrator
|
|
109
109
|
|
|
110
110
|
/**
|
|
111
|
-
*
|
|
111
|
+
* 프로덕션 빌드를 조율하는 Orchestrator
|
|
112
112
|
*
|
|
113
|
-
*
|
|
114
|
-
* -
|
|
115
|
-
* -
|
|
116
|
-
* -
|
|
117
|
-
* -
|
|
118
|
-
* -
|
|
113
|
+
* sd.config.ts 기반으로 패키지를 분류하고 빌드를 실행한다.
|
|
114
|
+
* - dist 폴더 정리 (클린 빌드)
|
|
115
|
+
* - lint + 빌드 동시 실행
|
|
116
|
+
* - 라이브러리 패키지: TscEngine/NgtscEngine으로 JS + DTS 빌드
|
|
117
|
+
* - 서버 패키지: BuildEngine으로 JS 빌드
|
|
118
|
+
* - 클라이언트 패키지: ViteEngine으로 Vite 프로덕션 빌드
|
|
119
119
|
*/
|
|
120
120
|
export class BuildOrchestrator {
|
|
121
121
|
private readonly _cwd: string;
|
|
@@ -183,12 +183,12 @@ export class BuildOrchestrator {
|
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
/**
|
|
186
|
-
*
|
|
187
|
-
* -
|
|
188
|
-
* -
|
|
189
|
-
* -
|
|
186
|
+
* 빌드 실행
|
|
187
|
+
* - 클린
|
|
188
|
+
* - lint + 빌드 (동시 실행)
|
|
189
|
+
* - 결과 출력
|
|
190
190
|
*
|
|
191
|
-
* @returns
|
|
191
|
+
* @returns 에러 발생 여부 (true: 에러 있음)
|
|
192
192
|
*/
|
|
193
193
|
async start(): Promise<boolean> {
|
|
194
194
|
if (this._allPackageNames.length === 0) {
|
|
@@ -198,15 +198,15 @@ export class BuildOrchestrator {
|
|
|
198
198
|
const classified = this._classified!;
|
|
199
199
|
const baseEnv = this._baseEnv!;
|
|
200
200
|
|
|
201
|
-
//
|
|
201
|
+
// 결과 수집
|
|
202
202
|
const results: BuildStepResult[] = [];
|
|
203
|
-
//
|
|
203
|
+
// 에러 추적 (콜백에서 변경 추적을 위해 객체로 래핑)
|
|
204
204
|
const state = { hasError: false };
|
|
205
205
|
|
|
206
|
-
//
|
|
206
|
+
// 파일 캐시 (진단 출력용)
|
|
207
207
|
const fileCache = new Map<string, string>();
|
|
208
208
|
|
|
209
|
-
// formatHost (
|
|
209
|
+
// formatHost (진단 출력용)
|
|
210
210
|
const formatHost: ts.FormatDiagnosticsHost = {
|
|
211
211
|
getCanonicalFileName: (f) => f,
|
|
212
212
|
getCurrentDirectory: () => this._cwd,
|
|
@@ -221,10 +221,10 @@ export class BuildOrchestrator {
|
|
|
221
221
|
// Phase 2: 빌드
|
|
222
222
|
const concurrency = getMaxConcurrency();
|
|
223
223
|
|
|
224
|
-
//
|
|
224
|
+
// 빌드 태스크 목록 생성
|
|
225
225
|
const buildTasks: Array<() => Promise<void>> = [];
|
|
226
226
|
|
|
227
|
-
//
|
|
227
|
+
// 라이브러리 패키지: BuildEngine으로 JS + DTS 빌드
|
|
228
228
|
for (const { name, config } of classified.buildPackages) {
|
|
229
229
|
const pkgDir = pathx.posixResolve(this._cwd, "packages", name);
|
|
230
230
|
|
|
@@ -276,7 +276,7 @@ export class BuildOrchestrator {
|
|
|
276
276
|
});
|
|
277
277
|
}
|
|
278
278
|
|
|
279
|
-
//
|
|
279
|
+
// 서버 패키지: BuildEngine으로 JS 빌드 + 타입체크
|
|
280
280
|
for (const { name, config } of classified.serverPackages) {
|
|
281
281
|
const pkgDir = pathx.posixResolve(this._cwd, "packages", name);
|
|
282
282
|
|
|
@@ -322,7 +322,7 @@ export class BuildOrchestrator {
|
|
|
322
322
|
});
|
|
323
323
|
}
|
|
324
324
|
|
|
325
|
-
//
|
|
325
|
+
// 클라이언트 패키지: ViteEngine으로 Vite 프로덕션 빌드 (DTS 없음)
|
|
326
326
|
for (const { name, config } of classified.clientPackages) {
|
|
327
327
|
const pkgDir = pathx.posixResolve(this._cwd, "packages", name);
|
|
328
328
|
|
|
@@ -471,11 +471,11 @@ export class BuildOrchestrator {
|
|
|
471
471
|
}
|
|
472
472
|
|
|
473
473
|
/**
|
|
474
|
-
*
|
|
474
|
+
* Orchestrator 종료 (현재 정리할 리소스 없음)
|
|
475
475
|
*/
|
|
476
476
|
async shutdown(): Promise<void> {
|
|
477
|
-
//
|
|
478
|
-
//
|
|
477
|
+
// 프로덕션 빌드는 일회성 작업이므로 종료 시 정리할 리소스가 없음
|
|
478
|
+
// Worker는 각 빌드 태스크 내에서 terminate()로 정리됨
|
|
479
479
|
await Promise.resolve();
|
|
480
480
|
}
|
|
481
481
|
}
|