@simplysm/sd-cli 14.0.30 → 14.0.32
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/{utils → angular}/angular-build-pipeline.d.ts +0 -2
- package/dist/angular/angular-build-pipeline.d.ts.map +1 -0
- package/dist/{utils → angular}/angular-build-pipeline.js +3 -6
- package/dist/angular/angular-build-pipeline.js.map +1 -0
- package/dist/{utils → angular}/angular-build.d.ts +1 -1
- package/dist/angular/angular-build.d.ts.map +1 -0
- package/dist/{utils → angular}/angular-build.js +1 -1
- package/dist/angular/angular-build.js.map +1 -0
- package/dist/{utils → angular}/angular-compiler.d.ts +0 -3
- package/dist/angular/angular-compiler.d.ts.map +1 -0
- package/dist/{utils → angular}/angular-compiler.js +1 -45
- package/dist/angular/angular-compiler.js.map +1 -0
- package/dist/angular/client-transform-stylesheet.js +1 -1
- package/dist/angular/client-transform-stylesheet.js.map +1 -1
- package/dist/{utils → angular}/ngtsc-build-core.d.ts +3 -3
- package/dist/angular/ngtsc-build-core.d.ts.map +1 -0
- package/dist/angular/ngtsc-build-core.js.map +1 -0
- package/dist/angular/scss-compiler.d.ts.map +1 -0
- package/dist/angular/scss-compiler.js.map +1 -0
- package/dist/angular/vite-angular-plugin.d.ts +2 -10
- package/dist/angular/vite-angular-plugin.d.ts.map +1 -1
- package/dist/angular/vite-angular-plugin.js +20 -286
- package/dist/angular/vite-angular-plugin.js.map +1 -1
- package/dist/capacitor/capacitor-build.d.ts +14 -0
- package/dist/capacitor/capacitor-build.d.ts.map +1 -0
- package/dist/capacitor/capacitor-build.js +105 -0
- package/dist/capacitor/capacitor-build.js.map +1 -0
- package/dist/capacitor/capacitor-config-writer.d.ts +11 -0
- package/dist/capacitor/capacitor-config-writer.d.ts.map +1 -0
- package/dist/capacitor/capacitor-config-writer.js +54 -0
- package/dist/capacitor/capacitor-config-writer.js.map +1 -0
- package/dist/capacitor/capacitor-icon.d.ts +5 -0
- package/dist/capacitor/capacitor-icon.d.ts.map +1 -0
- package/dist/capacitor/capacitor-icon.js +58 -0
- package/dist/capacitor/capacitor-icon.js.map +1 -0
- package/dist/capacitor/capacitor-npm-config.d.ts +11 -0
- package/dist/capacitor/capacitor-npm-config.d.ts.map +1 -0
- package/dist/capacitor/capacitor-npm-config.js +145 -0
- package/dist/capacitor/capacitor-npm-config.js.map +1 -0
- package/dist/capacitor/capacitor.d.ts +0 -45
- package/dist/capacitor/capacitor.d.ts.map +1 -1
- package/dist/capacitor/capacitor.js +15 -354
- package/dist/capacitor/capacitor.js.map +1 -1
- package/dist/commands/check.js +2 -2
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/dev.d.ts +3 -3
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +3 -3
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/lint.d.ts +1 -1
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js +1 -1
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/publish/deployment-phase.d.ts +12 -0
- package/dist/commands/publish/deployment-phase.d.ts.map +1 -0
- package/dist/commands/publish/deployment-phase.js +94 -0
- package/dist/commands/publish/deployment-phase.js.map +1 -0
- package/dist/commands/publish/env-utils.d.ts +10 -0
- package/dist/commands/publish/env-utils.d.ts.map +1 -0
- package/dist/commands/publish/env-utils.js +41 -0
- package/dist/commands/publish/env-utils.js.map +1 -0
- package/dist/commands/publish/git-phase.d.ts +12 -0
- package/dist/commands/publish/git-phase.d.ts.map +1 -0
- package/dist/commands/publish/git-phase.js +79 -0
- package/dist/commands/publish/git-phase.js.map +1 -0
- package/dist/commands/{publish.d.ts → publish/index.d.ts} +1 -1
- package/dist/commands/publish/index.d.ts.map +1 -0
- package/dist/commands/publish/index.js +211 -0
- package/dist/commands/publish/index.js.map +1 -0
- package/dist/commands/publish/local-publisher.d.ts +6 -0
- package/dist/commands/publish/local-publisher.d.ts.map +1 -0
- package/dist/commands/publish/local-publisher.js +16 -0
- package/dist/commands/publish/local-publisher.js.map +1 -0
- package/dist/commands/publish/npm-publisher.d.ts +6 -0
- package/dist/commands/publish/npm-publisher.d.ts.map +1 -0
- package/dist/commands/publish/npm-publisher.js +21 -0
- package/dist/commands/publish/npm-publisher.js.map +1 -0
- package/dist/commands/publish/post-publish-phase.d.ts +8 -0
- package/dist/commands/publish/post-publish-phase.d.ts.map +1 -0
- package/dist/commands/publish/post-publish-phase.js +34 -0
- package/dist/commands/publish/post-publish-phase.js.map +1 -0
- package/dist/commands/publish/storage-publisher.d.ts +18 -0
- package/dist/commands/publish/storage-publisher.d.ts.map +1 -0
- package/dist/commands/publish/storage-publisher.js +173 -0
- package/dist/commands/publish/storage-publisher.js.map +1 -0
- package/dist/commands/publish/version-upgrade.d.ts +28 -0
- package/dist/commands/publish/version-upgrade.d.ts.map +1 -0
- package/dist/commands/publish/version-upgrade.js +96 -0
- package/dist/commands/publish/version-upgrade.js.map +1 -0
- package/dist/commands/replace-deps.js +1 -1
- package/dist/commands/replace-deps.js.map +1 -1
- package/dist/commands/watch.d.ts +3 -4
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +3 -4
- package/dist/commands/watch.js.map +1 -1
- package/dist/deps/replace-deps/collect-deps.d.ts +6 -0
- package/dist/deps/replace-deps/collect-deps.d.ts.map +1 -0
- package/dist/deps/replace-deps/collect-deps.js +71 -0
- package/dist/deps/replace-deps/collect-deps.js.map +1 -0
- package/dist/{utils/replace-deps.d.ts → deps/replace-deps/replace-deps-resolve.d.ts} +7 -24
- package/dist/deps/replace-deps/replace-deps-resolve.d.ts.map +1 -0
- package/dist/{utils/replace-deps.js → deps/replace-deps/replace-deps-resolve.js} +4 -152
- package/dist/deps/replace-deps/replace-deps-resolve.js.map +1 -0
- package/dist/deps/replace-deps/replace-deps.d.ts +36 -0
- package/dist/deps/replace-deps/replace-deps.d.ts.map +1 -0
- package/dist/deps/replace-deps/replace-deps.js +155 -0
- package/dist/deps/replace-deps/replace-deps.js.map +1 -0
- package/dist/{utils → deps/server-externals}/server-production-files.d.ts +1 -1
- package/dist/deps/server-externals/server-production-files.d.ts.map +1 -0
- package/dist/{utils → deps/server-externals}/server-production-files.js +1 -1
- package/dist/deps/server-externals/server-production-files.js.map +1 -0
- package/dist/dev-server/dev-http-server.d.ts +23 -0
- package/dist/dev-server/dev-http-server.d.ts.map +1 -0
- package/dist/dev-server/dev-http-server.js +116 -0
- package/dist/dev-server/dev-http-server.js.map +1 -0
- package/dist/dev-server/hmr-client-script.d.ts +13 -0
- package/dist/dev-server/hmr-client-script.d.ts.map +1 -0
- package/dist/dev-server/hmr-client-script.js +73 -0
- package/dist/dev-server/hmr-client-script.js.map +1 -0
- package/dist/dev-server/hmr-service.d.ts +23 -0
- package/dist/dev-server/hmr-service.d.ts.map +1 -0
- package/dist/dev-server/hmr-service.js +139 -0
- package/dist/dev-server/hmr-service.js.map +1 -0
- package/dist/electron/electron.d.ts +5 -0
- package/dist/electron/electron.d.ts.map +1 -1
- package/dist/electron/electron.js +17 -24
- package/dist/electron/electron.js.map +1 -1
- package/dist/engines/BaseEngine.d.ts +18 -4
- package/dist/engines/BaseEngine.d.ts.map +1 -1
- package/dist/engines/BaseEngine.js +45 -66
- package/dist/engines/BaseEngine.js.map +1 -1
- package/dist/engines/{ViteEngine.d.ts → EsbuildClientEngine.d.ts} +11 -18
- package/dist/engines/EsbuildClientEngine.d.ts.map +1 -0
- package/dist/engines/{ViteEngine.js → EsbuildClientEngine.js} +28 -55
- package/dist/engines/EsbuildClientEngine.js.map +1 -0
- package/dist/engines/NgtscEngine.d.ts +2 -2
- package/dist/engines/NgtscEngine.d.ts.map +1 -1
- package/dist/engines/NgtscEngine.js +1 -9
- package/dist/engines/NgtscEngine.js.map +1 -1
- package/dist/engines/ServerEsbuildEngine.d.ts +2 -2
- package/dist/engines/ServerEsbuildEngine.d.ts.map +1 -1
- package/dist/engines/ServerEsbuildEngine.js +1 -9
- package/dist/engines/ServerEsbuildEngine.js.map +1 -1
- package/dist/engines/TscEngine.d.ts +2 -2
- package/dist/engines/TscEngine.d.ts.map +1 -1
- package/dist/engines/TscEngine.js +1 -9
- package/dist/engines/TscEngine.js.map +1 -1
- package/dist/engines/index.d.ts +15 -5
- package/dist/engines/index.d.ts.map +1 -1
- package/dist/engines/index.js +21 -5
- package/dist/engines/index.js.map +1 -1
- package/dist/engines/types.d.ts +3 -3
- package/dist/engines/types.d.ts.map +1 -1
- package/dist/esbuild/esbuild-client-config.d.ts +38 -0
- package/dist/esbuild/esbuild-client-config.d.ts.map +1 -0
- package/dist/esbuild/esbuild-client-config.js +171 -0
- package/dist/esbuild/esbuild-client-config.js.map +1 -0
- package/dist/esbuild/esbuild-config.d.ts.map +1 -0
- package/dist/{utils → esbuild}/esbuild-config.js +1 -0
- package/dist/esbuild/esbuild-config.js.map +1 -0
- package/dist/esbuild/esbuild-index-html.d.ts +39 -0
- package/dist/esbuild/esbuild-index-html.d.ts.map +1 -0
- package/dist/esbuild/esbuild-index-html.js +68 -0
- package/dist/esbuild/esbuild-index-html.js.map +1 -0
- package/dist/esbuild/esbuild-pwa.d.ts +21 -0
- package/dist/esbuild/esbuild-pwa.d.ts.map +1 -0
- package/dist/esbuild/esbuild-pwa.js +105 -0
- package/dist/esbuild/esbuild-pwa.js.map +1 -0
- package/dist/esbuild/esbuild-scss-plugin.d.ts +6 -0
- package/dist/esbuild/esbuild-scss-plugin.d.ts.map +1 -0
- package/dist/esbuild/esbuild-scss-plugin.js +41 -0
- package/dist/esbuild/esbuild-scss-plugin.js.map +1 -0
- package/dist/lint/lint-core.d.ts.map +1 -0
- package/dist/lint/lint-core.js.map +1 -0
- package/dist/lint/lint-utils.d.ts.map +1 -0
- package/dist/lint/lint-utils.js.map +1 -0
- package/dist/lint/lint-with-program.d.ts.map +1 -0
- package/dist/lint/lint-with-program.js.map +1 -0
- package/dist/orchestrators/BaseOrchestrator.d.ts +44 -0
- package/dist/orchestrators/BaseOrchestrator.d.ts.map +1 -0
- package/dist/orchestrators/BaseOrchestrator.js +92 -0
- package/dist/orchestrators/BaseOrchestrator.js.map +1 -0
- package/dist/orchestrators/BuildOrchestrator.d.ts +45 -3
- package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/BuildOrchestrator.js +170 -143
- package/dist/orchestrators/BuildOrchestrator.js.map +1 -1
- package/dist/orchestrators/DevOrchestrator.d.ts +39 -0
- package/dist/orchestrators/DevOrchestrator.d.ts.map +1 -0
- package/dist/orchestrators/DevOrchestrator.js +249 -0
- package/dist/orchestrators/DevOrchestrator.js.map +1 -0
- package/dist/orchestrators/ServerRuntimeManager.d.ts +22 -0
- package/dist/orchestrators/ServerRuntimeManager.d.ts.map +1 -0
- package/dist/orchestrators/ServerRuntimeManager.js +66 -0
- package/dist/orchestrators/ServerRuntimeManager.js.map +1 -0
- package/dist/orchestrators/TypecheckOrchestrator.d.ts +17 -2
- package/dist/orchestrators/TypecheckOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/TypecheckOrchestrator.js +122 -108
- package/dist/orchestrators/TypecheckOrchestrator.js.map +1 -1
- package/dist/orchestrators/WatchOrchestrator.d.ts +33 -0
- package/dist/orchestrators/WatchOrchestrator.d.ts.map +1 -0
- package/dist/orchestrators/WatchOrchestrator.js +158 -0
- package/dist/orchestrators/WatchOrchestrator.js.map +1 -0
- package/dist/orchestrators/types.d.ts +17 -0
- package/dist/orchestrators/types.d.ts.map +1 -0
- package/dist/orchestrators/types.js +2 -0
- package/dist/orchestrators/types.js.map +1 -0
- package/dist/runtime/ResultCollector.d.ts.map +1 -0
- package/dist/runtime/ResultCollector.js.map +1 -0
- package/dist/runtime/SignalHandler.d.ts.map +1 -0
- package/dist/runtime/SignalHandler.js.map +1 -0
- package/dist/{utils → runtime}/engine-stop.d.ts +1 -1
- package/dist/runtime/engine-stop.d.ts.map +1 -0
- package/dist/{utils → runtime}/engine-stop.js +1 -1
- package/dist/runtime/engine-stop.js.map +1 -0
- package/dist/runtime/engine-watch-events.d.ts +43 -0
- package/dist/runtime/engine-watch-events.d.ts.map +1 -0
- package/dist/runtime/engine-watch-events.js +72 -0
- package/dist/runtime/engine-watch-events.js.map +1 -0
- package/dist/{utils → runtime}/rebuild-manager.d.ts +1 -0
- package/dist/runtime/rebuild-manager.d.ts.map +1 -0
- package/dist/{utils → runtime}/rebuild-manager.js +8 -1
- package/dist/runtime/rebuild-manager.js.map +1 -0
- package/dist/runtime/worker-events.d.ts +22 -0
- package/dist/runtime/worker-events.d.ts.map +1 -0
- package/dist/runtime/worker-events.js +2 -0
- package/dist/runtime/worker-events.js.map +1 -0
- package/dist/runtime/worker-utils.d.ts.map +1 -0
- package/dist/runtime/worker-utils.js.map +1 -0
- package/dist/sd-cli-entry.d.ts.map +1 -1
- package/dist/sd-cli-entry.js +61 -54
- package/dist/sd-cli-entry.js.map +1 -1
- package/dist/sd-cli.js +1 -1
- package/dist/sd-cli.js.map +1 -1
- package/dist/sd-config.types.d.ts +6 -15
- package/dist/sd-config.types.d.ts.map +1 -1
- package/dist/typecheck/typecheck-non-package.d.ts.map +1 -0
- package/dist/{utils → typecheck}/typecheck-non-package.js +1 -1
- package/dist/typecheck/typecheck-non-package.js.map +1 -0
- package/dist/typecheck/typecheck-serialization.d.ts.map +1 -0
- package/dist/typecheck/typecheck-serialization.js.map +1 -0
- package/dist/utils/diagnostic-utils.d.ts +5 -0
- package/dist/utils/diagnostic-utils.d.ts.map +1 -1
- package/dist/utils/diagnostic-utils.js +15 -0
- package/dist/utils/diagnostic-utils.js.map +1 -1
- package/dist/utils/orchestrator-utils.d.ts +1 -5
- package/dist/utils/orchestrator-utils.d.ts.map +1 -1
- package/dist/utils/orchestrator-utils.js +2 -5
- package/dist/utils/orchestrator-utils.js.map +1 -1
- package/dist/utils/output-utils.d.ts +1 -1
- package/dist/utils/output-utils.d.ts.map +1 -1
- package/dist/utils/package-classify.d.ts +54 -0
- package/dist/utils/package-classify.d.ts.map +1 -0
- package/dist/utils/package-classify.js +134 -0
- package/dist/utils/package-classify.js.map +1 -0
- package/dist/utils/package-utils.d.ts +1 -58
- package/dist/utils/package-utils.d.ts.map +1 -1
- package/dist/utils/package-utils.js +0 -193
- package/dist/utils/package-utils.js.map +1 -1
- package/dist/utils/tsc-build.d.ts +1 -1
- package/dist/utils/tsc-build.d.ts.map +1 -1
- package/dist/utils/tsc-build.js +1 -1
- package/dist/utils/tsc-build.js.map +1 -1
- package/dist/workers/build-change-filter.d.ts +8 -0
- package/dist/workers/build-change-filter.d.ts.map +1 -0
- package/dist/workers/build-change-filter.js +16 -0
- package/dist/workers/build-change-filter.js.map +1 -0
- package/dist/workers/build-watch-paths.d.ts +20 -0
- package/dist/workers/build-watch-paths.d.ts.map +1 -0
- package/dist/workers/build-watch-paths.js +29 -0
- package/dist/workers/build-watch-paths.js.map +1 -0
- package/dist/workers/client.worker.d.ts +11 -18
- package/dist/workers/client.worker.d.ts.map +1 -1
- package/dist/workers/client.worker.js +218 -289
- package/dist/workers/client.worker.js.map +1 -1
- package/dist/workers/library-build.worker.d.ts +2 -2
- package/dist/workers/library-build.worker.d.ts.map +1 -1
- package/dist/workers/library-build.worker.js +13 -24
- package/dist/workers/library-build.worker.js.map +1 -1
- package/dist/workers/lint.worker.d.ts +1 -1
- package/dist/workers/lint.worker.d.ts.map +1 -1
- package/dist/workers/lint.worker.js +1 -1
- package/dist/workers/lint.worker.js.map +1 -1
- package/dist/workers/ngtsc-build.worker.d.ts +1 -1
- package/dist/workers/ngtsc-build.worker.d.ts.map +1 -1
- package/dist/workers/ngtsc-build.worker.js +19 -35
- package/dist/workers/ngtsc-build.worker.js.map +1 -1
- package/dist/workers/server-build.worker.d.ts +2 -2
- package/dist/workers/server-build.worker.d.ts.map +1 -1
- package/dist/workers/server-build.worker.js +36 -137
- package/dist/workers/server-build.worker.js.map +1 -1
- package/dist/workers/server-esbuild-context.d.ts +47 -0
- package/dist/workers/server-esbuild-context.d.ts.map +1 -0
- package/dist/workers/server-esbuild-context.js +92 -0
- package/dist/workers/server-esbuild-context.js.map +1 -0
- package/dist/workers/server-runtime.worker.d.ts.map +1 -1
- package/dist/workers/server-runtime.worker.js +3 -1
- package/dist/workers/server-runtime.worker.js.map +1 -1
- package/dist/workers/server-watch-manager.d.ts +44 -0
- package/dist/workers/server-watch-manager.d.ts.map +1 -0
- package/dist/workers/server-watch-manager.js +87 -0
- package/dist/workers/server-watch-manager.js.map +1 -0
- package/dist/workers/shared-worker-lifecycle.d.ts +14 -0
- package/dist/workers/shared-worker-lifecycle.d.ts.map +1 -0
- package/dist/workers/shared-worker-lifecycle.js +17 -0
- package/dist/workers/shared-worker-lifecycle.js.map +1 -0
- package/package.json +9 -9
- package/src/{utils → angular}/angular-build-pipeline.ts +3 -8
- package/src/{utils → angular}/angular-build.ts +1 -1
- package/src/{utils → angular}/angular-compiler.ts +1 -64
- package/src/angular/client-transform-stylesheet.ts +1 -1
- package/src/{utils → angular}/ngtsc-build-core.ts +3 -3
- package/src/angular/vite-angular-plugin.ts +22 -355
- package/src/capacitor/capacitor-build.ts +142 -0
- package/src/capacitor/capacitor-config-writer.ts +66 -0
- package/src/capacitor/capacitor-icon.ts +75 -0
- package/src/capacitor/capacitor-npm-config.ts +192 -0
- package/src/capacitor/capacitor.ts +32 -441
- package/src/commands/check.ts +2 -2
- package/src/commands/dev.ts +6 -6
- package/src/commands/lint.ts +1 -1
- package/src/commands/publish/deployment-phase.ts +125 -0
- package/src/commands/publish/env-utils.ts +44 -0
- package/src/commands/publish/git-phase.ts +99 -0
- package/src/commands/publish/index.ts +266 -0
- package/src/commands/publish/local-publisher.ts +23 -0
- package/src/commands/publish/npm-publisher.ts +30 -0
- package/src/commands/publish/post-publish-phase.ts +43 -0
- package/src/commands/publish/storage-publisher.ts +208 -0
- package/src/commands/publish/version-upgrade.ts +132 -0
- package/src/commands/replace-deps.ts +1 -1
- package/src/commands/watch.ts +6 -7
- package/src/deps/replace-deps/collect-deps.ts +92 -0
- package/src/{utils/replace-deps.ts → deps/replace-deps/replace-deps-resolve.ts} +4 -188
- package/src/deps/replace-deps/replace-deps.ts +193 -0
- package/src/{utils → deps/server-externals}/server-production-files.ts +2 -2
- package/src/dev-server/dev-http-server.ts +149 -0
- package/src/dev-server/hmr-client-script.ts +74 -0
- package/src/dev-server/hmr-service.ts +178 -0
- package/src/electron/electron.ts +21 -28
- package/src/engines/BaseEngine.ts +64 -83
- package/src/engines/{ViteEngine.ts → EsbuildClientEngine.ts} +33 -72
- package/src/engines/NgtscEngine.ts +3 -11
- package/src/engines/ServerEsbuildEngine.ts +3 -11
- package/src/engines/TscEngine.ts +3 -11
- package/src/engines/index.ts +29 -9
- package/src/engines/types.ts +3 -3
- package/src/esbuild/esbuild-client-config.ts +230 -0
- package/src/{utils → esbuild}/esbuild-config.ts +1 -0
- package/src/esbuild/esbuild-index-html.ts +119 -0
- package/src/esbuild/esbuild-pwa.ts +139 -0
- package/src/esbuild/esbuild-scss-plugin.ts +48 -0
- package/src/orchestrators/BaseOrchestrator.ts +118 -0
- package/src/orchestrators/BuildOrchestrator.ts +234 -171
- package/src/orchestrators/DevOrchestrator.ts +315 -0
- package/src/orchestrators/ServerRuntimeManager.ts +85 -0
- package/src/orchestrators/TypecheckOrchestrator.ts +166 -117
- package/src/orchestrators/WatchOrchestrator.ts +203 -0
- package/src/orchestrators/types.ts +18 -0
- package/src/{utils → runtime}/engine-stop.ts +1 -1
- package/src/runtime/engine-watch-events.ts +121 -0
- package/src/{utils → runtime}/rebuild-manager.ts +8 -1
- package/src/runtime/worker-events.ts +25 -0
- package/src/sd-cli-entry.ts +69 -54
- package/src/sd-cli.ts +1 -1
- package/src/sd-config.types.ts +6 -16
- package/src/{utils → typecheck}/typecheck-non-package.ts +1 -1
- package/src/utils/diagnostic-utils.ts +15 -0
- package/src/utils/orchestrator-utils.ts +2 -6
- package/src/utils/output-utils.ts +1 -1
- package/src/utils/package-classify.ts +182 -0
- package/src/utils/package-utils.ts +0 -257
- package/src/utils/tsc-build.ts +1 -1
- package/src/workers/build-change-filter.ts +27 -0
- package/src/workers/build-watch-paths.ts +54 -0
- package/src/workers/client.worker.ts +258 -328
- package/src/workers/library-build.worker.ts +15 -34
- package/src/workers/lint.worker.ts +1 -1
- package/src/workers/ngtsc-build.worker.ts +19 -46
- package/src/workers/server-build.worker.ts +38 -168
- package/src/workers/server-esbuild-context.ts +122 -0
- package/src/workers/server-runtime.worker.ts +4 -1
- package/src/workers/server-watch-manager.ts +124 -0
- package/src/workers/shared-worker-lifecycle.ts +24 -0
- package/tests/angular/angular-build-pipeline.spec.ts +2 -2
- package/tests/angular/angular-compiler-aot.acc.spec.ts +68 -0
- package/tests/angular/angular-compiler-aot.spec.ts +80 -0
- package/tests/angular/angular-compiler-hmr-removal.verify.md +16 -0
- package/tests/angular/vite-angular-plugin-legacy-watch.spec.ts +0 -17
- package/tests/angular/vite-angular-plugin-vitest.spec.ts +1 -6
- package/tests/angular/vite-angular-plugin-vitest.verify.md +20 -0
- package/tests/angular/vite-angular-plugin.spec.ts +4 -178
- package/tests/capacitor/capacitor-android.spec.ts +1 -0
- package/tests/capacitor/capacitor-build.spec.ts +1 -0
- package/tests/capacitor/capacitor-config-writer.acc.spec.ts +108 -0
- package/tests/capacitor/capacitor-config-writer.spec.ts +95 -0
- package/tests/capacitor/capacitor-icon.spec.ts +1 -0
- package/tests/capacitor/capacitor-init.spec.ts +1 -0
- package/tests/capacitor/capacitor-npm-config.acc.spec.ts +236 -0
- package/tests/capacitor/capacitor-npm-config.spec.ts +132 -0
- package/tests/capacitor/capacitor-run.spec.ts +1 -0
- package/tests/capacitor/capacitor-workspace.spec.ts +1 -0
- package/tests/commands/check.spec.ts +2 -2
- package/tests/commands/deployment-phase.acc.spec.ts +142 -0
- package/tests/commands/git-phase.acc.spec.ts +158 -0
- package/tests/commands/lint.spec.ts +1 -1
- package/tests/commands/post-publish-phase.acc.spec.ts +82 -0
- package/tests/commands/publish-npm-local-split.verify.md +9 -0
- package/tests/commands/publish-responsibility-split.verify.md +13 -0
- package/tests/commands/publish-storage-split.verify.md +8 -0
- package/tests/commands/publish.spec.ts +1 -1
- package/tests/commands/typecheck.spec.ts +18 -18
- package/tests/deps/deps-directory-separation.verify.md +15 -0
- package/tests/engines/base-engine.spec.ts +65 -6
- package/tests/engines/engine-adapter-isolation.spec.ts +11 -18
- package/tests/engines/engine-selection.spec.ts +38 -5
- package/tests/engines/engine-typecheck-selection.acc.spec.ts +85 -0
- package/tests/engines/engine-typecheck-selection.verify.md +8 -0
- package/tests/engines/esbuild-client-engine.acc.spec.ts +161 -0
- package/tests/engines/esbuild-client-engine.spec.ts +320 -0
- package/tests/engines/esbuild-client-engine.verify.md +15 -0
- package/tests/engines/normalize-result.verify.md +9 -0
- package/tests/engines/vite-dependency-cleanup.verify.md +24 -0
- package/tests/orchestrators/build-orchestrator.spec.ts +3 -3
- package/tests/orchestrators/dev-orchestrator.spec.ts +799 -0
- package/tests/orchestrators/orchestrator-baseenv.verify.md +10 -0
- package/tests/orchestrators/orchestrator-diagnostic-formatting.verify.md +10 -0
- package/tests/orchestrators/orchestrator-initializemode-signature.verify.md +9 -0
- package/tests/orchestrators/typecheck-orchestrator.spec.ts +11 -11
- package/tests/orchestrators/watch-orchestrator.spec.ts +511 -0
- package/tests/{infra → runtime}/result-collector.spec.ts +1 -1
- package/tests/{infra → runtime}/signal-handler.spec.ts +1 -1
- package/tests/sd-cli-entry.spec.ts +9 -0
- package/tests/utils/angular-build.spec.ts +15 -20
- package/tests/utils/angular-compiler-emit.spec.ts +2 -2
- package/tests/utils/angular-compiler.spec.ts +2 -2
- package/tests/utils/angular-source-file-cache.spec.ts +2 -2
- package/tests/utils/concurrency.spec.ts +2 -10
- package/tests/utils/dev-http-server.acc.spec.ts +206 -0
- package/tests/utils/dev-http-server.spec.ts +181 -0
- package/tests/utils/dev-http-server.verify.md +8 -0
- package/tests/utils/diagnostic-utils.spec.ts +42 -1
- package/tests/utils/engine-stop.spec.ts +1 -1
- package/tests/utils/engine-watch-events.acc.spec.ts +217 -0
- package/tests/utils/engine-watch-events.spec.ts +141 -0
- package/tests/utils/engine-watch-events.verify.md +17 -0
- package/tests/utils/esbuild-client-config.acc.spec.ts +443 -0
- package/tests/utils/esbuild-client-config.spec.ts +590 -0
- package/tests/utils/esbuild-client-config.verify.md +26 -0
- package/tests/utils/esbuild-config.spec.ts +11 -1
- package/tests/utils/esbuild-index-html.acc.spec.ts +166 -0
- package/tests/utils/esbuild-index-html.spec.ts +194 -0
- package/tests/utils/esbuild-index-html.verify.md +10 -0
- package/tests/utils/esbuild-pwa.acc.spec.ts +203 -0
- package/tests/utils/esbuild-pwa.spec.ts +189 -0
- package/tests/utils/esbuild-pwa.verify.md +9 -0
- package/tests/utils/esbuild-scss-plugin.acc.spec.ts +111 -0
- package/tests/utils/esbuild-scss-plugin.spec.ts +150 -0
- package/tests/utils/esbuild-scss-plugin.verify.md +8 -0
- package/tests/utils/external-modules.spec.ts +1 -1
- package/tests/utils/hmr-client-script.acc.spec.ts +128 -0
- package/tests/utils/hmr-client-script.spec.ts +44 -0
- package/tests/utils/hmr-service-dispatcher.acc.spec.ts +217 -0
- package/tests/utils/hmr-service-dispatcher.spec.ts +143 -0
- package/tests/utils/hmr-service.acc.spec.ts +139 -0
- package/tests/utils/hmr-service.spec.ts +131 -0
- package/tests/utils/hmr-service.verify.md +17 -0
- package/tests/utils/lint-core.spec.ts +2 -1
- package/tests/utils/lint-utils.spec.ts +1 -1
- package/tests/utils/lint-with-program.spec.ts +1 -1
- package/tests/utils/ngtsc-build-core-write-emit.spec.ts +19 -19
- package/tests/utils/ngtsc-build-core.spec.ts +4 -4
- package/tests/utils/orchestrator-utils.spec.ts +2 -2
- package/tests/utils/output-utils.spec.ts +1 -1
- package/tests/utils/package-utils.spec.ts +1 -1
- package/tests/utils/rebuild-manager.spec.ts +20 -7
- package/tests/utils/replace-deps-split.verify.md +15 -0
- package/tests/utils/replace-deps-watch.acc.spec.ts +131 -0
- package/tests/utils/replace-deps-watch.spec.ts +91 -0
- package/tests/utils/replace-deps-watch.verify.md +9 -0
- package/tests/utils/replace-deps.spec.ts +1 -1
- package/tests/utils/scss-compiler.spec.ts +1 -1
- package/tests/utils/tsc-build.spec.ts +1 -1
- package/tests/utils/typecheck-non-package.spec.ts +2 -2
- package/tests/utils/worker-utils.spec.ts +2 -1
- package/tests/workers/build-change-filter.acc.spec.ts +78 -0
- package/tests/workers/build-change-filter.spec.ts +39 -0
- package/tests/workers/build-watch-paths-library.verify.md +10 -0
- package/tests/workers/build-watch-paths-ngtsc-server.verify.md +12 -0
- package/tests/workers/build-watch-paths.acc.spec.ts +101 -0
- package/tests/workers/build-watch-paths.spec.ts +121 -0
- package/tests/workers/client-worker-browser-support.verify.md +7 -0
- package/tests/workers/client-worker-onend-sync.verify.md +7 -0
- package/tests/workers/client-worker.acc.spec.ts +185 -0
- package/tests/workers/client-worker.spec.ts +91 -178
- package/tests/workers/library-build-lint.spec.ts +3 -3
- package/tests/workers/library-build-worker.spec.ts +10 -11
- package/tests/workers/ngtsc-build-lint.spec.ts +4 -4
- package/tests/workers/ngtsc-build-worker.spec.ts +2 -2
- package/tests/workers/server-build-lint.spec.ts +4 -4
- package/tests/workers/server-build-worker.spec.ts +14 -15
- package/tests/workers/server-esbuild-context-integration.verify.md +10 -0
- package/tests/workers/server-esbuild-context.acc.spec.ts +98 -0
- package/tests/workers/server-esbuild-context.spec.ts +198 -0
- package/tests/workers/server-runtime-worker.spec.ts +4 -3
- package/tests/workers/server-watch-manager.acc.spec.ts +162 -0
- package/tests/workers/server-watch-manager.spec.ts +199 -0
- package/tests/workers/shared-worker-lifecycle.acc.spec.ts +27 -0
- package/tests/workers/shared-worker-lifecycle.spec.ts +47 -0
- package/dist/angular/vite-postcss-inline-plugin.d.ts +0 -18
- package/dist/angular/vite-postcss-inline-plugin.d.ts.map +0 -1
- package/dist/angular/vite-postcss-inline-plugin.js +0 -108
- package/dist/angular/vite-postcss-inline-plugin.js.map +0 -1
- package/dist/commands/publish.d.ts.map +0 -1
- package/dist/commands/publish.js +0 -689
- package/dist/commands/publish.js.map +0 -1
- package/dist/engines/ViteEngine.d.ts.map +0 -1
- package/dist/engines/ViteEngine.js.map +0 -1
- package/dist/infra/ResultCollector.d.ts.map +0 -1
- package/dist/infra/ResultCollector.js.map +0 -1
- package/dist/infra/SignalHandler.d.ts.map +0 -1
- package/dist/infra/SignalHandler.js.map +0 -1
- package/dist/orchestrators/DevWatchOrchestrator.d.ts +0 -63
- package/dist/orchestrators/DevWatchOrchestrator.d.ts.map +0 -1
- package/dist/orchestrators/DevWatchOrchestrator.js +0 -478
- package/dist/orchestrators/DevWatchOrchestrator.js.map +0 -1
- package/dist/utils/angular-build-pipeline.d.ts.map +0 -1
- package/dist/utils/angular-build-pipeline.js.map +0 -1
- package/dist/utils/angular-build.d.ts.map +0 -1
- package/dist/utils/angular-build.js.map +0 -1
- package/dist/utils/angular-compiler.d.ts.map +0 -1
- package/dist/utils/angular-compiler.js.map +0 -1
- package/dist/utils/engine-stop.d.ts.map +0 -1
- package/dist/utils/engine-stop.js.map +0 -1
- package/dist/utils/esbuild-config.d.ts.map +0 -1
- package/dist/utils/esbuild-config.js.map +0 -1
- package/dist/utils/hmr-candidates.d.ts +0 -15
- package/dist/utils/hmr-candidates.d.ts.map +0 -1
- package/dist/utils/hmr-candidates.js +0 -234
- package/dist/utils/hmr-candidates.js.map +0 -1
- package/dist/utils/lint-core.d.ts.map +0 -1
- package/dist/utils/lint-core.js.map +0 -1
- package/dist/utils/lint-utils.d.ts.map +0 -1
- package/dist/utils/lint-utils.js.map +0 -1
- package/dist/utils/lint-with-program.d.ts.map +0 -1
- package/dist/utils/lint-with-program.js.map +0 -1
- package/dist/utils/ngtsc-build-core.d.ts.map +0 -1
- package/dist/utils/ngtsc-build-core.js.map +0 -1
- package/dist/utils/rebuild-manager.d.ts.map +0 -1
- package/dist/utils/rebuild-manager.js.map +0 -1
- package/dist/utils/replace-deps.d.ts.map +0 -1
- package/dist/utils/replace-deps.js.map +0 -1
- package/dist/utils/scss-compiler.d.ts.map +0 -1
- package/dist/utils/scss-compiler.js.map +0 -1
- package/dist/utils/server-production-files.d.ts.map +0 -1
- package/dist/utils/server-production-files.js.map +0 -1
- package/dist/utils/typecheck-non-package.d.ts.map +0 -1
- package/dist/utils/typecheck-non-package.js.map +0 -1
- package/dist/utils/typecheck-serialization.d.ts.map +0 -1
- package/dist/utils/typecheck-serialization.js.map +0 -1
- package/dist/utils/vite-config.d.ts +0 -50
- package/dist/utils/vite-config.d.ts.map +0 -1
- package/dist/utils/vite-config.js +0 -242
- package/dist/utils/vite-config.js.map +0 -1
- package/dist/utils/vite-pwa-plugin.d.ts +0 -9
- package/dist/utils/vite-pwa-plugin.d.ts.map +0 -1
- package/dist/utils/vite-pwa-plugin.js +0 -139
- package/dist/utils/vite-pwa-plugin.js.map +0 -1
- package/dist/utils/vite-scope-watch-plugin.d.ts +0 -24
- package/dist/utils/vite-scope-watch-plugin.d.ts.map +0 -1
- package/dist/utils/vite-scope-watch-plugin.js +0 -51
- package/dist/utils/vite-scope-watch-plugin.js.map +0 -1
- package/dist/utils/worker-events.d.ts +0 -66
- package/dist/utils/worker-events.d.ts.map +0 -1
- package/dist/utils/worker-events.js +0 -55
- package/dist/utils/worker-events.js.map +0 -1
- package/dist/utils/worker-utils.d.ts.map +0 -1
- package/dist/utils/worker-utils.js.map +0 -1
- package/src/angular/vite-postcss-inline-plugin.ts +0 -139
- package/src/commands/publish.ts +0 -850
- package/src/orchestrators/DevWatchOrchestrator.ts +0 -594
- package/src/utils/hmr-candidates.ts +0 -327
- package/src/utils/vite-config.ts +0 -318
- package/src/utils/vite-pwa-plugin.ts +0 -168
- package/src/utils/vite-scope-watch-plugin.ts +0 -77
- package/src/utils/worker-events.ts +0 -128
- package/tests/angular/angular-compiler-hmr.spec.ts +0 -152
- package/tests/angular/hmr-candidates.spec.ts +0 -158
- package/tests/angular/linker-disk-cache.spec.ts +0 -171
- package/tests/angular/vite-angular-plugin-hmr-fallback.spec.ts +0 -333
- package/tests/angular/vite-angular-plugin-hmr.spec.ts +0 -320
- package/tests/angular/vite-angular-plugin-scss-hmr.spec.ts +0 -95
- package/tests/angular/vite-postcss-inline-plugin.spec.ts +0 -60
- package/tests/engines/vite-engine.spec.ts +0 -409
- package/tests/orchestrators/dev-watch-orchestrator.spec.ts +0 -1542
- package/tests/utils/vite-config.spec.ts +0 -780
- package/tests/utils/vite-pwa-plugin.spec.ts +0 -401
- package/tests/utils/vite-scope-watch-plugin.spec.ts +0 -218
- package/tests/utils/worker-events.spec.ts +0 -147
- package/tests/workers/client-worker-legacy.spec.ts +0 -659
- /package/dist/{utils → angular}/ngtsc-build-core.js +0 -0
- /package/dist/{utils → angular}/scss-compiler.d.ts +0 -0
- /package/dist/{utils → angular}/scss-compiler.js +0 -0
- /package/dist/{utils → esbuild}/esbuild-config.d.ts +0 -0
- /package/dist/{utils → lint}/lint-core.d.ts +0 -0
- /package/dist/{utils → lint}/lint-core.js +0 -0
- /package/dist/{utils → lint}/lint-utils.d.ts +0 -0
- /package/dist/{utils → lint}/lint-utils.js +0 -0
- /package/dist/{utils → lint}/lint-with-program.d.ts +0 -0
- /package/dist/{utils → lint}/lint-with-program.js +0 -0
- /package/dist/{infra → runtime}/ResultCollector.d.ts +0 -0
- /package/dist/{infra → runtime}/ResultCollector.js +0 -0
- /package/dist/{infra → runtime}/SignalHandler.d.ts +0 -0
- /package/dist/{infra → runtime}/SignalHandler.js +0 -0
- /package/dist/{utils → runtime}/worker-utils.d.ts +0 -0
- /package/dist/{utils → runtime}/worker-utils.js +0 -0
- /package/dist/{utils → typecheck}/typecheck-non-package.d.ts +0 -0
- /package/dist/{utils → typecheck}/typecheck-serialization.d.ts +0 -0
- /package/dist/{utils → typecheck}/typecheck-serialization.js +0 -0
- /package/src/{utils → angular}/scss-compiler.ts +0 -0
- /package/src/{utils → lint}/lint-core.ts +0 -0
- /package/src/{utils → lint}/lint-utils.ts +0 -0
- /package/src/{utils → lint}/lint-with-program.ts +0 -0
- /package/src/{infra → runtime}/ResultCollector.ts +0 -0
- /package/src/{infra → runtime}/SignalHandler.ts +0 -0
- /package/src/{utils → runtime}/worker-utils.ts +0 -0
- /package/src/{utils → typecheck}/typecheck-serialization.ts +0 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import type { ConsolaInstance } from "consola";
|
|
3
|
+
import { FsWatcher, pathx } from "@simplysm/core-node";
|
|
4
|
+
import { err as errNs } from "@simplysm/core-common";
|
|
5
|
+
import type { ServerWatchInfo } from "./server-build.worker";
|
|
6
|
+
import {
|
|
7
|
+
parseTsconfig,
|
|
8
|
+
getPackageSourceFiles,
|
|
9
|
+
} from "../utils/tsconfig";
|
|
10
|
+
import { collectAllExternals } from "../deps/server-externals/server-production-files";
|
|
11
|
+
import { hasFileAddOrRemove } from "./build-change-filter";
|
|
12
|
+
import * as esbuildCtx from "./server-esbuild-context";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* server-build watch 루프 설정
|
|
16
|
+
*/
|
|
17
|
+
export interface ServerWatchLoopConfig {
|
|
18
|
+
info: ServerWatchInfo;
|
|
19
|
+
watchPaths: string[];
|
|
20
|
+
logger: ConsolaInstance;
|
|
21
|
+
/** watch 시작 시 수집된 초기 외부 모듈 */
|
|
22
|
+
initialExternals: string[];
|
|
23
|
+
/** 빌드 시작 이벤트 콜백 */
|
|
24
|
+
onBuildStart: () => void;
|
|
25
|
+
/** 빌드 완료 이벤트 콜백 */
|
|
26
|
+
onBuild: (result: { build: { success: boolean; errors?: string[]; warnings?: string[] }; mainJsPath: string }) => void;
|
|
27
|
+
/** 에러 이벤트 콜백 */
|
|
28
|
+
onError: (message: string) => void;
|
|
29
|
+
/** 리빌드 실행 콜백 */
|
|
30
|
+
rebuild: () => Promise<{ build: { success: boolean; errors?: string[]; warnings?: string[] }; mainJsPath: string }>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* server-build 전용 FsWatcher 감시 루프를 시작한다.
|
|
35
|
+
*
|
|
36
|
+
* onChange 핸들러:
|
|
37
|
+
* - 파일 추가/삭제: tsconfig 재파싱, esbuild context 재생성, 리빌드
|
|
38
|
+
* - 파일 변경: metafile 기반 필터링 → 관련 파일이면 리빌드, 아니면 건너뜀
|
|
39
|
+
*/
|
|
40
|
+
export async function startServerWatchLoop(config: ServerWatchLoopConfig): Promise<FsWatcher> {
|
|
41
|
+
const { info, watchPaths, logger } = config;
|
|
42
|
+
let cachedExternal = [...config.initialExternals];
|
|
43
|
+
|
|
44
|
+
const watcher = await FsWatcher.watch(watchPaths);
|
|
45
|
+
|
|
46
|
+
watcher.onChange({ delay: 300 }, async (changes) => {
|
|
47
|
+
try {
|
|
48
|
+
const addOrRemove = hasFileAddOrRemove(changes);
|
|
49
|
+
|
|
50
|
+
if (addOrRemove) {
|
|
51
|
+
config.onBuildStart();
|
|
52
|
+
|
|
53
|
+
// 파일 추가/삭제 시 컨텍스트 재생성
|
|
54
|
+
const newParsedConfig = parseTsconfig(info.pkgDir);
|
|
55
|
+
const newEntryPoints = getPackageSourceFiles(info.pkgDir, newParsedConfig);
|
|
56
|
+
|
|
57
|
+
// package.json이 변경된 경우에만 외부 모듈 재수집
|
|
58
|
+
const hasPackageJsonChange = changes.some((c) =>
|
|
59
|
+
c.path.endsWith("package.json"),
|
|
60
|
+
);
|
|
61
|
+
if (hasPackageJsonChange) {
|
|
62
|
+
cachedExternal = collectAllExternals(info.pkgDir, info.externals);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (info.output.js) {
|
|
66
|
+
await esbuildCtx.recreateContext({
|
|
67
|
+
pkgDir: info.pkgDir,
|
|
68
|
+
entryPoints: newEntryPoints,
|
|
69
|
+
env: info.env,
|
|
70
|
+
external: cachedExternal,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const result = await config.rebuild();
|
|
75
|
+
config.onBuild(result);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// 파일 변경만 있는 경우: metafile로 필터링
|
|
80
|
+
if (!esbuildCtx.hasContext()) {
|
|
81
|
+
config.onBuildStart();
|
|
82
|
+
const result = await config.rebuild();
|
|
83
|
+
config.onBuild(result);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const currentMetafile = esbuildCtx.getMetafile();
|
|
88
|
+
if (currentMetafile == null) {
|
|
89
|
+
config.onBuildStart();
|
|
90
|
+
const result = await config.rebuild();
|
|
91
|
+
config.onBuild(result);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// metafile 입력 기반 필터링
|
|
96
|
+
const metafileAbsPaths = new Set(
|
|
97
|
+
Object.keys(currentMetafile.inputs).map((key) => pathx.posixResolve(info.cwd, key)),
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
const hasRelevantChange = changes.some((c) => {
|
|
101
|
+
if (metafileAbsPaths.has(c.path)) return true;
|
|
102
|
+
// pnpm symlink 경로와 esbuild resolved 경로 불일치 대응
|
|
103
|
+
try {
|
|
104
|
+
const realPath = pathx.posix(fs.realpathSync(c.path));
|
|
105
|
+
return metafileAbsPaths.has(realPath);
|
|
106
|
+
} catch {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
if (hasRelevantChange) {
|
|
112
|
+
config.onBuildStart();
|
|
113
|
+
const result = await config.rebuild();
|
|
114
|
+
config.onBuild(result);
|
|
115
|
+
} else {
|
|
116
|
+
logger.debug("변경된 파일이 빌드에 포함되지 않아 리빌드 건너뜀");
|
|
117
|
+
}
|
|
118
|
+
} catch (err) {
|
|
119
|
+
config.onError(errNs.message(err));
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
return watcher;
|
|
124
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type ConsolaInstance, consola } from "consola";
|
|
2
|
+
import {
|
|
3
|
+
setupWorkerConsola,
|
|
4
|
+
registerCleanupHandlers,
|
|
5
|
+
createOnceGuard,
|
|
6
|
+
} from "../runtime/worker-utils";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Worker Thread의 공통 초기화를 단일 호출로 수행한다.
|
|
10
|
+
*
|
|
11
|
+
* 1. setupWorkerConsola() — consola CLI 모드 설정
|
|
12
|
+
* 2. consola.withTag() — 워커별 태그 로거 생성
|
|
13
|
+
* 3. registerCleanupHandlers() — SIGTERM/SIGINT 정리 핸들러 등록
|
|
14
|
+
* 4. createOnceGuard("startWatch") — startWatch 중복 호출 방지 가드 생성
|
|
15
|
+
*/
|
|
16
|
+
export function setupWorkerLifecycle(
|
|
17
|
+
workerName: string,
|
|
18
|
+
cleanupFn: () => void | Promise<void>,
|
|
19
|
+
): { logger: ConsolaInstance; guardStartWatch: () => void } {
|
|
20
|
+
setupWorkerConsola();
|
|
21
|
+
const logger = consola.withTag(`sd:cli:${workerName}:worker`);
|
|
22
|
+
registerCleanupHandlers(cleanupFn, logger);
|
|
23
|
+
return { logger, guardStartWatch: createOnceGuard("startWatch") };
|
|
24
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
2
|
import path from "path";
|
|
3
3
|
import ts from "typescript";
|
|
4
|
-
import { AngularBuildPipeline } from "../../src/
|
|
5
|
-
import { AngularSourceFileCache } from "../../src/
|
|
4
|
+
import { AngularBuildPipeline } from "../../src/angular/angular-build-pipeline.js";
|
|
5
|
+
import { AngularSourceFileCache } from "../../src/angular/angular-compiler.js";
|
|
6
6
|
import { getPackageSourceFiles } from "../../src/utils/tsconfig.js";
|
|
7
7
|
|
|
8
8
|
const FIXTURE_DIR = path.resolve(import.meta.dirname, "fixtures/packages/basic-app");
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { describe, it, expect, afterEach } from "vitest";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import ts from "typescript";
|
|
4
|
+
import { AngularCompiler, AngularSourceFileCache } from "../../src/angular/angular-compiler.js";
|
|
5
|
+
|
|
6
|
+
const FIXTURE_DIR = path.resolve(import.meta.dirname, "fixtures/packages/basic-app");
|
|
7
|
+
const TSCONFIG_PATH = path.join(FIXTURE_DIR, "tsconfig.json");
|
|
8
|
+
const APP_COMPONENT_PATH = path.join(FIXTURE_DIR, "src/app.component.ts").replace(/\\/g, "/");
|
|
9
|
+
|
|
10
|
+
function loadTsConfig(): { rootNames: string[]; compilerOptions: ts.CompilerOptions } {
|
|
11
|
+
const configFile = ts.readConfigFile(TSCONFIG_PATH, ts.sys.readFile);
|
|
12
|
+
const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, FIXTURE_DIR);
|
|
13
|
+
return { rootNames: parsed.fileNames, compilerOptions: parsed.options };
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
describe("AngularCompiler AOT (HMR dead code 제거 후)", () => {
|
|
17
|
+
let compiler: AngularCompiler | undefined;
|
|
18
|
+
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
compiler = undefined;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// Scenario: initialize() 반환에 templateUpdates가 없음
|
|
24
|
+
// Scenario: enableHmr 없이 pipeline.initialize()를 호출하면 AOT 컴파일이 정상 완료된다
|
|
25
|
+
it("initialize returns affectedFiles without templateUpdates", async () => {
|
|
26
|
+
const { rootNames, compilerOptions } = loadTsConfig();
|
|
27
|
+
|
|
28
|
+
compiler = new AngularCompiler({
|
|
29
|
+
rootNames,
|
|
30
|
+
compilerOptions,
|
|
31
|
+
compilerOptionsTransformer: (opts) => ({ ...opts, noEmit: false, declaration: false }),
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const result = await compiler.initialize();
|
|
35
|
+
|
|
36
|
+
// affectedFiles가 반환된다
|
|
37
|
+
expect(result.affectedFiles).toBeDefined();
|
|
38
|
+
expect(result.affectedFiles.size).toBeGreaterThan(0);
|
|
39
|
+
|
|
40
|
+
// templateUpdates가 반환 객체에 존재하지 않는다
|
|
41
|
+
expect("templateUpdates" in result).toBe(false);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Scenario: update() 반환에 templateUpdates가 없음
|
|
45
|
+
// Scenario: 증분 재컴파일 정상 동작
|
|
46
|
+
it("update returns affectedFiles without templateUpdates", async () => {
|
|
47
|
+
const { rootNames, compilerOptions } = loadTsConfig();
|
|
48
|
+
const sourceFileCache = new AngularSourceFileCache();
|
|
49
|
+
|
|
50
|
+
compiler = new AngularCompiler({
|
|
51
|
+
rootNames,
|
|
52
|
+
compilerOptions,
|
|
53
|
+
sourceFileCache,
|
|
54
|
+
compilerOptionsTransformer: (opts) => ({ ...opts, noEmit: false, declaration: false }),
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
await compiler.initialize();
|
|
58
|
+
|
|
59
|
+
// 파일 변경 후 update() 호출
|
|
60
|
+
const updateResult = await compiler.update([APP_COMPONENT_PATH]);
|
|
61
|
+
|
|
62
|
+
// affectedFiles가 반환된다
|
|
63
|
+
expect(updateResult.affectedFiles).toBeDefined();
|
|
64
|
+
|
|
65
|
+
// templateUpdates가 반환 객체에 존재하지 않는다
|
|
66
|
+
expect("templateUpdates" in updateResult).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import ts from "typescript";
|
|
4
|
+
import { AngularCompiler, AngularSourceFileCache } from "../../src/angular/angular-compiler.js";
|
|
5
|
+
import { AngularBuildPipeline } from "../../src/angular/angular-build-pipeline.js";
|
|
6
|
+
import { getPackageSourceFiles } from "../../src/utils/tsconfig.js";
|
|
7
|
+
|
|
8
|
+
const FIXTURE_DIR = path.resolve(import.meta.dirname, "fixtures/packages/basic-app");
|
|
9
|
+
const TSCONFIG_PATH = path.join(FIXTURE_DIR, "tsconfig.json");
|
|
10
|
+
|
|
11
|
+
function loadTsConfig(): { rootNames: string[]; compilerOptions: ts.CompilerOptions } {
|
|
12
|
+
const configFile = ts.readConfigFile(TSCONFIG_PATH, ts.sys.readFile);
|
|
13
|
+
const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, FIXTURE_DIR);
|
|
14
|
+
return { rootNames: parsed.fileNames, compilerOptions: parsed.options };
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
describe("AngularCompiler — HMR 코드 제거", () => {
|
|
18
|
+
// initialize() 반환 객체에 templateUpdates 키가 없다
|
|
19
|
+
it("initialize result has no templateUpdates property", async () => {
|
|
20
|
+
const { rootNames, compilerOptions } = loadTsConfig();
|
|
21
|
+
const compiler = new AngularCompiler({
|
|
22
|
+
rootNames,
|
|
23
|
+
compilerOptions,
|
|
24
|
+
compilerOptionsTransformer: (opts) => ({ ...opts, noEmit: false, declaration: false }),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const result = await compiler.initialize();
|
|
28
|
+
expect(Object.keys(result)).toEqual(["affectedFiles"]);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
describe("AngularBuildPipeline — HMR 전파 제거", () => {
|
|
34
|
+
function createPipelineOptions() {
|
|
35
|
+
const configFile = ts.readConfigFile(TSCONFIG_PATH, ts.sys.readFile);
|
|
36
|
+
const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, FIXTURE_DIR);
|
|
37
|
+
const rootNames = getPackageSourceFiles(FIXTURE_DIR, parsed);
|
|
38
|
+
return {
|
|
39
|
+
mode: "library" as const,
|
|
40
|
+
pkgDir: FIXTURE_DIR,
|
|
41
|
+
cwd: FIXTURE_DIR,
|
|
42
|
+
rootNames,
|
|
43
|
+
compilerOptions: {
|
|
44
|
+
...parsed.options,
|
|
45
|
+
noEmit: false,
|
|
46
|
+
declaration: false,
|
|
47
|
+
declarationMap: false,
|
|
48
|
+
},
|
|
49
|
+
angularCompilerOptions: parsed.raw?.angularCompilerOptions as
|
|
50
|
+
| Record<string, unknown>
|
|
51
|
+
| undefined,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// PipelineResult에 templateUpdates가 없다
|
|
56
|
+
it("pipeline result has no templateUpdates property", async () => {
|
|
57
|
+
const pipeline = new AngularBuildPipeline(createPipelineOptions());
|
|
58
|
+
const result = await pipeline.initialize();
|
|
59
|
+
|
|
60
|
+
expect("templateUpdates" in result).toBe(false);
|
|
61
|
+
expect(result.affectedFiles).toBeDefined();
|
|
62
|
+
expect(result.diagnostics).toBeDefined();
|
|
63
|
+
expect(result.scssErrors).toBeDefined();
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// pipeline update 결과에도 templateUpdates가 없다
|
|
67
|
+
it("pipeline update result has no templateUpdates property", async () => {
|
|
68
|
+
const pipeline = new AngularBuildPipeline({
|
|
69
|
+
...createPipelineOptions(),
|
|
70
|
+
sourceFileCache: new AngularSourceFileCache(),
|
|
71
|
+
});
|
|
72
|
+
await pipeline.initialize();
|
|
73
|
+
|
|
74
|
+
const appPath = path.join(FIXTURE_DIR, "src/app.component.ts").replace(/\\/g, "/");
|
|
75
|
+
const updateResult = await pipeline.update([appPath]);
|
|
76
|
+
|
|
77
|
+
expect("templateUpdates" in updateResult).toBe(false);
|
|
78
|
+
expect(updateResult.affectedFiles).toBeDefined();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# AngularCompiler HMR dead code 제거 — LLM 검증
|
|
2
|
+
|
|
3
|
+
## 검증 항목
|
|
4
|
+
|
|
5
|
+
- [x] enableHmr 프로퍼티가 AngularCompilerOptions에서 제거됨: `angular-compiler.ts` 인터페이스에 `enableHmr` 없음 확인
|
|
6
|
+
- [x] HMR_MODIFIED_FILE_LIMIT 상수가 제거됨: `angular-compiler.ts`에서 해당 상수 없음 확인
|
|
7
|
+
- [x] collectHmrCandidates import가 제거됨: `angular-compiler.ts`에서 `hmr-candidates` import 없음 확인
|
|
8
|
+
- [x] stale source file 수집 로직이 제거됨: `angular-compiler.ts`에서 `staleSourceFiles`, `useHmr` 변수 없음 확인
|
|
9
|
+
- [x] enableHmr 프로퍼티가 AngularBuildPipelineOptions에서 제거됨: `angular-build-pipeline.ts` 인터페이스에 `enableHmr` 없음 확인
|
|
10
|
+
- [x] templateUpdates 프로퍼티가 PipelineResult에서 제거됨: `angular-build-pipeline.ts` 인터페이스에 `templateUpdates` 없음 확인
|
|
11
|
+
- [x] vite-angular-plugin.ts의 `enableHmr: false` 제거됨: Pipeline 생성 시 `enableHmr` 옵션 없음 확인
|
|
12
|
+
- [x] hmr-candidates.ts 파일 삭제됨: `src/utils/hmr-candidates.ts` 파일 존재하지 않음
|
|
13
|
+
- [x] angular-compiler-hmr.spec.ts 삭제됨: `tests/angular/angular-compiler-hmr.spec.ts` 파일 존재하지 않음
|
|
14
|
+
- [x] hmr-candidates.spec.ts 삭제됨: `tests/angular/hmr-candidates.spec.ts` 파일 존재하지 않음
|
|
15
|
+
- [x] client.worker.ts 변경 없음: `client.worker.ts`는 `createCompilerPlugin` 경로를 사용하며 AngularCompiler를 직접 참조하지 않음
|
|
16
|
+
- [x] hmr-service.ts, hmr-client-script.ts, esbuild-client-config.ts 변경 없음: client.worker.ts 경로의 HMR 인프라는 그대로 유지됨
|
|
@@ -27,10 +27,8 @@ describe("sdAngularPlugin legacy watch rebuild", () => {
|
|
|
27
27
|
|
|
28
28
|
// Acceptance: 재빌드 시 변경 파일의 캐시가 무효화되고 증분 컴파일된다
|
|
29
29
|
it("invalidates cache and produces updated output on watch rebuild", async () => {
|
|
30
|
-
const onBuild = vi.fn();
|
|
31
30
|
const plugin = sdAngularPlugin({
|
|
32
31
|
pkg: "basic-app",
|
|
33
|
-
onBuild,
|
|
34
32
|
});
|
|
35
33
|
|
|
36
34
|
// 초기 빌드
|
|
@@ -58,21 +56,13 @@ describe("sdAngularPlugin legacy watch rebuild", () => {
|
|
|
58
56
|
expect(rebuiltResult.code).toBeDefined();
|
|
59
57
|
expect(rebuiltResult.code.length).toBeGreaterThan(0);
|
|
60
58
|
|
|
61
|
-
// onBuild이 초기 빌드와 재빌드 모두에서 호출되어야 한다
|
|
62
|
-
expect(onBuild).toHaveBeenCalledTimes(2);
|
|
63
|
-
expect(onBuild).toHaveBeenCalledWith(
|
|
64
|
-
expect.objectContaining({ success: true }),
|
|
65
|
-
);
|
|
66
|
-
|
|
67
59
|
await (plugin as any).buildEnd?.call({});
|
|
68
60
|
});
|
|
69
61
|
|
|
70
62
|
// Acceptance: 첫 buildStart는 기존 로직으로 전체 컴파일한다
|
|
71
63
|
it("performs full compilation on first buildStart", async () => {
|
|
72
|
-
const onBuild = vi.fn();
|
|
73
64
|
const plugin = sdAngularPlugin({
|
|
74
65
|
pkg: "basic-app",
|
|
75
|
-
onBuild,
|
|
76
66
|
});
|
|
77
67
|
|
|
78
68
|
// watchChange 없이 첫 buildStart
|
|
@@ -86,20 +76,13 @@ describe("sdAngularPlugin legacy watch rebuild", () => {
|
|
|
86
76
|
expect(result).toBeDefined();
|
|
87
77
|
expect(result.code.length).toBeGreaterThan(0);
|
|
88
78
|
|
|
89
|
-
// onBuild 정상 호출
|
|
90
|
-
expect(onBuild).toHaveBeenCalledWith(
|
|
91
|
-
expect.objectContaining({ success: true }),
|
|
92
|
-
);
|
|
93
|
-
|
|
94
79
|
await (plugin as any).buildEnd?.call({});
|
|
95
80
|
});
|
|
96
81
|
|
|
97
82
|
// Acceptance: watchChange 없이 buildStart 재호출 시에도 정상 동작
|
|
98
83
|
it("handles buildStart re-invocation without watchChange gracefully", async () => {
|
|
99
|
-
const onBuild = vi.fn();
|
|
100
84
|
const plugin = sdAngularPlugin({
|
|
101
85
|
pkg: "basic-app",
|
|
102
|
-
onBuild,
|
|
103
86
|
});
|
|
104
87
|
|
|
105
88
|
// 초기 빌드
|
|
@@ -55,17 +55,12 @@ describe("sdAngularPlugin Vitest 지원", () => {
|
|
|
55
55
|
createTestSdConfig({ target: "browser" } as any),
|
|
56
56
|
);
|
|
57
57
|
|
|
58
|
-
const
|
|
59
|
-
const browserPlugin = sdAngularPlugin({ pkg: "basic-app", onBuild });
|
|
58
|
+
const browserPlugin = sdAngularPlugin({ pkg: "basic-app" });
|
|
60
59
|
|
|
61
60
|
await (browserPlugin as any).config?.({}, { mode: "development", command: "serve" });
|
|
62
61
|
(browserPlugin as any).configResolved?.({ build: { sourcemap: false } });
|
|
63
62
|
await (browserPlugin as any).buildStart?.call({});
|
|
64
63
|
|
|
65
|
-
expect(onBuild).toHaveBeenCalledWith(
|
|
66
|
-
expect.objectContaining({ success: expect.any(Boolean) }),
|
|
67
|
-
);
|
|
68
|
-
|
|
69
64
|
const appComponentPath = resolve(PKG_DIR, "src/app.component.ts");
|
|
70
65
|
const result = await (browserPlugin as any).transform?.call({}, "", appComponentPath);
|
|
71
66
|
expect(result).toBeDefined();
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Slice 2: Vite 제거 + vite-angular-plugin 축소 — LLM 검증
|
|
2
|
+
|
|
3
|
+
## 검증 항목
|
|
4
|
+
|
|
5
|
+
- [x] vite-config.ts 삭제됨: `ls packages/sd-cli/src/utils/vite-config.ts` → 파일 없음 확인
|
|
6
|
+
- [x] vite-scope-watch-plugin.ts 삭제됨: `ls packages/sd-cli/src/utils/vite-scope-watch-plugin.ts` → 파일 없음 확인
|
|
7
|
+
- [x] vite-postcss-inline-plugin.ts 삭제됨: `ls packages/sd-cli/src/angular/vite-postcss-inline-plugin.ts` → 파일 없음 확인
|
|
8
|
+
- [x] vite-pwa-plugin.ts 삭제됨: `ls packages/sd-cli/src/utils/vite-pwa-plugin.ts` → 파일 없음 확인
|
|
9
|
+
- [x] vite-angular-plugin.ts에서 config() 훅 유지: config()는 isDev, pkgConfig, resolvedPkgDir 초기화에 필수. Vitest가 Vite plugin lifecycle을 호출하므로 유지. 단, optimizeDeps/define 반환값 제거됨
|
|
10
|
+
- [x] vite-angular-plugin.ts에서 configResolved() 훅 유지: enableSourcemap 설정에 필요. 단, prebundleTransformer 생성 제거됨
|
|
11
|
+
- [x] handleHotUpdate() 제거됨: HMR 배칭(pendingHmrFiles, hmrBatchTimer, processHmrBatch) 모두 제거됨
|
|
12
|
+
- [x] configureServer() 제거됨: devServer, isDevServer, angularComponentMiddleware 모두 제거됨
|
|
13
|
+
- [x] onBuildStart/onBuild 콜백 제거됨: SdAngularPluginOptions에서 onBuildStart, onBuild 필드 삭제됨. buildStart()에서 options.onBuild 호출 제거됨
|
|
14
|
+
- [x] resolveReplaceDeps() 제거됨: scope watch 관련 replaceDepDistPaths, resolveReplaceDepEntries import 모두 제거됨
|
|
15
|
+
- [x] watchChange(id) 유지됨: pendingWatchChanges에 파일 경로 수집. Vitest watch 모드에서 캐시 무효화에 사용
|
|
16
|
+
- [x] buildStart() 유지됨: tsconfig 파싱, AngularSourceFileCache 생성/재사용, AngularBuildPipeline 초기화, 전체/증분 컴파일 수행. enableHmr: false로 고정 (Vitest에서 HMR 불필요)
|
|
17
|
+
- [x] transform() 유지됨: .ts 파일에 대해 Pipeline emit JS 반환 + JavaScriptTransformer 적용. query param 제거 및 인라인 소스맵 분리 로직 유지
|
|
18
|
+
- [x] buildEnd() 간소화됨: isDev 분기 제거. 항상 jsTransformer.close() + pipeline 해제. prebundleTransformer 제거
|
|
19
|
+
- [x] Vite 타입 import 축소: `ModuleNode`, `ViteDevServer` import 제거됨. `Plugin` 타입만 유지
|
|
20
|
+
- [x] 미사용 import 제거: `createHash`, `fsp`, `fs`, `IncomingMessage`, `ServerResponse`, `SdConfig`, `resolveReplaceDepEntries` 제거됨
|
|
@@ -23,20 +23,7 @@ beforeEach(() => {
|
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
describe("sdAngularPlugin", () => {
|
|
26
|
-
//
|
|
27
|
-
it("sets ngDevMode and ngJitMode defines", async () => {
|
|
28
|
-
const devPlugin = sdAngularPlugin({ pkg: "basic-app"});
|
|
29
|
-
const prodPlugin = sdAngularPlugin({ pkg: "basic-app"});
|
|
30
|
-
|
|
31
|
-
const devConfig = await (devPlugin as any).config?.({}, { mode: "development", command: "serve" });
|
|
32
|
-
const prodConfig = await (prodPlugin as any).config?.({}, { mode: "production", command: "build" });
|
|
33
|
-
|
|
34
|
-
expect(devConfig?.define?.ngJitMode).toBe("false");
|
|
35
|
-
expect(devConfig?.define?.ngDevMode).toBeUndefined();
|
|
36
|
-
|
|
37
|
-
expect(prodConfig?.define?.ngJitMode).toBe("false");
|
|
38
|
-
expect(prodConfig?.define?.ngDevMode).toBe("false");
|
|
39
|
-
});
|
|
26
|
+
// config() define 반환은 Vitest 축소로 제거됨 (esbuild-client-config에서 처리)
|
|
40
27
|
|
|
41
28
|
// Scenario: non-Angular .ts 파일은 기본 처리
|
|
42
29
|
it("returns undefined for non-emitted .ts files", async () => {
|
|
@@ -60,159 +47,8 @@ describe("sdAngularPlugin", () => {
|
|
|
60
47
|
await (plugin as any).buildEnd?.call({});
|
|
61
48
|
});
|
|
62
49
|
|
|
63
|
-
//
|
|
64
|
-
|
|
65
|
-
const onBuildStart = vi.fn();
|
|
66
|
-
const onBuild = vi.fn();
|
|
67
|
-
|
|
68
|
-
const plugin = sdAngularPlugin({
|
|
69
|
-
pkg: "basic-app",
|
|
70
|
-
|
|
71
|
-
onBuildStart,
|
|
72
|
-
onBuild,
|
|
73
|
-
});
|
|
74
|
-
await initPlugin(plugin);
|
|
75
|
-
|
|
76
|
-
const appComponentPath = path
|
|
77
|
-
.join(PKG_DIR, "src/app.component.ts")
|
|
78
|
-
.replace(/\\/g, "/");
|
|
79
|
-
|
|
80
|
-
const initialResult = await (plugin as any).transform?.call({}, "", appComponentPath);
|
|
81
|
-
expect(initialResult).toBeDefined();
|
|
82
|
-
expect(initialResult.code.length).toBeGreaterThan(0);
|
|
83
|
-
|
|
84
|
-
expect((plugin as any).handleHotUpdate).toBeDefined();
|
|
85
|
-
|
|
86
|
-
const mockModule = { file: appComponentPath, id: appComponentPath };
|
|
87
|
-
const hmrResult = await (plugin as any).handleHotUpdate?.({
|
|
88
|
-
file: appComponentPath,
|
|
89
|
-
modules: [mockModule],
|
|
90
|
-
server: { watcher: { emit: vi.fn() } },
|
|
91
|
-
timestamp: Date.now(),
|
|
92
|
-
read: () => Promise.resolve(""),
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
expect(onBuildStart).toHaveBeenCalled();
|
|
96
|
-
expect(onBuild).toHaveBeenCalledWith(
|
|
97
|
-
expect.objectContaining({ success: expect.any(Boolean) }),
|
|
98
|
-
);
|
|
99
|
-
expect(Array.isArray(hmrResult)).toBe(true);
|
|
100
|
-
|
|
101
|
-
const afterResult = await (plugin as any).transform?.call({}, "", appComponentPath);
|
|
102
|
-
expect(afterResult).toBeDefined();
|
|
103
|
-
expect(afterResult.code.length).toBeGreaterThan(0);
|
|
104
|
-
|
|
105
|
-
await (plugin as any).buildEnd?.call({});
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
// Scenario: ngHmrMode define 설정
|
|
109
|
-
it("sets ngHmrMode in dev mode and disables in prod mode", async () => {
|
|
110
|
-
const devPlugin = sdAngularPlugin({ pkg: "basic-app"});
|
|
111
|
-
const prodPlugin = sdAngularPlugin({ pkg: "basic-app"});
|
|
112
|
-
|
|
113
|
-
const devConfig = await (devPlugin as any).config?.({}, { mode: "development", command: "serve" });
|
|
114
|
-
const prodConfig = await (prodPlugin as any).config?.({}, { mode: "production", command: "build" });
|
|
115
|
-
|
|
116
|
-
expect(devConfig?.define?.ngHmrMode).toBeUndefined();
|
|
117
|
-
expect(prodConfig?.define?.ngHmrMode).toBe("false");
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
// Scenario: 컴파일 에러 발생 및 복구
|
|
121
|
-
it("calls onBuild with success=false when handleHotUpdate encounters compile error", async () => {
|
|
122
|
-
const onBuild = vi.fn();
|
|
123
|
-
const plugin = sdAngularPlugin({
|
|
124
|
-
pkg: "basic-app",
|
|
125
|
-
|
|
126
|
-
onBuild,
|
|
127
|
-
});
|
|
128
|
-
await initPlugin(plugin);
|
|
129
|
-
|
|
130
|
-
const _hmrResult = await (plugin as any).handleHotUpdate?.({
|
|
131
|
-
file: path.join(PKG_DIR, "src/nonexistent-file.ts").replace(/\\/g, "/"),
|
|
132
|
-
modules: [],
|
|
133
|
-
server: { watcher: { emit: vi.fn() } },
|
|
134
|
-
timestamp: Date.now(),
|
|
135
|
-
read: () => Promise.resolve(""),
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
expect(onBuild).toHaveBeenCalled();
|
|
139
|
-
await (plugin as any).buildEnd?.call({});
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
// Scenario: non-Angular .ts 파일 수정 — handleHotUpdate passes through
|
|
143
|
-
it("handleHotUpdate skips non-ts/html/scss files", async () => {
|
|
144
|
-
const onBuildStart = vi.fn();
|
|
145
|
-
const plugin = sdAngularPlugin({
|
|
146
|
-
pkg: "basic-app",
|
|
147
|
-
|
|
148
|
-
onBuildStart,
|
|
149
|
-
});
|
|
150
|
-
await initPlugin(plugin);
|
|
151
|
-
|
|
152
|
-
const result = await (plugin as any).handleHotUpdate?.({
|
|
153
|
-
file: "/some/file.json",
|
|
154
|
-
modules: [],
|
|
155
|
-
server: {},
|
|
156
|
-
timestamp: Date.now(),
|
|
157
|
-
read: () => Promise.resolve(""),
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
expect(result).toBeUndefined();
|
|
161
|
-
expect(onBuildStart).not.toHaveBeenCalled();
|
|
162
|
-
await (plugin as any).buildEnd?.call({});
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
// Scenario: dev 모드에서 buildEnd 후 facade 유지
|
|
166
|
-
it("keeps facade alive after buildEnd in dev mode", async () => {
|
|
167
|
-
const plugin = sdAngularPlugin({ pkg: "basic-app"});
|
|
168
|
-
await initPlugin(plugin);
|
|
169
|
-
await (plugin as any).buildEnd?.call({});
|
|
170
|
-
|
|
171
|
-
const appComponentPath = path
|
|
172
|
-
.join(PKG_DIR, "src/app.component.ts")
|
|
173
|
-
.replace(/\\/g, "/");
|
|
174
|
-
const result = await (plugin as any).transform?.call({}, "", appComponentPath);
|
|
175
|
-
expect(result).toBeDefined();
|
|
176
|
-
expect(result.code.length).toBeGreaterThan(0);
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
// Scenario: optimizeDeps에 Angular Linker esbuild 플러그인이 등록된다
|
|
180
|
-
it("registers angular-vite-optimize-deps esbuild plugin in optimizeDeps config", async () => {
|
|
181
|
-
const plugin = sdAngularPlugin({ pkg: "basic-app"});
|
|
182
|
-
const config = await (plugin as any).config?.({}, { mode: "development", command: "serve" });
|
|
183
|
-
|
|
184
|
-
const esbuildPlugins = config?.optimizeDeps?.esbuildOptions?.plugins as
|
|
185
|
-
| { name: string }[]
|
|
186
|
-
| undefined;
|
|
187
|
-
expect(esbuildPlugins).toBeDefined();
|
|
188
|
-
expect(esbuildPlugins!.some((p) => p.name === "angular-vite-optimize-deps")).toBe(true);
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
// Scenario: replaceDeps 없을 때 .js 변경은 무시
|
|
192
|
-
it("handleHotUpdate ignores .js files when no replaceDeps configured", async () => {
|
|
193
|
-
const plugin = sdAngularPlugin({ pkg: "basic-app"});
|
|
194
|
-
await initPlugin(plugin);
|
|
195
|
-
|
|
196
|
-
const mockHotSend = vi.fn();
|
|
197
|
-
const mockServer = {
|
|
198
|
-
middlewares: { use: vi.fn() },
|
|
199
|
-
httpServer: { on: vi.fn() },
|
|
200
|
-
config: { base: "/" },
|
|
201
|
-
hot: { send: mockHotSend },
|
|
202
|
-
};
|
|
203
|
-
(plugin as any).configureServer?.(mockServer);
|
|
204
|
-
|
|
205
|
-
const hmrResult = await (plugin as any).handleHotUpdate?.({
|
|
206
|
-
file: "/some/external/lib.js",
|
|
207
|
-
modules: [],
|
|
208
|
-
server: mockServer,
|
|
209
|
-
timestamp: Date.now(),
|
|
210
|
-
read: () => Promise.resolve(""),
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
expect(hmrResult).toBeUndefined();
|
|
214
|
-
await (plugin as any).buildEnd?.call({});
|
|
215
|
-
});
|
|
50
|
+
// handleHotUpdate, configureServer, optimizeDeps는 Vitest 축소로 제거됨
|
|
51
|
+
// Feature 3.3에서 esbuild 기반 테스트로 교체 예정
|
|
216
52
|
|
|
217
53
|
// Scenario: .mjs 파일이 JavaScriptTransformer를 통과한다
|
|
218
54
|
it("transforms .mjs files through JavaScriptTransformer", async () => {
|
|
@@ -283,17 +119,7 @@ describe("sdAngularPlugin", () => {
|
|
|
283
119
|
await (plugin as any).buildEnd?.call({});
|
|
284
120
|
});
|
|
285
121
|
|
|
286
|
-
//
|
|
287
|
-
it("resolves legacyModule from sd.config.ts and disables HMR", async () => {
|
|
288
|
-
mockLoadSdConfig.mockResolvedValue(
|
|
289
|
-
createTestSdConfig({ browserSupport: { legacyModule: true } }),
|
|
290
|
-
);
|
|
291
|
-
|
|
292
|
-
const plugin = sdAngularPlugin({ pkg: "basic-app" });
|
|
293
|
-
const config = await (plugin as any).config?.({}, { mode: "development", command: "serve" });
|
|
294
|
-
|
|
295
|
-
expect(config?.define?.ngHmrMode).toBe("false");
|
|
296
|
-
});
|
|
122
|
+
// config() define 반환값은 Vitest 축소로 제거됨 (Feature 3.3에서 별도 테스트)
|
|
297
123
|
|
|
298
124
|
// Scenario: browserSupport 미설정 시 기본값 동작
|
|
299
125
|
it("works when browserSupport is not set in sd.config.ts", async () => {
|