@simplysm/sd-cli 14.0.29 → 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
|
@@ -1,780 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import type { SdConfig, SdConfigParams } from "../../src/sd-config.types";
|
|
3
|
-
|
|
4
|
-
// --- Mock factories ---
|
|
5
|
-
|
|
6
|
-
const mockTsconfigPaths = vi.fn((_opts?: { projects: string[] }) => ({ name: "vite-tsconfig-paths" }));
|
|
7
|
-
vi.mock("vite-tsconfig-paths", () => ({
|
|
8
|
-
default: mockTsconfigPaths,
|
|
9
|
-
}));
|
|
10
|
-
|
|
11
|
-
const mockSdAngularPlugin = vi.fn((opts: any) => ({ name: "sd-angular-plugin", _opts: opts }));
|
|
12
|
-
vi.mock("../../src/angular/vite-angular-plugin.js", () => ({
|
|
13
|
-
sdAngularPlugin: mockSdAngularPlugin,
|
|
14
|
-
}));
|
|
15
|
-
|
|
16
|
-
const mockSolidPlugin = vi.fn(() => ({ name: "vite-plugin-solid" }));
|
|
17
|
-
vi.mock("vite-plugin-solid", () => ({
|
|
18
|
-
default: mockSolidPlugin,
|
|
19
|
-
}));
|
|
20
|
-
|
|
21
|
-
vi.mock("../../src/utils/vite-scope-watch-plugin.js", () => ({
|
|
22
|
-
sdScopeWatchPlugin: vi.fn(() => ({ name: "sd-scope-watch-plugin" })),
|
|
23
|
-
}));
|
|
24
|
-
|
|
25
|
-
vi.mock("../../src/angular/vite-postcss-inline-plugin.js", () => ({
|
|
26
|
-
sdPostCssInlinePlugin: vi.fn((opts: any) => ({
|
|
27
|
-
name: "sd-postcss-inline",
|
|
28
|
-
postCssPlugins: opts.postCssPlugins,
|
|
29
|
-
})),
|
|
30
|
-
}));
|
|
31
|
-
|
|
32
|
-
const mockBrowserslistToEsbuild = vi.fn();
|
|
33
|
-
vi.mock("browserslist-to-esbuild", () => ({
|
|
34
|
-
default: mockBrowserslistToEsbuild,
|
|
35
|
-
}));
|
|
36
|
-
|
|
37
|
-
const mockVitePWA = vi.fn(() => ({ name: "vite-plugin-pwa" }));
|
|
38
|
-
vi.mock("vite-plugin-pwa", () => ({
|
|
39
|
-
VitePWA: mockVitePWA,
|
|
40
|
-
}));
|
|
41
|
-
|
|
42
|
-
const mockGeneratePwaIcons = vi.fn().mockResolvedValue([]);
|
|
43
|
-
vi.mock("../../src/utils/generate-pwa-icons.js", () => ({
|
|
44
|
-
generatePwaIcons: mockGeneratePwaIcons,
|
|
45
|
-
}));
|
|
46
|
-
|
|
47
|
-
// loadSdConfig mock
|
|
48
|
-
const mockLoadSdConfig = vi.fn<(params: SdConfigParams) => Promise<SdConfig>>();
|
|
49
|
-
vi.mock("../../src/utils/sd-config.js", () => ({
|
|
50
|
-
loadSdConfig: (params: SdConfigParams) => mockLoadSdConfig(params),
|
|
51
|
-
}));
|
|
52
|
-
|
|
53
|
-
// --- Dynamic import ---
|
|
54
|
-
|
|
55
|
-
const { createClientViteConfig } = await import("../../src/utils/vite-config");
|
|
56
|
-
|
|
57
|
-
// --- Helpers ---
|
|
58
|
-
|
|
59
|
-
/** sd.config.ts 모킹용 기본 SdClientPackageConfig를 생성한다 */
|
|
60
|
-
function createSdConfig(overrides?: {
|
|
61
|
-
browserSupport?: { browserslist?: string | string[]; postCss?: { plugins: unknown[] }; legacyModule?: boolean };
|
|
62
|
-
framework?: "angular" | "solid";
|
|
63
|
-
}): SdConfig {
|
|
64
|
-
return {
|
|
65
|
-
packages: {
|
|
66
|
-
"my-client": {
|
|
67
|
-
target: "client" as const,
|
|
68
|
-
server: 0,
|
|
69
|
-
framework: overrides?.framework,
|
|
70
|
-
browserSupport: overrides?.browserSupport,
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function createDefaultOptions() {
|
|
77
|
-
return {
|
|
78
|
-
pkgDir: "/packages/my-client",
|
|
79
|
-
pkgName: "@scope/my-client",
|
|
80
|
-
mode: "build" as const,
|
|
81
|
-
serverPort: 0,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// --- Tests ---
|
|
86
|
-
|
|
87
|
-
beforeEach(() => {
|
|
88
|
-
vi.clearAllMocks();
|
|
89
|
-
// 기본: browserSupport 미설정
|
|
90
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig());
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
afterEach(() => {
|
|
94
|
-
vi.restoreAllMocks();
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
describe("createClientViteConfig", () => {
|
|
98
|
-
describe("browserSupport", () => {
|
|
99
|
-
// Acceptance: Scenario "define['process.env'] 제거"
|
|
100
|
-
it("does not include process.env in define, only import.meta.env keys", async () => {
|
|
101
|
-
const config = await createClientViteConfig({
|
|
102
|
-
...createDefaultOptions(),
|
|
103
|
-
env: { DEV: "true", VER: "1.0.0" },
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
const define = config.define as Record<string, string>;
|
|
107
|
-
expect(define).not.toHaveProperty("process.env");
|
|
108
|
-
expect(define["import.meta.env.DEV"]).toBe('"true"');
|
|
109
|
-
expect(define["import.meta.env.VER"]).toBe('"1.0.0"');
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
// Acceptance: Scenario "browserslist 미설정 시 최신 브라우저 유지"
|
|
113
|
-
it("uses es2022 esbuild target when no browserslist is provided", async () => {
|
|
114
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
115
|
-
|
|
116
|
-
expect(config.esbuild).toEqual({ target: "es2022" });
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
// Acceptance: Scenario "postCss 미설정 시 처리 없음"
|
|
120
|
-
it("does not set css.postcss when no postCssPlugins are provided", async () => {
|
|
121
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
122
|
-
|
|
123
|
-
expect(config.css).toBeUndefined();
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
// Acceptance: Scenario "polyfills.ts 파일 미존재 시 주입 없음"
|
|
127
|
-
it("does not add polyfills plugin when no polyfills are provided", async () => {
|
|
128
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
129
|
-
|
|
130
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
131
|
-
const polyfillPlugin = plugins.find((p) => p.name === "sd-polyfills");
|
|
132
|
-
expect(polyfillPlugin).toBeUndefined();
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
// Acceptance: Scenario "browserslist를 sd.config.ts에서 읽어 esbuild target 설정"
|
|
136
|
-
it("converts browserslist from sd.config.ts to esbuild target", async () => {
|
|
137
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
138
|
-
browserSupport: { browserslist: "last 2 Chrome versions" },
|
|
139
|
-
}));
|
|
140
|
-
mockBrowserslistToEsbuild.mockReturnValue(["chrome120", "chrome119"]);
|
|
141
|
-
|
|
142
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
143
|
-
|
|
144
|
-
expect((config.esbuild as { target: string | string[] }).target).toEqual(["chrome120", "chrome119"]);
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
// Acceptance: Scenario "browserslist 배열 설정"
|
|
148
|
-
it("converts browserslist array from sd.config.ts to esbuild target", async () => {
|
|
149
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
150
|
-
browserSupport: { browserslist: ["ie 11", "last 2 versions"] },
|
|
151
|
-
}));
|
|
152
|
-
mockBrowserslistToEsbuild.mockReturnValue(["es2015"]);
|
|
153
|
-
|
|
154
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
155
|
-
|
|
156
|
-
expect((config.esbuild as { target: string | string[] }).target).toEqual(["es2015"]);
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
// Acceptance: Scenario "dev server에서도 browserslist 적용"
|
|
160
|
-
it("applies browserslist from sd.config.ts in dev mode too", async () => {
|
|
161
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
162
|
-
browserSupport: { browserslist: "last 2 Chrome versions" },
|
|
163
|
-
}));
|
|
164
|
-
mockBrowserslistToEsbuild.mockReturnValue(["chrome120", "chrome119"]);
|
|
165
|
-
|
|
166
|
-
const config = await createClientViteConfig({
|
|
167
|
-
...createDefaultOptions(),
|
|
168
|
-
mode: "dev",
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
expect((config.esbuild as { target: string | string[] }).target).toEqual(["chrome120", "chrome119"]);
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
// Unit: sdAngularPlugin receives pkg (browserslist no longer passed — plugin reads sd.config.ts)
|
|
175
|
-
it("passes pkg to sdAngularPlugin instead of browserslist", async () => {
|
|
176
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
177
|
-
browserSupport: { browserslist: "last 2 Chrome versions" },
|
|
178
|
-
}));
|
|
179
|
-
mockBrowserslistToEsbuild.mockReturnValue(["chrome120", "chrome119"]);
|
|
180
|
-
|
|
181
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
182
|
-
|
|
183
|
-
const angularPlugin = (config.plugins as any[]).find((p) => p.name === "sd-angular-plugin");
|
|
184
|
-
expect(angularPlugin._opts.pkg).toBe("my-client");
|
|
185
|
-
});
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
describe("postCSS", () => {
|
|
189
|
-
// Acceptance: Scenario "postCssPlugins를 sd.config.ts에서 읽어 css.postcss 설정"
|
|
190
|
-
it("sets css.postcss from sd.config.ts postCssPlugins", async () => {
|
|
191
|
-
const fakePlugin = { postcssPlugin: "autoprefixer" };
|
|
192
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
193
|
-
browserSupport: { postCss: { plugins: [fakePlugin] } },
|
|
194
|
-
}));
|
|
195
|
-
|
|
196
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
197
|
-
|
|
198
|
-
expect(config.css?.postcss).toEqual({ plugins: [fakePlugin] });
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
// Unit: postCssPlugins is no longer passed to sdAngularPlugin (plugin reads sd.config.ts)
|
|
202
|
-
it("does not pass postCssPlugins to sdAngularPlugin", async () => {
|
|
203
|
-
const fakePlugin = { postcssPlugin: "autoprefixer" };
|
|
204
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
205
|
-
browserSupport: { postCss: { plugins: [fakePlugin] } },
|
|
206
|
-
}));
|
|
207
|
-
|
|
208
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
209
|
-
|
|
210
|
-
const angularPlugin = (config.plugins as any[]).find((p) => p.name === "sd-angular-plugin");
|
|
211
|
-
expect(angularPlugin._opts).not.toHaveProperty("postCssPlugins");
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
// Acceptance: Scenario "sdPostCssInlinePlugin이 Angular 프레임워크일 때 플러그인 목록에 포함"
|
|
215
|
-
it("adds sdPostCssInlinePlugin when sd.config.ts has postCssPlugins", async () => {
|
|
216
|
-
const fakePlugin = { postcssPlugin: "autoprefixer" };
|
|
217
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
218
|
-
browserSupport: { postCss: { plugins: [fakePlugin] } },
|
|
219
|
-
}));
|
|
220
|
-
|
|
221
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
222
|
-
|
|
223
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
224
|
-
const inlinePlugin = plugins.find((p) => p.name === "sd-postcss-inline");
|
|
225
|
-
expect(inlinePlugin).toBeDefined();
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
// Unit: no sdPostCssInlinePlugin when postCss.plugins is empty in sd.config.ts
|
|
229
|
-
it("does not add sdPostCssInlinePlugin when sd.config.ts postCss.plugins is empty", async () => {
|
|
230
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
231
|
-
browserSupport: { postCss: { plugins: [] } },
|
|
232
|
-
}));
|
|
233
|
-
|
|
234
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
235
|
-
|
|
236
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
237
|
-
const inlinePlugin = plugins.find((p) => p.name === "sd-postcss-inline");
|
|
238
|
-
expect(inlinePlugin).toBeUndefined();
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
// Acceptance: Scenario "polyfills.ts 파일 존재 시 자동 주입"
|
|
242
|
-
it("adds sd-polyfills plugin when polyfills are provided", async () => {
|
|
243
|
-
const config = await createClientViteConfig({
|
|
244
|
-
...createDefaultOptions(),
|
|
245
|
-
polyfills: ["./src/polyfills.ts"],
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
249
|
-
const polyfillPlugin = plugins.find((p) => p.name === "sd-polyfills");
|
|
250
|
-
expect(polyfillPlugin).toBeDefined();
|
|
251
|
-
});
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
describe("legacyModule", () => {
|
|
255
|
-
// --- legacyModule (Feature 1.1) ---
|
|
256
|
-
|
|
257
|
-
// Acceptance: Scenario "legacyModule을 sd.config.ts에서 읽어 빌드 설정 적용"
|
|
258
|
-
it("enables inlineDynamicImports when sd.config.ts has legacyModule: true", async () => {
|
|
259
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
260
|
-
browserSupport: { legacyModule: true },
|
|
261
|
-
}));
|
|
262
|
-
|
|
263
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
264
|
-
|
|
265
|
-
// inlineDynamicImports가 활성화된다
|
|
266
|
-
expect((config.build as any)?.rollupOptions?.output?.inlineDynamicImports).toBe(true);
|
|
267
|
-
// esbuild.supported에 import-meta: false가 설정된다
|
|
268
|
-
const esbuildOpts = config.esbuild as Record<string, unknown> | undefined;
|
|
269
|
-
expect(esbuildOpts?.["supported"]).toEqual(
|
|
270
|
-
expect.objectContaining({ "import-meta": false }),
|
|
271
|
-
);
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
// Acceptance: Scenario "legacyModule 미설정 시 코드 분할이 기본 동작한다"
|
|
275
|
-
it("does not set inlineDynamicImports when legacyModule is not set in sd.config.ts", async () => {
|
|
276
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
277
|
-
|
|
278
|
-
// 코드 분할이 기본 동작한다
|
|
279
|
-
expect(config.build?.rollupOptions).toBeUndefined();
|
|
280
|
-
});
|
|
281
|
-
|
|
282
|
-
// Acceptance: Scenario "legacyModule 미설정 시 esbuild.supported 변경 없음"
|
|
283
|
-
it("does not set esbuild.supported when legacyModule is not specified in sd.config.ts", async () => {
|
|
284
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
285
|
-
|
|
286
|
-
const esbuildOpts = config.esbuild as Record<string, unknown> | undefined;
|
|
287
|
-
expect(esbuildOpts?.["supported"]).toBeUndefined();
|
|
288
|
-
});
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
describe("pwa", () => {
|
|
292
|
-
// --- PWA (Feature 5.2) ---
|
|
293
|
-
|
|
294
|
-
// Acceptance: Scenario "기본 PWA 활성화"
|
|
295
|
-
it("adds VitePWA plugin in build mode when pwa is not specified (default enabled)", async () => {
|
|
296
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
297
|
-
|
|
298
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
299
|
-
const pwaPlugin = plugins.find((p) => p.name === "vite-plugin-pwa");
|
|
300
|
-
expect(pwaPlugin).toBeDefined();
|
|
301
|
-
});
|
|
302
|
-
|
|
303
|
-
// Acceptance: Scenario "PWA 명시적 비활성화"
|
|
304
|
-
it("does not add VitePWA plugin when pwa is false", async () => {
|
|
305
|
-
const config = await createClientViteConfig({
|
|
306
|
-
...createDefaultOptions(),
|
|
307
|
-
pwa: false,
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
311
|
-
const pwaPlugin = plugins.find((p) => p.name === "vite-plugin-pwa");
|
|
312
|
-
expect(pwaPlugin).toBeUndefined();
|
|
313
|
-
});
|
|
314
|
-
|
|
315
|
-
// Acceptance: Scenario "dev 모드에서 service worker 미등록"
|
|
316
|
-
it("does not add VitePWA plugin in dev mode", async () => {
|
|
317
|
-
const config = await createClientViteConfig({
|
|
318
|
-
...createDefaultOptions(),
|
|
319
|
-
mode: "dev",
|
|
320
|
-
});
|
|
321
|
-
|
|
322
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
323
|
-
const pwaPlugin = plugins.find((p) => p.name === "vite-plugin-pwa");
|
|
324
|
-
expect(pwaPlugin).toBeUndefined();
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
// Acceptance: Scenario "manifest 필드 커스텀"
|
|
328
|
-
it("passes custom manifest fields to VitePWA plugin", async () => {
|
|
329
|
-
await createClientViteConfig({
|
|
330
|
-
...createDefaultOptions(),
|
|
331
|
-
pwa: {
|
|
332
|
-
manifest: { name: "My App", theme_color: "#000000" },
|
|
333
|
-
},
|
|
334
|
-
});
|
|
335
|
-
|
|
336
|
-
expect(mockVitePWA).toHaveBeenCalledWith(
|
|
337
|
-
expect.objectContaining({
|
|
338
|
-
manifest: expect.objectContaining({
|
|
339
|
-
name: "My App",
|
|
340
|
-
theme_color: "#000000",
|
|
341
|
-
short_name: "my-client",
|
|
342
|
-
display: "standalone",
|
|
343
|
-
background_color: "#ffffff",
|
|
344
|
-
}),
|
|
345
|
-
}),
|
|
346
|
-
);
|
|
347
|
-
});
|
|
348
|
-
|
|
349
|
-
// Acceptance: Scenario "기본 Workbox 캐싱"
|
|
350
|
-
it("uses default workbox globPatterns when pwa.workbox is not specified", async () => {
|
|
351
|
-
await createClientViteConfig(createDefaultOptions());
|
|
352
|
-
|
|
353
|
-
expect(mockVitePWA).toHaveBeenCalledWith(
|
|
354
|
-
expect.objectContaining({
|
|
355
|
-
workbox: {
|
|
356
|
-
globPatterns: ["**/*.{js,css,html,ico,png,svg,woff2}"],
|
|
357
|
-
},
|
|
358
|
-
}),
|
|
359
|
-
);
|
|
360
|
-
});
|
|
361
|
-
|
|
362
|
-
// Acceptance: Scenario "Workbox globPatterns 커스텀"
|
|
363
|
-
it("uses custom workbox globPatterns when specified", async () => {
|
|
364
|
-
await createClientViteConfig({
|
|
365
|
-
...createDefaultOptions(),
|
|
366
|
-
pwa: {
|
|
367
|
-
workbox: { globPatterns: ["**/*.{js,css,html,json}"] },
|
|
368
|
-
},
|
|
369
|
-
});
|
|
370
|
-
|
|
371
|
-
expect(mockVitePWA).toHaveBeenCalledWith(
|
|
372
|
-
expect.objectContaining({
|
|
373
|
-
workbox: {
|
|
374
|
-
globPatterns: ["**/*.{js,css,html,json}"],
|
|
375
|
-
},
|
|
376
|
-
}),
|
|
377
|
-
);
|
|
378
|
-
});
|
|
379
|
-
|
|
380
|
-
// Unit: pwa empty object uses all defaults
|
|
381
|
-
it("uses all defaults when pwa is empty object", async () => {
|
|
382
|
-
await createClientViteConfig({
|
|
383
|
-
...createDefaultOptions(),
|
|
384
|
-
pwa: {},
|
|
385
|
-
});
|
|
386
|
-
|
|
387
|
-
expect(mockVitePWA).toHaveBeenCalledWith(
|
|
388
|
-
expect.objectContaining({
|
|
389
|
-
manifest: expect.objectContaining({
|
|
390
|
-
name: "my-client",
|
|
391
|
-
display: "standalone",
|
|
392
|
-
}),
|
|
393
|
-
}),
|
|
394
|
-
);
|
|
395
|
-
});
|
|
396
|
-
|
|
397
|
-
// Unit: pwa manifest custom icons overrides default
|
|
398
|
-
it("includes custom icons in manifest and skips auto-generation", async () => {
|
|
399
|
-
const icons = [{ src: "/icon-192.png", sizes: "192x192", type: "image/png" }];
|
|
400
|
-
await createClientViteConfig({
|
|
401
|
-
...createDefaultOptions(),
|
|
402
|
-
pwa: { manifest: { icons } },
|
|
403
|
-
});
|
|
404
|
-
|
|
405
|
-
expect(mockVitePWA).toHaveBeenCalledWith(
|
|
406
|
-
expect.objectContaining({
|
|
407
|
-
manifest: expect.objectContaining({ icons }),
|
|
408
|
-
}),
|
|
409
|
-
);
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
// Acceptance: Scenario "기본 아이콘 자동 생성"
|
|
413
|
-
it("calls generatePwaIcons and includes result in manifest", async () => {
|
|
414
|
-
mockGeneratePwaIcons.mockResolvedValue([
|
|
415
|
-
{ src: "icons/icon-192x192.png", sizes: "192x192", type: "image/png" },
|
|
416
|
-
{ src: "icons/icon-512x512.png", sizes: "512x512", type: "image/png" },
|
|
417
|
-
]);
|
|
418
|
-
|
|
419
|
-
await createClientViteConfig(createDefaultOptions());
|
|
420
|
-
|
|
421
|
-
expect(mockGeneratePwaIcons).toHaveBeenCalledWith("/packages/my-client");
|
|
422
|
-
expect(mockVitePWA).toHaveBeenCalledWith(
|
|
423
|
-
expect.objectContaining({
|
|
424
|
-
manifest: expect.objectContaining({
|
|
425
|
-
icons: [
|
|
426
|
-
{ src: "icons/icon-192x192.png", sizes: "192x192", type: "image/png" },
|
|
427
|
-
{ src: "icons/icon-512x512.png", sizes: "512x512", type: "image/png" },
|
|
428
|
-
],
|
|
429
|
-
}),
|
|
430
|
-
}),
|
|
431
|
-
);
|
|
432
|
-
});
|
|
433
|
-
|
|
434
|
-
// Acceptance: Scenario "원본 아이콘 파일이 없을 때"
|
|
435
|
-
it("does not include icons in manifest when no source icon exists", async () => {
|
|
436
|
-
mockGeneratePwaIcons.mockResolvedValue([]);
|
|
437
|
-
|
|
438
|
-
await createClientViteConfig(createDefaultOptions());
|
|
439
|
-
|
|
440
|
-
expect(mockVitePWA).toHaveBeenCalledWith(
|
|
441
|
-
expect.objectContaining({
|
|
442
|
-
manifest: expect.not.objectContaining({ icons: expect.anything() }),
|
|
443
|
-
}),
|
|
444
|
-
);
|
|
445
|
-
});
|
|
446
|
-
|
|
447
|
-
// Acceptance: Scenario "pwa 필드 미설정 시 기본값"
|
|
448
|
-
it("uses default manifest values from pkgName when pwa is undefined", async () => {
|
|
449
|
-
await createClientViteConfig(createDefaultOptions());
|
|
450
|
-
|
|
451
|
-
expect(mockVitePWA).toHaveBeenCalledWith(
|
|
452
|
-
expect.objectContaining({
|
|
453
|
-
registerType: "prompt",
|
|
454
|
-
injectRegister: "script",
|
|
455
|
-
manifest: expect.objectContaining({
|
|
456
|
-
name: "my-client",
|
|
457
|
-
short_name: "my-client",
|
|
458
|
-
display: "standalone",
|
|
459
|
-
theme_color: "#ffffff",
|
|
460
|
-
background_color: "#ffffff",
|
|
461
|
-
}),
|
|
462
|
-
}),
|
|
463
|
-
);
|
|
464
|
-
});
|
|
465
|
-
});
|
|
466
|
-
|
|
467
|
-
describe("watch", () => {
|
|
468
|
-
// --- watch option (Feature 1.2: legacy dev mode) ---
|
|
469
|
-
|
|
470
|
-
// Acceptance: Scenario "watch: true 시 build.watch 설정 및 emptyOutDir: false"
|
|
471
|
-
it("sets build.watch and emptyOutDir: false when watch is true in build mode", async () => {
|
|
472
|
-
const config = await createClientViteConfig({
|
|
473
|
-
...createDefaultOptions(),
|
|
474
|
-
mode: "build",
|
|
475
|
-
watch: true,
|
|
476
|
-
});
|
|
477
|
-
|
|
478
|
-
expect(config.build?.watch).toEqual({});
|
|
479
|
-
expect(config.build?.emptyOutDir).toBe(false);
|
|
480
|
-
expect(config.logLevel).toBeUndefined();
|
|
481
|
-
});
|
|
482
|
-
|
|
483
|
-
// Acceptance: Scenario "watch: true + replaceDeps 시 sdScopeWatchPlugin 포함"
|
|
484
|
-
it("includes sdScopeWatchPlugin when watch is true with replaceDeps in build mode", async () => {
|
|
485
|
-
const config = await createClientViteConfig({
|
|
486
|
-
...createDefaultOptions(),
|
|
487
|
-
mode: "build",
|
|
488
|
-
watch: true,
|
|
489
|
-
replaceDeps: [{ packageName: "@scope/core", sourcePath: "/packages/core" }],
|
|
490
|
-
});
|
|
491
|
-
|
|
492
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
493
|
-
const scopePlugin = plugins.find((p) => p.name === "sd-scope-watch-plugin");
|
|
494
|
-
expect(scopePlugin).toBeDefined();
|
|
495
|
-
});
|
|
496
|
-
|
|
497
|
-
// Acceptance: Scenario "watch 미설정 시 기존 build 동작 유지"
|
|
498
|
-
it("sets emptyOutDir: true and logLevel: silent when watch is not set in build mode", async () => {
|
|
499
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
500
|
-
|
|
501
|
-
expect(config.build?.emptyOutDir).toBe(true);
|
|
502
|
-
expect(config.logLevel).toBe("silent");
|
|
503
|
-
expect(config.build?.watch).toBeUndefined();
|
|
504
|
-
});
|
|
505
|
-
|
|
506
|
-
// Unit: watch: true without replaceDeps does not add sdScopeWatchPlugin
|
|
507
|
-
it("does not add sdScopeWatchPlugin in watch mode without replaceDeps", async () => {
|
|
508
|
-
const config = await createClientViteConfig({
|
|
509
|
-
...createDefaultOptions(),
|
|
510
|
-
mode: "build",
|
|
511
|
-
watch: true,
|
|
512
|
-
});
|
|
513
|
-
|
|
514
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
515
|
-
const scopePlugin = plugins.find((p) => p.name === "sd-scope-watch-plugin");
|
|
516
|
-
expect(scopePlugin).toBeUndefined();
|
|
517
|
-
});
|
|
518
|
-
|
|
519
|
-
// Unit: watch: true still sets outDir
|
|
520
|
-
it("sets outDir in watch mode", async () => {
|
|
521
|
-
const config = await createClientViteConfig({
|
|
522
|
-
...createDefaultOptions(),
|
|
523
|
-
mode: "build",
|
|
524
|
-
watch: true,
|
|
525
|
-
});
|
|
526
|
-
|
|
527
|
-
expect(config.build?.outDir).toContain("my-client");
|
|
528
|
-
expect(config.build?.outDir).toMatch(/dist$/);
|
|
529
|
-
});
|
|
530
|
-
});
|
|
531
|
-
|
|
532
|
-
// --- outDir override ---
|
|
533
|
-
|
|
534
|
-
// Acceptance: Scenario "outDir 설정 시 해당 경로로 빌드 출력"
|
|
535
|
-
it("uses custom outDir when provided", async () => {
|
|
536
|
-
const config = await createClientViteConfig({
|
|
537
|
-
...createDefaultOptions(),
|
|
538
|
-
outDir: "/packages/my-client/.capacitor/www",
|
|
539
|
-
});
|
|
540
|
-
|
|
541
|
-
expect(config.build?.outDir).toBe("/packages/my-client/.capacitor/www");
|
|
542
|
-
});
|
|
543
|
-
|
|
544
|
-
// Acceptance: Scenario "outDir 미설정 시 pkgDir/dist 사용"
|
|
545
|
-
it("defaults outDir to pkgDir/dist when not provided", async () => {
|
|
546
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
547
|
-
|
|
548
|
-
expect(config.build?.outDir).toMatch(/my-client[\\/]dist$/);
|
|
549
|
-
});
|
|
550
|
-
|
|
551
|
-
// --- exclude (Feature 1.1: vite-exclude-passthrough) ---
|
|
552
|
-
|
|
553
|
-
// Acceptance: Scenario "exclude에 패키지를 지정하면 pre-bundling에서 제외된다"
|
|
554
|
-
it("sets optimizeDeps.exclude when exclude is provided", async () => {
|
|
555
|
-
const config = await createClientViteConfig({
|
|
556
|
-
...createDefaultOptions(),
|
|
557
|
-
mode: "dev",
|
|
558
|
-
exclude: ["jeep-sqlite"],
|
|
559
|
-
});
|
|
560
|
-
|
|
561
|
-
expect(config.optimizeDeps?.exclude).toEqual(["jeep-sqlite"]);
|
|
562
|
-
});
|
|
563
|
-
|
|
564
|
-
// Acceptance: Scenario "exclude 미설정 시 기존 동작과 동일하다"
|
|
565
|
-
it("does not set optimizeDeps.exclude when exclude is not provided", async () => {
|
|
566
|
-
const config = await createClientViteConfig({
|
|
567
|
-
...createDefaultOptions(),
|
|
568
|
-
mode: "dev",
|
|
569
|
-
});
|
|
570
|
-
|
|
571
|
-
expect(config.optimizeDeps?.exclude).toBeUndefined();
|
|
572
|
-
});
|
|
573
|
-
|
|
574
|
-
// Acceptance: Scenario "exclude와 replaceDeps가 모두 있으면 둘 다 제외된다"
|
|
575
|
-
it("sets optimizeDeps.exclude from exclude while sdScopeWatchPlugin handles replaceDeps", async () => {
|
|
576
|
-
const config = await createClientViteConfig({
|
|
577
|
-
...createDefaultOptions(),
|
|
578
|
-
mode: "dev",
|
|
579
|
-
exclude: ["jeep-sqlite"],
|
|
580
|
-
replaceDeps: [{ packageName: "@scope/core", sourcePath: "/packages/core" }],
|
|
581
|
-
});
|
|
582
|
-
|
|
583
|
-
// Base config에 사용자 exclude + replaceDeps 패키지 모두 포함
|
|
584
|
-
expect(config.optimizeDeps?.exclude).toEqual(["jeep-sqlite", "@scope/core"]);
|
|
585
|
-
});
|
|
586
|
-
|
|
587
|
-
// Acceptance: Scenario "exclude만 있고 replaceDeps가 없으면 exclude만 제외된다"
|
|
588
|
-
it("sets optimizeDeps.exclude from exclude when no replaceDeps", async () => {
|
|
589
|
-
const config = await createClientViteConfig({
|
|
590
|
-
...createDefaultOptions(),
|
|
591
|
-
mode: "dev",
|
|
592
|
-
exclude: ["jeep-sqlite"],
|
|
593
|
-
});
|
|
594
|
-
|
|
595
|
-
expect(config.optimizeDeps?.exclude).toEqual(["jeep-sqlite"]);
|
|
596
|
-
// sdScopeWatchPlugin은 호출되지 않음
|
|
597
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
598
|
-
const scopePlugin = plugins.find((p) => p.name === "sd-scope-watch-plugin");
|
|
599
|
-
expect(scopePlugin).toBeUndefined();
|
|
600
|
-
});
|
|
601
|
-
|
|
602
|
-
describe("framework", () => {
|
|
603
|
-
|
|
604
|
-
// Acceptance: Scenario "Solid 프레임워크 선택"
|
|
605
|
-
it("uses solidPlugin when framework is 'solid'", async () => {
|
|
606
|
-
const config = await createClientViteConfig({
|
|
607
|
-
...createDefaultOptions(),
|
|
608
|
-
framework: "solid",
|
|
609
|
-
});
|
|
610
|
-
|
|
611
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
612
|
-
expect(plugins.find((p) => p.name === "vite-plugin-solid")).toBeDefined();
|
|
613
|
-
expect(plugins.find((p) => p.name === "sd-angular-plugin")).toBeUndefined();
|
|
614
|
-
});
|
|
615
|
-
|
|
616
|
-
// Acceptance: Scenario "framework 미지정 시 기본값"
|
|
617
|
-
it("uses sdAngularPlugin when framework is not specified", async () => {
|
|
618
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
619
|
-
|
|
620
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
621
|
-
expect(plugins.find((p) => p.name === "sd-angular-plugin")).toBeDefined();
|
|
622
|
-
expect(plugins.find((p) => p.name === "vite-plugin-solid")).toBeUndefined();
|
|
623
|
-
});
|
|
624
|
-
|
|
625
|
-
// Acceptance: Scenario "Angular 프레임워크 명시 선택"
|
|
626
|
-
it("uses sdAngularPlugin when framework is 'angular'", async () => {
|
|
627
|
-
const config = await createClientViteConfig({
|
|
628
|
-
...createDefaultOptions(),
|
|
629
|
-
framework: "angular",
|
|
630
|
-
});
|
|
631
|
-
|
|
632
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
633
|
-
expect(plugins.find((p) => p.name === "sd-angular-plugin")).toBeDefined();
|
|
634
|
-
expect(plugins.find((p) => p.name === "vite-plugin-solid")).toBeUndefined();
|
|
635
|
-
});
|
|
636
|
-
|
|
637
|
-
// Acceptance: Scenario "Solid 빌드에서 PostCSS inline 플러그인 미적용"
|
|
638
|
-
it("does not add sdPostCssInlinePlugin when framework is 'solid' even with postCssPlugins in sd.config.ts", async () => {
|
|
639
|
-
const fakePlugin = { postcssPlugin: "autoprefixer" };
|
|
640
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
641
|
-
framework: "solid",
|
|
642
|
-
browserSupport: { postCss: { plugins: [fakePlugin] } },
|
|
643
|
-
}));
|
|
644
|
-
|
|
645
|
-
const config = await createClientViteConfig({
|
|
646
|
-
...createDefaultOptions(),
|
|
647
|
-
framework: "solid",
|
|
648
|
-
});
|
|
649
|
-
|
|
650
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
651
|
-
expect(plugins.find((p) => p.name === "sd-postcss-inline")).toBeUndefined();
|
|
652
|
-
// 하지만 css.postcss는 여전히 설정된다 (외부 CSS 파일용)
|
|
653
|
-
expect(config.css?.postcss).toEqual({ plugins: [fakePlugin] });
|
|
654
|
-
});
|
|
655
|
-
});
|
|
656
|
-
|
|
657
|
-
// --- legacyModule dev mode (Feature: fix-legacy-ngdevmode) ---
|
|
658
|
-
|
|
659
|
-
// Acceptance: Scenario "legacyModule: true + dev 명령 실행 시 sdAngularPlugin에 pkg 전달"
|
|
660
|
-
it("passes pkg to sdAngularPlugin when mode is dev with legacyModule from sd.config.ts", async () => {
|
|
661
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
662
|
-
browserSupport: { legacyModule: true },
|
|
663
|
-
}));
|
|
664
|
-
|
|
665
|
-
const config = await createClientViteConfig({
|
|
666
|
-
...createDefaultOptions(),
|
|
667
|
-
mode: "dev",
|
|
668
|
-
watch: true,
|
|
669
|
-
});
|
|
670
|
-
|
|
671
|
-
const angularPlugin = (config.plugins as any[]).find((p) => p.name === "sd-angular-plugin");
|
|
672
|
-
expect(angularPlugin._opts.pkg).toBe("my-client");
|
|
673
|
-
});
|
|
674
|
-
|
|
675
|
-
// Acceptance: Scenario "legacyModule dev에서 build output 설정이 적용된다"
|
|
676
|
-
it("applies build output settings when mode is dev with legacyModule from sd.config.ts", async () => {
|
|
677
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
678
|
-
browserSupport: { legacyModule: true },
|
|
679
|
-
}));
|
|
680
|
-
|
|
681
|
-
const config = await createClientViteConfig({
|
|
682
|
-
...createDefaultOptions(),
|
|
683
|
-
mode: "dev",
|
|
684
|
-
watch: true,
|
|
685
|
-
});
|
|
686
|
-
|
|
687
|
-
expect(config.build?.outDir).toMatch(/my-client[\\/]dist$/);
|
|
688
|
-
expect(config.build?.watch).toEqual({});
|
|
689
|
-
expect(config.build?.emptyOutDir).toBe(false);
|
|
690
|
-
expect(config.build?.minify).toBe(false);
|
|
691
|
-
});
|
|
692
|
-
|
|
693
|
-
// Unit: legacyModule dev에서 PWA가 추가되지 않는다
|
|
694
|
-
it("does not add VitePWA plugin when mode is dev with legacyModule from sd.config.ts", async () => {
|
|
695
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
696
|
-
browserSupport: { legacyModule: true },
|
|
697
|
-
}));
|
|
698
|
-
|
|
699
|
-
const config = await createClientViteConfig({
|
|
700
|
-
...createDefaultOptions(),
|
|
701
|
-
mode: "dev",
|
|
702
|
-
watch: true,
|
|
703
|
-
});
|
|
704
|
-
|
|
705
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
706
|
-
const pwaPlugin = plugins.find((p) => p.name === "vite-plugin-pwa");
|
|
707
|
-
expect(pwaPlugin).toBeUndefined();
|
|
708
|
-
});
|
|
709
|
-
|
|
710
|
-
// --- Feature 3.1: sd.config.ts 로딩 + 옵션 제거 ---
|
|
711
|
-
|
|
712
|
-
// Unit: loadSdConfig is called with correct params
|
|
713
|
-
it("calls loadSdConfig with cwd and mode derived from options", async () => {
|
|
714
|
-
await createClientViteConfig({ ...createDefaultOptions(), mode: "dev" });
|
|
715
|
-
|
|
716
|
-
expect(mockLoadSdConfig).toHaveBeenCalledWith(
|
|
717
|
-
expect.objectContaining({
|
|
718
|
-
cwd: expect.any(String),
|
|
719
|
-
dev: true,
|
|
720
|
-
opt: [],
|
|
721
|
-
}),
|
|
722
|
-
);
|
|
723
|
-
});
|
|
724
|
-
|
|
725
|
-
// Unit: loadSdConfig called with dev: false for build mode
|
|
726
|
-
it("calls loadSdConfig with dev: false for build mode", async () => {
|
|
727
|
-
await createClientViteConfig(createDefaultOptions());
|
|
728
|
-
|
|
729
|
-
expect(mockLoadSdConfig).toHaveBeenCalledWith(
|
|
730
|
-
expect.objectContaining({ dev: false }),
|
|
731
|
-
);
|
|
732
|
-
});
|
|
733
|
-
|
|
734
|
-
// Acceptance: Scenario "sd.config.ts에 패키지가 없으면 에러"
|
|
735
|
-
it("throws error when package is not defined in sd.config.ts", async () => {
|
|
736
|
-
mockLoadSdConfig.mockResolvedValue({ packages: {} });
|
|
737
|
-
|
|
738
|
-
await expect(
|
|
739
|
-
createClientViteConfig(createDefaultOptions()),
|
|
740
|
-
).rejects.toThrow("my-client");
|
|
741
|
-
});
|
|
742
|
-
|
|
743
|
-
// Acceptance: Scenario "tsconfigPath 자동 계산"
|
|
744
|
-
it("includes tsconfigPaths plugin in config", async () => {
|
|
745
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
746
|
-
|
|
747
|
-
const plugins = config.plugins as Array<{ name: string }>;
|
|
748
|
-
expect(plugins.find((p) => p.name === "vite-tsconfig-paths")).toBeDefined();
|
|
749
|
-
});
|
|
750
|
-
|
|
751
|
-
// Acceptance: Scenario "Solid 프레임워크에서도 browserSupport 적용"
|
|
752
|
-
it("applies browserslist from sd.config.ts even when framework is solid", async () => {
|
|
753
|
-
mockLoadSdConfig.mockResolvedValue(createSdConfig({
|
|
754
|
-
framework: "solid",
|
|
755
|
-
browserSupport: { browserslist: "last 2 Chrome versions" },
|
|
756
|
-
}));
|
|
757
|
-
mockBrowserslistToEsbuild.mockReturnValue(["chrome120", "chrome119"]);
|
|
758
|
-
|
|
759
|
-
const config = await createClientViteConfig({
|
|
760
|
-
...createDefaultOptions(),
|
|
761
|
-
framework: "solid",
|
|
762
|
-
});
|
|
763
|
-
|
|
764
|
-
expect((config.esbuild as { target: string | string[] }).target).toEqual(["chrome120", "chrome119"]);
|
|
765
|
-
});
|
|
766
|
-
|
|
767
|
-
// Acceptance: Scenario "browserSupport 미설정 시 기본값 적용" (esbuild + css + legacyModule 종합)
|
|
768
|
-
it("uses default values when browserSupport is not set in sd.config.ts", async () => {
|
|
769
|
-
const config = await createClientViteConfig(createDefaultOptions());
|
|
770
|
-
|
|
771
|
-
// esbuild target은 "es2022"
|
|
772
|
-
expect(config.esbuild).toEqual({ target: "es2022" });
|
|
773
|
-
// css.postcss는 undefined
|
|
774
|
-
expect(config.css).toBeUndefined();
|
|
775
|
-
// legacyModule 관련 설정은 적용되지 않는다
|
|
776
|
-
expect(config.build?.rollupOptions).toBeUndefined();
|
|
777
|
-
const esbuildOpts = config.esbuild as Record<string, unknown> | undefined;
|
|
778
|
-
expect(esbuildOpts?.["supported"]).toBeUndefined();
|
|
779
|
-
});
|
|
780
|
-
});
|