sonamu 0.5.7 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. package/dist/api/base-frame.js +12 -2
  2. package/dist/api/caster.js +66 -2
  3. package/dist/api/code-converters.js +489 -2
  4. package/dist/api/config.d.ts +76 -0
  5. package/dist/api/config.d.ts.map +1 -0
  6. package/dist/api/config.js +32 -0
  7. package/dist/api/context.d.ts +1 -0
  8. package/dist/api/context.d.ts.map +1 -1
  9. package/dist/api/context.js +3 -2
  10. package/dist/api/decorators.d.ts.map +1 -1
  11. package/dist/api/decorators.js +142 -2
  12. package/dist/api/index.js +9 -2
  13. package/dist/api/sonamu.d.ts +8 -22
  14. package/dist/api/sonamu.d.ts.map +1 -1
  15. package/dist/api/sonamu.js +482 -2
  16. package/dist/bin/build-config.d.ts +2 -1
  17. package/dist/bin/build-config.d.ts.map +1 -1
  18. package/dist/bin/build-config.js +12 -2
  19. package/dist/bin/cli-wrapper.js +71 -2
  20. package/dist/bin/cli.js +418 -2
  21. package/dist/bin/hot-hook-register.d.ts +11 -0
  22. package/dist/bin/hot-hook-register.d.ts.map +1 -0
  23. package/dist/bin/hot-hook-register.js +21 -0
  24. package/dist/database/_batch_update.js +78 -2
  25. package/dist/database/base-model.js +247 -2
  26. package/dist/database/code-generator.js +53 -2
  27. package/dist/database/db.d.ts +2 -16
  28. package/dist/database/db.d.ts.map +1 -1
  29. package/dist/database/db.js +132 -2
  30. package/dist/database/knex-plugins/knex-on-duplicate-update.js +39 -2
  31. package/dist/database/puri-wrapper.js +109 -2
  32. package/dist/database/puri.d.ts +23 -16
  33. package/dist/database/puri.d.ts.map +1 -1
  34. package/dist/database/puri.js +539 -2
  35. package/dist/database/puri.types.d.ts +8 -3
  36. package/dist/database/puri.types.d.ts.map +1 -1
  37. package/dist/database/puri.types.js +3 -2
  38. package/dist/database/transaction-context.js +14 -2
  39. package/dist/database/upsert-builder.js +215 -2
  40. package/dist/entity/entity-manager.d.ts +3 -1
  41. package/dist/entity/entity-manager.d.ts.map +1 -1
  42. package/dist/entity/entity-manager.js +114 -2
  43. package/dist/entity/entity-utils.js +210 -2
  44. package/dist/entity/entity.d.ts.map +1 -1
  45. package/dist/entity/entity.js +651 -2
  46. package/dist/exceptions/error-handler.js +29 -2
  47. package/dist/exceptions/so-exceptions.js +85 -2
  48. package/dist/file-storage/driver.js +79 -2
  49. package/dist/file-storage/file-storage.js +75 -2
  50. package/dist/index.d.ts +2 -0
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +28 -2
  53. package/dist/migration/code-generation.js +558 -2
  54. package/dist/migration/migration-set.js +364 -2
  55. package/dist/migration/migrator.d.ts +0 -9
  56. package/dist/migration/migrator.d.ts.map +1 -1
  57. package/dist/migration/migrator.js +510 -2
  58. package/dist/migration/types.js +3 -2
  59. package/dist/naite/naite.d.ts +12 -0
  60. package/dist/naite/naite.d.ts.map +1 -0
  61. package/dist/naite/naite.js +72 -0
  62. package/dist/stream/index.js +3 -2
  63. package/dist/stream/sse.js +38 -2
  64. package/dist/syncer/api-parser.d.ts +20 -0
  65. package/dist/syncer/api-parser.d.ts.map +1 -0
  66. package/dist/syncer/api-parser.js +229 -0
  67. package/dist/syncer/checksum.d.ts +21 -0
  68. package/dist/syncer/checksum.d.ts.map +1 -0
  69. package/dist/syncer/checksum.js +98 -0
  70. package/dist/syncer/code-generator.d.ts +20 -0
  71. package/dist/syncer/code-generator.d.ts.map +1 -0
  72. package/dist/syncer/code-generator.js +141 -0
  73. package/dist/syncer/entity-operations.d.ts +17 -0
  74. package/dist/syncer/entity-operations.d.ts.map +1 -0
  75. package/dist/syncer/entity-operations.js +58 -0
  76. package/dist/syncer/file-patterns.d.ts +29 -0
  77. package/dist/syncer/file-patterns.d.ts.map +1 -0
  78. package/dist/syncer/file-patterns.js +38 -0
  79. package/dist/syncer/index.d.ts +6 -0
  80. package/dist/syncer/index.d.ts.map +1 -1
  81. package/dist/syncer/index.js +9 -2
  82. package/dist/syncer/module-loader.d.ts +35 -0
  83. package/dist/syncer/module-loader.d.ts.map +1 -0
  84. package/dist/syncer/module-loader.js +82 -0
  85. package/dist/syncer/syncer.d.ts +93 -108
  86. package/dist/syncer/syncer.d.ts.map +1 -1
  87. package/dist/syncer/syncer.js +375 -2
  88. package/dist/template/entity-converter.d.ts +14 -0
  89. package/dist/template/entity-converter.d.ts.map +1 -0
  90. package/dist/template/entity-converter.js +101 -0
  91. package/dist/template/helpers.d.ts +23 -0
  92. package/dist/template/helpers.d.ts.map +1 -0
  93. package/dist/template/helpers.js +64 -0
  94. package/dist/{templates → template/implementations}/entity.template.d.ts +3 -3
  95. package/dist/template/implementations/entity.template.d.ts.map +1 -0
  96. package/dist/template/implementations/entity.template.js +87 -0
  97. package/dist/{templates → template/implementations}/generated.template.d.ts +3 -3
  98. package/dist/template/implementations/generated.template.d.ts.map +1 -0
  99. package/dist/template/implementations/generated.template.js +232 -0
  100. package/dist/{templates → template/implementations}/generated_http.template.d.ts +3 -3
  101. package/dist/template/implementations/generated_http.template.d.ts.map +1 -0
  102. package/dist/template/implementations/generated_http.template.js +131 -0
  103. package/dist/{templates → template/implementations}/generated_sso.template.d.ts +3 -3
  104. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -0
  105. package/dist/template/implementations/generated_sso.template.js +105 -0
  106. package/dist/{templates → template/implementations}/init_types.template.d.ts +3 -3
  107. package/dist/template/implementations/init_types.template.d.ts.map +1 -0
  108. package/dist/template/implementations/init_types.template.js +38 -0
  109. package/dist/template/implementations/model.template.d.ts +17 -0
  110. package/dist/template/implementations/model.template.d.ts.map +1 -0
  111. package/dist/template/implementations/model.template.js +171 -0
  112. package/dist/{templates → template/implementations}/model_test.template.d.ts +3 -3
  113. package/dist/template/implementations/model_test.template.d.ts.map +1 -0
  114. package/dist/template/implementations/model_test.template.js +35 -0
  115. package/dist/{templates → template/implementations}/service.template.d.ts +6 -6
  116. package/dist/template/implementations/service.template.d.ts.map +1 -0
  117. package/dist/template/implementations/service.template.js +193 -0
  118. package/dist/{templates → template/implementations}/view_enums_buttonset.template.d.ts +3 -3
  119. package/dist/template/implementations/view_enums_buttonset.template.d.ts.map +1 -0
  120. package/dist/template/implementations/view_enums_buttonset.template.js +31 -0
  121. package/dist/{templates → template/implementations}/view_enums_dropdown.template.d.ts +3 -4
  122. package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +1 -0
  123. package/dist/template/implementations/view_enums_dropdown.template.js +50 -0
  124. package/dist/{templates → template/implementations}/view_enums_select.template.d.ts +3 -3
  125. package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -0
  126. package/dist/template/implementations/view_enums_select.template.js +55 -0
  127. package/dist/{templates → template/implementations}/view_form.template.d.ts +5 -5
  128. package/dist/template/implementations/view_form.template.d.ts.map +1 -0
  129. package/dist/template/implementations/view_form.template.js +337 -0
  130. package/dist/{templates → template/implementations}/view_id_all_select.template.d.ts +3 -3
  131. package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -0
  132. package/dist/template/implementations/view_id_all_select.template.js +31 -0
  133. package/dist/{templates → template/implementations}/view_id_async_select.template.d.ts +3 -3
  134. package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -0
  135. package/dist/template/implementations/view_id_async_select.template.js +105 -0
  136. package/dist/{templates → template/implementations}/view_list.template.d.ts +5 -13
  137. package/dist/template/implementations/view_list.template.d.ts.map +1 -0
  138. package/dist/template/implementations/view_list.template.js +465 -0
  139. package/dist/{templates → template/implementations}/view_list_columns.template.d.ts +3 -3
  140. package/dist/template/implementations/view_list_columns.template.d.ts.map +1 -0
  141. package/dist/template/implementations/view_list_columns.template.js +49 -0
  142. package/dist/{templates → template/implementations}/view_search_input.template.d.ts +3 -3
  143. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -0
  144. package/dist/template/implementations/view_search_input.template.js +64 -0
  145. package/dist/template/index.d.ts +5 -0
  146. package/dist/template/index.d.ts.map +1 -0
  147. package/dist/template/index.js +6 -0
  148. package/dist/template/template.d.ts +39 -0
  149. package/dist/template/template.d.ts.map +1 -0
  150. package/dist/template/template.js +47 -0
  151. package/dist/template/zod-converter.d.ts +18 -0
  152. package/dist/template/zod-converter.d.ts.map +1 -0
  153. package/dist/template/zod-converter.js +166 -0
  154. package/dist/testing/_relation-graph.js +80 -2
  155. package/dist/testing/fixture-manager.d.ts.map +1 -1
  156. package/dist/testing/fixture-manager.js +521 -2
  157. package/dist/types/types.d.ts +39 -40
  158. package/dist/types/types.d.ts.map +1 -1
  159. package/dist/types/types.js +289 -2
  160. package/dist/typings/knex.d.js +3 -2
  161. package/dist/utils/async-utils.d.ts +7 -0
  162. package/dist/utils/async-utils.d.ts.map +1 -1
  163. package/dist/utils/async-utils.js +57 -2
  164. package/dist/utils/console-util.d.ts +2 -0
  165. package/dist/utils/console-util.d.ts.map +1 -0
  166. package/dist/utils/console-util.js +6 -0
  167. package/dist/utils/controller.js +26 -2
  168. package/dist/utils/esm-utils.d.ts +45 -0
  169. package/dist/utils/esm-utils.d.ts.map +1 -0
  170. package/dist/utils/esm-utils.js +56 -0
  171. package/dist/utils/fs-utils.js +17 -2
  172. package/dist/utils/lodash-able.js +6 -2
  173. package/dist/utils/model.js +22 -2
  174. package/dist/utils/path-utils.d.ts +89 -0
  175. package/dist/utils/path-utils.d.ts.map +1 -0
  176. package/dist/utils/path-utils.js +60 -0
  177. package/dist/utils/process-utils.d.ts +13 -0
  178. package/dist/utils/process-utils.d.ts.map +1 -0
  179. package/dist/utils/process-utils.js +36 -0
  180. package/dist/utils/sql-parser.js +35 -2
  181. package/dist/utils/utils.d.ts +4 -7
  182. package/dist/utils/utils.d.ts.map +1 -1
  183. package/dist/utils/utils.js +33 -2
  184. package/dist/utils/zod-error.d.ts.map +1 -1
  185. package/dist/utils/zod-error.js +19 -2
  186. package/package.json +21 -8
  187. package/src/api/code-converters.ts +2 -2
  188. package/src/api/config.ts +142 -0
  189. package/src/api/context.ts +1 -0
  190. package/src/api/decorators.ts +1 -0
  191. package/src/api/sonamu.ts +81 -67
  192. package/src/bin/build-config.ts +2 -1
  193. package/src/bin/cli-wrapper.ts +10 -3
  194. package/src/bin/cli.ts +108 -56
  195. package/src/bin/hot-hook-register.ts +22 -0
  196. package/src/database/base-model.ts +1 -1
  197. package/src/database/code-generator.ts +1 -1
  198. package/src/database/db.ts +10 -52
  199. package/src/database/puri.ts +78 -53
  200. package/src/database/puri.types.ts +18 -5
  201. package/src/database/upsert-builder.ts +1 -1
  202. package/src/entity/entity-manager.ts +19 -15
  203. package/src/entity/entity.ts +4 -3
  204. package/src/index.ts +2 -0
  205. package/src/migration/code-generation.ts +1 -1
  206. package/src/migration/migration-set.ts +1 -1
  207. package/src/migration/migrator.ts +23 -152
  208. package/src/naite/naite.ts +70 -0
  209. package/src/syncer/api-parser.ts +299 -0
  210. package/src/syncer/checksum.ts +152 -0
  211. package/src/syncer/code-generator.ts +202 -0
  212. package/src/syncer/entity-operations.ts +68 -0
  213. package/src/syncer/file-patterns.ts +56 -0
  214. package/src/syncer/index.ts +6 -0
  215. package/src/syncer/module-loader.ts +125 -0
  216. package/src/syncer/syncer.ts +363 -1420
  217. package/src/template/entity-converter.ts +123 -0
  218. package/src/template/helpers.ts +84 -0
  219. package/src/{templates → template/implementations}/entity.template.ts +4 -4
  220. package/src/{templates → template/implementations}/generated.template.ts +9 -9
  221. package/src/{templates → template/implementations}/generated_http.template.ts +9 -6
  222. package/src/{templates → template/implementations}/generated_sso.template.ts +7 -7
  223. package/src/{templates → template/implementations}/init_types.template.ts +4 -4
  224. package/src/{templates → template/implementations}/model.template.ts +9 -9
  225. package/src/{templates → template/implementations}/model_test.template.ts +5 -5
  226. package/src/{templates → template/implementations}/service.template.ts +19 -11
  227. package/src/{templates → template/implementations}/view_enums_buttonset.template.ts +3 -3
  228. package/src/{templates → template/implementations}/view_enums_dropdown.template.ts +5 -21
  229. package/src/{templates → template/implementations}/view_enums_select.template.ts +4 -4
  230. package/src/{templates → template/implementations}/view_form.template.ts +11 -13
  231. package/src/{templates → template/implementations}/view_id_all_select.template.ts +3 -3
  232. package/src/{templates → template/implementations}/view_id_async_select.template.ts +3 -3
  233. package/src/{templates → template/implementations}/view_list.template.ts +13 -64
  234. package/src/{templates → template/implementations}/view_list_columns.template.ts +3 -3
  235. package/src/{templates → template/implementations}/view_search_input.template.ts +3 -3
  236. package/src/template/index.ts +4 -0
  237. package/src/template/template.ts +86 -0
  238. package/src/template/zod-converter.ts +219 -0
  239. package/src/testing/fixture-manager.ts +8 -1
  240. package/src/types/types.ts +38 -61
  241. package/src/utils/async-utils.ts +17 -0
  242. package/src/utils/console-util.ts +4 -0
  243. package/src/utils/esm-utils.ts +69 -0
  244. package/src/utils/path-utils.ts +102 -0
  245. package/src/utils/process-utils.ts +46 -0
  246. package/src/utils/sql-parser.ts +1 -1
  247. package/src/utils/utils.ts +14 -40
  248. package/src/utils/zod-error.ts +0 -1
  249. package/dist/api/base-frame.js.map +0 -1
  250. package/dist/api/caster.js.map +0 -1
  251. package/dist/api/code-converters.js.map +0 -1
  252. package/dist/api/context.js.map +0 -1
  253. package/dist/api/decorators.js.map +0 -1
  254. package/dist/api/index.js.map +0 -1
  255. package/dist/api/sonamu.js.map +0 -1
  256. package/dist/bin/build-config.js.map +0 -1
  257. package/dist/bin/cli-wrapper.js.map +0 -1
  258. package/dist/bin/cli.js.map +0 -1
  259. package/dist/database/_batch_update.js.map +0 -1
  260. package/dist/database/base-model.js.map +0 -1
  261. package/dist/database/code-generator.js.map +0 -1
  262. package/dist/database/db.js.map +0 -1
  263. package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +0 -1
  264. package/dist/database/puri-wrapper.js.map +0 -1
  265. package/dist/database/puri.js.map +0 -1
  266. package/dist/database/puri.types.js.map +0 -1
  267. package/dist/database/transaction-context.js.map +0 -1
  268. package/dist/database/upsert-builder.js.map +0 -1
  269. package/dist/entity/entity-manager.js.map +0 -1
  270. package/dist/entity/entity-utils.js.map +0 -1
  271. package/dist/entity/entity.js.map +0 -1
  272. package/dist/exceptions/error-handler.js.map +0 -1
  273. package/dist/exceptions/so-exceptions.js.map +0 -1
  274. package/dist/file-storage/driver.js.map +0 -1
  275. package/dist/file-storage/file-storage.js.map +0 -1
  276. package/dist/index.js.map +0 -1
  277. package/dist/migration/code-generation.js.map +0 -1
  278. package/dist/migration/migration-set.js.map +0 -1
  279. package/dist/migration/migrator.js.map +0 -1
  280. package/dist/migration/types.js.map +0 -1
  281. package/dist/stream/index.js.map +0 -1
  282. package/dist/stream/sse.js.map +0 -1
  283. package/dist/syncer/index.js.map +0 -1
  284. package/dist/syncer/syncer.js.map +0 -1
  285. package/dist/templates/base-template.d.ts +0 -13
  286. package/dist/templates/base-template.d.ts.map +0 -1
  287. package/dist/templates/base-template.js +0 -2
  288. package/dist/templates/base-template.js.map +0 -1
  289. package/dist/templates/entity.template.d.ts.map +0 -1
  290. package/dist/templates/entity.template.js +0 -2
  291. package/dist/templates/entity.template.js.map +0 -1
  292. package/dist/templates/generated.template.d.ts.map +0 -1
  293. package/dist/templates/generated.template.js +0 -2
  294. package/dist/templates/generated.template.js.map +0 -1
  295. package/dist/templates/generated_http.template.d.ts.map +0 -1
  296. package/dist/templates/generated_http.template.js +0 -2
  297. package/dist/templates/generated_http.template.js.map +0 -1
  298. package/dist/templates/generated_sso.template.d.ts.map +0 -1
  299. package/dist/templates/generated_sso.template.js +0 -2
  300. package/dist/templates/generated_sso.template.js.map +0 -1
  301. package/dist/templates/index.d.ts +0 -2
  302. package/dist/templates/index.d.ts.map +0 -1
  303. package/dist/templates/index.js +0 -2
  304. package/dist/templates/index.js.map +0 -1
  305. package/dist/templates/init_types.template.d.ts.map +0 -1
  306. package/dist/templates/init_types.template.js +0 -2
  307. package/dist/templates/init_types.template.js.map +0 -1
  308. package/dist/templates/model.template.d.ts +0 -17
  309. package/dist/templates/model.template.d.ts.map +0 -1
  310. package/dist/templates/model.template.js +0 -2
  311. package/dist/templates/model.template.js.map +0 -1
  312. package/dist/templates/model_test.template.d.ts.map +0 -1
  313. package/dist/templates/model_test.template.js +0 -2
  314. package/dist/templates/model_test.template.js.map +0 -1
  315. package/dist/templates/service.template.d.ts.map +0 -1
  316. package/dist/templates/service.template.js +0 -2
  317. package/dist/templates/service.template.js.map +0 -1
  318. package/dist/templates/view_enums_buttonset.template.d.ts.map +0 -1
  319. package/dist/templates/view_enums_buttonset.template.js +0 -2
  320. package/dist/templates/view_enums_buttonset.template.js.map +0 -1
  321. package/dist/templates/view_enums_dropdown.template.d.ts.map +0 -1
  322. package/dist/templates/view_enums_dropdown.template.js +0 -2
  323. package/dist/templates/view_enums_dropdown.template.js.map +0 -1
  324. package/dist/templates/view_enums_select.template.d.ts.map +0 -1
  325. package/dist/templates/view_enums_select.template.js +0 -2
  326. package/dist/templates/view_enums_select.template.js.map +0 -1
  327. package/dist/templates/view_form.template.d.ts.map +0 -1
  328. package/dist/templates/view_form.template.js +0 -2
  329. package/dist/templates/view_form.template.js.map +0 -1
  330. package/dist/templates/view_id_all_select.template.d.ts.map +0 -1
  331. package/dist/templates/view_id_all_select.template.js +0 -2
  332. package/dist/templates/view_id_all_select.template.js.map +0 -1
  333. package/dist/templates/view_id_async_select.template.d.ts.map +0 -1
  334. package/dist/templates/view_id_async_select.template.js +0 -2
  335. package/dist/templates/view_id_async_select.template.js.map +0 -1
  336. package/dist/templates/view_list.template.d.ts.map +0 -1
  337. package/dist/templates/view_list.template.js +0 -2
  338. package/dist/templates/view_list.template.js.map +0 -1
  339. package/dist/templates/view_list_columns.template.d.ts.map +0 -1
  340. package/dist/templates/view_list_columns.template.js +0 -2
  341. package/dist/templates/view_list_columns.template.js.map +0 -1
  342. package/dist/templates/view_search_input.template.d.ts.map +0 -1
  343. package/dist/templates/view_search_input.template.js +0 -2
  344. package/dist/templates/view_search_input.template.js.map +0 -1
  345. package/dist/testing/_relation-graph.js.map +0 -1
  346. package/dist/testing/fixture-manager.js.map +0 -1
  347. package/dist/types/types.js.map +0 -1
  348. package/dist/typings/knex.d.js.map +0 -1
  349. package/dist/utils/async-utils.js.map +0 -1
  350. package/dist/utils/controller.js.map +0 -1
  351. package/dist/utils/fs-utils.js.map +0 -1
  352. package/dist/utils/lodash-able.js.map +0 -1
  353. package/dist/utils/model.js.map +0 -1
  354. package/dist/utils/sql-parser.js.map +0 -1
  355. package/dist/utils/utils.js.map +0 -1
  356. package/dist/utils/zod-error.js.map +0 -1
  357. package/src/templates/base-template.ts +0 -19
  358. package/src/templates/index.ts +0 -1
@@ -0,0 +1,123 @@
1
+ import z from "zod";
2
+ import { EntityManager } from "../entity/entity-manager";
3
+ import { ServiceUnavailableException } from "../exceptions/so-exceptions";
4
+ import { EntityPropNode, RenderingNode } from "../types/types";
5
+ import { zodTypeToRenderingNode, propToZodType } from "./zod-converter";
6
+
7
+ /**
8
+ * 엔티티의 특정 subset을 RenderingNode로 변환합니다.
9
+ * subset의 필드들을 Zod 타입으로 변환한 후 UI 렌더링용 노드로 만듭니다.
10
+ * object와 array의 경우 적절한 pick 필드를 자동으로 선택합니다.
11
+ */
12
+ export async function getColumnsNode(
13
+ entityId: string,
14
+ subsetKey: string
15
+ ): Promise<RenderingNode> {
16
+ const entity = EntityManager.get(entityId);
17
+ const subset = entity.subsets[subsetKey];
18
+ if (subset === undefined) {
19
+ throw new ServiceUnavailableException(`Subset ${subsetKey} 가 없습니다.`);
20
+ }
21
+ const propNodes = entity.fieldExprsToPropNodes(subset);
22
+ const rootPropNode: EntityPropNode = {
23
+ nodeType: "object",
24
+ children: propNodes,
25
+ };
26
+
27
+ const columnsZodType = (await propNodeToZodType(
28
+ rootPropNode
29
+ )) as z.ZodObject<any>;
30
+
31
+ const columnsNode = zodTypeToRenderingNode(columnsZodType);
32
+ columnsNode.children = columnsNode.children!.map((child) => {
33
+ if (child.renderType === "object") {
34
+ const pickedCol = child.children!.find((cc) =>
35
+ ["title", "name"].includes(cc.name)
36
+ );
37
+ if (pickedCol) {
38
+ return {
39
+ ...child,
40
+ renderType: "object-pick",
41
+ config: {
42
+ picked: pickedCol.name,
43
+ },
44
+ };
45
+ } else {
46
+ return child;
47
+ }
48
+ } else if (
49
+ child.renderType === "array" &&
50
+ child.element &&
51
+ child.element.renderType === "object"
52
+ ) {
53
+ const pickedCol = child.element!.children!.find((cc) =>
54
+ ["title", "name"].includes(cc.name)
55
+ );
56
+ if (pickedCol) {
57
+ return {
58
+ ...child,
59
+ element: {
60
+ ...child.element,
61
+ renderType: "object-pick",
62
+ config: {
63
+ picked: pickedCol.name,
64
+ },
65
+ },
66
+ };
67
+ } else {
68
+ return child;
69
+ }
70
+ }
71
+ return child;
72
+ });
73
+
74
+ return columnsNode;
75
+ }
76
+
77
+ /**
78
+ * EntityPropNode를 Zod 타입으로 변환합니다.
79
+ * plain, array, object 세 가지 nodeType을 재귀적으로 처리합니다.
80
+ */
81
+ export async function propNodeToZodType(
82
+ propNode: EntityPropNode
83
+ ): Promise<z.ZodTypeAny> {
84
+ if (propNode.nodeType === "plain") {
85
+ return propToZodType(propNode.prop);
86
+ } else if (propNode.nodeType === "array") {
87
+ if (propNode.prop === undefined) {
88
+ throw new Error();
89
+ } else if (propNode.children.length > 0) {
90
+ return (
91
+ await propNodeToZodType({
92
+ ...propNode,
93
+ nodeType: "object",
94
+ })
95
+ ).array();
96
+ } else {
97
+ const innerType = await propToZodType(propNode.prop);
98
+ if (propNode.prop.nullable === true) {
99
+ return z.array(innerType).nullable();
100
+ } else {
101
+ return z.array(innerType);
102
+ }
103
+ }
104
+ } else if (propNode.nodeType === "object") {
105
+ const obj = await propNode.children.reduce(
106
+ async (promise, childPropNode) => {
107
+ const result = await promise;
108
+ result[childPropNode.prop!.name] =
109
+ await propNodeToZodType(childPropNode);
110
+ return result;
111
+ },
112
+ {} as any
113
+ );
114
+
115
+ if (propNode.prop?.nullable === true) {
116
+ return z.object(obj).nullable();
117
+ } else {
118
+ return z.object(obj);
119
+ }
120
+ } else {
121
+ throw Error;
122
+ }
123
+ }
@@ -0,0 +1,84 @@
1
+ import inflection from "inflection";
2
+ import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
+ import { isEnumProp, isRelationProp, RelationProp } from "../types/types";
4
+
5
+ /**
6
+ * Enum의 표시용 라벨을 가져옵니다.
7
+ * OrderBy, SearchField 등 특수한 경우와 일반 Enum을 구분하여 처리합니다.
8
+ */
9
+ export function getLabel(entityId: string, enumId: string): string {
10
+ if (enumId.endsWith("OrderBy")) {
11
+ return "정렬";
12
+ } else if (enumId.endsWith("SearchField")) {
13
+ return "검색";
14
+ } else {
15
+ const enumProp = EntityManager.get(entityId).props.find(
16
+ (prop) => `${entityId}${inflection.camelize(prop.name)}` === enumId
17
+ );
18
+ if (enumProp && enumProp.desc) {
19
+ return enumProp.desc;
20
+ }
21
+ return enumId;
22
+ }
23
+ }
24
+
25
+ /**
26
+ * 컬럼 이름으로부터 Enum 정보를 추출합니다.
27
+ * Entity의 prop 중 enum 타입인 것을 찾아 관련 정보를 반환합니다.
28
+ */
29
+ export function getEnumInfoFromColName(
30
+ entityId: string,
31
+ colName: string
32
+ ): {
33
+ id: string;
34
+ targetEntityNames: EntityNamesRecord;
35
+ targetEntityId: string;
36
+ title: string;
37
+ } {
38
+ const baseEntity = EntityManager.get(entityId);
39
+ const prop = baseEntity.props.find((p) => p.name === colName);
40
+ if (prop && isEnumProp(prop)) {
41
+ return {
42
+ id: prop.id,
43
+ targetEntityId: entityId,
44
+ targetEntityNames: EntityManager.getNamesFromId(entityId),
45
+ title: prop.desc ?? prop.id,
46
+ };
47
+ } else {
48
+ const idCandidate = inflection.camelize(
49
+ inflection.underscore(entityId) + "_" + inflection.underscore(colName),
50
+ false
51
+ );
52
+ try {
53
+ const targetEntityNames = EntityManager.getNamesFromId(entityId);
54
+ return {
55
+ id: idCandidate,
56
+ targetEntityId: entityId,
57
+ targetEntityNames: targetEntityNames,
58
+ title: idCandidate,
59
+ };
60
+ } catch {}
61
+ throw new Error(`찾을 수 없는 EnumProp ${colName}`);
62
+ }
63
+ }
64
+
65
+ /**
66
+ * 컬럼 이름으로부터 Relation prop 정보를 가져옵니다.
67
+ * 관계형 prop이 아닌 경우 에러를 발생시킵니다.
68
+ */
69
+ export function getRelationPropFromColName(
70
+ entityId: string,
71
+ colName: string
72
+ ): RelationProp {
73
+ const baseEntity = EntityManager.get(entityId);
74
+ const relProp = baseEntity.props.find((prop) => prop.name === colName);
75
+ if (isRelationProp(relProp)) {
76
+ const relEntity = EntityManager.get(relProp.with);
77
+ if (relEntity.parentId !== undefined) {
78
+ throw new Error("Only parent entities can be used as relation props");
79
+ }
80
+ return relProp;
81
+ } else {
82
+ throw new Error(`찾을 수 없는 Relation ${colName}`);
83
+ }
84
+ }
@@ -1,7 +1,7 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
4
- import { Sonamu } from "../api";
1
+ import { TemplateOptions } from "../../types/types";
2
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
+ import { Template } from "../template";
4
+ import { Sonamu } from "../../api";
5
5
 
6
6
  export class Template__entity extends Template {
7
7
  constructor() {
@@ -1,12 +1,12 @@
1
- import _ from "lodash";
2
- import { TemplateOptions } from "../types/types";
3
- import { EntityManager } from "../entity/entity-manager";
4
- import { Entity } from "../entity/entity";
5
- import { EntityPropNode } from "../types/types";
6
- import { propNodeToZodTypeDef, zodTypeToZodCode } from "../api/code-converters";
7
- import { Template } from "./base-template";
8
- import { nonNullable } from "../utils/utils";
9
- import { Sonamu } from "../api";
1
+ import * as _ from "lodash-es";
2
+ import { TemplateOptions } from "../../types/types";
3
+ import { EntityManager } from "../../entity/entity-manager";
4
+ import { Entity } from "../../entity/entity";
5
+ import { EntityPropNode } from "../../types/types";
6
+ import { propNodeToZodTypeDef, zodTypeToZodCode } from "../../api/code-converters";
7
+ import { Template } from "../template";
8
+ import { nonNullable } from "../../utils/utils";
9
+ import { Sonamu } from "../../api";
10
10
 
11
11
  export type SourceCode = {
12
12
  label: string;
@@ -1,11 +1,11 @@
1
1
  import qs from "qs";
2
2
  import { z } from "zod";
3
- import { TemplateOptions } from "../types/types";
4
- import { getZodObjectFromApi } from "../api/code-converters";
5
- import { ExtendedApi } from "../api/decorators";
6
- import { Template } from "./base-template";
3
+ import { TemplateOptions } from "../../types/types";
4
+ import { getZodObjectFromApi } from "../../api/code-converters";
5
+ import { ExtendedApi } from "../../api/decorators";
6
+ import { Template } from "../template";
7
7
  import prettier from "prettier";
8
- import { Sonamu } from "../api/sonamu";
8
+ import { Sonamu } from "../../api/sonamu";
9
9
 
10
10
  export class Template__generated_http extends Template {
11
11
  constructor() {
@@ -25,7 +25,9 @@ export class Template__generated_http extends Template {
25
25
  const {
26
26
  syncer: { types, apis },
27
27
  config: {
28
- route: { prefix },
28
+ api: {
29
+ route: { prefix },
30
+ },
29
31
  },
30
32
  } = Sonamu;
31
33
 
@@ -170,6 +172,7 @@ export class Template__generated_http extends Template {
170
172
  };
171
173
  return def;
172
174
  } catch (error) {
175
+ console.error(error);
173
176
  throw new Error(
174
177
  `Invalid zod type detected on ${api.modelName}:${api.methodName}`
175
178
  );
@@ -2,15 +2,15 @@ import {
2
2
  isManyToManyRelationProp,
3
3
  SubsetQuery,
4
4
  TemplateOptions,
5
- } from "../types/types";
6
- import { EntityManager } from "../entity/entity-manager";
7
- import { Template } from "./base-template";
5
+ } from "../../types/types";
6
+ import { EntityManager } from "../../entity/entity-manager";
7
+ import { Template } from "../template";
8
8
  import inflection from "inflection";
9
9
  import { SourceCode } from "./generated.template";
10
- import _ from "lodash";
11
- import { nonNullable } from "../utils/utils";
12
- import { Sonamu } from "../api";
13
- import { Entity } from "../entity/entity";
10
+ import * as _ from "lodash-es";
11
+ import { nonNullable } from "../../utils/utils";
12
+ import { Sonamu } from "../../api";
13
+ import { Entity } from "../../entity/entity";
14
14
 
15
15
  export class Template__generated_sso extends Template {
16
16
  constructor() {
@@ -1,7 +1,7 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
4
- import { Sonamu } from "../api";
1
+ import { TemplateOptions } from "../../types/types";
2
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
+ import { Template } from "../template";
4
+ import { Sonamu } from "../../api";
5
5
 
6
6
  export class Template__init_types extends Template {
7
7
  constructor() {
@@ -1,8 +1,9 @@
1
- import { RenderingNode, TemplateOptions } from "../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
1
+ import { TemplateOptions } from "../../types/types";
2
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
+ import { Template } from "../template";
4
4
  import { Template__view_list } from "./view_list.template";
5
- import { Sonamu } from "../api";
5
+ import { Sonamu } from "../../api";
6
+ import { getZodTypeById, zodTypeToRenderingNode } from "../zod-converter";
6
7
 
7
8
  export class Template__model extends Template {
8
9
  constructor() {
@@ -18,11 +19,10 @@ export class Template__model extends Template {
18
19
  };
19
20
  }
20
21
 
21
- render(
22
- { entityId }: TemplateOptions["model"],
23
- _columnsNode: RenderingNode,
24
- listParamsNode: RenderingNode
25
- ) {
22
+ async render({ entityId }: TemplateOptions["model"]) {
23
+ const listParamsZodType = await getZodTypeById(`${entityId}ListParams`);
24
+ const listParamsNode = zodTypeToRenderingNode(listParamsZodType);
25
+
26
26
  const names = EntityManager.getNamesFromId(entityId);
27
27
  const entity = EntityManager.get(entityId);
28
28
 
@@ -1,7 +1,7 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
4
- import { Sonamu } from "../api";
1
+ import { TemplateOptions } from "../../types/types";
2
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
+ import { Template } from "../template";
4
+ import { Sonamu } from "../../api";
5
5
 
6
6
  export class Template__model_test extends Template {
7
7
  constructor() {
@@ -26,7 +26,7 @@ export class Template__model_test extends Template {
26
26
  import { describe, test, expect } from "vitest";
27
27
  import { bootstrap } from '../../testing/bootstrap';
28
28
 
29
- bootstrap([]);
29
+ bootstrap();
30
30
  describe.skip("${entityId}ModelTest", () => {
31
31
  test("Query", async () => {
32
32
  expect(true).toBe(true);
@@ -1,18 +1,18 @@
1
1
  import inflection from "inflection";
2
- import _ from "lodash";
3
- import { TemplateOptions } from "../types/types";
4
- import { EntityNamesRecord } from "../entity/entity-manager";
5
- import { ApiParamType, ApiParam } from "../types/types";
2
+ import * as _ from "lodash-es";
3
+ import { TemplateOptions } from "../../types/types";
4
+ import { EntityNamesRecord } from "../../entity/entity-manager";
5
+ import { ApiParamType, ApiParam } from "../../types/types";
6
6
  import {
7
7
  apiParamTypeToTsType,
8
8
  apiParamToTsCode,
9
9
  unwrapPromiseOnce,
10
10
  zodTypeToTsTypeDef,
11
11
  apiParamToTsCodeAsObject,
12
- } from "../api/code-converters";
13
- import { ExtendedApi } from "../api/decorators";
14
- import { Template } from "./base-template";
15
- import { Sonamu } from "../api/sonamu";
12
+ } from "../../api/code-converters";
13
+ import { ExtendedApi } from "../../api/decorators";
14
+ import { Template } from "../template";
15
+ import { Sonamu } from "../../api/sonamu";
16
16
 
17
17
  export class Template__service extends Template {
18
18
  constructor() {
@@ -26,9 +26,17 @@ export class Template__service extends Template {
26
26
  };
27
27
  }
28
28
 
29
- render({ namesRecord }: TemplateOptions["service"], apis: ExtendedApi[]) {
29
+ render({ namesRecord }: TemplateOptions["service"]) {
30
+ const {
31
+ syncer: { apis },
32
+ } = Sonamu;
33
+
34
+ const apisForThisModel = apis.filter(
35
+ (api) => api.modelName === `${namesRecord.capital}Model`
36
+ );
37
+
30
38
  // 서비스 TypeSource
31
- const { lines, importKeys } = this.getTypeSource(apis);
39
+ const { lines, importKeys } = this.getTypeSource(apisForThisModel);
32
40
 
33
41
  // AxiosProgressEvent 있는지 확인
34
42
  const hasAxiosProgressEvent = apis.find((api) =>
@@ -110,7 +118,7 @@ export class Template__service extends Template {
110
118
  .join(", ")} }`;
111
119
 
112
120
  // 기본 URL
113
- const apiBaseUrl = `${Sonamu.config.route.prefix}${api.path}`;
121
+ const apiBaseUrl = `${Sonamu.config.api.route.prefix}${api.path}`;
114
122
 
115
123
  return [
116
124
  // 클라이언트별로 생성
@@ -1,6 +1,6 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
1
+ import { TemplateOptions } from "../../types/types";
2
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
+ import { Template } from "../template";
4
4
 
5
5
  export class Template__view_enums_buttonset extends Template {
6
6
  constructor() {
@@ -1,7 +1,7 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
4
- import inflection from "inflection";
1
+ import { TemplateOptions } from "../../types/types";
2
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
+ import { Template } from "../template";
4
+ import { getLabel } from "../helpers";
5
5
 
6
6
  export class Template__view_enums_dropdown extends Template {
7
7
  constructor() {
@@ -50,20 +50,4 @@ export function ${enumId}Dropdown(props: DropdownProps) {
50
50
  importKeys: [],
51
51
  };
52
52
  }
53
- }
54
-
55
- export function getLabel(entityId: string, enumId: string): string {
56
- if (enumId.endsWith("OrderBy")) {
57
- return "정렬";
58
- } else if (enumId.endsWith("SearchField")) {
59
- return "검색";
60
- } else {
61
- const enumProp = EntityManager.get(entityId).props.find(
62
- (prop) => `${entityId}${inflection.camelize(prop.name)}` === enumId
63
- );
64
- if (enumProp && enumProp.desc) {
65
- return enumProp.desc;
66
- }
67
- return enumId;
68
- }
69
- }
53
+ }
@@ -1,7 +1,7 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
4
- import { getLabel } from "./view_enums_dropdown.template";
1
+ import { TemplateOptions } from "../../types/types";
2
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
+ import { Template } from "../template";
4
+ import { getLabel } from "../helpers";
5
5
 
6
6
  export class Template__view_enums_select extends Template {
7
7
  constructor() {
@@ -1,14 +1,12 @@
1
1
  import inflection from "inflection";
2
2
  import { z } from "zod";
3
- import { RenderingNode, TemplateKey, TemplateOptions } from "../types/types";
4
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
5
- import { RenderedTemplate } from "../syncer/syncer";
6
- import { Template } from "./base-template";
7
- import {
8
- getEnumInfoFromColName,
9
- getRelationPropFromColName,
10
- } from "./view_list.template";
11
- import _ from "lodash";
3
+ import { RenderingNode, TemplateKey, TemplateOptions } from "../../types/types";
4
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
5
+ import { RenderedTemplate } from "../template";
6
+ import { Template } from "../template";
7
+ import { getRelationPropFromColName, getEnumInfoFromColName } from "../helpers";
8
+ import * as _ from "lodash-es";
9
+ import { getZodTypeById, zodTypeToRenderingNode } from "../zod-converter";
12
10
 
13
11
  export class Template__view_form extends Template {
14
12
  constructor() {
@@ -173,10 +171,10 @@ export class Template__view_form extends Template {
173
171
  );
174
172
  }
175
173
 
176
- render(
177
- { entityId }: TemplateOptions["view_form"],
178
- saveParamsNode: RenderingNode
179
- ) {
174
+ async render({ entityId }: TemplateOptions["view_form"]) {
175
+ const saveParamsZodType = await getZodTypeById(`${entityId}SaveParams`);
176
+ const saveParamsNode = zodTypeToRenderingNode(saveParamsZodType);
177
+
180
178
  const entity = EntityManager.get(entityId);
181
179
  const names = EntityManager.getNamesFromId(entityId);
182
180
  const columns = (saveParamsNode.children as RenderingNode[])
@@ -1,6 +1,6 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
1
+ import { TemplateOptions } from "../../types/types";
2
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
+ import { Template } from "../template";
4
4
 
5
5
  export class Template__view_id_all_select extends Template {
6
6
  constructor() {
@@ -1,6 +1,6 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
1
+ import { TemplateOptions } from "../../types/types";
2
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
+ import { Template } from "../template";
4
4
 
5
5
  export class Template__view_id_async_select extends Template {
6
6
  constructor() {
@@ -1,11 +1,13 @@
1
1
  import inflection from "inflection";
2
- import _ from "lodash";
2
+ import * as _ from "lodash-es";
3
3
  import { z } from "zod";
4
- import { RenderingNode, TemplateKey, TemplateOptions } from "../types/types";
5
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
6
- import { isEnumProp, isRelationProp, RelationProp } from "../types/types";
7
- import { RenderedTemplate } from "../syncer/syncer";
8
- import { Template } from "./base-template";
4
+ import { RenderingNode, TemplateKey, TemplateOptions } from "../../types/types";
5
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
6
+ import { getRelationPropFromColName, getEnumInfoFromColName } from "../helpers";
7
+ import { RenderedTemplate } from "../template";
8
+ import { Template } from "../template";
9
+ import { zodTypeToRenderingNode, getZodTypeById } from "../zod-converter";
10
+ import { getColumnsNode } from "../entity-converter";
9
11
 
10
12
  export class Template__view_list extends Template {
11
13
  constructor() {
@@ -234,11 +236,11 @@ export class Template__view_list extends Template {
234
236
  return def;
235
237
  }
236
238
 
237
- render(
238
- { entityId }: TemplateOptions["view_list"],
239
- columnsNode: RenderingNode,
240
- listParamsNode: RenderingNode
241
- ) {
239
+ async render({ entityId }: TemplateOptions["view_list"]) {
240
+ const columnsNode = await getColumnsNode(entityId, "A");
241
+ const listParamsZodType = await getZodTypeById(`${entityId}ListParams`);
242
+ const listParamsNode = zodTypeToRenderingNode(listParamsZodType);
243
+
242
244
  const names = EntityManager.getNamesFromId(entityId);
243
245
  const entity = EntityManager.get(entityId);
244
246
 
@@ -565,56 +567,3 @@ export default function ${names.capital}List({}: ${names.capital}ListProps) {
565
567
  };
566
568
  }
567
569
  }
568
-
569
- export function getEnumInfoFromColName(
570
- entityId: string,
571
- colName: string
572
- ): {
573
- id: string;
574
- targetEntityNames: EntityNamesRecord;
575
- targetEntityId: string;
576
- title: string;
577
- } {
578
- const baseEntity = EntityManager.get(entityId);
579
- const prop = baseEntity.props.find((p) => p.name === colName);
580
- if (prop && isEnumProp(prop)) {
581
- return {
582
- id: prop.id,
583
- targetEntityId: entityId,
584
- targetEntityNames: EntityManager.getNamesFromId(entityId),
585
- title: prop.desc ?? prop.id,
586
- };
587
- } else {
588
- const idCandidate = inflection.camelize(
589
- inflection.underscore(entityId) + "_" + inflection.underscore(colName),
590
- false
591
- );
592
- try {
593
- const targetEntityNames = EntityManager.getNamesFromId(entityId);
594
- return {
595
- id: idCandidate,
596
- targetEntityId: entityId,
597
- targetEntityNames: targetEntityNames,
598
- title: idCandidate,
599
- };
600
- } catch {}
601
- throw new Error(`찾을 수 없는 EnumProp ${colName}`);
602
- }
603
- }
604
-
605
- export function getRelationPropFromColName(
606
- entityId: string,
607
- colName: string
608
- ): RelationProp {
609
- const baseEntity = EntityManager.get(entityId);
610
- const relProp = baseEntity.props.find((prop) => prop.name === colName);
611
- if (isRelationProp(relProp)) {
612
- const relEntity = EntityManager.get(relProp.with);
613
- if (relEntity.parentId !== undefined) {
614
- throw new Error("Only parent entities can be used as relation props");
615
- }
616
- return relProp;
617
- } else {
618
- throw new Error(`찾을 수 없는 Relation ${colName}`);
619
- }
620
- }
@@ -1,6 +1,6 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
1
+ import { TemplateOptions } from "../../types/types";
2
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
+ import { Template } from "../template";
4
4
 
5
5
  export class Template__view_list_columns extends Template {
6
6
  constructor() {
@@ -1,6 +1,6 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityManager, EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
1
+ import { TemplateOptions } from "../../types/types";
2
+ import { EntityManager, EntityNamesRecord } from "../../entity/entity-manager";
3
+ import { Template } from "../template";
4
4
 
5
5
  export class Template__view_search_input extends Template {
6
6
  constructor() {