@simplysm/sd-cli 12.16.27 → 13.0.0-beta.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +529 -0
- package/dist/builders/BaseBuilder.js +86 -0
- package/dist/builders/BaseBuilder.js.map +7 -0
- package/dist/builders/DtsBuilder.js +109 -0
- package/dist/builders/DtsBuilder.js.map +7 -0
- package/dist/builders/LibraryBuilder.js +122 -0
- package/dist/builders/LibraryBuilder.js.map +7 -0
- package/dist/builders/index.js +9 -0
- package/dist/builders/index.js.map +7 -0
- package/dist/builders/types.js +1 -0
- package/dist/builders/types.js.map +7 -0
- package/dist/capacitor/capacitor.js +619 -0
- package/dist/capacitor/capacitor.js.map +7 -0
- package/dist/commands/add-client.js +83 -0
- package/dist/commands/add-client.js.map +7 -0
- package/dist/commands/add-server.js +91 -0
- package/dist/commands/add-server.js.map +7 -0
- package/dist/commands/build.js +310 -0
- package/dist/commands/build.js.map +7 -0
- package/dist/commands/dev.js +426 -0
- package/dist/commands/dev.js.map +7 -0
- package/dist/commands/device.js +107 -0
- package/dist/commands/device.js.map +7 -0
- package/dist/commands/init.js +58 -0
- package/dist/commands/init.js.map +7 -0
- package/dist/commands/lint.js +138 -0
- package/dist/commands/lint.js.map +7 -0
- package/dist/commands/publish.js +401 -0
- package/dist/commands/publish.js.map +7 -0
- package/dist/commands/typecheck.js +197 -0
- package/dist/commands/typecheck.js.map +7 -0
- package/dist/commands/watch.js +19 -0
- package/dist/commands/watch.js.map +7 -0
- package/dist/core-common/src/common.types.d.ts +74 -0
- package/dist/core-common/src/common.types.d.ts.map +1 -0
- package/dist/core-common/src/env.d.ts +6 -0
- package/dist/core-common/src/env.d.ts.map +1 -0
- package/dist/core-common/src/errors/argument-error.d.ts +25 -0
- package/dist/core-common/src/errors/argument-error.d.ts.map +1 -0
- package/dist/core-common/src/errors/not-implemented-error.d.ts +29 -0
- package/dist/core-common/src/errors/not-implemented-error.d.ts.map +1 -0
- package/dist/core-common/src/errors/sd-error.d.ts +27 -0
- package/dist/core-common/src/errors/sd-error.d.ts.map +1 -0
- package/dist/core-common/src/errors/timeout-error.d.ts +31 -0
- package/dist/core-common/src/errors/timeout-error.d.ts.map +1 -0
- package/dist/core-common/src/extensions/arr-ext.d.ts +15 -0
- package/dist/core-common/src/extensions/arr-ext.d.ts.map +1 -0
- package/dist/core-common/src/extensions/arr-ext.helpers.d.ts +19 -0
- package/dist/core-common/src/extensions/arr-ext.helpers.d.ts.map +1 -0
- package/dist/core-common/src/extensions/arr-ext.types.d.ts +215 -0
- package/dist/core-common/src/extensions/arr-ext.types.d.ts.map +1 -0
- package/dist/core-common/src/extensions/map-ext.d.ts +57 -0
- package/dist/core-common/src/extensions/map-ext.d.ts.map +1 -0
- package/dist/core-common/src/extensions/set-ext.d.ts +36 -0
- package/dist/core-common/src/extensions/set-ext.d.ts.map +1 -0
- package/dist/core-common/src/features/debounce-queue.d.ts +53 -0
- package/dist/core-common/src/features/debounce-queue.d.ts.map +1 -0
- package/dist/core-common/src/features/event-emitter.d.ts +66 -0
- package/dist/core-common/src/features/event-emitter.d.ts.map +1 -0
- package/dist/core-common/src/features/serial-queue.d.ts +47 -0
- package/dist/core-common/src/features/serial-queue.d.ts.map +1 -0
- package/dist/core-common/src/index.d.ts +32 -0
- package/dist/core-common/src/index.d.ts.map +1 -0
- package/dist/core-common/src/types/date-only.d.ts +152 -0
- package/dist/core-common/src/types/date-only.d.ts.map +1 -0
- package/dist/core-common/src/types/date-time.d.ts +96 -0
- package/dist/core-common/src/types/date-time.d.ts.map +1 -0
- package/dist/core-common/src/types/lazy-gc-map.d.ts +80 -0
- package/dist/core-common/src/types/lazy-gc-map.d.ts.map +1 -0
- package/dist/core-common/src/types/time.d.ts +68 -0
- package/dist/core-common/src/types/time.d.ts.map +1 -0
- package/dist/core-common/src/types/uuid.d.ts +35 -0
- package/dist/core-common/src/types/uuid.d.ts.map +1 -0
- package/dist/core-common/src/utils/bytes.d.ts +51 -0
- package/dist/core-common/src/utils/bytes.d.ts.map +1 -0
- package/dist/core-common/src/utils/date-format.d.ts +90 -0
- package/dist/core-common/src/utils/date-format.d.ts.map +1 -0
- package/dist/core-common/src/utils/json.d.ts +34 -0
- package/dist/core-common/src/utils/json.d.ts.map +1 -0
- package/dist/core-common/src/utils/num.d.ts +60 -0
- package/dist/core-common/src/utils/num.d.ts.map +1 -0
- package/dist/core-common/src/utils/obj.d.ts +258 -0
- package/dist/core-common/src/utils/obj.d.ts.map +1 -0
- package/dist/core-common/src/utils/path.d.ts +23 -0
- package/dist/core-common/src/utils/path.d.ts.map +1 -0
- package/dist/core-common/src/utils/primitive.d.ts +18 -0
- package/dist/core-common/src/utils/primitive.d.ts.map +1 -0
- package/dist/core-common/src/utils/str.d.ts +103 -0
- package/dist/core-common/src/utils/str.d.ts.map +1 -0
- package/dist/core-common/src/utils/template-strings.d.ts +84 -0
- package/dist/core-common/src/utils/template-strings.d.ts.map +1 -0
- package/dist/core-common/src/utils/transferable.d.ts +47 -0
- package/dist/core-common/src/utils/transferable.d.ts.map +1 -0
- package/dist/core-common/src/utils/wait.d.ts +19 -0
- package/dist/core-common/src/utils/wait.d.ts.map +1 -0
- package/dist/core-common/src/utils/xml.d.ts +36 -0
- package/dist/core-common/src/utils/xml.d.ts.map +1 -0
- package/dist/core-common/src/zip/sd-zip.d.ts +80 -0
- package/dist/core-common/src/zip/sd-zip.d.ts.map +1 -0
- package/dist/core-node/src/features/fs-watcher.d.ts +70 -0
- package/dist/core-node/src/features/fs-watcher.d.ts.map +1 -0
- package/dist/core-node/src/index.d.ts +7 -0
- package/dist/core-node/src/index.d.ts.map +1 -0
- package/dist/core-node/src/utils/fs.d.ts +197 -0
- package/dist/core-node/src/utils/fs.d.ts.map +1 -0
- package/dist/core-node/src/utils/path.d.ts +75 -0
- package/dist/core-node/src/utils/path.d.ts.map +1 -0
- package/dist/core-node/src/worker/create-worker.d.ts +23 -0
- package/dist/core-node/src/worker/create-worker.d.ts.map +1 -0
- package/dist/core-node/src/worker/types.d.ts +67 -0
- package/dist/core-node/src/worker/types.d.ts.map +1 -0
- package/dist/core-node/src/worker/worker.d.ts +27 -0
- package/dist/core-node/src/worker/worker.d.ts.map +1 -0
- package/dist/electron/electron.js +242 -0
- package/dist/electron/electron.js.map +7 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +7 -0
- package/dist/infra/ResultCollector.js +59 -0
- package/dist/infra/ResultCollector.js.map +7 -0
- package/dist/infra/SignalHandler.js +44 -0
- package/dist/infra/SignalHandler.js.map +7 -0
- package/dist/infra/WorkerManager.js +56 -0
- package/dist/infra/WorkerManager.js.map +7 -0
- package/dist/infra/index.js +9 -0
- package/dist/infra/index.js.map +7 -0
- package/dist/orchestrators/WatchOrchestrator.js +135 -0
- package/dist/orchestrators/WatchOrchestrator.js.map +7 -0
- package/dist/orchestrators/index.js +5 -0
- package/dist/orchestrators/index.js.map +7 -0
- package/dist/sd-cli/src/builders/BaseBuilder.d.ts +77 -0
- package/dist/sd-cli/src/builders/BaseBuilder.d.ts.map +1 -0
- package/dist/sd-cli/src/builders/DtsBuilder.d.ts +22 -0
- package/dist/sd-cli/src/builders/DtsBuilder.d.ts.map +1 -0
- package/dist/sd-cli/src/builders/LibraryBuilder.d.ts +22 -0
- package/dist/sd-cli/src/builders/LibraryBuilder.d.ts.map +1 -0
- package/dist/sd-cli/src/builders/index.d.ts +5 -0
- package/dist/sd-cli/src/builders/index.d.ts.map +1 -0
- package/dist/sd-cli/src/builders/types.d.ts +49 -0
- package/dist/sd-cli/src/builders/types.d.ts.map +1 -0
- package/dist/sd-cli/src/capacitor/capacitor.d.ts +131 -0
- package/dist/sd-cli/src/capacitor/capacitor.d.ts.map +1 -0
- package/dist/sd-cli/src/commands/add-client.d.ts +18 -0
- package/dist/sd-cli/src/commands/add-client.d.ts.map +1 -0
- package/dist/sd-cli/src/commands/add-server.d.ts +18 -0
- package/dist/sd-cli/src/commands/add-server.d.ts.map +1 -0
- package/dist/sd-cli/src/commands/build.d.ts +25 -0
- package/dist/sd-cli/src/commands/build.d.ts.map +1 -0
- package/dist/sd-cli/src/commands/dev.d.ts +23 -0
- package/dist/sd-cli/src/commands/dev.d.ts.map +1 -0
- package/dist/sd-cli/src/commands/device.d.ts +22 -0
- package/dist/sd-cli/src/commands/device.d.ts.map +1 -0
- package/dist/sd-cli/src/commands/init.d.ts +15 -0
- package/dist/sd-cli/src/commands/init.d.ts.map +1 -0
- package/dist/sd-cli/src/commands/lint.d.ts +31 -0
- package/dist/sd-cli/src/commands/lint.d.ts.map +1 -0
- package/dist/sd-cli/src/commands/publish.d.ts +27 -0
- package/dist/sd-cli/src/commands/publish.d.ts.map +1 -0
- package/dist/sd-cli/src/commands/typecheck.d.ts +39 -0
- package/dist/sd-cli/src/commands/typecheck.d.ts.map +1 -0
- package/dist/sd-cli/src/commands/watch.d.ts +20 -0
- package/dist/sd-cli/src/commands/watch.d.ts.map +1 -0
- package/dist/sd-cli/src/electron/electron.d.ts +79 -0
- package/dist/sd-cli/src/electron/electron.d.ts.map +1 -0
- package/dist/sd-cli/src/index.d.ts +2 -0
- package/dist/sd-cli/src/index.d.ts.map +1 -0
- package/dist/sd-cli/src/infra/ResultCollector.d.ts +56 -0
- package/dist/sd-cli/src/infra/ResultCollector.d.ts.map +1 -0
- package/dist/sd-cli/src/infra/SignalHandler.d.ts +26 -0
- package/dist/sd-cli/src/infra/SignalHandler.d.ts.map +1 -0
- package/dist/sd-cli/src/infra/WorkerManager.d.ts +40 -0
- package/dist/sd-cli/src/infra/WorkerManager.d.ts.map +1 -0
- package/dist/sd-cli/src/infra/index.d.ts +4 -0
- package/dist/sd-cli/src/infra/index.d.ts.map +1 -0
- package/dist/sd-cli/src/orchestrators/WatchOrchestrator.d.ts +48 -0
- package/dist/sd-cli/src/orchestrators/WatchOrchestrator.d.ts.map +1 -0
- package/dist/sd-cli/src/orchestrators/index.d.ts +2 -0
- package/dist/sd-cli/src/orchestrators/index.d.ts.map +1 -0
- package/dist/sd-cli/src/sd-cli.d.ts +9 -0
- package/dist/sd-cli/src/sd-cli.d.ts.map +1 -0
- package/dist/sd-cli/src/sd-config.types.d.ts +222 -0
- package/dist/sd-cli/src/sd-config.types.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/build-env.d.ts +5 -0
- package/dist/sd-cli/src/utils/build-env.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/config-editor.d.ts +17 -0
- package/dist/sd-cli/src/utils/config-editor.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/esbuild-config.d.ts +49 -0
- package/dist/sd-cli/src/utils/esbuild-config.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/listr-manager.d.ts +37 -0
- package/dist/sd-cli/src/utils/listr-manager.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/output-utils.d.ts +21 -0
- package/dist/sd-cli/src/utils/output-utils.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/package-utils.d.ts +29 -0
- package/dist/sd-cli/src/utils/package-utils.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/sd-config.d.ts +12 -0
- package/dist/sd-cli/src/utils/sd-config.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/spawn.d.ts +26 -0
- package/dist/sd-cli/src/utils/spawn.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/tailwind-config-deps.d.ts +8 -0
- package/dist/sd-cli/src/utils/tailwind-config-deps.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/template.d.ts +14 -0
- package/dist/sd-cli/src/utils/template.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/tsconfig.d.ts +35 -0
- package/dist/sd-cli/src/utils/tsconfig.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/typecheck-serialization.d.ts +28 -0
- package/dist/sd-cli/src/utils/typecheck-serialization.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/vite-config.d.ts +25 -0
- package/dist/sd-cli/src/utils/vite-config.d.ts.map +1 -0
- package/dist/sd-cli/src/utils/worker-events.d.ts +53 -0
- package/dist/sd-cli/src/utils/worker-events.d.ts.map +1 -0
- package/dist/sd-cli/src/workers/client.worker.d.ts +82 -0
- package/dist/sd-cli/src/workers/client.worker.d.ts.map +1 -0
- package/dist/sd-cli/src/workers/dts.worker.d.ts +73 -0
- package/dist/sd-cli/src/workers/dts.worker.d.ts.map +1 -0
- package/dist/sd-cli/src/workers/library.worker.d.ts +73 -0
- package/dist/sd-cli/src/workers/library.worker.d.ts.map +1 -0
- package/dist/sd-cli/src/workers/server-runtime.worker.d.ts +40 -0
- package/dist/sd-cli/src/workers/server-runtime.worker.d.ts.map +1 -0
- package/dist/sd-cli/src/workers/server.worker.d.ts +76 -0
- package/dist/sd-cli/src/workers/server.worker.d.ts.map +1 -0
- package/dist/sd-cli.js +239 -76
- package/dist/sd-cli.js.map +7 -0
- package/dist/sd-config.types.js +1 -0
- package/dist/sd-config.types.js.map +7 -0
- package/dist/storage/src/clients/ftp-storage-client.d.ts +56 -0
- package/dist/storage/src/clients/ftp-storage-client.d.ts.map +1 -0
- package/dist/storage/src/clients/sftp-storage-client.d.ts +48 -0
- package/dist/storage/src/clients/sftp-storage-client.d.ts.map +1 -0
- package/dist/storage/src/index.d.ts +7 -0
- package/dist/storage/src/index.d.ts.map +1 -0
- package/dist/storage/src/storage-factory.d.ts +20 -0
- package/dist/storage/src/storage-factory.d.ts.map +1 -0
- package/dist/storage/src/types/storage-conn-config.d.ts +7 -0
- package/dist/storage/src/types/storage-conn-config.d.ts.map +1 -0
- package/dist/storage/src/types/storage-type.d.ts +2 -0
- package/dist/storage/src/types/storage-type.d.ts.map +1 -0
- package/dist/storage/src/types/storage.d.ts +19 -0
- package/dist/storage/src/types/storage.d.ts.map +1 -0
- package/dist/utils/build-env.js +12 -0
- package/dist/utils/build-env.js.map +7 -0
- package/dist/utils/config-editor.js +77 -0
- package/dist/utils/config-editor.js.map +7 -0
- package/dist/utils/esbuild-config.js +44 -0
- package/dist/utils/esbuild-config.js.map +7 -0
- package/dist/utils/listr-manager.js +59 -0
- package/dist/utils/listr-manager.js.map +7 -0
- package/dist/utils/output-utils.js +40 -0
- package/dist/utils/output-utils.js.map +7 -0
- package/dist/utils/package-utils.js +28 -0
- package/dist/utils/package-utils.js.map +7 -0
- package/dist/utils/sd-config.js +24 -0
- package/dist/utils/sd-config.js.map +7 -0
- package/dist/utils/spawn.js +49 -0
- package/dist/utils/spawn.js.map +7 -0
- package/dist/utils/tailwind-config-deps.js +80 -0
- package/dist/utils/tailwind-config-deps.js.map +7 -0
- package/dist/utils/template.js +28 -0
- package/dist/utils/template.js.map +7 -0
- package/dist/utils/tsconfig.js +62 -0
- package/dist/utils/tsconfig.js.map +7 -0
- package/dist/utils/typecheck-serialization.js +46 -0
- package/dist/utils/typecheck-serialization.js.map +7 -0
- package/dist/utils/vite-config.js +108 -0
- package/dist/utils/vite-config.js.map +7 -0
- package/dist/utils/worker-events.js +38 -0
- package/dist/utils/worker-events.js.map +7 -0
- package/dist/workers/client.worker.js +94 -0
- package/dist/workers/client.worker.js.map +7 -0
- package/dist/workers/dts.worker.js +210 -0
- package/dist/workers/dts.worker.js.map +7 -0
- package/dist/workers/library.worker.js +118 -0
- package/dist/workers/library.worker.js.map +7 -0
- package/dist/workers/server-runtime.worker.js +85 -0
- package/dist/workers/server-runtime.worker.js.map +7 -0
- package/dist/workers/server.worker.js +114 -42
- package/dist/workers/server.worker.js.map +7 -0
- package/package.json +32 -29
- package/dist/entry/SdCliAiCommand.d.ts +0 -3
- package/dist/entry/SdCliAiCommand.js +0 -91
- package/dist/entry/SdCliCapacitor.d.ts +0 -35
- package/dist/entry/SdCliCapacitor.js +0 -565
- package/dist/entry/SdCliCordova.d.ts +0 -49
- package/dist/entry/SdCliCordova.js +0 -394
- package/dist/entry/SdCliElectron.d.ts +0 -22
- package/dist/entry/SdCliElectron.js +0 -128
- package/dist/entry/SdCliLocalUpdate.d.ts +0 -11
- package/dist/entry/SdCliLocalUpdate.js +0 -83
- package/dist/entry/SdCliPostInstall.d.ts +0 -3
- package/dist/entry/SdCliPostInstall.js +0 -48
- package/dist/entry/SdCliProject.d.ts +0 -24
- package/dist/entry/SdCliProject.js +0 -336
- package/dist/pkg-builders/SdBuildRunnerBase.d.ts +0 -14
- package/dist/pkg-builders/SdBuildRunnerBase.js +0 -22
- package/dist/pkg-builders/SdProjectBuildRunner.d.ts +0 -25
- package/dist/pkg-builders/SdProjectBuildRunner.js +0 -264
- package/dist/pkg-builders/client/SdCliNgRoutesFileGenerator.d.ts +0 -9
- package/dist/pkg-builders/client/SdCliNgRoutesFileGenerator.js +0 -89
- package/dist/pkg-builders/client/SdClientBuildRunner.d.ts +0 -10
- package/dist/pkg-builders/client/SdClientBuildRunner.js +0 -113
- package/dist/pkg-builders/client/SdNgBundler.d.ts +0 -38
- package/dist/pkg-builders/client/SdNgBundler.js +0 -525
- package/dist/pkg-builders/client/SdNgBundlerContext.d.ts +0 -25
- package/dist/pkg-builders/client/SdNgBundlerContext.js +0 -104
- package/dist/pkg-builders/client/createSdNgPlugin.d.ts +0 -5
- package/dist/pkg-builders/client/createSdNgPlugin.js +0 -133
- package/dist/pkg-builders/commons/SdWorkerPathPlugin.d.ts +0 -2
- package/dist/pkg-builders/commons/SdWorkerPathPlugin.js +0 -91
- package/dist/pkg-builders/lib/SdCliDbContextFileGenerator.d.ts +0 -9
- package/dist/pkg-builders/lib/SdCliDbContextFileGenerator.js +0 -138
- package/dist/pkg-builders/lib/SdCliIndexFileGenerator.d.ts +0 -11
- package/dist/pkg-builders/lib/SdCliIndexFileGenerator.js +0 -79
- package/dist/pkg-builders/lib/SdJsLibBuildRunner.d.ts +0 -8
- package/dist/pkg-builders/lib/SdJsLibBuildRunner.js +0 -44
- package/dist/pkg-builders/lib/SdTsLibBuildRunner.d.ts +0 -8
- package/dist/pkg-builders/lib/SdTsLibBuildRunner.js +0 -34
- package/dist/pkg-builders/lib/SdTsLibBuilder.d.ts +0 -10
- package/dist/pkg-builders/lib/SdTsLibBuilder.js +0 -54
- package/dist/pkg-builders/server/SdServerBuildRunner.d.ts +0 -10
- package/dist/pkg-builders/server/SdServerBuildRunner.js +0 -228
- package/dist/pkg-builders/server/SdServerBundler.d.ts +0 -17
- package/dist/pkg-builders/server/SdServerBundler.js +0 -174
- package/dist/pkg-builders/server/createSdServerPlugin.d.ts +0 -5
- package/dist/pkg-builders/server/createSdServerPlugin.js +0 -53
- package/dist/sd-cli-entry.d.ts +0 -2
- package/dist/sd-cli-entry.js +0 -230
- package/dist/sd-cli.d.ts +0 -2
- package/dist/ts-compiler/ScopePathSet.d.ts +0 -7
- package/dist/ts-compiler/ScopePathSet.js +0 -12
- package/dist/ts-compiler/SdDepAnalyzer.d.ts +0 -15
- package/dist/ts-compiler/SdDepAnalyzer.js +0 -299
- package/dist/ts-compiler/SdDepCache.d.ts +0 -77
- package/dist/ts-compiler/SdDepCache.js +0 -248
- package/dist/ts-compiler/SdStyleBundler.d.ts +0 -23
- package/dist/ts-compiler/SdStyleBundler.js +0 -131
- package/dist/ts-compiler/SdTsCompiler.d.ts +0 -29
- package/dist/ts-compiler/SdTsCompiler.js +0 -420
- package/dist/types/build/ISdBuildMessage.d.ts +0 -10
- package/dist/types/build/ISdBuildMessage.js +0 -1
- package/dist/types/build/ISdBuildResult.d.ts +0 -8
- package/dist/types/build/ISdBuildResult.js +0 -1
- package/dist/types/build/ISdTsCompilerOptions.d.ts +0 -10
- package/dist/types/build/ISdTsCompilerOptions.js +0 -1
- package/dist/types/build/ISdTsCompilerResult.d.ts +0 -14
- package/dist/types/build/ISdTsCompilerResult.js +0 -1
- package/dist/types/build/TStylesheetBundlingResult.d.ts +0 -12
- package/dist/types/build/TStylesheetBundlingResult.js +0 -1
- package/dist/types/common-config/INpmConfig.d.ts +0 -17
- package/dist/types/common-config/INpmConfig.js +0 -1
- package/dist/types/common-config/ITsConfig.d.ts +0 -7
- package/dist/types/common-config/ITsConfig.js +0 -1
- package/dist/types/config/ISdProjectConfig.d.ts +0 -144
- package/dist/types/config/ISdProjectConfig.js +0 -1
- package/dist/types/plugin/ISdCliNgPluginResultCache.d.ts +0 -8
- package/dist/types/plugin/ISdCliNgPluginResultCache.js +0 -1
- package/dist/types/plugin/ISdCliServerPluginResultCache.d.ts +0 -8
- package/dist/types/plugin/ISdCliServerPluginResultCache.js +0 -1
- package/dist/types/worker/ISdBuildRunnerWorkerType.d.ts +0 -20
- package/dist/types/worker/ISdBuildRunnerWorkerType.js +0 -1
- package/dist/types/worker/IServerWorkerType.d.ts +0 -17
- package/dist/types/worker/IServerWorkerType.js +0 -1
- package/dist/utils/SdCliConvertMessageUtils.d.ts +0 -21
- package/dist/utils/SdCliConvertMessageUtils.js +0 -138
- package/dist/utils/SdCliPerformanceTimer.d.ts +0 -10
- package/dist/utils/SdCliPerformanceTimer.js +0 -50
- package/dist/utils/loadProjConfAsync.d.ts +0 -5
- package/dist/utils/loadProjConfAsync.js +0 -7
- package/dist/workers/build-runner.worker.d.ts +0 -1
- package/dist/workers/build-runner.worker.js +0 -37
- package/dist/workers/server.worker.d.ts +0 -1
- package/lib/cordova-entry.js +0 -29
- package/src/entry/SdCliAiCommand.ts +0 -105
- package/src/entry/SdCliCapacitor.ts +0 -760
- package/src/entry/SdCliCordova.ts +0 -550
- package/src/entry/SdCliElectron.ts +0 -197
- package/src/entry/SdCliLocalUpdate.ts +0 -106
- package/src/entry/SdCliPostInstall.ts +0 -51
- package/src/entry/SdCliProject.ts +0 -427
- package/src/pkg-builders/SdBuildRunnerBase.ts +0 -36
- package/src/pkg-builders/SdProjectBuildRunner.ts +0 -398
- package/src/pkg-builders/client/SdCliNgRoutesFileGenerator.ts +0 -112
- package/src/pkg-builders/client/SdClientBuildRunner.ts +0 -156
- package/src/pkg-builders/client/SdNgBundler.ts +0 -666
- package/src/pkg-builders/client/SdNgBundlerContext.ts +0 -138
- package/src/pkg-builders/client/createSdNgPlugin.ts +0 -186
- package/src/pkg-builders/commons/SdWorkerPathPlugin.ts +0 -117
- package/src/pkg-builders/lib/SdCliDbContextFileGenerator.ts +0 -177
- package/src/pkg-builders/lib/SdCliIndexFileGenerator.ts +0 -94
- package/src/pkg-builders/lib/SdJsLibBuildRunner.ts +0 -59
- package/src/pkg-builders/lib/SdTsLibBuildRunner.ts +0 -47
- package/src/pkg-builders/lib/SdTsLibBuilder.ts +0 -71
- package/src/pkg-builders/server/SdServerBuildRunner.ts +0 -299
- package/src/pkg-builders/server/SdServerBundler.ts +0 -208
- package/src/pkg-builders/server/createSdServerPlugin.ts +0 -80
- package/src/sd-cli-entry.ts +0 -292
- package/src/sd-cli.ts +0 -105
- package/src/ts-compiler/ScopePathSet.ts +0 -17
- package/src/ts-compiler/SdDepAnalyzer.ts +0 -372
- package/src/ts-compiler/SdDepCache.ts +0 -304
- package/src/ts-compiler/SdStyleBundler.ts +0 -169
- package/src/ts-compiler/SdTsCompiler.ts +0 -638
- package/src/types/build/ISdBuildMessage.ts +0 -11
- package/src/types/build/ISdBuildResult.ts +0 -9
- package/src/types/build/ISdTsCompilerOptions.ts +0 -11
- package/src/types/build/ISdTsCompilerResult.ts +0 -12
- package/src/types/build/TStylesheetBundlingResult.ts +0 -15
- package/src/types/common-config/INpmConfig.ts +0 -24
- package/src/types/common-config/ITsConfig.ts +0 -5
- package/src/types/config/ISdProjectConfig.ts +0 -174
- package/src/types/plugin/ISdCliNgPluginResultCache.ts +0 -9
- package/src/types/plugin/ISdCliServerPluginResultCache.ts +0 -9
- package/src/types/worker/ISdBuildRunnerWorkerType.ts +0 -19
- package/src/types/worker/IServerWorkerType.ts +0 -8
- package/src/utils/SdCliConvertMessageUtils.ts +0 -180
- package/src/utils/SdCliPerformanceTimer.ts +0 -62
- package/src/utils/loadProjConfAsync.ts +0 -16
- package/src/workers/build-runner.worker.ts +0 -54
- package/src/workers/server.worker.ts +0 -54
- package/tests/deps/sd-dependency-analyzer.spec.ts +0 -241
- package/tests/deps/sd-dependency-cache.spec.ts +0 -153
- package/tsconfig.json +0 -8
- package/tsconfig.test.json +0 -8
- package/vitest.config.js +0 -15
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import ts from "typescript";
|
|
3
|
+
import { createWorker } from "@simplysm/core-node";
|
|
4
|
+
import { consola } from "consola";
|
|
5
|
+
import {
|
|
6
|
+
getCompilerOptionsForPackage,
|
|
7
|
+
getPackageSourceFiles,
|
|
8
|
+
parseRootTsconfig
|
|
9
|
+
} from "../utils/tsconfig";
|
|
10
|
+
import { serializeDiagnostic } from "../utils/typecheck-serialization";
|
|
11
|
+
const logger = consola.withTag("sd:cli:dts:worker");
|
|
12
|
+
let tscWatchProgram;
|
|
13
|
+
function cleanup() {
|
|
14
|
+
if (tscWatchProgram != null) {
|
|
15
|
+
tscWatchProgram.close();
|
|
16
|
+
tscWatchProgram = void 0;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
process.on("SIGTERM", () => {
|
|
20
|
+
try {
|
|
21
|
+
cleanup();
|
|
22
|
+
} catch (err) {
|
|
23
|
+
logger.error("cleanup \uC2E4\uD328", err);
|
|
24
|
+
}
|
|
25
|
+
process.exit(0);
|
|
26
|
+
});
|
|
27
|
+
process.on("SIGINT", () => {
|
|
28
|
+
try {
|
|
29
|
+
cleanup();
|
|
30
|
+
} catch (err) {
|
|
31
|
+
logger.error("cleanup \uC2E4\uD328", err);
|
|
32
|
+
}
|
|
33
|
+
process.exit(0);
|
|
34
|
+
});
|
|
35
|
+
async function buildDts(info) {
|
|
36
|
+
try {
|
|
37
|
+
const parsedConfig = parseRootTsconfig(info.cwd);
|
|
38
|
+
const rootFiles = getPackageSourceFiles(info.pkgDir, parsedConfig);
|
|
39
|
+
const baseOptions = await getCompilerOptionsForPackage(parsedConfig.options, info.env, info.pkgDir);
|
|
40
|
+
const pkgSrcPrefix = path.join(info.pkgDir, "src") + path.sep;
|
|
41
|
+
const shouldEmit = info.emit !== false;
|
|
42
|
+
const options = {
|
|
43
|
+
...baseOptions,
|
|
44
|
+
sourceMap: false,
|
|
45
|
+
incremental: true,
|
|
46
|
+
tsBuildInfoFile: path.join(
|
|
47
|
+
info.pkgDir,
|
|
48
|
+
".cache",
|
|
49
|
+
shouldEmit ? "dts.tsbuildinfo" : `typecheck-${info.env}.tsbuildinfo`
|
|
50
|
+
)
|
|
51
|
+
};
|
|
52
|
+
if (shouldEmit) {
|
|
53
|
+
options.noEmit = false;
|
|
54
|
+
options.emitDeclarationOnly = true;
|
|
55
|
+
options.declaration = true;
|
|
56
|
+
options.declarationMap = true;
|
|
57
|
+
options.outDir = path.join(info.pkgDir, "dist");
|
|
58
|
+
options.declarationDir = path.join(info.pkgDir, "dist");
|
|
59
|
+
} else {
|
|
60
|
+
options.noEmit = true;
|
|
61
|
+
options.emitDeclarationOnly = false;
|
|
62
|
+
options.declaration = false;
|
|
63
|
+
options.declarationMap = false;
|
|
64
|
+
}
|
|
65
|
+
const host = ts.createIncrementalCompilerHost(options);
|
|
66
|
+
if (shouldEmit) {
|
|
67
|
+
const pkgDistPrefix = path.join(info.pkgDir, "dist") + path.sep;
|
|
68
|
+
const originalWriteFile = host.writeFile;
|
|
69
|
+
host.writeFile = (fileName, content, writeByteOrderMark, onError, sourceFiles, data) => {
|
|
70
|
+
if (fileName.startsWith(pkgDistPrefix)) {
|
|
71
|
+
originalWriteFile(fileName, content, writeByteOrderMark, onError, sourceFiles, data);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const program = ts.createIncrementalProgram({
|
|
76
|
+
rootNames: rootFiles,
|
|
77
|
+
options,
|
|
78
|
+
host
|
|
79
|
+
});
|
|
80
|
+
const emitResult = program.emit();
|
|
81
|
+
const allDiagnostics = [
|
|
82
|
+
...program.getConfigFileParsingDiagnostics(),
|
|
83
|
+
...program.getSyntacticDiagnostics(),
|
|
84
|
+
...program.getOptionsDiagnostics(),
|
|
85
|
+
...program.getGlobalDiagnostics(),
|
|
86
|
+
...program.getSemanticDiagnostics(),
|
|
87
|
+
...emitResult.diagnostics
|
|
88
|
+
];
|
|
89
|
+
const filteredDiagnostics = allDiagnostics.filter(
|
|
90
|
+
(d) => d.file == null || d.file.fileName.startsWith(pkgSrcPrefix)
|
|
91
|
+
);
|
|
92
|
+
const serializedDiagnostics = filteredDiagnostics.map(serializeDiagnostic);
|
|
93
|
+
const errorCount = filteredDiagnostics.filter((d) => d.category === ts.DiagnosticCategory.Error).length;
|
|
94
|
+
const warningCount = filteredDiagnostics.filter((d) => d.category === ts.DiagnosticCategory.Warning).length;
|
|
95
|
+
const errors = filteredDiagnostics.filter((d) => d.category === ts.DiagnosticCategory.Error).map((d) => {
|
|
96
|
+
const message = ts.flattenDiagnosticMessageText(d.messageText, "\n");
|
|
97
|
+
if (d.file != null && d.start != null) {
|
|
98
|
+
const { line, character } = d.file.getLineAndCharacterOfPosition(d.start);
|
|
99
|
+
return `${d.file.fileName}:${line + 1}:${character + 1}: TS${d.code}: ${message}`;
|
|
100
|
+
}
|
|
101
|
+
return `TS${d.code}: ${message}`;
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
success: errorCount === 0,
|
|
105
|
+
errors: errors.length > 0 ? errors : void 0,
|
|
106
|
+
diagnostics: serializedDiagnostics,
|
|
107
|
+
errorCount,
|
|
108
|
+
warningCount
|
|
109
|
+
};
|
|
110
|
+
} catch (err) {
|
|
111
|
+
return {
|
|
112
|
+
success: false,
|
|
113
|
+
errors: [err instanceof Error ? err.message : String(err)],
|
|
114
|
+
diagnostics: [],
|
|
115
|
+
errorCount: 1,
|
|
116
|
+
warningCount: 0
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
let isWatchStarted = false;
|
|
121
|
+
async function startDtsWatch(info) {
|
|
122
|
+
if (isWatchStarted) {
|
|
123
|
+
throw new Error("startDtsWatch\uB294 Worker\uB2F9 \uD55C \uBC88\uB9CC \uD638\uCD9C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.");
|
|
124
|
+
}
|
|
125
|
+
isWatchStarted = true;
|
|
126
|
+
try {
|
|
127
|
+
const parsedConfig = parseRootTsconfig(info.cwd);
|
|
128
|
+
const rootFiles = getPackageSourceFiles(info.pkgDir, parsedConfig);
|
|
129
|
+
const baseOptions = await getCompilerOptionsForPackage(parsedConfig.options, info.env, info.pkgDir);
|
|
130
|
+
const pkgSrcPrefix = path.join(info.pkgDir, "src") + path.sep;
|
|
131
|
+
const pkgDistPrefix = path.join(info.pkgDir, "dist") + path.sep;
|
|
132
|
+
const options = {
|
|
133
|
+
...baseOptions,
|
|
134
|
+
emitDeclarationOnly: true,
|
|
135
|
+
declaration: true,
|
|
136
|
+
declarationMap: true,
|
|
137
|
+
outDir: path.join(info.pkgDir, "dist"),
|
|
138
|
+
declarationDir: path.join(info.pkgDir, "dist"),
|
|
139
|
+
sourceMap: false,
|
|
140
|
+
noEmit: false,
|
|
141
|
+
incremental: true,
|
|
142
|
+
tsBuildInfoFile: path.join(info.pkgDir, ".cache", "dts.tsbuildinfo")
|
|
143
|
+
};
|
|
144
|
+
let isFirstBuild = true;
|
|
145
|
+
const collectedErrors = [];
|
|
146
|
+
const reportDiagnostic = (diagnostic) => {
|
|
147
|
+
if (diagnostic.category === ts.DiagnosticCategory.Error) {
|
|
148
|
+
if (diagnostic.file != null && !diagnostic.file.fileName.startsWith(pkgSrcPrefix)) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
|
|
152
|
+
if (diagnostic.file != null && diagnostic.start != null) {
|
|
153
|
+
const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
|
|
154
|
+
collectedErrors.push(
|
|
155
|
+
`${diagnostic.file.fileName}:${line + 1}:${character + 1}: TS${diagnostic.code}: ${message}`
|
|
156
|
+
);
|
|
157
|
+
} else {
|
|
158
|
+
collectedErrors.push(`TS${diagnostic.code}: ${message}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
const originalWriteFile = ts.sys.writeFile;
|
|
163
|
+
const customSys = {
|
|
164
|
+
...ts.sys,
|
|
165
|
+
writeFile: (filePath, content, writeByteOrderMark) => {
|
|
166
|
+
if (filePath.startsWith(pkgDistPrefix)) {
|
|
167
|
+
originalWriteFile(filePath, content, writeByteOrderMark);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
const host = ts.createWatchCompilerHost(
|
|
172
|
+
rootFiles,
|
|
173
|
+
options,
|
|
174
|
+
customSys,
|
|
175
|
+
ts.createEmitAndSemanticDiagnosticsBuilderProgram,
|
|
176
|
+
reportDiagnostic,
|
|
177
|
+
() => {
|
|
178
|
+
}
|
|
179
|
+
// watchStatusReporter - 사용하지 않음
|
|
180
|
+
);
|
|
181
|
+
const originalAfterProgramCreate = host.afterProgramCreate;
|
|
182
|
+
host.afterProgramCreate = (program) => {
|
|
183
|
+
originalAfterProgramCreate?.(program);
|
|
184
|
+
if (!isFirstBuild) {
|
|
185
|
+
sender.send("buildStart", {});
|
|
186
|
+
}
|
|
187
|
+
program.emit();
|
|
188
|
+
sender.send("build", {
|
|
189
|
+
success: collectedErrors.length === 0,
|
|
190
|
+
errors: collectedErrors.length > 0 ? [...collectedErrors] : void 0
|
|
191
|
+
});
|
|
192
|
+
collectedErrors.length = 0;
|
|
193
|
+
isFirstBuild = false;
|
|
194
|
+
};
|
|
195
|
+
tscWatchProgram = ts.createWatchProgram(host);
|
|
196
|
+
} catch (err) {
|
|
197
|
+
sender.send("error", {
|
|
198
|
+
message: err instanceof Error ? err.message : String(err)
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const sender = createWorker({
|
|
203
|
+
startDtsWatch,
|
|
204
|
+
buildDts
|
|
205
|
+
});
|
|
206
|
+
var dts_worker_default = sender;
|
|
207
|
+
export {
|
|
208
|
+
dts_worker_default as default
|
|
209
|
+
};
|
|
210
|
+
//# sourceMappingURL=dts.worker.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/workers/dts.worker.ts"],
|
|
4
|
+
"sourcesContent": ["import path from \"path\";\nimport ts from \"typescript\";\nimport { createWorker } from \"@simplysm/core-node\";\nimport { consola } from \"consola\";\nimport {\n getCompilerOptionsForPackage,\n getPackageSourceFiles,\n parseRootTsconfig,\n type TypecheckEnv,\n} from \"../utils/tsconfig\";\nimport { serializeDiagnostic, type SerializedDiagnostic } from \"../utils/typecheck-serialization\";\n\n//#region Types\n\n/**\n * DTS watch \uC2DC\uC791 \uC815\uBCF4\n */\nexport interface DtsWatchInfo {\n name: string;\n cwd: string;\n pkgDir: string;\n env: TypecheckEnv;\n}\n\n/**\n * DTS \uC77C\uD68C\uC131 \uBE4C\uB4DC \uC815\uBCF4\n */\nexport interface DtsBuildInfo {\n name: string;\n cwd: string;\n pkgDir: string;\n env: TypecheckEnv;\n /** true\uBA74 .d.ts \uC0DD\uC131 + \uD0C0\uC785\uCCB4\uD06C, false\uBA74 \uD0C0\uC785\uCCB4\uD06C\uB9CC (\uAE30\uBCF8\uAC12: true) */\n emit?: boolean;\n}\n\n/**\n * DTS \uC77C\uD68C\uC131 \uBE4C\uB4DC \uACB0\uACFC\n */\nexport interface DtsBuildResult {\n success: boolean;\n errors?: string[];\n diagnostics: SerializedDiagnostic[];\n errorCount: number;\n warningCount: number;\n}\n\n/**\n * \uBE4C\uB4DC \uC774\uBCA4\uD2B8\n */\nexport interface DtsBuildEvent {\n success: boolean;\n errors?: string[];\n}\n\n/**\n * \uC5D0\uB7EC \uC774\uBCA4\uD2B8\n */\nexport interface DtsErrorEvent {\n message: string;\n}\n\n/**\n * Worker \uC774\uBCA4\uD2B8 \uD0C0\uC785\n */\nexport interface DtsWorkerEvents extends Record<string, unknown> {\n buildStart: Record<string, never>;\n build: DtsBuildEvent;\n error: DtsErrorEvent;\n}\n\n//#endregion\n\n//#region \uB9AC\uC18C\uC2A4 \uAD00\uB9AC\n\nconst logger = consola.withTag(\"sd:cli:dts:worker\");\n\n/** tsc watch program (\uC815\uB9AC \uB300\uC0C1) */\nlet tscWatchProgram: ts.WatchOfFilesAndCompilerOptions<ts.EmitAndSemanticDiagnosticsBuilderProgram> | undefined;\n\n/**\n * \uB9AC\uC18C\uC2A4 \uC815\uB9AC\n */\nfunction cleanup(): void {\n if (tscWatchProgram != null) {\n tscWatchProgram.close();\n tscWatchProgram = undefined;\n }\n}\n\nprocess.on(\"SIGTERM\", () => {\n try {\n cleanup();\n } catch (err) {\n logger.error(\"cleanup \uC2E4\uD328\", err);\n }\n process.exit(0);\n});\n\nprocess.on(\"SIGINT\", () => {\n try {\n cleanup();\n } catch (err) {\n logger.error(\"cleanup \uC2E4\uD328\", err);\n }\n process.exit(0);\n});\n\n//#endregion\n\n//#region buildDts (\uC77C\uD68C\uC131 \uBE4C\uB4DC)\n\n/**\n * DTS \uC77C\uD68C\uC131 \uBE4C\uB4DC (\uD0C0\uC785\uCCB4\uD06C + dts \uC0DD\uC131)\n */\nasync function buildDts(info: DtsBuildInfo): Promise<DtsBuildResult> {\n try {\n const parsedConfig = parseRootTsconfig(info.cwd);\n const rootFiles = getPackageSourceFiles(info.pkgDir, parsedConfig);\n const baseOptions = await getCompilerOptionsForPackage(parsedConfig.options, info.env, info.pkgDir);\n\n // \uD574\uB2F9 \uD328\uD0A4\uC9C0 \uACBD\uB85C (\uD544\uD130\uB9C1\uC6A9)\n const pkgSrcPrefix = path.join(info.pkgDir, \"src\") + path.sep;\n\n // emit \uC5EC\uBD80 \uACB0\uC815 (\uAE30\uBCF8\uAC12: true)\n const shouldEmit = info.emit !== false;\n\n const options: ts.CompilerOptions = {\n ...baseOptions,\n sourceMap: false,\n incremental: true,\n tsBuildInfoFile: path.join(\n info.pkgDir,\n \".cache\",\n shouldEmit ? \"dts.tsbuildinfo\" : `typecheck-${info.env}.tsbuildinfo`,\n ),\n };\n\n // emit \uC5EC\uBD80\uC5D0 \uB530\uB77C \uAD00\uB828 \uC635\uC158 \uC124\uC815\n if (shouldEmit) {\n // dts \uC0DD\uC131 + \uD0C0\uC785\uCCB4\uD06C\n options.noEmit = false;\n options.emitDeclarationOnly = true;\n options.declaration = true;\n options.declarationMap = true;\n options.outDir = path.join(info.pkgDir, \"dist\");\n options.declarationDir = path.join(info.pkgDir, \"dist\");\n } else {\n // \uD0C0\uC785\uCCB4\uD06C\uB9CC \uC218\uD589 (dts \uC0DD\uC131 \uC548 \uD568)\n options.noEmit = true;\n options.emitDeclarationOnly = false;\n options.declaration = false;\n options.declarationMap = false;\n // emit \uC548 \uD560 \uB54C outDir/declarationDir \uBD88\uD544\uC694\n }\n\n // incremental program \uC0DD\uC131\n const host = ts.createIncrementalCompilerHost(options);\n\n // \uD574\uB2F9 \uD328\uD0A4\uC9C0 dist \uD3F4\uB354\uB85C \uAC00\uB294 \uD30C\uC77C\uB9CC \uC2E4\uC81C\uB85C \uC4F0\uAE30 (\uB2E4\uB978 \uD328\uD0A4\uC9C0 .d.ts \uC0DD\uC131 \uBC29\uC9C0)\n if (shouldEmit) {\n const pkgDistPrefix = path.join(info.pkgDir, \"dist\") + path.sep;\n const originalWriteFile = host.writeFile;\n host.writeFile = (fileName, content, writeByteOrderMark, onError, sourceFiles, data) => {\n if (fileName.startsWith(pkgDistPrefix)) {\n originalWriteFile(fileName, content, writeByteOrderMark, onError, sourceFiles, data);\n }\n };\n }\n\n const program = ts.createIncrementalProgram({\n rootNames: rootFiles,\n options,\n host,\n });\n\n // emit (noEmit\uC77C \uACBD\uC6B0\uC5D0\uB3C4 \uD638\uCD9C\uD574\uC57C diagnostics\uAC00 \uC218\uC9D1\uB428)\n const emitResult = program.emit();\n\n // diagnostics \uC218\uC9D1\n const allDiagnostics = [\n ...program.getConfigFileParsingDiagnostics(),\n ...program.getSyntacticDiagnostics(),\n ...program.getOptionsDiagnostics(),\n ...program.getGlobalDiagnostics(),\n ...program.getSemanticDiagnostics(),\n ...emitResult.diagnostics,\n ];\n\n // \uD574\uB2F9 \uD328\uD0A4\uC9C0 src \uD3F4\uB354 \uB0B4 \uD30C\uC77C\uB9CC \uC5D0\uB7EC \uC218\uC9D1 (\uB2E4\uB978 \uD328\uD0A4\uC9C0 \uC5D0\uB7EC \uBB34\uC2DC)\n const filteredDiagnostics = allDiagnostics.filter(\n (d) => d.file == null || d.file.fileName.startsWith(pkgSrcPrefix),\n );\n\n const serializedDiagnostics = filteredDiagnostics.map(serializeDiagnostic);\n const errorCount = filteredDiagnostics.filter((d) => d.category === ts.DiagnosticCategory.Error).length;\n const warningCount = filteredDiagnostics.filter((d) => d.category === ts.DiagnosticCategory.Warning).length;\n\n // \uC5D0\uB7EC \uBA54\uC2DC\uC9C0 \uBB38\uC790\uC5F4 \uBC30\uC5F4 (\uD558\uC704 \uD638\uD658\uC6A9)\n const errors = filteredDiagnostics\n .filter((d) => d.category === ts.DiagnosticCategory.Error)\n .map((d) => {\n const message = ts.flattenDiagnosticMessageText(d.messageText, \"\\n\");\n if (d.file != null && d.start != null) {\n const { line, character } = d.file.getLineAndCharacterOfPosition(d.start);\n return `${d.file.fileName}:${line + 1}:${character + 1}: TS${d.code}: ${message}`;\n }\n return `TS${d.code}: ${message}`;\n });\n\n return {\n success: errorCount === 0,\n errors: errors.length > 0 ? errors : undefined,\n diagnostics: serializedDiagnostics,\n errorCount,\n warningCount,\n };\n } catch (err) {\n return {\n success: false,\n errors: [err instanceof Error ? err.message : String(err)],\n diagnostics: [],\n errorCount: 1,\n warningCount: 0,\n };\n }\n}\n\n//#endregion\n\n//#region startDtsWatch (watch \uBAA8\uB4DC)\n\n/** startDtsWatch \uD638\uCD9C \uC5EC\uBD80 \uD50C\uB798\uADF8 */\nlet isWatchStarted = false;\n\n/**\n * DTS watch \uC2DC\uC791\n * @remarks \uC774 \uD568\uC218\uB294 Worker\uB2F9 \uD55C \uBC88\uB9CC \uD638\uCD9C\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\n * @throws \uC774\uBBF8 watch\uAC00 \uC2DC\uC791\uB41C \uACBD\uC6B0\n */\nasync function startDtsWatch(info: DtsWatchInfo): Promise<void> {\n if (isWatchStarted) {\n throw new Error(\"startDtsWatch\uB294 Worker\uB2F9 \uD55C \uBC88\uB9CC \uD638\uCD9C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\");\n }\n isWatchStarted = true;\n\n try {\n const parsedConfig = parseRootTsconfig(info.cwd);\n const rootFiles = getPackageSourceFiles(info.pkgDir, parsedConfig);\n const baseOptions = await getCompilerOptionsForPackage(parsedConfig.options, info.env, info.pkgDir);\n\n // \uD574\uB2F9 \uD328\uD0A4\uC9C0 \uACBD\uB85C (\uD544\uD130\uB9C1\uC6A9)\n const pkgSrcPrefix = path.join(info.pkgDir, \"src\") + path.sep;\n const pkgDistPrefix = path.join(info.pkgDir, \"dist\") + path.sep;\n\n const options: ts.CompilerOptions = {\n ...baseOptions,\n emitDeclarationOnly: true,\n declaration: true,\n declarationMap: true,\n outDir: path.join(info.pkgDir, \"dist\"),\n declarationDir: path.join(info.pkgDir, \"dist\"),\n sourceMap: false,\n noEmit: false,\n incremental: true,\n tsBuildInfoFile: path.join(info.pkgDir, \".cache\", \"dts.tsbuildinfo\"),\n };\n\n let isFirstBuild = true;\n const collectedErrors: string[] = [];\n\n const reportDiagnostic: ts.DiagnosticReporter = (diagnostic) => {\n if (diagnostic.category === ts.DiagnosticCategory.Error) {\n // \uD574\uB2F9 \uD328\uD0A4\uC9C0 src \uD3F4\uB354 \uB0B4 \uD30C\uC77C\uB9CC \uC5D0\uB7EC \uC218\uC9D1 (\uB2E4\uB978 \uD328\uD0A4\uC9C0 \uC5D0\uB7EC \uBB34\uC2DC)\n if (diagnostic.file != null && !diagnostic.file.fileName.startsWith(pkgSrcPrefix)) {\n return;\n }\n\n const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, \"\\n\");\n\n // \uD30C\uC77C \uC704\uCE58 \uC815\uBCF4\uAC00 \uC788\uC73C\uBA74 \uD3EC\uD568 (\uC808\uB300\uACBD\uB85C:\uB77C\uC778:\uCEEC\uB7FC \uD615\uC2DD - IDE \uB9C1\uD06C \uC9C0\uC6D0)\n if (diagnostic.file != null && diagnostic.start != null) {\n const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);\n collectedErrors.push(\n `${diagnostic.file.fileName}:${line + 1}:${character + 1}: TS${diagnostic.code}: ${message}`,\n );\n } else {\n collectedErrors.push(`TS${diagnostic.code}: ${message}`);\n }\n }\n };\n\n // \uD574\uB2F9 \uD328\uD0A4\uC9C0 dist \uD3F4\uB354\uB85C \uAC00\uB294 \uD30C\uC77C\uB9CC \uC2E4\uC81C\uB85C \uC4F0\uAE30 (\uB2E4\uB978 \uD328\uD0A4\uC9C0 .d.ts \uC0DD\uC131 \uBC29\uC9C0)\n // TypeScript watch \uBAA8\uB4DC\uB294 import\uB41C \uBAA8\uB4E0 \uBAA8\uB4C8\uC758 .d.ts\uB97C \uC0DD\uC131\uD558\uB824\uACE0 \uC2DC\uB3C4\uD568.\n // \uBAA8\uB178\uB808\uD3EC\uC5D0\uC11C \uB2E4\uB978 \uD328\uD0A4\uC9C0\uC758 .d.ts\uAE4C\uC9C0 \uB36E\uC5B4\uC4F0\uB294 \uAC83\uC744 \uBC29\uC9C0\uD558\uAE30 \uC704\uD574 \uD544\uD130\uB9C1 \uD544\uC694.\n const originalWriteFile = ts.sys.writeFile;\n const customSys: ts.System = {\n ...ts.sys,\n writeFile: (filePath, content, writeByteOrderMark) => {\n if (filePath.startsWith(pkgDistPrefix)) {\n originalWriteFile(filePath, content, writeByteOrderMark);\n }\n },\n };\n\n const host = ts.createWatchCompilerHost(\n rootFiles,\n options,\n customSys,\n ts.createEmitAndSemanticDiagnosticsBuilderProgram,\n reportDiagnostic,\n () => {}, // watchStatusReporter - \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uC74C\n );\n\n const originalAfterProgramCreate = host.afterProgramCreate;\n host.afterProgramCreate = (program) => {\n originalAfterProgramCreate?.(program);\n\n if (!isFirstBuild) {\n sender.send(\"buildStart\", {});\n }\n\n program.emit();\n\n sender.send(\"build\", {\n success: collectedErrors.length === 0,\n errors: collectedErrors.length > 0 ? [...collectedErrors] : undefined,\n });\n\n collectedErrors.length = 0;\n isFirstBuild = false;\n };\n\n tscWatchProgram = ts.createWatchProgram(host);\n } catch (err) {\n sender.send(\"error\", {\n message: err instanceof Error ? err.message : String(err),\n });\n }\n}\n\nconst sender = createWorker<{ startDtsWatch: typeof startDtsWatch; buildDts: typeof buildDts }, DtsWorkerEvents>({\n startDtsWatch,\n buildDts,\n});\n\nexport default sender;\n\n//#endregion\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import esbuild from "esbuild";
|
|
2
|
+
import { createWorker } from "@simplysm/core-node";
|
|
3
|
+
import { consola } from "consola";
|
|
4
|
+
import { parseRootTsconfig, getPackageSourceFiles, getCompilerOptionsForPackage } from "../utils/tsconfig";
|
|
5
|
+
import { createLibraryEsbuildOptions, getTypecheckEnvFromTarget } from "../utils/esbuild-config";
|
|
6
|
+
const logger = consola.withTag("sd:cli:library:worker");
|
|
7
|
+
let esbuildContext;
|
|
8
|
+
async function cleanup() {
|
|
9
|
+
const contextToDispose = esbuildContext;
|
|
10
|
+
esbuildContext = void 0;
|
|
11
|
+
if (contextToDispose != null) {
|
|
12
|
+
await contextToDispose.dispose();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
process.on("SIGTERM", () => {
|
|
16
|
+
cleanup().catch((err) => {
|
|
17
|
+
logger.error("cleanup \uC2E4\uD328", err);
|
|
18
|
+
}).finally(() => {
|
|
19
|
+
process.exit(0);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
process.on("SIGINT", () => {
|
|
23
|
+
cleanup().catch((err) => {
|
|
24
|
+
logger.error("cleanup \uC2E4\uD328", err);
|
|
25
|
+
}).finally(() => {
|
|
26
|
+
process.exit(0);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
async function build(info) {
|
|
30
|
+
try {
|
|
31
|
+
const parsedConfig = parseRootTsconfig(info.cwd);
|
|
32
|
+
const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);
|
|
33
|
+
const env = getTypecheckEnvFromTarget(info.config.target);
|
|
34
|
+
const compilerOptions = await getCompilerOptionsForPackage(parsedConfig.options, env, info.pkgDir);
|
|
35
|
+
const esbuildOptions = createLibraryEsbuildOptions({
|
|
36
|
+
pkgDir: info.pkgDir,
|
|
37
|
+
entryPoints,
|
|
38
|
+
target: info.config.target,
|
|
39
|
+
compilerOptions
|
|
40
|
+
});
|
|
41
|
+
const result = await esbuild.build(esbuildOptions);
|
|
42
|
+
const errors = result.errors.map((e) => e.text);
|
|
43
|
+
return {
|
|
44
|
+
success: result.errors.length === 0,
|
|
45
|
+
errors: errors.length > 0 ? errors : void 0
|
|
46
|
+
};
|
|
47
|
+
} catch (err) {
|
|
48
|
+
return {
|
|
49
|
+
success: false,
|
|
50
|
+
errors: [err instanceof Error ? err.message : String(err)]
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
let isWatchStarted = false;
|
|
55
|
+
async function startWatch(info) {
|
|
56
|
+
if (isWatchStarted) {
|
|
57
|
+
throw new Error("startWatch\uB294 Worker\uB2F9 \uD55C \uBC88\uB9CC \uD638\uCD9C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.");
|
|
58
|
+
}
|
|
59
|
+
isWatchStarted = true;
|
|
60
|
+
try {
|
|
61
|
+
const parsedConfig = parseRootTsconfig(info.cwd);
|
|
62
|
+
const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);
|
|
63
|
+
const env = getTypecheckEnvFromTarget(info.config.target);
|
|
64
|
+
const compilerOptions = await getCompilerOptionsForPackage(parsedConfig.options, env, info.pkgDir);
|
|
65
|
+
let resolveFirstBuild;
|
|
66
|
+
const firstBuildPromise = new Promise((resolve) => {
|
|
67
|
+
resolveFirstBuild = resolve;
|
|
68
|
+
});
|
|
69
|
+
let isFirstBuild = true;
|
|
70
|
+
const baseOptions = createLibraryEsbuildOptions({
|
|
71
|
+
pkgDir: info.pkgDir,
|
|
72
|
+
entryPoints,
|
|
73
|
+
target: info.config.target,
|
|
74
|
+
compilerOptions
|
|
75
|
+
});
|
|
76
|
+
esbuildContext = await esbuild.context({
|
|
77
|
+
...baseOptions,
|
|
78
|
+
plugins: [
|
|
79
|
+
{
|
|
80
|
+
name: "watch-notify",
|
|
81
|
+
setup(pluginBuild) {
|
|
82
|
+
pluginBuild.onStart(() => {
|
|
83
|
+
sender.send("buildStart", {});
|
|
84
|
+
});
|
|
85
|
+
pluginBuild.onEnd((result) => {
|
|
86
|
+
const errors = result.errors.map((e) => e.text);
|
|
87
|
+
const success = result.errors.length === 0;
|
|
88
|
+
sender.send("build", { success, errors: errors.length > 0 ? errors : void 0 });
|
|
89
|
+
if (isFirstBuild) {
|
|
90
|
+
isFirstBuild = false;
|
|
91
|
+
resolveFirstBuild();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
});
|
|
98
|
+
await esbuildContext.watch();
|
|
99
|
+
await firstBuildPromise;
|
|
100
|
+
} catch (err) {
|
|
101
|
+
sender.send("error", {
|
|
102
|
+
message: err instanceof Error ? err.message : String(err)
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async function stopWatch() {
|
|
107
|
+
await cleanup();
|
|
108
|
+
}
|
|
109
|
+
const sender = createWorker({
|
|
110
|
+
build,
|
|
111
|
+
startWatch,
|
|
112
|
+
stopWatch
|
|
113
|
+
});
|
|
114
|
+
var library_worker_default = sender;
|
|
115
|
+
export {
|
|
116
|
+
library_worker_default as default
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=library.worker.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/workers/library.worker.ts"],
|
|
4
|
+
"sourcesContent": ["import esbuild from \"esbuild\";\nimport { createWorker } from \"@simplysm/core-node\";\nimport { consola } from \"consola\";\nimport type { SdBuildPackageConfig } from \"../sd-config.types\";\nimport { parseRootTsconfig, getPackageSourceFiles, getCompilerOptionsForPackage } from \"../utils/tsconfig\";\nimport { createLibraryEsbuildOptions, getTypecheckEnvFromTarget } from \"../utils/esbuild-config\";\n\n//#region Types\n\n/**\n * Library \uBE4C\uB4DC \uC815\uBCF4 (\uC77C\uD68C\uC131 \uBE4C\uB4DC\uC6A9)\n */\nexport interface LibraryBuildInfo {\n name: string;\n config: SdBuildPackageConfig;\n cwd: string;\n pkgDir: string;\n}\n\n/**\n * Library \uBE4C\uB4DC \uACB0\uACFC\n */\nexport interface LibraryBuildResult {\n success: boolean;\n errors?: string[];\n}\n\n/**\n * Library Watch \uC815\uBCF4\n */\nexport interface LibraryWatchInfo {\n name: string;\n config: SdBuildPackageConfig;\n cwd: string;\n pkgDir: string;\n}\n\n/**\n * \uBE4C\uB4DC \uC774\uBCA4\uD2B8\n */\nexport interface LibraryBuildEvent {\n success: boolean;\n errors?: string[];\n}\n\n/**\n * \uC5D0\uB7EC \uC774\uBCA4\uD2B8\n */\nexport interface LibraryErrorEvent {\n message: string;\n}\n\n/**\n * Worker \uC774\uBCA4\uD2B8 \uD0C0\uC785\n */\nexport interface LibraryWorkerEvents extends Record<string, unknown> {\n buildStart: Record<string, never>;\n build: LibraryBuildEvent;\n error: LibraryErrorEvent;\n}\n\n//#endregion\n\n//#region \uB9AC\uC18C\uC2A4 \uAD00\uB9AC\n\nconst logger = consola.withTag(\"sd:cli:library:worker\");\n\n/** esbuild build context (\uC815\uB9AC \uB300\uC0C1) */\nlet esbuildContext: esbuild.BuildContext | undefined;\n\n/**\n * \uB9AC\uC18C\uC2A4 \uC815\uB9AC\n */\nasync function cleanup(): Promise<void> {\n // \uC804\uC5ED \uBCC0\uC218\uB97C \uC784\uC2DC \uBCC0\uC218\uB85C \uCEA1\uCC98 \uD6C4 \uCD08\uAE30\uD654\n // (Promise.all \uB300\uAE30 \uC911 \uB2E4\uB978 \uD638\uCD9C\uC5D0\uC11C \uC804\uC5ED \uBCC0\uC218\uB97C \uC218\uC815\uD560 \uC218 \uC788\uC73C\uBBC0\uB85C)\n const contextToDispose = esbuildContext;\n esbuildContext = undefined;\n\n if (contextToDispose != null) {\n await contextToDispose.dispose();\n }\n}\n\n// \uD504\uB85C\uC138\uC2A4 \uC885\uB8CC \uC804 \uB9AC\uC18C\uC2A4 \uC815\uB9AC (SIGTERM/SIGINT)\n// \uC8FC\uC758: worker.terminate()\uB294 \uC774 \uD578\uB4E4\uB7EC\uB4E4\uC744 \uD638\uCD9C\uD558\uC9C0 \uC54A\uACE0 \uC989\uC2DC \uC885\uB8CC\uB428.\n// \uADF8\uB7EC\uB098 watch \uBAA8\uB4DC\uC5D0\uC11C \uC815\uC0C1 \uC885\uB8CC\uB294 \uBA54\uC778 \uD504\uB85C\uC138\uC2A4\uC758 SIGINT/SIGTERM\uC744 \uD1B5\uD574 \uC774\uB8E8\uC5B4\uC9C0\uBBC0\uB85C \uBB38\uC81C\uC5C6\uC74C.\nprocess.on(\"SIGTERM\", () => {\n cleanup()\n .catch((err) => {\n logger.error(\"cleanup \uC2E4\uD328\", err);\n })\n .finally(() => {\n process.exit(0);\n });\n});\n\nprocess.on(\"SIGINT\", () => {\n cleanup()\n .catch((err) => {\n logger.error(\"cleanup \uC2E4\uD328\", err);\n })\n .finally(() => {\n process.exit(0);\n });\n});\n\n//#endregion\n\n//#region Worker\n\n/**\n * \uC77C\uD68C\uC131 \uBE4C\uB4DC\n */\nasync function build(info: LibraryBuildInfo): Promise<LibraryBuildResult> {\n try {\n // tsconfig \uD30C\uC2F1\n const parsedConfig = parseRootTsconfig(info.cwd);\n const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);\n\n // \uD0C0\uAC9F\uBCC4 compilerOptions \uC0DD\uC131\n const env = getTypecheckEnvFromTarget(info.config.target);\n const compilerOptions = await getCompilerOptionsForPackage(parsedConfig.options, env, info.pkgDir);\n\n // esbuild \uC77C\uD68C\uC131 \uBE4C\uB4DC\n const esbuildOptions = createLibraryEsbuildOptions({\n pkgDir: info.pkgDir,\n entryPoints,\n target: info.config.target,\n compilerOptions,\n });\n\n const result = await esbuild.build(esbuildOptions);\n\n const errors = result.errors.map((e) => e.text);\n return {\n success: result.errors.length === 0,\n errors: errors.length > 0 ? errors : undefined,\n };\n } catch (err) {\n return {\n success: false,\n errors: [err instanceof Error ? err.message : String(err)],\n };\n }\n}\n\n/** startWatch \uD638\uCD9C \uC5EC\uBD80 \uD50C\uB798\uADF8 */\nlet isWatchStarted = false;\n\n/**\n * watch \uC2DC\uC791\n * @remarks \uC774 \uD568\uC218\uB294 Worker\uB2F9 \uD55C \uBC88\uB9CC \uD638\uCD9C\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.\n * @throws \uC774\uBBF8 watch\uAC00 \uC2DC\uC791\uB41C \uACBD\uC6B0\n */\nasync function startWatch(info: LibraryWatchInfo): Promise<void> {\n if (isWatchStarted) {\n throw new Error(\"startWatch\uB294 Worker\uB2F9 \uD55C \uBC88\uB9CC \uD638\uCD9C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.\");\n }\n isWatchStarted = true;\n\n try {\n // tsconfig \uD30C\uC2F1\n const parsedConfig = parseRootTsconfig(info.cwd);\n const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);\n\n // \uD0C0\uAC9F\uBCC4 compilerOptions \uC0DD\uC131\n const env = getTypecheckEnvFromTarget(info.config.target);\n const compilerOptions = await getCompilerOptionsForPackage(parsedConfig.options, env, info.pkgDir);\n\n // \uCCAB \uBC88\uC9F8 \uBE4C\uB4DC \uC644\uB8CC \uB300\uAE30\uB97C \uC704\uD55C Promise\n let resolveFirstBuild!: () => void;\n const firstBuildPromise = new Promise<void>((resolve) => {\n resolveFirstBuild = resolve;\n });\n\n let isFirstBuild = true;\n\n // esbuild \uAE30\uBCF8 \uC635\uC158 \uC0DD\uC131\n const baseOptions = createLibraryEsbuildOptions({\n pkgDir: info.pkgDir,\n entryPoints,\n target: info.config.target,\n compilerOptions,\n });\n\n // watch\uC6A9 \uD50C\uB7EC\uADF8\uC778 \uCD94\uAC00\n esbuildContext = await esbuild.context({\n ...baseOptions,\n plugins: [\n {\n name: \"watch-notify\",\n setup(pluginBuild) {\n pluginBuild.onStart(() => {\n sender.send(\"buildStart\", {});\n });\n\n pluginBuild.onEnd((result) => {\n const errors = result.errors.map((e) => e.text);\n const success = result.errors.length === 0;\n\n sender.send(\"build\", { success, errors: errors.length > 0 ? errors : undefined });\n\n if (isFirstBuild) {\n isFirstBuild = false;\n resolveFirstBuild();\n }\n });\n },\n },\n ],\n });\n\n await esbuildContext.watch();\n\n // \uCCAB \uBC88\uC9F8 \uBE4C\uB4DC \uC644\uB8CC \uB300\uAE30\n await firstBuildPromise;\n } catch (err) {\n sender.send(\"error\", {\n message: err instanceof Error ? err.message : String(err),\n });\n }\n}\n\n/**\n * watch \uC911\uC9C0\n * @remarks esbuild context\uB97C \uC815\uB9AC\uD569\uB2C8\uB2E4.\n */\nasync function stopWatch(): Promise<void> {\n await cleanup();\n}\n\nconst sender = createWorker<\n { build: typeof build; startWatch: typeof startWatch; stopWatch: typeof stopWatch },\n LibraryWorkerEvents\n>({\n build,\n startWatch,\n stopWatch,\n});\n\nexport default sender;\n\n//#endregion\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import proxy from "@fastify/http-proxy";
|
|
2
|
+
import { createWorker } from "@simplysm/core-node";
|
|
3
|
+
import { consola } from "consola";
|
|
4
|
+
import net from "net";
|
|
5
|
+
const logger = consola.withTag("sd:cli:server-runtime:worker");
|
|
6
|
+
let serverInstance;
|
|
7
|
+
async function cleanup() {
|
|
8
|
+
const server = serverInstance;
|
|
9
|
+
if (server != null) {
|
|
10
|
+
await server.close();
|
|
11
|
+
}
|
|
12
|
+
serverInstance = void 0;
|
|
13
|
+
}
|
|
14
|
+
process.on("SIGTERM", () => {
|
|
15
|
+
cleanup().catch((err) => {
|
|
16
|
+
logger.error("cleanup \uC2E4\uD328", err);
|
|
17
|
+
}).finally(() => {
|
|
18
|
+
process.exit(0);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
process.on("SIGINT", () => {
|
|
22
|
+
cleanup().catch((err) => {
|
|
23
|
+
logger.error("cleanup \uC2E4\uD328", err);
|
|
24
|
+
}).finally(() => {
|
|
25
|
+
process.exit(0);
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
function isPortAvailable(port) {
|
|
29
|
+
return new Promise((resolve) => {
|
|
30
|
+
const server = net.createServer();
|
|
31
|
+
server.once("error", () => resolve(false));
|
|
32
|
+
server.once("listening", () => {
|
|
33
|
+
server.close(() => resolve(true));
|
|
34
|
+
});
|
|
35
|
+
server.listen(port, "0.0.0.0");
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async function findAvailablePort(startPort, maxRetries = 20) {
|
|
39
|
+
for (let i = 0; i < maxRetries; i++) {
|
|
40
|
+
const port = startPort + i;
|
|
41
|
+
if (await isPortAvailable(port)) {
|
|
42
|
+
return port;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return startPort;
|
|
46
|
+
}
|
|
47
|
+
async function start(info) {
|
|
48
|
+
try {
|
|
49
|
+
const module = await import(info.mainJsPath);
|
|
50
|
+
const server = module.server;
|
|
51
|
+
if (server == null) {
|
|
52
|
+
throw new Error("main.js\uC5D0\uC11C server \uC778\uC2A4\uD134\uC2A4\uB97C export\uD574\uC57C \uD569\uB2C8\uB2E4.");
|
|
53
|
+
}
|
|
54
|
+
serverInstance = server;
|
|
55
|
+
const originalPort = server.options.port;
|
|
56
|
+
const availablePort = await findAvailablePort(originalPort);
|
|
57
|
+
if (availablePort !== originalPort) {
|
|
58
|
+
logger.info(`\uD3EC\uD2B8 ${originalPort} \uC0AC\uC6A9 \uC911 \u2192 ${availablePort}\uB85C \uBCC0\uACBD`);
|
|
59
|
+
server.options.port = availablePort;
|
|
60
|
+
}
|
|
61
|
+
for (const [name, port] of Object.entries(info.clientPorts)) {
|
|
62
|
+
await server.fastify.register(proxy, {
|
|
63
|
+
prefix: `/${name}`,
|
|
64
|
+
upstream: `http://127.0.0.1:${port}`,
|
|
65
|
+
rewritePrefix: `/${name}`,
|
|
66
|
+
websocket: true
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
await server.listen();
|
|
70
|
+
sender.send("serverReady", { port: server.options.port });
|
|
71
|
+
} catch (err) {
|
|
72
|
+
logger.error("Server Runtime \uC2DC\uC791 \uC2E4\uD328", err);
|
|
73
|
+
sender.send("error", {
|
|
74
|
+
message: err instanceof Error ? err.message : String(err)
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const sender = createWorker({
|
|
79
|
+
start
|
|
80
|
+
});
|
|
81
|
+
var server_runtime_worker_default = sender;
|
|
82
|
+
export {
|
|
83
|
+
server_runtime_worker_default as default
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=server-runtime.worker.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/workers/server-runtime.worker.ts"],
|
|
4
|
+
"sourcesContent": ["import proxy from \"@fastify/http-proxy\";\nimport { createWorker } from \"@simplysm/core-node\";\nimport { consola } from \"consola\";\nimport net from \"net\";\n\n//#region Types\n\n/**\n * Server Runtime \uC2DC\uC791 \uC815\uBCF4\n */\nexport interface ServerRuntimeStartInfo {\n mainJsPath: string;\n clientPorts: Record<string, number>;\n}\n\n/**\n * \uC11C\uBC84 \uC900\uBE44 \uC774\uBCA4\uD2B8\n */\nexport interface ServerRuntimeReadyEvent {\n port: number;\n}\n\n/**\n * \uC5D0\uB7EC \uC774\uBCA4\uD2B8\n */\nexport interface ServerRuntimeErrorEvent {\n message: string;\n}\n\n/**\n * Worker \uC774\uBCA4\uD2B8 \uD0C0\uC785\n */\nexport interface ServerRuntimeWorkerEvents extends Record<string, unknown> {\n serverReady: ServerRuntimeReadyEvent;\n error: ServerRuntimeErrorEvent;\n}\n\n//#endregion\n\nconst logger = consola.withTag(\"sd:cli:server-runtime:worker\");\n\n/** \uC11C\uBC84 \uC778\uC2A4\uD134\uC2A4 (\uC815\uB9AC \uB300\uC0C1) */\nlet serverInstance: { close: () => Promise<void> } | undefined;\n\n/**\n * \uB9AC\uC18C\uC2A4 \uC815\uB9AC\n */\nasync function cleanup(): Promise<void> {\n const server = serverInstance;\n if (server != null) {\n await server.close();\n }\n serverInstance = undefined;\n}\n\nprocess.on(\"SIGTERM\", () => {\n cleanup()\n .catch((err) => {\n logger.error(\"cleanup \uC2E4\uD328\", err);\n })\n .finally(() => {\n process.exit(0);\n });\n});\n\nprocess.on(\"SIGINT\", () => {\n cleanup()\n .catch((err) => {\n logger.error(\"cleanup \uC2E4\uD328\", err);\n })\n .finally(() => {\n process.exit(0);\n });\n});\n\n/**\n * \uD3EC\uD2B8\uAC00 \uC0AC\uC6A9 \uAC00\uB2A5\uD55C\uC9C0 \uD655\uC778\n */\nfunction isPortAvailable(port: number): Promise<boolean> {\n return new Promise((resolve) => {\n const server = net.createServer();\n server.once(\"error\", () => resolve(false));\n server.once(\"listening\", () => {\n server.close(() => resolve(true));\n });\n server.listen(port, \"0.0.0.0\");\n });\n}\n\n/**\n * \uC2DC\uC791 \uD3EC\uD2B8\uBD80\uD130 \uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uD3EC\uD2B8\uB97C \uCC3E\uC544 \uBC18\uD658\n */\nasync function findAvailablePort(startPort: number, maxRetries = 20): Promise<number> {\n for (let i = 0; i < maxRetries; i++) {\n const port = startPort + i;\n if (await isPortAvailable(port)) {\n return port;\n }\n }\n return startPort;\n}\n\n/**\n * Server Runtime \uC2DC\uC791\n * main.js\uB97C import\uD558\uACE0, Vite proxy\uB97C \uC124\uC815\uD55C \uD6C4 listen\n */\nasync function start(info: ServerRuntimeStartInfo): Promise<void> {\n try {\n // main.js import (server \uC778\uC2A4\uD134\uC2A4\uB97C export\uD574\uC57C \uD568)\n const module = await import(info.mainJsPath);\n const server = module.server;\n\n if (server == null) {\n throw new Error(\"main.js\uC5D0\uC11C server \uC778\uC2A4\uD134\uC2A4\uB97C export\uD574\uC57C \uD569\uB2C8\uB2E4.\");\n }\n\n // \uC11C\uBC84 \uC778\uC2A4\uD134\uC2A4 \uC800\uC7A5 (cleanup\uC6A9)\n serverInstance = server;\n\n // \uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uD3EC\uD2B8 \uD0D0\uC0C9 (\uD3EC\uD2B8 \uCDA9\uB3CC \uC2DC \uC790\uB3D9 \uC99D\uAC00)\n const originalPort = server.options.port;\n const availablePort = await findAvailablePort(originalPort);\n if (availablePort !== originalPort) {\n logger.info(`\uD3EC\uD2B8 ${originalPort} \uC0AC\uC6A9 \uC911 \u2192 ${availablePort}\uB85C \uBCC0\uACBD`);\n server.options.port = availablePort;\n }\n\n // Vite proxy \uC124\uC815 (clientPorts\uAC00 \uC788\uB294 \uACBD\uC6B0\uB9CC)\n for (const [name, port] of Object.entries(info.clientPorts)) {\n await server.fastify.register(proxy, {\n prefix: `/${name}`,\n upstream: `http://127.0.0.1:${port}`,\n rewritePrefix: `/${name}`,\n websocket: true,\n });\n }\n\n // \uC11C\uBC84 \uC2DC\uC791\n await server.listen();\n\n sender.send(\"serverReady\", { port: server.options.port });\n } catch (err) {\n logger.error(\"Server Runtime \uC2DC\uC791 \uC2E4\uD328\", err);\n sender.send(\"error\", {\n message: err instanceof Error ? err.message : String(err),\n });\n }\n}\n\nconst sender = createWorker<{ start: typeof start }, ServerRuntimeWorkerEvents>({\n start,\n});\n\nexport default sender;\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,WAAW;AAClB,SAAS,oBAAoB;AAC7B,SAAS,eAAe;AACxB,OAAO,SAAS;AAoChB,MAAM,SAAS,QAAQ,QAAQ,8BAA8B;AAG7D,IAAI;AAKJ,eAAe,UAAyB;AACtC,QAAM,SAAS;AACf,MAAI,UAAU,MAAM;AAClB,UAAM,OAAO,MAAM;AAAA,EACrB;AACA,mBAAiB;AACnB;AAEA,QAAQ,GAAG,WAAW,MAAM;AAC1B,UAAQ,EACL,MAAM,CAAC,QAAQ;AACd,WAAO,MAAM,wBAAc,GAAG;AAAA,EAChC,CAAC,EACA,QAAQ,MAAM;AACb,YAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AACL,CAAC;AAED,QAAQ,GAAG,UAAU,MAAM;AACzB,UAAQ,EACL,MAAM,CAAC,QAAQ;AACd,WAAO,MAAM,wBAAc,GAAG;AAAA,EAChC,CAAC,EACA,QAAQ,MAAM;AACb,YAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AACL,CAAC;AAKD,SAAS,gBAAgB,MAAgC;AACvD,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,SAAS,IAAI,aAAa;AAChC,WAAO,KAAK,SAAS,MAAM,QAAQ,KAAK,CAAC;AACzC,WAAO,KAAK,aAAa,MAAM;AAC7B,aAAO,MAAM,MAAM,QAAQ,IAAI,CAAC;AAAA,IAClC,CAAC;AACD,WAAO,OAAO,MAAM,SAAS;AAAA,EAC/B,CAAC;AACH;AAKA,eAAe,kBAAkB,WAAmB,aAAa,IAAqB;AACpF,WAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,UAAM,OAAO,YAAY;AACzB,QAAI,MAAM,gBAAgB,IAAI,GAAG;AAC/B,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAMA,eAAe,MAAM,MAA6C;AAChE,MAAI;AAEF,UAAM,SAAS,MAAM,OAAO,KAAK;AACjC,UAAM,SAAS,OAAO;AAEtB,QAAI,UAAU,MAAM;AAClB,YAAM,IAAI,MAAM,kGAAsC;AAAA,IACxD;AAGA,qBAAiB;AAGjB,UAAM,eAAe,OAAO,QAAQ;AACpC,UAAM,gBAAgB,MAAM,kBAAkB,YAAY;AAC1D,QAAI,kBAAkB,cAAc;AAClC,aAAO,KAAK,gBAAM,YAAY,+BAAW,aAAa,qBAAM;AAC5D,aAAO,QAAQ,OAAO;AAAA,IACxB;AAGA,eAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,KAAK,WAAW,GAAG;AAC3D,YAAM,OAAO,QAAQ,SAAS,OAAO;AAAA,QACnC,QAAQ,IAAI,IAAI;AAAA,QAChB,UAAU,oBAAoB,IAAI;AAAA,QAClC,eAAe,IAAI,IAAI;AAAA,QACvB,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAGA,UAAM,OAAO,OAAO;AAEpB,WAAO,KAAK,eAAe,EAAE,MAAM,OAAO,QAAQ,KAAK,CAAC;AAAA,EAC1D,SAAS,KAAK;AACZ,WAAO,MAAM,4CAAwB,GAAG;AACxC,WAAO,KAAK,SAAS;AAAA,MACnB,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IAC1D,CAAC;AAAA,EACH;AACF;AAEA,MAAM,SAAS,aAAiE;AAAA,EAC9E;AACF,CAAC;AAED,IAAO,gCAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,49 +1,121 @@
|
|
|
1
1
|
import path from "path";
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
2
|
+
import esbuild from "esbuild";
|
|
3
|
+
import { createWorker } from "@simplysm/core-node";
|
|
4
|
+
import { consola } from "consola";
|
|
5
|
+
import { parseRootTsconfig, getPackageSourceFiles, getCompilerOptionsForPackage } from "../utils/tsconfig";
|
|
6
|
+
import { createServerEsbuildOptions } from "../utils/esbuild-config";
|
|
7
|
+
const logger = consola.withTag("sd:cli:server:worker");
|
|
8
|
+
let esbuildContext;
|
|
9
|
+
async function cleanup() {
|
|
10
|
+
const contextToDispose = esbuildContext;
|
|
11
|
+
esbuildContext = void 0;
|
|
12
|
+
if (contextToDispose != null) {
|
|
13
|
+
await contextToDispose.dispose();
|
|
14
|
+
}
|
|
13
15
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
process.on("SIGTERM", () => {
|
|
17
|
+
cleanup().catch((err) => {
|
|
18
|
+
logger.error("cleanup \uC2E4\uD328", err);
|
|
19
|
+
}).finally(() => {
|
|
20
|
+
process.exit(0);
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
process.on("SIGINT", () => {
|
|
24
|
+
cleanup().catch((err) => {
|
|
25
|
+
logger.error("cleanup \uC2E4\uD328", err);
|
|
26
|
+
}).finally(() => {
|
|
27
|
+
process.exit(0);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
async function build(info) {
|
|
31
|
+
const mainJsPath = path.join(info.pkgDir, "dist", "main.js");
|
|
32
|
+
try {
|
|
33
|
+
const parsedConfig = parseRootTsconfig(info.cwd);
|
|
34
|
+
const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);
|
|
35
|
+
const compilerOptions = await getCompilerOptionsForPackage(parsedConfig.options, "node", info.pkgDir);
|
|
36
|
+
const esbuildOptions = createServerEsbuildOptions({
|
|
37
|
+
pkgDir: info.pkgDir,
|
|
38
|
+
entryPoints,
|
|
39
|
+
compilerOptions,
|
|
40
|
+
env: info.env
|
|
17
41
|
});
|
|
42
|
+
const result = await esbuild.build(esbuildOptions);
|
|
43
|
+
const errors = result.errors.map((e) => e.text);
|
|
44
|
+
return {
|
|
45
|
+
success: result.errors.length === 0,
|
|
46
|
+
mainJsPath,
|
|
47
|
+
errors: errors.length > 0 ? errors : void 0
|
|
48
|
+
};
|
|
49
|
+
} catch (err) {
|
|
50
|
+
return {
|
|
51
|
+
success: false,
|
|
52
|
+
mainJsPath,
|
|
53
|
+
errors: [err instanceof Error ? err.message : String(err)]
|
|
54
|
+
};
|
|
55
|
+
}
|
|
18
56
|
}
|
|
19
|
-
let
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
57
|
+
let isWatchStarted = false;
|
|
58
|
+
async function startWatch(info) {
|
|
59
|
+
if (isWatchStarted) {
|
|
60
|
+
throw new Error("startWatch\uB294 Worker\uB2F9 \uD55C \uBC88\uB9CC \uD638\uCD9C\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.");
|
|
61
|
+
}
|
|
62
|
+
isWatchStarted = true;
|
|
63
|
+
try {
|
|
64
|
+
const parsedConfig = parseRootTsconfig(info.cwd);
|
|
65
|
+
const entryPoints = getPackageSourceFiles(info.pkgDir, parsedConfig);
|
|
66
|
+
const compilerOptions = await getCompilerOptionsForPackage(parsedConfig.options, "node", info.pkgDir);
|
|
67
|
+
const mainJsPath = path.join(info.pkgDir, "dist", "main.js");
|
|
68
|
+
let resolveFirstBuild;
|
|
69
|
+
const firstBuildPromise = new Promise((resolve) => {
|
|
70
|
+
resolveFirstBuild = resolve;
|
|
71
|
+
});
|
|
72
|
+
let isFirstBuild = true;
|
|
73
|
+
const baseOptions = createServerEsbuildOptions({
|
|
74
|
+
pkgDir: info.pkgDir,
|
|
75
|
+
entryPoints,
|
|
76
|
+
compilerOptions,
|
|
77
|
+
env: info.env
|
|
78
|
+
});
|
|
79
|
+
esbuildContext = await esbuild.context({
|
|
80
|
+
...baseOptions,
|
|
81
|
+
plugins: [
|
|
82
|
+
{
|
|
83
|
+
name: "watch-notify",
|
|
84
|
+
setup(pluginBuild) {
|
|
85
|
+
pluginBuild.onStart(() => {
|
|
86
|
+
sender.send("buildStart", {});
|
|
38
87
|
});
|
|
39
|
-
|
|
88
|
+
pluginBuild.onEnd((result) => {
|
|
89
|
+
const errors = result.errors.map((e) => e.text);
|
|
90
|
+
const success = result.errors.length === 0;
|
|
91
|
+
sender.send("build", { success, mainJsPath, errors: errors.length > 0 ? errors : void 0 });
|
|
92
|
+
if (isFirstBuild) {
|
|
93
|
+
isFirstBuild = false;
|
|
94
|
+
resolveFirstBuild();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
40
98
|
}
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
99
|
+
]
|
|
100
|
+
});
|
|
101
|
+
await esbuildContext.watch();
|
|
102
|
+
await firstBuildPromise;
|
|
103
|
+
} catch (err) {
|
|
104
|
+
sender.send("error", {
|
|
105
|
+
message: err instanceof Error ? err.message : String(err)
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function stopWatch() {
|
|
110
|
+
await cleanup();
|
|
111
|
+
}
|
|
112
|
+
const sender = createWorker({
|
|
113
|
+
build,
|
|
114
|
+
startWatch,
|
|
115
|
+
stopWatch
|
|
49
116
|
});
|
|
117
|
+
var server_worker_default = sender;
|
|
118
|
+
export {
|
|
119
|
+
server_worker_default as default
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=server.worker.js.map
|