sonamu 0.5.7 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. package/dist/api/base-frame.js +12 -2
  2. package/dist/api/caster.js +66 -2
  3. package/dist/api/code-converters.js +489 -2
  4. package/dist/api/config.d.ts +76 -0
  5. package/dist/api/config.d.ts.map +1 -0
  6. package/dist/api/config.js +32 -0
  7. package/dist/api/context.d.ts +1 -0
  8. package/dist/api/context.d.ts.map +1 -1
  9. package/dist/api/context.js +3 -2
  10. package/dist/api/decorators.d.ts.map +1 -1
  11. package/dist/api/decorators.js +142 -2
  12. package/dist/api/index.js +9 -2
  13. package/dist/api/sonamu.d.ts +8 -22
  14. package/dist/api/sonamu.d.ts.map +1 -1
  15. package/dist/api/sonamu.js +482 -2
  16. package/dist/bin/build-config.d.ts +2 -1
  17. package/dist/bin/build-config.d.ts.map +1 -1
  18. package/dist/bin/build-config.js +12 -2
  19. package/dist/bin/cli-wrapper.js +71 -2
  20. package/dist/bin/cli.js +418 -2
  21. package/dist/bin/hot-hook-register.d.ts +11 -0
  22. package/dist/bin/hot-hook-register.d.ts.map +1 -0
  23. package/dist/bin/hot-hook-register.js +21 -0
  24. package/dist/database/_batch_update.js +78 -2
  25. package/dist/database/base-model.js +247 -2
  26. package/dist/database/code-generator.js +53 -2
  27. package/dist/database/db.d.ts +2 -16
  28. package/dist/database/db.d.ts.map +1 -1
  29. package/dist/database/db.js +132 -2
  30. package/dist/database/knex-plugins/knex-on-duplicate-update.js +39 -2
  31. package/dist/database/puri-wrapper.js +109 -2
  32. package/dist/database/puri.d.ts +23 -16
  33. package/dist/database/puri.d.ts.map +1 -1
  34. package/dist/database/puri.js +539 -2
  35. package/dist/database/puri.types.d.ts +8 -3
  36. package/dist/database/puri.types.d.ts.map +1 -1
  37. package/dist/database/puri.types.js +3 -2
  38. package/dist/database/transaction-context.js +14 -2
  39. package/dist/database/upsert-builder.js +215 -2
  40. package/dist/entity/entity-manager.d.ts +3 -1
  41. package/dist/entity/entity-manager.d.ts.map +1 -1
  42. package/dist/entity/entity-manager.js +114 -2
  43. package/dist/entity/entity-utils.js +210 -2
  44. package/dist/entity/entity.d.ts.map +1 -1
  45. package/dist/entity/entity.js +651 -2
  46. package/dist/exceptions/error-handler.js +29 -2
  47. package/dist/exceptions/so-exceptions.js +85 -2
  48. package/dist/file-storage/driver.js +79 -2
  49. package/dist/file-storage/file-storage.js +75 -2
  50. package/dist/index.d.ts +2 -0
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +28 -2
  53. package/dist/migration/code-generation.js +558 -2
  54. package/dist/migration/migration-set.js +364 -2
  55. package/dist/migration/migrator.d.ts +0 -9
  56. package/dist/migration/migrator.d.ts.map +1 -1
  57. package/dist/migration/migrator.js +510 -2
  58. package/dist/migration/types.js +3 -2
  59. package/dist/naite/naite.d.ts +12 -0
  60. package/dist/naite/naite.d.ts.map +1 -0
  61. package/dist/naite/naite.js +72 -0
  62. package/dist/stream/index.js +3 -2
  63. package/dist/stream/sse.js +38 -2
  64. package/dist/syncer/api-parser.d.ts +20 -0
  65. package/dist/syncer/api-parser.d.ts.map +1 -0
  66. package/dist/syncer/api-parser.js +229 -0
  67. package/dist/syncer/checksum.d.ts +21 -0
  68. package/dist/syncer/checksum.d.ts.map +1 -0
  69. package/dist/syncer/checksum.js +98 -0
  70. package/dist/syncer/code-generator.d.ts +20 -0
  71. package/dist/syncer/code-generator.d.ts.map +1 -0
  72. package/dist/syncer/code-generator.js +141 -0
  73. package/dist/syncer/entity-operations.d.ts +17 -0
  74. package/dist/syncer/entity-operations.d.ts.map +1 -0
  75. package/dist/syncer/entity-operations.js +58 -0
  76. package/dist/syncer/file-patterns.d.ts +29 -0
  77. package/dist/syncer/file-patterns.d.ts.map +1 -0
  78. package/dist/syncer/file-patterns.js +38 -0
  79. package/dist/syncer/index.d.ts +6 -0
  80. package/dist/syncer/index.d.ts.map +1 -1
  81. package/dist/syncer/index.js +9 -2
  82. package/dist/syncer/module-loader.d.ts +35 -0
  83. package/dist/syncer/module-loader.d.ts.map +1 -0
  84. package/dist/syncer/module-loader.js +82 -0
  85. package/dist/syncer/syncer.d.ts +93 -108
  86. package/dist/syncer/syncer.d.ts.map +1 -1
  87. package/dist/syncer/syncer.js +375 -2
  88. package/dist/template/entity-converter.d.ts +14 -0
  89. package/dist/template/entity-converter.d.ts.map +1 -0
  90. package/dist/template/entity-converter.js +101 -0
  91. package/dist/template/helpers.d.ts +23 -0
  92. package/dist/template/helpers.d.ts.map +1 -0
  93. package/dist/template/helpers.js +64 -0
  94. package/dist/{templates → template/implementations}/entity.template.d.ts +3 -3
  95. package/dist/template/implementations/entity.template.d.ts.map +1 -0
  96. package/dist/template/implementations/entity.template.js +87 -0
  97. package/dist/{templates → template/implementations}/generated.template.d.ts +3 -3
  98. package/dist/template/implementations/generated.template.d.ts.map +1 -0
  99. package/dist/template/implementations/generated.template.js +232 -0
  100. package/dist/{templates → template/implementations}/generated_http.template.d.ts +3 -3
  101. package/dist/template/implementations/generated_http.template.d.ts.map +1 -0
  102. package/dist/template/implementations/generated_http.template.js +131 -0
  103. package/dist/{templates → template/implementations}/generated_sso.template.d.ts +3 -3
  104. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -0
  105. package/dist/template/implementations/generated_sso.template.js +105 -0
  106. package/dist/{templates → template/implementations}/init_types.template.d.ts +3 -3
  107. package/dist/template/implementations/init_types.template.d.ts.map +1 -0
  108. package/dist/template/implementations/init_types.template.js +38 -0
  109. package/dist/template/implementations/model.template.d.ts +17 -0
  110. package/dist/template/implementations/model.template.d.ts.map +1 -0
  111. package/dist/template/implementations/model.template.js +171 -0
  112. package/dist/{templates → template/implementations}/model_test.template.d.ts +3 -3
  113. package/dist/template/implementations/model_test.template.d.ts.map +1 -0
  114. package/dist/template/implementations/model_test.template.js +35 -0
  115. package/dist/{templates → template/implementations}/service.template.d.ts +6 -6
  116. package/dist/template/implementations/service.template.d.ts.map +1 -0
  117. package/dist/template/implementations/service.template.js +193 -0
  118. package/dist/{templates → template/implementations}/view_enums_buttonset.template.d.ts +3 -3
  119. package/dist/template/implementations/view_enums_buttonset.template.d.ts.map +1 -0
  120. package/dist/template/implementations/view_enums_buttonset.template.js +31 -0
  121. package/dist/{templates → template/implementations}/view_enums_dropdown.template.d.ts +3 -4
  122. package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +1 -0
  123. package/dist/template/implementations/view_enums_dropdown.template.js +50 -0
  124. package/dist/{templates → template/implementations}/view_enums_select.template.d.ts +3 -3
  125. package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -0
  126. package/dist/template/implementations/view_enums_select.template.js +55 -0
  127. package/dist/{templates → template/implementations}/view_form.template.d.ts +5 -5
  128. package/dist/template/implementations/view_form.template.d.ts.map +1 -0
  129. package/dist/template/implementations/view_form.template.js +337 -0
  130. package/dist/{templates → template/implementations}/view_id_all_select.template.d.ts +3 -3
  131. package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -0
  132. package/dist/template/implementations/view_id_all_select.template.js +31 -0
  133. package/dist/{templates → template/implementations}/view_id_async_select.template.d.ts +3 -3
  134. package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -0
  135. package/dist/template/implementations/view_id_async_select.template.js +105 -0
  136. package/dist/{templates → template/implementations}/view_list.template.d.ts +5 -13
  137. package/dist/template/implementations/view_list.template.d.ts.map +1 -0
  138. package/dist/template/implementations/view_list.template.js +465 -0
  139. package/dist/{templates → template/implementations}/view_list_columns.template.d.ts +3 -3
  140. package/dist/template/implementations/view_list_columns.template.d.ts.map +1 -0
  141. package/dist/template/implementations/view_list_columns.template.js +49 -0
  142. package/dist/{templates → template/implementations}/view_search_input.template.d.ts +3 -3
  143. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -0
  144. package/dist/template/implementations/view_search_input.template.js +64 -0
  145. package/dist/template/index.d.ts +5 -0
  146. package/dist/template/index.d.ts.map +1 -0
  147. package/dist/template/index.js +6 -0
  148. package/dist/template/template.d.ts +39 -0
  149. package/dist/template/template.d.ts.map +1 -0
  150. package/dist/template/template.js +47 -0
  151. package/dist/template/zod-converter.d.ts +18 -0
  152. package/dist/template/zod-converter.d.ts.map +1 -0
  153. package/dist/template/zod-converter.js +166 -0
  154. package/dist/testing/_relation-graph.js +80 -2
  155. package/dist/testing/fixture-manager.d.ts.map +1 -1
  156. package/dist/testing/fixture-manager.js +521 -2
  157. package/dist/types/types.d.ts +39 -40
  158. package/dist/types/types.d.ts.map +1 -1
  159. package/dist/types/types.js +289 -2
  160. package/dist/typings/knex.d.js +3 -2
  161. package/dist/utils/async-utils.d.ts +7 -0
  162. package/dist/utils/async-utils.d.ts.map +1 -1
  163. package/dist/utils/async-utils.js +57 -2
  164. package/dist/utils/console-util.d.ts +2 -0
  165. package/dist/utils/console-util.d.ts.map +1 -0
  166. package/dist/utils/console-util.js +6 -0
  167. package/dist/utils/controller.js +26 -2
  168. package/dist/utils/esm-utils.d.ts +45 -0
  169. package/dist/utils/esm-utils.d.ts.map +1 -0
  170. package/dist/utils/esm-utils.js +56 -0
  171. package/dist/utils/fs-utils.js +17 -2
  172. package/dist/utils/lodash-able.js +6 -2
  173. package/dist/utils/model.js +22 -2
  174. package/dist/utils/path-utils.d.ts +89 -0
  175. package/dist/utils/path-utils.d.ts.map +1 -0
  176. package/dist/utils/path-utils.js +60 -0
  177. package/dist/utils/process-utils.d.ts +13 -0
  178. package/dist/utils/process-utils.d.ts.map +1 -0
  179. package/dist/utils/process-utils.js +36 -0
  180. package/dist/utils/sql-parser.js +35 -2
  181. package/dist/utils/utils.d.ts +4 -7
  182. package/dist/utils/utils.d.ts.map +1 -1
  183. package/dist/utils/utils.js +33 -2
  184. package/dist/utils/zod-error.d.ts.map +1 -1
  185. package/dist/utils/zod-error.js +19 -2
  186. package/package.json +21 -8
  187. package/src/api/code-converters.ts +2 -2
  188. package/src/api/config.ts +142 -0
  189. package/src/api/context.ts +1 -0
  190. package/src/api/decorators.ts +1 -0
  191. package/src/api/sonamu.ts +81 -67
  192. package/src/bin/build-config.ts +2 -1
  193. package/src/bin/cli-wrapper.ts +10 -3
  194. package/src/bin/cli.ts +108 -56
  195. package/src/bin/hot-hook-register.ts +22 -0
  196. package/src/database/base-model.ts +1 -1
  197. package/src/database/code-generator.ts +1 -1
  198. package/src/database/db.ts +10 -52
  199. package/src/database/puri.ts +78 -53
  200. package/src/database/puri.types.ts +18 -5
  201. package/src/database/upsert-builder.ts +1 -1
  202. package/src/entity/entity-manager.ts +19 -15
  203. package/src/entity/entity.ts +4 -3
  204. package/src/index.ts +2 -0
  205. package/src/migration/code-generation.ts +1 -1
  206. package/src/migration/migration-set.ts +1 -1
  207. package/src/migration/migrator.ts +23 -152
  208. package/src/naite/naite.ts +70 -0
  209. package/src/syncer/api-parser.ts +299 -0
  210. package/src/syncer/checksum.ts +152 -0
  211. package/src/syncer/code-generator.ts +202 -0
  212. package/src/syncer/entity-operations.ts +68 -0
  213. package/src/syncer/file-patterns.ts +56 -0
  214. package/src/syncer/index.ts +6 -0
  215. package/src/syncer/module-loader.ts +125 -0
  216. package/src/syncer/syncer.ts +363 -1420
  217. package/src/template/entity-converter.ts +123 -0
  218. package/src/template/helpers.ts +84 -0
  219. package/src/{templates → template/implementations}/entity.template.ts +4 -4
  220. package/src/{templates → template/implementations}/generated.template.ts +9 -9
  221. package/src/{templates → template/implementations}/generated_http.template.ts +9 -6
  222. package/src/{templates → template/implementations}/generated_sso.template.ts +7 -7
  223. package/src/{templates → template/implementations}/init_types.template.ts +4 -4
  224. package/src/{templates → template/implementations}/model.template.ts +9 -9
  225. package/src/{templates → template/implementations}/model_test.template.ts +5 -5
  226. package/src/{templates → template/implementations}/service.template.ts +19 -11
  227. package/src/{templates → template/implementations}/view_enums_buttonset.template.ts +3 -3
  228. package/src/{templates → template/implementations}/view_enums_dropdown.template.ts +5 -21
  229. package/src/{templates → template/implementations}/view_enums_select.template.ts +4 -4
  230. package/src/{templates → template/implementations}/view_form.template.ts +11 -13
  231. package/src/{templates → template/implementations}/view_id_all_select.template.ts +3 -3
  232. package/src/{templates → template/implementations}/view_id_async_select.template.ts +3 -3
  233. package/src/{templates → template/implementations}/view_list.template.ts +13 -64
  234. package/src/{templates → template/implementations}/view_list_columns.template.ts +3 -3
  235. package/src/{templates → template/implementations}/view_search_input.template.ts +3 -3
  236. package/src/template/index.ts +4 -0
  237. package/src/template/template.ts +86 -0
  238. package/src/template/zod-converter.ts +219 -0
  239. package/src/testing/fixture-manager.ts +8 -1
  240. package/src/types/types.ts +38 -61
  241. package/src/utils/async-utils.ts +17 -0
  242. package/src/utils/console-util.ts +4 -0
  243. package/src/utils/esm-utils.ts +69 -0
  244. package/src/utils/path-utils.ts +102 -0
  245. package/src/utils/process-utils.ts +46 -0
  246. package/src/utils/sql-parser.ts +1 -1
  247. package/src/utils/utils.ts +14 -40
  248. package/src/utils/zod-error.ts +0 -1
  249. package/dist/api/base-frame.js.map +0 -1
  250. package/dist/api/caster.js.map +0 -1
  251. package/dist/api/code-converters.js.map +0 -1
  252. package/dist/api/context.js.map +0 -1
  253. package/dist/api/decorators.js.map +0 -1
  254. package/dist/api/index.js.map +0 -1
  255. package/dist/api/sonamu.js.map +0 -1
  256. package/dist/bin/build-config.js.map +0 -1
  257. package/dist/bin/cli-wrapper.js.map +0 -1
  258. package/dist/bin/cli.js.map +0 -1
  259. package/dist/database/_batch_update.js.map +0 -1
  260. package/dist/database/base-model.js.map +0 -1
  261. package/dist/database/code-generator.js.map +0 -1
  262. package/dist/database/db.js.map +0 -1
  263. package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +0 -1
  264. package/dist/database/puri-wrapper.js.map +0 -1
  265. package/dist/database/puri.js.map +0 -1
  266. package/dist/database/puri.types.js.map +0 -1
  267. package/dist/database/transaction-context.js.map +0 -1
  268. package/dist/database/upsert-builder.js.map +0 -1
  269. package/dist/entity/entity-manager.js.map +0 -1
  270. package/dist/entity/entity-utils.js.map +0 -1
  271. package/dist/entity/entity.js.map +0 -1
  272. package/dist/exceptions/error-handler.js.map +0 -1
  273. package/dist/exceptions/so-exceptions.js.map +0 -1
  274. package/dist/file-storage/driver.js.map +0 -1
  275. package/dist/file-storage/file-storage.js.map +0 -1
  276. package/dist/index.js.map +0 -1
  277. package/dist/migration/code-generation.js.map +0 -1
  278. package/dist/migration/migration-set.js.map +0 -1
  279. package/dist/migration/migrator.js.map +0 -1
  280. package/dist/migration/types.js.map +0 -1
  281. package/dist/stream/index.js.map +0 -1
  282. package/dist/stream/sse.js.map +0 -1
  283. package/dist/syncer/index.js.map +0 -1
  284. package/dist/syncer/syncer.js.map +0 -1
  285. package/dist/templates/base-template.d.ts +0 -13
  286. package/dist/templates/base-template.d.ts.map +0 -1
  287. package/dist/templates/base-template.js +0 -2
  288. package/dist/templates/base-template.js.map +0 -1
  289. package/dist/templates/entity.template.d.ts.map +0 -1
  290. package/dist/templates/entity.template.js +0 -2
  291. package/dist/templates/entity.template.js.map +0 -1
  292. package/dist/templates/generated.template.d.ts.map +0 -1
  293. package/dist/templates/generated.template.js +0 -2
  294. package/dist/templates/generated.template.js.map +0 -1
  295. package/dist/templates/generated_http.template.d.ts.map +0 -1
  296. package/dist/templates/generated_http.template.js +0 -2
  297. package/dist/templates/generated_http.template.js.map +0 -1
  298. package/dist/templates/generated_sso.template.d.ts.map +0 -1
  299. package/dist/templates/generated_sso.template.js +0 -2
  300. package/dist/templates/generated_sso.template.js.map +0 -1
  301. package/dist/templates/index.d.ts +0 -2
  302. package/dist/templates/index.d.ts.map +0 -1
  303. package/dist/templates/index.js +0 -2
  304. package/dist/templates/index.js.map +0 -1
  305. package/dist/templates/init_types.template.d.ts.map +0 -1
  306. package/dist/templates/init_types.template.js +0 -2
  307. package/dist/templates/init_types.template.js.map +0 -1
  308. package/dist/templates/model.template.d.ts +0 -17
  309. package/dist/templates/model.template.d.ts.map +0 -1
  310. package/dist/templates/model.template.js +0 -2
  311. package/dist/templates/model.template.js.map +0 -1
  312. package/dist/templates/model_test.template.d.ts.map +0 -1
  313. package/dist/templates/model_test.template.js +0 -2
  314. package/dist/templates/model_test.template.js.map +0 -1
  315. package/dist/templates/service.template.d.ts.map +0 -1
  316. package/dist/templates/service.template.js +0 -2
  317. package/dist/templates/service.template.js.map +0 -1
  318. package/dist/templates/view_enums_buttonset.template.d.ts.map +0 -1
  319. package/dist/templates/view_enums_buttonset.template.js +0 -2
  320. package/dist/templates/view_enums_buttonset.template.js.map +0 -1
  321. package/dist/templates/view_enums_dropdown.template.d.ts.map +0 -1
  322. package/dist/templates/view_enums_dropdown.template.js +0 -2
  323. package/dist/templates/view_enums_dropdown.template.js.map +0 -1
  324. package/dist/templates/view_enums_select.template.d.ts.map +0 -1
  325. package/dist/templates/view_enums_select.template.js +0 -2
  326. package/dist/templates/view_enums_select.template.js.map +0 -1
  327. package/dist/templates/view_form.template.d.ts.map +0 -1
  328. package/dist/templates/view_form.template.js +0 -2
  329. package/dist/templates/view_form.template.js.map +0 -1
  330. package/dist/templates/view_id_all_select.template.d.ts.map +0 -1
  331. package/dist/templates/view_id_all_select.template.js +0 -2
  332. package/dist/templates/view_id_all_select.template.js.map +0 -1
  333. package/dist/templates/view_id_async_select.template.d.ts.map +0 -1
  334. package/dist/templates/view_id_async_select.template.js +0 -2
  335. package/dist/templates/view_id_async_select.template.js.map +0 -1
  336. package/dist/templates/view_list.template.d.ts.map +0 -1
  337. package/dist/templates/view_list.template.js +0 -2
  338. package/dist/templates/view_list.template.js.map +0 -1
  339. package/dist/templates/view_list_columns.template.d.ts.map +0 -1
  340. package/dist/templates/view_list_columns.template.js +0 -2
  341. package/dist/templates/view_list_columns.template.js.map +0 -1
  342. package/dist/templates/view_search_input.template.d.ts.map +0 -1
  343. package/dist/templates/view_search_input.template.js +0 -2
  344. package/dist/templates/view_search_input.template.js.map +0 -1
  345. package/dist/testing/_relation-graph.js.map +0 -1
  346. package/dist/testing/fixture-manager.js.map +0 -1
  347. package/dist/types/types.js.map +0 -1
  348. package/dist/typings/knex.d.js.map +0 -1
  349. package/dist/utils/async-utils.js.map +0 -1
  350. package/dist/utils/controller.js.map +0 -1
  351. package/dist/utils/fs-utils.js.map +0 -1
  352. package/dist/utils/lodash-able.js.map +0 -1
  353. package/dist/utils/model.js.map +0 -1
  354. package/dist/utils/sql-parser.js.map +0 -1
  355. package/dist/utils/utils.js.map +0 -1
  356. package/dist/utils/zod-error.js.map +0 -1
  357. package/src/templates/base-template.ts +0 -19
  358. package/src/templates/index.ts +0 -1
@@ -1,2 +1,57 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get everyAsync(){return everyAsync},get filterAsync(){return filterAsync},get mapAsync(){return mapAsync},get reduceAsync(){return reduceAsync}});function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=verb(0),g["throw"]=verb(1),g["return"]=verb(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}function filterAsync(arr,predicate){return _async_to_generator(function(){var results;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,Promise.all(arr.map(function(item,index){return predicate(item,index,arr).then(function(keep){return{item:item,keep:keep}})}))];case 1:results=_state.sent();return[2,results.filter(function(r){return r.keep}).map(function(r){return r.item})]}})})()}function everyAsync(arr,predicate){return _async_to_generator(function(){var i;return _ts_generator(this,function(_state){switch(_state.label){case 0:i=0;_state.label=1;case 1:if(!(i<arr.length))return[3,4];return[4,predicate(arr[i],i,arr)];case 2:if(!_state.sent()){return[2,false]}_state.label=3;case 3:i++;return[3,1];case 4:return[2,true]}})})()}function mapAsync(arr,mapper){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,Promise.all(arr.map(function(item,index){return mapper(item,index,arr)}))]})})()}function reduceAsync(arr,reducer,initialValue){return _async_to_generator(function(){var accumulator,i;return _ts_generator(this,function(_state){switch(_state.label){case 0:accumulator=initialValue;i=0;_state.label=1;case 1:if(!(i<arr.length))return[3,4];return[4,reducer(accumulator,arr[i],i,arr)];case 2:accumulator=_state.sent();_state.label=3;case 3:i++;return[3,1];case 4:return[2,accumulator]}})})()}
2
- //# sourceMappingURL=async-utils.js.map
1
+ import { glob } from "node:fs/promises";
2
+ import path from "path";
3
+ /**
4
+ * 비동기 조건으로 배열을 필터링합니다
5
+ * @example
6
+ * const filtered = await filterAsync([1, 2, 3], async (x) => x > 1);
7
+ */ export async function filterAsync(arr, predicate) {
8
+ const results = await Promise.all(arr.map((item, index)=>predicate(item, index, arr).then((keep)=>({
9
+ item,
10
+ keep
11
+ }))));
12
+ return results.filter((r)=>r.keep).map((r)=>r.item);
13
+ }
14
+ /**
15
+ * 비동기 조건이 모든 요소에 대해 참인지 확인합니다
16
+ * @example
17
+ * const allValid = await everyAsync([1, 2, 3], async (x) => x > 0);
18
+ */ export async function everyAsync(arr, predicate) {
19
+ for(let i = 0; i < arr.length; i++){
20
+ if (!await predicate(arr[i], i, arr)) {
21
+ return false;
22
+ }
23
+ }
24
+ return true;
25
+ }
26
+ /**
27
+ * 비동기 변환 함수를 배열의 각 요소에 적용합니다
28
+ * @example
29
+ * const doubled = await mapAsync([1, 2, 3], async (x) => x * 2);
30
+ */ export async function mapAsync(arr, mapper) {
31
+ return Promise.all(arr.map((item, index)=>mapper(item, index, arr)));
32
+ }
33
+ /**
34
+ * 비동기 리듀서로 배열을 축약합니다
35
+ * @example
36
+ * const sum = await reduceAsync([1, 2, 3], async (acc, x) => acc + x, 0);
37
+ */ export async function reduceAsync(arr, reducer, initialValue) {
38
+ let accumulator = initialValue;
39
+ for(let i = 0; i < arr.length; i++){
40
+ accumulator = await reducer(accumulator, arr[i], i, arr);
41
+ }
42
+ return accumulator;
43
+ }
44
+ /**
45
+ * 비동기 glob 함수입니다.
46
+ * AsyncIterableIterator로 날아오는 glob의 반환을 받아 끝까지 돌아서 배열로 반환합니다.
47
+ * @param pathPattern
48
+ * @returns
49
+ */ export async function globAsync(pathPattern) {
50
+ const files = [];
51
+ for await (const file of glob(path.resolve(pathPattern))){
52
+ files.push(file);
53
+ }
54
+ return files;
55
+ }
56
+
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9hc3luYy11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnbG9iIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG4vKipcbiAqIOu5hOuPmeq4sCDsobDqsbTsnLzroZwg67Cw7Je07J2EIO2VhO2EsOunge2VqeuLiOuLpFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGZpbHRlcmVkID0gYXdhaXQgZmlsdGVyQXN5bmMoWzEsIDIsIDNdLCBhc3luYyAoeCkgPT4geCA+IDEpO1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlsdGVyQXN5bmM8VD4oXG4gIGFycjogVFtdLFxuICBwcmVkaWNhdGU6IChpdGVtOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNlPGJvb2xlYW4+XG4pOiBQcm9taXNlPFRbXT4ge1xuICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgYXJyLm1hcCgoaXRlbSwgaW5kZXgpID0+XG4gICAgICBwcmVkaWNhdGUoaXRlbSwgaW5kZXgsIGFycikudGhlbigoa2VlcCkgPT4gKHsgaXRlbSwga2VlcCB9KSlcbiAgICApXG4gICk7XG4gIHJldHVybiByZXN1bHRzLmZpbHRlcigocikgPT4gci5rZWVwKS5tYXAoKHIpID0+IHIuaXRlbSk7XG59XG5cbi8qKlxuICog67mE64+Z6riwIOyhsOqxtOydtCDrqqjrk6Ag7JqU7IaM7JeQIOuMgO2VtCDssLjsnbjsp4Ag7ZmV7J247ZWp64uI64ukXG4gKiBAZXhhbXBsZVxuICogY29uc3QgYWxsVmFsaWQgPSBhd2FpdCBldmVyeUFzeW5jKFsxLCAyLCAzXSwgYXN5bmMgKHgpID0+IHggPiAwKTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV2ZXJ5QXN5bmM8VD4oXG4gIGFycjogVFtdLFxuICBwcmVkaWNhdGU6IChpdGVtOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNlPGJvb2xlYW4+XG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIShhd2FpdCBwcmVkaWNhdGUoYXJyW2ldLCBpLCBhcnIpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiDruYTrj5nquLAg67OA7ZmYIO2VqOyImOulvCDrsLDsl7TsnZgg6rCBIOyalOyGjOyXkCDsoIHsmqntlanri4jri6RcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBkb3VibGVkID0gYXdhaXQgbWFwQXN5bmMoWzEsIDIsIDNdLCBhc3luYyAoeCkgPT4geCAqIDIpO1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFwQXN5bmM8VCwgVT4oXG4gIGFycjogVFtdLFxuICBtYXBwZXI6IChpdGVtOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNlPFU+XG4pOiBQcm9taXNlPFVbXT4ge1xuICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgYXJyLm1hcCgoaXRlbSwgaW5kZXgpID0+IG1hcHBlcihpdGVtLCBpbmRleCwgYXJyKSlcbiAgKTtcbn1cblxuLyoqXG4gKiDruYTrj5nquLAg66as65OA7ISc66GcIOuwsOyXtOydhCDstpXslb3tlanri4jri6RcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzdW0gPSBhd2FpdCByZWR1Y2VBc3luYyhbMSwgMiwgM10sIGFzeW5jIChhY2MsIHgpID0+IGFjYyArIHgsIDApO1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVkdWNlQXN5bmM8VCwgVT4oXG4gIGFycjogVFtdLFxuICByZWR1Y2VyOiAoYWNjdW11bGF0b3I6IFUsIGN1cnJlbnRWYWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzZTxVPixcbiAgaW5pdGlhbFZhbHVlOiBVXG4pOiBQcm9taXNlPFU+IHtcbiAgbGV0IGFjY3VtdWxhdG9yID0gaW5pdGlhbFZhbHVlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGFjY3VtdWxhdG9yID0gYXdhaXQgcmVkdWNlcihhY2N1bXVsYXRvciwgYXJyW2ldLCBpLCBhcnIpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxuLyoqXG4gKiDruYTrj5nquLAgZ2xvYiDtlajsiJjsnoXri4jri6QuXG4gKiBBc3luY0l0ZXJhYmxlSXRlcmF0b3LroZwg64Kg7JWE7Jik64qUIGdsb2LsnZgg67CY7ZmY7J2EIOuwm+yVhCDrgZ3quYzsp4Ag64+M7JWE7IScIOuwsOyXtOuhnCDrsJjtmZjtlanri4jri6QuXG4gKiBAcGFyYW0gcGF0aFBhdHRlcm4gXG4gKiBAcmV0dXJucyBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdsb2JBc3luYyhwYXRoUGF0dGVybjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBmaWxlIG9mIGdsb2IocGF0aC5yZXNvbHZlKHBhdGhQYXR0ZXJuKSkpIHtcbiAgICBmaWxlcy5wdXNoKGZpbGUpO1xuICB9XG4gIHJldHVybiBmaWxlcztcbn1cbiJdLCJuYW1lcyI6WyJnbG9iIiwicGF0aCIsImZpbHRlckFzeW5jIiwiYXJyIiwicHJlZGljYXRlIiwicmVzdWx0cyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJpdGVtIiwiaW5kZXgiLCJ0aGVuIiwia2VlcCIsImZpbHRlciIsInIiLCJldmVyeUFzeW5jIiwiaSIsImxlbmd0aCIsIm1hcEFzeW5jIiwibWFwcGVyIiwicmVkdWNlQXN5bmMiLCJyZWR1Y2VyIiwiaW5pdGlhbFZhbHVlIiwiYWNjdW11bGF0b3IiLCJnbG9iQXN5bmMiLCJwYXRoUGF0dGVybiIsImZpbGVzIiwiZmlsZSIsInJlc29sdmUiLCJwdXNoIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxJQUFJLFFBQVEsbUJBQWM7QUFDbkMsT0FBT0MsVUFBVSxPQUFPO0FBRXhCOzs7O0NBSUMsR0FDRCxPQUFPLGVBQWVDLFlBQ3BCQyxHQUFRLEVBQ1JDLFNBQW1FO0lBRW5FLE1BQU1DLFVBQVUsTUFBTUMsUUFBUUMsR0FBRyxDQUMvQkosSUFBSUssR0FBRyxDQUFDLENBQUNDLE1BQU1DLFFBQ2JOLFVBQVVLLE1BQU1DLE9BQU9QLEtBQUtRLElBQUksQ0FBQyxDQUFDQyxPQUFVLENBQUE7Z0JBQUVIO2dCQUFNRztZQUFLLENBQUE7SUFHN0QsT0FBT1AsUUFBUVEsTUFBTSxDQUFDLENBQUNDLElBQU1BLEVBQUVGLElBQUksRUFBRUosR0FBRyxDQUFDLENBQUNNLElBQU1BLEVBQUVMLElBQUk7QUFDeEQ7QUFFQTs7OztDQUlDLEdBQ0QsT0FBTyxlQUFlTSxXQUNwQlosR0FBUSxFQUNSQyxTQUFtRTtJQUVuRSxJQUFLLElBQUlZLElBQUksR0FBR0EsSUFBSWIsSUFBSWMsTUFBTSxFQUFFRCxJQUFLO1FBQ25DLElBQUksQ0FBRSxNQUFNWixVQUFVRCxHQUFHLENBQUNhLEVBQUUsRUFBRUEsR0FBR2IsTUFBTztZQUN0QyxPQUFPO1FBQ1Q7SUFDRjtJQUNBLE9BQU87QUFDVDtBQUVBOzs7O0NBSUMsR0FDRCxPQUFPLGVBQWVlLFNBQ3BCZixHQUFRLEVBQ1JnQixNQUEwRDtJQUUxRCxPQUFPYixRQUFRQyxHQUFHLENBQ2hCSixJQUFJSyxHQUFHLENBQUMsQ0FBQ0MsTUFBTUMsUUFBVVMsT0FBT1YsTUFBTUMsT0FBT1A7QUFFakQ7QUFFQTs7OztDQUlDLEdBQ0QsT0FBTyxlQUFlaUIsWUFDcEJqQixHQUFRLEVBQ1JrQixPQUFtRixFQUNuRkMsWUFBZTtJQUVmLElBQUlDLGNBQWNEO0lBQ2xCLElBQUssSUFBSU4sSUFBSSxHQUFHQSxJQUFJYixJQUFJYyxNQUFNLEVBQUVELElBQUs7UUFDbkNPLGNBQWMsTUFBTUYsUUFBUUUsYUFBYXBCLEdBQUcsQ0FBQ2EsRUFBRSxFQUFFQSxHQUFHYjtJQUN0RDtJQUNBLE9BQU9vQjtBQUNUO0FBRUE7Ozs7O0NBS0MsR0FDRCxPQUFPLGVBQWVDLFVBQVVDLFdBQW1CO0lBQ2pELE1BQU1DLFFBQWtCLEVBQUU7SUFDMUIsV0FBVyxNQUFNQyxRQUFRM0IsS0FBS0MsS0FBSzJCLE9BQU8sQ0FBQ0gsY0FBZTtRQUN4REMsTUFBTUcsSUFBSSxDQUFDRjtJQUNiO0lBQ0EsT0FBT0Q7QUFDVCJ9
@@ -0,0 +1,2 @@
1
+ export declare function centerText(text: string): string;
2
+ //# sourceMappingURL=console-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-util.d.ts","sourceRoot":"","sources":["../../src/utils/console-util.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/C"}
@@ -0,0 +1,6 @@
1
+ export function centerText(text) {
2
+ const margin = (process.stdout.columns - text.length) / 2;
3
+ return " ".repeat(margin) + text + " ".repeat(margin);
4
+ }
5
+
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb25zb2xlLXV0aWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGNlbnRlclRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWFyZ2luID0gKHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgLSB0ZXh0Lmxlbmd0aCkgLyAyO1xuICByZXR1cm4gXCIgXCIucmVwZWF0KG1hcmdpbikgKyB0ZXh0ICsgXCIgXCIucmVwZWF0KG1hcmdpbik7XG59Il0sIm5hbWVzIjpbImNlbnRlclRleHQiLCJ0ZXh0IiwibWFyZ2luIiwicHJvY2VzcyIsInN0ZG91dCIsImNvbHVtbnMiLCJsZW5ndGgiLCJyZXBlYXQiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sU0FBU0EsV0FBV0MsSUFBWTtJQUNyQyxNQUFNQyxTQUFTLEFBQUNDLENBQUFBLFFBQVFDLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHSixLQUFLSyxNQUFNLEFBQUQsSUFBSztJQUN4RCxPQUFPLElBQUlDLE1BQU0sQ0FBQ0wsVUFBVUQsT0FBTyxJQUFJTSxNQUFNLENBQUNMO0FBQ2hEIn0=
@@ -1,2 +1,26 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get isDaemonServer(){return isDaemonServer},get isDevelopment(){return isDevelopment},get isInDocker(){return isInDocker},get isLocal(){return isLocal},get isProduction(){return isProduction},get isRemote(){return isRemote},get isStaging(){return isStaging},get isTest(){return isTest}});function isLocal(){return process.env.LR===undefined||process.env.LR==="local"}function isRemote(){return process.env.LR==="remote"}function isInDocker(){return process.env.LR!==undefined}function isDaemonServer(){return process.env.NODE_TYPE==="daemon"}function isDevelopment(){return isRemote()&&process.env.NODE_ENV==="development"}function isStaging(){return isRemote()&&process.env.NODE_ENV==="staging"}function isProduction(){return isRemote()&&process.env.NODE_ENV==="production"}function isTest(){return isLocal()&&process.env.NODE_ENV==="test"}
2
- //# sourceMappingURL=controller.js.map
1
+ export function isLocal() {
2
+ return process.env.LR === undefined || process.env.LR === "local";
3
+ }
4
+ export function isRemote() {
5
+ return process.env.LR === "remote";
6
+ }
7
+ export function isInDocker() {
8
+ return process.env.LR !== undefined;
9
+ }
10
+ export function isDaemonServer() {
11
+ return process.env.NODE_TYPE === "daemon";
12
+ }
13
+ export function isDevelopment() {
14
+ return isRemote() && process.env.NODE_ENV === "development";
15
+ }
16
+ export function isStaging() {
17
+ return isRemote() && process.env.NODE_ENV === "staging";
18
+ }
19
+ export function isProduction() {
20
+ return isRemote() && process.env.NODE_ENV === "production";
21
+ }
22
+ export function isTest() {
23
+ return isLocal() && process.env.NODE_ENV === "test";
24
+ }
25
+
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpc0xvY2FsKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuTFIgPT09IHVuZGVmaW5lZCB8fCBwcm9jZXNzLmVudi5MUiA9PT0gXCJsb2NhbFwiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVtb3RlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuTFIgPT09IFwicmVtb3RlXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbkRvY2tlcigpOiBib29sZWFuIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkxSICE9PSB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNEYWVtb25TZXJ2ZXIoKTogYm9vbGVhbiB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX1RZUEUgPT09IFwiZGFlbW9uXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNEZXZlbG9wbWVudCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzUmVtb3RlKCkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YWdpbmcoKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1JlbW90ZSgpICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInN0YWdpbmdcIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb2R1Y3Rpb24oKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1JlbW90ZSgpICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3QoKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc0xvY2FsKCkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiO1xufVxuIl0sIm5hbWVzIjpbImlzTG9jYWwiLCJwcm9jZXNzIiwiZW52IiwiTFIiLCJ1bmRlZmluZWQiLCJpc1JlbW90ZSIsImlzSW5Eb2NrZXIiLCJpc0RhZW1vblNlcnZlciIsIk5PREVfVFlQRSIsImlzRGV2ZWxvcG1lbnQiLCJOT0RFX0VOViIsImlzU3RhZ2luZyIsImlzUHJvZHVjdGlvbiIsImlzVGVzdCJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxTQUFTQTtJQUNkLE9BQU9DLFFBQVFDLEdBQUcsQ0FBQ0MsRUFBRSxLQUFLQyxhQUFhSCxRQUFRQyxHQUFHLENBQUNDLEVBQUUsS0FBSztBQUM1RDtBQUNBLE9BQU8sU0FBU0U7SUFDZCxPQUFPSixRQUFRQyxHQUFHLENBQUNDLEVBQUUsS0FBSztBQUM1QjtBQUNBLE9BQU8sU0FBU0c7SUFDZCxPQUFPTCxRQUFRQyxHQUFHLENBQUNDLEVBQUUsS0FBS0M7QUFDNUI7QUFDQSxPQUFPLFNBQVNHO0lBQ2QsT0FBT04sUUFBUUMsR0FBRyxDQUFDTSxTQUFTLEtBQUs7QUFDbkM7QUFDQSxPQUFPLFNBQVNDO0lBQ2QsT0FBT0osY0FBY0osUUFBUUMsR0FBRyxDQUFDUSxRQUFRLEtBQUs7QUFDaEQ7QUFDQSxPQUFPLFNBQVNDO0lBQ2QsT0FBT04sY0FBY0osUUFBUUMsR0FBRyxDQUFDUSxRQUFRLEtBQUs7QUFDaEQ7QUFDQSxPQUFPLFNBQVNFO0lBQ2QsT0FBT1AsY0FBY0osUUFBUUMsR0FBRyxDQUFDUSxRQUFRLEtBQUs7QUFDaEQ7QUFDQSxPQUFPLFNBQVNHO0lBQ2QsT0FBT2IsYUFBYUMsUUFBUUMsR0FBRyxDQUFDUSxRQUFRLEtBQUs7QUFDL0MifQ==
@@ -0,0 +1,45 @@
1
+ /**
2
+ * import.meta.url로부터 __filename 생성
3
+ *
4
+ * @example
5
+ * const __filename = getFilename(import.meta.url);
6
+ */
7
+ export declare function getFilename(metaUrl: string): string;
8
+ /**
9
+ * import.meta.url로부터 __dirname 생성
10
+ *
11
+ * @example
12
+ * const __dirname = getDirname(import.meta.url);
13
+ */
14
+ export declare function getDirname(metaUrl: string): string;
15
+ /**
16
+ * 절대 경로를 file:// URL로 변환 (동적 임포트용)
17
+ *
18
+ * @param absolutePath - 절대 파일 경로
19
+ * @returns file:// URL 문자열
20
+ *
21
+ * @example
22
+ * const url = createImportUrl('/path/to/file.js');
23
+ * await import(url);
24
+ */
25
+ export declare function createImportUrl(absolutePath: string): string;
26
+ /**
27
+ * HMR 환경 감지
28
+ *
29
+ * @returns hot reload 환경인지 여부
30
+ */
31
+ export declare function isHotReloadServer(): boolean;
32
+ /**
33
+ * 캐시를 무시하고 새로 임포트(cache busting)하는데, 이때 가져온 모듈의 exported members들을 배열로 가져옵니다.
34
+ *
35
+ * 가령 모듈에서 `export const user = { id: number; name: string; }` 이렇게 정의했다면,
36
+ * 이 함수는 `[{ name: "user", value: { id: number; name: string; } }]` 이렇게 반환합니다.
37
+ *
38
+ * @param filePath
39
+ * @returns { name: string; value: ExportedMemberT }[]
40
+ */
41
+ export declare function importMembers<ExportedMemberT>(filePath: string): Promise<{
42
+ name: string;
43
+ value: ExportedMemberT;
44
+ }[]>;
45
+ //# sourceMappingURL=esm-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esm-utils.d.ts","sourceRoot":"","sources":["../../src/utils/esm-utils.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,GACnB,MAAM,CAGR;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,eAAe,EACjD,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,EAAE,CAAC,CAQrD"}
@@ -0,0 +1,56 @@
1
+ import { fileURLToPath, pathToFileURL } from "url";
2
+ import { dirname } from "path";
3
+ /**
4
+ * import.meta.url로부터 __filename 생성
5
+ *
6
+ * @example
7
+ * const __filename = getFilename(import.meta.url);
8
+ */ export function getFilename(metaUrl) {
9
+ return fileURLToPath(metaUrl);
10
+ }
11
+ /**
12
+ * import.meta.url로부터 __dirname 생성
13
+ *
14
+ * @example
15
+ * const __dirname = getDirname(import.meta.url);
16
+ */ export function getDirname(metaUrl) {
17
+ return dirname(fileURLToPath(metaUrl));
18
+ }
19
+ /**
20
+ * 절대 경로를 file:// URL로 변환 (동적 임포트용)
21
+ *
22
+ * @param absolutePath - 절대 파일 경로
23
+ * @returns file:// URL 문자열
24
+ *
25
+ * @example
26
+ * const url = createImportUrl('/path/to/file.js');
27
+ * await import(url);
28
+ */ export function createImportUrl(absolutePath) {
29
+ const fileUrl = pathToFileURL(absolutePath).href;
30
+ return fileUrl;
31
+ }
32
+ /**
33
+ * HMR 환경 감지
34
+ *
35
+ * @returns hot reload 환경인지 여부
36
+ */ export function isHotReloadServer() {
37
+ return process.env.HOT === 'yes';
38
+ }
39
+ /**
40
+ * 캐시를 무시하고 새로 임포트(cache busting)하는데, 이때 가져온 모듈의 exported members들을 배열로 가져옵니다.
41
+ *
42
+ * 가령 모듈에서 `export const user = { id: number; name: string; }` 이렇게 정의했다면,
43
+ * 이 함수는 `[{ name: "user", value: { id: number; name: string; } }]` 이렇게 반환합니다.
44
+ *
45
+ * @param filePath
46
+ * @returns { name: string; value: ExportedMemberT }[]
47
+ */ export async function importMembers(filePath) {
48
+ const imported = await import(createImportUrl(filePath));
49
+ const allExportedMembers = Object.entries(imported).map(([name, value])=>({
50
+ name,
51
+ value
52
+ }));
53
+ return allExportedMembers;
54
+ }
55
+
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9lc20tdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCwgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ3VybCc7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAncGF0aCc7XG5cbi8qKlxuICogaW1wb3J0Lm1ldGEudXJs66Gc67aA7YSwIF9fZmlsZW5hbWUg7IOd7ISxXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IF9fZmlsZW5hbWUgPSBnZXRGaWxlbmFtZShpbXBvcnQubWV0YS51cmwpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZW5hbWUobWV0YVVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZpbGVVUkxUb1BhdGgobWV0YVVybCk7XG59XG5cbi8qKlxuICogaW1wb3J0Lm1ldGEudXJs66Gc67aA7YSwIF9fZGlybmFtZSDsg53shLFcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgX19kaXJuYW1lID0gZ2V0RGlybmFtZShpbXBvcnQubWV0YS51cmwpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlybmFtZShtZXRhVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZGlybmFtZShmaWxlVVJMVG9QYXRoKG1ldGFVcmwpKTtcbn1cblxuLyoqXG4gKiDsoIjrjIAg6rK966Gc66W8IGZpbGU6Ly8gVVJM66GcIOuzgO2ZmCAo64+Z7KCBIOyehO2PrO2KuOyaqSlcbiAqXG4gKiBAcGFyYW0gYWJzb2x1dGVQYXRoIC0g7KCI64yAIO2MjOydvCDqsr3roZxcbiAqIEByZXR1cm5zIGZpbGU6Ly8gVVJMIOusuOyekOyXtFxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB1cmwgPSBjcmVhdGVJbXBvcnRVcmwoJy9wYXRoL3RvL2ZpbGUuanMnKTtcbiAqIGF3YWl0IGltcG9ydCh1cmwpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW1wb3J0VXJsKFxuICBhYnNvbHV0ZVBhdGg6IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgY29uc3QgZmlsZVVybCA9IHBhdGhUb0ZpbGVVUkwoYWJzb2x1dGVQYXRoKS5ocmVmO1xuICByZXR1cm4gZmlsZVVybDtcbn1cblxuLyoqXG4gKiBITVIg7ZmY6rK9IOqwkOyngFxuICpcbiAqIEByZXR1cm5zIGhvdCByZWxvYWQg7ZmY6rK97J247KeAIOyXrOu2gFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNIb3RSZWxvYWRTZXJ2ZXIoKTogYm9vbGVhbiB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5IT1QgPT09ICd5ZXMnO1xufVxuXG4vKipcbiAqIOy6kOyLnOulvCDrrLTsi5ztlZjqs6Ag7IOI66GcIOyehO2PrO2KuChjYWNoZSBidXN0aW5nKe2VmOuKlOuNsCwg7J2065WMIOqwgOyguOyYqCDrqqjrk4jsnZggZXhwb3J0ZWQgbWVtYmVyc+uTpOydhCDrsLDsl7TroZwg6rCA7KC47Ji164uI64ukLlxuICpcbiAqIOqwgOuguSDrqqjrk4jsl5DshJwgYGV4cG9ydCBjb25zdCB1c2VyID0geyBpZDogbnVtYmVyOyBuYW1lOiBzdHJpbmc7IH1gIOydtOugh+qyjCDsoJXsnZjtlojri6TrqbQsXG4gKiDsnbQg7ZWo7IiY64qUIGBbeyBuYW1lOiBcInVzZXJcIiwgdmFsdWU6IHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nOyB9IH1dYCDsnbTroIfqsowg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIEBwYXJhbSBmaWxlUGF0aFxuICogQHJldHVybnMgeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBFeHBvcnRlZE1lbWJlclQgfVtdXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbXBvcnRNZW1iZXJzPEV4cG9ydGVkTWVtYmVyVD4oXG4gIGZpbGVQYXRoOiBzdHJpbmdcbik6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBFeHBvcnRlZE1lbWJlclQgfVtdPiB7XG4gIGNvbnN0IGltcG9ydGVkID0gYXdhaXQgaW1wb3J0KGNyZWF0ZUltcG9ydFVybChmaWxlUGF0aCkpO1xuXG4gIGNvbnN0IGFsbEV4cG9ydGVkTWVtYmVycyA9IE9iamVjdC5lbnRyaWVzPEV4cG9ydGVkTWVtYmVyVD4oaW1wb3J0ZWQpLm1hcChcbiAgICAoW25hbWUsIHZhbHVlXSkgPT4gKHsgbmFtZSwgdmFsdWUgfSlcbiAgKTtcblxuICByZXR1cm4gYWxsRXhwb3J0ZWRNZW1iZXJzO1xufVxuIl0sIm5hbWVzIjpbImZpbGVVUkxUb1BhdGgiLCJwYXRoVG9GaWxlVVJMIiwiZGlybmFtZSIsImdldEZpbGVuYW1lIiwibWV0YVVybCIsImdldERpcm5hbWUiLCJjcmVhdGVJbXBvcnRVcmwiLCJhYnNvbHV0ZVBhdGgiLCJmaWxlVXJsIiwiaHJlZiIsImlzSG90UmVsb2FkU2VydmVyIiwicHJvY2VzcyIsImVudiIsIkhPVCIsImltcG9ydE1lbWJlcnMiLCJmaWxlUGF0aCIsImltcG9ydGVkIiwiYWxsRXhwb3J0ZWRNZW1iZXJzIiwiT2JqZWN0IiwiZW50cmllcyIsIm1hcCIsIm5hbWUiLCJ2YWx1ZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsYUFBYSxFQUFFQyxhQUFhLFFBQVEsTUFBTTtBQUNuRCxTQUFTQyxPQUFPLFFBQVEsT0FBTztBQUUvQjs7Ozs7Q0FLQyxHQUNELE9BQU8sU0FBU0MsWUFBWUMsT0FBZTtJQUN6QyxPQUFPSixjQUFjSTtBQUN2QjtBQUVBOzs7OztDQUtDLEdBQ0QsT0FBTyxTQUFTQyxXQUFXRCxPQUFlO0lBQ3hDLE9BQU9GLFFBQVFGLGNBQWNJO0FBQy9CO0FBRUE7Ozs7Ozs7OztDQVNDLEdBQ0QsT0FBTyxTQUFTRSxnQkFDZEMsWUFBb0I7SUFFcEIsTUFBTUMsVUFBVVAsY0FBY00sY0FBY0UsSUFBSTtJQUNoRCxPQUFPRDtBQUNUO0FBRUE7Ozs7Q0FJQyxHQUNELE9BQU8sU0FBU0U7SUFDZCxPQUFPQyxRQUFRQyxHQUFHLENBQUNDLEdBQUcsS0FBSztBQUM3QjtBQUVBOzs7Ozs7OztDQVFDLEdBQ0QsT0FBTyxlQUFlQyxjQUNwQkMsUUFBZ0I7SUFFaEIsTUFBTUMsV0FBVyxNQUFNLE1BQU0sQ0FBQ1YsZ0JBQWdCUztJQUU5QyxNQUFNRSxxQkFBcUJDLE9BQU9DLE9BQU8sQ0FBa0JILFVBQVVJLEdBQUcsQ0FDdEUsQ0FBQyxDQUFDQyxNQUFNQyxNQUFNLEdBQU0sQ0FBQTtZQUFFRDtZQUFNQztRQUFNLENBQUE7SUFHcEMsT0FBT0w7QUFDVCJ9
@@ -1,2 +1,17 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"exists",{enumerable:true,get:function(){return exists}});var _fs=require("fs");var _promises=require("fs/promises");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=verb(0),g["throw"]=verb(1),g["return"]=verb(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}function exists(path){return _async_to_generator(function(){var e;return _ts_generator(this,function(_state){switch(_state.label){case 0:_state.trys.push([0,2,,3]);return[4,(0,_promises.access)(path,_fs.constants.F_OK)];case 1:_state.sent();return[2,true];case 2:e=_state.sent();return[2,false];case 3:return[2]}})})()}
2
- //# sourceMappingURL=fs-utils.js.map
1
+ import { constants } from "fs";
2
+ import { access } from "node:fs/promises";
3
+ /**
4
+ * fs/promises에는 exists가 없어요. 대신 access가 있습니다.
5
+ * 근데 얘는 인터페이스가 쓰기 불편해요. 그래서 감싸주었습니다.
6
+ * @param path
7
+ * @returns
8
+ */ export async function exists(path) {
9
+ try {
10
+ await access(path, constants.F_OK);
11
+ return true;
12
+ } catch {
13
+ return false;
14
+ }
15
+ }
16
+
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9mcy11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXRoTGlrZSwgY29uc3RhbnRzIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBhY2Nlc3MgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcblxuLyoqXG4gKiBmcy9wcm9taXNlc+yXkOuKlCBleGlzdHPqsIAg7JeG7Ja07JqULiDrjIDsi6AgYWNjZXNz6rCAIOyeiOyKteuLiOuLpC5cbiAqIOq3vOuNsCDslpjripQg7J247YSw7Y6Y7J207Iqk6rCAIOyTsOq4sCDrtojtjrjtlbTsmpQuIOq3uOuemOyEnCDqsJDsi7jso7zsl4jsirXri4jri6QuXG4gKiBAcGFyYW0gcGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4aXN0cyhwYXRoOiBQYXRoTGlrZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGF3YWl0IGFjY2VzcyhwYXRoLCBjb25zdGFudHMuRl9PSyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNvbnN0YW50cyIsImFjY2VzcyIsImV4aXN0cyIsInBhdGgiLCJGX09LIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFtQkEsU0FBUyxRQUFRLEtBQUs7QUFDekMsU0FBU0MsTUFBTSxRQUFRLG1CQUFjO0FBRXJDOzs7OztDQUtDLEdBQ0QsT0FBTyxlQUFlQyxPQUFPQyxJQUFjO0lBQ3pDLElBQUk7UUFDRixNQUFNRixPQUFPRSxNQUFNSCxVQUFVSSxJQUFJO1FBQ2pDLE9BQU87SUFDVCxFQUFFLE9BQU07UUFDTixPQUFPO0lBQ1Q7QUFDRiJ9
@@ -1,2 +1,6 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"wrapIf",{enumerable:true,get:function(){return wrapIf}});function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_with_holes(arr){if(Array.isArray(arr))return arr}function _iterable_to_array_limit(arr,i){var _i=arr==null?null:typeof Symbol!=="undefined"&&arr[Symbol.iterator]||arr["@@iterator"];if(_i==null)return;var _arr=[];var _n=true;var _d=false;var _s,_e;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"]!=null)_i["return"]()}finally{if(_d)throw _e}}return _arr}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _sliced_to_array(arr,i){return _array_with_holes(arr)||_iterable_to_array_limit(arr,i)||_unsupported_iterable_to_array(arr,i)||_non_iterable_rest()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function wrapIf(source,predicate){var _predicate=_sliced_to_array(predicate(source),2),ok=_predicate[0],wrapped=_predicate[1];return ok?wrapped:source}
2
- //# sourceMappingURL=lodash-able.js.map
1
+ export function wrapIf(source, predicate) {
2
+ const [ok, wrapped] = predicate(source);
3
+ return ok ? wrapped : source;
4
+ }
5
+
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9sb2Rhc2gtYWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gd3JhcElmKFxuICBzb3VyY2U6IHN0cmluZyxcbiAgcHJlZGljYXRlOiAoc3RyOiBzdHJpbmcpID0+IFtib29sZWFuLCBzdHJpbmddXG4pOiBzdHJpbmcge1xuICBjb25zdCBbb2ssIHdyYXBwZWRdID0gcHJlZGljYXRlKHNvdXJjZSk7XG4gIHJldHVybiBvayA/IHdyYXBwZWQgOiBzb3VyY2U7XG59XG4iXSwibmFtZXMiOlsid3JhcElmIiwic291cmNlIiwicHJlZGljYXRlIiwib2siLCJ3cmFwcGVkIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFNBQVNBLE9BQ2RDLE1BQWMsRUFDZEMsU0FBNkM7SUFFN0MsTUFBTSxDQUFDQyxJQUFJQyxRQUFRLEdBQUdGLFVBQVVEO0lBQ2hDLE9BQU9FLEtBQUtDLFVBQVVIO0FBQ3hCIn0=
@@ -1,2 +1,22 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get asArray(){return asArray},get objToMap(){return objToMap}});function asArray(param){if(Array.isArray(param)){return param}else{return[param]}}function objToMap(obj){var keys=Object.keys(obj);if(keys.every(function(key){return parseInt(key).toString()===key})){return new Map(keys.map(function(key){return[parseInt(key),obj[key]]}))}else{return new Map(Object.entries(obj))}}
2
- //# sourceMappingURL=model.js.map
1
+ export function asArray(param) {
2
+ if (Array.isArray(param)) {
3
+ return param;
4
+ } else {
5
+ return [
6
+ param
7
+ ];
8
+ }
9
+ }
10
+ export function objToMap(obj) {
11
+ const keys = Object.keys(obj);
12
+ if (keys.every((key)=>parseInt(key).toString() === key)) {
13
+ return new Map(keys.map((key)=>[
14
+ parseInt(key),
15
+ obj[key]
16
+ ]));
17
+ } else {
18
+ return new Map(Object.entries(obj));
19
+ }
20
+ }
21
+
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBMaXN0UmVzdWx0PFQ+ID0ge1xuICByb3dzOiBUW107XG4gIHRvdGFsPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQXJyYXlPcjxUPiA9IFQgfCBUW107XG5cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5PFQ+KHBhcmFtOiBUIHwgVFtdKTogVFtdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW0pKSB7XG4gICAgcmV0dXJuIHBhcmFtO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbcGFyYW0gYXMgVF0gYXMgVFtdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYmpUb01hcDxUPihvYmo6IHsgW2s6IHN0cmluZ106IFQgfSkge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgaWYgKGtleXMuZXZlcnkoKGtleSkgPT4gcGFyc2VJbnQoa2V5KS50b1N0cmluZygpID09PSBrZXkpKSB7XG4gICAgcmV0dXJuIG5ldyBNYXA8bnVtYmVyLCBUPihrZXlzLm1hcCgoa2V5KSA9PiBbcGFyc2VJbnQoa2V5KSwgb2JqW2tleV1dKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBNYXA8c3RyaW5nLCBUPihPYmplY3QuZW50cmllcyhvYmopKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VMaXN0UGFyYW1zIHtcbiAgaWQ/OiBudW1iZXIgfCBudW1iZXJbXTtcbiAgbnVtPzogbnVtYmVyO1xuICBwYWdlPzogbnVtYmVyO1xuICBrZXl3b3JkPzogc3RyaW5nO1xuICBxdWVyeU1vZGU/OiBcImxpc3RcIiB8IFwiY291bnRcIiB8IFwiYm90aFwiO1xufVxuIl0sIm5hbWVzIjpbImFzQXJyYXkiLCJwYXJhbSIsIkFycmF5IiwiaXNBcnJheSIsIm9ialRvTWFwIiwib2JqIiwia2V5cyIsIk9iamVjdCIsImV2ZXJ5Iiwia2V5IiwicGFyc2VJbnQiLCJ0b1N0cmluZyIsIk1hcCIsIm1hcCIsImVudHJpZXMiXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sU0FBU0EsUUFBV0MsS0FBYztJQUN2QyxJQUFJQyxNQUFNQyxPQUFPLENBQUNGLFFBQVE7UUFDeEIsT0FBT0E7SUFDVCxPQUFPO1FBQ0wsT0FBTztZQUFDQTtTQUFXO0lBQ3JCO0FBQ0Y7QUFFQSxPQUFPLFNBQVNHLFNBQVlDLEdBQXVCO0lBQ2pELE1BQU1DLE9BQU9DLE9BQU9ELElBQUksQ0FBQ0Q7SUFDekIsSUFBSUMsS0FBS0UsS0FBSyxDQUFDLENBQUNDLE1BQVFDLFNBQVNELEtBQUtFLFFBQVEsT0FBT0YsTUFBTTtRQUN6RCxPQUFPLElBQUlHLElBQWVOLEtBQUtPLEdBQUcsQ0FBQyxDQUFDSixNQUFRO2dCQUFDQyxTQUFTRDtnQkFBTUosR0FBRyxDQUFDSSxJQUFJO2FBQUM7SUFDdkUsT0FBTztRQUNMLE9BQU8sSUFBSUcsSUFBZUwsT0FBT08sT0FBTyxDQUFDVDtJQUMzQztBQUNGIn0=
@@ -0,0 +1,89 @@
1
+ /**
2
+ * API 패키지 내부 상대 경로 (src/ 또는 dist/로 시작)
3
+ *
4
+ * **사용 위치**: API 패키지 내부 파일 참조
5
+ * **예시**:
6
+ * - `"src/application/user/user.model.ts"`
7
+ * - `"dist/application/user/user.model.js"`
8
+ *
9
+ * **기준점**: `Sonamu.apiRootPath` (일반적으로 프로젝트의 `/api` 디렉토리)
10
+ */
11
+ export type ApiRelativePath = `${"src" | "dist"}/${string}` | 'sonamu.config.ts';
12
+ /**
13
+ * 앱 루트 기준 상대 경로 (api/, web/ 등 타겟 디렉토리로 시작)
14
+ *
15
+ * **사용 위치**: 다른 타겟(api, web 등)의 파일 참조
16
+ * **예시**:
17
+ * - `"api/src/application/user/user.model.ts"`
18
+ * - `"web/src/pages/admin/users/index.tsx"`
19
+ * - `"app/dist/index.js"`
20
+ *
21
+ * **기준점**: `Sonamu.appRootPath` (일반적으로 모노레포 루트)
22
+ */
23
+ export type AppRelativePath = `${string}/${"src" | "dist"}/${string}`;
24
+ /**
25
+ * 시스템 절대 경로 (루트 / 부터 시작)
26
+ *
27
+ * **사용 위치**: 파일시스템 직접 접근, glob 패턴
28
+ * **예시**: `"/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"`
29
+ *
30
+ * **중요**:
31
+ * - import 시에는 로더가 알아서 src/dist 변환해주므로 어느 경로든 가능
32
+ * - fs 직접 접근 시에는 실제 존재하는 경로를 사용해야 함
33
+ * - Dev: src/*.ts 경로 사용
34
+ * - Prod: dist/*.js 경로 사용
35
+ */
36
+ export type AbsolutePath = `/${string}`;
37
+ /**
38
+ * 어떤 경로가 들어오든, 현재 실행 환경에 맞는 경로로 바꿔줍니다.
39
+ *
40
+ * "src/application/user/user.model.ts"가 들어왔을 때 개발 모드라면?
41
+ * -> "src/application/user/user.model.ts"
42
+ * "src/application/user/user.model.ts"가 들어왔을 때 배포 모드라면?
43
+ * -> "dist/application/user/user.model.js"
44
+ * "dist/application/user/user.model.js"가 들어왔을 때 개발 모드라면?
45
+ * -> "src/application/user/user.model.ts"
46
+ * "dist/application/user/user.model.js"가 들어왔을 때 배포 모드라면?
47
+ * -> "dist/application/user/user.model.js"
48
+ *
49
+ * "/src/application/user/user.model.ts"가 들어왔을 때 개발 모드라면?
50
+ * -> "/src/application/user/user.model.ts"
51
+ * "/src/application/user/user.model.ts"가 들어왔을 때 배포 모드라면?
52
+ * -> "/dist/application/user/user.model.js"
53
+ * "/dist/application/user/user.model.js"가 들어왔을 때 개발 모드라면?
54
+ * -> "/dist/application/user/user.model.js"
55
+ * "/dist/application/user/user.model.js"가 들어왔을 때 배포 모드라면?
56
+ * -> "/dist/application/user/user.model.js"
57
+ *
58
+ * "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"가 들어왔을 때 개발 모드라면?
59
+ * -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"
60
+ * "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"가 들어왔을 때 배포 모드라면?
61
+ * -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"
62
+ * "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"가 들어왔을 때 개발 모드라면?
63
+ * -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"
64
+ * "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"가 들어왔을 때 배포 모드라면?
65
+ * -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"
66
+ *
67
+ * "src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 개발 모드라면?
68
+ * -> "src/application/user/user.model.ts?hot=1234567890"
69
+ * "src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 배포 모드라면?
70
+ * -> "dist/application/user/user.model.js?hot=1234567890"
71
+ * "dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 개발 모드라면?
72
+ * -> "src/application/user/user.model.ts?hot=1234567890"
73
+ * "dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 배포 모드라면?
74
+ * -> "dist/application/user/user.model.js?hot=1234567890"
75
+ *
76
+ * "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 개발 모드라면?
77
+ * -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"
78
+ * "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 배포 모드라면?
79
+ * -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"
80
+ * "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 개발 모드라면?
81
+ * -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"
82
+ * "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 배포 모드라면?
83
+ * -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"
84
+ *
85
+ * @param anyPath
86
+ * @returns
87
+ */
88
+ export declare function runtimePath(anyPath: string, isDev?: boolean): string;
89
+ //# sourceMappingURL=path-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-utils.d.ts","sourceRoot":"","sources":["../../src/utils/path-utils.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GAAG,GAAG,KAAK,GAAG,MAAM,IAAI,MAAM,EAAE,GAAG,kBAAkB,CAAC;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GAAG,GAAG,MAAM,IAAI,KAAK,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GAAG,IAAI,MAAM,EAAE,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,OAA6B,GACnC,MAAM,CAMR"}
@@ -0,0 +1,60 @@
1
+ import { isHotReloadServer } from "./esm-utils.js";
2
+ /**
3
+ * 어떤 경로가 들어오든, 현재 실행 환경에 맞는 경로로 바꿔줍니다.
4
+ *
5
+ * "src/application/user/user.model.ts"가 들어왔을 때 개발 모드라면?
6
+ * -> "src/application/user/user.model.ts"
7
+ * "src/application/user/user.model.ts"가 들어왔을 때 배포 모드라면?
8
+ * -> "dist/application/user/user.model.js"
9
+ * "dist/application/user/user.model.js"가 들어왔을 때 개발 모드라면?
10
+ * -> "src/application/user/user.model.ts"
11
+ * "dist/application/user/user.model.js"가 들어왔을 때 배포 모드라면?
12
+ * -> "dist/application/user/user.model.js"
13
+ *
14
+ * "/src/application/user/user.model.ts"가 들어왔을 때 개발 모드라면?
15
+ * -> "/src/application/user/user.model.ts"
16
+ * "/src/application/user/user.model.ts"가 들어왔을 때 배포 모드라면?
17
+ * -> "/dist/application/user/user.model.js"
18
+ * "/dist/application/user/user.model.js"가 들어왔을 때 개발 모드라면?
19
+ * -> "/dist/application/user/user.model.js"
20
+ * "/dist/application/user/user.model.js"가 들어왔을 때 배포 모드라면?
21
+ * -> "/dist/application/user/user.model.js"
22
+ *
23
+ * "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"가 들어왔을 때 개발 모드라면?
24
+ * -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"
25
+ * "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"가 들어왔을 때 배포 모드라면?
26
+ * -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"
27
+ * "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"가 들어왔을 때 개발 모드라면?
28
+ * -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts"
29
+ * "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"가 들어왔을 때 배포 모드라면?
30
+ * -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js"
31
+ *
32
+ * "src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 개발 모드라면?
33
+ * -> "src/application/user/user.model.ts?hot=1234567890"
34
+ * "src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 배포 모드라면?
35
+ * -> "dist/application/user/user.model.js?hot=1234567890"
36
+ * "dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 개발 모드라면?
37
+ * -> "src/application/user/user.model.ts?hot=1234567890"
38
+ * "dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 배포 모드라면?
39
+ * -> "dist/application/user/user.model.js?hot=1234567890"
40
+ *
41
+ * "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 개발 모드라면?
42
+ * -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"
43
+ * "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"가 들어왔을 때 배포 모드라면?
44
+ * -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"
45
+ * "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 개발 모드라면?
46
+ * -> "/Users/potados/Projects/sonamu/api/src/application/user/user.model.ts?hot=1234567890"
47
+ * "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"가 들어왔을 때 배포 모드라면?
48
+ * -> "/Users/potados/Projects/sonamu/api/dist/application/user/user.model.js?hot=1234567890"
49
+ *
50
+ * @param anyPath
51
+ * @returns
52
+ */ export function runtimePath(anyPath, isDev = isHotReloadServer()) {
53
+ if (isDev) {
54
+ return anyPath.replace(/dist\//, "src/").replace(/\.js/, ".ts");
55
+ } else {
56
+ return anyPath.replace(/src\//, "dist/").replace(/\.ts/, ".js");
57
+ }
58
+ }
59
+
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wYXRoLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzSG90UmVsb2FkU2VydmVyIH0gZnJvbSBcIi4vZXNtLXV0aWxzLmpzXCI7XG5cbi8qKlxuICogQVBJIO2MqO2CpOyngCDrgrTrtoAg7IOB64yAIOqyveuhnCAoc3JjLyDrmJDripQgZGlzdC/roZwg7Iuc7J6RKVxuICpcbiAqICoq7IKs7JqpIOychOy5mCoqOiBBUEkg7Yyo7YKk7KeAIOuCtOu2gCDtjIzsnbwg7LC47KGwXG4gKiAqKuyYiOyLnCoqOlxuICogLSBgXCJzcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCJgXG4gKiAtIGBcImRpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzXCJgXG4gKlxuICogKirquLDspIDsoJAqKjogYFNvbmFtdS5hcGlSb290UGF0aGAgKOydvOuwmOyggeycvOuhnCDtlITroZzsoJ3tirjsnZggYC9hcGlgIOuUlOugie2GoOumrClcbiAqL1xuZXhwb3J0IHR5cGUgQXBpUmVsYXRpdmVQYXRoID0gYCR7XCJzcmNcIiB8IFwiZGlzdFwifS8ke3N0cmluZ31gIHwgJ3NvbmFtdS5jb25maWcudHMnO1xuXG4vKipcbiAqIOyVsSDro6jtirgg6riw7KSAIOyDgeuMgCDqsr3roZwgKGFwaS8sIHdlYi8g65OxIO2DgOqynyDrlJTroInthqDrpqzroZwg7Iuc7J6RKVxuICpcbiAqICoq7IKs7JqpIOychOy5mCoqOiDri6Trpbgg7YOA6rKfKGFwaSwgd2ViIOuTsSnsnZgg7YyM7J28IOywuOyhsFxuICogKirsmIjsi5wqKjpcbiAqIC0gYFwiYXBpL3NyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcImBcbiAqIC0gYFwid2ViL3NyYy9wYWdlcy9hZG1pbi91c2Vycy9pbmRleC50c3hcImBcbiAqIC0gYFwiYXBwL2Rpc3QvaW5kZXguanNcImBcbiAqXG4gKiAqKuq4sOykgOygkCoqOiBgU29uYW11LmFwcFJvb3RQYXRoYCAo7J2867CY7KCB7Jy866GcIOuqqOuFuOugiO2PrCDro6jtirgpXG4gKi9cbmV4cG9ydCB0eXBlIEFwcFJlbGF0aXZlUGF0aCA9IGAke3N0cmluZ30vJHtcInNyY1wiIHwgXCJkaXN0XCJ9LyR7c3RyaW5nfWA7XG5cbi8qKlxuICog7Iuc7Iqk7YWcIOygiOuMgCDqsr3roZwgKOujqO2KuCAvIOu2gO2EsCDsi5zsnpEpXG4gKlxuICogKirsgqzsmqkg7JyE7LmYKio6IO2MjOydvOyLnOyKpO2FnCDsp4HsoJEg7KCR6re8LCBnbG9iIO2MqO2EtFxuICogKirsmIjsi5wqKjogYFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCJgXG4gKlxuICogKirspJHsmpQqKjpcbiAqIC0gaW1wb3J0IOyLnOyXkOuKlCDroZzrjZTqsIAg7JWM7JWE7IScIHNyYy9kaXN0IOuzgO2ZmO2VtOyjvOuvgOuhnCDslrTripAg6rK966Gc65OgIOqwgOuKpVxuICogLSBmcyDsp4HsoJEg7KCR6re8IOyLnOyXkOuKlCDsi6TsoJwg7KG07J6s7ZWY64qUIOqyveuhnOulvCDsgqzsmqntlbTslbwg7ZWoXG4gKiAgIC0gRGV2OiBzcmMvKi50cyDqsr3roZwg7IKs7JqpXG4gKiAgIC0gUHJvZDogZGlzdC8qLmpzIOqyveuhnCDsgqzsmqlcbiAqL1xuZXhwb3J0IHR5cGUgQWJzb2x1dGVQYXRoID0gYC8ke3N0cmluZ31gO1xuXG4vKipcbiAqIOyWtOuWpCDqsr3roZzqsIAg65Ok7Ja07Jik65OgLCDtmITsnqwg7Iuk7ZaJIO2ZmOqyveyXkCDrp57ripQg6rK966Gc66GcIOuwlOq/lOykjeuLiOuLpC5cbiAqXG4gKiBcInNyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcIuqwgCDrk6TslrTsmZTsnYQg65WMIOqwnOuwnCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcInNyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcIlxuICogXCJzcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDrsLDtj6wg66qo65Oc652866m0P1xuICogLT4gXCJkaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qc1wiXG4gKiBcImRpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDqsJzrsJwg66qo65Oc652866m0P1xuICogLT4gXCJzcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCJcbiAqIFwiZGlzdC9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwuanNcIuqwgCDrk6TslrTsmZTsnYQg65WMIOuwsO2PrCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcImRpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzXCJcbiAqXG4gKiBcIi9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDqsJzrsJwg66qo65Oc652866m0P1xuICogLT4gXCIvc3JjL2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC50c1wiXG4gKiBcIi9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDrsLDtj6wg66qo65Oc652866m0P1xuICogLT4gXCIvZGlzdC9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwuanNcIlxuICogXCIvZGlzdC9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwuanNcIuqwgCDrk6TslrTsmZTsnYQg65WMIOqwnOuwnCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcIi9kaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qc1wiXG4gKiBcIi9kaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qc1wi6rCAIOuTpOyWtOyZlOydhCDrlYwg67Cw7Y+sIOuqqOuTnOudvOuptD9cbiAqIC0+IFwiL2Rpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzXCJcbiAqXG4gKiBcIi9Vc2Vycy9wb3RhZG9zL1Byb2plY3RzL3NvbmFtdS9hcGkvc3JjL2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC50c1wi6rCAIOuTpOyWtOyZlOydhCDrlYwg6rCc67CcIOuqqOuTnOudvOuptD9cbiAqIC0+IFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCJcbiAqIFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDrsLDtj6wg66qo65Oc652866m0P1xuICogLT4gXCIvVXNlcnMvcG90YWRvcy9Qcm9qZWN0cy9zb25hbXUvYXBpL2Rpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzXCJcbiAqIFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9kaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qc1wi6rCAIOuTpOyWtOyZlOydhCDrlYwg6rCc67CcIOuqqOuTnOudvOuptD9cbiAqIC0+IFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCJcbiAqIFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9kaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qc1wi6rCAIOuTpOyWtOyZlOydhCDrlYwg67Cw7Y+sIOuqqOuTnOudvOuptD9cbiAqIC0+IFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9kaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qc1wiXG4gKlxuICogXCJzcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzP2hvdD0xMjM0NTY3ODkwXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDqsJzrsJwg66qo65Oc652866m0P1xuICogLT4gXCJzcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzP2hvdD0xMjM0NTY3ODkwXCJcbiAqIFwic3JjL2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC50cz9ob3Q9MTIzNDU2Nzg5MFwi6rCAIOuTpOyWtOyZlOydhCDrlYwg67Cw7Y+sIOuqqOuTnOudvOuptD9cbiAqIC0+IFwiZGlzdC9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwuanM/aG90PTEyMzQ1Njc4OTBcIlxuICogXCJkaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qcz9ob3Q9MTIzNDU2Nzg5MFwi6rCAIOuTpOyWtOyZlOydhCDrlYwg6rCc67CcIOuqqOuTnOudvOuptD9cbiAqIC0+IFwic3JjL2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC50cz9ob3Q9MTIzNDU2Nzg5MFwiXG4gKiBcImRpc3QvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLmpzP2hvdD0xMjM0NTY3ODkwXCLqsIAg65Ok7Ja07JmU7J2EIOuVjCDrsLDtj6wg66qo65Oc652866m0P1xuICogLT4gXCJkaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qcz9ob3Q9MTIzNDU2Nzg5MFwiXG4gKlxuICogXCIvVXNlcnMvcG90YWRvcy9Qcm9qZWN0cy9zb25hbXUvYXBpL3NyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHM/aG90PTEyMzQ1Njc4OTBcIuqwgCDrk6TslrTsmZTsnYQg65WMIOqwnOuwnCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcIi9Vc2Vycy9wb3RhZG9zL1Byb2plY3RzL3NvbmFtdS9hcGkvc3JjL2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC50cz9ob3Q9MTIzNDU2Nzg5MFwiXG4gKiBcIi9Vc2Vycy9wb3RhZG9zL1Byb2plY3RzL3NvbmFtdS9hcGkvc3JjL2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC50cz9ob3Q9MTIzNDU2Nzg5MFwi6rCAIOuTpOyWtOyZlOydhCDrlYwg67Cw7Y+sIOuqqOuTnOudvOuptD9cbiAqIC0+IFwiL1VzZXJzL3BvdGFkb3MvUHJvamVjdHMvc29uYW11L2FwaS9kaXN0L2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC5qcz9ob3Q9MTIzNDU2Nzg5MFwiXG4gKiBcIi9Vc2Vycy9wb3RhZG9zL1Byb2plY3RzL3NvbmFtdS9hcGkvZGlzdC9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwuanM/aG90PTEyMzQ1Njc4OTBcIuqwgCDrk6TslrTsmZTsnYQg65WMIOqwnOuwnCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcIi9Vc2Vycy9wb3RhZG9zL1Byb2plY3RzL3NvbmFtdS9hcGkvc3JjL2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC50cz9ob3Q9MTIzNDU2Nzg5MFwiXG4gKiBcIi9Vc2Vycy9wb3RhZG9zL1Byb2plY3RzL3NvbmFtdS9hcGkvZGlzdC9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwuanM/aG90PTEyMzQ1Njc4OTBcIuqwgCDrk6TslrTsmZTsnYQg65WMIOuwsO2PrCDrqqjrk5zrnbzrqbQ/XG4gKiAtPiBcIi9Vc2Vycy9wb3RhZG9zL1Byb2plY3RzL3NvbmFtdS9hcGkvZGlzdC9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwuanM/aG90PTEyMzQ1Njc4OTBcIlxuICpcbiAqIEBwYXJhbSBhbnlQYXRoXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcnVudGltZVBhdGgoXG4gIGFueVBhdGg6IHN0cmluZyxcbiAgaXNEZXY6IGJvb2xlYW4gPSBpc0hvdFJlbG9hZFNlcnZlcigpXG4pOiBzdHJpbmcge1xuICBpZiAoaXNEZXYpIHtcbiAgICByZXR1cm4gYW55UGF0aC5yZXBsYWNlKC9kaXN0XFwvLywgXCJzcmMvXCIpLnJlcGxhY2UoL1xcLmpzLywgXCIudHNcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGFueVBhdGgucmVwbGFjZSgvc3JjXFwvLywgXCJkaXN0L1wiKS5yZXBsYWNlKC9cXC50cy8sIFwiLmpzXCIpO1xuICB9XG59XG4iXSwibmFtZXMiOlsiaXNIb3RSZWxvYWRTZXJ2ZXIiLCJydW50aW1lUGF0aCIsImFueVBhdGgiLCJpc0RldiIsInJlcGxhY2UiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGlCQUFpQixRQUFRLGlCQUFpQjtBQXlDbkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0RDLEdBQ0QsT0FBTyxTQUFTQyxZQUNkQyxPQUFlLEVBQ2ZDLFFBQWlCSCxtQkFBbUI7SUFFcEMsSUFBSUcsT0FBTztRQUNULE9BQU9ELFFBQVFFLE9BQU8sQ0FBQyxVQUFVLFFBQVFBLE9BQU8sQ0FBQyxRQUFRO0lBQzNELE9BQU87UUFDTCxPQUFPRixRQUFRRSxPQUFPLENBQUMsU0FBUyxTQUFTQSxPQUFPLENBQUMsUUFBUTtJQUMzRDtBQUNGIn0=
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 주어진 작업을 실행합니다.
3
+ * 주어진 프로세스 이벤트(=시그널)가 발생하였을 때에도 최대 한계(delayBeforeShutdown) 동안 작업을 기다린 후 종료합니다.
4
+ * @param {() => Promise<void>} job - 실행할 작업
5
+ * @param {event: NodeJS.Signals; delayBeforeShutdown: number} options - 옵션
6
+ * @param {NodeJS.Signals} options.event - 프로세스 이벤트
7
+ * @param {number} options.delayBeforeShutdown - 최대 한계 시간
8
+ */
9
+ export declare function runWithGracefulShutdown(job: () => Promise<void>, { whenThisHappens: event, waitForUpTo: delayBeforeShutdown, }?: {
10
+ whenThisHappens: NodeJS.Signals;
11
+ waitForUpTo: number;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=process-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-utils.d.ts","sourceRoot":"","sources":["../../src/utils/process-utils.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACxB,EACE,eAAe,EAAE,KAAK,EACtB,WAAW,EAAE,mBAAmB,GACjC,GAAE;IAAE,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAGxD,GACA,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -0,0 +1,36 @@
1
+ import chalk from "chalk";
2
+ import { setTimeout as setTimeoutPromises } from "node:timers/promises";
3
+ /**
4
+ * 주어진 작업을 실행합니다.
5
+ * 주어진 프로세스 이벤트(=시그널)가 발생하였을 때에도 최대 한계(delayBeforeShutdown) 동안 작업을 기다린 후 종료합니다.
6
+ * @param {() => Promise<void>} job - 실행할 작업
7
+ * @param {event: NodeJS.Signals; delayBeforeShutdown: number} options - 옵션
8
+ * @param {NodeJS.Signals} options.event - 프로세스 이벤트
9
+ * @param {number} options.delayBeforeShutdown - 최대 한계 시간
10
+ */ export async function runWithGracefulShutdown(job, { whenThisHappens: event, waitForUpTo: delayBeforeShutdown } = {
11
+ whenThisHappens: "SIGUSR2",
12
+ waitForUpTo: 20000
13
+ }) {
14
+ let isRunning = true;
15
+ const abortController = new AbortController();
16
+ const onEvent = async ()=>{
17
+ if (!isRunning) {
18
+ process.exit(0);
19
+ }
20
+ console.log(chalk.magentaBright(`wait for syncing done....`));
21
+ try {
22
+ await setTimeoutPromises(delayBeforeShutdown, "waiting-sync", {
23
+ signal: abortController.signal
24
+ });
25
+ } catch {}
26
+ console.log(chalk.magentaBright(`Syncing DONE!`));
27
+ process.exit(0);
28
+ };
29
+ process.on(event, onEvent);
30
+ await job();
31
+ isRunning = false;
32
+ abortController.abort();
33
+ process.off(event, onEvent);
34
+ }
35
+
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wcm9jZXNzLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2V0VGltZW91dFByb21pc2VzIH0gZnJvbSBcInRpbWVycy9wcm9taXNlc1wiO1xuXG4vKipcbiAqIOyjvOyWtOynhCDsnpHsl4XsnYQg7Iuk7ZaJ7ZWp64uI64ukLlxuICog7KO87Ja07KeEIO2UhOuhnOyEuOyKpCDsnbTrsqTtirgoPeyLnOq3uOuEkCnqsIAg67Cc7IOd7ZWY7JiA7J2EIOuVjOyXkOuPhCDstZzrjIAg7ZWc6rOEKGRlbGF5QmVmb3JlU2h1dGRvd24pIOuPmeyViCDsnpHsl4XsnYQg6riw64uk66awIO2bhCDsooXro4ztlanri4jri6QuXG4gKiBAcGFyYW0geygpID0+IFByb21pc2U8dm9pZD59IGpvYiAtIOyLpO2Wie2VoCDsnpHsl4VcbiAqIEBwYXJhbSB7ZXZlbnQ6IE5vZGVKUy5TaWduYWxzOyBkZWxheUJlZm9yZVNodXRkb3duOiBudW1iZXJ9IG9wdGlvbnMgLSDsmLXshZhcbiAqIEBwYXJhbSB7Tm9kZUpTLlNpZ25hbHN9IG9wdGlvbnMuZXZlbnQgLSDtlITroZzshLjsiqQg7J2067Kk7Yq4XG4gKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5kZWxheUJlZm9yZVNodXRkb3duIC0g7LWc64yAIO2VnOqzhCDsi5zqsIRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldpdGhHcmFjZWZ1bFNodXRkb3duKFxuICBqb2I6ICgpID0+IFByb21pc2U8dm9pZD4sXG4gIHtcbiAgICB3aGVuVGhpc0hhcHBlbnM6IGV2ZW50LFxuICAgIHdhaXRGb3JVcFRvOiBkZWxheUJlZm9yZVNodXRkb3duLFxuICB9OiB7IHdoZW5UaGlzSGFwcGVuczogTm9kZUpTLlNpZ25hbHM7IHdhaXRGb3JVcFRvOiBudW1iZXIgfSA9IHtcbiAgICB3aGVuVGhpc0hhcHBlbnM6IFwiU0lHVVNSMlwiLFxuICAgIHdhaXRGb3JVcFRvOiAyMDAwMCxcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBpc1J1bm5pbmcgPSB0cnVlIGFzIGJvb2xlYW47XG5cbiAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCBvbkV2ZW50ID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghaXNSdW5uaW5nKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGNoYWxrLm1hZ2VudGFCcmlnaHQoYHdhaXQgZm9yIHN5bmNpbmcgZG9uZS4uLi5gKSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2V0VGltZW91dFByb21pc2VzKGRlbGF5QmVmb3JlU2h1dGRvd24sIFwid2FpdGluZy1zeW5jXCIsIHtcbiAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7fVxuICAgIGNvbnNvbGUubG9nKGNoYWxrLm1hZ2VudGFCcmlnaHQoYFN5bmNpbmcgRE9ORSFgKSk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9O1xuICBwcm9jZXNzLm9uKGV2ZW50LCBvbkV2ZW50KTtcblxuICBhd2FpdCBqb2IoKTtcblxuICBpc1J1bm5pbmcgPSBmYWxzZTtcbiAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gIHByb2Nlc3Mub2ZmKGV2ZW50LCBvbkV2ZW50KTtcbn1cbiJdLCJuYW1lcyI6WyJjaGFsayIsInNldFRpbWVvdXQiLCJzZXRUaW1lb3V0UHJvbWlzZXMiLCJydW5XaXRoR3JhY2VmdWxTaHV0ZG93biIsImpvYiIsIndoZW5UaGlzSGFwcGVucyIsImV2ZW50Iiwid2FpdEZvclVwVG8iLCJkZWxheUJlZm9yZVNodXRkb3duIiwiaXNSdW5uaW5nIiwiYWJvcnRDb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwib25FdmVudCIsInByb2Nlc3MiLCJleGl0IiwiY29uc29sZSIsImxvZyIsIm1hZ2VudGFCcmlnaHQiLCJzaWduYWwiLCJvbiIsImFib3J0Iiwib2ZmIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsU0FBU0MsY0FBY0Msa0JBQWtCLFFBQVEsdUJBQWtCO0FBRW5FOzs7Ozs7O0NBT0MsR0FDRCxPQUFPLGVBQWVDLHdCQUNwQkMsR0FBd0IsRUFDeEIsRUFDRUMsaUJBQWlCQyxLQUFLLEVBQ3RCQyxhQUFhQyxtQkFBbUIsRUFDeUIsR0FBRztJQUM1REgsaUJBQWlCO0lBQ2pCRSxhQUFhO0FBQ2YsQ0FBQztJQUVELElBQUlFLFlBQVk7SUFFaEIsTUFBTUMsa0JBQWtCLElBQUlDO0lBQzVCLE1BQU1DLFVBQVU7UUFDZCxJQUFJLENBQUNILFdBQVc7WUFDZEksUUFBUUMsSUFBSSxDQUFDO1FBQ2Y7UUFDQUMsUUFBUUMsR0FBRyxDQUFDaEIsTUFBTWlCLGFBQWEsQ0FBQyxDQUFDLHlCQUF5QixDQUFDO1FBRTNELElBQUk7WUFDRixNQUFNZixtQkFBbUJNLHFCQUFxQixnQkFBZ0I7Z0JBQzVEVSxRQUFRUixnQkFBZ0JRLE1BQU07WUFDaEM7UUFDRixFQUFFLE9BQU0sQ0FBQztRQUNUSCxRQUFRQyxHQUFHLENBQUNoQixNQUFNaUIsYUFBYSxDQUFDLENBQUMsYUFBYSxDQUFDO1FBQy9DSixRQUFRQyxJQUFJLENBQUM7SUFDZjtJQUNBRCxRQUFRTSxFQUFFLENBQUNiLE9BQU9NO0lBRWxCLE1BQU1SO0lBRU5LLFlBQVk7SUFDWkMsZ0JBQWdCVSxLQUFLO0lBQ3JCUCxRQUFRUSxHQUFHLENBQUNmLE9BQU9NO0FBQ3JCIn0=
@@ -1,2 +1,35 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get getTableName(){return getTableName},get getTableNamesFromWhere(){return getTableNamesFromWhere}});var _lodash=/*#__PURE__*/_interop_require_default(require("lodash"));function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function getTableName(expr){if("table"in expr&&expr.table!==null){return typeof expr.table==="string"?expr.table:expr.table.value}return null}function getTableNamesFromWhere(ast){var extractTableNames=function(where){if(where===null||!(where.type==="binary_expr"&&"left"in where)){return[]}var extractTableName=function(expr){if(expr.type==="column_ref"){var table=getTableName(expr);return table?[table]:[]}else if(expr.type==="binary_expr"&&"left"in expr){return extractTableNames(expr)}return[]};return _to_consumable_array(extractTableName(where.left)).concat(_to_consumable_array(extractTableName(where.right)))};return _lodash.default.uniq((Array.isArray(ast)?ast:[ast]).flatMap(function(a){return a.type==="select"||a.type==="update"||a.type==="delete"?extractTableNames(a.where):[]}))}
2
- //# sourceMappingURL=sql-parser.js.map
1
+ import * as _ from "lodash-es";
2
+ export function getTableName(expr) {
3
+ if ("table" in expr && expr.table !== null) {
4
+ return typeof expr.table === "string" ? expr.table : expr.table.value;
5
+ }
6
+ return null;
7
+ }
8
+ // where 조건에 사용된 테이블명을 추출
9
+ export function getTableNamesFromWhere(ast) {
10
+ const extractTableNames = (where)=>{
11
+ if (where === null || !(where.type === "binary_expr" && "left" in where)) {
12
+ return [];
13
+ }
14
+ const extractTableName = (expr)=>{
15
+ if (expr.type === "column_ref") {
16
+ const table = getTableName(expr);
17
+ return table ? [
18
+ table
19
+ ] : [];
20
+ } else if (expr.type === "binary_expr" && "left" in expr) {
21
+ return extractTableNames(expr);
22
+ }
23
+ return [];
24
+ };
25
+ return [
26
+ ...extractTableName(where.left),
27
+ ...extractTableName(where.right)
28
+ ];
29
+ };
30
+ return _.uniq((Array.isArray(ast) ? ast : [
31
+ ast
32
+ ]).flatMap((a)=>a.type === "select" || a.type === "update" || a.type === "delete" ? extractTableNames(a.where) : []));
33
+ }
34
+
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zcWwtcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgQVNULCBDb2x1bW5SZWYsIEV4cHIsIEV4cHJlc3Npb25WYWx1ZSwgU2VsZWN0IH0gZnJvbSBcIm5vZGUtc3FsLXBhcnNlclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVOYW1lKGV4cHI6IENvbHVtblJlZikge1xuICBpZiAoXCJ0YWJsZVwiIGluIGV4cHIgJiYgZXhwci50YWJsZSAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0eXBlb2YgZXhwci50YWJsZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBleHByLnRhYmxlXG4gICAgICA6IChleHByLnRhYmxlIGFzIHsgdHlwZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0pLnZhbHVlO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyB3aGVyZSDsobDqsbTsl5Ag7IKs7Jqp65CcIO2FjOydtOu4lOuqheydhCDstpTstpxcbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZU5hbWVzRnJvbVdoZXJlKGFzdDogQVNUIHwgQVNUW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGV4dHJhY3RUYWJsZU5hbWVzID0gKHdoZXJlOiBTZWxlY3RbXCJ3aGVyZVwiXSk6IHN0cmluZ1tdID0+IHtcbiAgICBpZiAod2hlcmUgPT09IG51bGwgfHwgISh3aGVyZS50eXBlID09PSBcImJpbmFyeV9leHByXCIgJiYgXCJsZWZ0XCIgaW4gd2hlcmUpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZXh0cmFjdFRhYmxlTmFtZSA9IChleHByOiBFeHByIHwgRXhwcmVzc2lvblZhbHVlKTogc3RyaW5nW10gPT4ge1xuICAgICAgaWYgKGV4cHIudHlwZSA9PT0gXCJjb2x1bW5fcmVmXCIpIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBnZXRUYWJsZU5hbWUoZXhwciBhcyBDb2x1bW5SZWYpO1xuICAgICAgICByZXR1cm4gdGFibGUgPyBbdGFibGVdIDogW107XG4gICAgICB9IGVsc2UgaWYgKGV4cHIudHlwZSA9PT0gXCJiaW5hcnlfZXhwclwiICYmIFwibGVmdFwiIGluIGV4cHIpIHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RUYWJsZU5hbWVzKGV4cHIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH07XG5cbiAgICByZXR1cm4gWy4uLmV4dHJhY3RUYWJsZU5hbWUod2hlcmUubGVmdCksIC4uLmV4dHJhY3RUYWJsZU5hbWUod2hlcmUucmlnaHQpXTtcbiAgfTtcblxuICByZXR1cm4gXy51bmlxKFxuICAgIChBcnJheS5pc0FycmF5KGFzdCkgPyBhc3QgOiBbYXN0XSkuZmxhdE1hcCgoYSkgPT5cbiAgICAgIGEudHlwZSA9PT0gXCJzZWxlY3RcIiB8fCBhLnR5cGUgPT09IFwidXBkYXRlXCIgfHwgYS50eXBlID09PSBcImRlbGV0ZVwiXG4gICAgICAgID8gZXh0cmFjdFRhYmxlTmFtZXMoYS53aGVyZSlcbiAgICAgICAgOiBbXVxuICAgIClcbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJfIiwiZ2V0VGFibGVOYW1lIiwiZXhwciIsInRhYmxlIiwidmFsdWUiLCJnZXRUYWJsZU5hbWVzRnJvbVdoZXJlIiwiYXN0IiwiZXh0cmFjdFRhYmxlTmFtZXMiLCJ3aGVyZSIsInR5cGUiLCJleHRyYWN0VGFibGVOYW1lIiwibGVmdCIsInJpZ2h0IiwidW5pcSIsIkFycmF5IiwiaXNBcnJheSIsImZsYXRNYXAiLCJhIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZQSxPQUFPLFlBQVk7QUFHL0IsT0FBTyxTQUFTQyxhQUFhQyxJQUFlO0lBQzFDLElBQUksV0FBV0EsUUFBUUEsS0FBS0MsS0FBSyxLQUFLLE1BQU07UUFDMUMsT0FBTyxPQUFPRCxLQUFLQyxLQUFLLEtBQUssV0FDekJELEtBQUtDLEtBQUssR0FDVixBQUFDRCxLQUFLQyxLQUFLLENBQXFDQyxLQUFLO0lBQzNEO0lBQ0EsT0FBTztBQUNUO0FBRUEseUJBQXlCO0FBQ3pCLE9BQU8sU0FBU0MsdUJBQXVCQyxHQUFnQjtJQUNyRCxNQUFNQyxvQkFBb0IsQ0FBQ0M7UUFDekIsSUFBSUEsVUFBVSxRQUFRLENBQUVBLENBQUFBLE1BQU1DLElBQUksS0FBSyxpQkFBaUIsVUFBVUQsS0FBSSxHQUFJO1lBQ3hFLE9BQU8sRUFBRTtRQUNYO1FBRUEsTUFBTUUsbUJBQW1CLENBQUNSO1lBQ3hCLElBQUlBLEtBQUtPLElBQUksS0FBSyxjQUFjO2dCQUM5QixNQUFNTixRQUFRRixhQUFhQztnQkFDM0IsT0FBT0MsUUFBUTtvQkFBQ0E7aUJBQU0sR0FBRyxFQUFFO1lBQzdCLE9BQU8sSUFBSUQsS0FBS08sSUFBSSxLQUFLLGlCQUFpQixVQUFVUCxNQUFNO2dCQUN4RCxPQUFPSyxrQkFBa0JMO1lBQzNCO1lBQ0EsT0FBTyxFQUFFO1FBQ1g7UUFFQSxPQUFPO2VBQUlRLGlCQUFpQkYsTUFBTUcsSUFBSTtlQUFNRCxpQkFBaUJGLE1BQU1JLEtBQUs7U0FBRTtJQUM1RTtJQUVBLE9BQU9aLEVBQUVhLElBQUksQ0FDWCxBQUFDQyxDQUFBQSxNQUFNQyxPQUFPLENBQUNULE9BQU9BLE1BQU07UUFBQ0E7S0FBSSxBQUFELEVBQUdVLE9BQU8sQ0FBQyxDQUFDQyxJQUMxQ0EsRUFBRVIsSUFBSSxLQUFLLFlBQVlRLEVBQUVSLElBQUksS0FBSyxZQUFZUSxFQUFFUixJQUFJLEtBQUssV0FDckRGLGtCQUFrQlUsRUFBRVQsS0FBSyxJQUN6QixFQUFFO0FBR1oifQ==
@@ -1,9 +1,6 @@
1
- export declare function globAsync(pathPattern: string): Promise<string[]>;
2
- export declare function importMultiple(filePaths: string[], doRefresh?: boolean): Promise<{
3
- filePath: string;
4
- imported: any;
5
- }[]>;
6
- export declare function findAppRootPath(): Promise<string>;
7
- export declare function findApiRootPath(): string;
1
+ import { AbsolutePath } from "./path-utils";
2
+ export declare function findAppRootPath(): Promise<AbsolutePath>;
3
+ export declare function findApiRootPath(): AbsolutePath;
8
4
  export declare function nonNullable<T>(value: T): value is NonNullable<T>;
5
+ export declare function exhaustive(_param: never): void;
9
6
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAIA,wBAAsB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAMtE;AACD,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE,EAAE,CAAC,CAsBhD;AACD,wBAAsB,eAAe,oBAGpC;AAED,wBAAgB,eAAe,WAmB9B;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAEhE"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAM7D;AAED,wBAAgB,eAAe,IAAI,YAAY,CAmB9C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAEhE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,QAEvC"}