sonamu 0.4.14 → 0.5.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 (348) hide show
  1. package/.swcrc +15 -0
  2. package/dist/api/base-frame.d.ts +8 -0
  3. package/dist/api/base-frame.d.ts.map +1 -0
  4. package/dist/api/base-frame.js +2 -0
  5. package/dist/api/base-frame.js.map +1 -0
  6. package/dist/api/caster.d.ts +5 -0
  7. package/dist/api/caster.d.ts.map +1 -0
  8. package/dist/api/caster.js +2 -0
  9. package/dist/api/caster.js.map +1 -0
  10. package/dist/api/code-converters.d.ts +23 -0
  11. package/dist/api/code-converters.d.ts.map +1 -0
  12. package/dist/api/code-converters.js +2 -0
  13. package/dist/api/code-converters.js.map +1 -0
  14. package/dist/api/context.d.ts +16 -0
  15. package/dist/api/context.d.ts.map +1 -0
  16. package/dist/api/context.js +2 -0
  17. package/dist/api/context.js.map +1 -0
  18. package/dist/api/decorators.d.ts +50 -0
  19. package/dist/api/decorators.d.ts.map +1 -0
  20. package/dist/api/decorators.js +2 -0
  21. package/dist/api/decorators.js.map +1 -0
  22. package/dist/api/index.d.ts +8 -0
  23. package/dist/api/index.d.ts.map +1 -0
  24. package/dist/api/index.js +2 -0
  25. package/dist/api/index.js.map +1 -0
  26. package/dist/api/sonamu.d.ts +83 -0
  27. package/dist/api/sonamu.d.ts.map +1 -0
  28. package/dist/api/sonamu.js +2 -0
  29. package/dist/api/sonamu.js.map +1 -0
  30. package/dist/api/sonamu.types.d.ts +30 -0
  31. package/dist/api/sonamu.types.d.ts.map +1 -0
  32. package/dist/api/sonamu.types.js +2 -0
  33. package/dist/api/sonamu.types.js.map +1 -0
  34. package/dist/bin/build-config.d.ts +5 -0
  35. package/dist/bin/build-config.d.ts.map +1 -0
  36. package/dist/bin/build-config.js +2 -0
  37. package/dist/bin/build-config.js.map +1 -0
  38. package/dist/bin/cli-wrapper.d.ts +2 -0
  39. package/dist/bin/cli-wrapper.d.ts.map +1 -0
  40. package/dist/bin/cli-wrapper.js +1 -38
  41. package/dist/bin/cli-wrapper.js.map +1 -1
  42. package/dist/bin/cli.d.ts +2 -2
  43. package/dist/bin/cli.d.ts.map +1 -0
  44. package/dist/bin/cli.js +1 -903
  45. package/dist/bin/cli.js.map +1 -1
  46. package/dist/database/_batch_update.d.ts +15 -0
  47. package/dist/database/_batch_update.d.ts.map +1 -0
  48. package/dist/database/_batch_update.js +2 -0
  49. package/dist/database/_batch_update.js.map +1 -0
  50. package/dist/database/base-model.d.ts +41 -0
  51. package/dist/database/base-model.d.ts.map +1 -0
  52. package/dist/database/base-model.js +2 -0
  53. package/dist/database/base-model.js.map +1 -0
  54. package/dist/database/code-generator.d.ts +13 -0
  55. package/dist/database/code-generator.d.ts.map +1 -0
  56. package/dist/database/code-generator.js +2 -0
  57. package/dist/database/code-generator.js.map +1 -0
  58. package/dist/database/db.d.ts +40 -0
  59. package/dist/database/db.d.ts.map +1 -0
  60. package/dist/database/db.js +2 -0
  61. package/dist/database/db.js.map +1 -0
  62. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +2 -0
  63. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +1 -0
  64. package/dist/database/knex-plugins/knex-on-duplicate-update.js +2 -0
  65. package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +1 -0
  66. package/dist/database/puri-wrapper.d.ts +34 -0
  67. package/dist/database/puri-wrapper.d.ts.map +1 -0
  68. package/dist/database/puri-wrapper.js +2 -0
  69. package/dist/database/puri-wrapper.js.map +1 -0
  70. package/dist/database/puri.d.ts +83 -0
  71. package/dist/database/puri.d.ts.map +1 -0
  72. package/dist/database/puri.js +2 -0
  73. package/dist/database/puri.js.map +1 -0
  74. package/dist/database/puri.types.d.ts +60 -0
  75. package/dist/database/puri.types.d.ts.map +1 -0
  76. package/dist/database/puri.types.js +2 -0
  77. package/dist/database/puri.types.js.map +1 -0
  78. package/dist/database/transaction-context.d.ts +9 -0
  79. package/dist/database/transaction-context.d.ts.map +1 -0
  80. package/dist/database/transaction-context.js +2 -0
  81. package/dist/database/transaction-context.js.map +1 -0
  82. package/dist/database/types.d.ts +39 -0
  83. package/dist/database/types.d.ts.map +1 -0
  84. package/dist/database/types.js +2 -0
  85. package/dist/database/types.js.map +1 -0
  86. package/dist/database/upsert-builder.d.ts +34 -0
  87. package/dist/database/upsert-builder.d.ts.map +1 -0
  88. package/dist/database/upsert-builder.js +2 -0
  89. package/dist/database/upsert-builder.js.map +1 -0
  90. package/dist/entity/entity-manager.d.ts +32 -0
  91. package/dist/entity/entity-manager.d.ts.map +1 -0
  92. package/dist/entity/entity-manager.js +2 -0
  93. package/dist/entity/entity-manager.js.map +1 -0
  94. package/dist/entity/entity-utils.d.ts +61 -0
  95. package/dist/entity/entity-utils.d.ts.map +1 -0
  96. package/dist/entity/entity-utils.js +2 -0
  97. package/dist/entity/entity-utils.js.map +1 -0
  98. package/dist/entity/entity.d.ts +62 -0
  99. package/dist/entity/entity.d.ts.map +1 -0
  100. package/dist/entity/entity.js +2 -0
  101. package/dist/entity/entity.js.map +1 -0
  102. package/dist/entity/migrator.d.ts +135 -0
  103. package/dist/entity/migrator.d.ts.map +1 -0
  104. package/dist/entity/migrator.js +2 -0
  105. package/dist/entity/migrator.js.map +1 -0
  106. package/dist/exceptions/error-handler.d.ts +3 -0
  107. package/dist/exceptions/error-handler.d.ts.map +1 -0
  108. package/dist/exceptions/error-handler.js +2 -0
  109. package/dist/exceptions/error-handler.js.map +1 -0
  110. package/dist/exceptions/so-exceptions.d.ts +48 -0
  111. package/dist/exceptions/so-exceptions.d.ts.map +1 -0
  112. package/dist/exceptions/so-exceptions.js +2 -0
  113. package/dist/exceptions/so-exceptions.js.map +1 -0
  114. package/dist/file-storage/driver.d.ts +45 -0
  115. package/dist/file-storage/driver.d.ts.map +1 -0
  116. package/dist/file-storage/driver.js +2 -0
  117. package/dist/file-storage/driver.js.map +1 -0
  118. package/dist/file-storage/file-storage.d.ts +50 -0
  119. package/dist/file-storage/file-storage.d.ts.map +1 -0
  120. package/dist/file-storage/file-storage.js +2 -0
  121. package/dist/file-storage/file-storage.js.map +1 -0
  122. package/dist/index.d.ts +22 -813
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +1 -433
  125. package/dist/index.js.map +1 -1
  126. package/dist/migration/code-generation.d.ts +15 -0
  127. package/dist/migration/code-generation.d.ts.map +1 -0
  128. package/dist/migration/code-generation.js +2 -0
  129. package/dist/migration/code-generation.js.map +1 -0
  130. package/dist/migration/migration-set.d.ts +17 -0
  131. package/dist/migration/migration-set.d.ts.map +1 -0
  132. package/dist/migration/migration-set.js +2 -0
  133. package/dist/migration/migration-set.js.map +1 -0
  134. package/dist/migration/migrator.d.ts +130 -0
  135. package/dist/migration/migrator.d.ts.map +1 -0
  136. package/dist/migration/migrator.js +2 -0
  137. package/dist/migration/migrator.js.map +1 -0
  138. package/dist/migration/types.d.ts +52 -0
  139. package/dist/migration/types.d.ts.map +1 -0
  140. package/dist/migration/types.js +2 -0
  141. package/dist/migration/types.js.map +1 -0
  142. package/dist/smd/smd-manager.d.ts +28 -0
  143. package/dist/smd/smd-manager.d.ts.map +1 -0
  144. package/dist/smd/smd-manager.js +2 -0
  145. package/dist/smd/smd-manager.js.map +1 -0
  146. package/dist/smd/smd.d.ts +40 -0
  147. package/dist/smd/smd.d.ts.map +1 -0
  148. package/dist/smd/smd.js +2 -0
  149. package/dist/smd/smd.js.map +1 -0
  150. package/dist/syncer/index.d.ts +2 -0
  151. package/dist/syncer/index.d.ts.map +1 -0
  152. package/dist/syncer/index.js +2 -0
  153. package/dist/syncer/index.js.map +1 -0
  154. package/dist/syncer/syncer.d.ts +127 -0
  155. package/dist/syncer/syncer.d.ts.map +1 -0
  156. package/dist/syncer/syncer.js +2 -0
  157. package/dist/syncer/syncer.js.map +1 -0
  158. package/dist/templates/base-template.d.ts +13 -0
  159. package/dist/templates/base-template.d.ts.map +1 -0
  160. package/dist/templates/base-template.js +2 -0
  161. package/dist/templates/base-template.js.map +1 -0
  162. package/dist/templates/entity.template.d.ts +17 -0
  163. package/dist/templates/entity.template.d.ts.map +1 -0
  164. package/dist/templates/entity.template.js +2 -0
  165. package/dist/templates/entity.template.js.map +1 -0
  166. package/dist/templates/generated.template.d.ts +27 -0
  167. package/dist/templates/generated.template.d.ts.map +1 -0
  168. package/dist/templates/generated.template.js +2 -0
  169. package/dist/templates/generated.template.js.map +1 -0
  170. package/dist/templates/generated_http.template.d.ts +24 -0
  171. package/dist/templates/generated_http.template.d.ts.map +1 -0
  172. package/dist/templates/generated_http.template.js +2 -0
  173. package/dist/templates/generated_http.template.js.map +1 -0
  174. package/dist/templates/generated_sso.template.d.ts +20 -0
  175. package/dist/templates/generated_sso.template.d.ts.map +1 -0
  176. package/dist/templates/generated_sso.template.js +2 -0
  177. package/dist/templates/generated_sso.template.js.map +1 -0
  178. package/dist/templates/index.d.ts +2 -0
  179. package/dist/templates/index.d.ts.map +1 -0
  180. package/dist/templates/index.js +2 -0
  181. package/dist/templates/index.js.map +1 -0
  182. package/dist/templates/init_types.template.d.ts +17 -0
  183. package/dist/templates/init_types.template.d.ts.map +1 -0
  184. package/dist/templates/init_types.template.js +2 -0
  185. package/dist/templates/init_types.template.js.map +1 -0
  186. package/dist/templates/model.template.d.ts +17 -0
  187. package/dist/templates/model.template.d.ts.map +1 -0
  188. package/dist/templates/model.template.js +2 -0
  189. package/dist/templates/model.template.js.map +1 -0
  190. package/dist/templates/model_test.template.d.ts +17 -0
  191. package/dist/templates/model_test.template.d.ts.map +1 -0
  192. package/dist/templates/model_test.template.js +2 -0
  193. package/dist/templates/model_test.template.js.map +1 -0
  194. package/dist/templates/service.template.d.ts +29 -0
  195. package/dist/templates/service.template.d.ts.map +1 -0
  196. package/dist/templates/service.template.js +2 -0
  197. package/dist/templates/service.template.js.map +1 -0
  198. package/dist/templates/view_enums_buttonset.template.d.ts +17 -0
  199. package/dist/templates/view_enums_buttonset.template.d.ts.map +1 -0
  200. package/dist/templates/view_enums_buttonset.template.js +2 -0
  201. package/dist/templates/view_enums_buttonset.template.js.map +1 -0
  202. package/dist/templates/view_enums_dropdown.template.d.ts +18 -0
  203. package/dist/templates/view_enums_dropdown.template.d.ts.map +1 -0
  204. package/dist/templates/view_enums_dropdown.template.js +2 -0
  205. package/dist/templates/view_enums_dropdown.template.js.map +1 -0
  206. package/dist/templates/view_enums_select.template.d.ts +17 -0
  207. package/dist/templates/view_enums_select.template.d.ts.map +1 -0
  208. package/dist/templates/view_enums_select.template.js +2 -0
  209. package/dist/templates/view_enums_select.template.js.map +1 -0
  210. package/dist/templates/view_form.template.d.ts +26 -0
  211. package/dist/templates/view_form.template.d.ts.map +1 -0
  212. package/dist/templates/view_form.template.js +2 -0
  213. package/dist/templates/view_form.template.js.map +1 -0
  214. package/dist/templates/view_id_all_select.template.d.ts +17 -0
  215. package/dist/templates/view_id_all_select.template.d.ts.map +1 -0
  216. package/dist/templates/view_id_all_select.template.js +2 -0
  217. package/dist/templates/view_id_all_select.template.js.map +1 -0
  218. package/dist/templates/view_id_async_select.template.d.ts +17 -0
  219. package/dist/templates/view_id_async_select.template.d.ts.map +1 -0
  220. package/dist/templates/view_id_async_select.template.js +2 -0
  221. package/dist/templates/view_id_async_select.template.js.map +1 -0
  222. package/dist/templates/view_list.template.d.ts +38 -0
  223. package/dist/templates/view_list.template.d.ts.map +1 -0
  224. package/dist/templates/view_list.template.js +2 -0
  225. package/dist/templates/view_list.template.js.map +1 -0
  226. package/dist/templates/view_list_columns.template.d.ts +17 -0
  227. package/dist/templates/view_list_columns.template.d.ts.map +1 -0
  228. package/dist/templates/view_list_columns.template.js +2 -0
  229. package/dist/templates/view_list_columns.template.js.map +1 -0
  230. package/dist/templates/view_search_input.template.d.ts +17 -0
  231. package/dist/templates/view_search_input.template.d.ts.map +1 -0
  232. package/dist/templates/view_search_input.template.js +2 -0
  233. package/dist/templates/view_search_input.template.js.map +1 -0
  234. package/dist/testing/_relation-graph.d.ts +7 -0
  235. package/dist/testing/_relation-graph.d.ts.map +1 -0
  236. package/dist/testing/_relation-graph.js +2 -0
  237. package/dist/testing/_relation-graph.js.map +1 -0
  238. package/dist/testing/fixture-manager.d.ts +35 -0
  239. package/dist/testing/fixture-manager.d.ts.map +1 -0
  240. package/dist/testing/fixture-manager.js +2 -0
  241. package/dist/testing/fixture-manager.js.map +1 -0
  242. package/dist/types/types.d.ts +609 -0
  243. package/dist/types/types.d.ts.map +1 -0
  244. package/dist/types/types.js +2 -0
  245. package/dist/types/types.js.map +1 -0
  246. package/dist/typings/knex.d.js +2 -0
  247. package/dist/typings/knex.d.js.map +1 -0
  248. package/dist/utils/async-utils.d.ts +25 -0
  249. package/dist/utils/async-utils.d.ts.map +1 -0
  250. package/dist/utils/async-utils.js +2 -0
  251. package/dist/utils/async-utils.js.map +1 -0
  252. package/dist/utils/controller.d.ts +9 -0
  253. package/dist/utils/controller.d.ts.map +1 -0
  254. package/dist/utils/controller.js +2 -0
  255. package/dist/utils/controller.js.map +1 -0
  256. package/dist/utils/fs-utils.d.ts +9 -0
  257. package/dist/utils/fs-utils.d.ts.map +1 -0
  258. package/dist/utils/fs-utils.js +2 -0
  259. package/dist/utils/fs-utils.js.map +1 -0
  260. package/dist/utils/lodash-able.d.ts +2 -0
  261. package/dist/utils/lodash-able.d.ts.map +1 -0
  262. package/dist/utils/lodash-able.js +2 -0
  263. package/dist/utils/lodash-able.js.map +1 -0
  264. package/dist/utils/model.d.ts +17 -0
  265. package/dist/utils/model.d.ts.map +1 -0
  266. package/dist/utils/model.js +2 -0
  267. package/dist/utils/model.js.map +1 -0
  268. package/dist/utils/sql-parser.d.ts +4 -0
  269. package/dist/utils/sql-parser.d.ts.map +1 -0
  270. package/dist/utils/sql-parser.js +2 -0
  271. package/dist/utils/sql-parser.js.map +1 -0
  272. package/dist/utils/utils.d.ts +9 -0
  273. package/dist/utils/utils.d.ts.map +1 -0
  274. package/dist/utils/utils.js +2 -0
  275. package/dist/utils/utils.js.map +1 -0
  276. package/dist/utils/zod-error.d.ts +8 -0
  277. package/dist/utils/zod-error.d.ts.map +1 -0
  278. package/dist/utils/zod-error.js +2 -0
  279. package/dist/utils/zod-error.js.map +1 -0
  280. package/nodemon.json +6 -0
  281. package/package.json +29 -44
  282. package/src/api/base-frame.ts +3 -4
  283. package/src/api/caster.ts +22 -23
  284. package/src/api/code-converters.ts +170 -134
  285. package/src/api/context.ts +13 -6
  286. package/src/api/decorators.ts +146 -20
  287. package/src/api/index.ts +2 -0
  288. package/src/api/sonamu.ts +374 -165
  289. package/src/bin/build-config.ts +5 -0
  290. package/src/bin/cli-wrapper.ts +29 -40
  291. package/src/bin/cli.ts +132 -190
  292. package/src/database/_batch_update.ts +10 -15
  293. package/src/database/base-model.ts +300 -216
  294. package/src/database/db.ts +191 -21
  295. package/src/database/{drivers/knex/plugins → knex-plugins}/knex-on-duplicate-update.ts +1 -1
  296. package/src/database/puri-wrapper.ts +129 -0
  297. package/src/database/puri.ts +808 -0
  298. package/src/database/puri.types.ts +222 -0
  299. package/src/database/transaction-context.ts +18 -0
  300. package/src/database/upsert-builder.ts +32 -35
  301. package/src/entity/entity-manager.ts +7 -15
  302. package/src/entity/entity.ts +9 -31
  303. package/src/entity/migrator-/354/235/264/354/202/254/352/260/224/354/226/264/354/232/224.md +1 -0
  304. package/src/file-storage/driver.ts +121 -0
  305. package/src/file-storage/file-storage.ts +100 -0
  306. package/src/index.ts +14 -11
  307. package/src/migration/code-generation.ts +777 -0
  308. package/src/migration/migration-set.ts +453 -0
  309. package/src/migration/migrator.ts +823 -0
  310. package/src/migration/types.ts +53 -0
  311. package/src/shared/web.shared.ts.txt +33 -2
  312. package/src/syncer/syncer.ts +294 -127
  313. package/src/templates/generated.template.ts +13 -1
  314. package/src/templates/generated_http.template.ts +15 -12
  315. package/src/templates/generated_sso.template.ts +50 -2
  316. package/src/templates/model.template.ts +138 -2
  317. package/src/templates/service.template.ts +0 -1
  318. package/src/templates/view_form.template.ts +11 -7
  319. package/src/templates/view_list.template.ts +12 -4
  320. package/src/testing/fixture-manager.ts +229 -174
  321. package/src/types/types.ts +102 -14
  322. package/src/utils/async-utils.ts +64 -0
  323. package/src/utils/fs-utils.ts +17 -0
  324. package/src/utils/model.ts +0 -2
  325. package/src/utils/utils.ts +14 -58
  326. package/src/utils/zod-error.ts +12 -176
  327. package/tsconfig.json +2 -0
  328. package/tsup.config.js +4 -2
  329. package/.pnp.cjs +0 -14363
  330. package/.pnp.loader.mjs +0 -2047
  331. package/.vscode/extensions.json +0 -6
  332. package/.vscode/settings.json +0 -9
  333. package/.yarnrc.yml +0 -5
  334. package/src/database/base-model.abstract.ts +0 -97
  335. package/src/database/db.abstract.ts +0 -75
  336. package/src/database/drivers/knex/base-model.ts +0 -55
  337. package/src/database/drivers/knex/client.ts +0 -209
  338. package/src/database/drivers/knex/db.ts +0 -232
  339. package/src/database/drivers/knex/generator.ts +0 -659
  340. package/src/database/drivers/kysely/base-model.ts +0 -89
  341. package/src/database/drivers/kysely/client.ts +0 -309
  342. package/src/database/drivers/kysely/db.ts +0 -238
  343. package/src/database/drivers/kysely/generator.ts +0 -714
  344. package/src/database/types.ts +0 -118
  345. package/src/entity/migrator.ts +0 -1400
  346. package/src/smd/smd-manager.ts +0 -139
  347. package/src/smd/smd.ts +0 -571
  348. package/src/templates/kysely_types.template.ts +0 -205
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/types/types.ts"],"sourcesContent":["import type { GuardKey } from \"./../api/decorators\";\nimport type { FastifyCorsOptions } from \"@fastify/cors\";\nimport type { FastifyFormbodyOptions } from \"@fastify/formbody\";\nimport type {\n FastifyInstance,\n FastifyReply,\n FastifyRequest,\n FastifyServerOptions,\n} from \"fastify\";\nimport type { QsPluginOptions } from \"fastify-qs\";\nimport { z } from \"zod\";\nimport type { Context, ApiDecoratorOptions } from \"../api\";\nimport type { FastifyMultipartOptions } from \"@fastify/multipart\";\nimport type { Driver } from \"../file-storage/driver\";\n\n/*\n Enums\n*/\nexport type EnumsLabel<T extends string, L extends \"ko\" | \"en\"> = {\n [key in T]: { [lang in L]: string };\n};\nexport type EnumsLabelKo<T extends string> = EnumsLabel<T, \"ko\">;\n\n/*\n Custom Scalars\n*/\nexport const SQLDateTimeString = z\n .string()\n .regex(/([0-9]{4}-[0-9]{2}-[0-9]{2}( [0-9]{2}:[0-9]{2}:[0-9]{2})*)$/, {\n message: \"잘못된 SQLDate 타입\",\n })\n .min(10)\n .max(19)\n .describe(\"SQLDateTimeString\");\nexport type SQLDateTimeString = z.infer<typeof SQLDateTimeString>;\n\n/*\n Utility Types\n*/\nexport function zArrayable<T extends z.ZodTypeAny>(\n shape: T\n): z.ZodUnion<[T, z.ZodArray<T>]> {\n return z.union([shape, shape.array()]);\n}\nexport type DistributiveOmit<T, K extends keyof any> = T extends any\n ? Omit<T, K>\n : never;\n\n/*\n Model-Defintion\n*/\nexport type CommonProp = {\n name: string;\n nullable?: boolean;\n toFilter?: true;\n desc?: string;\n dbDefault?: string;\n};\nexport type IntegerProp = CommonProp & {\n type: \"integer\";\n unsigned?: true;\n};\nexport type BigIntegerProp = CommonProp & {\n type: \"bigInteger\";\n unsigned?: true;\n};\nexport type TextProp = CommonProp & {\n type: \"text\";\n textType: \"text\" | \"mediumtext\" | \"longtext\";\n};\nexport type StringProp = CommonProp & {\n type: \"string\";\n length: number;\n};\nexport type EnumProp = CommonProp & {\n type: \"enum\";\n length: number;\n id: string;\n};\nexport type FloatProp = CommonProp & {\n type: \"float\";\n unsigned?: true;\n precision: number;\n scale: number;\n};\nexport type DoubleProp = CommonProp & {\n type: \"double\";\n unsigned?: true;\n precision: number;\n scale: number;\n};\nexport type DecimalProp = CommonProp & {\n type: \"decimal\";\n unsigned?: true;\n precision: number;\n scale: number;\n};\nexport type BooleanProp = CommonProp & {\n type: \"boolean\";\n};\nexport type DateProp = CommonProp & {\n type: \"date\";\n};\nexport type DateTimeProp = CommonProp & {\n type: \"datetime\";\n};\nexport type TimeProp = CommonProp & {\n type: \"time\";\n};\nexport type TimestampProp = CommonProp & {\n type: \"timestamp\";\n};\nexport type JsonProp = CommonProp & {\n type: \"json\";\n id: string;\n};\nexport type UuidProp = CommonProp & {\n type: \"uuid\";\n};\nexport type VirtualProp = CommonProp & {\n type: \"virtual\";\n id: string;\n};\n\nexport type RelationType =\n | \"HasMany\"\n | \"BelongsToOne\"\n | \"ManyToMany\"\n | \"OneToOne\";\nexport type RelationOn =\n | \"CASCADE\"\n | \"SET NULL\"\n | \"NO ACTION\"\n | \"SET DEFAULT\"\n | \"RESTRICT\";\ntype _RelationProp = {\n type: \"relation\";\n name: string;\n with: string;\n nullable?: boolean; // DEFAULT: false\n toFilter?: true; // DEFAULT: false\n desc?: string;\n};\nexport type OneToOneRelationProp = _RelationProp & {\n relationType: \"OneToOne\";\n customJoinClause?: string;\n} & (\n | {\n hasJoinColumn: true;\n useConstraint?: boolean; // DEFAULT: true\n onUpdate?: RelationOn; // DEFAULT: RESTRICT\n onDelete?: RelationOn; // DEFAULT: RESTRICT\n }\n | {\n hasJoinColumn: false;\n }\n );\nexport type BelongsToOneRelationProp = _RelationProp & {\n relationType: \"BelongsToOne\";\n customJoinClause?: string;\n useConstraint?: boolean; // DEFAULT: true\n onUpdate?: RelationOn; // DEFAULT: RESTRICT\n onDelete?: RelationOn; // DEFAULT: RESTRICT\n};\nexport type HasManyRelationProp = _RelationProp & {\n relationType: \"HasMany\";\n joinColumn: string;\n fromColumn?: string;\n};\nexport type ManyToManyRelationProp = _RelationProp & {\n relationType: \"ManyToMany\";\n joinTable: `${string}__${string}`;\n onUpdate: RelationOn;\n onDelete: RelationOn;\n};\nexport type RelationProp =\n | OneToOneRelationProp\n | BelongsToOneRelationProp\n | HasManyRelationProp\n | ManyToManyRelationProp;\n\nexport type EntityProp =\n | IntegerProp\n | BigIntegerProp\n | TextProp\n | StringProp\n | FloatProp\n | DoubleProp\n | DecimalProp\n | BooleanProp\n | DateProp\n | DateTimeProp\n | TimeProp\n | TimestampProp\n | JsonProp\n | UuidProp\n | EnumProp\n | VirtualProp\n | RelationProp;\n\nexport type EntityIndex = {\n type: \"index\" | \"unique\" | \"fulltext\";\n columns: string[];\n name?: string;\n parser?: \"built-in\" | \"ngram\";\n};\nexport type EntityJson = {\n id: string;\n parentId?: string;\n table: string;\n title?: string;\n props: EntityProp[];\n indexes: EntityIndex[];\n subsets: {\n [subset: string]: string[];\n };\n enums: {\n [enumId: string]: {\n [key: string]: string;\n };\n };\n};\nexport type EntitySubsetRow = {\n field: string;\n has: {\n [key: string]: boolean;\n };\n children: EntitySubsetRow[];\n prefixes: string[];\n relationEntity?: string;\n isOpen?: boolean;\n};\nexport type FlattenSubsetRow = Omit<EntitySubsetRow, \"children\">;\n\n// SMD Legacy\nexport type SMDInput<T extends string> = {\n id: string;\n parentId?: string;\n table?: string;\n title?: string;\n props?: EntityProp[];\n indexes?: EntityIndex[];\n subsets?: {\n [subset: string]: T[];\n };\n};\n\n/*\n PropNode\n*/\n\nexport type EntityPropNode =\n | {\n nodeType: \"plain\";\n prop: EntityProp;\n }\n | {\n nodeType: \"object\" | \"array\";\n prop?: EntityProp;\n children: EntityPropNode[];\n };\n\n/*\n Prop Type Guards\n*/\nexport function isIntegerProp(p: any): p is IntegerProp {\n return p?.type === \"integer\";\n}\nexport function isBigIntegerProp(p: any): p is BigIntegerProp {\n return p?.type === \"bigInteger\";\n}\nexport function isTextProp(p: any): p is TextProp {\n return p?.type === \"text\";\n}\nexport function isStringProp(p: any): p is StringProp {\n return p?.type === \"string\";\n}\nexport function isEnumProp(p: any): p is EnumProp {\n return p?.type === \"enum\";\n}\nexport function isFloatProp(p: any): p is FloatProp {\n return p?.type === \"float\";\n}\nexport function isDoubleProp(p: any): p is DoubleProp {\n return p?.type === \"double\";\n}\nexport function isDecimalProp(p: any): p is DecimalProp {\n return p?.type === \"decimal\";\n}\nexport function isBooleanProp(p: any): p is BooleanProp {\n return p?.type === \"boolean\";\n}\nexport function isDateProp(p: any): p is DateProp {\n return p?.type === \"date\";\n}\nexport function isDateTimeProp(p: any): p is DateTimeProp {\n return p?.type === \"datetime\";\n}\nexport function isTimeProp(p: any): p is TimeProp {\n return p?.type === \"time\";\n}\nexport function isTimestampProp(p: any): p is TimestampProp {\n return p?.type === \"timestamp\";\n}\nexport function isJsonProp(p: any): p is JsonProp {\n return p?.type === \"json\";\n}\nexport function isUuidProp(p: any): p is UuidProp {\n return p?.type === \"uuid\";\n}\nexport function isVirtualProp(p: any): p is VirtualProp {\n return p?.type === \"virtual\";\n}\nexport function isRelationProp(p: any): p is RelationProp {\n return p?.type === \"relation\";\n}\nexport function isOneToOneRelationProp(p: any): p is OneToOneRelationProp {\n return p?.relationType === \"OneToOne\";\n}\nexport function isBelongsToOneRelationProp(\n p: any\n): p is BelongsToOneRelationProp {\n return p?.relationType === \"BelongsToOne\";\n}\nexport function isHasManyRelationProp(p: any): p is HasManyRelationProp {\n return p?.relationType === \"HasMany\";\n}\nexport function isManyToManyRelationProp(p: any): p is ManyToManyRelationProp {\n return p?.relationType === \"ManyToMany\";\n}\n\ntype JoinClause =\n | {\n from: string;\n to: string;\n }\n | {\n custom: string;\n };\nexport function isCustomJoinClause(p: any): p is { custom: string } {\n return p?.custom;\n}\n\n/* 서브셋 */\n// type SubsetLoader = {\n// as: string;\n// table: string;\n// manyJoin: {\n// fromTable: string;\n// fromCol: string;\n// idField: string;\n// toTable: string;\n// toCol: string;\n// through?: {\n// table: string;\n// fromCol: string;\n// toCol: string;\n// };\n// };\n// oneJoins: ({\n// as: string;\n// join: \"inner\" | \"outer\";\n// table: string;\n// } & JoinClause)[];\n// select: (string | Knex.Raw)[];\n// loaders?: SubsetLoader[];\n// };\n// export type SubsetQuery = {\n// select: (string | Knex.Raw)[];\n// virtual: string[];\n// joins: ({\n// as: string;\n// join: \"inner\" | \"outer\";\n// table: string;\n// } & JoinClause)[];\n// loaders: SubsetLoader[];\n// };\n\ntype SubsetLoader = {\n as: string;\n table: string;\n manyJoin: {\n fromTable: string;\n fromCol: string;\n idField: string;\n toTable: string;\n toCol: string;\n through?: {\n table: string;\n fromCol: string;\n toCol: string;\n };\n };\n oneJoins: ({\n as: string;\n join: \"inner\" | \"outer\";\n table: string;\n } & JoinClause)[];\n select: string[];\n loaders?: SubsetLoader[];\n};\n\nexport type SubsetQuery = {\n select: string[];\n virtual: string[];\n joins: ({\n as: string;\n join: \"inner\" | \"outer\";\n table: string;\n } & JoinClause)[];\n loaders: SubsetLoader[];\n};\n\n/* BaseModel */\nexport const SonamuQueryMode = z.enum([\"both\", \"list\", \"count\"]);\nexport type SonamuQueryMode = z.infer<typeof SonamuQueryMode>;\n\n/* Knex Migration */\nexport type KnexError = {\n code: string;\n errno: number;\n sql: string;\n sqlMessage: string;\n sqlState: string;\n};\nexport function isKnexError(e: any): e is KnexError {\n return e.code && e.sqlMessage && e.sqlState;\n}\n\nexport type KnexColumnType =\n | \"string\"\n | \"text\"\n | \"smalltext\"\n | \"mediumtext\"\n | \"longtext\"\n | \"integer\"\n | \"bigInteger\"\n | \"decimal\"\n | \"timestamp\"\n | \"boolean\"\n | \"foreign\"\n | \"uuid\"\n | \"json\"\n | \"float\"\n | \"date\"\n | \"time\"\n | \"datetime\";\nexport type MigrationColumn = {\n name: string;\n type: KnexColumnType;\n nullable: boolean;\n unsigned?: boolean;\n length?: number;\n defaultTo?: string;\n precision?: number;\n scale?: number;\n};\nexport type MigrationIndex = {\n columns: string[];\n type: \"unique\" | \"index\" | \"fulltext\";\n parser?: \"built-in\" | \"ngram\";\n};\nexport type MigrationForeign = {\n columns: string[];\n to: string;\n onUpdate: RelationOn;\n onDelete: RelationOn;\n};\nexport type MigrationJoinTable = {\n table: string;\n indexes: MigrationIndex[];\n columns: MigrationColumn[];\n foreigns: MigrationForeign[];\n};\nexport type MigrationSet = {\n table: string;\n columns: MigrationColumn[];\n indexes: MigrationIndex[];\n foreigns: MigrationForeign[];\n};\nexport type MigrationSetAndJoinTable = MigrationSet & {\n joinTables: MigrationJoinTable[];\n};\nexport type GenMigrationCode = {\n title: string;\n table: string;\n type: \"normal\" | \"foreign\";\n formatted: string | null;\n};\n\n/* Api */\nexport type ApiParam = {\n name: string;\n type: ApiParamType;\n optional: boolean;\n defaultDef?: string;\n};\nexport namespace ApiParamType {\n export type Object = {\n t: \"object\";\n props: ApiParam[];\n };\n export type Union = {\n t: \"union\";\n types: ApiParamType[];\n };\n export type Intersection = {\n t: \"intersection\";\n types: ApiParamType[];\n };\n export type StringLiteral = {\n t: \"string-literal\";\n value: string;\n };\n export type NumericLiteral = {\n t: \"numeric-literal\";\n value: number;\n };\n export type Array = {\n t: \"array\";\n elementsType: ApiParamType;\n };\n export type Ref = {\n t: \"ref\";\n id: string;\n args?: ApiParamType[];\n };\n export type IndexedAccess = {\n t: \"indexed-access\";\n object: ApiParamType;\n index: ApiParamType;\n };\n export type TupleType = {\n t: \"tuple-type\";\n elements: ApiParamType[];\n };\n export type Pick = Ref & {\n t: \"ref\";\n id: \"Pick\";\n };\n export type Omit = Ref & {\n t: \"ref\";\n id: \"Omit\";\n };\n export type Partial = Ref & {\n t: \"ref\";\n id: \"Partial\";\n };\n export type Promise = Ref & {\n t: \"ref\";\n id: \"Promise\";\n };\n export type Context = Ref & {\n t: \"ref\";\n id: \"Context\";\n };\n export type TypeParam = {\n t: \"type-param\";\n id: string;\n constraint?: ApiParamType;\n };\n\n export function isObject(v: any): v is ApiParamType.Object {\n return v?.t === \"object\";\n }\n export function isUnion(v: any): v is ApiParamType.Union {\n return v?.t === \"union\";\n }\n export function isIntersection(v: any): v is ApiParamType.Intersection {\n return v?.t === \"intersection\";\n }\n export function isStringLiteral(v: any): v is ApiParamType.StringLiteral {\n return v?.t === \"string-literal\";\n }\n export function isNumericLiteral(v: any): v is ApiParamType.NumericLiteral {\n return v?.t === \"numeric-literal\";\n }\n export function isArray(v: any): v is ApiParamType.Array {\n return v?.t === \"array\";\n }\n export function isRef(v: any): v is ApiParamType.Ref {\n return v?.t === \"ref\";\n }\n export function isIndexedAccess(v: any): v is ApiParamType.IndexedAccess {\n return v?.t === \"indexed-access\";\n }\n export function isTupleType(v: any): v is ApiParamType.TupleType {\n return v?.t === \"tuple-type\";\n }\n export function isPick(v: any): v is ApiParamType.Pick {\n return v?.t === \"ref\" && v.id === \"Pick\";\n }\n export function isOmit(v: any): v is ApiParamType.Omit {\n return v?.t === \"ref\" && v.id === \"Omit\";\n }\n export function isPartial(v: any): v is ApiParamType.Partial {\n return v?.t === \"ref\" && v.id === \"Partial\";\n }\n export function isPromise(v: any): v is ApiParamType.Promise {\n return v?.t === \"ref\" && v.id === \"Promise\";\n }\n export function isContext(v: any): v is ApiParamType.Context {\n return v?.t === \"ref\" && v.id === \"Context\";\n }\n export function isRefKnex(v: any): v is ApiParamType.Ref {\n return v?.t === \"ref\" && v.id === \"Knex\";\n }\n export function isTypeParam(v: any): v is ApiParamType.TypeParam {\n return v?.t === \"type-param\";\n }\n}\nexport type ApiParamType =\n | \"string\"\n | \"number\"\n | \"boolean\"\n | \"null\"\n | \"undefined\"\n | \"void\"\n | \"any\"\n | \"unknown\"\n | \"true\"\n | \"false\"\n | ApiParamType.StringLiteral\n | ApiParamType.NumericLiteral\n | ApiParamType.Object\n | ApiParamType.Union\n | ApiParamType.Intersection\n | ApiParamType.Array\n | ApiParamType.Ref\n | ApiParamType.IndexedAccess\n | ApiParamType.TypeParam\n | ApiParamType.TupleType;\n\n/* Template */\n// 셀프 참조 타입이므로 Zod 생략하고 직접 정의\nexport const RenderingNode = z.any();\nexport type RenderingNode = {\n name: string;\n label: string;\n renderType:\n | \"string-plain\"\n | \"string-image\"\n | \"string-datetime\"\n | \"string-date\"\n | \"datetime\"\n | \"number-plain\"\n | \"number-id\"\n | \"number-fk_id\"\n | \"boolean\"\n | \"enums\"\n | \"array\"\n | \"array-images\"\n | \"object\"\n | \"object-pick\"\n | \"record\";\n zodType: z.ZodTypeAny;\n element?: RenderingNode;\n children?: RenderingNode[];\n config?: {\n picked: string;\n };\n optional?: boolean;\n nullable?: boolean;\n};\n\nexport const TemplateOptions = z.object({\n entity: z.object({\n entityId: z.string(),\n parentId: z.string().optional(),\n title: z.string(),\n table: z.string().optional(),\n props: z.array(z.object({})).optional(),\n indexes: z.array(z.object({})).optional(),\n subsets: z.object({}).optional(),\n enums: z.object({}).optional(),\n }),\n init_types: z.object({\n entityId: z.string(),\n }),\n generated: z.object({}),\n generated_sso: z.object({}),\n generated_http: z.object({\n entityId: z.string(),\n }),\n model: z.object({\n entityId: z.string(),\n defaultSearchField: z.string(),\n defaultOrderBy: z.string(),\n }),\n model_test: z.object({\n entityId: z.string(),\n }),\n bridge: z.object({\n entityId: z.string(),\n }),\n service: z.object({\n namesRecord: z.object({\n fs: z.string(),\n fsPlural: z.string(),\n camel: z.string(),\n camelPlural: z.string(),\n capital: z.string(),\n capitalPlural: z.string(),\n upper: z.string(),\n constant: z.string(),\n }),\n modelTsPath: z.string(),\n }),\n view_list: z.object({\n entityId: z.string(),\n extra: z.unknown(),\n }),\n view_list_columns: z.object({\n entityId: z.string(),\n columns: z\n .object({\n name: z.string(),\n label: z.string(),\n tc: z.string(),\n })\n .array(),\n columnImports: z.string(),\n }),\n view_search_input: z.object({\n entityId: z.string(),\n }),\n view_form: z.object({\n entityId: z.string(),\n }),\n view_id_all_select: z.object({\n entityId: z.string(),\n }),\n view_id_async_select: z.object({\n entityId: z.string(),\n textField: z.string(),\n }),\n view_enums_select: z.object({\n entityId: z.string(),\n enumId: z.string(),\n }),\n view_enums_dropdown: z.object({\n entityId: z.string(),\n enumId: z.string(),\n }),\n view_enums_buttonset: z.object({\n entityId: z.string(),\n enumId: z.string(),\n }),\n});\nexport type TemplateOptions = z.infer<typeof TemplateOptions>;\n\nexport const TemplateKey = z.enum([\n \"entity\",\n \"init_types\",\n \"generated\",\n \"generated_sso\",\n \"generated_http\",\n \"model\",\n \"model_test\",\n \"bridge\",\n \"service\",\n \"view_list\",\n \"view_list_columns\",\n \"view_search_input\",\n \"view_form\",\n \"view_id_all_select\",\n \"view_id_async_select\",\n \"view_enums_select\",\n \"view_enums_dropdown\",\n \"view_enums_buttonset\",\n]);\nexport type TemplateKey = z.infer<typeof TemplateKey>;\n\nexport const GenerateOptions = z.object({\n overwrite: z.boolean().optional(),\n});\nexport type GenerateOptions = z.infer<typeof GenerateOptions>;\n\nexport const PathAndCode = z.object({\n path: z.string(),\n code: z.string(),\n});\nexport type PathAndCode = z.infer<typeof PathAndCode>;\n\nexport type FixtureSearchOptions = {\n entityId: string;\n field: string;\n value: string;\n searchType: \"equals\" | \"like\";\n};\n\nexport type FixtureRecord = {\n fixtureId: string;\n entityId: string;\n id: number;\n columns: {\n [key: string]: {\n prop: EntityProp;\n value: any;\n };\n };\n fetchedRecords: string[];\n belongsRecords: string[];\n target?: FixtureRecord; // Import 대상 DB 레코드(id가 같은)\n unique?: FixtureRecord; // Import 대상 DB 레코드(unique key가 같은)\n override?: boolean;\n};\n\nexport type FixtureImportResult = {\n entityId: string;\n data: {\n [key: string]: any;\n };\n};\n\nexport type RelationNode = {\n fixtureId: string;\n entityId: string;\n related: Set<string>;\n};\n\nexport interface DatabaseSchemaExtend {}\nexport type ManyToManyBaseSchema<\n FromIdKey extends string,\n ToIdKey extends string\n> = {\n id: number;\n} & {\n [K in `${FromIdKey}_id`]: number;\n} & {\n [K in `${ToIdKey}_id`]: number;\n};\n\nexport type SonamuFastifyConfig = {\n contextProvider: (\n defaultContext: Pick<Context, \"request\" | \"reply\" | \"headers\">,\n request: FastifyRequest,\n reply: FastifyReply\n ) => Context;\n guardHandler: (\n guard: GuardKey,\n request: FastifyRequest,\n api: {\n typeParameters: ApiParamType.TypeParam[];\n parameters: ApiParam[];\n returnType: ApiParamType;\n modelName: string;\n methodName: string;\n path: string;\n options: ApiDecoratorOptions;\n }\n ) => void;\n cache?: {\n get: (key: string) => Promise<unknown | null>;\n put: (key: string, value: unknown, ttl?: number) => Promise<void>;\n resolveKey: (\n path: string,\n reqBody: {\n [key: string]: unknown;\n }\n ) =>\n | {\n cache: false;\n }\n | {\n cache: true;\n key: string;\n ttl?: number;\n };\n };\n};\n\nexport type SonamuServerOptions = {\n fastify?: FastifyServerOptions;\n\n listen?: {\n port: number;\n host?: string;\n };\n\n plugins?: {\n formbody?: boolean | FastifyFormbodyOptions;\n qs?: boolean | QsPluginOptions;\n cors?: boolean | FastifyCorsOptions;\n multipart?: boolean | FastifyMultipartOptions;\n custom?: (server: FastifyInstance) => void;\n };\n\n apiConfig: SonamuFastifyConfig;\n\n storage?: Driver;\n\n lifecycle?: {\n onStart?: (server: FastifyInstance) => Promise<void> | void;\n onShutdown?: (server: FastifyInstance) => Promise<void> | void;\n onError?: (\n error: Error,\n request: FastifyRequest,\n reply: FastifyReply\n ) => Promise<void> | void;\n };\n};\n"],"names":["GenerateOptions","PathAndCode","RenderingNode","SQLDateTimeString","SonamuQueryMode","TemplateKey","TemplateOptions","isBelongsToOneRelationProp","isBigIntegerProp","isBooleanProp","isCustomJoinClause","isDateProp","isDateTimeProp","isDecimalProp","isDoubleProp","isEnumProp","isFloatProp","isHasManyRelationProp","isIntegerProp","isJsonProp","isKnexError","isManyToManyRelationProp","isOneToOneRelationProp","isRelationProp","isStringProp","isTextProp","isTimeProp","isTimestampProp","isUuidProp","isVirtualProp","zArrayable","z","string","regex","message","min","max","describe","shape","union","array","p","type","relationType","custom","enum","e","code","sqlMessage","sqlState","ApiParamType","isObject","v","t","isUnion","isIntersection","isStringLiteral","isNumericLiteral","isArray","isRef","isIndexedAccess","isTupleType","isPick","id","isOmit","isPartial","isPromise","isContext","isRefKnex","isTypeParam","any","object","entity","entityId","parentId","optional","title","table","props","indexes","subsets","enums","init_types","generated","generated_sso","generated_http","model","defaultSearchField","defaultOrderBy","model_test","bridge","service","namesRecord","fs","fsPlural","camel","camelPlural","capital","capitalPlural","upper","constant","modelTsPath","view_list","extra","unknown","view_list_columns","columns","name","label","tc","columnImports","view_search_input","view_form","view_id_all_select","view_id_async_select","textField","view_enums_select","enumId","view_enums_dropdown","view_enums_buttonset","overwrite","boolean","path"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});
2
+ //# sourceMappingURL=knex.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/typings/knex.d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 비동기 조건으로 배열을 필터링합니다
3
+ * @example
4
+ * const filtered = await filterAsync([1, 2, 3], async (x) => x > 1);
5
+ */
6
+ export declare function filterAsync<T>(arr: T[], predicate: (item: T, index: number, array: T[]) => Promise<boolean>): Promise<T[]>;
7
+ /**
8
+ * 비동기 조건이 모든 요소에 대해 참인지 확인합니다
9
+ * @example
10
+ * const allValid = await everyAsync([1, 2, 3], async (x) => x > 0);
11
+ */
12
+ export declare function everyAsync<T>(arr: T[], predicate: (item: T, index: number, array: T[]) => Promise<boolean>): Promise<boolean>;
13
+ /**
14
+ * 비동기 변환 함수를 배열의 각 요소에 적용합니다
15
+ * @example
16
+ * const doubled = await mapAsync([1, 2, 3], async (x) => x * 2);
17
+ */
18
+ export declare function mapAsync<T, U>(arr: T[], mapper: (item: T, index: number, array: T[]) => Promise<U>): Promise<U[]>;
19
+ /**
20
+ * 비동기 리듀서로 배열을 축약합니다
21
+ * @example
22
+ * const sum = await reduceAsync([1, 2, 3], async (acc, x) => acc + x, 0);
23
+ */
24
+ export declare function reduceAsync<T, U>(arr: T[], reducer: (accumulator: U, currentValue: T, index: number, array: T[]) => Promise<U>, initialValue: U): Promise<U>;
25
+ //# sourceMappingURL=async-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-utils.d.ts","sourceRoot":"","sources":["../../src/utils/async-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,GAAG,EAAE,CAAC,EAAE,EACR,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,GAClE,OAAO,CAAC,CAAC,EAAE,CAAC,CAOd;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,GAAG,EAAE,CAAC,EAAE,EACR,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,GAClE,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,CAAC,EACjC,GAAG,EAAE,CAAC,EAAE,EACR,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GACzD,OAAO,CAAC,CAAC,EAAE,CAAC,CAId;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAAE,CAAC,EACpC,GAAG,EAAE,CAAC,EAAE,EACR,OAAO,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,EACnF,YAAY,EAAE,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAMZ"}
@@ -0,0 +1,2 @@
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 everyAsync(){return everyAsync},get filterAsync(){return filterAsync},get mapAsync(){return mapAsync},get reduceAsync(){return reduceAsync}});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 _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 filterAsync(arr,predicate){return _async_to_generator(function(){var results;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,Promise.all(arr.map(function(item,index){return predicate(item,index,arr).then(function(keep){return{item:item,keep:keep}})}))];case 1:results=_state.sent();return[2,results.filter(function(r){return r.keep}).map(function(r){return r.item})]}})})()}function everyAsync(arr,predicate){return _async_to_generator(function(){var i;return _ts_generator(this,function(_state){switch(_state.label){case 0:i=0;_state.label=1;case 1:if(!(i<arr.length))return[3,4];return[4,predicate(arr[i],i,arr)];case 2:if(!_state.sent()){return[2,false]}_state.label=3;case 3:i++;return[3,1];case 4:return[2,true]}})})()}function mapAsync(arr,mapper){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,Promise.all(arr.map(function(item,index){return mapper(item,index,arr)}))]})})()}function reduceAsync(arr,reducer,initialValue){return _async_to_generator(function(){var accumulator,i;return _ts_generator(this,function(_state){switch(_state.label){case 0:accumulator=initialValue;i=0;_state.label=1;case 1:if(!(i<arr.length))return[3,4];return[4,reducer(accumulator,arr[i],i,arr)];case 2:accumulator=_state.sent();_state.label=3;case 3:i++;return[3,1];case 4:return[2,accumulator]}})})()}
2
+ //# sourceMappingURL=async-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/async-utils.ts"],"sourcesContent":["/**\n * 비동기 조건으로 배열을 필터링합니다\n * @example\n * const filtered = await filterAsync([1, 2, 3], async (x) => x > 1);\n */\nexport async function filterAsync<T>(\n arr: T[],\n predicate: (item: T, index: number, array: T[]) => Promise<boolean>\n): Promise<T[]> {\n const results = await Promise.all(\n arr.map((item, index) =>\n predicate(item, index, arr).then((keep) => ({ item, keep }))\n )\n );\n return results.filter((r) => r.keep).map((r) => r.item);\n}\n\n/**\n * 비동기 조건이 모든 요소에 대해 참인지 확인합니다\n * @example\n * const allValid = await everyAsync([1, 2, 3], async (x) => x > 0);\n */\nexport async function everyAsync<T>(\n arr: T[],\n predicate: (item: T, index: number, array: T[]) => Promise<boolean>\n): Promise<boolean> {\n for (let i = 0; i < arr.length; i++) {\n if (!(await predicate(arr[i], i, arr))) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * 비동기 변환 함수를 배열의 각 요소에 적용합니다\n * @example\n * const doubled = await mapAsync([1, 2, 3], async (x) => x * 2);\n */\nexport async function mapAsync<T, U>(\n arr: T[],\n mapper: (item: T, index: number, array: T[]) => Promise<U>\n): Promise<U[]> {\n return Promise.all(\n arr.map((item, index) => mapper(item, index, arr))\n );\n}\n\n/**\n * 비동기 리듀서로 배열을 축약합니다\n * @example\n * const sum = await reduceAsync([1, 2, 3], async (acc, x) => acc + x, 0);\n */\nexport async function reduceAsync<T, U>(\n arr: T[],\n reducer: (accumulator: U, currentValue: T, index: number, array: T[]) => Promise<U>,\n initialValue: U\n): Promise<U> {\n let accumulator = initialValue;\n for (let i = 0; i < arr.length; i++) {\n accumulator = await reducer(accumulator, arr[i], i, arr);\n }\n return accumulator;\n}\n"],"names":["everyAsync","filterAsync","mapAsync","reduceAsync","arr","predicate","results","Promise","all","map","item","index","then","keep","filter","r","i","length","mapper","reducer","initialValue","accumulator"],"mappings":"mPAsBsBA,oBAAAA,gBAjBAC,qBAAAA,iBAkCAC,kBAAAA,cAcAC,qBAAAA,qzDAhDf,SAAeF,YACpBG,GAAQ,CACRC,SAAmE,4CAE7DC,+EAAU,SAAMC,QAAQC,GAAG,CAC/BJ,IAAIK,GAAG,CAAC,SAACC,KAAMC,cACbN,UAAUK,KAAMC,MAAOP,KAAKQ,IAAI,CAAC,SAACC,YAAU,CAAEH,KAAAA,KAAMG,KAAAA,IAAK,eAFvDP,QAAU,cAKhB,SAAOA,QAAQQ,MAAM,CAAC,SAACC,UAAMA,EAAEF,IAAI,GAAEJ,GAAG,CAAC,SAACM,UAAMA,EAAEL,IAAI,MACxD,KAOO,SAAeV,WACpBI,GAAQ,CACRC,SAAmE,4CAE1DW,yEAAAA,EAAI,4BAAGA,CAAAA,EAAIZ,IAAIa,MAAM,AAAD,cACrB,SAAMZ,UAAUD,GAAG,CAACY,EAAE,CAAEA,EAAGZ,aAAjC,GAAI,CAAE,cAAkC,CACtC,SAAO,MACT,uBAH8BY,uBAKhC,SAAO,QACT,KAOO,SAAed,SACpBE,GAAQ,CACRc,MAA0D,mFAE1D,SAAOX,QAAQC,GAAG,CAChBJ,IAAIK,GAAG,CAAC,SAACC,KAAMC,cAAUO,OAAOR,KAAMC,MAAOP,UAEjD,KAOO,SAAeD,YACpBC,GAAQ,CACRe,OAAmF,CACnFC,YAAe,4CAEXC,YACKL,yEADLK,YAAcD,aACTJ,EAAI,4BAAGA,CAAAA,EAAIZ,IAAIa,MAAM,AAAD,cACb,SAAME,QAAQE,YAAajB,GAAG,CAACY,EAAE,CAAEA,EAAGZ,aAApDiB,YAAc,oCADgBL,uBAGhC,SAAOK,eACT"}
@@ -0,0 +1,9 @@
1
+ export declare function isLocal(): boolean;
2
+ export declare function isRemote(): boolean;
3
+ export declare function isInDocker(): boolean;
4
+ export declare function isDaemonServer(): boolean;
5
+ export declare function isDevelopment(): boolean;
6
+ export declare function isStaging(): boolean;
7
+ export declare function isProduction(): boolean;
8
+ export declare function isTest(): boolean;
9
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/utils/controller.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AACD,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AACD,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AACD,wBAAgB,cAAc,IAAI,OAAO,CAExC;AACD,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AACD,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AACD,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AACD,wBAAgB,MAAM,IAAI,OAAO,CAEhC"}
@@ -0,0 +1,2 @@
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 isDaemonServer(){return isDaemonServer},get isDevelopment(){return isDevelopment},get isInDocker(){return isInDocker},get isLocal(){return isLocal},get isProduction(){return isProduction},get isRemote(){return isRemote},get isStaging(){return isStaging},get isTest(){return isTest}});function isLocal(){return process.env.LR===undefined||process.env.LR==="local"}function isRemote(){return process.env.LR==="remote"}function isInDocker(){return process.env.LR!==undefined}function isDaemonServer(){return process.env.NODE_TYPE==="daemon"}function isDevelopment(){return isRemote()&&process.env.NODE_ENV==="development"}function isStaging(){return isRemote()&&process.env.NODE_ENV==="staging"}function isProduction(){return isRemote()&&process.env.NODE_ENV==="production"}function isTest(){return isLocal()&&process.env.NODE_ENV==="test"}
2
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/controller.ts"],"sourcesContent":["export function isLocal(): boolean {\n return process.env.LR === undefined || process.env.LR === \"local\";\n}\nexport function isRemote(): boolean {\n return process.env.LR === \"remote\";\n}\nexport function isInDocker(): boolean {\n return process.env.LR !== undefined;\n}\nexport function isDaemonServer(): boolean {\n return process.env.NODE_TYPE === \"daemon\";\n}\nexport function isDevelopment(): boolean {\n return isRemote() && process.env.NODE_ENV === \"development\";\n}\nexport function isStaging(): boolean {\n return isRemote() && process.env.NODE_ENV === \"staging\";\n}\nexport function isProduction(): boolean {\n return isRemote() && process.env.NODE_ENV === \"production\";\n}\nexport function isTest(): boolean {\n return isLocal() && process.env.NODE_ENV === \"test\";\n}\n"],"names":["isDaemonServer","isDevelopment","isInDocker","isLocal","isProduction","isRemote","isStaging","isTest","process","env","LR","undefined","NODE_TYPE","NODE_ENV"],"mappings":"mPASgBA,wBAAAA,oBAGAC,uBAAAA,mBANAC,oBAAAA,gBANAC,iBAAAA,aAkBAC,sBAAAA,kBAfAC,kBAAAA,cAYAC,mBAAAA,eAMAC,gBAAAA,UArBT,SAASJ,UACd,OAAOK,QAAQC,GAAG,CAACC,EAAE,GAAKC,WAAaH,QAAQC,GAAG,CAACC,EAAE,GAAK,OAC5D,CACO,SAASL,WACd,OAAOG,QAAQC,GAAG,CAACC,EAAE,GAAK,QAC5B,CACO,SAASR,aACd,OAAOM,QAAQC,GAAG,CAACC,EAAE,GAAKC,SAC5B,CACO,SAASX,iBACd,OAAOQ,QAAQC,GAAG,CAACG,SAAS,GAAK,QACnC,CACO,SAASX,gBACd,OAAOI,YAAcG,QAAQC,GAAG,CAACI,QAAQ,GAAK,aAChD,CACO,SAASP,YACd,OAAOD,YAAcG,QAAQC,GAAG,CAACI,QAAQ,GAAK,SAChD,CACO,SAAST,eACd,OAAOC,YAAcG,QAAQC,GAAG,CAACI,QAAQ,GAAK,YAChD,CACO,SAASN,SACd,OAAOJ,WAAaK,QAAQC,GAAG,CAACI,QAAQ,GAAK,MAC/C"}
@@ -0,0 +1,9 @@
1
+ import { PathLike } from "fs";
2
+ /**
3
+ * fs/promises에는 exists가 없어요. 대신 access가 있습니다.
4
+ * 근데 얘는 인터페이스가 쓰기 불편해요. 그래서 감싸주었습니다.
5
+ * @param path
6
+ * @returns
7
+ */
8
+ export declare function exists(path: PathLike): Promise<boolean>;
9
+ //# sourceMappingURL=fs-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../src/utils/fs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAa,MAAM,IAAI,CAAC;AAGzC;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7D"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"exists",{enumerable:true,get:function(){return exists}});var _fs=require("fs");var _promises=require("fs/promises");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 _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 exists(path){return _async_to_generator(function(){var e;return _ts_generator(this,function(_state){switch(_state.label){case 0:_state.trys.push([0,2,,3]);return[4,(0,_promises.access)(path,_fs.constants.F_OK)];case 1:_state.sent();return[2,true];case 2:e=_state.sent();return[2,false];case 3:return[2]}})})()}
2
+ //# sourceMappingURL=fs-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/fs-utils.ts"],"sourcesContent":["import { PathLike, constants } from \"fs\";\nimport { access } from \"fs/promises\";\n\n/**\n * fs/promises에는 exists가 없어요. 대신 access가 있습니다.\n * 근데 얘는 인터페이스가 쓰기 불편해요. 그래서 감싸주었습니다.\n * @param path\n * @returns\n */\nexport async function exists(path: PathLike): Promise<boolean> {\n try {\n await access(path, constants.F_OK);\n return true;\n } catch {\n return false;\n }\n}\n"],"names":["exists","path","access","constants","F_OK"],"mappings":"oGASsBA,gDAAAA,0BATc,4BACb,qzDAQhB,SAAeA,OAAOC,IAAc,gJAEvC,SAAMC,GAAAA,gBAAM,EAACD,KAAME,aAAS,CAACC,IAAI,UAAjC,cACA,SAAO,6BAEP,SAAO,0BAEX"}
@@ -0,0 +1,2 @@
1
+ export declare function wrapIf(source: string, predicate: (str: string) => [boolean, string]): string;
2
+ //# sourceMappingURL=lodash-able.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lodash-able.d.ts","sourceRoot":"","sources":["../../src/utils/lodash-able.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,CACpB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,GAC5C,MAAM,CAGR"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"wrapIf",{enumerable:true,get:function(){return wrapIf}});function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_with_holes(arr){if(Array.isArray(arr))return arr}function _iterable_to_array_limit(arr,i){var _i=arr==null?null:typeof Symbol!=="undefined"&&arr[Symbol.iterator]||arr["@@iterator"];if(_i==null)return;var _arr=[];var _n=true;var _d=false;var _s,_e;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"]!=null)_i["return"]()}finally{if(_d)throw _e}}return _arr}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _sliced_to_array(arr,i){return _array_with_holes(arr)||_iterable_to_array_limit(arr,i)||_unsupported_iterable_to_array(arr,i)||_non_iterable_rest()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function wrapIf(source,predicate){var _predicate=_sliced_to_array(predicate(source),2),ok=_predicate[0],wrapped=_predicate[1];return ok?wrapped:source}
2
+ //# sourceMappingURL=lodash-able.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/lodash-able.ts"],"sourcesContent":["export function wrapIf(\n source: string,\n predicate: (str: string) => [boolean, string]\n): string {\n const [ok, wrapped] = predicate(source);\n return ok ? wrapped : source;\n}\n"],"names":["wrapIf","source","predicate","ok","wrapped"],"mappings":"oGAAgBA,gDAAAA,o2CAAT,SAASA,OACdC,MAAc,CACdC,SAA6C,EAE7C,IAAsBA,4BAAAA,UAAUD,WAAzBE,GAAeD,cAAXE,QAAWF,cACtB,OAAOC,GAAKC,QAAUH,MACxB"}
@@ -0,0 +1,17 @@
1
+ export type ListResult<T> = {
2
+ rows: T[];
3
+ total?: number;
4
+ };
5
+ export type ArrayOr<T> = T | T[];
6
+ export declare function asArray<T>(param: T | T[]): T[];
7
+ export declare function objToMap<T>(obj: {
8
+ [k: string]: T;
9
+ }): Map<number, T> | Map<string, T>;
10
+ export interface BaseListParams {
11
+ id?: number | number[];
12
+ num?: number;
13
+ page?: number;
14
+ keyword?: string;
15
+ queryMode?: "list" | "count" | "both";
16
+ }
17
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/utils/model.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAEjC,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAM9C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAA;CAAE,mCAOlD;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CACvC"}
@@ -0,0 +1,2 @@
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 asArray(){return asArray},get objToMap(){return objToMap}});function asArray(param){if(Array.isArray(param)){return param}else{return[param]}}function objToMap(obj){var keys=Object.keys(obj);if(keys.every(function(key){return parseInt(key).toString()===key})){return new Map(keys.map(function(key){return[parseInt(key),obj[key]]}))}else{return new Map(Object.entries(obj))}}
2
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/model.ts"],"sourcesContent":["export type ListResult<T> = {\n rows: T[];\n total?: number;\n};\n\nexport type ArrayOr<T> = T | T[];\n\nexport function asArray<T>(param: T | T[]): T[] {\n if (Array.isArray(param)) {\n return param;\n } else {\n return [param as T] as T[];\n }\n}\n\nexport function objToMap<T>(obj: { [k: string]: T }) {\n const keys = Object.keys(obj);\n if (keys.every((key) => parseInt(key).toString() === key)) {\n return new Map<number, T>(keys.map((key) => [parseInt(key), obj[key]]));\n } else {\n return new Map<string, T>(Object.entries(obj));\n }\n}\n\nexport interface BaseListParams {\n id?: number | number[];\n num?: number;\n page?: number;\n keyword?: string;\n queryMode?: \"list\" | \"count\" | \"both\";\n}\n"],"names":["asArray","objToMap","param","Array","isArray","obj","keys","Object","every","key","parseInt","toString","Map","map","entries"],"mappings":"mPAOgBA,iBAAAA,aAQAC,kBAAAA,YART,SAASD,QAAWE,KAAc,EACvC,GAAIC,MAAMC,OAAO,CAACF,OAAQ,CACxB,OAAOA,KACT,KAAO,CACL,MAAO,CAACA,MAAW,AACrB,CACF,CAEO,SAASD,SAAYI,GAAuB,EACjD,IAAMC,KAAOC,OAAOD,IAAI,CAACD,KACzB,GAAIC,KAAKE,KAAK,CAAC,SAACC,YAAQC,SAASD,KAAKE,QAAQ,KAAOF,MAAM,CACzD,OAAO,IAAIG,IAAeN,KAAKO,GAAG,CAAC,SAACJ,WAAQ,CAACC,SAASD,KAAMJ,GAAG,CAACI,IAAI,CAAC,GACvE,KAAO,CACL,OAAO,IAAIG,IAAeL,OAAOO,OAAO,CAACT,KAC3C,CACF"}
@@ -0,0 +1,4 @@
1
+ import { AST, ColumnRef } from "node-sql-parser";
2
+ export declare function getTableName(expr: ColumnRef): string | null;
3
+ export declare function getTableNamesFromWhere(ast: AST | AST[]): string[];
4
+ //# sourceMappingURL=sql-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-parser.d.ts","sourceRoot":"","sources":["../../src/utils/sql-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAiC,MAAM,iBAAiB,CAAC;AAEhF,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,iBAO3C;AAGD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,MAAM,EAAE,CA0BjE"}
@@ -0,0 +1,2 @@
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 getTableName(){return getTableName},get getTableNamesFromWhere(){return getTableNamesFromWhere}});var _lodash=/*#__PURE__*/_interop_require_default(require("lodash"));function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function getTableName(expr){if("table"in expr&&expr.table!==null){return typeof expr.table==="string"?expr.table:expr.table.value}return null}function getTableNamesFromWhere(ast){var extractTableNames=function(where){if(where===null||!(where.type==="binary_expr"&&"left"in where)){return[]}var extractTableName=function(expr){if(expr.type==="column_ref"){var table=getTableName(expr);return table?[table]:[]}else if(expr.type==="binary_expr"&&"left"in expr){return extractTableNames(expr)}return[]};return _to_consumable_array(extractTableName(where.left)).concat(_to_consumable_array(extractTableName(where.right)))};return _lodash.default.uniq((Array.isArray(ast)?ast:[ast]).flatMap(function(a){return a.type==="select"||a.type==="update"||a.type==="delete"?extractTableNames(a.where):[]}))}
2
+ //# sourceMappingURL=sql-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/sql-parser.ts"],"sourcesContent":["import _ from \"lodash\";\nimport { AST, ColumnRef, Expr, ExpressionValue, Select } from \"node-sql-parser\";\n\nexport function getTableName(expr: ColumnRef) {\n if (\"table\" in expr && expr.table !== null) {\n return typeof expr.table === \"string\"\n ? expr.table\n : (expr.table as { type: string; value: string }).value;\n }\n return null;\n}\n\n// where 조건에 사용된 테이블명을 추출\nexport function getTableNamesFromWhere(ast: AST | AST[]): string[] {\n const extractTableNames = (where: Select[\"where\"]): string[] => {\n if (where === null || !(where.type === \"binary_expr\" && \"left\" in where)) {\n return [];\n }\n\n const extractTableName = (expr: Expr | ExpressionValue): string[] => {\n if (expr.type === \"column_ref\") {\n const table = getTableName(expr as ColumnRef);\n return table ? [table] : [];\n } else if (expr.type === \"binary_expr\" && \"left\" in expr) {\n return extractTableNames(expr);\n }\n return [];\n };\n\n return [...extractTableName(where.left), ...extractTableName(where.right)];\n };\n\n return _.uniq(\n (Array.isArray(ast) ? ast : [ast]).flatMap((a) =>\n a.type === \"select\" || a.type === \"update\" || a.type === \"delete\"\n ? extractTableNames(a.where)\n : []\n )\n );\n}\n"],"names":["getTableName","getTableNamesFromWhere","expr","table","value","ast","extractTableNames","where","type","extractTableName","left","right","_","uniq","Array","isArray","flatMap","a"],"mappings":"mPAGgBA,sBAAAA,kBAUAC,gCAAAA,oFAbF,srCAGP,SAASD,aAAaE,IAAe,EAC1C,GAAI,UAAWA,MAAQA,KAAKC,KAAK,GAAK,KAAM,CAC1C,OAAO,OAAOD,KAAKC,KAAK,GAAK,SACzBD,KAAKC,KAAK,CACV,AAACD,KAAKC,KAAK,CAAqCC,KAAK,AAC3D,CACA,OAAO,IACT,CAGO,SAASH,uBAAuBI,GAAgB,EACrD,IAAMC,kBAAoB,SAACC,OACzB,GAAIA,QAAU,MAAQ,CAAEA,CAAAA,MAAMC,IAAI,GAAK,eAAiB,SAAUD,KAAI,EAAI,CACxE,MAAO,EAAE,AACX,CAEA,IAAME,iBAAmB,SAACP,MACxB,GAAIA,KAAKM,IAAI,GAAK,aAAc,CAC9B,IAAML,MAAQH,aAAaE,MAC3B,OAAOC,MAAQ,CAACA,MAAM,CAAG,EAAE,AAC7B,MAAO,GAAID,KAAKM,IAAI,GAAK,eAAiB,SAAUN,KAAM,CACxD,OAAOI,kBAAkBJ,KAC3B,CACA,MAAO,EAAE,AACX,EAEA,OAAO,AAAC,qBAAGO,iBAAiBF,MAAMG,IAAI,UAAG,qBAAGD,iBAAiBF,MAAMI,KAAK,GAC1E,EAEA,OAAOC,eAAC,CAACC,IAAI,CACX,AAACC,CAAAA,MAAMC,OAAO,CAACV,KAAOA,IAAM,CAACA,IAAI,AAAD,EAAGW,OAAO,CAAC,SAACC,UAC1CA,EAAET,IAAI,GAAK,UAAYS,EAAET,IAAI,GAAK,UAAYS,EAAET,IAAI,GAAK,SACrDF,kBAAkBW,EAAEV,KAAK,EACzB,EAAE,GAGZ"}
@@ -0,0 +1,9 @@
1
+ export declare function globAsync(pathPattern: string): Promise<string[]>;
2
+ export declare function importMultiple(filePaths: string[], doRefresh?: boolean): Promise<{
3
+ filePath: string;
4
+ imported: any;
5
+ }[]>;
6
+ export declare function findAppRootPath(): Promise<string>;
7
+ export declare function findApiRootPath(): string;
8
+ export declare function nonNullable<T>(value: T): value is NonNullable<T>;
9
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAIA,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAMtE;AACD,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE,EAAE,CAAC,CAsBhD;AACD,wBAAsB,eAAe,oBAGpC;AAED,wBAAgB,eAAe,WAmB9B;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAEhE"}
@@ -0,0 +1,2 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/utils.ts"],"sourcesContent":["import path from \"path\";\nimport { glob } from \"fs/promises\";\nimport fs from \"fs\";\n\nexport async function globAsync(pathPattern: string): Promise<string[]> {\n const files: string[] = [];\n for await (const file of glob(path.resolve(pathPattern))) {\n files.push(file);\n }\n return files;\n}\nexport async function importMultiple(\n filePaths: string[],\n doRefresh: boolean = false\n): Promise<{ filePath: string; imported: any }[]> {\n const results: { filePath: string; imported: any }[] = [];\n\n for (const filePath of filePaths) {\n let importPath = \"./\" + path.relative(__dirname, filePath);\n\n if (doRefresh) {\n if (require.resolve) {\n delete require.cache[require.resolve(importPath)];\n } else {\n importPath += `?t=${Date.now()}`;\n }\n }\n\n const imported = await import(importPath);\n results.push({\n filePath,\n imported,\n });\n }\n\n return results;\n}\nexport async function findAppRootPath() {\n const apiRootPath = findApiRootPath();\n return apiRootPath.split(path.sep).slice(0, -1).join(path.sep);\n}\n\nexport function findApiRootPath() {\n // NOTE: for support npm / yarn workspaces\n const workspacePath = process.env[\"INIT_CWD\"];\n if (workspacePath && workspacePath.length !== 0) {\n return workspacePath;\n }\n\n const basePath = require.main?.path ?? __dirname;\n let dir = path.dirname(basePath);\n if (dir.includes(\"/.yarn/\")) {\n dir = dir.split(\"/.yarn/\")[0];\n }\n do {\n if (fs.existsSync(path.join(dir, \"/package.json\"))) {\n return dir.split(path.sep).join(path.sep);\n }\n dir = dir.split(path.sep).slice(0, -1).join(path.sep);\n } while (dir.split(path.sep).length > 1);\n throw new Error(\"Cannot find AppRoot using Sonamu -2\");\n}\n\nexport function nonNullable<T>(value: T): value is NonNullable<T> {\n return value !== null && value !== undefined;\n}\n"],"names":["findApiRootPath","findAppRootPath","globAsync","importMultiple","nonNullable","pathPattern","files","file","glob","path","resolve","push","filePaths","doRefresh","results","filePath","importPath","imported","relative","__dirname","require","cache","Date","now","apiRootPath","split","sep","slice","join","workspacePath","process","env","length","basePath","main","dir","dirname","includes","fs","existsSync","Error","value","undefined"],"mappings":"mPA0CgBA,yBAAAA,qBALMC,yBAAAA,qBAjCAC,mBAAAA,eAOAC,wBAAAA,oBAoDNC,qBAAAA,uEA/DC,+BACI,qEACN,8iIAER,SAAeF,UAAUG,WAAmB,4CAC3CC,wFACWC,gFADXD,8IACmBE,GAAAA,cAAI,EAACC,aAAI,CAACC,OAAO,CAACL,kKAA1BE,YACfD,MAAMK,IAAI,CAACJ,gcAEb,SAAOD,SACT,KACO,SAAeH,eACpBS,SAAmB,MACnBC,UAAAA,uDAAqB,gDAEfC,QAED,0BAAA,kBAAA,eAAA,UAAA,MAAMC,SACLC,WAUEC,oFAbFH,WAED,+BAAA,wBAAA,2EAAA,UAAkBF,yDAAlB,2BAAA,MAAA,oCAAMG,SAAN,YACCC,WAAa,KAAOP,aAAI,CAACS,QAAQ,CAACC,UAAWJ,UAEjD,GAAIF,UAAW,CACb,GAAIO,QAAQV,OAAO,CAAE,CACnB,OAAOU,QAAQC,KAAK,CAACD,QAAQV,OAAO,CAACM,YAAY,AACnD,KAAO,CACLA,YAAc,AAAC,MAAgB,OAAXM,KAAKC,GAAG,GAC9B,CACF,CAEiB,SAAM,gBAAOP,2EAAP,sBAAjBC,SAAW,cACjBH,QAAQH,IAAI,CAAC,CACXI,SAAAA,SACAE,SAAAA,QACF,yBAfG,uFAAA,uBAAA,8CAAA,2BAAA,wBAAA,+BAAA,yBAAA,iCAkBL,SAAOH,WACT,KACO,SAAeb,4DACduB,uDAAAA,YAAcxB,kBACpB,SAAOwB,YAAYC,KAAK,CAAChB,aAAI,CAACiB,GAAG,EAAEC,KAAK,CAAC,EAAG,CAAC,GAAGC,IAAI,CAACnB,aAAI,CAACiB,GAAG,IAC/D,KAEO,SAAS1B,sBAOGoB,cALjB,IAAMS,cAAgBC,QAAQC,GAAG,CAAC,WAAW,CAC7C,GAAIF,eAAiBA,cAAcG,MAAM,GAAK,EAAG,CAC/C,OAAOH,aACT,KAEiBT,mBAAjB,IAAMa,SAAWb,CAAAA,oBAAAA,cAAAA,QAAQc,IAAI,UAAZd,8BAAAA,cAAcX,IAAI,UAAlBW,4BAAAA,mBAAsBD,UACvC,IAAIgB,IAAM1B,aAAI,CAAC2B,OAAO,CAACH,UACvB,GAAIE,IAAIE,QAAQ,CAAC,WAAY,CAC3BF,IAAMA,IAAIV,KAAK,CAAC,UAAU,CAAC,EAAE,AAC/B,CACA,EAAG,CACD,GAAIa,WAAE,CAACC,UAAU,CAAC9B,aAAI,CAACmB,IAAI,CAACO,IAAK,kBAAmB,CAClD,OAAOA,IAAIV,KAAK,CAAChB,aAAI,CAACiB,GAAG,EAAEE,IAAI,CAACnB,aAAI,CAACiB,GAAG,CAC1C,CACAS,IAAMA,IAAIV,KAAK,CAAChB,aAAI,CAACiB,GAAG,EAAEC,KAAK,CAAC,EAAG,CAAC,GAAGC,IAAI,CAACnB,aAAI,CAACiB,GAAG,CACtD,OAASS,IAAIV,KAAK,CAAChB,aAAI,CAACiB,GAAG,EAAEM,MAAM,CAAG,EAAG,AACzC,OAAM,IAAIQ,MAAM,sCAClB,CAEO,SAASpC,YAAeqC,KAAQ,EACrC,OAAOA,QAAU,MAAQA,QAAUC,SACrC"}
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ type ValidationError = {
3
+ path: string[];
4
+ message: string;
5
+ };
6
+ export declare function humanizeZodError(error: z.ZodError): ValidationError[];
7
+ export {};
8
+ //# sourceMappingURL=zod-error.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/zod-error.ts"],"sourcesContent":["\nimport { z } from 'zod';\n\ntype ValidationError = {\n path: string[];\n message: string;\n};\n\nexport function humanizeZodError(error: z.ZodError): ValidationError[] {\n return error.issues.map(({ path: originPath, message }) => {\n const path = originPath.map(item => {\n if (typeof item === \"symbol\") {\n return item.description ?? item.toString();\n }\n\n if (typeof item === \"number\") {\n return `[${item}]`;\n }\n\n return item;\n });\n\n return { path, message: message };\n });\n}\n"],"names":["humanizeZodError","error","issues","map","path","originPath","message","item","description","toString"],"mappings":"oGAQgBA,0DAAAA,yJAAT,SAASA,iBAAiBC,KAAiB,EAChD,OAAOA,MAAMC,MAAM,CAACC,GAAG,CAAC,oBAAIC,AAAMC,iBAAND,KAAkBE,cAAAA,QAC5C,IAAMF,KAAOC,WAAWF,GAAG,CAACI,SAAAA,MAC1B,GAAI,CAAA,OAAOA,+BAAP,SAAOA,KAAG,IAAM,SAAU,KACrBA,kBAAP,MAAOA,CAAAA,kBAAAA,KAAKC,WAAW,UAAhBD,2BAAAA,kBAAoBA,KAAKE,QAAQ,EAC1C,CAEA,GAAI,OAAOF,OAAS,SAAU,CAC5B,MAAO,AAAC,IAAQ,OAALA,KAAK,IAClB,CAEA,OAAOA,IACT,GAEA,MAAO,CAAEH,KAAAA,KAAME,QAASA,OAAQ,CAClC,EACF"}
package/nodemon.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "watch": ["src"],
3
+ "ext": "ts,json",
4
+ "exec": "swc src --config-file .swcrc -d dist --strip-leading-paths && tsc --emitDeclarationOnly && node -r source-map-support/register -r dotenv/config dist/index.js",
5
+ "signal": "SIGUSR2"
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonamu",
3
- "version": "0.4.14",
3
+ "version": "0.5.0",
4
4
  "description": "Sonamu — TypeScript Fullstack API Framework",
5
5
  "keywords": [
6
6
  "typescript",
@@ -8,27 +8,10 @@
8
8
  "orm"
9
9
  ],
10
10
  "main": "./dist/index.js",
11
- "module": "./dist/index.mjs",
12
- "exports": {
13
- ".": {
14
- "import": "./dist/index.mjs",
15
- "require": "./dist/index.js",
16
- "types": "./dist/index.d.ts"
17
- },
18
- "./kysely": {
19
- "import": "./dist/database/drivers/kysely/base-model.mjs",
20
- "require": "./dist/database/drivers/kysely/base-model.js",
21
- "types": "./dist/database/drivers/kysely/base-model.d.mts"
22
- },
23
- "./knex": {
24
- "import": "./dist/database/drivers/knex/base-model.mjs",
25
- "require": "./dist/database/drivers/knex/base-model.js",
26
- "types": "./dist/database/drivers/knex/base-model.d.mts"
27
- }
28
- },
11
+ "exports": "./dist/index.js",
29
12
  "scripts": {
30
- "dev": "tsup --config ./tsup.config.js --watch",
31
- "build": "tsup --config ./tsup.config.js"
13
+ "dev": "nodemon exec",
14
+ "build": "swc src --config-file .swcrc -d dist --strip-leading-paths && tsc --emitDeclarationOnly"
32
15
  },
33
16
  "license": "MIT",
34
17
  "author": {
@@ -40,56 +23,58 @@
40
23
  "type": "git",
41
24
  "url": "https://github.com/ping-alive/sonamu.git"
42
25
  },
43
- "bin": "./dist/bin/cli-wrapper.mjs",
26
+ "bin": "./dist/bin/cli-wrapper.js",
44
27
  "dependencies": {
28
+ "@aws-sdk/client-s3": "^3.921.0",
29
+ "@aws-sdk/s3-request-presigner": "^3.921.0",
30
+ "@fastify/cors": "^8.1.0",
31
+ "@fastify/formbody": "^7.1.0",
32
+ "@fastify/multipart": "^8",
33
+ "@swc/core": "^1.13.19",
45
34
  "chalk": "^4.1.2",
35
+ "chokidar": "^4.0.3",
36
+ "date-fns": "^4.1.0",
37
+ "date-fns-tz": "^3.2.0",
46
38
  "dotenv": "^16.0.2",
47
39
  "fast-deep-equal": "^3.1.3",
48
40
  "fastify": "^4.23.2",
49
- "fs-extra": "^10.1.0",
50
- "glob": "^8.0.3",
41
+ "fastify-qs": "^4.0.0",
42
+ "flydrive": "^1.3.0",
51
43
  "inflection": "^1.13.2",
52
44
  "knex": "^3.1.0",
53
- "kysely": "^0.27.4",
54
45
  "lodash": "^4.17.21",
55
46
  "luxon": "^3.0.3",
47
+ "mime-types": "^3.0.1",
48
+ "minimatch": "^10.0.3",
56
49
  "mysql2": "^3.6.1",
57
50
  "node-sql-parser": "^5.2.0",
51
+ "nodemon": "^3.1.10",
58
52
  "prompts": "^2.4.2",
59
53
  "qs": "^6.11.0",
54
+ "source-map-support": "^0.5.21",
60
55
  "tsicli": "^1.0.5",
61
- "uuid": "^8.3.2",
62
- "zod": "3.25.76"
56
+ "zod": "^4.1.12"
63
57
  },
64
58
  "devDependencies": {
65
- "@types/fs-extra": "^9.0.13",
66
- "@types/glob": "^8.0.0",
59
+ "@sonamu-kit/ui": "workspace:^",
60
+ "@swc/cli": "^0.7.8",
67
61
  "@types/inflection": "^1.13.0",
68
62
  "@types/lodash": "^4.14.198",
69
63
  "@types/luxon": "^3.0.1",
70
- "@types/node": "^20.6.3",
64
+ "@types/mime-types": "^3.0.1",
65
+ "@types/node": "^22",
71
66
  "@types/prettier": "^3.0.0",
72
67
  "@types/prompts": "^2.0.14",
73
68
  "@types/qs": "^6.9.7",
74
- "@types/uuid": "^8.3.4",
75
69
  "prettier": "^3.2.5",
76
- "source-map-support": "^0.5.21",
77
70
  "tsup": "^8.1.0",
78
71
  "typescript": "^5.2.2"
79
72
  },
80
73
  "peerDependencies": {
81
74
  "fastify": "^4.23.2",
82
75
  "knex": "^3.1.0",
83
- "kysely": "^0.27.4",
84
- "mysql2": "^3.6.1"
85
- },
86
- "peerDependenciesMeta": {
87
- "knex": {
88
- "optional": true
89
- },
90
- "kysely": {
91
- "optional": true
92
- }
93
- },
94
- "packageManager": "yarn@3.6.3"
76
+ "mysql2": "^3.6.1",
77
+ "nodemon": "3.1.10",
78
+ "source-map-support": "^0.5.21"
79
+ }
95
80
  }
@@ -1,14 +1,13 @@
1
1
  import { Knex } from "knex";
2
- import { DB } from "../database/db";
3
- import { DBPreset } from "../database/types";
2
+ import { DB, DBPreset } from "../database/db";
4
3
  import { UpsertBuilder } from "../database/upsert-builder";
5
4
 
6
5
  export abstract class BaseFrameClass {
7
6
  getDB(which: DBPreset): Knex {
8
- return DB.getDB(which) as Knex;
7
+ return DB.getDB(which);
9
8
  }
10
9
 
11
10
  getUpsertBuilder() {
12
- return new UpsertBuilder<"knex">();
11
+ return new UpsertBuilder();
13
12
  }
14
13
  }
package/src/api/caster.ts CHANGED
@@ -1,23 +1,23 @@
1
+ import assert from "assert";
1
2
  import { z } from "zod";
3
+ import type { $ZodType } from "zod/v4/core";
4
+
5
+ function isNumberType(zodType: $ZodType): zodType is z.ZodNumber {
6
+ return zodType instanceof z.ZodNumber;
7
+ }
8
+
9
+ function isNullOrOptional(zodType: $ZodType): zodType is z.ZodNullable | z.ZodOptional {
10
+ return zodType instanceof z.ZodNullable || zodType instanceof z.ZodOptional;
11
+ }
2
12
 
3
13
  // optional, nullable 무관하게 ZodNumber 체크
4
- function isZodNumberAnyway(zodType: z.ZodType<any>) {
5
- if (zodType instanceof z.ZodNumber) {
6
- return true;
7
- } else if (
8
- zodType instanceof z.ZodNullable &&
9
- zodType._def.innerType instanceof z.ZodNumber
10
- ) {
14
+ function isZodNumberAnyway(zodType: $ZodType) {
15
+ if (isNumberType(zodType)) {
11
16
  return true;
12
- } else if (
13
- zodType instanceof z.ZodOptional &&
14
- zodType._def.innerType instanceof z.ZodNumber
15
- ) {
16
- } else if (
17
- zodType instanceof z.ZodOptional &&
18
- zodType._def?.innerType instanceof z.ZodOptional &&
19
- zodType._type?.def?.innerType instanceof z.ZodNumber
20
- ) {
17
+ }
18
+
19
+ // ZodNullable 또는 ZodOptional일 때
20
+ if (isNullOrOptional(zodType) && isNumberType(zodType.def.innerType)) {
21
21
  return true;
22
22
  }
23
23
 
@@ -25,19 +25,18 @@ function isZodNumberAnyway(zodType: z.ZodType<any>) {
25
25
  }
26
26
 
27
27
  // ZodType을 이용해 raw를 Type Coercing
28
- export function caster(zodType: z.ZodType<any>, raw: any): any {
28
+ export function caster(zodType: $ZodType, raw: any): any {
29
29
  if (isZodNumberAnyway(zodType) && typeof raw === "string") {
30
30
  // number
31
31
  return Number(raw);
32
32
  } else if (
33
33
  zodType instanceof z.ZodUnion &&
34
- zodType.options.some((opt: z.ZodType<any>) => isZodNumberAnyway(opt))
34
+ zodType.options.some((opt) => isZodNumberAnyway(opt))
35
35
  ) {
36
36
  // zArrayable Number 케이스 처리
37
37
  if (Array.isArray(raw)) {
38
- const numType = zodType.options.find(
39
- (opt: z.ZodType<any>) => opt instanceof z.ZodNumber
40
- );
38
+ const numType = zodType.options.find(opt => isNumberType(opt));
39
+ assert(numType !== undefined);
41
40
  return raw.map((elem: any) => caster(numType, elem));
42
41
  } else {
43
42
  return Number(raw);
@@ -67,10 +66,10 @@ export function caster(zodType: z.ZodType<any>, raw: any): any {
67
66
  }, {} as any);
68
67
  } else if (zodType instanceof z.ZodOptional) {
69
68
  // optional
70
- return caster(zodType._def.innerType, raw);
69
+ return caster(zodType.def.innerType, raw);
71
70
  } else if (zodType instanceof z.ZodNullable) {
72
71
  // nullable
73
- return caster(zodType._def.innerType, raw);
72
+ return caster(zodType.def.innerType, raw);
74
73
  } else if (
75
74
  zodType instanceof z.ZodDate &&
76
75
  new Date(raw).toString() !== "Invalid Date"