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
package/.swcrc ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "https://swc.rs/schema.json",
3
+ "module": {
4
+ "type": "commonjs"
5
+ },
6
+ "jsc": {
7
+ "parser": {
8
+ "syntax": "typescript",
9
+ "decorators": true
10
+ },
11
+ "target": "es5"
12
+ },
13
+ "minify": true,
14
+ "sourceMaps": true
15
+ }
@@ -0,0 +1,8 @@
1
+ import { Knex } from "knex";
2
+ import { DBPreset } from "../database/db";
3
+ import { UpsertBuilder } from "../database/upsert-builder";
4
+ export declare abstract class BaseFrameClass {
5
+ getDB(which: DBPreset): Knex;
6
+ getUpsertBuilder(): UpsertBuilder;
7
+ }
8
+ //# sourceMappingURL=base-frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-frame.d.ts","sourceRoot":"","sources":["../../src/api/base-frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAM,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,8BAAsB,cAAc;IAClC,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI5B,gBAAgB;CAGjB"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"BaseFrameClass",{enumerable:true,get:function(){return BaseFrameClass}});var _db=require("../database/db");var _upsertbuilder=require("../database/upsert-builder");function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}var BaseFrameClass=/*#__PURE__*/function(){"use strict";function BaseFrameClass(){_class_call_check(this,BaseFrameClass)}_create_class(BaseFrameClass,[{key:"getDB",value:function getDB(which){return _db.DB.getDB(which)}},{key:"getUpsertBuilder",value:function getUpsertBuilder(){return new _upsertbuilder.UpsertBuilder}}]);return BaseFrameClass}();
2
+ //# sourceMappingURL=base-frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/api/base-frame.ts"],"sourcesContent":["import { Knex } from \"knex\";\nimport { DB, DBPreset } from \"../database/db\";\nimport { UpsertBuilder } from \"../database/upsert-builder\";\n\nexport abstract class BaseFrameClass {\n getDB(which: DBPreset): Knex {\n return DB.getDB(which);\n }\n\n getUpsertBuilder() {\n return new UpsertBuilder();\n }\n}\n"],"names":["BaseFrameClass","getDB","which","DB","getUpsertBuilder","UpsertBuilder"],"mappings":"oGAIsBA,wDAAAA,kCAHO,6CACC,qpBAEvB,IAAA,AAAeA,4BAAf,iCAAeA,wCAAAA,8BAAAA,iBACpBC,IAAAA,cAAAA,SAAAA,MAAMC,KAAe,EACnB,OAAOC,MAAE,CAACF,KAAK,CAACC,MAClB,IAEAE,IAAAA,yBAAAA,SAAAA,mBACE,OAAO,IAAIC,4BAAa,AAC1B,YAPoBL"}
@@ -0,0 +1,5 @@
1
+ import { z } from "zod";
2
+ import type { $ZodType } from "zod/v4/core";
3
+ export declare function caster(zodType: $ZodType, raw: any): any;
4
+ export declare function fastifyCaster(schema: z.ZodObject<any>): z.ZodPipe<z.ZodTransform<any, any>, z.ZodObject<any, z.core.$strip>>;
5
+ //# sourceMappingURL=caster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caster.d.ts","sourceRoot":"","sources":["../../src/api/caster.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAyB5C,wBAAgB,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAuDvD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,wEAIrD"}
@@ -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 caster(){return caster},get fastifyCaster(){return fastifyCaster}});var _assert=/*#__PURE__*/_interop_require_default(require("assert"));var _zod=require("zod");function _instanceof(left,right){if(right!=null&&typeof Symbol!=="undefined"&&right[Symbol.hasInstance]){return!!right[Symbol.hasInstance](left)}else{return left instanceof right}}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _type_of(obj){"@swc/helpers - typeof";return obj&&typeof Symbol!=="undefined"&&obj.constructor===Symbol?"symbol":typeof obj}function isNumberType(zodType){return _instanceof(zodType,_zod.z.ZodNumber)}function isNullOrOptional(zodType){return _instanceof(zodType,_zod.z.ZodNullable)||_instanceof(zodType,_zod.z.ZodOptional)}function isZodNumberAnyway(zodType){if(isNumberType(zodType)){return true}if(isNullOrOptional(zodType)&&isNumberType(zodType.def.innerType)){return true}return false}function caster(zodType,raw){if(isZodNumberAnyway(zodType)&&typeof raw==="string"){return Number(raw)}else if(_instanceof(zodType,_zod.z.ZodUnion)&&zodType.options.some(function(opt){return isZodNumberAnyway(opt)})){if(Array.isArray(raw)){var numType=zodType.options.find(function(opt){return isNumberType(opt)});(0,_assert.default)(numType!==undefined);return raw.map(function(elem){return caster(numType,elem)})}else{return Number(raw)}}else if(_instanceof(zodType,_zod.z.ZodBoolean)&&(raw==="true"||raw==="false")){return raw==="true"}else if(raw!==null&&Array.isArray(raw)&&_instanceof(zodType,_zod.z.ZodArray)){return raw.map(function(elem){return caster(zodType.element,elem)})}else if(_instanceof(zodType,_zod.z.ZodObject)&&(typeof raw==="undefined"?"undefined":_type_of(raw))==="object"&&raw!==null){return Object.keys(raw).reduce(function(r,rawKey){r[rawKey]=caster(zodType.shape[rawKey],raw[rawKey]);return r},{})}else if(_instanceof(zodType,_zod.z.ZodOptional)){return caster(zodType.def.innerType,raw)}else if(_instanceof(zodType,_zod.z.ZodNullable)){return caster(zodType.def.innerType,raw)}else if(_instanceof(zodType,_zod.z.ZodDate)&&new Date(raw).toString()!=="Invalid Date"){return new Date(raw)}else{return raw}}function fastifyCaster(schema){return _zod.z.preprocess(function(raw){return caster(schema,raw)},schema)}
2
+ //# sourceMappingURL=caster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/api/caster.ts"],"sourcesContent":["import assert from \"assert\";\nimport { z } from \"zod\";\nimport type { $ZodType } from \"zod/v4/core\";\n\nfunction isNumberType(zodType: $ZodType): zodType is z.ZodNumber {\n return zodType instanceof z.ZodNumber;\n}\n\nfunction isNullOrOptional(zodType: $ZodType): zodType is z.ZodNullable | z.ZodOptional {\n return zodType instanceof z.ZodNullable || zodType instanceof z.ZodOptional;\n}\n\n// optional, nullable 무관하게 ZodNumber 체크\nfunction isZodNumberAnyway(zodType: $ZodType) {\n if (isNumberType(zodType)) {\n return true;\n }\n\n // ZodNullable 또는 ZodOptional일 때\n if (isNullOrOptional(zodType) && isNumberType(zodType.def.innerType)) {\n return true;\n }\n\n return false;\n}\n\n// ZodType을 이용해 raw를 Type Coercing\nexport function caster(zodType: $ZodType, raw: any): any {\n if (isZodNumberAnyway(zodType) && typeof raw === \"string\") {\n // number\n return Number(raw);\n } else if (\n zodType instanceof z.ZodUnion &&\n zodType.options.some((opt) => isZodNumberAnyway(opt))\n ) {\n // zArrayable Number 케이스 처리\n if (Array.isArray(raw)) {\n const numType = zodType.options.find(opt => isNumberType(opt));\n assert(numType !== undefined);\n return raw.map((elem: any) => caster(numType, elem));\n } else {\n return Number(raw);\n }\n } else if (\n zodType instanceof z.ZodBoolean &&\n (raw === \"true\" || raw === \"false\")\n ) {\n // boolean\n return raw === \"true\";\n } else if (\n raw !== null &&\n Array.isArray(raw) &&\n zodType instanceof z.ZodArray\n ) {\n // array\n return raw.map((elem: any) => caster(zodType.element, elem));\n } else if (\n zodType instanceof z.ZodObject &&\n typeof raw === \"object\" &&\n raw !== null\n ) {\n // object\n return Object.keys(raw).reduce((r, rawKey) => {\n r[rawKey] = caster(zodType.shape[rawKey], raw[rawKey]);\n return r;\n }, {} as any);\n } else if (zodType instanceof z.ZodOptional) {\n // optional\n return caster(zodType.def.innerType, raw);\n } else if (zodType instanceof z.ZodNullable) {\n // nullable\n return caster(zodType.def.innerType, raw);\n } else if (\n zodType instanceof z.ZodDate &&\n new Date(raw).toString() !== \"Invalid Date\"\n ) {\n // date\n return new Date(raw);\n } else {\n // 나머지는 처리 안함\n return raw;\n }\n}\n\nexport function fastifyCaster(schema: z.ZodObject<any>) {\n return z.preprocess((raw: any) => {\n return caster(schema, raw);\n }, schema);\n}\n"],"names":["caster","fastifyCaster","isNumberType","zodType","z","ZodNumber","isNullOrOptional","ZodNullable","ZodOptional","isZodNumberAnyway","def","innerType","raw","Number","ZodUnion","options","some","opt","Array","isArray","numType","find","assert","undefined","map","elem","ZodBoolean","ZodArray","element","ZodObject","Object","keys","reduce","r","rawKey","shape","ZodDate","Date","toString","schema","preprocess"],"mappings":"mPA2BgBA,gBAAAA,YAyDAC,uBAAAA,2EApFG,4BACD,oZAGlB,SAASC,aAAaC,OAAiB,EACrC,OAAOA,AAAO,YAAPA,QAAmBC,MAAC,CAACC,SAAS,CACvC,CAEA,SAASC,iBAAiBH,OAAiB,EACzC,OAAOA,AAAO,YAAPA,QAAmBC,MAAC,CAACG,WAAW,GAAIJ,AAAO,YAAPA,QAAmBC,MAAC,CAACI,WAAW,CAC7E,CAGA,SAASC,kBAAkBN,OAAiB,EAC1C,GAAID,aAAaC,SAAU,CACzB,OAAO,IACT,CAGA,GAAIG,iBAAiBH,UAAYD,aAAaC,QAAQO,GAAG,CAACC,SAAS,EAAG,CACpE,OAAO,IACT,CAEA,OAAO,KACT,CAGO,SAASX,OAAOG,OAAiB,CAAES,GAAQ,EAChD,GAAIH,kBAAkBN,UAAY,OAAOS,MAAQ,SAAU,CAEzD,OAAOC,OAAOD,IAChB,MAAO,GACLT,AAAO,YAAPA,QAAmBC,MAAC,CAACU,QAAQ,GAC7BX,QAAQY,OAAO,CAACC,IAAI,CAAC,SAACC,YAAQR,kBAAkBQ,OAChD,CAEA,GAAIC,MAAMC,OAAO,CAACP,KAAM,CACtB,IAAMQ,QAAUjB,QAAQY,OAAO,CAACM,IAAI,CAACJ,SAAAA,YAAOf,aAAae,OACzDK,GAAAA,eAAM,EAACF,UAAYG,WACnB,OAAOX,IAAIY,GAAG,CAAC,SAACC,aAAczB,OAAOoB,QAASK,OAChD,KAAO,CACL,OAAOZ,OAAOD,IAChB,CACF,MAAO,GACLT,AAAO,YAAPA,QAAmBC,MAAC,CAACsB,UAAU,GAC9Bd,CAAAA,MAAQ,QAAUA,MAAQ,OAAM,EACjC,CAEA,OAAOA,MAAQ,MACjB,MAAO,GACLA,MAAQ,MACRM,MAAMC,OAAO,CAACP,MACdT,AAAO,YAAPA,QAAmBC,MAAC,CAACuB,QAAQ,EAC7B,CAEA,OAAOf,IAAIY,GAAG,CAAC,SAACC,aAAczB,OAAOG,QAAQyB,OAAO,CAAEH,OACxD,MAAO,GACLtB,AAAO,YAAPA,QAAmBC,MAAC,CAACyB,SAAS,GAC9B,CAAA,OAAOjB,8BAAP,SAAOA,IAAE,IAAM,UACfA,MAAQ,KACR,CAEA,OAAOkB,OAAOC,IAAI,CAACnB,KAAKoB,MAAM,CAAC,SAACC,EAAGC,QACjCD,CAAC,CAACC,OAAO,CAAGlC,OAAOG,QAAQgC,KAAK,CAACD,OAAO,CAAEtB,GAAG,CAACsB,OAAO,EACrD,OAAOD,CACT,EAAG,CAAC,EACN,MAAO,GAAI9B,AAAO,YAAPA,QAAmBC,MAAC,CAACI,WAAW,EAAE,CAE3C,OAAOR,OAAOG,QAAQO,GAAG,CAACC,SAAS,CAAEC,IACvC,MAAO,GAAIT,AAAO,YAAPA,QAAmBC,MAAC,CAACG,WAAW,EAAE,CAE3C,OAAOP,OAAOG,QAAQO,GAAG,CAACC,SAAS,CAAEC,IACvC,MAAO,GACLT,AAAO,YAAPA,QAAmBC,MAAC,CAACgC,OAAO,GAC5B,IAAIC,KAAKzB,KAAK0B,QAAQ,KAAO,eAC7B,CAEA,OAAO,IAAID,KAAKzB,IAClB,KAAO,CAEL,OAAOA,GACT,CACF,CAEO,SAASX,cAAcsC,MAAwB,EACpD,OAAOnC,MAAC,CAACoC,UAAU,CAAC,SAAC5B,KACnB,OAAOZ,OAAOuC,OAAQ3B,IACxB,EAAG2B,OACL"}
@@ -0,0 +1,23 @@
1
+ import { z } from "zod";
2
+ import { ApiParam, ApiParamType, EntityProp, EntityPropNode, TextProp } from "../types/types";
3
+ import { ExtendedApi } from "./decorators";
4
+ export declare function getZodObjectFromApi(api: ExtendedApi, references?: {
5
+ [id: string]: z.ZodObject<any>;
6
+ }): z.ZodObject<z.core.$ZodLooseShape, z.core.$strip>;
7
+ export declare function getZodObjectFromApiParams(apiParams: ApiParam[], references?: {
8
+ [id: string]: z.ZodObject<any>;
9
+ }): z.ZodObject;
10
+ export declare function getZodTypeFromApiParamType(paramType: ApiParamType, references: {
11
+ [id: string]: z.ZodObject<any>;
12
+ }): z.ZodType<unknown>;
13
+ export declare function propNodeToZodTypeDef(propNode: EntityPropNode, injectImportKeys: string[]): string;
14
+ export declare function getTextTypeLength(textType: TextProp["textType"]): number;
15
+ export declare function propToZodTypeDef(prop: EntityProp, injectImportKeys: string[]): string;
16
+ export declare function zodTypeToZodCode(zt: z.ZodType<any>): string;
17
+ export declare function apiParamToTsCode(params: ApiParam[], injectImportKeys: string[]): string;
18
+ export declare function apiParamToTsCodeAsObject(params: ApiParam[], injectImportKeys: string[]): string;
19
+ export declare function apiParamTypeToTsType(paramType: ApiParamType, injectImportKeys: string[]): string;
20
+ export declare function unwrapPromiseOnce(paramType: ApiParamType): ApiParamType;
21
+ export declare function serializeZodType(zt: z.ZodTypeAny): any;
22
+ export declare function zodTypeToTsTypeDef(zt: z.ZodType): string;
23
+ //# sourceMappingURL=code-converters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-converters.d.ts","sourceRoot":"","sources":["../../src/api/code-converters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,cAAc,EACd,QAAQ,EAoBT,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAK3C,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;CAC3B,qDAwBP;AAKD,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,QAAQ,EAAE,EACrB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;CAC3B,GACL,CAAC,CAAC,SAAS,CAab;AAKD,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;CAChC,GACA,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAwIpB;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,gBAAgB,EAAE,MAAM,EAAE,GACzB,MAAM,CA8BR;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,MAAM,CASxE;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,gBAAgB,EAAE,MAAM,EAAE,GACzB,MAAM,CAyDR;AAGD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAyF3D;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,QAAQ,EAAE,EAClB,gBAAgB,EAAE,MAAM,EAAE,GACzB,MAAM,CAUR;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,QAAQ,EAAE,EAClB,gBAAgB,EAAE,MAAM,EAAE,GACzB,MAAM,CAUR;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,YAAY,EACvB,gBAAgB,EAAE,MAAM,EAAE,GACzB,MAAM,CAsER;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,YAAY,gBAMxD;AAGD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,GAAG,GAAG,CAuEtD;AAGD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAgExD"}
@@ -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 apiParamToTsCode(){return apiParamToTsCode},get apiParamToTsCodeAsObject(){return apiParamToTsCodeAsObject},get apiParamTypeToTsType(){return apiParamTypeToTsType},get getTextTypeLength(){return getTextTypeLength},get getZodObjectFromApi(){return getZodObjectFromApi},get getZodObjectFromApiParams(){return getZodObjectFromApiParams},get getZodTypeFromApiParamType(){return getZodTypeFromApiParamType},get propNodeToZodTypeDef(){return propNodeToZodTypeDef},get propToZodTypeDef(){return propToZodTypeDef},get serializeZodType(){return serializeZodType},get unwrapPromiseOnce(){return unwrapPromiseOnce},get zodTypeToTsTypeDef(){return zodTypeToTsTypeDef},get zodTypeToZodCode(){return zodTypeToZodCode}});var _zod=require("zod");var _types=require("../types/types");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 _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _instanceof(left,right){if(right!=null&&typeof Symbol!=="undefined"&&right[Symbol.hasInstance]){return!!right[Symbol.hasInstance](left)}else{return left instanceof right}}function _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}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 _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 _object_spread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};var ownKeys=Object.keys(source);if(typeof Object.getOwnPropertySymbols==="function"){ownKeys=ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym){return Object.getOwnPropertyDescriptor(source,sym).enumerable}))}ownKeys.forEach(function(key){_define_property(target,key,source[key])})}return target}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly){symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})}keys.push.apply(keys,symbols)}return keys}function _object_spread_props(target,source){source=source!=null?source:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}return target}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 _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 getZodObjectFromApi(api){var references=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};var _api_typeParameters;if(((_api_typeParameters=api.typeParameters)===null||_api_typeParameters===void 0?void 0:_api_typeParameters.length)>0){api.typeParameters.map(function(typeParam){if(typeParam.constraint){var zodType=getZodTypeFromApiParamType(typeParam.constraint,references);references[typeParam.id]=zodType}})}var ReqType=getZodObjectFromApiParams(api.parameters.filter(function(param){return!_types.ApiParamType.isContext(param.type)&&!_types.ApiParamType.isRefKnex(param.type)&&!(param.optional===true&&param.name.startsWith("_"))}),references);return ReqType}function getZodObjectFromApiParams(apiParams){var references=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return _zod.z.object(apiParams.reduce(function(r,param){var zodType=getZodTypeFromApiParamType(param.type,references);if(param.optional){zodType=zodType.optional()}return _object_spread_props(_object_spread({},r),_define_property({},param.name,zodType))},{}))}function getZodTypeFromApiParamType(paramType,references){switch(paramType){case"string":return _zod.z.string();case"number":return _zod.z.number();case"boolean":return _zod.z.boolean();default:var advType=paramType;switch(advType.t){case"string-literal":case"numeric-literal":return _zod.z.literal(advType.value);case"object":var objType=paramType;return getZodObjectFromApiParams(objType.props);case"array":var arrType=paramType;return _zod.z.array(getZodTypeFromApiParamType(arrType.elementsType,references));case"ref":var refType=paramType;if(refType.id==="Date"){return _zod.z.date()}if(["Pick","Omit"].includes(refType.id)){var _refType_args;if(((_refType_args=refType.args)===null||_refType_args===void 0?void 0:_refType_args.length)!==2){throw new Error("잘못된 ".concat(refType.id))}var _refType_args_map=_sliced_to_array(refType.args.map(function(arg){return getZodTypeFromApiParamType(arg,references)}),2),obj=_refType_args_map[0],literalOrUnion=_refType_args_map[1];var keys=[];if(_instanceof(literalOrUnion,_zod.z.ZodUnion)){keys=literalOrUnion.def.options.map(function(option){return option.def.value})}else{keys=literalOrUnion.def.values}var keyRecord=keys.reduce(function(result,key){return _object_spread_props(_object_spread({},result),_define_property({},key,true))},{});if(refType.id==="Pick"){if(obj.pick){return obj.pick(keyRecord)}}else{if(obj.omit){return obj.omit(keyRecord)}}}if(["Partial"].includes(refType.id)){var _refType_args1;if(((_refType_args1=refType.args)===null||_refType_args1===void 0?void 0:_refType_args1.length)!==1){throw new Error("잘못된 ".concat(refType.id))}var obj1=getZodTypeFromApiParamType(refType.args[0],references);return obj1.partial()}var reference=references[refType.id];if(reference===undefined){return _zod.z.string()}return reference;case"union":var unionType=paramType;if(unionType.types.length===2&&unionType.types.some(function(type){return type==="null"})){if(unionType.types[0]==="null"){return getZodTypeFromApiParamType(unionType.types[1],references).nullable()}else{return getZodTypeFromApiParamType(unionType.types[0],references).nullable()}}return _zod.z.union(unionType.types.map(function(type){return getZodTypeFromApiParamType(type,references)}));case"intersection":var intersectionType=paramType;return intersectionType.types.reduce(function(result,type,index){var resolvedType=getZodTypeFromApiParamType(type,references);if(index===0){return resolvedType}else{return _zod.z.intersection(result,resolvedType)}},_zod.z.unknown());case"tuple-type":var tupleType=paramType;return _zod.z.tuple(tupleType.elements.map(function(elem){return getZodTypeFromApiParamType(elem,references)}))}return _zod.z.unknown()}}function propNodeToZodTypeDef(propNode,injectImportKeys){if(propNode.nodeType==="plain"){return propToZodTypeDef(propNode.prop,injectImportKeys)}else if(propNode.nodeType==="array"){return[propNode.prop?"".concat(propNode.prop.name,": "):"","z.array(z.object({",propNode.children.map(function(childPropNode){return propNodeToZodTypeDef(childPropNode,injectImportKeys)}).join("\n"),"","})),"].join("\n")}else if(propNode.nodeType==="object"){return[propNode.prop?"".concat(propNode.prop.name,": "):"","z.object({",propNode.children.map(function(childPropNode){return propNodeToZodTypeDef(childPropNode,injectImportKeys)}).join("\n"),"","})".concat(propNode.prop&&propNode.prop.nullable?".nullable()":"",",")].join("\n")}else{throw Error}}function getTextTypeLength(textType){switch(textType){case"text":return 1024*64-1;case"mediumtext":return 1024*1024*16-1;case"longtext":return 1024*1024*1024*4-1}}function propToZodTypeDef(prop,injectImportKeys){var stmt;if((0,_types.isIntegerProp)(prop)){stmt="".concat(prop.name,": z.int()")}else if((0,_types.isBigIntegerProp)(prop)){stmt="".concat(prop.name,": z.bigint()")}else if((0,_types.isTextProp)(prop)){stmt="".concat(prop.name,": z.string().max(").concat(getTextTypeLength(prop.textType),")")}else if((0,_types.isEnumProp)(prop)){stmt="".concat(prop.name,": ").concat(prop.id);injectImportKeys.push(prop.id)}else if((0,_types.isStringProp)(prop)){stmt="".concat(prop.name,": z.string().max(").concat(prop.length,")")}else if((0,_types.isDecimalProp)(prop)){stmt="".concat(prop.name,": z.string()")}else if((0,_types.isFloatProp)(prop)||(0,_types.isDoubleProp)(prop)){stmt="".concat(prop.name,": z.number()")}else if((0,_types.isBooleanProp)(prop)){stmt="".concat(prop.name,": z.boolean()")}else if((0,_types.isDateProp)(prop)){stmt="".concat(prop.name,": z.string().length(10)")}else if((0,_types.isTimeProp)(prop)){stmt="".concat(prop.name,": z.string().length(8)")}else if((0,_types.isDateTimeProp)(prop)){stmt="".concat(prop.name,": z.date()")}else if((0,_types.isTimestampProp)(prop)){stmt="".concat(prop.name,": z.date()")}else if((0,_types.isJsonProp)(prop)){stmt="".concat(prop.name,": ").concat(prop.id);injectImportKeys.push(prop.id)}else if((0,_types.isUuidProp)(prop)){stmt="".concat(prop.name,": z.uuid()")}else if((0,_types.isVirtualProp)(prop)){stmt="".concat(prop.name,": ").concat(prop.id);injectImportKeys.push(prop.id)}else if((0,_types.isRelationProp)(prop)){if((0,_types.isBelongsToOneRelationProp)(prop)||(0,_types.isOneToOneRelationProp)(prop)&&prop.hasJoinColumn){stmt="".concat(prop.name,"_id: z.int()")}else{return"// ".concat(prop.name,": ").concat(prop.relationType," ").concat(prop.with)}}else{return"// unable to resolve"}if(prop.unsigned){stmt+=".nonnegative()"}if(prop.nullable){stmt+=".nullable()"}return stmt+","}function zodTypeToZodCode(zt){switch(zt.def.type){case"string":return"z.string()";case"number":return"z.number()";case"bigint":return"z.bigint()";case"boolean":return"z.boolean()";case"date":return"z.date()";case"null":return"z.null()";case"undefined":return"z.undefined()";case"any":return"z.any()";case"unknown":return"z.unknown()";case"never":return"z.never()";case"nullable":return zodTypeToZodCode(zt.def.innerType)+".nullable()";case"default":var zDefaultDef=zt.def;return zodTypeToZodCode(zDefaultDef.innerType)+".default(".concat(zDefaultDef.defaultValue(),")");case"record":var zRecordDef=zt.def;return"z.record(".concat(zodTypeToZodCode(zRecordDef.keyType),", ").concat(zodTypeToZodCode(zRecordDef.valueType),")");case"literal":var items=Array.from(zt.values).map(function(value){if(typeof value==="string"){return'"'.concat(value,'"')}if(value===null){return"null"}if(value===undefined){return"undefined"}return"".concat(value)});if(items.length===1){return"z.literal(".concat(items[0],")")}return"z.literal([".concat(items.join(", "),"])");case"union":return"z.union([".concat(zt.def.options.map(function(option){return zodTypeToZodCode(option)}).join(","),"])");case"enum":return"z.enum([".concat(Object.entries(zt.def.entries).map(function(param){var _param=_sliced_to_array(param,2),key=_param[0],val=_param[1];return typeof val==="string"?"".concat(key,': "').concat(val,'"'):"".concat(key,": ").concat(val)}).join(", "),"})");case"array":return"z.array(".concat(zodTypeToZodCode(zt.def.element),")");case"object":var shape=zt.shape;return["z.object({"].concat(_to_consumable_array(Object.keys(shape).map(function(key){return"".concat(key,": ").concat(zodTypeToZodCode(shape[key]),",")})),["})"]).join("\n");case"optional":return zodTypeToZodCode(zt.def.innerType)+".optional()";case"file":return"z.file()";case"intersection":var zIntersectionDef=zt.def;return"z.intersection(".concat(zodTypeToZodCode(zIntersectionDef.left),", ").concat(zodTypeToZodCode(zIntersectionDef.right),")");case"file":return"z.file()";default:throw new Error("처리되지 않은 ZodType ".concat(zt.def.type))}}function apiParamToTsCode(params,injectImportKeys){return params.map(function(param){return"".concat(param.name).concat(param.optional&&!param.defaultDef?"?":"",": ").concat(apiParamTypeToTsType(param.type,injectImportKeys)).concat(param.defaultDef?"= ".concat(param.defaultDef):"")}).join(", ")}function apiParamToTsCodeAsObject(params,injectImportKeys){return"{ ".concat(params.map(function(param){return"".concat(param.name).concat(param.optional?"?":"",": ").concat(apiParamTypeToTsType(param.type,injectImportKeys)).concat(param.defaultDef?"= ".concat(param.defaultDef):"")}).join(", ")," }")}function apiParamTypeToTsType(paramType,injectImportKeys){if(["string","number","boolean","true","false","null","undefined","void","any","unknown"].includes(paramType)){return paramType}else if(_types.ApiParamType.isObject(paramType)){return"{ ".concat(apiParamToTsCode(paramType.props,injectImportKeys)," }")}else if(_types.ApiParamType.isStringLiteral(paramType)){return'"'.concat(paramType.value,'"')}else if(_types.ApiParamType.isNumericLiteral(paramType)){return String(paramType.value)}else if(_types.ApiParamType.isUnion(paramType)){return paramType.types.map(function(type){return apiParamTypeToTsType(type,injectImportKeys)}).join(" | ")}else if(_types.ApiParamType.isIntersection(paramType)){return paramType.types.map(function(type){return apiParamTypeToTsType(type,injectImportKeys)}).join(" & ")}else if(_types.ApiParamType.isArray(paramType)){return apiParamTypeToTsType(paramType.elementsType,injectImportKeys)+"[]"}else if(_types.ApiParamType.isRef(paramType)){if(["Pick","Omit","Promise","Partial","Date"].includes(paramType.id)===false){injectImportKeys.push(paramType.id)}if(paramType.args===undefined||paramType.args.length===0){return paramType.id}else{return"".concat(paramType.id,"<").concat(paramType.args.map(function(arg){return apiParamTypeToTsType(arg,injectImportKeys)}).join(","),">")}}else if(_types.ApiParamType.isIndexedAccess(paramType)){return"".concat(apiParamTypeToTsType(paramType.object,injectImportKeys),"[").concat(apiParamTypeToTsType(paramType.index,injectImportKeys),"]")}else if(_types.ApiParamType.isTupleType(paramType)){return"[ ".concat(paramType.elements.map(function(elem){return apiParamTypeToTsType(elem,injectImportKeys)})," ]")}else if(_types.ApiParamType.isTypeParam(paramType)){return"<".concat(paramType.id).concat(paramType.constraint?" extends ".concat(apiParamTypeToTsType(paramType.constraint,injectImportKeys)):"",">")}else{throw new Error("resolve 불가 ApiParamType ".concat(paramType))}}function unwrapPromiseOnce(paramType){if(_types.ApiParamType.isPromise(paramType)){return paramType.args[0]}else{return paramType}}function serializeZodType(zt){switch(zt.def.type){case"object":return{type:"object",shape:Object.keys(zt.shape).reduce(function(result,key){return _object_spread_props(_object_spread({},result),_define_property({},key,serializeZodType(zt.shape[key])))},{})};case"array":return{type:"array",element:serializeZodType(zt.def.element)};case"enum":return{type:"enum",values:zt.def.entries};case"string":return{type:"string",checks:zt.def.checks};case"number":return{type:"number",checks:zt.def.checks};case"boolean":return{type:"boolean"};case"nullable":return _object_spread_props(_object_spread({},serializeZodType(zt.def.innerType)),{nullable:true});case"optional":return _object_spread_props(_object_spread({},serializeZodType(zt.def.innerType)),{optional:true});case"any":return{type:"any"};case"record":return{type:"record",keyType:serializeZodType(zt.def.keyType),valueType:serializeZodType(zt.def.valueType)};case"union":return{type:"union",options:zt.def.options.map(function(option){return serializeZodType(option)})};default:throw new Error("Serialize 로직이 정의되지 않은 ZodType: ".concat(zt.def.type))}}function zodTypeToTsTypeDef(zt){switch(zt.def.type){case"string":case"number":case"boolean":case"bigint":case"date":case"null":case"undefined":case"any":case"unknown":case"never":return zt.def.type;case"nullable":return zodTypeToTsTypeDef(zt.def.innerType)+" | null";case"default":return zodTypeToTsTypeDef(zt.def.innerType);case"record":var recordType=zt;return"{ [ key: ".concat(zodTypeToTsTypeDef(recordType.def.keyType)," ]: ").concat(zodTypeToTsTypeDef(recordType.def.valueType),"}");case"literal":return Array.from(zt.values).map(function(value){if(typeof value==="string"){return'"'.concat(value,'"')}if(value===null){return"null"}if(value===undefined){return"undefined"}return"".concat(value)}).join(" | ");case"union":return"".concat(zt.options.map(function(option){return zodTypeToTsTypeDef(option)}).join(" | "));case"enum":return"".concat(zt.options.map(function(val){return'"'.concat(val,'"')}).join(" | "));case"array":return"".concat(zodTypeToTsTypeDef(zt.element.type),"[]");case"object":var shape=zt.shape;return["{"].concat(_to_consumable_array(Object.keys(shape).map(function(key){if(shape[key].def.type==="optional"){return"".concat(key,"?: ").concat(zodTypeToTsTypeDef(shape[key].def.innerType),",")}else{return"".concat(key,": ").concat(zodTypeToTsTypeDef(shape[key]),",")}})),["}"]).join("\n");case"optional":return zodTypeToTsTypeDef(zt.def.innerType)+" | undefined";default:throw new Error("처리되지 않은 ZodType ".concat(zt.def.type))}}
2
+ //# sourceMappingURL=code-converters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/api/code-converters.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n ApiParam,\n ApiParamType,\n EntityProp,\n EntityPropNode,\n TextProp,\n isBelongsToOneRelationProp,\n isBigIntegerProp,\n isBooleanProp,\n isDateProp,\n isDateTimeProp,\n isDecimalProp,\n isDoubleProp,\n isEnumProp,\n isFloatProp,\n isIntegerProp,\n isJsonProp,\n isOneToOneRelationProp,\n isRelationProp,\n isStringProp,\n isTextProp,\n isTimeProp,\n isTimestampProp,\n isUuidProp,\n isVirtualProp,\n} from \"../types/types\";\nimport { ExtendedApi } from \"./decorators\";\n\n/*\n ExtendedApi 에서 ZodObject 리턴\n*/\nexport function getZodObjectFromApi(\n api: ExtendedApi,\n references: {\n [id: string]: z.ZodObject<any>;\n } = {}\n) {\n if (api.typeParameters?.length > 0) {\n api.typeParameters.map((typeParam) => {\n if (typeParam.constraint) {\n let zodType = getZodTypeFromApiParamType(\n typeParam.constraint,\n references\n );\n (references[typeParam.id] as any) = zodType;\n }\n });\n }\n\n const ReqType = getZodObjectFromApiParams(\n api.parameters.filter(\n (param) =>\n !ApiParamType.isContext(param.type) &&\n !ApiParamType.isRefKnex(param.type) &&\n !(param.optional === true && param.name.startsWith(\"_\")) // _로 시작하는 파라미터는 제외\n ),\n references\n );\n return ReqType;\n}\n\n/*\n ZodObject를 통해 ApiParam 리턴\n*/\nexport function getZodObjectFromApiParams(\n apiParams: ApiParam[],\n references: {\n [id: string]: z.ZodObject<any>;\n } = {}\n): z.ZodObject {\n return z.object(\n apiParams.reduce((r, param) => {\n let zodType = getZodTypeFromApiParamType(param.type, references);\n if (param.optional) {\n zodType = zodType.optional();\n }\n return {\n ...r,\n [param.name]: zodType,\n };\n }, {})\n );\n}\n\n/*\n ApiParamType으로 ZodType 컨버팅\n*/\nexport function getZodTypeFromApiParamType(\n paramType: ApiParamType,\n references: {\n [id: string]: z.ZodObject<any>;\n }\n): z.ZodType<unknown> {\n switch (paramType) {\n case \"string\":\n return z.string();\n case \"number\":\n return z.number();\n case \"boolean\":\n return z.boolean();\n default:\n const advType = paramType as { t: string };\n switch (advType.t) {\n case \"string-literal\":\n case \"numeric-literal\":\n return z.literal((advType as any).value);\n case \"object\":\n const objType = paramType as { t: string; props: ApiParam[] };\n return getZodObjectFromApiParams(objType.props);\n case \"array\":\n const arrType = paramType as {\n t: string;\n elementsType: ApiParamType;\n };\n return z.array(\n getZodTypeFromApiParamType(arrType.elementsType, references)\n );\n case \"ref\":\n const refType = paramType as {\n t: string;\n id: string;\n args?: ApiParamType[];\n };\n\n // Date 타입 처리\n if (refType.id === \"Date\") {\n return z.date();\n }\n\n // 객체 키 관리 유틸리티\n if ([\"Pick\", \"Omit\"].includes(refType.id)) {\n if (refType.args?.length !== 2) {\n throw new Error(`잘못된 ${refType.id}`);\n }\n const [obj, literalOrUnion] = refType.args!.map((arg) =>\n getZodTypeFromApiParamType(arg, references)\n ) as [z.ZodObject<any>, z.ZodUnion<any> | z.ZodLiteral<string>];\n let keys: string[] = [];\n if (literalOrUnion instanceof z.ZodUnion) {\n keys = literalOrUnion.def.options.map(\n (option: { def: { value: string } }) => option.def.value\n );\n } else {\n keys = (literalOrUnion as z.ZodLiteral<string>).def.values;\n }\n const keyRecord = keys.reduce((result, key) => {\n return {\n ...result,\n [key]: true,\n };\n }, {} as any);\n\n if (refType.id === \"Pick\") {\n if (obj.pick) {\n return obj.pick(keyRecord);\n }\n } else {\n if (obj.omit) {\n return obj.omit(keyRecord);\n }\n }\n }\n if ([\"Partial\"].includes(refType.id)) {\n if (refType.args?.length !== 1) {\n throw new Error(`잘못된 ${refType.id}`);\n }\n const obj = getZodTypeFromApiParamType(refType.args[0], references);\n return (obj as any).partial();\n }\n\n const reference = references[refType.id];\n if (reference === undefined) {\n return z.string();\n // throw new Error(`ref 참조 불가 ${refType.id}`);\n }\n return reference;\n case \"union\":\n const unionType = paramType as {\n t: string;\n types: ApiParamType[];\n };\n // nullable 유니온\n if (\n unionType.types.length === 2 &&\n unionType.types.some((type) => type === \"null\")\n ) {\n if (unionType.types[0] === \"null\") {\n return getZodTypeFromApiParamType(\n unionType.types[1],\n references\n ).nullable();\n } else {\n return getZodTypeFromApiParamType(\n unionType.types[0],\n references\n ).nullable();\n }\n }\n\n // 일반 유니온\n return z.union(\n unionType.types.map((type) =>\n getZodTypeFromApiParamType(type, references)\n ) as any\n );\n case \"intersection\":\n const intersectionType = paramType as {\n t: string;\n types: ApiParamType[];\n };\n return intersectionType.types.reduce((result, type, index) => {\n const resolvedType = getZodTypeFromApiParamType(type, references);\n if (index === 0) {\n return resolvedType;\n } else {\n return z.intersection(result as any, resolvedType);\n }\n }, z.unknown() as any) as any;\n case \"tuple-type\":\n const tupleType = paramType as ApiParamType.TupleType;\n return z.tuple(\n tupleType.elements.map((elem) =>\n getZodTypeFromApiParamType(elem, references)\n ) as any\n );\n }\n return z.unknown();\n }\n}\n\nexport function propNodeToZodTypeDef(\n propNode: EntityPropNode,\n injectImportKeys: string[]\n): string {\n if (propNode.nodeType === \"plain\") {\n return propToZodTypeDef(propNode.prop, injectImportKeys);\n } else if (propNode.nodeType === \"array\") {\n return [\n propNode.prop ? `${propNode.prop.name}: ` : \"\",\n \"z.array(z.object({\",\n propNode.children\n .map((childPropNode) =>\n propNodeToZodTypeDef(childPropNode, injectImportKeys)\n )\n .join(\"\\n\"),\n \"\",\n \"})),\",\n ].join(\"\\n\");\n } else if (propNode.nodeType === \"object\") {\n return [\n propNode.prop ? `${propNode.prop.name}: ` : \"\",\n \"z.object({\",\n propNode.children\n .map((childPropNode) =>\n propNodeToZodTypeDef(childPropNode, injectImportKeys)\n )\n .join(\"\\n\"),\n \"\",\n `})${propNode.prop && propNode.prop.nullable ? \".nullable()\" : \"\"},`,\n ].join(\"\\n\");\n } else {\n throw Error;\n }\n}\n\nexport function getTextTypeLength(textType: TextProp[\"textType\"]): number {\n switch (textType) {\n case \"text\":\n return 1024 * 64 - 1;\n case \"mediumtext\":\n return 1024 * 1024 * 16 - 1;\n case \"longtext\":\n return 1024 * 1024 * 1024 * 4 - 1;\n }\n}\n\nexport function propToZodTypeDef(\n prop: EntityProp,\n injectImportKeys: string[]\n): string {\n let stmt: string;\n if (isIntegerProp(prop)) {\n stmt = `${prop.name}: z.int()`;\n } else if (isBigIntegerProp(prop)) {\n stmt = `${prop.name}: z.bigint()`;\n } else if (isTextProp(prop)) {\n stmt = `${prop.name}: z.string().max(${getTextTypeLength(prop.textType)})`;\n } else if (isEnumProp(prop)) {\n stmt = `${prop.name}: ${prop.id}`;\n injectImportKeys.push(prop.id);\n } else if (isStringProp(prop)) {\n stmt = `${prop.name}: z.string().max(${prop.length})`;\n } else if (isDecimalProp(prop)) {\n stmt = `${prop.name}: z.string()`;\n } else if (isFloatProp(prop) || isDoubleProp(prop)) {\n stmt = `${prop.name}: z.number()`;\n } else if (isBooleanProp(prop)) {\n stmt = `${prop.name}: z.boolean()`;\n } else if (isDateProp(prop)) {\n stmt = `${prop.name}: z.string().length(10)`;\n } else if (isTimeProp(prop)) {\n stmt = `${prop.name}: z.string().length(8)`;\n } else if (isDateTimeProp(prop)) {\n stmt = `${prop.name}: z.date()`;\n } else if (isTimestampProp(prop)) {\n stmt = `${prop.name}: z.date()`;\n } else if (isJsonProp(prop)) {\n stmt = `${prop.name}: ${prop.id}`;\n injectImportKeys.push(prop.id);\n } else if (isUuidProp(prop)) {\n stmt = `${prop.name}: z.uuid()`;\n } else if (isVirtualProp(prop)) {\n stmt = `${prop.name}: ${prop.id}`;\n injectImportKeys.push(prop.id);\n } else if (isRelationProp(prop)) {\n if (\n isBelongsToOneRelationProp(prop) ||\n (isOneToOneRelationProp(prop) && prop.hasJoinColumn)\n ) {\n stmt = `${prop.name}_id: z.int()`;\n } else {\n // 그외 relation 케이스 제외\n return `// ${prop.name}: ${prop.relationType} ${prop.with}`;\n }\n } else {\n return \"// unable to resolve\";\n }\n\n if ((prop as { unsigned?: boolean }).unsigned) {\n stmt += \".nonnegative()\";\n }\n if (prop.nullable) {\n stmt += \".nullable()\";\n }\n\n return stmt + \",\";\n}\n\n// TODO(Haze, 251031): \"template_literal\", \"file\"에 대한 지원이 필요함.\nexport function zodTypeToZodCode(zt: z.ZodType<any>): string {\n switch (zt.def.type) {\n case \"string\":\n return \"z.string()\";\n case \"number\":\n return \"z.number()\";\n case \"bigint\":\n return \"z.bigint()\";\n case \"boolean\":\n return \"z.boolean()\";\n case \"date\":\n return \"z.date()\";\n case \"null\":\n return \"z.null()\";\n case \"undefined\":\n return \"z.undefined()\";\n case \"any\":\n return \"z.any()\";\n case \"unknown\":\n return \"z.unknown()\";\n case \"never\":\n return \"z.never()\";\n case \"nullable\":\n return zodTypeToZodCode((zt as z.ZodNullable<any>).def.innerType) + \".nullable()\";\n case \"default\":\n const zDefaultDef = (zt as z.ZodDefault<any>).def;\n return (\n zodTypeToZodCode(zDefaultDef.innerType) +\n `.default(${zDefaultDef.defaultValue()})`\n );\n case \"record\":\n const zRecordDef = (zt as z.ZodRecord<any, any>).def;\n return `z.record(${zodTypeToZodCode(zRecordDef.keyType)}, ${zodTypeToZodCode(\n zRecordDef.valueType\n )})`;\n case \"literal\":\n const items = Array.from((zt as z.ZodLiteral<any>).values).map(value => {\n if (typeof value === \"string\") {\n return `\"${value}\"`;\n }\n\n if (value === null) {\n return `null`;\n }\n\n if (value === undefined) {\n return `undefined`;\n }\n\n return `${value}`;\n });\n\n if (items.length === 1) {\n return `z.literal(${items[0]})`;\n }\n return `z.literal([${items.join(\", \")}])`;\n case \"union\":\n return `z.union([${(zt as z.ZodUnion<any>).def.options\n .map((option: z.ZodType<any>) => zodTypeToZodCode(option))\n .join(\",\")}])`;\n case \"enum\":\n // NOTE: z.enum([\"A\", \"B\"])도 z.enum({ A: \"A\", B: \"B\" })로 처리됨.\n return `z.enum([${Object.entries((zt as z.ZodEnum).def.entries)\n .map(([key, val]) =>\n typeof val === \"string\" ? `${key}: \"${val}\"` : `${key}: ${val}`)\n .join(\", \")}})`;\n case \"array\":\n return `z.array(${zodTypeToZodCode((zt as z.ZodArray<z.ZodType>).def.element)})`;\n case \"object\":\n const shape = (zt as any).shape;\n return [\n \"z.object({\",\n ...Object.keys(shape).map(\n (key) => `${key}: ${zodTypeToZodCode(shape[key])},`\n ),\n \"})\",\n ].join(\"\\n\");\n case \"optional\":\n return zodTypeToZodCode((zt as z.ZodOptional<z.ZodType>).def.innerType) + \".optional()\";\n case \"file\":\n return `z.file()`;\n case \"intersection\":\n const zIntersectionDef = (zt as z.ZodIntersection<z.ZodType, z.ZodType>).def;\n return `z.intersection(${zodTypeToZodCode(zIntersectionDef.left)}, ${zodTypeToZodCode(zIntersectionDef.right)})`;\n case \"file\":\n return `z.file()`;\n default:\n throw new Error(`처리되지 않은 ZodType ${zt.def.type}`);\n }\n}\n\nexport function apiParamToTsCode(\n params: ApiParam[],\n injectImportKeys: string[]\n): string {\n return params\n .map((param) => {\n return `${param.name}${\n param.optional && !param.defaultDef ? \"?\" : \"\"\n }: ${apiParamTypeToTsType(param.type, injectImportKeys)}${\n param.defaultDef ? `= ${param.defaultDef}` : \"\"\n }`;\n })\n .join(\", \");\n}\n\nexport function apiParamToTsCodeAsObject(\n params: ApiParam[],\n injectImportKeys: string[]\n): string {\n return `{ ${params\n .map(\n (param) =>\n `${param.name}${param.optional ? \"?\" : \"\"}: ${apiParamTypeToTsType(\n param.type,\n injectImportKeys\n )}${param.defaultDef ? `= ${param.defaultDef}` : \"\"}`\n )\n .join(\", \")} }`;\n}\n\nexport function apiParamTypeToTsType(\n paramType: ApiParamType,\n injectImportKeys: string[]\n): string {\n if (\n [\n \"string\",\n \"number\",\n \"boolean\",\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"void\",\n \"any\",\n \"unknown\",\n ].includes(paramType as string)\n ) {\n return paramType as string;\n } else if (ApiParamType.isObject(paramType)) {\n return `{ ${apiParamToTsCode(paramType.props, injectImportKeys)} }`;\n } else if (ApiParamType.isStringLiteral(paramType)) {\n return `\"${paramType.value}\"`;\n } else if (ApiParamType.isNumericLiteral(paramType)) {\n return String(paramType.value);\n } else if (ApiParamType.isUnion(paramType)) {\n return paramType.types\n .map((type) => apiParamTypeToTsType(type, injectImportKeys))\n .join(\" | \");\n } else if (ApiParamType.isIntersection(paramType)) {\n return paramType.types\n .map((type) => apiParamTypeToTsType(type, injectImportKeys))\n .join(\" & \");\n } else if (ApiParamType.isArray(paramType)) {\n return (\n apiParamTypeToTsType(paramType.elementsType, injectImportKeys) + \"[]\"\n );\n } else if (ApiParamType.isRef(paramType)) {\n if (\n [\"Pick\", \"Omit\", \"Promise\", \"Partial\", \"Date\"].includes(paramType.id) ===\n false\n ) {\n // importKeys 인젝션\n injectImportKeys.push(paramType.id);\n }\n if (paramType.args === undefined || paramType.args.length === 0) {\n return paramType.id;\n } else {\n return `${paramType.id}<${paramType.args\n .map((arg) => apiParamTypeToTsType(arg, injectImportKeys))\n .join(\",\")}>`;\n }\n } else if (ApiParamType.isIndexedAccess(paramType)) {\n return `${apiParamTypeToTsType(\n paramType.object,\n injectImportKeys\n )}[${apiParamTypeToTsType(paramType.index, injectImportKeys)}]`;\n } else if (ApiParamType.isTupleType(paramType)) {\n return `[ ${paramType.elements.map((elem) =>\n apiParamTypeToTsType(elem, injectImportKeys)\n )} ]`;\n } else if (ApiParamType.isTypeParam(paramType)) {\n return `<${paramType.id}${\n paramType.constraint\n ? ` extends ${apiParamTypeToTsType(\n paramType.constraint,\n injectImportKeys\n )}`\n : \"\"\n }>`;\n } else {\n throw new Error(`resolve 불가 ApiParamType ${paramType}`);\n }\n}\n\nexport function unwrapPromiseOnce(paramType: ApiParamType) {\n if (ApiParamType.isPromise(paramType)) {\n return paramType.args![0];\n } else {\n return paramType;\n }\n}\n\n// TODO(Haze, 251031): \"template_literal\", \"file\"에 대한 지원이 필요함.\nexport function serializeZodType(zt: z.ZodTypeAny): any {\n switch (zt.def.type) {\n case \"object\":\n return {\n type: \"object\",\n shape: Object.keys((zt as z.ZodObject<any>).shape).reduce(\n (result, key) => {\n return {\n ...result,\n [key]: serializeZodType((zt as z.ZodObject<any>).shape[key]),\n };\n },\n {}\n ),\n };\n case \"array\":\n return {\n type: \"array\",\n element: serializeZodType((zt as z.ZodArray<any>).def.element),\n };\n case \"enum\":\n return {\n type: \"enum\",\n values: (zt as z.ZodEnum).def.entries,\n };\n case \"string\":\n return {\n type: \"string\",\n checks: zt.def.checks,\n };\n case \"number\":\n return {\n type: \"number\",\n checks: zt.def.checks,\n };\n case \"boolean\":\n return {\n type: \"boolean\",\n };\n case \"nullable\":\n return {\n ...serializeZodType((zt as z.ZodNullable<any>).def.innerType),\n nullable: true,\n };\n case \"optional\":\n return {\n ...serializeZodType((zt as z.ZodOptional<any>).def.innerType),\n optional: true,\n };\n case \"any\":\n return {\n type: \"any\",\n };\n case \"record\":\n return {\n type: \"record\",\n keyType: serializeZodType((zt as z.ZodRecord<any, any>).def.keyType),\n valueType: serializeZodType((zt as z.ZodRecord<any, any>).def.valueType),\n };\n case \"union\":\n return {\n type: \"union\",\n options: (zt.def as z.ZodUnion<z.ZodType<any>[]>).options.map((option) =>\n serializeZodType(option)\n ),\n };\n default:\n throw new Error(\n `Serialize 로직이 정의되지 않은 ZodType: ${zt.def.type}`\n );\n }\n}\n\n// TODO(Haze, 251031): \"template_literal\", \"file\"에 대한 지원이 필요함.\nexport function zodTypeToTsTypeDef(zt: z.ZodType): string {\n switch (zt.def.type) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n case \"bigint\":\n case \"date\":\n case \"null\":\n case \"undefined\":\n case \"any\":\n case \"unknown\":\n case \"never\":\n return zt.def.type;\n case \"nullable\":\n return zodTypeToTsTypeDef((zt as z.ZodNullable<any>).def.innerType) + \" | null\";\n case \"default\":\n return zodTypeToTsTypeDef((zt as z.ZodDefault<any>).def.innerType);\n case \"record\":\n const recordType = zt as z.ZodRecord<any, any>;\n return `{ [ key: ${zodTypeToTsTypeDef(\n recordType.def.keyType\n )} ]: ${zodTypeToTsTypeDef(recordType.def.valueType)}}`;\n case \"literal\":\n return Array.from((zt as z.ZodLiteral<any>).values).map(value => {\n if (typeof value === \"string\") {\n return `\"${value}\"`;\n }\n\n if (value === null) {\n return `null`;\n }\n\n if (value === undefined) {\n return `undefined`;\n }\n\n return `${value}`;\n }).join(\" | \")\n case \"union\":\n return `${(zt as z.ZodUnion<z.ZodTypeAny[]>).options\n .map((option) => zodTypeToTsTypeDef(option))\n .join(\" | \")}`;\n case \"enum\":\n return `${(zt as z.ZodEnum).options.map((val) => `\"${val}\"`).join(\" | \")}`;\n case \"array\":\n return `${zodTypeToTsTypeDef((zt as z.ZodArray<any>).element.type)}[]`;\n case \"object\":\n const shape = (zt as z.ZodObject<any>).shape;\n return [\n \"{\",\n ...Object.keys(shape).map((key) => {\n if (shape[key].def.type === \"optional\") {\n return `${key}?: ${zodTypeToTsTypeDef(shape[key].def.innerType)},`;\n } else {\n return `${key}: ${zodTypeToTsTypeDef(shape[key])},`;\n }\n }),\n \"}\",\n ].join(\"\\n\");\n case \"optional\":\n return zodTypeToTsTypeDef((zt as z.ZodOptional<any>).def.innerType) + \" | undefined\";\n default:\n throw new Error(`처리되지 않은 ZodType ${zt.def.type}`);\n }\n}\n"],"names":["apiParamToTsCode","apiParamToTsCodeAsObject","apiParamTypeToTsType","getTextTypeLength","getZodObjectFromApi","getZodObjectFromApiParams","getZodTypeFromApiParamType","propNodeToZodTypeDef","propToZodTypeDef","serializeZodType","unwrapPromiseOnce","zodTypeToTsTypeDef","zodTypeToZodCode","api","references","typeParameters","length","map","typeParam","constraint","zodType","id","ReqType","parameters","filter","param","ApiParamType","isContext","type","isRefKnex","optional","name","startsWith","apiParams","z","object","reduce","r","paramType","string","number","boolean","advType","t","literal","value","objType","props","arrType","array","elementsType","refType","date","includes","args","Error","arg","obj","literalOrUnion","keys","ZodUnion","def","options","option","values","keyRecord","result","key","pick","omit","partial","reference","undefined","unionType","types","some","nullable","union","intersectionType","index","resolvedType","intersection","unknown","tupleType","tuple","elements","elem","propNode","injectImportKeys","nodeType","prop","children","childPropNode","join","textType","stmt","isIntegerProp","isBigIntegerProp","isTextProp","isEnumProp","push","isStringProp","isDecimalProp","isFloatProp","isDoubleProp","isBooleanProp","isDateProp","isTimeProp","isDateTimeProp","isTimestampProp","isJsonProp","isUuidProp","isVirtualProp","isRelationProp","isBelongsToOneRelationProp","isOneToOneRelationProp","hasJoinColumn","relationType","with","unsigned","zt","innerType","zDefaultDef","defaultValue","zRecordDef","keyType","valueType","items","Array","from","Object","entries","val","element","shape","zIntersectionDef","left","right","params","defaultDef","isObject","isStringLiteral","isNumericLiteral","String","isUnion","isIntersection","isArray","isRef","isIndexedAccess","isTupleType","isTypeParam","isPromise","checks","recordType"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { FastifyReply, FastifyRequest } from "fastify";
2
+ import type { RouteGenericInterface } from "fastify/types/route";
3
+ import { type Server, type IncomingMessage, type ServerResponse, type IncomingHttpHeaders } from "http";
4
+ import type { FileStorage } from "../file-storage/file-storage";
5
+ export interface ContextExtend {
6
+ }
7
+ export type Context = {
8
+ request: FastifyRequest;
9
+ reply: FastifyReply<Server, IncomingMessage, ServerResponse, RouteGenericInterface, unknown>;
10
+ headers: IncomingHttpHeaders;
11
+ } & ContextExtend;
12
+ export type UploadContext = {
13
+ file?: FileStorage;
14
+ files: FileStorage[];
15
+ };
16
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EACL,KAAK,MAAM,EACX,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACzB,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE,MAAM,WAAW,aAAa;CAAG;AACjC,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,YAAY,CACjB,MAAM,EACN,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,OAAO,CACR,CAAC;IACF,OAAO,EAAE,mBAAmB,CAAC;CAC9B,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});
2
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/api/context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import type { HTTPMethods } from "fastify";
2
+ import type { ApiParam, ApiParamType } from "../types/types";
3
+ import { z } from "zod";
4
+ import { TransactionalOptions } from "../database/puri-wrapper";
5
+ export interface GuardKeys {
6
+ query: true;
7
+ admin: true;
8
+ user: true;
9
+ }
10
+ export type GuardKey = keyof GuardKeys;
11
+ export type ServiceClient = "axios" | "axios-multipart" | "swr" | "window-fetch";
12
+ export type ApiDecoratorOptions = {
13
+ httpMethod?: HTTPMethods;
14
+ contentType?: "text/plain" | "text/html" | "text/xml" | "application/json" | "application/octet-stream";
15
+ clients?: ServiceClient[];
16
+ path?: string;
17
+ resourceName?: string;
18
+ guards?: GuardKey[];
19
+ description?: string;
20
+ };
21
+ export type StreamDecoratorOptions = {
22
+ type: "sse";
23
+ events: z.ZodObject<any>;
24
+ path?: string;
25
+ resourceName?: string;
26
+ guards?: GuardKey[];
27
+ description?: string;
28
+ };
29
+ export declare const registeredApis: {
30
+ modelName: string;
31
+ methodName: string;
32
+ path: string;
33
+ options: ApiDecoratorOptions;
34
+ streamOptions?: StreamDecoratorOptions;
35
+ }[];
36
+ export type ExtendedApi = {
37
+ modelName: string;
38
+ methodName: string;
39
+ path: string;
40
+ options: ApiDecoratorOptions;
41
+ streamOptions?: StreamDecoratorOptions;
42
+ typeParameters: ApiParamType.TypeParam[];
43
+ parameters: ApiParam[];
44
+ returnType: ApiParamType;
45
+ };
46
+ export declare function api(options?: ApiDecoratorOptions): (target: Object, propertyKey: string) => void;
47
+ export declare function stream(options: StreamDecoratorOptions): (target: Object, propertyKey: string) => void;
48
+ export declare function transactional(options?: TransactionalOptions): (_target: Object, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
49
+ export declare function upload(): (_target: Object, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
50
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/api/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAe,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAK7E,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;CACZ;AACD,MAAM,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC;AACvC,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,iBAAiB,GACjB,KAAK,GACL,cAAc,CAAC;AACnB,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,WAAW,CAAC,EACR,YAAY,GACZ,WAAW,GACX,UAAU,GACV,kBAAkB,GAClB,0BAA0B,CAAC;IAC/B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,eAAO,MAAM,cAAc,EAAE;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,mBAAmB,CAAC;IAC7B,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACxC,EAAO,CAAC;AACT,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,mBAAmB,CAAC;IAC7B,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,cAAc,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC;IACzC,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;CAC1B,CAAC;AAEF,wBAAgB,GAAG,CAAC,OAAO,GAAE,mBAAwB,IAQlC,QAAQ,MAAM,EAAE,aAAa,MAAM,UAwBrD;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,sBAAsB,IACnC,QAAQ,MAAM,EAAE,aAAa,MAAM,UA2BrD;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,IAI5D,SAAS,MAAM,EACf,cAAc,MAAM,EACpB,YAAY,kBAAkB,wBA8CjC;AAED,wBAAgB,MAAM,KAElB,SAAS,MAAM,EACf,cAAc,MAAM,EACpB,YAAY,kBAAkB,wBAyCjC"}
@@ -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 api(){return api},get registeredApis(){return registeredApis},get stream(){return stream},get transactional(){return transactional},get upload(){return upload}});var _inflection=/*#__PURE__*/_interop_require_default(require("inflection"));var _db=require("../database/db");var _sonamu=require("./sonamu");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 _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}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 _object_spread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};var ownKeys=Object.keys(source);if(typeof Object.getOwnPropertySymbols==="function"){ownKeys=ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym){return Object.getOwnPropertyDescriptor(source,sym).enumerable}))}ownKeys.forEach(function(key){_define_property(target,key,source[key])})}return target}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly){symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})}keys.push.apply(keys,symbols)}return keys}function _object_spread_props(target,source){source=source!=null?source:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}return target}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}}}var registeredApis=[];function api(){var options=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};options=_object_spread({httpMethod:"GET",contentType:"application/json",clients:["axios"]},options);return function(target,propertyKey){var modelName=target.constructor.name.match(/(.+)Class$/)[1];var methodName=propertyKey;var defaultPath="/".concat(_inflection.default.camelize(modelName.replace(/Model$/,"").replace(/Frame$/,""),true),"/").concat(_inflection.default.camelize(propertyKey,true));var existingApi=registeredApis.find(function(api){return api.modelName===modelName&&api.methodName===methodName});if(existingApi){existingApi.options=options}else{var _options_path;registeredApis.push({modelName:modelName,methodName:methodName,path:(_options_path=options.path)!==null&&_options_path!==void 0?_options_path:defaultPath,options:options})}}}function stream(options){return function(target,propertyKey){var modelName=target.constructor.name.match(/(.+)Class$/)[1];var methodName=propertyKey;var defaultPath="/".concat(_inflection.default.camelize(modelName.replace(/Model$/,"").replace(/Frame$/,""),true),"/").concat(_inflection.default.camelize(propertyKey,true));var existingApi=registeredApis.find(function(api){return api.modelName===modelName&&api.methodName===methodName});if(existingApi){existingApi.options=options}else{var _options_path;registeredApis.push({modelName:modelName,methodName:methodName,path:(_options_path=options.path)!==null&&_options_path!==void 0?_options_path:defaultPath,options:_object_spread_props(_object_spread({},options),{httpMethod:"GET"}),streamOptions:options})}}}function transactional(){var options=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};var isolation=options.isolation,readOnly=options.readOnly,_options_dbPreset=options.dbPreset,dbPreset=_options_dbPreset===void 0?"w":_options_dbPreset;return function(_target,_propertyKey,descriptor){var originalMethod=descriptor.value;descriptor.value=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}return _async_to_generator(function(){var _this,existingContext,startTransaction;return _ts_generator(this,function(_state){_this=this;existingContext=_db.DB.transactionStorage.getStore();if(existingContext){if(existingContext.getTransaction(dbPreset)){return[2,originalMethod.apply(this,args)]}}startTransaction=function(){return _async_to_generator(function(){var _this,puri;return _ts_generator(this,function(_state){_this=this;puri=this.getPuri(dbPreset);return[2,puri.transaction(function(trx){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:_db.DB.getTransactionContext().setTransaction(dbPreset,trx);_state.label=1;case 1:_state.trys.push([1,,3,4]);return[4,originalMethod.apply(this,args)];case 2:return[2,_state.sent()];case 3:_db.DB.getTransactionContext().deleteTransaction(dbPreset);return[7];case 4:return[2]}})}).call(_this)},{isolation:isolation,readOnly:readOnly})]})}).call(_this)};if(!existingContext){return[2,_db.DB.runWithTransaction(startTransaction)]}else{return[2,startTransaction()]}return[2]})}).call(this)};return descriptor}}function upload(){return function(_target,_propertyKey,descriptor){var originalMethod=descriptor.value;descriptor.value=function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}return _async_to_generator(function(){var _this,request,uploadContext,storage,rawFile,FileStorage,FileStorage1,rawFilesIterator,_iteratorAbruptCompletion,_didIteratorError,_iteratorError,_iterator,_step,_value,rawFile1,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;request=_sonamu.Sonamu.getContext().request;uploadContext={file:undefined,files:[]};storage=_sonamu.Sonamu.storage;if(!storage){throw new Error("Storage가 설정되지 않았습니다.")}if(!request.file)return[3,3];return[4,request.file()];case 1:rawFile=_state.sent();if(!rawFile)return[3,3];return[4,Promise.resolve().then(function(){return /*#__PURE__*/_interop_require_wildcard(require("../file-storage/file-storage"))})];case 2:FileStorage=_state.sent().FileStorage;uploadContext.file=new FileStorage(rawFile,storage);_state.label=3;case 3:if(!request.files)return[3,16];return[4,Promise.resolve().then(function(){return /*#__PURE__*/_interop_require_wildcard(require("../file-storage/file-storage"))})];case 4:FileStorage1=_state.sent().FileStorage;rawFilesIterator=request.files();_iteratorAbruptCompletion=false,_didIteratorError=false;_state.label=5;case 5:_state.trys.push([5,10,11,16]);_iterator=_async_iterator(rawFilesIterator);_state.label=6;case 6:return[4,_iterator.next()];case 7:if(!(_iteratorAbruptCompletion=!(_step=_state.sent()).done))return[3,9];_value=_step.value;rawFile1=_value;if(rawFile1){uploadContext.files.push(new FileStorage1(rawFile1,storage))}_state.label=8;case 8:_iteratorAbruptCompletion=false;return[3,6];case 9:return[3,16];case 10:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,16];case 11:_state.trys.push([11,,14,15]);if(!(_iteratorAbruptCompletion&&_iterator.return!=null))return[3,13];return[4,_iterator.return()];case 12:_state.sent();_state.label=13;case 13:return[3,15];case 14:if(_didIteratorError){throw _iteratorError}return[7];case 15:return[7];case 16:return[2,_sonamu.Sonamu.uploadStorage.run({uploadContext:uploadContext},function(){return originalMethod.apply(_this,args)})]}})}).call(this)};return descriptor}}
2
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/api/decorators.ts"],"sourcesContent":["import type { HTTPMethods } from \"fastify\";\nimport inflection from \"inflection\";\nimport type { ApiParam, ApiParamType } from \"../types/types\";\nimport { z } from \"zod\";\nimport { PuriWrapper, TransactionalOptions } from \"../database/puri-wrapper\";\nimport { DB } from \"../database/db\";\nimport { Sonamu } from \"./sonamu\";\nimport type { UploadContext } from \"./context\";\n\nexport interface GuardKeys {\n query: true;\n admin: true;\n user: true;\n}\nexport type GuardKey = keyof GuardKeys;\nexport type ServiceClient =\n | \"axios\"\n | \"axios-multipart\"\n | \"swr\"\n | \"window-fetch\";\nexport type ApiDecoratorOptions = {\n httpMethod?: HTTPMethods;\n contentType?:\n | \"text/plain\"\n | \"text/html\"\n | \"text/xml\"\n | \"application/json\"\n | \"application/octet-stream\";\n clients?: ServiceClient[];\n path?: string;\n resourceName?: string;\n guards?: GuardKey[];\n description?: string;\n};\nexport type StreamDecoratorOptions = {\n type: \"sse\"; // | 'ws\n events: z.ZodObject<any>;\n path?: string;\n resourceName?: string;\n guards?: GuardKey[];\n description?: string;\n};\nexport const registeredApis: {\n modelName: string;\n methodName: string;\n path: string;\n options: ApiDecoratorOptions;\n streamOptions?: StreamDecoratorOptions;\n}[] = [];\nexport type ExtendedApi = {\n modelName: string;\n methodName: string;\n path: string;\n options: ApiDecoratorOptions;\n streamOptions?: StreamDecoratorOptions;\n typeParameters: ApiParamType.TypeParam[];\n parameters: ApiParam[];\n returnType: ApiParamType;\n};\n\nexport function api(options: ApiDecoratorOptions = {}) {\n options = {\n httpMethod: \"GET\",\n contentType: \"application/json\",\n clients: [\"axios\"],\n ...options,\n };\n\n return function (target: Object, propertyKey: string) {\n const modelName = target.constructor.name.match(/(.+)Class$/)![1];\n const methodName = propertyKey;\n\n const defaultPath = `/${inflection.camelize(\n modelName.replace(/Model$/, \"\").replace(/Frame$/, \"\"),\n true\n )}/${inflection.camelize(propertyKey, true)}`;\n\n // 기존 동일한 메서드가 있는지 확인 후 있는 경우 override\n const existingApi = registeredApis.find(\n (api) => api.modelName === modelName && api.methodName === methodName\n );\n if (existingApi) {\n existingApi.options = options;\n } else {\n registeredApis.push({\n modelName,\n methodName,\n path: options.path ?? defaultPath,\n options,\n });\n }\n };\n}\n\nexport function stream(options: StreamDecoratorOptions) {\n return function (target: Object, propertyKey: string) {\n const modelName = target.constructor.name.match(/(.+)Class$/)![1];\n const methodName = propertyKey;\n\n const defaultPath = `/${inflection.camelize(\n modelName.replace(/Model$/, \"\").replace(/Frame$/, \"\"),\n true\n )}/${inflection.camelize(propertyKey, true)}`;\n\n const existingApi = registeredApis.find(\n (api) => api.modelName === modelName && api.methodName === methodName\n );\n if (existingApi) {\n existingApi.options = options;\n } else {\n registeredApis.push({\n modelName,\n methodName,\n path: options.path ?? defaultPath,\n options: {\n ...options,\n httpMethod: \"GET\",\n },\n streamOptions: options,\n });\n }\n };\n}\n\nexport function transactional(options: TransactionalOptions = {}) {\n const { isolation, readOnly, dbPreset = \"w\" } = options;\n\n return function (\n _target: Object,\n _propertyKey: string,\n descriptor: PropertyDescriptor\n ) {\n const originalMethod = descriptor.value;\n\n descriptor.value = async function (this: any, ...args: any[]) {\n const existingContext = DB.transactionStorage.getStore();\n\n // 이미 AsyncLocalStorage 컨텍스트 안에 있는지 확인\n if (existingContext) {\n // 해당 preset의 트랜잭션이 이미 있으면 재사용\n if (existingContext.getTransaction(dbPreset)) {\n return originalMethod.apply(this, args);\n }\n }\n\n // AsyncLocalStorage 컨텍스트 없거나 해당 preset의 트랜잭션이 없으면 새로 시작\n const startTransaction = async () => {\n const puri = this.getPuri(dbPreset) as PuriWrapper;\n\n return puri.transaction(\n async (trx: PuriWrapper) => {\n // TransactionContext에 트랜잭션 저장\n DB.getTransactionContext().setTransaction(dbPreset, trx);\n\n try {\n return await originalMethod.apply(this, args);\n } finally {\n // 트랜잭션 제거\n DB.getTransactionContext().deleteTransaction(dbPreset);\n }\n },\n { isolation, readOnly }\n );\n };\n\n // AsyncLocalStorage 컨텍스트가 없으면 새로 생성\n if (!existingContext) {\n return DB.runWithTransaction(startTransaction);\n } else {\n // 컨텍스트는 있지만 이 preset의 트랜잭션은 없는 경우 (같은 컨텍스트 내에서 실행)\n return startTransaction();\n }\n };\n\n return descriptor;\n };\n}\n\nexport function upload() {\n return function (\n _target: Object,\n _propertyKey: string,\n descriptor: PropertyDescriptor\n ) {\n const originalMethod = descriptor.value;\n\n descriptor.value = async function (this: any, ...args: any[]) {\n const { request } = Sonamu.getContext();\n const uploadContext: UploadContext = {\n file: undefined,\n files: [],\n };\n\n const storage = Sonamu.storage;\n if (!storage) {\n throw new Error(\"Storage가 설정되지 않았습니다.\");\n }\n\n if (request.file) {\n const rawFile = await request.file();\n if (rawFile) {\n const { FileStorage } = await import(\"../file-storage/file-storage\");\n uploadContext.file = new FileStorage(rawFile, storage);\n }\n }\n\n if (request.files) {\n const { FileStorage } = await import(\"../file-storage/file-storage\");\n const rawFilesIterator = request.files();\n for await (const rawFile of rawFilesIterator) {\n if (rawFile) {\n uploadContext.files.push(new FileStorage(rawFile, storage));\n }\n }\n }\n\n return Sonamu.uploadStorage.run({ uploadContext }, () => {\n return originalMethod.apply(this, args);\n });\n };\n\n return descriptor;\n };\n}\n"],"names":["api","registeredApis","stream","transactional","upload","options","httpMethod","contentType","clients","target","propertyKey","modelName","name","match","methodName","defaultPath","inflection","camelize","replace","existingApi","find","push","path","streamOptions","isolation","readOnly","dbPreset","_target","_propertyKey","descriptor","originalMethod","value","args","existingContext","startTransaction","DB","transactionStorage","getStore","getTransaction","apply","puri","getPuri","transaction","trx","getTransactionContext","setTransaction","deleteTransaction","runWithTransaction","request","uploadContext","storage","rawFile","FileStorage","rawFilesIterator","Sonamu","getContext","file","undefined","files","Error","uploadStorage","run"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from "./caster";
2
+ export * from "./code-converters";
3
+ export * from "./context";
4
+ export * from "./decorators";
5
+ export * from "../file-storage/driver";
6
+ export * from "../file-storage/file-storage";
7
+ export * from "./sonamu";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./caster"),exports);_export_star(require("./code-converters"),exports);_export_star(require("./context"),exports);_export_star(require("./decorators"),exports);_export_star(require("../file-storage/driver"),exports);_export_star(require("../file-storage/file-storage"),exports);_export_star(require("./sonamu"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/api/index.ts"],"sourcesContent":["export * from \"./caster\";\nexport * from \"./code-converters\";\nexport * from \"./context\";\nexport * from \"./decorators\";\nexport * from \"../file-storage/driver\";\nexport * from \"../file-storage/file-storage\";\nexport * from \"./sonamu\";\n"],"names":[],"mappings":"2FAAc,0CACA,mDACA,2CACA,8CACA,wDACA,8DACA"}
@@ -0,0 +1,83 @@
1
+ import { AsyncLocalStorage } from "async_hooks";
2
+ import { SonamuFastifyConfig, SonamuServerOptions } from "../types/types";
3
+ import { SonamuDBConfig } from "../database/db";
4
+ import type { ExtendedApi } from "./decorators";
5
+ import type { FastifyInstance, FastifyReply, FastifyRequest } from "fastify";
6
+ import type { IncomingMessage, Server, ServerResponse } from "http";
7
+ import type { Context, UploadContext } from "./context";
8
+ import type { Syncer } from "../syncer/syncer";
9
+ import type { FSWatcher } from "chokidar";
10
+ import type { Driver } from "../file-storage/driver";
11
+ export type SonamuConfig = {
12
+ projectName?: string;
13
+ api: {
14
+ dir: string;
15
+ };
16
+ sync: {
17
+ targets: string[];
18
+ };
19
+ route: {
20
+ prefix: string;
21
+ };
22
+ timezone?: string;
23
+ ui?: {
24
+ port: number;
25
+ };
26
+ };
27
+ export type SonamuSecrets = {
28
+ [key: string]: string;
29
+ };
30
+ declare class SonamuClass {
31
+ isInitialized: boolean;
32
+ asyncLocalStorage: AsyncLocalStorage<{
33
+ context: Context;
34
+ }>;
35
+ uploadStorage: AsyncLocalStorage<{
36
+ uploadContext: UploadContext;
37
+ }>;
38
+ getContext(): Context;
39
+ getUploadContext(): UploadContext;
40
+ private _apiRootPath;
41
+ set apiRootPath(apiRootPath: string);
42
+ get apiRootPath(): string;
43
+ get appRootPath(): string;
44
+ private _dbConfig;
45
+ set dbConfig(dbConfig: SonamuDBConfig);
46
+ get dbConfig(): SonamuDBConfig;
47
+ private _syncer;
48
+ set syncer(syncer: Syncer);
49
+ get syncer(): Syncer;
50
+ private _config;
51
+ set config(config: SonamuConfig);
52
+ get config(): SonamuConfig;
53
+ private _secrets;
54
+ set secrets(secrets: SonamuSecrets);
55
+ get secrets(): SonamuSecrets | null;
56
+ private _storage;
57
+ set storage(storage: Driver);
58
+ get storage(): Driver | null;
59
+ watcher: FSWatcher | null;
60
+ private pendingFiles;
61
+ private hmrStartTime;
62
+ server: FastifyInstance | null;
63
+ initForTesting(): Promise<void>;
64
+ init(doSilent?: boolean, enableSync?: boolean, apiRootPath?: string, forTesting?: boolean): Promise<void>;
65
+ createServer(options: SonamuServerOptions, initOptions?: {
66
+ enableSync?: boolean;
67
+ doSilent?: boolean;
68
+ }): Promise<FastifyInstance<import("fastify").RawServerDefault, IncomingMessage, ServerResponse<IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>>;
69
+ withFastify(server: FastifyInstance<Server, IncomingMessage, ServerResponse>, config: SonamuFastifyConfig, options?: {
70
+ enableSync?: boolean;
71
+ doSilent?: boolean;
72
+ }): Promise<void>;
73
+ getApiHandler(api: ExtendedApi, config: SonamuFastifyConfig): (request: FastifyRequest, reply: FastifyReply) => Promise<unknown>;
74
+ startWatcher(): void;
75
+ private registerPlugins;
76
+ private boot;
77
+ private handleFileChange;
78
+ private finishHMR;
79
+ destroy(): Promise<void>;
80
+ }
81
+ export declare const Sonamu: SonamuClass;
82
+ export {};
83
+ //# sourceMappingURL=sonamu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sonamu.d.ts","sourceRoot":"","sources":["../../src/api/sonamu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Sonamu",{enumerable:true,get:function(){return Sonamu}});var _path=/*#__PURE__*/_interop_require_default(require("path"));var _promises=require("fs/promises");var _fsutils=require("../utils/fs-utils");var _async_hooks=require("async_hooks");var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));var _fastify=/*#__PURE__*/_interop_require_default(require("fastify"));var _zod=require("zod");var _codeconverters=require("./code-converters");var _soexceptions=require("../exceptions/so-exceptions");var _zoderror=require("../utils/zod-error");var _caster=require("./caster");var _types=require("../types/types");var _controller=require("../utils/controller");var _utils=require("../utils/utils");var _db=require("../database/db");var _knexonduplicateupdate=require("../database/knex-plugins/knex-on-duplicate-update");var _datefnstz=require("date-fns-tz");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 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 _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _instanceof(left,right){if(right!=null&&typeof Symbol!=="undefined"&&right[Symbol.hasInstance]){return!!right[Symbol.hasInstance](left)}else{return left instanceof right}}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 _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 _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}}}var SonamuClass=/*#__PURE__*/function(){"use strict";function SonamuClass(){_class_call_check(this,SonamuClass);_define_property(this,"isInitialized",false);_define_property(this,"asyncLocalStorage",new _async_hooks.AsyncLocalStorage);_define_property(this,"uploadStorage",new _async_hooks.AsyncLocalStorage);_define_property(this,"_apiRootPath",null);_define_property(this,"_dbConfig",null);_define_property(this,"_syncer",null);_define_property(this,"_config",null);_define_property(this,"_secrets",null);_define_property(this,"_storage",null);_define_property(this,"watcher",null);_define_property(this,"pendingFiles",[]);_define_property(this,"hmrStartTime",0);_define_property(this,"server",null)}_create_class(SonamuClass,[{key:"getContext",value:function getContext(){var store=this.asyncLocalStorage.getStore();if(store===null||store===void 0?void 0:store.context){return store.context}throw new Error("Sonamu cannot find context")}},{key:"getUploadContext",value:function getUploadContext(){var store=this.uploadStorage.getStore();if(store===null||store===void 0?void 0:store.uploadContext){return store.uploadContext}throw new Error("Sonamu cannot find upload context. Did you use @upload decorator?")}},{key:"apiRootPath",get:function get(){if(this._apiRootPath===null){throw new Error("Sonamu has not been initialized")}return this._apiRootPath},set:function set(apiRootPath){this._apiRootPath=apiRootPath}},{key:"appRootPath",get:function get(){return this.apiRootPath.split(_path.default.sep).slice(0,-1).join(_path.default.sep)}},{key:"dbConfig",get:function get(){if(this._dbConfig===null){throw new Error("Sonamu has not been initialized")}return this._dbConfig},set:function set(dbConfig){this._dbConfig=dbConfig}},{key:"syncer",get:function get(){if(this._syncer===null){throw new Error("Sonamu has not been initialized")}return this._syncer},set:function set(syncer){this._syncer=syncer}},{key:"config",get:function get(){if(this._config===null){throw new Error("Sonamu has not been initialized")}return this._config},set:function set(config){this._config=config}},{key:"secrets",get:function get(){return this._secrets},set:function set(secrets){this._secrets=secrets}},{key:"storage",get:function get(){return this._storage},set:function set(storage){this._storage=storage}},{key:"initForTesting",value:function initForTesting(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.init(true,false,undefined,true)];case 1:_state.sent();return[2]}})}).call(this)}},{key:"init",value:function init(){var doSilent=arguments.length>0&&arguments[0]!==void 0?arguments[0]:false,enableSync=arguments.length>1&&arguments[1]!==void 0?arguments[1]:true,apiRootPath=arguments.length>2?arguments[2]:void 0,forTesting=arguments.length>3&&arguments[3]!==void 0?arguments[3]:false;return _async_to_generator(function(){var configPath,secretsPath,_,_1,_2,_3,_4,EntityManager,Syncer;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(this.isInitialized){return[2]}!doSilent&&console.time(_chalk.default.cyan("Sonamu.init".concat(forTesting?" for testing":"")));this.apiRootPath=apiRootPath!==null&&apiRootPath!==void 0?apiRootPath:(0,_utils.findApiRootPath)();configPath=_path.default.join(this.apiRootPath,"sonamu.config.json");secretsPath=_path.default.join(this.apiRootPath,"sonamu.secrets.json");return[4,(0,_fsutils.exists)(configPath)];case 1:if(!_state.sent()){throw new Error("Cannot find sonamu.config.json in ".concat(configPath))}_=this;_1=JSON.parse;return[4,(0,_promises.readFile)(configPath)];case 2:_.config=_1.apply(JSON,[_state.sent().toString()]);return[4,(0,_fsutils.exists)(secretsPath)];case 3:if(!_state.sent())return[3,5];_2=this;_3=JSON.parse;return[4,(0,_promises.readFile)(secretsPath)];case 4:_2.secrets=_3.apply(JSON,[_state.sent().toString()]);_state.label=5;case 5:_4=this;return[4,_db.DB.readKnexfile()];case 6:_4.dbConfig=_state.sent();!doSilent&&console.log(_chalk.default.green("DB Config Loaded!"));(0,_knexonduplicateupdate.attachOnDuplicateUpdate)();if(forTesting){this.isInitialized=true;return[2]}return[4,Promise.resolve().then(function(){return /*#__PURE__*/_interop_require_wildcard(require("../entity/entity-manager"))})];case 7:EntityManager=_state.sent().EntityManager;return[4,EntityManager.autoload(doSilent)];case 8:_state.sent();return[4,Promise.resolve().then(function(){return /*#__PURE__*/_interop_require_wildcard(require("../syncer/syncer"))})];case 9:Syncer=_state.sent().Syncer;this.syncer=new Syncer;return[4,this.syncer.autoloadModels()];case 10:_state.sent();return[4,this.syncer.autoloadTypes()];case 11:_state.sent();return[4,this.syncer.autoloadApis()];case 12:_state.sent();if(!((0,_controller.isLocal)()&&!(0,_controller.isTest)()&&enableSync))return[3,14];return[4,this.syncer.sync()];case 13:_state.sent();this.startWatcher();this.syncer.syncUI();_state.label=14;case 14:this.isInitialized=true;!doSilent&&console.timeEnd(_chalk.default.cyan("Sonamu.init"));return[2]}})}).call(this)}},{key:"createServer",value:function createServer(options,initOptions){return _async_to_generator(function(){var server;return _ts_generator(this,function(_state){switch(_state.label){case 0:server=(0,_fastify.default)(options.fastify);this.server=server;if(options.storage){this.storage=options.storage}if(options.plugins){this.registerPlugins(server,options.plugins)}return[4,this.withFastify(server,options.apiConfig,{enableSync:initOptions===null||initOptions===void 0?void 0:initOptions.enableSync,doSilent:initOptions===null||initOptions===void 0?void 0:initOptions.doSilent})];case 1:_state.sent();return[4,this.boot(server,options)];case 2:_state.sent();return[2,server]}})}).call(this)}},{key:"withFastify",value:function withFastify(server,config,options){return _async_to_generator(function(){var _this,timezone,DATE_FORMAT,ISO_DATE_REGEX;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;if(!(this.isInitialized===false))return[3,2];return[4,this.init(options===null||options===void 0?void 0:options.doSilent,options===null||options===void 0?void 0:options.enableSync)];case 1:_state.sent();_state.label=2;case 2:this.server=server;timezone=this.config.timezone;if(timezone){DATE_FORMAT="yyyy-MM-dd'T'HH:mm:ssXXX";ISO_DATE_REGEX=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$/;server.setReplySerializer(function(payload){return JSON.stringify(payload,function(_key,value){if(typeof value==="string"&&ISO_DATE_REGEX.test(value)){return(0,_datefnstz.formatInTimeZone)(new Date(value),timezone,DATE_FORMAT)}return value})});!(options===null||options===void 0?void 0:options.doSilent)&&console.log(_chalk.default.green("Timezone set to ".concat(timezone)))}server.get("".concat(this.config.route.prefix,"/routes"),function(_request,_reply){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,this.syncer.apis]})}).call(_this)});server.get("".concat(this.config.route.prefix,"/healthcheck"),function(_request,_reply){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,"ok"]})})()});if((0,_controller.isLocal)()){server.all("*",function(request,reply){var found=_this.syncer.apis.find(function(api){var _api_options_httpMethod;return _this.config.route.prefix+api.path===request.url.split("?")[0]&&((_api_options_httpMethod=api.options.httpMethod)!==null&&_api_options_httpMethod!==void 0?_api_options_httpMethod:"GET")===request.method.toUpperCase()});if(found){return _this.getApiHandler(found,config)(request,reply)}throw new _soexceptions.NotFoundException("존재하지 않는 API 접근입니다.")})}else{this.syncer.apis.map(function(api){if(_this.syncer.models[api.modelName]===undefined){throw new Error("정의되지 않은 모델에 접근 ".concat(api.modelName))}server.route({method:api.options.httpMethod,url:_this.config.route.prefix+api.path,handler:_this.getApiHandler(api,config)})})}return[2]}})}).call(this)}},{key:"getApiHandler",value:function getApiHandler(api,config){var _this=this;return function(request,reply){return _async_to_generator(function(){var _api_options_guards,ReqType,which,reqBody,_request_which,messages,_api_options_contentType,_ref,cacheKey,cacheTtl,cachedData,context,model;return _ts_generator(this,function(_state){switch(_state.label){case 0:((_api_options_guards=api.options.guards)!==null&&_api_options_guards!==void 0?_api_options_guards:[]).every(function(guard){return config.guardHandler(guard,request,api)});ReqType=(0,_codeconverters.getZodObjectFromApi)(api,this.syncer.types);which=api.options.httpMethod==="GET"?"query":"body";try{;reqBody=(0,_caster.fastifyCaster)(ReqType).parse((_request_which=request[which])!==null&&_request_which!==void 0?_request_which:{})}catch(e){if(_instanceof(e,_zod.ZodError)){messages=(0,_zoderror.humanizeZodError)(e).map(function(issue){return issue.message}).join(" ");throw new _soexceptions.BadRequestException(messages,{zodError:e})}else{throw e}}reply.type((_api_options_contentType=api.options.contentType)!==null&&_api_options_contentType!==void 0?_api_options_contentType:"application/json");return[4,function(){return _async_to_generator(function(){var cacheKeyRes,cacheKey,cacheTtl,cachedData,e;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(!config.cache)return[3,5];_state.label=1;case 1:_state.trys.push([1,3,,4]);cacheKeyRes=config.cache.resolveKey(api.path,reqBody);if(cacheKeyRes.cache===false){return[2,{cacheKey:null,cachedData:null}]}cacheKey=cacheKeyRes.key;cacheTtl=cacheKeyRes.ttl;return[4,config.cache.get(cacheKey)];case 2:cachedData=_state.sent();return[2,{cacheKey:cacheKey,cacheTtl:cacheTtl,cachedData:cachedData}];case 3:e=_state.sent();console.error(e);return[3,4];case 4:return[2,{cacheKey:null,cachedData:null}];case 5:return[2,{cacheKey:null,cachedData:null}]}})})()}()];case 1:_ref=_state.sent(),cacheKey=_ref.cacheKey,cacheTtl=_ref.cacheTtl,cachedData=_ref.cachedData;if(cachedData!==null){return[2,cachedData]}context=config.contextProvider({request:request,reply:reply,headers:request.headers},request,reply);model=this.syncer.models[api.modelName];return[2,this.asyncLocalStorage.run({context:context},function(){return _async_to_generator(function(){var result,_api_options_contentType;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,model[api.methodName].apply(model,api.parameters.map(function(param){if(_types.ApiParamType.isContext(param.type)){return context}else{return reqBody[param.name]}}))];case 1:result=_state.sent();reply.type((_api_options_contentType=api.options.contentType)!==null&&_api_options_contentType!==void 0?_api_options_contentType:"application/json");if(!(config.cache&&cacheKey))return[3,3];return[4,config.cache.put(cacheKey,result,cacheTtl)];case 2:_state.sent();_state.label=3;case 3:return[2,result]}})})()})]}})}).call(_this)}}},{key:"startWatcher",value:function startWatcher(){var _this=this;var watchPath=_path.default.join(this.apiRootPath,"src");var chokidar=require("chokidar");this.watcher=chokidar.watch(watchPath,{ignored:function(path,stats){return!!(stats===null||stats===void 0?void 0:stats.isFile())&&!path.endsWith(".ts")&&!path.endsWith(".json")||path.endsWith("src/index.ts")},persistent:true,ignoreInitial:true});this.watcher.on("all",function(event,filePath){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:if(event!=="change"&&event!=="add"){return[2]}return[4,this.handleFileChange(event,filePath)];case 1:_state.sent();return[2]}})}).call(_this)})}},{key:"registerPlugins",value:function registerPlugins(server,plugins){if(!plugins){return}var pluginsModules={formbody:"@fastify/formbody",qs:"fastify-qs",cors:"@fastify/cors",multipart:"@fastify/multipart"};var registerPlugin=function(key,pluginName){var option=plugins[key];if(!option)return;if(option===true){server.register(Promise.resolve(pluginName).then(function(p){return /*#__PURE__*/_interop_require_wildcard(require(p))}))}else{server.register(Promise.resolve(pluginName).then(function(p){return /*#__PURE__*/_interop_require_wildcard(require(p))}),option)}};Object.entries(pluginsModules).forEach(function(param){var _param=_sliced_to_array(param,2),key=_param[0],pluginName=_param[1];registerPlugin(key,pluginName)});if(plugins.custom){plugins.custom(server)}}},{key:"boot",value:function boot(server,options){return _async_to_generator(function(){var _this,_options_listen,_options_listen1,_options_lifecycle,_options_listen_port,port,_options_listen_host,host,shutdown,_options_lifecycle1;return _ts_generator(this,function(_state){_this=this;port=(_options_listen_port=(_options_listen=options.listen)===null||_options_listen===void 0?void 0:_options_listen.port)!==null&&_options_listen_port!==void 0?_options_listen_port:3e3;host=(_options_listen_host=(_options_listen1=options.listen)===null||_options_listen1===void 0?void 0:_options_listen1.host)!==null&&_options_listen_host!==void 0?_options_listen_host:"localhost";server.addHook("onClose",function(){return _async_to_generator(function(){var _options_lifecycle_onShutdown,_options_lifecycle;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(_options_lifecycle=options.lifecycle)===null||_options_lifecycle===void 0?void 0:(_options_lifecycle_onShutdown=_options_lifecycle.onShutdown)===null||_options_lifecycle_onShutdown===void 0?void 0:_options_lifecycle_onShutdown.call(_options_lifecycle,server)];case 1:_state.sent();return[4,this.destroy()];case 2:_state.sent();return[2]}})}).call(_this)});shutdown=function(){return _async_to_generator(function(){var err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_state.trys.push([0,2,,3]);return[4,server.close()];case 1:_state.sent();process.exit(0);return[3,3];case 2:err=_state.sent();console.error("Error during shutdown:",err);process.exit(1);return[3,3];case 3:return[2]}})})()};process.on("SIGINT",shutdown);process.on("SIGTERM",shutdown);if((_options_lifecycle=options.lifecycle)===null||_options_lifecycle===void 0?void 0:_options_lifecycle.onError){;server.setErrorHandler((_options_lifecycle1=options.lifecycle)===null||_options_lifecycle1===void 0?void 0:_options_lifecycle1.onError)}server.listen({port:port,host:host}).then(function(){return _async_to_generator(function(){var _options_lifecycle_onStart,_options_lifecycle;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(_options_lifecycle=options.lifecycle)===null||_options_lifecycle===void 0?void 0:(_options_lifecycle_onStart=_options_lifecycle.onStart)===null||_options_lifecycle_onStart===void 0?void 0:_options_lifecycle_onStart.call(_options_lifecycle,server)];case 1:_state.sent();return[2]}})})()}).catch(function(err){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:console.error(_chalk.default.red("Failed to start server:",err));return[4,shutdown()];case 1:_state.sent();return[2]}})})()});return[2]})}).call(this)}},{key:"handleFileChange",value:function handleFileChange(event,filePath){return _async_to_generator(function(){var relativePath;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(this.pendingFiles.length===0){this.hmrStartTime=Date.now()}this.pendingFiles.push(filePath);relativePath=filePath.replace(this.apiRootPath,"api");console.log(_chalk.default.bold("Detected(".concat(event,"): ").concat(_chalk.default.blue(relativePath))));return[4,this.syncer.syncFromWatcher([filePath])];case 1:_state.sent();this.pendingFiles=this.pendingFiles.slice(1);if(!(this.pendingFiles.length===0))return[3,3];return[4,this.finishHMR()];case 2:_state.sent();_state.label=3;case 3:return[2]}})}).call(this)}},{key:"finishHMR",value:function finishHMR(){return _async_to_generator(function(){var _,_1,endTime,totalTime,msg,margin;return _ts_generator(this,function(_state){switch(_state.label){case 0:_1=(_=this.syncer).saveChecksums;return[4,this.syncer.getCurrentChecksums()];case 1:return[4,_1.apply(_,[_state.sent()])];case 2:_state.sent();endTime=Date.now();totalTime=endTime-this.hmrStartTime;msg="HMR Done! ".concat(_chalk.default.bold.white("".concat(totalTime,"ms")));margin=Math.max(0,(process.stdout.columns-msg.length)/2);console.log(_chalk.default.black.bgGreen(" ".repeat(margin)+msg+" ".repeat(margin)));return[2]}})}).call(this)}},{key:"destroy",value:function destroy(){return _async_to_generator(function(){var _this_watcher,BaseModel;return _ts_generator(this,function(_state){switch(_state.label){case 0:BaseModel=require("../database/base-model").BaseModel;return[4,BaseModel.destroy()];case 1:_state.sent();return[4,(_this_watcher=this.watcher)===null||_this_watcher===void 0?void 0:_this_watcher.close()];case 2:_state.sent();return[2]}})}).call(this)}}]);return SonamuClass}();var Sonamu=new SonamuClass;
2
+ //# sourceMappingURL=sonamu.js.map