sonamu 0.4.14 → 0.5.1

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 (385) 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 +19 -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 +84 -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/bin/build-config.d.ts +9 -0
  31. package/dist/bin/build-config.d.ts.map +1 -0
  32. package/dist/bin/build-config.js +2 -0
  33. package/dist/bin/build-config.js.map +1 -0
  34. package/dist/bin/cli-wrapper.d.ts +2 -0
  35. package/dist/bin/cli-wrapper.d.ts.map +1 -0
  36. package/dist/bin/cli-wrapper.js +1 -38
  37. package/dist/bin/cli-wrapper.js.map +1 -1
  38. package/dist/bin/cli.d.ts +2 -2
  39. package/dist/bin/cli.d.ts.map +1 -0
  40. package/dist/bin/cli.js +1 -903
  41. package/dist/bin/cli.js.map +1 -1
  42. package/dist/database/_batch_update.d.ts +15 -0
  43. package/dist/database/_batch_update.d.ts.map +1 -0
  44. package/dist/database/_batch_update.js +2 -0
  45. package/dist/database/_batch_update.js.map +1 -0
  46. package/dist/database/base-model.d.ts +48 -0
  47. package/dist/database/base-model.d.ts.map +1 -0
  48. package/dist/database/base-model.js +2 -0
  49. package/dist/database/base-model.js.map +1 -0
  50. package/dist/database/code-generator.d.ts +13 -0
  51. package/dist/database/code-generator.d.ts.map +1 -0
  52. package/dist/database/code-generator.js +2 -0
  53. package/dist/database/code-generator.js.map +1 -0
  54. package/dist/database/db.d.ts +40 -0
  55. package/dist/database/db.d.ts.map +1 -0
  56. package/dist/database/db.js +2 -0
  57. package/dist/database/db.js.map +1 -0
  58. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +2 -0
  59. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +1 -0
  60. package/dist/database/knex-plugins/knex-on-duplicate-update.js +2 -0
  61. package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +1 -0
  62. package/dist/database/puri-wrapper.d.ts +34 -0
  63. package/dist/database/puri-wrapper.d.ts.map +1 -0
  64. package/dist/database/puri-wrapper.js +2 -0
  65. package/dist/database/puri-wrapper.js.map +1 -0
  66. package/dist/database/puri.d.ts +83 -0
  67. package/dist/database/puri.d.ts.map +1 -0
  68. package/dist/database/puri.js +2 -0
  69. package/dist/database/puri.js.map +1 -0
  70. package/dist/database/puri.types.d.ts +60 -0
  71. package/dist/database/puri.types.d.ts.map +1 -0
  72. package/dist/database/puri.types.js +2 -0
  73. package/dist/database/puri.types.js.map +1 -0
  74. package/dist/database/transaction-context.d.ts +9 -0
  75. package/dist/database/transaction-context.d.ts.map +1 -0
  76. package/dist/database/transaction-context.js +2 -0
  77. package/dist/database/transaction-context.js.map +1 -0
  78. package/dist/database/upsert-builder.d.ts +34 -0
  79. package/dist/database/upsert-builder.d.ts.map +1 -0
  80. package/dist/database/upsert-builder.js +2 -0
  81. package/dist/database/upsert-builder.js.map +1 -0
  82. package/dist/entity/entity-manager.d.ts +32 -0
  83. package/dist/entity/entity-manager.d.ts.map +1 -0
  84. package/dist/entity/entity-manager.js +2 -0
  85. package/dist/entity/entity-manager.js.map +1 -0
  86. package/dist/entity/entity-utils.d.ts +61 -0
  87. package/dist/entity/entity-utils.d.ts.map +1 -0
  88. package/dist/entity/entity-utils.js +2 -0
  89. package/dist/entity/entity-utils.js.map +1 -0
  90. package/dist/entity/entity.d.ts +62 -0
  91. package/dist/entity/entity.d.ts.map +1 -0
  92. package/dist/entity/entity.js +2 -0
  93. package/dist/entity/entity.js.map +1 -0
  94. package/dist/entity/migrator.d.ts +135 -0
  95. package/dist/entity/migrator.d.ts.map +1 -0
  96. package/dist/entity/migrator.js +2 -0
  97. package/dist/entity/migrator.js.map +1 -0
  98. package/dist/exceptions/error-handler.d.ts +3 -0
  99. package/dist/exceptions/error-handler.d.ts.map +1 -0
  100. package/dist/exceptions/error-handler.js +2 -0
  101. package/dist/exceptions/error-handler.js.map +1 -0
  102. package/dist/exceptions/so-exceptions.d.ts +48 -0
  103. package/dist/exceptions/so-exceptions.d.ts.map +1 -0
  104. package/dist/exceptions/so-exceptions.js +2 -0
  105. package/dist/exceptions/so-exceptions.js.map +1 -0
  106. package/dist/file-storage/driver.d.ts +48 -0
  107. package/dist/file-storage/driver.d.ts.map +1 -0
  108. package/dist/file-storage/driver.js +2 -0
  109. package/dist/file-storage/driver.js.map +1 -0
  110. package/dist/file-storage/file-storage.d.ts +50 -0
  111. package/dist/file-storage/file-storage.d.ts.map +1 -0
  112. package/dist/file-storage/file-storage.js +2 -0
  113. package/dist/file-storage/file-storage.js.map +1 -0
  114. package/dist/index.d.ts +23 -813
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +1 -433
  117. package/dist/index.js.map +1 -1
  118. package/dist/migration/code-generation.d.ts +15 -0
  119. package/dist/migration/code-generation.d.ts.map +1 -0
  120. package/dist/migration/code-generation.js +2 -0
  121. package/dist/migration/code-generation.js.map +1 -0
  122. package/dist/migration/migration-set.d.ts +17 -0
  123. package/dist/migration/migration-set.d.ts.map +1 -0
  124. package/dist/migration/migration-set.js +2 -0
  125. package/dist/migration/migration-set.js.map +1 -0
  126. package/dist/migration/migrator.d.ts +130 -0
  127. package/dist/migration/migrator.d.ts.map +1 -0
  128. package/dist/migration/migrator.js +2 -0
  129. package/dist/migration/migrator.js.map +1 -0
  130. package/dist/migration/types.d.ts +52 -0
  131. package/dist/migration/types.d.ts.map +1 -0
  132. package/dist/migration/types.js +2 -0
  133. package/dist/migration/types.js.map +1 -0
  134. package/dist/stream/index.d.ts +2 -0
  135. package/dist/stream/index.d.ts.map +1 -0
  136. package/dist/stream/index.js +2 -0
  137. package/dist/stream/index.js.map +1 -0
  138. package/dist/stream/sse.d.ts +13 -0
  139. package/dist/stream/sse.d.ts.map +1 -0
  140. package/dist/stream/sse.js +2 -0
  141. package/dist/stream/sse.js.map +1 -0
  142. package/dist/syncer/index.d.ts +2 -0
  143. package/dist/syncer/index.d.ts.map +1 -0
  144. package/dist/syncer/index.js +2 -0
  145. package/dist/syncer/index.js.map +1 -0
  146. package/dist/syncer/syncer.d.ts +127 -0
  147. package/dist/syncer/syncer.d.ts.map +1 -0
  148. package/dist/syncer/syncer.js +2 -0
  149. package/dist/syncer/syncer.js.map +1 -0
  150. package/dist/templates/base-template.d.ts +13 -0
  151. package/dist/templates/base-template.d.ts.map +1 -0
  152. package/dist/templates/base-template.js +2 -0
  153. package/dist/templates/base-template.js.map +1 -0
  154. package/dist/templates/entity.template.d.ts +17 -0
  155. package/dist/templates/entity.template.d.ts.map +1 -0
  156. package/dist/templates/entity.template.js +2 -0
  157. package/dist/templates/entity.template.js.map +1 -0
  158. package/dist/templates/generated.template.d.ts +27 -0
  159. package/dist/templates/generated.template.d.ts.map +1 -0
  160. package/dist/templates/generated.template.js +2 -0
  161. package/dist/templates/generated.template.js.map +1 -0
  162. package/dist/templates/generated_http.template.d.ts +24 -0
  163. package/dist/templates/generated_http.template.d.ts.map +1 -0
  164. package/dist/templates/generated_http.template.js +2 -0
  165. package/dist/templates/generated_http.template.js.map +1 -0
  166. package/dist/templates/generated_sso.template.d.ts +20 -0
  167. package/dist/templates/generated_sso.template.d.ts.map +1 -0
  168. package/dist/templates/generated_sso.template.js +2 -0
  169. package/dist/templates/generated_sso.template.js.map +1 -0
  170. package/dist/templates/index.d.ts +2 -0
  171. package/dist/templates/index.d.ts.map +1 -0
  172. package/dist/templates/index.js +2 -0
  173. package/dist/templates/index.js.map +1 -0
  174. package/dist/templates/init_types.template.d.ts +17 -0
  175. package/dist/templates/init_types.template.d.ts.map +1 -0
  176. package/dist/templates/init_types.template.js +2 -0
  177. package/dist/templates/init_types.template.js.map +1 -0
  178. package/dist/templates/model.template.d.ts +17 -0
  179. package/dist/templates/model.template.d.ts.map +1 -0
  180. package/dist/templates/model.template.js +2 -0
  181. package/dist/templates/model.template.js.map +1 -0
  182. package/dist/templates/model_test.template.d.ts +17 -0
  183. package/dist/templates/model_test.template.d.ts.map +1 -0
  184. package/dist/templates/model_test.template.js +2 -0
  185. package/dist/templates/model_test.template.js.map +1 -0
  186. package/dist/templates/service.template.d.ts +29 -0
  187. package/dist/templates/service.template.d.ts.map +1 -0
  188. package/dist/templates/service.template.js +2 -0
  189. package/dist/templates/service.template.js.map +1 -0
  190. package/dist/templates/view_enums_buttonset.template.d.ts +17 -0
  191. package/dist/templates/view_enums_buttonset.template.d.ts.map +1 -0
  192. package/dist/templates/view_enums_buttonset.template.js +2 -0
  193. package/dist/templates/view_enums_buttonset.template.js.map +1 -0
  194. package/dist/templates/view_enums_dropdown.template.d.ts +18 -0
  195. package/dist/templates/view_enums_dropdown.template.d.ts.map +1 -0
  196. package/dist/templates/view_enums_dropdown.template.js +2 -0
  197. package/dist/templates/view_enums_dropdown.template.js.map +1 -0
  198. package/dist/templates/view_enums_select.template.d.ts +17 -0
  199. package/dist/templates/view_enums_select.template.d.ts.map +1 -0
  200. package/dist/templates/view_enums_select.template.js +2 -0
  201. package/dist/templates/view_enums_select.template.js.map +1 -0
  202. package/dist/templates/view_form.template.d.ts +26 -0
  203. package/dist/templates/view_form.template.d.ts.map +1 -0
  204. package/dist/templates/view_form.template.js +2 -0
  205. package/dist/templates/view_form.template.js.map +1 -0
  206. package/dist/templates/view_id_all_select.template.d.ts +17 -0
  207. package/dist/templates/view_id_all_select.template.d.ts.map +1 -0
  208. package/dist/templates/view_id_all_select.template.js +2 -0
  209. package/dist/templates/view_id_all_select.template.js.map +1 -0
  210. package/dist/templates/view_id_async_select.template.d.ts +17 -0
  211. package/dist/templates/view_id_async_select.template.d.ts.map +1 -0
  212. package/dist/templates/view_id_async_select.template.js +2 -0
  213. package/dist/templates/view_id_async_select.template.js.map +1 -0
  214. package/dist/templates/view_list.template.d.ts +38 -0
  215. package/dist/templates/view_list.template.d.ts.map +1 -0
  216. package/dist/templates/view_list.template.js +2 -0
  217. package/dist/templates/view_list.template.js.map +1 -0
  218. package/dist/templates/view_list_columns.template.d.ts +17 -0
  219. package/dist/templates/view_list_columns.template.d.ts.map +1 -0
  220. package/dist/templates/view_list_columns.template.js +2 -0
  221. package/dist/templates/view_list_columns.template.js.map +1 -0
  222. package/dist/templates/view_search_input.template.d.ts +17 -0
  223. package/dist/templates/view_search_input.template.d.ts.map +1 -0
  224. package/dist/templates/view_search_input.template.js +2 -0
  225. package/dist/templates/view_search_input.template.js.map +1 -0
  226. package/dist/testing/_relation-graph.d.ts +7 -0
  227. package/dist/testing/_relation-graph.d.ts.map +1 -0
  228. package/dist/testing/_relation-graph.js +2 -0
  229. package/dist/testing/_relation-graph.js.map +1 -0
  230. package/dist/testing/fixture-manager.d.ts +35 -0
  231. package/dist/testing/fixture-manager.d.ts.map +1 -0
  232. package/dist/testing/fixture-manager.js +2 -0
  233. package/dist/testing/fixture-manager.js.map +1 -0
  234. package/dist/types/types.d.ts +611 -0
  235. package/dist/types/types.d.ts.map +1 -0
  236. package/dist/types/types.js +2 -0
  237. package/dist/types/types.js.map +1 -0
  238. package/dist/typings/knex.d.js +2 -0
  239. package/dist/typings/knex.d.js.map +1 -0
  240. package/dist/utils/async-utils.d.ts +25 -0
  241. package/dist/utils/async-utils.d.ts.map +1 -0
  242. package/dist/utils/async-utils.js +2 -0
  243. package/dist/utils/async-utils.js.map +1 -0
  244. package/dist/utils/controller.d.ts +9 -0
  245. package/dist/utils/controller.d.ts.map +1 -0
  246. package/dist/utils/controller.js +2 -0
  247. package/dist/utils/controller.js.map +1 -0
  248. package/dist/utils/fs-utils.d.ts +9 -0
  249. package/dist/utils/fs-utils.d.ts.map +1 -0
  250. package/dist/utils/fs-utils.js +2 -0
  251. package/dist/utils/fs-utils.js.map +1 -0
  252. package/dist/utils/lodash-able.d.ts +2 -0
  253. package/dist/utils/lodash-able.d.ts.map +1 -0
  254. package/dist/utils/lodash-able.js +2 -0
  255. package/dist/utils/lodash-able.js.map +1 -0
  256. package/dist/utils/model.d.ts +17 -0
  257. package/dist/utils/model.d.ts.map +1 -0
  258. package/dist/utils/model.js +2 -0
  259. package/dist/utils/model.js.map +1 -0
  260. package/dist/utils/sql-parser.d.ts +4 -0
  261. package/dist/utils/sql-parser.d.ts.map +1 -0
  262. package/dist/utils/sql-parser.js +2 -0
  263. package/dist/utils/sql-parser.js.map +1 -0
  264. package/dist/utils/utils.d.ts +9 -0
  265. package/dist/utils/utils.d.ts.map +1 -0
  266. package/dist/utils/utils.js +2 -0
  267. package/dist/utils/utils.js.map +1 -0
  268. package/dist/utils/zod-error.d.ts +8 -0
  269. package/dist/utils/zod-error.d.ts.map +1 -0
  270. package/dist/utils/zod-error.js +2 -0
  271. package/dist/utils/zod-error.js.map +1 -0
  272. package/nodemon.json +6 -0
  273. package/package.json +32 -45
  274. package/src/api/base-frame.ts +3 -4
  275. package/src/api/caster.ts +22 -23
  276. package/src/api/code-converters.ts +170 -134
  277. package/src/api/context.ts +15 -3
  278. package/src/api/decorators.ts +144 -20
  279. package/src/api/index.ts +2 -0
  280. package/src/api/sonamu.ts +408 -165
  281. package/src/bin/build-config.ts +10 -0
  282. package/src/bin/cli-wrapper.ts +35 -32
  283. package/src/bin/cli.ts +141 -204
  284. package/src/database/_batch_update.ts +10 -15
  285. package/src/database/base-model.ts +326 -216
  286. package/src/database/db.ts +191 -21
  287. package/src/database/{drivers/knex/plugins → knex-plugins}/knex-on-duplicate-update.ts +1 -1
  288. package/src/database/puri-wrapper.ts +129 -0
  289. package/src/database/puri.ts +808 -0
  290. package/src/database/puri.types.ts +222 -0
  291. package/src/database/transaction-context.ts +18 -0
  292. package/src/database/upsert-builder.ts +32 -35
  293. package/src/entity/entity-manager.ts +7 -15
  294. package/src/entity/entity.ts +9 -31
  295. package/src/entity/migrator-/354/235/264/354/202/254/352/260/224/354/226/264/354/232/224.md +1 -0
  296. package/src/file-storage/driver.ts +131 -0
  297. package/src/file-storage/file-storage.ts +100 -0
  298. package/src/index.ts +15 -11
  299. package/src/migration/code-generation.ts +777 -0
  300. package/src/migration/migration-set.ts +453 -0
  301. package/src/migration/migrator.ts +823 -0
  302. package/src/migration/types.ts +53 -0
  303. package/src/shared/web.shared.ts.txt +33 -2
  304. package/src/stream/index.ts +1 -0
  305. package/src/stream/sse.ts +49 -0
  306. package/src/syncer/syncer.ts +294 -127
  307. package/src/templates/generated.template.ts +13 -1
  308. package/src/templates/generated_http.template.ts +15 -12
  309. package/src/templates/generated_sso.template.ts +50 -2
  310. package/src/templates/model.template.ts +138 -2
  311. package/src/templates/service.template.ts +0 -1
  312. package/src/templates/view_form.template.ts +11 -7
  313. package/src/templates/view_list.template.ts +12 -4
  314. package/src/testing/fixture-manager.ts +229 -174
  315. package/src/types/types.ts +108 -14
  316. package/src/utils/async-utils.ts +64 -0
  317. package/src/utils/fs-utils.ts +17 -0
  318. package/src/utils/model.ts +0 -2
  319. package/src/utils/utils.ts +14 -58
  320. package/src/utils/zod-error.ts +12 -176
  321. package/tsconfig.json +6 -0
  322. package/tsup.config.js +4 -2
  323. package/.pnp.cjs +0 -14363
  324. package/.pnp.loader.mjs +0 -2047
  325. package/.vscode/extensions.json +0 -6
  326. package/.vscode/settings.json +0 -9
  327. package/.yarnrc.yml +0 -5
  328. package/dist/base-model-CEB0H0aO.d.mts +0 -43
  329. package/dist/base-model-CrqDMYhI.d.ts +0 -43
  330. package/dist/bin/cli-wrapper.d.mts +0 -1
  331. package/dist/bin/cli-wrapper.mjs +0 -43
  332. package/dist/bin/cli-wrapper.mjs.map +0 -1
  333. package/dist/bin/cli.d.mts +0 -2
  334. package/dist/bin/cli.mjs +0 -907
  335. package/dist/bin/cli.mjs.map +0 -1
  336. package/dist/chunk-2WAC2GER.js +0 -7625
  337. package/dist/chunk-2WAC2GER.js.map +0 -1
  338. package/dist/chunk-C3IPIF6O.mjs +0 -1581
  339. package/dist/chunk-C3IPIF6O.mjs.map +0 -1
  340. package/dist/chunk-EXHKSVTE.js +0 -280
  341. package/dist/chunk-EXHKSVTE.js.map +0 -1
  342. package/dist/chunk-FCERKIIF.mjs +0 -7623
  343. package/dist/chunk-FCERKIIF.mjs.map +0 -1
  344. package/dist/chunk-HGIBJYOU.mjs +0 -231
  345. package/dist/chunk-HGIBJYOU.mjs.map +0 -1
  346. package/dist/chunk-JKSOJRQA.mjs +0 -280
  347. package/dist/chunk-JKSOJRQA.mjs.map +0 -1
  348. package/dist/chunk-OTKKFP3Y.js +0 -1581
  349. package/dist/chunk-OTKKFP3Y.js.map +0 -1
  350. package/dist/chunk-PTFDTOJU.mjs +0 -19
  351. package/dist/chunk-PTFDTOJU.mjs.map +0 -1
  352. package/dist/chunk-UZ2IY5VE.js +0 -231
  353. package/dist/chunk-UZ2IY5VE.js.map +0 -1
  354. package/dist/database/drivers/knex/base-model.d.mts +0 -16
  355. package/dist/database/drivers/knex/base-model.d.ts +0 -16
  356. package/dist/database/drivers/knex/base-model.js +0 -55
  357. package/dist/database/drivers/knex/base-model.js.map +0 -1
  358. package/dist/database/drivers/knex/base-model.mjs +0 -56
  359. package/dist/database/drivers/knex/base-model.mjs.map +0 -1
  360. package/dist/database/drivers/kysely/base-model.d.mts +0 -22
  361. package/dist/database/drivers/kysely/base-model.d.ts +0 -22
  362. package/dist/database/drivers/kysely/base-model.js +0 -64
  363. package/dist/database/drivers/kysely/base-model.js.map +0 -1
  364. package/dist/database/drivers/kysely/base-model.mjs +0 -65
  365. package/dist/database/drivers/kysely/base-model.mjs.map +0 -1
  366. package/dist/index.d.mts +0 -813
  367. package/dist/index.mjs +0 -435
  368. package/dist/index.mjs.map +0 -1
  369. package/dist/model-aFgomcdc.d.mts +0 -1112
  370. package/dist/model-aFgomcdc.d.ts +0 -1112
  371. package/src/database/base-model.abstract.ts +0 -97
  372. package/src/database/db.abstract.ts +0 -75
  373. package/src/database/drivers/knex/base-model.ts +0 -55
  374. package/src/database/drivers/knex/client.ts +0 -209
  375. package/src/database/drivers/knex/db.ts +0 -232
  376. package/src/database/drivers/knex/generator.ts +0 -659
  377. package/src/database/drivers/kysely/base-model.ts +0 -89
  378. package/src/database/drivers/kysely/client.ts +0 -309
  379. package/src/database/drivers/kysely/db.ts +0 -238
  380. package/src/database/drivers/kysely/generator.ts +0 -714
  381. package/src/database/types.ts +0 -118
  382. package/src/entity/migrator.ts +0 -1400
  383. package/src/smd/smd-manager.ts +0 -139
  384. package/src/smd/smd.ts +0 -571
  385. package/src/templates/kysely_types.template.ts +0 -205
@@ -0,0 +1,127 @@
1
+ import { EntityNamesRecord } from "../entity/entity-manager";
2
+ import ts from "typescript";
3
+ import { ApiParam, ApiParamType, EntityProp, EntityPropNode } from "../types/types";
4
+ import { ApiDecoratorOptions } from "../api/decorators";
5
+ import { z } from "zod";
6
+ import { TemplateKey, PathAndCode, TemplateOptions, GenerateOptions, RenderingNode } from "../types/types";
7
+ import { Template } from "../templates/base-template";
8
+ type FileType = "model" | "types" | "functions" | "generated" | "entity" | "frame";
9
+ type GlobPattern = {
10
+ [key in FileType]: string;
11
+ };
12
+ type PathAndChecksum = {
13
+ path: string;
14
+ checksum: string;
15
+ };
16
+ export type RenderedTemplate = {
17
+ target: string;
18
+ path: string;
19
+ body: string;
20
+ importKeys: string[];
21
+ customHeaders?: string[];
22
+ preTemplates?: {
23
+ key: TemplateKey;
24
+ options: TemplateOptions[TemplateKey];
25
+ }[];
26
+ };
27
+ export declare class Syncer {
28
+ apis: {
29
+ typeParameters: ApiParamType.TypeParam[];
30
+ parameters: ApiParam[];
31
+ returnType: ApiParamType;
32
+ modelName: string;
33
+ methodName: string;
34
+ path: string;
35
+ options: ApiDecoratorOptions;
36
+ }[];
37
+ types: {
38
+ [typeName: string]: z.ZodObject<any>;
39
+ };
40
+ models: {
41
+ [modelName: string]: unknown;
42
+ };
43
+ isSyncing: boolean;
44
+ checksumPatternGroup: GlobPattern;
45
+ get checksumsPath(): string;
46
+ constructor();
47
+ sync(): Promise<void>;
48
+ doSyncActions(diffFiles: string[], currentChecksums?: PathAndChecksum[]): Promise<{
49
+ diffTypes: string[];
50
+ changedChecksums?: PathAndChecksum[];
51
+ }>;
52
+ syncFromWatcher(diffFiles: string[]): Promise<void>;
53
+ getEntityIdFromPath(filePaths: string[]): string[];
54
+ actionGenerateSchemas(): Promise<string[]>;
55
+ actionGenerateServices(paramsArray: {
56
+ namesRecord: EntityNamesRecord;
57
+ modelTsPath: string;
58
+ }[]): Promise<string[]>;
59
+ actionGenerateHttps(): Promise<string[]>;
60
+ copyFileWithReplaceCoreToShared(fromPath: string, toPath: string): Promise<void>;
61
+ actionSyncFilesToTargets(tsPaths: string[]): Promise<string[]>;
62
+ getCurrentChecksums(): Promise<PathAndChecksum[]>;
63
+ getPreviousChecksums(): Promise<PathAndChecksum[]>;
64
+ saveChecksums(checksums: PathAndChecksum[]): Promise<void>;
65
+ getChecksumOfFile(filePath: string): Promise<string>;
66
+ readApisFromFile(filePath: string): Promise<{
67
+ typeParameters: ApiParamType.TypeParam[];
68
+ parameters: ApiParam[];
69
+ returnType: ApiParamType;
70
+ modelName: string;
71
+ methodName: string;
72
+ path: string;
73
+ options: ApiDecoratorOptions;
74
+ streamOptions?: import("../api/decorators").StreamDecoratorOptions;
75
+ }[]>;
76
+ resolveTypeNode(typeNode: ts.TypeNode): ApiParamType;
77
+ resolveParamDec: (paramDec: {
78
+ name: ts.BindingName;
79
+ type: ts.TypeNode;
80
+ optional?: boolean;
81
+ defaultDef?: string;
82
+ }, index?: number) => ApiParam;
83
+ printNode(node: ts.Node | undefined, sourceFile: ts.SourceFile): string | undefined;
84
+ autoloadApis(): Promise<{
85
+ typeParameters: ApiParamType.TypeParam[];
86
+ parameters: ApiParam[];
87
+ returnType: ApiParamType;
88
+ modelName: string;
89
+ methodName: string;
90
+ path: string;
91
+ options: ApiDecoratorOptions;
92
+ }[]>;
93
+ autoloadModels(): Promise<{
94
+ [modelName: string]: unknown;
95
+ }>;
96
+ autoloadTypes(doRefresh?: boolean): Promise<{
97
+ [typeName: string]: z.ZodObject<any>;
98
+ }>;
99
+ getTemplate(key: TemplateKey): Template;
100
+ renderTemplate<T extends keyof TemplateOptions>(key: T, options: TemplateOptions[T]): Promise<PathAndCode[]>;
101
+ resolveRenderedTemplate(key: TemplateKey, result: RenderedTemplate): Promise<PathAndCode>;
102
+ writeCodeToPath(pathAndCode: PathAndCode): Promise<string[]>;
103
+ generateTemplate(key: TemplateKey, templateOptions: any, _generateOptions?: GenerateOptions): Promise<string[][]>;
104
+ checkExistsGenCode(entityId: string, templateKey: TemplateKey, enumId?: string): Promise<{
105
+ subPath: string;
106
+ fullPath: string;
107
+ isExists: boolean;
108
+ }>;
109
+ checkExists(entityId: string, enums: {
110
+ [name: string]: z.ZodEnum<any>;
111
+ }): Promise<Record<`${TemplateKey}${string}`, boolean>>;
112
+ getZodTypeById(zodTypeId: string): Promise<z.ZodTypeAny>;
113
+ propNodeToZodType(propNode: EntityPropNode): Promise<z.ZodTypeAny>;
114
+ propToZodType(prop: EntityProp): Promise<z.ZodTypeAny>;
115
+ resolveRenderType(key: string, zodType: z.ZodTypeAny): RenderingNode["renderType"];
116
+ zodTypeToRenderingNode(zodType: z.ZodType<any>, baseKey?: string): RenderingNode;
117
+ getColumnsNode(entityId: string, subsetKey: string): Promise<RenderingNode>;
118
+ createEntity(form: Omit<TemplateOptions["entity"], "title"> & {
119
+ title?: string;
120
+ }): Promise<void>;
121
+ delEntity(entityId: string): Promise<{
122
+ delPaths: string[];
123
+ }>;
124
+ syncUI(): void;
125
+ }
126
+ export {};
127
+ //# sourceMappingURL=syncer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Syncer",{enumerable:true,get:function(){return Syncer}});var _path=/*#__PURE__*/_interop_require_wildcard(require("path"));var _utils=require("../utils/utils");var _fs=require("fs");var _promises=require("fs/promises");var _fsutils=require("../utils/fs-utils");var _crypto=/*#__PURE__*/_interop_require_default(require("crypto"));var _fastdeepequal=/*#__PURE__*/_interop_require_default(require("fast-deep-equal"));var _lodash=/*#__PURE__*/_interop_require_wildcard(require("lodash"));var _inflection=/*#__PURE__*/_interop_require_default(require("inflection"));var _entitymanager=require("../entity/entity-manager");var _typescript=/*#__PURE__*/_interop_require_default(require("typescript"));var _types=require("../types/types");var _decorators=require("../api/decorators");var _zod=require("zod");var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));var _soexceptions=require("../exceptions/so-exceptions");var _lodashable=require("../utils/lodash-able");var _codeconverters=require("../api/code-converters");var _generatedtemplate=require("../templates/generated.template");var _init_typestemplate=require("../templates/init_types.template");var _entitytemplate=require("../templates/entity.template");var _modeltemplate=require("../templates/model.template");var _model_testtemplate=require("../templates/model_test.template");var _servicetemplate=require("../templates/service.template");var _view_formtemplate=require("../templates/view_form.template");var _view_listtemplate=require("../templates/view_list.template");var _prettier=/*#__PURE__*/_interop_require_default(require("prettier"));var _view_id_all_selecttemplate=require("../templates/view_id_all_select.template");var _view_id_async_selecttemplate=require("../templates/view_id_async_select.template");var _view_enums_dropdowntemplate=require("../templates/view_enums_dropdown.template");var _view_enums_selecttemplate=require("../templates/view_enums_select.template");var _view_enums_buttonsettemplate=require("../templates/view_enums_buttonset.template");var _view_search_inputtemplate=require("../templates/view_search_input.template");var _view_list_columnstemplate=require("../templates/view_list_columns.template");var _generated_httptemplate=require("../templates/generated_http.template");var _sonamu=require("../api/sonamu");var _generated_ssotemplate=require("../templates/generated_sso.template");var _promises1=require("timers/promises");var _assert=/*#__PURE__*/_interop_require_default(require("assert"));var _core=/*#__PURE__*/_interop_require_wildcard(require("@swc/core"));var _minimatch=require("minimatch");var _asyncutils=require("../utils/async-utils");function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_with_holes(arr){if(Array.isArray(arr))return arr}function _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function _async_iterator(iterable){var method,async,sync,retry=2;for("undefined"!=typeof Symbol&&(async=Symbol.asyncIterator,sync=Symbol.iterator);retry--;){if(async&&null!=(method=iterable[async]))return method.call(iterable);if(sync&&null!=(method=iterable[sync]))return new AsyncFromSyncIterator(method.call(iterable));async="@@asyncIterator",sync="@@iterator"}throw new TypeError("Object is not async iterable")}function AsyncFromSyncIterator(s){function AsyncFromSyncIteratorContinuation(r){if(Object(r)!==r)return Promise.reject(new TypeError(r+" is not an object."));var done=r.done;return Promise.resolve(r.value).then(function(value){return{value:value,done:done}})}return AsyncFromSyncIterator=function(s){this.s=s,this.n=s.next},AsyncFromSyncIterator.prototype={s:null,n:null,next:function(){return AsyncFromSyncIteratorContinuation(this.n.apply(this.s,arguments))},return:function(value){var ret=this.s.return;return void 0===ret?Promise.resolve({value:value,done:!0}):AsyncFromSyncIteratorContinuation(ret.apply(this.s,arguments))},throw:function(value){var thr=this.s.return;return void 0===thr?Promise.reject(value):AsyncFromSyncIteratorContinuation(thr.apply(this.s,arguments))}},new AsyncFromSyncIterator(s)}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _instanceof(left,right){if(right!=null&&typeof Symbol!=="undefined"&&right[Symbol.hasInstance]){return!!right[Symbol.hasInstance](left)}else{return left instanceof right}}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap;var cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interop_require_wildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj}}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj)}var newObj={__proto__:null};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc)}else{newObj[key]=obj[key]}}}newObj.default=obj;if(cache){cache.set(obj,newObj)}return newObj}function _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _iterable_to_array_limit(arr,i){var _i=arr==null?null:typeof Symbol!=="undefined"&&arr[Symbol.iterator]||arr["@@iterator"];if(_i==null)return;var _arr=[];var _n=true;var _d=false;var _s,_e;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"]!=null)_i["return"]()}finally{if(_d)throw _e}}return _arr}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _object_spread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};var ownKeys=Object.keys(source);if(typeof Object.getOwnPropertySymbols==="function"){ownKeys=ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym){return Object.getOwnPropertyDescriptor(source,sym).enumerable}))}ownKeys.forEach(function(key){_define_property(target,key,source[key])})}return target}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly){symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})}keys.push.apply(keys,symbols)}return keys}function _object_spread_props(target,source){source=source!=null?source:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}return target}function _sliced_to_array(arr,i){return _array_with_holes(arr)||_iterable_to_array_limit(arr,i)||_unsupported_iterable_to_array(arr,i)||_non_iterable_rest()}function _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function _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 Syncer=/*#__PURE__*/function(){"use strict";function Syncer(){var _this=this;_class_call_check(this,Syncer);_define_property(this,"apis",[]);_define_property(this,"types",{});_define_property(this,"models",{});_define_property(this,"isSyncing",false);_define_property(this,"checksumPatternGroup",{entity:_sonamu.Sonamu.apiRootPath+"/src/application/**/*.entity.json",types:_sonamu.Sonamu.apiRootPath+"/src/application/**/*.types.ts",generated:_sonamu.Sonamu.apiRootPath+"/src/application/sonamu.generated.ts",functions:_sonamu.Sonamu.apiRootPath+"/src/application/**/*.functions.ts",model:_sonamu.Sonamu.apiRootPath+"/dist/application/**/*.model.js",frame:_sonamu.Sonamu.apiRootPath+"/dist/application/**/*.frame.js"});_define_property(this,"resolveParamDec",function(paramDec){var index=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;var name=paramDec.name;var type=_this.resolveTypeNode(paramDec.type);if(name===undefined){console.debug({name:name,type:type,paramDec:paramDec})}var result={name:name.escapedText?name.escapedText.toString():"nonameAt".concat(index),type:type,optional:paramDec.optional===true,defaultDef:paramDec===null||paramDec===void 0?void 0:paramDec.defaultDef};if(_typescript.default.isObjectBindingPattern(name)&&_typescript.default.isTypeReferenceNode(paramDec.type)&&_typescript.default.isIdentifier(paramDec.type.typeName)){result.name=_inflection.default.camelize(paramDec.type.typeName.text,true)}return result})}_create_class(Syncer,[{key:"checksumsPath",get:function get(){return _path.default.join(_sonamu.Sonamu.apiRootPath,"/sonamu.lock")}},{key:"sync",value:function sync(){return _async_to_generator(function(){var _this,targets,currentDirname,currentChecksums,previousChecksums,isSame,msg,margin,abc,onSIGUSR2,diff,diffFiles,changedChecksums;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;targets=_sonamu.Sonamu.config.sync.targets;currentDirname=__dirname.endsWith("/syncer")?__dirname:_path.default.join(__dirname,"./syncer");return[4,Promise.all(targets.map(function(target){return _async_to_generator(function(){var _this,srcCodePath,dstCodePath,srcChecksum,dstChecksum,_tmp;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;srcCodePath=_path.default.join(currentDirname,"../shared/".concat(target,".shared.ts.txt")).replace("/dist/","/src/");return[4,(0,_fsutils.exists)(srcCodePath)];case 1:if(!_state.sent()){return[2]}dstCodePath=_path.default.join(_sonamu.Sonamu.appRootPath,target,"src/services/sonamu.shared.ts");return[4,this.getChecksumOfFile(srcCodePath)];case 2:srcChecksum=_state.sent();return[4,function(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(0,_fsutils.exists)(dstCodePath)];case 1:if(!_state.sent()){return[2,""]}return[2,this.getChecksumOfFile(dstCodePath)]}})}).call(_this)}()];case 3:dstChecksum=_state.sent();if(srcChecksum===dstChecksum){return[2]}_tmp=[dstCodePath];return[4,(0,_promises.readFile)(srcCodePath)];case 4:return[4,_promises.writeFile.apply(void 0,_tmp.concat([_state.sent()]))];case 5:_state.sent();console.log(_chalk.default.blue("shared.ts is synced"));return[2]}})}).call(_this)}))];case 1:_state.sent();return[4,this.getCurrentChecksums()];case 2:currentChecksums=_state.sent();return[4,this.getPreviousChecksums()];case 3:previousChecksums=_state.sent();isSame=(0,_fastdeepequal.default)(currentChecksums,previousChecksums);if(isSame){msg="All files are synced!";margin=(process.stdout.columns-msg.length)/2;console.log(_chalk.default.black.bgGreen(" ".repeat(margin)+msg+" ".repeat(margin)));return[2]}abc=new AbortController;this.isSyncing=true;onSIGUSR2=function(){return _async_to_generator(function(){var e;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(this.isSyncing===false){process.exit(0)}console.log(_chalk.default.magentaBright("wait for syncing done...."));_state.label=1;case 1:_state.trys.push([1,3,,4]);return[4,(0,_promises1.setTimeout)(2e4,"waiting-sync",{signal:abc.signal})];case 2:_state.sent();return[3,4];case 3:e=_state.sent();return[3,4];case 4:console.log(_chalk.default.magentaBright("Syncing DONE!"));process.exit(0);return[2]}})}).call(_this)};process.on("SIGUSR2",onSIGUSR2);diff=_lodash.default.differenceWith(currentChecksums,previousChecksums,_lodash.default.isEqual);diffFiles=diff.map(function(r){return r.path});console.log("Changed Files: ",diffFiles);return[4,this.doSyncActions(diffFiles,currentChecksums)];case 4:changedChecksums=_state.sent().changedChecksums;currentChecksums=changedChecksums!==null&&changedChecksums!==void 0?changedChecksums:currentChecksums;return[4,this.saveChecksums(currentChecksums)];case 5:_state.sent();this.isSyncing=false;abc.abort();process.off("SIGUSR2",onSIGUSR2);return[2]}})}).call(this)}},{key:"doSyncActions",value:function doSyncActions(diffFiles,currentChecksums){return _async_to_generator(function(){var _this,diffGroups,diffTypes,_diffGroups_entity,entityId,entity,typeFilePath,_tmp,_diffGroups_generated,_diffGroups_types,_diffGroups_functions,_diffGroups_generated1,tsPaths,_diffGroups_model,_diffGroups_frame,mergedGroup,params;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;diffGroups=_lodash.default.groupBy(diffFiles,function(r){var matched=r.match(/\.(model|types|functions|entity|generated|frame)\.[tj]s/);var _matched_;return(_matched_=matched===null||matched===void 0?void 0:matched[1])!==null&&_matched_!==void 0?_matched_:"unknown"});diffTypes=Object.keys(diffGroups);if(!(diffTypes.includes("entity")||diffTypes.includes("types")))return[3,8];return[4,_entitymanager.EntityManager.reload()];case 1:_state.sent();return[4,this.actionGenerateSchemas()];case 2:_state.sent();entityId=this.getEntityIdFromPath(_to_consumable_array((_diffGroups_entity=diffGroups["entity"])!==null&&_diffGroups_entity!==void 0?_diffGroups_entity:[]))[0];if(!entityId)return[3,6];entity=_entitymanager.EntityManager.get(entityId);typeFilePath=_path.default.join(_sonamu.Sonamu.apiRootPath,"src/application/".concat(entity.names.fs,"/").concat(entity.names.fs,".types.ts"));_tmp=entity.parentId===undefined;if(!_tmp)return[3,4];return[4,(0,_fsutils.exists)(typeFilePath)];case 3:_tmp=!_state.sent();_state.label=4;case 4:if(!_tmp)return[3,6];return[4,this.generateTemplate("init_types",{entityId:entityId})];case 5:_state.sent();_state.label=6;case 6:diffGroups["generated"]=_lodash.default.uniq(_to_consumable_array((_diffGroups_generated=diffGroups["generated"])!==null&&_diffGroups_generated!==void 0?_diffGroups_generated:[]).concat(["/src/application/sonamu.generated.ts"]));diffTypes.push("generated");if(!currentChecksums)return[3,8];return[4,this.getCurrentChecksums()];case 7:currentChecksums=_state.sent();_state.label=8;case 8:if(!(diffTypes.includes("types")||diffTypes.includes("functions")||diffTypes.includes("generated")))return[3,10];tsPaths=_lodash.default.uniq(_to_consumable_array((_diffGroups_types=diffGroups["types"])!==null&&_diffGroups_types!==void 0?_diffGroups_types:[]).concat(_to_consumable_array((_diffGroups_functions=diffGroups["functions"])!==null&&_diffGroups_functions!==void 0?_diffGroups_functions:[]),_to_consumable_array((_diffGroups_generated1=diffGroups["generated"])!==null&&_diffGroups_generated1!==void 0?_diffGroups_generated1:[])).map(function(p){return p.replace("/dist/","/src/").replace(".js",".ts")}));return[4,this.actionSyncFilesToTargets(tsPaths)];case 9:_state.sent();_state.label=10;case 10:if(!(diffTypes.includes("model")||diffTypes.includes("frame")))return[3,15];mergedGroup=_to_consumable_array((_diffGroups_model=diffGroups["model"])!==null&&_diffGroups_model!==void 0?_diffGroups_model:[]).concat(_to_consumable_array((_diffGroups_frame=diffGroups["frame"])!==null&&_diffGroups_frame!==void 0?_diffGroups_frame:[]));return[4,this.autoloadModels()];case 11:_state.sent();return[4,this.autoloadApis()];case 12:_state.sent();params=mergedGroup.map(function(modelPath){if(modelPath.endsWith(".model.js")){var entityId=_this.getEntityIdFromPath([modelPath])[0];(0,_assert.default)(entityId);return{namesRecord:_entitymanager.EntityManager.getNamesFromId(entityId),modelTsPath:_path.default.join(_sonamu.Sonamu.apiRootPath,modelPath.replace("/dist/","/src/").replace(".model.js",".model.ts"))}}if(modelPath.endsWith("frame.js")){var _modelPath_match;var _ref=_sliced_to_array((_modelPath_match=modelPath.match(/.+\/(.+)\.frame.js$/))!==null&&_modelPath_match!==void 0?_modelPath_match:[],2),frameName=_ref[1];(0,_assert.default)(frameName);return{namesRecord:_entitymanager.EntityManager.getNamesFromId(frameName),modelTsPath:_path.default.join(_sonamu.Sonamu.apiRootPath,modelPath.replace("/dist/","/src/").replace(".frame.js",".frame.ts"))}}throw new Error("not reachable")});return[4,this.actionGenerateServices(params)];case 13:_state.sent();return[4,this.actionGenerateHttps()];case 14:_state.sent();_state.label=15;case 15:return[2,{diffTypes:diffTypes,changedChecksums:currentChecksums}]}})}).call(this)}},{key:"syncFromWatcher",value:function syncFromWatcher(diffFiles){return _async_to_generator(function(){var _this,tsFiles,jsonFiles,chunks,transpiledFilePaths,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,_$chunk,_transpiledFilePaths,_transpiledFilePaths1,err,allFilePaths,targetFilePaths;function clearModuleAndDependents(filePath){var resolved=require.resolve(filePath);var toDelete=new Set([resolved]);Object.keys(require.cache).forEach(function(key){var _mod_children;var mod=require.cache[key];if(mod===null||mod===void 0?void 0:(_mod_children=mod.children)===null||_mod_children===void 0?void 0:_mod_children.some(function(child){return child.id===resolved})){toDelete.add(key)}});toDelete.forEach(function(key){if(key.includes("dist/index.js")){process.kill(process.pid,"SIGUSR2")}delete require.cache[key]})}return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;tsFiles=diffFiles.filter(function(file){return file.endsWith(".ts")});jsonFiles=diffFiles.filter(function(file){return file.endsWith(".json")});chunks=(0,_lodash.chunk)(tsFiles,5);transpiledFilePaths=[];_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,6,7,8]);_iterator=chunks[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,5];_$chunk=_step.value;return[4,Promise.all(_$chunk.map(function(diffFile){return _async_to_generator(function(){var _ref,code,map,jsPath,mapPath,sourceMapComment;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,_core.transformFile(diffFile,{module:{type:"commonjs"},jsc:{parser:{syntax:"typescript",decorators:true},target:"es5"},sourceMaps:true})];case 1:_ref=_state.sent(),code=_ref.code,map=_ref.map;jsPath=diffFile.replace("/src/","/dist/").replace(".ts",".js");return[4,(0,_promises.mkdir)(_path.default.dirname(jsPath),{recursive:true})];case 2:_state.sent();return[4,(0,_promises.writeFile)(jsPath,code)];case 3:_state.sent();if(!map)return[3,7];mapPath=jsPath+".map";return[4,(0,_promises.mkdir)(_path.default.dirname(mapPath),{recursive:true})];case 4:_state.sent();return[4,(0,_promises.writeFile)(mapPath,map)];case 5:_state.sent();sourceMapComment="\n//# sourceMappingURL="+_path.default.basename(mapPath);return[4,(0,_promises.writeFile)(jsPath,sourceMapComment,{flag:"a"})];case 6:_state.sent();_state.label=7;case 7:console.log(_chalk.default.bold("Transpiled: ")+_chalk.default.blue("".concat(jsPath.replace(_sonamu.Sonamu.apiRootPath,"api"))));return[2,jsPath]}})})()}))];case 3:_transpiledFilePaths1=_state.sent();(_transpiledFilePaths=transpiledFilePaths).push.apply(_transpiledFilePaths,_to_consumable_array(_transpiledFilePaths1));_state.label=4;case 4:_iteratorNormalCompletion=true;return[3,2];case 5:return[3,8];case 6:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,8];case 7:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 8:transpiledFilePaths.map(function(filePath){clearModuleAndDependents(filePath)});allFilePaths=_to_consumable_array(tsFiles).concat(_to_consumable_array(transpiledFilePaths),_to_consumable_array(jsonFiles));targetFilePaths=allFilePaths.filter(function(filePath){return Object.values(_this.checksumPatternGroup).some(function(pattern){return(0,_minimatch.minimatch)(filePath,pattern)})}).map(function(filePath){return"/"+_path.default.relative(_sonamu.Sonamu.apiRootPath,filePath)});return[4,this.doSyncActions(targetFilePaths)];case 9:_state.sent();this.apis=[];this.types={};this.models={};return[4,this.autoloadTypes()];case 10:_state.sent();return[4,this.autoloadModels()];case 11:_state.sent();return[4,this.autoloadApis()];case 12:_state.sent();this.syncUI();return[2]}})}).call(this)}},{key:"getEntityIdFromPath",value:function getEntityIdFromPath(filePaths){return _lodash.default.uniq(filePaths.map(function(p){var matched=p.match(/application\/(.+)\//);(0,_assert.default)(matched&&matched[1]);return _inflection.default.camelize(matched[1].replace(/\-/g,"_"))}))}},{key:"actionGenerateSchemas",value:function actionGenerateSchemas(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,Promise.all([this.generateTemplate("generated_sso",{},{overwrite:true}),this.generateTemplate("generated",{},{overwrite:true})])];case 1:return[2,_state.sent().flat().flat()]}})}).call(this)}},{key:"actionGenerateServices",value:function actionGenerateServices(paramsArray){return _async_to_generator(function(){var _this;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;return[4,Promise.all(paramsArray.map(function(params){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,this.generateTemplate("service",params,{overwrite:true})]})}).call(_this)}))];case 1:return[2,_state.sent().flat().flat()]}})}).call(this)}},{key:"actionGenerateHttps",value:function actionGenerateHttps(){return _async_to_generator(function(){var _ref,res;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.generateTemplate("generated_http",{},{overwrite:true})];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),res=_ref[0];(0,_assert.default)(res);return[2,res]}})}).call(this)}},{key:"copyFileWithReplaceCoreToShared",value:function copyFileWithReplaceCoreToShared(fromPath,toPath){return _async_to_generator(function(){var oldFileContent,newFileContent;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(0,_fsutils.exists)(fromPath)];case 1:if(!_state.sent()){return[2]}return[4,(0,_promises.readFile)(fromPath)];case 2:oldFileContent=_state.sent().toString();newFileContent=function(){var nfc=oldFileContent.replace(/from "sonamu"/g,'from "src/services/sonamu.shared"');if(toPath.includes("/web/")){return nfc.replace(/from "lodash";/g,'from "lodash-es";')}else{return nfc}}();return[2,(0,_promises.writeFile)(toPath,newFileContent)]}})})()}},{key:"actionSyncFilesToTargets",value:function actionSyncFilesToTargets(tsPaths){return _async_to_generator(function(){var _this,targets,_Sonamu_config_api,apiDir;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;targets=_sonamu.Sonamu.config.sync.targets;_Sonamu_config_api=_sonamu.Sonamu.config.api,apiDir=_Sonamu_config_api.dir;return[4,Promise.all(targets.map(function(target){return _async_to_generator(function(){var _this;return _ts_generator(this,function(_state){_this=this;return[2,Promise.all(tsPaths.map(function(src){return _async_to_generator(function(){var realSrc,dst,dir;return _ts_generator(this,function(_state){switch(_state.label){case 0:realSrc=_sonamu.Sonamu.apiRootPath+src;dst=realSrc.replace("/".concat(apiDir,"/"),"/".concat(target,"/")).replace("/application/","/services/");dir=(0,_path.dirname)(dst);return[4,(0,_fsutils.exists)(dir)];case 1:if(!!_state.sent())return[3,3];return[4,(0,_promises.mkdir)(dir,{recursive:true})];case 2:_state.sent();_state.label=3;case 3:console.log(_chalk.default.bold("Copied: ")+_chalk.default.blue("Copied: ".concat(dst.replace(_sonamu.Sonamu.appRootPath+"/",""))));return[4,this.copyFileWithReplaceCoreToShared(realSrc,dst)];case 4:_state.sent();return[2,dst]}})}).call(_this)}))]})}).call(_this)}))];case 1:return[2,_state.sent().flat()]}})}).call(this)}},{key:"getCurrentChecksums",value:function getCurrentChecksums(){return _async_to_generator(function(){var _this,filePaths,fileChecksums;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;return[4,Promise.all(Object.entries(this.checksumPatternGroup).map(function(param){var _param=_sliced_to_array(param,2),_fileType=_param[0],pattern=_param[1];return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,(0,_utils.globAsync)(pattern)]})})()}))];case 1:filePaths=_state.sent().flat().sort();return[4,Promise.all(filePaths.map(function(filePath){return _async_to_generator(function(){var _tmp;return _ts_generator(this,function(_state){switch(_state.label){case 0:_tmp={path:filePath.substring(_sonamu.Sonamu.apiRootPath.length)};return[4,this.getChecksumOfFile(filePath)];case 1:return[2,(_tmp.checksum=_state.sent(),_tmp)]}})}).call(_this)}))];case 2:fileChecksums=_state.sent();return[2,fileChecksums]}})}).call(this)}},{key:"getPreviousChecksums",value:function getPreviousChecksums(){return _async_to_generator(function(){var previousChecksums,_;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(0,_fsutils.exists)(this.checksumsPath)];case 1:if(!_state.sent()){return[2,[]]}_=JSON.parse;return[4,(0,_promises.readFile)(this.checksumsPath,"utf-8")];case 2:previousChecksums=_.apply(JSON,[_state.sent()]);return[2,previousChecksums]}})}).call(this)}},{key:"saveChecksums",value:function saveChecksums(checksums){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(0,_promises.writeFile)(this.checksumsPath,JSON.stringify(checksums,null,2),"utf-8")];case 1:_state.sent();console.log("checksum saved",this.checksumsPath);return[2]}})}).call(this)}},{key:"getChecksumOfFile",value:function getChecksumOfFile(filePath){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){var hash=_crypto.default.createHash("sha1");var input=(0,_fs.createReadStream)(filePath);input.on("error",reject);input.on("data",function(chunk){hash.update(chunk)});input.on("close",function(){resolve(hash.digest("hex"))})})]})})()}},{key:"readApisFromFile",value:function readApisFromFile(filePath){return _async_to_generator(function(){var _this,sourceFile,_,_tmp,methods,modelName,methodName,visitor,currentModelApis,extendedApis;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;_=_typescript.default.createSourceFile;_tmp=[filePath];return[4,(0,_promises.readFile)(filePath)];case 1:sourceFile=_.apply(_typescript.default,_tmp.concat([_state.sent().toString(),_typescript.default.ScriptTarget.Latest]));methods=[];modelName="UnknownModel";methodName="unknownMethod";visitor=function(node){if(_typescript.default.isClassDeclaration(node)){if(node.name&&_typescript.default.isIdentifier(node.name)){modelName=node.name.escapedText.toString().replace(/Class$/,"")}}if(_typescript.default.isMethodDeclaration(node)){if(_typescript.default.isIdentifier(node.name)){methodName=node.name.escapedText.toString()}var _node_typeParameters;var typeParameters=((_node_typeParameters=node.typeParameters)!==null&&_node_typeParameters!==void 0?_node_typeParameters:[]).map(function(typeParam){var tp=typeParam;return{t:"type-param",id:tp.name.escapedText.toString(),constraint:tp.constraint?_this.resolveTypeNode(tp.constraint):undefined}});var parameters=node.parameters.map(function(paramDec,index){var defaultDef=_this.printNode(paramDec.initializer,sourceFile);return _this.resolveParamDec({name:paramDec.name,type:paramDec.type,optional:paramDec.questionToken!==undefined||paramDec.initializer!==undefined,defaultDef:defaultDef},index)});if(node.type===undefined){throw new Error("리턴 타입이 기재되지 않은 메소드 ".concat(modelName,".").concat(methodName))}var returnType=_this.resolveTypeNode(node.type);methods.push({modelName:modelName,methodName:methodName,typeParameters:typeParameters,parameters:parameters,returnType:returnType})}_typescript.default.forEachChild(node,visitor)};visitor(sourceFile);if(methods.length===0){return[2,[]]}currentModelApis=_decorators.registeredApis.filter(function(api){return methods.find(function(method){return method.modelName===api.modelName&&method.methodName===api.methodName})});if(currentModelApis.length===0){throw new Error("현재 파일에 사전 등록된 API가 없습니다. ".concat(filePath))}extendedApis=currentModelApis.map(function(api){var foundMethod=methods.find(function(method){return method.modelName===api.modelName&&method.methodName===api.methodName});return _object_spread_props(_object_spread({},api),{typeParameters:foundMethod.typeParameters,parameters:foundMethod.parameters,returnType:foundMethod.returnType})});return[2,extendedApis]}})}).call(this)}},{key:"resolveTypeNode",value:function resolveTypeNode(typeNode){var _this=this;switch(typeNode===null||typeNode===void 0?void 0:typeNode.kind){case _typescript.default.SyntaxKind.AnyKeyword:return"any";case _typescript.default.SyntaxKind.UnknownKeyword:return"unknown";case _typescript.default.SyntaxKind.StringKeyword:return"string";case _typescript.default.SyntaxKind.NumberKeyword:return"number";case _typescript.default.SyntaxKind.BooleanKeyword:return"boolean";case _typescript.default.SyntaxKind.UndefinedKeyword:return"undefined";case _typescript.default.SyntaxKind.NullKeyword:return"null";case _typescript.default.SyntaxKind.VoidKeyword:return"void";case _typescript.default.SyntaxKind.LiteralType:var literal=typeNode.literal;if(_typescript.default.isStringLiteral(literal)){return{t:"string-literal",value:literal.text}}else if(_typescript.default.isNumericLiteral(literal)){return{t:"numeric-literal",value:Number(literal.text)}}else{if(literal.kind===_typescript.default.SyntaxKind.NullKeyword){return"null"}else if(literal.kind===_typescript.default.SyntaxKind.UndefinedKeyword){return"undefined"}else if(literal.kind===_typescript.default.SyntaxKind.TrueKeyword){return"true"}else if(literal.kind===_typescript.default.SyntaxKind.FalseKeyword){return"false"}throw new Error("알 수 없는 리터럴")}case _typescript.default.SyntaxKind.ArrayType:var arrNode=typeNode;return{t:"array",elementsType:this.resolveTypeNode(arrNode.elementType)};case _typescript.default.SyntaxKind.TypeLiteral:var literalNode=typeNode;return{t:"object",props:literalNode.members.map(function(member){if(_typescript.default.isIndexSignatureDeclaration(member)){(0,_assert.default)(member.parameters[0]);var res=_this.resolveParamDec({name:member.parameters[0].name,type:member.parameters[0].type});return _this.resolveParamDec({name:{escapedText:"[".concat(res.name).concat(res.optional?"?":"",": ").concat(res.type,"]")},type:member.type})}else{return _this.resolveParamDec({name:member.name,type:member.type,optional:member.questionToken!==undefined})}})};case _typescript.default.SyntaxKind.TypeReference:var _typeNode_typeArguments;return{t:"ref",id:typeNode.typeName.escapedText.toString(),args:(_typeNode_typeArguments=typeNode.typeArguments)===null||_typeNode_typeArguments===void 0?void 0:_typeNode_typeArguments.map(function(typeArg){return _this.resolveTypeNode(typeArg)})};case _typescript.default.SyntaxKind.UnionType:return{t:"union",types:typeNode.types.map(function(type){return _this.resolveTypeNode(type)})};case _typescript.default.SyntaxKind.IntersectionType:return{t:"intersection",types:typeNode.types.map(function(type){return _this.resolveTypeNode(type)})};case _typescript.default.SyntaxKind.IndexedAccessType:return{t:"indexed-access",object:this.resolveTypeNode(typeNode.objectType),index:this.resolveTypeNode(typeNode.indexType)};case _typescript.default.SyntaxKind.TupleType:if(_typescript.default.isTupleTypeNode(typeNode)){return{t:"tuple-type",elements:typeNode.elements.map(function(elem){return _this.resolveTypeNode(elem)})}}break;case undefined:throw new Error("typeNode undefined")}console.debug(typeNode);throw new Error("알 수 없는 SyntaxKind ".concat(typeNode.kind))}},{key:"printNode",value:function printNode(node,sourceFile){if(node===undefined){return undefined}var printer=_typescript.default.createPrinter({newLine:_typescript.default.NewLineKind.LineFeed});return printer.printNode(_typescript.default.EmitHint.Unspecified,node,sourceFile)}},{key:"autoloadApis",value:function autoloadApis(){return _async_to_generator(function(){var _this,pathPattern,filePaths,result;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;pathPattern=_path.default.join(_sonamu.Sonamu.apiRootPath,"/src/application/**/*.{model,frame}.ts");return[4,(0,_utils.globAsync)(pathPattern)];case 1:filePaths=_state.sent();return[4,Promise.all(filePaths.map(function(filePath){return _this.readApisFromFile(filePath)}))];case 2:result=_state.sent();this.apis=result.flat();return[2,this.apis]}})}).call(this)}},{key:"autoloadModels",value:function autoloadModels(){return _async_to_generator(function(){var pathPattern,filePaths,modules,functions;return _ts_generator(this,function(_state){switch(_state.label){case 0:pathPattern=_path.default.join(_sonamu.Sonamu.apiRootPath,"dist/application/**/*.{model,frame}.js");return[4,(0,_utils.globAsync)(pathPattern)];case 1:return[4,_asyncutils.filterAsync.apply(void 0,[_state.sent(),function(path){return _async_to_generator(function(){var srcPath;return _ts_generator(this,function(_state){switch(_state.label){case 0:srcPath=path.replace("/dist/","/src/").replace(".js",".ts");return[4,(0,_fsutils.exists)(srcPath)];case 1:return[2,_state.sent()]}})})()}])];case 2:filePaths=_state.sent();return[4,(0,_utils.importMultiple)(filePaths)];case 3:modules=_state.sent();functions=modules.map(function(param){var imported=param.imported;return Object.entries(imported)}).flat();this.models=Object.fromEntries(functions.filter(function(param){var _param=_sliced_to_array(param,1),name=_param[0];return name.endsWith("Model")||name.endsWith("Frame")}));return[2,this.models]}})}).call(this)}},{key:"autoloadTypes",value:function autoloadTypes(){var doRefresh=arguments.length>0&&arguments[0]!==void 0?arguments[0]:false;return _async_to_generator(function(){var pathPatterns,filePaths,modules,functions;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(!doRefresh&&Object.keys(this.types).length>0){return[2,this.types]}pathPatterns=[_path.default.join(_sonamu.Sonamu.apiRootPath,"/dist/application/**/*.types.js"),_path.default.join(_sonamu.Sonamu.apiRootPath,"/dist/application/**/*.generated.js")];return[4,(0,_asyncutils.mapAsync)(pathPatterns,_utils.globAsync)];case 1:return[4,_asyncutils.filterAsync.apply(void 0,[_state.sent().flat(),function(path){return _async_to_generator(function(){var srcPath;return _ts_generator(this,function(_state){switch(_state.label){case 0:srcPath=path.replace("/dist/","/src/").replace(".js",".ts");return[4,(0,_fsutils.exists)(srcPath)];case 1:return[2,_state.sent()]}})})()}])];case 2:filePaths=_state.sent();return[4,(0,_utils.importMultiple)(filePaths,doRefresh)];case 3:modules=_state.sent();functions=modules.map(function(param){var imported=param.imported;return Object.entries(imported)}).flat();this.types=Object.fromEntries(functions.filter(function(param){var _param=_sliced_to_array(param,2),f=_param[1];return _instanceof(f,_zod.z.ZodType)}));return[2,this.types]}})}).call(this)}},{key:"getTemplate",value:function getTemplate(key){if(key==="entity"){return new _entitytemplate.Template__entity}else if(key==="init_types"){return new _init_typestemplate.Template__init_types}else if(key==="generated"){return new _generatedtemplate.Template__generated}else if(key==="generated_sso"){return new _generated_ssotemplate.Template__generated_sso}else if(key==="generated_http"){return new _generated_httptemplate.Template__generated_http}else if(key==="model"){return new _modeltemplate.Template__model}else if(key==="model_test"){return new _model_testtemplate.Template__model_test}else if(key==="service"){return new _servicetemplate.Template__service}else if(key==="view_list"){return new _view_listtemplate.Template__view_list}else if(key==="view_list_columns"){return new _view_list_columnstemplate.Template__view_list_columns}else if(key==="view_search_input"){return new _view_search_inputtemplate.Template__view_search_input}else if(key==="view_form"){return new _view_formtemplate.Template__view_form}else if(key==="view_id_all_select"){return new _view_id_all_selecttemplate.Template__view_id_all_select}else if(key==="view_id_async_select"){return new _view_id_async_selecttemplate.Template__view_id_async_select}else if(key==="view_enums_select"){return new _view_enums_selecttemplate.Template__view_enums_select}else if(key==="view_enums_dropdown"){return new _view_enums_dropdowntemplate.Template__view_enums_dropdown}else if(key==="view_enums_buttonset"){return new _view_enums_buttonsettemplate.Template__view_enums_buttonset}else{throw new _soexceptions.BadRequestException("잘못된 템플릿 키 ".concat(key))}}},{key:"renderTemplate",value:function renderTemplate(key,options){return _async_to_generator(function(){var _this,_template,template,extra,modelTsPath,entityId,columnsNode,listParamsZodType,listParamsNode,saveParamsZodType,saveParamsNode,rendered,resolved,preTemplateResolved;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;template=this.getTemplate(key);extra=[];if(!(key==="service"))return[3,2];modelTsPath=options.modelTsPath;return[4,this.readApisFromFile(modelTsPath)];case 1:extra=[_state.sent()];return[3,7];case 2:if(!["model","view_list","view_form"].includes(key))return[3,7];entityId=options.entityId;if(!(key==="view_list"||key==="model"))return[3,5];return[4,this.getColumnsNode(entityId,"A")];case 3:columnsNode=_state.sent();return[4,this.getZodTypeById("".concat(entityId,"ListParams"))];case 4:listParamsZodType=_state.sent();listParamsNode=this.zodTypeToRenderingNode(listParamsZodType);extra=[columnsNode,listParamsNode];return[3,7];case 5:if(!(key==="view_form"))return[3,7];return[4,this.getZodTypeById("".concat(entityId,"SaveParams"))];case 6:saveParamsZodType=_state.sent();saveParamsNode=this.zodTypeToRenderingNode(saveParamsZodType);extra=[saveParamsNode];_state.label=7;case 7:return[4,(_template=template).render.apply(_template,[options].concat(_to_consumable_array(extra)))];case 8:rendered=_state.sent();return[4,this.resolveRenderedTemplate(key,rendered)];case 9:resolved=_state.sent();preTemplateResolved=[];if(!rendered.preTemplates)return[3,11];return[4,Promise.all(rendered.preTemplates.map(function(param){var _$key=param.key,_$options=param.options;return _this.renderTemplate(_$key,_$options)}))];case 10:preTemplateResolved=_state.sent().flat();_state.label=11;case 11:return[2,[resolved].concat(_to_consumable_array(preTemplateResolved))]}})}).call(this)}},{key:"resolveRenderedTemplate",value:function resolveRenderedTemplate(key,result){return _async_to_generator(function(){var target,filePath,body,importKeys,customHeaders,importDefs,header,formatted;return _ts_generator(this,function(_state){switch(_state.label){case 0:target=result.target,filePath=result.path,body=result.body,importKeys=result.importKeys,customHeaders=result.customHeaders;importDefs=importKeys.reduce(function(r,importKey){var modulePath=_entitymanager.EntityManager.getModulePath(importKey);var importPath=modulePath;if(modulePath.includes("/")||modulePath.includes(".")){importPath=(0,_lodashable.wrapIf)(_path.default.relative(_path.default.dirname(filePath),modulePath),function(p){return[p.startsWith(".")===false,"./"+p]})}var existsOne=r.find(function(importDef){return importDef.from===importPath});if(existsOne){existsOne.keys=_lodash.default.uniq(existsOne.keys.concat(importKey))}else{r.push({keys:[importKey],from:importPath})}return r},[]).filter(function(importDef){return filePath.endsWith(importDef.from.replace("./","")+".ts")===false});header=_to_consumable_array(customHeaders!==null&&customHeaders!==void 0?customHeaders:[]).concat(_to_consumable_array(importDefs.map(function(importDef){return"import { ".concat(importDef.keys.join(", ")," } from '").concat(importDef.from,"'")}))).join("\n");return[4,function(){return _async_to_generator(function(){return _ts_generator(this,function(_state){if(key==="generated_http"){return[2,[header,body].join("\n\n")]}else{return[2,_prettier.default.format([header,body].join("\n\n"),{parser:key==="entity"?"json":"typescript"})]}return[2]})})()}()];case 1:formatted=_state.sent();return[2,{path:target+"/"+filePath,code:formatted}]}})})()}},{key:"writeCodeToPath",value:function writeCodeToPath(pathAndCode){return _async_to_generator(function(){var targets,appRootPath,filePath,dstFilePaths;return _ts_generator(this,function(_state){switch(_state.label){case 0:targets=_sonamu.Sonamu.config.sync.targets;appRootPath=_sonamu.Sonamu.appRootPath;filePath="".concat(_sonamu.Sonamu.appRootPath,"/").concat(pathAndCode.path);dstFilePaths=_lodash.default.uniq(targets.map(function(target){return filePath.replace("/:target/","/".concat(target,"/"))}));return[4,Promise.all(dstFilePaths.map(function(dstFilePath){return _async_to_generator(function(){var dir;return _ts_generator(this,function(_state){switch(_state.label){case 0:dir=_path.default.dirname(dstFilePath);return[4,(0,_fsutils.exists)(dir)];case 1:if(!!_state.sent())return[3,3];return[4,(0,_promises.mkdir)(dir,{recursive:true})];case 2:_state.sent();_state.label=3;case 3:return[4,(0,_promises.writeFile)(dstFilePath,pathAndCode.code)];case 4:_state.sent();console.log(_chalk.default.bold("Generated: ")+_chalk.default.blue("".concat(dstFilePath.replace(appRootPath+"/",""))));return[2,dstFilePath]}})})()}))];case 1:return[2,_state.sent()]}})})()}},{key:"generateTemplate",value:function generateTemplate(key,templateOptions,_generateOptions){return _async_to_generator(function(){var _this,generateOptions,keys,pathAndCodes,filteredPathAndCodes;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;generateOptions=_object_spread({overwrite:false},_generateOptions);keys=[key];return[4,Promise.all(keys.map(function(key){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.renderTemplate(key,templateOptions)];case 1:return[2,_state.sent()]}})}).call(_this)}))];case 1:pathAndCodes=_state.sent().flat();return[4,function(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:if(!(generateOptions.overwrite===true))return[3,1];return[2,pathAndCodes];case 1:return[4,(0,_asyncutils.filterAsync)(pathAndCodes,function(pathAndCode){return _async_to_generator(function(){var targets,filePath,dstFilePaths;return _ts_generator(this,function(_state){switch(_state.label){case 0:targets=_sonamu.Sonamu.config.sync.targets;filePath="".concat(_sonamu.Sonamu.appRootPath,"/").concat(pathAndCode.path);dstFilePaths=targets.map(function(target){return filePath.replace("/:target/","/".concat(target,"/"))});return[4,(0,_asyncutils.everyAsync)(dstFilePaths,function(dstPath){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(0,_fsutils.exists)(dstPath)];case 1:return[2,!_state.sent()]}})})()})];case 1:return[2,_state.sent()]}})})()})];case 2:return[2,_state.sent()];case 3:return[2]}})})()}()];case 2:filteredPathAndCodes=_state.sent();if(filteredPathAndCodes.length===0){throw new _soexceptions.AlreadyProcessedException("이미 경로에 모든 파일이 존재합니다.")}return[2,Promise.all(filteredPathAndCodes.map(function(pathAndCode){return _this.writeCodeToPath(pathAndCode)}))]}})}).call(this)}},{key:"checkExistsGenCode",value:function checkExistsGenCode(entityId,templateKey,enumId){return _async_to_generator(function(){var _this_getTemplate_getTargetAndPath,target,genPath,fullPath,subPath,_tmp;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this_getTemplate_getTargetAndPath=this.getTemplate(templateKey).getTargetAndPath(_entitymanager.EntityManager.getNamesFromId(entityId),enumId),target=_this_getTemplate_getTargetAndPath.target,genPath=_this_getTemplate_getTargetAndPath.path;fullPath=_path.default.join(_sonamu.Sonamu.appRootPath,target,genPath);subPath=_path.default.join(target,genPath);_tmp={subPath:subPath,fullPath:fullPath};return[4,(0,_fsutils.exists)(fullPath)];case 1:return[2,(_tmp.isExists=_state.sent(),_tmp)]}})}).call(this)}},{key:"checkExists",value:function checkExists(entityId,enums){return _async_to_generator(function(){var _this,keys,names,enumsKeys;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;keys=_types.TemplateKey.options;names=_entitymanager.EntityManager.getNamesFromId(entityId);enumsKeys=Object.keys(enums).filter(function(name){return name!==names.constant});return[4,(0,_asyncutils.reduceAsync)(keys,function(result,key){return _async_to_generator(function(){var tpl,_tpl_getTargetAndPath,target,p,targets;return _ts_generator(this,function(_state){switch(_state.label){case 0:tpl=this.getTemplate(key);if(!key.startsWith("view_enums"))return[3,2];return[4,(0,_asyncutils.mapAsync)(enumsKeys,function(componentId){return _async_to_generator(function(){var _tpl_getTargetAndPath,target,p,_;return _ts_generator(this,function(_state){switch(_state.label){case 0:_tpl_getTargetAndPath=tpl.getTargetAndPath(names,componentId),target=_tpl_getTargetAndPath.target,p=_tpl_getTargetAndPath.path;_="".concat(key,"__").concat(componentId);return[4,(0,_fsutils.exists)(_path.default.join(_sonamu.Sonamu.appRootPath,target,p))];case 1:result[_]=_state.sent();return[2]}})})()})];case 1:_state.sent();return[2,result];case 2:_tpl_getTargetAndPath=tpl.getTargetAndPath(names),target=_tpl_getTargetAndPath.target,p=_tpl_getTargetAndPath.path;targets=_sonamu.Sonamu.config.sync.targets;if(!target.includes(":target"))return[3,4];return[4,(0,_asyncutils.mapAsync)(targets,function(t){return _async_to_generator(function(){var _;return _ts_generator(this,function(_state){switch(_state.label){case 0:_="".concat(key,"__").concat(t);return[4,(0,_fsutils.exists)(_path.default.join(_sonamu.Sonamu.appRootPath,target.replace(":target",t),p))];case 1:result[_]=_state.sent();return[2]}})})()})];case 3:_state.sent();return[3,6];case 4:return[4,(0,_fsutils.exists)(_path.default.join(_sonamu.Sonamu.appRootPath,target,p))];case 5:result[key]=_state.sent();_state.label=6;case 6:return[2,result]}})}).call(_this)},{})];case 1:return[2,_state.sent()]}})}).call(this)}},{key:"getZodTypeById",value:function getZodTypeById(zodTypeId){return _async_to_generator(function(){var modulePath,moduleAbsPath,importPath,imported;return _ts_generator(this,function(_state){switch(_state.label){case 0:modulePath=_entitymanager.EntityManager.getModulePath(zodTypeId);moduleAbsPath=_path.default.join(_sonamu.Sonamu.apiRootPath,"dist","application",modulePath+".js");importPath="./"+_path.default.relative(__dirname,moduleAbsPath);return[4,Promise.resolve(importPath).then(function(p){return /*#__PURE__*/_interop_require_wildcard(require(p))})];case 1:imported=_state.sent();if(!imported[zodTypeId]){throw new Error("존재하지 않는 zodTypeId ".concat(zodTypeId))}return[2,imported[zodTypeId].describe(zodTypeId)]}})})()}},{key:"propNodeToZodType",value:function propNodeToZodType(propNode){return _async_to_generator(function(){var _this,innerType,_propNode_prop,obj;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;if(!(propNode.nodeType==="plain"))return[3,1];return[2,this.propToZodType(propNode.prop)];case 1:if(!(propNode.nodeType==="array"))return[3,7];if(!(propNode.prop===undefined))return[3,2];throw new Error;case 2:if(!(propNode.children.length>0))return[3,4];return[4,this.propNodeToZodType(_object_spread_props(_object_spread({},propNode),{nodeType:"object"}))];case 3:return[2,_state.sent().array()];case 4:return[4,this.propToZodType(propNode.prop)];case 5:innerType=_state.sent();if(propNode.prop.nullable===true){return[2,_zod.z.array(innerType).nullable()]}else{return[2,_zod.z.array(innerType)]}_state.label=6;case 6:return[3,10];case 7:if(!(propNode.nodeType==="object"))return[3,9];return[4,propNode.children.reduce(function(promise,childPropNode){return _async_to_generator(function(){var result,_;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,promise];case 1:result=_state.sent();_=childPropNode.prop.name;return[4,this.propNodeToZodType(childPropNode)];case 2:result[_]=_state.sent();return[2,result]}})}).call(_this)},{})];case 8:obj=_state.sent();if(((_propNode_prop=propNode.prop)===null||_propNode_prop===void 0?void 0:_propNode_prop.nullable)===true){return[2,_zod.z.object(obj).nullable()]}else{return[2,_zod.z.object(obj)]}return[3,10];case 9:throw Error;case 10:return[2]}})}).call(this)}},{key:"propToZodType",value:function propToZodType(prop){return _async_to_generator(function(){var zodType;return _ts_generator(this,function(_state){switch(_state.label){case 0:zodType=_zod.z.unknown();if(!(0,_types.isIntegerProp)(prop))return[3,1];zodType=_zod.z.number().int();return[3,19];case 1:if(!(0,_types.isBigIntegerProp)(prop))return[3,2];zodType=_zod.z.bigint();return[3,19];case 2:if(!(0,_types.isTextProp)(prop))return[3,3];zodType=_zod.z.string().max((0,_codeconverters.getTextTypeLength)(prop.textType));return[3,19];case 3:if(!(0,_types.isEnumProp)(prop))return[3,5];return[4,this.getZodTypeById(prop.id)];case 4:zodType=_state.sent();return[3,19];case 5:if(!(0,_types.isStringProp)(prop))return[3,6];zodType=_zod.z.string().max(prop.length);return[3,19];case 6:if(!((0,_types.isFloatProp)(prop)||(0,_types.isDoubleProp)(prop)))return[3,7];zodType=_zod.z.number();return[3,19];case 7:if(!(0,_types.isDecimalProp)(prop))return[3,8];zodType=_zod.z.string();return[3,19];case 8:if(!(0,_types.isBooleanProp)(prop))return[3,9];zodType=_zod.z.boolean();return[3,19];case 9:if(!(0,_types.isDateProp)(prop))return[3,10];zodType=_zod.z.string().length(10);return[3,19];case 10:if(!(0,_types.isTimeProp)(prop))return[3,11];zodType=_zod.z.string().length(8);return[3,19];case 11:if(!(0,_types.isDateTimeProp)(prop))return[3,12];zodType=_zod.z.date();return[3,19];case 12:if(!(0,_types.isTimestampProp)(prop))return[3,13];zodType=_zod.z.date();return[3,19];case 13:if(!(0,_types.isJsonProp)(prop))return[3,15];return[4,this.getZodTypeById(prop.id)];case 14:zodType=_state.sent();return[3,19];case 15:if(!(0,_types.isUuidProp)(prop))return[3,16];zodType=_zod.z.uuid();return[3,19];case 16:if(!(0,_types.isVirtualProp)(prop))return[3,18];return[4,this.getZodTypeById(prop.id)];case 17:zodType=_state.sent();return[3,19];case 18:if((0,_types.isRelationProp)(prop)){if((0,_types.isBelongsToOneRelationProp)(prop)||(0,_types.isOneToOneRelationProp)(prop)&&prop.hasJoinColumn){zodType=_zod.z.number().int()}}else{throw new Error("prop을 zodType으로 변환하는데 실패 ".concat(prop,"}"))}_state.label=19;case 19:if(prop.unsigned){zodType=zodType.nonnegative()}if(prop.nullable){zodType=zodType.nullable()}return[2,zodType]}})}).call(this)}},{key:"resolveRenderType",value:function resolveRenderType(key,zodType){if(_instanceof(zodType,_zod.z.ZodDate)){return"datetime"}else if(_instanceof(zodType,_zod.z.ZodString)){if(key.includes("img")||key.includes("image")){return"string-image"}else if(zodType.description==="SQLDateTimeString"){return"string-datetime"}else if(key.endsWith("date")){return"string-date"}else{return"string-plain"}}else if(_instanceof(zodType,_zod.z.ZodNumber)){if(key==="id"){return"number-id"}else if(key.endsWith("_id")){return"number-fk_id"}else{return"number-plain"}}else if(_instanceof(zodType,_zod.z.ZodBoolean)){return"boolean"}else if(_instanceof(zodType,_zod.z.ZodEnum)){return"enums"}else if(_instanceof(zodType,_zod.z.ZodRecord)){return"record"}else if(_instanceof(zodType,_zod.z.ZodAny)||_instanceof(zodType,_zod.z.ZodUnknown)){return"string-plain"}else if(_instanceof(zodType,_zod.z.ZodUnion)){return"string-plain"}else if(_instanceof(zodType,_zod.z.ZodLiteral)){return"string-plain"}else{throw new Error("타입 파싱 불가 ".concat(key," ").concat(zodType.def.type))}}},{key:"zodTypeToRenderingNode",value:function zodTypeToRenderingNode(zodType){var _this=this;var baseKey=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"root";var def={name:baseKey,label:_inflection.default.camelize(baseKey,false),zodType:zodType};if(_instanceof(zodType,_zod.z.ZodObject)){var columnKeys=Object.keys(zodType.shape);var children=columnKeys.map(function(key){var innerType=zodType.shape[key];return _this.zodTypeToRenderingNode(innerType,key)});return _object_spread_props(_object_spread({},def),{renderType:"object",children:children})}else if(_instanceof(zodType,_zod.z.ZodArray)){var innerType=zodType.def.element;if(_instanceof(innerType,_zod.z.ZodString)&&baseKey.includes("images")){return _object_spread_props(_object_spread({},def),{renderType:"array-images"})}return _object_spread_props(_object_spread({},def),{renderType:"array",element:this.zodTypeToRenderingNode(innerType,baseKey)})}else if(_instanceof(zodType,_zod.z.ZodUnion)){var optionNodes=zodType.def.options.map(function(opt){return _this.zodTypeToRenderingNode(opt,baseKey)});return optionNodes[0]}else if(_instanceof(zodType,_zod.z.ZodOptional)){return _object_spread_props(_object_spread({},this.zodTypeToRenderingNode(zodType.def.innerType,baseKey)),{optional:true})}else if(_instanceof(zodType,_zod.z.ZodNullable)){return _object_spread_props(_object_spread({},this.zodTypeToRenderingNode(zodType.def.innerType,baseKey)),{nullable:true})}else{return _object_spread_props(_object_spread({},def),{renderType:this.resolveRenderType(baseKey,zodType)})}}},{key:"getColumnsNode",value:function getColumnsNode(entityId,subsetKey){return _async_to_generator(function(){var entity,subsetA,propNodes,rootPropNode,columnsZodType,columnsNode;return _ts_generator(this,function(_state){switch(_state.label){case 0:entity=_entitymanager.EntityManager.get(entityId);subsetA=entity.subsets[subsetKey];if(subsetA===undefined){throw new _soexceptions.ServiceUnavailableException("SubsetA 가 없습니다.")}propNodes=entity.fieldExprsToPropNodes(subsetA);rootPropNode={nodeType:"object",children:propNodes};return[4,this.propNodeToZodType(rootPropNode)];case 1:columnsZodType=_state.sent();columnsNode=this.zodTypeToRenderingNode(columnsZodType);columnsNode.children=columnsNode.children.map(function(child){if(child.renderType==="object"){var pickedCol=child.children.find(function(cc){return["title","name"].includes(cc.name)});if(pickedCol){return _object_spread_props(_object_spread({},child),{renderType:"object-pick",config:{picked:pickedCol.name}})}else{return child}}else if(child.renderType==="array"&&child.element&&child.element.renderType==="object"){var pickedCol1=child.element.children.find(function(cc){return["title","name"].includes(cc.name)});if(pickedCol1){return _object_spread_props(_object_spread({},child),{element:_object_spread_props(_object_spread({},child.element),{renderType:"object-pick",config:{picked:pickedCol1.name}})})}else{return child}}return child});return[2,columnsNode]}})}).call(this)}},{key:"createEntity",value:function createEntity(form){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:if(!/^[A-Z][a-zA-Z0-9]*$/.test(form.entityId)){throw new _soexceptions.BadRequestException("entityId는 CamelCase 형식이어야 합니다.")}return[4,this.generateTemplate("entity",form)];case 1:_state.sent();return[4,_entitymanager.EntityManager.reload()];case 2:_state.sent();return[2]}})}).call(this)}},{key:"delEntity",value:function delEntity(entityId){return _async_to_generator(function(){var entity,delPaths,_iteratorAbruptCompletion,_didIteratorError,_iteratorError,_iterator,_step,_value,delPath,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:entity=_entitymanager.EntityManager.get(entityId);delPaths=function(){if(entity.parentId){return["".concat(_sonamu.Sonamu.apiRootPath,"/src/application/").concat(entity.names.parentFs,"/").concat(entity.names.fs,".entity.json")]}else{return["".concat(_sonamu.Sonamu.apiRootPath,"/src/application/").concat(entity.names.fs),"".concat(_sonamu.Sonamu.apiRootPath,"/dist/application/").concat(entity.names.fs)].concat(_to_consumable_array(_sonamu.Sonamu.config.sync.targets.map(function(target){return["".concat(_sonamu.Sonamu.appRootPath,"/").concat(target,"/src/services/").concat(entity.names.fs)]}).flat()))}}();_iteratorAbruptCompletion=false,_didIteratorError=false;_state.label=1;case 1:_state.trys.push([1,9,10,15]);_iterator=_async_iterator(delPaths);_state.label=2;case 2:return[4,_iterator.next()];case 3:if(!(_iteratorAbruptCompletion=!(_step=_state.sent()).done))return[3,8];_value=_step.value;delPath=_value;return[4,(0,_fsutils.exists)(delPath)];case 4:if(!_state.sent())return[3,6];console.log(_chalk.default.red("DELETE ".concat(delPath)));return[4,(0,_promises.rm)(delPath,{recursive:true,force:true})];case 5:_state.sent();return[3,7];case 6:console.log(_chalk.default.yellow("NOT_EXISTS ".concat(delPath)));_state.label=7;case 7:_iteratorAbruptCompletion=false;return[3,2];case 8:return[3,15];case 9:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,15];case 10:_state.trys.push([10,,13,14]);if(!(_iteratorAbruptCompletion&&_iterator.return!=null))return[3,12];return[4,_iterator.return()];case 11:_state.sent();_state.label=12;case 12:return[3,14];case 13:if(_didIteratorError){throw _iteratorError}return[7];case 14:return[7];case 15:return[4,_entitymanager.EntityManager.reload()];case 16:_state.sent();return[2,{delPaths:delPaths}]}})})()}},{key:"syncUI",value:function syncUI(){var _Sonamu_config_ui;var _Sonamu_config_ui_port;var uiPort=(_Sonamu_config_ui_port=(_Sonamu_config_ui=_sonamu.Sonamu.config.ui)===null||_Sonamu_config_ui===void 0?void 0:_Sonamu_config_ui.port)!==null&&_Sonamu_config_ui_port!==void 0?_Sonamu_config_ui_port:57e3;fetch("http://127.0.0.1:".concat(uiPort,"/api/reload"),{method:"GET"}).catch(function(e){return console.log(_chalk.default.dim("Failed to reload Sonamu UI: ".concat(e.message)))})}}]);return Syncer}();
2
+ //# sourceMappingURL=syncer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/syncer/syncer.ts"],"sourcesContent":["import path, { dirname } from \"path\";\nimport { globAsync, importMultiple } from \"../utils/utils\";\nimport { createReadStream } from \"fs\";\nimport { mkdir, readFile, rm, writeFile } from \"fs/promises\";\nimport { exists } from \"../utils/fs-utils\";\nimport crypto from \"crypto\";\nimport equal from \"fast-deep-equal\";\nimport _, { chunk } from \"lodash\";\nimport inflection from \"inflection\";\nimport { EntityManager, EntityNamesRecord } from \"../entity/entity-manager\";\nimport ts from \"typescript\";\nimport {\n ApiParam,\n ApiParamType,\n EntityProp,\n EntityPropNode,\n isBelongsToOneRelationProp,\n isBigIntegerProp,\n isBooleanProp,\n isDateProp,\n isDateTimeProp,\n isDecimalProp,\n isDoubleProp,\n isEnumProp,\n isFloatProp,\n isIntegerProp,\n isJsonProp,\n isOneToOneRelationProp,\n isRelationProp,\n isStringProp,\n isTextProp,\n isTimeProp,\n isTimestampProp,\n isUuidProp,\n isVirtualProp,\n} from \"../types/types\";\nimport {\n ApiDecoratorOptions,\n registeredApis,\n ExtendedApi,\n} from \"../api/decorators\";\nimport { z } from \"zod\";\nimport chalk from \"chalk\";\nimport {\n TemplateKey,\n PathAndCode,\n TemplateOptions,\n GenerateOptions,\n RenderingNode,\n} from \"../types/types\";\nimport {\n AlreadyProcessedException,\n BadRequestException,\n ServiceUnavailableException,\n} from \"../exceptions/so-exceptions\";\nimport { wrapIf } from \"../utils/lodash-able\";\nimport { getTextTypeLength } from \"../api/code-converters\";\nimport { Template } from \"../templates/base-template\";\nimport { Template__generated } from \"../templates/generated.template\";\nimport { Template__init_types } from \"../templates/init_types.template\";\nimport { Template__entity } from \"../templates/entity.template\";\nimport { Template__model } from \"../templates/model.template\";\nimport { Template__model_test } from \"../templates/model_test.template\";\nimport { Template__service } from \"../templates/service.template\";\nimport { Template__view_form } from \"../templates/view_form.template\";\nimport { Template__view_list } from \"../templates/view_list.template\";\nimport prettier from \"prettier\";\nimport { Template__view_id_all_select } from \"../templates/view_id_all_select.template\";\nimport { Template__view_id_async_select } from \"../templates/view_id_async_select.template\";\nimport { Template__view_enums_dropdown } from \"../templates/view_enums_dropdown.template\";\nimport { Template__view_enums_select } from \"../templates/view_enums_select.template\";\nimport { Template__view_enums_buttonset } from \"../templates/view_enums_buttonset.template\";\nimport { Template__view_search_input } from \"../templates/view_search_input.template\";\nimport { Template__view_list_columns } from \"../templates/view_list_columns.template\";\nimport { Template__generated_http } from \"../templates/generated_http.template\";\nimport { Sonamu } from \"../api/sonamu\";\nimport { Template__generated_sso } from \"../templates/generated_sso.template\";\nimport { setTimeout as setTimeoutPromises } from \"timers/promises\";\nimport assert from \"assert\";\nimport * as swc from \"@swc/core\";\nimport { minimatch } from \"minimatch\";\nimport {\n everyAsync,\n filterAsync,\n mapAsync,\n reduceAsync,\n} from \"../utils/async-utils\";\n\ntype FileType =\n | \"model\"\n | \"types\"\n | \"functions\"\n | \"generated\"\n | \"entity\"\n | \"frame\";\ntype GlobPattern = {\n [key in FileType]: string;\n};\ntype PathAndChecksum = {\n path: string;\n checksum: string;\n};\ntype DiffGroups = {\n [key in FileType]: string[];\n};\nexport type RenderedTemplate = {\n target: string;\n path: string;\n body: string;\n importKeys: string[];\n customHeaders?: string[];\n preTemplates?: {\n key: TemplateKey;\n options: TemplateOptions[TemplateKey];\n }[];\n};\n\nexport class Syncer {\n apis: {\n typeParameters: ApiParamType.TypeParam[];\n parameters: ApiParam[];\n returnType: ApiParamType;\n modelName: string;\n methodName: string;\n path: string;\n options: ApiDecoratorOptions;\n }[] = [];\n types: { [typeName: string]: z.ZodObject<any> } = {};\n models: { [modelName: string]: unknown } = {};\n isSyncing: boolean = false;\n\n public checksumPatternGroup: GlobPattern = {\n /* 원본 체크 */\n entity: Sonamu.apiRootPath + \"/src/application/**/*.entity.json\",\n types: Sonamu.apiRootPath + \"/src/application/**/*.types.ts\",\n generated: Sonamu.apiRootPath + \"/src/application/sonamu.generated.ts\",\n functions: Sonamu.apiRootPath + \"/src/application/**/*.functions.ts\",\n /* compiled-JS 체크 */\n model: Sonamu.apiRootPath + \"/dist/application/**/*.model.js\",\n frame: Sonamu.apiRootPath + \"/dist/application/**/*.frame.js\",\n };\n\n get checksumsPath(): string {\n return path.join(Sonamu.apiRootPath, \"/sonamu.lock\");\n }\n public constructor() {}\n\n async sync(): Promise<void> {\n const { targets } = Sonamu.config.sync;\n\n // 번들러 여부에 따라 현재 디렉토리가 바뀌므로\n const currentDirname = __dirname.endsWith(\"/syncer\")\n ? __dirname\n : path.join(__dirname, \"./syncer\");\n\n // 트리거와 무관하게 shared 분배\n await Promise.all(\n targets.map(async (target) => {\n const srcCodePath = path\n .join(currentDirname, `../shared/${target}.shared.ts.txt`)\n .replace(\"/dist/\", \"/src/\");\n if (!(await exists(srcCodePath))) {\n return;\n }\n\n const dstCodePath = path.join(\n Sonamu.appRootPath,\n target,\n \"src/services/sonamu.shared.ts\"\n );\n\n const srcChecksum = await this.getChecksumOfFile(srcCodePath);\n const dstChecksum = await (async () => {\n if (!(await exists(dstCodePath))) {\n return \"\";\n }\n return this.getChecksumOfFile(dstCodePath);\n })();\n\n if (srcChecksum === dstChecksum) {\n return;\n }\n await writeFile(dstCodePath, await readFile(srcCodePath));\n console.log(chalk.blue(\"shared.ts is synced\"));\n })\n );\n\n // 현재 checksums\n let currentChecksums = await this.getCurrentChecksums();\n // 이전 checksums\n const previousChecksums = await this.getPreviousChecksums();\n\n // 비교\n const isSame = equal(currentChecksums, previousChecksums);\n if (isSame) {\n const msg = \"All files are synced!\";\n const margin = (process.stdout.columns - msg.length) / 2;\n console.log(\n chalk.black.bgGreen(\" \".repeat(margin) + msg + \" \".repeat(margin))\n );\n return;\n }\n\n const abc = new AbortController();\n this.isSyncing = true;\n const onSIGUSR2 = async () => {\n if (this.isSyncing === false) {\n process.exit(0);\n }\n console.log(chalk.magentaBright(`wait for syncing done....`));\n\n // 싱크 완료 대기\n try {\n await setTimeoutPromises(20000, \"waiting-sync\", { signal: abc.signal });\n } catch {}\n console.log(chalk.magentaBright(`Syncing DONE!`));\n process.exit(0);\n };\n process.on(\"SIGUSR2\", onSIGUSR2);\n\n // 변경된 파일 찾기\n const diff = _.differenceWith(\n currentChecksums,\n previousChecksums,\n _.isEqual\n );\n const diffFiles = diff.map((r) => r.path);\n console.log(\"Changed Files: \", diffFiles);\n\n const { changedChecksums } = await this.doSyncActions(\n diffFiles,\n currentChecksums\n );\n // checksum 오버라이드 (액션 실행 과정 중간에 체크섬이 바뀐 경우)\n currentChecksums = changedChecksums ?? currentChecksums;\n\n // 저장\n await this.saveChecksums(currentChecksums);\n\n // 싱크 종료\n this.isSyncing = false;\n abc.abort();\n process.off(\"SIGUSR2\", onSIGUSR2);\n }\n\n async doSyncActions(\n diffFiles: string[],\n currentChecksums?: PathAndChecksum[]\n ): Promise<{\n diffTypes: string[];\n changedChecksums?: PathAndChecksum[];\n }> {\n // 다른 부분 찾아 액션\n const diffGroups = _.groupBy(diffFiles, (r) => {\n const matched = r.match(\n /\\.(model|types|functions|entity|generated|frame)\\.[tj]s/\n );\n return matched?.[1] ?? \"unknown\";\n }) as unknown as DiffGroups;\n\n // 변경된 파일들을 타입별로 분리하여 각 타입별 액션 처리\n const diffTypes = Object.keys(diffGroups);\n\n // 트리거: entity, types\n // 액션: 스키마 생성\n if (diffTypes.includes(\"entity\") || diffTypes.includes(\"types\")) {\n await EntityManager.reload();\n\n await this.actionGenerateSchemas();\n\n // types 생성(entity 새로 추가된 경우)\n // parentId가 없고, types가 없는 경우에만 생성\n const entityId = this.getEntityIdFromPath([\n ...(diffGroups[\"entity\"] ?? []),\n ])[0];\n if (entityId) {\n const entity = EntityManager.get(entityId);\n const typeFilePath = path.join(\n Sonamu.apiRootPath,\n `src/application/${entity.names.fs}/${entity.names.fs}.types.ts`\n );\n if (entity.parentId === undefined && !(await exists(typeFilePath))) {\n await this.generateTemplate(\"init_types\", { entityId });\n }\n }\n\n // generated 싱크까지 동시에 처리 후 체크섬 갱신\n diffGroups[\"generated\"] = _.uniq([\n ...(diffGroups[\"generated\"] ?? []),\n \"/src/application/sonamu.generated.ts\",\n ]);\n diffTypes.push(\"generated\");\n\n // fullSync인 경우만 실행\n if (currentChecksums) {\n currentChecksums = await this.getCurrentChecksums();\n }\n }\n\n // 트리거: types, enums, generated 변경시\n // 액션: 파일 싱크 types, enums, generated\n if (\n diffTypes.includes(\"types\") ||\n diffTypes.includes(\"functions\") ||\n diffTypes.includes(\"generated\")\n ) {\n const tsPaths = _.uniq(\n [\n ...(diffGroups[\"types\"] ?? []),\n ...(diffGroups[\"functions\"] ?? []),\n ...(diffGroups[\"generated\"] ?? []),\n ].map((p) => p.replace(\"/dist/\", \"/src/\").replace(\".js\", \".ts\"))\n );\n await this.actionSyncFilesToTargets(tsPaths);\n }\n\n // 트리거: model\n if (diffTypes.includes(\"model\") || diffTypes.includes(\"frame\")) {\n const mergedGroup = [\n ...(diffGroups[\"model\"] ?? []),\n ...(diffGroups[\"frame\"] ?? []),\n ];\n\n // registeredApis 초기화\n await this.autoloadModels();\n\n // Syncer.apis 초기화\n await this.autoloadApis();\n\n const params: { namesRecord: EntityNamesRecord; modelTsPath: string }[] =\n mergedGroup.map((modelPath) => {\n if (modelPath.endsWith(\".model.js\")) {\n const entityId = this.getEntityIdFromPath([modelPath])[0];\n assert(entityId);\n return {\n namesRecord: EntityManager.getNamesFromId(entityId),\n modelTsPath: path.join(\n Sonamu.apiRootPath,\n modelPath\n .replace(\"/dist/\", \"/src/\")\n .replace(\".model.js\", \".model.ts\")\n ),\n };\n }\n if (modelPath.endsWith(\"frame.js\")) {\n const [, frameName] = modelPath.match(/.+\\/(.+)\\.frame.js$/) ?? [];\n assert(frameName);\n return {\n namesRecord: EntityManager.getNamesFromId(frameName),\n modelTsPath: path.join(\n Sonamu.apiRootPath,\n modelPath\n .replace(\"/dist/\", \"/src/\")\n .replace(\".frame.js\", \".frame.ts\")\n ),\n };\n }\n throw new Error(\"not reachable\");\n });\n await this.actionGenerateServices(params);\n\n await this.actionGenerateHttps();\n }\n\n return {\n diffTypes,\n changedChecksums: currentChecksums,\n };\n }\n\n async syncFromWatcher(diffFiles: string[]): Promise<void> {\n const tsFiles = diffFiles.filter((file) => file.endsWith(\".ts\"));\n const jsonFiles = diffFiles.filter((file) => file.endsWith(\".json\"));\n\n // transpile (성능 이슈를 고려하여 5개 동시 실행)\n const chunks = chunk(tsFiles, 5);\n let transpiledFilePaths: string[] = [];\n for (const chunk of chunks) {\n const _transpiledFilePaths = await Promise.all(\n chunk.map(async (diffFile) => {\n const { code, map } = await swc.transformFile(diffFile, {\n module: {\n type: \"commonjs\",\n },\n jsc: {\n parser: {\n syntax: \"typescript\",\n decorators: true,\n },\n target: \"es5\",\n },\n sourceMaps: true,\n });\n\n const jsPath = diffFile\n .replace(\"/src/\", \"/dist/\")\n .replace(\".ts\", \".js\");\n await mkdir(path.dirname(jsPath), { recursive: true }); // 파일 새로 추가된 경우 디렉토리 생성\n await writeFile(jsPath, code);\n\n if (map) {\n const mapPath = jsPath + \".map\";\n await mkdir(path.dirname(mapPath), { recursive: true });\n await writeFile(mapPath, map);\n\n const sourceMapComment =\n \"\\n//# sourceMappingURL=\" + path.basename(mapPath);\n await writeFile(jsPath, sourceMapComment, {\n flag: \"a\" /*파일 끝에 붙이기만 해요*/,\n });\n }\n\n console.log(\n chalk.bold(\"Transpiled: \") +\n chalk.blue(`${jsPath.replace(Sonamu.apiRootPath, \"api\")}`)\n );\n return jsPath;\n })\n );\n transpiledFilePaths.push(..._transpiledFilePaths);\n }\n\n // module reload - doSyncActions 전에 캐시 삭제\n function clearModuleAndDependents(filePath: string) {\n const resolved = require.resolve(filePath);\n const toDelete = new Set([resolved]);\n\n // 이 파일을 children으로 가진 모듈 찾기\n Object.keys(require.cache).forEach((key) => {\n const mod = require.cache[key];\n if (mod?.children?.some((child) => child.id === resolved)) {\n toDelete.add(key);\n }\n });\n\n toDelete.forEach((key) => {\n if (key.includes(\"dist/index.js\")) {\n process.kill(process.pid, \"SIGUSR2\");\n }\n delete require.cache[key];\n // console.debug(\n // chalk.bold(\"ModuleCleared: \") +\n // chalk.blue(`${key.replace(Sonamu.apiRootPath, \"api\")}`)\n // );\n });\n }\n transpiledFilePaths.map((filePath) => {\n clearModuleAndDependents(filePath);\n });\n\n // doSyncActions\n const allFilePaths = [...tsFiles, ...transpiledFilePaths, ...jsonFiles];\n const targetFilePaths = allFilePaths\n .filter((filePath) => {\n return Object.values(this.checksumPatternGroup).some((pattern) =>\n minimatch(filePath, pattern)\n );\n })\n .map((filePath) => \"/\" + path.relative(Sonamu.apiRootPath, filePath));\n await this.doSyncActions(targetFilePaths);\n\n this.apis = [];\n this.types = {};\n this.models = {};\n await this.autoloadTypes();\n await this.autoloadModels();\n await this.autoloadApis();\n\n this.syncUI();\n }\n\n getEntityIdFromPath(filePaths: string[]): string[] {\n return _.uniq(\n filePaths.map((p) => {\n const matched = p.match(/application\\/(.+)\\//);\n assert(matched && matched[1]);\n return inflection.camelize(matched[1].replace(/\\-/g, \"_\"));\n })\n );\n }\n\n async actionGenerateSchemas(): Promise<string[]> {\n return (\n await Promise.all([\n this.generateTemplate(\"generated_sso\", {}, { overwrite: true }),\n this.generateTemplate(\"generated\", {}, { overwrite: true }),\n ])\n )\n .flat()\n .flat();\n }\n\n async actionGenerateServices(\n paramsArray: {\n namesRecord: EntityNamesRecord;\n modelTsPath: string;\n }[]\n ): Promise<string[]> {\n return (\n await Promise.all(\n paramsArray.map(async (params) =>\n this.generateTemplate(\"service\", params, {\n overwrite: true,\n })\n )\n )\n )\n .flat()\n .flat();\n }\n\n async actionGenerateHttps(): Promise<string[]> {\n const [res] = await this.generateTemplate(\n \"generated_http\",\n {},\n { overwrite: true }\n );\n assert(res);\n return res;\n }\n\n async copyFileWithReplaceCoreToShared(fromPath: string, toPath: string) {\n if (!(await exists(fromPath))) {\n return;\n }\n\n const oldFileContent = (await readFile(fromPath)).toString();\n\n const newFileContent = (() => {\n const nfc = oldFileContent.replace(\n /from \"sonamu\"/g,\n `from \"src/services/sonamu.shared\"`\n );\n\n if (toPath.includes(\"/web/\")) {\n return nfc.replace(/from \"lodash\";/g, `from \"lodash-es\";`);\n } else {\n return nfc;\n }\n })();\n return writeFile(toPath, newFileContent);\n }\n\n async actionSyncFilesToTargets(tsPaths: string[]): Promise<string[]> {\n const { targets } = Sonamu.config.sync;\n const { dir: apiDir } = Sonamu.config.api;\n\n return (\n await Promise.all(\n targets.map(async (target) =>\n Promise.all(\n tsPaths.map(async (src) => {\n const realSrc = Sonamu.apiRootPath + src;\n const dst = realSrc\n .replace(`/${apiDir}/`, `/${target}/`)\n .replace(\"/application/\", \"/services/\");\n const dir = dirname(dst);\n if (!(await exists(dir))) {\n await mkdir(dir, { recursive: true });\n }\n console.log(\n chalk.bold(\"Copied: \") +\n chalk.blue(\n `Copied: ${dst.replace(Sonamu.appRootPath + \"/\", \"\")}`\n )\n );\n await this.copyFileWithReplaceCoreToShared(realSrc, dst);\n return dst;\n })\n )\n )\n )\n ).flat();\n }\n\n async getCurrentChecksums(): Promise<PathAndChecksum[]> {\n const filePaths = (\n await Promise.all(\n Object.entries(this.checksumPatternGroup).map(\n async ([_fileType, pattern]) => {\n return globAsync(pattern);\n }\n )\n )\n )\n .flat()\n .sort();\n\n const fileChecksums: {\n path: string;\n checksum: string;\n }[] = await Promise.all(\n filePaths.map(async (filePath) => {\n return {\n path: filePath.substring(Sonamu.apiRootPath.length),\n checksum: await this.getChecksumOfFile(filePath),\n };\n })\n );\n return fileChecksums;\n }\n\n async getPreviousChecksums(): Promise<PathAndChecksum[]> {\n if (!(await exists(this.checksumsPath))) {\n return [];\n }\n\n const previousChecksums = JSON.parse(\n (await readFile(this.checksumsPath, \"utf-8\"))\n ) as PathAndChecksum[];\n return previousChecksums;\n }\n\n async saveChecksums(checksums: PathAndChecksum[]): Promise<void> {\n await writeFile(\n this.checksumsPath,\n JSON.stringify(checksums, null, 2),\n \"utf-8\"\n );\n console.log(\"checksum saved\", this.checksumsPath);\n }\n\n async getChecksumOfFile(filePath: string): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n const hash = crypto.createHash(\"sha1\");\n const input = createReadStream(filePath);\n input.on(\"error\", reject);\n input.on(\"data\", function (chunk: any) {\n hash.update(chunk);\n });\n input.on(\"close\", function () {\n resolve(hash.digest(\"hex\"));\n });\n });\n }\n\n async readApisFromFile(filePath: string) {\n const sourceFile = ts.createSourceFile(\n filePath,\n (await readFile(filePath)).toString(),\n ts.ScriptTarget.Latest\n );\n\n const methods: Omit<ExtendedApi, \"path\" | \"options\">[] = [];\n let modelName: string = \"UnknownModel\";\n let methodName: string = \"unknownMethod\";\n const visitor = (node: ts.Node) => {\n if (ts.isClassDeclaration(node)) {\n if (node.name && ts.isIdentifier(node.name)) {\n modelName = node.name.escapedText.toString().replace(/Class$/, \"\");\n }\n }\n if (ts.isMethodDeclaration(node)) {\n if (ts.isIdentifier(node.name)) {\n methodName = node.name.escapedText.toString();\n }\n\n const typeParameters: ApiParamType.TypeParam[] = (\n node.typeParameters ?? []\n ).map((typeParam) => {\n const tp = typeParam as ts.TypeParameterDeclaration;\n\n return {\n t: \"type-param\",\n id: tp.name.escapedText.toString(),\n constraint: tp.constraint\n ? this.resolveTypeNode(tp.constraint)\n : undefined,\n };\n });\n const parameters: ApiParam[] = node.parameters.map(\n (paramDec, index) => {\n const defaultDef = this.printNode(paramDec.initializer, sourceFile);\n\n // 기본값이 있는 경우 paramDec.type가 undefined로 나옴\n\n return this.resolveParamDec(\n {\n name: paramDec.name,\n type: paramDec.type as ts.TypeNode,\n optional:\n paramDec.questionToken !== undefined ||\n paramDec.initializer !== undefined,\n defaultDef,\n },\n index\n );\n }\n );\n if (node.type === undefined) {\n throw new Error(\n `리턴 타입이 기재되지 않은 메소드 ${modelName}.${methodName}`\n );\n }\n const returnType = this.resolveTypeNode(node.type!);\n\n methods.push({\n modelName,\n methodName,\n typeParameters,\n parameters,\n returnType,\n });\n }\n ts.forEachChild(node, visitor);\n };\n visitor(sourceFile);\n\n if (methods.length === 0) {\n return [];\n }\n\n // 현재 파일의 등록된 API 필터\n const currentModelApis = registeredApis.filter((api) => {\n return methods.find(\n (method) =>\n method.modelName === api.modelName &&\n method.methodName === api.methodName\n );\n });\n if (currentModelApis.length === 0) {\n // const p = path.join(tmpdir(), \"sonamu-syncer-error.json\");\n // writeFileSync(p, JSON.stringify(registeredApis, null, 2));\n // execSync(`open ${p}`);\n throw new Error(`현재 파일에 사전 등록된 API가 없습니다. ${filePath}`);\n }\n\n // 등록된 API에 현재 메소드 타입 정보 확장\n const extendedApis = currentModelApis.map((api) => {\n const foundMethod = methods.find(\n (method) =>\n method.modelName === api.modelName &&\n method.methodName === api.methodName\n );\n return {\n ...api,\n typeParameters: foundMethod!.typeParameters,\n parameters: foundMethod!.parameters,\n returnType: foundMethod!.returnType,\n };\n });\n return extendedApis;\n }\n\n resolveTypeNode(typeNode: ts.TypeNode): ApiParamType {\n switch (typeNode?.kind) {\n case ts.SyntaxKind.AnyKeyword:\n return \"any\";\n case ts.SyntaxKind.UnknownKeyword:\n return \"unknown\";\n case ts.SyntaxKind.StringKeyword:\n return \"string\";\n case ts.SyntaxKind.NumberKeyword:\n return \"number\";\n case ts.SyntaxKind.BooleanKeyword:\n return \"boolean\";\n case ts.SyntaxKind.UndefinedKeyword:\n return \"undefined\";\n case ts.SyntaxKind.NullKeyword:\n return \"null\";\n case ts.SyntaxKind.VoidKeyword:\n return \"void\";\n case ts.SyntaxKind.LiteralType:\n const literal = (typeNode as ts.LiteralTypeNode).literal;\n if (ts.isStringLiteral(literal)) {\n return {\n t: \"string-literal\",\n value: literal.text,\n };\n } else if (ts.isNumericLiteral(literal)) {\n return {\n t: \"numeric-literal\",\n value: Number(literal.text),\n };\n } else {\n if (literal.kind === ts.SyntaxKind.NullKeyword) {\n return \"null\";\n } else if (literal.kind === ts.SyntaxKind.UndefinedKeyword) {\n return \"undefined\";\n } else if (literal.kind === ts.SyntaxKind.TrueKeyword) {\n return \"true\";\n } else if (literal.kind === ts.SyntaxKind.FalseKeyword) {\n return \"false\";\n }\n throw new Error(\"알 수 없는 리터럴\");\n }\n case ts.SyntaxKind.ArrayType:\n const arrNode = typeNode as ts.ArrayTypeNode;\n return {\n t: \"array\",\n elementsType: this.resolveTypeNode(arrNode.elementType),\n };\n case ts.SyntaxKind.TypeLiteral:\n const literalNode = typeNode as ts.TypeLiteralNode;\n return {\n t: \"object\",\n props: literalNode.members.map((member) => {\n if (ts.isIndexSignatureDeclaration(member)) {\n assert(member.parameters[0]);\n const res = this.resolveParamDec({\n name: member.parameters[0].name as ts.Identifier,\n type: member.parameters[0].type as ts.TypeNode,\n });\n\n return this.resolveParamDec({\n name: {\n escapedText: `[${res.name}${res.optional ? \"?\" : \"\"}: ${\n res.type\n }]`,\n } as ts.Identifier,\n type: member.type as ts.TypeNode,\n });\n } else {\n return this.resolveParamDec({\n name: (member as ts.PropertySignature).name as ts.Identifier,\n type: (member as ts.PropertySignature).type as ts.TypeNode,\n optional:\n (member as ts.PropertySignature).questionToken !== undefined,\n });\n }\n }),\n };\n case ts.SyntaxKind.TypeReference:\n return {\n t: \"ref\",\n id: (\n (typeNode as ts.TypeReferenceNode).typeName as ts.Identifier\n ).escapedText.toString(),\n args: (typeNode as ts.TypeReferenceNode).typeArguments?.map(\n (typeArg) => this.resolveTypeNode(typeArg)\n ),\n };\n case ts.SyntaxKind.UnionType:\n return {\n t: \"union\",\n types: (typeNode as ts.UnionTypeNode).types.map((type) =>\n this.resolveTypeNode(type)\n ),\n };\n case ts.SyntaxKind.IntersectionType:\n return {\n t: \"intersection\",\n types: (typeNode as ts.IntersectionTypeNode).types.map((type) =>\n this.resolveTypeNode(type)\n ),\n };\n case ts.SyntaxKind.IndexedAccessType:\n return {\n t: \"indexed-access\",\n object: this.resolveTypeNode(\n (typeNode as ts.IndexedAccessTypeNode).objectType\n ),\n index: this.resolveTypeNode(\n (typeNode as ts.IndexedAccessTypeNode).indexType\n ),\n };\n case ts.SyntaxKind.TupleType:\n if (ts.isTupleTypeNode(typeNode)) {\n return {\n t: \"tuple-type\",\n elements: typeNode.elements.map((elem) =>\n this.resolveTypeNode(elem)\n ),\n };\n }\n break;\n case undefined:\n throw new Error(`typeNode undefined`);\n }\n\n console.debug(typeNode);\n throw new Error(`알 수 없는 SyntaxKind ${typeNode.kind}`);\n }\n\n resolveParamDec = (\n paramDec: {\n name: ts.BindingName;\n type: ts.TypeNode;\n optional?: boolean;\n defaultDef?: string;\n },\n index: number = 0\n ): ApiParam => {\n const name = paramDec.name as ts.Identifier;\n const type = this.resolveTypeNode(paramDec.type);\n\n if (name === undefined) {\n console.debug({ name, type, paramDec });\n }\n\n const result: ApiParam = {\n name: name.escapedText ? name.escapedText.toString() : `nonameAt${index}`,\n type,\n optional: paramDec.optional === true,\n defaultDef: paramDec?.defaultDef,\n };\n\n // 구조분해할당의 경우 타입이름 사용\n if (\n ts.isObjectBindingPattern(name) &&\n ts.isTypeReferenceNode(paramDec.type) &&\n ts.isIdentifier(paramDec.type.typeName)\n ) {\n result.name = inflection.camelize(paramDec.type.typeName.text, true);\n }\n\n return result;\n };\n\n printNode(\n node: ts.Node | undefined,\n sourceFile: ts.SourceFile\n ): string | undefined {\n if (node === undefined) {\n return undefined;\n }\n\n const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });\n return printer.printNode(ts.EmitHint.Unspecified, node, sourceFile);\n }\n\n async autoloadApis() {\n const pathPattern = path.join(\n Sonamu.apiRootPath,\n \"/src/application/**/*.{model,frame}.ts\"\n );\n // console.debug(chalk.yellow(`autoload:APIs @ ${pathPattern}`));\n\n const filePaths = await globAsync(pathPattern);\n const result = await Promise.all(\n filePaths.map((filePath) => this.readApisFromFile(filePath))\n );\n this.apis = result.flat();\n return this.apis;\n }\n\n async autoloadModels(): Promise<{ [modelName: string]: unknown }> {\n const pathPattern = path.join(\n Sonamu.apiRootPath,\n \"dist/application/**/*.{model,frame}.js\"\n );\n // console.debug(chalk.yellow(`autoload:models @ ${pathPattern}`));\n\n const filePaths = await filterAsync(\n await globAsync(pathPattern),\n async (path) => {\n // src 디렉터리 내에 있는 해당 파일이 존재할 경우에만 로드\n // 삭제된 파일이지만 dist에 남아있는 경우 BaseSchema undefined 에러 방지\n const srcPath = path.replace(\"/dist/\", \"/src/\").replace(\".js\", \".ts\");\n return await exists(srcPath);\n }\n );\n const modules = await importMultiple(filePaths);\n const functions = modules\n .map(({ imported }) => Object.entries(imported))\n .flat();\n this.models = Object.fromEntries(\n functions.filter(\n ([name]) => name.endsWith(\"Model\") || name.endsWith(\"Frame\")\n )\n );\n return this.models;\n }\n\n async autoloadTypes(\n doRefresh: boolean = false\n ): Promise<{ [typeName: string]: z.ZodObject<any> }> {\n if (!doRefresh && Object.keys(this.types).length > 0) {\n return this.types;\n }\n\n const pathPatterns = [\n path.join(Sonamu.apiRootPath, \"/dist/application/**/*.types.js\"),\n path.join(Sonamu.apiRootPath, \"/dist/application/**/*.generated.js\"),\n ];\n // console.debug(chalk.magenta(`autoload:types @ ${pathPatterns.join(\"\\n\")}`));\n\n const filePaths = await filterAsync(\n (await mapAsync(pathPatterns, globAsync)).flat(),\n async (path) => {\n // src 디렉터리 내에 있는 해당 파일이 존재할 경우에만 로드\n // 삭제된 파일이지만 dist에 남아있는 경우 BaseSchema undefined 에러 방지\n const srcPath = path.replace(\"/dist/\", \"/src/\").replace(\".js\", \".ts\");\n return await exists(srcPath);\n }\n );\n const modules = await importMultiple(filePaths, doRefresh);\n const functions = modules\n .map(({ imported }) => Object.entries(imported))\n .flat();\n this.types = Object.fromEntries(\n functions.filter(([, f]) => f instanceof z.ZodType)\n ) as typeof this.types;\n return this.types;\n }\n\n getTemplate(key: TemplateKey): Template {\n if (key === \"entity\") {\n return new Template__entity();\n } else if (key === \"init_types\") {\n return new Template__init_types();\n } else if (key === \"generated\") {\n return new Template__generated();\n } else if (key === \"generated_sso\") {\n return new Template__generated_sso();\n } else if (key === \"generated_http\") {\n return new Template__generated_http();\n } else if (key === \"model\") {\n return new Template__model();\n } else if (key === \"model_test\") {\n return new Template__model_test();\n } else if (key === \"service\") {\n return new Template__service();\n } else if (key === \"view_list\") {\n return new Template__view_list();\n } else if (key === \"view_list_columns\") {\n return new Template__view_list_columns();\n } else if (key === \"view_search_input\") {\n return new Template__view_search_input();\n } else if (key === \"view_form\") {\n return new Template__view_form();\n } else if (key === \"view_id_all_select\") {\n return new Template__view_id_all_select();\n } else if (key === \"view_id_async_select\") {\n return new Template__view_id_async_select();\n } else if (key === \"view_enums_select\") {\n return new Template__view_enums_select();\n } else if (key === \"view_enums_dropdown\") {\n return new Template__view_enums_dropdown();\n } else if (key === \"view_enums_buttonset\") {\n return new Template__view_enums_buttonset();\n } else {\n throw new BadRequestException(`잘못된 템플릿 키 ${key}`);\n }\n }\n\n async renderTemplate<T extends keyof TemplateOptions>(\n key: T,\n options: TemplateOptions[T]\n ): Promise<PathAndCode[]> {\n const template: Template = this.getTemplate(key);\n\n let extra: unknown[] = [];\n if (key === \"service\") {\n // service 필요 정보 (API 리스트)\n const { modelTsPath } = options as TemplateOptions[\"service\"];\n extra = [await this.readApisFromFile(modelTsPath)];\n } else if ([\"model\", \"view_list\", \"view_form\"].includes(key)) {\n const entityId = (options as TemplateOptions[\"model\"]).entityId;\n if (key === \"view_list\" || key === \"model\") {\n // view_list 필요 정보 (컬럼 노드, 리스트파라미터 노드)\n const columnsNode = await this.getColumnsNode(entityId, \"A\");\n const listParamsZodType = await this.getZodTypeById(\n `${entityId}ListParams`\n );\n const listParamsNode = this.zodTypeToRenderingNode(listParamsZodType);\n extra = [columnsNode, listParamsNode];\n } else if (key === \"view_form\") {\n // view_form 필요 정보 (세이브파라미터 노드)\n const saveParamsZodType = await this.getZodTypeById(\n `${entityId}SaveParams`\n );\n const saveParamsNode = this.zodTypeToRenderingNode(saveParamsZodType);\n extra = [saveParamsNode];\n }\n }\n\n const rendered = await template.render(options, ...extra);\n const resolved = await this.resolveRenderedTemplate(key, rendered);\n\n let preTemplateResolved: PathAndCode[] = [];\n if (rendered.preTemplates) {\n preTemplateResolved = (\n await Promise.all(\n rendered.preTemplates.map(({ key, options }) => {\n return this.renderTemplate(key, options);\n })\n )\n ).flat();\n }\n\n return [resolved, ...preTemplateResolved];\n }\n\n async resolveRenderedTemplate(\n key: TemplateKey,\n result: RenderedTemplate\n ): Promise<PathAndCode> {\n const { target, path: filePath, body, importKeys, customHeaders } = result;\n\n // import 할 대상의 대상 path 추출\n const importDefs = importKeys\n .reduce(\n (r, importKey) => {\n const modulePath = EntityManager.getModulePath(importKey);\n let importPath = modulePath;\n if (modulePath.includes(\"/\") || modulePath.includes(\".\")) {\n importPath = wrapIf(\n path.relative(path.dirname(filePath), modulePath),\n (p) => [p.startsWith(\".\") === false, \"./\" + p]\n );\n }\n\n // 같은 파일에서 import 하는 경우 keys 로 나열 처리\n const existsOne = r.find(\n (importDef) => importDef.from === importPath\n );\n if (existsOne) {\n existsOne.keys = _.uniq(existsOne.keys.concat(importKey));\n } else {\n r.push({\n keys: [importKey],\n from: importPath,\n });\n }\n return r;\n },\n [] as {\n keys: string[];\n from: string;\n }[]\n )\n // 셀프 참조 방지\n .filter(\n (importDef) =>\n filePath.endsWith(importDef.from.replace(\"./\", \"\") + \".ts\") === false\n );\n\n // 커스텀 헤더 포함하여 헤더 생성\n const header = [\n ...(customHeaders ?? []),\n ...importDefs.map(\n (importDef) =>\n `import { ${importDef.keys.join(\", \")} } from '${importDef.from}'`\n ),\n ].join(\"\\n\");\n\n const formatted = await (async () => {\n if (key === \"generated_http\") {\n return [header, body].join(\"\\n\\n\");\n } else {\n return prettier.format([header, body].join(\"\\n\\n\"), {\n parser: key === \"entity\" ? \"json\" : \"typescript\",\n });\n }\n })();\n\n return {\n path: target + \"/\" + filePath,\n code: formatted,\n };\n }\n\n async writeCodeToPath(pathAndCode: PathAndCode): Promise<string[]> {\n const { targets } = Sonamu.config.sync;\n const { appRootPath } = Sonamu;\n const filePath = `${Sonamu.appRootPath}/${pathAndCode.path}`;\n\n const dstFilePaths = _.uniq(\n targets.map((target) => filePath.replace(\"/:target/\", `/${target}/`))\n );\n return await Promise.all(\n dstFilePaths.map(async (dstFilePath) => {\n const dir = path.dirname(dstFilePath);\n if (!(await exists(dir))) {\n await mkdir(dir, { recursive: true });\n }\n await writeFile(dstFilePath, pathAndCode.code);\n console.log(\n chalk.bold(\"Generated: \") +\n chalk.blue(`${dstFilePath.replace(appRootPath + \"/\", \"\")}`)\n );\n return dstFilePath;\n })\n );\n }\n\n async generateTemplate(\n key: TemplateKey,\n templateOptions: any,\n _generateOptions?: GenerateOptions\n ) {\n const generateOptions = {\n overwrite: false,\n ..._generateOptions,\n };\n\n // 키 children\n const keys: TemplateKey[] = [key];\n\n // 템플릿 렌더\n const pathAndCodes = (\n await Promise.all(\n keys.map(async (key) => {\n return await this.renderTemplate(key, templateOptions);\n })\n )\n ).flat();\n\n const filteredPathAndCodes: PathAndCode[] = await (async () => {\n if (generateOptions.overwrite === true) {\n return pathAndCodes;\n } else {\n return await filterAsync(pathAndCodes, async (pathAndCode) => {\n const { targets } = Sonamu.config.sync;\n const filePath = `${Sonamu.appRootPath}/${pathAndCode.path}`;\n const dstFilePaths = targets.map((target) =>\n filePath.replace(\"/:target/\", `/${target}/`)\n );\n return await everyAsync(\n dstFilePaths,\n async (dstPath) => !(await exists(dstPath))\n );\n });\n }\n })();\n if (filteredPathAndCodes.length === 0) {\n throw new AlreadyProcessedException(\n \"이미 경로에 모든 파일이 존재합니다.\"\n );\n }\n\n return Promise.all(\n filteredPathAndCodes.map((pathAndCode) =>\n this.writeCodeToPath(pathAndCode)\n )\n );\n }\n\n async checkExistsGenCode(\n entityId: string,\n templateKey: TemplateKey,\n enumId?: string\n ): Promise<{ subPath: string; fullPath: string; isExists: boolean }> {\n const { target, path: genPath } = this.getTemplate(\n templateKey\n ).getTargetAndPath(EntityManager.getNamesFromId(entityId), enumId);\n\n const fullPath = path.join(Sonamu.appRootPath, target, genPath);\n const subPath = path.join(target, genPath);\n return {\n subPath,\n fullPath,\n isExists: await exists(fullPath),\n };\n }\n\n async checkExists(\n entityId: string,\n enums: {\n [name: string]: z.ZodEnum<any>;\n }\n ): Promise<Record<`${TemplateKey}${string}`, boolean>> {\n const keys: TemplateKey[] = TemplateKey.options;\n const names = EntityManager.getNamesFromId(entityId);\n const enumsKeys = Object.keys(enums).filter(\n (name) => name !== names.constant\n );\n\n return await reduceAsync(\n keys,\n async (result, key) => {\n const tpl = this.getTemplate(key);\n if (key.startsWith(\"view_enums\")) {\n await mapAsync(enumsKeys, async (componentId) => {\n const { target, path: p } = tpl.getTargetAndPath(\n names,\n componentId\n );\n result[`${key}__${componentId}`] = await exists(\n path.join(Sonamu.appRootPath, target, p)\n );\n });\n return result;\n }\n\n const { target, path: p } = tpl.getTargetAndPath(names);\n const { targets } = Sonamu.config.sync;\n if (target.includes(\":target\")) {\n await mapAsync(targets, async (t) => {\n result[`${key}__${t}`] = await exists(\n path.join(Sonamu.appRootPath, target.replace(\":target\", t), p)\n );\n });\n } else {\n result[key] = await exists(path.join(Sonamu.appRootPath, target, p));\n }\n\n return result;\n },\n {} as Record<`${TemplateKey}${string}`, boolean>\n );\n }\n\n async getZodTypeById(zodTypeId: string): Promise<z.ZodTypeAny> {\n const modulePath = EntityManager.getModulePath(zodTypeId);\n const moduleAbsPath = path.join(\n Sonamu.apiRootPath,\n \"dist\",\n \"application\",\n modulePath + \".js\"\n );\n const importPath = \"./\" + path.relative(__dirname, moduleAbsPath);\n const imported = await import(importPath);\n\n if (!imported[zodTypeId]) {\n throw new Error(`존재하지 않는 zodTypeId ${zodTypeId}`);\n }\n return imported[zodTypeId].describe(zodTypeId);\n }\n\n async propNodeToZodType(propNode: EntityPropNode): Promise<z.ZodTypeAny> {\n if (propNode.nodeType === \"plain\") {\n return this.propToZodType(propNode.prop);\n } else if (propNode.nodeType === \"array\") {\n if (propNode.prop === undefined) {\n throw new Error();\n } else if (propNode.children.length > 0) {\n return (\n await this.propNodeToZodType({\n ...propNode,\n nodeType: \"object\",\n })\n ).array();\n } else {\n const innerType = await this.propToZodType(propNode.prop);\n if (propNode.prop.nullable === true) {\n return z.array(innerType).nullable();\n } else {\n return z.array(innerType);\n }\n }\n } else if (propNode.nodeType === \"object\") {\n const obj = await propNode.children.reduce(\n async (promise, childPropNode) => {\n const result = await promise;\n result[childPropNode.prop!.name] =\n await this.propNodeToZodType(childPropNode);\n return result;\n },\n {} as any\n );\n\n if (propNode.prop?.nullable === true) {\n return z.object(obj).nullable();\n } else {\n return z.object(obj);\n }\n } else {\n throw Error;\n }\n }\n async propToZodType(prop: EntityProp): Promise<z.ZodTypeAny> {\n let zodType: z.ZodTypeAny = z.unknown();\n if (isIntegerProp(prop)) {\n zodType = z.number().int();\n } else if (isBigIntegerProp(prop)) {\n zodType = z.bigint();\n } else if (isTextProp(prop)) {\n zodType = z.string().max(getTextTypeLength(prop.textType));\n } else if (isEnumProp(prop)) {\n zodType = await this.getZodTypeById(prop.id);\n } else if (isStringProp(prop)) {\n zodType = z.string().max(prop.length);\n } else if (isFloatProp(prop) || isDoubleProp(prop)) {\n zodType = z.number();\n } else if (isDecimalProp(prop)) {\n zodType = z.string();\n } else if (isBooleanProp(prop)) {\n zodType = z.boolean();\n } else if (isDateProp(prop)) {\n zodType = z.string().length(10);\n } else if (isTimeProp(prop)) {\n zodType = z.string().length(8);\n } else if (isDateTimeProp(prop)) {\n zodType = z.date();\n } else if (isTimestampProp(prop)) {\n zodType = z.date();\n } else if (isJsonProp(prop)) {\n zodType = await this.getZodTypeById(prop.id);\n } else if (isUuidProp(prop)) {\n zodType = z.uuid();\n } else if (isVirtualProp(prop)) {\n zodType = await this.getZodTypeById(prop.id);\n } else if (isRelationProp(prop)) {\n if (\n isBelongsToOneRelationProp(prop) ||\n (isOneToOneRelationProp(prop) && prop.hasJoinColumn)\n ) {\n zodType = z.number().int();\n }\n } else {\n throw new Error(`prop을 zodType으로 변환하는데 실패 ${prop}}`);\n }\n\n if ((prop as { unsigned?: boolean }).unsigned) {\n zodType = (zodType as z.ZodNumber).nonnegative();\n }\n if (prop.nullable) {\n zodType = zodType.nullable();\n }\n\n return zodType;\n }\n\n resolveRenderType(\n key: string,\n zodType: z.ZodTypeAny\n ): RenderingNode[\"renderType\"] {\n if (zodType instanceof z.ZodDate) {\n return \"datetime\";\n } else if (zodType instanceof z.ZodString) {\n if (key.includes(\"img\") || key.includes(\"image\")) {\n return \"string-image\";\n } else if (zodType.description === \"SQLDateTimeString\") {\n return \"string-datetime\";\n } else if (key.endsWith(\"date\")) {\n return \"string-date\";\n } else {\n return \"string-plain\";\n }\n } else if (zodType instanceof z.ZodNumber) {\n if (key === \"id\") {\n return \"number-id\";\n } else if (key.endsWith(\"_id\")) {\n return \"number-fk_id\";\n } else {\n return \"number-plain\";\n }\n } else if (zodType instanceof z.ZodBoolean) {\n return \"boolean\";\n } else if (zodType instanceof z.ZodEnum) {\n return \"enums\";\n } else if (zodType instanceof z.ZodRecord) {\n return \"record\";\n } else if (zodType instanceof z.ZodAny || zodType instanceof z.ZodUnknown) {\n return \"string-plain\";\n } else if (zodType instanceof z.ZodUnion) {\n return \"string-plain\";\n } else if (zodType instanceof z.ZodLiteral) {\n return \"string-plain\";\n } else {\n throw new Error(`타입 파싱 불가 ${key} ${zodType.def.type}`);\n }\n }\n\n zodTypeToRenderingNode(\n zodType: z.ZodType<any>,\n baseKey: string = \"root\"\n ): RenderingNode {\n const def = {\n name: baseKey,\n label: inflection.camelize(baseKey, false),\n zodType,\n };\n if (zodType instanceof z.ZodObject) {\n const columnKeys = Object.keys(zodType.shape);\n const children = columnKeys.map((key) => {\n const innerType = zodType.shape[key];\n return this.zodTypeToRenderingNode(innerType, key);\n });\n return {\n ...def,\n renderType: \"object\",\n children,\n };\n } else if (zodType instanceof z.ZodArray) {\n const innerType = (zodType as z.ZodArray<z.ZodType<any>>).def.element;\n if (innerType instanceof z.ZodString && baseKey.includes(\"images\")) {\n return {\n ...def,\n renderType: \"array-images\",\n };\n }\n return {\n ...def,\n renderType: \"array\",\n element: this.zodTypeToRenderingNode(innerType, baseKey),\n };\n } else if (zodType instanceof z.ZodUnion) {\n const optionNodes = (zodType as z.ZodUnion<z.ZodType[]>).def.options.map((opt) =>\n this.zodTypeToRenderingNode(opt, baseKey)\n );\n // TODO: ZodUnion이 들어있는 경우 핸들링\n return optionNodes[0];\n } else if (zodType instanceof z.ZodOptional) {\n return {\n ...this.zodTypeToRenderingNode((zodType as z.ZodOptional<z.ZodType>).def.innerType, baseKey),\n optional: true,\n };\n } else if (zodType instanceof z.ZodNullable) {\n return {\n ...this.zodTypeToRenderingNode((zodType as z.ZodNullable<z.ZodType>).def.innerType, baseKey),\n nullable: true,\n };\n } else {\n return {\n ...def,\n renderType: this.resolveRenderType(baseKey, zodType),\n };\n }\n }\n\n async getColumnsNode(\n entityId: string,\n subsetKey: string\n ): Promise<RenderingNode> {\n const entity = EntityManager.get(entityId);\n const subsetA = entity.subsets[subsetKey];\n if (subsetA === undefined) {\n throw new ServiceUnavailableException(\"SubsetA 가 없습니다.\");\n }\n const propNodes = entity.fieldExprsToPropNodes(subsetA);\n const rootPropNode: EntityPropNode = {\n nodeType: \"object\",\n children: propNodes,\n };\n\n const columnsZodType = (await this.propNodeToZodType(\n rootPropNode\n )) as z.ZodObject<any>;\n\n const columnsNode = this.zodTypeToRenderingNode(columnsZodType);\n columnsNode.children = columnsNode.children!.map((child) => {\n if (child.renderType === \"object\") {\n const pickedCol = child.children!.find((cc) =>\n [\"title\", \"name\"].includes(cc.name)\n );\n if (pickedCol) {\n return {\n ...child,\n renderType: \"object-pick\",\n config: {\n picked: pickedCol.name,\n },\n };\n } else {\n return child;\n }\n } else if (\n child.renderType === \"array\" &&\n child.element &&\n child.element.renderType === \"object\"\n ) {\n const pickedCol = child.element!.children!.find((cc) =>\n [\"title\", \"name\"].includes(cc.name)\n );\n if (pickedCol) {\n return {\n ...child,\n element: {\n ...child.element,\n renderType: \"object-pick\",\n config: {\n picked: pickedCol.name,\n },\n },\n };\n } else {\n return child;\n }\n }\n return child;\n });\n\n return columnsNode;\n }\n\n async createEntity(\n form: Omit<TemplateOptions[\"entity\"], \"title\"> & { title?: string }\n ) {\n if (!/^[A-Z][a-zA-Z0-9]*$/.test(form.entityId)) {\n throw new BadRequestException(\"entityId는 CamelCase 형식이어야 합니다.\");\n }\n\n await this.generateTemplate(\"entity\", form);\n\n // reload entities\n await EntityManager.reload();\n\n // syncFromWatcher에서 처리하므로 주석처리\n // this.actionGenerateSchemas();\n\n // // generate schemas, types\n // await Promise.all([\n // ...(form.parentId === undefined\n // ? [\n // this.generateTemplate(\"init_types\", {\n // entityId: form.entityId,\n // }),\n // ]\n // : []),\n // ]);\n }\n\n async delEntity(entityId: string): Promise<{ delPaths: string[] }> {\n const entity = EntityManager.get(entityId);\n\n const delPaths = (() => {\n if (entity.parentId) {\n return [\n `${Sonamu.apiRootPath}/src/application/${entity.names.parentFs}/${entity.names.fs}.entity.json`,\n ];\n } else {\n return [\n `${Sonamu.apiRootPath}/src/application/${entity.names.fs}`,\n `${Sonamu.apiRootPath}/dist/application/${entity.names.fs}`,\n ...Sonamu.config.sync.targets\n .map((target) => [\n `${Sonamu.appRootPath}/${target}/src/services/${entity.names.fs}`,\n ])\n .flat(),\n ];\n }\n })(); // iife\n\n for await (const delPath of delPaths) {\n if (await exists(delPath)) {\n console.log(chalk.red(`DELETE ${delPath}`));\n await rm(delPath, { recursive: true, force: true });\n } else {\n console.log(chalk.yellow(`NOT_EXISTS ${delPath}`));\n }\n }\n\n // reload entities\n await EntityManager.reload();\n\n return { delPaths };\n }\n\n syncUI() {\n const uiPort = Sonamu.config.ui?.port ?? 57000;\n\n fetch(`http://127.0.0.1:${uiPort}/api/reload`, {\n method: \"GET\",\n }).catch((e) =>\n console.log(chalk.dim(`Failed to reload Sonamu UI: ${e.message}`))\n );\n }\n}\n"],"names":["Syncer","apis","types","models","isSyncing","checksumPatternGroup","entity","Sonamu","apiRootPath","generated","functions","model","frame","resolveParamDec","paramDec","index","name","type","resolveTypeNode","undefined","console","debug","result","escapedText","toString","optional","defaultDef","ts","isObjectBindingPattern","isTypeReferenceNode","isIdentifier","typeName","inflection","camelize","text","checksumsPath","path","join","sync","targets","currentDirname","currentChecksums","previousChecksums","isSame","msg","margin","abc","onSIGUSR2","diff","diffFiles","changedChecksums","config","__dirname","endsWith","Promise","all","map","target","srcCodePath","dstCodePath","srcChecksum","dstChecksum","replace","exists","appRootPath","getChecksumOfFile","readFile","writeFile","log","chalk","blue","getCurrentChecksums","getPreviousChecksums","equal","process","stdout","columns","length","black","bgGreen","repeat","AbortController","exit","magentaBright","setTimeoutPromises","signal","on","_","differenceWith","isEqual","r","doSyncActions","saveChecksums","abort","off","diffGroups","diffTypes","entityId","typeFilePath","tsPaths","mergedGroup","params","groupBy","matched","match","Object","keys","includes","EntityManager","reload","actionGenerateSchemas","getEntityIdFromPath","get","names","fs","parentId","generateTemplate","uniq","push","p","actionSyncFilesToTargets","autoloadModels","autoloadApis","modelPath","assert","namesRecord","getNamesFromId","modelTsPath","frameName","Error","actionGenerateServices","actionGenerateHttps","syncFromWatcher","tsFiles","jsonFiles","chunks","transpiledFilePaths","chunk","_transpiledFilePaths","allFilePaths","targetFilePaths","clearModuleAndDependents","filePath","resolved","require","resolve","toDelete","Set","cache","forEach","key","mod","children","some","child","id","add","kill","pid","filter","file","diffFile","code","jsPath","mapPath","sourceMapComment","swc","transformFile","module","jsc","parser","syntax","decorators","sourceMaps","mkdir","dirname","recursive","basename","flag","bold","values","pattern","minimatch","relative","autoloadTypes","syncUI","filePaths","overwrite","flat","paramsArray","res","copyFileWithReplaceCoreToShared","fromPath","toPath","oldFileContent","newFileContent","nfc","apiDir","api","dir","src","realSrc","dst","fileChecksums","entries","_fileType","globAsync","sort","substring","checksum","JSON","parse","checksums","stringify","reject","hash","crypto","createHash","input","createReadStream","update","digest","readApisFromFile","sourceFile","methods","modelName","methodName","visitor","currentModelApis","extendedApis","createSourceFile","ScriptTarget","Latest","node","isClassDeclaration","isMethodDeclaration","typeParameters","typeParam","tp","t","constraint","parameters","printNode","initializer","questionToken","returnType","forEachChild","registeredApis","find","method","foundMethod","typeNode","kind","SyntaxKind","AnyKeyword","UnknownKeyword","StringKeyword","NumberKeyword","BooleanKeyword","UndefinedKeyword","NullKeyword","VoidKeyword","LiteralType","literal","isStringLiteral","value","isNumericLiteral","Number","TrueKeyword","FalseKeyword","ArrayType","arrNode","elementsType","elementType","TypeLiteral","literalNode","props","members","member","isIndexSignatureDeclaration","TypeReference","args","typeArguments","typeArg","UnionType","IntersectionType","IndexedAccessType","object","objectType","indexType","TupleType","isTupleTypeNode","elements","elem","printer","createPrinter","newLine","NewLineKind","LineFeed","EmitHint","Unspecified","pathPattern","modules","filterAsync","srcPath","importMultiple","imported","fromEntries","doRefresh","pathPatterns","mapAsync","f","z","ZodType","getTemplate","Template__entity","Template__init_types","Template__generated","Template__generated_sso","Template__generated_http","Template__model","Template__model_test","Template__service","Template__view_list","Template__view_list_columns","Template__view_search_input","Template__view_form","Template__view_id_all_select","Template__view_id_async_select","Template__view_enums_select","Template__view_enums_dropdown","Template__view_enums_buttonset","BadRequestException","renderTemplate","options","template","extra","columnsNode","listParamsZodType","listParamsNode","saveParamsZodType","saveParamsNode","rendered","preTemplateResolved","getColumnsNode","getZodTypeById","zodTypeToRenderingNode","render","resolveRenderedTemplate","preTemplates","body","importKeys","customHeaders","importDefs","header","formatted","reduce","importKey","modulePath","getModulePath","importPath","wrapIf","startsWith","existsOne","importDef","from","concat","prettier","format","writeCodeToPath","pathAndCode","dstFilePaths","dstFilePath","templateOptions","_generateOptions","generateOptions","pathAndCodes","filteredPathAndCodes","everyAsync","dstPath","AlreadyProcessedException","checkExistsGenCode","templateKey","enumId","genPath","fullPath","subPath","getTargetAndPath","isExists","checkExists","enums","enumsKeys","TemplateKey","constant","reduceAsync","tpl","componentId","zodTypeId","moduleAbsPath","describe","propNodeToZodType","propNode","innerType","obj","nodeType","propToZodType","prop","array","nullable","promise","childPropNode","zodType","unknown","isIntegerProp","number","int","isBigIntegerProp","bigint","isTextProp","string","max","getTextTypeLength","textType","isEnumProp","isStringProp","isFloatProp","isDoubleProp","isDecimalProp","isBooleanProp","boolean","isDateProp","isTimeProp","isDateTimeProp","date","isTimestampProp","isJsonProp","isUuidProp","uuid","isVirtualProp","isRelationProp","isBelongsToOneRelationProp","isOneToOneRelationProp","hasJoinColumn","unsigned","nonnegative","resolveRenderType","ZodDate","ZodString","description","ZodNumber","ZodBoolean","ZodEnum","ZodRecord","ZodAny","ZodUnknown","ZodUnion","ZodLiteral","def","baseKey","label","ZodObject","columnKeys","shape","renderType","ZodArray","element","optionNodes","opt","ZodOptional","ZodNullable","subsetKey","subsetA","propNodes","rootPropNode","columnsZodType","subsets","ServiceUnavailableException","fieldExprsToPropNodes","pickedCol","cc","picked","createEntity","form","test","delEntity","delPaths","delPath","parentFs","red","rm","force","yellow","uiPort","ui","port","fetch","catch","e","dim","message"],"mappings":"oGAqHaA,gDAAAA,mEArHiB,4BACY,kCACT,4BACc,oCACxB,+EACJ,4EACD,+EACO,yEACF,0CAC0B,0FAClC,kCAyBR,0CAKA,sCACW,gEACA,oCAYX,uDACgB,oDACW,yDAEE,mEACC,gEACJ,2DACD,+DACK,iEACH,gEACE,kEACA,+FACf,qDACwB,sFACE,uFACD,oFACF,qFACG,qFACH,kFACA,+EACH,4DAClB,oDACiB,8DACS,6EAC9B,oEACE,qCACK,qCAMnB,4+PA+BA,IAAA,AAAMA,oBAAN,iCAAMA,+CAAAA,QACXC,sBAAAA,OAQM,EAAE,EACRC,sBAAAA,QAAkD,CAAC,GACnDC,sBAAAA,SAA2C,CAAC,GAC5CC,sBAAAA,YAAqB,OAErB,sBAAOC,uBAAoC,CAEzCC,OAAQC,cAAM,CAACC,WAAW,CAAG,oCAC7BN,MAAOK,cAAM,CAACC,WAAW,CAAG,iCAC5BC,UAAWF,cAAM,CAACC,WAAW,CAAG,uCAChCE,UAAWH,cAAM,CAACC,WAAW,CAAG,qCAEhCG,MAAOJ,cAAM,CAACC,WAAW,CAAG,kCAC5BI,MAAOL,cAAM,CAACC,WAAW,CAAG,iCAC9B,GA8tBAK,sBAAAA,kBAAkB,SAChBC,cAMAC,6DAAgB,EAEhB,IAAMC,KAAOF,SAASE,IAAI,CAC1B,IAAMC,KAAO,MAAKC,eAAe,CAACJ,SAASG,IAAI,EAE/C,GAAID,OAASG,UAAW,CACtBC,QAAQC,KAAK,CAAC,CAAEL,KAAAA,KAAMC,KAAAA,KAAMH,SAAAA,QAAS,EACvC,CAEA,IAAMQ,OAAmB,CACvBN,KAAMA,KAAKO,WAAW,CAAGP,KAAKO,WAAW,CAACC,QAAQ,GAAK,AAAC,WAAgB,OAANT,OAClEE,KAAAA,KACAQ,SAAUX,SAASW,QAAQ,GAAK,KAChCC,UAAU,CAAEZ,iBAAAA,yBAAAA,SAAUY,UAAU,AAClC,EAGA,GACEC,mBAAE,CAACC,sBAAsB,CAACZ,OAC1BW,mBAAE,CAACE,mBAAmB,CAACf,SAASG,IAAI,GACpCU,mBAAE,CAACG,YAAY,CAAChB,SAASG,IAAI,CAACc,QAAQ,EACtC,CACAT,OAAON,IAAI,CAAGgB,mBAAU,CAACC,QAAQ,CAACnB,SAASG,IAAI,CAACc,QAAQ,CAACG,IAAI,CAAE,KACjE,CAEA,OAAOZ,MACT,iBAtxBWtB,SAyBPmC,IAAAA,oBAAJ,eACE,OAAOC,aAAI,CAACC,IAAI,CAAC9B,cAAM,CAACC,WAAW,CAAE,eACvC,IAGM8B,IAAAA,aAAN,SAAMA,uDACIC,QAGFC,eAqCFC,iBAEEC,kBAGAC,OAEEC,IACAC,OAOFC,IAEAC,UAgBAC,KAKAC,UAGEC,mGAjFAX,QAAYhC,cAAM,CAAC4C,MAAM,CAACb,IAAI,CAA9BC,QAGFC,eAAiBY,UAAUC,QAAQ,CAAC,WACtCD,UACAhB,aAAI,CAACC,IAAI,CAACe,UAAW,YAGzB,SAAME,QAAQC,GAAG,CACfhB,QAAQiB,GAAG,CAAC,SAAOC,wDACXC,YAOAC,YAMAC,YACAC,mGAdAH,YAActB,aAAI,CACrBC,IAAI,CAACG,eAAgB,AAAC,aAAmB,OAAPiB,OAAO,mBACzCK,OAAO,CAAC,SAAU,SACf,SAAMC,GAAAA,eAAM,EAACL,qBAAnB,GAAI,CAAE,cAA4B,CAChC,SACF,CAEMC,YAAcvB,aAAI,CAACC,IAAI,CAC3B9B,cAAM,CAACyD,WAAW,CAClBP,OACA,iCAGkB,SAAM,IAAI,CAACQ,iBAAiB,CAACP,qBAA3CE,YAAc,cACA,SAAM,AAAC,wHACnB,SAAMG,GAAAA,eAAM,EAACJ,qBAAnB,GAAI,CAAE,cAA4B,CAChC,SAAO,GACT,CACA,SAAO,IAAI,CAACM,iBAAiB,CAACN,gBAChC,0BALME,YAAc,cAOpB,GAAID,cAAgBC,YAAa,CAC/B,SACF,OACgBF,aAAa,SAAMO,GAAAA,kBAAQ,EAACR,qBAA5C,SAAMS,mBAAS,2BAAc,yBAA7B,cACA/C,QAAQgD,GAAG,CAACC,cAAK,CAACC,IAAI,CAAC,oCACzB,0BA5BF,cAgCuB,SAAM,IAAI,CAACC,mBAAmB,WAAjD9B,iBAAmB,cAEG,SAAM,IAAI,CAAC+B,oBAAoB,WAAnD9B,kBAAoB,cAGpBC,OAAS8B,GAAAA,sBAAK,EAAChC,iBAAkBC,mBACvC,GAAIC,OAAQ,CACJC,IAAM,wBACNC,OAAS,AAAC6B,CAAAA,QAAQC,MAAM,CAACC,OAAO,CAAGhC,IAAIiC,MAAM,AAAD,EAAK,EACvDzD,QAAQgD,GAAG,CACTC,cAAK,CAACS,KAAK,CAACC,OAAO,CAAC,IAAIC,MAAM,CAACnC,QAAUD,IAAM,IAAIoC,MAAM,CAACnC,UAE5D,SACF,CAEMC,IAAM,IAAImC,eAChB,CAAA,IAAI,CAAC7E,SAAS,CAAG,KACX2C,UAAY,8HAChB,GAAI,IAAI,CAAC3C,SAAS,GAAK,MAAO,CAC5BsE,QAAQQ,IAAI,CAAC,EACf,CACA9D,QAAQgD,GAAG,CAACC,cAAK,CAACc,aAAa,CAAC,+EAI9B,SAAMC,GAAAA,qBAAkB,EAAC,IAAO,eAAgB,CAAEC,OAAQvC,IAAIuC,MAAM,AAAC,WAArE,oEAEFjE,QAAQgD,GAAG,CAACC,cAAK,CAACc,aAAa,CAAC,kBAChCT,QAAQQ,IAAI,CAAC,eACf,gBACAR,QAAQY,EAAE,CAAC,UAAWvC,WAGhBC,KAAOuC,eAAC,CAACC,cAAc,CAC3B/C,iBACAC,kBACA6C,eAAC,CAACE,OAAO,EAELxC,UAAYD,KAAKQ,GAAG,CAAC,SAACkC,UAAMA,EAAEtD,IAAI,GACxChB,QAAQgD,GAAG,CAAC,kBAAmBnB,WAEF,SAAM,IAAI,CAAC0C,aAAa,CACnD1C,UACAR,0BAFMS,iBAAqB,cAArBA,iBAKRT,iBAAmBS,yBAAAA,0BAAAA,iBAAoBT,iBAGvC,SAAM,IAAI,CAACmD,aAAa,CAACnD,0BAAzB,aAGA,CAAA,IAAI,CAACrC,SAAS,CAAG,MACjB0C,IAAI+C,KAAK,GACTnB,QAAQoB,GAAG,CAAC,UAAW/C,uBACzB,iBAEM4C,IAAAA,sBAAN,SAAMA,cACJ1C,SAAmB,CACnBR,gBAAoC,kDAM9BsD,WAQAC,UAYED,mBADAE,SAIE3F,OACA4F,kBAWFH,sBAoBEA,kBACAA,sBACAA,uBAJFI,QAaAJ,kBACAA,kBAFAK,YAWAC,yFA5EFN,WAAaR,eAAC,CAACe,OAAO,CAACrD,UAAW,SAACyC,GACvC,IAAMa,QAAUb,EAAEc,KAAK,CACrB,+DAEKD,UAAP,MAAOA,CAAAA,UAAAA,gBAAAA,wBAAAA,OAAS,CAAC,EAAE,UAAZA,mBAAAA,UAAgB,SACzB,GAGMP,UAAYS,OAAOC,IAAI,CAACX,gBAI1BC,CAAAA,UAAUW,QAAQ,CAAC,WAAaX,UAAUW,QAAQ,CAAC,QAAO,EAA1DX,YACF,SAAMY,4BAAa,CAACC,MAAM,WAA1B,cAEA,SAAM,IAAI,CAACC,qBAAqB,WAAhC,cAIMb,SAAW,IAAI,CAACc,mBAAmB,CACvC,qBAAIhB,CAAAA,mBAAAA,UAAU,CAAC,SAAS,UAApBA,4BAAAA,uBACJ,CAAC,EAAE,KACDE,SAAAA,YACI3F,OAASsG,4BAAa,CAACI,GAAG,CAACf,UAC3BC,aAAe9D,aAAI,CAACC,IAAI,CAC5B9B,cAAM,CAACC,WAAW,CAClB,AAAC,mBAAqCF,OAAnBA,OAAO2G,KAAK,CAACC,EAAE,CAAC,KAAmB,OAAhB5G,OAAO2G,KAAK,CAACC,EAAE,CAAC,mBAEpD5G,OAAO6G,QAAQ,GAAKhG,mBAApBb,YAAmC,SAAMyD,GAAAA,eAAM,EAACmC,2BAAf,CAAE,yDACrC,SAAM,IAAI,CAACkB,gBAAgB,CAAC,aAAc,CAAEnB,SAAAA,QAAS,WAArD,oCAKJF,UAAU,CAAC,YAAY,CAAGR,eAAC,CAAC8B,IAAI,CAAC,AAC/B,qBAAItB,CAAAA,sBAAAA,UAAU,CAAC,YAAY,UAAvBA,+BAAAA,kCACJ,0CAEFC,UAAUsB,IAAI,CAAC,iBAGX7E,iBAAAA,YACiB,SAAM,IAAI,CAAC8B,mBAAmB,WAAjD9B,iBAAmB,wCAOrBuD,CAAAA,UAAUW,QAAQ,CAAC,UACnBX,UAAUW,QAAQ,CAAC,cACnBX,UAAUW,QAAQ,CAAC,YAAW,EAF9BX,aAIMG,QAAUZ,eAAC,CAAC8B,IAAI,CACpB,AACE,qBAAItB,CAAAA,kBAAAA,UAAU,CAAC,QAAQ,UAAnBA,2BAAAA,6BACJ,qBAAIA,CAAAA,sBAAAA,UAAU,CAAC,YAAY,UAAvBA,+BAAAA,0BACJ,qBAAIA,CAAAA,uBAAAA,UAAU,CAAC,YAAY,UAAvBA,gCAAAA,4BACJvC,GAAG,CAAC,SAAC+D,UAAMA,EAAEzD,OAAO,CAAC,SAAU,SAASA,OAAO,CAAC,MAAO,UAE3D,SAAM,IAAI,CAAC0D,wBAAwB,CAACrB,iBAApC,0CAIEH,CAAAA,UAAUW,QAAQ,CAAC,UAAYX,UAAUW,QAAQ,CAAC,QAAO,EAAzDX,aACII,YAAc,AAClB,qBAAIL,CAAAA,kBAAAA,UAAU,CAAC,QAAQ,UAAnBA,2BAAAA,6BACJ,qBAAIA,CAAAA,kBAAAA,UAAU,CAAC,QAAQ,UAAnBA,2BAAAA,uBAIN,SAAM,IAAI,CAAC0B,cAAc,YAAzB,cAGA,SAAM,IAAI,CAACC,YAAY,YAAvB,cAEMrB,OACJD,YAAY5C,GAAG,CAAC,SAACmE,WACf,GAAIA,UAAUtE,QAAQ,CAAC,aAAc,CACnC,IAAM4C,SAAW,MAAKc,mBAAmB,CAAC,CAACY,UAAU,CAAC,CAAC,EAAE,CACzDC,GAAAA,eAAM,EAAC3B,UACP,MAAO,CACL4B,YAAajB,4BAAa,CAACkB,cAAc,CAAC7B,UAC1C8B,YAAa3F,aAAI,CAACC,IAAI,CACpB9B,cAAM,CAACC,WAAW,CAClBmH,UACG7D,OAAO,CAAC,SAAU,SAClBA,OAAO,CAAC,YAAa,aAE5B,CACF,CACA,GAAI6D,UAAUtE,QAAQ,CAAC,YAAa,KACZsE,iBAAtB,IAAsBA,sBAAAA,CAAAA,iBAAAA,UAAUnB,KAAK,CAAC,gCAAhBmB,0BAAAA,iBAA0C,EAAE,IAAzDK,UAAaL,QACtBC,GAAAA,eAAM,EAACI,WACP,MAAO,CACLH,YAAajB,4BAAa,CAACkB,cAAc,CAACE,WAC1CD,YAAa3F,aAAI,CAACC,IAAI,CACpB9B,cAAM,CAACC,WAAW,CAClBmH,UACG7D,OAAO,CAAC,SAAU,SAClBA,OAAO,CAAC,YAAa,aAE5B,CACF,CACA,MAAM,IAAImE,MAAM,gBAClB,GACF,SAAM,IAAI,CAACC,sBAAsB,CAAC7B,iBAAlC,cAEA,SAAM,IAAI,CAAC8B,mBAAmB,YAA9B,sCAGF,SAAO,CACLnC,UAAAA,UACA9C,iBAAkBT,gBACpB,KACF,iBAEM2F,IAAAA,wBAAN,SAAMA,gBAAgBnF,SAAmB,kDACjCoF,QACAC,UAGAC,OACFC,oBACC,0BAAA,kBAAA,eAAA,UAAA,MAAMC,QA0CTD,qBAzCME,0BAyEFC,aACAC,gBA7BN,SAASC,yBAAyBC,QAAgB,EAChD,IAAMC,SAAWC,QAAQC,OAAO,CAACH,UACjC,IAAMI,SAAW,IAAIC,IAAI,CAACJ,SAAS,EAGnCtC,OAAOC,IAAI,CAACsC,QAAQI,KAAK,EAAEC,OAAO,CAAC,SAACC,SAE9BC,cADJ,IAAMA,IAAMP,QAAQI,KAAK,CAACE,IAAI,CAC9B,GAAIC,YAAAA,qBAAAA,cAAAA,IAAKC,QAAQ,UAAbD,8BAAAA,cAAeE,IAAI,CAAC,SAACC,cAAUA,MAAMC,EAAE,GAAKZ,WAAW,CACzDG,SAASU,GAAG,CAACN,IACf,CACF,GAEAJ,SAASG,OAAO,CAAC,SAACC,KAChB,GAAIA,IAAI3C,QAAQ,CAAC,iBAAkB,CACjCjC,QAAQmF,IAAI,CAACnF,QAAQoF,GAAG,CAAE,UAC5B,CACA,OAAOd,QAAQI,KAAK,CAACE,IAAI,AAK3B,EACF,mFA1EMjB,QAAUpF,UAAU8G,MAAM,CAAC,SAACC,aAASA,KAAK3G,QAAQ,CAAC,SACnDiF,UAAYrF,UAAU8G,MAAM,CAAC,SAACC,aAASA,KAAK3G,QAAQ,CAAC,WAGrDkF,OAASE,GAAAA,aAAK,EAACJ,QAAS,GAC1BG,uBACC,+BAAA,wBAAA,2EAAA,UAAeD,sDAAf,2BAAA,MAAA,oCAAME,QAAN,YAC0B,SAAMnF,QAAQC,GAAG,CAC5CkF,QAAMjF,GAAG,CAAC,SAAOyG,oDACO,KAAdC,KAAM1G,IAcR2G,OAOEC,QAIAC,wFAzBc,SAAMC,MAAIC,aAAa,CAACN,SAAU,CACtDO,OAAQ,CACNvJ,KAAM,UACR,EACAwJ,IAAK,CACHC,OAAQ,CACNC,OAAQ,aACRC,WAAY,IACd,EACAnH,OAAQ,KACV,EACAoH,WAAY,IACd,WAZsB,KAAA,cAAdX,KAAc,KAAdA,KAAM1G,IAAQ,KAARA,IAcR2G,OAASF,SACZnG,OAAO,CAAC,QAAS,UACjBA,OAAO,CAAC,MAAO,OAClB,SAAMgH,GAAAA,eAAK,EAAC1I,aAAI,CAAC2I,OAAO,CAACZ,QAAS,CAAEa,UAAW,IAAK,WAApD,cACA,SAAM7G,GAAAA,mBAAS,EAACgG,OAAQD,cAAxB,kBAEI1G,IAAAA,YACI4G,QAAUD,OAAS,OACzB,SAAMW,GAAAA,eAAK,EAAC1I,aAAI,CAAC2I,OAAO,CAACX,SAAU,CAAEY,UAAW,IAAK,WAArD,cACA,SAAM7G,GAAAA,mBAAS,EAACiG,QAAS5G,aAAzB,cAEM6G,iBACJ,0BAA4BjI,aAAI,CAAC6I,QAAQ,CAACb,SAC5C,SAAMjG,GAAAA,mBAAS,EAACgG,OAAQE,iBAAkB,CACxCa,KAAM,GACR,WAFA,oCAKF9J,QAAQgD,GAAG,CACTC,cAAK,CAAC8G,IAAI,CAAC,gBACT9G,cAAK,CAACC,IAAI,CAAC,AAAC,GAA4C,OAA1C6F,OAAOrG,OAAO,CAACvD,cAAM,CAACC,WAAW,CAAE,UAErD,SAAO2J,UACT,gBAvCIzB,sBAAuB,cAyC7BF,CAAAA,qBAAAA,qBAAoBlB,IAAI,OAAxBkB,qBAAyB,qBAAGE,8CA1CzB,uFAAA,uBAAA,8CAAA,2BAAA,wBAAA,+BAAA,yBAAA,iCAqELF,oBAAoBhF,GAAG,CAAC,SAACsF,UACvBD,yBAAyBC,SAC3B,GAGMH,aAAe,AAAC,qBAAGN,gBAAS,qBAAGG,qBAAqB,qBAAGF,YACvDM,gBAAkBD,aACrBoB,MAAM,CAAC,SAACjB,UACP,OAAOrC,OAAO2E,MAAM,CAAC,MAAK/K,oBAAoB,EAAEoJ,IAAI,CAAC,SAAC4B,eACpDC,GAAAA,oBAAS,EAACxC,SAAUuC,UAExB,GACC7H,GAAG,CAAC,SAACsF,gBAAa,IAAM1G,aAAI,CAACmJ,QAAQ,CAAChL,cAAM,CAACC,WAAW,CAAEsI,YAC7D,SAAM,IAAI,CAACnD,aAAa,CAACiD,yBAAzB,aAEA,CAAA,IAAI,CAAC3I,IAAI,GACT,CAAA,IAAI,CAACC,KAAK,CAAG,CAAC,CACd,CAAA,IAAI,CAACC,MAAM,CAAG,CAAC,EACf,SAAM,IAAI,CAACqL,aAAa,YAAxB,cACA,SAAM,IAAI,CAAC/D,cAAc,YAAzB,cACA,SAAM,IAAI,CAACC,YAAY,YAAvB,cAEA,IAAI,CAAC+D,MAAM,eACb,iBAEA1E,IAAAA,4BAAAA,SAAAA,oBAAoB2E,SAAmB,EACrC,OAAOnG,eAAC,CAAC8B,IAAI,CACXqE,UAAUlI,GAAG,CAAC,SAAC+D,GACb,IAAMhB,QAAUgB,EAAEf,KAAK,CAAC,uBACxBoB,GAAAA,eAAM,EAACrB,SAAWA,OAAO,CAAC,EAAE,EAC5B,OAAOvE,mBAAU,CAACC,QAAQ,CAACsE,OAAO,CAAC,EAAE,CAACzC,OAAO,CAAC,MAAO,KACvD,GAEJ,IAEMgD,IAAAA,8BAAN,SAAMA,qIAEF,SAAMxD,QAAQC,GAAG,EACf,IAAI,CAAC6D,gBAAgB,CAAC,gBAAiB,CAAC,EAAG,CAAEuE,UAAW,IAAK,GAC7D,IAAI,CAACvE,gBAAgB,CAAC,YAAa,CAAC,EAAG,CAAEuE,UAAW,IAAK,aAH7D,SAAO,AACL,cAKCC,IAAI,GACJA,IAAI,MACT,iBAEM1D,IAAAA,+BAAN,SAAMA,uBACJ2D,WAGG,oIAGD,SAAMvI,QAAQC,GAAG,CACfsI,YAAYrI,GAAG,CAAC,SAAO6C,kGACrB,IAAI,CAACe,gBAAgB,CAAC,UAAWf,OAAQ,CACvCsF,UAAW,IACb,+BALN,SAAO,AACL,cAQCC,IAAI,GACJA,IAAI,MACT,iBAEMzD,IAAAA,4BAAN,SAAMA,gEACU,KAAP2D,2EAAO,SAAM,IAAI,CAAC1E,gBAAgB,CACvC,iBACA,CAAC,EACD,CAAEuE,UAAW,IAAK,WAHN,oCAAA,kBAAPG,IAAO,QAKdlE,GAAAA,eAAM,EAACkE,KACP,SAAOA,OACT,iBAEMC,IAAAA,wCAAN,SAAMA,gCAAgCC,QAAgB,CAAEC,MAAc,4CAK9DC,eAEAC,sFANA,SAAMpI,GAAAA,eAAM,EAACiI,kBAAnB,GAAI,CAAE,cAAyB,CAC7B,SACF,CAEwB,SAAM9H,GAAAA,kBAAQ,EAAC8H,kBAAjCE,eAAiB,AAAC,cAA0B1K,QAAQ,GAEpD2K,eAAiB,AAAC,WACtB,IAAMC,IAAMF,eAAepI,OAAO,CAChC,iBACA,qCAGF,GAAImI,OAAOtF,QAAQ,CAAC,SAAU,CAC5B,OAAOyF,IAAItI,OAAO,CAAC,kBAAmB,oBACxC,KAAO,CACL,OAAOsI,GACT,CACF,IACA,SAAOjI,GAAAA,mBAAS,EAAC8H,OAAQE,mBAC3B,QAEM3E,IAAAA,iCAAN,SAAMA,yBAAyBrB,OAAiB,kDACtC5D,QACgBhC,mBAAX8L,yFADL9J,QAAYhC,cAAM,CAAC4C,MAAM,CAACb,IAAI,CAA9BC,QACgBhC,mBAAAA,cAAM,CAAC4C,MAAM,CAACmJ,GAAG,CAA5BD,OAAW9L,mBAAhBgM,IAGN,SAAMjJ,QAAQC,GAAG,CACfhB,QAAQiB,GAAG,CAAC,SAAOC,uHACjBH,QAAQC,GAAG,CACT4C,QAAQ3C,GAAG,CAAC,SAAOgJ,+CACXC,QACAC,IAGAH,2EAJAE,QAAUlM,cAAM,CAACC,WAAW,CAAGgM,IAC/BE,IAAMD,QACT3I,OAAO,CAAC,AAAC,IAAU,OAAPuI,OAAO,KAAI,AAAC,IAAU,OAAP5I,OAAO,MAClCK,OAAO,CAAC,gBAAiB,cACtByI,IAAMxB,GAAAA,aAAO,EAAC2B,KACd,SAAM3I,GAAAA,eAAM,EAACwI,iBAAf,CAAE,cAAF,YACF,SAAMzB,GAAAA,eAAK,EAACyB,IAAK,CAAEvB,UAAW,IAAK,WAAnC,oCAEF5J,QAAQgD,GAAG,CACTC,cAAK,CAAC8G,IAAI,CAAC,YACT9G,cAAK,CAACC,IAAI,CACR,AAAC,WAAoD,OAA1CoI,IAAI5I,OAAO,CAACvD,cAAM,CAACyD,WAAW,CAAG,IAAK,OAGvD,SAAM,IAAI,CAAC+H,+BAA+B,CAACU,QAASC,aAApD,cACA,SAAOA,OACT,8CArBR,SAAO,AACL,cAwBAd,IAAI,MACR,iBAEMrH,IAAAA,4BAAN,SAAMA,sEACEmH,UAYAiB,gGAXJ,SAAMrJ,QAAQC,GAAG,CACfkD,OAAOmG,OAAO,CAAC,IAAI,CAACvM,oBAAoB,EAAEmD,GAAG,CAC3C,qDAAQqJ,oBAAWxB,mGACjB,SAAOyB,GAAAA,gBAAS,EAACzB,WACnB,gBALAK,UAAY,AAChB,cAQCE,IAAI,GACJmB,IAAI,GAKD,SAAMzJ,QAAQC,GAAG,CACrBmI,UAAUlI,GAAG,CAAC,SAAOsF,sIAEjB1G,KAAM0G,SAASkE,SAAS,CAACzM,cAAM,CAACC,WAAW,CAACqE,MAAM,GACxC,SAAM,IAAI,CAACZ,iBAAiB,CAAC6E,kBAFzC,eAEEmE,SAAU,uBAEd,0BATIN,cAGA,cAQN,SAAOA,iBACT,iBAEMnI,IAAAA,6BAAN,SAAMA,iEAKE9B,2FAJA,SAAMqB,GAAAA,eAAM,EAAC,IAAI,CAAC5B,aAAa,UAArC,GAAI,CAAE,cAAmC,CACvC,YACF,GAE0B+K,KAAKC,KAAK,CACjC,SAAMjJ,GAAAA,kBAAQ,EAAC,IAAI,CAAC/B,aAAa,CAAE,iBADhCO,kBAAoBwK,QAAAA,MACvB,gBAEH,SAAOxK,qBACT,iBAEMkD,IAAAA,sBAAN,SAAMA,cAAcwH,SAA4B,+GAC9C,SAAMjJ,GAAAA,mBAAS,EACb,IAAI,CAAChC,aAAa,CAClB+K,KAAKG,SAAS,CAACD,UAAW,KAAM,GAChC,iBAHF,cAKAhM,QAAQgD,GAAG,CAAC,iBAAkB,IAAI,CAACjC,aAAa,cAClD,iBAEM8B,IAAAA,0BAAN,SAAMA,kBAAkB6E,QAAgB,mFACtC,SAAO,IAAIxF,QAAgB,SAAC2F,QAASqE,QACnC,IAAMC,KAAOC,eAAM,CAACC,UAAU,CAAC,QAC/B,IAAMC,MAAQC,GAAAA,oBAAgB,EAAC7E,UAC/B4E,MAAMpI,EAAE,CAAC,QAASgI,QAClBI,MAAMpI,EAAE,CAAC,OAAQ,SAAUmD,KAAU,EACnC8E,KAAKK,MAAM,CAACnF,MACd,GACAiF,MAAMpI,EAAE,CAAC,QAAS,WAChB2D,QAAQsE,KAAKM,MAAM,CAAC,OACtB,EACF,KACF,QAEMC,IAAAA,yBAAN,SAAMA,iBAAiBhF,QAAgB,kDAC/BiF,kBAMAC,QACFC,UACAC,WACEC,QAmEAC,iBAeAC,iGA3Fa1M,mBAAE,CAAC2M,gBAAgB,OACpCxF,UACC,SAAM5E,GAAAA,kBAAQ,EAAC4E,kBAFZiF,WAAapM,QAAAA,mBAAE,cAEnB,AAAC,cAA0BH,QAAQ,GACnCG,mBAAE,CAAC4M,YAAY,CAACC,MAAM,IAGlBR,WACFC,UAAoB,eACpBC,WAAqB,gBACnBC,QAAU,SAACM,MACf,GAAI9M,mBAAE,CAAC+M,kBAAkB,CAACD,MAAO,CAC/B,GAAIA,KAAKzN,IAAI,EAAIW,mBAAE,CAACG,YAAY,CAAC2M,KAAKzN,IAAI,EAAG,CAC3CiN,UAAYQ,KAAKzN,IAAI,CAACO,WAAW,CAACC,QAAQ,GAAGsC,OAAO,CAAC,SAAU,GACjE,CACF,CACA,GAAInC,mBAAE,CAACgN,mBAAmB,CAACF,MAAO,CAChC,GAAI9M,mBAAE,CAACG,YAAY,CAAC2M,KAAKzN,IAAI,EAAG,CAC9BkN,WAAaO,KAAKzN,IAAI,CAACO,WAAW,CAACC,QAAQ,EAC7C,KAGEiN,qBADF,IAAMG,eAA2C,AAC/CH,CAAAA,CAAAA,qBAAAA,KAAKG,cAAc,UAAnBH,8BAAAA,qBAAuB,EAAE,AAAD,EACxBjL,GAAG,CAAC,SAACqL,WACL,IAAMC,GAAKD,UAEX,MAAO,CACLE,EAAG,aACHpF,GAAImF,GAAG9N,IAAI,CAACO,WAAW,CAACC,QAAQ,GAChCwN,WAAYF,GAAGE,UAAU,CACrB,MAAK9N,eAAe,CAAC4N,GAAGE,UAAU,EAClC7N,SACN,CACF,GACA,IAAM8N,WAAyBR,KAAKQ,UAAU,CAACzL,GAAG,CAChD,SAAC1C,SAAUC,OACT,IAAMW,WAAa,MAAKwN,SAAS,CAACpO,SAASqO,WAAW,CAAEpB,YAIxD,OAAO,MAAKlN,eAAe,CACzB,CACEG,KAAMF,SAASE,IAAI,CACnBC,KAAMH,SAASG,IAAI,CACnBQ,SACEX,SAASsO,aAAa,GAAKjO,WAC3BL,SAASqO,WAAW,GAAKhO,UAC3BO,WAAAA,UACF,EACAX,MAEJ,GAEF,GAAI0N,KAAKxN,IAAI,GAAKE,UAAW,CAC3B,MAAM,IAAI8G,MACR,AAAC,sBAAkCiG,OAAbD,UAAU,KAAc,OAAXC,YAEvC,CACA,IAAMmB,WAAa,MAAKnO,eAAe,CAACuN,KAAKxN,IAAI,EAEjD+M,QAAQ1G,IAAI,CAAC,CACX2G,UAAAA,UACAC,WAAAA,WACAU,eAAAA,eACAK,WAAAA,WACAI,WAAAA,UACF,EACF,CACA1N,mBAAE,CAAC2N,YAAY,CAACb,KAAMN,QACxB,EACAA,QAAQJ,YAER,GAAIC,QAAQnJ,MAAM,GAAK,EAAG,CACxB,YACF,CAGMuJ,iBAAmBmB,0BAAc,CAACxF,MAAM,CAAC,SAACuC,KAC9C,OAAO0B,QAAQwB,IAAI,CACjB,SAACC,eACCA,OAAOxB,SAAS,GAAK3B,IAAI2B,SAAS,EAClCwB,OAAOvB,UAAU,GAAK5B,IAAI4B,UAAU,EAE1C,GACA,GAAIE,iBAAiBvJ,MAAM,GAAK,EAAG,CAIjC,MAAM,IAAIoD,MAAM,AAAC,4BAAoC,OAATa,UAC9C,CAGMuF,aAAeD,iBAAiB5K,GAAG,CAAC,SAAC8I,KACzC,IAAMoD,YAAc1B,QAAQwB,IAAI,CAC9B,SAACC,eACCA,OAAOxB,SAAS,GAAK3B,IAAI2B,SAAS,EAClCwB,OAAOvB,UAAU,GAAK5B,IAAI4B,UAAU,GAExC,OAAO,uCACF5B,MACHsC,eAAgBc,YAAad,cAAc,CAC3CK,WAAYS,YAAaT,UAAU,CACnCI,WAAYK,YAAaL,UAAU,EAEvC,GACA,SAAOhB,gBACT,iBAEAnN,IAAAA,wBAAAA,SAAAA,gBAAgByO,QAAqB,iBACnC,OAAQA,iBAAAA,yBAAAA,SAAUC,IAAI,EACpB,KAAKjO,mBAAE,CAACkO,UAAU,CAACC,UAAU,CAC3B,MAAO,KACT,MAAKnO,mBAAE,CAACkO,UAAU,CAACE,cAAc,CAC/B,MAAO,SACT,MAAKpO,mBAAE,CAACkO,UAAU,CAACG,aAAa,CAC9B,MAAO,QACT,MAAKrO,mBAAE,CAACkO,UAAU,CAACI,aAAa,CAC9B,MAAO,QACT,MAAKtO,mBAAE,CAACkO,UAAU,CAACK,cAAc,CAC/B,MAAO,SACT,MAAKvO,mBAAE,CAACkO,UAAU,CAACM,gBAAgB,CACjC,MAAO,WACT,MAAKxO,mBAAE,CAACkO,UAAU,CAACO,WAAW,CAC5B,MAAO,MACT,MAAKzO,mBAAE,CAACkO,UAAU,CAACQ,WAAW,CAC5B,MAAO,MACT,MAAK1O,mBAAE,CAACkO,UAAU,CAACS,WAAW,CAC5B,IAAMC,QAAU,AAACZ,SAAgCY,OAAO,CACxD,GAAI5O,mBAAE,CAAC6O,eAAe,CAACD,SAAU,CAC/B,MAAO,CACLxB,EAAG,iBACH0B,MAAOF,QAAQrO,IAAI,AACrB,CACF,MAAO,GAAIP,mBAAE,CAAC+O,gBAAgB,CAACH,SAAU,CACvC,MAAO,CACLxB,EAAG,kBACH0B,MAAOE,OAAOJ,QAAQrO,IAAI,CAC5B,CACF,KAAO,CACL,GAAIqO,QAAQX,IAAI,GAAKjO,mBAAE,CAACkO,UAAU,CAACO,WAAW,CAAE,CAC9C,MAAO,MACT,MAAO,GAAIG,QAAQX,IAAI,GAAKjO,mBAAE,CAACkO,UAAU,CAACM,gBAAgB,CAAE,CAC1D,MAAO,WACT,MAAO,GAAII,QAAQX,IAAI,GAAKjO,mBAAE,CAACkO,UAAU,CAACe,WAAW,CAAE,CACrD,MAAO,MACT,MAAO,GAAIL,QAAQX,IAAI,GAAKjO,mBAAE,CAACkO,UAAU,CAACgB,YAAY,CAAE,CACtD,MAAO,OACT,CACA,MAAM,IAAI5I,MAAM,aAClB,CACF,KAAKtG,mBAAE,CAACkO,UAAU,CAACiB,SAAS,CAC1B,IAAMC,QAAUpB,SAChB,MAAO,CACLZ,EAAG,QACHiC,aAAc,IAAI,CAAC9P,eAAe,CAAC6P,QAAQE,WAAW,CACxD,CACF,MAAKtP,mBAAE,CAACkO,UAAU,CAACqB,WAAW,CAC5B,IAAMC,YAAcxB,SACpB,MAAO,CACLZ,EAAG,SACHqC,MAAOD,YAAYE,OAAO,CAAC7N,GAAG,CAAC,SAAC8N,QAC9B,GAAI3P,mBAAE,CAAC4P,2BAA2B,CAACD,QAAS,CAC1C1J,GAAAA,eAAM,EAAC0J,OAAOrC,UAAU,CAAC,EAAE,EAC3B,IAAMnD,IAAM,MAAKjL,eAAe,CAAC,CAC/BG,KAAMsQ,OAAOrC,UAAU,CAAC,EAAE,CAACjO,IAAI,CAC/BC,KAAMqQ,OAAOrC,UAAU,CAAC,EAAE,CAAChO,IAAI,AACjC,GAEA,OAAO,MAAKJ,eAAe,CAAC,CAC1BG,KAAM,CACJO,YAAa,AAAC,IAAcuK,OAAXA,IAAI9K,IAAI,EACvB8K,OAD0BA,IAAIrK,QAAQ,CAAG,IAAM,GAAG,MAEnD,OADCqK,IAAI7K,IAAI,CACT,IACH,EACAA,KAAMqQ,OAAOrQ,IAAI,AACnB,EACF,KAAO,CACL,OAAO,MAAKJ,eAAe,CAAC,CAC1BG,KAAM,AAACsQ,OAAgCtQ,IAAI,CAC3CC,KAAM,AAACqQ,OAAgCrQ,IAAI,CAC3CQ,SACE,AAAC6P,OAAgClC,aAAa,GAAKjO,SACvD,EACF,CACF,EACF,CACF,MAAKQ,mBAAE,CAACkO,UAAU,CAAC2B,aAAa,KAMtB,wBALR,MAAO,CACLzC,EAAG,MACHpF,GAAI,AACF,AAACgG,SAAkC5N,QAAQ,CAC3CR,WAAW,CAACC,QAAQ,GACtBiQ,IAAI,EAAE,wBAAA,AAAC9B,SAAkC+B,aAAa,UAAhD,wCAAA,wBAAkDlO,GAAG,CACzD,SAACmO,gBAAY,MAAKzQ,eAAe,CAACyQ,UAEtC,CACF,MAAKhQ,mBAAE,CAACkO,UAAU,CAAC+B,SAAS,CAC1B,MAAO,CACL7C,EAAG,QACH7O,MAAO,AAACyP,SAA8BzP,KAAK,CAACsD,GAAG,CAAC,SAACvC,aAC/C,MAAKC,eAAe,CAACD,OAEzB,CACF,MAAKU,mBAAE,CAACkO,UAAU,CAACgC,gBAAgB,CACjC,MAAO,CACL9C,EAAG,eACH7O,MAAO,AAACyP,SAAqCzP,KAAK,CAACsD,GAAG,CAAC,SAACvC,aACtD,MAAKC,eAAe,CAACD,OAEzB,CACF,MAAKU,mBAAE,CAACkO,UAAU,CAACiC,iBAAiB,CAClC,MAAO,CACL/C,EAAG,iBACHgD,OAAQ,IAAI,CAAC7Q,eAAe,CAC1B,AAACyO,SAAsCqC,UAAU,EAEnDjR,MAAO,IAAI,CAACG,eAAe,CACzB,AAACyO,SAAsCsC,SAAS,CAEpD,CACF,MAAKtQ,mBAAE,CAACkO,UAAU,CAACqC,SAAS,CAC1B,GAAIvQ,mBAAE,CAACwQ,eAAe,CAACxC,UAAW,CAChC,MAAO,CACLZ,EAAG,aACHqD,SAAUzC,SAASyC,QAAQ,CAAC5O,GAAG,CAAC,SAAC6O,aAC/B,MAAKnR,eAAe,CAACmR,OAEzB,CACF,CACA,KACF,MAAKlR,UACH,MAAM,IAAI8G,MAAM,qBACpB,CAEA7G,QAAQC,KAAK,CAACsO,SACd,OAAM,IAAI1H,MAAM,AAAC,qBAAkC,OAAd0H,SAASC,IAAI,EACpD,IAqCAV,IAAAA,kBAAAA,SAAAA,UACET,IAAyB,CACzBV,UAAyB,EAEzB,GAAIU,OAAStN,UAAW,CACtB,OAAOA,SACT,CAEA,IAAMmR,QAAU3Q,mBAAE,CAAC4Q,aAAa,CAAC,CAAEC,QAAS7Q,mBAAE,CAAC8Q,WAAW,CAACC,QAAQ,AAAC,GACpE,OAAOJ,QAAQpD,SAAS,CAACvN,mBAAE,CAACgR,QAAQ,CAACC,WAAW,CAAEnE,KAAMV,WAC1D,IAEMrG,IAAAA,qBAAN,SAAMA,+DACEmL,YAMAnH,UACApK,yFAPAuR,YAAczQ,aAAI,CAACC,IAAI,CAC3B9B,cAAM,CAACC,WAAW,CAClB,0CAIgB,SAAMsM,GAAAA,gBAAS,EAAC+F,qBAA5BnH,UAAY,cACH,SAAMpI,QAAQC,GAAG,CAC9BmI,UAAUlI,GAAG,CAAC,SAACsF,iBAAa,MAAKgF,gBAAgB,CAAChF,qBAD9CxH,OAAS,aAGf,CAAA,IAAI,CAACrB,IAAI,CAAGqB,OAAOsK,IAAI,GACvB,SAAO,IAAI,CAAC3L,IAAI,IAClB,iBAEMwH,IAAAA,uBAAN,SAAMA,2DACEoL,YAMAnH,UASAoH,QACApS,iFAhBAmS,YAAczQ,aAAI,CAACC,IAAI,CAC3B9B,cAAM,CAACC,WAAW,CAClB,0CAKA,SAAMsM,GAAAA,gBAAS,EAAC+F,qBADA,SAAME,uBAAW,eACjC,cACA,SAAO3Q,gDAGC4Q,+EAAAA,QAAU5Q,KAAK0B,OAAO,CAAC,SAAU,SAASA,OAAO,CAAC,MAAO,OACxD,SAAMC,GAAAA,eAAM,EAACiP,iBAApB,SAAO,iBACT,gBAPItH,UAAY,cASF,SAAMuH,GAAAA,qBAAc,EAACvH,mBAA/BoH,QAAU,cACVpS,UAAYoS,QACftP,GAAG,CAAC,oBAAG0P,eAAAA,gBAAezM,OAAOmG,OAAO,CAACsG,YACrCtH,IAAI,EACP,CAAA,IAAI,CAACzL,MAAM,CAAGsG,OAAO0M,WAAW,CAC9BzS,UAAUqJ,MAAM,CACd,qDAAE/I,sBAAUA,KAAKqC,QAAQ,CAAC,UAAYrC,KAAKqC,QAAQ,CAAC,YAGxD,SAAO,IAAI,CAAClD,MAAM,IACpB,iBAEMqL,IAAAA,sBAAN,SAAMA,oBACJ4H,UAAAA,uDAAqB,gDAMfC,aAMA3H,UASAoH,QACApS,iFApBN,GAAI,CAAC0S,WAAa3M,OAAOC,IAAI,CAAC,IAAI,CAACxG,KAAK,EAAE2E,MAAM,CAAG,EAAG,CACpD,SAAO,IAAI,CAAC3E,KAAK,CACnB,CAEMmT,cACJjR,aAAI,CAACC,IAAI,CAAC9B,cAAM,CAACC,WAAW,CAAE,mCAC9B4B,aAAI,CAACC,IAAI,CAAC9B,cAAM,CAACC,WAAW,CAAE,wCAK7B,SAAM8S,GAAAA,oBAAQ,EAACD,aAAcvG,gBAAS,UADvB,SAAMiG,uBAAW,eACjC,AAAC,cAAyCnH,IAAI,GAC9C,SAAOxJ,gDAGC4Q,+EAAAA,QAAU5Q,KAAK0B,OAAO,CAAC,SAAU,SAASA,OAAO,CAAC,MAAO,OACxD,SAAMC,GAAAA,eAAM,EAACiP,iBAApB,SAAO,iBACT,gBAPItH,UAAY,cASF,SAAMuH,GAAAA,qBAAc,EAACvH,UAAW0H,mBAA1CN,QAAU,cACVpS,UAAYoS,QACftP,GAAG,CAAC,oBAAG0P,eAAAA,gBAAezM,OAAOmG,OAAO,CAACsG,YACrCtH,IAAI,EACP,CAAA,IAAI,CAAC1L,KAAK,CAAGuG,OAAO0M,WAAW,CAC7BzS,UAAUqJ,MAAM,CAAC,qDAAIwJ,mBAAOA,AAAC,YAADA,EAAaC,MAAC,CAACC,OAAO,KAEpD,SAAO,IAAI,CAACvT,KAAK,IACnB,iBAEAwT,IAAAA,oBAAAA,SAAAA,YAAYpK,GAAgB,EAC1B,GAAIA,MAAQ,SAAU,CACpB,OAAO,IAAIqK,gCAAgB,AAC7B,MAAO,GAAIrK,MAAQ,aAAc,CAC/B,OAAO,IAAIsK,wCAAoB,AACjC,MAAO,GAAItK,MAAQ,YAAa,CAC9B,OAAO,IAAIuK,sCAAmB,AAChC,MAAO,GAAIvK,MAAQ,gBAAiB,CAClC,OAAO,IAAIwK,8CAAuB,AACpC,MAAO,GAAIxK,MAAQ,iBAAkB,CACnC,OAAO,IAAIyK,gDAAwB,AACrC,MAAO,GAAIzK,MAAQ,QAAS,CAC1B,OAAO,IAAI0K,8BAAe,AAC5B,MAAO,GAAI1K,MAAQ,aAAc,CAC/B,OAAO,IAAI2K,wCAAoB,AACjC,MAAO,GAAI3K,MAAQ,UAAW,CAC5B,OAAO,IAAI4K,kCAAiB,AAC9B,MAAO,GAAI5K,MAAQ,YAAa,CAC9B,OAAO,IAAI6K,sCAAmB,AAChC,MAAO,GAAI7K,MAAQ,oBAAqB,CACtC,OAAO,IAAI8K,sDAA2B,AACxC,MAAO,GAAI9K,MAAQ,oBAAqB,CACtC,OAAO,IAAI+K,sDAA2B,AACxC,MAAO,GAAI/K,MAAQ,YAAa,CAC9B,OAAO,IAAIgL,sCAAmB,AAChC,MAAO,GAAIhL,MAAQ,qBAAsB,CACvC,OAAO,IAAIiL,wDAA4B,AACzC,MAAO,GAAIjL,MAAQ,uBAAwB,CACzC,OAAO,IAAIkL,4DAA8B,AAC3C,MAAO,GAAIlL,MAAQ,oBAAqB,CACtC,OAAO,IAAImL,sDAA2B,AACxC,MAAO,GAAInL,MAAQ,sBAAuB,CACxC,OAAO,IAAIoL,0DAA6B,AAC1C,MAAO,GAAIpL,MAAQ,uBAAwB,CACzC,OAAO,IAAIqL,4DAA8B,AAC3C,KAAO,CACL,MAAM,IAAIC,iCAAmB,CAAC,AAAC,aAAgB,OAAJtL,KAC7C,CACF,IAEMuL,IAAAA,uBAAN,SAAMA,eACJvL,GAAM,CACNwL,OAA2B,kDA6BJC,UA3BjBA,SAEFC,MAGMjN,YAGF9B,SAGEgP,YACAC,kBAGAC,eAIAC,kBAGAC,eAKJC,SACAvM,SAEFwM,sGA9BER,SAAqB,IAAI,CAACrB,WAAW,CAACpK,KAExC0L,aACA1L,CAAAA,MAAQ,SAAQ,EAAhBA,YAEMvB,YAAgB+M,QAAhB/M,YACC,SAAM,IAAI,CAAC+F,gBAAgB,CAAC/F,qBAArCiN,OAAS,sCACA,CAAC,QAAS,YAAa,aAAarO,QAAQ,CAAC2C,KAA7C,YACHrD,SAAW,AAAC6O,QAAqC7O,QAAQ,KAC3DqD,CAAAA,MAAQ,aAAeA,MAAQ,OAAM,EAArCA,YAEkB,SAAM,IAAI,CAACkM,cAAc,CAACvP,SAAU,aAAlDgP,YAAc,cACM,SAAM,IAAI,CAACQ,cAAc,CACjD,AAAC,GAAW,OAATxP,SAAS,uBADRiP,kBAAoB,cAGpBC,eAAiB,IAAI,CAACO,sBAAsB,CAACR,mBACnDF,OAASC,YAAaE,uCACb7L,CAAAA,MAAQ,WAAU,EAAlBA,YAEiB,SAAM,IAAI,CAACmM,cAAc,CACjD,AAAC,GAAW,OAATxP,SAAS,uBADRmP,kBAAoB,cAGpBC,eAAiB,IAAI,CAACK,sBAAsB,CAACN,mBACnDJ,OAASK,sCAII,SAAMN,CAAAA,UAAAA,UAASY,MAAM,OAAfZ,UAAAA,CAAgBD,SAAhBC,OAAyB,qBAAGC,iBAA7CM,SAAW,cACA,SAAM,IAAI,CAACM,uBAAuB,CAACtM,IAAKgM,kBAAnDvM,SAAW,cAEbwM,2BACAD,SAASO,YAAY,CAArBP,aAEA,SAAMhS,QAAQC,GAAG,CACf+R,SAASO,YAAY,CAACrS,GAAG,CAAC,oBAAG8F,YAAAA,IAAKwL,gBAAAA,QAChC,OAAO,MAAKD,cAAc,CAACvL,MAAKwL,UAClC,aAJJS,oBAAsB,AACpB,cAKA3J,IAAI,2BAGR,SAAO,CAAC7C,UAAD,OAAW,qBAAGwM,yBACvB,iBAEMK,IAAAA,gCAAN,SAAMA,wBACJtM,GAAgB,CAChBhI,MAAwB,4CAEhBmC,OAAcqF,SAAUgN,KAAMC,WAAYC,cAG5CC,WAsCAC,OAQAC,iFAjDE1S,OAA4DnC,OAA5DmC,OAAcqF,SAA8CxH,OAApDc,KAAgB0T,KAAoCxU,OAApCwU,KAAMC,WAA8BzU,OAA9ByU,WAAYC,cAAkB1U,OAAlB0U,cAG5CC,WAAaF,WAChBK,MAAM,CACL,SAAC1Q,EAAG2Q,WACF,IAAMC,WAAa1P,4BAAa,CAAC2P,aAAa,CAACF,WAC/C,IAAIG,WAAaF,WACjB,GAAIA,WAAW3P,QAAQ,CAAC,MAAQ2P,WAAW3P,QAAQ,CAAC,KAAM,CACxD6P,WAAaC,GAAAA,kBAAM,EACjBrU,aAAI,CAACmJ,QAAQ,CAACnJ,aAAI,CAAC2I,OAAO,CAACjC,UAAWwN,YACtC,SAAC/O,SAAM,CAACA,EAAEmP,UAAU,CAAC,OAAS,MAAO,KAAOnP,EAAE,EAElD,CAGA,IAAMoP,UAAYjR,EAAE8J,IAAI,CACtB,SAACoH,kBAAcA,UAAUC,IAAI,GAAKL,aAEpC,GAAIG,UAAW,CACbA,UAAUjQ,IAAI,CAAGnB,eAAC,CAAC8B,IAAI,CAACsP,UAAUjQ,IAAI,CAACoQ,MAAM,CAACT,WAChD,KAAO,CACL3Q,EAAE4B,IAAI,CAAC,CACLZ,KAAM,CAAC2P,UAAU,CACjBQ,KAAML,UACR,EACF,CACA,OAAO9Q,CACT,MAODqE,MAAM,CACL,SAAC6M,kBACC9N,SAASzF,QAAQ,CAACuT,UAAUC,IAAI,CAAC/S,OAAO,CAAC,KAAM,IAAM,SAAW,QAIhEoS,OAAS,AACb,qBAAIF,sBAAAA,uBAAAA,yBACJ,qBAAGC,WAAWzS,GAAG,CACf,SAACoT,iBACC,AAAC,YAAgDA,OAArCA,UAAUlQ,IAAI,CAACrE,IAAI,CAAC,MAAM,aAA0B,OAAfuU,UAAUC,IAAI,CAAC,SAEpExU,IAAI,CAAC,MAEW,SAAM,AAAC,4FACvB,GAAIiH,MAAQ,iBAAkB,CAC5B,SAAO,CAAC4M,OAAQJ,MAAMzT,IAAI,CAAC,QAC7B,KAAO,CACL,SAAO0U,iBAAQ,CAACC,MAAM,CAAC,CAACd,OAAQJ,MAAMzT,IAAI,CAAC,QAAS,CAClDqI,OAAQpB,MAAQ,SAAW,OAAS,YACtC,GACF,YACF,gBARM6M,UAAY,cAUlB,SAAO,CACL/T,KAAMqB,OAAS,IAAMqF,SACrBoB,KAAMiM,SACR,KACF,QAEMc,IAAAA,wBAAN,SAAMA,gBAAgBC,WAAwB,4CACpC3U,QACAyB,YACF8E,SAEAqO,oFAJE5U,QAAYhC,cAAM,CAAC4C,MAAM,CAACb,IAAI,CAA9BC,QACAyB,YAAgBzD,cAAM,CAAtByD,YACF8E,SAAW,AAAC,GAAwBoO,OAAtB3W,cAAM,CAACyD,WAAW,CAAC,KAAoB,OAAjBkT,YAAY9U,IAAI,EAEpD+U,aAAe5R,eAAC,CAAC8B,IAAI,CACzB9E,QAAQiB,GAAG,CAAC,SAACC,eAAWqF,SAAShF,OAAO,CAAC,YAAa,AAAC,IAAU,OAAPL,OAAO,SAE5D,SAAMH,QAAQC,GAAG,CACtB4T,aAAa3T,GAAG,CAAC,SAAO4T,uDAChB7K,2EAAAA,IAAMnK,aAAI,CAAC2I,OAAO,CAACqM,aACnB,SAAMrT,GAAAA,eAAM,EAACwI,iBAAf,CAAE,cAAF,YACF,SAAMzB,GAAAA,eAAK,EAACyB,IAAK,CAAEvB,UAAW,IAAK,WAAnC,oCAEF,SAAM7G,GAAAA,mBAAS,EAACiT,YAAaF,YAAYhN,IAAI,UAA7C,cACA9I,QAAQgD,GAAG,CACTC,cAAK,CAAC8G,IAAI,CAAC,eACT9G,cAAK,CAACC,IAAI,CAAC,AAAC,GAA6C,OAA3C8S,YAAYtT,OAAO,CAACE,YAAc,IAAK,OAEzD,SAAOoT,eACT,gBAZF,SAAO,iBAcT,QAEMhQ,IAAAA,yBAAN,SAAMA,iBACJkC,GAAgB,CAChB+N,eAAoB,CACpBC,gBAAkC,kDAE5BC,gBAMA7Q,KAGA8Q,aAQAC,uGAjBAF,gBAAkB,gBACtB5L,UAAW,OACR2L,kBAIC5Q,MAAuB4C,KAI3B,SAAMhG,QAAQC,GAAG,CACfmD,KAAKlD,GAAG,CAAC,SAAO8F,kHACP,SAAM,IAAI,CAACuL,cAAc,CAACvL,IAAK+N,yBAAtC,SAAO,iBACT,0BAJEG,aAAe,AACnB,cAKA5L,IAAI,GAEsC,SAAM,AAAC,4HAC7C2L,CAAAA,gBAAgB5L,SAAS,GAAK,IAAG,EAAjC4L,YACF,SAAOC,qBAEA,SAAMzE,GAAAA,uBAAW,EAACyE,aAAc,SAAON,uDACpC3U,QACFuG,SACAqO,oFAFE5U,QAAYhC,cAAM,CAAC4C,MAAM,CAACb,IAAI,CAA9BC,QACFuG,SAAW,AAAC,GAAwBoO,OAAtB3W,cAAM,CAACyD,WAAW,CAAC,KAAoB,OAAjBkT,YAAY9U,IAAI,EACpD+U,aAAe5U,QAAQiB,GAAG,CAAC,SAACC,eAChCqF,SAAShF,OAAO,CAAC,YAAa,AAAC,IAAU,OAAPL,OAAO,QAEpC,SAAMiU,GAAAA,sBAAU,EACrBP,aACA,SAAOQ,sHAAc,SAAM5T,GAAAA,eAAM,EAAC4T,0BAAf,CAAE,gCAFvB,SAAO,iBAIT,eAVA,SAAO,kCAYX,gBAhBMF,qBAAsC,cAiB5C,GAAIA,qBAAqB5S,MAAM,GAAK,EAAG,CACrC,MAAM,IAAI+S,uCAAyB,CACjC,uBAEJ,CAEA,SAAOtU,QAAQC,GAAG,CAChBkU,qBAAqBjU,GAAG,CAAC,SAAC0T,oBACxB,MAAKD,eAAe,CAACC,mBAG3B,iBAEMW,IAAAA,2BAAN,SAAMA,mBACJ5R,QAAgB,CAChB6R,WAAwB,CACxBC,MAAe,4CAEmB,mCAA1BtU,OAAcuU,QAIhBC,SACAC,oFAL4B,mCAAA,IAAI,CAACxE,WAAW,CAChDoE,aACAK,gBAAgB,CAACvR,4BAAa,CAACkB,cAAc,CAAC7B,UAAW8R,QAFnDtU,OAA0B,mCAA1BA,OAAcuU,QAAY,mCAAlB5V,KAIV6V,SAAW7V,aAAI,CAACC,IAAI,CAAC9B,cAAM,CAACyD,WAAW,CAAEP,OAAQuU,SACjDE,QAAU9V,aAAI,CAACC,IAAI,CAACoB,OAAQuU,eAEhCE,QAAAA,QACAD,SAAAA,UACU,SAAMlU,GAAAA,eAAM,EAACkU,kBAHzB,eAGEG,SAAU,uBAEd,iBAEMC,IAAAA,oBAAN,SAAMA,YACJpS,QAAgB,CAChBqS,KAEC,kDAEK5R,KACAO,MACAsR,4FAFA7R,KAAsB8R,kBAAW,CAAC1D,OAAO,CACzC7N,MAAQL,4BAAa,CAACkB,cAAc,CAAC7B,UACrCsS,UAAY9R,OAAOC,IAAI,CAAC4R,OAAOvO,MAAM,CACzC,SAAC/I,aAASA,OAASiG,MAAMwR,QAAQ,GAG5B,SAAMC,GAAAA,uBAAW,EACtBhS,KACA,SAAOpF,OAAQgI,+CACPqP,IAcsBA,sBAApBlV,OAAc8D,EACdhF,+EAfFoW,IAAM,IAAI,CAACjF,WAAW,CAACpK,SACzBA,IAAIoN,UAAU,CAAC,cAAfpN,YACF,SAAMgK,GAAAA,oBAAQ,EAACiF,UAAW,SAAOK,uDACHD,sBAApBlV,OAAc8D,2EAAMoR,sBAAAA,IAAIR,gBAAgB,CAC9ClR,MACA2R,aAFMnV,OAAoBkV,sBAApBlV,OAAc8D,EAAMoR,sBAAZvW,OAIT,AAAC,GAAUwW,OAARtP,IAAI,MAAgB,OAAZsP,aAAiB,SAAM7U,GAAAA,eAAM,EAC7C3B,aAAI,CAACC,IAAI,CAAC9B,cAAM,CAACyD,WAAW,CAAEP,OAAQ8D,YADxCjG,MAAM,GAA0B,CAAG,0BAGrC,eARA,cASA,SAAOA,eAGmBqX,sBAAAA,IAAIR,gBAAgB,CAAClR,OAAzCxD,OAAoBkV,sBAApBlV,OAAc8D,EAAMoR,sBAAZvW,KACRG,QAAYhC,cAAM,CAAC4C,MAAM,CAACb,IAAI,CAA9BC,YACJkB,OAAOkD,QAAQ,CAAC,WAAhBlD,YACF,SAAM6P,GAAAA,oBAAQ,EAAC/Q,QAAS,SAAOwM,wHACtB,AAAC,GAAUA,OAARzF,IAAI,MAAM,OAAFyF,GAAO,SAAMhL,GAAAA,eAAM,EACnC3B,aAAI,CAACC,IAAI,CAAC9B,cAAM,CAACyD,WAAW,CAAEP,OAAOK,OAAO,CAAC,UAAWiL,GAAIxH,YAD9DjG,MAAM,GAAgB,CAAG,0BAG3B,eAJA,iCAMc,SAAMyC,GAAAA,eAAM,EAAC3B,aAAI,CAACC,IAAI,CAAC9B,cAAM,CAACyD,WAAW,CAAEP,OAAQ8D,YAAjEjG,MAAM,CAACgI,IAAI,CAAG,oCAGhB,SAAOhI,UACT,gBACA,CAAC,WA/BH,SAAO,iBAiCT,iBAEMmU,IAAAA,uBAAN,SAAMA,eAAeoD,SAAiB,4CAC9BvC,WACAwC,cAMAtC,WACAtD,gFARAoD,WAAa1P,4BAAa,CAAC2P,aAAa,CAACsC,WACzCC,cAAgB1W,aAAI,CAACC,IAAI,CAC7B9B,cAAM,CAACC,WAAW,CAClB,OACA,cACA8V,WAAa,OAETE,WAAa,KAAOpU,aAAI,CAACmJ,QAAQ,CAACnI,UAAW0V,eAClC,SAAM,gBAAOtC,2EAAP,sBAAjBtD,SAAW,cAEjB,GAAI,CAACA,QAAQ,CAAC2F,UAAU,CAAE,CACxB,MAAM,IAAI5Q,MAAM,AAAC,qBAA8B,OAAV4Q,WACvC,CACA,SAAO3F,QAAQ,CAAC2F,UAAU,CAACE,QAAQ,CAACF,cACtC,QAEMG,IAAAA,0BAAN,SAAMA,kBAAkBC,QAAwB,kDAcpCC,UAkBJD,eAVEE,0FArBJF,CAAAA,SAASG,QAAQ,GAAK,OAAM,EAA5BH,YACF,SAAO,IAAI,CAACI,aAAa,CAACJ,SAASK,IAAI,cAC9BL,CAAAA,SAASG,QAAQ,GAAK,OAAM,EAA5BH,gBACLA,CAAAA,SAASK,IAAI,GAAKnY,SAAQ,EAA1B8X,WACF,OAAM,IAAIhR,iBACDgR,CAAAA,SAASzP,QAAQ,CAAC3E,MAAM,CAAG,CAAA,EAA3BoU,YAEP,SAAM,IAAI,CAACD,iBAAiB,CAAC,uCACxBC,WACHG,SAAU,oBAHd,SAAO,AACL,cAIAG,KAAK,WAEW,SAAM,IAAI,CAACF,aAAa,CAACJ,SAASK,IAAI,UAAlDJ,UAAY,cAClB,GAAID,SAASK,IAAI,CAACE,QAAQ,GAAK,KAAM,CACnC,SAAOhG,MAAC,CAAC+F,KAAK,CAACL,WAAWM,QAAQ,GACpC,KAAO,CACL,SAAOhG,MAAC,CAAC+F,KAAK,CAACL,WACjB,+CAEOD,CAAAA,SAASG,QAAQ,GAAK,QAAO,EAA7BH,YACG,SAAMA,SAASzP,QAAQ,CAAC4M,MAAM,CACxC,SAAOqD,QAASC,yDACRpY,gFAAS,SAAMmY,gBAAfnY,OAAS,gBACRoY,cAAcJ,IAAI,CAAEtY,IAAI,CAC7B,SAAM,IAAI,CAACgY,iBAAiB,CAACU,uBAD/BpY,MAAM,GAA0B,CAC9B,cACF,SAAOA,UACT,gBACA,CAAC,WAPG6X,IAAM,cAUZ,GAAIF,EAAAA,eAAAA,SAASK,IAAI,UAAbL,+BAAAA,eAAeO,QAAQ,IAAK,KAAM,CACpC,SAAOhG,MAAC,CAACzB,MAAM,CAACoH,KAAKK,QAAQ,GAC/B,KAAO,CACL,SAAOhG,MAAC,CAACzB,MAAM,CAACoH,KAClB,qBAEA,MAAMlR,0BAEV,iBACMoR,IAAAA,sBAAN,SAAMA,cAAcC,IAAgB,4CAC9BK,+EAAAA,QAAwBnG,MAAC,CAACoG,OAAO,OACjCC,GAAAA,oBAAa,EAACP,MAAdO,YACFF,QAAUnG,MAAC,CAACsG,MAAM,GAAGC,GAAG,2BACfC,GAAAA,uBAAgB,EAACV,MAAjBU,YACTL,QAAUnG,MAAC,CAACyG,MAAM,2BACTC,GAAAA,iBAAU,EAACZ,MAAXY,YACTP,QAAUnG,MAAC,CAAC2G,MAAM,GAAGC,GAAG,CAACC,GAAAA,iCAAiB,EAACf,KAAKgB,QAAQ,2BAC/CC,GAAAA,iBAAU,EAACjB,MAAXiB,YACC,SAAM,IAAI,CAAC9E,cAAc,CAAC6D,KAAK3P,EAAE,UAA3CgQ,QAAU,sCACDa,GAAAA,mBAAY,EAAClB,MAAbkB,YACTb,QAAUnG,MAAC,CAAC2G,MAAM,GAAGC,GAAG,CAACd,KAAKzU,MAAM,0BAC3B4V,CAAAA,GAAAA,kBAAW,EAACnB,OAASoB,GAAAA,mBAAY,EAACpB,KAAI,EAAtCmB,YACTd,QAAUnG,MAAC,CAACsG,MAAM,2BACTa,GAAAA,oBAAa,EAACrB,MAAdqB,YACThB,QAAUnG,MAAC,CAAC2G,MAAM,2BACTS,GAAAA,oBAAa,EAACtB,MAAdsB,YACTjB,QAAUnG,MAAC,CAACqH,OAAO,2BACVC,GAAAA,iBAAU,EAACxB,MAAXwB,aACTnB,QAAUnG,MAAC,CAAC2G,MAAM,GAAGtV,MAAM,CAAC,6BACnBkW,GAAAA,iBAAU,EAACzB,MAAXyB,aACTpB,QAAUnG,MAAC,CAAC2G,MAAM,GAAGtV,MAAM,CAAC,4BACnBmW,GAAAA,qBAAc,EAAC1B,MAAf0B,aACTrB,QAAUnG,MAAC,CAACyH,IAAI,4BACPC,GAAAA,sBAAe,EAAC5B,MAAhB4B,aACTvB,QAAUnG,MAAC,CAACyH,IAAI,4BACPE,GAAAA,iBAAU,EAAC7B,MAAX6B,aACC,SAAM,IAAI,CAAC1F,cAAc,CAAC6D,KAAK3P,EAAE,WAA3CgQ,QAAU,uCACDyB,GAAAA,iBAAU,EAAC9B,MAAX8B,aACTzB,QAAUnG,MAAC,CAAC6H,IAAI,4BACPC,GAAAA,oBAAa,EAAChC,MAAdgC,aACC,SAAM,IAAI,CAAC7F,cAAc,CAAC6D,KAAK3P,EAAE,WAA3CgQ,QAAU,mCACL,GAAI4B,GAAAA,qBAAc,EAACjC,MAAO,CAC/B,GACEkC,GAAAA,iCAA0B,EAAClC,OAC1BmC,GAAAA,6BAAsB,EAACnC,OAASA,KAAKoC,aAAa,CACnD,CACA/B,QAAUnG,MAAC,CAACsG,MAAM,GAAGC,GAAG,EAC1B,CACF,KAAO,CACL,MAAM,IAAI9R,MAAM,AAAC,4BAAgC,OAALqR,KAAK,KACnD,yBAEA,GAAI,AAACA,KAAgCqC,QAAQ,CAAE,CAC7ChC,QAAU,AAACA,QAAwBiC,WAAW,EAChD,CACA,GAAItC,KAAKE,QAAQ,CAAE,CACjBG,QAAUA,QAAQH,QAAQ,EAC5B,CAEA,SAAOG,WACT,iBAEAkC,IAAAA,0BAAAA,SAAAA,kBACEvS,GAAW,CACXqQ,OAAqB,EAErB,GAAIA,AAAO,YAAPA,QAAmBnG,MAAC,CAACsI,OAAO,EAAE,CAChC,MAAO,UACT,MAAO,GAAInC,AAAO,YAAPA,QAAmBnG,MAAC,CAACuI,SAAS,EAAE,CACzC,GAAIzS,IAAI3C,QAAQ,CAAC,QAAU2C,IAAI3C,QAAQ,CAAC,SAAU,CAChD,MAAO,cACT,MAAO,GAAIgT,QAAQqC,WAAW,GAAK,oBAAqB,CACtD,MAAO,iBACT,MAAO,GAAI1S,IAAIjG,QAAQ,CAAC,QAAS,CAC/B,MAAO,aACT,KAAO,CACL,MAAO,cACT,CACF,MAAO,GAAIsW,AAAO,YAAPA,QAAmBnG,MAAC,CAACyI,SAAS,EAAE,CACzC,GAAI3S,MAAQ,KAAM,CAChB,MAAO,WACT,MAAO,GAAIA,IAAIjG,QAAQ,CAAC,OAAQ,CAC9B,MAAO,cACT,KAAO,CACL,MAAO,cACT,CACF,MAAO,GAAIsW,AAAO,YAAPA,QAAmBnG,MAAC,CAAC0I,UAAU,EAAE,CAC1C,MAAO,SACT,MAAO,GAAIvC,AAAO,YAAPA,QAAmBnG,MAAC,CAAC2I,OAAO,EAAE,CACvC,MAAO,OACT,MAAO,GAAIxC,AAAO,YAAPA,QAAmBnG,MAAC,CAAC4I,SAAS,EAAE,CACzC,MAAO,QACT,MAAO,GAAIzC,AAAO,YAAPA,QAAmBnG,MAAC,CAAC6I,MAAM,GAAI1C,AAAO,YAAPA,QAAmBnG,MAAC,CAAC8I,UAAU,EAAE,CACzE,MAAO,cACT,MAAO,GAAI3C,AAAO,YAAPA,QAAmBnG,MAAC,CAAC+I,QAAQ,EAAE,CACxC,MAAO,cACT,MAAO,GAAI5C,AAAO,YAAPA,QAAmBnG,MAAC,CAACgJ,UAAU,EAAE,CAC1C,MAAO,cACT,KAAO,CACL,MAAM,IAAIvU,MAAM,AAAC,YAAkB0R,OAAPrQ,IAAI,KAAoB,OAAjBqQ,QAAQ8C,GAAG,CAACxb,IAAI,EACrD,CACF,IAEAyU,IAAAA,+BAAAA,SAAAA,uBACEiE,OAAuB,qBACvB+C,QAAAA,uDAAkB,OAElB,IAAMD,IAAM,CACVzb,KAAM0b,QACNC,MAAO3a,mBAAU,CAACC,QAAQ,CAACya,QAAS,OACpC/C,QAAAA,OACF,EACA,GAAIA,AAAO,YAAPA,QAAmBnG,MAAC,CAACoJ,SAAS,EAAE,CAClC,IAAMC,WAAapW,OAAOC,IAAI,CAACiT,QAAQmD,KAAK,EAC5C,IAAMtT,SAAWqT,WAAWrZ,GAAG,CAAC,SAAC8F,KAC/B,IAAM4P,UAAYS,QAAQmD,KAAK,CAACxT,IAAI,CACpC,OAAO,MAAKoM,sBAAsB,CAACwD,UAAW5P,IAChD,GACA,OAAO,uCACFmT,MACHM,WAAY,SACZvT,SAAAA,UAEJ,MAAO,GAAImQ,AAAO,YAAPA,QAAmBnG,MAAC,CAACwJ,QAAQ,EAAE,CACxC,IAAM9D,UAAY,AAACS,QAAuC8C,GAAG,CAACQ,OAAO,CACrE,GAAI/D,AAAS,YAATA,UAAqB1F,MAAC,CAACuI,SAAS,GAAIW,QAAQ/V,QAAQ,CAAC,UAAW,CAClE,OAAO,uCACF8V,MACHM,WAAY,gBAEhB,CACA,OAAO,uCACFN,MACHM,WAAY,QACZE,QAAS,IAAI,CAACvH,sBAAsB,CAACwD,UAAWwD,UAEpD,MAAO,GAAI/C,AAAO,YAAPA,QAAmBnG,MAAC,CAAC+I,QAAQ,EAAE,CACxC,IAAMW,YAAc,AAACvD,QAAoC8C,GAAG,CAAC3H,OAAO,CAACtR,GAAG,CAAC,SAAC2Z,YACxE,MAAKzH,sBAAsB,CAACyH,IAAKT,WAGnC,OAAOQ,WAAW,CAAC,EAAE,AACvB,MAAO,GAAIvD,AAAO,YAAPA,QAAmBnG,MAAC,CAAC4J,WAAW,EAAE,CAC3C,OAAO,uCACF,IAAI,CAAC1H,sBAAsB,CAAC,AAACiE,QAAqC8C,GAAG,CAACvD,SAAS,CAAEwD,WACpFjb,SAAU,MAEd,MAAO,GAAIkY,AAAO,YAAPA,QAAmBnG,MAAC,CAAC6J,WAAW,EAAE,CAC3C,OAAO,uCACF,IAAI,CAAC3H,sBAAsB,CAAC,AAACiE,QAAqC8C,GAAG,CAACvD,SAAS,CAAEwD,WACpFlD,SAAU,MAEd,KAAO,CACL,OAAO,uCACFiD,MACHM,WAAY,IAAI,CAAClB,iBAAiB,CAACa,QAAS/C,UAEhD,CACF,IAEMnE,IAAAA,uBAAN,SAAMA,eACJvP,QAAgB,CAChBqX,SAAiB,4CAEXhd,OACAid,QAIAC,UACAC,aAKAC,eAIAzI,mFAfA3U,OAASsG,4BAAa,CAACI,GAAG,CAACf,UAC3BsX,QAAUjd,OAAOqd,OAAO,CAACL,UAAU,CACzC,GAAIC,UAAYpc,UAAW,CACzB,MAAM,IAAIyc,yCAA2B,CAAC,kBACxC,CACMJ,UAAYld,OAAOud,qBAAqB,CAACN,SACzCE,aAA+B,CACnCrE,SAAU,SACV5P,SAAUgU,SACZ,EAEwB,SAAM,IAAI,CAACxE,iBAAiB,CAClDyE,sBADIC,eAAkB,cAIlBzI,YAAc,IAAI,CAACS,sBAAsB,CAACgI,eAChDzI,CAAAA,YAAYzL,QAAQ,CAAGyL,YAAYzL,QAAQ,CAAEhG,GAAG,CAAC,SAACkG,OAChD,GAAIA,MAAMqT,UAAU,GAAK,SAAU,CACjC,IAAMe,UAAYpU,MAAMF,QAAQ,CAAEgG,IAAI,CAAC,SAACuO,UACtC,CAAC,QAAS,OAAO,CAACpX,QAAQ,CAACoX,GAAG/c,IAAI,IAEpC,GAAI8c,UAAW,CACb,OAAO,uCACFpU,QACHqT,WAAY,cACZ5Z,OAAQ,CACN6a,OAAQF,UAAU9c,IAAI,AACxB,GAEJ,KAAO,CACL,OAAO0I,KACT,CACF,MAAO,GACLA,MAAMqT,UAAU,GAAK,SACrBrT,MAAMuT,OAAO,EACbvT,MAAMuT,OAAO,CAACF,UAAU,GAAK,SAC7B,CACA,IAAMe,WAAYpU,MAAMuT,OAAO,CAAEzT,QAAQ,CAAEgG,IAAI,CAAC,SAACuO,UAC/C,CAAC,QAAS,OAAO,CAACpX,QAAQ,CAACoX,GAAG/c,IAAI,IAEpC,GAAI8c,WAAW,CACb,OAAO,uCACFpU,QACHuT,QAAS,uCACJvT,MAAMuT,OAAO,GAChBF,WAAY,cACZ5Z,OAAQ,CACN6a,OAAQF,WAAU9c,IAAI,AACxB,KAGN,KAAO,CACL,OAAO0I,KACT,CACF,CACA,OAAOA,KACT,GAEA,SAAOuL,eACT,iBAEMgJ,IAAAA,qBAAN,SAAMA,aACJC,IAAmE,+GAEnE,GAAI,CAAC,sBAAsBC,IAAI,CAACD,KAAKjY,QAAQ,EAAG,CAC9C,MAAM,IAAI2O,iCAAmB,CAAC,iCAChC,CAEA,SAAM,IAAI,CAACxN,gBAAgB,CAAC,SAAU8W,cAAtC,cAGA,SAAMtX,4BAAa,CAACC,MAAM,WAA1B,0BAeF,iBAEMuX,IAAAA,kBAAN,SAAMA,UAAUnY,QAAgB,4CACxB3F,OAEA+d,2FAkBWC,mFApBXhe,OAASsG,4BAAa,CAACI,GAAG,CAACf,UAE3BoY,SAAW,AAAC,WAChB,GAAI/d,OAAO6G,QAAQ,CAAE,CACnB,MAAO,CACL,AAAC,GAAwC7G,OAAtCC,cAAM,CAACC,WAAW,CAAC,qBAA4CF,OAAzBA,OAAO2G,KAAK,CAACsX,QAAQ,CAAC,KAAmB,OAAhBje,OAAO2G,KAAK,CAACC,EAAE,CAAC,gBACnF,AACH,KAAO,CACL,MAAO,CACL,AAAC,GAAwC5G,OAAtCC,cAAM,CAACC,WAAW,CAAC,qBAAmC,OAAhBF,OAAO2G,KAAK,CAACC,EAAE,EACxD,AAAC,GAAyC5G,OAAvCC,cAAM,CAACC,WAAW,CAAC,sBAAoC,OAAhBF,OAAO2G,KAAK,CAACC,EAAE,EAM1D,CARM,OAGL,qBAAG3G,cAAM,CAAC4C,MAAM,CAACb,IAAI,CAACC,OAAO,CAC1BiB,GAAG,CAAC,SAACC,cAAW,CACf,AAAC,GAAwBA,OAAtBlD,cAAM,CAACyD,WAAW,CAAC,KAA0B1D,OAAvBmD,OAAO,kBAAgC,OAAhBnD,OAAO2G,KAAK,CAACC,EAAE,EAChE,GACA0E,IAAI,IAEX,CACF,0IAE4ByS,6JAAXC,eACX,SAAMva,GAAAA,eAAM,EAACua,qBAAb,cAAA,YACFld,QAAQgD,GAAG,CAACC,cAAK,CAACma,GAAG,CAAC,AAAC,UAAiB,OAARF,WAChC,SAAMG,GAAAA,YAAE,EAACH,QAAS,CAAEtT,UAAW,KAAM0T,MAAO,IAAK,WAAjD,iCAEAtd,QAAQgD,GAAG,CAACC,cAAK,CAACsa,MAAM,CAAC,AAAC,cAAqB,OAARL,2cAK3C,SAAM1X,4BAAa,CAACC,MAAM,YAA1B,cAEA,SAAO,CAAEwX,SAAAA,QAAS,KACpB,QAEA5S,IAAAA,eAAAA,SAAAA,aACiBlL,sBAAAA,uBAAf,IAAMqe,OAASre,CAAAA,wBAAAA,kBAAAA,cAAM,CAAC4C,MAAM,CAAC0b,EAAE,UAAhBte,kCAAAA,kBAAkBue,IAAI,UAAtBve,gCAAAA,uBAA0B,KAEzCwe,MAAM,AAAC,oBAA0B,OAAPH,OAAO,eAAc,CAC7CnP,OAAQ,KACV,GAAGuP,KAAK,CAAC,SAACC,UACR7d,QAAQgD,GAAG,CAACC,cAAK,CAAC6a,GAAG,CAAC,AAAC,+BAAwC,OAAVD,EAAEE,OAAO,KAElE,YAl/CWnf"}
@@ -0,0 +1,13 @@
1
+ import { TemplateKey, TemplateOptions } from "../types/types";
2
+ import { EntityNamesRecord } from "../entity/entity-manager";
3
+ import { RenderedTemplate } from "../syncer/syncer";
4
+ export declare abstract class Template {
5
+ key: TemplateKey;
6
+ constructor(key: TemplateKey);
7
+ abstract render(options: TemplateOptions[TemplateKey], ...extra: unknown[]): RenderedTemplate | Promise<RenderedTemplate>;
8
+ abstract getTargetAndPath(names?: EntityNamesRecord, ...extra: unknown[]): {
9
+ target: string;
10
+ path: string;
11
+ };
12
+ }
13
+ //# sourceMappingURL=base-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-template.d.ts","sourceRoot":"","sources":["../../src/templates/base-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,8BAAsB,QAAQ;IACT,GAAG,EAAE,WAAW;gBAAhB,GAAG,EAAE,WAAW;aACnB,MAAM,CACpB,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,EACrC,GAAG,KAAK,EAAE,OAAO,EAAE,GAClB,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;aAE/B,gBAAgB,CAC9B,KAAK,CAAC,EAAE,iBAAiB,EACzB,GAAG,KAAK,EAAE,OAAO,EAAE,GAClB;QACD,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd;CACF"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Template",{enumerable:true,get:function(){return Template}});function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}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}var Template=function Template(key){"use strict";_class_call_check(this,Template);_define_property(this,"key",void 0);this.key=key};
2
+ //# sourceMappingURL=base-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/templates/base-template.ts"],"sourcesContent":["import { TemplateKey, TemplateOptions } from \"../types/types\";\nimport { EntityNamesRecord } from \"../entity/entity-manager\";\nimport { RenderedTemplate } from \"../syncer/syncer\";\n\nexport abstract class Template {\n constructor(public key: TemplateKey) {}\n public abstract render(\n options: TemplateOptions[TemplateKey],\n ...extra: unknown[]\n ): RenderedTemplate | Promise<RenderedTemplate>;\n\n public abstract getTargetAndPath(\n names?: EntityNamesRecord,\n ...extra: unknown[]\n ): {\n target: string;\n path: string;\n };\n}\n"],"names":["Template","key"],"mappings":"oGAIsBA,kDAAAA,kVAAf,IAAA,AAAeA,SAAf,SAAeA,SACR,AAAOC,GAAgB,sCADfD,mDACDC,IAAAA"}
@@ -0,0 +1,17 @@
1
+ import { TemplateOptions } from "../types/types";
2
+ import { EntityNamesRecord } from "../entity/entity-manager";
3
+ import { Template } from "./base-template";
4
+ export declare class Template__entity extends Template {
5
+ constructor();
6
+ getTargetAndPath(names: EntityNamesRecord, parentNames?: EntityNamesRecord): {
7
+ target: string;
8
+ path: string;
9
+ };
10
+ render(options: TemplateOptions["entity"]): {
11
+ body: string;
12
+ importKeys: never[];
13
+ target: string;
14
+ path: string;
15
+ };
16
+ }
17
+ //# sourceMappingURL=entity.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.template.d.ts","sourceRoot":"","sources":["../../src/templates/entity.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAiB,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,qBAAa,gBAAiB,SAAQ,QAAQ;;IAK5C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE,iBAAiB;;;;IAS1E,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;;;;;;CAoE1C"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Template__entity",{enumerable:true,get:function(){return Template__entity}});var _entitymanager=require("../entity/entity-manager");var _basetemplate=require("./base-template");var _api=require("../api");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 _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 _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 _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 _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 _object_spread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};var ownKeys=Object.keys(source);if(typeof Object.getOwnPropertySymbols==="function"){ownKeys=ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym){return Object.getOwnPropertyDescriptor(source,sym).enumerable}))}ownKeys.forEach(function(key){_define_property(target,key,source[key])})}return target}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly){symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})}keys.push.apply(keys,symbols)}return keys}function _object_spread_props(target,source){source=source!=null?source:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}return target}function _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 _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}function _type_of(obj){"@swc/helpers - typeof";return obj&&typeof Symbol!=="undefined"&&obj.constructor===Symbol?"symbol":typeof obj}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 _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 Template__entity=/*#__PURE__*/function(Template){"use strict";_inherits(Template__entity,Template);function Template__entity(){_class_call_check(this,Template__entity);return _call_super(this,Template__entity,["entity"])}_create_class(Template__entity,[{key:"getTargetAndPath",value:function getTargetAndPath(names,parentNames){var dir=_api.Sonamu.config.api.dir;return{target:"".concat(dir,"/src/application"),path:"".concat((parentNames!==null&&parentNames!==void 0?parentNames:names).fs,"/").concat(names.fs,".entity.json")}}},{key:"render",value:function render(options){var _options_props;var entityId=options.entityId,title=options.title,parentId=options.parentId,table=options.table;var names=_entitymanager.EntityManager.getNamesFromId(entityId);var parent=function(){if(parentId){return{names:_entitymanager.EntityManager.getNamesFromId(parentId),entity:_entitymanager.EntityManager.get(parentId)}}else{return null}}();var _parent_names,_options_indexes,_options_subsets,_options_enums;var _obj;return _object_spread_props(_object_spread({},this.getTargetAndPath(names,(_parent_names=parent===null||parent===void 0?void 0:parent.names)!==null&&_parent_names!==void 0?_parent_names:names)),{body:JSON.stringify({id:entityId,title:title!==null&&title!==void 0?title:entityId,parentId:parentId,table:table!==null&&table!==void 0?table:names.fsPlural.replace(/\-/g,"_"),props:((_options_props=options.props)===null||_options_props===void 0?void 0:_options_props.length)?options.props:[{name:"id",type:"integer",unsigned:true,desc:"ID"}].concat(_to_consumable_array(parent?[{type:"relation",name:parent.names.camel,relationType:"BelongsToOne",with:parentId,onUpdate:"CASCADE",onDelete:"CASCADE",desc:parent.entity.title}]:[]),[{name:"created_at",type:"timestamp",desc:"등록일시",dbDefault:"CURRENT_TIMESTAMP"}]),indexes:_to_consumable_array((_options_indexes=options.indexes)!==null&&_options_indexes!==void 0?_options_indexes:[]),subsets:(_options_subsets=options.subsets)!==null&&_options_subsets!==void 0?_options_subsets:_object_spread({},parentId?{}:{A:["id","created_at"]}),enums:(_options_enums=options.enums)!==null&&_options_enums!==void 0?_options_enums:_object_spread({},parentId?{}:(_obj={},_define_property(_obj,"".concat(names.capital,"OrderBy"),{"id-desc":"ID최신순"}),_define_property(_obj,"".concat(names.capital,"SearchField"),{id:"ID"}),_obj))}).trim(),importKeys:[]})}}]);return Template__entity}(_basetemplate.Template);
2
+ //# sourceMappingURL=entity.template.js.map