@simplysm/sd-cli 12.16.27 → 13.0.0-beta.11
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,19 @@
|
|
|
1
|
+
import type { Bytes } from "@simplysm/core-common";
|
|
2
|
+
import type { StorageConnConfig } from "./storage-conn-config";
|
|
3
|
+
export interface FileInfo {
|
|
4
|
+
name: string;
|
|
5
|
+
isFile: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface Storage {
|
|
8
|
+
connect(config: StorageConnConfig): Promise<void>;
|
|
9
|
+
mkdir(dirPath: string): Promise<void>;
|
|
10
|
+
rename(fromPath: string, toPath: string): Promise<void>;
|
|
11
|
+
readdir(dirPath: string): Promise<FileInfo[]>;
|
|
12
|
+
readFile(filePath: string): Promise<Bytes>;
|
|
13
|
+
exists(filePath: string): Promise<boolean>;
|
|
14
|
+
put(localPathOrBuffer: string | Bytes, storageFilePath: string): Promise<void>;
|
|
15
|
+
uploadDir(fromPath: string, toPath: string): Promise<void>;
|
|
16
|
+
remove(filePath: string): Promise<void>;
|
|
17
|
+
close(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../../storage/src/types/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,GAAG,CAAC,iBAAiB,EAAE,MAAM,GAAG,KAAK,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import fs from "fs/promises";
|
|
3
|
+
async function getVersion(cwd) {
|
|
4
|
+
const pkgJsonPath = path.join(cwd, "package.json");
|
|
5
|
+
const pkgJsonContent = await fs.readFile(pkgJsonPath, "utf-8");
|
|
6
|
+
const pkgJson = JSON.parse(pkgJsonContent);
|
|
7
|
+
return pkgJson.version ?? "0.0.0";
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
getVersion
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=build-env.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/build-env.ts"],
|
|
4
|
+
"sourcesContent": ["import path from \"path\";\nimport fs from \"fs/promises\";\n\n/**\n * \uB8E8\uD2B8 package.json\uC5D0\uC11C version \uAC00\uC838\uC624\uAE30\n */\nexport async function getVersion(cwd: string): Promise<string> {\n const pkgJsonPath = path.join(cwd, \"package.json\");\n const pkgJsonContent = await fs.readFile(pkgJsonPath, \"utf-8\");\n const pkgJson = JSON.parse(pkgJsonContent) as { version?: string };\n return pkgJson.version ?? \"0.0.0\";\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,QAAQ;AAKf,eAAsB,WAAW,KAA8B;AAC7D,QAAM,cAAc,KAAK,KAAK,KAAK,cAAc;AACjD,QAAM,iBAAiB,MAAM,GAAG,SAAS,aAAa,OAAO;AAC7D,QAAM,UAAU,KAAK,MAAM,cAAc;AACzC,SAAO,QAAQ,WAAW;AAC5B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Project, SyntaxKind } from "ts-morph";
|
|
2
|
+
function findPackagesObject(configPath) {
|
|
3
|
+
const project = new Project();
|
|
4
|
+
const sourceFile = project.addSourceFileAtPath(configPath);
|
|
5
|
+
const configVar = sourceFile.getVariableDeclarationOrThrow("config");
|
|
6
|
+
const arrowFn = configVar.getInitializerIfKindOrThrow(SyntaxKind.ArrowFunction);
|
|
7
|
+
const body = arrowFn.getBody();
|
|
8
|
+
let returnObj;
|
|
9
|
+
if (body.isKind(SyntaxKind.ParenthesizedExpression)) {
|
|
10
|
+
returnObj = body.getExpressionIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);
|
|
11
|
+
} else if (body.isKind(SyntaxKind.Block)) {
|
|
12
|
+
const returnStmt = body.getFirstDescendantByKindOrThrow(SyntaxKind.ReturnStatement);
|
|
13
|
+
returnObj = returnStmt.getExpressionIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);
|
|
14
|
+
} else {
|
|
15
|
+
throw new Error("sd.config.ts\uC758 \uAD6C\uC870\uB97C \uC778\uC2DD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.");
|
|
16
|
+
}
|
|
17
|
+
const packagesProp = returnObj.getPropertyOrThrow("packages").asKindOrThrow(SyntaxKind.PropertyAssignment);
|
|
18
|
+
const packagesObj = packagesProp.getInitializerIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);
|
|
19
|
+
return { project, packagesObj };
|
|
20
|
+
}
|
|
21
|
+
function addPackageToSdConfig(configPath, packageName, config) {
|
|
22
|
+
const { project, packagesObj } = findPackagesObject(configPath);
|
|
23
|
+
const existing = packagesObj.getProperty(`"${packageName}"`) ?? packagesObj.getProperty(packageName);
|
|
24
|
+
if (existing) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const configStr = JSON.stringify(config).replace(/"([^"]+)":/g, "$1: ").replace(/"/g, '"');
|
|
28
|
+
packagesObj.addPropertyAssignment({
|
|
29
|
+
name: `"${packageName}"`,
|
|
30
|
+
initializer: configStr
|
|
31
|
+
});
|
|
32
|
+
project.saveSync();
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
function setClientServerInSdConfig(configPath, clientName, serverName) {
|
|
36
|
+
const { project, packagesObj } = findPackagesObject(configPath);
|
|
37
|
+
const clientPropNode = packagesObj.getProperty(`"${clientName}"`) ?? packagesObj.getProperty(clientName);
|
|
38
|
+
if (clientPropNode == null) {
|
|
39
|
+
throw new Error(`\uD074\uB77C\uC774\uC5B8\uD2B8 "${clientName}"\uC744(\uB97C) sd.config.ts\uC5D0\uC11C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.`);
|
|
40
|
+
}
|
|
41
|
+
const clientProp = clientPropNode.asKindOrThrow(SyntaxKind.PropertyAssignment);
|
|
42
|
+
const clientObj = clientProp.getInitializerIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);
|
|
43
|
+
const serverProp = clientObj.getProperty("server");
|
|
44
|
+
if (serverProp) {
|
|
45
|
+
serverProp.remove();
|
|
46
|
+
}
|
|
47
|
+
clientObj.addPropertyAssignment({
|
|
48
|
+
name: "server",
|
|
49
|
+
initializer: `"${serverName}"`
|
|
50
|
+
});
|
|
51
|
+
project.saveSync();
|
|
52
|
+
}
|
|
53
|
+
function addTailwindToEslintConfig(configPath, clientName) {
|
|
54
|
+
const project = new Project();
|
|
55
|
+
const sourceFile = project.addSourceFileAtPath(configPath);
|
|
56
|
+
const defaultExport = sourceFile.getFirstDescendantByKindOrThrow(SyntaxKind.ArrayLiteralExpression);
|
|
57
|
+
const text = defaultExport.getText();
|
|
58
|
+
if (text.includes("tailwindcss")) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
defaultExport.addElement(`{
|
|
62
|
+
files: ["**/*.{ts,tsx}"],
|
|
63
|
+
settings: {
|
|
64
|
+
tailwindcss: {
|
|
65
|
+
config: "packages/${clientName}/tailwind.config.ts",
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
}`);
|
|
69
|
+
project.saveSync();
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
export {
|
|
73
|
+
addPackageToSdConfig,
|
|
74
|
+
addTailwindToEslintConfig,
|
|
75
|
+
setClientServerInSdConfig
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=config-editor.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/config-editor.ts"],
|
|
4
|
+
"sourcesContent": ["import { Project, SyntaxKind, type ObjectLiteralExpression } from \"ts-morph\";\n\n/**\n * sd.config.ts\uC5D0\uC11C packages \uAC1D\uCCB4 \uB9AC\uD130\uB7F4\uC744 \uCC3E\uB294\uB2E4.\n *\n * \uAD6C\uC870: const config: SdConfigFn = () => ({ packages: { ... } });\n * -> ArrowFunction -> ParenthesizedExpression -> ObjectLiteral -> \"packages\" property -> ObjectLiteral\n */\nfunction findPackagesObject(configPath: string): {\n project: Project;\n packagesObj: ObjectLiteralExpression;\n} {\n const project = new Project();\n const sourceFile = project.addSourceFileAtPath(configPath);\n\n // \"config\" \uBCC0\uC218 \uC120\uC5B8 \uCC3E\uAE30\n const configVar = sourceFile.getVariableDeclarationOrThrow(\"config\");\n const arrowFn = configVar.getInitializerIfKindOrThrow(SyntaxKind.ArrowFunction);\n\n // \uD654\uC0B4\uD45C \uD568\uC218 \uBCF8\uBB38\uC5D0\uC11C \uBC18\uD658 \uAC1D\uCCB4 \uCC3E\uAE30\n const body = arrowFn.getBody();\n let returnObj: ObjectLiteralExpression;\n\n if (body.isKind(SyntaxKind.ParenthesizedExpression)) {\n returnObj = body.getExpressionIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);\n } else if (body.isKind(SyntaxKind.Block)) {\n const returnStmt = body.getFirstDescendantByKindOrThrow(SyntaxKind.ReturnStatement);\n returnObj = returnStmt.getExpressionIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);\n } else {\n throw new Error(\"sd.config.ts\uC758 \uAD6C\uC870\uB97C \uC778\uC2DD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\");\n }\n\n // \"packages\" \uD504\uB85C\uD37C\uD2F0 \uCC3E\uAE30\n const packagesProp = returnObj.getPropertyOrThrow(\"packages\").asKindOrThrow(SyntaxKind.PropertyAssignment);\n const packagesObj = packagesProp.getInitializerIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);\n\n return { project, packagesObj };\n}\n\n/**\n * sd.config.ts\uC758 packages \uAC1D\uCCB4\uC5D0 \uC0C8 \uD328\uD0A4\uC9C0 \uD56D\uBAA9\uC744 \uCD94\uAC00\uD55C\uB2E4.\n *\n * @returns true: \uC131\uACF5, false: \uC774\uBBF8 \uC874\uC7AC\n */\nexport function addPackageToSdConfig(\n configPath: string,\n packageName: string,\n config: Record<string, unknown>,\n): boolean {\n const { project, packagesObj } = findPackagesObject(configPath);\n\n // \uC774\uBBF8 \uC874\uC7AC\uD558\uB294\uC9C0 \uD655\uC778 (\uB530\uC634\uD45C \uC788\uB294 \uD615\uD0DC\uC640 \uC5C6\uB294 \uD615\uD0DC \uBAA8\uB450 \uCCB4\uD06C)\n const existing = packagesObj.getProperty(`\"${packageName}\"`) ?? packagesObj.getProperty(packageName);\n if (existing) {\n return false;\n }\n\n // \uC0C8 \uD504\uB85C\uD37C\uD2F0 \uCD94\uAC00 -- config \uAC1D\uCCB4\uB97C ts-morph initializer \uBB38\uC790\uC5F4\uB85C \uBCC0\uD658\n const configStr = JSON.stringify(config)\n .replace(/\"([^\"]+)\":/g, \"$1: \")\n .replace(/\"/g, '\"');\n\n packagesObj.addPropertyAssignment({\n name: `\"${packageName}\"`,\n initializer: configStr,\n });\n\n project.saveSync();\n return true;\n}\n\n/**\n * sd.config.ts\uC5D0\uC11C \uD2B9\uC815 \uD074\uB77C\uC774\uC5B8\uD2B8\uC758 server \uD544\uB4DC\uB97C \uC124\uC815\uD55C\uB2E4.\n */\nexport function setClientServerInSdConfig(configPath: string, clientName: string, serverName: string): void {\n const { project, packagesObj } = findPackagesObject(configPath);\n\n const clientPropNode = packagesObj.getProperty(`\"${clientName}\"`) ?? packagesObj.getProperty(clientName);\n if (clientPropNode == null) {\n throw new Error(`\uD074\uB77C\uC774\uC5B8\uD2B8 \"${clientName}\"\uC744(\uB97C) sd.config.ts\uC5D0\uC11C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.`);\n }\n\n const clientProp = clientPropNode.asKindOrThrow(SyntaxKind.PropertyAssignment);\n const clientObj = clientProp.getInitializerIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);\n\n // \uAE30\uC874 server \uD504\uB85C\uD37C\uD2F0\uAC00 \uC788\uC73C\uBA74 \uC81C\uAC70\n const serverProp = clientObj.getProperty(\"server\");\n if (serverProp) {\n serverProp.remove();\n }\n\n // server \uD504\uB85C\uD37C\uD2F0 \uCD94\uAC00\n clientObj.addPropertyAssignment({\n name: \"server\",\n initializer: `\"${serverName}\"`,\n });\n\n project.saveSync();\n}\n\n/**\n * eslint.config.ts\uC5D0 tailwindcss \uC124\uC815 \uBE14\uB85D\uC744 \uCD94\uAC00\uD55C\uB2E4.\n *\n * @returns true: \uCD94\uAC00\uB428, false: \uC774\uBBF8 \uC874\uC7AC\n */\nexport function addTailwindToEslintConfig(configPath: string, clientName: string): boolean {\n const project = new Project();\n const sourceFile = project.addSourceFileAtPath(configPath);\n\n // default export \uBC30\uC5F4 \uCC3E\uAE30\n const defaultExport = sourceFile.getFirstDescendantByKindOrThrow(SyntaxKind.ArrayLiteralExpression);\n\n // tailwindcss \uC124\uC815\uC774 \uC774\uBBF8 \uC788\uB294\uC9C0 \uD655\uC778\n const text = defaultExport.getText();\n if (text.includes(\"tailwindcss\")) {\n return false;\n }\n\n // \uC0C8 \uC124\uC815 \uAC1D\uCCB4 \uCD94\uAC00\n defaultExport.addElement(`{\n files: [\"**/*.{ts,tsx}\"],\n settings: {\n tailwindcss: {\n config: \"packages/${clientName}/tailwind.config.ts\",\n },\n },\n }`);\n\n project.saveSync();\n return true;\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,SAAS,kBAAgD;AAQlE,SAAS,mBAAmB,YAG1B;AACA,QAAM,UAAU,IAAI,QAAQ;AAC5B,QAAM,aAAa,QAAQ,oBAAoB,UAAU;AAGzD,QAAM,YAAY,WAAW,8BAA8B,QAAQ;AACnE,QAAM,UAAU,UAAU,4BAA4B,WAAW,aAAa;AAG9E,QAAM,OAAO,QAAQ,QAAQ;AAC7B,MAAI;AAEJ,MAAI,KAAK,OAAO,WAAW,uBAAuB,GAAG;AACnD,gBAAY,KAAK,2BAA2B,WAAW,uBAAuB;AAAA,EAChF,WAAW,KAAK,OAAO,WAAW,KAAK,GAAG;AACxC,UAAM,aAAa,KAAK,gCAAgC,WAAW,eAAe;AAClF,gBAAY,WAAW,2BAA2B,WAAW,uBAAuB;AAAA,EACtF,OAAO;AACL,UAAM,IAAI,MAAM,2FAA+B;AAAA,EACjD;AAGA,QAAM,eAAe,UAAU,mBAAmB,UAAU,EAAE,cAAc,WAAW,kBAAkB;AACzG,QAAM,cAAc,aAAa,4BAA4B,WAAW,uBAAuB;AAE/F,SAAO,EAAE,SAAS,YAAY;AAChC;AAOO,SAAS,qBACd,YACA,aACA,QACS;AACT,QAAM,EAAE,SAAS,YAAY,IAAI,mBAAmB,UAAU;AAG9D,QAAM,WAAW,YAAY,YAAY,IAAI,WAAW,GAAG,KAAK,YAAY,YAAY,WAAW;AACnG,MAAI,UAAU;AACZ,WAAO;AAAA,EACT;AAGA,QAAM,YAAY,KAAK,UAAU,MAAM,EACpC,QAAQ,eAAe,MAAM,EAC7B,QAAQ,MAAM,GAAG;AAEpB,cAAY,sBAAsB;AAAA,IAChC,MAAM,IAAI,WAAW;AAAA,IACrB,aAAa;AAAA,EACf,CAAC;AAED,UAAQ,SAAS;AACjB,SAAO;AACT;AAKO,SAAS,0BAA0B,YAAoB,YAAoB,YAA0B;AAC1G,QAAM,EAAE,SAAS,YAAY,IAAI,mBAAmB,UAAU;AAE9D,QAAM,iBAAiB,YAAY,YAAY,IAAI,UAAU,GAAG,KAAK,YAAY,YAAY,UAAU;AACvG,MAAI,kBAAkB,MAAM;AAC1B,UAAM,IAAI,MAAM,mCAAU,UAAU,wFAAiC;AAAA,EACvE;AAEA,QAAM,aAAa,eAAe,cAAc,WAAW,kBAAkB;AAC7E,QAAM,YAAY,WAAW,4BAA4B,WAAW,uBAAuB;AAG3F,QAAM,aAAa,UAAU,YAAY,QAAQ;AACjD,MAAI,YAAY;AACd,eAAW,OAAO;AAAA,EACpB;AAGA,YAAU,sBAAsB;AAAA,IAC9B,MAAM;AAAA,IACN,aAAa,IAAI,UAAU;AAAA,EAC7B,CAAC;AAED,UAAQ,SAAS;AACnB;AAOO,SAAS,0BAA0B,YAAoB,YAA6B;AACzF,QAAM,UAAU,IAAI,QAAQ;AAC5B,QAAM,aAAa,QAAQ,oBAAoB,UAAU;AAGzD,QAAM,gBAAgB,WAAW,gCAAgC,WAAW,sBAAsB;AAGlG,QAAM,OAAO,cAAc,QAAQ;AACnC,MAAI,KAAK,SAAS,aAAa,GAAG;AAChC,WAAO;AAAA,EACT;AAGA,gBAAc,WAAW;AAAA;AAAA;AAAA;AAAA,4BAIC,UAAU;AAAA;AAAA;AAAA,IAGlC;AAEF,UAAQ,SAAS;AACjB,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
function createLibraryEsbuildOptions(options) {
|
|
3
|
+
return {
|
|
4
|
+
entryPoints: options.entryPoints,
|
|
5
|
+
outdir: path.join(options.pkgDir, "dist"),
|
|
6
|
+
format: "esm",
|
|
7
|
+
sourcemap: true,
|
|
8
|
+
platform: options.target === "node" ? "node" : "browser",
|
|
9
|
+
target: options.target === "node" ? "node20" : "chrome84",
|
|
10
|
+
bundle: false,
|
|
11
|
+
tsconfigRaw: { compilerOptions: options.compilerOptions }
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function createServerEsbuildOptions(options) {
|
|
15
|
+
const define = {};
|
|
16
|
+
if (options.env != null) {
|
|
17
|
+
for (const [key, value] of Object.entries(options.env)) {
|
|
18
|
+
define[`process.env["${key}"]`] = JSON.stringify(value);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
entryPoints: options.entryPoints,
|
|
23
|
+
outdir: path.join(options.pkgDir, "dist"),
|
|
24
|
+
format: "esm",
|
|
25
|
+
sourcemap: true,
|
|
26
|
+
platform: "node",
|
|
27
|
+
target: "node20",
|
|
28
|
+
bundle: true,
|
|
29
|
+
banner: {
|
|
30
|
+
js: "import { createRequire } from 'module'; const require = createRequire(import.meta.url);"
|
|
31
|
+
},
|
|
32
|
+
define,
|
|
33
|
+
tsconfigRaw: { compilerOptions: options.compilerOptions }
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function getTypecheckEnvFromTarget(target) {
|
|
37
|
+
return target === "node" ? "node" : "browser";
|
|
38
|
+
}
|
|
39
|
+
export {
|
|
40
|
+
createLibraryEsbuildOptions,
|
|
41
|
+
createServerEsbuildOptions,
|
|
42
|
+
getTypecheckEnvFromTarget
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=esbuild-config.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/esbuild-config.ts"],
|
|
4
|
+
"sourcesContent": ["import path from \"path\";\nimport type esbuild from \"esbuild\";\nimport type { TypecheckEnv } from \"./tsconfig\";\n\n/**\n * Library \uBE4C\uB4DC\uC6A9 esbuild \uC635\uC158\n * - bundle: false (\uAC1C\uBCC4 \uD30C\uC77C \uD2B8\uB79C\uC2A4\uD30C\uC77C)\n * - platform: target\uC5D0 \uB530\uB77C node \uB610\uB294 browser\n */\nexport interface LibraryEsbuildOptions {\n pkgDir: string;\n entryPoints: string[];\n target: \"node\" | \"browser\" | \"neutral\";\n compilerOptions: Record<string, unknown>;\n}\n\n/**\n * Server \uBE4C\uB4DC\uC6A9 esbuild \uC635\uC158\n * - bundle: true (\uBAA8\uB4E0 \uC758\uC874\uC131 \uD3EC\uD568\uD55C \uB2E8\uC77C \uBC88\uB4E4)\n */\nexport interface ServerEsbuildOptions {\n pkgDir: string;\n entryPoints: string[];\n compilerOptions: Record<string, unknown>;\n env?: Record<string, string>;\n}\n\n/**\n * Library\uC6A9 esbuild \uC124\uC815 \uC0DD\uC131\n *\n * node/browser/neutral \uD0C0\uAC9F\uC758 \uB77C\uC774\uBE0C\uB7EC\uB9AC \uD328\uD0A4\uC9C0 \uBE4C\uB4DC\uC5D0 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.\n * - bundle: false (\uAC1C\uBCC4 \uD30C\uC77C\uC744 \uAC01\uAC01 \uD2B8\uB79C\uC2A4\uD30C\uC77C)\n * - platform: target\uC774 node\uBA74 node, \uADF8 \uC678\uB294 browser\n * - target: node\uBA74 node20, \uADF8 \uC678\uB294 chrome84\n */\nexport function createLibraryEsbuildOptions(options: LibraryEsbuildOptions): esbuild.BuildOptions {\n return {\n entryPoints: options.entryPoints,\n outdir: path.join(options.pkgDir, \"dist\"),\n format: \"esm\",\n sourcemap: true,\n platform: options.target === \"node\" ? \"node\" : \"browser\",\n target: options.target === \"node\" ? \"node20\" : \"chrome84\",\n bundle: false,\n tsconfigRaw: { compilerOptions: options.compilerOptions as esbuild.TsconfigRaw[\"compilerOptions\"] },\n };\n}\n\n/**\n * Server\uC6A9 esbuild \uC124\uC815 \uC0DD\uC131\n *\n * \uC11C\uBC84 \uD328\uD0A4\uC9C0 \uBE4C\uB4DC\uC5D0 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.\n * - bundle: true (\uBAA8\uB4E0 \uC758\uC874\uC131 \uD3EC\uD568\uD55C \uB2E8\uC77C \uBC88\uB4E4)\n * - banner: CJS \uD328\uD0A4\uC9C0\uC758 require() \uC9C0\uC6D0\uC744 \uC704\uD55C createRequire shim\n * - env\uB97C define \uC635\uC158\uC73C\uB85C \uCE58\uD658 (process.env[\"KEY\"] \uD615\uD0DC)\n */\nexport function createServerEsbuildOptions(options: ServerEsbuildOptions): esbuild.BuildOptions {\n const define: Record<string, string> = {};\n if (options.env != null) {\n for (const [key, value] of Object.entries(options.env)) {\n define[`process.env[\"${key}\"]`] = JSON.stringify(value);\n }\n }\n\n return {\n entryPoints: options.entryPoints,\n outdir: path.join(options.pkgDir, \"dist\"),\n format: \"esm\",\n sourcemap: true,\n platform: \"node\",\n target: \"node20\",\n bundle: true,\n banner: {\n js: \"import { createRequire } from 'module'; const require = createRequire(import.meta.url);\",\n },\n define,\n tsconfigRaw: { compilerOptions: options.compilerOptions as esbuild.TsconfigRaw[\"compilerOptions\"] },\n };\n}\n\n/**\n * \uBE4C\uB4DC \uD0C0\uAC9F\uC5D0\uC11C TypecheckEnv \uCD94\uCD9C\n *\n * \uBE4C\uB4DC\uC6A9\uC774\uBBC0\uB85C neutral\uC740 browser\uB85C \uCC98\uB9AC\uD569\uB2C8\uB2E4.\n * (neutral \uD328\uD0A4\uC9C0\uB294 Node/\uBE0C\uB77C\uC6B0\uC800 \uACF5\uC6A9\uC774\uC9C0\uB9CC, \uBE4C\uB4DC \uC2DC\uC5D0\uB294 browser \uD658\uACBD \uAE30\uC900\uC73C\uB85C \uCC98\uB9AC)\n */\nexport function getTypecheckEnvFromTarget(target: \"node\" | \"browser\" | \"neutral\"): TypecheckEnv {\n return target === \"node\" ? \"node\" : \"browser\";\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,UAAU;AAmCV,SAAS,4BAA4B,SAAsD;AAChG,SAAO;AAAA,IACL,aAAa,QAAQ;AAAA,IACrB,QAAQ,KAAK,KAAK,QAAQ,QAAQ,MAAM;AAAA,IACxC,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,UAAU,QAAQ,WAAW,SAAS,SAAS;AAAA,IAC/C,QAAQ,QAAQ,WAAW,SAAS,WAAW;AAAA,IAC/C,QAAQ;AAAA,IACR,aAAa,EAAE,iBAAiB,QAAQ,gBAA0D;AAAA,EACpG;AACF;AAUO,SAAS,2BAA2B,SAAqD;AAC9F,QAAM,SAAiC,CAAC;AACxC,MAAI,QAAQ,OAAO,MAAM;AACvB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG,GAAG;AACtD,aAAO,gBAAgB,GAAG,IAAI,IAAI,KAAK,UAAU,KAAK;AAAA,IACxD;AAAA,EACF;AAEA,SAAO;AAAA,IACL,aAAa,QAAQ;AAAA,IACrB,QAAQ,KAAK,KAAK,QAAQ,QAAQ,MAAM;AAAA,IACxC,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,MACN,IAAI;AAAA,IACN;AAAA,IACA;AAAA,IACA,aAAa,EAAE,iBAAiB,QAAQ,gBAA0D;AAAA,EACpG;AACF;AAQO,SAAS,0BAA0B,QAAsD;AAC9F,SAAO,WAAW,SAAS,SAAS;AACtC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import { Listr } from "listr2";
|
|
3
|
+
class RebuildListrManager extends EventEmitter {
|
|
4
|
+
constructor(_logger) {
|
|
5
|
+
super();
|
|
6
|
+
this._logger = _logger;
|
|
7
|
+
}
|
|
8
|
+
_isRunning = false;
|
|
9
|
+
_pendingBuilds = /* @__PURE__ */ new Map();
|
|
10
|
+
/**
|
|
11
|
+
* 빌드를 등록하고 resolver 함수를 반환합니다.
|
|
12
|
+
*
|
|
13
|
+
* @param key - 빌드를 식별하는 고유 키 (예: "core-common:build")
|
|
14
|
+
* @param title - Listr에 표시할 제목 (예: "core-common (node)")
|
|
15
|
+
* @returns 워커가 빌드 완료 시 호출할 resolver 함수
|
|
16
|
+
*/
|
|
17
|
+
registerBuild(key, title) {
|
|
18
|
+
let resolver;
|
|
19
|
+
const promise = new Promise((resolve) => {
|
|
20
|
+
resolver = resolve;
|
|
21
|
+
});
|
|
22
|
+
this._pendingBuilds.set(key, { title, promise, resolver });
|
|
23
|
+
if (!this._isRunning) {
|
|
24
|
+
void Promise.resolve().then(() => void this._runBatch());
|
|
25
|
+
}
|
|
26
|
+
return resolver;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* pending에 있는 빌드들을 모아서 하나의 Listr로 실행합니다.
|
|
30
|
+
* 실행 중에 들어온 새 빌드는 다음 배치로 넘어갑니다.
|
|
31
|
+
*/
|
|
32
|
+
async _runBatch() {
|
|
33
|
+
if (this._isRunning || this._pendingBuilds.size === 0) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
this._isRunning = true;
|
|
37
|
+
const batchBuilds = new Map(this._pendingBuilds);
|
|
38
|
+
this._pendingBuilds.clear();
|
|
39
|
+
const tasks = Array.from(batchBuilds.entries()).map(([, { title, promise }]) => ({
|
|
40
|
+
title,
|
|
41
|
+
task: () => promise
|
|
42
|
+
}));
|
|
43
|
+
const listr = new Listr(tasks, { concurrent: true });
|
|
44
|
+
try {
|
|
45
|
+
await listr.run();
|
|
46
|
+
this.emit("batchComplete");
|
|
47
|
+
} catch (err) {
|
|
48
|
+
this._logger.error("listr \uC2E4\uD589 \uC911 \uC624\uB958 \uBC1C\uC0DD", { error: String(err) });
|
|
49
|
+
}
|
|
50
|
+
this._isRunning = false;
|
|
51
|
+
if (this._pendingBuilds.size > 0) {
|
|
52
|
+
void this._runBatch();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export {
|
|
57
|
+
RebuildListrManager
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=listr-manager.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/listr-manager.ts"],
|
|
4
|
+
"sourcesContent": ["import { EventEmitter } from \"node:events\";\nimport { Listr } from \"listr2\";\nimport type { consola } from \"consola\";\n\n/**\n * RebuildListrManager \uC774\uBCA4\uD2B8 \uD0C0\uC785\n */\ninterface RebuildListrManagerEvents {\n batchComplete: [];\n}\n\n/**\n * \uB9AC\uBE4C\uB4DC \uC2DC Listr \uC2E4\uD589\uC744 \uAD00\uB9AC\uD558\uB294 \uD074\uB798\uC2A4\n *\n * \uC5EC\uB7EC Worker\uAC00 \uB3D9\uC2DC\uC5D0 buildStart\uB97C \uBC1C\uC0DD\uC2DC\uD0AC \uB54C, \uD55C \uBC88\uC5D0 \uD558\uB098\uC758 Listr\uB9CC \uC2E4\uD589\uB418\uB3C4\uB85D \uBCF4\uC7A5\uD569\uB2C8\uB2E4.\n * \uC2E4\uD589 \uC911\uC5D0 \uB4E4\uC5B4\uC628 \uBE4C\uB4DC \uC694\uCCAD\uC740 pending\uC5D0 \uBAA8\uC544\uB450\uC5C8\uB2E4\uAC00 \uD604\uC7AC \uBC30\uCE58\uAC00 \uC644\uB8CC\uB418\uBA74 \uB2E4\uC74C \uBC30\uCE58\uB85C \uC2E4\uD589\uD569\uB2C8\uB2E4.\n *\n * EventEmitter\uB97C \uD655\uC7A5\uD558\uC5EC \uBC30\uCE58 \uC644\uB8CC \uC2DC `batchComplete` \uC774\uBCA4\uD2B8\uB97C \uBC1C\uC0DD\uC2DC\uD0B5\uB2C8\uB2E4.\n */\nexport class RebuildListrManager extends EventEmitter<RebuildListrManagerEvents> {\n private _isRunning = false;\n private readonly _pendingBuilds = new Map<string, { title: string; promise: Promise<void>; resolver: () => void }>();\n\n constructor(private readonly _logger: ReturnType<typeof consola.withTag>) {\n super();\n }\n\n /**\n * \uBE4C\uB4DC\uB97C \uB4F1\uB85D\uD558\uACE0 resolver \uD568\uC218\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4.\n *\n * @param key - \uBE4C\uB4DC\uB97C \uC2DD\uBCC4\uD558\uB294 \uACE0\uC720 \uD0A4 (\uC608: \"core-common:build\")\n * @param title - Listr\uC5D0 \uD45C\uC2DC\uD560 \uC81C\uBAA9 (\uC608: \"core-common (node)\")\n * @returns \uC6CC\uCEE4\uAC00 \uBE4C\uB4DC \uC644\uB8CC \uC2DC \uD638\uCD9C\uD560 resolver \uD568\uC218\n */\n registerBuild(key: string, title: string): () => void {\n let resolver!: () => void;\n const promise = new Promise<void>((resolve) => {\n resolver = resolve;\n });\n\n this._pendingBuilds.set(key, { title, promise, resolver });\n\n // Listr\uAC00 \uC2E4\uD589 \uC911\uC774 \uC544\uB2C8\uBA74 \uB2E4\uC74C tick\uC5D0 \uBC30\uCE58 \uC2E4\uD589\n if (!this._isRunning) {\n void Promise.resolve().then(() => void this._runBatch());\n }\n\n return resolver;\n }\n\n /**\n * pending\uC5D0 \uC788\uB294 \uBE4C\uB4DC\uB4E4\uC744 \uBAA8\uC544\uC11C \uD558\uB098\uC758 Listr\uB85C \uC2E4\uD589\uD569\uB2C8\uB2E4.\n * \uC2E4\uD589 \uC911\uC5D0 \uB4E4\uC5B4\uC628 \uC0C8 \uBE4C\uB4DC\uB294 \uB2E4\uC74C \uBC30\uCE58\uB85C \uB118\uC5B4\uAC11\uB2C8\uB2E4.\n */\n private async _runBatch(): Promise<void> {\n if (this._isRunning || this._pendingBuilds.size === 0) {\n return;\n }\n\n this._isRunning = true;\n\n // \uD604\uC7AC pending\uC744 \uC2A4\uB0C5\uC0F7\uC73C\uB85C \uAC00\uC838\uC634\n const batchBuilds = new Map(this._pendingBuilds);\n this._pendingBuilds.clear();\n\n // Listr \uD0DC\uC2A4\uD06C \uC0DD\uC131\n const tasks = Array.from(batchBuilds.entries()).map(([, { title, promise }]) => ({\n title,\n task: () => promise,\n }));\n\n const listr = new Listr(tasks, { concurrent: true });\n\n try {\n await listr.run();\n // \uBC30\uCE58 \uC644\uB8CC \uC774\uBCA4\uD2B8 \uBC1C\uC0DD\n this.emit(\"batchComplete\");\n } catch (err) {\n this._logger.error(\"listr \uC2E4\uD589 \uC911 \uC624\uB958 \uBC1C\uC0DD\", { error: String(err) });\n }\n\n this._isRunning = false;\n\n // \uC2E4\uD589 \uC911 \uC0C8\uB85C \uB4E4\uC5B4\uC628 pending\uC774 \uC788\uC73C\uBA74 \uB2E4\uC74C \uBC30\uCE58 \uC2E4\uD589\n if (this._pendingBuilds.size > 0) {\n void this._runBatch();\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,aAAa;AAkBf,MAAM,4BAA4B,aAAwC;AAAA,EAI/E,YAA6B,SAA6C;AACxE,UAAM;AADqB;AAAA,EAE7B;AAAA,EALQ,aAAa;AAAA,EACJ,iBAAiB,oBAAI,IAA6E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAanH,cAAc,KAAa,OAA2B;AACpD,QAAI;AACJ,UAAM,UAAU,IAAI,QAAc,CAAC,YAAY;AAC7C,iBAAW;AAAA,IACb,CAAC;AAED,SAAK,eAAe,IAAI,KAAK,EAAE,OAAO,SAAS,SAAS,CAAC;AAGzD,QAAI,CAAC,KAAK,YAAY;AACpB,WAAK,QAAQ,QAAQ,EAAE,KAAK,MAAM,KAAK,KAAK,UAAU,CAAC;AAAA,IACzD;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,YAA2B;AACvC,QAAI,KAAK,cAAc,KAAK,eAAe,SAAS,GAAG;AACrD;AAAA,IACF;AAEA,SAAK,aAAa;AAGlB,UAAM,cAAc,IAAI,IAAI,KAAK,cAAc;AAC/C,SAAK,eAAe,MAAM;AAG1B,UAAM,QAAQ,MAAM,KAAK,YAAY,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,QAAQ,CAAC,OAAO;AAAA,MAC/E;AAAA,MACA,MAAM,MAAM;AAAA,IACd,EAAE;AAEF,UAAM,QAAQ,IAAI,MAAM,OAAO,EAAE,YAAY,KAAK,CAAC;AAEnD,QAAI;AACF,YAAM,MAAM,IAAI;AAEhB,WAAK,KAAK,eAAe;AAAA,IAC3B,SAAS,KAAK;AACZ,WAAK,QAAQ,MAAM,uDAAoB,EAAE,OAAO,OAAO,GAAG,EAAE,CAAC;AAAA,IAC/D;AAEA,SAAK,aAAa;AAGlB,QAAI,KAAK,eAAe,OAAO,GAAG;AAChC,WAAK,KAAK,UAAU;AAAA,IACtB;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { consola } from "consola";
|
|
2
|
+
function printErrors(results) {
|
|
3
|
+
for (const result of results.values()) {
|
|
4
|
+
if (result.status === "error") {
|
|
5
|
+
const typeLabel = result.type === "dts" ? "dts" : result.target;
|
|
6
|
+
const errorLines = [`${result.name} (${typeLabel})`];
|
|
7
|
+
if (result.message != null && result.message !== "") {
|
|
8
|
+
for (const line of result.message.split("\n")) {
|
|
9
|
+
errorLines.push(` \u2192 ${line}`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
consola.error(errorLines.join("\n"));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function printServers(results, serverClientsMap) {
|
|
17
|
+
const servers = [...results.values()].filter((r) => r.status === "server" && r.port != null);
|
|
18
|
+
if (servers.length > 0) {
|
|
19
|
+
process.stdout.write("\n");
|
|
20
|
+
for (const server of servers) {
|
|
21
|
+
if (server.target === "server") {
|
|
22
|
+
const clients = serverClientsMap?.get(server.name) ?? [];
|
|
23
|
+
if (clients.length > 0) {
|
|
24
|
+
for (const clientName of clients) {
|
|
25
|
+
consola.info(`[server] http://localhost:${server.port}/${clientName}/`);
|
|
26
|
+
}
|
|
27
|
+
} else {
|
|
28
|
+
consola.info(`[server] http://localhost:${server.port}/`);
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
consola.info(`[server] http://localhost:${server.port}/${server.name}/`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export {
|
|
37
|
+
printErrors,
|
|
38
|
+
printServers
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=output-utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/output-utils.ts"],
|
|
4
|
+
"sourcesContent": ["import { consola } from \"consola\";\nimport type { BuildResult } from \"../infra/ResultCollector\";\nimport type { PackageResult } from \"./package-utils\";\n\n/**\n * printErrors\uC5D0\uC11C \uC0AC\uC6A9\uB418\uB294 \uACB0\uACFC \uD0C0\uC785\n * PackageResult\uC640 BuildResult \uBAA8\uB450 \uC9C0\uC6D0\n */\ntype ErrorResult = PackageResult | BuildResult;\n\n/**\n * \uC5D0\uB7EC\uB9CC \uCD9C\uB825\uD55C\uB2E4.\n * \uC131\uACF5\uD55C \uBE4C\uB4DC\uB294 listr\uC758 \uCCB4\uD06C\uB9C8\uD06C\uB85C \uC774\uBBF8 \uD45C\uC2DC\uB418\uBBC0\uB85C \uBCC4\uB3C4 \uCD9C\uB825\uD558\uC9C0 \uC54A\uC74C.\n * @param results \uD328\uD0A4\uC9C0\uBCC4 \uBE4C\uB4DC \uACB0\uACFC \uC0C1\uD0DC\n */\nexport function printErrors(results: Map<string, ErrorResult>): void {\n for (const result of results.values()) {\n if (result.status === \"error\") {\n const typeLabel = result.type === \"dts\" ? \"dts\" : result.target;\n const errorLines: string[] = [`${result.name} (${typeLabel})`];\n if (result.message != null && result.message !== \"\") {\n for (const line of result.message.split(\"\\n\")) {\n errorLines.push(` \u2192 ${line}`);\n }\n }\n consola.error(errorLines.join(\"\\n\"));\n }\n }\n}\n\n/**\n * \uC11C\uBC84 URL\uB9CC \uCD9C\uB825\uD55C\uB2E4.\n * @param results \uD328\uD0A4\uC9C0\uBCC4 \uBE4C\uB4DC \uACB0\uACFC \uC0C1\uD0DC\n * @param serverClientsMap \uC11C\uBC84\uBCC4 \uC5F0\uACB0\uB41C \uD074\uB77C\uC774\uC5B8\uD2B8 \uBAA9\uB85D\n */\nexport function printServers(results: Map<string, PackageResult>, serverClientsMap?: Map<string, string[]>): void {\n // \uC11C\uBC84 \uC815\uBCF4 \uC218\uC9D1\n const servers = [...results.values()].filter((r) => r.status === \"server\" && r.port != null);\n\n // \uC11C\uBC84 \uC815\uBCF4 \uCD9C\uB825 (\uC788\uC73C\uBA74 \uC55E\uC5D0 \uBE48 \uC904 \uCD94\uAC00)\n if (servers.length > 0) {\n process.stdout.write(\"\\n\");\n for (const server of servers) {\n if (server.target === \"server\") {\n // \uC11C\uBC84\uC5D0 \uC5F0\uACB0\uB41C \uD074\uB77C\uC774\uC5B8\uD2B8\uAC00 \uC788\uC73C\uBA74 \uD074\uB77C\uC774\uC5B8\uD2B8 URL\uB9CC \uCD9C\uB825\n const clients = serverClientsMap?.get(server.name) ?? [];\n if (clients.length > 0) {\n for (const clientName of clients) {\n consola.info(`[server] http://localhost:${server.port}/${clientName}/`);\n }\n } else {\n // \uC5F0\uACB0\uB41C \uD074\uB77C\uC774\uC5B8\uD2B8\uAC00 \uC5C6\uC73C\uBA74 \uC11C\uBC84 \uB8E8\uD2B8 URL \uCD9C\uB825\n consola.info(`[server] http://localhost:${server.port}/`);\n }\n } else {\n // standalone client\uB294 \uC774\uB984 \uD3EC\uD568\uD574\uC11C \uCD9C\uB825\n consola.info(`[server] http://localhost:${server.port}/${server.name}/`);\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,eAAe;AAejB,SAAS,YAAY,SAAyC;AACnE,aAAW,UAAU,QAAQ,OAAO,GAAG;AACrC,QAAI,OAAO,WAAW,SAAS;AAC7B,YAAM,YAAY,OAAO,SAAS,QAAQ,QAAQ,OAAO;AACzD,YAAM,aAAuB,CAAC,GAAG,OAAO,IAAI,KAAK,SAAS,GAAG;AAC7D,UAAI,OAAO,WAAW,QAAQ,OAAO,YAAY,IAAI;AACnD,mBAAW,QAAQ,OAAO,QAAQ,MAAM,IAAI,GAAG;AAC7C,qBAAW,KAAK,YAAO,IAAI,EAAE;AAAA,QAC/B;AAAA,MACF;AACA,cAAQ,MAAM,WAAW,KAAK,IAAI,CAAC;AAAA,IACrC;AAAA,EACF;AACF;AAOO,SAAS,aAAa,SAAqC,kBAAgD;AAEhH,QAAM,UAAU,CAAC,GAAG,QAAQ,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,YAAY,EAAE,QAAQ,IAAI;AAG3F,MAAI,QAAQ,SAAS,GAAG;AACtB,YAAQ,OAAO,MAAM,IAAI;AACzB,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,WAAW,UAAU;AAE9B,cAAM,UAAU,kBAAkB,IAAI,OAAO,IAAI,KAAK,CAAC;AACvD,YAAI,QAAQ,SAAS,GAAG;AACtB,qBAAW,cAAc,SAAS;AAChC,oBAAQ,KAAK,6BAA6B,OAAO,IAAI,IAAI,UAAU,GAAG;AAAA,UACxE;AAAA,QACF,OAAO;AAEL,kBAAQ,KAAK,6BAA6B,OAAO,IAAI,GAAG;AAAA,QAC1D;AAAA,MACF,OAAO;AAEL,gBAAQ,KAAK,6BAA6B,OAAO,IAAI,IAAI,OAAO,IAAI,GAAG;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
function getWatchScopes(packageName) {
|
|
2
|
+
const scopes = /* @__PURE__ */ new Set(["@simplysm"]);
|
|
3
|
+
const match = packageName.match(/^(@[^/]+)\//);
|
|
4
|
+
if (match != null) {
|
|
5
|
+
scopes.add(match[1]);
|
|
6
|
+
}
|
|
7
|
+
return [...scopes];
|
|
8
|
+
}
|
|
9
|
+
function filterPackagesByTargets(packages, targets) {
|
|
10
|
+
const result = {};
|
|
11
|
+
for (const [name, config] of Object.entries(packages)) {
|
|
12
|
+
if (config == null) continue;
|
|
13
|
+
if (config.target === "scripts") continue;
|
|
14
|
+
if (targets.length === 0) {
|
|
15
|
+
result[name] = config;
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (targets.includes(name)) {
|
|
19
|
+
result[name] = config;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
filterPackagesByTargets,
|
|
26
|
+
getWatchScopes
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=package-utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/package-utils.ts"],
|
|
4
|
+
"sourcesContent": ["import type { SdPackageConfig } from \"../sd-config.types\";\n\n/**\n * \uD328\uD0A4\uC9C0\uBA85\uC5D0\uC11C watch scope \uBAA9\uB85D\uC744 \uC0DD\uC131\uD55C\uB2E4.\n * - \uD328\uD0A4\uC9C0\uBA85\uC758 scope (\uC608: \"@myapp/root\" \u2192 \"@myapp\")\n * - @simplysm (\uD56D\uC0C1 \uD3EC\uD568)\n * @param packageName \uB8E8\uD2B8 package.json\uC758 name \uD544\uB4DC\n * @returns scope \uBC30\uC5F4 (\uC911\uBCF5 \uC81C\uAC70)\n */\nexport function getWatchScopes(packageName: string): string[] {\n const scopes = new Set([\"@simplysm\"]);\n const match = packageName.match(/^(@[^/]+)\\//);\n if (match != null) {\n scopes.add(match[1]);\n }\n return [...scopes];\n}\n\n/**\n * \uD328\uD0A4\uC9C0 \uACB0\uACFC \uC0C1\uD0DC\n */\nexport interface PackageResult {\n name: string;\n target: string;\n type: \"build\" | \"dts\" | \"server\" | \"capacitor\";\n status: \"success\" | \"error\" | \"server\";\n message?: string;\n port?: number;\n}\n\n/**\n * \uD328\uD0A4\uC9C0 \uC124\uC815\uC5D0\uC11C targets \uD544\uD130\uB9C1 (scripts \uD0C0\uAC9F \uC81C\uC678)\n * @param packages \uD328\uD0A4\uC9C0 \uC124\uC815 \uB9F5\n * @param targets \uD544\uD130\uB9C1\uD560 \uD328\uD0A4\uC9C0 \uC774\uB984 \uBAA9\uB85D. \uBE48 \uBC30\uC5F4\uC774\uBA74 scripts\uB97C \uC81C\uC678\uD55C \uBAA8\uB4E0 \uD328\uD0A4\uC9C0 \uBC18\uD658\n * @returns \uD544\uD130\uB9C1\uB41C \uD328\uD0A4\uC9C0 \uC124\uC815 \uB9F5\n * @internal \uD14C\uC2A4\uD2B8\uC6A9\uC73C\uB85C export\n */\nexport function filterPackagesByTargets(\n packages: Record<string, SdPackageConfig | undefined>,\n targets: string[],\n): Record<string, SdPackageConfig> {\n const result: Record<string, SdPackageConfig> = {};\n\n for (const [name, config] of Object.entries(packages)) {\n if (config == null) continue;\n\n // scripts \uD0C0\uAC9F\uC740 watch/dev \uB300\uC0C1\uC5D0\uC11C \uC81C\uC678\n if (config.target === \"scripts\") continue;\n\n // targets\uAC00 \uBE44\uC5B4\uC788\uC73C\uBA74 \uBAA8\uB4E0 \uD328\uD0A4\uC9C0 \uD3EC\uD568\n if (targets.length === 0) {\n result[name] = config;\n continue;\n }\n\n // targets\uC5D0 \uD3EC\uD568\uB41C \uD328\uD0A4\uC9C0\uB9CC \uD544\uD130\uB9C1\n if (targets.includes(name)) {\n result[name] = config;\n }\n }\n\n return result;\n}\n"],
|
|
5
|
+
"mappings": "AASO,SAAS,eAAe,aAA+B;AAC5D,QAAM,SAAS,oBAAI,IAAI,CAAC,WAAW,CAAC;AACpC,QAAM,QAAQ,YAAY,MAAM,aAAa;AAC7C,MAAI,SAAS,MAAM;AACjB,WAAO,IAAI,MAAM,CAAC,CAAC;AAAA,EACrB;AACA,SAAO,CAAC,GAAG,MAAM;AACnB;AAqBO,SAAS,wBACd,UACA,SACiC;AACjC,QAAM,SAA0C,CAAC;AAEjD,aAAW,CAAC,MAAM,MAAM,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACrD,QAAI,UAAU,KAAM;AAGpB,QAAI,OAAO,WAAW,UAAW;AAGjC,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO,IAAI,IAAI;AACf;AAAA,IACF;AAGA,QAAI,QAAQ,SAAS,IAAI,GAAG;AAC1B,aAAO,IAAI,IAAI;AAAA,IACjB;AAAA,EACF;AAEA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { createJiti } from "jiti";
|
|
3
|
+
import { SdError } from "@simplysm/core-common";
|
|
4
|
+
import { fsExists } from "@simplysm/core-node";
|
|
5
|
+
async function loadSdConfig(params) {
|
|
6
|
+
const sdConfigPath = path.resolve(params.cwd, "sd.config.ts");
|
|
7
|
+
if (!await fsExists(sdConfigPath)) {
|
|
8
|
+
throw new SdError(`sd.config.ts \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${sdConfigPath}`);
|
|
9
|
+
}
|
|
10
|
+
const jiti = createJiti(import.meta.url);
|
|
11
|
+
const sdConfigModule = await jiti.import(sdConfigPath);
|
|
12
|
+
if (sdConfigModule == null || typeof sdConfigModule !== "object" || !("default" in sdConfigModule) || typeof sdConfigModule.default !== "function") {
|
|
13
|
+
throw new SdError(`sd.config.ts\uB294 \uD568\uC218\uB97C default export\uD574\uC57C \uD569\uB2C8\uB2E4: ${sdConfigPath}`);
|
|
14
|
+
}
|
|
15
|
+
const config = await sdConfigModule.default(params);
|
|
16
|
+
if (config == null || typeof config !== "object" || !("packages" in config) || config.packages == null || typeof config.packages !== "object" || Array.isArray(config.packages)) {
|
|
17
|
+
throw new SdError(`sd.config.ts\uC758 \uBC18\uD658\uAC12\uC774 \uC62C\uBC14\uB978 \uD615\uC2DD\uC774 \uC544\uB2D9\uB2C8\uB2E4: ${sdConfigPath}`);
|
|
18
|
+
}
|
|
19
|
+
return config;
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
loadSdConfig
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=sd-config.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/sd-config.ts"],
|
|
4
|
+
"sourcesContent": ["import path from \"path\";\nimport { createJiti } from \"jiti\";\nimport { SdError } from \"@simplysm/core-common\";\nimport { fsExists } from \"@simplysm/core-node\";\nimport type { SdConfig } from \"../sd-config.types\";\n\n/**\n * sd.config.ts \uB85C\uB4DC\n * @returns SdConfig \uAC1D\uCCB4\n * @throws sd.config.ts\uAC00 \uC5C6\uAC70\uB098 \uD615\uC2DD\uC774 \uC798\uBABB\uB41C \uACBD\uC6B0\n */\nexport async function loadSdConfig(params: { cwd: string; dev: boolean; opt: string[] }): Promise<SdConfig> {\n const sdConfigPath = path.resolve(params.cwd, \"sd.config.ts\");\n\n if (!(await fsExists(sdConfigPath))) {\n throw new SdError(`sd.config.ts \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${sdConfigPath}`);\n }\n\n const jiti = createJiti(import.meta.url);\n const sdConfigModule = await jiti.import(sdConfigPath);\n\n if (\n sdConfigModule == null ||\n typeof sdConfigModule !== \"object\" ||\n !(\"default\" in sdConfigModule) ||\n typeof sdConfigModule.default !== \"function\"\n ) {\n throw new SdError(`sd.config.ts\uB294 \uD568\uC218\uB97C default export\uD574\uC57C \uD569\uB2C8\uB2E4: ${sdConfigPath}`);\n }\n\n const config = await sdConfigModule.default(params);\n\n if (\n config == null ||\n typeof config !== \"object\" ||\n !(\"packages\" in config) ||\n config.packages == null ||\n typeof config.packages !== \"object\" ||\n Array.isArray(config.packages)\n ) {\n throw new SdError(`sd.config.ts\uC758 \uBC18\uD658\uAC12\uC774 \uC62C\uBC14\uB978 \uD615\uC2DD\uC774 \uC544\uB2D9\uB2C8\uB2E4: ${sdConfigPath}`);\n }\n return config as SdConfig;\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,UAAU;AACjB,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AACxB,SAAS,gBAAgB;AAQzB,eAAsB,aAAa,QAAyE;AAC1G,QAAM,eAAe,KAAK,QAAQ,OAAO,KAAK,cAAc;AAE5D,MAAI,CAAE,MAAM,SAAS,YAAY,GAAI;AACnC,UAAM,IAAI,QAAQ,iFAA+B,YAAY,EAAE;AAAA,EACjE;AAEA,QAAM,OAAO,WAAW,YAAY,GAAG;AACvC,QAAM,iBAAiB,MAAM,KAAK,OAAO,YAAY;AAErD,MACE,kBAAkB,QAClB,OAAO,mBAAmB,YAC1B,EAAE,aAAa,mBACf,OAAO,eAAe,YAAY,YAClC;AACA,UAAM,IAAI,QAAQ,wFAA2C,YAAY,EAAE;AAAA,EAC7E;AAEA,QAAM,SAAS,MAAM,eAAe,QAAQ,MAAM;AAElD,MACE,UAAU,QACV,OAAO,WAAW,YAClB,EAAE,cAAc,WAChB,OAAO,YAAY,QACnB,OAAO,OAAO,aAAa,YAC3B,MAAM,QAAQ,OAAO,QAAQ,GAC7B;AACA,UAAM,IAAI,QAAQ,+GAAoC,YAAY,EAAE;AAAA,EACtE;AACA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { spawn as cpSpawn } from "child_process";
|
|
2
|
+
async function spawn(cmd, args, options) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
const noColor = process.env["NO_COLOR"] != null;
|
|
5
|
+
const useColor = options?.forceColor ?? !noColor;
|
|
6
|
+
const colorEnv = useColor ? {
|
|
7
|
+
FORCE_COLOR: "1",
|
|
8
|
+
CLICOLOR_FORCE: "1",
|
|
9
|
+
COLORTERM: "truecolor"
|
|
10
|
+
} : {};
|
|
11
|
+
const spawnOptions = {
|
|
12
|
+
cwd: options?.cwd,
|
|
13
|
+
env: {
|
|
14
|
+
...process.env,
|
|
15
|
+
...colorEnv,
|
|
16
|
+
...options?.env
|
|
17
|
+
},
|
|
18
|
+
// shell: false for security (avoid shell injection)
|
|
19
|
+
// Windows .bat/.cmd files are handled by calling cmd.exe explicitly in capacitor.ts
|
|
20
|
+
shell: false,
|
|
21
|
+
stdio: ["inherit", "pipe", "pipe"]
|
|
22
|
+
};
|
|
23
|
+
const child = cpSpawn(cmd, args, spawnOptions);
|
|
24
|
+
let output = "";
|
|
25
|
+
child.stdout?.on("data", (data) => {
|
|
26
|
+
output += data.toString();
|
|
27
|
+
});
|
|
28
|
+
child.stderr?.on("data", (data) => {
|
|
29
|
+
output += data.toString();
|
|
30
|
+
});
|
|
31
|
+
child.on("error", (err) => {
|
|
32
|
+
reject(new Error(`spawn \uC2E4\uD328 (${cmd}): ${err.message}`));
|
|
33
|
+
});
|
|
34
|
+
child.on("close", (code) => {
|
|
35
|
+
if (code === 0) {
|
|
36
|
+
resolve(output);
|
|
37
|
+
} else {
|
|
38
|
+
reject(new Error(`\uBA85\uB839\uC5B4 \uC2E4\uD328 (${cmd} ${args.join(" ")})
|
|
39
|
+
\uC885\uB8CC \uCF54\uB4DC: ${code}
|
|
40
|
+
\uCD9C\uB825:
|
|
41
|
+
${output}`));
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
export {
|
|
47
|
+
spawn
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=spawn.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/spawn.ts"],
|
|
4
|
+
"sourcesContent": ["import { spawn as cpSpawn, type SpawnOptions as CpSpawnOptions } from \"child_process\";\n\n/**\n * spawn \uC635\uC158\n */\nexport interface SpawnOptions {\n /** \uC791\uC5C5 \uB514\uB809\uD1A0\uB9AC */\n cwd?: string;\n /** \uD658\uACBD\uBCC0\uC218 (process.env\uC640 \uBCD1\uD569) */\n env?: Record<string, string | undefined>;\n /** \uC0C9\uC0C1 \uCD9C\uB825 \uAC15\uC81C \uC5EC\uBD80 (\uAE30\uBCF8\uAC12: NO_COLOR \uD658\uACBD\uBCC0\uC218 \uC874\uC911) */\n forceColor?: boolean;\n}\n\n/**\n * child_process.spawn\uC744 Promise\uB85C \uB798\uD551\uD55C \uD568\uC218.\n *\n * - stdout/stderr\uB97C \uCEA1\uCC98\uD558\uC5EC \uBC18\uD658\n * - NO_COLOR \uD658\uACBD\uBCC0\uC218 \uC874\uC911 (forceColor\uB85C \uC624\uBC84\uB77C\uC774\uB4DC \uAC00\uB2A5)\n * - \uC885\uB8CC \uCF54\uB4DC\uAC00 0\uC774 \uC544\uB2C8\uBA74 \uC5D0\uB7EC throw\n * - Windows\uC5D0\uC11C\uB3C4 shell \uC5C6\uC774 \uC2E4\uD589 (\uBCF4\uC548\uC0C1 shell: true \uC0AC\uC6A9 \uC548 \uD568)\n *\n * @param cmd - \uC2E4\uD589\uD560 \uBA85\uB839\uC5B4\n * @param args - \uBA85\uB839\uC5B4 \uC778\uC790\n * @param options - \uC2E4\uD589 \uC635\uC158\n * @returns stdout \uCD9C\uB825 (stderr\uB294 stdout\uC5D0 \uBCD1\uD569\uB428)\n */\nexport async function spawn(cmd: string, args: string[], options?: SpawnOptions): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n // NO_COLOR \uD658\uACBD\uBCC0\uC218 \uC874\uC911 (https://no-color.org/)\n const noColor = process.env[\"NO_COLOR\"] != null;\n const useColor = options?.forceColor ?? !noColor;\n\n const colorEnv = useColor\n ? {\n FORCE_COLOR: \"1\",\n CLICOLOR_FORCE: \"1\",\n COLORTERM: \"truecolor\",\n }\n : {};\n\n const spawnOptions: CpSpawnOptions = {\n cwd: options?.cwd,\n env: {\n ...process.env,\n ...colorEnv,\n ...options?.env,\n },\n // shell: false for security (avoid shell injection)\n // Windows .bat/.cmd files are handled by calling cmd.exe explicitly in capacitor.ts\n shell: false,\n stdio: [\"inherit\", \"pipe\", \"pipe\"],\n };\n\n const child = cpSpawn(cmd, args, spawnOptions);\n\n let output = \"\";\n\n child.stdout?.on(\"data\", (data: Buffer) => {\n output += data.toString();\n });\n\n child.stderr?.on(\"data\", (data: Buffer) => {\n output += data.toString();\n });\n\n child.on(\"error\", (err) => {\n reject(new Error(`spawn \uC2E4\uD328 (${cmd}): ${err.message}`));\n });\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve(output);\n } else {\n reject(new Error(`\uBA85\uB839\uC5B4 \uC2E4\uD328 (${cmd} ${args.join(\" \")})\\n\uC885\uB8CC \uCF54\uB4DC: ${code}\\n\uCD9C\uB825:\\n${output}`));\n }\n });\n });\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,SAAS,eAAoD;AA2BtE,eAAsB,MAAM,KAAa,MAAgB,SAAyC;AAChG,SAAO,IAAI,QAAgB,CAAC,SAAS,WAAW;AAE9C,UAAM,UAAU,QAAQ,IAAI,UAAU,KAAK;AAC3C,UAAM,WAAW,SAAS,cAAc,CAAC;AAEzC,UAAM,WAAW,WACb;AAAA,MACE,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,WAAW;AAAA,IACb,IACA,CAAC;AAEL,UAAM,eAA+B;AAAA,MACnC,KAAK,SAAS;AAAA,MACd,KAAK;AAAA,QACH,GAAG,QAAQ;AAAA,QACX,GAAG;AAAA,QACH,GAAG,SAAS;AAAA,MACd;AAAA;AAAA;AAAA,MAGA,OAAO;AAAA,MACP,OAAO,CAAC,WAAW,QAAQ,MAAM;AAAA,IACnC;AAEA,UAAM,QAAQ,QAAQ,KAAK,MAAM,YAAY;AAE7C,QAAI,SAAS;AAEb,UAAM,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AACzC,gBAAU,KAAK,SAAS;AAAA,IAC1B,CAAC;AAED,UAAM,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AACzC,gBAAU,KAAK,SAAS;AAAA,IAC1B,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,aAAO,IAAI,MAAM,uBAAa,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC;AAAA,IACvD,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,SAAS;AAC1B,UAAI,SAAS,GAAG;AACd,gBAAQ,MAAM;AAAA,MAChB,OAAO;AACL,eAAO,IAAI,MAAM,oCAAW,GAAG,IAAI,KAAK,KAAK,GAAG,CAAC;AAAA,6BAAa,IAAI;AAAA;AAAA,EAAU,MAAM,EAAE,CAAC;AAAA,MACvF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
const jsExtensions = [".js", ".cjs", ".mjs"];
|
|
4
|
+
const jsResolutionOrder = ["", ".js", ".cjs", ".mjs", ".ts", ".cts", ".mts", ".jsx", ".tsx"];
|
|
5
|
+
const tsResolutionOrder = ["", ".ts", ".cts", ".mts", ".tsx", ".js", ".cjs", ".mjs", ".jsx"];
|
|
6
|
+
function resolveWithExtension(file, extensions) {
|
|
7
|
+
for (const ext of extensions) {
|
|
8
|
+
const full = `${file}${ext}`;
|
|
9
|
+
if (fs.existsSync(full) && fs.statSync(full).isFile()) {
|
|
10
|
+
return full;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
for (const ext of extensions) {
|
|
14
|
+
const full = `${file}/index${ext}`;
|
|
15
|
+
if (fs.existsSync(full) && fs.statSync(full).isFile()) {
|
|
16
|
+
return full;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
function resolvePackageFile(specifier, fromDir) {
|
|
22
|
+
const parts = specifier.split("/");
|
|
23
|
+
const pkgName = specifier.startsWith("@") ? parts.slice(0, 2).join("/") : parts[0];
|
|
24
|
+
const subPath = specifier.startsWith("@") ? parts.slice(2).join("/") : parts.slice(1).join("/");
|
|
25
|
+
let searchDir = fromDir;
|
|
26
|
+
while (true) {
|
|
27
|
+
const candidate = path.join(searchDir, "node_modules", pkgName);
|
|
28
|
+
if (fs.existsSync(candidate)) {
|
|
29
|
+
const realDir = fs.realpathSync(candidate);
|
|
30
|
+
if (subPath) {
|
|
31
|
+
return resolveWithExtension(path.join(realDir, subPath), tsResolutionOrder);
|
|
32
|
+
}
|
|
33
|
+
return resolveWithExtension(path.join(realDir, "index"), tsResolutionOrder);
|
|
34
|
+
}
|
|
35
|
+
const parent = path.dirname(searchDir);
|
|
36
|
+
if (parent === searchDir) break;
|
|
37
|
+
searchDir = parent;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
function getTailwindConfigDeps(configPath, scopes) {
|
|
42
|
+
const scopePrefixes = scopes.map((s) => s.endsWith("/") ? s : s + "/");
|
|
43
|
+
const seen = /* @__PURE__ */ new Set();
|
|
44
|
+
function walk(absoluteFile) {
|
|
45
|
+
if (seen.has(absoluteFile)) return;
|
|
46
|
+
if (!fs.existsSync(absoluteFile)) return;
|
|
47
|
+
seen.add(absoluteFile);
|
|
48
|
+
const base = path.dirname(absoluteFile);
|
|
49
|
+
const ext = path.extname(absoluteFile);
|
|
50
|
+
const extensions = jsExtensions.includes(ext) ? jsResolutionOrder : tsResolutionOrder;
|
|
51
|
+
let contents;
|
|
52
|
+
try {
|
|
53
|
+
contents = fs.readFileSync(absoluteFile, "utf-8");
|
|
54
|
+
} catch {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
for (const match of [
|
|
58
|
+
...contents.matchAll(/import[\s\S]*?['"](.{3,}?)['"]/gi),
|
|
59
|
+
...contents.matchAll(/import[\s\S]*from[\s\S]*?['"](.{3,}?)['"]/gi),
|
|
60
|
+
...contents.matchAll(/require\(['"`](.+)['"`]\)/gi)
|
|
61
|
+
]) {
|
|
62
|
+
const specifier = match[1];
|
|
63
|
+
let resolved = null;
|
|
64
|
+
if (specifier.startsWith(".")) {
|
|
65
|
+
resolved = resolveWithExtension(path.resolve(base, specifier), extensions);
|
|
66
|
+
} else if (scopePrefixes.some((p) => specifier.startsWith(p))) {
|
|
67
|
+
resolved = resolvePackageFile(specifier, base);
|
|
68
|
+
}
|
|
69
|
+
if (resolved != null) {
|
|
70
|
+
walk(resolved);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
walk(path.resolve(configPath));
|
|
75
|
+
return [...seen];
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
getTailwindConfigDeps
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=tailwind-config-deps.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/tailwind-config-deps.ts"],
|
|
4
|
+
"sourcesContent": ["import fs from \"fs\";\nimport path from \"path\";\n\nconst jsExtensions = [\".js\", \".cjs\", \".mjs\"];\n\nconst jsResolutionOrder = [\"\", \".js\", \".cjs\", \".mjs\", \".ts\", \".cts\", \".mts\", \".jsx\", \".tsx\"];\nconst tsResolutionOrder = [\"\", \".ts\", \".cts\", \".mts\", \".tsx\", \".js\", \".cjs\", \".mjs\", \".jsx\"];\n\nfunction resolveWithExtension(file: string, extensions: string[]): string | null {\n for (const ext of extensions) {\n const full = `${file}${ext}`;\n if (fs.existsSync(full) && fs.statSync(full).isFile()) {\n return full;\n }\n }\n for (const ext of extensions) {\n const full = `${file}/index${ext}`;\n if (fs.existsSync(full) && fs.statSync(full).isFile()) {\n return full;\n }\n }\n return null;\n}\n\nfunction resolvePackageFile(specifier: string, fromDir: string): string | null {\n const parts = specifier.split(\"/\");\n const pkgName = specifier.startsWith(\"@\") ? parts.slice(0, 2).join(\"/\") : parts[0];\n const subPath = specifier.startsWith(\"@\") ? parts.slice(2).join(\"/\") : parts.slice(1).join(\"/\");\n\n let searchDir = fromDir;\n while (true) {\n const candidate = path.join(searchDir, \"node_modules\", pkgName);\n if (fs.existsSync(candidate)) {\n const realDir = fs.realpathSync(candidate);\n if (subPath) {\n return resolveWithExtension(path.join(realDir, subPath), tsResolutionOrder);\n }\n return resolveWithExtension(path.join(realDir, \"index\"), tsResolutionOrder);\n }\n const parent = path.dirname(searchDir);\n if (parent === searchDir) break;\n searchDir = parent;\n }\n return null;\n}\n\n/**\n * Tailwind config \uD30C\uC77C\uC758 \uC758\uC874\uC131\uC744 \uC7AC\uADC0\uC801\uC73C\uB85C \uC218\uC9D1\uD55C\uB2E4.\n *\n * Tailwind \uB0B4\uC7A5 `getModuleDependencies`\uB294 \uC0C1\uB300 \uACBD\uB85C import\uB9CC \uCD94\uC801\uD558\uC9C0\uB9CC,\n * \uC774 \uD568\uC218\uB294 \uC9C0\uC815\uB41C scope\uC758 \uD328\uD0A4\uC9C0 \uACBD\uB85C\uB3C4 `node_modules` symlink\uB97C \uD480\uC5B4 \uC2E4\uC81C \uD30C\uC77C\uC744 \uCD94\uC801\uD55C\uB2E4.\n */\nexport function getTailwindConfigDeps(configPath: string, scopes: string[]): string[] {\n const scopePrefixes = scopes.map((s) => (s.endsWith(\"/\") ? s : s + \"/\"));\n const seen = new Set<string>();\n\n function walk(absoluteFile: string): void {\n if (seen.has(absoluteFile)) return;\n if (!fs.existsSync(absoluteFile)) return;\n seen.add(absoluteFile);\n\n const base = path.dirname(absoluteFile);\n const ext = path.extname(absoluteFile);\n const extensions = jsExtensions.includes(ext) ? jsResolutionOrder : tsResolutionOrder;\n\n let contents: string;\n try {\n contents = fs.readFileSync(absoluteFile, \"utf-8\");\n } catch {\n return;\n }\n\n for (const match of [\n ...contents.matchAll(/import[\\s\\S]*?['\"](.{3,}?)['\"]/gi),\n ...contents.matchAll(/import[\\s\\S]*from[\\s\\S]*?['\"](.{3,}?)['\"]/gi),\n ...contents.matchAll(/require\\(['\"`](.+)['\"`]\\)/gi),\n ]) {\n const specifier = match[1];\n let resolved: string | null = null;\n\n if (specifier.startsWith(\".\")) {\n resolved = resolveWithExtension(path.resolve(base, specifier), extensions);\n } else if (scopePrefixes.some((p) => specifier.startsWith(p))) {\n resolved = resolvePackageFile(specifier, base);\n }\n\n if (resolved != null) {\n walk(resolved);\n }\n }\n }\n\n walk(path.resolve(configPath));\n return [...seen];\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,MAAM,eAAe,CAAC,OAAO,QAAQ,MAAM;AAE3C,MAAM,oBAAoB,CAAC,IAAI,OAAO,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,MAAM;AAC3F,MAAM,oBAAoB,CAAC,IAAI,OAAO,QAAQ,QAAQ,QAAQ,OAAO,QAAQ,QAAQ,MAAM;AAE3F,SAAS,qBAAqB,MAAc,YAAqC;AAC/E,aAAW,OAAO,YAAY;AAC5B,UAAM,OAAO,GAAG,IAAI,GAAG,GAAG;AAC1B,QAAI,GAAG,WAAW,IAAI,KAAK,GAAG,SAAS,IAAI,EAAE,OAAO,GAAG;AACrD,aAAO;AAAA,IACT;AAAA,EACF;AACA,aAAW,OAAO,YAAY;AAC5B,UAAM,OAAO,GAAG,IAAI,SAAS,GAAG;AAChC,QAAI,GAAG,WAAW,IAAI,KAAK,GAAG,SAAS,IAAI,EAAE,OAAO,GAAG;AACrD,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,WAAmB,SAAgC;AAC7E,QAAM,QAAQ,UAAU,MAAM,GAAG;AACjC,QAAM,UAAU,UAAU,WAAW,GAAG,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC;AACjF,QAAM,UAAU,UAAU,WAAW,GAAG,IAAI,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,IAAI,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AAE9F,MAAI,YAAY;AAChB,SAAO,MAAM;AACX,UAAM,YAAY,KAAK,KAAK,WAAW,gBAAgB,OAAO;AAC9D,QAAI,GAAG,WAAW,SAAS,GAAG;AAC5B,YAAM,UAAU,GAAG,aAAa,SAAS;AACzC,UAAI,SAAS;AACX,eAAO,qBAAqB,KAAK,KAAK,SAAS,OAAO,GAAG,iBAAiB;AAAA,MAC5E;AACA,aAAO,qBAAqB,KAAK,KAAK,SAAS,OAAO,GAAG,iBAAiB;AAAA,IAC5E;AACA,UAAM,SAAS,KAAK,QAAQ,SAAS;AACrC,QAAI,WAAW,UAAW;AAC1B,gBAAY;AAAA,EACd;AACA,SAAO;AACT;AAQO,SAAS,sBAAsB,YAAoB,QAA4B;AACpF,QAAM,gBAAgB,OAAO,IAAI,CAAC,MAAO,EAAE,SAAS,GAAG,IAAI,IAAI,IAAI,GAAI;AACvE,QAAM,OAAO,oBAAI,IAAY;AAE7B,WAAS,KAAK,cAA4B;AACxC,QAAI,KAAK,IAAI,YAAY,EAAG;AAC5B,QAAI,CAAC,GAAG,WAAW,YAAY,EAAG;AAClC,SAAK,IAAI,YAAY;AAErB,UAAM,OAAO,KAAK,QAAQ,YAAY;AACtC,UAAM,MAAM,KAAK,QAAQ,YAAY;AACrC,UAAM,aAAa,aAAa,SAAS,GAAG,IAAI,oBAAoB;AAEpE,QAAI;AACJ,QAAI;AACF,iBAAW,GAAG,aAAa,cAAc,OAAO;AAAA,IAClD,QAAQ;AACN;AAAA,IACF;AAEA,eAAW,SAAS;AAAA,MAClB,GAAG,SAAS,SAAS,kCAAkC;AAAA,MACvD,GAAG,SAAS,SAAS,6CAA6C;AAAA,MAClE,GAAG,SAAS,SAAS,6BAA6B;AAAA,IACpD,GAAG;AACD,YAAM,YAAY,MAAM,CAAC;AACzB,UAAI,WAA0B;AAE9B,UAAI,UAAU,WAAW,GAAG,GAAG;AAC7B,mBAAW,qBAAqB,KAAK,QAAQ,MAAM,SAAS,GAAG,UAAU;AAAA,MAC3E,WAAW,cAAc,KAAK,CAAC,MAAM,UAAU,WAAW,CAAC,CAAC,GAAG;AAC7D,mBAAW,mBAAmB,WAAW,IAAI;AAAA,MAC/C;AAEA,UAAI,YAAY,MAAM;AACpB,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAEA,OAAK,KAAK,QAAQ,UAAU,CAAC;AAC7B,SAAO,CAAC,GAAG,IAAI;AACjB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import Handlebars from "handlebars";
|
|
3
|
+
import { fsCopy, fsMkdir, fsRead, fsReaddir, fsStat, fsWrite } from "@simplysm/core-node";
|
|
4
|
+
async function renderTemplateDir(srcDir, destDir, context, dirReplacements) {
|
|
5
|
+
await fsMkdir(destDir);
|
|
6
|
+
const entries = await fsReaddir(srcDir);
|
|
7
|
+
for (const entry of entries) {
|
|
8
|
+
const srcPath = path.join(srcDir, entry);
|
|
9
|
+
const stat = await fsStat(srcPath);
|
|
10
|
+
if (stat.isDirectory()) {
|
|
11
|
+
const destName = dirReplacements?.[entry] ?? entry;
|
|
12
|
+
await renderTemplateDir(path.join(srcDir, entry), path.join(destDir, destName), context, dirReplacements);
|
|
13
|
+
} else if (entry.endsWith(".hbs")) {
|
|
14
|
+
const source = await fsRead(srcPath);
|
|
15
|
+
const template = Handlebars.compile(source, { noEscape: true });
|
|
16
|
+
const result = template(context);
|
|
17
|
+
if (result.trim().length === 0) continue;
|
|
18
|
+
const destFileName = entry.slice(0, -4);
|
|
19
|
+
await fsWrite(path.join(destDir, destFileName), result);
|
|
20
|
+
} else {
|
|
21
|
+
await fsCopy(srcPath, path.join(destDir, entry));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export {
|
|
26
|
+
renderTemplateDir
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/template.ts"],
|
|
4
|
+
"sourcesContent": ["import path from \"path\";\nimport Handlebars from \"handlebars\";\nimport { fsCopy, fsMkdir, fsRead, fsReaddir, fsStat, fsWrite } from \"@simplysm/core-node\";\n\n/**\n * \uD15C\uD50C\uB9BF \uB514\uB809\uD1A0\uB9AC\uB97C \uC7AC\uADC0\uC801\uC73C\uB85C \uC21C\uD68C\uD558\uBA70 Handlebars \uB80C\uB354\uB9C1 \uD6C4 \uD30C\uC77C\uC744 \uC0DD\uC131\uD55C\uB2E4.\n *\n * - `.hbs` \uD655\uC7A5\uC790 \uD30C\uC77C: Handlebars \uCEF4\uD30C\uC77C \u2192 `.hbs` \uC81C\uAC70\uD55C \uC774\uB984\uC73C\uB85C \uC800\uC7A5\n * - `.hbs` \uACB0\uACFC\uAC00 \uBE48 \uBB38\uC790\uC5F4/\uACF5\uBC31\uB9CC\uC774\uBA74: \uD30C\uC77C \uC0DD\uC131 \uC2A4\uD0B5\n * - \uB098\uBA38\uC9C0 \uD30C\uC77C: \uBC14\uC774\uB108\uB9AC\uB85C \uADF8\uB300\uB85C \uBCF5\uC0AC\n *\n * @param srcDir - \uD15C\uD50C\uB9BF \uC18C\uC2A4 \uB514\uB809\uD1A0\uB9AC\n * @param destDir - \uCD9C\uB825 \uB300\uC0C1 \uB514\uB809\uD1A0\uB9AC\n * @param context - Handlebars \uD15C\uD50C\uB9BF \uBCC0\uC218\n * @param dirReplacements - \uB514\uB809\uD1A0\uB9AC \uC774\uB984 \uCE58\uD658 \uB9F5 (\uC608: `{ __CLIENT__: \"client-admin\" }`)\n */\nexport async function renderTemplateDir(\n srcDir: string,\n destDir: string,\n context: Record<string, unknown>,\n dirReplacements?: Record<string, string>,\n): Promise<void> {\n await fsMkdir(destDir);\n\n const entries = await fsReaddir(srcDir);\n\n for (const entry of entries) {\n const srcPath = path.join(srcDir, entry);\n const stat = await fsStat(srcPath);\n\n if (stat.isDirectory()) {\n // \uB514\uB809\uD1A0\uB9AC \uC774\uB984 \uCE58\uD658 \uC801\uC6A9\n const destName = dirReplacements?.[entry] ?? entry;\n await renderTemplateDir(path.join(srcDir, entry), path.join(destDir, destName), context, dirReplacements);\n } else if (entry.endsWith(\".hbs\")) {\n // Handlebars \uD15C\uD50C\uB9BF \uB80C\uB354\uB9C1\n const source = await fsRead(srcPath);\n const template = Handlebars.compile(source, { noEscape: true });\n const result = template(context);\n\n // \uBE48 \uACB0\uACFC\uBA74 \uD30C\uC77C \uC0DD\uC131 \uC2A4\uD0B5\n if (result.trim().length === 0) continue;\n\n const destFileName = entry.slice(0, -4); // .hbs \uC81C\uAC70\n await fsWrite(path.join(destDir, destFileName), result);\n } else {\n // \uBC14\uC774\uB108\uB9AC \uD30C\uC77C\uC740 \uADF8\uB300\uB85C \uBCF5\uC0AC\n await fsCopy(srcPath, path.join(destDir, entry));\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,UAAU;AACjB,OAAO,gBAAgB;AACvB,SAAS,QAAQ,SAAS,QAAQ,WAAW,QAAQ,eAAe;AAcpE,eAAsB,kBACpB,QACA,SACA,SACA,iBACe;AACf,QAAM,QAAQ,OAAO;AAErB,QAAM,UAAU,MAAM,UAAU,MAAM;AAEtC,aAAW,SAAS,SAAS;AAC3B,UAAM,UAAU,KAAK,KAAK,QAAQ,KAAK;AACvC,UAAM,OAAO,MAAM,OAAO,OAAO;AAEjC,QAAI,KAAK,YAAY,GAAG;AAEtB,YAAM,WAAW,kBAAkB,KAAK,KAAK;AAC7C,YAAM,kBAAkB,KAAK,KAAK,QAAQ,KAAK,GAAG,KAAK,KAAK,SAAS,QAAQ,GAAG,SAAS,eAAe;AAAA,IAC1G,WAAW,MAAM,SAAS,MAAM,GAAG;AAEjC,YAAM,SAAS,MAAM,OAAO,OAAO;AACnC,YAAM,WAAW,WAAW,QAAQ,QAAQ,EAAE,UAAU,KAAK,CAAC;AAC9D,YAAM,SAAS,SAAS,OAAO;AAG/B,UAAI,OAAO,KAAK,EAAE,WAAW,EAAG;AAEhC,YAAM,eAAe,MAAM,MAAM,GAAG,EAAE;AACtC,YAAM,QAAQ,KAAK,KAAK,SAAS,YAAY,GAAG,MAAM;AAAA,IACxD,OAAO;AAEL,YAAM,OAAO,SAAS,KAAK,KAAK,SAAS,KAAK,CAAC;AAAA,IACjD;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|