@simplysm/sd-cli 13.0.99 → 14.0.1
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/commands/build.js +29 -19
- package/dist/commands/build.js.map +1 -6
- package/dist/commands/check.d.ts +1 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +130 -115
- package/dist/commands/check.js.map +1 -6
- package/dist/commands/dev.d.ts +6 -7
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +24 -14
- package/dist/commands/dev.js.map +1 -6
- package/dist/commands/lint.d.ts +1 -1
- package/dist/commands/lint.js +158 -116
- package/dist/commands/lint.js.map +1 -6
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +637 -510
- package/dist/commands/publish.js.map +1 -6
- package/dist/commands/replace-deps.js +12 -12
- package/dist/commands/replace-deps.js.map +1 -6
- package/dist/commands/typecheck.d.ts +5 -30
- package/dist/commands/typecheck.d.ts.map +1 -1
- package/dist/commands/typecheck.js +144 -207
- package/dist/commands/typecheck.js.map +1 -6
- package/dist/commands/watch.d.ts +6 -4
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +25 -16
- package/dist/commands/watch.js.map +1 -6
- package/dist/engines/NgtscEngine.d.ts +47 -0
- package/dist/engines/NgtscEngine.d.ts.map +1 -0
- package/dist/engines/NgtscEngine.js +151 -0
- package/dist/engines/NgtscEngine.js.map +1 -0
- package/dist/engines/ServerEsbuildEngine.d.ts +47 -0
- package/dist/engines/ServerEsbuildEngine.d.ts.map +1 -0
- package/dist/engines/ServerEsbuildEngine.js +159 -0
- package/dist/engines/ServerEsbuildEngine.js.map +1 -0
- package/dist/engines/TscEngine.d.ts +47 -0
- package/dist/engines/TscEngine.d.ts.map +1 -0
- package/dist/engines/TscEngine.js +153 -0
- package/dist/engines/TscEngine.js.map +1 -0
- package/dist/engines/ViteEngine.d.ts +49 -0
- package/dist/engines/ViteEngine.d.ts.map +1 -0
- package/dist/engines/ViteEngine.js +161 -0
- package/dist/engines/ViteEngine.js.map +1 -0
- package/dist/engines/index.d.ts +26 -0
- package/dist/engines/index.d.ts.map +1 -0
- package/dist/engines/index.js +30 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/types.d.ts +77 -0
- package/dist/engines/types.d.ts.map +1 -0
- package/dist/engines/types.js +2 -0
- package/dist/engines/types.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -6
- package/dist/infra/ResultCollector.d.ts +1 -1
- package/dist/infra/ResultCollector.d.ts.map +1 -1
- package/dist/infra/ResultCollector.js +30 -27
- package/dist/infra/ResultCollector.js.map +1 -6
- package/dist/infra/SignalHandler.js +45 -42
- package/dist/infra/SignalHandler.js.map +1 -6
- package/dist/infra/WorkerManager.js +56 -53
- package/dist/infra/WorkerManager.js.map +1 -6
- package/dist/orchestrators/BuildOrchestrator.d.ts +33 -1
- package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
- package/dist/orchestrators/BuildOrchestrator.js +314 -309
- package/dist/orchestrators/BuildOrchestrator.js.map +1 -6
- package/dist/orchestrators/DevWatchOrchestrator.d.ts +60 -0
- package/dist/orchestrators/DevWatchOrchestrator.d.ts.map +1 -0
- package/dist/orchestrators/DevWatchOrchestrator.js +465 -0
- package/dist/orchestrators/DevWatchOrchestrator.js.map +1 -0
- package/dist/sd-cli-entry.d.ts.map +1 -1
- package/dist/sd-cli-entry.js +190 -266
- package/dist/sd-cli-entry.js.map +1 -6
- package/dist/sd-cli.js +77 -49
- package/dist/sd-cli.js.map +1 -6
- package/dist/sd-config.types.d.ts +2 -0
- package/dist/sd-config.types.d.ts.map +1 -1
- package/dist/sd-config.types.js +2 -1
- package/dist/sd-config.types.js.map +1 -6
- package/dist/utils/angular-build.d.ts +77 -0
- package/dist/utils/angular-build.d.ts.map +1 -0
- package/dist/utils/angular-build.js +84 -0
- package/dist/utils/angular-build.js.map +1 -0
- package/dist/utils/build-env.js +9 -9
- package/dist/utils/build-env.js.map +1 -6
- package/dist/utils/concurrency.d.ts +15 -0
- package/dist/utils/concurrency.d.ts.map +1 -0
- package/dist/utils/concurrency.js +38 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/copy-public.js +104 -87
- package/dist/utils/copy-public.js.map +1 -6
- package/dist/utils/copy-src.js +49 -35
- package/dist/utils/copy-src.js.map +1 -6
- package/dist/utils/esbuild-config.d.ts +0 -29
- package/dist/utils/esbuild-config.d.ts.map +1 -1
- package/dist/utils/esbuild-config.js +151 -218
- package/dist/utils/esbuild-config.js.map +1 -6
- package/dist/utils/ngtsc-build-core.d.ts +49 -0
- package/dist/utils/ngtsc-build-core.d.ts.map +1 -0
- package/dist/utils/ngtsc-build-core.js +250 -0
- package/dist/utils/ngtsc-build-core.js.map +1 -0
- package/dist/utils/output-path-rewriter.d.ts +23 -0
- package/dist/utils/output-path-rewriter.d.ts.map +1 -0
- package/dist/utils/output-path-rewriter.js +74 -0
- package/dist/utils/output-path-rewriter.js.map +1 -0
- package/dist/utils/output-utils.js +55 -40
- package/dist/utils/output-utils.js.map +1 -6
- package/dist/utils/package-utils.d.ts +8 -0
- package/dist/utils/package-utils.d.ts.map +1 -1
- package/dist/utils/package-utils.js +103 -73
- package/dist/utils/package-utils.js.map +1 -6
- package/dist/utils/rebuild-manager.js +41 -44
- package/dist/utils/rebuild-manager.js.map +1 -6
- package/dist/utils/replace-deps.js +283 -184
- package/dist/utils/replace-deps.js.map +1 -6
- package/dist/utils/scss-compiler.d.ts +10 -0
- package/dist/utils/scss-compiler.d.ts.map +1 -0
- package/dist/utils/scss-compiler.js +36 -0
- package/dist/utils/scss-compiler.js.map +1 -0
- package/dist/utils/sd-config.js +29 -19
- package/dist/utils/sd-config.js.map +1 -6
- package/dist/utils/tsc-build.d.ts +36 -0
- package/dist/utils/tsc-build.d.ts.map +1 -0
- package/dist/utils/tsc-build.js +130 -0
- package/dist/utils/tsc-build.js.map +1 -0
- package/dist/utils/tsconfig.d.ts +7 -26
- package/dist/utils/tsconfig.d.ts.map +1 -1
- package/dist/utils/tsconfig.js +39 -64
- package/dist/utils/tsconfig.js.map +1 -6
- package/dist/utils/typecheck-non-package.d.ts +18 -0
- package/dist/utils/typecheck-non-package.d.ts.map +1 -0
- package/dist/utils/typecheck-non-package.js +64 -0
- package/dist/utils/typecheck-non-package.js.map +1 -0
- package/dist/utils/typecheck-serialization.js +58 -40
- package/dist/utils/typecheck-serialization.js.map +1 -6
- package/dist/utils/worker-events.js +48 -40
- package/dist/utils/worker-events.js.map +1 -6
- package/dist/utils/worker-utils.js +48 -28
- package/dist/utils/worker-utils.js.map +1 -6
- package/dist/vitest-plugin.d.ts +9 -0
- package/dist/vitest-plugin.d.ts.map +1 -0
- package/dist/vitest-plugin.js +85 -0
- package/dist/vitest-plugin.js.map +1 -0
- package/dist/workers/library-build.worker.d.ts +54 -0
- package/dist/workers/library-build.worker.d.ts.map +1 -0
- package/dist/workers/library-build.worker.js +97 -0
- package/dist/workers/library-build.worker.js.map +1 -0
- package/dist/workers/lint.worker.js +9 -6
- package/dist/workers/lint.worker.js.map +1 -6
- package/dist/workers/ngtsc-build.worker.d.ts +23 -0
- package/dist/workers/ngtsc-build.worker.d.ts.map +1 -0
- package/dist/workers/ngtsc-build.worker.js +98 -0
- package/dist/workers/ngtsc-build.worker.js.map +1 -0
- package/dist/workers/{server.worker.d.ts → server-build.worker.d.ts} +39 -29
- package/dist/workers/server-build.worker.d.ts.map +1 -0
- package/dist/workers/server-build.worker.js +399 -0
- package/dist/workers/server-build.worker.js.map +1 -0
- package/dist/workers/server-runtime.worker.d.ts +3 -2
- package/dist/workers/server-runtime.worker.d.ts.map +1 -1
- package/dist/workers/server-runtime.worker.js +100 -95
- package/dist/workers/server-runtime.worker.js.map +1 -6
- package/dist/workers/vite-build.worker.d.ts +56 -0
- package/dist/workers/vite-build.worker.d.ts.map +1 -0
- package/dist/workers/vite-build.worker.js +167 -0
- package/dist/workers/vite-build.worker.js.map +1 -0
- package/package.json +10 -16
- package/src/commands/check.ts +21 -3
- package/src/commands/dev.ts +10 -8
- package/src/commands/lint.ts +1 -1
- package/src/commands/publish.ts +4 -0
- package/src/commands/typecheck.ts +89 -256
- package/src/commands/watch.ts +9 -8
- package/src/engines/NgtscEngine.ts +190 -0
- package/src/engines/ServerEsbuildEngine.ts +195 -0
- package/src/engines/TscEngine.ts +189 -0
- package/src/engines/ViteEngine.ts +203 -0
- package/src/engines/index.ts +49 -0
- package/src/engines/types.ts +79 -0
- package/src/index.ts +0 -3
- package/src/infra/ResultCollector.ts +1 -1
- package/src/orchestrators/BuildOrchestrator.ts +87 -157
- package/src/orchestrators/DevWatchOrchestrator.ts +573 -0
- package/src/sd-cli-entry.ts +13 -116
- package/src/sd-config.types.ts +2 -0
- package/src/utils/angular-build.ts +157 -0
- package/src/utils/concurrency.ts +43 -0
- package/src/utils/esbuild-config.ts +1 -122
- package/src/utils/ngtsc-build-core.ts +379 -0
- package/src/utils/output-path-rewriter.ts +82 -0
- package/src/utils/package-utils.ts +20 -0
- package/src/utils/scss-compiler.ts +58 -0
- package/src/utils/tsc-build.ts +175 -0
- package/src/utils/tsconfig.ts +27 -95
- package/src/utils/typecheck-non-package.ts +87 -0
- package/src/vitest-plugin.ts +118 -0
- package/src/workers/library-build.worker.ts +153 -0
- package/src/workers/ngtsc-build.worker.ts +146 -0
- package/src/workers/server-build.worker.ts +565 -0
- package/src/workers/server-runtime.worker.ts +17 -26
- package/src/workers/vite-build.worker.ts +252 -0
- package/tests/commands/check.spec.ts +276 -0
- package/tests/commands/dev.spec.ts +53 -0
- package/tests/commands/lint.spec.ts +243 -0
- package/tests/commands/publish.spec.ts +1159 -0
- package/tests/commands/typecheck.spec.ts +294 -0
- package/tests/commands/watch.spec.ts +53 -0
- package/tests/engines/engine-selection.spec.ts +247 -0
- package/tests/engines/ngtsc-engine.spec.ts +274 -0
- package/tests/engines/server-esbuild-engine.spec.ts +256 -0
- package/tests/engines/tsc-engine.spec.ts +213 -0
- package/tests/engines/vite-engine.spec.ts +358 -0
- package/tests/infra/result-collector.spec.ts +46 -0
- package/tests/infra/signal-handler.spec.ts +32 -0
- package/tests/infra/worker-manager.spec.ts +63 -0
- package/tests/orchestrators/build-orchestrator.spec.ts +772 -0
- package/tests/orchestrators/dev-watch-orchestrator.spec.ts +1173 -0
- package/tests/sd-cli-entry.spec.ts +49 -0
- package/tests/utils/angular-build.spec.ts +251 -0
- package/tests/utils/build-env.spec.ts +33 -0
- package/tests/utils/concurrency.spec.ts +65 -0
- package/tests/utils/copy-src.spec.ts +144 -0
- package/tests/utils/esbuild-config.spec.ts +186 -0
- package/tests/utils/external-modules.spec.ts +161 -0
- package/tests/utils/ngtsc-scss-refactor.spec.ts +66 -0
- package/tests/utils/output-path-rewriter.spec.ts +165 -0
- package/tests/utils/output-utils.spec.ts +104 -0
- package/tests/utils/package-utils.spec.ts +52 -0
- package/tests/utils/rebuild-manager.spec.ts +30 -27
- package/tests/utils/replace-deps.spec.ts +69 -0
- package/tests/utils/scss-compiler.spec.ts +131 -0
- package/tests/utils/sd-config.spec.ts +77 -0
- package/tests/utils/tsc-build.spec.ts +358 -0
- package/tests/utils/tsconfig-angular.spec.ts +71 -0
- package/tests/utils/typecheck-non-package.spec.ts +120 -0
- package/tests/utils/worker-events.spec.ts +155 -0
- package/tests/utils/worker-utils.spec.ts +43 -0
- package/tests/vitest-plugin-cwd.spec.ts +68 -0
- package/tests/vitest-plugin.spec.ts +103 -0
- package/tests/workers/library-build-worker.spec.ts +258 -0
- package/tests/workers/ngtsc-build-worker.spec.ts +187 -0
- package/tests/workers/server-build-worker.spec.ts +566 -0
- package/tests/workers/server-runtime-worker.spec.ts +251 -0
- package/README.md +0 -295
- package/dist/builders/BaseBuilder.d.ts +0 -88
- package/dist/builders/BaseBuilder.d.ts.map +0 -1
- package/dist/builders/BaseBuilder.js +0 -142
- package/dist/builders/BaseBuilder.js.map +0 -6
- package/dist/builders/DtsBuilder.d.ts +0 -22
- package/dist/builders/DtsBuilder.d.ts.map +0 -1
- package/dist/builders/DtsBuilder.js +0 -72
- package/dist/builders/DtsBuilder.js.map +0 -6
- package/dist/builders/LibraryBuilder.d.ts +0 -22
- package/dist/builders/LibraryBuilder.d.ts.map +0 -1
- package/dist/builders/LibraryBuilder.js +0 -85
- package/dist/builders/LibraryBuilder.js.map +0 -6
- package/dist/builders/types.d.ts +0 -55
- package/dist/builders/types.d.ts.map +0 -1
- package/dist/builders/types.js +0 -1
- package/dist/builders/types.js.map +0 -6
- package/dist/capacitor/capacitor.d.ts +0 -151
- package/dist/capacitor/capacitor.d.ts.map +0 -1
- package/dist/capacitor/capacitor.js +0 -694
- package/dist/capacitor/capacitor.js.map +0 -6
- package/dist/commands/device.d.ts +0 -22
- package/dist/commands/device.d.ts.map +0 -1
- package/dist/commands/device.js +0 -98
- package/dist/commands/device.js.map +0 -6
- package/dist/commands/init.d.ts +0 -14
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -72
- package/dist/commands/init.js.map +0 -6
- package/dist/electron/electron.d.ts +0 -84
- package/dist/electron/electron.d.ts.map +0 -1
- package/dist/electron/electron.js +0 -263
- package/dist/electron/electron.js.map +0 -6
- package/dist/orchestrators/DevOrchestrator.d.ts +0 -83
- package/dist/orchestrators/DevOrchestrator.d.ts.map +0 -1
- package/dist/orchestrators/DevOrchestrator.js +0 -540
- package/dist/orchestrators/DevOrchestrator.js.map +0 -6
- package/dist/orchestrators/WatchOrchestrator.d.ts +0 -57
- package/dist/orchestrators/WatchOrchestrator.d.ts.map +0 -1
- package/dist/orchestrators/WatchOrchestrator.js +0 -199
- package/dist/orchestrators/WatchOrchestrator.js.map +0 -6
- package/dist/utils/tailwind-config-deps.d.ts +0 -8
- package/dist/utils/tailwind-config-deps.d.ts.map +0 -1
- package/dist/utils/tailwind-config-deps.js +0 -82
- package/dist/utils/tailwind-config-deps.js.map +0 -6
- package/dist/utils/template.d.ts +0 -14
- package/dist/utils/template.d.ts.map +0 -1
- package/dist/utils/template.js +0 -33
- package/dist/utils/template.js.map +0 -6
- package/dist/utils/vite-config.d.ts +0 -35
- package/dist/utils/vite-config.d.ts.map +0 -1
- package/dist/utils/vite-config.js +0 -259
- package/dist/utils/vite-config.js.map +0 -6
- package/dist/workers/client.worker.d.ts +0 -83
- package/dist/workers/client.worker.d.ts.map +0 -1
- package/dist/workers/client.worker.js +0 -111
- package/dist/workers/client.worker.js.map +0 -6
- package/dist/workers/dts.worker.d.ts +0 -75
- package/dist/workers/dts.worker.d.ts.map +0 -1
- package/dist/workers/dts.worker.js +0 -270
- package/dist/workers/dts.worker.js.map +0 -6
- package/dist/workers/library.worker.d.ts +0 -75
- package/dist/workers/library.worker.d.ts.map +0 -1
- package/dist/workers/library.worker.js +0 -166
- package/dist/workers/library.worker.js.map +0 -6
- package/dist/workers/server.worker.d.ts.map +0 -1
- package/dist/workers/server.worker.js +0 -482
- package/dist/workers/server.worker.js.map +0 -6
- package/src/builders/BaseBuilder.ts +0 -218
- package/src/builders/DtsBuilder.ts +0 -92
- package/src/builders/LibraryBuilder.ts +0 -110
- package/src/builders/types.ts +0 -60
- package/src/capacitor/capacitor.ts +0 -931
- package/src/commands/device.ts +0 -140
- package/src/commands/init.ts +0 -113
- package/src/electron/electron.ts +0 -362
- package/src/orchestrators/DevOrchestrator.ts +0 -744
- package/src/orchestrators/WatchOrchestrator.ts +0 -277
- package/src/utils/tailwind-config-deps.ts +0 -98
- package/src/utils/template.ts +0 -56
- package/src/utils/vite-config.ts +0 -390
- package/src/workers/client.worker.ts +0 -250
- package/src/workers/dts.worker.ts +0 -453
- package/src/workers/library.worker.ts +0 -316
- package/src/workers/server.worker.ts +0 -734
- package/templates/init/.gitignore.hbs +0 -34
- package/templates/init/.npmrc.hbs +0 -1
- package/templates/init/.prettierignore +0 -1
- package/templates/init/.prettierrc.yaml +0 -12
- package/templates/init/eslint.config.ts +0 -15
- package/templates/init/mise.toml +0 -3
- package/templates/init/package.json.hbs +0 -32
- package/templates/init/packages/client-admin/index.html.hbs +0 -144
- package/templates/init/packages/client-admin/package.json.hbs +0 -27
- package/templates/init/packages/client-admin/public/assets/logo-landscape.png +0 -0
- package/templates/init/packages/client-admin/public/assets/logo.png +0 -0
- package/templates/init/packages/client-admin/public/favicon.ico +0 -0
- package/templates/init/packages/client-admin/src/App.tsx +0 -42
- package/templates/init/packages/client-admin/src/dev/DevDialog.tsx +0 -34
- package/templates/init/packages/client-admin/src/events/AuthChangeEvent.ts +0 -3
- package/templates/init/packages/client-admin/src/main.css +0 -4
- package/templates/init/packages/client-admin/src/main.tsx.hbs +0 -146
- package/templates/init/packages/client-admin/src/providers/AppServiceProvider.tsx.hbs +0 -103
- package/templates/init/packages/client-admin/src/providers/AppStructureProvider.tsx +0 -84
- package/templates/init/packages/client-admin/src/providers/AuthProvider.tsx.hbs +0 -96
- package/templates/init/packages/client-admin/src/providers/configureSharedData.ts.hbs +0 -67
- package/templates/init/packages/client-admin/src/views/auth/LoginView.tsx +0 -132
- package/templates/init/packages/client-admin/src/views/home/HomeView.tsx +0 -108
- package/templates/init/packages/client-admin/src/views/home/base/employee/EmployeeDetail.tsx.hbs +0 -243
- package/templates/init/packages/client-admin/src/views/home/base/employee/EmployeeSheet.tsx.hbs +0 -271
- package/templates/init/packages/client-admin/src/views/home/base/role-permission/RoleDetail.tsx.hbs +0 -146
- package/templates/init/packages/client-admin/src/views/home/base/role-permission/RolePermissionDetail.tsx.hbs +0 -121
- package/templates/init/packages/client-admin/src/views/home/base/role-permission/RolePermissionView.tsx +0 -52
- package/templates/init/packages/client-admin/src/views/home/base/role-permission/RoleSheet.tsx.hbs +0 -125
- package/templates/init/packages/client-admin/src/views/home/main/MainView.tsx.hbs +0 -13
- package/templates/init/packages/client-admin/src/views/home/my-info/MyInfoDetail.tsx.hbs +0 -241
- package/templates/init/packages/client-admin/src/views/home/system/system-log/SystemLogSheet.tsx.hbs +0 -169
- package/templates/init/packages/client-admin/src/views/not-found/NotFoundView.tsx +0 -15
- package/templates/init/packages/client-admin/tailwind.config.ts +0 -10
- package/templates/init/packages/db-main/package.json.hbs +0 -13
- package/templates/init/packages/db-main/src/MainDbContext.ts +0 -22
- package/templates/init/packages/db-main/src/dataLogExt.ts +0 -127
- package/templates/init/packages/db-main/src/index.ts +0 -14
- package/templates/init/packages/db-main/src/tables/base/Employee.ts +0 -24
- package/templates/init/packages/db-main/src/tables/base/EmployeeConfig.ts +0 -13
- package/templates/init/packages/db-main/src/tables/base/Role.ts +0 -9
- package/templates/init/packages/db-main/src/tables/base/RolePermission.ts +0 -13
- package/templates/init/packages/db-main/src/tables/system/_DataLog.ts +0 -19
- package/templates/init/packages/db-main/src/tables/system/_Log.ts +0 -16
- package/templates/init/packages/server/package.json.hbs +0 -20
- package/templates/init/packages/server/public-dev/dev//354/264/210/352/270/260/355/231/224.xlsx +0 -0
- package/templates/init/packages/server/src/index.ts +0 -4
- package/templates/init/packages/server/src/main.ts.hbs +0 -34
- package/templates/init/packages/server/src/services/AuthService.ts.hbs +0 -171
- package/templates/init/packages/server/src/services/DevService.ts.hbs +0 -94
- package/templates/init/packages/server/src/services/EmployeeService.ts.hbs +0 -122
- package/templates/init/packages/server/src/services/RoleService.ts.hbs +0 -59
- package/templates/init/pnpm-workspace.yaml +0 -15
- package/templates/init/sd.config.ts.hbs +0 -48
- package/templates/init/tsconfig.json.hbs +0 -39
- package/templates/init/vitest.config.ts +0 -36
- package/tests/capacitor-exclude.spec.ts +0 -78
- package/tests/capacitor.spec.ts +0 -49
- package/tests/copy-src.spec.ts +0 -50
- package/tests/electron-exclude.spec.ts +0 -61
- package/tests/get-compiler-options-for-package.spec.ts +0 -80
- package/tests/get-package-source-files.spec.ts +0 -139
- package/tests/get-types-from-package-json.spec.ts +0 -92
- package/tests/infra/ResultCollector.spec.ts +0 -30
- package/tests/infra/SignalHandler.spec.ts +0 -38
- package/tests/infra/WorkerManager.spec.ts +0 -63
- package/tests/load-ignore-patterns.spec.ts +0 -163
- package/tests/load-sd-config.spec.ts +0 -100
- package/tests/package-utils.spec.ts +0 -188
- package/tests/parse-root-tsconfig.spec.ts +0 -89
- package/tests/publish-config-narrowing.spec.ts +0 -20
- package/tests/replace-deps.spec.ts +0 -308
- package/tests/run-lint.spec.ts +0 -366
- package/tests/run-typecheck.spec.ts +0 -544
- package/tests/run-watch.spec.ts +0 -76
- package/tests/sd-cli.spec.ts +0 -265
- package/tests/sd-public-dev-plugin-mime.spec.ts +0 -19
- package/tests/tailwind-config-deps.spec.ts +0 -30
- package/tests/template.spec.ts +0 -70
- package/tests/vite-config-exclude.spec.ts +0 -35
- package/tests/vite-config-outdir.spec.ts +0 -38
- package/tests/write-changed-output-files.spec.ts +0 -97
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { Worker, type WorkerProxy } from "@simplysm/core-node";
|
|
2
|
+
import { consola } from "consola";
|
|
3
|
+
import type * as ServerBuildWorkerModule from "../workers/server-build.worker";
|
|
4
|
+
import type { BuildResult, ResultCollector } from "../infra/ResultCollector";
|
|
5
|
+
import type { RebuildManager } from "../utils/rebuild-manager";
|
|
6
|
+
import type { BuildEngine, BuildOutput, EngineResult, ServerPackageInfo } from "./types";
|
|
7
|
+
|
|
8
|
+
const logger = consola.withTag("sd:cli:engine:server");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* ServerEsbuildEngine options
|
|
12
|
+
*/
|
|
13
|
+
export interface ServerEsbuildEngineOptions {
|
|
14
|
+
cwd: string;
|
|
15
|
+
pkg: ServerPackageInfo;
|
|
16
|
+
/** ResultCollector for watch mode rebuild reporting */
|
|
17
|
+
resultCollector?: ResultCollector;
|
|
18
|
+
/** RebuildManager for watch mode batch coordination */
|
|
19
|
+
rebuildManager?: RebuildManager;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Esbuild-based build engine for Server packages
|
|
24
|
+
*
|
|
25
|
+
* Wraps a single server-build.worker that combines esbuild (JS bundle)
|
|
26
|
+
* + tsc (typecheck) in one Worker thread.
|
|
27
|
+
*/
|
|
28
|
+
export class ServerEsbuildEngine implements BuildEngine {
|
|
29
|
+
private readonly _cwd: string;
|
|
30
|
+
private readonly _pkg: ServerPackageInfo;
|
|
31
|
+
private readonly _resultCollector: ResultCollector | undefined;
|
|
32
|
+
private readonly _rebuildManager: RebuildManager | undefined;
|
|
33
|
+
|
|
34
|
+
private _worker: WorkerProxy<typeof ServerBuildWorkerModule> | undefined;
|
|
35
|
+
private _isWatchMode = false;
|
|
36
|
+
|
|
37
|
+
constructor(options: ServerEsbuildEngineOptions) {
|
|
38
|
+
this._cwd = options.cwd;
|
|
39
|
+
this._pkg = options.pkg;
|
|
40
|
+
this._resultCollector = options.resultCollector;
|
|
41
|
+
this._rebuildManager = options.rebuildManager;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* One-time build (production)
|
|
46
|
+
*/
|
|
47
|
+
async run(output: BuildOutput): Promise<EngineResult> {
|
|
48
|
+
this._createWorker();
|
|
49
|
+
|
|
50
|
+
const result = await this._worker!.build({
|
|
51
|
+
name: this._pkg.name,
|
|
52
|
+
cwd: this._cwd,
|
|
53
|
+
pkgDir: this._pkg.dir,
|
|
54
|
+
output,
|
|
55
|
+
env: this._pkg.config.env,
|
|
56
|
+
configs: this._pkg.config.configs,
|
|
57
|
+
externals: this._pkg.config.externals,
|
|
58
|
+
pm2: this._pkg.config.pm2,
|
|
59
|
+
packageManager: this._pkg.config.packageManager,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
return {
|
|
63
|
+
success: result.js.success && result.dts.success,
|
|
64
|
+
js: {
|
|
65
|
+
success: result.js.success,
|
|
66
|
+
errors: result.js.errors ?? [],
|
|
67
|
+
warnings: result.js.warnings ?? [],
|
|
68
|
+
},
|
|
69
|
+
dts: {
|
|
70
|
+
success: result.dts.success,
|
|
71
|
+
errors: result.dts.errors ?? [],
|
|
72
|
+
warnings: [],
|
|
73
|
+
diagnostics: result.dts.diagnostics,
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Start watch mode
|
|
80
|
+
* Promise resolves when initial build completes.
|
|
81
|
+
*/
|
|
82
|
+
async startWatch(output: BuildOutput): Promise<void> {
|
|
83
|
+
this._isWatchMode = true;
|
|
84
|
+
this._createWorker();
|
|
85
|
+
|
|
86
|
+
return new Promise<void>((resolve) => {
|
|
87
|
+
let isInitialBuild = true;
|
|
88
|
+
const workerKey = `${this._pkg.name}:build`;
|
|
89
|
+
|
|
90
|
+
this._worker!.on("buildStart", () => {
|
|
91
|
+
if (!isInitialBuild && this._rebuildManager != null) {
|
|
92
|
+
this._rebuildManager.registerBuild(workerKey, `${this._pkg.name} (server)`);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
this._worker!.on("build", (data) => {
|
|
97
|
+
const event = data;
|
|
98
|
+
|
|
99
|
+
if (event.js.warnings != null && event.js.warnings.length > 0) {
|
|
100
|
+
logger.warn(`${this._pkg.name}: ${event.js.warnings.join(", ")}`);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Report JS result
|
|
104
|
+
const buildResult: BuildResult = {
|
|
105
|
+
name: this._pkg.name,
|
|
106
|
+
target: "server",
|
|
107
|
+
type: "build",
|
|
108
|
+
status: event.js.success ? "success" : "error",
|
|
109
|
+
message: event.js.errors?.join("\n"),
|
|
110
|
+
};
|
|
111
|
+
this._resultCollector?.add(buildResult);
|
|
112
|
+
|
|
113
|
+
// Report DTS result
|
|
114
|
+
const dtsResult: BuildResult = {
|
|
115
|
+
name: this._pkg.name,
|
|
116
|
+
target: "server",
|
|
117
|
+
type: "dts",
|
|
118
|
+
status: event.dts.success ? "success" : "error",
|
|
119
|
+
message: event.dts.errors?.join("\n"),
|
|
120
|
+
};
|
|
121
|
+
this._resultCollector?.add(dtsResult);
|
|
122
|
+
|
|
123
|
+
if (isInitialBuild) {
|
|
124
|
+
isInitialBuild = false;
|
|
125
|
+
resolve();
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
this._worker!.on("error", (data) => {
|
|
130
|
+
const event = data as { message: string };
|
|
131
|
+
const result: BuildResult = {
|
|
132
|
+
name: this._pkg.name,
|
|
133
|
+
target: "server",
|
|
134
|
+
type: "build",
|
|
135
|
+
status: "error",
|
|
136
|
+
message: event.message,
|
|
137
|
+
};
|
|
138
|
+
this._resultCollector?.add(result);
|
|
139
|
+
|
|
140
|
+
if (isInitialBuild) {
|
|
141
|
+
isInitialBuild = false;
|
|
142
|
+
resolve();
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
this._worker!
|
|
147
|
+
.startWatch({
|
|
148
|
+
name: this._pkg.name,
|
|
149
|
+
cwd: this._cwd,
|
|
150
|
+
pkgDir: this._pkg.dir,
|
|
151
|
+
output,
|
|
152
|
+
env: this._pkg.config.env,
|
|
153
|
+
configs: this._pkg.config.configs,
|
|
154
|
+
externals: this._pkg.config.externals,
|
|
155
|
+
})
|
|
156
|
+
.catch(() => {
|
|
157
|
+
if (isInitialBuild) {
|
|
158
|
+
isInitialBuild = false;
|
|
159
|
+
resolve();
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Stop engine and clean up resources
|
|
167
|
+
*/
|
|
168
|
+
async stop(): Promise<void> {
|
|
169
|
+
const shutdownTimeout = 3000;
|
|
170
|
+
|
|
171
|
+
if (this._isWatchMode && this._worker != null) {
|
|
172
|
+
try {
|
|
173
|
+
await Promise.race([
|
|
174
|
+
this._worker.stopWatch(),
|
|
175
|
+
new Promise<void>((resolve) => setTimeout(resolve, shutdownTimeout)),
|
|
176
|
+
]);
|
|
177
|
+
} catch {
|
|
178
|
+
// Continue even if stopWatch fails
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (this._worker != null) {
|
|
183
|
+
await this._worker.terminate();
|
|
184
|
+
this._worker = undefined;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Create worker instance
|
|
190
|
+
*/
|
|
191
|
+
private _createWorker(): void {
|
|
192
|
+
const workerPath = import.meta.resolve("../workers/server-build.worker");
|
|
193
|
+
this._worker = Worker.create<typeof ServerBuildWorkerModule>(workerPath);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { Worker, type WorkerProxy } from "@simplysm/core-node";
|
|
2
|
+
import { consola } from "consola";
|
|
3
|
+
import type * as LibraryBuildWorkerModule from "../workers/library-build.worker";
|
|
4
|
+
import type { BuildResult, ResultCollector } from "../infra/ResultCollector";
|
|
5
|
+
import type { RebuildManager } from "../utils/rebuild-manager";
|
|
6
|
+
import type { BuildEngine, BuildOutput, BuildPackageInfo, EngineResult } from "./types";
|
|
7
|
+
|
|
8
|
+
const logger = consola.withTag("sd:cli:engine");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* TscEngine options
|
|
12
|
+
*/
|
|
13
|
+
export interface TscEngineOptions {
|
|
14
|
+
cwd: string;
|
|
15
|
+
pkg: BuildPackageInfo;
|
|
16
|
+
/** ResultCollector for watch mode rebuild reporting */
|
|
17
|
+
resultCollector?: ResultCollector;
|
|
18
|
+
/** RebuildManager for watch mode batch coordination */
|
|
19
|
+
rebuildManager?: RebuildManager;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* tsc-based build engine for Library packages (node/browser/neutral)
|
|
24
|
+
*
|
|
25
|
+
* Wraps a single library-build.worker that uses tsc for JS + DTS emit
|
|
26
|
+
* in one Worker thread.
|
|
27
|
+
*/
|
|
28
|
+
export class TscEngine implements BuildEngine {
|
|
29
|
+
private readonly _cwd: string;
|
|
30
|
+
private readonly _pkg: BuildPackageInfo;
|
|
31
|
+
private readonly _resultCollector: ResultCollector | undefined;
|
|
32
|
+
private readonly _rebuildManager: RebuildManager | undefined;
|
|
33
|
+
|
|
34
|
+
private _worker: WorkerProxy<typeof LibraryBuildWorkerModule> | undefined;
|
|
35
|
+
private _isWatchMode = false;
|
|
36
|
+
|
|
37
|
+
constructor(options: TscEngineOptions) {
|
|
38
|
+
this._cwd = options.cwd;
|
|
39
|
+
this._pkg = options.pkg;
|
|
40
|
+
this._resultCollector = options.resultCollector;
|
|
41
|
+
this._rebuildManager = options.rebuildManager;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* One-time build (production)
|
|
46
|
+
*/
|
|
47
|
+
async run(output: BuildOutput): Promise<EngineResult> {
|
|
48
|
+
this._createWorker();
|
|
49
|
+
|
|
50
|
+
const result = await this._worker!.build({
|
|
51
|
+
name: this._pkg.name,
|
|
52
|
+
config: this._pkg.config,
|
|
53
|
+
cwd: this._cwd,
|
|
54
|
+
pkgDir: this._pkg.dir,
|
|
55
|
+
output,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
success: result.js.success && result.dts.success,
|
|
60
|
+
js: {
|
|
61
|
+
success: result.js.success,
|
|
62
|
+
errors: result.js.errors ?? [],
|
|
63
|
+
warnings: result.js.warnings ?? [],
|
|
64
|
+
},
|
|
65
|
+
dts: {
|
|
66
|
+
success: result.dts.success,
|
|
67
|
+
errors: result.dts.errors ?? [],
|
|
68
|
+
warnings: [],
|
|
69
|
+
diagnostics: result.dts.diagnostics,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Start watch mode
|
|
76
|
+
* Promise resolves when initial build completes.
|
|
77
|
+
*/
|
|
78
|
+
async startWatch(output: BuildOutput): Promise<void> {
|
|
79
|
+
this._isWatchMode = true;
|
|
80
|
+
this._createWorker();
|
|
81
|
+
|
|
82
|
+
return new Promise<void>((resolve) => {
|
|
83
|
+
let isInitialBuild = true;
|
|
84
|
+
const workerKey = `${this._pkg.name}:build`;
|
|
85
|
+
|
|
86
|
+
this._worker!.on("buildStart", () => {
|
|
87
|
+
if (!isInitialBuild && this._rebuildManager != null) {
|
|
88
|
+
this._rebuildManager.registerBuild(workerKey, `${this._pkg.name} (${this._pkg.config.target})`);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
this._worker!.on("build", (data) => {
|
|
93
|
+
const event = data;
|
|
94
|
+
|
|
95
|
+
if (event.js.warnings != null && event.js.warnings.length > 0) {
|
|
96
|
+
logger.warn(`${this._pkg.name}: ${event.js.warnings.join(", ")}`);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Report JS result
|
|
100
|
+
const buildResult: BuildResult = {
|
|
101
|
+
name: this._pkg.name,
|
|
102
|
+
target: this._pkg.config.target,
|
|
103
|
+
type: "build",
|
|
104
|
+
status: event.js.success ? "success" : "error",
|
|
105
|
+
message: event.js.errors?.join("\n"),
|
|
106
|
+
};
|
|
107
|
+
this._resultCollector?.add(buildResult);
|
|
108
|
+
|
|
109
|
+
// Report DTS result
|
|
110
|
+
const dtsResult: BuildResult = {
|
|
111
|
+
name: this._pkg.name,
|
|
112
|
+
target: this._pkg.config.target,
|
|
113
|
+
type: "dts",
|
|
114
|
+
status: event.dts.success ? "success" : "error",
|
|
115
|
+
message: event.dts.errors?.join("\n"),
|
|
116
|
+
};
|
|
117
|
+
this._resultCollector?.add(dtsResult);
|
|
118
|
+
|
|
119
|
+
if (isInitialBuild) {
|
|
120
|
+
isInitialBuild = false;
|
|
121
|
+
resolve();
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
this._worker!.on("error", (data) => {
|
|
126
|
+
const event = data as { message: string };
|
|
127
|
+
const result: BuildResult = {
|
|
128
|
+
name: this._pkg.name,
|
|
129
|
+
target: this._pkg.config.target,
|
|
130
|
+
type: "build",
|
|
131
|
+
status: "error",
|
|
132
|
+
message: event.message,
|
|
133
|
+
};
|
|
134
|
+
this._resultCollector?.add(result);
|
|
135
|
+
|
|
136
|
+
if (isInitialBuild) {
|
|
137
|
+
isInitialBuild = false;
|
|
138
|
+
resolve();
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
this._worker!
|
|
143
|
+
.startWatch({
|
|
144
|
+
name: this._pkg.name,
|
|
145
|
+
config: this._pkg.config,
|
|
146
|
+
cwd: this._cwd,
|
|
147
|
+
pkgDir: this._pkg.dir,
|
|
148
|
+
output,
|
|
149
|
+
})
|
|
150
|
+
.catch(() => {
|
|
151
|
+
if (isInitialBuild) {
|
|
152
|
+
isInitialBuild = false;
|
|
153
|
+
resolve();
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Stop engine and clean up resources
|
|
161
|
+
*/
|
|
162
|
+
async stop(): Promise<void> {
|
|
163
|
+
const shutdownTimeout = 3000;
|
|
164
|
+
|
|
165
|
+
if (this._isWatchMode && this._worker != null) {
|
|
166
|
+
try {
|
|
167
|
+
await Promise.race([
|
|
168
|
+
this._worker.stopWatch(),
|
|
169
|
+
new Promise<void>((resolve) => setTimeout(resolve, shutdownTimeout)),
|
|
170
|
+
]);
|
|
171
|
+
} catch {
|
|
172
|
+
// Continue even if stopWatch fails
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (this._worker != null) {
|
|
177
|
+
await this._worker.terminate();
|
|
178
|
+
this._worker = undefined;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Create worker instance
|
|
184
|
+
*/
|
|
185
|
+
private _createWorker(): void {
|
|
186
|
+
const workerPath = import.meta.resolve("../workers/library-build.worker");
|
|
187
|
+
this._worker = Worker.create<typeof LibraryBuildWorkerModule>(workerPath);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { Worker, type WorkerProxy } from "@simplysm/core-node";
|
|
2
|
+
import { consola } from "consola";
|
|
3
|
+
import type * as ViteBuildWorkerModule from "../workers/vite-build.worker";
|
|
4
|
+
import type { BuildResult, ResultCollector } from "../infra/ResultCollector";
|
|
5
|
+
import type { RebuildManager } from "../utils/rebuild-manager";
|
|
6
|
+
import type { BuildEngine, BuildOutput, ClientPackageInfo, EngineResult } from "./types";
|
|
7
|
+
|
|
8
|
+
const logger = consola.withTag("sd:cli:engine:vite");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* ViteEngine options
|
|
12
|
+
*/
|
|
13
|
+
export interface ViteEngineOptions {
|
|
14
|
+
cwd: string;
|
|
15
|
+
pkg: ClientPackageInfo;
|
|
16
|
+
/** ResultCollector for watch mode rebuild reporting */
|
|
17
|
+
resultCollector?: ResultCollector;
|
|
18
|
+
/** RebuildManager for watch mode batch coordination */
|
|
19
|
+
rebuildManager?: RebuildManager;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Vite-based build engine for Angular Client packages
|
|
24
|
+
*
|
|
25
|
+
* Wraps a single vite-build.worker that uses Angular's buildApplicationInternal
|
|
26
|
+
* for production builds and serveWithVite for dev server.
|
|
27
|
+
*/
|
|
28
|
+
export class ViteEngine implements BuildEngine {
|
|
29
|
+
private readonly _cwd: string;
|
|
30
|
+
private readonly _pkg: ClientPackageInfo;
|
|
31
|
+
private readonly _resultCollector: ResultCollector | undefined;
|
|
32
|
+
private readonly _rebuildManager: RebuildManager | undefined;
|
|
33
|
+
|
|
34
|
+
private _worker: WorkerProxy<typeof ViteBuildWorkerModule> | undefined;
|
|
35
|
+
private _isWatchMode = false;
|
|
36
|
+
|
|
37
|
+
/** Dev server port (populated by serverReady event in watch mode) */
|
|
38
|
+
port: number | undefined;
|
|
39
|
+
|
|
40
|
+
constructor(options: ViteEngineOptions) {
|
|
41
|
+
this._cwd = options.cwd;
|
|
42
|
+
this._pkg = options.pkg;
|
|
43
|
+
this._resultCollector = options.resultCollector;
|
|
44
|
+
this._rebuildManager = options.rebuildManager;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* One-time build (production)
|
|
49
|
+
*/
|
|
50
|
+
async run(output: BuildOutput): Promise<EngineResult> {
|
|
51
|
+
this._createWorker();
|
|
52
|
+
|
|
53
|
+
const result = await this._worker!.build({
|
|
54
|
+
name: this._pkg.name,
|
|
55
|
+
cwd: this._cwd,
|
|
56
|
+
pkgDir: this._pkg.dir,
|
|
57
|
+
output,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
success: result.js.success,
|
|
62
|
+
js: {
|
|
63
|
+
success: result.js.success,
|
|
64
|
+
errors: result.js.errors ?? [],
|
|
65
|
+
warnings: result.js.warnings ?? [],
|
|
66
|
+
},
|
|
67
|
+
dts: {
|
|
68
|
+
success: result.dts.success,
|
|
69
|
+
errors: result.dts.errors ?? [],
|
|
70
|
+
warnings: [],
|
|
71
|
+
diagnostics: result.dts.diagnostics,
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Start watch mode (Vite dev server)
|
|
78
|
+
* Promise resolves when initial build completes.
|
|
79
|
+
*/
|
|
80
|
+
async startWatch(output: BuildOutput): Promise<void> {
|
|
81
|
+
this._isWatchMode = true;
|
|
82
|
+
this._createWorker();
|
|
83
|
+
|
|
84
|
+
return new Promise<void>((resolve) => {
|
|
85
|
+
let isInitialBuild = true;
|
|
86
|
+
const workerKey = `${this._pkg.name}:build`;
|
|
87
|
+
|
|
88
|
+
this._worker!.on("buildStart", () => {
|
|
89
|
+
if (!isInitialBuild && this._rebuildManager != null) {
|
|
90
|
+
this._rebuildManager.registerBuild(
|
|
91
|
+
workerKey,
|
|
92
|
+
`${this._pkg.name} (client)`,
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
this._worker!.on("build", (data) => {
|
|
98
|
+
const event = data;
|
|
99
|
+
|
|
100
|
+
if (event.js.warnings != null && event.js.warnings.length > 0) {
|
|
101
|
+
logger.warn(`${this._pkg.name}: ${event.js.warnings.join(", ")}`);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Report JS result
|
|
105
|
+
const buildResult: BuildResult = {
|
|
106
|
+
name: this._pkg.name,
|
|
107
|
+
target: "client",
|
|
108
|
+
type: "build",
|
|
109
|
+
status: event.js.success ? "success" : "error",
|
|
110
|
+
message: event.js.errors?.join("\n"),
|
|
111
|
+
};
|
|
112
|
+
this._resultCollector?.add(buildResult);
|
|
113
|
+
|
|
114
|
+
// Report DTS result (always success for client)
|
|
115
|
+
const dtsResult: BuildResult = {
|
|
116
|
+
name: this._pkg.name,
|
|
117
|
+
target: "client",
|
|
118
|
+
type: "dts",
|
|
119
|
+
status: event.dts.success ? "success" : "error",
|
|
120
|
+
message: event.dts.errors?.join("\n"),
|
|
121
|
+
};
|
|
122
|
+
this._resultCollector?.add(dtsResult);
|
|
123
|
+
|
|
124
|
+
if (isInitialBuild) {
|
|
125
|
+
isInitialBuild = false;
|
|
126
|
+
resolve();
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
this._worker!.on("error", (data) => {
|
|
131
|
+
const event = data as { message: string };
|
|
132
|
+
const result: BuildResult = {
|
|
133
|
+
name: this._pkg.name,
|
|
134
|
+
target: "client",
|
|
135
|
+
type: "build",
|
|
136
|
+
status: "error",
|
|
137
|
+
message: event.message,
|
|
138
|
+
};
|
|
139
|
+
this._resultCollector?.add(result);
|
|
140
|
+
|
|
141
|
+
if (isInitialBuild) {
|
|
142
|
+
isInitialBuild = false;
|
|
143
|
+
resolve();
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
this._worker!.on("serverReady", (data) => {
|
|
148
|
+
const event = data as { port: number };
|
|
149
|
+
this.port = event.port;
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
const port = typeof this._pkg.config.server === "number"
|
|
153
|
+
? this._pkg.config.server
|
|
154
|
+
: undefined;
|
|
155
|
+
|
|
156
|
+
this._worker!
|
|
157
|
+
.startWatch({
|
|
158
|
+
name: this._pkg.name,
|
|
159
|
+
cwd: this._cwd,
|
|
160
|
+
pkgDir: this._pkg.dir,
|
|
161
|
+
output,
|
|
162
|
+
port,
|
|
163
|
+
})
|
|
164
|
+
.catch(() => {
|
|
165
|
+
if (isInitialBuild) {
|
|
166
|
+
isInitialBuild = false;
|
|
167
|
+
resolve();
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Stop engine and clean up resources
|
|
175
|
+
*/
|
|
176
|
+
async stop(): Promise<void> {
|
|
177
|
+
const shutdownTimeout = 3000;
|
|
178
|
+
|
|
179
|
+
if (this._isWatchMode && this._worker != null) {
|
|
180
|
+
try {
|
|
181
|
+
await Promise.race([
|
|
182
|
+
this._worker.stopWatch(),
|
|
183
|
+
new Promise<void>((resolve) => setTimeout(resolve, shutdownTimeout)),
|
|
184
|
+
]);
|
|
185
|
+
} catch {
|
|
186
|
+
// Continue even if stopWatch fails
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (this._worker != null) {
|
|
191
|
+
await this._worker.terminate();
|
|
192
|
+
this._worker = undefined;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Create worker instance
|
|
198
|
+
*/
|
|
199
|
+
private _createWorker(): void {
|
|
200
|
+
const workerPath = import.meta.resolve("../workers/vite-build.worker");
|
|
201
|
+
this._worker = Worker.create<typeof ViteBuildWorkerModule>(workerPath);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ResultCollector } from "../infra/ResultCollector";
|
|
2
|
+
import type { RebuildManager } from "../utils/rebuild-manager";
|
|
3
|
+
import { hasAngularCompilerOptions } from "../utils/tsconfig";
|
|
4
|
+
import { NgtscEngine } from "./NgtscEngine";
|
|
5
|
+
import { ServerEsbuildEngine } from "./ServerEsbuildEngine";
|
|
6
|
+
import { TscEngine } from "./TscEngine";
|
|
7
|
+
import { ViteEngine } from "./ViteEngine";
|
|
8
|
+
import type { BuildEngine, BuildPackageInfo, ClientPackageInfo, ServerPackageInfo } from "./types";
|
|
9
|
+
|
|
10
|
+
export { NgtscEngine } from "./NgtscEngine";
|
|
11
|
+
export type { NgtscEngineOptions } from "./NgtscEngine";
|
|
12
|
+
export { ServerEsbuildEngine } from "./ServerEsbuildEngine";
|
|
13
|
+
export type { ServerEsbuildEngineOptions } from "./ServerEsbuildEngine";
|
|
14
|
+
export { TscEngine } from "./TscEngine";
|
|
15
|
+
export type { TscEngineOptions } from "./TscEngine";
|
|
16
|
+
export { ViteEngine } from "./ViteEngine";
|
|
17
|
+
export type { ViteEngineOptions } from "./ViteEngine";
|
|
18
|
+
export type { BuildEngine, BuildOutput, BuildPackageInfo, ClientPackageInfo, EngineResult, PackageInfo, ServerPackageInfo } from "./types";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Create a BuildEngine for the given package.
|
|
22
|
+
*
|
|
23
|
+
* Client packages use ViteEngine (Angular buildApplicationInternal / serveWithVite).
|
|
24
|
+
* Server packages use ServerEsbuildEngine.
|
|
25
|
+
* Angular Library packages (detected by angularCompilerOptions in tsconfig.json) use NgtscEngine.
|
|
26
|
+
* Other Library packages (node/browser/neutral) use TscEngine.
|
|
27
|
+
*/
|
|
28
|
+
export function createBuildEngine(
|
|
29
|
+
pkg: BuildPackageInfo | ServerPackageInfo | ClientPackageInfo,
|
|
30
|
+
options: {
|
|
31
|
+
cwd: string;
|
|
32
|
+
resultCollector?: ResultCollector;
|
|
33
|
+
rebuildManager?: RebuildManager;
|
|
34
|
+
},
|
|
35
|
+
): BuildEngine {
|
|
36
|
+
if (pkg.config.target === "client") {
|
|
37
|
+
return new ViteEngine({ ...options, pkg: pkg as ClientPackageInfo });
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (pkg.config.target === "server") {
|
|
41
|
+
return new ServerEsbuildEngine({ ...options, pkg: pkg as ServerPackageInfo });
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (hasAngularCompilerOptions(pkg.dir)) {
|
|
45
|
+
return new NgtscEngine({ ...options, pkg: pkg as BuildPackageInfo });
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return new TscEngine({ ...options, pkg: pkg as BuildPackageInfo });
|
|
49
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { SdBuildPackageConfig, SdClientPackageConfig, SdPackageConfig, SdServerPackageConfig } from "../sd-config.types";
|
|
2
|
+
import type { SerializedDiagnostic } from "../utils/typecheck-serialization";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Package information
|
|
6
|
+
*/
|
|
7
|
+
export interface PackageInfo {
|
|
8
|
+
name: string;
|
|
9
|
+
dir: string;
|
|
10
|
+
config: SdPackageConfig;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* PackageInfo narrowed for build packages (node/browser/neutral)
|
|
15
|
+
*/
|
|
16
|
+
export type BuildPackageInfo = PackageInfo & { config: SdBuildPackageConfig };
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* PackageInfo narrowed for server packages
|
|
20
|
+
*/
|
|
21
|
+
export type ServerPackageInfo = PackageInfo & { config: SdServerPackageConfig };
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* PackageInfo narrowed for client packages
|
|
25
|
+
*/
|
|
26
|
+
export type ClientPackageInfo = PackageInfo & { config: SdClientPackageConfig };
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Build output control flags
|
|
30
|
+
*/
|
|
31
|
+
export interface BuildOutput {
|
|
32
|
+
js: boolean;
|
|
33
|
+
dts: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* BuildEngine.run() return value
|
|
38
|
+
*/
|
|
39
|
+
export interface EngineResult {
|
|
40
|
+
success: boolean;
|
|
41
|
+
js: {
|
|
42
|
+
success: boolean;
|
|
43
|
+
errors: string[];
|
|
44
|
+
warnings: string[];
|
|
45
|
+
};
|
|
46
|
+
dts: {
|
|
47
|
+
success: boolean;
|
|
48
|
+
errors: string[];
|
|
49
|
+
warnings: string[];
|
|
50
|
+
diagnostics: SerializedDiagnostic[];
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Build engine interface
|
|
56
|
+
*
|
|
57
|
+
* Common contract for all build engines.
|
|
58
|
+
* typecheck (diagnostics) is always included — not optional.
|
|
59
|
+
*/
|
|
60
|
+
export interface BuildEngine {
|
|
61
|
+
/**
|
|
62
|
+
* One-time build (for production builds)
|
|
63
|
+
* Creates workers, runs build, returns combined result.
|
|
64
|
+
* Call stop() after to clean up resources.
|
|
65
|
+
*/
|
|
66
|
+
run(output: BuildOutput): Promise<EngineResult>;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Start watch mode
|
|
70
|
+
* Promise resolves when initial build is complete.
|
|
71
|
+
* Subsequent rebuilds are reported via injected ResultCollector.
|
|
72
|
+
*/
|
|
73
|
+
startWatch(output: BuildOutput): Promise<void>;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Stop engine and clean up resources (workers, esbuild contexts)
|
|
77
|
+
*/
|
|
78
|
+
stop(): Promise<void>;
|
|
79
|
+
}
|