@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
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* replaceDeps 설정의 glob 패턴을 대상 패키지 목록과 매칭하여
|
|
3
|
+
* { targetName, sourcePath } 쌍을 반환한다.
|
|
4
4
|
*
|
|
5
|
-
* @param replaceDeps -
|
|
6
|
-
* @param targetNames -
|
|
7
|
-
* @returns
|
|
5
|
+
* @param replaceDeps - sd.config.ts의 replaceDeps 설정 (키: glob 패턴, 값: 소스 경로)
|
|
6
|
+
* @param targetNames - node_modules에서 찾은 패키지명 목록 (예: ["@simplysm/solid", ...])
|
|
7
|
+
* @returns 매칭된 { targetName, sourcePath } 배열
|
|
8
8
|
*/
|
|
9
9
|
export declare function resolveReplaceDepEntries(replaceDeps: Record<string, string>, targetNames: string[]): Array<{
|
|
10
10
|
targetName: string;
|
|
11
11
|
sourcePath: string;
|
|
12
12
|
}>;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* pnpm-workspace.yaml 내용을 파싱하여 워크스페이스 패키지 glob 배열을 반환한다.
|
|
15
|
+
* 별도 YAML 라이브러리 없이 간단한 줄 파싱으로 처리한다.
|
|
16
16
|
*
|
|
17
|
-
* @param content -
|
|
18
|
-
* @returns
|
|
17
|
+
* @param content - pnpm-workspace.yaml 파일 내용
|
|
18
|
+
* @returns glob 패턴 배열 (예: ["packages/*", "tools/*"])
|
|
19
19
|
*/
|
|
20
20
|
export declare function parseWorkspaceGlobs(content: string): string[];
|
|
21
21
|
/**
|
|
22
|
-
* replaceDeps
|
|
22
|
+
* replaceDeps 복사/교체 항목
|
|
23
23
|
*/
|
|
24
24
|
export interface ReplaceDepEntry {
|
|
25
25
|
targetName: string;
|
|
@@ -29,34 +29,34 @@ export interface ReplaceDepEntry {
|
|
|
29
29
|
actualTargetPath: string;
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* watchReplaceDeps의 반환 타입
|
|
33
33
|
*/
|
|
34
34
|
export interface WatchReplaceDepResult {
|
|
35
35
|
entries: ReplaceDepEntry[];
|
|
36
36
|
dispose: () => void;
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
39
|
+
* replaceDeps 설정에 따라 node_modules의 패키지를 소스 디렉토리로 교체한다.
|
|
40
40
|
*
|
|
41
|
-
* 1.
|
|
42
|
-
* 2.
|
|
43
|
-
* 3.
|
|
41
|
+
* 1. pnpm-workspace.yaml 파싱 → 워크스페이스 패키지 경로
|
|
42
|
+
* 2. [루트, ...워크스페이스 패키지] node_modules에서 매칭 패키지 탐색
|
|
43
|
+
* 3. 기존 symlink/디렉토리 제거 → 소스 경로 복사 (node_modules, package.json, .cache, tests 제외)
|
|
44
44
|
*
|
|
45
|
-
* @param projectRoot -
|
|
46
|
-
* @param replaceDeps -
|
|
45
|
+
* @param projectRoot - 프로젝트 루트 경로
|
|
46
|
+
* @param replaceDeps - sd.config.ts의 replaceDeps 설정
|
|
47
47
|
*/
|
|
48
48
|
export declare function setupReplaceDeps(projectRoot: string, replaceDeps: Record<string, string>): Promise<void>;
|
|
49
49
|
/**
|
|
50
|
-
*
|
|
50
|
+
* replaceDeps 설정에 따라 소스 디렉토리를 감시하고 변경사항을 대상 경로에 복사한다.
|
|
51
51
|
*
|
|
52
|
-
* 1.
|
|
53
|
-
* 2.
|
|
54
|
-
* 3.
|
|
55
|
-
* 4.
|
|
52
|
+
* 1. pnpm-workspace.yaml 파싱 → 워크스페이스 패키지 경로
|
|
53
|
+
* 2. [루트, ...워크스페이스 패키지] node_modules에서 매칭 패키지 탐색
|
|
54
|
+
* 3. FsWatcher로 소스 디렉토리 감시 (300ms 딜레이)
|
|
55
|
+
* 4. 변경사항을 대상 경로에 복사 (node_modules, package.json, .cache, tests 제외)
|
|
56
56
|
*
|
|
57
|
-
* @param projectRoot -
|
|
58
|
-
* @param replaceDeps -
|
|
59
|
-
* @returns entries
|
|
57
|
+
* @param projectRoot - 프로젝트 루트 경로
|
|
58
|
+
* @param replaceDeps - sd.config.ts의 replaceDeps 설정
|
|
59
|
+
* @returns entries 및 dispose 함수
|
|
60
60
|
*/
|
|
61
61
|
export declare function watchReplaceDeps(projectRoot: string, replaceDeps: Record<string, string>): Promise<WatchReplaceDepResult>;
|
|
62
62
|
//# sourceMappingURL=replace-deps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replace-deps.d.ts","sourceRoot":"","sources":["../../src/utils/replace-deps.ts"],"names":[],"mappings":"AAQA;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,WAAW,EAAE,MAAM,EAAE,GACpB,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA2BnD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA8B7D;AAmBD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"replace-deps.d.ts","sourceRoot":"","sources":["../../src/utils/replace-deps.ts"],"names":[],"mappings":"AAQA;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,WAAW,EAAE,MAAM,EAAE,GACpB,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA2BnD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA8B7D;AAmBD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAkID;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC,CAuCf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,CAAC,qBAAqB,CAAC,CAsFhC"}
|
|
@@ -6,17 +6,17 @@ import { fsx, pathx, FsWatcher } from "@simplysm/core-node";
|
|
|
6
6
|
import { exec } from "child_process";
|
|
7
7
|
import { promisify } from "util";
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* replaceDeps 설정의 glob 패턴을 대상 패키지 목록과 매칭하여
|
|
10
|
+
* { targetName, sourcePath } 쌍을 반환한다.
|
|
11
11
|
*
|
|
12
|
-
* @param replaceDeps -
|
|
13
|
-
* @param targetNames -
|
|
14
|
-
* @returns
|
|
12
|
+
* @param replaceDeps - sd.config.ts의 replaceDeps 설정 (키: glob 패턴, 값: 소스 경로)
|
|
13
|
+
* @param targetNames - node_modules에서 찾은 패키지명 목록 (예: ["@simplysm/solid", ...])
|
|
14
|
+
* @returns 매칭된 { targetName, sourcePath } 배열
|
|
15
15
|
*/
|
|
16
16
|
export function resolveReplaceDepEntries(replaceDeps, targetNames) {
|
|
17
17
|
const results = [];
|
|
18
18
|
for (const [pattern, sourceTemplate] of Object.entries(replaceDeps)) {
|
|
19
|
-
//
|
|
19
|
+
// glob 패턴을 정규식으로 변환: * → (.*), . → \., / → [\\/]
|
|
20
20
|
const regexpText = pattern.replace(/[\\/.+*]/g, (ch) => {
|
|
21
21
|
if (ch === "*")
|
|
22
22
|
return "(.*)";
|
|
@@ -34,7 +34,7 @@ export function resolveReplaceDepEntries(replaceDeps, targetNames) {
|
|
|
34
34
|
const match = regex.exec(targetName);
|
|
35
35
|
if (match == null)
|
|
36
36
|
continue;
|
|
37
|
-
//
|
|
37
|
+
// 캡처 그룹이 있으면 소스 경로의 *를 캡처된 값으로 치환
|
|
38
38
|
const sourcePath = hasWildcard ? sourceTemplate.replace(/\*/g, match[1]) : sourceTemplate;
|
|
39
39
|
results.push({ targetName, sourcePath });
|
|
40
40
|
}
|
|
@@ -42,11 +42,11 @@ export function resolveReplaceDepEntries(replaceDeps, targetNames) {
|
|
|
42
42
|
return results;
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
45
|
+
* pnpm-workspace.yaml 내용을 파싱하여 워크스페이스 패키지 glob 배열을 반환한다.
|
|
46
|
+
* 별도 YAML 라이브러리 없이 간단한 줄 파싱으로 처리한다.
|
|
47
47
|
*
|
|
48
|
-
* @param content -
|
|
49
|
-
* @returns
|
|
48
|
+
* @param content - pnpm-workspace.yaml 파일 내용
|
|
49
|
+
* @returns glob 패턴 배열 (예: ["packages/*", "tools/*"])
|
|
50
50
|
*/
|
|
51
51
|
export function parseWorkspaceGlobs(content) {
|
|
52
52
|
const lines = content.split("\n");
|
|
@@ -58,7 +58,7 @@ export function parseWorkspaceGlobs(content) {
|
|
|
58
58
|
inPackages = true;
|
|
59
59
|
continue;
|
|
60
60
|
}
|
|
61
|
-
//
|
|
61
|
+
// packages 섹션의 목록 항목
|
|
62
62
|
if (inPackages && trimmed.startsWith("- ")) {
|
|
63
63
|
const value = trimmed
|
|
64
64
|
.slice(2)
|
|
@@ -67,7 +67,7 @@ export function parseWorkspaceGlobs(content) {
|
|
|
67
67
|
globs.push(value);
|
|
68
68
|
continue;
|
|
69
69
|
}
|
|
70
|
-
//
|
|
70
|
+
// 다른 섹션이 시작되면 종료
|
|
71
71
|
if (inPackages && trimmed !== "" && !trimmed.startsWith("#")) {
|
|
72
72
|
break;
|
|
73
73
|
}
|
|
@@ -75,28 +75,28 @@ export function parseWorkspaceGlobs(content) {
|
|
|
75
75
|
return globs;
|
|
76
76
|
}
|
|
77
77
|
/**
|
|
78
|
-
*
|
|
78
|
+
* 복사 시 제외할 이름 목록
|
|
79
79
|
*/
|
|
80
80
|
const EXCLUDED_NAMES = new Set(["node_modules", "package.json", ".cache", "tests"]);
|
|
81
81
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
82
|
+
* replaceDeps 복사용 필터 함수
|
|
83
|
+
* node_modules, package.json, .cache, tests를 제외한다.
|
|
84
84
|
*
|
|
85
|
-
* @param itemPath -
|
|
86
|
-
* @returns
|
|
85
|
+
* @param itemPath - 복사할 항목의 절대 경로
|
|
86
|
+
* @returns 복사 대상이면 true, 제외 대상이면 false
|
|
87
87
|
*/
|
|
88
88
|
function replaceDepsCopyFilter(itemPath) {
|
|
89
89
|
const basename = path.basename(itemPath);
|
|
90
90
|
return !EXCLUDED_NAMES.has(basename);
|
|
91
91
|
}
|
|
92
92
|
/**
|
|
93
|
-
*
|
|
93
|
+
* 프로젝트 루트 및 워크스페이스 패키지 경로를 수집한다.
|
|
94
94
|
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
95
|
+
* pnpm-workspace.yaml을 파싱하여 워크스페이스 패키지의 절대 경로를 수집한다.
|
|
96
|
+
* 파일이 없거나 파싱 실패 시 루트 경로만 반환한다.
|
|
97
97
|
*
|
|
98
|
-
* @param projectRoot -
|
|
99
|
-
* @returns [
|
|
98
|
+
* @param projectRoot - 프로젝트 루트 경로
|
|
99
|
+
* @returns [루트, ...워크스페이스 패키지 경로] 배열
|
|
100
100
|
*/
|
|
101
101
|
async function collectSearchRoots(projectRoot) {
|
|
102
102
|
const searchRoots = [projectRoot];
|
|
@@ -110,47 +110,56 @@ async function collectSearchRoots(projectRoot) {
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
catch {
|
|
113
|
-
//
|
|
113
|
+
// pnpm-workspace.yaml이 존재하지 않으면 루트만 처리
|
|
114
114
|
}
|
|
115
115
|
return searchRoots;
|
|
116
116
|
}
|
|
117
117
|
/**
|
|
118
|
-
*
|
|
118
|
+
* replaceDeps 설정에서 모든 교체 대상 항목을 해결한다.
|
|
119
119
|
*
|
|
120
|
-
* 1.
|
|
121
|
-
* 2.
|
|
122
|
-
* 3.
|
|
120
|
+
* 1. pnpm-workspace.yaml 파싱 → 워크스페이스 패키지 경로
|
|
121
|
+
* 2. [루트, ...워크스페이스 패키지] node_modules에서 매칭 패키지 탐색
|
|
122
|
+
* 3. 패턴 매칭 + 소스 경로 존재 확인 + symlink 해결
|
|
123
123
|
*
|
|
124
|
-
* @param projectRoot -
|
|
125
|
-
* @param replaceDeps -
|
|
126
|
-
* @param logger - consola
|
|
127
|
-
* @returns
|
|
124
|
+
* @param projectRoot - 프로젝트 루트 경로
|
|
125
|
+
* @param replaceDeps - sd.config.ts의 replaceDeps 설정
|
|
126
|
+
* @param logger - consola 로거
|
|
127
|
+
* @returns 해결된 교체 대상 항목 배열
|
|
128
128
|
*/
|
|
129
129
|
async function resolveAllReplaceDepEntries(projectRoot, replaceDeps, logger) {
|
|
130
130
|
const entries = [];
|
|
131
|
+
const searchedDirs = new Set();
|
|
132
|
+
// 초기 탐색 대상: 프로젝트 루트 + workspace 패키지들의 node_modules
|
|
131
133
|
const searchRoots = await collectSearchRoots(projectRoot);
|
|
132
|
-
|
|
133
|
-
|
|
134
|
+
const pendingDirs = searchRoots.map((root) => pathx.posix(path.join(root, "node_modules")));
|
|
135
|
+
// 교체된 패키지의 node_modules도 재귀적으로 탐색 (간접 의존성 교체)
|
|
136
|
+
while (pendingDirs.length > 0) {
|
|
137
|
+
const nodeModulesDir = pendingDirs.pop();
|
|
138
|
+
if (searchedDirs.has(nodeModulesDir))
|
|
139
|
+
continue;
|
|
140
|
+
searchedDirs.add(nodeModulesDir);
|
|
134
141
|
try {
|
|
135
142
|
await fs.promises.access(nodeModulesDir);
|
|
136
143
|
}
|
|
137
144
|
catch {
|
|
138
|
-
|
|
145
|
+
logger.debug(`[replace-deps] 접근 불가: ${nodeModulesDir}`);
|
|
146
|
+
continue;
|
|
139
147
|
}
|
|
140
|
-
//
|
|
148
|
+
// replaceDeps의 각 glob 패턴으로 node_modules 디렉토리 탐색
|
|
141
149
|
const targetNames = [];
|
|
142
150
|
for (const pattern of Object.keys(replaceDeps)) {
|
|
143
151
|
const matches = await glob(pattern, { cwd: nodeModulesDir });
|
|
144
152
|
targetNames.push(...matches);
|
|
145
153
|
}
|
|
154
|
+
logger.debug(`[replace-deps] 탐색: ${nodeModulesDir} → ${targetNames.length}개 매칭 (${targetNames.join(", ")})`);
|
|
146
155
|
if (targetNames.length === 0)
|
|
147
156
|
continue;
|
|
148
|
-
//
|
|
157
|
+
// 패턴 매칭 및 경로 해결
|
|
149
158
|
const matchedEntries = resolveReplaceDepEntries(replaceDeps, targetNames);
|
|
150
159
|
for (const { targetName, sourcePath } of matchedEntries) {
|
|
151
160
|
const targetPath = pathx.posix(path.join(nodeModulesDir, targetName));
|
|
152
161
|
const resolvedSourcePath = pathx.posixResolve(projectRoot, sourcePath);
|
|
153
|
-
//
|
|
162
|
+
// 소스 경로 존재 확인
|
|
154
163
|
try {
|
|
155
164
|
await fs.promises.access(resolvedSourcePath);
|
|
156
165
|
}
|
|
@@ -158,7 +167,7 @@ async function resolveAllReplaceDepEntries(projectRoot, replaceDeps, logger) {
|
|
|
158
167
|
logger.warn(`소스 경로가 존재하지 않아 건너뜀: ${resolvedSourcePath}`);
|
|
159
168
|
continue;
|
|
160
169
|
}
|
|
161
|
-
//
|
|
170
|
+
// targetPath가 symlink이면 실제 .pnpm 저장소 경로로 해결
|
|
162
171
|
let actualTargetPath = targetPath;
|
|
163
172
|
try {
|
|
164
173
|
const stat = await fs.promises.lstat(targetPath);
|
|
@@ -167,8 +176,11 @@ async function resolveAllReplaceDepEntries(projectRoot, replaceDeps, logger) {
|
|
|
167
176
|
}
|
|
168
177
|
}
|
|
169
178
|
catch {
|
|
170
|
-
//
|
|
179
|
+
// targetPath가 존재하지 않으면 그대로 사용
|
|
171
180
|
}
|
|
181
|
+
// 동일 actualTargetPath가 이미 등록된 경우 건너뜀 (pnpm 중복 방지)
|
|
182
|
+
if (entries.some((e) => e.actualTargetPath === actualTargetPath))
|
|
183
|
+
continue;
|
|
172
184
|
entries.push({
|
|
173
185
|
targetName,
|
|
174
186
|
sourcePath,
|
|
@@ -176,19 +188,23 @@ async function resolveAllReplaceDepEntries(projectRoot, replaceDeps, logger) {
|
|
|
176
188
|
resolvedSourcePath,
|
|
177
189
|
actualTargetPath,
|
|
178
190
|
});
|
|
191
|
+
// 교체된 패키지의 node_modules를 탐색 대기열에 추가
|
|
192
|
+
const depth = targetName.split(/[/\\]/).length;
|
|
193
|
+
const entryNodeModulesDir = pathx.posix(path.resolve(actualTargetPath, ...Array(depth).fill("..")));
|
|
194
|
+
pendingDirs.push(entryNodeModulesDir);
|
|
179
195
|
}
|
|
180
196
|
}
|
|
181
197
|
return entries;
|
|
182
198
|
}
|
|
183
199
|
/**
|
|
184
|
-
*
|
|
200
|
+
* replaceDeps 설정에 따라 node_modules의 패키지를 소스 디렉토리로 교체한다.
|
|
185
201
|
*
|
|
186
|
-
* 1.
|
|
187
|
-
* 2.
|
|
188
|
-
* 3.
|
|
202
|
+
* 1. pnpm-workspace.yaml 파싱 → 워크스페이스 패키지 경로
|
|
203
|
+
* 2. [루트, ...워크스페이스 패키지] node_modules에서 매칭 패키지 탐색
|
|
204
|
+
* 3. 기존 symlink/디렉토리 제거 → 소스 경로 복사 (node_modules, package.json, .cache, tests 제외)
|
|
189
205
|
*
|
|
190
|
-
* @param projectRoot -
|
|
191
|
-
* @param replaceDeps -
|
|
206
|
+
* @param projectRoot - 프로젝트 루트 경로
|
|
207
|
+
* @param replaceDeps - sd.config.ts의 replaceDeps 설정
|
|
192
208
|
*/
|
|
193
209
|
export async function setupReplaceDeps(projectRoot, replaceDeps) {
|
|
194
210
|
const logger = consola.withTag("sd:cli:replace-deps");
|
|
@@ -197,7 +213,7 @@ export async function setupReplaceDeps(projectRoot, replaceDeps) {
|
|
|
197
213
|
const entries = await resolveAllReplaceDepEntries(projectRoot, replaceDeps, logger);
|
|
198
214
|
for (const { targetName, resolvedSourcePath, actualTargetPath } of entries) {
|
|
199
215
|
try {
|
|
200
|
-
//
|
|
216
|
+
// 소스 파일을 actualTargetPath에 덮어쓰기 복사 (기존 디렉토리 유지, symlink 보존)
|
|
201
217
|
await fsx.copy(resolvedSourcePath, actualTargetPath, replaceDepsCopyFilter);
|
|
202
218
|
setupCount += 1;
|
|
203
219
|
}
|
|
@@ -206,7 +222,7 @@ export async function setupReplaceDeps(projectRoot, replaceDeps) {
|
|
|
206
222
|
}
|
|
207
223
|
}
|
|
208
224
|
logger.success(`replace-deps 설정 완료 (${setupCount}개 의존성 교체)`);
|
|
209
|
-
//
|
|
225
|
+
// 교체된 패키지의 postinstall 스크립트 실행
|
|
210
226
|
for (const { targetName, resolvedSourcePath, actualTargetPath } of entries) {
|
|
211
227
|
const sourcePkgJsonPath = pathx.posix(path.join(resolvedSourcePath, "package.json"));
|
|
212
228
|
try {
|
|
@@ -225,21 +241,21 @@ export async function setupReplaceDeps(projectRoot, replaceDeps) {
|
|
|
225
241
|
}
|
|
226
242
|
}
|
|
227
243
|
/**
|
|
228
|
-
*
|
|
244
|
+
* replaceDeps 설정에 따라 소스 디렉토리를 감시하고 변경사항을 대상 경로에 복사한다.
|
|
229
245
|
*
|
|
230
|
-
* 1.
|
|
231
|
-
* 2.
|
|
232
|
-
* 3.
|
|
233
|
-
* 4.
|
|
246
|
+
* 1. pnpm-workspace.yaml 파싱 → 워크스페이스 패키지 경로
|
|
247
|
+
* 2. [루트, ...워크스페이스 패키지] node_modules에서 매칭 패키지 탐색
|
|
248
|
+
* 3. FsWatcher로 소스 디렉토리 감시 (300ms 딜레이)
|
|
249
|
+
* 4. 변경사항을 대상 경로에 복사 (node_modules, package.json, .cache, tests 제외)
|
|
234
250
|
*
|
|
235
|
-
* @param projectRoot -
|
|
236
|
-
* @param replaceDeps -
|
|
237
|
-
* @returns entries
|
|
251
|
+
* @param projectRoot - 프로젝트 루트 경로
|
|
252
|
+
* @param replaceDeps - sd.config.ts의 replaceDeps 설정
|
|
253
|
+
* @returns entries 및 dispose 함수
|
|
238
254
|
*/
|
|
239
255
|
export async function watchReplaceDeps(projectRoot, replaceDeps) {
|
|
240
256
|
const logger = consola.withTag("sd:cli:replace-deps:watch");
|
|
241
257
|
const entries = await resolveAllReplaceDepEntries(projectRoot, replaceDeps, logger);
|
|
242
|
-
//
|
|
258
|
+
// 소스 디렉토리 감시자 설정
|
|
243
259
|
const watchers = [];
|
|
244
260
|
const watchedSources = new Set();
|
|
245
261
|
logger.start(`replace-deps 워치 시작 중... (${entries.length}개 대상)`);
|
|
@@ -248,33 +264,36 @@ export async function watchReplaceDeps(projectRoot, replaceDeps) {
|
|
|
248
264
|
continue;
|
|
249
265
|
watchedSources.add(entry.resolvedSourcePath);
|
|
250
266
|
const excludedPaths = [...EXCLUDED_NAMES].map((name) => pathx.posix(path.join(entry.resolvedSourcePath, name)));
|
|
251
|
-
const watcher = await FsWatcher.watch([entry.resolvedSourcePath], {
|
|
267
|
+
const watcher = await FsWatcher.watch([entry.resolvedSourcePath], {
|
|
268
|
+
followSymlinks: false,
|
|
269
|
+
ignored: [...EXCLUDED_NAMES].map((name) => `**/${name}`),
|
|
270
|
+
});
|
|
252
271
|
watcher.onChange({ delay: 300 }, async (changeInfos) => {
|
|
253
272
|
for (const { path: changedPath } of changeInfos) {
|
|
254
|
-
//
|
|
273
|
+
// 제외 항목 필터: basename 매칭 또는 제외 디렉토리 내 경로
|
|
255
274
|
if (EXCLUDED_NAMES.has(path.basename(changedPath)) ||
|
|
256
275
|
excludedPaths.some((ep) => pathx.isChildPath(changedPath, ep))) {
|
|
257
276
|
continue;
|
|
258
277
|
}
|
|
259
|
-
//
|
|
278
|
+
// 이 소스 경로를 사용하는 모든 항목에 대해 복사
|
|
260
279
|
for (const e of entries) {
|
|
261
280
|
if (e.resolvedSourcePath !== entry.resolvedSourcePath)
|
|
262
281
|
continue;
|
|
263
|
-
//
|
|
282
|
+
// 소스로부터의 상대 경로 계산
|
|
264
283
|
const relativePath = pathx.posix(path.relative(e.resolvedSourcePath, changedPath));
|
|
265
284
|
const destPath = pathx.posix(path.join(e.actualTargetPath, relativePath));
|
|
266
285
|
try {
|
|
267
|
-
//
|
|
286
|
+
// 소스 존재 여부 확인
|
|
268
287
|
let sourceExists = false;
|
|
269
288
|
try {
|
|
270
289
|
await fs.promises.access(changedPath);
|
|
271
290
|
sourceExists = true;
|
|
272
291
|
}
|
|
273
292
|
catch {
|
|
274
|
-
//
|
|
293
|
+
// 소스가 삭제됨
|
|
275
294
|
}
|
|
276
295
|
if (sourceExists) {
|
|
277
|
-
//
|
|
296
|
+
// 소스가 디렉토리인지 파일인지 확인
|
|
278
297
|
const stat = await fs.promises.stat(changedPath);
|
|
279
298
|
if (stat.isDirectory()) {
|
|
280
299
|
await fsx.mkdir(destPath);
|
|
@@ -285,7 +304,7 @@ export async function watchReplaceDeps(projectRoot, replaceDeps) {
|
|
|
285
304
|
}
|
|
286
305
|
}
|
|
287
306
|
else {
|
|
288
|
-
//
|
|
307
|
+
// 소스가 삭제됨 → 대상도 삭제
|
|
289
308
|
await fsx.rm(destPath);
|
|
290
309
|
}
|
|
291
310
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replace-deps.js","sourceRoot":"","sources":["../../src/utils/replace-deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAmC,EACnC,WAAqB;IAErB,MAAM,OAAO,GAAsD,EAAE,CAAC;IAEtE,KAAK,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACpE,
|
|
1
|
+
{"version":3,"file":"replace-deps.js","sourceRoot":"","sources":["../../src/utils/replace-deps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { SdConfig, SdConfigParams } from "../sd-config.types";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* @returns SdConfig
|
|
5
|
-
* @throws
|
|
3
|
+
* sd.config.ts를 로드한다.
|
|
4
|
+
* @returns SdConfig 객체
|
|
5
|
+
* @throws sd.config.ts가 없거나 형식이 잘못된 경우
|
|
6
6
|
*/
|
|
7
7
|
export declare function loadSdConfig(params: SdConfigParams): Promise<SdConfig>;
|
|
8
8
|
//# sourceMappingURL=sd-config.d.ts.map
|
package/dist/utils/sd-config.js
CHANGED
|
@@ -4,9 +4,9 @@ import { fsx, pathx } from "@simplysm/core-node";
|
|
|
4
4
|
import { consola } from "consola";
|
|
5
5
|
const logger = consola.withTag("sd:cli:sd-config");
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
* @returns SdConfig
|
|
9
|
-
* @throws
|
|
7
|
+
* sd.config.ts를 로드한다.
|
|
8
|
+
* @returns SdConfig 객체
|
|
9
|
+
* @throws sd.config.ts가 없거나 형식이 잘못된 경우
|
|
10
10
|
*/
|
|
11
11
|
export async function loadSdConfig(params) {
|
|
12
12
|
const sdConfigPath = pathx.posixResolve(params.cwd, "sd.config.ts");
|
|
@@ -2,25 +2,25 @@ import ts from "typescript";
|
|
|
2
2
|
import { type TypecheckEnv } from "./tsconfig";
|
|
3
3
|
import { type SerializedDiagnostic } from "./typecheck-serialization";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* 패키지 모드 tsc 빌드 옵션
|
|
6
6
|
*/
|
|
7
7
|
export interface TscPackageBuildOptions {
|
|
8
8
|
pkgDir: string;
|
|
9
9
|
cwd: string;
|
|
10
|
-
/**
|
|
10
|
+
/** 출력 제어 플래그: emit할 파일 종류 */
|
|
11
11
|
output: {
|
|
12
12
|
js: boolean;
|
|
13
13
|
dts: boolean;
|
|
14
14
|
};
|
|
15
|
-
/**
|
|
15
|
+
/** 미리 파싱된 tsconfig. 제공 시 parseTsconfig() 호출을 스킵한다. */
|
|
16
16
|
parsedConfig?: ts.ParsedCommandLine;
|
|
17
|
-
/**
|
|
17
|
+
/** 타입체크 환경. 설정 시 getCompilerOptionsForEnv()로 compilerOptions를 조정한다. */
|
|
18
18
|
env?: TypecheckEnv;
|
|
19
|
-
/**
|
|
19
|
+
/** 타입체크 전용 모드에서 tests/ 파일 포함 여부. 기본값 false. */
|
|
20
20
|
includeTests?: boolean;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
23
|
+
* 패키지 모드 tsc 빌드 결과
|
|
24
24
|
*/
|
|
25
25
|
export interface TscPackageBuildResult {
|
|
26
26
|
success: boolean;
|
|
@@ -28,19 +28,19 @@ export interface TscPackageBuildResult {
|
|
|
28
28
|
diagnostics: SerializedDiagnostic[];
|
|
29
29
|
errorCount: number;
|
|
30
30
|
warningCount: number;
|
|
31
|
-
/**
|
|
31
|
+
/** lint-with-program 통합을 위해 노출된 ts.Program */
|
|
32
32
|
program?: ts.Program;
|
|
33
|
-
/**
|
|
34
|
-
*
|
|
33
|
+
/** 이 빌드에서 영향받은 파일 (정규화된 순방향 슬래시 경로).
|
|
34
|
+
* watch 모드에서 증분 lint에 사용한다. */
|
|
35
35
|
affectedFiles?: ReadonlySet<string>;
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
|
-
*
|
|
38
|
+
* 패키지에 대해 TypeScript 증분 빌드를 실행한다.
|
|
39
39
|
*
|
|
40
|
-
* - output.js || output.dts: emit
|
|
41
|
-
* -
|
|
40
|
+
* - output.js || output.dts: emit 모드 (src 파일만, 출력 파일 생성)
|
|
41
|
+
* - 둘 다 아님: 타입체크만 (기본 src 파일만, includeTests=true이면 src + test 파일)
|
|
42
42
|
*
|
|
43
|
-
*
|
|
43
|
+
* 실행 간 증분 컴파일을 위해 tsBuildInfoFile을 사용한다.
|
|
44
44
|
*/
|
|
45
45
|
export declare function runTscPackageBuild(options: TscPackageBuildOptions): TscPackageBuildResult;
|
|
46
46
|
//# sourceMappingURL=tsc-build.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tsc-build.d.ts","sourceRoot":"","sources":["../../src/utils/tsc-build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAM5B,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAI3F;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,
|
|
1
|
+
{"version":3,"file":"tsc-build.d.ts","sourceRoot":"","sources":["../../src/utils/tsc-build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAM5B,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAI3F;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,6BAA6B;IAC7B,MAAM,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,CAAC;IACtC,sDAAsD;IACtD,YAAY,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;IACpC,uEAAuE;IACvE,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;IACrB;oCACgC;IAChC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CAgKzF"}
|
package/dist/utils/tsc-build.js
CHANGED
|
@@ -9,12 +9,12 @@ import { serializeDiagnostic } from "./typecheck-serialization.js";
|
|
|
9
9
|
import { createOutputPathRewriter, addJsExtensionToImports } from "./output-path-rewriter.js";
|
|
10
10
|
import { isWorkspaceDiagnostic, formatDiagnosticError } from "./diagnostic-utils.js";
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
12
|
+
* 패키지에 대해 TypeScript 증분 빌드를 실행한다.
|
|
13
13
|
*
|
|
14
|
-
* - output.js || output.dts: emit
|
|
15
|
-
* -
|
|
14
|
+
* - output.js || output.dts: emit 모드 (src 파일만, 출력 파일 생성)
|
|
15
|
+
* - 둘 다 아님: 타입체크만 (기본 src 파일만, includeTests=true이면 src + test 파일)
|
|
16
16
|
*
|
|
17
|
-
*
|
|
17
|
+
* 실행 간 증분 컴파일을 위해 tsBuildInfoFile을 사용한다.
|
|
18
18
|
*/
|
|
19
19
|
export function runTscPackageBuild(options) {
|
|
20
20
|
try {
|
|
@@ -89,9 +89,9 @@ export function runTscPackageBuild(options) {
|
|
|
89
89
|
};
|
|
90
90
|
}
|
|
91
91
|
const builderProgram = ts.createEmitAndSemanticDiagnosticsBuilderProgram(rootFiles, compilerOptions, host);
|
|
92
|
-
//
|
|
93
|
-
// getSemanticDiagnosticsOfNextAffectedFile
|
|
94
|
-
// affected
|
|
92
|
+
// builder program의 증분 분석을 통해 affected 파일을 추적한다.
|
|
93
|
+
// getSemanticDiagnosticsOfNextAffectedFile은 마지막 빌드 이후 변경된 파일을 순회한다.
|
|
94
|
+
// affected는 ts.SourceFile 또는 ts.Program(전역 스코프 변경 시)일 수 있다.
|
|
95
95
|
let affectedFiles = new Set();
|
|
96
96
|
while (true) {
|
|
97
97
|
const result = builderProgram.getSemanticDiagnosticsOfNextAffectedFile();
|
|
@@ -101,7 +101,7 @@ export function runTscPackageBuild(options) {
|
|
|
101
101
|
affectedFiles?.add(pathx.posix(result.affected.fileName));
|
|
102
102
|
}
|
|
103
103
|
else {
|
|
104
|
-
// ts.Program
|
|
104
|
+
// ts.Program 반환 — 전역 변경, 전체 재빌드로 처리
|
|
105
105
|
affectedFiles = undefined;
|
|
106
106
|
}
|
|
107
107
|
}
|
|
@@ -116,7 +116,7 @@ export function runTscPackageBuild(options) {
|
|
|
116
116
|
...(!output.dts ? builderProgram.getProgram().getDeclarationDiagnostics() : []),
|
|
117
117
|
...emitResult.diagnostics,
|
|
118
118
|
];
|
|
119
|
-
//
|
|
119
|
+
// 워크스페이스 범위: node_modules 제외, 모든 워크스페이스 진단 유지
|
|
120
120
|
const filteredDiagnostics = allDiagnostics.filter((d) => isWorkspaceDiagnostic(d, options.cwd));
|
|
121
121
|
const serializedDiagnostics = filteredDiagnostics.map(serializeDiagnostic);
|
|
122
122
|
const errorCount = filteredDiagnostics.filter((d) => d.category === ts.DiagnosticCategory.Error).length;
|