@simplysm/sd-cli 13.0.100 → 14.0.1

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 (409) hide show
  1. package/dist/commands/build.js +29 -19
  2. package/dist/commands/build.js.map +1 -6
  3. package/dist/commands/check.d.ts +1 -0
  4. package/dist/commands/check.d.ts.map +1 -1
  5. package/dist/commands/check.js +130 -115
  6. package/dist/commands/check.js.map +1 -6
  7. package/dist/commands/dev.d.ts +6 -7
  8. package/dist/commands/dev.d.ts.map +1 -1
  9. package/dist/commands/dev.js +24 -14
  10. package/dist/commands/dev.js.map +1 -6
  11. package/dist/commands/lint.d.ts +1 -1
  12. package/dist/commands/lint.js +158 -116
  13. package/dist/commands/lint.js.map +1 -6
  14. package/dist/commands/publish.d.ts.map +1 -1
  15. package/dist/commands/publish.js +637 -510
  16. package/dist/commands/publish.js.map +1 -6
  17. package/dist/commands/replace-deps.js +12 -12
  18. package/dist/commands/replace-deps.js.map +1 -6
  19. package/dist/commands/typecheck.d.ts +5 -30
  20. package/dist/commands/typecheck.d.ts.map +1 -1
  21. package/dist/commands/typecheck.js +144 -207
  22. package/dist/commands/typecheck.js.map +1 -6
  23. package/dist/commands/watch.d.ts +6 -4
  24. package/dist/commands/watch.d.ts.map +1 -1
  25. package/dist/commands/watch.js +25 -16
  26. package/dist/commands/watch.js.map +1 -6
  27. package/dist/engines/NgtscEngine.d.ts +47 -0
  28. package/dist/engines/NgtscEngine.d.ts.map +1 -0
  29. package/dist/engines/NgtscEngine.js +151 -0
  30. package/dist/engines/NgtscEngine.js.map +1 -0
  31. package/dist/engines/ServerEsbuildEngine.d.ts +47 -0
  32. package/dist/engines/ServerEsbuildEngine.d.ts.map +1 -0
  33. package/dist/engines/ServerEsbuildEngine.js +159 -0
  34. package/dist/engines/ServerEsbuildEngine.js.map +1 -0
  35. package/dist/engines/TscEngine.d.ts +47 -0
  36. package/dist/engines/TscEngine.d.ts.map +1 -0
  37. package/dist/engines/TscEngine.js +153 -0
  38. package/dist/engines/TscEngine.js.map +1 -0
  39. package/dist/engines/ViteEngine.d.ts +49 -0
  40. package/dist/engines/ViteEngine.d.ts.map +1 -0
  41. package/dist/engines/ViteEngine.js +161 -0
  42. package/dist/engines/ViteEngine.js.map +1 -0
  43. package/dist/engines/index.d.ts +26 -0
  44. package/dist/engines/index.d.ts.map +1 -0
  45. package/dist/engines/index.js +30 -0
  46. package/dist/engines/index.js.map +1 -0
  47. package/dist/engines/types.d.ts +77 -0
  48. package/dist/engines/types.d.ts.map +1 -0
  49. package/dist/engines/types.js +2 -0
  50. package/dist/engines/types.js.map +1 -0
  51. package/dist/index.d.ts +0 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +2 -2
  54. package/dist/index.js.map +1 -6
  55. package/dist/infra/ResultCollector.d.ts +1 -1
  56. package/dist/infra/ResultCollector.d.ts.map +1 -1
  57. package/dist/infra/ResultCollector.js +30 -27
  58. package/dist/infra/ResultCollector.js.map +1 -6
  59. package/dist/infra/SignalHandler.js +45 -42
  60. package/dist/infra/SignalHandler.js.map +1 -6
  61. package/dist/infra/WorkerManager.js +56 -53
  62. package/dist/infra/WorkerManager.js.map +1 -6
  63. package/dist/orchestrators/BuildOrchestrator.d.ts +33 -1
  64. package/dist/orchestrators/BuildOrchestrator.d.ts.map +1 -1
  65. package/dist/orchestrators/BuildOrchestrator.js +314 -309
  66. package/dist/orchestrators/BuildOrchestrator.js.map +1 -6
  67. package/dist/orchestrators/DevWatchOrchestrator.d.ts +60 -0
  68. package/dist/orchestrators/DevWatchOrchestrator.d.ts.map +1 -0
  69. package/dist/orchestrators/DevWatchOrchestrator.js +465 -0
  70. package/dist/orchestrators/DevWatchOrchestrator.js.map +1 -0
  71. package/dist/sd-cli-entry.d.ts.map +1 -1
  72. package/dist/sd-cli-entry.js +190 -266
  73. package/dist/sd-cli-entry.js.map +1 -6
  74. package/dist/sd-cli.js +77 -49
  75. package/dist/sd-cli.js.map +1 -6
  76. package/dist/sd-config.types.d.ts +2 -0
  77. package/dist/sd-config.types.d.ts.map +1 -1
  78. package/dist/sd-config.types.js +2 -1
  79. package/dist/sd-config.types.js.map +1 -6
  80. package/dist/utils/angular-build.d.ts +77 -0
  81. package/dist/utils/angular-build.d.ts.map +1 -0
  82. package/dist/utils/angular-build.js +84 -0
  83. package/dist/utils/angular-build.js.map +1 -0
  84. package/dist/utils/build-env.js +9 -9
  85. package/dist/utils/build-env.js.map +1 -6
  86. package/dist/utils/concurrency.d.ts +15 -0
  87. package/dist/utils/concurrency.d.ts.map +1 -0
  88. package/dist/utils/concurrency.js +38 -0
  89. package/dist/utils/concurrency.js.map +1 -0
  90. package/dist/utils/copy-public.js +104 -87
  91. package/dist/utils/copy-public.js.map +1 -6
  92. package/dist/utils/copy-src.js +49 -35
  93. package/dist/utils/copy-src.js.map +1 -6
  94. package/dist/utils/esbuild-config.d.ts +0 -29
  95. package/dist/utils/esbuild-config.d.ts.map +1 -1
  96. package/dist/utils/esbuild-config.js +151 -218
  97. package/dist/utils/esbuild-config.js.map +1 -6
  98. package/dist/utils/ngtsc-build-core.d.ts +49 -0
  99. package/dist/utils/ngtsc-build-core.d.ts.map +1 -0
  100. package/dist/utils/ngtsc-build-core.js +250 -0
  101. package/dist/utils/ngtsc-build-core.js.map +1 -0
  102. package/dist/utils/output-path-rewriter.d.ts +23 -0
  103. package/dist/utils/output-path-rewriter.d.ts.map +1 -0
  104. package/dist/utils/output-path-rewriter.js +74 -0
  105. package/dist/utils/output-path-rewriter.js.map +1 -0
  106. package/dist/utils/output-utils.js +55 -40
  107. package/dist/utils/output-utils.js.map +1 -6
  108. package/dist/utils/package-utils.d.ts +8 -0
  109. package/dist/utils/package-utils.d.ts.map +1 -1
  110. package/dist/utils/package-utils.js +103 -73
  111. package/dist/utils/package-utils.js.map +1 -6
  112. package/dist/utils/rebuild-manager.js +41 -44
  113. package/dist/utils/rebuild-manager.js.map +1 -6
  114. package/dist/utils/replace-deps.js +283 -184
  115. package/dist/utils/replace-deps.js.map +1 -6
  116. package/dist/utils/scss-compiler.d.ts +10 -0
  117. package/dist/utils/scss-compiler.d.ts.map +1 -0
  118. package/dist/utils/scss-compiler.js +36 -0
  119. package/dist/utils/scss-compiler.js.map +1 -0
  120. package/dist/utils/sd-config.js +29 -19
  121. package/dist/utils/sd-config.js.map +1 -6
  122. package/dist/utils/tsc-build.d.ts +36 -0
  123. package/dist/utils/tsc-build.d.ts.map +1 -0
  124. package/dist/utils/tsc-build.js +130 -0
  125. package/dist/utils/tsc-build.js.map +1 -0
  126. package/dist/utils/tsconfig.d.ts +7 -26
  127. package/dist/utils/tsconfig.d.ts.map +1 -1
  128. package/dist/utils/tsconfig.js +39 -64
  129. package/dist/utils/tsconfig.js.map +1 -6
  130. package/dist/utils/typecheck-non-package.d.ts +18 -0
  131. package/dist/utils/typecheck-non-package.d.ts.map +1 -0
  132. package/dist/utils/typecheck-non-package.js +64 -0
  133. package/dist/utils/typecheck-non-package.js.map +1 -0
  134. package/dist/utils/typecheck-serialization.js +58 -40
  135. package/dist/utils/typecheck-serialization.js.map +1 -6
  136. package/dist/utils/worker-events.js +48 -40
  137. package/dist/utils/worker-events.js.map +1 -6
  138. package/dist/utils/worker-utils.js +48 -28
  139. package/dist/utils/worker-utils.js.map +1 -6
  140. package/dist/vitest-plugin.d.ts +9 -0
  141. package/dist/vitest-plugin.d.ts.map +1 -0
  142. package/dist/vitest-plugin.js +85 -0
  143. package/dist/vitest-plugin.js.map +1 -0
  144. package/dist/workers/library-build.worker.d.ts +54 -0
  145. package/dist/workers/library-build.worker.d.ts.map +1 -0
  146. package/dist/workers/library-build.worker.js +97 -0
  147. package/dist/workers/library-build.worker.js.map +1 -0
  148. package/dist/workers/lint.worker.js +9 -6
  149. package/dist/workers/lint.worker.js.map +1 -6
  150. package/dist/workers/ngtsc-build.worker.d.ts +23 -0
  151. package/dist/workers/ngtsc-build.worker.d.ts.map +1 -0
  152. package/dist/workers/ngtsc-build.worker.js +98 -0
  153. package/dist/workers/ngtsc-build.worker.js.map +1 -0
  154. package/dist/workers/{server.worker.d.ts → server-build.worker.d.ts} +39 -29
  155. package/dist/workers/server-build.worker.d.ts.map +1 -0
  156. package/dist/workers/server-build.worker.js +399 -0
  157. package/dist/workers/server-build.worker.js.map +1 -0
  158. package/dist/workers/server-runtime.worker.d.ts +3 -2
  159. package/dist/workers/server-runtime.worker.d.ts.map +1 -1
  160. package/dist/workers/server-runtime.worker.js +100 -95
  161. package/dist/workers/server-runtime.worker.js.map +1 -6
  162. package/dist/workers/vite-build.worker.d.ts +56 -0
  163. package/dist/workers/vite-build.worker.d.ts.map +1 -0
  164. package/dist/workers/vite-build.worker.js +167 -0
  165. package/dist/workers/vite-build.worker.js.map +1 -0
  166. package/package.json +10 -16
  167. package/src/commands/check.ts +21 -3
  168. package/src/commands/dev.ts +10 -8
  169. package/src/commands/lint.ts +1 -1
  170. package/src/commands/publish.ts +4 -0
  171. package/src/commands/typecheck.ts +89 -256
  172. package/src/commands/watch.ts +9 -8
  173. package/src/engines/NgtscEngine.ts +190 -0
  174. package/src/engines/ServerEsbuildEngine.ts +195 -0
  175. package/src/engines/TscEngine.ts +189 -0
  176. package/src/engines/ViteEngine.ts +203 -0
  177. package/src/engines/index.ts +49 -0
  178. package/src/engines/types.ts +79 -0
  179. package/src/index.ts +0 -3
  180. package/src/infra/ResultCollector.ts +1 -1
  181. package/src/orchestrators/BuildOrchestrator.ts +87 -157
  182. package/src/orchestrators/DevWatchOrchestrator.ts +573 -0
  183. package/src/sd-cli-entry.ts +13 -116
  184. package/src/sd-config.types.ts +2 -0
  185. package/src/utils/angular-build.ts +157 -0
  186. package/src/utils/concurrency.ts +43 -0
  187. package/src/utils/esbuild-config.ts +1 -122
  188. package/src/utils/ngtsc-build-core.ts +379 -0
  189. package/src/utils/output-path-rewriter.ts +82 -0
  190. package/src/utils/package-utils.ts +20 -0
  191. package/src/utils/scss-compiler.ts +58 -0
  192. package/src/utils/tsc-build.ts +175 -0
  193. package/src/utils/tsconfig.ts +27 -95
  194. package/src/utils/typecheck-non-package.ts +87 -0
  195. package/src/vitest-plugin.ts +118 -0
  196. package/src/workers/library-build.worker.ts +153 -0
  197. package/src/workers/ngtsc-build.worker.ts +146 -0
  198. package/src/workers/server-build.worker.ts +565 -0
  199. package/src/workers/server-runtime.worker.ts +17 -26
  200. package/src/workers/vite-build.worker.ts +252 -0
  201. package/tests/commands/check.spec.ts +276 -0
  202. package/tests/commands/dev.spec.ts +53 -0
  203. package/tests/commands/lint.spec.ts +243 -0
  204. package/tests/commands/publish.spec.ts +1159 -0
  205. package/tests/commands/typecheck.spec.ts +294 -0
  206. package/tests/commands/watch.spec.ts +53 -0
  207. package/tests/engines/engine-selection.spec.ts +247 -0
  208. package/tests/engines/ngtsc-engine.spec.ts +274 -0
  209. package/tests/engines/server-esbuild-engine.spec.ts +256 -0
  210. package/tests/engines/tsc-engine.spec.ts +213 -0
  211. package/tests/engines/vite-engine.spec.ts +358 -0
  212. package/tests/infra/result-collector.spec.ts +46 -0
  213. package/tests/infra/signal-handler.spec.ts +32 -0
  214. package/tests/infra/worker-manager.spec.ts +63 -0
  215. package/tests/orchestrators/build-orchestrator.spec.ts +772 -0
  216. package/tests/orchestrators/dev-watch-orchestrator.spec.ts +1173 -0
  217. package/tests/sd-cli-entry.spec.ts +49 -0
  218. package/tests/utils/angular-build.spec.ts +251 -0
  219. package/tests/utils/build-env.spec.ts +33 -0
  220. package/tests/utils/concurrency.spec.ts +65 -0
  221. package/tests/utils/copy-src.spec.ts +144 -0
  222. package/tests/utils/esbuild-config.spec.ts +186 -0
  223. package/tests/utils/external-modules.spec.ts +161 -0
  224. package/tests/utils/ngtsc-scss-refactor.spec.ts +66 -0
  225. package/tests/utils/output-path-rewriter.spec.ts +165 -0
  226. package/tests/utils/output-utils.spec.ts +104 -0
  227. package/tests/utils/package-utils.spec.ts +52 -0
  228. package/tests/utils/rebuild-manager.spec.ts +30 -27
  229. package/tests/utils/replace-deps.spec.ts +69 -0
  230. package/tests/utils/scss-compiler.spec.ts +131 -0
  231. package/tests/utils/sd-config.spec.ts +77 -0
  232. package/tests/utils/tsc-build.spec.ts +358 -0
  233. package/tests/utils/tsconfig-angular.spec.ts +71 -0
  234. package/tests/utils/typecheck-non-package.spec.ts +120 -0
  235. package/tests/utils/worker-events.spec.ts +155 -0
  236. package/tests/utils/worker-utils.spec.ts +43 -0
  237. package/tests/vitest-plugin-cwd.spec.ts +68 -0
  238. package/tests/vitest-plugin.spec.ts +103 -0
  239. package/tests/workers/library-build-worker.spec.ts +258 -0
  240. package/tests/workers/ngtsc-build-worker.spec.ts +187 -0
  241. package/tests/workers/server-build-worker.spec.ts +566 -0
  242. package/tests/workers/server-runtime-worker.spec.ts +251 -0
  243. package/README.md +0 -295
  244. package/dist/builders/BaseBuilder.d.ts +0 -88
  245. package/dist/builders/BaseBuilder.d.ts.map +0 -1
  246. package/dist/builders/BaseBuilder.js +0 -142
  247. package/dist/builders/BaseBuilder.js.map +0 -6
  248. package/dist/builders/DtsBuilder.d.ts +0 -22
  249. package/dist/builders/DtsBuilder.d.ts.map +0 -1
  250. package/dist/builders/DtsBuilder.js +0 -72
  251. package/dist/builders/DtsBuilder.js.map +0 -6
  252. package/dist/builders/LibraryBuilder.d.ts +0 -22
  253. package/dist/builders/LibraryBuilder.d.ts.map +0 -1
  254. package/dist/builders/LibraryBuilder.js +0 -85
  255. package/dist/builders/LibraryBuilder.js.map +0 -6
  256. package/dist/builders/types.d.ts +0 -55
  257. package/dist/builders/types.d.ts.map +0 -1
  258. package/dist/builders/types.js +0 -1
  259. package/dist/builders/types.js.map +0 -6
  260. package/dist/capacitor/capacitor.d.ts +0 -151
  261. package/dist/capacitor/capacitor.d.ts.map +0 -1
  262. package/dist/capacitor/capacitor.js +0 -694
  263. package/dist/capacitor/capacitor.js.map +0 -6
  264. package/dist/commands/device.d.ts +0 -22
  265. package/dist/commands/device.d.ts.map +0 -1
  266. package/dist/commands/device.js +0 -98
  267. package/dist/commands/device.js.map +0 -6
  268. package/dist/commands/init.d.ts +0 -14
  269. package/dist/commands/init.d.ts.map +0 -1
  270. package/dist/commands/init.js +0 -72
  271. package/dist/commands/init.js.map +0 -6
  272. package/dist/electron/electron.d.ts +0 -84
  273. package/dist/electron/electron.d.ts.map +0 -1
  274. package/dist/electron/electron.js +0 -263
  275. package/dist/electron/electron.js.map +0 -6
  276. package/dist/orchestrators/DevOrchestrator.d.ts +0 -83
  277. package/dist/orchestrators/DevOrchestrator.d.ts.map +0 -1
  278. package/dist/orchestrators/DevOrchestrator.js +0 -540
  279. package/dist/orchestrators/DevOrchestrator.js.map +0 -6
  280. package/dist/orchestrators/WatchOrchestrator.d.ts +0 -57
  281. package/dist/orchestrators/WatchOrchestrator.d.ts.map +0 -1
  282. package/dist/orchestrators/WatchOrchestrator.js +0 -199
  283. package/dist/orchestrators/WatchOrchestrator.js.map +0 -6
  284. package/dist/utils/tailwind-config-deps.d.ts +0 -8
  285. package/dist/utils/tailwind-config-deps.d.ts.map +0 -1
  286. package/dist/utils/tailwind-config-deps.js +0 -82
  287. package/dist/utils/tailwind-config-deps.js.map +0 -6
  288. package/dist/utils/template.d.ts +0 -14
  289. package/dist/utils/template.d.ts.map +0 -1
  290. package/dist/utils/template.js +0 -33
  291. package/dist/utils/template.js.map +0 -6
  292. package/dist/utils/vite-config.d.ts +0 -35
  293. package/dist/utils/vite-config.d.ts.map +0 -1
  294. package/dist/utils/vite-config.js +0 -259
  295. package/dist/utils/vite-config.js.map +0 -6
  296. package/dist/workers/client.worker.d.ts +0 -83
  297. package/dist/workers/client.worker.d.ts.map +0 -1
  298. package/dist/workers/client.worker.js +0 -111
  299. package/dist/workers/client.worker.js.map +0 -6
  300. package/dist/workers/dts.worker.d.ts +0 -75
  301. package/dist/workers/dts.worker.d.ts.map +0 -1
  302. package/dist/workers/dts.worker.js +0 -270
  303. package/dist/workers/dts.worker.js.map +0 -6
  304. package/dist/workers/library.worker.d.ts +0 -75
  305. package/dist/workers/library.worker.d.ts.map +0 -1
  306. package/dist/workers/library.worker.js +0 -166
  307. package/dist/workers/library.worker.js.map +0 -6
  308. package/dist/workers/server.worker.d.ts.map +0 -1
  309. package/dist/workers/server.worker.js +0 -482
  310. package/dist/workers/server.worker.js.map +0 -6
  311. package/src/builders/BaseBuilder.ts +0 -218
  312. package/src/builders/DtsBuilder.ts +0 -92
  313. package/src/builders/LibraryBuilder.ts +0 -110
  314. package/src/builders/types.ts +0 -60
  315. package/src/capacitor/capacitor.ts +0 -931
  316. package/src/commands/device.ts +0 -140
  317. package/src/commands/init.ts +0 -113
  318. package/src/electron/electron.ts +0 -362
  319. package/src/orchestrators/DevOrchestrator.ts +0 -744
  320. package/src/orchestrators/WatchOrchestrator.ts +0 -277
  321. package/src/utils/tailwind-config-deps.ts +0 -98
  322. package/src/utils/template.ts +0 -56
  323. package/src/utils/vite-config.ts +0 -390
  324. package/src/workers/client.worker.ts +0 -250
  325. package/src/workers/dts.worker.ts +0 -453
  326. package/src/workers/library.worker.ts +0 -316
  327. package/src/workers/server.worker.ts +0 -734
  328. package/templates/init/.gitignore.hbs +0 -34
  329. package/templates/init/.npmrc.hbs +0 -1
  330. package/templates/init/.prettierignore +0 -1
  331. package/templates/init/.prettierrc.yaml +0 -12
  332. package/templates/init/eslint.config.ts +0 -15
  333. package/templates/init/mise.toml +0 -3
  334. package/templates/init/package.json.hbs +0 -32
  335. package/templates/init/packages/client-admin/index.html.hbs +0 -144
  336. package/templates/init/packages/client-admin/package.json.hbs +0 -27
  337. package/templates/init/packages/client-admin/public/assets/logo-landscape.png +0 -0
  338. package/templates/init/packages/client-admin/public/assets/logo.png +0 -0
  339. package/templates/init/packages/client-admin/public/favicon.ico +0 -0
  340. package/templates/init/packages/client-admin/src/App.tsx +0 -42
  341. package/templates/init/packages/client-admin/src/dev/DevDialog.tsx +0 -34
  342. package/templates/init/packages/client-admin/src/events/AuthChangeEvent.ts +0 -3
  343. package/templates/init/packages/client-admin/src/main.css +0 -4
  344. package/templates/init/packages/client-admin/src/main.tsx.hbs +0 -146
  345. package/templates/init/packages/client-admin/src/providers/AppServiceProvider.tsx.hbs +0 -103
  346. package/templates/init/packages/client-admin/src/providers/AppStructureProvider.tsx +0 -84
  347. package/templates/init/packages/client-admin/src/providers/AuthProvider.tsx.hbs +0 -96
  348. package/templates/init/packages/client-admin/src/providers/configureSharedData.ts.hbs +0 -67
  349. package/templates/init/packages/client-admin/src/views/auth/LoginView.tsx +0 -132
  350. package/templates/init/packages/client-admin/src/views/home/HomeView.tsx +0 -108
  351. package/templates/init/packages/client-admin/src/views/home/base/employee/EmployeeDetail.tsx.hbs +0 -243
  352. package/templates/init/packages/client-admin/src/views/home/base/employee/EmployeeSheet.tsx.hbs +0 -271
  353. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RoleDetail.tsx.hbs +0 -146
  354. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RolePermissionDetail.tsx.hbs +0 -121
  355. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RolePermissionView.tsx +0 -52
  356. package/templates/init/packages/client-admin/src/views/home/base/role-permission/RoleSheet.tsx.hbs +0 -125
  357. package/templates/init/packages/client-admin/src/views/home/main/MainView.tsx.hbs +0 -13
  358. package/templates/init/packages/client-admin/src/views/home/my-info/MyInfoDetail.tsx.hbs +0 -241
  359. package/templates/init/packages/client-admin/src/views/home/system/system-log/SystemLogSheet.tsx.hbs +0 -169
  360. package/templates/init/packages/client-admin/src/views/not-found/NotFoundView.tsx +0 -15
  361. package/templates/init/packages/client-admin/tailwind.config.ts +0 -10
  362. package/templates/init/packages/db-main/package.json.hbs +0 -13
  363. package/templates/init/packages/db-main/src/MainDbContext.ts +0 -22
  364. package/templates/init/packages/db-main/src/dataLogExt.ts +0 -127
  365. package/templates/init/packages/db-main/src/index.ts +0 -14
  366. package/templates/init/packages/db-main/src/tables/base/Employee.ts +0 -24
  367. package/templates/init/packages/db-main/src/tables/base/EmployeeConfig.ts +0 -13
  368. package/templates/init/packages/db-main/src/tables/base/Role.ts +0 -9
  369. package/templates/init/packages/db-main/src/tables/base/RolePermission.ts +0 -13
  370. package/templates/init/packages/db-main/src/tables/system/_DataLog.ts +0 -19
  371. package/templates/init/packages/db-main/src/tables/system/_Log.ts +0 -16
  372. package/templates/init/packages/server/package.json.hbs +0 -20
  373. package/templates/init/packages/server/public-dev/dev//354/264/210/352/270/260/355/231/224.xlsx +0 -0
  374. package/templates/init/packages/server/src/index.ts +0 -4
  375. package/templates/init/packages/server/src/main.ts.hbs +0 -34
  376. package/templates/init/packages/server/src/services/AuthService.ts.hbs +0 -171
  377. package/templates/init/packages/server/src/services/DevService.ts.hbs +0 -94
  378. package/templates/init/packages/server/src/services/EmployeeService.ts.hbs +0 -122
  379. package/templates/init/packages/server/src/services/RoleService.ts.hbs +0 -59
  380. package/templates/init/pnpm-workspace.yaml +0 -15
  381. package/templates/init/sd.config.ts.hbs +0 -48
  382. package/templates/init/tsconfig.json.hbs +0 -39
  383. package/templates/init/vitest.config.ts +0 -36
  384. package/tests/capacitor-exclude.spec.ts +0 -78
  385. package/tests/capacitor.spec.ts +0 -49
  386. package/tests/copy-src.spec.ts +0 -50
  387. package/tests/electron-exclude.spec.ts +0 -61
  388. package/tests/get-compiler-options-for-package.spec.ts +0 -80
  389. package/tests/get-package-source-files.spec.ts +0 -139
  390. package/tests/get-types-from-package-json.spec.ts +0 -92
  391. package/tests/infra/ResultCollector.spec.ts +0 -30
  392. package/tests/infra/SignalHandler.spec.ts +0 -38
  393. package/tests/infra/WorkerManager.spec.ts +0 -63
  394. package/tests/load-ignore-patterns.spec.ts +0 -163
  395. package/tests/load-sd-config.spec.ts +0 -100
  396. package/tests/package-utils.spec.ts +0 -188
  397. package/tests/parse-root-tsconfig.spec.ts +0 -89
  398. package/tests/publish-config-narrowing.spec.ts +0 -20
  399. package/tests/replace-deps.spec.ts +0 -308
  400. package/tests/run-lint.spec.ts +0 -366
  401. package/tests/run-typecheck.spec.ts +0 -544
  402. package/tests/run-watch.spec.ts +0 -76
  403. package/tests/sd-cli.spec.ts +0 -265
  404. package/tests/sd-public-dev-plugin-mime.spec.ts +0 -19
  405. package/tests/tailwind-config-deps.spec.ts +0 -30
  406. package/tests/template.spec.ts +0 -70
  407. package/tests/vite-config-exclude.spec.ts +0 -35
  408. package/tests/vite-config-outdir.spec.ts +0 -38
  409. package/tests/write-changed-output-files.spec.ts +0 -97
@@ -1,140 +0,0 @@
1
- import path from "path";
2
- import { fsx } from "@simplysm/core-node";
3
- import { consola } from "consola";
4
- import type { SdConfig, SdClientPackageConfig } from "../sd-config.types";
5
- import { loadSdConfig } from "../utils/sd-config";
6
- import { Capacitor } from "../capacitor/capacitor";
7
- import { Electron } from "../electron/electron";
8
-
9
- //#region Types
10
-
11
- /**
12
- * Device command options
13
- */
14
- export interface DeviceOptions {
15
- /** Package name (required) */
16
- package: string;
17
- /** Development server URL (optional, uses server config from sd.config.ts if not specified) */
18
- url?: string;
19
- /** Additional options to pass to sd.config.ts */
20
- options: string[];
21
- }
22
-
23
- //#endregion
24
-
25
- //#region Main
26
-
27
- /**
28
- * Runs an app on an Android device.
29
- *
30
- * - Runs app on connected Android device
31
- * - Connects development server URL to WebView to support Hot Reload
32
- *
33
- * @param options - device execution options
34
- * @returns resolves when complete
35
- */
36
- export async function runDevice(options: DeviceOptions): Promise<void> {
37
- const { package: packageName, url } = options;
38
- const cwd = process.cwd();
39
- const logger = consola.withTag("sd:cli:device");
40
-
41
- logger.debug("device start", { package: packageName, url });
42
-
43
- // Load sd.config.ts
44
- let sdConfig: SdConfig;
45
- try {
46
- sdConfig = await loadSdConfig({ cwd, dev: true, options: options.options });
47
- logger.debug("sd.config.ts loaded");
48
- } catch (err) {
49
- logger.error(`Failed to load sd.config.ts: ${err instanceof Error ? err.message : err}`);
50
- process.exitCode = 1;
51
- return;
52
- }
53
-
54
- // Verify package config
55
- const pkgConfig = sdConfig.packages[packageName];
56
- if (pkgConfig == null) {
57
- logger.error(`Package not found: ${packageName}`);
58
- process.exitCode = 1;
59
- return;
60
- }
61
-
62
- if (pkgConfig.target !== "client") {
63
- logger.error(`Only client target packages are supported: ${packageName} (current: ${pkgConfig.target})`);
64
- process.exitCode = 1;
65
- return;
66
- }
67
-
68
- const clientConfig: SdClientPackageConfig = pkgConfig;
69
- const pkgDir = path.join(cwd, "packages", packageName);
70
-
71
- if (clientConfig.electron != null) {
72
- // Run Electron development
73
- let serverUrl = url;
74
- if (serverUrl == null) {
75
- if (typeof clientConfig.server === "number") {
76
- serverUrl = `http://localhost:${clientConfig.server}/${packageName}/`;
77
- } else {
78
- logger.error(
79
- `--url option is required. server is set to package name: ${clientConfig.server}`,
80
- );
81
- process.exitCode = 1;
82
- return;
83
- }
84
- }
85
-
86
- logger.debug("development server URL", { serverUrl });
87
-
88
- logger.start(`Running ${packageName} (electron)...`);
89
- try {
90
- const electron = await Electron.create(pkgDir, clientConfig.electron, clientConfig.exclude);
91
- await electron.run(serverUrl);
92
- logger.success("Electron execution completed");
93
- } catch (err) {
94
- logger.error(`Failed to run Electron: ${err instanceof Error ? err.message : err}`);
95
- process.exitCode = 1;
96
- }
97
- } else if (clientConfig.capacitor != null) {
98
- // Run Capacitor device (existing logic)
99
- let serverUrl = url;
100
- if (serverUrl == null) {
101
- if (typeof clientConfig.server === "number") {
102
- serverUrl = `http://localhost:${clientConfig.server}/${packageName}/capacitor/`;
103
- } else {
104
- logger.error(
105
- `--url option is required. server is set to package name: ${clientConfig.server}`,
106
- );
107
- process.exitCode = 1;
108
- return;
109
- }
110
- } else if (!serverUrl.endsWith("/")) {
111
- serverUrl = `${serverUrl}/${packageName}/capacitor/`;
112
- }
113
-
114
- logger.debug("development server URL", { serverUrl });
115
-
116
- const capPath = path.join(pkgDir, ".capacitor");
117
- if (!(await fsx.exists(capPath))) {
118
- logger.error(
119
- `Capacitor project is not initialized. First run 'pnpm watch ${packageName}'.`,
120
- );
121
- process.exitCode = 1;
122
- return;
123
- }
124
-
125
- logger.start(`Running ${packageName} (device)...`);
126
- try {
127
- const cap = await Capacitor.create(pkgDir, clientConfig.capacitor, clientConfig.exclude);
128
- await cap.runOnDevice(serverUrl);
129
- logger.success("Device execution completed");
130
- } catch (err) {
131
- logger.error(`Failed to run device: ${err instanceof Error ? err.message : err}`);
132
- process.exitCode = 1;
133
- }
134
- } else {
135
- logger.error(`No electron or capacitor config found: ${packageName}`);
136
- process.exitCode = 1;
137
- }
138
- }
139
-
140
- //#endregion
@@ -1,113 +0,0 @@
1
- import path from "path";
2
- import fs from "fs";
3
- import crypto from "crypto";
4
- import readline from "readline";
5
- import { consola } from "consola";
6
- import { renderTemplateDir } from "../utils/template";
7
- import { execa } from "execa";
8
- import { findPackageRoot } from "../utils/package-utils";
9
-
10
- //#region Types
11
-
12
- export interface InitOptions {}
13
-
14
- //#endregion
15
-
16
- //#region Utilities
17
-
18
- function isValidScopeName(name: string): boolean {
19
- return /^[a-z][a-z0-9-]*$/.test(name);
20
- }
21
-
22
- function prompt(question: string): Promise<string> {
23
- const rl = readline.createInterface({
24
- input: process.stdin,
25
- output: process.stdout,
26
- });
27
- return new Promise((resolve) => {
28
- rl.question(question, (answer) => {
29
- rl.close();
30
- resolve(answer.trim());
31
- });
32
- });
33
- }
34
-
35
- //#endregion
36
-
37
- //#region Main
38
-
39
- /**
40
- * Initializes a new Simplysm project in the current directory.
41
- *
42
- * 1. Check if directory is empty
43
- * 2. Validate project name (folder name)
44
- * 3. Prompt for description, port
45
- * 4. Generate jwtSecret
46
- * 5. Render Handlebars template
47
- * 6. Run pnpm install
48
- */
49
- export async function runInit(_options: InitOptions): Promise<void> {
50
- const cwd = process.cwd();
51
- const logger = consola.withTag("sd:cli:init");
52
-
53
- // 1. Check if directory is empty (exclude dotfiles/dotfolders)
54
- const entries = fs.readdirSync(cwd).filter((e) => !e.startsWith("."));
55
- if (entries.length > 0) {
56
- consola.error("Directory is not empty. Please run this from an empty directory.");
57
- process.exitCode = 1;
58
- return;
59
- }
60
-
61
- // 2. Validate project name
62
- const projectName = path.basename(cwd);
63
- if (!isValidScopeName(projectName)) {
64
- consola.error(
65
- `Project name "${projectName}" is not valid. Only lowercase letters, numbers, and hyphens are allowed.`,
66
- );
67
- process.exitCode = 1;
68
- return;
69
- }
70
-
71
- // 3. Prompt for description
72
- const description = await prompt("Project description: ");
73
-
74
- // 4. Prompt for port
75
- const portInput = await prompt("Server port (default: 40080): ");
76
- const port = portInput !== "" ? Number(portInput) : 40080;
77
- if (Number.isNaN(port) || !Number.isInteger(port) || port < 1 || port > 65535) {
78
- consola.error("Invalid port number.");
79
- process.exitCode = 1;
80
- return;
81
- }
82
-
83
- // 5. Generate jwtSecret
84
- const jwtSecret = `${projectName}-${crypto.randomUUID().slice(0, 8)}`;
85
-
86
- // 6. Render template
87
- const pkgRoot = findPackageRoot(import.meta.dirname);
88
- const templateDir = path.join(pkgRoot, "templates", "init");
89
-
90
- const context = { projectName, description, port, jwtSecret };
91
-
92
- logger.info("Creating project files...");
93
- await renderTemplateDir(templateDir, cwd, context);
94
- logger.success("Project files created successfully");
95
-
96
- // 7. Run pnpm install
97
- logger.info("Running pnpm install...");
98
- await execa("pnpm", ["install"], { cwd });
99
- logger.success("pnpm install completed");
100
-
101
- // 8. Completion message
102
- consola.box(
103
- [
104
- "Project created!",
105
- "",
106
- "Next steps:",
107
- " pnpm dev Start dev server",
108
- " pnpm build Production build",
109
- ].join("\n"),
110
- );
111
- }
112
-
113
- //#endregion
@@ -1,362 +0,0 @@
1
- import path from "path";
2
- import os from "os";
3
- import fs from "fs";
4
- import module from "module";
5
- import { fsx } from "@simplysm/core-node";
6
- import { consola } from "consola";
7
- import type { SdElectronConfig } from "../sd-config.types";
8
- import { execa } from "execa";
9
-
10
- /**
11
- * package.json type
12
- */
13
- interface NpmConfig {
14
- name: string;
15
- version: string;
16
- description?: string;
17
- dependencies?: Record<string, string>;
18
- }
19
-
20
- /**
21
- * Electron project management class
22
- *
23
- * - Initialize Electron project (create package.json, install dependencies, rebuild native modules)
24
- * - Build Windows executable (electron-builder)
25
- * - Run in development mode (load Vite dev server URL)
26
- */
27
- export class Electron {
28
- private static readonly _logger = consola.withTag("sd:cli:electron");
29
-
30
- private readonly _electronPath: string;
31
- private readonly _npmConfig: NpmConfig;
32
-
33
- private constructor(
34
- private readonly _pkgPath: string,
35
- private readonly _config: SdElectronConfig,
36
- npmConfig: NpmConfig,
37
- private readonly _exclude: string[],
38
- ) {
39
- this._npmConfig = npmConfig;
40
- this._electronPath = path.resolve(this._pkgPath, ".electron");
41
- }
42
-
43
- /**
44
- * Create Electron instance (with configuration validation)
45
- */
46
- static async create(
47
- pkgPath: string,
48
- config: SdElectronConfig,
49
- exclude?: string[],
50
- ): Promise<Electron> {
51
- Electron._validateConfig(config);
52
-
53
- const npmConfig = await fsx.readJson<NpmConfig>(path.resolve(pkgPath, "package.json"));
54
- return new Electron(pkgPath, config, npmConfig, exclude ?? []);
55
- }
56
-
57
- /**
58
- * Validate configuration
59
- */
60
- private static _validateConfig(config: SdElectronConfig): void {
61
- if (typeof config.appId !== "string" || config.appId.trim() === "") {
62
- throw new Error("electron.appId is required.");
63
- }
64
- }
65
-
66
- /**
67
- * Resolve binary path from {pkgPath}/node_modules/.bin/
68
- */
69
- private _localBin(name: string): string {
70
- return path.resolve(this._pkgPath, "node_modules/.bin", name);
71
- }
72
-
73
- /**
74
- * Execute command (with logging)
75
- */
76
- private async _exec(
77
- cmd: string,
78
- args: string[],
79
- cwd: string,
80
- env?: Record<string, string>,
81
- ): Promise<string> {
82
- Electron._logger.debug(`executed command: ${cmd} ${args.join(" ")}`);
83
- const { stdout: result } = await execa(cmd, args, { cwd, env: { ...process.env, ...env } });
84
- Electron._logger.debug(`execution result: ${result}`);
85
- return result;
86
- }
87
-
88
- //#region Public Methods
89
-
90
- /**
91
- * Initialize Electron project
92
- *
93
- * 1. Create .electron/src/package.json
94
- * 2. Run pnpm install
95
- * 3. Run electron-rebuild (rebuild native modules)
96
- */
97
- async initialize(): Promise<void> {
98
- const srcPath = path.resolve(this._electronPath, "src");
99
-
100
- // 1. Create package.json
101
- await this._setupPackageJson(srcPath);
102
-
103
- // 2. npm install
104
- await this._exec("npm", ["install"], srcPath);
105
-
106
- // 3. Rebuild native modules
107
- const reinstallDeps = this._config.reinstallDependencies ?? [];
108
- if (reinstallDeps.length > 0) {
109
- await this._exec(this._localBin("electron-rebuild"), [], srcPath);
110
- }
111
- }
112
-
113
- /**
114
- * Production build
115
- *
116
- * 1. Bundle electron-main.ts with esbuild
117
- * 2. Copy web assets
118
- * 3. Create electron-builder configuration
119
- * 4. Run electron-builder
120
- * 5. Copy build output
121
- */
122
- async build(outPath: string): Promise<void> {
123
- const srcPath = path.resolve(this._electronPath, "src");
124
-
125
- // 1. Bundle electron-main.ts
126
- await this._bundleMainProcess(srcPath);
127
-
128
- // 2. Copy web assets (outPath → .electron/src/)
129
- await this._copyWebAssets(outPath, srcPath);
130
-
131
- // 3. Create electron-builder configuration and run
132
- await this._runElectronBuilder(srcPath);
133
-
134
- // 4. Copy build output
135
- await this._copyBuildOutput(outPath);
136
- }
137
-
138
- /**
139
- * Run in development mode
140
- *
141
- * 1. Bundle electron-main.ts with esbuild
142
- * 2. Create dist/electron/package.json
143
- * 3. Run electron .
144
- */
145
- async run(url?: string): Promise<void> {
146
- const electronRunPath = path.resolve(this._pkgPath, "dist/electron");
147
-
148
- // 1. Bundle electron-main.ts
149
- await this._bundleMainProcess(electronRunPath);
150
-
151
- // 2. Create package.json
152
- await fsx.mkdir(electronRunPath);
153
- await fsx.writeJson(
154
- path.resolve(electronRunPath, "package.json"),
155
- { name: this._npmConfig.name, version: this._npmConfig.version, main: "electron-main.js" },
156
- { space: 2 },
157
- );
158
-
159
- // 3. Run Electron
160
- const runEnv: Record<string, string> = {
161
- NODE_ENV: "development",
162
- ...this._config.env,
163
- };
164
-
165
- if (url != null) {
166
- runEnv["ELECTRON_DEV_URL"] = url;
167
- }
168
-
169
- await this._exec(this._localBin("electron"), ["."], electronRunPath, runEnv);
170
- }
171
-
172
- //#endregion
173
-
174
- //#region Private - Initialization
175
-
176
- /**
177
- * Create .electron/src/package.json
178
- */
179
- private async _setupPackageJson(srcPath: string): Promise<void> {
180
- await fsx.mkdir(srcPath);
181
-
182
- const reinstallDeps = this._config.reinstallDependencies ?? [];
183
-
184
- // Extract versions from main package.json that match reinstallDependencies
185
- const dependencies: Record<string, string> = {};
186
- for (const dep of reinstallDeps) {
187
- const version = this._npmConfig.dependencies?.[dep];
188
- if (version != null) {
189
- dependencies[dep] = version;
190
- }
191
- }
192
-
193
- // Add exclude packages
194
- for (const excludePkg of this._exclude) {
195
- if (!(excludePkg in dependencies)) {
196
- const version = this._npmConfig.dependencies?.[excludePkg];
197
- if (version != null) {
198
- dependencies[excludePkg] = version;
199
- }
200
- }
201
- }
202
-
203
- const packageJson: Record<string, unknown> = {
204
- name: this._npmConfig.name.replace(/^@/, "").replace(/\//, "-"),
205
- version: this._npmConfig.version,
206
- description: this._npmConfig.description,
207
- main: "electron-main.js",
208
- dependencies,
209
- };
210
-
211
- if (this._config.postInstallScript != null) {
212
- packageJson["scripts"] = { postinstall: this._config.postInstallScript };
213
- }
214
-
215
- await fsx.writeJson(path.resolve(srcPath, "package.json"), packageJson, { space: 2 });
216
- }
217
-
218
- //#endregion
219
-
220
- //#region Private - Bundling
221
-
222
- /**
223
- * Bundle electron-main.ts with esbuild
224
- */
225
- private async _bundleMainProcess(outDir: string): Promise<void> {
226
- const esbuild = await import("esbuild");
227
- const entryPoint = path.resolve(this._pkgPath, "src/electron-main.ts");
228
-
229
- if (!(await fsx.exists(entryPoint))) {
230
- throw new Error(`electron-main.ts file not found: ${entryPoint}`);
231
- }
232
-
233
- const builtinModules = module.builtinModules.flatMap((m) => [m, `node:${m}`]);
234
- const reinstallDeps = this._config.reinstallDependencies ?? [];
235
-
236
- await fsx.mkdir(outDir);
237
-
238
- await esbuild.build({
239
- entryPoints: [entryPoint],
240
- outfile: path.resolve(outDir, "electron-main.js"),
241
- platform: "node",
242
- target: "node20",
243
- format: "cjs",
244
- bundle: true,
245
- external: ["electron", ...builtinModules, ...reinstallDeps],
246
- });
247
- }
248
-
249
- //#endregion
250
-
251
- //#region Private - Build
252
-
253
- /**
254
- * Copy web assets (build output → .electron/src/)
255
- */
256
- private async _copyWebAssets(outPath: string, srcPath: string): Promise<void> {
257
- const items = await fsx.readdir(outPath);
258
- for (const item of items) {
259
- // Exclude electron/ subdirectory (prevent self-copying)
260
- if (item === "electron") continue;
261
-
262
- const source = path.resolve(outPath, item);
263
- const dest = path.resolve(srcPath, item);
264
- await fsx.copy(source, dest);
265
- }
266
- }
267
-
268
- /**
269
- * Check if symlink creation is possible (Windows build requirement)
270
- */
271
- private static _canCreateSymlink(): boolean {
272
- const tmpDir = os.tmpdir();
273
- const testTarget = path.join(tmpDir, "sd-electron-symlink-test-target.txt");
274
- const testLink = path.join(tmpDir, "sd-electron-symlink-test-link.txt");
275
-
276
- try {
277
- fs.writeFileSync(testTarget, "test");
278
- fs.symlinkSync(testTarget, testLink, "file");
279
- const isSymlink = fs.lstatSync(testLink).isSymbolicLink();
280
- fs.unlinkSync(testLink);
281
- fs.unlinkSync(testTarget);
282
- return isSymlink;
283
- } catch {
284
- return false;
285
- }
286
- }
287
-
288
- /**
289
- * Run electron-builder
290
- */
291
- private async _runElectronBuilder(srcPath: string): Promise<void> {
292
- if (!Electron._canCreateSymlink()) {
293
- throw new Error(
294
- "Symlink creation permission is required to build Electron. Enable Developer mode on Windows.",
295
- );
296
- }
297
-
298
- const distPath = path.resolve(this._electronPath, "dist");
299
-
300
- const builderConfig: Record<string, unknown> = {
301
- appId: this._config.appId,
302
- productName: this._npmConfig.description,
303
- asar: false,
304
- win: {
305
- target: this._config.portable ? "portable" : "nsis",
306
- },
307
- nsis: this._config.nsisOptions ?? {},
308
- directories: {
309
- app: srcPath,
310
- output: distPath,
311
- },
312
- removePackageScripts: false,
313
- npmRebuild: false,
314
- forceCodeSigning: false,
315
- };
316
-
317
- if (this._config.installerIcon != null) {
318
- builderConfig["icon"] = path.resolve(this._pkgPath, this._config.installerIcon);
319
- }
320
-
321
- const configFilePath = path.resolve(this._electronPath, "builder-config.json");
322
- await fsx.writeJson(configFilePath, builderConfig, { space: 2 });
323
-
324
- await this._exec(
325
- this._localBin("electron-builder"),
326
- ["--win", "--config", configFilePath],
327
- this._pkgPath,
328
- );
329
- }
330
-
331
- /**
332
- * Copy build output (.electron/dist/ → dist/electron/)
333
- */
334
- private async _copyBuildOutput(outPath: string): Promise<void> {
335
- const distPath = path.resolve(this._electronPath, "dist");
336
- const electronOutPath = path.resolve(outPath, "electron");
337
- await fsx.mkdir(electronOutPath);
338
-
339
- const description = this._npmConfig.description ?? this._npmConfig.name;
340
- const version = this._npmConfig.version;
341
- const isPortable = this._config.portable === true;
342
-
343
- // electron-builder output filename
344
- const builderFileName = `${description} ${isPortable ? "" : "Setup "}${version}.exe`;
345
- const sourcePath = path.resolve(distPath, builderFileName);
346
-
347
- if (await fsx.exists(sourcePath)) {
348
- // Copy latest file
349
- const latestFileName = `${description}${isPortable ? "-portable" : ""}-latest.exe`;
350
- await fsx.copy(sourcePath, path.resolve(electronOutPath, latestFileName));
351
-
352
- // Copy per-version file to updates/
353
- const updatesPath = path.resolve(electronOutPath, "updates");
354
- await fsx.mkdir(updatesPath);
355
- await fsx.copy(sourcePath, path.resolve(updatesPath, `${version}.exe`));
356
- } else {
357
- Electron._logger.warn(`build output not found: ${sourcePath}`);
358
- }
359
- }
360
-
361
- //#endregion
362
- }