sonamu 0.5.6 → 0.6.0

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 (365) hide show
  1. package/dist/api/base-frame.js +12 -2
  2. package/dist/api/caster.js +66 -2
  3. package/dist/api/code-converters.js +489 -2
  4. package/dist/api/config.d.ts +76 -0
  5. package/dist/api/config.d.ts.map +1 -0
  6. package/dist/api/config.js +32 -0
  7. package/dist/api/context.d.ts +1 -0
  8. package/dist/api/context.d.ts.map +1 -1
  9. package/dist/api/context.js +3 -2
  10. package/dist/api/decorators.d.ts +1 -0
  11. package/dist/api/decorators.d.ts.map +1 -1
  12. package/dist/api/decorators.js +142 -2
  13. package/dist/api/index.js +9 -2
  14. package/dist/api/sonamu.d.ts +8 -22
  15. package/dist/api/sonamu.d.ts.map +1 -1
  16. package/dist/api/sonamu.js +482 -2
  17. package/dist/bin/build-config.d.ts +2 -1
  18. package/dist/bin/build-config.d.ts.map +1 -1
  19. package/dist/bin/build-config.js +12 -2
  20. package/dist/bin/cli-wrapper.js +71 -2
  21. package/dist/bin/cli.js +418 -2
  22. package/dist/bin/hot-hook-register.d.ts +11 -0
  23. package/dist/bin/hot-hook-register.d.ts.map +1 -0
  24. package/dist/bin/hot-hook-register.js +21 -0
  25. package/dist/database/_batch_update.js +78 -2
  26. package/dist/database/base-model.js +247 -2
  27. package/dist/database/code-generator.js +53 -2
  28. package/dist/database/db.d.ts +5 -16
  29. package/dist/database/db.d.ts.map +1 -1
  30. package/dist/database/db.js +132 -2
  31. package/dist/database/knex-plugins/knex-on-duplicate-update.js +39 -2
  32. package/dist/database/puri-wrapper.d.ts +22 -10
  33. package/dist/database/puri-wrapper.d.ts.map +1 -1
  34. package/dist/database/puri-wrapper.js +109 -2
  35. package/dist/database/puri.d.ts +105 -73
  36. package/dist/database/puri.d.ts.map +1 -1
  37. package/dist/database/puri.js +539 -2
  38. package/dist/database/puri.types.d.ts +33 -42
  39. package/dist/database/puri.types.d.ts.map +1 -1
  40. package/dist/database/puri.types.js +3 -2
  41. package/dist/database/transaction-context.d.ts +3 -3
  42. package/dist/database/transaction-context.d.ts.map +1 -1
  43. package/dist/database/transaction-context.js +14 -2
  44. package/dist/database/upsert-builder.js +215 -2
  45. package/dist/entity/entity-manager.d.ts +3 -1
  46. package/dist/entity/entity-manager.d.ts.map +1 -1
  47. package/dist/entity/entity-manager.js +114 -2
  48. package/dist/entity/entity-utils.js +210 -2
  49. package/dist/entity/entity.d.ts.map +1 -1
  50. package/dist/entity/entity.js +651 -2
  51. package/dist/exceptions/error-handler.js +29 -2
  52. package/dist/exceptions/so-exceptions.js +85 -2
  53. package/dist/file-storage/driver.js +79 -2
  54. package/dist/file-storage/file-storage.js +75 -2
  55. package/dist/index.d.ts +2 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +28 -2
  58. package/dist/migration/code-generation.js +558 -2
  59. package/dist/migration/migration-set.js +364 -2
  60. package/dist/migration/migrator.d.ts +0 -9
  61. package/dist/migration/migrator.d.ts.map +1 -1
  62. package/dist/migration/migrator.js +510 -2
  63. package/dist/migration/types.js +3 -2
  64. package/dist/naite/naite.d.ts +12 -0
  65. package/dist/naite/naite.d.ts.map +1 -0
  66. package/dist/naite/naite.js +72 -0
  67. package/dist/stream/index.js +3 -2
  68. package/dist/stream/sse.js +38 -2
  69. package/dist/syncer/api-parser.d.ts +20 -0
  70. package/dist/syncer/api-parser.d.ts.map +1 -0
  71. package/dist/syncer/api-parser.js +229 -0
  72. package/dist/syncer/checksum.d.ts +21 -0
  73. package/dist/syncer/checksum.d.ts.map +1 -0
  74. package/dist/syncer/checksum.js +98 -0
  75. package/dist/syncer/code-generator.d.ts +20 -0
  76. package/dist/syncer/code-generator.d.ts.map +1 -0
  77. package/dist/syncer/code-generator.js +141 -0
  78. package/dist/syncer/entity-operations.d.ts +17 -0
  79. package/dist/syncer/entity-operations.d.ts.map +1 -0
  80. package/dist/syncer/entity-operations.js +58 -0
  81. package/dist/syncer/file-patterns.d.ts +29 -0
  82. package/dist/syncer/file-patterns.d.ts.map +1 -0
  83. package/dist/syncer/file-patterns.js +38 -0
  84. package/dist/syncer/index.d.ts +6 -0
  85. package/dist/syncer/index.d.ts.map +1 -1
  86. package/dist/syncer/index.js +9 -2
  87. package/dist/syncer/module-loader.d.ts +35 -0
  88. package/dist/syncer/module-loader.d.ts.map +1 -0
  89. package/dist/syncer/module-loader.js +82 -0
  90. package/dist/syncer/syncer.d.ts +93 -108
  91. package/dist/syncer/syncer.d.ts.map +1 -1
  92. package/dist/syncer/syncer.js +375 -2
  93. package/dist/template/entity-converter.d.ts +14 -0
  94. package/dist/template/entity-converter.d.ts.map +1 -0
  95. package/dist/template/entity-converter.js +101 -0
  96. package/dist/template/helpers.d.ts +23 -0
  97. package/dist/template/helpers.d.ts.map +1 -0
  98. package/dist/template/helpers.js +64 -0
  99. package/dist/{templates → template/implementations}/entity.template.d.ts +3 -3
  100. package/dist/template/implementations/entity.template.d.ts.map +1 -0
  101. package/dist/template/implementations/entity.template.js +87 -0
  102. package/dist/{templates → template/implementations}/generated.template.d.ts +3 -3
  103. package/dist/template/implementations/generated.template.d.ts.map +1 -0
  104. package/dist/template/implementations/generated.template.js +232 -0
  105. package/dist/{templates → template/implementations}/generated_http.template.d.ts +3 -3
  106. package/dist/template/implementations/generated_http.template.d.ts.map +1 -0
  107. package/dist/template/implementations/generated_http.template.js +131 -0
  108. package/dist/{templates → template/implementations}/generated_sso.template.d.ts +3 -3
  109. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -0
  110. package/dist/template/implementations/generated_sso.template.js +105 -0
  111. package/dist/{templates → template/implementations}/init_types.template.d.ts +3 -3
  112. package/dist/template/implementations/init_types.template.d.ts.map +1 -0
  113. package/dist/template/implementations/init_types.template.js +38 -0
  114. package/dist/template/implementations/model.template.d.ts +17 -0
  115. package/dist/template/implementations/model.template.d.ts.map +1 -0
  116. package/dist/template/implementations/model.template.js +171 -0
  117. package/dist/{templates → template/implementations}/model_test.template.d.ts +3 -3
  118. package/dist/template/implementations/model_test.template.d.ts.map +1 -0
  119. package/dist/template/implementations/model_test.template.js +35 -0
  120. package/dist/{templates → template/implementations}/service.template.d.ts +6 -6
  121. package/dist/template/implementations/service.template.d.ts.map +1 -0
  122. package/dist/template/implementations/service.template.js +193 -0
  123. package/dist/{templates → template/implementations}/view_enums_buttonset.template.d.ts +3 -3
  124. package/dist/template/implementations/view_enums_buttonset.template.d.ts.map +1 -0
  125. package/dist/template/implementations/view_enums_buttonset.template.js +31 -0
  126. package/dist/{templates → template/implementations}/view_enums_dropdown.template.d.ts +3 -4
  127. package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +1 -0
  128. package/dist/template/implementations/view_enums_dropdown.template.js +50 -0
  129. package/dist/{templates → template/implementations}/view_enums_select.template.d.ts +3 -3
  130. package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -0
  131. package/dist/template/implementations/view_enums_select.template.js +55 -0
  132. package/dist/{templates → template/implementations}/view_form.template.d.ts +5 -5
  133. package/dist/template/implementations/view_form.template.d.ts.map +1 -0
  134. package/dist/template/implementations/view_form.template.js +337 -0
  135. package/dist/{templates → template/implementations}/view_id_all_select.template.d.ts +3 -3
  136. package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -0
  137. package/dist/template/implementations/view_id_all_select.template.js +31 -0
  138. package/dist/{templates → template/implementations}/view_id_async_select.template.d.ts +3 -3
  139. package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -0
  140. package/dist/template/implementations/view_id_async_select.template.js +105 -0
  141. package/dist/{templates → template/implementations}/view_list.template.d.ts +5 -13
  142. package/dist/template/implementations/view_list.template.d.ts.map +1 -0
  143. package/dist/template/implementations/view_list.template.js +465 -0
  144. package/dist/{templates → template/implementations}/view_list_columns.template.d.ts +3 -3
  145. package/dist/template/implementations/view_list_columns.template.d.ts.map +1 -0
  146. package/dist/template/implementations/view_list_columns.template.js +49 -0
  147. package/dist/{templates → template/implementations}/view_search_input.template.d.ts +3 -3
  148. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -0
  149. package/dist/template/implementations/view_search_input.template.js +64 -0
  150. package/dist/template/index.d.ts +5 -0
  151. package/dist/template/index.d.ts.map +1 -0
  152. package/dist/template/index.js +6 -0
  153. package/dist/template/template.d.ts +39 -0
  154. package/dist/template/template.d.ts.map +1 -0
  155. package/dist/template/template.js +47 -0
  156. package/dist/template/zod-converter.d.ts +18 -0
  157. package/dist/template/zod-converter.d.ts.map +1 -0
  158. package/dist/template/zod-converter.js +166 -0
  159. package/dist/testing/_relation-graph.js +80 -2
  160. package/dist/testing/fixture-manager.d.ts.map +1 -1
  161. package/dist/testing/fixture-manager.js +521 -2
  162. package/dist/types/types.d.ts +39 -40
  163. package/dist/types/types.d.ts.map +1 -1
  164. package/dist/types/types.js +289 -2
  165. package/dist/typings/knex.d.js +3 -2
  166. package/dist/utils/async-utils.d.ts +7 -0
  167. package/dist/utils/async-utils.d.ts.map +1 -1
  168. package/dist/utils/async-utils.js +57 -2
  169. package/dist/utils/console-util.d.ts +2 -0
  170. package/dist/utils/console-util.d.ts.map +1 -0
  171. package/dist/utils/console-util.js +6 -0
  172. package/dist/utils/controller.js +26 -2
  173. package/dist/utils/esm-utils.d.ts +45 -0
  174. package/dist/utils/esm-utils.d.ts.map +1 -0
  175. package/dist/utils/esm-utils.js +56 -0
  176. package/dist/utils/fs-utils.js +17 -2
  177. package/dist/utils/lodash-able.js +6 -2
  178. package/dist/utils/model.js +22 -2
  179. package/dist/utils/path-utils.d.ts +89 -0
  180. package/dist/utils/path-utils.d.ts.map +1 -0
  181. package/dist/utils/path-utils.js +60 -0
  182. package/dist/utils/process-utils.d.ts +13 -0
  183. package/dist/utils/process-utils.d.ts.map +1 -0
  184. package/dist/utils/process-utils.js +36 -0
  185. package/dist/utils/sql-parser.js +35 -2
  186. package/dist/utils/utils.d.ts +4 -7
  187. package/dist/utils/utils.d.ts.map +1 -1
  188. package/dist/utils/utils.js +33 -2
  189. package/dist/utils/zod-error.d.ts.map +1 -1
  190. package/dist/utils/zod-error.js +19 -2
  191. package/package.json +21 -9
  192. package/src/api/code-converters.ts +2 -2
  193. package/src/api/config.ts +142 -0
  194. package/src/api/context.ts +1 -0
  195. package/src/api/decorators.ts +15 -5
  196. package/src/api/sonamu.ts +102 -87
  197. package/src/bin/build-config.ts +2 -1
  198. package/src/bin/cli-wrapper.ts +10 -3
  199. package/src/bin/cli.ts +108 -56
  200. package/src/bin/hot-hook-register.ts +22 -0
  201. package/src/database/base-model.ts +1 -1
  202. package/src/database/code-generator.ts +1 -1
  203. package/src/database/db.ts +53 -60
  204. package/src/database/puri-wrapper.ts +104 -26
  205. package/src/database/puri.ts +477 -580
  206. package/src/database/puri.types.ts +111 -201
  207. package/src/database/transaction-context.ts +4 -4
  208. package/src/database/upsert-builder.ts +1 -1
  209. package/src/entity/entity-manager.ts +19 -15
  210. package/src/entity/entity.ts +4 -3
  211. package/src/index.ts +2 -0
  212. package/src/migration/code-generation.ts +1 -1
  213. package/src/migration/migration-set.ts +1 -1
  214. package/src/migration/migrator.ts +23 -152
  215. package/src/naite/naite.ts +70 -0
  216. package/src/syncer/api-parser.ts +299 -0
  217. package/src/syncer/checksum.ts +152 -0
  218. package/src/syncer/code-generator.ts +202 -0
  219. package/src/syncer/entity-operations.ts +68 -0
  220. package/src/syncer/file-patterns.ts +56 -0
  221. package/src/syncer/index.ts +6 -0
  222. package/src/syncer/module-loader.ts +125 -0
  223. package/src/syncer/syncer.ts +363 -1420
  224. package/src/template/entity-converter.ts +123 -0
  225. package/src/template/helpers.ts +84 -0
  226. package/src/{templates → template/implementations}/entity.template.ts +4 -4
  227. package/src/{templates → template/implementations}/generated.template.ts +9 -9
  228. package/src/{templates → template/implementations}/generated_http.template.ts +9 -6
  229. package/src/{templates → template/implementations}/generated_sso.template.ts +7 -7
  230. package/src/{templates → template/implementations}/init_types.template.ts +4 -4
  231. package/src/{templates → template/implementations}/model.template.ts +9 -9
  232. package/src/{templates → template/implementations}/model_test.template.ts +5 -5
  233. package/src/{templates → template/implementations}/service.template.ts +29 -12
  234. package/src/{templates → template/implementations}/view_enums_buttonset.template.ts +3 -3
  235. package/src/{templates → template/implementations}/view_enums_dropdown.template.ts +5 -21
  236. package/src/{templates → template/implementations}/view_enums_select.template.ts +4 -4
  237. package/src/{templates → template/implementations}/view_form.template.ts +11 -13
  238. package/src/{templates → template/implementations}/view_id_all_select.template.ts +3 -3
  239. package/src/{templates → template/implementations}/view_id_async_select.template.ts +3 -3
  240. package/src/{templates → template/implementations}/view_list.template.ts +13 -64
  241. package/src/{templates → template/implementations}/view_list_columns.template.ts +3 -3
  242. package/src/{templates → template/implementations}/view_search_input.template.ts +3 -3
  243. package/src/template/index.ts +4 -0
  244. package/src/template/template.ts +86 -0
  245. package/src/template/zod-converter.ts +219 -0
  246. package/src/testing/fixture-manager.ts +8 -1
  247. package/src/types/types.ts +39 -62
  248. package/src/utils/async-utils.ts +17 -0
  249. package/src/utils/console-util.ts +4 -0
  250. package/src/utils/esm-utils.ts +69 -0
  251. package/src/utils/path-utils.ts +102 -0
  252. package/src/utils/process-utils.ts +46 -0
  253. package/src/utils/sql-parser.ts +1 -1
  254. package/src/utils/utils.ts +14 -40
  255. package/src/utils/zod-error.ts +0 -1
  256. package/dist/api/base-frame.js.map +0 -1
  257. package/dist/api/caster.js.map +0 -1
  258. package/dist/api/code-converters.js.map +0 -1
  259. package/dist/api/context.js.map +0 -1
  260. package/dist/api/decorators.js.map +0 -1
  261. package/dist/api/index.js.map +0 -1
  262. package/dist/api/sonamu.js.map +0 -1
  263. package/dist/bin/build-config.js.map +0 -1
  264. package/dist/bin/cli-wrapper.js.map +0 -1
  265. package/dist/bin/cli.js.map +0 -1
  266. package/dist/database/_batch_update.js.map +0 -1
  267. package/dist/database/base-model.js.map +0 -1
  268. package/dist/database/code-generator.js.map +0 -1
  269. package/dist/database/db.js.map +0 -1
  270. package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +0 -1
  271. package/dist/database/puri-wrapper.js.map +0 -1
  272. package/dist/database/puri.js.map +0 -1
  273. package/dist/database/puri.types.js.map +0 -1
  274. package/dist/database/transaction-context.js.map +0 -1
  275. package/dist/database/upsert-builder.js.map +0 -1
  276. package/dist/entity/entity-manager.js.map +0 -1
  277. package/dist/entity/entity-utils.js.map +0 -1
  278. package/dist/entity/entity.js.map +0 -1
  279. package/dist/exceptions/error-handler.js.map +0 -1
  280. package/dist/exceptions/so-exceptions.js.map +0 -1
  281. package/dist/file-storage/driver.js.map +0 -1
  282. package/dist/file-storage/file-storage.js.map +0 -1
  283. package/dist/index.js.map +0 -1
  284. package/dist/migration/code-generation.js.map +0 -1
  285. package/dist/migration/migration-set.js.map +0 -1
  286. package/dist/migration/migrator.js.map +0 -1
  287. package/dist/migration/types.js.map +0 -1
  288. package/dist/stream/index.js.map +0 -1
  289. package/dist/stream/sse.js.map +0 -1
  290. package/dist/syncer/index.js.map +0 -1
  291. package/dist/syncer/syncer.js.map +0 -1
  292. package/dist/templates/base-template.d.ts +0 -13
  293. package/dist/templates/base-template.d.ts.map +0 -1
  294. package/dist/templates/base-template.js +0 -2
  295. package/dist/templates/base-template.js.map +0 -1
  296. package/dist/templates/entity.template.d.ts.map +0 -1
  297. package/dist/templates/entity.template.js +0 -2
  298. package/dist/templates/entity.template.js.map +0 -1
  299. package/dist/templates/generated.template.d.ts.map +0 -1
  300. package/dist/templates/generated.template.js +0 -2
  301. package/dist/templates/generated.template.js.map +0 -1
  302. package/dist/templates/generated_http.template.d.ts.map +0 -1
  303. package/dist/templates/generated_http.template.js +0 -2
  304. package/dist/templates/generated_http.template.js.map +0 -1
  305. package/dist/templates/generated_sso.template.d.ts.map +0 -1
  306. package/dist/templates/generated_sso.template.js +0 -2
  307. package/dist/templates/generated_sso.template.js.map +0 -1
  308. package/dist/templates/index.d.ts +0 -2
  309. package/dist/templates/index.d.ts.map +0 -1
  310. package/dist/templates/index.js +0 -2
  311. package/dist/templates/index.js.map +0 -1
  312. package/dist/templates/init_types.template.d.ts.map +0 -1
  313. package/dist/templates/init_types.template.js +0 -2
  314. package/dist/templates/init_types.template.js.map +0 -1
  315. package/dist/templates/model.template.d.ts +0 -17
  316. package/dist/templates/model.template.d.ts.map +0 -1
  317. package/dist/templates/model.template.js +0 -2
  318. package/dist/templates/model.template.js.map +0 -1
  319. package/dist/templates/model_test.template.d.ts.map +0 -1
  320. package/dist/templates/model_test.template.js +0 -2
  321. package/dist/templates/model_test.template.js.map +0 -1
  322. package/dist/templates/service.template.d.ts.map +0 -1
  323. package/dist/templates/service.template.js +0 -2
  324. package/dist/templates/service.template.js.map +0 -1
  325. package/dist/templates/view_enums_buttonset.template.d.ts.map +0 -1
  326. package/dist/templates/view_enums_buttonset.template.js +0 -2
  327. package/dist/templates/view_enums_buttonset.template.js.map +0 -1
  328. package/dist/templates/view_enums_dropdown.template.d.ts.map +0 -1
  329. package/dist/templates/view_enums_dropdown.template.js +0 -2
  330. package/dist/templates/view_enums_dropdown.template.js.map +0 -1
  331. package/dist/templates/view_enums_select.template.d.ts.map +0 -1
  332. package/dist/templates/view_enums_select.template.js +0 -2
  333. package/dist/templates/view_enums_select.template.js.map +0 -1
  334. package/dist/templates/view_form.template.d.ts.map +0 -1
  335. package/dist/templates/view_form.template.js +0 -2
  336. package/dist/templates/view_form.template.js.map +0 -1
  337. package/dist/templates/view_id_all_select.template.d.ts.map +0 -1
  338. package/dist/templates/view_id_all_select.template.js +0 -2
  339. package/dist/templates/view_id_all_select.template.js.map +0 -1
  340. package/dist/templates/view_id_async_select.template.d.ts.map +0 -1
  341. package/dist/templates/view_id_async_select.template.js +0 -2
  342. package/dist/templates/view_id_async_select.template.js.map +0 -1
  343. package/dist/templates/view_list.template.d.ts.map +0 -1
  344. package/dist/templates/view_list.template.js +0 -2
  345. package/dist/templates/view_list.template.js.map +0 -1
  346. package/dist/templates/view_list_columns.template.d.ts.map +0 -1
  347. package/dist/templates/view_list_columns.template.js +0 -2
  348. package/dist/templates/view_list_columns.template.js.map +0 -1
  349. package/dist/templates/view_search_input.template.d.ts.map +0 -1
  350. package/dist/templates/view_search_input.template.js +0 -2
  351. package/dist/templates/view_search_input.template.js.map +0 -1
  352. package/dist/testing/_relation-graph.js.map +0 -1
  353. package/dist/testing/fixture-manager.js.map +0 -1
  354. package/dist/types/types.js.map +0 -1
  355. package/dist/typings/knex.d.js.map +0 -1
  356. package/dist/utils/async-utils.js.map +0 -1
  357. package/dist/utils/controller.js.map +0 -1
  358. package/dist/utils/fs-utils.js.map +0 -1
  359. package/dist/utils/lodash-able.js.map +0 -1
  360. package/dist/utils/model.js.map +0 -1
  361. package/dist/utils/sql-parser.js.map +0 -1
  362. package/dist/utils/utils.js.map +0 -1
  363. package/dist/utils/zod-error.js.map +0 -1
  364. package/src/templates/base-template.ts +0 -19
  365. package/src/templates/index.ts +0 -1
@@ -1,2 +1,33 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get findApiRootPath(){return findApiRootPath},get findAppRootPath(){return findAppRootPath},get globAsync(){return globAsync},get importMultiple(){return importMultiple},get nonNullable(){return nonNullable}});var _path=/*#__PURE__*/_interop_require_default(require("path"));var _promises=require("fs/promises");var _fs=/*#__PURE__*/_interop_require_default(require("fs"));function _async_iterator(iterable){var method,async,sync,retry=2;for("undefined"!=typeof Symbol&&(async=Symbol.asyncIterator,sync=Symbol.iterator);retry--;){if(async&&null!=(method=iterable[async]))return method.call(iterable);if(sync&&null!=(method=iterable[sync]))return new AsyncFromSyncIterator(method.call(iterable));async="@@asyncIterator",sync="@@iterator"}throw new TypeError("Object is not async iterable")}function AsyncFromSyncIterator(s){function AsyncFromSyncIteratorContinuation(r){if(Object(r)!==r)return Promise.reject(new TypeError(r+" is not an object."));var done=r.done;return Promise.resolve(r.value).then(function(value){return{value:value,done:done}})}return AsyncFromSyncIterator=function(s){this.s=s,this.n=s.next},AsyncFromSyncIterator.prototype={s:null,n:null,next:function(){return AsyncFromSyncIteratorContinuation(this.n.apply(this.s,arguments))},return:function(value){var ret=this.s.return;return void 0===ret?Promise.resolve({value:value,done:!0}):AsyncFromSyncIteratorContinuation(ret.apply(this.s,arguments))},throw:function(value){var thr=this.s.return;return void 0===thr?Promise.reject(value):AsyncFromSyncIteratorContinuation(thr.apply(this.s,arguments))}},new AsyncFromSyncIterator(s)}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap;var cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interop_require_wildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj}}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj)}var newObj={__proto__:null};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc)}else{newObj[key]=obj[key]}}}newObj.default=obj;if(cache){cache.set(obj,newObj)}return newObj}function _ts_generator(thisArg,body){var f,y,t,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=verb(0),g["throw"]=verb(1),g["return"]=verb(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}function globAsync(pathPattern){return _async_to_generator(function(){var files,_iteratorAbruptCompletion,_didIteratorError,_iteratorError,_iterator,_step,_value,file,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:files=[];_iteratorAbruptCompletion=false,_didIteratorError=false;_state.label=1;case 1:_state.trys.push([1,6,7,12]);_iterator=_async_iterator((0,_promises.glob)(_path.default.resolve(pathPattern)));_state.label=2;case 2:return[4,_iterator.next()];case 3:if(!(_iteratorAbruptCompletion=!(_step=_state.sent()).done))return[3,5];_value=_step.value;file=_value;files.push(file);_state.label=4;case 4:_iteratorAbruptCompletion=false;return[3,2];case 5:return[3,12];case 6:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,12];case 7:_state.trys.push([7,,10,11]);if(!(_iteratorAbruptCompletion&&_iterator.return!=null))return[3,9];return[4,_iterator.return()];case 8:_state.sent();_state.label=9;case 9:return[3,11];case 10:if(_didIteratorError){throw _iteratorError}return[7];case 11:return[7];case 12:return[2,files]}})})()}function importMultiple(filePaths){var doRefresh=arguments.length>1&&arguments[1]!==void 0?arguments[1]:false;return _async_to_generator(function(){var results,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,filePath,importPath,imported,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:results=[];_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,6,7,8]);_iterator=filePaths[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,5];filePath=_step.value;importPath="./"+_path.default.relative(__dirname,filePath);if(doRefresh){if(require.resolve){delete require.cache[require.resolve(importPath)]}else{importPath+="?t=".concat(Date.now())}}return[4,Promise.resolve(importPath).then(function(p){return /*#__PURE__*/_interop_require_wildcard(require(p))})];case 3:imported=_state.sent();results.push({filePath:filePath,imported:imported});_state.label=4;case 4:_iteratorNormalCompletion=true;return[3,2];case 5:return[3,8];case 6:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,8];case 7:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 8:return[2,results]}})})()}function findAppRootPath(){return _async_to_generator(function(){var apiRootPath;return _ts_generator(this,function(_state){apiRootPath=findApiRootPath();return[2,apiRootPath.split(_path.default.sep).slice(0,-1).join(_path.default.sep)]})})()}function findApiRootPath(){var _require_main;var workspacePath=process.env["INIT_CWD"];if(workspacePath&&workspacePath.length!==0){return workspacePath}var _require_main_path;var basePath=(_require_main_path=(_require_main=require.main)===null||_require_main===void 0?void 0:_require_main.path)!==null&&_require_main_path!==void 0?_require_main_path:__dirname;var dir=_path.default.dirname(basePath);if(dir.includes("/.yarn/")){dir=dir.split("/.yarn/")[0]}do{if(_fs.default.existsSync(_path.default.join(dir,"/package.json"))){return dir.split(_path.default.sep).join(_path.default.sep)}dir=dir.split(_path.default.sep).slice(0,-1).join(_path.default.sep)}while(dir.split(_path.default.sep).length>1);throw new Error("Cannot find AppRoot using Sonamu -2")}function nonNullable(value){return value!==null&&value!==undefined}
2
- //# sourceMappingURL=utils.js.map
1
+ import path from "path";
2
+ import fs from "fs";
3
+ export async function findAppRootPath() {
4
+ const apiRootPath = findApiRootPath();
5
+ return apiRootPath.split(path.sep).slice(0, -1).join(path.sep);
6
+ }
7
+ export function findApiRootPath() {
8
+ // NOTE: for support npm / yarn workspaces
9
+ const workspacePath = process.env["INIT_CWD"];
10
+ if (workspacePath && workspacePath.length !== 0) {
11
+ return workspacePath;
12
+ }
13
+ const basePath = import.meta.filename;
14
+ let dir = path.dirname(basePath);
15
+ if (dir.includes("/.yarn/")) {
16
+ dir = dir.split("/.yarn/")[0];
17
+ }
18
+ do {
19
+ if (fs.existsSync(path.join(dir, "/package.json"))) {
20
+ return dir.split(path.sep).join(path.sep);
21
+ }
22
+ dir = dir.split(path.sep).slice(0, -1).join(path.sep);
23
+ }while (dir.split(path.sep).length > 1)
24
+ throw new Error("Cannot find AppRoot using Sonamu -2");
25
+ }
26
+ export function nonNullable(value) {
27
+ return value !== null && value !== undefined;
28
+ }
29
+ export function exhaustive(_param) {
30
+ throw new Error(`exhaustive`);
31
+ }
32
+
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4vcGF0aC11dGlsc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZEFwcFJvb3RQYXRoKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoPiB7XG4gIGNvbnN0IGFwaVJvb3RQYXRoID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIHJldHVybiBhcGlSb290UGF0aFxuICAgIC5zcGxpdChwYXRoLnNlcClcbiAgICAuc2xpY2UoMCwgLTEpXG4gICAgLmpvaW4ocGF0aC5zZXApIGFzIEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBcGlSb290UGF0aCgpOiBBYnNvbHV0ZVBhdGgge1xuICAvLyBOT1RFOiBmb3Igc3VwcG9ydCBucG0gLyB5YXJuIHdvcmtzcGFjZXNcbiAgY29uc3Qgd29ya3NwYWNlUGF0aCA9IHByb2Nlc3MuZW52W1wiSU5JVF9DV0RcIl07XG4gIGlmICh3b3Jrc3BhY2VQYXRoICYmIHdvcmtzcGFjZVBhdGgubGVuZ3RoICE9PSAwKSB7XG4gICAgcmV0dXJuIHdvcmtzcGFjZVBhdGggYXMgQWJzb2x1dGVQYXRoO1xuICB9XG5cbiAgY29uc3QgYmFzZVBhdGggPSBpbXBvcnQubWV0YS5maWxlbmFtZTtcbiAgbGV0IGRpciA9IHBhdGguZGlybmFtZShiYXNlUGF0aCk7XG4gIGlmIChkaXIuaW5jbHVkZXMoXCIvLnlhcm4vXCIpKSB7XG4gICAgZGlyID0gZGlyLnNwbGl0KFwiLy55YXJuL1wiKVswXTtcbiAgfVxuICBkbyB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKGRpciwgXCIvcGFja2FnZS5qc29uXCIpKSkge1xuICAgICAgcmV0dXJuIGRpci5zcGxpdChwYXRoLnNlcCkuam9pbihwYXRoLnNlcCkgYXMgQWJzb2x1dGVQYXRoO1xuICAgIH1cbiAgICBkaXIgPSBkaXIuc3BsaXQocGF0aC5zZXApLnNsaWNlKDAsIC0xKS5qb2luKHBhdGguc2VwKTtcbiAgfSB3aGlsZSAoZGlyLnNwbGl0KHBhdGguc2VwKS5sZW5ndGggPiAxKTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgQXBwUm9vdCB1c2luZyBTb25hbXUgLTJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25OdWxsYWJsZTxUPih2YWx1ZTogVCk6IHZhbHVlIGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGhhdXN0aXZlKF9wYXJhbTogbmV2ZXIpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBleGhhdXN0aXZlYCk7XG59XG4iXSwibmFtZXMiOlsicGF0aCIsImZzIiwiZmluZEFwcFJvb3RQYXRoIiwiYXBpUm9vdFBhdGgiLCJmaW5kQXBpUm9vdFBhdGgiLCJzcGxpdCIsInNlcCIsInNsaWNlIiwiam9pbiIsIndvcmtzcGFjZVBhdGgiLCJwcm9jZXNzIiwiZW52IiwibGVuZ3RoIiwiYmFzZVBhdGgiLCJmaWxlbmFtZSIsImRpciIsImRpcm5hbWUiLCJpbmNsdWRlcyIsImV4aXN0c1N5bmMiLCJFcnJvciIsIm5vbk51bGxhYmxlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJleGhhdXN0aXZlIiwiX3BhcmFtIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxVQUFVLE9BQU87QUFDeEIsT0FBT0MsUUFBUSxLQUFLO0FBR3BCLE9BQU8sZUFBZUM7SUFDcEIsTUFBTUMsY0FBY0M7SUFDcEIsT0FBT0QsWUFDSkUsS0FBSyxDQUFDTCxLQUFLTSxHQUFHLEVBQ2RDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FDVkMsSUFBSSxDQUFDUixLQUFLTSxHQUFHO0FBQ2xCO0FBRUEsT0FBTyxTQUFTRjtJQUNkLDBDQUEwQztJQUMxQyxNQUFNSyxnQkFBZ0JDLFFBQVFDLEdBQUcsQ0FBQyxXQUFXO0lBQzdDLElBQUlGLGlCQUFpQkEsY0FBY0csTUFBTSxLQUFLLEdBQUc7UUFDL0MsT0FBT0g7SUFDVDtJQUVBLE1BQU1JLFdBQVcsWUFBWUMsUUFBUTtJQUNyQyxJQUFJQyxNQUFNZixLQUFLZ0IsT0FBTyxDQUFDSDtJQUN2QixJQUFJRSxJQUFJRSxRQUFRLENBQUMsWUFBWTtRQUMzQkYsTUFBTUEsSUFBSVYsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0lBQy9CO0lBQ0EsR0FBRztRQUNELElBQUlKLEdBQUdpQixVQUFVLENBQUNsQixLQUFLUSxJQUFJLENBQUNPLEtBQUssbUJBQW1CO1lBQ2xELE9BQU9BLElBQUlWLEtBQUssQ0FBQ0wsS0FBS00sR0FBRyxFQUFFRSxJQUFJLENBQUNSLEtBQUtNLEdBQUc7UUFDMUM7UUFDQVMsTUFBTUEsSUFBSVYsS0FBSyxDQUFDTCxLQUFLTSxHQUFHLEVBQUVDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBR0MsSUFBSSxDQUFDUixLQUFLTSxHQUFHO0lBQ3RELFFBQVNTLElBQUlWLEtBQUssQ0FBQ0wsS0FBS00sR0FBRyxFQUFFTSxNQUFNLEdBQUcsRUFBRztJQUN6QyxNQUFNLElBQUlPLE1BQU07QUFDbEI7QUFFQSxPQUFPLFNBQVNDLFlBQWVDLEtBQVE7SUFDckMsT0FBT0EsVUFBVSxRQUFRQSxVQUFVQztBQUNyQztBQUVBLE9BQU8sU0FBU0MsV0FBV0MsTUFBYTtJQUN0QyxNQUFNLElBQUlMLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDOUIifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"zod-error.d.ts","sourceRoot":"","sources":["../../src/utils/zod-error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,eAAe,EAAE,CAgBrE"}
1
+ {"version":3,"file":"zod-error.d.ts","sourceRoot":"","sources":["../../src/utils/zod-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,GAAG,eAAe,EAAE,CAgBrE"}
@@ -1,2 +1,19 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"humanizeZodError",{enumerable:true,get:function(){return humanizeZodError}});function _type_of(obj){"@swc/helpers - typeof";return obj&&typeof Symbol!=="undefined"&&obj.constructor===Symbol?"symbol":typeof obj}function humanizeZodError(error){return error.issues.map(function(param){var originPath=param.path,message=param.message;var path=originPath.map(function(item){if((typeof item==="undefined"?"undefined":_type_of(item))==="symbol"){var _item_description;return(_item_description=item.description)!==null&&_item_description!==void 0?_item_description:item.toString()}if(typeof item==="number"){return"[".concat(item,"]")}return item});return{path:path,message:message}})}
2
- //# sourceMappingURL=zod-error.js.map
1
+ export function humanizeZodError(error) {
2
+ return error.issues.map(({ path: originPath, message })=>{
3
+ const path = originPath.map((item)=>{
4
+ if (typeof item === "symbol") {
5
+ return item.description ?? item.toString();
6
+ }
7
+ if (typeof item === "number") {
8
+ return `[${item}]`;
9
+ }
10
+ return item;
11
+ });
12
+ return {
13
+ path,
14
+ message: message
15
+ };
16
+ });
17
+ }
18
+
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy96b2QtZXJyb3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5cbnR5cGUgVmFsaWRhdGlvbkVycm9yID0ge1xuICBwYXRoOiBzdHJpbmdbXTtcbiAgbWVzc2FnZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGh1bWFuaXplWm9kRXJyb3IoZXJyb3I6IHouWm9kRXJyb3IpOiBWYWxpZGF0aW9uRXJyb3JbXSB7XG4gIHJldHVybiBlcnJvci5pc3N1ZXMubWFwKCh7ICBwYXRoOiBvcmlnaW5QYXRoLCBtZXNzYWdlIH0pID0+IHtcbiAgICBjb25zdCBwYXRoID0gb3JpZ2luUGF0aC5tYXAoaXRlbSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwic3ltYm9sXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uZGVzY3JpcHRpb24gPz8gaXRlbS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIGBbJHtpdGVtfV1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IHBhdGgsIG1lc3NhZ2U6IG1lc3NhZ2UgfTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiaHVtYW5pemVab2RFcnJvciIsImVycm9yIiwiaXNzdWVzIiwibWFwIiwicGF0aCIsIm9yaWdpblBhdGgiLCJtZXNzYWdlIiwiaXRlbSIsImRlc2NyaXB0aW9uIiwidG9TdHJpbmciXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sU0FBU0EsaUJBQWlCQyxLQUFpQjtJQUNoRCxPQUFPQSxNQUFNQyxNQUFNLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEVBQUdDLE1BQU1DLFVBQVUsRUFBRUMsT0FBTyxFQUFFO1FBQ3JELE1BQU1GLE9BQU9DLFdBQVdGLEdBQUcsQ0FBQ0ksQ0FBQUE7WUFDMUIsSUFBSSxPQUFPQSxTQUFTLFVBQVU7Z0JBQzVCLE9BQU9BLEtBQUtDLFdBQVcsSUFBSUQsS0FBS0UsUUFBUTtZQUMxQztZQUVBLElBQUksT0FBT0YsU0FBUyxVQUFVO2dCQUM1QixPQUFPLENBQUMsQ0FBQyxFQUFFQSxLQUFLLENBQUMsQ0FBQztZQUNwQjtZQUVBLE9BQU9BO1FBQ1Q7UUFFQSxPQUFPO1lBQUVIO1lBQU1FLFNBQVNBO1FBQVE7SUFDbEM7QUFDRiJ9
package/package.json CHANGED
@@ -1,17 +1,25 @@
1
1
  {
2
2
  "name": "sonamu",
3
- "version": "0.5.6",
3
+ "version": "0.6.0",
4
4
  "description": "Sonamu — TypeScript Fullstack API Framework",
5
5
  "keywords": [
6
6
  "typescript",
7
7
  "framework",
8
8
  "orm"
9
9
  ],
10
- "main": "./dist/index.js",
11
- "exports": "./dist/index.js",
10
+ "type": "module",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.js",
14
+ "types": "./dist/index.d.ts"
15
+ },
16
+ "./hot-hook-register": {
17
+ "default": "./dist/bin/hot-hook-register.js"
18
+ }
19
+ },
12
20
  "scripts": {
13
21
  "dev": "nodemon exec",
14
- "build": "swc src --config-file .swcrc -d dist --strip-leading-paths && tsc --emitDeclarationOnly",
22
+ "build": "rm -rf dist && swc src -d dist --strip-leading-paths && tsc --emitDeclarationOnly",
15
23
  "publish": "yarn build && yarn npm publish"
16
24
  },
17
25
  "license": "MIT",
@@ -52,6 +60,7 @@
52
60
  "inflection": "^1.13.2",
53
61
  "knex": "^3.1.0",
54
62
  "lodash": "^4.17.21",
63
+ "lodash-es": "^4.17.21",
55
64
  "luxon": "^3.0.3",
56
65
  "mime-types": "^3.0.1",
57
66
  "minimatch": "^10.0.3",
@@ -60,15 +69,16 @@
60
69
  "nodemon": "^3.1.10",
61
70
  "prompts": "^2.4.2",
62
71
  "qs": "^6.11.0",
63
- "source-map-support": "^0.5.21",
64
72
  "tsicli": "^1.0.5",
65
73
  "zod": "^4.1.12"
66
74
  },
67
75
  "devDependencies": {
68
- "@sonamu-kit/ui": "^0.5.1",
76
+ "@sonamu-kit/hot-hook": "^0.4.1",
77
+ "@sonamu-kit/ui": "^0.6.0",
69
78
  "@swc/cli": "^0.7.8",
70
79
  "@types/inflection": "^1.13.0",
71
80
  "@types/lodash": "^4.14.198",
81
+ "@types/lodash-es": "^4.17.12",
72
82
  "@types/luxon": "^3.0.1",
73
83
  "@types/mime-types": "^3.0.1",
74
84
  "@types/node": "^22",
@@ -80,11 +90,13 @@
80
90
  "typescript": "^5.2.2"
81
91
  },
82
92
  "peerDependencies": {
83
- "@sonamu-kit/react-sui": "^0.1.17",
93
+ "@sonamu-kit/hot-runner": "^0.1.1",
94
+ "@sonamu-kit/loader": "^2.1.2",
95
+ "@swc/cli": "^0.7.8",
96
+ "@swc/core": "^1.13.5",
84
97
  "fastify": "^4.23.2",
85
98
  "knex": "^3.1.0",
86
99
  "mysql2": "^3.6.1",
87
- "nodemon": "3.1.10",
88
- "source-map-support": "^0.5.21"
100
+ "nodemon": "3.1.10"
89
101
  }
90
102
  }
@@ -27,7 +27,7 @@ import {
27
27
  isVirtualProp,
28
28
  } from "../types/types";
29
29
  import { ExtendedApi } from "./decorators";
30
- import type { Literal } from "zod/v4/core/util";
30
+ import type { core } from "zod/v4";
31
31
 
32
32
  // <any>를 자제하고, Zod에서 제약하는 기본적인 Generic Type Parameter를 사용함.
33
33
  type AnyZodRecord = z.ZodRecord<z.ZodString | z.ZodNumber | z.ZodSymbol, z.ZodType>;
@@ -36,7 +36,7 @@ type AnyZodArray = z.ZodArray<z.ZodType>;
36
36
  type AnyZodNullable = z.ZodNullable<z.ZodType>;
37
37
  type AnyZodOptional = z.ZodOptional<z.ZodType>;
38
38
  type AnyZodDefault = z.ZodDefault<z.ZodType>;
39
- type AnyZodLiteral = z.ZodLiteral<Literal>;
39
+ type AnyZodLiteral = z.ZodLiteral<core.util.Literal>;
40
40
  type AnyZodUnion = z.ZodUnion<z.ZodType[]>;
41
41
 
42
42
  /*
@@ -0,0 +1,142 @@
1
+ import { transformFile } from "@swc/core";
2
+ import { Knex } from "knex";
3
+ import path from "path";
4
+ import { exists } from "../utils/fs-utils";
5
+ import { unlink, writeFile } from "fs/promises";
6
+ import { Driver } from "../file-storage/driver";
7
+ import {
8
+ FastifyInstance,
9
+ FastifyReply,
10
+ FastifyRequest,
11
+ FastifyServerOptions,
12
+ } from "fastify";
13
+ import { SonamuFastifyConfig } from "../types/types";
14
+ import { FastifyCorsOptions } from "@fastify/cors";
15
+ import { FastifyFormbodyOptions } from "@fastify/formbody";
16
+ import { FastifyMultipartOptions } from "@fastify/multipart";
17
+ import { SecureSessionPluginOptions } from "@fastify/secure-session";
18
+ import { FastifyStaticOptions } from "@fastify/static";
19
+ import { QsPluginOptions } from "fastify-qs";
20
+ import { SsePluginOptions } from "fastify-sse-v2/lib/types";
21
+ import {
22
+ DeserializeFunction,
23
+ SerializeFunction,
24
+ } from "@fastify/passport/dist/Authenticator";
25
+
26
+ export type DatabaseConfig = Omit<Knex.Config, "connection"> & {
27
+ connection?: Knex.MySql2ConnectionConfig;
28
+ };
29
+
30
+ export type SonamuConfig = {
31
+ projectName?: string;
32
+
33
+ api: {
34
+ dir: string;
35
+ route: {
36
+ prefix: string;
37
+ };
38
+ timezone?: string;
39
+ };
40
+ sync: {
41
+ targets: string[]; // "web", "app" 등
42
+ };
43
+ ui?: {
44
+ port: number;
45
+ };
46
+
47
+ database: {
48
+ // 기본 데이터베이스 이름
49
+ name: string;
50
+ // 모든 환경에 적용될 기본 Knex 옵션
51
+ defaultOptions: DatabaseConfig;
52
+ // 환경별 설정
53
+ environments?: {
54
+ development?: DatabaseConfig;
55
+ development_slave?: DatabaseConfig;
56
+ production?: DatabaseConfig;
57
+ production_slave?: DatabaseConfig;
58
+ remote_fixture?: DatabaseConfig;
59
+ };
60
+ };
61
+
62
+ server: SonamuServerOptions;
63
+ };
64
+
65
+ export type SonamuServerOptions = {
66
+ fastify?: FastifyServerOptions;
67
+
68
+ listen?: {
69
+ port: number;
70
+ host?: string;
71
+ };
72
+
73
+ plugins?: {
74
+ cors?: boolean | FastifyCorsOptions;
75
+ formbody?: boolean | FastifyFormbodyOptions;
76
+ multipart?: boolean | FastifyMultipartOptions;
77
+ qs?: boolean | QsPluginOptions;
78
+ sse?: boolean | SsePluginOptions;
79
+ static?: boolean | FastifyStaticOptions;
80
+ session?: boolean | SecureSessionPluginOptions;
81
+
82
+ custom?: (server: FastifyInstance) => void;
83
+ };
84
+
85
+ auth?:
86
+ | boolean
87
+ | {
88
+ userSerializer: SerializeFunction<unknown, unknown>;
89
+ userDeserializer: DeserializeFunction<unknown, unknown>;
90
+ };
91
+
92
+ apiConfig: SonamuFastifyConfig;
93
+
94
+ storage?: Driver;
95
+
96
+ lifecycle?: {
97
+ onStart?: (server: FastifyInstance) => Promise<void> | void;
98
+ onShutdown?: (server: FastifyInstance) => Promise<void> | void;
99
+ onError?: (
100
+ error: Error,
101
+ request: FastifyRequest,
102
+ reply: FastifyReply
103
+ ) => Promise<void> | void;
104
+ };
105
+ };
106
+
107
+ export type SonamuConfigExport = SonamuConfig | Promise<SonamuConfig>;
108
+
109
+ export function defineConfig(config: SonamuConfig): SonamuConfig;
110
+ export function defineConfig(
111
+ config: Promise<SonamuConfig>
112
+ ): Promise<SonamuConfig>;
113
+ export function defineConfig(config: SonamuConfigExport): SonamuConfigExport {
114
+ return config;
115
+ }
116
+
117
+ export async function loadConfig(rootPath: string): Promise<SonamuConfig> {
118
+ const configPath = path.join(rootPath, "sonamu.config.ts");
119
+ if (!(await exists(configPath))) {
120
+ throw new Error(`Cannot find sonamu.config.ts in ${configPath}`);
121
+ }
122
+
123
+ const { code: configCode } = await transformFile(configPath, {
124
+ module: {
125
+ type: "es6",
126
+ },
127
+ jsc: {
128
+ parser: {
129
+ syntax: "typescript",
130
+ decorators: true,
131
+ },
132
+ },
133
+ });
134
+
135
+ const tempDir = path.join(rootPath, "dist");
136
+ const outputPath = path.join(tempDir, "sonamu.config.js");
137
+ await writeFile(outputPath, configCode);
138
+ const { default: config } = await import(outputPath);
139
+ await unlink(outputPath);
140
+
141
+ return config;
142
+ }
@@ -24,6 +24,7 @@ export type Context = {
24
24
  createSSE: <T extends ZodObject>(
25
25
  events: T
26
26
  ) => ReturnType<typeof createSSEFactory<T>>;
27
+ naiteStore: Map<string, any>;
27
28
  } & AuthContext &
28
29
  ContextExtend;
29
30
 
@@ -2,7 +2,11 @@ import type { HTTPMethods } from "fastify";
2
2
  import inflection from "inflection";
3
3
  import type { ApiParam, ApiParamType } from "../types/types";
4
4
  import { z } from "zod";
5
- import { PuriWrapper, TransactionalOptions } from "../database/puri-wrapper";
5
+ import {
6
+ PuriTransactionWrapper,
7
+ PuriWrapper,
8
+ TransactionalOptions,
9
+ } from "../database/puri-wrapper";
6
10
  import { DB } from "../database/db";
7
11
  import { Sonamu } from "./sonamu";
8
12
  import type { UploadContext } from "./context";
@@ -31,6 +35,7 @@ export type ApiDecoratorOptions = {
31
35
  resourceName?: string;
32
36
  guards?: GuardKey[];
33
37
  description?: string;
38
+ timeout?: number;
34
39
  };
35
40
  export type StreamDecoratorOptions = {
36
41
  type: "sse"; // | 'ws
@@ -152,10 +157,14 @@ export function transactional(options: TransactionalOptions = {}) {
152
157
  const startTransaction = async () => {
153
158
  const puri = this.getPuri(dbPreset) as PuriWrapper;
154
159
 
155
- return puri.transaction(
156
- async (trx: PuriWrapper) => {
160
+ return puri.knex.transaction(
161
+ async (trx) => {
162
+ const trxWrapper = new PuriTransactionWrapper(
163
+ trx,
164
+ this.getUpsertBuilder()
165
+ );
157
166
  // TransactionContext에 트랜잭션 저장
158
- DB.getTransactionContext().setTransaction(dbPreset, trx);
167
+ DB.getTransactionContext().setTransaction(dbPreset, trxWrapper);
159
168
 
160
169
  try {
161
170
  return await originalMethod.apply(this, args);
@@ -164,7 +173,7 @@ export function transactional(options: TransactionalOptions = {}) {
164
173
  DB.getTransactionContext().deleteTransaction(dbPreset);
165
174
  }
166
175
  },
167
- { isolation, readOnly }
176
+ { isolationLevel: isolation, readOnly }
168
177
  );
169
178
  };
170
179
 
@@ -216,6 +225,7 @@ export function upload(options: UploadDecoratorOptions = {}) {
216
225
  const rawFilesIterator = request.files();
217
226
  for await (const rawFile of rawFilesIterator) {
218
227
  if (rawFile) {
228
+ await rawFile.toBuffer();
219
229
  uploadContext.files.push(new FileStorage(rawFile, storage));
220
230
  }
221
231
  }