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

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