@simplysm/sd-cli 14.0.11 → 14.0.13
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 +4 -2
- package/dist/angular/vite-angular-plugin.d.ts.map +1 -1
- package/dist/angular/vite-angular-plugin.js +73 -36
- 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 +20 -2
- package/dist/capacitor/capacitor.d.ts.map +1 -1
- package/dist/capacitor/capacitor.js +155 -28
- 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 +24 -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 +7 -1
- package/dist/engines/ViteEngine.d.ts.map +1 -1
- package/dist/engines/ViteEngine.js +13 -12
- package/dist/engines/ViteEngine.js.map +1 -1
- package/dist/engines/index.d.ts +9 -5
- package/dist/engines/index.d.ts.map +1 -1
- package/dist/engines/index.js +7 -5
- package/dist/engines/index.js.map +1 -1
- 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 +34 -30
- 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 +12 -5
- package/dist/utils/vite-config.d.ts.map +1 -1
- package/dist/utils/vite-config.js +95 -41
- 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 +8 -2
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +215 -6
- 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 +89 -39
- package/src/angular/vite-postcss-inline-plugin.ts +1 -1
- package/src/capacitor/capacitor.ts +185 -38
- 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 +18 -13
- package/src/engines/index.ts +11 -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 +42 -38
- 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 +108 -46
- 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 +246 -7
- 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 +93 -11
- package/tests/capacitor/capacitor-icon.spec.ts +7 -5
- package/tests/capacitor/capacitor-init.spec.ts +124 -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 +162 -90
- package/tests/workers/client-worker.spec.ts +690 -0
- package/tests/workers/server-build-worker.spec.ts +3 -3
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import type { BuildResult } from "../infra/ResultCollector";
|
|
2
2
|
import type { SdPackageConfig } from "../sd-config.types";
|
|
3
3
|
import type { RebuildManager } from "./rebuild-manager";
|
|
4
|
-
/**
|
|
4
|
+
/** 워커 빌드 완료 이벤트 데이터 */
|
|
5
5
|
export interface BuildEventData {
|
|
6
6
|
success: boolean;
|
|
7
7
|
errors?: string[];
|
|
8
8
|
warnings?: string[];
|
|
9
9
|
}
|
|
10
|
-
/**
|
|
10
|
+
/** 워커 에러 이벤트 데이터 */
|
|
11
11
|
export interface ErrorEventData {
|
|
12
12
|
message: string;
|
|
13
13
|
}
|
|
14
|
-
/**
|
|
14
|
+
/** 워커 서버 준비 완료 이벤트 데이터 */
|
|
15
15
|
export interface ServerReadyEventData {
|
|
16
16
|
port: number;
|
|
17
17
|
}
|
|
18
|
-
/** Server
|
|
18
|
+
/** Server 빌드 완료 이벤트 데이터 */
|
|
19
19
|
export interface ServerBuildEventData {
|
|
20
20
|
success: boolean;
|
|
21
21
|
mainJsPath: string;
|
|
@@ -23,7 +23,7 @@ export interface ServerBuildEventData {
|
|
|
23
23
|
warnings?: string[];
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* 기본 Worker 정보 타입
|
|
27
27
|
*/
|
|
28
28
|
export interface BaseWorkerInfo<TEvents extends Record<string, unknown> = Record<string, unknown>> {
|
|
29
29
|
name: string;
|
|
@@ -36,7 +36,7 @@ export interface BaseWorkerInfo<TEvents extends Record<string, unknown> = Record
|
|
|
36
36
|
buildResolver: (() => void) | undefined;
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
39
|
+
* 워커 이벤트 핸들러 옵션
|
|
40
40
|
*/
|
|
41
41
|
export interface WorkerEventHandlerOptions {
|
|
42
42
|
resultKey: string;
|
|
@@ -44,13 +44,13 @@ export interface WorkerEventHandlerOptions {
|
|
|
44
44
|
resultType: "build";
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
47
|
+
* 공통 Worker 이벤트 핸들러를 등록한다 (buildStart, build, error만 — serverReady 미포함)
|
|
48
48
|
*
|
|
49
|
-
* @param workerInfo
|
|
50
|
-
* @param opts
|
|
51
|
-
* @param results
|
|
52
|
-
* @param rebuildManager
|
|
53
|
-
* @returns completeTask
|
|
49
|
+
* @param workerInfo 워커 정보
|
|
50
|
+
* @param opts 핸들러 옵션
|
|
51
|
+
* @param results 결과 맵
|
|
52
|
+
* @param rebuildManager 재빌드 매니저
|
|
53
|
+
* @returns completeTask 함수 (결과 저장 및 빌드 완료 신호)
|
|
54
54
|
*/
|
|
55
55
|
export declare function registerWorkerEventHandlers(workerInfo: {
|
|
56
56
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-events.d.ts","sourceRoot":"","sources":["../../src/utils/worker-events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKxD,
|
|
1
|
+
{"version":3,"file":"worker-events.d.ts","sourceRoot":"","sources":["../../src/utils/worker-events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKxD,uBAAuB;AACvB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,oBAAoB;AACpB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,0BAA0B;AAC1B,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,2BAA2B;AAC3B,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/F,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE;QACN,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;QACjF,IAAI,CAAC,CAAC,SAAS,MAAM,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;KACjE,CAAC;IACF,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE;IACV,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B,MAAM,EAAE;QACN,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;KACvD,CAAC;IACF,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CACzC,EACD,IAAI,EAAE,yBAAyB,EAC/B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACjC,cAAc,EAAE,cAAc,GAC7B,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAiD/B"}
|
|
@@ -2,13 +2,13 @@ import { consola } from "consola";
|
|
|
2
2
|
import { formatBuildMessages } from "./output-utils.js";
|
|
3
3
|
const workerEventsLogger = consola.withTag("sd:cli:worker-events");
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* 공통 Worker 이벤트 핸들러를 등록한다 (buildStart, build, error만 — serverReady 미포함)
|
|
6
6
|
*
|
|
7
|
-
* @param workerInfo
|
|
8
|
-
* @param opts
|
|
9
|
-
* @param results
|
|
10
|
-
* @param rebuildManager
|
|
11
|
-
* @returns completeTask
|
|
7
|
+
* @param workerInfo 워커 정보
|
|
8
|
+
* @param opts 핸들러 옵션
|
|
9
|
+
* @param results 결과 맵
|
|
10
|
+
* @param rebuildManager 재빌드 매니저
|
|
11
|
+
* @returns completeTask 함수 (결과 저장 및 빌드 완료 신호)
|
|
12
12
|
*/
|
|
13
13
|
export function registerWorkerEventHandlers(workerInfo, opts, results, rebuildManager) {
|
|
14
14
|
workerEventsLogger.debug(`[${workerInfo.name}] 이벤트 핸들러 등록 (${opts.resultType})`);
|
|
@@ -18,16 +18,16 @@ export function registerWorkerEventHandlers(workerInfo, opts, results, rebuildMa
|
|
|
18
18
|
workerInfo.buildResolver = undefined;
|
|
19
19
|
workerInfo.isInitialBuild = false;
|
|
20
20
|
};
|
|
21
|
-
//
|
|
21
|
+
// 빌드 시작 (재빌드 시)
|
|
22
22
|
workerInfo.worker.on("buildStart", () => {
|
|
23
23
|
if (!workerInfo.isInitialBuild) {
|
|
24
24
|
workerInfo.buildResolver = rebuildManager.registerBuild(opts.resultKey, opts.listrTitle);
|
|
25
25
|
}
|
|
26
26
|
});
|
|
27
|
-
//
|
|
27
|
+
// 빌드 완료
|
|
28
28
|
workerInfo.worker.on("build", (data) => {
|
|
29
29
|
workerEventsLogger.debug(`[${workerInfo.name}] build: success=${String(data.success)}`);
|
|
30
|
-
//
|
|
30
|
+
// 경고 출력
|
|
31
31
|
if (data.warnings != null && data.warnings.length > 0) {
|
|
32
32
|
workerEventsLogger.warn(formatBuildMessages(workerInfo.name, workerInfo.config.target, data.warnings));
|
|
33
33
|
}
|
|
@@ -39,7 +39,7 @@ export function registerWorkerEventHandlers(workerInfo, opts, results, rebuildMa
|
|
|
39
39
|
message: data.errors?.join("\n"),
|
|
40
40
|
});
|
|
41
41
|
});
|
|
42
|
-
//
|
|
42
|
+
// 에러
|
|
43
43
|
workerInfo.worker.on("error", (data) => {
|
|
44
44
|
workerEventsLogger.debug(`[${workerInfo.name}] error: ${data.message}`);
|
|
45
45
|
completeTask({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-events.js","sourceRoot":"","sources":["../../src/utils/worker-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAkDnE;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CACzC,UAQC,EACD,IAA+B,EAC/B,OAAiC,EACjC,cAA8B;IAE9B,kBAAkB,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,iBAAiB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACjF,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAQ,EAAE;QACjD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACpC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC;QAC7B,UAAU,CAAC,aAAa,GAAG,SAAS,CAAC;QACrC,UAAU,CAAC,cAAc,GAAG,KAAK,CAAC;IACpC,CAAC,CAAC;IAEF,
|
|
1
|
+
{"version":3,"file":"worker-events.js","sourceRoot":"","sources":["../../src/utils/worker-events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAkDnE;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CACzC,UAQC,EACD,IAA+B,EAC/B,OAAiC,EACjC,cAA8B;IAE9B,kBAAkB,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,iBAAiB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACjF,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAQ,EAAE;QACjD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACpC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC;QAC7B,UAAU,CAAC,aAAa,GAAG,SAAS,CAAC;QACrC,UAAU,CAAC,cAAc,GAAG,KAAK,CAAC;IACpC,CAAC,CAAC;IAEF,gBAAgB;IAChB,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QACtC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;YAC/B,UAAU,CAAC,aAAa,GAAG,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ;IACR,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACrC,kBAAkB,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,oBAAoB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAExF,QAAQ;QACR,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,kBAAkB,CAAC,IAAI,CACrB,mBAAmB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAC9E,CAAC;QACJ,CAAC;QAED,YAAY,CAAC;YACX,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM;YAChC,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,MAAM,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;YACnD,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;SACjC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK;IACL,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACrC,kBAAkB,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,YAAY,CAAC;YACX,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM;YAChC,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -1,28 +1,27 @@
|
|
|
1
1
|
import { type ConsolaInstance } from "consola";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* 워커 스레드에서 sd-cli 리포터와 디버그 로그 레벨을 적용한다.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* SD_DEBUG 환경변수(메인 프로세스의 --debug 플래그로 설정)를 확인하고
|
|
6
|
+
* 현재 워커 스레드의 consola에 디버그 로그 레벨을 적용한다.
|
|
7
|
+
* 워커 모듈 최상위에서 호출해야 한다.
|
|
8
8
|
*/
|
|
9
9
|
export declare function applyDebugLevel(): void;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* 워커 프로세스 종료 시그널에 대한 정리 핸들러를 등록한다.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* exit with code 0.
|
|
13
|
+
* 프로세스 종료 전 리소스를 정상적으로 정리하기 위해 SIGINT와 SIGTERM 핸들러를 등록한다.
|
|
14
|
+
* 두 핸들러 모두 정리 함수를 실행하고 코드 0으로 종료한다.
|
|
16
15
|
*
|
|
17
|
-
* @param cleanup -
|
|
18
|
-
* @param logger -
|
|
16
|
+
* @param cleanup - 종료 시 실행할 정리 함수 (동기 또는 비동기)
|
|
17
|
+
* @param logger - 에러 로깅용 consola 로거 인스턴스
|
|
19
18
|
*/
|
|
20
19
|
export declare function registerCleanupHandlers(cleanup: () => void | Promise<void>, logger: ConsolaInstance): void;
|
|
21
20
|
/**
|
|
22
|
-
*
|
|
21
|
+
* Worker 함수의 중복 호출을 방지하는 가드를 생성한다.
|
|
23
22
|
*
|
|
24
|
-
* @param label -
|
|
25
|
-
* @returns
|
|
23
|
+
* @param label - 에러 메시지에 사용할 함수명
|
|
24
|
+
* @returns 두 번 호출되면 에러를 던지는 가드 함수
|
|
26
25
|
*/
|
|
27
26
|
export declare function createOnceGuard(label: string): () => void;
|
|
28
27
|
//# sourceMappingURL=worker-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-utils.d.ts","sourceRoot":"","sources":["../../src/utils/worker-utils.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,eAAe,EAAa,MAAM,SAAS,CAAC;AAGnE;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED
|
|
1
|
+
{"version":3,"file":"worker-utils.d.ts","sourceRoot":"","sources":["../../src/utils/worker-utils.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,eAAe,EAAa,MAAM,SAAS,CAAC;AAGnE;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACnC,MAAM,EAAE,eAAe,GACtB,IAAI,CAcN;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI,CAQzD"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import consola, { LogLevels } from "consola";
|
|
2
2
|
import { SdCliReporter } from "./SdCliReporter.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* 워커 스레드에서 sd-cli 리포터와 디버그 로그 레벨을 적용한다.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* SD_DEBUG 환경변수(메인 프로세스의 --debug 플래그로 설정)를 확인하고
|
|
7
|
+
* 현재 워커 스레드의 consola에 디버그 로그 레벨을 적용한다.
|
|
8
|
+
* 워커 모듈 최상위에서 호출해야 한다.
|
|
9
9
|
*/
|
|
10
10
|
export function applyDebugLevel() {
|
|
11
11
|
consola.options.reporters = [new SdCliReporter()];
|
|
@@ -14,14 +14,13 @@ export function applyDebugLevel() {
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* 워커 프로세스 종료 시그널에 대한 정리 핸들러를 등록한다.
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* exit with code 0.
|
|
19
|
+
* 프로세스 종료 전 리소스를 정상적으로 정리하기 위해 SIGINT와 SIGTERM 핸들러를 등록한다.
|
|
20
|
+
* 두 핸들러 모두 정리 함수를 실행하고 코드 0으로 종료한다.
|
|
22
21
|
*
|
|
23
|
-
* @param cleanup -
|
|
24
|
-
* @param logger -
|
|
22
|
+
* @param cleanup - 종료 시 실행할 정리 함수 (동기 또는 비동기)
|
|
23
|
+
* @param logger - 에러 로깅용 consola 로거 인스턴스
|
|
25
24
|
*/
|
|
26
25
|
export function registerCleanupHandlers(cleanup, logger) {
|
|
27
26
|
const handleSignal = () => {
|
|
@@ -38,10 +37,10 @@ export function registerCleanupHandlers(cleanup, logger) {
|
|
|
38
37
|
process.on("SIGINT", handleSignal);
|
|
39
38
|
}
|
|
40
39
|
/**
|
|
41
|
-
*
|
|
40
|
+
* Worker 함수의 중복 호출을 방지하는 가드를 생성한다.
|
|
42
41
|
*
|
|
43
|
-
* @param label -
|
|
44
|
-
* @returns
|
|
42
|
+
* @param label - 에러 메시지에 사용할 함수명
|
|
43
|
+
* @returns 두 번 호출되면 에러를 던지는 가드 함수
|
|
45
44
|
*/
|
|
46
45
|
export function createOnceGuard(label) {
|
|
47
46
|
let called = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-utils.js","sourceRoot":"","sources":["../../src/utils/worker-utils.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAwB,SAAS,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAClC,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"worker-utils.js","sourceRoot":"","sources":["../../src/utils/worker-utils.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAwB,SAAS,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAClC,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAmC,EACnC,MAAuB;IAEvB,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aACvB,IAAI,CAAC,GAAG,EAAE;YACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AACrC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,OAAO,GAAG,EAAE;QACV,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,qCAAqC,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest-plugin.d.ts","sourceRoot":"","sources":["../src/vitest-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"vitest-plugin.d.ts","sourceRoot":"","sources":["../src/vitest-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAOnC,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,CA2G/E"}
|
package/dist/vitest-plugin.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from "path";
|
|
2
2
|
import ts from "typescript";
|
|
3
|
+
import { pathx } from "@simplysm/core-node";
|
|
3
4
|
import { NgtscProgram } from "./utils/angular-build.js";
|
|
4
5
|
import { compileScssString, compileScssFile } from "./utils/scss-compiler.js";
|
|
5
6
|
export function angularVitestPlugin(options) {
|
|
@@ -24,7 +25,7 @@ export function angularVitestPlugin(options) {
|
|
|
24
25
|
inlineSources: true,
|
|
25
26
|
};
|
|
26
27
|
const host = ts.createCompilerHost(compilerOptions);
|
|
27
|
-
// AngularLibraryHostExtensions
|
|
28
|
+
// AngularLibraryHostExtensions 덕 타이핑
|
|
28
29
|
const hostExt = host;
|
|
29
30
|
hostExt.readResource = (fileName) => ts.sys.readFile(fileName) ?? "";
|
|
30
31
|
const pkgDir = ts.sys.resolvePath(options.tsconfig + "/..");
|
|
@@ -60,12 +61,12 @@ export function angularVitestPlugin(options) {
|
|
|
60
61
|
await program.compiler.analyzeAsync();
|
|
61
62
|
const { transformers } = program.compiler.prepareEmit();
|
|
62
63
|
const tsProgram = program.getTsProgram();
|
|
63
|
-
//
|
|
64
|
+
// 파일별 emit
|
|
64
65
|
for (const filePath of sourceFiles) {
|
|
65
66
|
const sf = tsProgram.getSourceFile(filePath);
|
|
66
67
|
if (sf == null)
|
|
67
68
|
continue;
|
|
68
|
-
currentSourcePath =
|
|
69
|
+
currentSourcePath = pathx.posix(filePath);
|
|
69
70
|
tsProgram.emit(sf, host.writeFile, undefined, false, transformers);
|
|
70
71
|
}
|
|
71
72
|
},
|
|
@@ -73,7 +74,7 @@ export function angularVitestPlugin(options) {
|
|
|
73
74
|
if (!id.endsWith(".ts") || id.includes("node_modules")) {
|
|
74
75
|
return undefined;
|
|
75
76
|
}
|
|
76
|
-
const compiled = compiledFiles.get(
|
|
77
|
+
const compiled = compiledFiles.get(pathx.posix(id));
|
|
77
78
|
if (compiled == null) {
|
|
78
79
|
return undefined;
|
|
79
80
|
}
|
|
@@ -81,7 +82,4 @@ export function angularVitestPlugin(options) {
|
|
|
81
82
|
},
|
|
82
83
|
};
|
|
83
84
|
}
|
|
84
|
-
function normalizePath(p) {
|
|
85
|
-
return p.replace(/\\/g, "/");
|
|
86
|
-
}
|
|
87
85
|
//# sourceMappingURL=vitest-plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest-plugin.js","sourceRoot":"","sources":["../src/vitest-plugin.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAqC,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAS3E,MAAM,UAAU,mBAAmB,CAAC,OAAmC;IACrE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwC,CAAC;IAEtE,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,KAAK;QAEd,KAAK,CAAC,UAAU;YACd,MAAM,UAAU,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxE,MAAM,YAAY,GAAG,EAAE,CAAC,0BAA0B,CAChD,UAAU,CAAC,MAAM,EACjB,EAAE,CAAC,GAAG,EACN,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,CAC7C,CAAC;YAEF,6CAA6C;YAC7C,MAAM,WAAW,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CACtD,CAAC;YAEF,MAAM,sBAAsB,GAAG,UAAU,CAAC,MAAM,EAAE,sBAErC,CAAC;YAEd,MAAM,eAAe,GAAuB;gBAC1C,GAAG,YAAY,CAAC,OAAO;gBACvB,GAAI,sBAAyD;gBAC7D,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,KAAK;gBAClB,cAAc,EAAE,KAAK;gBACrB,SAAS,EAAE,KAAK;gBAChB,eAAe,EAAE,IAAI;gBACrB,aAAa,EAAE,IAAI;aACpB,CAAC;YAEF,MAAM,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;YAEpD,
|
|
1
|
+
{"version":3,"file":"vitest-plugin.js","sourceRoot":"","sources":["../src/vitest-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,8 +18,14 @@ export interface ClientBuildInfo {
|
|
|
18
18
|
browserSupport?: SdBrowserSupportConfig;
|
|
19
19
|
/** PWA 설정. false로 비활성화. 미설정 시 기본값으로 활성화 */
|
|
20
20
|
pwa?: false | SdPwaConfig;
|
|
21
|
-
/**
|
|
21
|
+
/** 컴파일의 ts.Program을 사용하여 lint 실행 */
|
|
22
22
|
enableLint?: boolean;
|
|
23
|
+
/** Vite optimizeDeps.exclude에 전달할 패키지 목록 */
|
|
24
|
+
exclude?: string[];
|
|
25
|
+
/** 빌드 출력 경로 (미설정 시 pkgDir/dist) */
|
|
26
|
+
outDir?: string;
|
|
27
|
+
/** Vite base 경로 (미설정 시 /{pkgName}/) */
|
|
28
|
+
base?: string;
|
|
23
29
|
}
|
|
24
30
|
/** Client 빌드 결과 */
|
|
25
31
|
export interface ClientBuildResult {
|
|
@@ -46,7 +52,7 @@ export interface ClientWorkerEvents extends Record<string, unknown> {
|
|
|
46
52
|
*/
|
|
47
53
|
declare function startWatch(info: ClientBuildInfo): Promise<ClientBuildResult>;
|
|
48
54
|
/**
|
|
49
|
-
* dev server 중지. Vite server를 정리한다.
|
|
55
|
+
* dev server 중지. Vite server 또는 RollupWatcher를 정리한다.
|
|
50
56
|
*/
|
|
51
57
|
declare function stopWatch(): Promise<void>;
|
|
52
58
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.worker.d.ts","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.worker.d.ts","sourceRoot":"","sources":["../../src/workers/client.worker.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,KAAK,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAM3E,sBAAsB;AACtB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,uDAAuD;IACvD,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACrC,kBAAkB;IAClB,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,2CAA2C;IAC3C,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;IAC1B,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,mBAAmB;AACnB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,qBAAqB,CAAC;CAC9B;AAED,oBAAoB;AACpB,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClC,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CACrC;AAgID;;;GAGG;AACH,iBAAe,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA+D3E;AAgGD;;GAEG;AACH,iBAAe,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAiCxC;AAED;;GAEG;AACH,iBAAe,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8CtE;AAkBD,QAAA,MAAM,MAAM;;;eAED,OAAO,KAAK;oBACP,OAAO,UAAU;mBAClB,OAAO,SAAS;;;CAGI,CAAC;AAEpC,eAAe,MAAM,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { createServer, build as viteBuild } from "vite";
|
|
2
2
|
import path from "path";
|
|
3
3
|
import fs from "node:fs";
|
|
4
|
+
import http from "node:http";
|
|
5
|
+
import mime from "mime";
|
|
4
6
|
import { createWorker } from "@simplysm/core-node";
|
|
5
7
|
import { err as errNs } from "@simplysm/core-common";
|
|
6
8
|
import { consola } from "consola";
|
|
@@ -11,6 +13,98 @@ applyDebugLevel();
|
|
|
11
13
|
//#region Worker
|
|
12
14
|
const logger = consola.withTag("sd:cli:client:worker");
|
|
13
15
|
let viteServer;
|
|
16
|
+
let rollupWatcher;
|
|
17
|
+
let legacyHttpServer;
|
|
18
|
+
/** SSE 연결된 클라이언트 목록 (live reload용) */
|
|
19
|
+
const sseClients = new Set();
|
|
20
|
+
/** SSE 연결된 모든 클라이언트에 reload 신호를 전송한다 */
|
|
21
|
+
function notifyLiveReload() {
|
|
22
|
+
for (const client of sseClients) {
|
|
23
|
+
client.write("data: reload\n\n");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** live reload 클라이언트 스크립트 (HTML에 주입) */
|
|
27
|
+
const LIVE_RELOAD_SCRIPT = `<script>(function(){var s=new EventSource("__live-reload");s.onmessage=function(){location.reload();};})()</script>`;
|
|
28
|
+
/**
|
|
29
|
+
* HTML 응답 시 live reload 스크립트를 </body> 직전에 주입한다.
|
|
30
|
+
*/
|
|
31
|
+
function injectLiveReloadScript(html) {
|
|
32
|
+
const idx = html.lastIndexOf("</body>");
|
|
33
|
+
if (idx !== -1) {
|
|
34
|
+
return html.slice(0, idx) + LIVE_RELOAD_SCRIPT + html.slice(idx);
|
|
35
|
+
}
|
|
36
|
+
return html + LIVE_RELOAD_SCRIPT;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* legacy dev 모드용 HTTP 정적 파일 서버를 생성한다.
|
|
40
|
+
* dist/ 디렉토리의 파일을 서빙하고, SPA fallback + SSE live reload를 지원한다.
|
|
41
|
+
*/
|
|
42
|
+
function createLegacyHttpServer(distDir, basePath) {
|
|
43
|
+
return http.createServer((req, res) => {
|
|
44
|
+
const url = (req.url ?? "/").split("?")[0];
|
|
45
|
+
// basePath prefix 제거
|
|
46
|
+
let relativePath;
|
|
47
|
+
if (url.startsWith(basePath)) {
|
|
48
|
+
relativePath = url.slice(basePath.length);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
res.writeHead(404);
|
|
52
|
+
res.end("Not Found");
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// SSE live reload 엔드포인트
|
|
56
|
+
if (relativePath === "__live-reload" || relativePath === "/__live-reload") {
|
|
57
|
+
res.writeHead(200, {
|
|
58
|
+
"Content-Type": "text/event-stream",
|
|
59
|
+
"Cache-Control": "no-cache",
|
|
60
|
+
"Connection": "keep-alive",
|
|
61
|
+
});
|
|
62
|
+
sseClients.add(res);
|
|
63
|
+
req.on("close", () => {
|
|
64
|
+
sseClients.delete(res);
|
|
65
|
+
});
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// 빈 경로 또는 / → index.html
|
|
69
|
+
if (relativePath === "" || relativePath === "/") {
|
|
70
|
+
relativePath = "index.html";
|
|
71
|
+
}
|
|
72
|
+
// 선행 슬래시 제거
|
|
73
|
+
if (relativePath.startsWith("/")) {
|
|
74
|
+
relativePath = relativePath.slice(1);
|
|
75
|
+
}
|
|
76
|
+
const filePath = path.join(distDir, relativePath);
|
|
77
|
+
const ext = path.extname(filePath);
|
|
78
|
+
// 파일 존재 확인
|
|
79
|
+
if (fs.existsSync(filePath) && !fs.statSync(filePath).isDirectory()) {
|
|
80
|
+
const contentType = mime.getType(ext) ?? "application/octet-stream";
|
|
81
|
+
if (ext === ".html") {
|
|
82
|
+
// HTML: live reload 스크립트 주입
|
|
83
|
+
const content = injectLiveReloadScript(fs.readFileSync(filePath, "utf-8"));
|
|
84
|
+
res.writeHead(200, { "Content-Type": contentType });
|
|
85
|
+
res.end(content);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
const content = fs.readFileSync(filePath);
|
|
89
|
+
res.writeHead(200, { "Content-Type": contentType });
|
|
90
|
+
res.end(content);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// SPA fallback: index.html 반환 (live reload 스크립트 주입)
|
|
95
|
+
const indexPath = path.join(distDir, "index.html");
|
|
96
|
+
if (fs.existsSync(indexPath)) {
|
|
97
|
+
const content = injectLiveReloadScript(fs.readFileSync(indexPath, "utf-8"));
|
|
98
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
99
|
+
res.end(content);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
res.writeHead(404);
|
|
103
|
+
res.end("Not Found");
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
14
108
|
function resolvePackageInfo(info) {
|
|
15
109
|
const tsconfigPath = path.join(info.pkgDir, "tsconfig.json");
|
|
16
110
|
const pkgJsonPath = path.join(info.pkgDir, "package.json");
|
|
@@ -22,6 +116,9 @@ function resolvePackageInfo(info) {
|
|
|
22
116
|
* 서버가 준비되면 serverReady 이벤트로 포트를 알린다.
|
|
23
117
|
*/
|
|
24
118
|
async function startWatch(info) {
|
|
119
|
+
if (info.browserSupport?.legacyModule === true) {
|
|
120
|
+
return startLegacyWatch(info);
|
|
121
|
+
}
|
|
25
122
|
logger.debug(`[${info.name}] client worker startWatch 시작 (port: ${info.port ?? "auto"})`);
|
|
26
123
|
try {
|
|
27
124
|
const { tsconfigPath, pkgName } = resolvePackageInfo(info);
|
|
@@ -45,6 +142,7 @@ async function startWatch(info) {
|
|
|
45
142
|
legacyModule: info.browserSupport?.legacyModule,
|
|
46
143
|
polyfills,
|
|
47
144
|
pwa: info.pwa,
|
|
145
|
+
exclude: info.exclude,
|
|
48
146
|
});
|
|
49
147
|
logger.debug(`[${info.name}] Vite server 생성 시작`);
|
|
50
148
|
viteServer = await createServer(viteConfig);
|
|
@@ -74,10 +172,119 @@ async function startWatch(info) {
|
|
|
74
172
|
}
|
|
75
173
|
}
|
|
76
174
|
/**
|
|
77
|
-
*
|
|
175
|
+
* legacy watch 시작. Vite build --watch로 파일 변경을 감시한다.
|
|
176
|
+
* legacyModule: true일 때 createServer 대신 사용한다.
|
|
177
|
+
*/
|
|
178
|
+
async function startLegacyWatch(info) {
|
|
179
|
+
logger.debug(`[${info.name}] client worker startLegacyWatch 시작`);
|
|
180
|
+
try {
|
|
181
|
+
const { tsconfigPath, pkgName } = resolvePackageInfo(info);
|
|
182
|
+
// dist 초기화 (첫 빌드만 비움)
|
|
183
|
+
const distDir = path.join(info.pkgDir, "dist");
|
|
184
|
+
fs.rmSync(distDir, { recursive: true, force: true });
|
|
185
|
+
// polyfills.ts 자동 감지
|
|
186
|
+
const polyfillsPath = path.join(info.pkgDir, "src", "polyfills.ts");
|
|
187
|
+
const polyfills = fs.existsSync(polyfillsPath) ? ["./src/polyfills.ts"] : undefined;
|
|
188
|
+
const viteConfig = await createClientViteConfig({
|
|
189
|
+
pkgDir: info.pkgDir,
|
|
190
|
+
pkgName,
|
|
191
|
+
mode: "build",
|
|
192
|
+
tsconfigPath,
|
|
193
|
+
serverPort: 0,
|
|
194
|
+
env: info.env,
|
|
195
|
+
watch: true,
|
|
196
|
+
onBuildStart: () => sender.send("buildStart", {}),
|
|
197
|
+
onBuild: (result) => sender.send("build", result),
|
|
198
|
+
enableLint: info.enableLint,
|
|
199
|
+
replaceDeps: info.replaceDeps,
|
|
200
|
+
onScopeRebuild: () => sender.send("scopeRebuild", {}),
|
|
201
|
+
browserslist: info.browserSupport?.browserslist,
|
|
202
|
+
postCssPlugins: info.browserSupport?.postCss?.plugins,
|
|
203
|
+
legacyModule: info.browserSupport?.legacyModule,
|
|
204
|
+
polyfills,
|
|
205
|
+
pwa: false,
|
|
206
|
+
exclude: info.exclude,
|
|
207
|
+
});
|
|
208
|
+
const watcher = (await viteBuild(viteConfig));
|
|
209
|
+
rollupWatcher = watcher;
|
|
210
|
+
// .config.json 생성
|
|
211
|
+
writeConfigJson(info.pkgDir, info.configs);
|
|
212
|
+
// HTTP 정적 파일 서버 시작
|
|
213
|
+
const name = pkgName.replace(/^@[^/]+\//, "");
|
|
214
|
+
const basePath = `/${name}/`;
|
|
215
|
+
const httpServer = createLegacyHttpServer(distDir, basePath);
|
|
216
|
+
legacyHttpServer = httpServer;
|
|
217
|
+
const serverPort = await new Promise((resolve, reject) => {
|
|
218
|
+
httpServer.listen(info.port ?? 0, "0.0.0.0", () => {
|
|
219
|
+
const addr = httpServer.address();
|
|
220
|
+
if (typeof addr === "object" && addr != null) {
|
|
221
|
+
resolve(addr.port);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
reject(new Error("HTTP 서버 포트를 감지할 수 없습니다."));
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
httpServer.on("error", reject);
|
|
228
|
+
});
|
|
229
|
+
sender.send("serverReady", { port: serverPort });
|
|
230
|
+
// 첫 빌드 완료 대기
|
|
231
|
+
return await new Promise((resolve) => {
|
|
232
|
+
let firstBuildResolved = false;
|
|
233
|
+
watcher.on("event", (event) => {
|
|
234
|
+
if (event.code === "END") {
|
|
235
|
+
if (!firstBuildResolved) {
|
|
236
|
+
firstBuildResolved = true;
|
|
237
|
+
resolve({ success: true });
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
// 재빌드 완료 → 브라우저 live reload
|
|
241
|
+
notifyLiveReload();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
else if (event.code === "ERROR") {
|
|
245
|
+
const message = event.error?.message ?? "Unknown build error";
|
|
246
|
+
sender.send("error", { message });
|
|
247
|
+
if (!firstBuildResolved) {
|
|
248
|
+
firstBuildResolved = true;
|
|
249
|
+
resolve({ success: false, errors: [message] });
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
catch (err) {
|
|
256
|
+
const message = errNs.message(err);
|
|
257
|
+
sender.send("error", { message });
|
|
258
|
+
return { success: false, errors: [message] };
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* dev server 중지. Vite server 또는 RollupWatcher를 정리한다.
|
|
78
263
|
*/
|
|
79
264
|
async function stopWatch() {
|
|
80
265
|
logger.debug("Vite server 정리 시작");
|
|
266
|
+
const watcherToClose = rollupWatcher;
|
|
267
|
+
rollupWatcher = undefined;
|
|
268
|
+
if (watcherToClose != null) {
|
|
269
|
+
await watcherToClose.close();
|
|
270
|
+
}
|
|
271
|
+
// SSE 클라이언트 정리
|
|
272
|
+
for (const client of sseClients) {
|
|
273
|
+
client.end();
|
|
274
|
+
}
|
|
275
|
+
sseClients.clear();
|
|
276
|
+
const httpServerToClose = legacyHttpServer;
|
|
277
|
+
legacyHttpServer = undefined;
|
|
278
|
+
if (httpServerToClose != null) {
|
|
279
|
+
await new Promise((resolve, reject) => {
|
|
280
|
+
httpServerToClose.close((err) => {
|
|
281
|
+
if (err != null)
|
|
282
|
+
reject(err);
|
|
283
|
+
else
|
|
284
|
+
resolve();
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
}
|
|
81
288
|
const serverToClose = viteServer;
|
|
82
289
|
viteServer = undefined;
|
|
83
290
|
if (serverToClose != null) {
|
|
@@ -114,10 +321,13 @@ async function build(info) {
|
|
|
114
321
|
legacyModule: info.browserSupport?.legacyModule,
|
|
115
322
|
polyfills,
|
|
116
323
|
pwa: info.pwa,
|
|
324
|
+
exclude: info.exclude,
|
|
325
|
+
outDir: info.outDir,
|
|
326
|
+
base: info.base,
|
|
117
327
|
});
|
|
118
328
|
await viteBuild(viteConfig);
|
|
119
|
-
// .config.json 생성
|
|
120
|
-
writeConfigJson(info.pkgDir, info.configs);
|
|
329
|
+
// .config.json 생성 (항상 dist/에 기록 — outDir과 무관)
|
|
330
|
+
writeConfigJson(path.join(info.pkgDir, "dist"), info.configs);
|
|
121
331
|
logger.debug(`[${info.name}] client worker build 완료`);
|
|
122
332
|
return { success: true, lint: lintResult };
|
|
123
333
|
}
|
|
@@ -127,9 +337,8 @@ async function build(info) {
|
|
|
127
337
|
return { success: false, errors: [message] };
|
|
128
338
|
}
|
|
129
339
|
}
|
|
130
|
-
/**
|
|
131
|
-
function writeConfigJson(
|
|
132
|
-
const distDir = path.join(pkgDir, "dist");
|
|
340
|
+
/** .config.json 생성 */
|
|
341
|
+
function writeConfigJson(distDir, configs) {
|
|
133
342
|
fs.mkdirSync(distDir, { recursive: true });
|
|
134
343
|
fs.writeFileSync(path.join(distDir, ".config.json"), JSON.stringify(configs ?? {}, undefined, 2));
|
|
135
344
|
}
|