@simplysm/sd-cli 12.16.24 → 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.
Files changed (421) hide show
  1. package/README.md +529 -0
  2. package/dist/builders/BaseBuilder.js +86 -0
  3. package/dist/builders/BaseBuilder.js.map +7 -0
  4. package/dist/builders/DtsBuilder.js +109 -0
  5. package/dist/builders/DtsBuilder.js.map +7 -0
  6. package/dist/builders/LibraryBuilder.js +122 -0
  7. package/dist/builders/LibraryBuilder.js.map +7 -0
  8. package/dist/builders/index.js +9 -0
  9. package/dist/builders/index.js.map +7 -0
  10. package/dist/builders/types.js +1 -0
  11. package/dist/builders/types.js.map +7 -0
  12. package/dist/capacitor/capacitor.js +619 -0
  13. package/dist/capacitor/capacitor.js.map +7 -0
  14. package/dist/commands/add-client.js +83 -0
  15. package/dist/commands/add-client.js.map +7 -0
  16. package/dist/commands/add-server.js +91 -0
  17. package/dist/commands/add-server.js.map +7 -0
  18. package/dist/commands/build.js +310 -0
  19. package/dist/commands/build.js.map +7 -0
  20. package/dist/commands/dev.js +426 -0
  21. package/dist/commands/dev.js.map +7 -0
  22. package/dist/commands/device.js +107 -0
  23. package/dist/commands/device.js.map +7 -0
  24. package/dist/commands/init.js +58 -0
  25. package/dist/commands/init.js.map +7 -0
  26. package/dist/commands/lint.js +138 -0
  27. package/dist/commands/lint.js.map +7 -0
  28. package/dist/commands/publish.js +401 -0
  29. package/dist/commands/publish.js.map +7 -0
  30. package/dist/commands/typecheck.js +197 -0
  31. package/dist/commands/typecheck.js.map +7 -0
  32. package/dist/commands/watch.js +19 -0
  33. package/dist/commands/watch.js.map +7 -0
  34. package/dist/core-common/src/common.types.d.ts +74 -0
  35. package/dist/core-common/src/common.types.d.ts.map +1 -0
  36. package/dist/core-common/src/env.d.ts +6 -0
  37. package/dist/core-common/src/env.d.ts.map +1 -0
  38. package/dist/core-common/src/errors/argument-error.d.ts +25 -0
  39. package/dist/core-common/src/errors/argument-error.d.ts.map +1 -0
  40. package/dist/core-common/src/errors/not-implemented-error.d.ts +29 -0
  41. package/dist/core-common/src/errors/not-implemented-error.d.ts.map +1 -0
  42. package/dist/core-common/src/errors/sd-error.d.ts +27 -0
  43. package/dist/core-common/src/errors/sd-error.d.ts.map +1 -0
  44. package/dist/core-common/src/errors/timeout-error.d.ts +31 -0
  45. package/dist/core-common/src/errors/timeout-error.d.ts.map +1 -0
  46. package/dist/core-common/src/extensions/arr-ext.d.ts +15 -0
  47. package/dist/core-common/src/extensions/arr-ext.d.ts.map +1 -0
  48. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts +19 -0
  49. package/dist/core-common/src/extensions/arr-ext.helpers.d.ts.map +1 -0
  50. package/dist/core-common/src/extensions/arr-ext.types.d.ts +215 -0
  51. package/dist/core-common/src/extensions/arr-ext.types.d.ts.map +1 -0
  52. package/dist/core-common/src/extensions/map-ext.d.ts +57 -0
  53. package/dist/core-common/src/extensions/map-ext.d.ts.map +1 -0
  54. package/dist/core-common/src/extensions/set-ext.d.ts +36 -0
  55. package/dist/core-common/src/extensions/set-ext.d.ts.map +1 -0
  56. package/dist/core-common/src/features/debounce-queue.d.ts +53 -0
  57. package/dist/core-common/src/features/debounce-queue.d.ts.map +1 -0
  58. package/dist/core-common/src/features/event-emitter.d.ts +66 -0
  59. package/dist/core-common/src/features/event-emitter.d.ts.map +1 -0
  60. package/dist/core-common/src/features/serial-queue.d.ts +47 -0
  61. package/dist/core-common/src/features/serial-queue.d.ts.map +1 -0
  62. package/dist/core-common/src/index.d.ts +32 -0
  63. package/dist/core-common/src/index.d.ts.map +1 -0
  64. package/dist/core-common/src/types/date-only.d.ts +152 -0
  65. package/dist/core-common/src/types/date-only.d.ts.map +1 -0
  66. package/dist/core-common/src/types/date-time.d.ts +96 -0
  67. package/dist/core-common/src/types/date-time.d.ts.map +1 -0
  68. package/dist/core-common/src/types/lazy-gc-map.d.ts +80 -0
  69. package/dist/core-common/src/types/lazy-gc-map.d.ts.map +1 -0
  70. package/dist/core-common/src/types/time.d.ts +68 -0
  71. package/dist/core-common/src/types/time.d.ts.map +1 -0
  72. package/dist/core-common/src/types/uuid.d.ts +35 -0
  73. package/dist/core-common/src/types/uuid.d.ts.map +1 -0
  74. package/dist/core-common/src/utils/bytes.d.ts +51 -0
  75. package/dist/core-common/src/utils/bytes.d.ts.map +1 -0
  76. package/dist/core-common/src/utils/date-format.d.ts +90 -0
  77. package/dist/core-common/src/utils/date-format.d.ts.map +1 -0
  78. package/dist/core-common/src/utils/json.d.ts +34 -0
  79. package/dist/core-common/src/utils/json.d.ts.map +1 -0
  80. package/dist/core-common/src/utils/num.d.ts +60 -0
  81. package/dist/core-common/src/utils/num.d.ts.map +1 -0
  82. package/dist/core-common/src/utils/obj.d.ts +258 -0
  83. package/dist/core-common/src/utils/obj.d.ts.map +1 -0
  84. package/dist/core-common/src/utils/path.d.ts +23 -0
  85. package/dist/core-common/src/utils/path.d.ts.map +1 -0
  86. package/dist/core-common/src/utils/primitive.d.ts +18 -0
  87. package/dist/core-common/src/utils/primitive.d.ts.map +1 -0
  88. package/dist/core-common/src/utils/str.d.ts +103 -0
  89. package/dist/core-common/src/utils/str.d.ts.map +1 -0
  90. package/dist/core-common/src/utils/template-strings.d.ts +84 -0
  91. package/dist/core-common/src/utils/template-strings.d.ts.map +1 -0
  92. package/dist/core-common/src/utils/transferable.d.ts +47 -0
  93. package/dist/core-common/src/utils/transferable.d.ts.map +1 -0
  94. package/dist/core-common/src/utils/wait.d.ts +19 -0
  95. package/dist/core-common/src/utils/wait.d.ts.map +1 -0
  96. package/dist/core-common/src/utils/xml.d.ts +36 -0
  97. package/dist/core-common/src/utils/xml.d.ts.map +1 -0
  98. package/dist/core-common/src/zip/sd-zip.d.ts +80 -0
  99. package/dist/core-common/src/zip/sd-zip.d.ts.map +1 -0
  100. package/dist/core-node/src/features/fs-watcher.d.ts +70 -0
  101. package/dist/core-node/src/features/fs-watcher.d.ts.map +1 -0
  102. package/dist/core-node/src/index.d.ts +7 -0
  103. package/dist/core-node/src/index.d.ts.map +1 -0
  104. package/dist/core-node/src/utils/fs.d.ts +197 -0
  105. package/dist/core-node/src/utils/fs.d.ts.map +1 -0
  106. package/dist/core-node/src/utils/path.d.ts +75 -0
  107. package/dist/core-node/src/utils/path.d.ts.map +1 -0
  108. package/dist/core-node/src/worker/create-worker.d.ts +23 -0
  109. package/dist/core-node/src/worker/create-worker.d.ts.map +1 -0
  110. package/dist/core-node/src/worker/types.d.ts +67 -0
  111. package/dist/core-node/src/worker/types.d.ts.map +1 -0
  112. package/dist/core-node/src/worker/worker.d.ts +27 -0
  113. package/dist/core-node/src/worker/worker.d.ts.map +1 -0
  114. package/dist/electron/electron.js +242 -0
  115. package/dist/electron/electron.js.map +7 -0
  116. package/dist/index.js +2 -0
  117. package/dist/index.js.map +7 -0
  118. package/dist/infra/ResultCollector.js +59 -0
  119. package/dist/infra/ResultCollector.js.map +7 -0
  120. package/dist/infra/SignalHandler.js +44 -0
  121. package/dist/infra/SignalHandler.js.map +7 -0
  122. package/dist/infra/WorkerManager.js +56 -0
  123. package/dist/infra/WorkerManager.js.map +7 -0
  124. package/dist/infra/index.js +9 -0
  125. package/dist/infra/index.js.map +7 -0
  126. package/dist/orchestrators/WatchOrchestrator.js +135 -0
  127. package/dist/orchestrators/WatchOrchestrator.js.map +7 -0
  128. package/dist/orchestrators/index.js +5 -0
  129. package/dist/orchestrators/index.js.map +7 -0
  130. package/dist/sd-cli/src/builders/BaseBuilder.d.ts +77 -0
  131. package/dist/sd-cli/src/builders/BaseBuilder.d.ts.map +1 -0
  132. package/dist/sd-cli/src/builders/DtsBuilder.d.ts +22 -0
  133. package/dist/sd-cli/src/builders/DtsBuilder.d.ts.map +1 -0
  134. package/dist/sd-cli/src/builders/LibraryBuilder.d.ts +22 -0
  135. package/dist/sd-cli/src/builders/LibraryBuilder.d.ts.map +1 -0
  136. package/dist/sd-cli/src/builders/index.d.ts +5 -0
  137. package/dist/sd-cli/src/builders/index.d.ts.map +1 -0
  138. package/dist/sd-cli/src/builders/types.d.ts +49 -0
  139. package/dist/sd-cli/src/builders/types.d.ts.map +1 -0
  140. package/dist/sd-cli/src/capacitor/capacitor.d.ts +131 -0
  141. package/dist/sd-cli/src/capacitor/capacitor.d.ts.map +1 -0
  142. package/dist/sd-cli/src/commands/add-client.d.ts +18 -0
  143. package/dist/sd-cli/src/commands/add-client.d.ts.map +1 -0
  144. package/dist/sd-cli/src/commands/add-server.d.ts +18 -0
  145. package/dist/sd-cli/src/commands/add-server.d.ts.map +1 -0
  146. package/dist/sd-cli/src/commands/build.d.ts +25 -0
  147. package/dist/sd-cli/src/commands/build.d.ts.map +1 -0
  148. package/dist/sd-cli/src/commands/dev.d.ts +23 -0
  149. package/dist/sd-cli/src/commands/dev.d.ts.map +1 -0
  150. package/dist/sd-cli/src/commands/device.d.ts +22 -0
  151. package/dist/sd-cli/src/commands/device.d.ts.map +1 -0
  152. package/dist/sd-cli/src/commands/init.d.ts +15 -0
  153. package/dist/sd-cli/src/commands/init.d.ts.map +1 -0
  154. package/dist/sd-cli/src/commands/lint.d.ts +31 -0
  155. package/dist/sd-cli/src/commands/lint.d.ts.map +1 -0
  156. package/dist/sd-cli/src/commands/publish.d.ts +27 -0
  157. package/dist/sd-cli/src/commands/publish.d.ts.map +1 -0
  158. package/dist/sd-cli/src/commands/typecheck.d.ts +39 -0
  159. package/dist/sd-cli/src/commands/typecheck.d.ts.map +1 -0
  160. package/dist/sd-cli/src/commands/watch.d.ts +20 -0
  161. package/dist/sd-cli/src/commands/watch.d.ts.map +1 -0
  162. package/dist/sd-cli/src/electron/electron.d.ts +79 -0
  163. package/dist/sd-cli/src/electron/electron.d.ts.map +1 -0
  164. package/dist/sd-cli/src/index.d.ts +2 -0
  165. package/dist/sd-cli/src/index.d.ts.map +1 -0
  166. package/dist/sd-cli/src/infra/ResultCollector.d.ts +56 -0
  167. package/dist/sd-cli/src/infra/ResultCollector.d.ts.map +1 -0
  168. package/dist/sd-cli/src/infra/SignalHandler.d.ts +26 -0
  169. package/dist/sd-cli/src/infra/SignalHandler.d.ts.map +1 -0
  170. package/dist/sd-cli/src/infra/WorkerManager.d.ts +40 -0
  171. package/dist/sd-cli/src/infra/WorkerManager.d.ts.map +1 -0
  172. package/dist/sd-cli/src/infra/index.d.ts +4 -0
  173. package/dist/sd-cli/src/infra/index.d.ts.map +1 -0
  174. package/dist/sd-cli/src/orchestrators/WatchOrchestrator.d.ts +48 -0
  175. package/dist/sd-cli/src/orchestrators/WatchOrchestrator.d.ts.map +1 -0
  176. package/dist/sd-cli/src/orchestrators/index.d.ts +2 -0
  177. package/dist/sd-cli/src/orchestrators/index.d.ts.map +1 -0
  178. package/dist/sd-cli/src/sd-cli.d.ts +9 -0
  179. package/dist/sd-cli/src/sd-cli.d.ts.map +1 -0
  180. package/dist/sd-cli/src/sd-config.types.d.ts +222 -0
  181. package/dist/sd-cli/src/sd-config.types.d.ts.map +1 -0
  182. package/dist/sd-cli/src/utils/build-env.d.ts +5 -0
  183. package/dist/sd-cli/src/utils/build-env.d.ts.map +1 -0
  184. package/dist/sd-cli/src/utils/config-editor.d.ts +17 -0
  185. package/dist/sd-cli/src/utils/config-editor.d.ts.map +1 -0
  186. package/dist/sd-cli/src/utils/esbuild-config.d.ts +49 -0
  187. package/dist/sd-cli/src/utils/esbuild-config.d.ts.map +1 -0
  188. package/dist/sd-cli/src/utils/listr-manager.d.ts +37 -0
  189. package/dist/sd-cli/src/utils/listr-manager.d.ts.map +1 -0
  190. package/dist/sd-cli/src/utils/output-utils.d.ts +21 -0
  191. package/dist/sd-cli/src/utils/output-utils.d.ts.map +1 -0
  192. package/dist/sd-cli/src/utils/package-utils.d.ts +29 -0
  193. package/dist/sd-cli/src/utils/package-utils.d.ts.map +1 -0
  194. package/dist/sd-cli/src/utils/sd-config.d.ts +12 -0
  195. package/dist/sd-cli/src/utils/sd-config.d.ts.map +1 -0
  196. package/dist/sd-cli/src/utils/spawn.d.ts +26 -0
  197. package/dist/sd-cli/src/utils/spawn.d.ts.map +1 -0
  198. package/dist/sd-cli/src/utils/tailwind-config-deps.d.ts +8 -0
  199. package/dist/sd-cli/src/utils/tailwind-config-deps.d.ts.map +1 -0
  200. package/dist/sd-cli/src/utils/template.d.ts +14 -0
  201. package/dist/sd-cli/src/utils/template.d.ts.map +1 -0
  202. package/dist/sd-cli/src/utils/tsconfig.d.ts +35 -0
  203. package/dist/sd-cli/src/utils/tsconfig.d.ts.map +1 -0
  204. package/dist/sd-cli/src/utils/typecheck-serialization.d.ts +28 -0
  205. package/dist/sd-cli/src/utils/typecheck-serialization.d.ts.map +1 -0
  206. package/dist/sd-cli/src/utils/vite-config.d.ts +25 -0
  207. package/dist/sd-cli/src/utils/vite-config.d.ts.map +1 -0
  208. package/dist/sd-cli/src/utils/worker-events.d.ts +53 -0
  209. package/dist/sd-cli/src/utils/worker-events.d.ts.map +1 -0
  210. package/dist/sd-cli/src/workers/client.worker.d.ts +82 -0
  211. package/dist/sd-cli/src/workers/client.worker.d.ts.map +1 -0
  212. package/dist/sd-cli/src/workers/dts.worker.d.ts +73 -0
  213. package/dist/sd-cli/src/workers/dts.worker.d.ts.map +1 -0
  214. package/dist/sd-cli/src/workers/library.worker.d.ts +73 -0
  215. package/dist/sd-cli/src/workers/library.worker.d.ts.map +1 -0
  216. package/dist/sd-cli/src/workers/server-runtime.worker.d.ts +40 -0
  217. package/dist/sd-cli/src/workers/server-runtime.worker.d.ts.map +1 -0
  218. package/dist/sd-cli/src/workers/server.worker.d.ts +76 -0
  219. package/dist/sd-cli/src/workers/server.worker.d.ts.map +1 -0
  220. package/dist/sd-cli.js +239 -76
  221. package/dist/sd-cli.js.map +7 -0
  222. package/dist/sd-config.types.js +1 -0
  223. package/dist/sd-config.types.js.map +7 -0
  224. package/dist/storage/src/clients/ftp-storage-client.d.ts +56 -0
  225. package/dist/storage/src/clients/ftp-storage-client.d.ts.map +1 -0
  226. package/dist/storage/src/clients/sftp-storage-client.d.ts +48 -0
  227. package/dist/storage/src/clients/sftp-storage-client.d.ts.map +1 -0
  228. package/dist/storage/src/index.d.ts +7 -0
  229. package/dist/storage/src/index.d.ts.map +1 -0
  230. package/dist/storage/src/storage-factory.d.ts +20 -0
  231. package/dist/storage/src/storage-factory.d.ts.map +1 -0
  232. package/dist/storage/src/types/storage-conn-config.d.ts +7 -0
  233. package/dist/storage/src/types/storage-conn-config.d.ts.map +1 -0
  234. package/dist/storage/src/types/storage-type.d.ts +2 -0
  235. package/dist/storage/src/types/storage-type.d.ts.map +1 -0
  236. package/dist/storage/src/types/storage.d.ts +19 -0
  237. package/dist/storage/src/types/storage.d.ts.map +1 -0
  238. package/dist/utils/build-env.js +12 -0
  239. package/dist/utils/build-env.js.map +7 -0
  240. package/dist/utils/config-editor.js +77 -0
  241. package/dist/utils/config-editor.js.map +7 -0
  242. package/dist/utils/esbuild-config.js +44 -0
  243. package/dist/utils/esbuild-config.js.map +7 -0
  244. package/dist/utils/listr-manager.js +59 -0
  245. package/dist/utils/listr-manager.js.map +7 -0
  246. package/dist/utils/output-utils.js +40 -0
  247. package/dist/utils/output-utils.js.map +7 -0
  248. package/dist/utils/package-utils.js +28 -0
  249. package/dist/utils/package-utils.js.map +7 -0
  250. package/dist/utils/sd-config.js +24 -0
  251. package/dist/utils/sd-config.js.map +7 -0
  252. package/dist/utils/spawn.js +49 -0
  253. package/dist/utils/spawn.js.map +7 -0
  254. package/dist/utils/tailwind-config-deps.js +80 -0
  255. package/dist/utils/tailwind-config-deps.js.map +7 -0
  256. package/dist/utils/template.js +28 -0
  257. package/dist/utils/template.js.map +7 -0
  258. package/dist/utils/tsconfig.js +62 -0
  259. package/dist/utils/tsconfig.js.map +7 -0
  260. package/dist/utils/typecheck-serialization.js +46 -0
  261. package/dist/utils/typecheck-serialization.js.map +7 -0
  262. package/dist/utils/vite-config.js +108 -0
  263. package/dist/utils/vite-config.js.map +7 -0
  264. package/dist/utils/worker-events.js +38 -0
  265. package/dist/utils/worker-events.js.map +7 -0
  266. package/dist/workers/client.worker.js +94 -0
  267. package/dist/workers/client.worker.js.map +7 -0
  268. package/dist/workers/dts.worker.js +210 -0
  269. package/dist/workers/dts.worker.js.map +7 -0
  270. package/dist/workers/library.worker.js +118 -0
  271. package/dist/workers/library.worker.js.map +7 -0
  272. package/dist/workers/server-runtime.worker.js +85 -0
  273. package/dist/workers/server-runtime.worker.js.map +7 -0
  274. package/dist/workers/server.worker.js +114 -42
  275. package/dist/workers/server.worker.js.map +7 -0
  276. package/package.json +32 -29
  277. package/dist/entry/SdCliAiCommand.d.ts +0 -3
  278. package/dist/entry/SdCliAiCommand.js +0 -91
  279. package/dist/entry/SdCliCapacitor.d.ts +0 -35
  280. package/dist/entry/SdCliCapacitor.js +0 -565
  281. package/dist/entry/SdCliCordova.d.ts +0 -49
  282. package/dist/entry/SdCliCordova.js +0 -394
  283. package/dist/entry/SdCliElectron.d.ts +0 -22
  284. package/dist/entry/SdCliElectron.js +0 -128
  285. package/dist/entry/SdCliLocalUpdate.d.ts +0 -11
  286. package/dist/entry/SdCliLocalUpdate.js +0 -83
  287. package/dist/entry/SdCliPostInstall.d.ts +0 -3
  288. package/dist/entry/SdCliPostInstall.js +0 -48
  289. package/dist/entry/SdCliProject.d.ts +0 -24
  290. package/dist/entry/SdCliProject.js +0 -336
  291. package/dist/pkg-builders/SdBuildRunnerBase.d.ts +0 -14
  292. package/dist/pkg-builders/SdBuildRunnerBase.js +0 -22
  293. package/dist/pkg-builders/SdProjectBuildRunner.d.ts +0 -25
  294. package/dist/pkg-builders/SdProjectBuildRunner.js +0 -264
  295. package/dist/pkg-builders/client/SdCliNgRoutesFileGenerator.d.ts +0 -9
  296. package/dist/pkg-builders/client/SdCliNgRoutesFileGenerator.js +0 -89
  297. package/dist/pkg-builders/client/SdClientBuildRunner.d.ts +0 -10
  298. package/dist/pkg-builders/client/SdClientBuildRunner.js +0 -113
  299. package/dist/pkg-builders/client/SdNgBundler.d.ts +0 -38
  300. package/dist/pkg-builders/client/SdNgBundler.js +0 -525
  301. package/dist/pkg-builders/client/SdNgBundlerContext.d.ts +0 -25
  302. package/dist/pkg-builders/client/SdNgBundlerContext.js +0 -104
  303. package/dist/pkg-builders/client/createSdNgPlugin.d.ts +0 -5
  304. package/dist/pkg-builders/client/createSdNgPlugin.js +0 -133
  305. package/dist/pkg-builders/commons/SdWorkerPathPlugin.d.ts +0 -2
  306. package/dist/pkg-builders/commons/SdWorkerPathPlugin.js +0 -91
  307. package/dist/pkg-builders/lib/SdCliDbContextFileGenerator.d.ts +0 -9
  308. package/dist/pkg-builders/lib/SdCliDbContextFileGenerator.js +0 -138
  309. package/dist/pkg-builders/lib/SdCliIndexFileGenerator.d.ts +0 -11
  310. package/dist/pkg-builders/lib/SdCliIndexFileGenerator.js +0 -79
  311. package/dist/pkg-builders/lib/SdJsLibBuildRunner.d.ts +0 -8
  312. package/dist/pkg-builders/lib/SdJsLibBuildRunner.js +0 -44
  313. package/dist/pkg-builders/lib/SdTsLibBuildRunner.d.ts +0 -8
  314. package/dist/pkg-builders/lib/SdTsLibBuildRunner.js +0 -34
  315. package/dist/pkg-builders/lib/SdTsLibBuilder.d.ts +0 -10
  316. package/dist/pkg-builders/lib/SdTsLibBuilder.js +0 -54
  317. package/dist/pkg-builders/server/SdServerBuildRunner.d.ts +0 -10
  318. package/dist/pkg-builders/server/SdServerBuildRunner.js +0 -228
  319. package/dist/pkg-builders/server/SdServerBundler.d.ts +0 -17
  320. package/dist/pkg-builders/server/SdServerBundler.js +0 -174
  321. package/dist/pkg-builders/server/createSdServerPlugin.d.ts +0 -5
  322. package/dist/pkg-builders/server/createSdServerPlugin.js +0 -53
  323. package/dist/sd-cli-entry.d.ts +0 -2
  324. package/dist/sd-cli-entry.js +0 -230
  325. package/dist/sd-cli.d.ts +0 -2
  326. package/dist/ts-compiler/ScopePathSet.d.ts +0 -7
  327. package/dist/ts-compiler/ScopePathSet.js +0 -12
  328. package/dist/ts-compiler/SdDepAnalyzer.d.ts +0 -15
  329. package/dist/ts-compiler/SdDepAnalyzer.js +0 -299
  330. package/dist/ts-compiler/SdDepCache.d.ts +0 -77
  331. package/dist/ts-compiler/SdDepCache.js +0 -248
  332. package/dist/ts-compiler/SdStyleBundler.d.ts +0 -23
  333. package/dist/ts-compiler/SdStyleBundler.js +0 -131
  334. package/dist/ts-compiler/SdTsCompiler.d.ts +0 -29
  335. package/dist/ts-compiler/SdTsCompiler.js +0 -420
  336. package/dist/types/build/ISdBuildMessage.d.ts +0 -10
  337. package/dist/types/build/ISdBuildMessage.js +0 -1
  338. package/dist/types/build/ISdBuildResult.d.ts +0 -8
  339. package/dist/types/build/ISdBuildResult.js +0 -1
  340. package/dist/types/build/ISdTsCompilerOptions.d.ts +0 -10
  341. package/dist/types/build/ISdTsCompilerOptions.js +0 -1
  342. package/dist/types/build/ISdTsCompilerResult.d.ts +0 -14
  343. package/dist/types/build/ISdTsCompilerResult.js +0 -1
  344. package/dist/types/build/TStylesheetBundlingResult.d.ts +0 -12
  345. package/dist/types/build/TStylesheetBundlingResult.js +0 -1
  346. package/dist/types/common-config/INpmConfig.d.ts +0 -17
  347. package/dist/types/common-config/INpmConfig.js +0 -1
  348. package/dist/types/common-config/ITsConfig.d.ts +0 -7
  349. package/dist/types/common-config/ITsConfig.js +0 -1
  350. package/dist/types/config/ISdProjectConfig.d.ts +0 -144
  351. package/dist/types/config/ISdProjectConfig.js +0 -1
  352. package/dist/types/plugin/ISdCliNgPluginResultCache.d.ts +0 -8
  353. package/dist/types/plugin/ISdCliNgPluginResultCache.js +0 -1
  354. package/dist/types/plugin/ISdCliServerPluginResultCache.d.ts +0 -8
  355. package/dist/types/plugin/ISdCliServerPluginResultCache.js +0 -1
  356. package/dist/types/worker/ISdBuildRunnerWorkerType.d.ts +0 -20
  357. package/dist/types/worker/ISdBuildRunnerWorkerType.js +0 -1
  358. package/dist/types/worker/IServerWorkerType.d.ts +0 -17
  359. package/dist/types/worker/IServerWorkerType.js +0 -1
  360. package/dist/utils/SdCliConvertMessageUtils.d.ts +0 -21
  361. package/dist/utils/SdCliConvertMessageUtils.js +0 -138
  362. package/dist/utils/SdCliPerformanceTimer.d.ts +0 -10
  363. package/dist/utils/SdCliPerformanceTimer.js +0 -50
  364. package/dist/utils/loadProjConfAsync.d.ts +0 -5
  365. package/dist/utils/loadProjConfAsync.js +0 -7
  366. package/dist/workers/build-runner.worker.d.ts +0 -1
  367. package/dist/workers/build-runner.worker.js +0 -37
  368. package/dist/workers/server.worker.d.ts +0 -1
  369. package/lib/cordova-entry.js +0 -29
  370. package/src/entry/SdCliAiCommand.ts +0 -105
  371. package/src/entry/SdCliCapacitor.ts +0 -760
  372. package/src/entry/SdCliCordova.ts +0 -550
  373. package/src/entry/SdCliElectron.ts +0 -197
  374. package/src/entry/SdCliLocalUpdate.ts +0 -106
  375. package/src/entry/SdCliPostInstall.ts +0 -51
  376. package/src/entry/SdCliProject.ts +0 -427
  377. package/src/pkg-builders/SdBuildRunnerBase.ts +0 -36
  378. package/src/pkg-builders/SdProjectBuildRunner.ts +0 -398
  379. package/src/pkg-builders/client/SdCliNgRoutesFileGenerator.ts +0 -112
  380. package/src/pkg-builders/client/SdClientBuildRunner.ts +0 -156
  381. package/src/pkg-builders/client/SdNgBundler.ts +0 -666
  382. package/src/pkg-builders/client/SdNgBundlerContext.ts +0 -138
  383. package/src/pkg-builders/client/createSdNgPlugin.ts +0 -186
  384. package/src/pkg-builders/commons/SdWorkerPathPlugin.ts +0 -117
  385. package/src/pkg-builders/lib/SdCliDbContextFileGenerator.ts +0 -177
  386. package/src/pkg-builders/lib/SdCliIndexFileGenerator.ts +0 -94
  387. package/src/pkg-builders/lib/SdJsLibBuildRunner.ts +0 -59
  388. package/src/pkg-builders/lib/SdTsLibBuildRunner.ts +0 -47
  389. package/src/pkg-builders/lib/SdTsLibBuilder.ts +0 -71
  390. package/src/pkg-builders/server/SdServerBuildRunner.ts +0 -299
  391. package/src/pkg-builders/server/SdServerBundler.ts +0 -208
  392. package/src/pkg-builders/server/createSdServerPlugin.ts +0 -80
  393. package/src/sd-cli-entry.ts +0 -292
  394. package/src/sd-cli.ts +0 -105
  395. package/src/ts-compiler/ScopePathSet.ts +0 -17
  396. package/src/ts-compiler/SdDepAnalyzer.ts +0 -372
  397. package/src/ts-compiler/SdDepCache.ts +0 -304
  398. package/src/ts-compiler/SdStyleBundler.ts +0 -169
  399. package/src/ts-compiler/SdTsCompiler.ts +0 -638
  400. package/src/types/build/ISdBuildMessage.ts +0 -11
  401. package/src/types/build/ISdBuildResult.ts +0 -9
  402. package/src/types/build/ISdTsCompilerOptions.ts +0 -11
  403. package/src/types/build/ISdTsCompilerResult.ts +0 -12
  404. package/src/types/build/TStylesheetBundlingResult.ts +0 -15
  405. package/src/types/common-config/INpmConfig.ts +0 -24
  406. package/src/types/common-config/ITsConfig.ts +0 -5
  407. package/src/types/config/ISdProjectConfig.ts +0 -174
  408. package/src/types/plugin/ISdCliNgPluginResultCache.ts +0 -9
  409. package/src/types/plugin/ISdCliServerPluginResultCache.ts +0 -9
  410. package/src/types/worker/ISdBuildRunnerWorkerType.ts +0 -19
  411. package/src/types/worker/IServerWorkerType.ts +0 -8
  412. package/src/utils/SdCliConvertMessageUtils.ts +0 -180
  413. package/src/utils/SdCliPerformanceTimer.ts +0 -62
  414. package/src/utils/loadProjConfAsync.ts +0 -16
  415. package/src/workers/build-runner.worker.ts +0 -54
  416. package/src/workers/server.worker.ts +0 -54
  417. package/tests/deps/sd-dependency-analyzer.spec.ts +0 -241
  418. package/tests/deps/sd-dependency-cache.spec.ts +0 -153
  419. package/tsconfig.json +0 -8
  420. package/tsconfig.test.json +0 -8
  421. package/vitest.config.js +0 -15
@@ -0,0 +1,242 @@
1
+ import path from "path";
2
+ import os from "os";
3
+ import fs from "fs";
4
+ import module from "module";
5
+ import { fsExists, fsMkdir, fsCopy, fsReaddir, fsReadJson, fsWriteJson } from "@simplysm/core-node";
6
+ import { consola } from "consola";
7
+ import { spawn } from "../utils/spawn";
8
+ class Electron {
9
+ constructor(_pkgPath, _config, npmConfig) {
10
+ this._pkgPath = _pkgPath;
11
+ this._config = _config;
12
+ this._npmConfig = npmConfig;
13
+ this._electronPath = path.resolve(this._pkgPath, ".electron");
14
+ }
15
+ static _logger = consola.withTag("sd:cli:electron");
16
+ _electronPath;
17
+ _npmConfig;
18
+ /**
19
+ * Electron 인스턴스 생성 (설정 검증 포함)
20
+ */
21
+ static async create(pkgPath, config) {
22
+ Electron._validateConfig(config);
23
+ const npmConfig = await fsReadJson(path.resolve(pkgPath, "package.json"));
24
+ return new Electron(pkgPath, config, npmConfig);
25
+ }
26
+ /**
27
+ * 설정 검증
28
+ */
29
+ static _validateConfig(config) {
30
+ if (typeof config.appId !== "string" || config.appId.trim() === "") {
31
+ throw new Error("electron.appId\uB294 \uD544\uC218\uC785\uB2C8\uB2E4.");
32
+ }
33
+ }
34
+ /**
35
+ * 명령어 실행 (로깅 포함)
36
+ */
37
+ async _exec(cmd, args, cwd, env) {
38
+ Electron._logger.debug(`\uC2E4\uD589 \uBA85\uB839: ${cmd} ${args.join(" ")}`);
39
+ const result = await spawn(cmd, args, { cwd, env });
40
+ Electron._logger.debug(`\uC2E4\uD589 \uACB0\uACFC: ${result}`);
41
+ return result;
42
+ }
43
+ //#region Public Methods
44
+ /**
45
+ * Electron 프로젝트 초기화
46
+ *
47
+ * 1. .electron/src/package.json 생성
48
+ * 2. npm install 실행
49
+ * 3. electron-rebuild 실행 (native 모듈 재빌드)
50
+ */
51
+ async initialize() {
52
+ const srcPath = path.resolve(this._electronPath, "src");
53
+ await this._setupPackageJson(srcPath);
54
+ await this._exec("npm", ["install"], srcPath);
55
+ const reinstallDeps = this._config.reinstallDependencies ?? [];
56
+ if (reinstallDeps.length > 0) {
57
+ await this._exec("npx", ["electron-rebuild"], srcPath);
58
+ }
59
+ }
60
+ /**
61
+ * 프로덕션 빌드
62
+ *
63
+ * 1. esbuild로 electron-main.ts 번들링
64
+ * 2. 웹 에셋 복사
65
+ * 3. electron-builder 설정 생성
66
+ * 4. electron-builder 실행
67
+ * 5. 결과물 복사
68
+ */
69
+ async build(outPath) {
70
+ const srcPath = path.resolve(this._electronPath, "src");
71
+ await this._bundleMainProcess(srcPath);
72
+ await this._copyWebAssets(outPath, srcPath);
73
+ await this._runElectronBuilder(srcPath);
74
+ await this._copyBuildOutput(outPath);
75
+ }
76
+ /**
77
+ * 개발 모드 실행
78
+ *
79
+ * 1. esbuild로 electron-main.ts 번들링
80
+ * 2. dist/electron/package.json 생성
81
+ * 3. npx electron . 실행
82
+ */
83
+ async run(url) {
84
+ const electronRunPath = path.resolve(this._pkgPath, "dist/electron");
85
+ await this._bundleMainProcess(electronRunPath);
86
+ await fsMkdir(electronRunPath);
87
+ await fsWriteJson(
88
+ path.resolve(electronRunPath, "package.json"),
89
+ { name: this._npmConfig.name, version: this._npmConfig.version, main: "electron-main.js" },
90
+ { space: 2 }
91
+ );
92
+ const runEnv = {
93
+ NODE_ENV: "development",
94
+ ...this._config.env
95
+ };
96
+ if (url != null) {
97
+ runEnv["ELECTRON_DEV_URL"] = url;
98
+ }
99
+ await this._exec("npx", ["electron", "."], electronRunPath, runEnv);
100
+ }
101
+ //#endregion
102
+ //#region Private - 초기화
103
+ /**
104
+ * .electron/src/package.json 생성
105
+ */
106
+ async _setupPackageJson(srcPath) {
107
+ await fsMkdir(srcPath);
108
+ const reinstallDeps = this._config.reinstallDependencies ?? [];
109
+ const dependencies = {};
110
+ for (const dep of reinstallDeps) {
111
+ const version = this._npmConfig.dependencies?.[dep];
112
+ if (version != null) {
113
+ dependencies[dep] = version;
114
+ }
115
+ }
116
+ const packageJson = {
117
+ name: this._npmConfig.name.replace(/^@/, "").replace(/\//, "-"),
118
+ version: this._npmConfig.version,
119
+ description: this._npmConfig.description,
120
+ main: "electron-main.js",
121
+ dependencies
122
+ };
123
+ if (this._config.postInstallScript != null) {
124
+ packageJson["scripts"] = { postinstall: this._config.postInstallScript };
125
+ }
126
+ await fsWriteJson(path.resolve(srcPath, "package.json"), packageJson, { space: 2 });
127
+ }
128
+ //#endregion
129
+ //#region Private - 번들링
130
+ /**
131
+ * esbuild로 electron-main.ts 번들링
132
+ */
133
+ async _bundleMainProcess(outDir) {
134
+ const esbuild = await import("esbuild");
135
+ const entryPoint = path.resolve(this._pkgPath, "src/electron-main.ts");
136
+ if (!await fsExists(entryPoint)) {
137
+ throw new Error(`electron-main.ts \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${entryPoint}`);
138
+ }
139
+ const builtinModules = module.builtinModules.flatMap((m) => [m, `node:${m}`]);
140
+ const reinstallDeps = this._config.reinstallDependencies ?? [];
141
+ await fsMkdir(outDir);
142
+ await esbuild.build({
143
+ entryPoints: [entryPoint],
144
+ outfile: path.resolve(outDir, "electron-main.js"),
145
+ platform: "node",
146
+ target: "node20",
147
+ format: "cjs",
148
+ bundle: true,
149
+ external: ["electron", ...builtinModules, ...reinstallDeps]
150
+ });
151
+ }
152
+ //#endregion
153
+ //#region Private - 빌드
154
+ /**
155
+ * 웹 에셋 복사 (빌드 결과물 → .electron/src/)
156
+ */
157
+ async _copyWebAssets(outPath, srcPath) {
158
+ const items = await fsReaddir(outPath);
159
+ for (const item of items) {
160
+ if (item === "electron") continue;
161
+ const source = path.resolve(outPath, item);
162
+ const dest = path.resolve(srcPath, item);
163
+ await fsCopy(source, dest);
164
+ }
165
+ }
166
+ /**
167
+ * Symlink 생성 가능 여부 확인 (Windows 빌드 요구사항)
168
+ */
169
+ static _canCreateSymlink() {
170
+ const tmpDir = os.tmpdir();
171
+ const testTarget = path.join(tmpDir, "sd-electron-symlink-test-target.txt");
172
+ const testLink = path.join(tmpDir, "sd-electron-symlink-test-link.txt");
173
+ try {
174
+ fs.writeFileSync(testTarget, "test");
175
+ fs.symlinkSync(testTarget, testLink, "file");
176
+ const isSymlink = fs.lstatSync(testLink).isSymbolicLink();
177
+ fs.unlinkSync(testLink);
178
+ fs.unlinkSync(testTarget);
179
+ return isSymlink;
180
+ } catch {
181
+ return false;
182
+ }
183
+ }
184
+ /**
185
+ * electron-builder 실행
186
+ */
187
+ async _runElectronBuilder(srcPath) {
188
+ if (!Electron._canCreateSymlink()) {
189
+ throw new Error("Electron \uBE4C\uB4DC\uB97C \uC704\uD574\uC11C\uB294 Symlink \uC0DD\uC131 \uAD8C\uD55C\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \uC708\uB3C4\uC6B0\uC758 \uAC1C\uBC1C\uC790\uBAA8\uB4DC\uB97C \uD65C\uC131\uD654\uD558\uC138\uC694.");
190
+ }
191
+ const distPath = path.resolve(this._electronPath, "dist");
192
+ const builderConfig = {
193
+ appId: this._config.appId,
194
+ productName: this._npmConfig.description,
195
+ asar: false,
196
+ win: {
197
+ target: this._config.portable ? "portable" : "nsis"
198
+ },
199
+ nsis: this._config.nsisOptions ?? {},
200
+ directories: {
201
+ app: srcPath,
202
+ output: distPath
203
+ },
204
+ removePackageScripts: false,
205
+ npmRebuild: false,
206
+ forceCodeSigning: false
207
+ };
208
+ if (this._config.installerIcon != null) {
209
+ builderConfig["icon"] = path.resolve(this._pkgPath, this._config.installerIcon);
210
+ }
211
+ const configFilePath = path.resolve(this._electronPath, "builder-config.json");
212
+ await fsWriteJson(configFilePath, builderConfig, { space: 2 });
213
+ await this._exec("npx", ["electron-builder", "--win", "--config", configFilePath], this._pkgPath);
214
+ }
215
+ /**
216
+ * 빌드 결과물 복사 (.electron/dist/ → dist/electron/)
217
+ */
218
+ async _copyBuildOutput(outPath) {
219
+ const distPath = path.resolve(this._electronPath, "dist");
220
+ const electronOutPath = path.resolve(outPath, "electron");
221
+ await fsMkdir(electronOutPath);
222
+ const description = this._npmConfig.description ?? this._npmConfig.name;
223
+ const version = this._npmConfig.version;
224
+ const isPortable = this._config.portable === true;
225
+ const builderFileName = `${description} ${isPortable ? "" : "Setup "}${version}.exe`;
226
+ const sourcePath = path.resolve(distPath, builderFileName);
227
+ if (await fsExists(sourcePath)) {
228
+ const latestFileName = `${description}${isPortable ? "-portable" : ""}-latest.exe`;
229
+ await fsCopy(sourcePath, path.resolve(electronOutPath, latestFileName));
230
+ const updatesPath = path.resolve(electronOutPath, "updates");
231
+ await fsMkdir(updatesPath);
232
+ await fsCopy(sourcePath, path.resolve(updatesPath, `${version}.exe`));
233
+ } else {
234
+ Electron._logger.warn(`\uBE4C\uB4DC \uACB0\uACFC\uBB3C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${sourcePath}`);
235
+ }
236
+ }
237
+ //#endregion
238
+ }
239
+ export {
240
+ Electron
241
+ };
242
+ //# sourceMappingURL=electron.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/electron/electron.ts"],
4
+ "sourcesContent": ["import path from \"path\";\nimport os from \"os\";\nimport fs from \"fs\";\nimport module from \"module\";\nimport { fsExists, fsMkdir, fsCopy, fsReaddir, fsReadJson, fsWriteJson } from \"@simplysm/core-node\";\nimport { consola } from \"consola\";\nimport type { SdElectronConfig } from \"../sd-config.types\";\nimport { spawn } from \"../utils/spawn\";\n\n/**\n * package.json \uD0C0\uC785\n */\ninterface NpmConfig {\n name: string;\n version: string;\n description?: string;\n dependencies?: Record<string, string>;\n}\n\n/**\n * Electron \uD504\uB85C\uC81D\uD2B8 \uAD00\uB9AC \uD074\uB798\uC2A4\n *\n * - Electron \uD504\uB85C\uC81D\uD2B8 \uCD08\uAE30\uD654 (package.json \uC0DD\uC131, \uC758\uC874\uC131 \uC124\uCE58, native \uBAA8\uB4C8 \uC7AC\uBE4C\uB4DC)\n * - Windows \uC2E4\uD589 \uD30C\uC77C \uBE4C\uB4DC (electron-builder)\n * - \uAC1C\uBC1C \uBAA8\uB4DC \uC2E4\uD589 (Vite dev server URL \uB85C\uB4DC)\n */\nexport class Electron {\n private static readonly _logger = consola.withTag(\"sd:cli:electron\");\n\n private readonly _electronPath: string;\n private readonly _npmConfig: NpmConfig;\n\n private constructor(\n private readonly _pkgPath: string,\n private readonly _config: SdElectronConfig,\n npmConfig: NpmConfig,\n ) {\n this._npmConfig = npmConfig;\n this._electronPath = path.resolve(this._pkgPath, \".electron\");\n }\n\n /**\n * Electron \uC778\uC2A4\uD134\uC2A4 \uC0DD\uC131 (\uC124\uC815 \uAC80\uC99D \uD3EC\uD568)\n */\n static async create(pkgPath: string, config: SdElectronConfig): Promise<Electron> {\n Electron._validateConfig(config);\n\n const npmConfig = await fsReadJson<NpmConfig>(path.resolve(pkgPath, \"package.json\"));\n return new Electron(pkgPath, config, npmConfig);\n }\n\n /**\n * \uC124\uC815 \uAC80\uC99D\n */\n private static _validateConfig(config: SdElectronConfig): void {\n if (typeof config.appId !== \"string\" || config.appId.trim() === \"\") {\n throw new Error(\"electron.appId\uB294 \uD544\uC218\uC785\uB2C8\uB2E4.\");\n }\n }\n\n /**\n * \uBA85\uB839\uC5B4 \uC2E4\uD589 (\uB85C\uAE45 \uD3EC\uD568)\n */\n private async _exec(cmd: string, args: string[], cwd: string, env?: Record<string, string>): Promise<string> {\n Electron._logger.debug(`\uC2E4\uD589 \uBA85\uB839: ${cmd} ${args.join(\" \")}`);\n const result = await spawn(cmd, args, { cwd, env });\n Electron._logger.debug(`\uC2E4\uD589 \uACB0\uACFC: ${result}`);\n return result;\n }\n\n //#region Public Methods\n\n /**\n * Electron \uD504\uB85C\uC81D\uD2B8 \uCD08\uAE30\uD654\n *\n * 1. .electron/src/package.json \uC0DD\uC131\n * 2. npm install \uC2E4\uD589\n * 3. electron-rebuild \uC2E4\uD589 (native \uBAA8\uB4C8 \uC7AC\uBE4C\uB4DC)\n */\n async initialize(): Promise<void> {\n const srcPath = path.resolve(this._electronPath, \"src\");\n\n // 1. package.json \uC0DD\uC131\n await this._setupPackageJson(srcPath);\n\n // 2. npm install\n await this._exec(\"npm\", [\"install\"], srcPath);\n\n // 3. native \uBAA8\uB4C8 \uC7AC\uBE4C\uB4DC\n const reinstallDeps = this._config.reinstallDependencies ?? [];\n if (reinstallDeps.length > 0) {\n await this._exec(\"npx\", [\"electron-rebuild\"], srcPath);\n }\n }\n\n /**\n * \uD504\uB85C\uB355\uC158 \uBE4C\uB4DC\n *\n * 1. esbuild\uB85C electron-main.ts \uBC88\uB4E4\uB9C1\n * 2. \uC6F9 \uC5D0\uC14B \uBCF5\uC0AC\n * 3. electron-builder \uC124\uC815 \uC0DD\uC131\n * 4. electron-builder \uC2E4\uD589\n * 5. \uACB0\uACFC\uBB3C \uBCF5\uC0AC\n */\n async build(outPath: string): Promise<void> {\n const srcPath = path.resolve(this._electronPath, \"src\");\n\n // 1. electron-main.ts \uBC88\uB4E4\uB9C1\n await this._bundleMainProcess(srcPath);\n\n // 2. \uC6F9 \uC5D0\uC14B \uBCF5\uC0AC (outPath \u2192 .electron/src/)\n await this._copyWebAssets(outPath, srcPath);\n\n // 3. electron-builder \uC124\uC815 \uC0DD\uC131 + \uC2E4\uD589\n await this._runElectronBuilder(srcPath);\n\n // 4. \uACB0\uACFC\uBB3C \uBCF5\uC0AC\n await this._copyBuildOutput(outPath);\n }\n\n /**\n * \uAC1C\uBC1C \uBAA8\uB4DC \uC2E4\uD589\n *\n * 1. esbuild\uB85C electron-main.ts \uBC88\uB4E4\uB9C1\n * 2. dist/electron/package.json \uC0DD\uC131\n * 3. npx electron . \uC2E4\uD589\n */\n async run(url?: string): Promise<void> {\n const electronRunPath = path.resolve(this._pkgPath, \"dist/electron\");\n\n // 1. electron-main.ts \uBC88\uB4E4\uB9C1\n await this._bundleMainProcess(electronRunPath);\n\n // 2. package.json \uC0DD\uC131\n await fsMkdir(electronRunPath);\n await fsWriteJson(\n path.resolve(electronRunPath, \"package.json\"),\n { name: this._npmConfig.name, version: this._npmConfig.version, main: \"electron-main.js\" },\n { space: 2 },\n );\n\n // 3. Electron \uC2E4\uD589\n const runEnv: Record<string, string> = {\n NODE_ENV: \"development\",\n ...this._config.env,\n };\n\n if (url != null) {\n runEnv[\"ELECTRON_DEV_URL\"] = url;\n }\n\n await this._exec(\"npx\", [\"electron\", \".\"], electronRunPath, runEnv);\n }\n\n //#endregion\n\n //#region Private - \uCD08\uAE30\uD654\n\n /**\n * .electron/src/package.json \uC0DD\uC131\n */\n private async _setupPackageJson(srcPath: string): Promise<void> {\n await fsMkdir(srcPath);\n\n const reinstallDeps = this._config.reinstallDependencies ?? [];\n\n // \uBA54\uC778 package.json\uC5D0\uC11C reinstallDependencies\uC5D0 \uD574\uB2F9\uD558\uB294 \uBC84\uC804 \uCD94\uCD9C\n const dependencies: Record<string, string> = {};\n for (const dep of reinstallDeps) {\n const version = this._npmConfig.dependencies?.[dep];\n if (version != null) {\n dependencies[dep] = version;\n }\n }\n\n const packageJson: Record<string, unknown> = {\n name: this._npmConfig.name.replace(/^@/, \"\").replace(/\\//, \"-\"),\n version: this._npmConfig.version,\n description: this._npmConfig.description,\n main: \"electron-main.js\",\n dependencies,\n };\n\n if (this._config.postInstallScript != null) {\n packageJson[\"scripts\"] = { postinstall: this._config.postInstallScript };\n }\n\n await fsWriteJson(path.resolve(srcPath, \"package.json\"), packageJson, { space: 2 });\n }\n\n //#endregion\n\n //#region Private - \uBC88\uB4E4\uB9C1\n\n /**\n * esbuild\uB85C electron-main.ts \uBC88\uB4E4\uB9C1\n */\n private async _bundleMainProcess(outDir: string): Promise<void> {\n const esbuild = await import(\"esbuild\");\n const entryPoint = path.resolve(this._pkgPath, \"src/electron-main.ts\");\n\n if (!(await fsExists(entryPoint))) {\n throw new Error(`electron-main.ts \uD30C\uC77C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${entryPoint}`);\n }\n\n const builtinModules = module.builtinModules.flatMap((m) => [m, `node:${m}`]);\n const reinstallDeps = this._config.reinstallDependencies ?? [];\n\n await fsMkdir(outDir);\n\n await esbuild.build({\n entryPoints: [entryPoint],\n outfile: path.resolve(outDir, \"electron-main.js\"),\n platform: \"node\",\n target: \"node20\",\n format: \"cjs\",\n bundle: true,\n external: [\"electron\", ...builtinModules, ...reinstallDeps],\n });\n }\n\n //#endregion\n\n //#region Private - \uBE4C\uB4DC\n\n /**\n * \uC6F9 \uC5D0\uC14B \uBCF5\uC0AC (\uBE4C\uB4DC \uACB0\uACFC\uBB3C \u2192 .electron/src/)\n */\n private async _copyWebAssets(outPath: string, srcPath: string): Promise<void> {\n const items = await fsReaddir(outPath);\n for (const item of items) {\n // electron/ \uD558\uC704\uB294 \uC81C\uC678 (\uC790\uAE30 \uC790\uC2E0 \uBCF5\uC0AC \uBC29\uC9C0)\n if (item === \"electron\") continue;\n\n const source = path.resolve(outPath, item);\n const dest = path.resolve(srcPath, item);\n await fsCopy(source, dest);\n }\n }\n\n /**\n * Symlink \uC0DD\uC131 \uAC00\uB2A5 \uC5EC\uBD80 \uD655\uC778 (Windows \uBE4C\uB4DC \uC694\uAD6C\uC0AC\uD56D)\n */\n private static _canCreateSymlink(): boolean {\n const tmpDir = os.tmpdir();\n const testTarget = path.join(tmpDir, \"sd-electron-symlink-test-target.txt\");\n const testLink = path.join(tmpDir, \"sd-electron-symlink-test-link.txt\");\n\n try {\n fs.writeFileSync(testTarget, \"test\");\n fs.symlinkSync(testTarget, testLink, \"file\");\n const isSymlink = fs.lstatSync(testLink).isSymbolicLink();\n fs.unlinkSync(testLink);\n fs.unlinkSync(testTarget);\n return isSymlink;\n } catch {\n return false;\n }\n }\n\n /**\n * electron-builder \uC2E4\uD589\n */\n private async _runElectronBuilder(srcPath: string): Promise<void> {\n if (!Electron._canCreateSymlink()) {\n throw new Error(\"Electron \uBE4C\uB4DC\uB97C \uC704\uD574\uC11C\uB294 Symlink \uC0DD\uC131 \uAD8C\uD55C\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \uC708\uB3C4\uC6B0\uC758 \uAC1C\uBC1C\uC790\uBAA8\uB4DC\uB97C \uD65C\uC131\uD654\uD558\uC138\uC694.\");\n }\n\n const distPath = path.resolve(this._electronPath, \"dist\");\n\n const builderConfig: Record<string, unknown> = {\n appId: this._config.appId,\n productName: this._npmConfig.description,\n asar: false,\n win: {\n target: this._config.portable ? \"portable\" : \"nsis\",\n },\n nsis: this._config.nsisOptions ?? {},\n directories: {\n app: srcPath,\n output: distPath,\n },\n removePackageScripts: false,\n npmRebuild: false,\n forceCodeSigning: false,\n };\n\n if (this._config.installerIcon != null) {\n builderConfig[\"icon\"] = path.resolve(this._pkgPath, this._config.installerIcon);\n }\n\n const configFilePath = path.resolve(this._electronPath, \"builder-config.json\");\n await fsWriteJson(configFilePath, builderConfig, { space: 2 });\n\n await this._exec(\"npx\", [\"electron-builder\", \"--win\", \"--config\", configFilePath], this._pkgPath);\n }\n\n /**\n * \uBE4C\uB4DC \uACB0\uACFC\uBB3C \uBCF5\uC0AC (.electron/dist/ \u2192 dist/electron/)\n */\n private async _copyBuildOutput(outPath: string): Promise<void> {\n const distPath = path.resolve(this._electronPath, \"dist\");\n const electronOutPath = path.resolve(outPath, \"electron\");\n await fsMkdir(electronOutPath);\n\n const description = this._npmConfig.description ?? this._npmConfig.name;\n const version = this._npmConfig.version;\n const isPortable = this._config.portable === true;\n\n // electron-builder \uCD9C\uB825 \uD30C\uC77C\uBA85\n const builderFileName = `${description} ${isPortable ? \"\" : \"Setup \"}${version}.exe`;\n const sourcePath = path.resolve(distPath, builderFileName);\n\n if (await fsExists(sourcePath)) {\n // latest \uD30C\uC77C \uBCF5\uC0AC\n const latestFileName = `${description}${isPortable ? \"-portable\" : \"\"}-latest.exe`;\n await fsCopy(sourcePath, path.resolve(electronOutPath, latestFileName));\n\n // updates/ \uBC84\uC804\uBCC4 \uD30C\uC77C \uBCF5\uC0AC\n const updatesPath = path.resolve(electronOutPath, \"updates\");\n await fsMkdir(updatesPath);\n await fsCopy(sourcePath, path.resolve(updatesPath, `${version}.exe`));\n } else {\n Electron._logger.warn(`\uBE4C\uB4DC \uACB0\uACFC\uBB3C\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4: ${sourcePath}`);\n }\n }\n\n //#endregion\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./sd-config.types";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts"],
4
+ "sourcesContent": ["export * from \"./sd-config.types\";\n"],
5
+ "mappings": "AAAA,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,59 @@
1
+ class ResultCollector {
2
+ _results = /* @__PURE__ */ new Map();
3
+ /**
4
+ * 결과 추가
5
+ * @param result 빌드 결과
6
+ */
7
+ add(result) {
8
+ const key = `${result.name}:${result.type}`;
9
+ this._results.set(key, result);
10
+ }
11
+ /**
12
+ * 키로 결과 조회
13
+ * @param key 결과 키 (예: "core-common:build")
14
+ */
15
+ get(key) {
16
+ return this._results.get(key);
17
+ }
18
+ /**
19
+ * 모든 결과 조회
20
+ */
21
+ getAll() {
22
+ return [...this._results.values()];
23
+ }
24
+ /**
25
+ * 에러 상태인 결과만 조회
26
+ */
27
+ getErrors() {
28
+ return this.getAll().filter((r) => r.status === "error");
29
+ }
30
+ /**
31
+ * 서버 상태인 결과만 조회
32
+ */
33
+ getServers() {
34
+ return this.getAll().filter((r) => r.type === "server" && r.status === "server");
35
+ }
36
+ /**
37
+ * 특정 타입의 결과만 조회
38
+ * @param type 결과 타입
39
+ */
40
+ getByType(type) {
41
+ return this.getAll().filter((r) => r.type === type);
42
+ }
43
+ /**
44
+ * 결과 초기화
45
+ */
46
+ clear() {
47
+ this._results.clear();
48
+ }
49
+ /**
50
+ * 내부 Map 반환 (하위 호환성)
51
+ */
52
+ toMap() {
53
+ return this._results;
54
+ }
55
+ }
56
+ export {
57
+ ResultCollector
58
+ };
59
+ //# sourceMappingURL=ResultCollector.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/infra/ResultCollector.ts"],
4
+ "sourcesContent": ["/**\n * \uBE4C\uB4DC \uACB0\uACFC \uC0C1\uD0DC\n */\nexport interface BuildResult {\n name: string;\n target: string;\n type: \"build\" | \"dts\" | \"server\" | \"capacitor\";\n status: \"pending\" | \"building\" | \"success\" | \"error\" | \"server\";\n message?: string;\n port?: number;\n}\n\n/**\n * \uBE4C\uB4DC \uACB0\uACFC\uB97C \uC218\uC9D1\uD558\uACE0 \uAD00\uB9AC\uD558\uB294 \uD074\uB798\uC2A4\n *\n * \uC5EC\uB7EC Builder\uC5D0\uC11C \uBC1C\uC0DD\uD558\uB294 \uBE4C\uB4DC \uACB0\uACFC\uB97C \uC911\uC559\uC5D0\uC11C \uAD00\uB9AC\uD558\uACE0,\n * \uC0C1\uD0DC\uBCC4 \uD544\uD130\uB9C1 \uBC0F \uCD9C\uB825 \uAE30\uB2A5\uC744 \uC81C\uACF5\uD55C\uB2E4.\n */\nexport class ResultCollector {\n private readonly _results = new Map<string, BuildResult>();\n\n /**\n * \uACB0\uACFC \uCD94\uAC00\n * @param result \uBE4C\uB4DC \uACB0\uACFC\n */\n add(result: BuildResult): void {\n const key = `${result.name}:${result.type}`;\n this._results.set(key, result);\n }\n\n /**\n * \uD0A4\uB85C \uACB0\uACFC \uC870\uD68C\n * @param key \uACB0\uACFC \uD0A4 (\uC608: \"core-common:build\")\n */\n get(key: string): BuildResult | undefined {\n return this._results.get(key);\n }\n\n /**\n * \uBAA8\uB4E0 \uACB0\uACFC \uC870\uD68C\n */\n getAll(): BuildResult[] {\n return [...this._results.values()];\n }\n\n /**\n * \uC5D0\uB7EC \uC0C1\uD0DC\uC778 \uACB0\uACFC\uB9CC \uC870\uD68C\n */\n getErrors(): BuildResult[] {\n return this.getAll().filter((r) => r.status === \"error\");\n }\n\n /**\n * \uC11C\uBC84 \uC0C1\uD0DC\uC778 \uACB0\uACFC\uB9CC \uC870\uD68C\n */\n getServers(): BuildResult[] {\n return this.getAll().filter((r) => r.type === \"server\" && r.status === \"server\");\n }\n\n /**\n * \uD2B9\uC815 \uD0C0\uC785\uC758 \uACB0\uACFC\uB9CC \uC870\uD68C\n * @param type \uACB0\uACFC \uD0C0\uC785\n */\n getByType(type: BuildResult[\"type\"]): BuildResult[] {\n return this.getAll().filter((r) => r.type === type);\n }\n\n /**\n * \uACB0\uACFC \uCD08\uAE30\uD654\n */\n clear(): void {\n this._results.clear();\n }\n\n /**\n * \uB0B4\uBD80 Map \uBC18\uD658 (\uD558\uC704 \uD638\uD658\uC131)\n */\n toMap(): Map<string, BuildResult> {\n return this._results;\n }\n}\n"],
5
+ "mappings": "AAkBO,MAAM,gBAAgB;AAAA,EACV,WAAW,oBAAI,IAAyB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzD,IAAI,QAA2B;AAC7B,UAAM,MAAM,GAAG,OAAO,IAAI,IAAI,OAAO,IAAI;AACzC,SAAK,SAAS,IAAI,KAAK,MAAM;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,KAAsC;AACxC,WAAO,KAAK,SAAS,IAAI,GAAG;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,SAAwB;AACtB,WAAO,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,YAA2B;AACzB,WAAO,KAAK,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,OAAO;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,aAA4B;AAC1B,WAAO,KAAK,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,WAAW,QAAQ;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,MAA0C;AAClD,WAAO,KAAK,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAkC;AAChC,WAAO,KAAK;AAAA,EACd;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,44 @@
1
+ class SignalHandler {
2
+ _terminateResolver = null;
3
+ _terminatePromise;
4
+ _terminated = false;
5
+ constructor() {
6
+ this._terminatePromise = new Promise((resolve) => {
7
+ this._terminateResolver = resolve;
8
+ });
9
+ const handler = () => {
10
+ process.off("SIGINT", handler);
11
+ process.off("SIGTERM", handler);
12
+ this._terminated = true;
13
+ this._terminateResolver?.();
14
+ };
15
+ process.on("SIGINT", handler);
16
+ process.on("SIGTERM", handler);
17
+ }
18
+ /**
19
+ * 종료 시그널이 수신될 때까지 대기
20
+ */
21
+ waitForTermination() {
22
+ return this._terminatePromise;
23
+ }
24
+ /**
25
+ * 종료 여부 확인
26
+ */
27
+ isTerminated() {
28
+ return this._terminated;
29
+ }
30
+ /**
31
+ * 프로그래밍 방식으로 종료 요청
32
+ * (테스트 또는 외부에서 종료 트리거 시 사용)
33
+ */
34
+ requestTermination() {
35
+ if (!this._terminated) {
36
+ this._terminated = true;
37
+ this._terminateResolver?.();
38
+ }
39
+ }
40
+ }
41
+ export {
42
+ SignalHandler
43
+ };
44
+ //# sourceMappingURL=SignalHandler.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/infra/SignalHandler.ts"],
4
+ "sourcesContent": ["/**\n * \uD504\uB85C\uC138\uC2A4 \uC885\uB8CC \uC2DC\uADF8\uB110\uC744 \uCC98\uB9AC\uD558\uB294 \uD074\uB798\uC2A4\n *\n * SIGINT (Ctrl+C) \uBC0F SIGTERM \uC2DC\uADF8\uB110\uC744 \uAC10\uC9C0\uD558\uACE0,\n * \uC885\uB8CC \uC2DC\uC810\uAE4C\uC9C0 \uB300\uAE30\uD558\uB294 Promise\uB97C \uC81C\uACF5\uD55C\uB2E4.\n */\nexport class SignalHandler {\n private _terminateResolver: (() => void) | null = null;\n private readonly _terminatePromise: Promise<void>;\n private _terminated = false;\n\n constructor() {\n this._terminatePromise = new Promise((resolve) => {\n this._terminateResolver = resolve;\n });\n\n const handler = () => {\n process.off(\"SIGINT\", handler);\n process.off(\"SIGTERM\", handler);\n this._terminated = true;\n this._terminateResolver?.();\n };\n\n process.on(\"SIGINT\", handler);\n process.on(\"SIGTERM\", handler);\n }\n\n /**\n * \uC885\uB8CC \uC2DC\uADF8\uB110\uC774 \uC218\uC2E0\uB420 \uB54C\uAE4C\uC9C0 \uB300\uAE30\n */\n waitForTermination(): Promise<void> {\n return this._terminatePromise;\n }\n\n /**\n * \uC885\uB8CC \uC5EC\uBD80 \uD655\uC778\n */\n isTerminated(): boolean {\n return this._terminated;\n }\n\n /**\n * \uD504\uB85C\uADF8\uB798\uBC0D \uBC29\uC2DD\uC73C\uB85C \uC885\uB8CC \uC694\uCCAD\n * (\uD14C\uC2A4\uD2B8 \uB610\uB294 \uC678\uBD80\uC5D0\uC11C \uC885\uB8CC \uD2B8\uB9AC\uAC70 \uC2DC \uC0AC\uC6A9)\n */\n requestTermination(): void {\n if (!this._terminated) {\n this._terminated = true;\n this._terminateResolver?.();\n }\n }\n}\n"],
5
+ "mappings": "AAMO,MAAM,cAAc;AAAA,EACjB,qBAA0C;AAAA,EACjC;AAAA,EACT,cAAc;AAAA,EAEtB,cAAc;AACZ,SAAK,oBAAoB,IAAI,QAAQ,CAAC,YAAY;AAChD,WAAK,qBAAqB;AAAA,IAC5B,CAAC;AAED,UAAM,UAAU,MAAM;AACpB,cAAQ,IAAI,UAAU,OAAO;AAC7B,cAAQ,IAAI,WAAW,OAAO;AAC9B,WAAK,cAAc;AACnB,WAAK,qBAAqB;AAAA,IAC5B;AAEA,YAAQ,GAAG,UAAU,OAAO;AAC5B,YAAQ,GAAG,WAAW,OAAO;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,qBAAoC;AAClC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,eAAwB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,qBAA2B;AACzB,QAAI,CAAC,KAAK,aAAa;AACrB,WAAK,cAAc;AACnB,WAAK,qBAAqB;AAAA,IAC5B;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,56 @@
1
+ import { Worker } from "@simplysm/core-node";
2
+ class WorkerManager {
3
+ _workers = /* @__PURE__ */ new Map();
4
+ /**
5
+ * 새 Worker 생성
6
+ * @param id Worker 식별자 (예: "core-common:build")
7
+ * @param workerPath Worker 파일 경로
8
+ * @returns 생성된 WorkerProxy
9
+ */
10
+ create(id, workerPath) {
11
+ const worker = Worker.create(workerPath);
12
+ this._workers.set(id, worker);
13
+ return worker;
14
+ }
15
+ /**
16
+ * ID로 Worker 조회
17
+ * @param id Worker 식별자
18
+ */
19
+ get(id) {
20
+ return this._workers.get(id);
21
+ }
22
+ /**
23
+ * 특정 Worker 종료 및 제거
24
+ * @param id Worker 식별자
25
+ */
26
+ async terminate(id) {
27
+ const worker = this._workers.get(id);
28
+ if (worker != null) {
29
+ await worker.terminate();
30
+ this._workers.delete(id);
31
+ }
32
+ }
33
+ /**
34
+ * 모든 Worker 종료
35
+ */
36
+ async terminateAll() {
37
+ await Promise.all([...this._workers.values()].map((w) => w.terminate()));
38
+ this._workers.clear();
39
+ }
40
+ /**
41
+ * 관리 중인 Worker 수
42
+ */
43
+ get size() {
44
+ return this._workers.size;
45
+ }
46
+ /**
47
+ * 모든 Worker ID 목록
48
+ */
49
+ get ids() {
50
+ return [...this._workers.keys()];
51
+ }
52
+ }
53
+ export {
54
+ WorkerManager
55
+ };
56
+ //# sourceMappingURL=WorkerManager.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/infra/WorkerManager.ts"],
4
+ "sourcesContent": ["import { Worker, type WorkerProxy, type WorkerModule } from \"@simplysm/core-node\";\n\n/**\n * Worker \uC0DD\uBA85\uC8FC\uAE30\uB97C \uAD00\uB9AC\uD558\uB294 \uD074\uB798\uC2A4\n *\n * Worker \uC0DD\uC131, \uC870\uD68C, \uC885\uB8CC\uB97C \uC911\uC559\uC5D0\uC11C \uAD00\uB9AC\uD558\uC5EC\n * \uB9AC\uC18C\uC2A4 \uB204\uC218\uB97C \uBC29\uC9C0\uD558\uACE0 \uC77C\uAD00\uB41C Worker \uAD00\uB9AC\uB97C \uC81C\uACF5\uD55C\uB2E4.\n */\nexport class WorkerManager {\n private readonly _workers = new Map<string, WorkerProxy<WorkerModule>>();\n\n /**\n * \uC0C8 Worker \uC0DD\uC131\n * @param id Worker \uC2DD\uBCC4\uC790 (\uC608: \"core-common:build\")\n * @param workerPath Worker \uD30C\uC77C \uACBD\uB85C\n * @returns \uC0DD\uC131\uB41C WorkerProxy\n */\n create<TModule extends WorkerModule>(id: string, workerPath: string): WorkerProxy<TModule> {\n const worker = Worker.create<TModule>(workerPath);\n this._workers.set(id, worker as WorkerProxy<WorkerModule>);\n return worker;\n }\n\n /**\n * ID\uB85C Worker \uC870\uD68C\n * @param id Worker \uC2DD\uBCC4\uC790\n */\n get<TModule extends WorkerModule>(id: string): WorkerProxy<TModule> | undefined {\n return this._workers.get(id) as WorkerProxy<TModule> | undefined;\n }\n\n /**\n * \uD2B9\uC815 Worker \uC885\uB8CC \uBC0F \uC81C\uAC70\n * @param id Worker \uC2DD\uBCC4\uC790\n */\n async terminate(id: string): Promise<void> {\n const worker = this._workers.get(id);\n if (worker != null) {\n await worker.terminate();\n this._workers.delete(id);\n }\n }\n\n /**\n * \uBAA8\uB4E0 Worker \uC885\uB8CC\n */\n async terminateAll(): Promise<void> {\n await Promise.all([...this._workers.values()].map((w) => w.terminate()));\n this._workers.clear();\n }\n\n /**\n * \uAD00\uB9AC \uC911\uC778 Worker \uC218\n */\n get size(): number {\n return this._workers.size;\n }\n\n /**\n * \uBAA8\uB4E0 Worker ID \uBAA9\uB85D\n */\n get ids(): string[] {\n return [...this._workers.keys()];\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,cAAmD;AAQrD,MAAM,cAAc;AAAA,EACR,WAAW,oBAAI,IAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQvE,OAAqC,IAAY,YAA0C;AACzF,UAAM,SAAS,OAAO,OAAgB,UAAU;AAChD,SAAK,SAAS,IAAI,IAAI,MAAmC;AACzD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAkC,IAA8C;AAC9E,WAAO,KAAK,SAAS,IAAI,EAAE;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,UAAU,IAA2B;AACzC,UAAM,SAAS,KAAK,SAAS,IAAI,EAAE;AACnC,QAAI,UAAU,MAAM;AAClB,YAAM,OAAO,UAAU;AACvB,WAAK,SAAS,OAAO,EAAE;AAAA,IACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAA8B;AAClC,UAAM,QAAQ,IAAI,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACvE,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAe;AACjB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAgB;AAClB,WAAO,CAAC,GAAG,KAAK,SAAS,KAAK,CAAC;AAAA,EACjC;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,9 @@
1
+ import { ResultCollector } from "./ResultCollector";
2
+ import { SignalHandler } from "./SignalHandler";
3
+ import { WorkerManager } from "./WorkerManager";
4
+ export {
5
+ ResultCollector,
6
+ SignalHandler,
7
+ WorkerManager
8
+ };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/infra/index.ts"],
4
+ "sourcesContent": ["export { ResultCollector, type BuildResult } from \"./ResultCollector\";\nexport { SignalHandler } from \"./SignalHandler\";\nexport { WorkerManager } from \"./WorkerManager\";\n"],
5
+ "mappings": "AAAA,SAAS,uBAAyC;AAClD,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;",
6
+ "names": []
7
+ }
@@ -0,0 +1,135 @@
1
+ import path from "path";
2
+ import { Listr } from "listr2";
3
+ import { consola } from "consola";
4
+ import { loadSdConfig } from "../utils/sd-config";
5
+ import { filterPackagesByTargets } from "../utils/package-utils";
6
+ import { printErrors } from "../utils/output-utils";
7
+ import { RebuildListrManager } from "../utils/listr-manager";
8
+ import { ResultCollector } from "../infra/ResultCollector";
9
+ import { SignalHandler } from "../infra/SignalHandler";
10
+ import { LibraryBuilder } from "../builders/LibraryBuilder";
11
+ import { DtsBuilder } from "../builders/DtsBuilder";
12
+ class WatchOrchestrator {
13
+ _cwd;
14
+ _options;
15
+ _logger = consola.withTag("sd:cli:watch");
16
+ _resultCollector;
17
+ _signalHandler;
18
+ _rebuildManager;
19
+ _libraryBuilder;
20
+ _dtsBuilder;
21
+ _packages = [];
22
+ constructor(options) {
23
+ this._cwd = process.cwd();
24
+ this._options = options;
25
+ }
26
+ /**
27
+ * Orchestrator 초기화
28
+ * - sd.config.ts 로드
29
+ * - 패키지 분류
30
+ * - Builder 생성 및 초기화
31
+ */
32
+ async initialize() {
33
+ this._logger.debug("watch \uC2DC\uC791", { targets: this._options.targets });
34
+ let sdConfig;
35
+ try {
36
+ sdConfig = await loadSdConfig({
37
+ cwd: this._cwd,
38
+ dev: true,
39
+ opt: this._options.options
40
+ });
41
+ this._logger.debug("sd.config.ts \uB85C\uB4DC \uC644\uB8CC");
42
+ } catch (err) {
43
+ consola.error(`sd.config.ts \uB85C\uB4DC \uC2E4\uD328: ${err instanceof Error ? err.message : err}`);
44
+ process.exitCode = 1;
45
+ throw err;
46
+ }
47
+ const allPackages = filterPackagesByTargets(sdConfig.packages, this._options.targets);
48
+ const isLibraryTarget = (target) => target === "node" || target === "browser" || target === "neutral";
49
+ const libraryConfigs = {};
50
+ for (const [name, config] of Object.entries(allPackages)) {
51
+ if (isLibraryTarget(config.target)) {
52
+ libraryConfigs[name] = config;
53
+ }
54
+ }
55
+ if (Object.keys(libraryConfigs).length === 0) {
56
+ process.stdout.write("\u26A0 watch\uD560 library \uD328\uD0A4\uC9C0\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.\n");
57
+ return;
58
+ }
59
+ this._packages = Object.entries(libraryConfigs).map(([name, config]) => ({
60
+ name,
61
+ dir: path.join(this._cwd, "packages", name),
62
+ config
63
+ }));
64
+ this._resultCollector = new ResultCollector();
65
+ this._signalHandler = new SignalHandler();
66
+ this._rebuildManager = new RebuildListrManager(this._logger);
67
+ this._rebuildManager.on("batchComplete", () => {
68
+ printErrors(this._resultCollector.toMap());
69
+ });
70
+ const builderOptions = {
71
+ cwd: this._cwd,
72
+ packages: this._packages,
73
+ resultCollector: this._resultCollector,
74
+ rebuildManager: this._rebuildManager
75
+ };
76
+ this._libraryBuilder = new LibraryBuilder(builderOptions);
77
+ this._dtsBuilder = new DtsBuilder(builderOptions);
78
+ await Promise.all([this._libraryBuilder.initialize(), this._dtsBuilder.initialize()]);
79
+ }
80
+ /**
81
+ * Watch 모드 시작
82
+ * - 초기 빌드 Listr 실행
83
+ * - 결과 출력
84
+ */
85
+ async start() {
86
+ if (this._packages.length === 0) {
87
+ return;
88
+ }
89
+ const buildPromises = this._libraryBuilder.getInitialBuildPromises();
90
+ const dtsPromises = this._dtsBuilder.getInitialBuildPromises();
91
+ const initialListr = new Listr(
92
+ [
93
+ // Library 빌드 태스크
94
+ ...this._packages.map((pkg) => ({
95
+ title: `${pkg.name} (${pkg.config.target})`,
96
+ task: () => buildPromises.get(`${pkg.name}:build`) ?? Promise.resolve()
97
+ })),
98
+ // DTS 태스크
99
+ ...this._packages.map((pkg) => ({
100
+ title: `${pkg.name} (dts)`,
101
+ task: () => dtsPromises.get(`${pkg.name}:dts`) ?? Promise.resolve()
102
+ }))
103
+ ],
104
+ { concurrent: true }
105
+ );
106
+ void this._libraryBuilder.startWatch();
107
+ void this._dtsBuilder.startWatch();
108
+ await initialListr.run();
109
+ printErrors(this._resultCollector.toMap());
110
+ }
111
+ /**
112
+ * 종료 시그널 대기
113
+ */
114
+ async awaitTermination() {
115
+ if (this._packages.length === 0) {
116
+ return;
117
+ }
118
+ await this._signalHandler.waitForTermination();
119
+ }
120
+ /**
121
+ * Orchestrator 종료
122
+ */
123
+ async shutdown() {
124
+ if (this._packages.length === 0) {
125
+ return;
126
+ }
127
+ process.stdout.write("\u23F3 \uC885\uB8CC \uC911...\n");
128
+ await Promise.all([this._libraryBuilder.shutdown(), this._dtsBuilder.shutdown()]);
129
+ process.stdout.write("\u2714 \uC644\uB8CC\n");
130
+ }
131
+ }
132
+ export {
133
+ WatchOrchestrator
134
+ };
135
+ //# sourceMappingURL=WatchOrchestrator.js.map