@simplysm/sd-cli 14.0.42 → 14.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/angular/angular-compiler.d.ts +0 -35
- package/dist/angular/angular-compiler.d.ts.map +1 -1
- package/dist/angular/angular-compiler.js +0 -374
- package/dist/angular/angular-compiler.js.map +1 -1
- package/dist/angular/hmr-candidates.d.ts +13 -0
- package/dist/angular/hmr-candidates.d.ts.map +1 -0
- package/dist/angular/hmr-candidates.js +230 -0
- package/dist/angular/hmr-candidates.js.map +1 -0
- package/dist/angular/ngtsc-build-core.d.ts +41 -37
- package/dist/angular/ngtsc-build-core.d.ts.map +1 -1
- package/dist/angular/ngtsc-build-core.js +155 -52
- package/dist/angular/ngtsc-build-core.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 +63 -56
- package/dist/angular/vite-angular-plugin.js.map +1 -1
- package/dist/angular/web-worker-transformer.d.ts +9 -0
- package/dist/angular/web-worker-transformer.d.ts.map +1 -0
- package/dist/angular/web-worker-transformer.js +73 -0
- package/dist/angular/web-worker-transformer.js.map +1 -0
- package/dist/capacitor/capacitor.d.ts.map +1 -1
- package/dist/capacitor/capacitor.js +6 -4
- package/dist/capacitor/capacitor.js.map +1 -1
- package/dist/commands/check.d.ts +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +15 -65
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/publish/deployment-phase.d.ts.map +1 -1
- package/dist/commands/publish/deployment-phase.js +13 -5
- package/dist/commands/publish/deployment-phase.js.map +1 -1
- package/dist/commands/publish/npm-publisher.js +1 -1
- package/dist/commands/publish/npm-publisher.js.map +1 -1
- package/dist/commands/publish/publish-command.js +1 -1
- package/dist/commands/publish/publish-command.js.map +1 -1
- package/dist/commands/publish/version-upgrade.d.ts.map +1 -1
- package/dist/commands/publish/version-upgrade.js +16 -13
- package/dist/commands/publish/version-upgrade.js.map +1 -1
- package/dist/commands/replace-deps.d.ts.map +1 -1
- package/dist/commands/replace-deps.js +2 -1
- package/dist/commands/replace-deps.js.map +1 -1
- package/dist/deps/replace-deps/collect-deps.d.ts.map +1 -1
- package/dist/deps/replace-deps/collect-deps.js +5 -2
- package/dist/deps/replace-deps/collect-deps.js.map +1 -1
- package/dist/deps/replace-deps/replace-deps-resolve.d.ts.map +1 -1
- package/dist/deps/replace-deps/replace-deps-resolve.js +6 -7
- package/dist/deps/replace-deps/replace-deps-resolve.js.map +1 -1
- package/dist/deps/replace-deps/replace-deps.d.ts +21 -3
- package/dist/deps/replace-deps/replace-deps.d.ts.map +1 -1
- package/dist/deps/replace-deps/replace-deps.js +175 -66
- package/dist/deps/replace-deps/replace-deps.js.map +1 -1
- package/dist/electron/electron.js +7 -7
- package/dist/electron/electron.js.map +1 -1
- package/dist/engines/BaseEngine.d.ts.map +1 -1
- package/dist/engines/BaseEngine.js +2 -5
- package/dist/engines/BaseEngine.js.map +1 -1
- package/dist/engines/EsbuildClientEngine.d.ts.map +1 -1
- package/dist/engines/EsbuildClientEngine.js +16 -9
- package/dist/engines/EsbuildClientEngine.js.map +1 -1
- package/dist/engines/NgtscEngine.d.ts +4 -4
- package/dist/engines/NgtscEngine.d.ts.map +1 -1
- package/dist/engines/NgtscEngine.js +5 -5
- package/dist/engines/NgtscEngine.js.map +1 -1
- package/dist/engines/TscEngine.d.ts.map +1 -1
- package/dist/engines/TscEngine.js +0 -2
- package/dist/engines/TscEngine.js.map +1 -1
- package/dist/engines/types.d.ts +2 -0
- package/dist/engines/types.d.ts.map +1 -1
- package/dist/esbuild/esbuild-angular-compiler-plugin.d.ts +36 -0
- package/dist/esbuild/esbuild-angular-compiler-plugin.d.ts.map +1 -0
- package/dist/esbuild/esbuild-angular-compiler-plugin.js +464 -0
- package/dist/esbuild/esbuild-angular-compiler-plugin.js.map +1 -0
- package/dist/esbuild/esbuild-client-config.d.ts +8 -2
- package/dist/esbuild/esbuild-client-config.d.ts.map +1 -1
- package/dist/esbuild/esbuild-client-config.js +48 -33
- package/dist/esbuild/esbuild-client-config.js.map +1 -1
- package/dist/esbuild/esbuild-postcss-plugin.d.ts.map +1 -1
- package/dist/esbuild/esbuild-postcss-plugin.js +9 -6
- package/dist/esbuild/esbuild-postcss-plugin.js.map +1 -1
- package/dist/esbuild/esbuild-tsc-plugin.d.ts +4 -1
- package/dist/esbuild/esbuild-tsc-plugin.d.ts.map +1 -1
- package/dist/esbuild/esbuild-tsc-plugin.js +27 -23
- package/dist/esbuild/esbuild-tsc-plugin.js.map +1 -1
- package/dist/esbuild/file-reference-tracker.d.ts +24 -0
- package/dist/esbuild/file-reference-tracker.d.ts.map +1 -0
- package/dist/esbuild/file-reference-tracker.js +57 -0
- package/dist/esbuild/file-reference-tracker.js.map +1 -0
- package/dist/esbuild/lmdb-cache-store.d.ts +18 -0
- package/dist/esbuild/lmdb-cache-store.d.ts.map +1 -0
- package/dist/esbuild/lmdb-cache-store.js +41 -0
- package/dist/esbuild/lmdb-cache-store.js.map +1 -0
- package/dist/esbuild/load-result-cache.d.ts +17 -0
- package/dist/esbuild/load-result-cache.d.ts.map +1 -0
- package/dist/esbuild/load-result-cache.js +61 -0
- package/dist/esbuild/load-result-cache.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lint/lint-core.js +7 -7
- package/dist/lint/lint-core.js.map +1 -1
- package/dist/orchestrators/BaseOrchestrator.js +2 -2
- package/dist/orchestrators/BaseOrchestrator.js.map +1 -1
- package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/BuildOrchestrator.js +5 -19
- package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
- package/dist/orchestrators/DevOrchestrator.js +5 -5
- package/dist/orchestrators/DevOrchestrator.js.map +1 -1
- package/dist/orchestrators/WatchOrchestrator.js +6 -6
- package/dist/orchestrators/WatchOrchestrator.js.map +1 -1
- package/dist/runtime/ResultCollector.d.ts +1 -0
- package/dist/runtime/ResultCollector.d.ts.map +1 -1
- package/dist/runtime/ResultCollector.js.map +1 -1
- package/dist/runtime/engine-watch-events.d.ts.map +1 -1
- package/dist/runtime/engine-watch-events.js +3 -0
- package/dist/runtime/engine-watch-events.js.map +1 -1
- package/dist/runtime/rebuild-manager.js +1 -1
- package/dist/runtime/rebuild-manager.js.map +1 -1
- package/dist/runtime/worker-utils.js +1 -1
- package/dist/runtime/worker-utils.js.map +1 -1
- package/dist/sd-cli-entry.d.ts.map +1 -1
- package/dist/sd-cli-entry.js +4 -3
- package/dist/sd-cli-entry.js.map +1 -1
- package/dist/sd-cli.js +3 -3
- package/dist/sd-cli.js.map +1 -1
- package/dist/ts-compiler/SdTsCompiler.d.ts +39 -0
- package/dist/ts-compiler/SdTsCompiler.d.ts.map +1 -0
- package/dist/ts-compiler/SdTsCompiler.js +593 -0
- package/dist/ts-compiler/SdTsCompiler.js.map +1 -0
- package/dist/ts-compiler/sd-ts-compiler-options.d.ts +40 -0
- package/dist/ts-compiler/sd-ts-compiler-options.d.ts.map +1 -0
- package/dist/ts-compiler/sd-ts-compiler-options.js +2 -0
- package/dist/ts-compiler/sd-ts-compiler-options.js.map +1 -0
- package/dist/ts-compiler/sd-ts-compiler-result.d.ts +34 -0
- package/dist/ts-compiler/sd-ts-compiler-result.d.ts.map +1 -0
- package/dist/ts-compiler/sd-ts-compiler-result.js +2 -0
- package/dist/ts-compiler/sd-ts-compiler-result.js.map +1 -0
- package/dist/utils/copy-public.d.ts +6 -4
- package/dist/utils/copy-public.d.ts.map +1 -1
- package/dist/utils/copy-public.js +9 -7
- package/dist/utils/copy-public.js.map +1 -1
- package/dist/utils/diagnostic-utils.d.ts +2 -3
- package/dist/utils/diagnostic-utils.d.ts.map +1 -1
- package/dist/utils/diagnostic-utils.js +8 -9
- package/dist/utils/diagnostic-utils.js.map +1 -1
- package/dist/utils/output-utils.d.ts +8 -2
- package/dist/utils/output-utils.d.ts.map +1 -1
- package/dist/utils/output-utils.js +32 -8
- package/dist/utils/output-utils.js.map +1 -1
- package/dist/workers/client.worker.d.ts +1 -1
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +115 -110
- package/dist/workers/client.worker.js.map +1 -1
- package/dist/workers/incremental-mtime-tracker.d.ts +13 -0
- package/dist/workers/incremental-mtime-tracker.d.ts.map +1 -0
- package/dist/workers/incremental-mtime-tracker.js +65 -0
- package/dist/workers/incremental-mtime-tracker.js.map +1 -0
- package/dist/workers/library-build.worker.d.ts +0 -2
- package/dist/workers/library-build.worker.d.ts.map +1 -1
- package/dist/workers/library-build.worker.js +169 -70
- package/dist/workers/library-build.worker.js.map +1 -1
- package/dist/workers/server-build.worker.d.ts.map +1 -1
- package/dist/workers/server-build.worker.js +30 -57
- package/dist/workers/server-build.worker.js.map +1 -1
- package/dist/workers/server-esbuild-context.d.ts +7 -0
- package/dist/workers/server-esbuild-context.d.ts.map +1 -1
- package/dist/workers/server-esbuild-context.js +11 -2
- package/dist/workers/server-esbuild-context.js.map +1 -1
- package/package.json +5 -4
- package/src/angular/angular-compiler.ts +0 -502
- package/src/angular/hmr-candidates.ts +295 -0
- package/src/angular/ngtsc-build-core.ts +192 -91
- package/src/angular/vite-angular-plugin.ts +71 -65
- package/src/angular/web-worker-transformer.ts +117 -0
- package/src/capacitor/capacitor.ts +6 -4
- package/src/commands/check.ts +17 -76
- package/src/commands/publish/deployment-phase.ts +11 -7
- package/src/commands/publish/npm-publisher.ts +1 -1
- package/src/commands/publish/publish-command.ts +1 -1
- package/src/commands/publish/version-upgrade.ts +44 -35
- package/src/commands/replace-deps.ts +3 -1
- package/src/deps/replace-deps/collect-deps.ts +4 -2
- package/src/deps/replace-deps/replace-deps-resolve.ts +12 -7
- package/src/deps/replace-deps/replace-deps.ts +191 -69
- package/src/electron/electron.ts +7 -7
- package/src/engines/BaseEngine.ts +2 -6
- package/src/engines/EsbuildClientEngine.ts +16 -10
- package/src/engines/NgtscEngine.ts +7 -7
- package/src/engines/TscEngine.ts +0 -2
- package/src/engines/types.ts +2 -0
- package/src/esbuild/esbuild-angular-compiler-plugin.ts +647 -0
- package/src/esbuild/esbuild-client-config.ts +57 -41
- package/src/esbuild/esbuild-postcss-plugin.ts +9 -6
- package/src/esbuild/esbuild-tsc-plugin.ts +33 -23
- package/src/esbuild/file-reference-tracker.ts +61 -0
- package/src/esbuild/lmdb-cache-store.ts +46 -0
- package/src/esbuild/load-result-cache.ts +85 -0
- package/src/index.ts +5 -0
- package/src/lint/lint-core.ts +7 -7
- package/src/orchestrators/BaseOrchestrator.ts +2 -2
- package/src/orchestrators/BuildOrchestrator.ts +5 -24
- package/src/orchestrators/DevOrchestrator.ts +5 -5
- package/src/orchestrators/WatchOrchestrator.ts +6 -6
- package/src/runtime/ResultCollector.ts +1 -0
- package/src/runtime/engine-watch-events.ts +3 -0
- package/src/runtime/rebuild-manager.ts +1 -1
- package/src/runtime/worker-utils.ts +1 -1
- package/src/sd-cli-entry.ts +5 -3
- package/src/sd-cli.ts +4 -4
- package/src/ts-compiler/SdTsCompiler.ts +815 -0
- package/src/ts-compiler/sd-ts-compiler-options.ts +46 -0
- package/src/ts-compiler/sd-ts-compiler-result.ts +34 -0
- package/src/utils/copy-public.ts +9 -6
- package/src/utils/diagnostic-utils.ts +8 -9
- package/src/utils/output-utils.ts +38 -8
- package/src/workers/client.worker.ts +141 -126
- package/src/workers/incremental-mtime-tracker.ts +68 -0
- package/src/workers/library-build.worker.ts +214 -75
- package/src/workers/server-build.worker.ts +31 -61
- package/src/workers/server-esbuild-context.ts +14 -2
- package/tests/angular/fixtures/packages/basic-app/dist/styles.css +3 -0
- package/tests/angular/fixtures/packages/basic-app/scss/styles.scss +5 -0
- package/tests/angular/ngtsc-build-core.acc.spec.ts +210 -0
- package/tests/angular/ngtsc-build-core.spec.ts +52 -0
- package/tests/angular/vite-angular-plugin-sdtscompiler.verify.md +13 -0
- package/tests/angular/web-worker-transformer.spec.ts +154 -0
- package/tests/capacitor/capacitor-build.spec.ts +1 -1
- package/tests/capacitor/capacitor-icon.spec.ts +1 -1
- package/tests/capacitor/capacitor-init.spec.ts +1 -1
- package/tests/commands/check.spec.ts +90 -104
- package/tests/commands/publish.spec.ts +12 -4
- package/tests/commands/slice3-severity-cleanup.verify.md +12 -0
- package/tests/commands/version-upgrade.acc.spec.ts +210 -0
- package/tests/commands/version-upgrade.spec.ts +148 -0
- package/tests/deps/replace-deps/collect-deps.acc.spec.ts +62 -0
- package/tests/deps/replace-deps/collect-deps.spec.ts +49 -0
- package/tests/deps/replace-deps/replace-deps-filter.spec.ts +103 -0
- package/tests/deps/replace-deps/replace-deps-perf.verify.md +15 -0
- package/tests/deps/replace-deps/replace-deps-resolve.acc.spec.ts +124 -0
- package/tests/deps/replace-deps/replace-deps-setup.acc.spec.ts +156 -0
- package/tests/electron/electron.spec.ts +4 -1
- package/tests/engines/engine-adapter-isolation.spec.ts +5 -6
- package/tests/engines/engine-duplicate-output-removal.verify.md +10 -0
- package/tests/engines/esbuild-client-engine.acc.spec.ts +79 -0
- package/tests/engines/esbuild-client-engine.spec.ts +73 -3
- package/tests/esbuild/esbuild-angular-compiler-plugin-hmr.verify.md +23 -0
- package/tests/esbuild/esbuild-angular-compiler-plugin-onload.verify.md +21 -0
- package/tests/esbuild/esbuild-angular-compiler-plugin-onstart-extraction.verify.md +16 -0
- package/tests/esbuild/esbuild-angular-compiler-plugin-sdtscompiler.verify.md +15 -0
- package/tests/esbuild/esbuild-angular-compiler-plugin-stylesheet.verify.md +31 -0
- package/tests/esbuild/esbuild-angular-compiler-plugin-worker.verify.md +31 -0
- package/tests/esbuild/esbuild-angular-compiler-plugin.spec.ts +397 -0
- package/tests/esbuild/esbuild-angular-compiler-plugin.verify.md +21 -0
- package/tests/esbuild/esbuild-postcss-plugin-chunking.verify.md +17 -0
- package/tests/esbuild/esbuild-postcss-plugin.acc.spec.ts +152 -0
- package/tests/esbuild/esbuild-tsc-plugin-imports.verify.md +13 -0
- package/tests/esbuild/esbuild-tsc-plugin.acc.spec.ts +56 -111
- package/tests/esbuild/esbuild-tsc-plugin.spec.ts +116 -52
- package/tests/esbuild/file-reference-tracker.spec.ts +99 -0
- package/tests/esbuild/lmdb-cache-store.spec.ts +58 -0
- package/tests/esbuild/load-result-cache.acc.spec.ts +55 -0
- package/tests/esbuild/load-result-cache.spec.ts +133 -0
- package/tests/orchestrators/build-orchestrator.spec.ts +4 -3
- package/tests/orchestrators/dev-orchestrator.spec.ts +5 -5
- package/tests/orchestrators/slice1-stdout-to-consola.verify.md +10 -0
- package/tests/orchestrators/typecheck-orchestrator.spec.ts +1 -1
- package/tests/orchestrators/watch-orchestrator.spec.ts +7 -7
- package/tests/runtime/result-collector.spec.ts +64 -0
- package/tests/sd-cli-entry.spec.ts +3 -4
- package/tests/sd-cli-log-tag.verify.md +11 -0
- package/tests/ts-compiler/SdTsCompiler-affected-files.verify.md +8 -0
- package/tests/ts-compiler/SdTsCompiler-diagnostics.verify.md +12 -0
- package/tests/ts-compiler/SdTsCompiler-emit.verify.md +9 -0
- package/tests/ts-compiler/SdTsCompiler.acc.spec.ts +603 -0
- package/tests/ts-compiler/SdTsCompiler.spec.ts +265 -0
- package/tests/ts-compiler/SdTsCompiler.verify.md +41 -0
- package/tests/ts-compiler/fixtures/non-angular-pkg/.cache/typecheck-browser.tsbuildinfo +1 -0
- package/tests/ts-compiler/fixtures/non-angular-pkg/.cache/typecheck-node.tsbuildinfo +1 -0
- package/tests/ts-compiler/fixtures/non-angular-pkg/.cache/typecheck.tsbuildinfo +1 -0
- package/tests/ts-compiler/fixtures/non-angular-pkg/src/index.ts +3 -0
- package/tests/ts-compiler/fixtures/non-angular-pkg/src/util.ts +3 -0
- package/tests/ts-compiler/fixtures/non-angular-pkg/tests/sample.test-file.ts +3 -0
- package/tests/ts-compiler/fixtures/non-angular-pkg/tsconfig.json +12 -0
- package/tests/ts-compiler/scss-lint-integration.verify.md +14 -0
- package/tests/utils/angular-build.spec.ts +1 -1
- package/tests/utils/copy-public-outdir.verify.md +8 -0
- package/tests/utils/copy-public.acc.spec.ts +52 -0
- package/tests/utils/copy-public.spec.ts +56 -0
- package/tests/utils/diagnostic-utils.spec.ts +24 -15
- package/tests/utils/engine-watch-events.acc.spec.ts +59 -0
- package/tests/utils/engine-watch-events.spec.ts +58 -0
- package/tests/utils/esbuild-client-config-integration.verify.md +9 -0
- package/tests/utils/esbuild-client-config.acc.spec.ts +45 -61
- package/tests/utils/esbuild-client-config.spec.ts +70 -52
- package/tests/utils/ngtsc-build-core-write-emit.spec.ts +136 -12
- package/tests/utils/ngtsc-build-core.spec.ts +1 -44
- package/tests/utils/output-utils.spec.ts +133 -13
- package/tests/utils/replace-deps-watch.acc.spec.ts +7 -1
- package/tests/utils/replace-deps-watch.spec.ts +57 -1
- package/tests/utils/worker-utils.spec.ts +8 -2
- package/tests/workers/client-worker-initial-build-error.verify.md +2 -3
- package/tests/workers/client-worker-initial-build-warnings.verify.md +7 -0
- package/tests/workers/client-worker-mtime-incremental.verify.md +10 -0
- package/tests/workers/client-worker-refactor.verify.md +22 -0
- package/tests/workers/client-worker-ts-cache-invalidation.verify.md +12 -0
- package/tests/workers/client-worker.acc.spec.ts +6 -3
- package/tests/workers/incremental-mtime-tracker.acc.spec.ts +144 -0
- package/tests/workers/incremental-mtime-tracker.spec.ts +102 -0
- package/tests/workers/library-build-lint.spec.ts +40 -45
- package/tests/workers/library-build-worker.spec.ts +298 -40
- package/tests/workers/server-build-lint.spec.ts +59 -45
- package/tests/workers/server-build-worker.spec.ts +63 -24
- package/tests/workers/server-esbuild-context.acc.spec.ts +2 -0
- package/tests/workers/server-esbuild-context.spec.ts +2 -0
- package/tests/workers/server-runtime-worker.spec.ts +1 -1
- package/tests/workers/shared-worker-lifecycle.acc.spec.ts +1 -1
- package/dist/angular/angular-build-pipeline.d.ts +0 -97
- package/dist/angular/angular-build-pipeline.d.ts.map +0 -1
- package/dist/angular/angular-build-pipeline.js +0 -285
- package/dist/angular/angular-build-pipeline.js.map +0 -1
- package/dist/utils/tsc-build.d.ts +0 -51
- package/dist/utils/tsc-build.d.ts.map +0 -1
- package/dist/utils/tsc-build.js +0 -156
- package/dist/utils/tsc-build.js.map +0 -1
- package/dist/workers/ngtsc-build.worker.d.ts +0 -23
- package/dist/workers/ngtsc-build.worker.d.ts.map +0 -1
- package/dist/workers/ngtsc-build.worker.js +0 -267
- package/dist/workers/ngtsc-build.worker.js.map +0 -1
- package/src/angular/angular-build-pipeline.ts +0 -406
- package/src/utils/tsc-build.ts +0 -226
- package/src/workers/ngtsc-build.worker.ts +0 -351
- package/tests/angular/angular-build-pipeline.spec.ts +0 -247
- package/tests/angular/angular-compiler-aot.acc.spec.ts +0 -68
- package/tests/angular/angular-compiler-aot.spec.ts +0 -80
- package/tests/utils/angular-compiler-emit.spec.ts +0 -666
- package/tests/utils/angular-compiler.spec.ts +0 -707
- package/tests/utils/tsc-build.spec.ts +0 -527
- package/tests/workers/ngtsc-build-lint.spec.ts +0 -141
- package/tests/workers/ngtsc-build-worker.spec.ts +0 -199
|
@@ -2,6 +2,8 @@ import { consola } from "consola";
|
|
|
2
2
|
import { loadSdConfig } from "../utils/sd-config";
|
|
3
3
|
import { setupReplaceDeps } from "../deps/replace-deps/replace-deps";
|
|
4
4
|
|
|
5
|
+
const logger = consola.withTag("sd:cli:replace-deps");
|
|
6
|
+
|
|
5
7
|
/**
|
|
6
8
|
* replace-deps 명령어 옵션
|
|
7
9
|
*/
|
|
@@ -19,7 +21,7 @@ export async function runReplaceDeps(opts: ReplaceDepsOptions): Promise<void> {
|
|
|
19
21
|
const sdConfig = await loadSdConfig({ cwd, dev: false, opt: opts.options });
|
|
20
22
|
|
|
21
23
|
if (sdConfig.replaceDeps == null) {
|
|
22
|
-
|
|
24
|
+
logger.warn("sd.config.ts에 replaceDeps 설정이 없습니다.");
|
|
23
25
|
return;
|
|
24
26
|
}
|
|
25
27
|
|
|
@@ -12,13 +12,15 @@ export interface DepsResult {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* 워크스페이스 디렉토리(packages/, tests/) 스캔 기반으로 packages/ 패키지의 name → 상대 디렉토리 맵을 구성한다.
|
|
16
|
+
* tests/ 패키지는 제외된다.
|
|
16
17
|
* 예: "@simplysm/core-node" → "packages/core-node"
|
|
17
18
|
*/
|
|
18
19
|
function buildWorkspacePkgMap(cwd: string): Map<string, string> {
|
|
19
20
|
const map = new Map<string, string>();
|
|
20
21
|
const wsPkgs = discoverWorkspacePackages(cwd);
|
|
21
22
|
for (const [, relDir] of wsPkgs) {
|
|
23
|
+
if (relDir.startsWith("tests/")) continue;
|
|
22
24
|
const pkgJsonPath = pathx.posix(path.join(cwd, relDir, "package.json"));
|
|
23
25
|
if (!fs.existsSync(pkgJsonPath)) continue;
|
|
24
26
|
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8")) as { name: string };
|
|
@@ -35,7 +37,7 @@ export function collectDeps(
|
|
|
35
37
|
const startTime = performance.now();
|
|
36
38
|
logger.debug("의존성 수집 시작");
|
|
37
39
|
|
|
38
|
-
//
|
|
40
|
+
// 워크스페이스 디렉토리 스캔으로 packages/ 패키지 맵 구성 (tests/ 제외)
|
|
39
41
|
const workspacePkgMap = buildWorkspacePkgMap(cwd);
|
|
40
42
|
|
|
41
43
|
const replaceDepsPatterns: Array<{ regex: RegExp }> = [];
|
|
@@ -140,6 +140,7 @@ export async function resolveAllReplaceDepEntries(
|
|
|
140
140
|
logger: ReturnType<typeof consola.withTag>,
|
|
141
141
|
): Promise<ReplaceDepEntry[]> {
|
|
142
142
|
const entries: ReplaceDepEntry[] = [];
|
|
143
|
+
const seenTargetPaths = new Set<string>();
|
|
143
144
|
const searchedDirs = new Set<string>();
|
|
144
145
|
|
|
145
146
|
// 초기 탐색 대상: 프로젝트 루트 + workspace 패키지들의 node_modules
|
|
@@ -162,12 +163,15 @@ export async function resolveAllReplaceDepEntries(
|
|
|
162
163
|
continue;
|
|
163
164
|
}
|
|
164
165
|
|
|
165
|
-
// replaceDeps의 각 glob 패턴으로 node_modules 디렉토리 탐색
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
166
|
+
// replaceDeps의 각 glob 패턴으로 node_modules 디렉토리 탐색 (병렬)
|
|
167
|
+
const globResults = await Promise.all(
|
|
168
|
+
Object.keys(replaceDeps).map((pattern) =>
|
|
169
|
+
glob(pattern, { cwd: nodeModulesDir }),
|
|
170
|
+
),
|
|
171
|
+
);
|
|
172
|
+
const targetNames = globResults.flatMap((matches) =>
|
|
173
|
+
matches.map((m) => m.replaceAll("\\", "/")),
|
|
174
|
+
);
|
|
171
175
|
|
|
172
176
|
logger.debug(`[replace-deps] 탐색: ${nodeModulesDir} → ${targetNames.length}개 매칭 (${targetNames.join(", ")})`);
|
|
173
177
|
|
|
@@ -200,7 +204,8 @@ export async function resolveAllReplaceDepEntries(
|
|
|
200
204
|
}
|
|
201
205
|
|
|
202
206
|
// 동일 actualTargetPath가 이미 등록된 경우 건너뜀 (pnpm 중복 방지)
|
|
203
|
-
if (
|
|
207
|
+
if (seenTargetPaths.has(actualTargetPath)) continue;
|
|
208
|
+
seenTargetPaths.add(actualTargetPath);
|
|
204
209
|
|
|
205
210
|
entries.push({
|
|
206
211
|
targetName,
|
|
@@ -8,20 +8,106 @@ import type { ReplaceDepEntry } from "./replace-deps-resolve";
|
|
|
8
8
|
import { resolveAllReplaceDepEntries } from "./replace-deps-resolve";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* 파일 내용이 동일한지 비교한다.
|
|
12
|
+
* mtime + size가 같으면 동일로 간주하고, 다르면 바이트 비교한다.
|
|
12
13
|
*/
|
|
13
|
-
|
|
14
|
+
async function isFileContentSame(pathA: string, pathB: string): Promise<boolean> {
|
|
15
|
+
try {
|
|
16
|
+
const [statA, statB] = await Promise.all([
|
|
17
|
+
fs.promises.stat(pathA),
|
|
18
|
+
fs.promises.stat(pathB),
|
|
19
|
+
]);
|
|
20
|
+
if (statA.size !== statB.size) return false;
|
|
21
|
+
if (statA.mtimeMs === statB.mtimeMs) return true;
|
|
22
|
+
|
|
23
|
+
const [bufA, bufB] = await Promise.all([
|
|
24
|
+
fs.promises.readFile(pathA),
|
|
25
|
+
fs.promises.readFile(pathB),
|
|
26
|
+
]);
|
|
27
|
+
return bufA.equals(bufB);
|
|
28
|
+
} catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
14
32
|
|
|
15
33
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* @param itemPath - 복사할 항목의 절대 경로
|
|
20
|
-
* @returns 복사 대상이면 true, 제외 대상이면 false
|
|
34
|
+
* pnpm hard link를 끊으면서 파일/디렉토리를 복사한다.
|
|
35
|
+
* 대상 파일을 먼저 unlink하여 글로벌 store의 hard link를 끊고 새 파일을 생성한다.
|
|
36
|
+
* 다른 프로젝트의 node_modules에 영향을 주지 않기 위함이다.
|
|
21
37
|
*/
|
|
22
|
-
function
|
|
23
|
-
|
|
24
|
-
|
|
38
|
+
async function copyWithUnlink(
|
|
39
|
+
sourcePath: string,
|
|
40
|
+
targetPath: string,
|
|
41
|
+
filter?: (absolutePath: string) => boolean,
|
|
42
|
+
): Promise<void> {
|
|
43
|
+
let stats: fs.Stats;
|
|
44
|
+
try {
|
|
45
|
+
stats = await fs.promises.lstat(sourcePath);
|
|
46
|
+
} catch {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (stats.isDirectory()) {
|
|
51
|
+
await fsx.mkdir(targetPath);
|
|
52
|
+
const names = await fs.promises.readdir(sourcePath);
|
|
53
|
+
await Promise.all(
|
|
54
|
+
names
|
|
55
|
+
.map((name) => path.resolve(sourcePath, name))
|
|
56
|
+
.filter((child) => filter == null || filter(child))
|
|
57
|
+
.map((child) => copyWithUnlink(
|
|
58
|
+
child,
|
|
59
|
+
path.join(targetPath, path.basename(child)),
|
|
60
|
+
)),
|
|
61
|
+
);
|
|
62
|
+
} else {
|
|
63
|
+
if (await isFileContentSame(sourcePath, targetPath)) return;
|
|
64
|
+
await fsx.mkdir(path.dirname(targetPath));
|
|
65
|
+
try {
|
|
66
|
+
await fs.promises.unlink(targetPath);
|
|
67
|
+
} catch {
|
|
68
|
+
// 대상이 없으면 무시
|
|
69
|
+
}
|
|
70
|
+
await fs.promises.copyFile(sourcePath, targetPath);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* npm publish 시 files 필드와 무관하게 항상 포함되는 파일 패턴 (대소문자 무시)
|
|
76
|
+
*/
|
|
77
|
+
export const NPM_DEFAULT_FILE_PATTERN = /^(readme|license|licence|changelog|history)/i;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* 소스 패키지의 package.json에서 files 필드를 읽어 반환한다.
|
|
81
|
+
* files 필드가 없으면 undefined를 반환한다.
|
|
82
|
+
*/
|
|
83
|
+
export async function loadFilesField(sourcePath: string): Promise<string[] | undefined> {
|
|
84
|
+
const pkgJsonPath = pathx.posix(path.join(sourcePath, "package.json"));
|
|
85
|
+
const pkgJson = JSON.parse(await fs.promises.readFile(pkgJsonPath, "utf-8"));
|
|
86
|
+
return pkgJson.files as string[] | undefined;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* files 필드 기반 화이트리스트 복사 필터를 생성한다.
|
|
91
|
+
* 소스 루트 기준 상대경로의 첫 번째 세그먼트로 판단한다.
|
|
92
|
+
* - files에 포함 → 허용
|
|
93
|
+
* - npm 기본 파일 패턴 매칭 → 허용
|
|
94
|
+
* - package.json → 제외
|
|
95
|
+
* - 그 외 → 제외
|
|
96
|
+
*/
|
|
97
|
+
export function createCopyFilter(
|
|
98
|
+
sourcePath: string,
|
|
99
|
+
allowedNames: Set<string>,
|
|
100
|
+
): (itemPath: string) => boolean {
|
|
101
|
+
return (itemPath: string) => {
|
|
102
|
+
const relativePath = path.relative(sourcePath, itemPath);
|
|
103
|
+
const firstSegment = relativePath.split(path.sep)[0];
|
|
104
|
+
|
|
105
|
+
if (firstSegment === "package.json") return false;
|
|
106
|
+
if (allowedNames.has(firstSegment)) return true;
|
|
107
|
+
if (NPM_DEFAULT_FILE_PATTERN.test(firstSegment)) return true;
|
|
108
|
+
|
|
109
|
+
return false;
|
|
110
|
+
};
|
|
25
111
|
}
|
|
26
112
|
|
|
27
113
|
/**
|
|
@@ -37,7 +123,7 @@ export interface WatchReplaceDepResult {
|
|
|
37
123
|
*
|
|
38
124
|
* 1. pnpm-workspace.yaml 파싱 → 워크스페이스 패키지 경로
|
|
39
125
|
* 2. [루트, ...워크스페이스 패키지] node_modules에서 매칭 패키지 탐색
|
|
40
|
-
* 3.
|
|
126
|
+
* 3. 소스 package.json의 files 필드 + npm 기본 파일만 대상 경로에 복사 (package.json 제외)
|
|
41
127
|
*
|
|
42
128
|
* @param projectRoot - 프로젝트 루트 경로
|
|
43
129
|
* @param replaceDeps - sd.config.ts의 replaceDeps 설정
|
|
@@ -47,27 +133,34 @@ export async function setupReplaceDeps(
|
|
|
47
133
|
replaceDeps: Record<string, string>,
|
|
48
134
|
): Promise<void> {
|
|
49
135
|
const logger = consola.withTag("sd:cli:replace-deps");
|
|
50
|
-
let setupCount = 0;
|
|
51
136
|
|
|
52
137
|
logger.start("replace-deps 설정 중...");
|
|
53
138
|
|
|
54
139
|
const entries = await resolveAllReplaceDepEntries(projectRoot, replaceDeps, logger);
|
|
55
140
|
|
|
56
|
-
|
|
141
|
+
const results = await Promise.all(entries.map(async (entry) => {
|
|
57
142
|
try {
|
|
58
|
-
|
|
59
|
-
|
|
143
|
+
const files = await loadFilesField(entry.resolvedSourcePath);
|
|
144
|
+
if (files == null) {
|
|
145
|
+
logger.warn(`[${entry.targetName}] package.json에 files 필드가 없어 건너뜀`);
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
60
148
|
|
|
61
|
-
|
|
149
|
+
const filter = createCopyFilter(entry.resolvedSourcePath, new Set(files));
|
|
150
|
+
await copyWithUnlink(entry.resolvedSourcePath, entry.actualTargetPath, filter);
|
|
151
|
+
return entry;
|
|
62
152
|
} catch (err) {
|
|
63
|
-
logger.error(`[${targetName}] 복사 실패: ${err instanceof Error ? err.message : err}`);
|
|
153
|
+
logger.error(`[${entry.targetName}] 복사 실패: ${err instanceof Error ? err.message : err}`);
|
|
154
|
+
return undefined;
|
|
64
155
|
}
|
|
65
|
-
}
|
|
156
|
+
}));
|
|
157
|
+
|
|
158
|
+
const copiedEntries = results.filter((e): e is ReplaceDepEntry => e != null);
|
|
66
159
|
|
|
67
|
-
logger.success(`replace-deps 설정 완료 (${
|
|
160
|
+
logger.success(`replace-deps 설정 완료 (${copiedEntries.length}개 의존성 교체)`);
|
|
68
161
|
|
|
69
162
|
// 교체된 패키지의 postinstall 스크립트 실행
|
|
70
|
-
for (const { targetName, resolvedSourcePath, actualTargetPath } of
|
|
163
|
+
for (const { targetName, resolvedSourcePath, actualTargetPath } of copiedEntries) {
|
|
71
164
|
const sourcePkgJsonPath = pathx.posix(path.join(resolvedSourcePath, "package.json"));
|
|
72
165
|
try {
|
|
73
166
|
const pkgJson = JSON.parse(await fs.promises.readFile(sourcePkgJsonPath, "utf-8"));
|
|
@@ -91,8 +184,8 @@ export async function setupReplaceDeps(
|
|
|
91
184
|
*
|
|
92
185
|
* 1. pnpm-workspace.yaml 파싱 → 워크스페이스 패키지 경로
|
|
93
186
|
* 2. [루트, ...워크스페이스 패키지] node_modules에서 매칭 패키지 탐색
|
|
94
|
-
* 3. FsWatcher로
|
|
95
|
-
* 4. 변경사항을 대상 경로에 복사
|
|
187
|
+
* 3. FsWatcher로 files 항목 경로만 감시 (300ms 딜레이)
|
|
188
|
+
* 4. 변경사항을 대상 경로에 복사
|
|
96
189
|
*
|
|
97
190
|
* @param projectRoot - 프로젝트 루트 경로
|
|
98
191
|
* @param replaceDeps - sd.config.ts의 replaceDeps 설정
|
|
@@ -118,66 +211,95 @@ export async function watchReplaceDeps(
|
|
|
118
211
|
if (watchedSources.has(entry.resolvedSourcePath)) continue;
|
|
119
212
|
watchedSources.add(entry.resolvedSourcePath);
|
|
120
213
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
214
|
+
try {
|
|
215
|
+
// 소스 패키지의 files 필드를 읽어 감시 대상 경로 구성
|
|
216
|
+
const files = await loadFilesField(entry.resolvedSourcePath);
|
|
217
|
+
if (files == null) {
|
|
218
|
+
logger.warn(`[${entry.targetName}] package.json에 files 필드가 없어 감시 건너뜀`);
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// files 항목 경로 + npm 기본 파일 경로
|
|
223
|
+
const watchPaths = files.map((f) =>
|
|
224
|
+
pathx.posix(path.join(entry.resolvedSourcePath, f)),
|
|
225
|
+
);
|
|
124
226
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
if (
|
|
133
|
-
EXCLUDED_NAMES.has(path.basename(changedPath)) ||
|
|
134
|
-
excludedPaths.some((ep) => pathx.isChildPath(changedPath, ep))
|
|
135
|
-
) {
|
|
136
|
-
continue;
|
|
227
|
+
// 소스 루트에서 npm 기본 파일 패턴에 매칭되는 파일 추가
|
|
228
|
+
try {
|
|
229
|
+
const rootEntries = await fs.promises.readdir(entry.resolvedSourcePath);
|
|
230
|
+
for (const name of rootEntries) {
|
|
231
|
+
if (NPM_DEFAULT_FILE_PATTERN.test(name)) {
|
|
232
|
+
watchPaths.push(pathx.posix(path.join(entry.resolvedSourcePath, name)));
|
|
233
|
+
}
|
|
137
234
|
}
|
|
235
|
+
} catch {
|
|
236
|
+
// readdir 실패 시 npm 기본 파일 감시 생략
|
|
237
|
+
}
|
|
138
238
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
239
|
+
// 이 소스 경로에 해당하는 entries만 사전 필터링하여 캡처
|
|
240
|
+
const sourceEntries = entries.filter(
|
|
241
|
+
(e) => e.resolvedSourcePath === entry.resolvedSourcePath,
|
|
242
|
+
);
|
|
243
|
+
|
|
244
|
+
const watcher = await FsWatcher.watch(watchPaths, {
|
|
245
|
+
followSymlinks: false,
|
|
246
|
+
});
|
|
247
|
+
watcher.onChange({ delay: 300 }, async (changeInfos) => {
|
|
248
|
+
let hasActualCopy = false;
|
|
142
249
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
const
|
|
250
|
+
for (const { path: changedPath } of changeInfos) {
|
|
251
|
+
// 사전 필터링된 항목만 순회
|
|
252
|
+
for (const e of sourceEntries) {
|
|
253
|
+
// 소스로부터의 상대 경로 계산
|
|
254
|
+
const relativePath = pathx.posix(path.relative(e.resolvedSourcePath, changedPath));
|
|
255
|
+
const destPath = pathx.posix(path.join(e.actualTargetPath, relativePath));
|
|
146
256
|
|
|
147
|
-
try {
|
|
148
|
-
// 소스 존재 여부 확인
|
|
149
|
-
let sourceExists = false;
|
|
150
257
|
try {
|
|
151
|
-
|
|
152
|
-
sourceExists =
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
258
|
+
// 소스 존재 여부 확인
|
|
259
|
+
let sourceExists = false;
|
|
260
|
+
try {
|
|
261
|
+
await fs.promises.access(changedPath);
|
|
262
|
+
sourceExists = true;
|
|
263
|
+
} catch {
|
|
264
|
+
// 소스가 삭제됨
|
|
265
|
+
}
|
|
156
266
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
267
|
+
if (sourceExists) {
|
|
268
|
+
// 소스가 디렉토리인지 파일인지 확인
|
|
269
|
+
const stat = await fs.promises.stat(changedPath);
|
|
270
|
+
if (stat.isDirectory()) {
|
|
271
|
+
await fsx.mkdir(destPath);
|
|
272
|
+
} else {
|
|
273
|
+
// 파일 내용이 동일하면 복사 건너뜀 (불필요한 리빌드 방지)
|
|
274
|
+
if (await isFileContentSame(changedPath, destPath)) continue;
|
|
275
|
+
await fsx.mkdir(pathx.posix(path.dirname(destPath)));
|
|
276
|
+
await fsx.copy(changedPath, destPath);
|
|
277
|
+
hasActualCopy = true;
|
|
278
|
+
}
|
|
162
279
|
} else {
|
|
163
|
-
|
|
164
|
-
await fsx.
|
|
280
|
+
// 소스가 삭제됨 → 대상도 삭제
|
|
281
|
+
await fsx.rm(destPath);
|
|
282
|
+
hasActualCopy = true;
|
|
165
283
|
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
|
|
284
|
+
} catch (err) {
|
|
285
|
+
logger.error(
|
|
286
|
+
`[${e.targetName}] 복사 실패 (${relativePath}): ${err instanceof Error ? err.message : err}`,
|
|
287
|
+
);
|
|
169
288
|
}
|
|
170
|
-
} catch (err) {
|
|
171
|
-
logger.error(
|
|
172
|
-
`[${e.targetName}] 복사 실패 (${relativePath}): ${err instanceof Error ? err.message : err}`,
|
|
173
|
-
);
|
|
174
289
|
}
|
|
175
290
|
}
|
|
176
|
-
}
|
|
177
|
-
options?.onChanged?.();
|
|
178
|
-
});
|
|
179
291
|
|
|
180
|
-
|
|
292
|
+
if (hasActualCopy) {
|
|
293
|
+
options?.onChanged?.();
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
watchers.push(watcher);
|
|
298
|
+
} catch (err) {
|
|
299
|
+
logger.error(
|
|
300
|
+
`[${entry.targetName}] 감시 설정 실패: ${err instanceof Error ? err.message : err}`,
|
|
301
|
+
);
|
|
302
|
+
}
|
|
181
303
|
}
|
|
182
304
|
|
|
183
305
|
logger.success("replace-deps 워치 준비 완료");
|
package/src/electron/electron.ts
CHANGED
|
@@ -60,7 +60,7 @@ export class Electron {
|
|
|
60
60
|
//#region Public Methods
|
|
61
61
|
|
|
62
62
|
async initialize(): Promise<void> {
|
|
63
|
-
Electron._logger.
|
|
63
|
+
Electron._logger.start("initialize 중...");
|
|
64
64
|
|
|
65
65
|
Electron._logger.debug("package.json 설정 시작");
|
|
66
66
|
await this._setupNpmConf();
|
|
@@ -83,11 +83,11 @@ export class Electron {
|
|
|
83
83
|
await this._exec("pnpm", ["exec", "electron-rebuild"], this._srcPath);
|
|
84
84
|
Electron._logger.debug("electron-rebuild 완료");
|
|
85
85
|
}
|
|
86
|
-
Electron._logger.
|
|
86
|
+
Electron._logger.success("initialize 완료");
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
async run(url: string): Promise<void> {
|
|
90
|
-
Electron._logger.
|
|
90
|
+
Electron._logger.start(`run 중... (url: ${url})`);
|
|
91
91
|
|
|
92
92
|
await this.initialize();
|
|
93
93
|
await this._copyPublicAssets();
|
|
@@ -126,7 +126,7 @@ export class Electron {
|
|
|
126
126
|
setup: (build) => {
|
|
127
127
|
build.onEnd(async (result) => {
|
|
128
128
|
if (result.errors.length > 0) {
|
|
129
|
-
Electron._logger.
|
|
129
|
+
Electron._logger.error("번들링 실패. Electron을 재시작하지 않습니다.");
|
|
130
130
|
return;
|
|
131
131
|
}
|
|
132
132
|
|
|
@@ -181,11 +181,11 @@ export class Electron {
|
|
|
181
181
|
process.once("SIGINT", signalHandler);
|
|
182
182
|
process.once("SIGTERM", signalHandler);
|
|
183
183
|
});
|
|
184
|
-
Electron._logger.
|
|
184
|
+
Electron._logger.success("run 완료");
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
async build(outPath: string): Promise<void> {
|
|
188
|
-
Electron._logger.
|
|
188
|
+
Electron._logger.start("build 중...");
|
|
189
189
|
|
|
190
190
|
await this.initialize();
|
|
191
191
|
|
|
@@ -205,7 +205,7 @@ export class Electron {
|
|
|
205
205
|
await this._copyBuildOutput(outPath);
|
|
206
206
|
Electron._logger.debug("빌드 산출물 복사 완료");
|
|
207
207
|
|
|
208
|
-
Electron._logger.
|
|
208
|
+
Electron._logger.success("build 완료");
|
|
209
209
|
}
|
|
210
210
|
|
|
211
211
|
//#endregion
|
|
@@ -163,14 +163,10 @@ export abstract class BaseEngine<
|
|
|
163
163
|
(data as CommonBuildWorkerEvents["build"]).build,
|
|
164
164
|
});
|
|
165
165
|
|
|
166
|
-
// BaseEngine 전용:
|
|
166
|
+
// BaseEngine 전용: 린트 결과 보고
|
|
167
167
|
this._worker!.on("build", (data) => {
|
|
168
168
|
const event = data;
|
|
169
169
|
|
|
170
|
-
if (event.build.warnings != null && event.build.warnings.length > 0) {
|
|
171
|
-
logger.warn(`${this._pkg.name}: ${event.build.warnings.join(", ")}`);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
170
|
if (event.lint != null) {
|
|
175
171
|
const lintResult: BuildResult = {
|
|
176
172
|
name: this._pkg.name,
|
|
@@ -184,7 +180,7 @@ export abstract class BaseEngine<
|
|
|
184
180
|
});
|
|
185
181
|
|
|
186
182
|
this._callStartWatch(output).catch((err: unknown) => {
|
|
187
|
-
logger.
|
|
183
|
+
logger.debug(`[${this._pkg.name}] startWatch 실패:`, errNs.message(err));
|
|
188
184
|
this._resultCollector?.add({
|
|
189
185
|
name: this._pkg.name,
|
|
190
186
|
target: this._getTarget(),
|
|
@@ -101,20 +101,14 @@ export class EsbuildClientEngine implements BuildEngine {
|
|
|
101
101
|
});
|
|
102
102
|
|
|
103
103
|
// 공통 이벤트 처리 (buildStart/build/error)
|
|
104
|
-
setupWatchEvents(this._worker!, {
|
|
104
|
+
const { resolveInitialBuild } = setupWatchEvents(this._worker!, {
|
|
105
105
|
name: this._pkg.name,
|
|
106
106
|
target: "client",
|
|
107
107
|
resultCollector: this._resultCollector,
|
|
108
108
|
rebuildManager: this._rebuildManager,
|
|
109
109
|
normalizeBuild: (data) => data as NormalizedBuildInfo,
|
|
110
110
|
});
|
|
111
|
-
//
|
|
112
|
-
|
|
113
|
-
// EsbuildClientEngine 전용: error 로깅
|
|
114
|
-
this._worker!.on("error", (data) => {
|
|
115
|
-
const event = data as { message: string };
|
|
116
|
-
logger.error(`${this._pkg.name}: ${event.message}`);
|
|
117
|
-
});
|
|
111
|
+
resolveInitialBuild(); // EsbuildClientEngine은 worker.startWatch() await로 초기 빌드 완료를 감지하므로 즉시 정리
|
|
118
112
|
|
|
119
113
|
const port =
|
|
120
114
|
typeof this._pkg.config.server === "number"
|
|
@@ -132,15 +126,27 @@ export class EsbuildClientEngine implements BuildEngine {
|
|
|
132
126
|
browserSupport: this._pkg.config.browserSupport,
|
|
133
127
|
});
|
|
134
128
|
|
|
129
|
+
const warningsText = result.warnings != null && result.warnings.length > 0
|
|
130
|
+
? result.warnings.join("\n")
|
|
131
|
+
: undefined;
|
|
132
|
+
|
|
135
133
|
if (!result.success) {
|
|
136
|
-
const errorDetail = result.errors?.join("
|
|
137
|
-
logger.error(`[${this._pkg.name}] 초기 빌드 실패: ${errorDetail}`);
|
|
134
|
+
const errorDetail = result.errors?.join("\n") ?? "unknown error";
|
|
138
135
|
this._resultCollector?.add({
|
|
139
136
|
name: this._pkg.name,
|
|
140
137
|
target: "client",
|
|
141
138
|
type: "build",
|
|
142
139
|
status: "error",
|
|
143
140
|
message: errorDetail,
|
|
141
|
+
warnings: warningsText,
|
|
142
|
+
});
|
|
143
|
+
} else if (warningsText != null) {
|
|
144
|
+
this._resultCollector?.add({
|
|
145
|
+
name: this._pkg.name,
|
|
146
|
+
target: "client",
|
|
147
|
+
type: "build",
|
|
148
|
+
status: "success",
|
|
149
|
+
warnings: warningsText,
|
|
144
150
|
});
|
|
145
151
|
}
|
|
146
152
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type * as
|
|
1
|
+
import type * as LibraryBuildWorkerModule from "../workers/library-build.worker";
|
|
2
2
|
import type { ResultCollector } from "../runtime/ResultCollector";
|
|
3
3
|
import type { RebuildManager } from "../runtime/rebuild-manager";
|
|
4
4
|
import type { BuildOutput, BuildPackageInfo, EngineResult } from "./types";
|
|
@@ -24,19 +24,19 @@ export interface NgtscEngineOptions {
|
|
|
24
24
|
/**
|
|
25
25
|
* NgtscProgram 기반 Angular 라이브러리 패키지용 빌드 엔진
|
|
26
26
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
27
|
+
* 통합된 library-build.worker를 사용하며, globalScss: true를 전달하여
|
|
28
|
+
* Angular AOT 컴파일 + SCSS 빌드를 활성화한다.
|
|
29
29
|
*/
|
|
30
30
|
export class NgtscEngine extends BaseEngine<
|
|
31
31
|
BuildPackageInfo,
|
|
32
|
-
typeof
|
|
32
|
+
typeof LibraryBuildWorkerModule & CommonBuildWorkerModule
|
|
33
33
|
> {
|
|
34
34
|
constructor(options: NgtscEngineOptions) {
|
|
35
35
|
super(options);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
protected _getWorkerPath(): string {
|
|
39
|
-
return import.meta.resolve("../workers/
|
|
39
|
+
return import.meta.resolve("../workers/library-build.worker");
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
protected _getTarget(): string {
|
|
@@ -49,7 +49,7 @@ export class NgtscEngine extends BaseEngine<
|
|
|
49
49
|
name: this._pkg.name,
|
|
50
50
|
cwd: this._cwd,
|
|
51
51
|
pkgDir: this._pkg.dir,
|
|
52
|
-
output,
|
|
52
|
+
output: { ...output, globalScss: true },
|
|
53
53
|
});
|
|
54
54
|
|
|
55
55
|
return this._normalizeResult(result);
|
|
@@ -61,7 +61,7 @@ export class NgtscEngine extends BaseEngine<
|
|
|
61
61
|
name: this._pkg.name,
|
|
62
62
|
cwd: this._cwd,
|
|
63
63
|
pkgDir: this._pkg.dir,
|
|
64
|
-
output,
|
|
64
|
+
output: { ...output, globalScss: true },
|
|
65
65
|
replaceDeps: this._replaceDeps,
|
|
66
66
|
});
|
|
67
67
|
}
|
package/src/engines/TscEngine.ts
CHANGED
|
@@ -47,7 +47,6 @@ export class TscEngine extends BaseEngine<
|
|
|
47
47
|
logger.debug(`[${this._pkg.name}] worker.build 호출`);
|
|
48
48
|
const result = await this._worker!.build({
|
|
49
49
|
name: this._pkg.name,
|
|
50
|
-
config: this._pkg.config,
|
|
51
50
|
cwd: this._cwd,
|
|
52
51
|
pkgDir: this._pkg.dir,
|
|
53
52
|
output,
|
|
@@ -60,7 +59,6 @@ export class TscEngine extends BaseEngine<
|
|
|
60
59
|
logger.debug(`[${this._pkg.name}] worker.startWatch 호출`);
|
|
61
60
|
await this._worker!.startWatch({
|
|
62
61
|
name: this._pkg.name,
|
|
63
|
-
config: this._pkg.config,
|
|
64
62
|
cwd: this._cwd,
|
|
65
63
|
pkgDir: this._pkg.dir,
|
|
66
64
|
output,
|