sonamu 0.4.14 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/.swcrc +15 -0
  2. package/dist/api/base-frame.d.ts +8 -0
  3. package/dist/api/base-frame.d.ts.map +1 -0
  4. package/dist/api/base-frame.js +2 -0
  5. package/dist/api/base-frame.js.map +1 -0
  6. package/dist/api/caster.d.ts +5 -0
  7. package/dist/api/caster.d.ts.map +1 -0
  8. package/dist/api/caster.js +2 -0
  9. package/dist/api/caster.js.map +1 -0
  10. package/dist/api/code-converters.d.ts +23 -0
  11. package/dist/api/code-converters.d.ts.map +1 -0
  12. package/dist/api/code-converters.js +2 -0
  13. package/dist/api/code-converters.js.map +1 -0
  14. package/dist/api/context.d.ts +16 -0
  15. package/dist/api/context.d.ts.map +1 -0
  16. package/dist/api/context.js +2 -0
  17. package/dist/api/context.js.map +1 -0
  18. package/dist/api/decorators.d.ts +50 -0
  19. package/dist/api/decorators.d.ts.map +1 -0
  20. package/dist/api/decorators.js +2 -0
  21. package/dist/api/decorators.js.map +1 -0
  22. package/dist/api/index.d.ts +8 -0
  23. package/dist/api/index.d.ts.map +1 -0
  24. package/dist/api/index.js +2 -0
  25. package/dist/api/index.js.map +1 -0
  26. package/dist/api/sonamu.d.ts +83 -0
  27. package/dist/api/sonamu.d.ts.map +1 -0
  28. package/dist/api/sonamu.js +2 -0
  29. package/dist/api/sonamu.js.map +1 -0
  30. package/dist/api/sonamu.types.d.ts +30 -0
  31. package/dist/api/sonamu.types.d.ts.map +1 -0
  32. package/dist/api/sonamu.types.js +2 -0
  33. package/dist/api/sonamu.types.js.map +1 -0
  34. package/dist/bin/build-config.d.ts +5 -0
  35. package/dist/bin/build-config.d.ts.map +1 -0
  36. package/dist/bin/build-config.js +2 -0
  37. package/dist/bin/build-config.js.map +1 -0
  38. package/dist/bin/cli-wrapper.d.ts +2 -0
  39. package/dist/bin/cli-wrapper.d.ts.map +1 -0
  40. package/dist/bin/cli-wrapper.js +1 -38
  41. package/dist/bin/cli-wrapper.js.map +1 -1
  42. package/dist/bin/cli.d.ts +2 -2
  43. package/dist/bin/cli.d.ts.map +1 -0
  44. package/dist/bin/cli.js +1 -903
  45. package/dist/bin/cli.js.map +1 -1
  46. package/dist/database/_batch_update.d.ts +15 -0
  47. package/dist/database/_batch_update.d.ts.map +1 -0
  48. package/dist/database/_batch_update.js +2 -0
  49. package/dist/database/_batch_update.js.map +1 -0
  50. package/dist/database/base-model.d.ts +41 -0
  51. package/dist/database/base-model.d.ts.map +1 -0
  52. package/dist/database/base-model.js +2 -0
  53. package/dist/database/base-model.js.map +1 -0
  54. package/dist/database/code-generator.d.ts +13 -0
  55. package/dist/database/code-generator.d.ts.map +1 -0
  56. package/dist/database/code-generator.js +2 -0
  57. package/dist/database/code-generator.js.map +1 -0
  58. package/dist/database/db.d.ts +40 -0
  59. package/dist/database/db.d.ts.map +1 -0
  60. package/dist/database/db.js +2 -0
  61. package/dist/database/db.js.map +1 -0
  62. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +2 -0
  63. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +1 -0
  64. package/dist/database/knex-plugins/knex-on-duplicate-update.js +2 -0
  65. package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +1 -0
  66. package/dist/database/puri-wrapper.d.ts +34 -0
  67. package/dist/database/puri-wrapper.d.ts.map +1 -0
  68. package/dist/database/puri-wrapper.js +2 -0
  69. package/dist/database/puri-wrapper.js.map +1 -0
  70. package/dist/database/puri.d.ts +83 -0
  71. package/dist/database/puri.d.ts.map +1 -0
  72. package/dist/database/puri.js +2 -0
  73. package/dist/database/puri.js.map +1 -0
  74. package/dist/database/puri.types.d.ts +60 -0
  75. package/dist/database/puri.types.d.ts.map +1 -0
  76. package/dist/database/puri.types.js +2 -0
  77. package/dist/database/puri.types.js.map +1 -0
  78. package/dist/database/transaction-context.d.ts +9 -0
  79. package/dist/database/transaction-context.d.ts.map +1 -0
  80. package/dist/database/transaction-context.js +2 -0
  81. package/dist/database/transaction-context.js.map +1 -0
  82. package/dist/database/types.d.ts +39 -0
  83. package/dist/database/types.d.ts.map +1 -0
  84. package/dist/database/types.js +2 -0
  85. package/dist/database/types.js.map +1 -0
  86. package/dist/database/upsert-builder.d.ts +34 -0
  87. package/dist/database/upsert-builder.d.ts.map +1 -0
  88. package/dist/database/upsert-builder.js +2 -0
  89. package/dist/database/upsert-builder.js.map +1 -0
  90. package/dist/entity/entity-manager.d.ts +32 -0
  91. package/dist/entity/entity-manager.d.ts.map +1 -0
  92. package/dist/entity/entity-manager.js +2 -0
  93. package/dist/entity/entity-manager.js.map +1 -0
  94. package/dist/entity/entity-utils.d.ts +61 -0
  95. package/dist/entity/entity-utils.d.ts.map +1 -0
  96. package/dist/entity/entity-utils.js +2 -0
  97. package/dist/entity/entity-utils.js.map +1 -0
  98. package/dist/entity/entity.d.ts +62 -0
  99. package/dist/entity/entity.d.ts.map +1 -0
  100. package/dist/entity/entity.js +2 -0
  101. package/dist/entity/entity.js.map +1 -0
  102. package/dist/entity/migrator.d.ts +135 -0
  103. package/dist/entity/migrator.d.ts.map +1 -0
  104. package/dist/entity/migrator.js +2 -0
  105. package/dist/entity/migrator.js.map +1 -0
  106. package/dist/exceptions/error-handler.d.ts +3 -0
  107. package/dist/exceptions/error-handler.d.ts.map +1 -0
  108. package/dist/exceptions/error-handler.js +2 -0
  109. package/dist/exceptions/error-handler.js.map +1 -0
  110. package/dist/exceptions/so-exceptions.d.ts +48 -0
  111. package/dist/exceptions/so-exceptions.d.ts.map +1 -0
  112. package/dist/exceptions/so-exceptions.js +2 -0
  113. package/dist/exceptions/so-exceptions.js.map +1 -0
  114. package/dist/file-storage/driver.d.ts +45 -0
  115. package/dist/file-storage/driver.d.ts.map +1 -0
  116. package/dist/file-storage/driver.js +2 -0
  117. package/dist/file-storage/driver.js.map +1 -0
  118. package/dist/file-storage/file-storage.d.ts +50 -0
  119. package/dist/file-storage/file-storage.d.ts.map +1 -0
  120. package/dist/file-storage/file-storage.js +2 -0
  121. package/dist/file-storage/file-storage.js.map +1 -0
  122. package/dist/index.d.ts +22 -813
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +1 -433
  125. package/dist/index.js.map +1 -1
  126. package/dist/migration/code-generation.d.ts +15 -0
  127. package/dist/migration/code-generation.d.ts.map +1 -0
  128. package/dist/migration/code-generation.js +2 -0
  129. package/dist/migration/code-generation.js.map +1 -0
  130. package/dist/migration/migration-set.d.ts +17 -0
  131. package/dist/migration/migration-set.d.ts.map +1 -0
  132. package/dist/migration/migration-set.js +2 -0
  133. package/dist/migration/migration-set.js.map +1 -0
  134. package/dist/migration/migrator.d.ts +130 -0
  135. package/dist/migration/migrator.d.ts.map +1 -0
  136. package/dist/migration/migrator.js +2 -0
  137. package/dist/migration/migrator.js.map +1 -0
  138. package/dist/migration/types.d.ts +52 -0
  139. package/dist/migration/types.d.ts.map +1 -0
  140. package/dist/migration/types.js +2 -0
  141. package/dist/migration/types.js.map +1 -0
  142. package/dist/smd/smd-manager.d.ts +28 -0
  143. package/dist/smd/smd-manager.d.ts.map +1 -0
  144. package/dist/smd/smd-manager.js +2 -0
  145. package/dist/smd/smd-manager.js.map +1 -0
  146. package/dist/smd/smd.d.ts +40 -0
  147. package/dist/smd/smd.d.ts.map +1 -0
  148. package/dist/smd/smd.js +2 -0
  149. package/dist/smd/smd.js.map +1 -0
  150. package/dist/syncer/index.d.ts +2 -0
  151. package/dist/syncer/index.d.ts.map +1 -0
  152. package/dist/syncer/index.js +2 -0
  153. package/dist/syncer/index.js.map +1 -0
  154. package/dist/syncer/syncer.d.ts +127 -0
  155. package/dist/syncer/syncer.d.ts.map +1 -0
  156. package/dist/syncer/syncer.js +2 -0
  157. package/dist/syncer/syncer.js.map +1 -0
  158. package/dist/templates/base-template.d.ts +13 -0
  159. package/dist/templates/base-template.d.ts.map +1 -0
  160. package/dist/templates/base-template.js +2 -0
  161. package/dist/templates/base-template.js.map +1 -0
  162. package/dist/templates/entity.template.d.ts +17 -0
  163. package/dist/templates/entity.template.d.ts.map +1 -0
  164. package/dist/templates/entity.template.js +2 -0
  165. package/dist/templates/entity.template.js.map +1 -0
  166. package/dist/templates/generated.template.d.ts +27 -0
  167. package/dist/templates/generated.template.d.ts.map +1 -0
  168. package/dist/templates/generated.template.js +2 -0
  169. package/dist/templates/generated.template.js.map +1 -0
  170. package/dist/templates/generated_http.template.d.ts +24 -0
  171. package/dist/templates/generated_http.template.d.ts.map +1 -0
  172. package/dist/templates/generated_http.template.js +2 -0
  173. package/dist/templates/generated_http.template.js.map +1 -0
  174. package/dist/templates/generated_sso.template.d.ts +20 -0
  175. package/dist/templates/generated_sso.template.d.ts.map +1 -0
  176. package/dist/templates/generated_sso.template.js +2 -0
  177. package/dist/templates/generated_sso.template.js.map +1 -0
  178. package/dist/templates/index.d.ts +2 -0
  179. package/dist/templates/index.d.ts.map +1 -0
  180. package/dist/templates/index.js +2 -0
  181. package/dist/templates/index.js.map +1 -0
  182. package/dist/templates/init_types.template.d.ts +17 -0
  183. package/dist/templates/init_types.template.d.ts.map +1 -0
  184. package/dist/templates/init_types.template.js +2 -0
  185. package/dist/templates/init_types.template.js.map +1 -0
  186. package/dist/templates/model.template.d.ts +17 -0
  187. package/dist/templates/model.template.d.ts.map +1 -0
  188. package/dist/templates/model.template.js +2 -0
  189. package/dist/templates/model.template.js.map +1 -0
  190. package/dist/templates/model_test.template.d.ts +17 -0
  191. package/dist/templates/model_test.template.d.ts.map +1 -0
  192. package/dist/templates/model_test.template.js +2 -0
  193. package/dist/templates/model_test.template.js.map +1 -0
  194. package/dist/templates/service.template.d.ts +29 -0
  195. package/dist/templates/service.template.d.ts.map +1 -0
  196. package/dist/templates/service.template.js +2 -0
  197. package/dist/templates/service.template.js.map +1 -0
  198. package/dist/templates/view_enums_buttonset.template.d.ts +17 -0
  199. package/dist/templates/view_enums_buttonset.template.d.ts.map +1 -0
  200. package/dist/templates/view_enums_buttonset.template.js +2 -0
  201. package/dist/templates/view_enums_buttonset.template.js.map +1 -0
  202. package/dist/templates/view_enums_dropdown.template.d.ts +18 -0
  203. package/dist/templates/view_enums_dropdown.template.d.ts.map +1 -0
  204. package/dist/templates/view_enums_dropdown.template.js +2 -0
  205. package/dist/templates/view_enums_dropdown.template.js.map +1 -0
  206. package/dist/templates/view_enums_select.template.d.ts +17 -0
  207. package/dist/templates/view_enums_select.template.d.ts.map +1 -0
  208. package/dist/templates/view_enums_select.template.js +2 -0
  209. package/dist/templates/view_enums_select.template.js.map +1 -0
  210. package/dist/templates/view_form.template.d.ts +26 -0
  211. package/dist/templates/view_form.template.d.ts.map +1 -0
  212. package/dist/templates/view_form.template.js +2 -0
  213. package/dist/templates/view_form.template.js.map +1 -0
  214. package/dist/templates/view_id_all_select.template.d.ts +17 -0
  215. package/dist/templates/view_id_all_select.template.d.ts.map +1 -0
  216. package/dist/templates/view_id_all_select.template.js +2 -0
  217. package/dist/templates/view_id_all_select.template.js.map +1 -0
  218. package/dist/templates/view_id_async_select.template.d.ts +17 -0
  219. package/dist/templates/view_id_async_select.template.d.ts.map +1 -0
  220. package/dist/templates/view_id_async_select.template.js +2 -0
  221. package/dist/templates/view_id_async_select.template.js.map +1 -0
  222. package/dist/templates/view_list.template.d.ts +38 -0
  223. package/dist/templates/view_list.template.d.ts.map +1 -0
  224. package/dist/templates/view_list.template.js +2 -0
  225. package/dist/templates/view_list.template.js.map +1 -0
  226. package/dist/templates/view_list_columns.template.d.ts +17 -0
  227. package/dist/templates/view_list_columns.template.d.ts.map +1 -0
  228. package/dist/templates/view_list_columns.template.js +2 -0
  229. package/dist/templates/view_list_columns.template.js.map +1 -0
  230. package/dist/templates/view_search_input.template.d.ts +17 -0
  231. package/dist/templates/view_search_input.template.d.ts.map +1 -0
  232. package/dist/templates/view_search_input.template.js +2 -0
  233. package/dist/templates/view_search_input.template.js.map +1 -0
  234. package/dist/testing/_relation-graph.d.ts +7 -0
  235. package/dist/testing/_relation-graph.d.ts.map +1 -0
  236. package/dist/testing/_relation-graph.js +2 -0
  237. package/dist/testing/_relation-graph.js.map +1 -0
  238. package/dist/testing/fixture-manager.d.ts +35 -0
  239. package/dist/testing/fixture-manager.d.ts.map +1 -0
  240. package/dist/testing/fixture-manager.js +2 -0
  241. package/dist/testing/fixture-manager.js.map +1 -0
  242. package/dist/types/types.d.ts +609 -0
  243. package/dist/types/types.d.ts.map +1 -0
  244. package/dist/types/types.js +2 -0
  245. package/dist/types/types.js.map +1 -0
  246. package/dist/typings/knex.d.js +2 -0
  247. package/dist/typings/knex.d.js.map +1 -0
  248. package/dist/utils/async-utils.d.ts +25 -0
  249. package/dist/utils/async-utils.d.ts.map +1 -0
  250. package/dist/utils/async-utils.js +2 -0
  251. package/dist/utils/async-utils.js.map +1 -0
  252. package/dist/utils/controller.d.ts +9 -0
  253. package/dist/utils/controller.d.ts.map +1 -0
  254. package/dist/utils/controller.js +2 -0
  255. package/dist/utils/controller.js.map +1 -0
  256. package/dist/utils/fs-utils.d.ts +9 -0
  257. package/dist/utils/fs-utils.d.ts.map +1 -0
  258. package/dist/utils/fs-utils.js +2 -0
  259. package/dist/utils/fs-utils.js.map +1 -0
  260. package/dist/utils/lodash-able.d.ts +2 -0
  261. package/dist/utils/lodash-able.d.ts.map +1 -0
  262. package/dist/utils/lodash-able.js +2 -0
  263. package/dist/utils/lodash-able.js.map +1 -0
  264. package/dist/utils/model.d.ts +17 -0
  265. package/dist/utils/model.d.ts.map +1 -0
  266. package/dist/utils/model.js +2 -0
  267. package/dist/utils/model.js.map +1 -0
  268. package/dist/utils/sql-parser.d.ts +4 -0
  269. package/dist/utils/sql-parser.d.ts.map +1 -0
  270. package/dist/utils/sql-parser.js +2 -0
  271. package/dist/utils/sql-parser.js.map +1 -0
  272. package/dist/utils/utils.d.ts +9 -0
  273. package/dist/utils/utils.d.ts.map +1 -0
  274. package/dist/utils/utils.js +2 -0
  275. package/dist/utils/utils.js.map +1 -0
  276. package/dist/utils/zod-error.d.ts +8 -0
  277. package/dist/utils/zod-error.d.ts.map +1 -0
  278. package/dist/utils/zod-error.js +2 -0
  279. package/dist/utils/zod-error.js.map +1 -0
  280. package/nodemon.json +6 -0
  281. package/package.json +29 -44
  282. package/src/api/base-frame.ts +3 -4
  283. package/src/api/caster.ts +22 -23
  284. package/src/api/code-converters.ts +170 -134
  285. package/src/api/context.ts +13 -6
  286. package/src/api/decorators.ts +146 -20
  287. package/src/api/index.ts +2 -0
  288. package/src/api/sonamu.ts +374 -165
  289. package/src/bin/build-config.ts +5 -0
  290. package/src/bin/cli-wrapper.ts +29 -40
  291. package/src/bin/cli.ts +132 -190
  292. package/src/database/_batch_update.ts +10 -15
  293. package/src/database/base-model.ts +300 -216
  294. package/src/database/db.ts +191 -21
  295. package/src/database/{drivers/knex/plugins → knex-plugins}/knex-on-duplicate-update.ts +1 -1
  296. package/src/database/puri-wrapper.ts +129 -0
  297. package/src/database/puri.ts +808 -0
  298. package/src/database/puri.types.ts +222 -0
  299. package/src/database/transaction-context.ts +18 -0
  300. package/src/database/upsert-builder.ts +32 -35
  301. package/src/entity/entity-manager.ts +7 -15
  302. package/src/entity/entity.ts +9 -31
  303. package/src/entity/migrator-/354/235/264/354/202/254/352/260/224/354/226/264/354/232/224.md +1 -0
  304. package/src/file-storage/driver.ts +121 -0
  305. package/src/file-storage/file-storage.ts +100 -0
  306. package/src/index.ts +14 -11
  307. package/src/migration/code-generation.ts +777 -0
  308. package/src/migration/migration-set.ts +453 -0
  309. package/src/migration/migrator.ts +823 -0
  310. package/src/migration/types.ts +53 -0
  311. package/src/shared/web.shared.ts.txt +33 -2
  312. package/src/syncer/syncer.ts +294 -127
  313. package/src/templates/generated.template.ts +13 -1
  314. package/src/templates/generated_http.template.ts +15 -12
  315. package/src/templates/generated_sso.template.ts +50 -2
  316. package/src/templates/model.template.ts +138 -2
  317. package/src/templates/service.template.ts +0 -1
  318. package/src/templates/view_form.template.ts +11 -7
  319. package/src/templates/view_list.template.ts +12 -4
  320. package/src/testing/fixture-manager.ts +229 -174
  321. package/src/types/types.ts +102 -14
  322. package/src/utils/async-utils.ts +64 -0
  323. package/src/utils/fs-utils.ts +17 -0
  324. package/src/utils/model.ts +0 -2
  325. package/src/utils/utils.ts +14 -58
  326. package/src/utils/zod-error.ts +12 -176
  327. package/tsconfig.json +2 -0
  328. package/tsup.config.js +4 -2
  329. package/.pnp.cjs +0 -14363
  330. package/.pnp.loader.mjs +0 -2047
  331. package/.vscode/extensions.json +0 -6
  332. package/.vscode/settings.json +0 -9
  333. package/.yarnrc.yml +0 -5
  334. package/src/database/base-model.abstract.ts +0 -97
  335. package/src/database/db.abstract.ts +0 -75
  336. package/src/database/drivers/knex/base-model.ts +0 -55
  337. package/src/database/drivers/knex/client.ts +0 -209
  338. package/src/database/drivers/knex/db.ts +0 -232
  339. package/src/database/drivers/knex/generator.ts +0 -659
  340. package/src/database/drivers/kysely/base-model.ts +0 -89
  341. package/src/database/drivers/kysely/client.ts +0 -309
  342. package/src/database/drivers/kysely/db.ts +0 -238
  343. package/src/database/drivers/kysely/generator.ts +0 -714
  344. package/src/database/types.ts +0 -118
  345. package/src/entity/migrator.ts +0 -1400
  346. package/src/smd/smd-manager.ts +0 -139
  347. package/src/smd/smd.ts +0 -571
  348. package/src/templates/kysely_types.template.ts +0 -205
@@ -0,0 +1,48 @@
1
+ export declare abstract class SoException extends Error {
2
+ readonly statusCode: number;
3
+ message: string;
4
+ payload?: unknown | undefined;
5
+ constructor(statusCode: number, message: string, payload?: unknown | undefined);
6
+ }
7
+ export declare function isSoException(err: any): err is SoException;
8
+ export declare class BadRequestException extends SoException {
9
+ message: string;
10
+ payload?: unknown | undefined;
11
+ constructor(message?: string, payload?: unknown | undefined);
12
+ }
13
+ export declare class UnauthorizedException extends SoException {
14
+ message: string;
15
+ payload?: unknown | undefined;
16
+ constructor(message?: string, payload?: unknown | undefined);
17
+ }
18
+ export declare class NotFoundException extends SoException {
19
+ message: string;
20
+ payload?: unknown | undefined;
21
+ constructor(message?: string, payload?: unknown | undefined);
22
+ }
23
+ export declare class ServiceUnavailableException extends SoException {
24
+ message: string;
25
+ payload?: unknown | undefined;
26
+ constructor(message?: string, payload?: unknown | undefined);
27
+ }
28
+ export declare class InternalServerErrorException extends SoException {
29
+ message: string;
30
+ payload?: unknown | undefined;
31
+ constructor(message?: string, payload?: unknown | undefined);
32
+ }
33
+ export declare class AlreadyProcessedException extends SoException {
34
+ message: string;
35
+ payload?: unknown | undefined;
36
+ constructor(message?: string, payload?: unknown | undefined);
37
+ }
38
+ export declare class DuplicateRowException extends SoException {
39
+ message: string;
40
+ payload?: unknown | undefined;
41
+ constructor(message?: string, payload?: unknown | undefined);
42
+ }
43
+ export declare class TargetNotFoundException extends SoException {
44
+ message: string;
45
+ payload?: unknown | undefined;
46
+ constructor(message?: string, payload?: unknown | undefined);
47
+ }
48
+ //# sourceMappingURL=so-exceptions.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get 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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/exceptions/so-exceptions.ts"],"sourcesContent":["export abstract class SoException extends Error {\n constructor(\n public readonly statusCode: number,\n public message: string,\n public payload?: unknown\n ) {\n super(message);\n }\n}\n\nexport function isSoException(err: any): err is SoException {\n return err.statusCode !== undefined;\n}\n\n/*\n\t잘못된 매개변수 등 요청사항에 문제가 있는 경우\n*/\nexport class BadRequestException extends SoException {\n constructor(\n public message = \"Bad Request\",\n public payload?: unknown\n ) {\n super(400, message, payload);\n }\n}\n\n/*\n\t로그인이 반드시 필요한 케이스에 로그아웃 상태인 경우 / 접근 권한이 없는 요청시\n*/\nexport class UnauthorizedException extends SoException {\n constructor(\n public message = \"Unauthorized\",\n public payload?: unknown\n ) {\n super(401, message, payload);\n }\n}\n\n/*\n\t존재하지 않는 레코드에 접근시\n*/\nexport class NotFoundException extends SoException {\n constructor(\n public message = \"Not Found\",\n public payload?: unknown\n ) {\n super(404, message, payload);\n }\n}\n\n/*\n\t현재 상태에서 처리가 불가능한 케이스\n*/\nexport class ServiceUnavailableException extends SoException {\n constructor(\n public message = \"Service Unavailable\",\n public payload?: unknown\n ) {\n super(503, message, payload);\n }\n}\n\n/*\n\t내부 처리 로직 (외부 API 콜 포함) 오류 발생시\n*/\nexport class InternalServerErrorException extends SoException {\n constructor(\n public message = \"Internal Server Error\",\n public payload?: unknown\n ) {\n super(500, message, payload);\n }\n}\n\n/*\n\t이미 처리함\n*/\nexport class AlreadyProcessedException extends SoException {\n constructor(\n public message = \"Already Processed\",\n public payload?: unknown\n ) {\n super(541, message, payload);\n }\n}\n\n/*\n\t중복 허용하지 않는 케이스에 중복 요청\n*/\nexport class DuplicateRowException extends SoException {\n constructor(\n public message = \"Duplicate Row\",\n public payload?: unknown\n ) {\n super(542, message, payload);\n }\n}\n\n/*\n\t뭔가를 하려고 했으나 대상이 없음\n*/\nexport class TargetNotFoundException extends SoException {\n constructor(\n public message = \"Target Not Found\",\n public payload?: unknown\n ) {\n super(520, message, payload);\n }\n}\n"],"names":["AlreadyProcessedException","BadRequestException","DuplicateRowException","InternalServerErrorException","NotFoundException","ServiceUnavailableException","SoException","TargetNotFoundException","UnauthorizedException","isSoException","statusCode","message","payload","Error","err","undefined"],"mappings":"mPA6EaA,mCAAAA,+BA5DAC,6BAAAA,yBAwEAC,+BAAAA,2BAxBAC,sCAAAA,kCAxBAC,2BAAAA,uBAYAC,qCAAAA,iCArDSC,qBAAAA,iBAqGTC,iCAAAA,6BAxEAC,+BAAAA,2BAnBGC,uBAAAA,ijGAVT,IAAA,AAAeH,yBAAf,wCAAeA,6BAAAA,YAElB,AAAgBI,UAAkB,CAClC,AAAOC,OAAe,CACtB,AAAOC,OAAiB,yBAJNN,6BAMlB,iBANkBA,aAMZK,8IAJUD,WAAAA,iBACTC,QAAAA,cACAC,QAAAA,4BAJWN,gCAAoBO,QAUnC,SAASJ,cAAcK,GAAQ,EACpC,OAAOA,IAAIJ,UAAU,GAAKK,SAC5B,CAKO,IAAA,AAAMd,iCAAN,6CAAMA,0CAAAA,0BAET,AAAOU,QAAP,uDAAiB,cACjB,AAAOC,sEAHEX,qCAKT,iBALSA,qBAKH,IAAKU,QAASC,kGAHbD,QAAAA,cACAC,QAAAA,4BAHEX,qBAA4BK,aAYlC,IAAA,AAAME,mCAAN,6CAAMA,4CAAAA,4BAET,AAAOG,QAAP,uDAAiB,eACjB,AAAOC,sEAHEJ,uCAKT,iBALSA,uBAKH,IAAKG,QAASC,kGAHbD,QAAAA,cACAC,QAAAA,4BAHEJ,uBAA8BF,aAYpC,IAAA,AAAMF,+BAAN,6CAAMA,wCAAAA,wBAET,AAAOO,QAAP,uDAAiB,YACjB,AAAOC,sEAHER,mCAKT,iBALSA,mBAKH,IAAKO,QAASC,kGAHbD,QAAAA,cACAC,QAAAA,4BAHER,mBAA0BE,aAYhC,IAAA,AAAMD,yCAAN,6CAAMA,kDAAAA,kCAET,AAAOM,QAAP,uDAAiB,sBACjB,AAAOC,sEAHEP,6CAKT,iBALSA,6BAKH,IAAKM,QAASC,kGAHbD,QAAAA,cACAC,QAAAA,4BAHEP,6BAAoCC,aAY1C,IAAA,AAAMH,0CAAN,6CAAMA,mDAAAA,mCAET,AAAOQ,QAAP,uDAAiB,wBACjB,AAAOC,sEAHET,8CAKT,iBALSA,8BAKH,IAAKQ,QAASC,kGAHbD,QAAAA,cACAC,QAAAA,4BAHET,8BAAqCG,aAY3C,IAAA,AAAMN,uCAAN,6CAAMA,gDAAAA,gCAET,AAAOW,QAAP,uDAAiB,oBACjB,AAAOC,sEAHEZ,2CAKT,iBALSA,2BAKH,IAAKW,QAASC,kGAHbD,QAAAA,cACAC,QAAAA,4BAHEZ,2BAAkCM,aAYxC,IAAA,AAAMJ,mCAAN,6CAAMA,4CAAAA,4BAET,AAAOS,QAAP,uDAAiB,gBACjB,AAAOC,sEAHEV,uCAKT,iBALSA,uBAKH,IAAKS,QAASC,kGAHbD,QAAAA,cACAC,QAAAA,4BAHEV,uBAA8BI,aAYpC,IAAA,AAAMC,qCAAN,6CAAMA,8CAAAA,8BAET,AAAOI,QAAP,uDAAiB,mBACjB,AAAOC,sEAHEL,yCAKT,iBALSA,yBAKH,IAAKI,QAASC,kGAHbD,QAAAA,cACAC,QAAAA,4BAHEL,yBAAgCD"}
@@ -0,0 +1,45 @@
1
+ import { S3Client, S3ClientConfig } from "@aws-sdk/client-s3";
2
+ /**
3
+ * 파일 저장소의 공통 인터페이스
4
+ */
5
+ export interface Driver {
6
+ put(key: string, contents: Buffer, options?: {
7
+ contentType?: string;
8
+ visibility?: "public" | "private";
9
+ }): Promise<void>;
10
+ del(key: string): Promise<void>;
11
+ getUrl(key: string): string;
12
+ getSignedUrl(key: string, expiresIn?: number): Promise<string>;
13
+ }
14
+ export type FSDriverConfig = {
15
+ location: string;
16
+ urlPrefix: string;
17
+ };
18
+ /**
19
+ * 로컬 파일시스템
20
+ */
21
+ export declare class FSDriver implements Driver {
22
+ private config;
23
+ constructor(config: FSDriverConfig);
24
+ put(key: string, contents: Buffer): Promise<void>;
25
+ del(key: string): Promise<void>;
26
+ getUrl(key: string): string;
27
+ getSignedUrl(key: string, _expiresIn?: number): Promise<string>;
28
+ }
29
+ export type S3DriverConfig = S3ClientConfig & {
30
+ bucket: string;
31
+ };
32
+ export declare class S3Driver implements Driver {
33
+ private config;
34
+ s3: S3Client;
35
+ constructor(config: S3DriverConfig);
36
+ put(key: string, contents: Buffer, options?: {
37
+ contentType?: string;
38
+ visibility?: "public" | "private";
39
+ }): Promise<void>;
40
+ del(key: string): Promise<void>;
41
+ getUrl(key: string): string;
42
+ getSignedUrl(key: string, expiresIn?: number): Promise<string>;
43
+ private getAcl;
44
+ }
45
+ //# sourceMappingURL=driver.d.ts.map
@@ -0,0 +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;CAChE;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;CAGtE;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;CAOf"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get 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)}}]);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}}]);return S3Driver}();
2
+ //# sourceMappingURL=driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/file-storage/driver.ts"],"sourcesContent":["import {\n DeleteObjectCommand,\n GetObjectCommand,\n PutObjectCommand,\n S3Client,\n S3ClientConfig,\n} from \"@aws-sdk/client-s3\";\nimport { getSignedUrl } from \"@aws-sdk/s3-request-presigner\";\nimport fs from \"fs/promises\";\nimport path from \"path\";\n\n/**\n * 파일 저장소의 공통 인터페이스\n */\nexport interface Driver {\n put(\n key: string,\n contents: Buffer,\n options?: { contentType?: string; visibility?: \"public\" | \"private\" }\n ): Promise<void>;\n\n del(key: string): Promise<void>;\n\n getUrl(key: string): string;\n\n getSignedUrl(key: string, expiresIn?: number): Promise<string>;\n}\n\nexport type FSDriverConfig = {\n location: string;\n urlPrefix: string;\n};\n\n/**\n * 로컬 파일시스템\n */\nexport class FSDriver implements Driver {\n constructor(private config: FSDriverConfig) {}\n\n async put(key: string, contents: Buffer): Promise<void> {\n const filePath = path.join(this.config.location, key);\n const dir = path.dirname(filePath);\n\n await fs.mkdir(dir, { recursive: true });\n\n await fs.writeFile(filePath, contents);\n }\n\n async del(key: string) {\n await fs.rm(path.join(this.config.location, key));\n }\n\n getUrl(key: string): string {\n return `${this.config.urlPrefix}/${key}`;\n }\n\n // 로컬 파일시스템은 signed URL을 지원하지 않으므로 일반 URL 반환\n async getSignedUrl(key: string, _expiresIn?: number): Promise<string> {\n return this.getUrl(key);\n }\n}\n\nexport type S3DriverConfig = S3ClientConfig & {\n bucket: string;\n};\n\nexport class S3Driver implements Driver {\n s3: S3Client;\n\n constructor(private config: S3DriverConfig) {\n this.s3 = new S3Client(config);\n }\n\n async put(\n key: string,\n contents: Buffer,\n options?: { contentType?: string; visibility?: \"public\" | \"private\" }\n ): Promise<void> {\n await this.s3.send(\n new PutObjectCommand({\n Bucket: this.config.bucket,\n Key: key,\n Body: contents,\n ContentType: options?.contentType,\n ACL: this.getAcl(options?.visibility),\n })\n );\n }\n\n async del(key: string): Promise<void> {\n await this.s3.send(\n new DeleteObjectCommand({\n Bucket: this.config.bucket,\n Key: key,\n })\n );\n }\n\n getUrl(key: string): string {\n return `https://${this.config.bucket}.s3.${this.config.region}.amazonaws.com/${key}`;\n }\n\n async getSignedUrl(key: string, expiresIn?: number): Promise<string> {\n const command = new GetObjectCommand({\n Bucket: this.config.bucket,\n Key: key,\n });\n\n return getSignedUrl(this.s3, command, {\n expiresIn: expiresIn ?? 60 * 60 * 24 * 7,\n });\n }\n\n private getAcl(visibility?: \"public\" | \"private\") {\n if (visibility === \"public\") {\n return \"public-read\";\n }\n\n return visibility;\n }\n}\n"],"names":["FSDriver","S3Driver","config","put","key","contents","filePath","dir","path","join","location","dirname","fs","mkdir","recursive","writeFile","del","rm","getUrl","urlPrefix","getSignedUrl","_expiresIn","s3","S3Client","options","send","PutObjectCommand","Bucket","bucket","Key","Body","ContentType","contentType","ACL","getAcl","visibility","DeleteObjectCommand","region","expiresIn","command","GetObjectCommand"],"mappings":"mPAoCaA,kBAAAA,cA8BAC,kBAAAA,kCA5DN,sDACsB,6FACd,wEACE,8qFA2BV,IAAA,AAAMD,sBAAN,iCAAMA,SACC,AAAQE,MAAsB,yBAD/BF,sDACSE,OAAAA,qBADTF,WAGLG,IAAAA,YAAN,SAAMA,IAAIC,GAAW,CAAEC,QAAgB,4CAC/BC,SACAC,2EADAD,SAAWE,aAAI,CAACC,IAAI,CAAC,IAAI,CAACP,MAAM,CAACQ,QAAQ,CAAEN,KAC3CG,IAAMC,aAAI,CAACG,OAAO,CAACL,UAEzB,SAAMM,iBAAE,CAACC,KAAK,CAACN,IAAK,CAAEO,UAAW,IAAK,WAAtC,cAEA,SAAMF,iBAAE,CAACG,SAAS,CAACT,SAAUD,kBAA7B,0BACF,iBAEMW,IAAAA,YAAN,SAAMA,IAAIZ,GAAW,+GACnB,SAAMQ,iBAAE,CAACK,EAAE,CAACT,aAAI,CAACC,IAAI,CAAC,IAAI,CAACP,MAAM,CAACQ,QAAQ,CAAEN,cAA5C,0BACF,iBAEAc,IAAAA,eAAAA,SAAAA,OAAOd,GAAW,EAChB,MAAO,AAAC,GAA2BA,OAAzB,IAAI,CAACF,MAAM,CAACiB,SAAS,CAAC,KAAO,OAAJf,IACrC,IAGMgB,IAAAA,qBAAN,SAAMA,aAAahB,GAAW,CAAEiB,UAAmB,mFACjD,SAAO,IAAI,CAACH,MAAM,CAACd,OACrB,yBAvBWJ,YA8BN,IAAA,AAAMC,sBAAN,iCAAMA,SAGC,AAAQC,MAAsB,yBAH/BD,iDACXqB,sBAAAA,KAAAA,KAAAA,QAEoBpB,OAAAA,MAClB,CAAA,IAAI,CAACoB,EAAE,CAAG,IAAIC,kBAAQ,CAACrB,sBAJdD,WAOLE,IAAAA,YAAN,SAAMA,IACJC,GAAW,CACXC,QAAgB,CAChBmB,OAAqE,+GAErE,SAAM,IAAI,CAACF,EAAE,CAACG,IAAI,CAChB,IAAIC,0BAAgB,CAAC,CACnBC,OAAQ,IAAI,CAACzB,MAAM,CAAC0B,MAAM,CAC1BC,IAAKzB,IACL0B,KAAMzB,SACN0B,WAAW,CAAEP,gBAAAA,wBAAAA,QAASQ,WAAW,CACjCC,IAAK,IAAI,CAACC,MAAM,CAACV,gBAAAA,wBAAAA,QAASW,UAAU,CACtC,YAPF,0BASF,iBAEMnB,IAAAA,YAAN,SAAMA,IAAIZ,GAAW,+GACnB,SAAM,IAAI,CAACkB,EAAE,CAACG,IAAI,CAChB,IAAIW,6BAAmB,CAAC,CACtBT,OAAQ,IAAI,CAACzB,MAAM,CAAC0B,MAAM,CAC1BC,IAAKzB,GACP,YAJF,0BAMF,iBAEAc,IAAAA,eAAAA,SAAAA,OAAOd,GAAW,EAChB,MAAO,AAAC,WAAmC,OAAzB,IAAI,CAACF,MAAM,CAAC0B,MAAM,CAAC,QAA0CxB,OAApC,IAAI,CAACF,MAAM,CAACmC,MAAM,CAAC,mBAAqB,OAAJjC,IACjF,IAEMgB,IAAAA,qBAAN,SAAMA,aAAahB,GAAW,CAAEkC,SAAkB,4CAC1CC,mDAAAA,QAAU,IAAIC,0BAAgB,CAAC,CACnCb,OAAQ,IAAI,CAACzB,MAAM,CAAC0B,MAAM,CAC1BC,IAAKzB,GACP,GAEA,SAAOgB,GAAAA,gCAAY,EAAC,IAAI,CAACE,EAAE,CAAEiB,QAAS,CACpCD,UAAWA,kBAAAA,mBAAAA,UAAa,GAAK,GAAK,GAAK,CACzC,KACF,iBAEQJ,IAAAA,eAAR,SAAQA,OAAOC,UAAiC,EAC9C,GAAIA,aAAe,SAAU,CAC3B,MAAO,aACT,CAEA,OAAOA,UACT,YArDWlC"}
@@ -0,0 +1,50 @@
1
+ import type { MultipartFile } from "@fastify/multipart";
2
+ import type { Driver } from "./driver";
3
+ /**
4
+ * @fastify/multipart의 MultipartFile 래퍼
5
+ */
6
+ export declare class FileStorage {
7
+ private _file;
8
+ private _buffer?;
9
+ private _driver;
10
+ constructor(file: MultipartFile, driver: Driver);
11
+ /**
12
+ * 사용자 컴퓨터의 원본 파일명
13
+ */
14
+ get clientName(): string;
15
+ /**
16
+ * 파일명 (clientName의 별칭)
17
+ */
18
+ get filename(): string;
19
+ /**
20
+ * HTML input 필드명
21
+ */
22
+ get fieldName(): string;
23
+ /**
24
+ * 파일 크기 (바이트)
25
+ */
26
+ get size(): number;
27
+ /**
28
+ * 파일 확장자 (점 제외)
29
+ */
30
+ get extname(): string | false;
31
+ get mimetype(): string;
32
+ get encoding(): string;
33
+ toBuffer(): Promise<Buffer>;
34
+ md5(): Promise<string>;
35
+ /**
36
+ * 파일을 저장소에 저장
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * const { file } = Sonamu.getUploadContext();
41
+ * const url = await file.saveToDisk('uploads/avatar.png');
42
+ * ```
43
+ */
44
+ saveToDisk(key: string, options?: {
45
+ contentType?: string;
46
+ visibility?: "public" | "private";
47
+ }): Promise<string>;
48
+ get raw(): MultipartFile;
49
+ }
50
+ //# sourceMappingURL=file-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-storage.d.ts","sourceRoot":"","sources":["../../src/file-storage/file-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM;IAK/C;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,GAAG,KAAK,CAE5B;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAEK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAO3B,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;IAK5B;;;;;;;;OAQG;IACG,UAAU,CACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;KAAE,GACpE,OAAO,CAAC,MAAM,CAAC;IAWlB,IAAI,GAAG,IAAI,aAAa,CAEvB;CACF"}
@@ -0,0 +1,2 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/file-storage/file-storage.ts"],"sourcesContent":["import type { MultipartFile } from \"@fastify/multipart\";\nimport mime from \"mime-types\";\nimport { createHash } from \"crypto\";\nimport type { Driver } from \"./driver\";\n\n/**\n * @fastify/multipart의 MultipartFile 래퍼\n */\nexport class FileStorage {\n private _file: MultipartFile;\n private _buffer?: Buffer;\n private _driver: Driver;\n\n constructor(file: MultipartFile, driver: Driver) {\n this._file = file;\n this._driver = driver;\n }\n\n /**\n * 사용자 컴퓨터의 원본 파일명\n */\n get clientName(): string {\n return this._file.filename;\n }\n\n /**\n * 파일명 (clientName의 별칭)\n */\n get filename(): string {\n return this._file.filename;\n }\n\n /**\n * HTML input 필드명\n */\n get fieldName(): string {\n return this._file.fieldname;\n }\n\n /**\n * 파일 크기 (바이트)\n */\n get size(): number {\n return this._file.file.bytesRead;\n }\n\n /**\n * 파일 확장자 (점 제외)\n */\n get extname(): string | false {\n return mime.extension(this._file.mimetype);\n }\n\n get mimetype(): string {\n return this._file.mimetype;\n }\n\n get encoding(): string {\n return this._file.encoding;\n }\n\n async toBuffer(): Promise<Buffer> {\n if (!this._buffer) {\n this._buffer = await this._file.toBuffer();\n }\n return this._buffer;\n }\n\n async md5(): Promise<string> {\n const buffer = await this.toBuffer();\n return createHash(\"md5\").update(buffer).digest(\"hex\");\n }\n\n /**\n * 파일을 저장소에 저장\n *\n * @example\n * ```typescript\n * const { file } = Sonamu.getUploadContext();\n * const url = await file.saveToDisk('uploads/avatar.png');\n * ```\n */\n async saveToDisk(\n key: string,\n options?: { contentType?: string; visibility?: \"public\" | \"private\" }\n ): Promise<string> {\n const buffer = await this.toBuffer();\n\n await this._driver.put(key, buffer, {\n contentType: options?.contentType ?? this.mimetype,\n visibility: options?.visibility,\n });\n\n return this._driver.getSignedUrl(key);\n }\n\n get raw(): MultipartFile {\n return this._file;\n }\n}\n"],"names":["FileStorage","file","driver","_file","_buffer","_driver","clientName","filename","fieldName","fieldname","size","bytesRead","extname","mime","extension","mimetype","encoding","toBuffer","md5","buffer","createHash","update","digest","saveToDisk","key","options","put","contentType","visibility","getSignedUrl","raw"],"mappings":"oGAQaA,qDAAAA,4EAPI,mCACU,+qFAMpB,IAAA,AAAMA,yBAAN,iCAAMA,YAKCC,IAAmB,CAAEC,MAAc,yBALpCF,aACX,sBAAQG,QAAR,KAAA,GACA,sBAAQC,UAAR,KAAA,GACA,sBAAQC,UAAR,KAAA,EAGE,CAAA,IAAI,CAACF,KAAK,CAAGF,IACb,CAAA,IAAI,CAACI,OAAO,CAAGH,qBAPNF,cAaPM,IAAAA,iBAAJ,eACE,OAAO,IAAI,CAACH,KAAK,CAACI,QAAQ,AAC5B,IAKIA,IAAAA,eAAJ,eACE,OAAO,IAAI,CAACJ,KAAK,CAACI,QAAQ,AAC5B,IAKIC,IAAAA,gBAAJ,eACE,OAAO,IAAI,CAACL,KAAK,CAACM,SAAS,AAC7B,IAKIC,IAAAA,WAAJ,eACE,OAAO,IAAI,CAACP,KAAK,CAACF,IAAI,CAACU,SAAS,AAClC,IAKIC,IAAAA,cAAJ,eACE,OAAOC,kBAAI,CAACC,SAAS,CAAC,IAAI,CAACX,KAAK,CAACY,QAAQ,CAC3C,IAEIA,IAAAA,eAAJ,eACE,OAAO,IAAI,CAACZ,KAAK,CAACY,QAAQ,AAC5B,IAEIC,IAAAA,eAAJ,eACE,OAAO,IAAI,CAACb,KAAK,CAACa,QAAQ,AAC5B,IAEMC,IAAAA,iBAAN,SAAMA,kIACA,CAAC,IAAI,CAACb,OAAO,CAAb,cACF,IAAI,CAAW,SAAM,IAAI,CAACD,KAAK,CAACc,QAAQ,WAAxC,EAAKb,OAAO,CAAG,oCAEjB,SAAO,IAAI,CAACA,OAAO,IACrB,iBAEMc,IAAAA,YAAN,SAAMA,gDACEC,8EAAS,SAAM,IAAI,CAACF,QAAQ,WAA5BE,OAAS,cACf,SAAOC,GAAAA,kBAAU,EAAC,OAAOC,MAAM,CAACF,QAAQG,MAAM,CAAC,UACjD,iBAWMC,IAAAA,mBAAN,SAAMA,WACJC,GAAW,CACXC,OAAqE,4CAE/DN,OAGSM,4FAHA,SAAM,IAAI,CAACR,QAAQ,WAA5BE,OAAS,cAEf,SAAM,IAAI,CAACd,OAAO,CAACqB,GAAG,CAACF,IAAKL,OAAQ,CAClCQ,YAAaF,CAAAA,qBAAAA,gBAAAA,wBAAAA,QAASE,WAAW,UAApBF,8BAAAA,qBAAwB,IAAI,CAACV,QAAQ,CAClDa,UAAU,CAAEH,gBAAAA,wBAAAA,QAASG,UAAU,AACjC,WAHA,cAKA,SAAO,IAAI,CAACvB,OAAO,CAACwB,YAAY,CAACL,QACnC,iBAEIM,IAAAA,UAAJ,eACE,OAAO,IAAI,CAAC3B,KAAK,AACnB,YA1FWH"}