sonamu 0.5.7 → 0.7.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 (529) hide show
  1. package/.swcrc.project-default +18 -0
  2. package/bin/cli.js +24 -0
  3. package/dist/ai/agents/agent.d.ts +11 -0
  4. package/dist/ai/agents/agent.d.ts.map +1 -0
  5. package/dist/ai/agents/agent.js +65 -0
  6. package/dist/ai/agents/index.d.ts +3 -0
  7. package/dist/ai/agents/index.d.ts.map +1 -0
  8. package/dist/ai/agents/index.js +4 -0
  9. package/dist/ai/agents/types.d.ts +43 -0
  10. package/dist/ai/agents/types.d.ts.map +1 -0
  11. package/dist/ai/agents/types.js +3 -0
  12. package/dist/ai/index.d.ts +2 -0
  13. package/dist/ai/index.d.ts.map +1 -0
  14. package/dist/ai/index.js +3 -0
  15. package/dist/ai/providers/rtzr/api.d.ts +22 -0
  16. package/dist/ai/providers/rtzr/api.d.ts.map +1 -0
  17. package/dist/ai/providers/rtzr/api.js +28 -0
  18. package/dist/ai/providers/rtzr/error.d.ts +18 -0
  19. package/dist/ai/providers/rtzr/error.d.ts.map +1 -0
  20. package/dist/ai/providers/rtzr/error.js +29 -0
  21. package/dist/ai/providers/rtzr/index.d.ts +5 -0
  22. package/dist/ai/providers/rtzr/index.d.ts.map +1 -0
  23. package/dist/ai/providers/rtzr/index.js +6 -0
  24. package/dist/ai/providers/rtzr/model.d.ts +52 -0
  25. package/dist/ai/providers/rtzr/model.d.ts.map +1 -0
  26. package/dist/ai/providers/rtzr/model.js +137 -0
  27. package/dist/ai/providers/rtzr/options.d.ts +7 -0
  28. package/dist/ai/providers/rtzr/options.d.ts.map +1 -0
  29. package/dist/ai/providers/rtzr/options.js +47 -0
  30. package/dist/ai/providers/rtzr/provider.d.ts +18 -0
  31. package/dist/ai/providers/rtzr/provider.d.ts.map +1 -0
  32. package/dist/ai/providers/rtzr/provider.js +54 -0
  33. package/dist/ai/providers/rtzr/utils.d.ts +19 -0
  34. package/dist/ai/providers/rtzr/utils.d.ts.map +1 -0
  35. package/dist/ai/providers/rtzr/utils.js +88 -0
  36. package/dist/api/base-frame.d.ts +2 -2
  37. package/dist/api/base-frame.d.ts.map +1 -1
  38. package/dist/api/base-frame.js +13 -2
  39. package/dist/api/caster.d.ts.map +1 -1
  40. package/dist/api/caster.js +71 -2
  41. package/dist/api/code-converters.d.ts +58 -14
  42. package/dist/api/code-converters.d.ts.map +1 -1
  43. package/dist/api/code-converters.js +258 -2
  44. package/dist/api/config.d.ts +90 -0
  45. package/dist/api/config.d.ts.map +1 -0
  46. package/dist/api/config.js +25 -0
  47. package/dist/api/context.d.ts +4 -2
  48. package/dist/api/context.d.ts.map +1 -1
  49. package/dist/api/context.js +3 -2
  50. package/dist/api/decorators.d.ts +20 -6
  51. package/dist/api/decorators.d.ts.map +1 -1
  52. package/dist/api/decorators.js +235 -2
  53. package/dist/api/index.d.ts +2 -2
  54. package/dist/api/index.d.ts.map +1 -1
  55. package/dist/api/index.js +9 -2
  56. package/dist/api/sonamu.d.ts +10 -24
  57. package/dist/api/sonamu.d.ts.map +1 -1
  58. package/dist/api/sonamu.js +514 -2
  59. package/dist/api/validator.d.ts +6 -0
  60. package/dist/api/validator.d.ts.map +1 -0
  61. package/dist/api/validator.js +81 -0
  62. package/dist/bin/build-config.d.ts +6 -1
  63. package/dist/bin/build-config.d.ts.map +1 -1
  64. package/dist/bin/build-config.js +15 -2
  65. package/dist/bin/cli.js +519 -2
  66. package/dist/bin/hot-hook-register.d.ts +11 -0
  67. package/dist/bin/hot-hook-register.d.ts.map +1 -0
  68. package/dist/bin/hot-hook-register.js +21 -0
  69. package/dist/bin/loader-register.d.ts +2 -0
  70. package/dist/bin/loader-register.d.ts.map +1 -0
  71. package/dist/bin/loader-register.js +34 -0
  72. package/dist/database/_batch_update.d.ts +5 -3
  73. package/dist/database/_batch_update.d.ts.map +1 -1
  74. package/dist/database/_batch_update.js +95 -2
  75. package/dist/database/base-model.d.ts +96 -10
  76. package/dist/database/base-model.d.ts.map +1 -1
  77. package/dist/database/base-model.js +390 -2
  78. package/dist/database/base-model.types.d.ts +93 -0
  79. package/dist/database/base-model.types.d.ts.map +1 -0
  80. package/dist/database/base-model.types.js +10 -0
  81. package/dist/database/code-generator.d.ts +1 -1
  82. package/dist/database/code-generator.d.ts.map +1 -1
  83. package/dist/database/code-generator.js +54 -2
  84. package/dist/database/db.d.ts +6 -21
  85. package/dist/database/db.d.ts.map +1 -1
  86. package/dist/database/db.js +129 -2
  87. package/dist/database/puri-subset.test-d.js +81 -0
  88. package/dist/database/puri-subset.types.d.ts +123 -0
  89. package/dist/database/puri-subset.types.d.ts.map +1 -0
  90. package/dist/database/puri-subset.types.js +16 -0
  91. package/dist/database/puri-wrapper.d.ts +13 -11
  92. package/dist/database/puri-wrapper.d.ts.map +1 -1
  93. package/dist/database/puri-wrapper.js +109 -2
  94. package/dist/database/puri.d.ts +41 -23
  95. package/dist/database/puri.d.ts.map +1 -1
  96. package/dist/database/puri.js +601 -2
  97. package/dist/database/puri.types.d.ts +25 -6
  98. package/dist/database/puri.types.d.ts.map +1 -1
  99. package/dist/database/puri.types.js +6 -2
  100. package/dist/database/transaction-context.d.ts +1 -1
  101. package/dist/database/transaction-context.d.ts.map +1 -1
  102. package/dist/database/transaction-context.js +14 -2
  103. package/dist/database/upsert-builder.d.ts +9 -3
  104. package/dist/database/upsert-builder.d.ts.map +1 -1
  105. package/dist/database/upsert-builder.js +365 -2
  106. package/dist/entity/entity-manager.d.ts +167 -2
  107. package/dist/entity/entity-manager.d.ts.map +1 -1
  108. package/dist/entity/entity-manager.js +130 -2
  109. package/dist/entity/entity.d.ts +5 -3
  110. package/dist/entity/entity.d.ts.map +1 -1
  111. package/dist/entity/entity.js +750 -2
  112. package/dist/exceptions/error-handler.d.ts +1 -1
  113. package/dist/exceptions/error-handler.d.ts.map +1 -1
  114. package/dist/exceptions/error-handler.js +29 -2
  115. package/dist/exceptions/so-exceptions.d.ts +1 -1
  116. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  117. package/dist/exceptions/so-exceptions.js +85 -2
  118. package/dist/file-storage/driver.d.ts +1 -1
  119. package/dist/file-storage/driver.d.ts.map +1 -1
  120. package/dist/file-storage/driver.js +79 -2
  121. package/dist/file-storage/file-storage.js +75 -2
  122. package/dist/index.d.ts +18 -9
  123. package/dist/index.d.ts.map +1 -1
  124. package/dist/index.js +34 -2
  125. package/dist/migration/code-generation.d.ts +1 -1
  126. package/dist/migration/code-generation.d.ts.map +1 -1
  127. package/dist/migration/code-generation.js +614 -2
  128. package/dist/migration/migration-set.d.ts +2 -10
  129. package/dist/migration/migration-set.d.ts.map +1 -1
  130. package/dist/migration/migration-set.js +213 -2
  131. package/dist/migration/migrator.d.ts +24 -82
  132. package/dist/migration/migrator.d.ts.map +1 -1
  133. package/dist/migration/migrator.js +330 -2
  134. package/dist/migration/postgresql-schema-reader.d.ts +51 -0
  135. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -0
  136. package/dist/migration/postgresql-schema-reader.js +245 -0
  137. package/dist/migration/types.d.ts +6 -38
  138. package/dist/migration/types.d.ts.map +1 -1
  139. package/dist/migration/types.js +3 -2
  140. package/dist/naite/messaging-types.d.ts +43 -0
  141. package/dist/naite/messaging-types.d.ts.map +1 -0
  142. package/dist/naite/messaging-types.js +7 -0
  143. package/dist/naite/naite-reporter.d.ts +41 -0
  144. package/dist/naite/naite-reporter.d.ts.map +1 -0
  145. package/dist/naite/naite-reporter.js +102 -0
  146. package/dist/naite/naite.d.ts +95 -0
  147. package/dist/naite/naite.d.ts.map +1 -0
  148. package/dist/naite/naite.js +316 -0
  149. package/dist/stream/index.js +3 -2
  150. package/dist/stream/sse.d.ts +2 -2
  151. package/dist/stream/sse.d.ts.map +1 -1
  152. package/dist/stream/sse.js +38 -2
  153. package/dist/syncer/api-parser.d.ts +10 -0
  154. package/dist/syncer/api-parser.d.ts.map +1 -0
  155. package/dist/syncer/api-parser.js +240 -0
  156. package/dist/syncer/checksum.d.ts +21 -0
  157. package/dist/syncer/checksum.d.ts.map +1 -0
  158. package/dist/syncer/checksum.js +98 -0
  159. package/dist/syncer/code-generator.d.ts +20 -0
  160. package/dist/syncer/code-generator.d.ts.map +1 -0
  161. package/dist/syncer/code-generator.js +161 -0
  162. package/dist/syncer/entity-operations.d.ts +17 -0
  163. package/dist/syncer/entity-operations.d.ts.map +1 -0
  164. package/dist/syncer/entity-operations.js +59 -0
  165. package/dist/syncer/file-patterns.d.ts +29 -0
  166. package/dist/syncer/file-patterns.d.ts.map +1 -0
  167. package/dist/syncer/file-patterns.js +38 -0
  168. package/dist/syncer/index.d.ts +6 -0
  169. package/dist/syncer/index.d.ts.map +1 -1
  170. package/dist/syncer/index.js +9 -2
  171. package/dist/syncer/module-loader.d.ts +35 -0
  172. package/dist/syncer/module-loader.d.ts.map +1 -0
  173. package/dist/syncer/module-loader.js +87 -0
  174. package/dist/syncer/syncer.d.ts +98 -106
  175. package/dist/syncer/syncer.d.ts.map +1 -1
  176. package/dist/syncer/syncer.js +422 -2
  177. package/dist/template/entity-converter.d.ts +14 -0
  178. package/dist/template/entity-converter.d.ts.map +1 -0
  179. package/dist/template/entity-converter.js +108 -0
  180. package/dist/template/helpers.d.ts +23 -0
  181. package/dist/template/helpers.d.ts.map +1 -0
  182. package/dist/template/helpers.js +64 -0
  183. package/dist/{templates → template/implementations}/entity.template.d.ts +3 -3
  184. package/dist/template/implementations/entity.template.d.ts.map +1 -0
  185. package/dist/template/implementations/entity.template.js +86 -0
  186. package/dist/{templates → template/implementations}/generated.template.d.ts +3 -4
  187. package/dist/template/implementations/generated.template.d.ts.map +1 -0
  188. package/dist/template/implementations/generated.template.js +249 -0
  189. package/dist/{templates → template/implementations}/generated_http.template.d.ts +3 -4
  190. package/dist/template/implementations/generated_http.template.d.ts.map +1 -0
  191. package/dist/template/implementations/generated_http.template.js +131 -0
  192. package/dist/{templates → template/implementations}/generated_sso.template.d.ts +4 -5
  193. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -0
  194. package/dist/template/implementations/generated_sso.template.js +134 -0
  195. package/dist/{templates → template/implementations}/init_types.template.d.ts +3 -3
  196. package/dist/template/implementations/init_types.template.d.ts.map +1 -0
  197. package/dist/template/implementations/init_types.template.js +38 -0
  198. package/dist/template/implementations/model.template.d.ts +17 -0
  199. package/dist/template/implementations/model.template.d.ts.map +1 -0
  200. package/dist/template/implementations/model.template.js +181 -0
  201. package/dist/{templates → template/implementations}/model_test.template.d.ts +3 -3
  202. package/dist/template/implementations/model_test.template.d.ts.map +1 -0
  203. package/dist/template/implementations/model_test.template.js +35 -0
  204. package/dist/{templates → template/implementations}/service.template.d.ts +6 -6
  205. package/dist/template/implementations/service.template.d.ts.map +1 -0
  206. package/dist/template/implementations/service.template.js +201 -0
  207. package/dist/{templates → template/implementations}/view_enums_buttonset.template.d.ts +3 -3
  208. package/dist/template/implementations/view_enums_buttonset.template.d.ts.map +1 -0
  209. package/dist/template/implementations/view_enums_buttonset.template.js +31 -0
  210. package/dist/{templates → template/implementations}/view_enums_dropdown.template.d.ts +3 -4
  211. package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +1 -0
  212. package/dist/template/implementations/view_enums_dropdown.template.js +50 -0
  213. package/dist/{templates → template/implementations}/view_enums_select.template.d.ts +3 -3
  214. package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -0
  215. package/dist/template/implementations/view_enums_select.template.js +55 -0
  216. package/dist/{templates → template/implementations}/view_form.template.d.ts +5 -5
  217. package/dist/template/implementations/view_form.template.d.ts.map +1 -0
  218. package/dist/template/implementations/view_form.template.js +337 -0
  219. package/dist/{templates → template/implementations}/view_id_all_select.template.d.ts +3 -3
  220. package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -0
  221. package/dist/template/implementations/view_id_all_select.template.js +31 -0
  222. package/dist/{templates → template/implementations}/view_id_async_select.template.d.ts +3 -3
  223. package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -0
  224. package/dist/template/implementations/view_id_async_select.template.js +105 -0
  225. package/dist/{templates → template/implementations}/view_list.template.d.ts +5 -13
  226. package/dist/template/implementations/view_list.template.d.ts.map +1 -0
  227. package/dist/template/implementations/view_list.template.js +475 -0
  228. package/dist/template/implementations/view_list_columns.template.d.ts +17 -0
  229. package/dist/template/implementations/view_list_columns.template.d.ts.map +1 -0
  230. package/dist/template/implementations/view_list_columns.template.js +49 -0
  231. package/dist/{templates → template/implementations}/view_search_input.template.d.ts +3 -3
  232. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -0
  233. package/dist/template/implementations/view_search_input.template.js +64 -0
  234. package/dist/template/index.d.ts +7 -0
  235. package/dist/template/index.d.ts.map +1 -0
  236. package/dist/template/index.js +8 -0
  237. package/dist/template/template-manager.d.ts +56 -0
  238. package/dist/template/template-manager.d.ts.map +1 -0
  239. package/dist/template/template-manager.js +125 -0
  240. package/dist/template/template-types.d.ts +16 -0
  241. package/dist/template/template-types.d.ts.map +1 -0
  242. package/dist/template/template-types.js +7 -0
  243. package/dist/template/template.d.ts +49 -0
  244. package/dist/template/template.d.ts.map +1 -0
  245. package/dist/template/template.js +60 -0
  246. package/dist/template/zod-converter.d.ts +51 -0
  247. package/dist/template/zod-converter.d.ts.map +1 -0
  248. package/dist/template/zod-converter.js +449 -0
  249. package/dist/testing/_relation-graph.d.ts +1 -1
  250. package/dist/testing/_relation-graph.d.ts.map +1 -1
  251. package/dist/testing/_relation-graph.js +89 -2
  252. package/dist/testing/fixture-manager.d.ts +42 -11
  253. package/dist/testing/fixture-manager.d.ts.map +1 -1
  254. package/dist/testing/fixture-manager.js +623 -2
  255. package/dist/types/types.d.ts +747 -143
  256. package/dist/types/types.d.ts.map +1 -1
  257. package/dist/types/types.js +546 -2
  258. package/dist/typings/knex.d.js +3 -2
  259. package/dist/utils/async-utils.d.ts +7 -0
  260. package/dist/utils/async-utils.d.ts.map +1 -1
  261. package/dist/utils/async-utils.js +57 -2
  262. package/dist/utils/console-util.d.ts +2 -0
  263. package/dist/utils/console-util.d.ts.map +1 -0
  264. package/dist/utils/console-util.js +6 -0
  265. package/dist/utils/controller.d.ts +1 -0
  266. package/dist/utils/controller.d.ts.map +1 -1
  267. package/dist/utils/controller.js +29 -2
  268. package/dist/utils/esm-utils.d.ts +39 -0
  269. package/dist/utils/esm-utils.d.ts.map +1 -0
  270. package/dist/utils/esm-utils.js +49 -0
  271. package/dist/utils/formatter.d.ts +3 -0
  272. package/dist/utils/formatter.d.ts.map +1 -0
  273. package/dist/utils/formatter.js +110 -0
  274. package/dist/utils/fs-utils.d.ts +1 -1
  275. package/dist/utils/fs-utils.d.ts.map +1 -1
  276. package/dist/utils/fs-utils.js +17 -2
  277. package/dist/utils/lodash-able.d.ts.map +1 -1
  278. package/dist/utils/lodash-able.js +6 -2
  279. package/dist/utils/model.js +22 -2
  280. package/dist/utils/object-utils.d.ts +44 -0
  281. package/dist/utils/object-utils.d.ts.map +1 -0
  282. package/dist/utils/object-utils.js +191 -0
  283. package/dist/utils/path-utils.d.ts +89 -0
  284. package/dist/utils/path-utils.d.ts.map +1 -0
  285. package/dist/utils/path-utils.js +60 -0
  286. package/dist/utils/process-utils.d.ts +13 -0
  287. package/dist/utils/process-utils.d.ts.map +1 -0
  288. package/dist/utils/process-utils.js +36 -0
  289. package/dist/utils/sql-parser.d.ts +5 -1
  290. package/dist/utils/sql-parser.d.ts.map +1 -1
  291. package/dist/utils/sql-parser.js +46 -2
  292. package/dist/utils/type-utils.d.ts +23 -0
  293. package/dist/utils/type-utils.d.ts.map +1 -0
  294. package/dist/utils/type-utils.js +45 -0
  295. package/dist/utils/utils.d.ts +10 -7
  296. package/dist/utils/utils.d.ts.map +1 -1
  297. package/dist/utils/utils.js +72 -2
  298. package/dist/utils/zod-error.d.ts +1 -1
  299. package/dist/utils/zod-error.d.ts.map +1 -1
  300. package/dist/utils/zod-error.js +19 -2
  301. package/package.json +65 -27
  302. package/src/ai/agents/agent.ts +87 -0
  303. package/src/ai/agents/index.ts +2 -0
  304. package/src/ai/agents/types.ts +47 -0
  305. package/src/ai/index.ts +1 -0
  306. package/src/ai/providers/rtzr/api.ts +37 -0
  307. package/src/ai/providers/rtzr/error.ts +34 -0
  308. package/src/ai/providers/rtzr/index.ts +4 -0
  309. package/src/ai/providers/rtzr/model.ts +201 -0
  310. package/src/ai/providers/rtzr/options.ts +49 -0
  311. package/src/ai/providers/rtzr/provider.ts +91 -0
  312. package/src/ai/providers/rtzr/utils.ts +127 -0
  313. package/src/api/base-frame.ts +4 -2
  314. package/src/api/caster.ts +17 -23
  315. package/src/api/code-converters.ts +178 -535
  316. package/src/api/config.ts +125 -0
  317. package/src/api/context.ts +7 -17
  318. package/src/api/decorators.ts +176 -46
  319. package/src/api/index.ts +2 -2
  320. package/src/api/sonamu.ts +190 -167
  321. package/src/api/validator.ts +83 -0
  322. package/src/bin/build-config.ts +8 -1
  323. package/src/bin/cli.ts +258 -124
  324. package/src/bin/hot-hook-register.ts +22 -0
  325. package/src/bin/loader-register.ts +38 -0
  326. package/src/database/_batch_update.ts +46 -31
  327. package/src/database/base-model.ts +390 -182
  328. package/src/database/base-model.types.ts +155 -0
  329. package/src/database/code-generator.ts +13 -32
  330. package/src/database/db.ts +40 -96
  331. package/src/database/puri-subset.test-d.ts +471 -0
  332. package/src/database/puri-subset.types.ts +195 -0
  333. package/src/database/puri-wrapper.ts +58 -67
  334. package/src/database/puri.ts +229 -148
  335. package/src/database/puri.types.ts +76 -30
  336. package/src/database/transaction-context.ts +1 -1
  337. package/src/database/upsert-builder.ts +262 -132
  338. package/src/entity/entity-manager.ts +48 -36
  339. package/src/entity/entity.ts +330 -248
  340. package/src/exceptions/error-handler.ts +3 -3
  341. package/src/exceptions/so-exceptions.ts +11 -11
  342. package/src/file-storage/driver.ts +5 -5
  343. package/src/file-storage/file-storage.ts +2 -2
  344. package/src/index.ts +18 -10
  345. package/src/migration/code-generation.ts +185 -172
  346. package/src/migration/migration-set.ts +80 -293
  347. package/src/migration/migrator.ts +199 -571
  348. package/src/migration/mysql-schema-reader.ts.txt +272 -0
  349. package/src/migration/postgresql-schema-reader.ts +310 -0
  350. package/src/migration/types.ts +6 -39
  351. package/src/naite/messaging-types.ts +51 -0
  352. package/src/naite/naite-reporter.ts +128 -0
  353. package/src/naite/naite.ts +415 -0
  354. package/src/shared/web.shared.ts.txt +20 -24
  355. package/src/stream/sse.ts +5 -5
  356. package/src/syncer/api-parser.ts +282 -0
  357. package/src/syncer/checksum.ts +140 -0
  358. package/src/syncer/code-generator.ts +198 -0
  359. package/src/syncer/entity-operations.ts +65 -0
  360. package/src/syncer/file-patterns.ts +56 -0
  361. package/src/syncer/index.ts +6 -0
  362. package/src/syncer/module-loader.ts +128 -0
  363. package/src/syncer/syncer.ts +389 -1453
  364. package/src/template/entity-converter.ts +114 -0
  365. package/src/template/helpers.ts +81 -0
  366. package/src/{templates → template/implementations}/entity.template.ts +7 -7
  367. package/src/{templates → template/implementations}/generated.template.ts +101 -101
  368. package/src/{templates → template/implementations}/generated_http.template.ts +27 -57
  369. package/src/template/implementations/generated_sso.template.ts +151 -0
  370. package/src/{templates → template/implementations}/init_types.template.ts +5 -7
  371. package/src/{templates → template/implementations}/model.template.ts +52 -43
  372. package/src/{templates → template/implementations}/model_test.template.ts +5 -5
  373. package/src/{templates → template/implementations}/service.template.ts +66 -82
  374. package/src/{templates → template/implementations}/view_enums_buttonset.template.ts +3 -3
  375. package/src/{templates → template/implementations}/view_enums_dropdown.template.ts +4 -20
  376. package/src/{templates → template/implementations}/view_enums_select.template.ts +4 -4
  377. package/src/{templates → template/implementations}/view_form.template.ts +40 -83
  378. package/src/{templates → template/implementations}/view_id_all_select.template.ts +3 -3
  379. package/src/{templates → template/implementations}/view_id_async_select.template.ts +10 -24
  380. package/src/{templates → template/implementations}/view_list.template.ts +60 -152
  381. package/src/{templates → template/implementations}/view_list_columns.template.ts +5 -11
  382. package/src/{templates → template/implementations}/view_search_input.template.ts +3 -3
  383. package/src/template/index.ts +6 -0
  384. package/src/template/template-manager.ts +166 -0
  385. package/src/template/template-types.ts +16 -0
  386. package/src/template/template.ts +105 -0
  387. package/src/template/zod-converter.ts +525 -0
  388. package/src/testing/_relation-graph.ts +18 -11
  389. package/src/testing/fixture-manager.ts +472 -359
  390. package/src/types/types.ts +553 -308
  391. package/src/typings/knex.d.ts +7 -9
  392. package/src/utils/async-utils.ts +23 -10
  393. package/src/utils/console-util.ts +4 -0
  394. package/src/utils/controller.ts +3 -0
  395. package/src/utils/esm-utils.ts +59 -0
  396. package/src/utils/formatter.ts +109 -0
  397. package/src/utils/fs-utils.ts +1 -1
  398. package/src/utils/lodash-able.ts +1 -4
  399. package/src/utils/object-utils.ts +217 -0
  400. package/src/utils/path-utils.ts +99 -0
  401. package/src/utils/process-utils.ts +46 -0
  402. package/src/utils/sql-parser.ts +23 -5
  403. package/src/utils/type-utils.ts +83 -0
  404. package/src/utils/utils.ts +66 -43
  405. package/src/utils/zod-error.ts +3 -4
  406. package/dist/api/base-frame.js.map +0 -1
  407. package/dist/api/caster.js.map +0 -1
  408. package/dist/api/code-converters.js.map +0 -1
  409. package/dist/api/context.js.map +0 -1
  410. package/dist/api/decorators.js.map +0 -1
  411. package/dist/api/index.js.map +0 -1
  412. package/dist/api/sonamu.js.map +0 -1
  413. package/dist/bin/build-config.js.map +0 -1
  414. package/dist/bin/cli-wrapper.d.ts +0 -3
  415. package/dist/bin/cli-wrapper.d.ts.map +0 -1
  416. package/dist/bin/cli-wrapper.js +0 -3
  417. package/dist/bin/cli-wrapper.js.map +0 -1
  418. package/dist/bin/cli.js.map +0 -1
  419. package/dist/database/_batch_update.js.map +0 -1
  420. package/dist/database/base-model.js.map +0 -1
  421. package/dist/database/code-generator.js.map +0 -1
  422. package/dist/database/db.js.map +0 -1
  423. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +0 -2
  424. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +0 -1
  425. package/dist/database/knex-plugins/knex-on-duplicate-update.js +0 -2
  426. package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +0 -1
  427. package/dist/database/puri-wrapper.js.map +0 -1
  428. package/dist/database/puri.js.map +0 -1
  429. package/dist/database/puri.types.js.map +0 -1
  430. package/dist/database/transaction-context.js.map +0 -1
  431. package/dist/database/upsert-builder.js.map +0 -1
  432. package/dist/entity/entity-manager.js.map +0 -1
  433. package/dist/entity/entity-utils.d.ts +0 -61
  434. package/dist/entity/entity-utils.d.ts.map +0 -1
  435. package/dist/entity/entity-utils.js +0 -2
  436. package/dist/entity/entity-utils.js.map +0 -1
  437. package/dist/entity/entity.js.map +0 -1
  438. package/dist/exceptions/error-handler.js.map +0 -1
  439. package/dist/exceptions/so-exceptions.js.map +0 -1
  440. package/dist/file-storage/driver.js.map +0 -1
  441. package/dist/file-storage/file-storage.js.map +0 -1
  442. package/dist/index.js.map +0 -1
  443. package/dist/migration/code-generation.js.map +0 -1
  444. package/dist/migration/migration-set.js.map +0 -1
  445. package/dist/migration/migrator.js.map +0 -1
  446. package/dist/migration/types.js.map +0 -1
  447. package/dist/stream/index.js.map +0 -1
  448. package/dist/stream/sse.js.map +0 -1
  449. package/dist/syncer/index.js.map +0 -1
  450. package/dist/syncer/syncer.js.map +0 -1
  451. package/dist/templates/base-template.d.ts +0 -13
  452. package/dist/templates/base-template.d.ts.map +0 -1
  453. package/dist/templates/base-template.js +0 -2
  454. package/dist/templates/base-template.js.map +0 -1
  455. package/dist/templates/entity.template.d.ts.map +0 -1
  456. package/dist/templates/entity.template.js +0 -2
  457. package/dist/templates/entity.template.js.map +0 -1
  458. package/dist/templates/generated.template.d.ts.map +0 -1
  459. package/dist/templates/generated.template.js +0 -2
  460. package/dist/templates/generated.template.js.map +0 -1
  461. package/dist/templates/generated_http.template.d.ts.map +0 -1
  462. package/dist/templates/generated_http.template.js +0 -2
  463. package/dist/templates/generated_http.template.js.map +0 -1
  464. package/dist/templates/generated_sso.template.d.ts.map +0 -1
  465. package/dist/templates/generated_sso.template.js +0 -2
  466. package/dist/templates/generated_sso.template.js.map +0 -1
  467. package/dist/templates/index.d.ts +0 -2
  468. package/dist/templates/index.d.ts.map +0 -1
  469. package/dist/templates/index.js +0 -2
  470. package/dist/templates/index.js.map +0 -1
  471. package/dist/templates/init_types.template.d.ts.map +0 -1
  472. package/dist/templates/init_types.template.js +0 -2
  473. package/dist/templates/init_types.template.js.map +0 -1
  474. package/dist/templates/model.template.d.ts +0 -17
  475. package/dist/templates/model.template.d.ts.map +0 -1
  476. package/dist/templates/model.template.js +0 -2
  477. package/dist/templates/model.template.js.map +0 -1
  478. package/dist/templates/model_test.template.d.ts.map +0 -1
  479. package/dist/templates/model_test.template.js +0 -2
  480. package/dist/templates/model_test.template.js.map +0 -1
  481. package/dist/templates/service.template.d.ts.map +0 -1
  482. package/dist/templates/service.template.js +0 -2
  483. package/dist/templates/service.template.js.map +0 -1
  484. package/dist/templates/view_enums_buttonset.template.d.ts.map +0 -1
  485. package/dist/templates/view_enums_buttonset.template.js +0 -2
  486. package/dist/templates/view_enums_buttonset.template.js.map +0 -1
  487. package/dist/templates/view_enums_dropdown.template.d.ts.map +0 -1
  488. package/dist/templates/view_enums_dropdown.template.js +0 -2
  489. package/dist/templates/view_enums_dropdown.template.js.map +0 -1
  490. package/dist/templates/view_enums_select.template.d.ts.map +0 -1
  491. package/dist/templates/view_enums_select.template.js +0 -2
  492. package/dist/templates/view_enums_select.template.js.map +0 -1
  493. package/dist/templates/view_form.template.d.ts.map +0 -1
  494. package/dist/templates/view_form.template.js +0 -2
  495. package/dist/templates/view_form.template.js.map +0 -1
  496. package/dist/templates/view_id_all_select.template.d.ts.map +0 -1
  497. package/dist/templates/view_id_all_select.template.js +0 -2
  498. package/dist/templates/view_id_all_select.template.js.map +0 -1
  499. package/dist/templates/view_id_async_select.template.d.ts.map +0 -1
  500. package/dist/templates/view_id_async_select.template.js +0 -2
  501. package/dist/templates/view_id_async_select.template.js.map +0 -1
  502. package/dist/templates/view_list.template.d.ts.map +0 -1
  503. package/dist/templates/view_list.template.js +0 -2
  504. package/dist/templates/view_list.template.js.map +0 -1
  505. package/dist/templates/view_list_columns.template.d.ts +0 -17
  506. package/dist/templates/view_list_columns.template.d.ts.map +0 -1
  507. package/dist/templates/view_list_columns.template.js +0 -2
  508. package/dist/templates/view_list_columns.template.js.map +0 -1
  509. package/dist/templates/view_search_input.template.d.ts.map +0 -1
  510. package/dist/templates/view_search_input.template.js +0 -2
  511. package/dist/templates/view_search_input.template.js.map +0 -1
  512. package/dist/testing/_relation-graph.js.map +0 -1
  513. package/dist/testing/fixture-manager.js.map +0 -1
  514. package/dist/types/types.js.map +0 -1
  515. package/dist/typings/knex.d.js.map +0 -1
  516. package/dist/utils/async-utils.js.map +0 -1
  517. package/dist/utils/controller.js.map +0 -1
  518. package/dist/utils/fs-utils.js.map +0 -1
  519. package/dist/utils/lodash-able.js.map +0 -1
  520. package/dist/utils/model.js.map +0 -1
  521. package/dist/utils/sql-parser.js.map +0 -1
  522. package/dist/utils/utils.js.map +0 -1
  523. package/dist/utils/zod-error.js.map +0 -1
  524. package/src/bin/cli-wrapper.ts +0 -75
  525. package/src/database/knex-plugins/knex-on-duplicate-update.ts +0 -45
  526. package/src/entity/entity-utils.ts +0 -291
  527. package/src/templates/base-template.ts +0 -19
  528. package/src/templates/generated_sso.template.ts +0 -138
  529. package/src/templates/index.ts +0 -1
@@ -1,3 +1,3 @@
1
- import { FastifyInstance } from "fastify";
1
+ import type { FastifyInstance } from "fastify";
2
2
  export declare function setupErrorHandler(server: FastifyInstance): void;
3
3
  //# sourceMappingURL=error-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/exceptions/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI1C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,QA2BxD"}
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/exceptions/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAI/C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,QA2BxD"}
@@ -1,2 +1,29 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"setupErrorHandler",{enumerable:true,get:function(){return setupErrorHandler}});var _soexceptions=require("./so-exceptions");function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_with_holes(arr){if(Array.isArray(arr))return arr}function _iterable_to_array_limit(arr,i){var _i=arr==null?null:typeof Symbol!=="undefined"&&arr[Symbol.iterator]||arr["@@iterator"];if(_i==null)return;var _arr=[];var _n=true;var _d=false;var _s,_e;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"]!=null)_i["return"]()}finally{if(_d)throw _e}}return _arr}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _sliced_to_array(arr,i){return _array_with_holes(arr)||_iterable_to_array_limit(arr,i)||_unsupported_iterable_to_array(arr,i)||_non_iterable_rest()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function setupErrorHandler(server){server.setErrorHandler(function(error,request,reply){var _error;var _statusCode;(_statusCode=(_error=error).statusCode)!==null&&_statusCode!==void 0?_statusCode:_error.statusCode=400;if((0,_soexceptions.isSoException)(error)&&error.payload&&Array.isArray(error.payload)){var issues=error.payload;var _issues=_sliced_to_array(issues,1),issue=_issues[0];var message="".concat(issue.message," (").concat(issue.path.join("/"),")");request.log.error("".concat(error.statusCode," ").concat(message));reply.status(error.statusCode<=501?error.statusCode:501).send({name:error.name,code:error.code,message:message,validationErrors:error.validation,issues:issues})}else{request.log.error("".concat(error.statusCode," ").concat(error.message));reply.status(error.statusCode<=501?error.statusCode:501).send({name:error.name,code:error.code,message:error.message,validationErrors:error.validation})}})}
2
- //# sourceMappingURL=error-handler.js.map
1
+ import { isSoException } from "./so-exceptions.js";
2
+ export function setupErrorHandler(server) {
3
+ server.setErrorHandler((error, request, reply)=>{
4
+ error.statusCode ??= 400;
5
+ if (isSoException(error) && error.payload && Array.isArray(error.payload)) {
6
+ const issues = error.payload;
7
+ const [issue] = issues;
8
+ const message = `${issue.message} (${issue.path.join("/")})`;
9
+ request.log.error(`${error.statusCode} ${message}`);
10
+ reply.status(error.statusCode <= 501 ? error.statusCode : 501).send({
11
+ name: error.name,
12
+ code: error.code,
13
+ message: message,
14
+ validationErrors: error.validation,
15
+ issues
16
+ });
17
+ } else {
18
+ request.log.error(`${error.statusCode} ${error.message}`);
19
+ reply.status(error.statusCode <= 501 ? error.statusCode : 501).send({
20
+ name: error.name,
21
+ code: error.code,
22
+ message: error.message,
23
+ validationErrors: error.validation
24
+ });
25
+ }
26
+ });
27
+ }
28
+
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGNlcHRpb25zL2Vycm9yLWhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHR5cGUgeiBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBpc1NvRXhjZXB0aW9uIH0gZnJvbSBcIi4vc28tZXhjZXB0aW9uc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBFcnJvckhhbmRsZXIoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpIHtcbiAgc2VydmVyLnNldEVycm9ySGFuZGxlcigoZXJyb3IsIHJlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgZXJyb3Iuc3RhdHVzQ29kZSA/Pz0gNDAwO1xuXG4gICAgaWYgKGlzU29FeGNlcHRpb24oZXJyb3IpICYmIGVycm9yLnBheWxvYWQgJiYgQXJyYXkuaXNBcnJheShlcnJvci5wYXlsb2FkKSkge1xuICAgICAgY29uc3QgaXNzdWVzID0gZXJyb3IucGF5bG9hZCBhcyB6LmNvcmUuJFpvZElzc3VlW107XG4gICAgICBjb25zdCBbaXNzdWVdID0gaXNzdWVzO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGAke2lzc3VlLm1lc3NhZ2V9ICgke2lzc3VlLnBhdGguam9pbihcIi9cIil9KWA7XG5cbiAgICAgIHJlcXVlc3QubG9nLmVycm9yKGAke2Vycm9yLnN0YXR1c0NvZGV9ICR7bWVzc2FnZX1gKTtcbiAgICAgIHJlcGx5LnN0YXR1cyhlcnJvci5zdGF0dXNDb2RlIDw9IDUwMSA/IGVycm9yLnN0YXR1c0NvZGUgOiA1MDEpLnNlbmQoe1xuICAgICAgICBuYW1lOiBlcnJvci5uYW1lLFxuICAgICAgICBjb2RlOiBlcnJvci5jb2RlLFxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICB2YWxpZGF0aW9uRXJyb3JzOiBlcnJvci52YWxpZGF0aW9uLFxuICAgICAgICBpc3N1ZXMsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdC5sb2cuZXJyb3IoYCR7ZXJyb3Iuc3RhdHVzQ29kZX0gJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmVwbHkuc3RhdHVzKGVycm9yLnN0YXR1c0NvZGUgPD0gNTAxID8gZXJyb3Iuc3RhdHVzQ29kZSA6IDUwMSkuc2VuZCh7XG4gICAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICAgIGNvZGU6IGVycm9yLmNvZGUsXG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIHZhbGlkYXRpb25FcnJvcnM6IGVycm9yLnZhbGlkYXRpb24sXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbImlzU29FeGNlcHRpb24iLCJzZXR1cEVycm9ySGFuZGxlciIsInNlcnZlciIsInNldEVycm9ySGFuZGxlciIsImVycm9yIiwicmVxdWVzdCIsInJlcGx5Iiwic3RhdHVzQ29kZSIsInBheWxvYWQiLCJBcnJheSIsImlzQXJyYXkiLCJpc3N1ZXMiLCJpc3N1ZSIsIm1lc3NhZ2UiLCJwYXRoIiwiam9pbiIsImxvZyIsInN0YXR1cyIsInNlbmQiLCJuYW1lIiwiY29kZSIsInZhbGlkYXRpb25FcnJvcnMiLCJ2YWxpZGF0aW9uIl0sIm1hcHBpbmdzIjoiQUFFQSxTQUFTQSxhQUFhLFFBQVEscUJBQWtCO0FBRWhELE9BQU8sU0FBU0Msa0JBQWtCQyxNQUF1QjtJQUN2REEsT0FBT0MsZUFBZSxDQUFDLENBQUNDLE9BQU9DLFNBQVNDO1FBQ3RDRixNQUFNRyxVQUFVLEtBQUs7UUFFckIsSUFBSVAsY0FBY0ksVUFBVUEsTUFBTUksT0FBTyxJQUFJQyxNQUFNQyxPQUFPLENBQUNOLE1BQU1JLE9BQU8sR0FBRztZQUN6RSxNQUFNRyxTQUFTUCxNQUFNSSxPQUFPO1lBQzVCLE1BQU0sQ0FBQ0ksTUFBTSxHQUFHRDtZQUNoQixNQUFNRSxVQUFVLEdBQUdELE1BQU1DLE9BQU8sQ0FBQyxFQUFFLEVBQUVELE1BQU1FLElBQUksQ0FBQ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTVEVixRQUFRVyxHQUFHLENBQUNaLEtBQUssQ0FBQyxHQUFHQSxNQUFNRyxVQUFVLENBQUMsQ0FBQyxFQUFFTSxTQUFTO1lBQ2xEUCxNQUFNVyxNQUFNLENBQUNiLE1BQU1HLFVBQVUsSUFBSSxNQUFNSCxNQUFNRyxVQUFVLEdBQUcsS0FBS1csSUFBSSxDQUFDO2dCQUNsRUMsTUFBTWYsTUFBTWUsSUFBSTtnQkFDaEJDLE1BQU1oQixNQUFNZ0IsSUFBSTtnQkFDaEJQLFNBQVNBO2dCQUNUUSxrQkFBa0JqQixNQUFNa0IsVUFBVTtnQkFDbENYO1lBQ0Y7UUFDRixPQUFPO1lBQ0xOLFFBQVFXLEdBQUcsQ0FBQ1osS0FBSyxDQUFDLEdBQUdBLE1BQU1HLFVBQVUsQ0FBQyxDQUFDLEVBQUVILE1BQU1TLE9BQU8sRUFBRTtZQUN4RFAsTUFBTVcsTUFBTSxDQUFDYixNQUFNRyxVQUFVLElBQUksTUFBTUgsTUFBTUcsVUFBVSxHQUFHLEtBQUtXLElBQUksQ0FBQztnQkFDbEVDLE1BQU1mLE1BQU1lLElBQUk7Z0JBQ2hCQyxNQUFNaEIsTUFBTWdCLElBQUk7Z0JBQ2hCUCxTQUFTVCxNQUFNUyxPQUFPO2dCQUN0QlEsa0JBQWtCakIsTUFBTWtCLFVBQVU7WUFDcEM7UUFDRjtJQUNGO0FBQ0YifQ==
@@ -4,7 +4,7 @@ export declare abstract class SoException extends Error {
4
4
  payload?: unknown | undefined;
5
5
  constructor(statusCode: number, message: string, payload?: unknown | undefined);
6
6
  }
7
- export declare function isSoException(err: any): err is SoException;
7
+ export declare function isSoException(err: unknown): err is SoException;
8
8
  export declare class BadRequestException extends SoException {
9
9
  message: string;
10
10
  payload?: unknown | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"so-exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions/so-exceptions.ts"],"names":[],"mappings":"AAAA,8BAAsB,WAAY,SAAQ,KAAK;aAE3B,UAAU,EAAE,MAAM;IAC3B,OAAO,EAAE,MAAM;IACf,OAAO,CAAC,EAAE,OAAO;gBAFR,UAAU,EAAE,MAAM,EAC3B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,WAAW,CAE1D;AAKD,qBAAa,mBAAoB,SAAQ,WAAW;IAEzC,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAgB,EACvB,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,qBAAsB,SAAQ,WAAW;IAE3C,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAiB,EACxB,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,iBAAkB,SAAQ,WAAW;IAEvC,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAc,EACrB,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,2BAA4B,SAAQ,WAAW;IAEjD,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAwB,EAC/B,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,4BAA6B,SAAQ,WAAW;IAElD,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAA0B,EACjC,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,yBAA0B,SAAQ,WAAW;IAE/C,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAsB,EAC7B,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,qBAAsB,SAAQ,WAAW;IAE3C,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAkB,EACzB,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,uBAAwB,SAAQ,WAAW;IAE7C,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAqB,EAC5B,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B"}
1
+ {"version":3,"file":"so-exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions/so-exceptions.ts"],"names":[],"mappings":"AAAA,8BAAsB,WAAY,SAAQ,KAAK;aAE3B,UAAU,EAAE,MAAM;IAC3B,OAAO,EAAE,MAAM;IACf,OAAO,CAAC,EAAE,OAAO;gBAFR,UAAU,EAAE,MAAM,EAC3B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,WAAW,CAE9D;AAKD,qBAAa,mBAAoB,SAAQ,WAAW;IAEzC,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAgB,EACvB,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,qBAAsB,SAAQ,WAAW;IAE3C,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAiB,EACxB,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,iBAAkB,SAAQ,WAAW;IAEvC,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAc,EACrB,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,2BAA4B,SAAQ,WAAW;IAEjD,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAwB,EAC/B,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,4BAA6B,SAAQ,WAAW;IAElD,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAA0B,EACjC,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,yBAA0B,SAAQ,WAAW;IAE/C,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAsB,EAC7B,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,qBAAsB,SAAQ,WAAW;IAE3C,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAkB,EACzB,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B;AAKD,qBAAa,uBAAwB,SAAQ,WAAW;IAE7C,OAAO;IACP,OAAO,CAAC,EAAE,OAAO;gBADjB,OAAO,SAAqB,EAC5B,OAAO,CAAC,EAAE,OAAO,YAAA;CAI3B"}
@@ -1,2 +1,85 @@
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 AlreadyProcessedException(){return AlreadyProcessedException},get BadRequestException(){return BadRequestException},get DuplicateRowException(){return DuplicateRowException},get InternalServerErrorException(){return InternalServerErrorException},get NotFoundException(){return NotFoundException},get ServiceUnavailableException(){return ServiceUnavailableException},get SoException(){return SoException},get TargetNotFoundException(){return TargetNotFoundException},get UnauthorizedException(){return UnauthorizedException},get isSoException(){return isSoException}});function _assert_this_initialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function _call_super(_this,derived,args){derived=_get_prototype_of(derived);return _possible_constructor_return(_this,_is_native_reflect_construct()?Reflect.construct(derived,args||[],_get_prototype_of(_this).constructor):derived.apply(_this,args))}function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _construct(Parent,args,Class){if(_is_native_reflect_construct()){_construct=Reflect.construct}else{_construct=function construct(Parent,args,Class){var a=[null];a.push.apply(a,args);var Constructor=Function.bind.apply(Parent,a);var instance=new Constructor;if(Class)_set_prototype_of(instance,Class.prototype);return instance}}return _construct.apply(null,arguments)}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 _get_prototype_of(o){_get_prototype_of=Object.setPrototypeOf?Object.getPrototypeOf:function getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _get_prototype_of(o)}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_set_prototype_of(subClass,superClass)}function _is_native_function(fn){return Function.toString.call(fn).indexOf("[native code]")!==-1}function _possible_constructor_return(self,call){if(call&&(_type_of(call)==="object"||typeof call==="function")){return call}return _assert_this_initialized(self)}function _set_prototype_of(o,p){_set_prototype_of=Object.setPrototypeOf||function setPrototypeOf(o,p){o.__proto__=p;return o};return _set_prototype_of(o,p)}function _type_of(obj){"@swc/helpers - typeof";return obj&&typeof Symbol!=="undefined"&&obj.constructor===Symbol?"symbol":typeof obj}function _wrap_native_super(Class){var _cache=typeof Map==="function"?new Map:undefined;_wrap_native_super=function wrapNativeSuper(Class){if(Class===null||!_is_native_function(Class))return Class;if(typeof Class!=="function"){throw new TypeError("Super expression must either be null or a function")}if(typeof _cache!=="undefined"){if(_cache.has(Class))return _cache.get(Class);_cache.set(Class,Wrapper)}function Wrapper(){return _construct(Class,arguments,_get_prototype_of(this).constructor)}Wrapper.prototype=Object.create(Class.prototype,{constructor:{value:Wrapper,enumerable:false,writable:true,configurable:true}});return _set_prototype_of(Wrapper,Class)};return _wrap_native_super(Class)}function _is_native_reflect_construct(){try{var result=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(_){}return(_is_native_reflect_construct=function(){return!!result})()}var SoException=/*#__PURE__*/function(Error1){"use strict";_inherits(SoException,Error1);function SoException(statusCode,message,payload){_class_call_check(this,SoException);var _this;_this=_call_super(this,SoException,[message]),_define_property(_this,"statusCode",void 0),_define_property(_this,"message",void 0),_define_property(_this,"payload",void 0),_this.statusCode=statusCode,_this.message=message,_this.payload=payload;return _this}return SoException}(_wrap_native_super(Error));function isSoException(err){return err.statusCode!==undefined}var BadRequestException=/*#__PURE__*/function(SoException){"use strict";_inherits(BadRequestException,SoException);function BadRequestException(){var message=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"Bad Request",payload=arguments.length>1?arguments[1]:void 0;_class_call_check(this,BadRequestException);var _this;_this=_call_super(this,BadRequestException,[400,message,payload]),_define_property(_this,"message",void 0),_define_property(_this,"payload",void 0),_this.message=message,_this.payload=payload;return _this}return BadRequestException}(SoException);var UnauthorizedException=/*#__PURE__*/function(SoException){"use strict";_inherits(UnauthorizedException,SoException);function UnauthorizedException(){var message=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"Unauthorized",payload=arguments.length>1?arguments[1]:void 0;_class_call_check(this,UnauthorizedException);var _this;_this=_call_super(this,UnauthorizedException,[401,message,payload]),_define_property(_this,"message",void 0),_define_property(_this,"payload",void 0),_this.message=message,_this.payload=payload;return _this}return UnauthorizedException}(SoException);var NotFoundException=/*#__PURE__*/function(SoException){"use strict";_inherits(NotFoundException,SoException);function NotFoundException(){var message=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"Not Found",payload=arguments.length>1?arguments[1]:void 0;_class_call_check(this,NotFoundException);var _this;_this=_call_super(this,NotFoundException,[404,message,payload]),_define_property(_this,"message",void 0),_define_property(_this,"payload",void 0),_this.message=message,_this.payload=payload;return _this}return NotFoundException}(SoException);var ServiceUnavailableException=/*#__PURE__*/function(SoException){"use strict";_inherits(ServiceUnavailableException,SoException);function ServiceUnavailableException(){var message=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"Service Unavailable",payload=arguments.length>1?arguments[1]:void 0;_class_call_check(this,ServiceUnavailableException);var _this;_this=_call_super(this,ServiceUnavailableException,[503,message,payload]),_define_property(_this,"message",void 0),_define_property(_this,"payload",void 0),_this.message=message,_this.payload=payload;return _this}return ServiceUnavailableException}(SoException);var InternalServerErrorException=/*#__PURE__*/function(SoException){"use strict";_inherits(InternalServerErrorException,SoException);function InternalServerErrorException(){var message=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"Internal Server Error",payload=arguments.length>1?arguments[1]:void 0;_class_call_check(this,InternalServerErrorException);var _this;_this=_call_super(this,InternalServerErrorException,[500,message,payload]),_define_property(_this,"message",void 0),_define_property(_this,"payload",void 0),_this.message=message,_this.payload=payload;return _this}return InternalServerErrorException}(SoException);var AlreadyProcessedException=/*#__PURE__*/function(SoException){"use strict";_inherits(AlreadyProcessedException,SoException);function AlreadyProcessedException(){var message=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"Already Processed",payload=arguments.length>1?arguments[1]:void 0;_class_call_check(this,AlreadyProcessedException);var _this;_this=_call_super(this,AlreadyProcessedException,[541,message,payload]),_define_property(_this,"message",void 0),_define_property(_this,"payload",void 0),_this.message=message,_this.payload=payload;return _this}return AlreadyProcessedException}(SoException);var DuplicateRowException=/*#__PURE__*/function(SoException){"use strict";_inherits(DuplicateRowException,SoException);function DuplicateRowException(){var message=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"Duplicate Row",payload=arguments.length>1?arguments[1]:void 0;_class_call_check(this,DuplicateRowException);var _this;_this=_call_super(this,DuplicateRowException,[542,message,payload]),_define_property(_this,"message",void 0),_define_property(_this,"payload",void 0),_this.message=message,_this.payload=payload;return _this}return DuplicateRowException}(SoException);var TargetNotFoundException=/*#__PURE__*/function(SoException){"use strict";_inherits(TargetNotFoundException,SoException);function TargetNotFoundException(){var message=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"Target Not Found",payload=arguments.length>1?arguments[1]:void 0;_class_call_check(this,TargetNotFoundException);var _this;_this=_call_super(this,TargetNotFoundException,[520,message,payload]),_define_property(_this,"message",void 0),_define_property(_this,"payload",void 0),_this.message=message,_this.payload=payload;return _this}return TargetNotFoundException}(SoException);
2
- //# sourceMappingURL=so-exceptions.js.map
1
+ export class SoException extends Error {
2
+ statusCode;
3
+ message;
4
+ payload;
5
+ constructor(statusCode, message, payload){
6
+ super(message), this.statusCode = statusCode, this.message = message, this.payload = payload;
7
+ }
8
+ }
9
+ export function isSoException(err) {
10
+ return err.statusCode !== undefined;
11
+ }
12
+ /*
13
+ 잘못된 매개변수 등 요청사항에 문제가 있는 경우
14
+ */ export class BadRequestException extends SoException {
15
+ message;
16
+ payload;
17
+ constructor(message = "Bad Request", payload){
18
+ super(400, message, payload), this.message = message, this.payload = payload;
19
+ }
20
+ }
21
+ /*
22
+ 로그인이 반드시 필요한 케이스에 로그아웃 상태인 경우 / 접근 권한이 없는 요청시
23
+ */ export class UnauthorizedException extends SoException {
24
+ message;
25
+ payload;
26
+ constructor(message = "Unauthorized", payload){
27
+ super(401, message, payload), this.message = message, this.payload = payload;
28
+ }
29
+ }
30
+ /*
31
+ 존재하지 않는 레코드에 접근시
32
+ */ export class NotFoundException extends SoException {
33
+ message;
34
+ payload;
35
+ constructor(message = "Not Found", payload){
36
+ super(404, message, payload), this.message = message, this.payload = payload;
37
+ }
38
+ }
39
+ /*
40
+ 현재 상태에서 처리가 불가능한 케이스
41
+ */ export class ServiceUnavailableException extends SoException {
42
+ message;
43
+ payload;
44
+ constructor(message = "Service Unavailable", payload){
45
+ super(503, message, payload), this.message = message, this.payload = payload;
46
+ }
47
+ }
48
+ /*
49
+ 내부 처리 로직 (외부 API 콜 포함) 오류 발생시
50
+ */ export class InternalServerErrorException extends SoException {
51
+ message;
52
+ payload;
53
+ constructor(message = "Internal Server Error", payload){
54
+ super(500, message, payload), this.message = message, this.payload = payload;
55
+ }
56
+ }
57
+ /*
58
+ 이미 처리함
59
+ */ export class AlreadyProcessedException extends SoException {
60
+ message;
61
+ payload;
62
+ constructor(message = "Already Processed", payload){
63
+ super(541, message, payload), this.message = message, this.payload = payload;
64
+ }
65
+ }
66
+ /*
67
+ 중복 허용하지 않는 케이스에 중복 요청
68
+ */ export class DuplicateRowException extends SoException {
69
+ message;
70
+ payload;
71
+ constructor(message = "Duplicate Row", payload){
72
+ super(542, message, payload), this.message = message, this.payload = payload;
73
+ }
74
+ }
75
+ /*
76
+ 뭔가를 하려고 했으나 대상이 없음
77
+ */ export class TargetNotFoundException extends SoException {
78
+ message;
79
+ payload;
80
+ constructor(message = "Target Not Found", payload){
81
+ super(520, message, payload), this.message = message, this.payload = payload;
82
+ }
83
+ }
84
+
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNvRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZTogbnVtYmVyLFxuICAgIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHBheWxvYWQ/OiB1bmtub3duLFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTb0V4Y2VwdGlvbihlcnI6IHVua25vd24pOiBlcnIgaXMgU29FeGNlcHRpb24ge1xuICByZXR1cm4gKGVyciBhcyBTb0V4Y2VwdGlvbikuc3RhdHVzQ29kZSAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKlxuXHTsnpjrqrvrkJwg66ek6rCc67OA7IiYIOuTsSDsmpTssq3sgqztla3sl5Ag66y47KCc6rCAIOyeiOuKlCDqsr3smrBcbiovXG5leHBvcnQgY2xhc3MgQmFkUmVxdWVzdEV4Y2VwdGlvbiBleHRlbmRzIFNvRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1lc3NhZ2UgPSBcIkJhZCBSZXF1ZXN0XCIsXG4gICAgcHVibGljIHBheWxvYWQ/OiB1bmtub3duLFxuICApIHtcbiAgICBzdXBlcig0MDAsIG1lc3NhZ2UsIHBheWxvYWQpO1xuICB9XG59XG5cbi8qXG5cdOuhnOq3uOyduOydtCDrsJjrk5zsi5wg7ZWE7JqU7ZWcIOy8gOydtOyKpOyXkCDroZzqt7jslYTsm4Mg7IOB7YOc7J24IOqyveyasCAvIOygkeq3vCDqtoztlZzsnbQg7JeG64qUIOyalOyyreyLnFxuKi9cbmV4cG9ydCBjbGFzcyBVbmF1dGhvcml6ZWRFeGNlcHRpb24gZXh0ZW5kcyBTb0V4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXNzYWdlID0gXCJVbmF1dGhvcml6ZWRcIixcbiAgICBwdWJsaWMgcGF5bG9hZD86IHVua25vd24sXG4gICkge1xuICAgIHN1cGVyKDQwMSwgbWVzc2FnZSwgcGF5bG9hZCk7XG4gIH1cbn1cblxuLypcblx07KG07J6s7ZWY7KeAIOyViuuKlCDroIjsvZTrk5zsl5Ag7KCR6re87IucXG4qL1xuZXhwb3J0IGNsYXNzIE5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgU29FeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWVzc2FnZSA9IFwiTm90IEZvdW5kXCIsXG4gICAgcHVibGljIHBheWxvYWQ/OiB1bmtub3duLFxuICApIHtcbiAgICBzdXBlcig0MDQsIG1lc3NhZ2UsIHBheWxvYWQpO1xuICB9XG59XG5cbi8qXG5cdO2YhOyerCDsg4Htg5zsl5DshJwg7LKY66as6rCAIOu2iOqwgOuKpe2VnCDsvIDsnbTsiqRcbiovXG5leHBvcnQgY2xhc3MgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIGV4dGVuZHMgU29FeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWVzc2FnZSA9IFwiU2VydmljZSBVbmF2YWlsYWJsZVwiLFxuICAgIHB1YmxpYyBwYXlsb2FkPzogdW5rbm93bixcbiAgKSB7XG4gICAgc3VwZXIoNTAzLCBtZXNzYWdlLCBwYXlsb2FkKTtcbiAgfVxufVxuXG4vKlxuXHTrgrTrtoAg7LKY66asIOuhnOyngSAo7Jm467aAIEFQSSDsvZwg7Y+s7ZWoKSDsmKTrpZgg67Cc7IOd7IucXG4qL1xuZXhwb3J0IGNsYXNzIEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBTb0V4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXNzYWdlID0gXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIixcbiAgICBwdWJsaWMgcGF5bG9hZD86IHVua25vd24sXG4gICkge1xuICAgIHN1cGVyKDUwMCwgbWVzc2FnZSwgcGF5bG9hZCk7XG4gIH1cbn1cblxuLypcblx07J2066+4IOyymOumrO2VqFxuKi9cbmV4cG9ydCBjbGFzcyBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uIGV4dGVuZHMgU29FeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWVzc2FnZSA9IFwiQWxyZWFkeSBQcm9jZXNzZWRcIixcbiAgICBwdWJsaWMgcGF5bG9hZD86IHVua25vd24sXG4gICkge1xuICAgIHN1cGVyKDU0MSwgbWVzc2FnZSwgcGF5bG9hZCk7XG4gIH1cbn1cblxuLypcblx07KSR67O1IO2XiOyaqe2VmOyngCDslYrripQg7LyA7J207Iqk7JeQIOykkeuztSDsmpTssq1cbiovXG5leHBvcnQgY2xhc3MgRHVwbGljYXRlUm93RXhjZXB0aW9uIGV4dGVuZHMgU29FeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWVzc2FnZSA9IFwiRHVwbGljYXRlIFJvd1wiLFxuICAgIHB1YmxpYyBwYXlsb2FkPzogdW5rbm93bixcbiAgKSB7XG4gICAgc3VwZXIoNTQyLCBtZXNzYWdlLCBwYXlsb2FkKTtcbiAgfVxufVxuXG4vKlxuXHTrrZTqsIDrpbwg7ZWY66Ck6rOgIO2WiOycvOuCmCDrjIDsg4HsnbQg7JeG7J2MXG4qL1xuZXhwb3J0IGNsYXNzIFRhcmdldE5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgU29FeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWVzc2FnZSA9IFwiVGFyZ2V0IE5vdCBGb3VuZFwiLFxuICAgIHB1YmxpYyBwYXlsb2FkPzogdW5rbm93bixcbiAgKSB7XG4gICAgc3VwZXIoNTIwLCBtZXNzYWdlLCBwYXlsb2FkKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlNvRXhjZXB0aW9uIiwiRXJyb3IiLCJzdGF0dXNDb2RlIiwibWVzc2FnZSIsInBheWxvYWQiLCJpc1NvRXhjZXB0aW9uIiwiZXJyIiwidW5kZWZpbmVkIiwiQmFkUmVxdWVzdEV4Y2VwdGlvbiIsIlVuYXV0aG9yaXplZEV4Y2VwdGlvbiIsIk5vdEZvdW5kRXhjZXB0aW9uIiwiU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIiwiSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbiIsIkFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24iLCJEdXBsaWNhdGVSb3dFeGNlcHRpb24iLCJUYXJnZXROb3RGb3VuZEV4Y2VwdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFlQSxvQkFBb0JDOzs7O0lBQ3hDLFlBQ0UsQUFBZ0JDLFVBQWtCLEVBQ2xDLEFBQU9DLE9BQWUsRUFDdEIsQUFBT0MsT0FBaUIsQ0FDeEI7UUFDQSxLQUFLLENBQUNELGVBSlVELGFBQUFBLGlCQUNUQyxVQUFBQSxjQUNBQyxVQUFBQTtJQUdUO0FBQ0Y7QUFFQSxPQUFPLFNBQVNDLGNBQWNDLEdBQVk7SUFDeEMsT0FBTyxBQUFDQSxJQUFvQkosVUFBVSxLQUFLSztBQUM3QztBQUVBOztBQUVBLEdBQ0EsT0FBTyxNQUFNQyw0QkFBNEJSOzs7SUFDdkMsWUFDRSxBQUFPRyxVQUFVLGFBQWEsRUFDOUIsQUFBT0MsT0FBaUIsQ0FDeEI7UUFDQSxLQUFLLENBQUMsS0FBS0QsU0FBU0MsZUFIYkQsVUFBQUEsY0FDQUMsVUFBQUE7SUFHVDtBQUNGO0FBRUE7O0FBRUEsR0FDQSxPQUFPLE1BQU1LLDhCQUE4QlQ7OztJQUN6QyxZQUNFLEFBQU9HLFVBQVUsY0FBYyxFQUMvQixBQUFPQyxPQUFpQixDQUN4QjtRQUNBLEtBQUssQ0FBQyxLQUFLRCxTQUFTQyxlQUhiRCxVQUFBQSxjQUNBQyxVQUFBQTtJQUdUO0FBQ0Y7QUFFQTs7QUFFQSxHQUNBLE9BQU8sTUFBTU0sMEJBQTBCVjs7O0lBQ3JDLFlBQ0UsQUFBT0csVUFBVSxXQUFXLEVBQzVCLEFBQU9DLE9BQWlCLENBQ3hCO1FBQ0EsS0FBSyxDQUFDLEtBQUtELFNBQVNDLGVBSGJELFVBQUFBLGNBQ0FDLFVBQUFBO0lBR1Q7QUFDRjtBQUVBOztBQUVBLEdBQ0EsT0FBTyxNQUFNTyxvQ0FBb0NYOzs7SUFDL0MsWUFDRSxBQUFPRyxVQUFVLHFCQUFxQixFQUN0QyxBQUFPQyxPQUFpQixDQUN4QjtRQUNBLEtBQUssQ0FBQyxLQUFLRCxTQUFTQyxlQUhiRCxVQUFBQSxjQUNBQyxVQUFBQTtJQUdUO0FBQ0Y7QUFFQTs7QUFFQSxHQUNBLE9BQU8sTUFBTVEscUNBQXFDWjs7O0lBQ2hELFlBQ0UsQUFBT0csVUFBVSx1QkFBdUIsRUFDeEMsQUFBT0MsT0FBaUIsQ0FDeEI7UUFDQSxLQUFLLENBQUMsS0FBS0QsU0FBU0MsZUFIYkQsVUFBQUEsY0FDQUMsVUFBQUE7SUFHVDtBQUNGO0FBRUE7O0FBRUEsR0FDQSxPQUFPLE1BQU1TLGtDQUFrQ2I7OztJQUM3QyxZQUNFLEFBQU9HLFVBQVUsbUJBQW1CLEVBQ3BDLEFBQU9DLE9BQWlCLENBQ3hCO1FBQ0EsS0FBSyxDQUFDLEtBQUtELFNBQVNDLGVBSGJELFVBQUFBLGNBQ0FDLFVBQUFBO0lBR1Q7QUFDRjtBQUVBOztBQUVBLEdBQ0EsT0FBTyxNQUFNVSw4QkFBOEJkOzs7SUFDekMsWUFDRSxBQUFPRyxVQUFVLGVBQWUsRUFDaEMsQUFBT0MsT0FBaUIsQ0FDeEI7UUFDQSxLQUFLLENBQUMsS0FBS0QsU0FBU0MsZUFIYkQsVUFBQUEsY0FDQUMsVUFBQUE7SUFHVDtBQUNGO0FBRUE7O0FBRUEsR0FDQSxPQUFPLE1BQU1XLGdDQUFnQ2Y7OztJQUMzQyxZQUNFLEFBQU9HLFVBQVUsa0JBQWtCLEVBQ25DLEFBQU9DLE9BQWlCLENBQ3hCO1FBQ0EsS0FBSyxDQUFDLEtBQUtELFNBQVNDLGVBSGJELFVBQUFBLGNBQ0FDLFVBQUFBO0lBR1Q7QUFDRiJ9
@@ -1,4 +1,4 @@
1
- import { S3Client, S3ClientConfig } from "@aws-sdk/client-s3";
1
+ import { S3Client, type S3ClientConfig } from "@aws-sdk/client-s3";
2
2
  /**
3
3
  * 파일 저장소의 공통 인터페이스
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/file-storage/driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,QAAQ,EACR,cAAc,EACf,MAAM,oBAAoB,CAAC;AAK5B;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,GAAG,CACD,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;KAAE,GACpE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5B,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,qBAAa,QAAS,YAAW,MAAM;IACzB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEpC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD,GAAG,CAAC,GAAG,EAAE,MAAM;IAIrB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAKrB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrE,OAAO;CAGR;AAED,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,qBAAa,QAAS,YAAW,MAAM;IAGzB,OAAO,CAAC,MAAM;IAF1B,EAAE,EAAE,QAAQ,CAAC;gBAEO,MAAM,EAAE,cAAc;IAIpC,GAAG,CACP,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;KAAE,GACpE,OAAO,CAAC,IAAI,CAAC;IAYV,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIrB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWpE,OAAO,CAAC,MAAM;IAQd,OAAO;CAGR"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/file-storage/driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,QAAQ,EACR,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAK5B;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,GAAG,CACD,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;KAAE,GACpE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5B,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,qBAAa,QAAS,YAAW,MAAM;IACzB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEpC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD,GAAG,CAAC,GAAG,EAAE,MAAM;IAIrB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAKrB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrE,OAAO;CAGR;AAED,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,qBAAa,QAAS,YAAW,MAAM;IAGzB,OAAO,CAAC,MAAM;IAF1B,EAAE,EAAE,QAAQ,CAAC;gBAEO,MAAM,EAAE,cAAc;IAIpC,GAAG,CACP,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;KAAE,GACpE,OAAO,CAAC,IAAI,CAAC;IAYV,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIrB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAWpE,OAAO,CAAC,MAAM;IAQd,OAAO;CAGR"}
@@ -1,2 +1,79 @@
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 FSDriver(){return FSDriver},get S3Driver(){return S3Driver}});var _clients3=require("@aws-sdk/client-s3");var _s3requestpresigner=require("@aws-sdk/s3-request-presigner");var _promises=/*#__PURE__*/_interop_require_default(require("fs/promises"));var _path=/*#__PURE__*/_interop_require_default(require("path"));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 _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}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 FSDriver=/*#__PURE__*/function(){"use strict";function FSDriver(config){_class_call_check(this,FSDriver);_define_property(this,"config",void 0);this.config=config}_create_class(FSDriver,[{key:"put",value:function put(key,contents){return _async_to_generator(function(){var filePath,dir;return _ts_generator(this,function(_state){switch(_state.label){case 0:filePath=_path.default.join(this.config.location,key);dir=_path.default.dirname(filePath);return[4,_promises.default.mkdir(dir,{recursive:true})];case 1:_state.sent();return[4,_promises.default.writeFile(filePath,contents)];case 2:_state.sent();return[2]}})}).call(this)}},{key:"del",value:function del(key){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,_promises.default.rm(_path.default.join(this.config.location,key))];case 1:_state.sent();return[2]}})}).call(this)}},{key:"getUrl",value:function getUrl(key){return"".concat(this.config.urlPrefix,"/").concat(key)}},{key:"getSignedUrl",value:function getSignedUrl(key,_expiresIn){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,this.getUrl(key)]})}).call(this)}},{key:"destroy",value:function destroy(){}}]);return FSDriver}();var S3Driver=/*#__PURE__*/function(){"use strict";function S3Driver(config){_class_call_check(this,S3Driver);_define_property(this,"config",void 0);_define_property(this,"s3",void 0);this.config=config;this.s3=new _clients3.S3Client(config)}_create_class(S3Driver,[{key:"put",value:function put(key,contents,options){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.s3.send(new _clients3.PutObjectCommand({Bucket:this.config.bucket,Key:key,Body:contents,ContentType:options===null||options===void 0?void 0:options.contentType,ACL:this.getAcl(options===null||options===void 0?void 0:options.visibility)}))];case 1:_state.sent();return[2]}})}).call(this)}},{key:"del",value:function del(key){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.s3.send(new _clients3.DeleteObjectCommand({Bucket:this.config.bucket,Key:key}))];case 1:_state.sent();return[2]}})}).call(this)}},{key:"getUrl",value:function getUrl(key){return"https://".concat(this.config.bucket,".s3.").concat(this.config.region,".amazonaws.com/").concat(key)}},{key:"getSignedUrl",value:function getSignedUrl(key,expiresIn){return _async_to_generator(function(){var command;return _ts_generator(this,function(_state){command=new _clients3.GetObjectCommand({Bucket:this.config.bucket,Key:key});return[2,(0,_s3requestpresigner.getSignedUrl)(this.s3,command,{expiresIn:expiresIn!==null&&expiresIn!==void 0?expiresIn:60*60*24*7})]})}).call(this)}},{key:"getAcl",value:function getAcl(visibility){if(visibility==="public"){return"public-read"}return visibility}},{key:"destroy",value:function destroy(){this.s3.destroy()}}]);return S3Driver}();
2
- //# sourceMappingURL=driver.js.map
1
+ import { DeleteObjectCommand, GetObjectCommand, PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
2
+ import { getSignedUrl } from "@aws-sdk/s3-request-presigner";
3
+ import fs from "node:fs/promises";
4
+ import path from "path";
5
+ /**
6
+ * 로컬 파일시스템
7
+ */ export class FSDriver {
8
+ config;
9
+ constructor(config){
10
+ this.config = config;
11
+ }
12
+ async put(key, contents) {
13
+ const filePath = path.join(this.config.location, key);
14
+ const dir = path.dirname(filePath);
15
+ await fs.mkdir(dir, {
16
+ recursive: true
17
+ });
18
+ await fs.writeFile(filePath, contents);
19
+ }
20
+ async del(key) {
21
+ await fs.rm(path.join(this.config.location, key));
22
+ }
23
+ getUrl(key) {
24
+ return `${this.config.urlPrefix}/${key}`;
25
+ }
26
+ // 로컬 파일시스템은 signed URL을 지원하지 않으므로 일반 URL 반환
27
+ async getSignedUrl(key, _expiresIn) {
28
+ return this.getUrl(key);
29
+ }
30
+ destroy() {
31
+ // 아무것도 하지 않음
32
+ }
33
+ }
34
+ export class S3Driver {
35
+ config;
36
+ s3;
37
+ constructor(config){
38
+ this.config = config;
39
+ this.s3 = new S3Client(config);
40
+ }
41
+ async put(key, contents, options) {
42
+ await this.s3.send(new PutObjectCommand({
43
+ Bucket: this.config.bucket,
44
+ Key: key,
45
+ Body: contents,
46
+ ContentType: options?.contentType,
47
+ ACL: this.getAcl(options?.visibility)
48
+ }));
49
+ }
50
+ async del(key) {
51
+ await this.s3.send(new DeleteObjectCommand({
52
+ Bucket: this.config.bucket,
53
+ Key: key
54
+ }));
55
+ }
56
+ getUrl(key) {
57
+ return `https://${this.config.bucket}.s3.${this.config.region}.amazonaws.com/${key}`;
58
+ }
59
+ async getSignedUrl(key, expiresIn) {
60
+ const command = new GetObjectCommand({
61
+ Bucket: this.config.bucket,
62
+ Key: key
63
+ });
64
+ return getSignedUrl(this.s3, command, {
65
+ expiresIn: expiresIn ?? 60 * 60 * 24 * 7
66
+ });
67
+ }
68
+ getAcl(visibility) {
69
+ if (visibility === "public") {
70
+ return "public-read";
71
+ }
72
+ return visibility;
73
+ }
74
+ destroy() {
75
+ this.s3.destroy();
76
+ }
77
+ }
78
+
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maWxlLXN0b3JhZ2UvZHJpdmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlbGV0ZU9iamVjdENvbW1hbmQsXG4gIEdldE9iamVjdENvbW1hbmQsXG4gIFB1dE9iamVjdENvbW1hbmQsXG4gIFMzQ2xpZW50LFxuICB0eXBlIFMzQ2xpZW50Q29uZmlnLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgeyBnZXRTaWduZWRVcmwgfSBmcm9tIFwiQGF3cy1zZGsvczMtcmVxdWVzdC1wcmVzaWduZXJcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbi8qKlxuICog7YyM7J28IOyggOyepeyGjOydmCDqs7XthrUg7J247YSw7Y6Y7J207IqkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJpdmVyIHtcbiAgcHV0KFxuICAgIGtleTogc3RyaW5nLFxuICAgIGNvbnRlbnRzOiBCdWZmZXIsXG4gICAgb3B0aW9ucz86IHsgY29udGVudFR5cGU/OiBzdHJpbmc7IHZpc2liaWxpdHk/OiBcInB1YmxpY1wiIHwgXCJwcml2YXRlXCIgfSxcbiAgKTogUHJvbWlzZTx2b2lkPjtcblxuICBkZWwoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIGdldFVybChrZXk6IHN0cmluZyk6IHN0cmluZztcblxuICBnZXRTaWduZWRVcmwoa2V5OiBzdHJpbmcsIGV4cGlyZXNJbj86IG51bWJlcik6IFByb21pc2U8c3RyaW5nPjtcblxuICBkZXN0cm95KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIEZTRHJpdmVyQ29uZmlnID0ge1xuICBsb2NhdGlvbjogc3RyaW5nO1xuICB1cmxQcmVmaXg6IHN0cmluZztcbn07XG5cbi8qKlxuICog66Gc7LusIO2MjOydvOyLnOyKpO2FnFxuICovXG5leHBvcnQgY2xhc3MgRlNEcml2ZXIgaW1wbGVtZW50cyBEcml2ZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogRlNEcml2ZXJDb25maWcpIHt9XG5cbiAgYXN5bmMgcHV0KGtleTogc3RyaW5nLCBjb250ZW50czogQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jb25maWcubG9jYXRpb24sIGtleSk7XG4gICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGZpbGVQYXRoKTtcblxuICAgIGF3YWl0IGZzLm1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIGNvbnRlbnRzKTtcbiAgfVxuXG4gIGFzeW5jIGRlbChrZXk6IHN0cmluZykge1xuICAgIGF3YWl0IGZzLnJtKHBhdGguam9pbih0aGlzLmNvbmZpZy5sb2NhdGlvbiwga2V5KSk7XG4gIH1cblxuICBnZXRVcmwoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmNvbmZpZy51cmxQcmVmaXh9LyR7a2V5fWA7XG4gIH1cblxuICAvLyDroZzsu6wg7YyM7J287Iuc7Iqk7YWc7J2AIHNpZ25lZCBVUkzsnYQg7KeA7JuQ7ZWY7KeAIOyViuycvOuvgOuhnCDsnbzrsJggVVJMIOuwmO2ZmFxuICBhc3luYyBnZXRTaWduZWRVcmwoa2V5OiBzdHJpbmcsIF9leHBpcmVzSW4/OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldFVybChrZXkpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICAvLyDslYTrrLTqsoPrj4Qg7ZWY7KeAIOyViuydjFxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFMzRHJpdmVyQ29uZmlnID0gUzNDbGllbnRDb25maWcgJiB7XG4gIGJ1Y2tldDogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNsYXNzIFMzRHJpdmVyIGltcGxlbWVudHMgRHJpdmVyIHtcbiAgczM6IFMzQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBTM0RyaXZlckNvbmZpZykge1xuICAgIHRoaXMuczMgPSBuZXcgUzNDbGllbnQoY29uZmlnKTtcbiAgfVxuXG4gIGFzeW5jIHB1dChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBjb250ZW50czogQnVmZmVyLFxuICAgIG9wdGlvbnM/OiB7IGNvbnRlbnRUeXBlPzogc3RyaW5nOyB2aXNpYmlsaXR5PzogXCJwdWJsaWNcIiB8IFwicHJpdmF0ZVwiIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuczMuc2VuZChcbiAgICAgIG5ldyBQdXRPYmplY3RDb21tYW5kKHtcbiAgICAgICAgQnVja2V0OiB0aGlzLmNvbmZpZy5idWNrZXQsXG4gICAgICAgIEtleToga2V5LFxuICAgICAgICBCb2R5OiBjb250ZW50cyxcbiAgICAgICAgQ29udGVudFR5cGU6IG9wdGlvbnM/LmNvbnRlbnRUeXBlLFxuICAgICAgICBBQ0w6IHRoaXMuZ2V0QWNsKG9wdGlvbnM/LnZpc2liaWxpdHkpLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGRlbChrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuczMuc2VuZChcbiAgICAgIG5ldyBEZWxldGVPYmplY3RDb21tYW5kKHtcbiAgICAgICAgQnVja2V0OiB0aGlzLmNvbmZpZy5idWNrZXQsXG4gICAgICAgIEtleToga2V5LFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGdldFVybChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBodHRwczovLyR7dGhpcy5jb25maWcuYnVja2V0fS5zMy4ke3RoaXMuY29uZmlnLnJlZ2lvbn0uYW1hem9uYXdzLmNvbS8ke2tleX1gO1xuICB9XG5cbiAgYXN5bmMgZ2V0U2lnbmVkVXJsKGtleTogc3RyaW5nLCBleHBpcmVzSW4/OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgR2V0T2JqZWN0Q29tbWFuZCh7XG4gICAgICBCdWNrZXQ6IHRoaXMuY29uZmlnLmJ1Y2tldCxcbiAgICAgIEtleToga2V5LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdldFNpZ25lZFVybCh0aGlzLnMzLCBjb21tYW5kLCB7XG4gICAgICBleHBpcmVzSW46IGV4cGlyZXNJbiA/PyA2MCAqIDYwICogMjQgKiA3LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY2wodmlzaWJpbGl0eT86IFwicHVibGljXCIgfCBcInByaXZhdGVcIikge1xuICAgIGlmICh2aXNpYmlsaXR5ID09PSBcInB1YmxpY1wiKSB7XG4gICAgICByZXR1cm4gXCJwdWJsaWMtcmVhZFwiO1xuICAgIH1cblxuICAgIHJldHVybiB2aXNpYmlsaXR5O1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnMzLmRlc3Ryb3koKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkRlbGV0ZU9iamVjdENvbW1hbmQiLCJHZXRPYmplY3RDb21tYW5kIiwiUHV0T2JqZWN0Q29tbWFuZCIsIlMzQ2xpZW50IiwiZ2V0U2lnbmVkVXJsIiwiZnMiLCJwYXRoIiwiRlNEcml2ZXIiLCJjb25maWciLCJwdXQiLCJrZXkiLCJjb250ZW50cyIsImZpbGVQYXRoIiwiam9pbiIsImxvY2F0aW9uIiwiZGlyIiwiZGlybmFtZSIsIm1rZGlyIiwicmVjdXJzaXZlIiwid3JpdGVGaWxlIiwiZGVsIiwicm0iLCJnZXRVcmwiLCJ1cmxQcmVmaXgiLCJfZXhwaXJlc0luIiwiZGVzdHJveSIsIlMzRHJpdmVyIiwiczMiLCJvcHRpb25zIiwic2VuZCIsIkJ1Y2tldCIsImJ1Y2tldCIsIktleSIsIkJvZHkiLCJDb250ZW50VHlwZSIsImNvbnRlbnRUeXBlIiwiQUNMIiwiZ2V0QWNsIiwidmlzaWJpbGl0eSIsInJlZ2lvbiIsImV4cGlyZXNJbiIsImNvbW1hbmQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQ0VBLG1CQUFtQixFQUNuQkMsZ0JBQWdCLEVBQ2hCQyxnQkFBZ0IsRUFDaEJDLFFBQVEsUUFFSCxxQkFBcUI7QUFDNUIsU0FBU0MsWUFBWSxRQUFRLGdDQUFnQztBQUM3RCxPQUFPQyxRQUFRLG1CQUFjO0FBQzdCLE9BQU9DLFVBQVUsT0FBTztBQTBCeEI7O0NBRUMsR0FDRCxPQUFPLE1BQU1DOztJQUNYLFlBQVksQUFBUUMsTUFBc0IsQ0FBRTthQUF4QkEsU0FBQUE7SUFBeUI7SUFFN0MsTUFBTUMsSUFBSUMsR0FBVyxFQUFFQyxRQUFnQixFQUFpQjtRQUN0RCxNQUFNQyxXQUFXTixLQUFLTyxJQUFJLENBQUMsSUFBSSxDQUFDTCxNQUFNLENBQUNNLFFBQVEsRUFBRUo7UUFDakQsTUFBTUssTUFBTVQsS0FBS1UsT0FBTyxDQUFDSjtRQUV6QixNQUFNUCxHQUFHWSxLQUFLLENBQUNGLEtBQUs7WUFBRUcsV0FBVztRQUFLO1FBRXRDLE1BQU1iLEdBQUdjLFNBQVMsQ0FBQ1AsVUFBVUQ7SUFDL0I7SUFFQSxNQUFNUyxJQUFJVixHQUFXLEVBQUU7UUFDckIsTUFBTUwsR0FBR2dCLEVBQUUsQ0FBQ2YsS0FBS08sSUFBSSxDQUFDLElBQUksQ0FBQ0wsTUFBTSxDQUFDTSxRQUFRLEVBQUVKO0lBQzlDO0lBRUFZLE9BQU9aLEdBQVcsRUFBVTtRQUMxQixPQUFPLEdBQUcsSUFBSSxDQUFDRixNQUFNLENBQUNlLFNBQVMsQ0FBQyxDQUFDLEVBQUViLEtBQUs7SUFDMUM7SUFFQSw0Q0FBNEM7SUFDNUMsTUFBTU4sYUFBYU0sR0FBVyxFQUFFYyxVQUFtQixFQUFtQjtRQUNwRSxPQUFPLElBQUksQ0FBQ0YsTUFBTSxDQUFDWjtJQUNyQjtJQUVBZSxVQUFVO0lBQ1IsYUFBYTtJQUNmO0FBQ0Y7QUFNQSxPQUFPLE1BQU1DOztJQUNYQyxHQUFhO0lBRWIsWUFBWSxBQUFRbkIsTUFBc0IsQ0FBRTthQUF4QkEsU0FBQUE7UUFDbEIsSUFBSSxDQUFDbUIsRUFBRSxHQUFHLElBQUl4QixTQUFTSztJQUN6QjtJQUVBLE1BQU1DLElBQ0pDLEdBQVcsRUFDWEMsUUFBZ0IsRUFDaEJpQixPQUFxRSxFQUN0RDtRQUNmLE1BQU0sSUFBSSxDQUFDRCxFQUFFLENBQUNFLElBQUksQ0FDaEIsSUFBSTNCLGlCQUFpQjtZQUNuQjRCLFFBQVEsSUFBSSxDQUFDdEIsTUFBTSxDQUFDdUIsTUFBTTtZQUMxQkMsS0FBS3RCO1lBQ0x1QixNQUFNdEI7WUFDTnVCLGFBQWFOLFNBQVNPO1lBQ3RCQyxLQUFLLElBQUksQ0FBQ0MsTUFBTSxDQUFDVCxTQUFTVTtRQUM1QjtJQUVKO0lBRUEsTUFBTWxCLElBQUlWLEdBQVcsRUFBaUI7UUFDcEMsTUFBTSxJQUFJLENBQUNpQixFQUFFLENBQUNFLElBQUksQ0FDaEIsSUFBSTdCLG9CQUFvQjtZQUN0QjhCLFFBQVEsSUFBSSxDQUFDdEIsTUFBTSxDQUFDdUIsTUFBTTtZQUMxQkMsS0FBS3RCO1FBQ1A7SUFFSjtJQUVBWSxPQUFPWixHQUFXLEVBQVU7UUFDMUIsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUNGLE1BQU0sQ0FBQ3VCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDdkIsTUFBTSxDQUFDK0IsTUFBTSxDQUFDLGVBQWUsRUFBRTdCLEtBQUs7SUFDdEY7SUFFQSxNQUFNTixhQUFhTSxHQUFXLEVBQUU4QixTQUFrQixFQUFtQjtRQUNuRSxNQUFNQyxVQUFVLElBQUl4QyxpQkFBaUI7WUFDbkM2QixRQUFRLElBQUksQ0FBQ3RCLE1BQU0sQ0FBQ3VCLE1BQU07WUFDMUJDLEtBQUt0QjtRQUNQO1FBRUEsT0FBT04sYUFBYSxJQUFJLENBQUN1QixFQUFFLEVBQUVjLFNBQVM7WUFDcENELFdBQVdBLGFBQWEsS0FBSyxLQUFLLEtBQUs7UUFDekM7SUFDRjtJQUVRSCxPQUFPQyxVQUFpQyxFQUFFO1FBQ2hELElBQUlBLGVBQWUsVUFBVTtZQUMzQixPQUFPO1FBQ1Q7UUFFQSxPQUFPQTtJQUNUO0lBRUFiLFVBQVU7UUFDUixJQUFJLENBQUNFLEVBQUUsQ0FBQ0YsT0FBTztJQUNqQjtBQUNGIn0=
@@ -1,2 +1,75 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"FileStorage",{enumerable:true,get:function(){return FileStorage}});var _mimetypes=/*#__PURE__*/_interop_require_default(require("mime-types"));var _crypto=require("crypto");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 _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}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 FileStorage=/*#__PURE__*/function(){"use strict";function FileStorage(file,driver){_class_call_check(this,FileStorage);_define_property(this,"_file",void 0);_define_property(this,"_buffer",void 0);_define_property(this,"_driver",void 0);this._file=file;this._driver=driver}_create_class(FileStorage,[{key:"clientName",get:function get(){return this._file.filename}},{key:"filename",get:function get(){return this._file.filename}},{key:"fieldName",get:function get(){return this._file.fieldname}},{key:"size",get:function get(){return this._file.file.bytesRead}},{key:"extname",get:function get(){return _mimetypes.default.extension(this._file.mimetype)}},{key:"mimetype",get:function get(){return this._file.mimetype}},{key:"encoding",get:function get(){return this._file.encoding}},{key:"toBuffer",value:function toBuffer(){return _async_to_generator(function(){var _;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(!!this._buffer)return[3,2];_=this;return[4,this._file.toBuffer()];case 1:_._buffer=_state.sent();_state.label=2;case 2:return[2,this._buffer]}})}).call(this)}},{key:"md5",value:function md5(){return _async_to_generator(function(){var buffer;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.toBuffer()];case 1:buffer=_state.sent();return[2,(0,_crypto.createHash)("md5").update(buffer).digest("hex")]}})}).call(this)}},{key:"saveToDisk",value:function saveToDisk(key,options){return _async_to_generator(function(){var buffer,_options_contentType;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.toBuffer()];case 1:buffer=_state.sent();return[4,this._driver.put(key,buffer,{contentType:(_options_contentType=options===null||options===void 0?void 0:options.contentType)!==null&&_options_contentType!==void 0?_options_contentType:this.mimetype,visibility:options===null||options===void 0?void 0:options.visibility})];case 2:_state.sent();return[2,this._driver.getSignedUrl(key)]}})}).call(this)}},{key:"raw",get:function get(){return this._file}}]);return FileStorage}();
2
- //# sourceMappingURL=file-storage.js.map
1
+ import { createHash } from "crypto";
2
+ import mime from "mime-types";
3
+ /**
4
+ * @fastify/multipart의 MultipartFile 래퍼
5
+ */ export class FileStorage {
6
+ _file;
7
+ _buffer;
8
+ _driver;
9
+ constructor(file, driver){
10
+ this._file = file;
11
+ this._driver = driver;
12
+ }
13
+ /**
14
+ * 사용자 컴퓨터의 원본 파일명
15
+ */ get clientName() {
16
+ return this._file.filename;
17
+ }
18
+ /**
19
+ * 파일명 (clientName의 별칭)
20
+ */ get filename() {
21
+ return this._file.filename;
22
+ }
23
+ /**
24
+ * HTML input 필드명
25
+ */ get fieldName() {
26
+ return this._file.fieldname;
27
+ }
28
+ /**
29
+ * 파일 크기 (바이트)
30
+ */ get size() {
31
+ return this._file.file.bytesRead;
32
+ }
33
+ /**
34
+ * 파일 확장자 (점 제외)
35
+ */ get extname() {
36
+ return mime.extension(this._file.mimetype);
37
+ }
38
+ get mimetype() {
39
+ return this._file.mimetype;
40
+ }
41
+ get encoding() {
42
+ return this._file.encoding;
43
+ }
44
+ async toBuffer() {
45
+ if (!this._buffer) {
46
+ this._buffer = await this._file.toBuffer();
47
+ }
48
+ return this._buffer;
49
+ }
50
+ async md5() {
51
+ const buffer = await this.toBuffer();
52
+ return createHash("md5").update(buffer).digest("hex");
53
+ }
54
+ /**
55
+ * 파일을 저장소에 저장
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const { file } = Sonamu.getUploadContext();
60
+ * const url = await file.saveToDisk('uploads/avatar.png');
61
+ * ```
62
+ */ async saveToDisk(key, options) {
63
+ const buffer = await this.toBuffer();
64
+ await this._driver.put(key, buffer, {
65
+ contentType: options?.contentType ?? this.mimetype,
66
+ visibility: options?.visibility
67
+ });
68
+ return this._driver.getSignedUrl(key);
69
+ }
70
+ get raw() {
71
+ return this._file;
72
+ }
73
+ }
74
+
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9maWxlLXN0b3JhZ2UvZmlsZS1zdG9yYWdlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTXVsdGlwYXJ0RmlsZSB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgbWltZSBmcm9tIFwibWltZS10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEcml2ZXIgfSBmcm9tIFwiLi9kcml2ZXJcIjtcblxuLyoqXG4gKiBAZmFzdGlmeS9tdWx0aXBhcnTsnZggTXVsdGlwYXJ0RmlsZSDrnpjtjbxcbiAqL1xuZXhwb3J0IGNsYXNzIEZpbGVTdG9yYWdlIHtcbiAgcHJpdmF0ZSBfZmlsZTogTXVsdGlwYXJ0RmlsZTtcbiAgcHJpdmF0ZSBfYnVmZmVyPzogQnVmZmVyO1xuICBwcml2YXRlIF9kcml2ZXI6IERyaXZlcjtcblxuICBjb25zdHJ1Y3RvcihmaWxlOiBNdWx0aXBhcnRGaWxlLCBkcml2ZXI6IERyaXZlcikge1xuICAgIHRoaXMuX2ZpbGUgPSBmaWxlO1xuICAgIHRoaXMuX2RyaXZlciA9IGRyaXZlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiDsgqzsmqnsnpAg7Lu07ZOo7YSw7J2YIOybkOuzuCDtjIzsnbzrqoVcbiAgICovXG4gIGdldCBjbGllbnROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGUuZmlsZW5hbWU7XG4gIH1cblxuICAvKipcbiAgICog7YyM7J2866qFIChjbGllbnROYW1l7J2YIOuzhOy5rSlcbiAgICovXG4gIGdldCBmaWxlbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9maWxlLmZpbGVuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEhUTUwgaW5wdXQg7ZWE65Oc66qFXG4gICAqL1xuICBnZXQgZmllbGROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGUuZmllbGRuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIO2MjOydvCDtgazquLAgKOuwlOydtO2KuClcbiAgICovXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGUuZmlsZS5ieXRlc1JlYWQ7XG4gIH1cblxuICAvKipcbiAgICog7YyM7J28IO2ZleyepeyekCAo7KCQIOygnOyZuClcbiAgICovXG4gIGdldCBleHRuYW1lKCk6IHN0cmluZyB8IGZhbHNlIHtcbiAgICByZXR1cm4gbWltZS5leHRlbnNpb24odGhpcy5fZmlsZS5taW1ldHlwZSk7XG4gIH1cblxuICBnZXQgbWltZXR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZS5taW1ldHlwZTtcbiAgfVxuXG4gIGdldCBlbmNvZGluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9maWxlLmVuY29kaW5nO1xuICB9XG5cbiAgYXN5bmMgdG9CdWZmZXIoKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICBpZiAoIXRoaXMuX2J1ZmZlcikge1xuICAgICAgdGhpcy5fYnVmZmVyID0gYXdhaXQgdGhpcy5fZmlsZS50b0J1ZmZlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyO1xuICB9XG5cbiAgYXN5bmMgbWQ1KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy50b0J1ZmZlcigpO1xuICAgIHJldHVybiBjcmVhdGVIYXNoKFwibWQ1XCIpLnVwZGF0ZShidWZmZXIpLmRpZ2VzdChcImhleFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtjIzsnbzsnYQg7KCA7J6l7IaM7JeQIOyggOyepVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHsgZmlsZSB9ID0gU29uYW11LmdldFVwbG9hZENvbnRleHQoKTtcbiAgICogY29uc3QgdXJsID0gYXdhaXQgZmlsZS5zYXZlVG9EaXNrKCd1cGxvYWRzL2F2YXRhci5wbmcnKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBzYXZlVG9EaXNrKFxuICAgIGtleTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7IGNvbnRlbnRUeXBlPzogc3RyaW5nOyB2aXNpYmlsaXR5PzogXCJwdWJsaWNcIiB8IFwicHJpdmF0ZVwiIH0sXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy50b0J1ZmZlcigpO1xuXG4gICAgYXdhaXQgdGhpcy5fZHJpdmVyLnB1dChrZXksIGJ1ZmZlciwge1xuICAgICAgY29udGVudFR5cGU6IG9wdGlvbnM/LmNvbnRlbnRUeXBlID8/IHRoaXMubWltZXR5cGUsXG4gICAgICB2aXNpYmlsaXR5OiBvcHRpb25zPy52aXNpYmlsaXR5LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RyaXZlci5nZXRTaWduZWRVcmwoa2V5KTtcbiAgfVxuXG4gIGdldCByYXcoKTogTXVsdGlwYXJ0RmlsZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGU7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwibWltZSIsIkZpbGVTdG9yYWdlIiwiX2ZpbGUiLCJfYnVmZmVyIiwiX2RyaXZlciIsImZpbGUiLCJkcml2ZXIiLCJjbGllbnROYW1lIiwiZmlsZW5hbWUiLCJmaWVsZE5hbWUiLCJmaWVsZG5hbWUiLCJzaXplIiwiYnl0ZXNSZWFkIiwiZXh0bmFtZSIsImV4dGVuc2lvbiIsIm1pbWV0eXBlIiwiZW5jb2RpbmciLCJ0b0J1ZmZlciIsIm1kNSIsImJ1ZmZlciIsInVwZGF0ZSIsImRpZ2VzdCIsInNhdmVUb0Rpc2siLCJrZXkiLCJvcHRpb25zIiwicHV0IiwiY29udGVudFR5cGUiLCJ2aXNpYmlsaXR5IiwiZ2V0U2lnbmVkVXJsIiwicmF3Il0sIm1hcHBpbmdzIjoiQUFDQSxTQUFTQSxVQUFVLFFBQVEsU0FBUztBQUNwQyxPQUFPQyxVQUFVLGFBQWE7QUFHOUI7O0NBRUMsR0FDRCxPQUFPLE1BQU1DO0lBQ0hDLE1BQXFCO0lBQ3JCQyxRQUFpQjtJQUNqQkMsUUFBZ0I7SUFFeEIsWUFBWUMsSUFBbUIsRUFBRUMsTUFBYyxDQUFFO1FBQy9DLElBQUksQ0FBQ0osS0FBSyxHQUFHRztRQUNiLElBQUksQ0FBQ0QsT0FBTyxHQUFHRTtJQUNqQjtJQUVBOztHQUVDLEdBQ0QsSUFBSUMsYUFBcUI7UUFDdkIsT0FBTyxJQUFJLENBQUNMLEtBQUssQ0FBQ00sUUFBUTtJQUM1QjtJQUVBOztHQUVDLEdBQ0QsSUFBSUEsV0FBbUI7UUFDckIsT0FBTyxJQUFJLENBQUNOLEtBQUssQ0FBQ00sUUFBUTtJQUM1QjtJQUVBOztHQUVDLEdBQ0QsSUFBSUMsWUFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUNQLEtBQUssQ0FBQ1EsU0FBUztJQUM3QjtJQUVBOztHQUVDLEdBQ0QsSUFBSUMsT0FBZTtRQUNqQixPQUFPLElBQUksQ0FBQ1QsS0FBSyxDQUFDRyxJQUFJLENBQUNPLFNBQVM7SUFDbEM7SUFFQTs7R0FFQyxHQUNELElBQUlDLFVBQTBCO1FBQzVCLE9BQU9iLEtBQUtjLFNBQVMsQ0FBQyxJQUFJLENBQUNaLEtBQUssQ0FBQ2EsUUFBUTtJQUMzQztJQUVBLElBQUlBLFdBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDYixLQUFLLENBQUNhLFFBQVE7SUFDNUI7SUFFQSxJQUFJQyxXQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQ2QsS0FBSyxDQUFDYyxRQUFRO0lBQzVCO0lBRUEsTUFBTUMsV0FBNEI7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQ2QsT0FBTyxFQUFFO1lBQ2pCLElBQUksQ0FBQ0EsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDRCxLQUFLLENBQUNlLFFBQVE7UUFDMUM7UUFDQSxPQUFPLElBQUksQ0FBQ2QsT0FBTztJQUNyQjtJQUVBLE1BQU1lLE1BQXVCO1FBQzNCLE1BQU1DLFNBQVMsTUFBTSxJQUFJLENBQUNGLFFBQVE7UUFDbEMsT0FBT2xCLFdBQVcsT0FBT3FCLE1BQU0sQ0FBQ0QsUUFBUUUsTUFBTSxDQUFDO0lBQ2pEO0lBRUE7Ozs7Ozs7O0dBUUMsR0FDRCxNQUFNQyxXQUNKQyxHQUFXLEVBQ1hDLE9BQXFFLEVBQ3BEO1FBQ2pCLE1BQU1MLFNBQVMsTUFBTSxJQUFJLENBQUNGLFFBQVE7UUFFbEMsTUFBTSxJQUFJLENBQUNiLE9BQU8sQ0FBQ3FCLEdBQUcsQ0FBQ0YsS0FBS0osUUFBUTtZQUNsQ08sYUFBYUYsU0FBU0UsZUFBZSxJQUFJLENBQUNYLFFBQVE7WUFDbERZLFlBQVlILFNBQVNHO1FBQ3ZCO1FBRUEsT0FBTyxJQUFJLENBQUN2QixPQUFPLENBQUN3QixZQUFZLENBQUNMO0lBQ25DO0lBRUEsSUFBSU0sTUFBcUI7UUFDdkIsT0FBTyxJQUFJLENBQUMzQixLQUFLO0lBQ25CO0FBQ0YifQ==
package/dist/index.d.ts CHANGED
@@ -1,24 +1,33 @@
1
+ export * from "./api/base-frame";
2
+ export * from "./api/config";
1
3
  export type * from "./api/context";
2
4
  export * from "./api/decorators";
3
5
  export * from "./api/sonamu";
4
6
  export * from "./database/base-model";
5
- export * from "./api/base-frame";
6
7
  export * from "./database/db";
7
- export * from "./database/upsert-builder";
8
8
  export * from "./database/puri";
9
- export * from "./database/puri-wrapper";
10
9
  export * from "./database/puri.types";
10
+ export * from "./database/puri-subset.types";
11
+ export * from "./database/puri-wrapper";
12
+ export * from "./database/upsert-builder";
13
+ export * from "./entity/entity";
14
+ export * from "./entity/entity-manager";
11
15
  export * from "./exceptions/error-handler";
12
16
  export * from "./exceptions/so-exceptions";
17
+ export * from "./file-storage/driver";
18
+ export * from "./migration/migration-set";
19
+ export * from "./migration/migrator";
20
+ export * from "./migration/postgresql-schema-reader";
21
+ export * from "./migration/types";
22
+ export * from "./naite/naite";
23
+ export * from "./naite/naite-reporter";
13
24
  export * from "./stream/sse";
25
+ export * from "./template/template";
26
+ export * from "./template/template-manager";
27
+ export * from "./testing/fixture-manager";
14
28
  export * from "./types/types";
15
29
  export * from "./utils/controller";
16
30
  export * from "./utils/model";
31
+ export * from "./utils/type-utils";
17
32
  export * from "./utils/utils";
18
- export * from "./testing/fixture-manager";
19
- export * from "./entity/entity-manager";
20
- export * from "./entity/entity";
21
- export * from "./migration/migrator";
22
- export * from "./migration/types";
23
- export * from "./file-storage/driver";
24
33
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,eAAe,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,mBAAmB,eAAe,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,sCAAsC,CAAC;AACrD,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,34 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./api/decorators"),exports);_export_star(require("./api/sonamu"),exports);_export_star(require("./database/base-model"),exports);_export_star(require("./api/base-frame"),exports);_export_star(require("./database/db"),exports);_export_star(require("./database/upsert-builder"),exports);_export_star(require("./database/puri"),exports);_export_star(require("./database/puri-wrapper"),exports);_export_star(require("./database/puri.types"),exports);_export_star(require("./exceptions/error-handler"),exports);_export_star(require("./exceptions/so-exceptions"),exports);_export_star(require("./stream/sse"),exports);_export_star(require("./types/types"),exports);_export_star(require("./utils/controller"),exports);_export_star(require("./utils/model"),exports);_export_star(require("./utils/utils"),exports);_export_star(require("./testing/fixture-manager"),exports);_export_star(require("./entity/entity-manager"),exports);_export_star(require("./entity/entity"),exports);_export_star(require("./migration/migrator"),exports);_export_star(require("./migration/types"),exports);_export_star(require("./file-storage/driver"),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
1
+ export * from "./api/base-frame.js";
2
+ export * from "./api/config.js";
3
+ export * from "./api/decorators.js";
4
+ export * from "./api/sonamu.js";
5
+ export * from "./database/base-model.js";
6
+ export * from "./database/db.js";
7
+ export * from "./database/puri.js";
8
+ export * from "./database/puri.types.js";
9
+ export * from "./database/puri-subset.types.js";
10
+ export * from "./database/puri-wrapper.js";
11
+ export * from "./database/upsert-builder.js";
12
+ export * from "./entity/entity.js";
13
+ export * from "./entity/entity-manager.js";
14
+ export * from "./exceptions/error-handler.js";
15
+ export * from "./exceptions/so-exceptions.js";
16
+ export * from "./file-storage/driver.js";
17
+ export * from "./migration/migration-set.js";
18
+ export * from "./migration/migrator.js";
19
+ export * from "./migration/postgresql-schema-reader.js";
20
+ export * from "./migration/types.js";
21
+ export * from "./naite/naite.js";
22
+ export * from "./naite/naite-reporter.js";
23
+ export * from "./stream/sse.js";
24
+ export * from "./template/template.js";
25
+ export * from "./template/template-manager.js";
26
+ export * from "./testing/fixture-manager.js";
27
+ export * from "./types/types.js";
28
+ export * from "./utils/controller.js";
29
+ export * from "./utils/model.js";
30
+ export * from "./utils/type-utils.js";
31
+ export * from "./utils/utils.js"; // export * from "./api/code-converters";
32
+ // export * from "./syncer/syncer";
33
+
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hcGkvYmFzZS1mcmFtZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpL2NvbmZpZ1wiO1xuZXhwb3J0IHR5cGUgKiBmcm9tIFwiLi9hcGkvY29udGV4dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXBpL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FwaS9zb25hbXVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL2Jhc2UtbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RhdGFiYXNlL2RiXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpLnR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS9wdXJpLXN1YnNldC50eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kYXRhYmFzZS91cHNlcnQtYnVpbGRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW50aXR5L2VudGl0eVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leGNlcHRpb25zL2Vycm9yLWhhbmRsZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZmlsZS1zdG9yYWdlL2RyaXZlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL21pZ3JhdGlvbi1zZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21pZ3JhdGlvbi9taWdyYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL3Bvc3RncmVzcWwtc2NoZW1hLXJlYWRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbWlncmF0aW9uL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9uYWl0ZS9uYWl0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmFpdGUvbmFpdGUtcmVwb3J0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0cmVhbS9zc2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RlbXBsYXRlL3RlbXBsYXRlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZW1wbGF0ZS90ZW1wbGF0ZS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZXN0aW5nL2ZpeHR1cmUtbWFuYWdlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMvdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzL21vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlscy90eXBlLXV0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuXG4vLyBleHBvcnQgKiBmcm9tIFwiLi9hcGkvY29kZS1jb252ZXJ0ZXJzXCI7XG4vLyBleHBvcnQgKiBmcm9tIFwiLi9zeW5jZXIvc3luY2VyXCI7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBbUI7QUFDakMsY0FBYyxrQkFBZTtBQUU3QixjQUFjLHNCQUFtQjtBQUNqQyxjQUFjLGtCQUFlO0FBQzdCLGNBQWMsMkJBQXdCO0FBQ3RDLGNBQWMsbUJBQWdCO0FBQzlCLGNBQWMscUJBQWtCO0FBQ2hDLGNBQWMsMkJBQXdCO0FBQ3RDLGNBQWMsa0NBQStCO0FBQzdDLGNBQWMsNkJBQTBCO0FBQ3hDLGNBQWMsK0JBQTRCO0FBQzFDLGNBQWMscUJBQWtCO0FBQ2hDLGNBQWMsNkJBQTBCO0FBQ3hDLGNBQWMsZ0NBQTZCO0FBQzNDLGNBQWMsZ0NBQTZCO0FBQzNDLGNBQWMsMkJBQXdCO0FBQ3RDLGNBQWMsK0JBQTRCO0FBQzFDLGNBQWMsMEJBQXVCO0FBQ3JDLGNBQWMsMENBQXVDO0FBQ3JELGNBQWMsdUJBQW9CO0FBQ2xDLGNBQWMsbUJBQWdCO0FBQzlCLGNBQWMsNEJBQXlCO0FBQ3ZDLGNBQWMsa0JBQWU7QUFDN0IsY0FBYyx5QkFBc0I7QUFDcEMsY0FBYyxpQ0FBOEI7QUFDNUMsY0FBYywrQkFBNEI7QUFDMUMsY0FBYyxtQkFBZ0I7QUFDOUIsY0FBYyx3QkFBcUI7QUFDbkMsY0FBYyxtQkFBZ0I7QUFDOUIsY0FBYyx3QkFBcUI7QUFDbkMsY0FBYyxtQkFBZ0IsQ0FFOUIseUNBQXlDO0NBQ3pDLG1DQUFtQyJ9
@@ -1,4 +1,4 @@
1
- import { GenMigrationCode, MigrationSet } from "../types/types";
1
+ import type { GenMigrationCode, MigrationSet } from "../types/types";
2
2
  /**
3
3
  * 주어진 EntitySet을 기반으로 테이블 CREATE 마이그레이션 코드를 생성합니다.
4
4
  * @param entitySet
@@ -1 +1 @@
1
- {"version":3,"file":"code-generation.d.ts","sourceRoot":"","sources":["../../src/migration/code-generation.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gBAAgB,EAIhB,YAAY,EACb,MAAM,gBAAgB,CAAC;AAqnBxB;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAS7B;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA+G7B"}
1
+ {"version":3,"file":"code-generation.d.ts","sourceRoot":"","sources":["../../src/migration/code-generation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAIhB,YAAY,EACb,MAAM,gBAAgB,CAAC;AA8oBxB;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAS7F;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,YAAY,EACvB,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAqG7B"}