@simplysm/sd-cli 12.16.27 → 13.0.0-beta.12

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