sonamu 0.4.14 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/.swcrc +15 -0
  2. package/dist/api/base-frame.d.ts +8 -0
  3. package/dist/api/base-frame.d.ts.map +1 -0
  4. package/dist/api/base-frame.js +2 -0
  5. package/dist/api/base-frame.js.map +1 -0
  6. package/dist/api/caster.d.ts +5 -0
  7. package/dist/api/caster.d.ts.map +1 -0
  8. package/dist/api/caster.js +2 -0
  9. package/dist/api/caster.js.map +1 -0
  10. package/dist/api/code-converters.d.ts +23 -0
  11. package/dist/api/code-converters.d.ts.map +1 -0
  12. package/dist/api/code-converters.js +2 -0
  13. package/dist/api/code-converters.js.map +1 -0
  14. package/dist/api/context.d.ts +16 -0
  15. package/dist/api/context.d.ts.map +1 -0
  16. package/dist/api/context.js +2 -0
  17. package/dist/api/context.js.map +1 -0
  18. package/dist/api/decorators.d.ts +50 -0
  19. package/dist/api/decorators.d.ts.map +1 -0
  20. package/dist/api/decorators.js +2 -0
  21. package/dist/api/decorators.js.map +1 -0
  22. package/dist/api/index.d.ts +8 -0
  23. package/dist/api/index.d.ts.map +1 -0
  24. package/dist/api/index.js +2 -0
  25. package/dist/api/index.js.map +1 -0
  26. package/dist/api/sonamu.d.ts +83 -0
  27. package/dist/api/sonamu.d.ts.map +1 -0
  28. package/dist/api/sonamu.js +2 -0
  29. package/dist/api/sonamu.js.map +1 -0
  30. package/dist/api/sonamu.types.d.ts +30 -0
  31. package/dist/api/sonamu.types.d.ts.map +1 -0
  32. package/dist/api/sonamu.types.js +2 -0
  33. package/dist/api/sonamu.types.js.map +1 -0
  34. package/dist/bin/build-config.d.ts +5 -0
  35. package/dist/bin/build-config.d.ts.map +1 -0
  36. package/dist/bin/build-config.js +2 -0
  37. package/dist/bin/build-config.js.map +1 -0
  38. package/dist/bin/cli-wrapper.d.ts +2 -0
  39. package/dist/bin/cli-wrapper.d.ts.map +1 -0
  40. package/dist/bin/cli-wrapper.js +1 -38
  41. package/dist/bin/cli-wrapper.js.map +1 -1
  42. package/dist/bin/cli.d.ts +2 -2
  43. package/dist/bin/cli.d.ts.map +1 -0
  44. package/dist/bin/cli.js +1 -903
  45. package/dist/bin/cli.js.map +1 -1
  46. package/dist/database/_batch_update.d.ts +15 -0
  47. package/dist/database/_batch_update.d.ts.map +1 -0
  48. package/dist/database/_batch_update.js +2 -0
  49. package/dist/database/_batch_update.js.map +1 -0
  50. package/dist/database/base-model.d.ts +41 -0
  51. package/dist/database/base-model.d.ts.map +1 -0
  52. package/dist/database/base-model.js +2 -0
  53. package/dist/database/base-model.js.map +1 -0
  54. package/dist/database/code-generator.d.ts +13 -0
  55. package/dist/database/code-generator.d.ts.map +1 -0
  56. package/dist/database/code-generator.js +2 -0
  57. package/dist/database/code-generator.js.map +1 -0
  58. package/dist/database/db.d.ts +40 -0
  59. package/dist/database/db.d.ts.map +1 -0
  60. package/dist/database/db.js +2 -0
  61. package/dist/database/db.js.map +1 -0
  62. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +2 -0
  63. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +1 -0
  64. package/dist/database/knex-plugins/knex-on-duplicate-update.js +2 -0
  65. package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +1 -0
  66. package/dist/database/puri-wrapper.d.ts +34 -0
  67. package/dist/database/puri-wrapper.d.ts.map +1 -0
  68. package/dist/database/puri-wrapper.js +2 -0
  69. package/dist/database/puri-wrapper.js.map +1 -0
  70. package/dist/database/puri.d.ts +83 -0
  71. package/dist/database/puri.d.ts.map +1 -0
  72. package/dist/database/puri.js +2 -0
  73. package/dist/database/puri.js.map +1 -0
  74. package/dist/database/puri.types.d.ts +60 -0
  75. package/dist/database/puri.types.d.ts.map +1 -0
  76. package/dist/database/puri.types.js +2 -0
  77. package/dist/database/puri.types.js.map +1 -0
  78. package/dist/database/transaction-context.d.ts +9 -0
  79. package/dist/database/transaction-context.d.ts.map +1 -0
  80. package/dist/database/transaction-context.js +2 -0
  81. package/dist/database/transaction-context.js.map +1 -0
  82. package/dist/database/types.d.ts +39 -0
  83. package/dist/database/types.d.ts.map +1 -0
  84. package/dist/database/types.js +2 -0
  85. package/dist/database/types.js.map +1 -0
  86. package/dist/database/upsert-builder.d.ts +34 -0
  87. package/dist/database/upsert-builder.d.ts.map +1 -0
  88. package/dist/database/upsert-builder.js +2 -0
  89. package/dist/database/upsert-builder.js.map +1 -0
  90. package/dist/entity/entity-manager.d.ts +32 -0
  91. package/dist/entity/entity-manager.d.ts.map +1 -0
  92. package/dist/entity/entity-manager.js +2 -0
  93. package/dist/entity/entity-manager.js.map +1 -0
  94. package/dist/entity/entity-utils.d.ts +61 -0
  95. package/dist/entity/entity-utils.d.ts.map +1 -0
  96. package/dist/entity/entity-utils.js +2 -0
  97. package/dist/entity/entity-utils.js.map +1 -0
  98. package/dist/entity/entity.d.ts +62 -0
  99. package/dist/entity/entity.d.ts.map +1 -0
  100. package/dist/entity/entity.js +2 -0
  101. package/dist/entity/entity.js.map +1 -0
  102. package/dist/entity/migrator.d.ts +135 -0
  103. package/dist/entity/migrator.d.ts.map +1 -0
  104. package/dist/entity/migrator.js +2 -0
  105. package/dist/entity/migrator.js.map +1 -0
  106. package/dist/exceptions/error-handler.d.ts +3 -0
  107. package/dist/exceptions/error-handler.d.ts.map +1 -0
  108. package/dist/exceptions/error-handler.js +2 -0
  109. package/dist/exceptions/error-handler.js.map +1 -0
  110. package/dist/exceptions/so-exceptions.d.ts +48 -0
  111. package/dist/exceptions/so-exceptions.d.ts.map +1 -0
  112. package/dist/exceptions/so-exceptions.js +2 -0
  113. package/dist/exceptions/so-exceptions.js.map +1 -0
  114. package/dist/file-storage/driver.d.ts +45 -0
  115. package/dist/file-storage/driver.d.ts.map +1 -0
  116. package/dist/file-storage/driver.js +2 -0
  117. package/dist/file-storage/driver.js.map +1 -0
  118. package/dist/file-storage/file-storage.d.ts +50 -0
  119. package/dist/file-storage/file-storage.d.ts.map +1 -0
  120. package/dist/file-storage/file-storage.js +2 -0
  121. package/dist/file-storage/file-storage.js.map +1 -0
  122. package/dist/index.d.ts +22 -813
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +1 -433
  125. package/dist/index.js.map +1 -1
  126. package/dist/migration/code-generation.d.ts +15 -0
  127. package/dist/migration/code-generation.d.ts.map +1 -0
  128. package/dist/migration/code-generation.js +2 -0
  129. package/dist/migration/code-generation.js.map +1 -0
  130. package/dist/migration/migration-set.d.ts +17 -0
  131. package/dist/migration/migration-set.d.ts.map +1 -0
  132. package/dist/migration/migration-set.js +2 -0
  133. package/dist/migration/migration-set.js.map +1 -0
  134. package/dist/migration/migrator.d.ts +130 -0
  135. package/dist/migration/migrator.d.ts.map +1 -0
  136. package/dist/migration/migrator.js +2 -0
  137. package/dist/migration/migrator.js.map +1 -0
  138. package/dist/migration/types.d.ts +52 -0
  139. package/dist/migration/types.d.ts.map +1 -0
  140. package/dist/migration/types.js +2 -0
  141. package/dist/migration/types.js.map +1 -0
  142. package/dist/smd/smd-manager.d.ts +28 -0
  143. package/dist/smd/smd-manager.d.ts.map +1 -0
  144. package/dist/smd/smd-manager.js +2 -0
  145. package/dist/smd/smd-manager.js.map +1 -0
  146. package/dist/smd/smd.d.ts +40 -0
  147. package/dist/smd/smd.d.ts.map +1 -0
  148. package/dist/smd/smd.js +2 -0
  149. package/dist/smd/smd.js.map +1 -0
  150. package/dist/syncer/index.d.ts +2 -0
  151. package/dist/syncer/index.d.ts.map +1 -0
  152. package/dist/syncer/index.js +2 -0
  153. package/dist/syncer/index.js.map +1 -0
  154. package/dist/syncer/syncer.d.ts +127 -0
  155. package/dist/syncer/syncer.d.ts.map +1 -0
  156. package/dist/syncer/syncer.js +2 -0
  157. package/dist/syncer/syncer.js.map +1 -0
  158. package/dist/templates/base-template.d.ts +13 -0
  159. package/dist/templates/base-template.d.ts.map +1 -0
  160. package/dist/templates/base-template.js +2 -0
  161. package/dist/templates/base-template.js.map +1 -0
  162. package/dist/templates/entity.template.d.ts +17 -0
  163. package/dist/templates/entity.template.d.ts.map +1 -0
  164. package/dist/templates/entity.template.js +2 -0
  165. package/dist/templates/entity.template.js.map +1 -0
  166. package/dist/templates/generated.template.d.ts +27 -0
  167. package/dist/templates/generated.template.d.ts.map +1 -0
  168. package/dist/templates/generated.template.js +2 -0
  169. package/dist/templates/generated.template.js.map +1 -0
  170. package/dist/templates/generated_http.template.d.ts +24 -0
  171. package/dist/templates/generated_http.template.d.ts.map +1 -0
  172. package/dist/templates/generated_http.template.js +2 -0
  173. package/dist/templates/generated_http.template.js.map +1 -0
  174. package/dist/templates/generated_sso.template.d.ts +20 -0
  175. package/dist/templates/generated_sso.template.d.ts.map +1 -0
  176. package/dist/templates/generated_sso.template.js +2 -0
  177. package/dist/templates/generated_sso.template.js.map +1 -0
  178. package/dist/templates/index.d.ts +2 -0
  179. package/dist/templates/index.d.ts.map +1 -0
  180. package/dist/templates/index.js +2 -0
  181. package/dist/templates/index.js.map +1 -0
  182. package/dist/templates/init_types.template.d.ts +17 -0
  183. package/dist/templates/init_types.template.d.ts.map +1 -0
  184. package/dist/templates/init_types.template.js +2 -0
  185. package/dist/templates/init_types.template.js.map +1 -0
  186. package/dist/templates/model.template.d.ts +17 -0
  187. package/dist/templates/model.template.d.ts.map +1 -0
  188. package/dist/templates/model.template.js +2 -0
  189. package/dist/templates/model.template.js.map +1 -0
  190. package/dist/templates/model_test.template.d.ts +17 -0
  191. package/dist/templates/model_test.template.d.ts.map +1 -0
  192. package/dist/templates/model_test.template.js +2 -0
  193. package/dist/templates/model_test.template.js.map +1 -0
  194. package/dist/templates/service.template.d.ts +29 -0
  195. package/dist/templates/service.template.d.ts.map +1 -0
  196. package/dist/templates/service.template.js +2 -0
  197. package/dist/templates/service.template.js.map +1 -0
  198. package/dist/templates/view_enums_buttonset.template.d.ts +17 -0
  199. package/dist/templates/view_enums_buttonset.template.d.ts.map +1 -0
  200. package/dist/templates/view_enums_buttonset.template.js +2 -0
  201. package/dist/templates/view_enums_buttonset.template.js.map +1 -0
  202. package/dist/templates/view_enums_dropdown.template.d.ts +18 -0
  203. package/dist/templates/view_enums_dropdown.template.d.ts.map +1 -0
  204. package/dist/templates/view_enums_dropdown.template.js +2 -0
  205. package/dist/templates/view_enums_dropdown.template.js.map +1 -0
  206. package/dist/templates/view_enums_select.template.d.ts +17 -0
  207. package/dist/templates/view_enums_select.template.d.ts.map +1 -0
  208. package/dist/templates/view_enums_select.template.js +2 -0
  209. package/dist/templates/view_enums_select.template.js.map +1 -0
  210. package/dist/templates/view_form.template.d.ts +26 -0
  211. package/dist/templates/view_form.template.d.ts.map +1 -0
  212. package/dist/templates/view_form.template.js +2 -0
  213. package/dist/templates/view_form.template.js.map +1 -0
  214. package/dist/templates/view_id_all_select.template.d.ts +17 -0
  215. package/dist/templates/view_id_all_select.template.d.ts.map +1 -0
  216. package/dist/templates/view_id_all_select.template.js +2 -0
  217. package/dist/templates/view_id_all_select.template.js.map +1 -0
  218. package/dist/templates/view_id_async_select.template.d.ts +17 -0
  219. package/dist/templates/view_id_async_select.template.d.ts.map +1 -0
  220. package/dist/templates/view_id_async_select.template.js +2 -0
  221. package/dist/templates/view_id_async_select.template.js.map +1 -0
  222. package/dist/templates/view_list.template.d.ts +38 -0
  223. package/dist/templates/view_list.template.d.ts.map +1 -0
  224. package/dist/templates/view_list.template.js +2 -0
  225. package/dist/templates/view_list.template.js.map +1 -0
  226. package/dist/templates/view_list_columns.template.d.ts +17 -0
  227. package/dist/templates/view_list_columns.template.d.ts.map +1 -0
  228. package/dist/templates/view_list_columns.template.js +2 -0
  229. package/dist/templates/view_list_columns.template.js.map +1 -0
  230. package/dist/templates/view_search_input.template.d.ts +17 -0
  231. package/dist/templates/view_search_input.template.d.ts.map +1 -0
  232. package/dist/templates/view_search_input.template.js +2 -0
  233. package/dist/templates/view_search_input.template.js.map +1 -0
  234. package/dist/testing/_relation-graph.d.ts +7 -0
  235. package/dist/testing/_relation-graph.d.ts.map +1 -0
  236. package/dist/testing/_relation-graph.js +2 -0
  237. package/dist/testing/_relation-graph.js.map +1 -0
  238. package/dist/testing/fixture-manager.d.ts +35 -0
  239. package/dist/testing/fixture-manager.d.ts.map +1 -0
  240. package/dist/testing/fixture-manager.js +2 -0
  241. package/dist/testing/fixture-manager.js.map +1 -0
  242. package/dist/types/types.d.ts +609 -0
  243. package/dist/types/types.d.ts.map +1 -0
  244. package/dist/types/types.js +2 -0
  245. package/dist/types/types.js.map +1 -0
  246. package/dist/typings/knex.d.js +2 -0
  247. package/dist/typings/knex.d.js.map +1 -0
  248. package/dist/utils/async-utils.d.ts +25 -0
  249. package/dist/utils/async-utils.d.ts.map +1 -0
  250. package/dist/utils/async-utils.js +2 -0
  251. package/dist/utils/async-utils.js.map +1 -0
  252. package/dist/utils/controller.d.ts +9 -0
  253. package/dist/utils/controller.d.ts.map +1 -0
  254. package/dist/utils/controller.js +2 -0
  255. package/dist/utils/controller.js.map +1 -0
  256. package/dist/utils/fs-utils.d.ts +9 -0
  257. package/dist/utils/fs-utils.d.ts.map +1 -0
  258. package/dist/utils/fs-utils.js +2 -0
  259. package/dist/utils/fs-utils.js.map +1 -0
  260. package/dist/utils/lodash-able.d.ts +2 -0
  261. package/dist/utils/lodash-able.d.ts.map +1 -0
  262. package/dist/utils/lodash-able.js +2 -0
  263. package/dist/utils/lodash-able.js.map +1 -0
  264. package/dist/utils/model.d.ts +17 -0
  265. package/dist/utils/model.d.ts.map +1 -0
  266. package/dist/utils/model.js +2 -0
  267. package/dist/utils/model.js.map +1 -0
  268. package/dist/utils/sql-parser.d.ts +4 -0
  269. package/dist/utils/sql-parser.d.ts.map +1 -0
  270. package/dist/utils/sql-parser.js +2 -0
  271. package/dist/utils/sql-parser.js.map +1 -0
  272. package/dist/utils/utils.d.ts +9 -0
  273. package/dist/utils/utils.d.ts.map +1 -0
  274. package/dist/utils/utils.js +2 -0
  275. package/dist/utils/utils.js.map +1 -0
  276. package/dist/utils/zod-error.d.ts +8 -0
  277. package/dist/utils/zod-error.d.ts.map +1 -0
  278. package/dist/utils/zod-error.js +2 -0
  279. package/dist/utils/zod-error.js.map +1 -0
  280. package/nodemon.json +6 -0
  281. package/package.json +29 -44
  282. package/src/api/base-frame.ts +3 -4
  283. package/src/api/caster.ts +22 -23
  284. package/src/api/code-converters.ts +170 -134
  285. package/src/api/context.ts +13 -6
  286. package/src/api/decorators.ts +146 -20
  287. package/src/api/index.ts +2 -0
  288. package/src/api/sonamu.ts +374 -165
  289. package/src/bin/build-config.ts +5 -0
  290. package/src/bin/cli-wrapper.ts +29 -40
  291. package/src/bin/cli.ts +132 -190
  292. package/src/database/_batch_update.ts +10 -15
  293. package/src/database/base-model.ts +300 -216
  294. package/src/database/db.ts +191 -21
  295. package/src/database/{drivers/knex/plugins → knex-plugins}/knex-on-duplicate-update.ts +1 -1
  296. package/src/database/puri-wrapper.ts +129 -0
  297. package/src/database/puri.ts +808 -0
  298. package/src/database/puri.types.ts +222 -0
  299. package/src/database/transaction-context.ts +18 -0
  300. package/src/database/upsert-builder.ts +32 -35
  301. package/src/entity/entity-manager.ts +7 -15
  302. package/src/entity/entity.ts +9 -31
  303. package/src/entity/migrator-/354/235/264/354/202/254/352/260/224/354/226/264/354/232/224.md +1 -0
  304. package/src/file-storage/driver.ts +121 -0
  305. package/src/file-storage/file-storage.ts +100 -0
  306. package/src/index.ts +14 -11
  307. package/src/migration/code-generation.ts +777 -0
  308. package/src/migration/migration-set.ts +453 -0
  309. package/src/migration/migrator.ts +823 -0
  310. package/src/migration/types.ts +53 -0
  311. package/src/shared/web.shared.ts.txt +33 -2
  312. package/src/syncer/syncer.ts +294 -127
  313. package/src/templates/generated.template.ts +13 -1
  314. package/src/templates/generated_http.template.ts +15 -12
  315. package/src/templates/generated_sso.template.ts +50 -2
  316. package/src/templates/model.template.ts +138 -2
  317. package/src/templates/service.template.ts +0 -1
  318. package/src/templates/view_form.template.ts +11 -7
  319. package/src/templates/view_list.template.ts +12 -4
  320. package/src/testing/fixture-manager.ts +229 -174
  321. package/src/types/types.ts +102 -14
  322. package/src/utils/async-utils.ts +64 -0
  323. package/src/utils/fs-utils.ts +17 -0
  324. package/src/utils/model.ts +0 -2
  325. package/src/utils/utils.ts +14 -58
  326. package/src/utils/zod-error.ts +12 -176
  327. package/tsconfig.json +2 -0
  328. package/tsup.config.js +4 -2
  329. package/.pnp.cjs +0 -14363
  330. package/.pnp.loader.mjs +0 -2047
  331. package/.vscode/extensions.json +0 -6
  332. package/.vscode/settings.json +0 -9
  333. package/.yarnrc.yml +0 -5
  334. package/src/database/base-model.abstract.ts +0 -97
  335. package/src/database/db.abstract.ts +0 -75
  336. package/src/database/drivers/knex/base-model.ts +0 -55
  337. package/src/database/drivers/knex/client.ts +0 -209
  338. package/src/database/drivers/knex/db.ts +0 -232
  339. package/src/database/drivers/knex/generator.ts +0 -659
  340. package/src/database/drivers/kysely/base-model.ts +0 -89
  341. package/src/database/drivers/kysely/client.ts +0 -309
  342. package/src/database/drivers/kysely/db.ts +0 -238
  343. package/src/database/drivers/kysely/generator.ts +0 -714
  344. package/src/database/types.ts +0 -118
  345. package/src/entity/migrator.ts +0 -1400
  346. package/src/smd/smd-manager.ts +0 -139
  347. package/src/smd/smd.ts +0 -571
  348. package/src/templates/kysely_types.template.ts +0 -205
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/templates/view_form.template.ts"],"sourcesContent":["import inflection from \"inflection\";\nimport { z } from \"zod\";\nimport { RenderingNode, TemplateKey, TemplateOptions } from \"../types/types\";\nimport { EntityManager, EntityNamesRecord } from \"../entity/entity-manager\";\nimport { RenderedTemplate } from \"../syncer/syncer\";\nimport { Template } from \"./base-template\";\nimport {\n getEnumInfoFromColName,\n getRelationPropFromColName,\n} from \"./view_list.template\";\nimport _ from \"lodash\";\n\nexport class Template__view_form extends Template {\n constructor() {\n super(\"view_form\");\n }\n\n getTargetAndPath(names: EntityNamesRecord) {\n return {\n target: \"web/src/pages/admin\",\n path: `${names.fsPlural}/form.tsx`,\n };\n }\n\n wrapFC(body: string, label?: string): string {\n return [\n `<Form.Field>${label ? `\\n <label>${label}</label>` : \"\"}`,\n body,\n `</Form.Field>`,\n ].join(\"\\n\");\n }\n wrapFG(body: string, label?: string): string {\n return [\n `<Form.Group widths=\"equal\">`,\n this.wrapFC(body, label),\n `</Form.Group>`,\n ].join(\"\\n\");\n }\n\n renderColumnImport(entityId: string, col: RenderingNode) {\n if (col.renderType === \"enums\") {\n const { id, targetEntityNames } = getEnumInfoFromColName(\n entityId,\n col.name\n );\n const componentId = `${id}Select`;\n return `import { ${componentId} } from \"src/components/${targetEntityNames.fs}/${componentId}\";`;\n } else if (col.renderType === \"number-fk_id\") {\n try {\n const relProp = getRelationPropFromColName(\n entityId,\n col.name.replace(\"_id\", \"\")\n );\n const targetNames = EntityManager.getNamesFromId(relProp.with);\n const componentId = `${relProp.with}IdAsyncSelect`;\n return `import { ${componentId} } from \"src/components/${targetNames.fs}/${componentId}\";`;\n } catch {\n return \"\";\n }\n } else {\n throw new Error(`렌더 불가능한 임포트 ${col.name} ${col.renderType}`);\n }\n }\n\n renderColumn(\n entityId: string,\n col: RenderingNode,\n names: EntityNamesRecord,\n parent: string = \"\"\n ): string {\n let regExpr: string = \"\";\n regExpr = `{...register(\\`${parent}${col.name}\\`)}`;\n\n switch (col.renderType) {\n case \"string-plain\":\n if (\n col.zodType instanceof z.ZodString &&\n (col.zodType.maxLength ?? 0) <= 512\n ) {\n return `<Input placeholder=\"${col.label}\" ${regExpr} />`;\n } else {\n return `<TextArea rows={8} placeholder=\"${col.label}\" ${regExpr} />`;\n }\n case \"datetime\":\n return `<Input type=\"datetime-local\" ${regExpr} />`;\n case \"string-datetime\":\n return `<SQLDateTimeInput ${regExpr} />`;\n case \"string-date\":\n return `<SQLDateInput ${regExpr} />`;\n case \"number-id\":\n return `<input type=\"hidden\" ${regExpr} />`;\n case \"number-plain\":\n return `<NumberInput placeholder=\"${col.label}\" ${regExpr} />`;\n case \"boolean\":\n return `<BooleanToggle ${regExpr} />`;\n case \"string-image\":\n return `<ImageUploader multiple={false} ${regExpr} />`;\n case \"array-images\":\n return `<ImageUploader multiple={true} ${regExpr} maxSize={5} />`;\n case \"enums\":\n try {\n let enumId: string;\n if (col.name === \"orderBy\") {\n enumId = `${names.capital}${inflection.camelize(col.name)}Select`;\n } else {\n const { id } = getEnumInfoFromColName(entityId, col.name);\n enumId = `${id}Select`;\n }\n return `<${enumId} ${regExpr} ${\n col.optional || col.nullable ? \"clearable\" : \"\"\n } textPrefix=\"\" />`;\n } catch {\n return `<>찾을 수 없는 Enum ${col.name}</>`;\n }\n case \"number-fk_id\":\n try {\n const relProp = getRelationPropFromColName(\n entityId,\n col.name.replace(\"_id\", \"\")\n );\n const fkId = `${relProp.with}IdAsyncSelect`;\n return `<${fkId} {...register('${col.name}')} ${\n col.optional || col.nullable ? \"clearable\" : \"\"\n } subset=\"A\" />`;\n } catch {\n return `<Input ${regExpr} />`;\n }\n case \"array\":\n return `<>${col.name} array</>`;\n case \"object\":\n return `<>${col.name} object</>`;\n default:\n throw new Error(\n `대응 불가능한 렌더 타입 ${col.renderType} on ${col.name}`\n );\n }\n }\n\n resolveDefaultValue(columns: RenderingNode[]): object {\n return columns.reduce(\n (result, col) => {\n if (col.optional) {\n return result;\n }\n\n let value: unknown;\n if (col.nullable === true) {\n value = null;\n } else if (col.zodType instanceof z.ZodNumber) {\n value = 0;\n } else if (col.zodType instanceof z.ZodEnum) {\n value = Object.keys(col.zodType.options)[0];\n } else if (col.zodType instanceof z.ZodBoolean) {\n value = false;\n } else if (col.zodType instanceof z.ZodDate) {\n value = new Date();\n } else if (col.zodType instanceof z.ZodString) {\n if (col.renderType === \"string-datetime\") {\n value = \"now()\";\n } else {\n value = \"\";\n }\n } else if (col.zodType instanceof z.ZodArray) {\n value = [];\n } else if (col.zodType instanceof z.ZodObject) {\n value = {};\n }\n\n result[col.name] = value;\n return result;\n },\n {} as { [key: string]: unknown }\n );\n }\n\n render(\n { entityId }: TemplateOptions[\"view_form\"],\n saveParamsNode: RenderingNode\n ) {\n const entity = EntityManager.get(entityId);\n const names = EntityManager.getNamesFromId(entityId);\n const columns = (saveParamsNode.children as RenderingNode[])\n .filter((col) => col.name !== \"id\")\n .map((col) => {\n const propCandidate = entity.props.find(\n (prop) => prop.name === col.name\n );\n col.label = propCandidate?.desc ?? col.label;\n return col;\n });\n\n const defaultValue = this.resolveDefaultValue(columns);\n\n // 프리 템플릿\n const preTemplates: RenderedTemplate[\"preTemplates\"] = (\n columns as RenderingNode[]\n )\n .filter((col) => {\n if (col.name === \"id\") {\n return false;\n } else if (col.name.endsWith(\"_id\") || col.renderType === \"number-id\") {\n try {\n getRelationPropFromColName(entityId, col.name.replace(\"_id\", \"\"));\n return true;\n } catch {\n return false;\n }\n } else if (col.renderType === \"enums\") {\n try {\n getEnumInfoFromColName(entityId, col.name);\n return true;\n } catch {\n return false;\n }\n }\n return false;\n })\n .map((col) => {\n let key: TemplateKey;\n let targetMdId = entityId;\n let enumId: string | undefined;\n if (col.renderType === \"enums\") {\n key = \"view_enums_select\";\n const { targetEntityNames: targetMDNames, id } =\n getEnumInfoFromColName(entityId, col.name);\n targetMdId = targetMDNames.capital;\n enumId = id;\n } else {\n key = \"view_id_async_select\";\n const relProp = getRelationPropFromColName(\n entityId,\n col.name.replace(\"_id\", \"\")\n );\n targetMdId = relProp.with;\n }\n\n return {\n key: key as TemplateKey,\n options: {\n entityId: targetMdId,\n node: col,\n enumId,\n },\n };\n })\n .filter((preTemplate) => {\n if (preTemplate.key === \"view_id_async_select\") {\n try {\n EntityManager.get(preTemplate.options.entityId);\n return true;\n } catch {\n return false;\n }\n }\n return true;\n });\n\n return {\n ...this.getTargetAndPath(names),\n body: `\nimport React, { useEffect, useState, Dispatch, SetStateAction, forwardRef, Ref, useImperativeHandle, useCallback } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport {\n Button,\n Checkbox,\n Form,\n Header,\n Input,\n Segment,\n TextArea,\n Label,\n} from 'semantic-ui-react';\nimport { DateTime } from \"luxon\";\n\nimport { BackLink, LinkInput, NumberInput, BooleanToggle, SQLDateTimeInput, SQLDateInput, useTypeForm, useGoBack, formatDateTime } from \"@sonamu-kit/react-sui\";\nimport { defaultCatch } from 'src/services/sonamu.shared';\n// import { ImageUploader } from 'src/admin-common/ImageUploader';\n// import { useCommonModal } from \"src/admin-common/CommonModal\";\n\nimport { ${names.capital}SaveParams } from 'src/services/${names.fs}/${\n names.fs\n }.types';\nimport { ${names.capital}Service } from 'src/services/${names.fs}/${\n names.fs\n }.service';\nimport { ${names.capital}SubsetA } from 'src/services/sonamu.generated';\n${_.uniq(\n columns\n .filter((col) => [\"number-fk_id\", \"enums\"].includes(col.renderType))\n .map((col) => {\n return this.renderColumnImport(entityId, col);\n })\n).join(\"\\n\")}\n\nexport default function ${names.capitalPlural}FormPage() {\n // 라우팅 searchParams\n const [searchParams] = useSearchParams();\n const query = {\n id: searchParams.get('id') ?? undefined,\n };\n\n return <${\n names.capitalPlural\n }Form id={query?.id ? Number(query.id) : undefined} />;\n}\ntype ${names.capitalPlural}FormProps = {\n id?: number;\n mode?: 'page' | 'modal';\n};\nexport function ${names.capitalPlural}Form({ id, mode }: ${\n names.capitalPlural\n }FormProps) {\n // 편집시 기존 row\n const [row, setRow] = useState<${names.capital}SubsetA | undefined>();\n\n // ${names.capital}SaveParams 폼\n const { form, setForm, register } = useTypeForm(${\n names.capital\n }SaveParams, ${JSON.stringify(defaultValue).replace(\n /\"now\\(\\)\"/g,\n \"DateTime.local().toSQL()!.slice(0, 19)\"\n )});\n\n // 수정일 때 기존 row 콜\n useEffect(() => {\n if (id) {\n ${names.capital}Service.get${names.capital}('A', id).then((row) => {\n setRow(row);\n setForm({\n ...row,\n ${columns\n .filter((col) => col.renderType === \"number-fk_id\")\n .map((col) => {\n if (col.nullable) {\n return `${col.name}: row.${col.name.replace(\n \"_id\",\n \"?.id\"\n )} ?? null`;\n } else {\n return `${col.name}: row.${col.name.replace(\"_id\", \".id\")}`;\n }\n })\n .join(\",\\n\")}\n });\n });\n }\n }, [id]);\n\n // CommonModal\n // const { doneModal, closeModal } = useCommonModal();\n\n // 저장\n const { goBack } = useGoBack();\n const handleSubmit = useCallback(() => {\n ${names.capital}Service.save([form]).then(([id]) => {\n if( mode === 'modal' ) {\n // doneModal();\n } else {\n goBack('/admin/${names.fsPlural}');\n }\n }).catch(defaultCatch);\n }, [ form, mode, id ]);\n\n // 페이지\n const PAGE = {\n title: \\`${\n entity.title ?? names.capital\n }\\${id ? \\`#\\${id} 수정\\` : ' 등록'}\\`,\n }\n\n return (\n <div className=\"form\">\n <Segment padded basic>\n <Segment padded color=\"grey\">\n <div className=\"header-row\">\n <Header>\n {PAGE.title}\n </Header>\n { mode !== 'modal' && <div className=\"buttons\">\n <BackLink primary size=\"tiny\" to=\"/admin/${\n names.fsPlural\n }\" content=\"목록\" icon=\"list\" />\n </div>}\n </div>\n <Form>\n ${columns\n .map((col) => {\n if (col.name === \"created_at\") {\n return `{form.id && (${this.wrapFG(\n `<div className=\"p-8px\">{formatDateTime(form.${col.name})}</div>`,\n \"등록일시\"\n )})}`;\n } else {\n return this.wrapFG(\n this.renderColumn(entityId, col, names),\n (() => {\n if (col.label.endsWith(\"Id\")) {\n try {\n const entity = EntityManager.get(\n col.label.replace(\"Id\", \"\")\n );\n return entity.title ?? col.label;\n } catch {\n return col.label;\n }\n }\n return col.label;\n })()\n );\n }\n })\n .join(\"\\n\")}\n <Segment basic textAlign=\"center\">\n <Button type=\"submit\" primary onClick={handleSubmit} content=\"저장\" icon=\"save\" />\n </Segment>\n </Form>\n </Segment>\n </Segment>\n </div>\n );\n};\n `.trim(),\n importKeys: [],\n preTemplates,\n };\n }\n}\n"],"names":["Template__view_form","getTargetAndPath","names","target","path","fsPlural","wrapFC","body","label","join","wrapFG","renderColumnImport","entityId","col","renderType","getEnumInfoFromColName","name","id","targetEntityNames","componentId","fs","relProp","getRelationPropFromColName","replace","targetNames","EntityManager","getNamesFromId","with","Error","renderColumn","parent","regExpr","zodType","z","ZodString","maxLength","enumId","inflection","capital","camelize","optional","nullable","fkId","resolveDefaultValue","columns","reduce","result","value","ZodNumber","ZodEnum","Object","keys","options","ZodBoolean","ZodDate","Date","ZodArray","ZodObject","render","saveParamsNode","entity","get","children","filter","map","propCandidate","props","find","prop","desc","defaultValue","preTemplates","endsWith","key","targetMdId","targetMDNames","node","preTemplate","_","uniq","includes","capitalPlural","JSON","stringify","title","trim","importKeys","Template"],"mappings":"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"}
@@ -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__view_id_all_select extends Template {
5
+ constructor();
6
+ getTargetAndPath(names: EntityNamesRecord): {
7
+ target: string;
8
+ path: string;
9
+ };
10
+ render({ entityId }: TemplateOptions["view_id_all_select"]): {
11
+ body: string;
12
+ importKeys: never[];
13
+ target: string;
14
+ path: string;
15
+ };
16
+ }
17
+ //# sourceMappingURL=view_id_all_select.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view_id_all_select.template.d.ts","sourceRoot":"","sources":["../../src/templates/view_id_all_select.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;AAE3C,qBAAa,4BAA6B,SAAQ,QAAQ;;IAKxD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,oBAAoB,CAAC;;;;;;CAiB3D"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Template__view_id_all_select",{enumerable:true,get:function(){return Template__view_id_all_select}});var _entitymanager=require("../entity/entity-manager");var _basetemplate=require("./base-template");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 _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 _type_of(obj){"@swc/helpers - typeof";return obj&&typeof Symbol!=="undefined"&&obj.constructor===Symbol?"symbol":typeof obj}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__view_id_all_select=/*#__PURE__*/function(Template){"use strict";_inherits(Template__view_id_all_select,Template);function Template__view_id_all_select(){_class_call_check(this,Template__view_id_all_select);return _call_super(this,Template__view_id_all_select,["view_id_all_select"])}_create_class(Template__view_id_all_select,[{key:"getTargetAndPath",value:function getTargetAndPath(names){return{target:"web/src/components",path:"".concat(names.fs,"/").concat(names.capital,"IdAllSelect.tsx")}}},{key:"render",value:function render(param){var entityId=param.entityId;var names=_entitymanager.EntityManager.getNamesFromId(entityId);return _object_spread_props(_object_spread({},this.getTargetAndPath(names)),{body:"\n/*\nview_id_all_select\n".concat(JSON.stringify({key:this.key,options:entityId}),"\n*/\n ").trim(),importKeys:[]})}}]);return Template__view_id_all_select}(_basetemplate.Template);
2
+ //# sourceMappingURL=view_id_all_select.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/templates/view_id_all_select.template.ts"],"sourcesContent":["import { TemplateOptions } from \"../types/types\";\nimport { EntityManager, EntityNamesRecord } from \"../entity/entity-manager\";\nimport { Template } from \"./base-template\";\n\nexport class Template__view_id_all_select extends Template {\n constructor() {\n super(\"view_id_all_select\");\n }\n\n getTargetAndPath(names: EntityNamesRecord) {\n return {\n target: \"web/src/components\",\n path: `${names.fs}/${names.capital}IdAllSelect.tsx`,\n };\n }\n\n render({ entityId }: TemplateOptions[\"view_id_all_select\"]) {\n const names = EntityManager.getNamesFromId(entityId);\n\n return {\n ...this.getTargetAndPath(names),\n body: `\n/*\nview_id_all_select\n${JSON.stringify({\n key: this.key,\n options: entityId,\n})}\n*/\n `.trim(),\n importKeys: [],\n };\n }\n}\n"],"names":["Template__view_id_all_select","getTargetAndPath","names","target","path","fs","capital","render","entityId","EntityManager","getNamesFromId","body","JSON","stringify","key","options","trim","importKeys","Template"],"mappings":"oGAIaA,sEAAAA,2DAHoC,sDACxB,y7GAElB,IAAA,AAAMA,0CAAN,0CAAMA,gDAAAA,sDAAAA,8BAET,OAAA,iBAFSA,8BAEH,qCAFGA,+BAKXC,IAAAA,yBAAAA,SAAAA,iBAAiBC,KAAwB,EACvC,MAAO,CACLC,OAAQ,qBACRC,KAAM,AAAC,GAAcF,OAAZA,MAAMG,EAAE,CAAC,KAAiB,OAAdH,MAAMI,OAAO,CAAC,kBACrC,CACF,IAEAC,IAAAA,eAAAA,SAAAA,OAAO,KAAmD,MAAnD,AAAEC,SAAF,MAAEA,SACP,IAAMN,MAAQO,4BAAa,CAACC,cAAc,CAACF,UAE3C,OAAO,uCACF,IAAI,CAACP,gBAAgB,CAACC,SACzBS,KAAM,AAAC,6BAMV,OAHDC,KAAKC,SAAS,CAAC,CACfC,IAAK,IAAI,CAACA,GAAG,CACbC,QAASP,QACX,GAAG,gBAEKQ,IAAI,GACNC,WAAY,EAAE,EAElB,YA5BWjB,8BAAqCkB,sBAAQ"}
@@ -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__view_id_async_select extends Template {
5
+ constructor();
6
+ getTargetAndPath(names: EntityNamesRecord): {
7
+ target: string;
8
+ path: string;
9
+ };
10
+ render({ entityId, textField }: TemplateOptions["view_id_async_select"]): {
11
+ body: string;
12
+ importKeys: never[];
13
+ target: string;
14
+ path: string;
15
+ };
16
+ }
17
+ //# sourceMappingURL=view_id_async_select.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view_id_async_select.template.d.ts","sourceRoot":"","sources":["../../src/templates/view_id_async_select.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;AAE3C,qBAAa,8BAA+B,SAAQ,QAAQ;;IAK1D,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,eAAe,CAAC,sBAAsB,CAAC;;;;;;CAyGxE"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Template__view_id_async_select",{enumerable:true,get:function(){return Template__view_id_async_select}});var _entitymanager=require("../entity/entity-manager");var _basetemplate=require("./base-template");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 _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 _type_of(obj){"@swc/helpers - typeof";return obj&&typeof Symbol!=="undefined"&&obj.constructor===Symbol?"symbol":typeof obj}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__view_id_async_select=/*#__PURE__*/function(Template){"use strict";_inherits(Template__view_id_async_select,Template);function Template__view_id_async_select(){_class_call_check(this,Template__view_id_async_select);return _call_super(this,Template__view_id_async_select,["view_id_async_select"])}_create_class(Template__view_id_async_select,[{key:"getTargetAndPath",value:function getTargetAndPath(names){return{target:"web/src/components",path:"".concat(names.fs,"/").concat(names.capital,"IdAsyncSelect.tsx")}}},{key:"render",value:function render(param){var entityId=param.entityId,textField=param.textField;var names=_entitymanager.EntityManager.getNamesFromId(entityId);var entity=_entitymanager.EntityManager.get(entityId);if(!textField){var pickedProp=entity.props.find(function(prop){return["name","title"].includes(prop.name)});if(pickedProp){textField=pickedProp.name}else{var candidateProp=entity.props.find(function(prop){return prop.type==="string"});if(candidateProp){textField=candidateProp.name}else{console.log("textField 찾을 수 없음")}}}var _entity_title;return _object_spread_props(_object_spread({},this.getTargetAndPath(names)),{body:'\nimport React, { useState, useEffect, SyntheticEvent } from "react";\nimport { DropdownProps, DropdownItemProps, DropdownOnSearchChangeData, Dropdown } from "semantic-ui-react";\nimport { '.concat(names.capital,"SubsetKey, ").concat(names.capital,'SubsetMapping } from "src/services/sonamu.generated";\nimport { ').concat(names.capital,'Service } from "src/services/').concat(names.fs,"/").concat(names.fs,'.service";\nimport { ').concat(names.capital,'ListParams } from "src/services/').concat(names.fs,"/").concat(names.fs,'.types";\n\nexport function ').concat(names.capital,"IdAsyncSelect<T extends ").concat(names.capital,"SubsetKey>(\n { subset, baseListParams, textField, valueField, ...props }: DropdownProps & {\n subset: T;\n baseListParams?: ").concat(names.capital,"ListParams;\n textField").concat(textField?"?":"",": keyof ").concat(names.capital,"SubsetMapping[T];\n valueField?: keyof ").concat(names.capital,"SubsetMapping[T];\n },\n) {\n const [options, setOptions] = useState<DropdownItemProps[]>([]);\n const [listParams, setListParams] = useState<").concat(names.capital,"ListParams>(\n baseListParams ?? {},\n );\n\n const { data, error } = ").concat(names.capital,"Service.use").concat(names.capitalPlural,"(subset, listParams);\n const { rows: ").concat(names.camelPlural,", total } = data ?? {};\n\n useEffect(() => {\n setOptions(\n (").concat(names.camelPlural," ?? []).map((").concat(names.camel,") => {\n return {\n key: ").concat(names.camel,".id,\n value: ").concat(names.camel,"[valueField ?? 'id'] as string | number,\n text: String(").concat(names.camel,"[textField").concat(textField?" ?? '".concat(textField,"'"):"","]),\n };\n }),\n );\n }, [").concat(names.camelPlural,']);\n\n useEffect(() => {\n setListParams({\n ...listParams,\n ...baseListParams,\n });\n }, [baseListParams]);\n\n const handleSearchChange = (\n e: SyntheticEvent<HTMLElement, Event>,\n data: DropdownOnSearchChangeData,\n ) => {\n setListParams({\n ...listParams,\n keyword: data.searchQuery,\n });\n };\n\n return (\n <Dropdown\n placeholder="').concat((_entity_title=entity.title)!==null&&_entity_title!==void 0?_entity_title:names.constant,'"\n selection\n options={options}\n onSearchChange={handleSearchChange}\n disabled={!').concat(names.camelPlural,"}\n loading={!").concat(names.camelPlural,"}\n selectOnBlur={false}\n {...props}\n />\n );\n}\n ").trim(),importKeys:[]})}}]);return Template__view_id_async_select}(_basetemplate.Template);
2
+ //# sourceMappingURL=view_id_async_select.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/templates/view_id_async_select.template.ts"],"sourcesContent":["import { TemplateOptions } from \"../types/types\";\nimport { EntityManager, EntityNamesRecord } from \"../entity/entity-manager\";\nimport { Template } from \"./base-template\";\n\nexport class Template__view_id_async_select extends Template {\n constructor() {\n super(\"view_id_async_select\");\n }\n\n getTargetAndPath(names: EntityNamesRecord) {\n return {\n target: \"web/src/components\",\n path: `${names.fs}/${names.capital}IdAsyncSelect.tsx`,\n };\n }\n\n render({ entityId, textField }: TemplateOptions[\"view_id_async_select\"]) {\n const names = EntityManager.getNamesFromId(entityId);\n\n const entity = EntityManager.get(entityId);\n if (!textField) {\n const pickedProp = entity.props.find((prop) =>\n [\"name\", \"title\"].includes(prop.name)\n );\n if (pickedProp) {\n textField = pickedProp.name;\n } else {\n const candidateProp = entity.props.find(\n (prop) => prop.type === \"string\"\n );\n if (candidateProp) {\n textField = candidateProp.name;\n } else {\n console.log(\"textField 찾을 수 없음\");\n }\n }\n }\n\n return {\n ...this.getTargetAndPath(names),\n body: `\nimport React, { useState, useEffect, SyntheticEvent } from \"react\";\nimport { DropdownProps, DropdownItemProps, DropdownOnSearchChangeData, Dropdown } from \"semantic-ui-react\";\nimport { ${names.capital}SubsetKey, ${\n names.capital\n }SubsetMapping } from \"src/services/sonamu.generated\";\nimport { ${names.capital}Service } from \"src/services/${names.fs}/${\n names.fs\n }.service\";\nimport { ${names.capital}ListParams } from \"src/services/${names.fs}/${\n names.fs\n }.types\";\n\nexport function ${names.capital}IdAsyncSelect<T extends ${\n names.capital\n }SubsetKey>(\n { subset, baseListParams, textField, valueField, ...props }: DropdownProps & {\n subset: T;\n baseListParams?: ${names.capital}ListParams;\n textField${textField ? \"?\" : \"\"}: keyof ${names.capital}SubsetMapping[T];\n valueField?: keyof ${names.capital}SubsetMapping[T];\n },\n) {\n const [options, setOptions] = useState<DropdownItemProps[]>([]);\n const [listParams, setListParams] = useState<${names.capital}ListParams>(\n baseListParams ?? {},\n );\n\n const { data, error } = ${names.capital}Service.use${\n names.capitalPlural\n }(subset, listParams);\n const { rows: ${names.camelPlural}, total } = data ?? {};\n\n useEffect(() => {\n setOptions(\n (${names.camelPlural} ?? []).map((${names.camel}) => {\n return {\n key: ${names.camel}.id,\n value: ${names.camel}[valueField ?? 'id'] as string | number,\n text: String(${names.camel}[textField${\n textField ? ` ?? '${textField}'` : \"\"\n }]),\n };\n }),\n );\n }, [${names.camelPlural}]);\n\n useEffect(() => {\n setListParams({\n ...listParams,\n ...baseListParams,\n });\n }, [baseListParams]);\n\n const handleSearchChange = (\n e: SyntheticEvent<HTMLElement, Event>,\n data: DropdownOnSearchChangeData,\n ) => {\n setListParams({\n ...listParams,\n keyword: data.searchQuery,\n });\n };\n\n return (\n <Dropdown\n placeholder=\"${entity.title ?? names.constant}\"\n selection\n options={options}\n onSearchChange={handleSearchChange}\n disabled={!${names.camelPlural}}\n loading={!${names.camelPlural}}\n selectOnBlur={false}\n {...props}\n />\n );\n}\n `.trim(),\n importKeys: [],\n };\n }\n}\n"],"names":["Template__view_id_async_select","getTargetAndPath","names","target","path","fs","capital","render","entityId","textField","EntityManager","getNamesFromId","entity","get","pickedProp","props","find","prop","includes","name","candidateProp","type","console","log","body","capitalPlural","camelPlural","camel","title","constant","trim","importKeys","Template"],"mappings":"oGAIaA,wEAAAA,6DAHoC,sDACxB,y7GAElB,IAAA,AAAMA,4CAAN,0CAAMA,kDAAAA,wDAAAA,gCAET,OAAA,iBAFSA,gCAEH,uCAFGA,iCAKXC,IAAAA,yBAAAA,SAAAA,iBAAiBC,KAAwB,EACvC,MAAO,CACLC,OAAQ,qBACRC,KAAM,AAAC,GAAcF,OAAZA,MAAMG,EAAE,CAAC,KAAiB,OAAdH,MAAMI,OAAO,CAAC,oBACrC,CACF,IAEAC,IAAAA,eAAAA,SAAAA,OAAO,KAAgE,MAA9DC,SAAF,MAAEA,SAAUC,UAAZ,MAAYA,UACjB,IAAMP,MAAQQ,4BAAa,CAACC,cAAc,CAACH,UAE3C,IAAMI,OAASF,4BAAa,CAACG,GAAG,CAACL,UACjC,GAAI,CAACC,UAAW,CACd,IAAMK,WAAaF,OAAOG,KAAK,CAACC,IAAI,CAAC,SAACC,YACpC,CAAC,OAAQ,QAAQ,CAACC,QAAQ,CAACD,KAAKE,IAAI,IAEtC,GAAIL,WAAY,CACdL,UAAYK,WAAWK,IAAI,AAC7B,KAAO,CACL,IAAMC,cAAgBR,OAAOG,KAAK,CAACC,IAAI,CACrC,SAACC,aAASA,KAAKI,IAAI,GAAK,WAE1B,GAAID,cAAe,CACjBX,UAAYW,cAAcD,IAAI,AAChC,KAAO,CACLG,QAAQC,GAAG,CAAC,oBACd,CACF,CACF,KAsEiBX,cApEjB,OAAO,uCACF,IAAI,CAACX,gBAAgB,CAACC,SACzBsB,KAAM,AAAC,gMAILtB,OADGA,MAAMI,OAAO,CAAC,eAGdJ,OAFHA,MAAMI,OAAO,CACd,oEACiDJ,OAA7CA,MAAMI,OAAO,CAAC,iCACjBJ,OADgDA,MAAMG,EAAE,CAAC,KAGtDH,OAFHA,MAAMG,EAAE,CACT,yBACoDH,OAAhDA,MAAMI,OAAO,CAAC,oCACjBJ,OADmDA,MAAMG,EAAE,CAAC,KAIlDH,OAHVA,MAAMG,EAAE,CACT,gCAGCH,OADUA,MAAMI,OAAO,CAAC,4BAKTJ,OAJfA,MAAMI,OAAO,CACd,wIAIQG,OADQP,MAAMI,OAAO,CAAC,8BACSJ,OAA/BO,UAAY,IAAM,GAAG,YACXP,OADqBA,MAAMI,OAAO,CAAC,8CAKXJ,OAJxBA,MAAMI,OAAO,CAAC,qJAQXJ,OAJqBA,MAAMI,OAAO,CAAC,+EAK3DJ,OADwBA,MAAMI,OAAO,CAAC,eAGxBJ,OAFdA,MAAMuB,aAAa,CACpB,2CAKMvB,OAJSA,MAAMwB,WAAW,CAAC,4EAIMxB,OAAjCA,MAAMwB,WAAW,CAAC,iBAEVxB,OAFyBA,MAAMyB,KAAK,CAAC,6CAGnCzB,OADFA,MAAMyB,KAAK,CAAC,2BAEJzB,OADNA,MAAMyB,KAAK,CAAC,qEAEnBlB,OADaP,MAAMyB,KAAK,CAAC,cAM7BzB,OALIO,UAAY,AAAC,QAAiB,OAAVA,UAAU,KAAK,GACpC,8CAyBUG,OArBbV,MAAMwB,WAAW,CAAC,kZAyBPxB,OAJEU,CAAAA,cAAAA,OAAOgB,KAAK,UAAZhB,uBAAAA,cAAgBV,MAAM2B,QAAQ,CAAC,6GAKlC3B,OADCA,MAAMwB,WAAW,CAAC,uBACD,OAAlBxB,MAAMwB,WAAW,CAAC,4EAM5BI,IAAI,GACNC,WAAY,EAAE,EAElB,YApHW/B,gCAAuCgC,sBAAQ"}
@@ -0,0 +1,38 @@
1
+ import { RenderingNode, TemplateKey, TemplateOptions } from "../types/types";
2
+ import { EntityNamesRecord } from "../entity/entity-manager";
3
+ import { RelationProp } from "../types/types";
4
+ import { Template } from "./base-template";
5
+ export declare class Template__view_list extends Template {
6
+ constructor();
7
+ getTargetAndPath(names: EntityNamesRecord): {
8
+ target: string;
9
+ path: string;
10
+ };
11
+ wrapTc(body: string, key: string, collapsing?: boolean, className?: string): string;
12
+ renderColumn(entityId: string, col: RenderingNode, names: EntityNamesRecord, parentObj?: string, withoutName?: boolean): string;
13
+ renderColumnImport(entityId: string, col: RenderingNode, names: EntityNamesRecord): (string | null)[];
14
+ renderFilterImport(entityId: string, col: RenderingNode, names: EntityNamesRecord): string;
15
+ renderFilter(entityId: string, col: RenderingNode, names: EntityNamesRecord): string;
16
+ getDefault(columns: RenderingNode[]): {
17
+ orderBy: string;
18
+ search: string;
19
+ };
20
+ render({ entityId }: TemplateOptions["view_list"], columnsNode: RenderingNode, listParamsNode: RenderingNode): {
21
+ body: string;
22
+ importKeys: never[];
23
+ preTemplates: {
24
+ key: TemplateKey;
25
+ options: TemplateOptions[TemplateKey];
26
+ }[];
27
+ target: string;
28
+ path: string;
29
+ };
30
+ }
31
+ export declare function getEnumInfoFromColName(entityId: string, colName: string): {
32
+ id: string;
33
+ targetEntityNames: EntityNamesRecord;
34
+ targetEntityId: string;
35
+ title: string;
36
+ };
37
+ export declare function getRelationPropFromColName(entityId: string, colName: string): RelationProp;
38
+ //# sourceMappingURL=view_list.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view_list.template.d.ts","sourceRoot":"","sources":["../../src/templates/view_list.template.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAiB,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAA8B,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,UAAU,GAAE,OAAc,EAC1B,SAAS,GAAE,MAAW;IAOxB,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,EACxB,SAAS,GAAE,MAAc,EACzB,WAAW,GAAE,OAAe,GAC3B,MAAM;IAiET,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,GACvB,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAyBpB,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB;IAuC1B,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB;IAyC3E,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG;QACpC,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB;IAkBD,MAAM,CACJ,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC,EAC1C,WAAW,EAAE,aAAa,EAC1B,cAAc,EAAE,aAAa;;;;;;;;;;CAuUhC;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd;IACD,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf,CA0BA;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,YAAY,CAYd"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get Template__view_list(){return Template__view_list},get getEnumInfoFromColName(){return getEnumInfoFromColName},get getRelationPropFromColName(){return getRelationPropFromColName}});var _inflection=/*#__PURE__*/_interop_require_default(require("inflection"));var _lodash=/*#__PURE__*/_interop_require_default(require("lodash"));var _zod=require("zod");var _entitymanager=require("../entity/entity-manager");var _types=require("../types/types");var _basetemplate=require("./base-template");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 _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 _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 _type_of(obj){"@swc/helpers - typeof";return obj&&typeof Symbol!=="undefined"&&obj.constructor===Symbol?"symbol":typeof obj}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__view_list=/*#__PURE__*/function(Template){"use strict";_inherits(Template__view_list,Template);function Template__view_list(){_class_call_check(this,Template__view_list);return _call_super(this,Template__view_list,["view_list"])}_create_class(Template__view_list,[{key:"getTargetAndPath",value:function getTargetAndPath(names){return{target:"web/src/pages/admin",path:"".concat(names.fsPlural,"/index.tsx")}}},{key:"wrapTc",value:function wrapTc(body,key){var collapsing=arguments.length>2&&arguments[2]!==void 0?arguments[2]:true,className=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"";return'<Table.Cell key="'.concat(key,'"').concat(collapsing?" collapsing":"").concat(className?" className={`".concat(className,"`}"):"",">").concat(body,"</Table.Cell>")}},{key:"renderColumn",value:function renderColumn(entityId,col,names){var parentObj=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"row",withoutName=arguments.length>4&&arguments[4]!==void 0?arguments[4]:false;var colName=withoutName?"".concat(parentObj):"".concat(parentObj,".").concat(col.name);switch(col.renderType){case"string-plain":case"string-date":case"number-id":return"<>{".concat(colName,"}</>");case"number-fk_id":var relPropFk=getRelationPropFromColName(entityId,col.name.replace("_id",""));return"<>".concat(relPropFk.with,"#{").concat(colName,"}</>");case"string-image":return"<>{".concat(col.nullable?"".concat(colName," && "):"","<img src={").concat(colName,"} />}</>");case"datetime":if(col.nullable){return'<span className="text-tiny">{'.concat(colName," === null ? '-' : formatDateTime(").concat(colName,")}</span>")}else{return'<span className="text-tiny">{formatDateTime('.concat(colName,")}</span>")}case"string-datetime":if(col.nullable){return'<span className="text-tiny">{'.concat(colName," === null ? '-' : dateF(").concat(colName,")}</span>")}else{return'<span className="text-tiny">{dateF('.concat(colName,")}</span>")}case"boolean":return"<>{".concat(colName," ? <Label color='green' circular>O</Label> : <Label color='grey' circular>X</Label> }</>");case"enums":var _getEnumInfoFromColName=getEnumInfoFromColName(entityId,col.name),enumId=_getEnumInfoFromColName.id;return"<>{".concat(col.nullable?"".concat(colName," && "):"").concat(enumId,"Label[").concat(colName,"]}</>");case"array-images":return"<>{ ".concat(colName,".map(r => ").concat(col.nullable?"r && ":"","<img src={r} />) }</>");case"number-plain":return"<>{".concat(col.nullable?"".concat(colName," && "):"","numF(").concat(colName,")}</>");case"object":return"<>{/* object ".concat(colName," */}</>");case"object-pick":var pickedChild=col.children.find(function(child){var _col_config;return child.name===((_col_config=col.config)===null||_col_config===void 0?void 0:_col_config.picked)});if(!pickedChild){throw new Error("object-pick 선택 실패 (오브젝트: ".concat(col.name,")"))}return this.renderColumn(entityId,pickedChild,names,"".concat(colName).concat(col.nullable?"?":""));case"array":return"<>{ /* array ".concat(colName," */ }</>");default:throw new Error("렌더 불가 컬럼 ".concat(col.renderType))}}},{key:"renderColumnImport",value:function renderColumnImport(entityId,col,names){var _this=this;if(col.renderType==="enums"){var _getEnumInfoFromColName=getEnumInfoFromColName(names.capital,col.name),enumId=_getEnumInfoFromColName.id;return["import { ".concat(enumId,"Label } from 'src/services/sonamu.generated';")]}else if(col.renderType==="object"){try{var relProp=getRelationPropFromColName(entityId,col.name);var result=col.children.map(function(child){entityId=relProp.with;names=_entitymanager.EntityManager.getNamesFromId(relProp.with);return _this.renderColumnImport(entityId,child,names)});return _lodash.default.flattenDeep(result)}catch(e){return[null]}}else if(col.renderType==="array"){return this.renderColumnImport(entityId,col.element,names)}return[null]}},{key:"renderFilterImport",value:function renderFilterImport(entityId,col,names){if(col.name==="search"){return"import { ".concat(names.capital,'SearchInput } from "src/components/').concat(names.fs,"/").concat(names.capital,'SearchInput";')}else if(col.renderType==="enums"){if(col.name==="orderBy"){var componentId="".concat(names.capital).concat(_inflection.default.camelize(col.name),"Select");return"import { ".concat(componentId,' } from "src/components/').concat(names.fs,"/").concat(componentId,'";')}else{try{var _getEnumInfoFromColName=getEnumInfoFromColName(entityId,col.name),id=_getEnumInfoFromColName.id,targetMDNames=_getEnumInfoFromColName.targetEntityNames;var componentId1="".concat(id,"Select");return"import { ".concat(componentId1,' } from "src/components/').concat(targetMDNames.fs,"/").concat(componentId1,'";')}catch(e){return""}}}else if(col.renderType==="number-fk_id"){try{var relProp=getRelationPropFromColName(entityId,col.name.replace("_id",""));var targetNames=_entitymanager.EntityManager.getNamesFromId(relProp.with);var componentId2="".concat(relProp.with,"IdAsyncSelect");return"import { ".concat(componentId2,' } from "src/components/').concat(targetNames.fs,"/").concat(componentId2,'";')}catch(e){return""}}else{throw new Error("렌더 불가능한 필터 임포트 ".concat(col.name," ").concat(col.renderType))}}},{key:"renderFilter",value:function renderFilter(entityId,col,names){if(col.name==="search"){return""}var isClearable=col.optional===true&&col.name!=="orderBy";var componentId;if(col.renderType==="enums"){if(col.name==="orderBy"){componentId="".concat(names.capital).concat(_inflection.default.camelize(col.name),"Select")}else{try{var id=getEnumInfoFromColName(entityId,col.name).id;componentId="".concat(id,"Select")}catch(e){return""}}return"<".concat(componentId," {...register('").concat(col.name,"')} ").concat(isClearable?"clearable":""," />")}else if(col.renderType==="number-fk_id"){try{var relProp=getRelationPropFromColName(entityId,col.name.replace("_id",""));componentId="".concat(relProp.with,"IdAsyncSelect");return"<".concat(componentId," {...register('").concat(col.name,"')} ").concat(isClearable?"clearable":"",' subset="A" />')}catch(e){return""}}else{throw new Error("렌더 불가능한 필터 임포트 ".concat(col.name," ").concat(col.renderType))}}},{key:"getDefault",value:function getDefault(columns){var _columns_find,_columns_find1;var def={orderBy:"id-desc",search:"title"};var orderByZodType=(_columns_find=columns.find(function(col){return col.name==="orderBy"}))===null||_columns_find===void 0?void 0:_columns_find.zodType;if(orderByZodType&&_instanceof(orderByZodType,_zod.z.ZodEnum)){def.orderBy=orderByZodType.options[0].toString()}var searchZodType=(_columns_find1=columns.find(function(col){return col.name==="search"}))===null||_columns_find1===void 0?void 0:_columns_find1.zodType;if(searchZodType&&_instanceof(searchZodType,_zod.z.ZodEnum)){def.search=searchZodType.options[0].toString()}return def}},{key:"render",value:function render(param,columnsNode,listParamsNode){var _this=this;var entityId=param.entityId;var names=_entitymanager.EntityManager.getNamesFromId(entityId);var entity=_entitymanager.EntityManager.get(entityId);var columns=columnsNode.children.filter(function(col){return col.name!=="id"}).map(function(col){var propCandidate=entity.props.find(function(p){return p.name===col.name});var _propCandidate_desc;return{name:col.name,label:(_propCandidate_desc=propCandidate===null||propCandidate===void 0?void 0:propCandidate.desc)!==null&&_propCandidate_desc!==void 0?_propCandidate_desc:col.label,tc:"(row) => ".concat(_this.renderColumn(entityId,col,names))}});var filterColumns=listParamsNode.children.filter(function(col){return col.name!=="id"&&col.name!=="queryMode"&&(["enums","number-id"].includes(col.renderType)||col.name.endsWith("_id"))}).sort(function(a){return a.name=="orderBy"?1:-1});var preTemplates=[];var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=filterColumns[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var col=_step.value;var key=void 0;var targetEntityId=entityId;var enumId=void 0;if(col.renderType==="enums"){if(col.name==="search"){key="view_enums_dropdown";enumId="".concat(names.capital,"SearchField");targetEntityId=names.capital}else{key="view_enums_select";try{var _getEnumInfoFromColName=getEnumInfoFromColName(entityId,col.name),targetEntityNames=_getEnumInfoFromColName.targetEntityNames,id=_getEnumInfoFromColName.id;targetEntityId=targetEntityNames.capital;enumId=id}catch(e){continue}}}else{key="view_id_async_select";try{var relProp=getRelationPropFromColName(entityId,col.name.replace("_id",""));targetEntityId=relProp.with}catch(e){continue}}preTemplates.push({key:key,options:{entityId:targetEntityId,enumId:enumId}})}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}var columnImports=_lodash.default.uniq(columnsNode.children.map(function(col){return _this.renderColumnImport(entityId,col,names)}).flat().filter(function(col){return col!==null})).join("\n");preTemplates.push({key:"view_search_input",options:{entityId:entityId}});var def=this.getDefault(filterColumns);var _entity_title;return _object_spread_props(_object_spread({},this.getTargetAndPath(names)),{body:"\nimport React from 'react';\nimport { Link } from 'react-router-dom';\nimport {\n Breadcrumb,\n Checkbox,\n Pagination,\n Segment,\n Table,\n TableRow,\n Message,\n Transition,\n Button,\n Label,\n} from 'semantic-ui-react';\nimport classNames from 'classnames';\nimport { DateTime } from \"luxon\";\nimport { DelButton, EditButton, AppBreadcrumbs, AddButton, useSelection, useListParams, SonamuCol, numF, formatDate, formatDateTime } from '@sonamu-kit/react-sui';\n\nimport { ".concat(names.capital,'SubsetA } from "src/services/sonamu.generated";\nimport { ').concat(names.capital,"Service } from 'src/services/").concat(names.fs,"/").concat(names.fs,".service';\nimport { ").concat(names.capital,"ListParams } from 'src/services/").concat(names.fs,"/").concat(names.fs,".types';\n").concat(columnImports,"\n").concat(filterColumns.map(function(col){return _this.renderFilterImport(entityId,col,names)}).join("\n"),"\n\ntype ").concat(names.capital,"ListProps = {};\nexport default function ").concat(names.capital,"List({}: ").concat(names.capital,"ListProps) {\n // 리스트 필터\n const { listParams, register } = useListParams(").concat(names.capital,"ListParams, {\n num: 12,\n page: 1,\n orderBy: '").concat(def.orderBy,"',\n search: '").concat(def.search,"',\n });\n\n // 리스트 쿼리\n const { data, mutate, error, isLoading } = ").concat(names.capital,"Service.use").concat(names.capitalPlural,"('A', listParams);\n const { rows, total } = data ?? {};\n\n // 삭제\n const confirmDel = (ids: number[]) => {\n const answer = confirm('삭제하시겠습니까?');\n if (!answer) {\n return;\n }\n\n ").concat(names.capital,"Service.del(ids).then(() => {\n mutate();\n });\n };\n\n // 일괄 삭제\n const confirmDelSelected = () => {\n const answer = confirm(`${selectedKeys.length}건을 일괄 삭제하시겠습니까?`);\n if (!answer) {\n return;\n }\n\n ").concat(names.capital,"Service.del(selectedKeys).then(() => {\n mutate();\n });\n };\n\n // 현재 경로와 타이틀\n const PAGE = {\n route: '/admin/").concat(names.fsPlural,"',\n title: '").concat((_entity_title=entity.title)!==null&&_entity_title!==void 0?_entity_title:names.capital,"',\n };\n\n // 선택\n const {\n getSelected,\n isAllSelected,\n selectedKeys,\n toggle,\n selectAll,\n deselectAll,\n handleCheckboxClick,\n } = useSelection((rows ?? []).map((row) => row.id));\n\n // 컬럼\n const columns:SonamuCol<").concat(names.capital,"SubsetA>[] = [").concat(columns.map(function(col){return['{ label: "'.concat(col.label,'",'),"tc: ".concat(col.tc,", "),"collapsing: ".concat(["Title","Name"].includes(col.label)===false,", }")].join("\n")}).join(",\n"),'];\n\n return (\n <div className="list ').concat(names.fsPlural,'-index">\n <div className="top-nav">\n <div className="header-row">\n <div className="header">{PAGE.title}</div>\n <AppBreadcrumbs>\n <Breadcrumb.Section active>{PAGE.title}</Breadcrumb.Section>\n </AppBreadcrumbs>\n <').concat(names.capital,"SearchInput\n input={register('keyword')}\n dropdown={register('search')}\n />\n </div>\n <div className=\"filters-row\">\n ").concat(filterColumns.map(function(col){return _this.renderFilter(entityId,col,names)}).join("&nbsp;\n"),'\n </div>\n </div>\n\n <Segment basic padded className="contents-segment" loading={isLoading}>\n <div className="buttons-row">\n <div className={classNames(\'count\', { hidden: isLoading })}>\n {total} 건\n </div>\n <div className="buttons">\n <AddButton currentRoute={PAGE.route} icon="write" label="추가" />\n </div>\n </div>\n\n <Table\n celled\n compact\n selectable\n className={classNames({ hidden: total === undefined || total === 0 })}\n >\n <Table.Header>\n <TableRow>\n <Table.HeaderCell collapsing>\n <Checkbox\n label="ID"\n checked={isAllSelected}\n onChange={isAllSelected ? deselectAll : selectAll}\n />\n </Table.HeaderCell>\n {\n /* Header */\n columns.map((col, index) => col.th ?? <Table.HeaderCell key={index} collapsing={col.collapsing}>{ col.label }</Table.HeaderCell>)\n }\n <Table.HeaderCell>관리</Table.HeaderCell>\n </TableRow>\n </Table.Header>\n <Table.Body>\n {rows &&\n rows.map((row, rowIndex) => (\n <Table.Row key={row.id}>\n <Table.Cell>\n <Checkbox\n label={row.id}\n checked={getSelected(row.id)}\n onChange={() => toggle(row.id)}\n onClick={(e) =>\n handleCheckboxClick(e, rowIndex)\n }\n />\n </Table.Cell>\n {\n /* Body */\n columns.map((col, colIndex) => (\n <Table.Cell key={colIndex} collapsing={col.collapsing} className={col.className}>\n {col.tc(row, rowIndex)}\n </Table.Cell>\n ))\n }\n <Table.Cell collapsing>\n <EditButton\n as={Link}\n to={`${PAGE.route}/form?id=${row.id}`}\n state={{ from: PAGE.route }}\n />\n <DelButton onClick={() => confirmDel([row.id])} />\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n <div\n className={classNames(\'pagination-row\', {\n hidden: (total ?? 0) === 0,\n })}\n >\n <Pagination\n totalPages={Math.ceil((total ?? 0) / (listParams.num ?? 24))}\n {...register(\'page\')}\n />\n </div>\n </Segment>\n\n <div className="fixed-menu">\n <Transition\n visible={selectedKeys.length > 0}\n animation="slide left"\n duration={500}\n >\n <Message size="small" color="violet" className="text-center">\n <span className="px-4">{selectedKeys.length}개 선택됨</span>\n <Button size="tiny" color="violet" onClick={() => deselectAll()}>\n 선택 해제\n </Button>\n <Button size="tiny" color="red" onClick={confirmDelSelected}>\n 일괄 삭제\n </Button>\n </Message>\n </Transition>\n </div>\n </div>\n );\n}\n ').trim(),importKeys:[],preTemplates:preTemplates})}}]);return Template__view_list}(_basetemplate.Template);function getEnumInfoFromColName(entityId,colName){var baseEntity=_entitymanager.EntityManager.get(entityId);var prop=baseEntity.props.find(function(p){return p.name===colName});if(prop&&(0,_types.isEnumProp)(prop)){var _prop_desc;return{id:prop.id,targetEntityId:entityId,targetEntityNames:_entitymanager.EntityManager.getNamesFromId(entityId),title:(_prop_desc=prop.desc)!==null&&_prop_desc!==void 0?_prop_desc:prop.id}}else{var idCandidate=_inflection.default.camelize(_inflection.default.underscore(entityId)+"_"+_inflection.default.underscore(colName),false);try{var targetEntityNames=_entitymanager.EntityManager.getNamesFromId(entityId);return{id:idCandidate,targetEntityId:entityId,targetEntityNames:targetEntityNames,title:idCandidate}}catch(e){}throw new Error("찾을 수 없는 EnumProp ".concat(colName))}}function getRelationPropFromColName(entityId,colName){var baseEntity=_entitymanager.EntityManager.get(entityId);var relProp=baseEntity.props.find(function(prop){return prop.name===colName});if((0,_types.isRelationProp)(relProp)){var relEntity=_entitymanager.EntityManager.get(relProp.with);if(relEntity.parentId!==undefined){throw new Error("Only parent entities can be used as relation props")}return relProp}else{throw new Error("찾을 수 없는 Relation ".concat(colName))}}
2
+ //# sourceMappingURL=view_list.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/templates/view_list.template.ts"],"sourcesContent":["import inflection from \"inflection\";\nimport _ from \"lodash\";\nimport { z } from \"zod\";\nimport { RenderingNode, TemplateKey, TemplateOptions } from \"../types/types\";\nimport { EntityManager, EntityNamesRecord } from \"../entity/entity-manager\";\nimport { isEnumProp, isRelationProp, RelationProp } from \"../types/types\";\nimport { RenderedTemplate } from \"../syncer/syncer\";\nimport { Template } from \"./base-template\";\n\nexport class Template__view_list extends Template {\n constructor() {\n super(\"view_list\");\n }\n\n getTargetAndPath(names: EntityNamesRecord) {\n return {\n target: \"web/src/pages/admin\",\n path: `${names.fsPlural}/index.tsx`,\n };\n }\n\n wrapTc(\n body: string,\n key: string,\n collapsing: boolean = true,\n className: string = \"\"\n ) {\n return `<Table.Cell key=\"${key}\"${collapsing ? \" collapsing\" : \"\"}${\n className ? ` className={\\`${className}\\`}` : \"\"\n }>${body}</Table.Cell>`;\n }\n\n renderColumn(\n entityId: string,\n col: RenderingNode,\n names: EntityNamesRecord,\n parentObj: string = \"row\",\n withoutName: boolean = false\n ): string {\n const colName = withoutName ? `${parentObj}` : `${parentObj}.${col.name}`;\n\n switch (col.renderType) {\n case \"string-plain\":\n case \"string-date\":\n case \"number-id\":\n return `<>{${colName}}</>`;\n case \"number-fk_id\":\n const relPropFk = getRelationPropFromColName(\n entityId,\n col.name.replace(\"_id\", \"\")\n );\n return `<>${relPropFk.with}#{${colName}}</>`;\n case \"string-image\":\n return `<>{${\n col.nullable ? `${colName} && ` : \"\"\n }<img src={${colName}} />}</>`;\n case \"datetime\":\n if (col.nullable) {\n return `<span className=\"text-tiny\">{${colName} === null ? '-' : formatDateTime(${colName})}</span>`;\n } else {\n return `<span className=\"text-tiny\">{formatDateTime(${colName})}</span>`;\n }\n case \"string-datetime\":\n if (col.nullable) {\n return `<span className=\"text-tiny\">{${colName} === null ? '-' : dateF(${colName})}</span>`;\n } else {\n return `<span className=\"text-tiny\">{dateF(${colName})}</span>`;\n }\n case \"boolean\":\n return `<>{${colName} ? <Label color='green' circular>O</Label> : <Label color='grey' circular>X</Label> }</>`;\n case \"enums\":\n const { id: enumId } = getEnumInfoFromColName(entityId, col.name);\n return `<>{${\n col.nullable ? `${colName} && ` : \"\"\n }${enumId}Label[${colName}]}</>`;\n case \"array-images\":\n return `<>{ ${colName}.map(r => ${\n col.nullable ? `r && ` : \"\"\n }<img src={r} />) }</>`;\n case \"number-plain\":\n return `<>{${col.nullable ? `${colName} && ` : \"\"}numF(${colName})}</>`;\n case \"object\":\n return `<>{/* object ${colName} */}</>`;\n case \"object-pick\":\n const pickedChild = col.children!.find(\n (child) => child.name === col.config?.picked\n );\n if (!pickedChild) {\n throw new Error(`object-pick 선택 실패 (오브젝트: ${col.name})`);\n }\n return this.renderColumn(\n entityId,\n pickedChild,\n names,\n `${colName}${col.nullable ? \"?\" : \"\"}`\n );\n case \"array\":\n return `<>{ /* array ${colName} */ }</>`;\n default:\n throw new Error(`렌더 불가 컬럼 ${col.renderType}`);\n }\n }\n\n renderColumnImport(\n entityId: string,\n col: RenderingNode,\n names: EntityNamesRecord\n ): (string | null)[] {\n if (col.renderType === \"enums\") {\n const { id: enumId } = getEnumInfoFromColName(names.capital, col.name);\n return [\n `import { ${enumId}Label } from 'src/services/sonamu.generated';`,\n ];\n } else if (col.renderType === \"object\") {\n try {\n const relProp = getRelationPropFromColName(entityId, col.name);\n const result = col.children!.map((child) => {\n entityId = relProp.with;\n names = EntityManager.getNamesFromId(relProp.with);\n return this.renderColumnImport(entityId, child, names);\n });\n return _.flattenDeep(result);\n } catch {\n return [null];\n }\n } else if (col.renderType === \"array\") {\n return this.renderColumnImport(entityId, col.element!, names);\n }\n\n return [null];\n }\n\n renderFilterImport(\n entityId: string,\n col: RenderingNode,\n names: EntityNamesRecord\n ) {\n if (col.name === \"search\") {\n return `import { ${names.capital}SearchInput } from \"src/components/${names.fs}/${names.capital}SearchInput\";`;\n } else if (col.renderType === \"enums\") {\n if (col.name === \"orderBy\") {\n const componentId = `${names.capital}${inflection.camelize(\n col.name\n )}Select`;\n return `import { ${componentId} } from \"src/components/${names.fs}/${componentId}\";`;\n } else {\n try {\n const { id, targetEntityNames: targetMDNames } =\n getEnumInfoFromColName(entityId, col.name);\n const componentId = `${id}Select`;\n return `import { ${componentId} } from \"src/components/${targetMDNames.fs}/${componentId}\";`;\n } catch {\n return \"\";\n }\n }\n } else if (col.renderType === \"number-fk_id\") {\n try {\n const relProp = getRelationPropFromColName(\n entityId,\n col.name.replace(\"_id\", \"\")\n );\n const targetNames = EntityManager.getNamesFromId(relProp.with);\n const componentId = `${relProp.with}IdAsyncSelect`;\n return `import { ${componentId} } from \"src/components/${targetNames.fs}/${componentId}\";`;\n } catch {\n return \"\";\n }\n } else {\n throw new Error(\n `렌더 불가능한 필터 임포트 ${col.name} ${col.renderType}`\n );\n }\n }\n\n renderFilter(entityId: string, col: RenderingNode, names: EntityNamesRecord) {\n if (col.name === \"search\") {\n return \"\";\n }\n\n const isClearable = col.optional === true && col.name !== \"orderBy\";\n let componentId: string;\n if (col.renderType === \"enums\") {\n if (col.name === \"orderBy\") {\n componentId = `${names.capital}${inflection.camelize(col.name)}Select`;\n } else {\n try {\n const { id } = getEnumInfoFromColName(entityId, col.name);\n componentId = `${id}Select`;\n } catch {\n return \"\";\n }\n }\n return `<${componentId} {...register('${col.name}')} ${\n isClearable ? \"clearable\" : \"\"\n } />`;\n } else if (col.renderType === \"number-fk_id\") {\n try {\n const relProp = getRelationPropFromColName(\n entityId,\n col.name.replace(\"_id\", \"\")\n );\n componentId = `${relProp.with}IdAsyncSelect`;\n return `<${componentId} {...register('${col.name}')} ${\n isClearable ? \"clearable\" : \"\"\n } subset=\"A\" />`;\n } catch {\n return \"\";\n }\n } else {\n throw new Error(\n `렌더 불가능한 필터 임포트 ${col.name} ${col.renderType}`\n );\n }\n }\n\n getDefault(columns: RenderingNode[]): {\n orderBy: string;\n search: string;\n } {\n const def = {\n orderBy: \"id-desc\",\n search: \"title\",\n };\n const orderByZodType = columns.find(\n (col) => col.name === \"orderBy\"\n )?.zodType;\n if (orderByZodType && orderByZodType instanceof z.ZodEnum) {\n def.orderBy = orderByZodType.options[0].toString();\n }\n const searchZodType = columns.find((col) => col.name === \"search\")?.zodType;\n if (searchZodType && searchZodType instanceof z.ZodEnum) {\n def.search = searchZodType.options[0].toString();\n }\n return def;\n }\n\n render(\n { entityId }: TemplateOptions[\"view_list\"],\n columnsNode: RenderingNode,\n listParamsNode: RenderingNode\n ) {\n const names = EntityManager.getNamesFromId(entityId);\n const entity = EntityManager.get(entityId);\n\n // 실제 리스트 컬럼\n const columns = (columnsNode.children as RenderingNode[])\n .filter((col) => col.name !== \"id\")\n .map((col) => {\n const propCandidate = entity.props.find((p) => p.name === col.name);\n return {\n name: col.name,\n label: propCandidate?.desc ?? col.label,\n tc: `(row) => ${this.renderColumn(entityId, col, names)}`,\n };\n });\n\n // 필터 컬럼\n const filterColumns = (listParamsNode.children as RenderingNode[])\n .filter(\n (col) =>\n col.name !== \"id\" &&\n col.name !== \"queryMode\" &&\n ([\"enums\", \"number-id\"].includes(col.renderType) ||\n col.name.endsWith(\"_id\"))\n )\n // orderBy가 가장 뒤로 오게 순서 조정\n .sort((a) => {\n return a.name == \"orderBy\" ? 1 : -1;\n });\n\n // 필터 컬럼을 프리 템플릿으로 설정\n const preTemplates: RenderedTemplate[\"preTemplates\"] = [];\n for (let col of filterColumns) {\n let key: TemplateKey;\n let targetEntityId = entityId;\n let enumId: string | undefined;\n\n if (col.renderType === \"enums\") {\n if (col.name === \"search\") {\n key = \"view_enums_dropdown\";\n enumId = `${names.capital}SearchField`;\n targetEntityId = names.capital;\n } else {\n key = \"view_enums_select\";\n try {\n const { targetEntityNames, id } = getEnumInfoFromColName(\n entityId,\n col.name\n );\n targetEntityId = targetEntityNames.capital;\n enumId = id;\n } catch {\n continue;\n }\n }\n } else {\n key = \"view_id_async_select\";\n try {\n const relProp = getRelationPropFromColName(\n entityId,\n col.name.replace(\"_id\", \"\")\n );\n targetEntityId = relProp.with;\n } catch {\n continue;\n }\n }\n\n preTemplates.push({\n key,\n options: {\n entityId: targetEntityId,\n enumId,\n },\n });\n }\n\n // 리스트 컬럼\n const columnImports = _.uniq(\n columnsNode\n .children!.map((col) => {\n return this.renderColumnImport(entityId, col, names);\n })\n .flat()\n .filter((col) => col !== null)\n ).join(\"\\n\");\n\n // SearchInput\n preTemplates!.push({\n key: \"view_search_input\",\n options: {\n entityId,\n },\n });\n\n // 디폴트 파라미터\n const def = this.getDefault(filterColumns);\n\n return {\n ...this.getTargetAndPath(names),\n body: `\nimport React from 'react';\nimport { Link } from 'react-router-dom';\nimport {\n Breadcrumb,\n Checkbox,\n Pagination,\n Segment,\n Table,\n TableRow,\n Message,\n Transition,\n Button,\n Label,\n} from 'semantic-ui-react';\nimport classNames from 'classnames';\nimport { DateTime } from \"luxon\";\nimport { DelButton, EditButton, AppBreadcrumbs, AddButton, useSelection, useListParams, SonamuCol, numF, formatDate, formatDateTime } from '@sonamu-kit/react-sui';\n\nimport { ${names.capital}SubsetA } from \"src/services/sonamu.generated\";\nimport { ${names.capital}Service } from 'src/services/${names.fs}/${\n names.fs\n }.service';\nimport { ${names.capital}ListParams } from 'src/services/${names.fs}/${\n names.fs\n }.types';\n${columnImports}\n${filterColumns\n .map((col) => {\n return this.renderFilterImport(entityId, col, names);\n })\n .join(\"\\n\")}\n\ntype ${names.capital}ListProps = {};\nexport default function ${names.capital}List({}: ${names.capital}ListProps) {\n // 리스트 필터\n const { listParams, register } = useListParams(${names.capital}ListParams, {\n num: 12,\n page: 1,\n orderBy: '${def.orderBy}',\n search: '${def.search}',\n });\n\n // 리스트 쿼리\n const { data, mutate, error, isLoading } = ${names.capital}Service.use${\n names.capitalPlural\n }('A', listParams);\n const { rows, total } = data ?? {};\n\n // 삭제\n const confirmDel = (ids: number[]) => {\n const answer = confirm('삭제하시겠습니까?');\n if (!answer) {\n return;\n }\n\n ${names.capital}Service.del(ids).then(() => {\n mutate();\n });\n };\n\n // 일괄 삭제\n const confirmDelSelected = () => {\n const answer = confirm(\\`\\${selectedKeys.length}건을 일괄 삭제하시겠습니까?\\`);\n if (!answer) {\n return;\n }\n\n ${names.capital}Service.del(selectedKeys).then(() => {\n mutate();\n });\n };\n\n // 현재 경로와 타이틀\n const PAGE = {\n route: '/admin/${names.fsPlural}',\n title: '${entity.title ?? names.capital}',\n };\n\n // 선택\n const {\n getSelected,\n isAllSelected,\n selectedKeys,\n toggle,\n selectAll,\n deselectAll,\n handleCheckboxClick,\n } = useSelection((rows ?? []).map((row) => row.id));\n\n // 컬럼\n const columns:SonamuCol<${names.capital}SubsetA>[] = [${columns\n .map((col) => {\n return [\n `{ label: \"${col.label}\",`,\n `tc: ${col.tc}, `,\n `collapsing: ${[\"Title\", \"Name\"].includes(col.label) === false}, }`,\n ].join(\"\\n\");\n })\n .join(\",\\n\")}];\n\n return (\n <div className=\"list ${names.fsPlural}-index\">\n <div className=\"top-nav\">\n <div className=\"header-row\">\n <div className=\"header\">{PAGE.title}</div>\n <AppBreadcrumbs>\n <Breadcrumb.Section active>{PAGE.title}</Breadcrumb.Section>\n </AppBreadcrumbs>\n <${names.capital}SearchInput\n input={register('keyword')}\n dropdown={register('search')}\n />\n </div>\n <div className=\"filters-row\">\n ${filterColumns\n .map((col) => {\n return this.renderFilter(entityId, col, names);\n })\n .join(\"&nbsp;\\n\")}\n </div>\n </div>\n\n <Segment basic padded className=\"contents-segment\" loading={isLoading}>\n <div className=\"buttons-row\">\n <div className={classNames('count', { hidden: isLoading })}>\n {total} 건\n </div>\n <div className=\"buttons\">\n <AddButton currentRoute={PAGE.route} icon=\"write\" label=\"추가\" />\n </div>\n </div>\n\n <Table\n celled\n compact\n selectable\n className={classNames({ hidden: total === undefined || total === 0 })}\n >\n <Table.Header>\n <TableRow>\n <Table.HeaderCell collapsing>\n <Checkbox\n label=\"ID\"\n checked={isAllSelected}\n onChange={isAllSelected ? deselectAll : selectAll}\n />\n </Table.HeaderCell>\n {\n /* Header */\n columns.map((col, index) => col.th ?? <Table.HeaderCell key={index} collapsing={col.collapsing}>{ col.label }</Table.HeaderCell>)\n }\n <Table.HeaderCell>관리</Table.HeaderCell>\n </TableRow>\n </Table.Header>\n <Table.Body>\n {rows &&\n rows.map((row, rowIndex) => (\n <Table.Row key={row.id}>\n <Table.Cell>\n <Checkbox\n label={row.id}\n checked={getSelected(row.id)}\n onChange={() => toggle(row.id)}\n onClick={(e) =>\n handleCheckboxClick(e, rowIndex)\n }\n />\n </Table.Cell>\n {\n /* Body */\n columns.map((col, colIndex) => (\n <Table.Cell key={colIndex} collapsing={col.collapsing} className={col.className}>\n {col.tc(row, rowIndex)}\n </Table.Cell>\n ))\n }\n <Table.Cell collapsing>\n <EditButton\n as={Link}\n to={\\`\\${PAGE.route}/form?id=\\${row.id}\\`}\n state={{ from: PAGE.route }}\n />\n <DelButton onClick={() => confirmDel([row.id])} />\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table>\n <div\n className={classNames('pagination-row', {\n hidden: (total ?? 0) === 0,\n })}\n >\n <Pagination\n totalPages={Math.ceil((total ?? 0) / (listParams.num ?? 24))}\n {...register('page')}\n />\n </div>\n </Segment>\n\n <div className=\"fixed-menu\">\n <Transition\n visible={selectedKeys.length > 0}\n animation=\"slide left\"\n duration={500}\n >\n <Message size=\"small\" color=\"violet\" className=\"text-center\">\n <span className=\"px-4\">{selectedKeys.length}개 선택됨</span>\n <Button size=\"tiny\" color=\"violet\" onClick={() => deselectAll()}>\n 선택 해제\n </Button>\n <Button size=\"tiny\" color=\"red\" onClick={confirmDelSelected}>\n 일괄 삭제\n </Button>\n </Message>\n </Transition>\n </div>\n </div>\n );\n}\n `.trim(),\n importKeys: [],\n preTemplates,\n };\n }\n}\n\nexport function getEnumInfoFromColName(\n entityId: string,\n colName: string\n): {\n id: string;\n targetEntityNames: EntityNamesRecord;\n targetEntityId: string;\n title: string;\n} {\n const baseEntity = EntityManager.get(entityId);\n const prop = baseEntity.props.find((p) => p.name === colName);\n if (prop && isEnumProp(prop)) {\n return {\n id: prop.id,\n targetEntityId: entityId,\n targetEntityNames: EntityManager.getNamesFromId(entityId),\n title: prop.desc ?? prop.id,\n };\n } else {\n const idCandidate = inflection.camelize(\n inflection.underscore(entityId) + \"_\" + inflection.underscore(colName),\n false\n );\n try {\n const targetEntityNames = EntityManager.getNamesFromId(entityId);\n return {\n id: idCandidate,\n targetEntityId: entityId,\n targetEntityNames: targetEntityNames,\n title: idCandidate,\n };\n } catch {}\n throw new Error(`찾을 수 없는 EnumProp ${colName}`);\n }\n}\n\nexport function getRelationPropFromColName(\n entityId: string,\n colName: string\n): RelationProp {\n const baseEntity = EntityManager.get(entityId);\n const relProp = baseEntity.props.find((prop) => prop.name === colName);\n if (isRelationProp(relProp)) {\n const relEntity = EntityManager.get(relProp.with);\n if (relEntity.parentId !== undefined) {\n throw new Error(\"Only parent entities can be used as relation props\");\n }\n return relProp;\n } else {\n throw new Error(`찾을 수 없는 Relation ${colName}`);\n }\n}\n"],"names":["Template__view_list","getEnumInfoFromColName","getRelationPropFromColName","getTargetAndPath","names","target","path","fsPlural","wrapTc","body","key","collapsing","className","renderColumn","entityId","col","parentObj","withoutName","colName","name","renderType","relPropFk","replace","with","nullable","id","enumId","pickedChild","children","find","child","config","picked","Error","renderColumnImport","capital","relProp","result","map","EntityManager","getNamesFromId","_","flattenDeep","element","renderFilterImport","fs","componentId","inflection","camelize","targetEntityNames","targetMDNames","targetNames","renderFilter","isClearable","optional","getDefault","columns","def","orderBy","search","orderByZodType","zodType","z","ZodEnum","options","toString","searchZodType","render","columnsNode","listParamsNode","entity","get","filter","propCandidate","props","p","label","desc","tc","filterColumns","includes","endsWith","sort","a","preTemplates","targetEntityId","push","columnImports","uniq","flat","join","capitalPlural","title","trim","importKeys","Template","baseEntity","prop","isEnumProp","idCandidate","underscore","isRelationProp","relEntity","parentId","undefined"],"mappings":"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"}
@@ -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__view_list_columns extends Template {
5
+ constructor();
6
+ getTargetAndPath(names: EntityNamesRecord): {
7
+ target: string;
8
+ path: string;
9
+ };
10
+ render({ entityId, columns, columnImports, }: TemplateOptions["view_list_columns"]): {
11
+ body: string;
12
+ importKeys: never[];
13
+ target: string;
14
+ path: string;
15
+ };
16
+ }
17
+ //# sourceMappingURL=view_list_columns.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view_list_columns.template.d.ts","sourceRoot":"","sources":["../../src/templates/view_list_columns.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;AAE3C,qBAAa,2BAA4B,SAAQ,QAAQ;;IAKvD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAQzC,MAAM,CAAC,EACL,QAAQ,EACR,OAAO,EACP,aAAa,GACd,EAAE,eAAe,CAAC,mBAAmB,CAAC;;;;;;CAqCxC"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Template__view_list_columns",{enumerable:true,get:function(){return Template__view_list_columns}});var _entitymanager=require("../entity/entity-manager");var _basetemplate=require("./base-template");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 _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 _type_of(obj){"@swc/helpers - typeof";return obj&&typeof Symbol!=="undefined"&&obj.constructor===Symbol?"symbol":typeof obj}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__view_list_columns=/*#__PURE__*/function(Template){"use strict";_inherits(Template__view_list_columns,Template);function Template__view_list_columns(){_class_call_check(this,Template__view_list_columns);return _call_super(this,Template__view_list_columns,["view_list_columns"])}_create_class(Template__view_list_columns,[{key:"getTargetAndPath",value:function getTargetAndPath(names){return{target:"web/src/pages/admin",path:"".concat(names.fsPlural,"/_columns.tsx")}}},{key:"render",value:function render(param){var entityId=param.entityId,columns=param.columns,columnImports=param.columnImports;var names=_entitymanager.EntityManager.getNamesFromId(entityId);return _object_spread_props(_object_spread({},this.getTargetAndPath(names)),{body:"\nimport React from 'react';\nimport {\n Segment,\n Table,\n TableRow,\n Button,\n Label,\n} from 'semantic-ui-react';\nimport { DateTime } from \"luxon\";\nimport { TFColumn } from \"src/typeframe/iso-types\";\nimport { ".concat(names.capital,'SubsetA } from "src/services/').concat(names.fs,"/").concat(names.fs,'.generated";\n').concat(columnImports,"\n\nconst columns: { [key in Exclude<keyof ").concat(names.capital,"SubsetA, 'id'>]: TFColumn<").concat(names.capital,"SubsetA> } = {").concat(columns.map(function(col){return["".concat(col.name,': { label: "').concat(col.label,'",'),"tc: ".concat(col.tc,", "),"collapsing: ".concat(["Title","Name"].includes(col.label)===false,", }")].join("\n")}).join(",\n"),"};\nexport default columns;\n ").trim(),importKeys:[]})}}]);return Template__view_list_columns}(_basetemplate.Template);
2
+ //# sourceMappingURL=view_list_columns.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/templates/view_list_columns.template.ts"],"sourcesContent":["import { TemplateOptions } from \"../types/types\";\nimport { EntityManager, EntityNamesRecord } from \"../entity/entity-manager\";\nimport { Template } from \"./base-template\";\n\nexport class Template__view_list_columns extends Template {\n constructor() {\n super(\"view_list_columns\");\n }\n\n getTargetAndPath(names: EntityNamesRecord) {\n return {\n target: \"web/src/pages/admin\",\n path: `${names.fsPlural}/_columns.tsx`,\n };\n }\n\n // 컬럼\n render({\n entityId,\n columns,\n columnImports,\n }: TemplateOptions[\"view_list_columns\"]) {\n const names = EntityManager.getNamesFromId(entityId);\n\n return {\n ...this.getTargetAndPath(names),\n body: `\nimport React from 'react';\nimport {\n Segment,\n Table,\n TableRow,\n Button,\n Label,\n} from 'semantic-ui-react';\nimport { DateTime } from \"luxon\";\nimport { TFColumn } from \"src/typeframe/iso-types\";\nimport { ${names.capital}SubsetA } from \"src/services/${names.fs}/${\n names.fs\n }.generated\";\n${columnImports}\n\nconst columns: { [key in Exclude<keyof ${\n names.capital\n }SubsetA, 'id'>]: TFColumn<${names.capital}SubsetA> } = {${columns\n .map((col) => {\n return [\n `${col.name}: { label: \"${col.label}\",`,\n `tc: ${col.tc}, `,\n `collapsing: ${[\"Title\", \"Name\"].includes(col.label) === false}, }`,\n ].join(\"\\n\");\n })\n .join(\",\\n\")}};\nexport default columns;\n `.trim(),\n importKeys: [],\n };\n }\n}\n"],"names":["Template__view_list_columns","getTargetAndPath","names","target","path","fsPlural","render","entityId","columns","columnImports","EntityManager","getNamesFromId","body","capital","fs","map","col","name","label","tc","includes","join","trim","importKeys","Template"],"mappings":"oGAIaA,qEAAAA,0DAHoC,sDACxB,y7GAElB,IAAA,AAAMA,yCAAN,0CAAMA,+CAAAA,qDAAAA,6BAET,OAAA,iBAFSA,6BAEH,oCAFGA,8BAKXC,IAAAA,yBAAAA,SAAAA,iBAAiBC,KAAwB,EACvC,MAAO,CACLC,OAAQ,sBACRC,KAAM,AAAC,GAAiB,OAAfF,MAAMG,QAAQ,CAAC,gBAC1B,CACF,IAGAC,IAAAA,eAAAA,SAAAA,OAAO,KAIgC,MAHrCC,SADK,MACLA,SACAC,QAFK,MAELA,QACAC,cAHK,MAGLA,cAEA,IAAMP,MAAQQ,4BAAa,CAACC,cAAc,CAACJ,UAE3C,OAAO,uCACF,IAAI,CAACN,gBAAgB,CAACC,SACzBU,KAAM,AAAC,qOAW2CV,OAA7CA,MAAMW,OAAO,CAAC,iCACjBX,OADgDA,MAAMY,EAAE,CAAC,KAG/DL,OAFMP,MAAMY,EAAE,CACT,kBAICZ,OAHNO,cAAc,+CAImBP,OAD3BA,MAAMW,OAAO,CACd,8BAA0DL,OAA9BN,MAAMW,OAAO,CAAC,kBAQ5B,OAR4CL,QACxDO,GAAG,CAAC,SAACC,KACJ,MAAO,CACL,AAAC,GAAyBA,OAAvBA,IAAIC,IAAI,CAAC,gBAAwB,OAAVD,IAAIE,KAAK,CAAC,MACpC,AAAC,OAAa,OAAPF,IAAIG,EAAE,CAAC,MACd,AAAC,eAA8D,OAAhD,CAAC,QAAS,OAAO,CAACC,QAAQ,CAACJ,IAAIE,KAAK,IAAM,MAAM,OAChE,CAACG,IAAI,CAAC,KACT,GACCA,IAAI,CAAC,OAAO,uCAEbC,IAAI,GACNC,WAAY,EAAE,EAElB,YArDWvB,6BAAoCwB,sBAAQ"}
@@ -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__view_search_input extends Template {
5
+ constructor();
6
+ getTargetAndPath(names: EntityNamesRecord): {
7
+ target: string;
8
+ path: string;
9
+ };
10
+ render({ entityId }: TemplateOptions["view_search_input"]): {
11
+ body: string;
12
+ importKeys: never[];
13
+ target: string;
14
+ path: string;
15
+ };
16
+ }
17
+ //# sourceMappingURL=view_search_input.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view_search_input.template.d.ts","sourceRoot":"","sources":["../../src/templates/view_search_input.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;AAE3C,qBAAa,2BAA4B,SAAQ,QAAQ;;IAKvD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,mBAAmB,CAAC;;;;;;CAkD1D"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Template__view_search_input",{enumerable:true,get:function(){return Template__view_search_input}});var _entitymanager=require("../entity/entity-manager");var _basetemplate=require("./base-template");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 _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 _type_of(obj){"@swc/helpers - typeof";return obj&&typeof Symbol!=="undefined"&&obj.constructor===Symbol?"symbol":typeof obj}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__view_search_input=/*#__PURE__*/function(Template){"use strict";_inherits(Template__view_search_input,Template);function Template__view_search_input(){_class_call_check(this,Template__view_search_input);return _call_super(this,Template__view_search_input,["view_search_input"])}_create_class(Template__view_search_input,[{key:"getTargetAndPath",value:function getTargetAndPath(names){return{target:"web/src/components",path:"".concat(names.fs,"/").concat(names.capital,"SearchInput.tsx")}}},{key:"render",value:function render(param){var entityId=param.entityId;var names=_entitymanager.EntityManager.getNamesFromId(entityId);return _object_spread_props(_object_spread({},this.getTargetAndPath(names)),{body:'\nimport React from "react";\nimport { useState } from "react";\nimport { DropdownProps, Input, InputProps } from "semantic-ui-react";\nimport { '.concat(names.capital,'SearchFieldDropdown } from "src/components/').concat(names.fs,"/").concat(names.capital,'SearchFieldDropdown";\n\nexport function ').concat(names.capital,"SearchInput({\n input: { value: inputValue, onChange: inputOnChange, ...inputProps },\n dropdown: dropdownProps,\n}: {\n input: InputProps;\n dropdown: DropdownProps;\n}) {\n const [keyword, setKeyword] = useState<string>(inputValue ?? '');\n\n const handleKeyDown = (e: { key: string }) => {\n if (inputOnChange && e.key === 'Enter') {\n inputOnChange(e as any, {\n value: keyword,\n });\n }\n };\n\n return (\n <Input\n size=\"small\"\n placeholder=\"검색...\"\n style={{ margin: 0 }}\n label={<").concat(names.capital,"SearchFieldDropdown {...dropdownProps} />}\n labelPosition=\"left\"\n action={{\n icon: 'search',\n onClick: () => handleKeyDown({ key: 'Enter' }),\n }}\n {...inputProps}\n value={keyword}\n onChange={(e, { value }) => setKeyword(value)}\n onKeyDown={handleKeyDown}\n />\n );\n}\n ").trim(),importKeys:[]})}}]);return Template__view_search_input}(_basetemplate.Template);
2
+ //# sourceMappingURL=view_search_input.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/templates/view_search_input.template.ts"],"sourcesContent":["import { TemplateOptions } from \"../types/types\";\nimport { EntityManager, EntityNamesRecord } from \"../entity/entity-manager\";\nimport { Template } from \"./base-template\";\n\nexport class Template__view_search_input extends Template {\n constructor() {\n super(\"view_search_input\");\n }\n\n getTargetAndPath(names: EntityNamesRecord) {\n return {\n target: \"web/src/components\",\n path: `${names.fs}/${names.capital}SearchInput.tsx`,\n };\n }\n\n render({ entityId }: TemplateOptions[\"view_search_input\"]) {\n const names = EntityManager.getNamesFromId(entityId);\n\n return {\n ...this.getTargetAndPath(names),\n body: `\nimport React from \"react\";\nimport { useState } from \"react\";\nimport { DropdownProps, Input, InputProps } from \"semantic-ui-react\";\nimport { ${names.capital}SearchFieldDropdown } from \"src/components/${names.fs}/${names.capital}SearchFieldDropdown\";\n\nexport function ${names.capital}SearchInput({\n input: { value: inputValue, onChange: inputOnChange, ...inputProps },\n dropdown: dropdownProps,\n}: {\n input: InputProps;\n dropdown: DropdownProps;\n}) {\n const [keyword, setKeyword] = useState<string>(inputValue ?? '');\n\n const handleKeyDown = (e: { key: string }) => {\n if (inputOnChange && e.key === 'Enter') {\n inputOnChange(e as any, {\n value: keyword,\n });\n }\n };\n\n return (\n <Input\n size=\"small\"\n placeholder=\"검색...\"\n style={{ margin: 0 }}\n label={<${names.capital}SearchFieldDropdown {...dropdownProps} />}\n labelPosition=\"left\"\n action={{\n icon: 'search',\n onClick: () => handleKeyDown({ key: 'Enter' }),\n }}\n {...inputProps}\n value={keyword}\n onChange={(e, { value }) => setKeyword(value)}\n onKeyDown={handleKeyDown}\n />\n );\n}\n `.trim(),\n importKeys: [],\n };\n }\n}\n"],"names":["Template__view_search_input","getTargetAndPath","names","target","path","fs","capital","render","entityId","EntityManager","getNamesFromId","body","trim","importKeys","Template"],"mappings":"oGAIaA,qEAAAA,0DAHoC,sDACxB,y7GAElB,IAAA,AAAMA,yCAAN,0CAAMA,+CAAAA,qDAAAA,6BAET,OAAA,iBAFSA,6BAEH,oCAFGA,8BAKXC,IAAAA,yBAAAA,SAAAA,iBAAiBC,KAAwB,EACvC,MAAO,CACLC,OAAQ,qBACRC,KAAM,AAAC,GAAcF,OAAZA,MAAMG,EAAE,CAAC,KAAiB,OAAdH,MAAMI,OAAO,CAAC,kBACrC,CACF,IAEAC,IAAAA,eAAAA,SAAAA,OAAO,KAAkD,MAAlD,AAAEC,SAAF,MAAEA,SACP,IAAMN,MAAQO,4BAAa,CAACC,cAAc,CAACF,UAE3C,OAAO,uCACF,IAAI,CAACP,gBAAgB,CAACC,SACzBS,KAAM,AAAC,oJAIyDT,OAA3DA,MAAMI,OAAO,CAAC,+CAAyDJ,OAAZA,MAAMG,EAAE,CAAC,KAE7DH,OAFgEA,MAAMI,OAAO,CAAC,6CAwBhFJ,OAtBEA,MAAMI,OAAO,CAAC,yiBAsBF,OAAdJ,MAAMI,OAAO,CAAC,uVAatBM,IAAI,GACNC,WAAY,EAAE,EAElB,YA7DWb,6BAAoCc,sBAAQ"}
@@ -0,0 +1,7 @@
1
+ import { FixtureRecord } from "../types/types";
2
+ export declare class RelationGraph {
3
+ private graph;
4
+ buildGraph(fixtures: FixtureRecord[]): void;
5
+ getInsertionOrder(): string[];
6
+ }
7
+ //# sourceMappingURL=_relation-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_relation-graph.d.ts","sourceRoot":"","sources":["../../src/testing/_relation-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAUzE,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAwC;IAErD,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI;IA8C3C,iBAAiB,IAAI,MAAM,EAAE;CAmD9B"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"RelationGraph",{enumerable:true,get:function(){return RelationGraph}});var _entitymanager=require("../entity/entity-manager");var _types=require("../types/types");function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_with_holes(arr){if(Array.isArray(arr))return arr}function _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 _iterable_to_array_limit(arr,i){var _i=arr==null?null:typeof Symbol!=="undefined"&&arr[Symbol.iterator]||arr["@@iterator"];if(_i==null)return;var _arr=[];var _n=true;var _d=false;var _s,_e;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"]!=null)_i["return"]()}finally{if(_d)throw _e}}return _arr}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _sliced_to_array(arr,i){return _array_with_holes(arr)||_iterable_to_array_limit(arr,i)||_unsupported_iterable_to_array(arr,i)||_non_iterable_rest()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}var RelationGraph=/*#__PURE__*/function(){"use strict";function RelationGraph(){_class_call_check(this,RelationGraph);_define_property(this,"graph",new Map)}_create_class(RelationGraph,[{key:"buildGraph",value:function buildGraph(fixtures){this.graph.clear();var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=fixtures[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var fixture=_step.value;this.graph.set(fixture.fixtureId,{fixtureId:fixture.fixtureId,entityId:fixture.entityId,related:new Set})}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}var _iteratorNormalCompletion1=true,_didIteratorError1=false,_iteratorError1=undefined;try{for(var _iterator1=fixtures[Symbol.iterator](),_step1;!(_iteratorNormalCompletion1=(_step1=_iterator1.next()).done);_iteratorNormalCompletion1=true){var fixture1=_step1.value;var node=this.graph.get(fixture1.fixtureId);var _iteratorNormalCompletion2=true,_didIteratorError2=false,_iteratorError2=undefined;try{for(var _iterator2=Object.entries(fixture1.columns)[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var _step_value=_sliced_to_array(_step2.value,2),column=_step_value[1];var prop=column.prop;if((0,_types.isRelationProp)(prop)){if((0,_types.isBelongsToOneRelationProp)(prop)||(0,_types.isOneToOneRelationProp)(prop)&&prop.hasJoinColumn){var relatedFixtureId="".concat(prop.with,"#").concat(column.value);if(this.graph.has(relatedFixtureId)){node.related.add(relatedFixtureId)}}else if((0,_types.isManyToManyRelationProp)(prop)){var relatedIds=column.value;var _iteratorNormalCompletion3=true,_didIteratorError3=false,_iteratorError3=undefined;try{for(var _iterator3=relatedIds[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var relatedId=_step3.value;var relatedFixtureId1="".concat(prop.with,"#").concat(relatedId);if(this.graph.has(relatedFixtureId1)){node.related.add(relatedFixtureId1);this.graph.get(relatedFixtureId1).related.add(fixture1.fixtureId)}}}catch(err){_didIteratorError3=true;_iteratorError3=err}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return!=null){_iterator3.return()}}finally{if(_didIteratorError3){throw _iteratorError3}}}}}}}catch(err){_didIteratorError2=true;_iteratorError2=err}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return!=null){_iterator2.return()}}finally{if(_didIteratorError2){throw _iteratorError2}}}}}catch(err){_didIteratorError1=true;_iteratorError1=err}finally{try{if(!_iteratorNormalCompletion1&&_iterator1.return!=null){_iterator1.return()}}finally{if(_didIteratorError1){throw _iteratorError1}}}}},{key:"getInsertionOrder",value:function getInsertionOrder(){var _this=this;var visited=new Set;var order=[];var tempVisited=new Set;var visit=function(fixtureId){if(visited.has(fixtureId))return;if(tempVisited.has(fixtureId)){console.warn("Circular dependency detected involving: ".concat(fixtureId));return}tempVisited.add(fixtureId);var node=_this.graph.get(fixtureId);var entity=_entitymanager.EntityManager.get(node.entityId);var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{var _loop=function(){var depId=_step.value;var depNode=_this.graph.get(depId);var relationProp=entity.props.find(function(prop){return(0,_types.isRelationProp)(prop)&&((0,_types.isBelongsToOneRelationProp)(prop)||(0,_types.isOneToOneRelationProp)(prop)&&prop.hasJoinColumn)&&prop.with===depNode.entityId});if(relationProp&&!relationProp.nullable){visit(depId)}};for(var _iterator=node.related[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true)_loop()}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}tempVisited.delete(fixtureId);visited.add(fixtureId);order.push(fixtureId)};var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=this.graph.keys()[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var fixtureId=_step.value;visit(fixtureId)}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}var _iteratorNormalCompletion1=true,_didIteratorError1=false,_iteratorError1=undefined;try{for(var _iterator1=this.graph.keys()[Symbol.iterator](),_step1;!(_iteratorNormalCompletion1=(_step1=_iterator1.next()).done);_iteratorNormalCompletion1=true){var fixtureId1=_step1.value;if(!visited.has(fixtureId1)){order.push(fixtureId1)}}}catch(err){_didIteratorError1=true;_iteratorError1=err}finally{try{if(!_iteratorNormalCompletion1&&_iterator1.return!=null){_iterator1.return()}}finally{if(_didIteratorError1){throw _iteratorError1}}}return order}}]);return RelationGraph}();
2
+ //# sourceMappingURL=_relation-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/testing/_relation-graph.ts"],"sourcesContent":["import { RelationNode, EntityProp, FixtureRecord } from \"../types/types\";\nimport { EntityManager } from \"../entity/entity-manager\";\nimport {\n isRelationProp,\n isBelongsToOneRelationProp,\n isOneToOneRelationProp,\n isManyToManyRelationProp,\n} from \"../types/types\";\n\n// 관계 그래프 처리를 별도 클래스로 분리\nexport class RelationGraph {\n private graph: Map<string, RelationNode> = new Map();\n\n buildGraph(fixtures: FixtureRecord[]): void {\n this.graph.clear();\n\n // 1. 노드 추가\n for (const fixture of fixtures) {\n this.graph.set(fixture.fixtureId, {\n fixtureId: fixture.fixtureId,\n entityId: fixture.entityId,\n related: new Set(),\n });\n }\n\n // 2. 의존성 추가\n for (const fixture of fixtures) {\n const node = this.graph.get(fixture.fixtureId)!;\n\n for (const [, column] of Object.entries(fixture.columns)) {\n const prop = column.prop as EntityProp;\n\n if (isRelationProp(prop)) {\n if (\n isBelongsToOneRelationProp(prop) ||\n (isOneToOneRelationProp(prop) && prop.hasJoinColumn)\n ) {\n const relatedFixtureId = `${prop.with}#${column.value}`;\n if (this.graph.has(relatedFixtureId)) {\n node.related.add(relatedFixtureId);\n }\n } else if (isManyToManyRelationProp(prop)) {\n // ManyToMany 관계의 경우 양방향 의존성 추가\n const relatedIds = column.value as number[];\n for (const relatedId of relatedIds) {\n const relatedFixtureId = `${prop.with}#${relatedId}`;\n if (this.graph.has(relatedFixtureId)) {\n node.related.add(relatedFixtureId);\n this.graph\n .get(relatedFixtureId)!\n .related.add(fixture.fixtureId);\n }\n }\n }\n }\n }\n }\n }\n\n getInsertionOrder(): string[] {\n const visited = new Set<string>();\n const order: string[] = [];\n const tempVisited = new Set<string>();\n\n const visit = (fixtureId: string) => {\n if (visited.has(fixtureId)) return;\n if (tempVisited.has(fixtureId)) {\n console.warn(`Circular dependency detected involving: ${fixtureId}`);\n return;\n }\n\n tempVisited.add(fixtureId);\n\n const node = this.graph.get(fixtureId)!;\n const entity = EntityManager.get(node.entityId);\n\n for (const depId of node.related) {\n const depNode = this.graph.get(depId)!;\n\n // BelongsToOne 관계이면서 nullable이 아닌 경우 먼저 방문\n const relationProp = entity.props.find(\n (prop) =>\n isRelationProp(prop) &&\n (isBelongsToOneRelationProp(prop) ||\n (isOneToOneRelationProp(prop) && prop.hasJoinColumn)) &&\n prop.with === depNode.entityId\n );\n if (relationProp && !relationProp.nullable) {\n visit(depId);\n }\n }\n\n tempVisited.delete(fixtureId);\n visited.add(fixtureId);\n order.push(fixtureId);\n };\n\n for (const fixtureId of this.graph.keys()) {\n visit(fixtureId);\n }\n\n // circular dependency로 인해 방문되지 않은 fixtureId 추가\n for (const fixtureId of this.graph.keys()) {\n if (!visited.has(fixtureId)) {\n order.push(fixtureId);\n }\n }\n\n return order;\n }\n}\n"],"names":["RelationGraph","graph","Map","buildGraph","fixtures","clear","fixture","set","fixtureId","entityId","related","Set","node","get","Object","entries","columns","column","prop","isRelationProp","isBelongsToOneRelationProp","isOneToOneRelationProp","hasJoinColumn","relatedFixtureId","with","value","has","add","isManyToManyRelationProp","relatedIds","relatedId","getInsertionOrder","visited","order","tempVisited","visit","console","warn","entity","EntityManager","depId","depNode","relationProp","props","find","nullable","delete","push","keys"],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { FixtureImportResult, FixtureRecord, FixtureSearchOptions } from "../types/types";
2
+ import { Entity } from "../entity/entity";
3
+ import { Knex } from "knex";
4
+ import { SonamuDBConfig } from "../database/db";
5
+ export declare class FixtureManagerClass {
6
+ private _tdb;
7
+ set tdb(tdb: Knex);
8
+ get tdb(): Knex;
9
+ private _fdb;
10
+ set fdb(fdb: Knex);
11
+ get fdb(): Knex;
12
+ cachedTableNames: string[] | null;
13
+ private relationGraph;
14
+ init(): void;
15
+ cleanAndSeed(usingTables?: string[]): Promise<void>;
16
+ getChecksum(db: Knex, tableName: string): Promise<any>;
17
+ sync(): Promise<void>;
18
+ private visitedRecords;
19
+ importFixture(entityId: string, ids: number[]): Promise<void>;
20
+ getImportQueries(entityId: string, field: string, id: number): Promise<string[]>;
21
+ destroy(): Promise<void>;
22
+ getFixtures(sourceDBName: keyof SonamuDBConfig, targetDBName: keyof SonamuDBConfig, searchOptions: FixtureSearchOptions): Promise<FixtureRecord[]>;
23
+ createFixtureRecord(entity: Entity, row: any, options?: {
24
+ singleRecord?: boolean;
25
+ _db?: Knex;
26
+ }): Promise<FixtureRecord[]>;
27
+ insertFixtures(dbName: keyof SonamuDBConfig, _fixtures: FixtureRecord[]): Promise<FixtureImportResult[]>;
28
+ private prepareInsertData;
29
+ private insertFixture;
30
+ private handleManyToManyRelations;
31
+ addFixtureLoader(code: string): Promise<void>;
32
+ private checkUniqueViolation;
33
+ }
34
+ export declare const FixtureManager: FixtureManagerClass;
35
+ //# sourceMappingURL=fixture-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixture-manager.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EAQrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,OAAa,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAKd;IAED,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAKd;IACD,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAEzC,OAAO,CAAC,aAAa,CAAuB;IAE5C,IAAI;IA0BE,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE;IAmEnC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM;IAKvC,IAAI;IAgEV,OAAO,CAAC,cAAc,CAAqB;IACrC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;IAwB7C,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,MAAM,EAAE,CAAC;IA8Ed,OAAO;IAYP,WAAW,CACf,YAAY,EAAE,MAAM,cAAc,EAClC,YAAY,EAAE,MAAM,cAAc,EAClC,aAAa,EAAE,oBAAoB;IA0E/B,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,GAAG,CAAC,EAAE,IAAI,CAAC;KACZ,GACA,OAAO,CAAC,aAAa,EAAE,CAAC;IAoFrB,cAAc,CAClB,MAAM,EAAE,MAAM,cAAc,EAC5B,SAAS,EAAE,aAAa,EAAE;IAyD5B,OAAO,CAAC,iBAAiB;YAwBX,aAAa;YAiCb,yBAAyB;IAkDjC,gBAAgB,CAAC,IAAI,EAAE,MAAM;YAsBrB,oBAAoB;CAyCnC;AACD,eAAO,MAAM,cAAc,qBAA4B,CAAC"}