sonamu 0.6.0 → 0.7.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 (406) hide show
  1. package/.swcrc.project-default +18 -0
  2. package/bin/cli.js +24 -0
  3. package/dist/ai/agents/agent.d.ts +11 -0
  4. package/dist/ai/agents/agent.d.ts.map +1 -0
  5. package/dist/ai/agents/agent.js +65 -0
  6. package/dist/ai/agents/index.d.ts +3 -0
  7. package/dist/ai/agents/index.d.ts.map +1 -0
  8. package/dist/ai/agents/index.js +4 -0
  9. package/dist/ai/agents/types.d.ts +43 -0
  10. package/dist/ai/agents/types.d.ts.map +1 -0
  11. package/dist/ai/agents/types.js +3 -0
  12. package/dist/ai/index.d.ts +2 -0
  13. package/dist/ai/index.d.ts.map +1 -0
  14. package/dist/ai/index.js +3 -0
  15. package/dist/ai/providers/rtzr/api.d.ts +22 -0
  16. package/dist/ai/providers/rtzr/api.d.ts.map +1 -0
  17. package/dist/ai/providers/rtzr/api.js +28 -0
  18. package/dist/ai/providers/rtzr/error.d.ts +18 -0
  19. package/dist/ai/providers/rtzr/error.d.ts.map +1 -0
  20. package/dist/ai/providers/rtzr/error.js +29 -0
  21. package/dist/ai/providers/rtzr/index.d.ts +5 -0
  22. package/dist/ai/providers/rtzr/index.d.ts.map +1 -0
  23. package/dist/ai/providers/rtzr/index.js +6 -0
  24. package/dist/ai/providers/rtzr/model.d.ts +52 -0
  25. package/dist/ai/providers/rtzr/model.d.ts.map +1 -0
  26. package/dist/ai/providers/rtzr/model.js +137 -0
  27. package/dist/ai/providers/rtzr/options.d.ts +7 -0
  28. package/dist/ai/providers/rtzr/options.d.ts.map +1 -0
  29. package/dist/ai/providers/rtzr/options.js +47 -0
  30. package/dist/ai/providers/rtzr/provider.d.ts +18 -0
  31. package/dist/ai/providers/rtzr/provider.d.ts.map +1 -0
  32. package/dist/ai/providers/rtzr/provider.js +54 -0
  33. package/dist/ai/providers/rtzr/utils.d.ts +19 -0
  34. package/dist/ai/providers/rtzr/utils.d.ts.map +1 -0
  35. package/dist/ai/providers/rtzr/utils.js +88 -0
  36. package/dist/api/base-frame.d.ts +2 -2
  37. package/dist/api/base-frame.d.ts.map +1 -1
  38. package/dist/api/base-frame.js +2 -1
  39. package/dist/api/caster.d.ts.map +1 -1
  40. package/dist/api/caster.js +6 -1
  41. package/dist/api/code-converters.d.ts +58 -14
  42. package/dist/api/code-converters.d.ts.map +1 -1
  43. package/dist/api/code-converters.js +178 -409
  44. package/dist/api/config.d.ts +27 -13
  45. package/dist/api/config.d.ts.map +1 -1
  46. package/dist/api/config.js +19 -26
  47. package/dist/api/context.d.ts +4 -3
  48. package/dist/api/context.d.ts.map +1 -1
  49. package/dist/api/context.js +1 -1
  50. package/dist/api/decorators.d.ts +20 -6
  51. package/dist/api/decorators.d.ts.map +1 -1
  52. package/dist/api/decorators.js +111 -18
  53. package/dist/api/index.d.ts +2 -2
  54. package/dist/api/index.d.ts.map +1 -1
  55. package/dist/api/index.js +3 -3
  56. package/dist/api/sonamu.d.ts +7 -7
  57. package/dist/api/sonamu.d.ts.map +1 -1
  58. package/dist/api/sonamu.js +83 -51
  59. package/dist/api/validator.d.ts +6 -0
  60. package/dist/api/validator.d.ts.map +1 -0
  61. package/dist/api/validator.js +81 -0
  62. package/dist/bin/build-config.d.ts +5 -1
  63. package/dist/bin/build-config.d.ts.map +1 -1
  64. package/dist/bin/build-config.js +5 -2
  65. package/dist/bin/cli.js +165 -64
  66. package/dist/bin/loader-register.d.ts +2 -0
  67. package/dist/bin/loader-register.d.ts.map +1 -0
  68. package/dist/bin/loader-register.js +34 -0
  69. package/dist/database/_batch_update.d.ts +5 -3
  70. package/dist/database/_batch_update.d.ts.map +1 -1
  71. package/dist/database/_batch_update.js +30 -13
  72. package/dist/database/base-model.d.ts +96 -10
  73. package/dist/database/base-model.d.ts.map +1 -1
  74. package/dist/database/base-model.js +232 -89
  75. package/dist/database/base-model.types.d.ts +93 -0
  76. package/dist/database/base-model.types.d.ts.map +1 -0
  77. package/dist/database/base-model.types.js +10 -0
  78. package/dist/database/code-generator.d.ts +1 -1
  79. package/dist/database/code-generator.d.ts.map +1 -1
  80. package/dist/database/code-generator.js +11 -10
  81. package/dist/database/db.d.ts +5 -6
  82. package/dist/database/db.d.ts.map +1 -1
  83. package/dist/database/db.js +22 -25
  84. package/dist/database/puri-subset.test-d.js +81 -0
  85. package/dist/database/puri-subset.types.d.ts +123 -0
  86. package/dist/database/puri-subset.types.d.ts.map +1 -0
  87. package/dist/database/puri-subset.types.js +16 -0
  88. package/dist/database/puri-wrapper.d.ts +13 -11
  89. package/dist/database/puri-wrapper.d.ts.map +1 -1
  90. package/dist/database/puri-wrapper.js +2 -2
  91. package/dist/database/puri.d.ts +25 -14
  92. package/dist/database/puri.d.ts.map +1 -1
  93. package/dist/database/puri.js +83 -21
  94. package/dist/database/puri.types.d.ts +21 -7
  95. package/dist/database/puri.types.d.ts.map +1 -1
  96. package/dist/database/puri.types.js +4 -1
  97. package/dist/database/transaction-context.d.ts +1 -1
  98. package/dist/database/transaction-context.d.ts.map +1 -1
  99. package/dist/database/transaction-context.js +1 -1
  100. package/dist/database/upsert-builder.d.ts +9 -3
  101. package/dist/database/upsert-builder.d.ts.map +1 -1
  102. package/dist/database/upsert-builder.js +228 -78
  103. package/dist/entity/entity-manager.d.ts +165 -2
  104. package/dist/entity/entity-manager.d.ts.map +1 -1
  105. package/dist/entity/entity-manager.js +26 -10
  106. package/dist/entity/entity.d.ts +5 -3
  107. package/dist/entity/entity.d.ts.map +1 -1
  108. package/dist/entity/entity.js +153 -54
  109. package/dist/exceptions/error-handler.d.ts +1 -1
  110. package/dist/exceptions/error-handler.d.ts.map +1 -1
  111. package/dist/exceptions/error-handler.js +1 -1
  112. package/dist/exceptions/so-exceptions.d.ts +1 -1
  113. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  114. package/dist/exceptions/so-exceptions.js +1 -1
  115. package/dist/file-storage/driver.d.ts +1 -1
  116. package/dist/file-storage/driver.d.ts.map +1 -1
  117. package/dist/file-storage/driver.js +1 -1
  118. package/dist/file-storage/file-storage.js +2 -2
  119. package/dist/index.d.ts +18 -11
  120. package/dist/index.d.ts.map +1 -1
  121. package/dist/index.js +19 -13
  122. package/dist/migration/code-generation.d.ts +1 -1
  123. package/dist/migration/code-generation.d.ts.map +1 -1
  124. package/dist/migration/code-generation.js +123 -67
  125. package/dist/migration/migration-set.d.ts +2 -10
  126. package/dist/migration/migration-set.d.ts.map +1 -1
  127. package/dist/migration/migration-set.js +67 -218
  128. package/dist/migration/migrator.d.ts +24 -73
  129. package/dist/migration/migrator.d.ts.map +1 -1
  130. package/dist/migration/migrator.js +121 -301
  131. package/dist/migration/postgresql-schema-reader.d.ts +51 -0
  132. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -0
  133. package/dist/migration/postgresql-schema-reader.js +245 -0
  134. package/dist/migration/types.d.ts +6 -38
  135. package/dist/migration/types.d.ts.map +1 -1
  136. package/dist/migration/types.js +1 -1
  137. package/dist/naite/messaging-types.d.ts +43 -0
  138. package/dist/naite/messaging-types.d.ts.map +1 -0
  139. package/dist/naite/messaging-types.js +7 -0
  140. package/dist/naite/naite-reporter.d.ts +41 -0
  141. package/dist/naite/naite-reporter.d.ts.map +1 -0
  142. package/dist/naite/naite-reporter.js +102 -0
  143. package/dist/naite/naite.d.ts +91 -8
  144. package/dist/naite/naite.d.ts.map +1 -1
  145. package/dist/naite/naite.js +285 -41
  146. package/dist/stream/sse.d.ts +2 -2
  147. package/dist/stream/sse.d.ts.map +1 -1
  148. package/dist/stream/sse.js +1 -1
  149. package/dist/syncer/api-parser.d.ts +3 -13
  150. package/dist/syncer/api-parser.d.ts.map +1 -1
  151. package/dist/syncer/api-parser.js +67 -56
  152. package/dist/syncer/checksum.d.ts +2 -2
  153. package/dist/syncer/checksum.d.ts.map +1 -1
  154. package/dist/syncer/checksum.js +11 -11
  155. package/dist/syncer/code-generator.d.ts +3 -3
  156. package/dist/syncer/code-generator.d.ts.map +1 -1
  157. package/dist/syncer/code-generator.js +37 -17
  158. package/dist/syncer/entity-operations.d.ts +2 -2
  159. package/dist/syncer/entity-operations.d.ts.map +1 -1
  160. package/dist/syncer/entity-operations.js +9 -8
  161. package/dist/syncer/file-patterns.d.ts +1 -1
  162. package/dist/syncer/file-patterns.d.ts.map +1 -1
  163. package/dist/syncer/file-patterns.js +1 -1
  164. package/dist/syncer/index.d.ts +4 -4
  165. package/dist/syncer/index.d.ts.map +1 -1
  166. package/dist/syncer/index.js +5 -5
  167. package/dist/syncer/module-loader.d.ts +4 -4
  168. package/dist/syncer/module-loader.d.ts.map +1 -1
  169. package/dist/syncer/module-loader.js +17 -12
  170. package/dist/syncer/syncer.d.ts +31 -24
  171. package/dist/syncer/syncer.d.ts.map +1 -1
  172. package/dist/syncer/syncer.js +92 -45
  173. package/dist/template/entity-converter.d.ts +1 -1
  174. package/dist/template/entity-converter.d.ts.map +1 -1
  175. package/dist/template/entity-converter.js +15 -8
  176. package/dist/template/helpers.d.ts +2 -2
  177. package/dist/template/helpers.d.ts.map +1 -1
  178. package/dist/template/helpers.js +3 -3
  179. package/dist/template/implementations/entity.template.d.ts +2 -2
  180. package/dist/template/implementations/entity.template.d.ts.map +1 -1
  181. package/dist/template/implementations/entity.template.js +4 -5
  182. package/dist/template/implementations/generated.template.d.ts +2 -3
  183. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  184. package/dist/template/implementations/generated.template.js +46 -29
  185. package/dist/template/implementations/generated_http.template.d.ts +2 -3
  186. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  187. package/dist/template/implementations/generated_http.template.js +9 -9
  188. package/dist/template/implementations/generated_sso.template.d.ts +3 -4
  189. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  190. package/dist/template/implementations/generated_sso.template.js +54 -25
  191. package/dist/template/implementations/init_types.template.d.ts +2 -2
  192. package/dist/template/implementations/init_types.template.d.ts.map +1 -1
  193. package/dist/template/implementations/init_types.template.js +2 -2
  194. package/dist/template/implementations/model.template.d.ts +2 -2
  195. package/dist/template/implementations/model.template.d.ts.map +1 -1
  196. package/dist/template/implementations/model.template.js +47 -37
  197. package/dist/template/implementations/model_test.template.d.ts +2 -2
  198. package/dist/template/implementations/model_test.template.d.ts.map +1 -1
  199. package/dist/template/implementations/model_test.template.js +2 -2
  200. package/dist/template/implementations/service.template.d.ts +4 -4
  201. package/dist/template/implementations/service.template.d.ts.map +1 -1
  202. package/dist/template/implementations/service.template.js +24 -16
  203. package/dist/template/implementations/view_enums_buttonset.template.d.ts +2 -2
  204. package/dist/template/implementations/view_enums_buttonset.template.d.ts.map +1 -1
  205. package/dist/template/implementations/view_enums_buttonset.template.js +1 -1
  206. package/dist/template/implementations/view_enums_dropdown.template.d.ts +2 -2
  207. package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +1 -1
  208. package/dist/template/implementations/view_enums_dropdown.template.js +2 -2
  209. package/dist/template/implementations/view_enums_select.template.d.ts +2 -2
  210. package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -1
  211. package/dist/template/implementations/view_enums_select.template.js +2 -2
  212. package/dist/template/implementations/view_form.template.d.ts +2 -2
  213. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  214. package/dist/template/implementations/view_form.template.js +4 -4
  215. package/dist/template/implementations/view_id_all_select.template.d.ts +2 -2
  216. package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -1
  217. package/dist/template/implementations/view_id_all_select.template.js +1 -1
  218. package/dist/template/implementations/view_id_async_select.template.d.ts +2 -2
  219. package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -1
  220. package/dist/template/implementations/view_id_async_select.template.js +1 -1
  221. package/dist/template/implementations/view_list.template.d.ts +2 -2
  222. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  223. package/dist/template/implementations/view_list.template.js +29 -19
  224. package/dist/template/implementations/view_list_columns.template.d.ts +3 -3
  225. package/dist/template/implementations/view_list_columns.template.d.ts.map +1 -1
  226. package/dist/template/implementations/view_list_columns.template.js +1 -1
  227. package/dist/template/implementations/view_search_input.template.d.ts +2 -2
  228. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
  229. package/dist/template/implementations/view_search_input.template.js +1 -1
  230. package/dist/template/index.d.ts +4 -2
  231. package/dist/template/index.d.ts.map +1 -1
  232. package/dist/template/index.js +5 -3
  233. package/dist/template/template-manager.d.ts +56 -0
  234. package/dist/template/template-manager.d.ts.map +1 -0
  235. package/dist/template/template-manager.js +125 -0
  236. package/dist/template/template-types.d.ts +16 -0
  237. package/dist/template/template-types.d.ts.map +1 -0
  238. package/dist/template/template-types.js +7 -0
  239. package/dist/template/template.d.ts +12 -2
  240. package/dist/template/template.d.ts.map +1 -1
  241. package/dist/template/template.js +19 -6
  242. package/dist/template/zod-converter.d.ts +40 -7
  243. package/dist/template/zod-converter.d.ts.map +1 -1
  244. package/dist/template/zod-converter.js +341 -58
  245. package/dist/testing/_relation-graph.d.ts +1 -1
  246. package/dist/testing/_relation-graph.d.ts.map +1 -1
  247. package/dist/testing/_relation-graph.js +12 -3
  248. package/dist/testing/fixture-manager.d.ts +42 -11
  249. package/dist/testing/fixture-manager.d.ts.map +1 -1
  250. package/dist/testing/fixture-manager.js +338 -236
  251. package/dist/types/types.d.ts +709 -104
  252. package/dist/types/types.d.ts.map +1 -1
  253. package/dist/types/types.js +309 -52
  254. package/dist/typings/knex.d.js +2 -2
  255. package/dist/utils/async-utils.d.ts.map +1 -1
  256. package/dist/utils/async-utils.js +3 -3
  257. package/dist/utils/console-util.js +1 -1
  258. package/dist/utils/controller.d.ts +1 -0
  259. package/dist/utils/controller.d.ts.map +1 -1
  260. package/dist/utils/controller.js +4 -1
  261. package/dist/utils/esm-utils.d.ts +0 -6
  262. package/dist/utils/esm-utils.d.ts.map +1 -1
  263. package/dist/utils/esm-utils.js +2 -9
  264. package/dist/utils/formatter.d.ts +3 -0
  265. package/dist/utils/formatter.d.ts.map +1 -0
  266. package/dist/utils/formatter.js +110 -0
  267. package/dist/utils/fs-utils.d.ts +1 -1
  268. package/dist/utils/fs-utils.d.ts.map +1 -1
  269. package/dist/utils/fs-utils.js +1 -1
  270. package/dist/utils/lodash-able.d.ts.map +1 -1
  271. package/dist/utils/lodash-able.js +1 -1
  272. package/dist/utils/object-utils.d.ts +44 -0
  273. package/dist/utils/object-utils.d.ts.map +1 -0
  274. package/dist/utils/object-utils.js +191 -0
  275. package/dist/utils/path-utils.d.ts +1 -1
  276. package/dist/utils/path-utils.d.ts.map +1 -1
  277. package/dist/utils/path-utils.js +3 -3
  278. package/dist/utils/process-utils.js +1 -1
  279. package/dist/utils/sql-parser.d.ts +5 -1
  280. package/dist/utils/sql-parser.d.ts.map +1 -1
  281. package/dist/utils/sql-parser.js +14 -3
  282. package/dist/utils/type-utils.d.ts +23 -0
  283. package/dist/utils/type-utils.d.ts.map +1 -0
  284. package/dist/utils/type-utils.js +45 -0
  285. package/dist/utils/utils.d.ts +7 -1
  286. package/dist/utils/utils.d.ts.map +1 -1
  287. package/dist/utils/utils.js +44 -5
  288. package/dist/utils/zod-error.d.ts +1 -1
  289. package/dist/utils/zod-error.d.ts.map +1 -1
  290. package/dist/utils/zod-error.js +1 -1
  291. package/package.json +54 -29
  292. package/src/ai/agents/agent.ts +87 -0
  293. package/src/ai/agents/index.ts +2 -0
  294. package/src/ai/agents/types.ts +47 -0
  295. package/src/ai/index.ts +1 -0
  296. package/src/ai/providers/rtzr/api.ts +37 -0
  297. package/src/ai/providers/rtzr/error.ts +34 -0
  298. package/src/ai/providers/rtzr/index.ts +4 -0
  299. package/src/ai/providers/rtzr/model.ts +201 -0
  300. package/src/ai/providers/rtzr/options.ts +49 -0
  301. package/src/ai/providers/rtzr/provider.ts +91 -0
  302. package/src/ai/providers/rtzr/utils.ts +127 -0
  303. package/src/api/base-frame.ts +4 -2
  304. package/src/api/caster.ts +17 -23
  305. package/src/api/code-converters.ts +176 -533
  306. package/src/api/config.ts +39 -56
  307. package/src/api/context.ts +7 -18
  308. package/src/api/decorators.ts +175 -46
  309. package/src/api/index.ts +2 -2
  310. package/src/api/sonamu.ts +133 -124
  311. package/src/api/validator.ts +83 -0
  312. package/src/bin/build-config.ts +7 -1
  313. package/src/bin/cli.ts +192 -110
  314. package/src/bin/loader-register.ts +38 -0
  315. package/src/database/_batch_update.ts +46 -31
  316. package/src/database/base-model.ts +390 -182
  317. package/src/database/base-model.types.ts +155 -0
  318. package/src/database/code-generator.ts +13 -32
  319. package/src/database/db.ts +36 -50
  320. package/src/database/puri-subset.test-d.ts +471 -0
  321. package/src/database/puri-subset.types.ts +195 -0
  322. package/src/database/puri-wrapper.ts +58 -67
  323. package/src/database/puri.ts +182 -126
  324. package/src/database/puri.types.ts +64 -31
  325. package/src/database/transaction-context.ts +1 -1
  326. package/src/database/upsert-builder.ts +262 -132
  327. package/src/entity/entity-manager.ts +36 -28
  328. package/src/entity/entity.ts +330 -249
  329. package/src/exceptions/error-handler.ts +3 -3
  330. package/src/exceptions/so-exceptions.ts +11 -11
  331. package/src/file-storage/driver.ts +5 -5
  332. package/src/file-storage/file-storage.ts +2 -2
  333. package/src/index.ts +18 -12
  334. package/src/migration/code-generation.ts +185 -172
  335. package/src/migration/migration-set.ts +80 -293
  336. package/src/migration/migrator.ts +182 -425
  337. package/src/migration/mysql-schema-reader.ts.txt +272 -0
  338. package/src/migration/postgresql-schema-reader.ts +310 -0
  339. package/src/migration/types.ts +6 -39
  340. package/src/naite/messaging-types.ts +51 -0
  341. package/src/naite/naite-reporter.ts +128 -0
  342. package/src/naite/naite.ts +378 -33
  343. package/src/shared/web.shared.ts.txt +20 -24
  344. package/src/stream/sse.ts +5 -5
  345. package/src/syncer/api-parser.ts +52 -69
  346. package/src/syncer/checksum.ts +25 -37
  347. package/src/syncer/code-generator.ts +58 -62
  348. package/src/syncer/entity-operations.ts +12 -15
  349. package/src/syncer/file-patterns.ts +2 -2
  350. package/src/syncer/index.ts +4 -4
  351. package/src/syncer/module-loader.ts +28 -25
  352. package/src/syncer/syncer.ts +155 -162
  353. package/src/template/entity-converter.ts +18 -27
  354. package/src/template/helpers.ts +8 -11
  355. package/src/template/implementations/entity.template.ts +6 -6
  356. package/src/template/implementations/generated.template.ts +99 -99
  357. package/src/template/implementations/generated_http.template.ts +21 -54
  358. package/src/template/implementations/generated_sso.template.ts +78 -65
  359. package/src/template/implementations/init_types.template.ts +4 -6
  360. package/src/template/implementations/model.template.ts +47 -38
  361. package/src/template/implementations/model_test.template.ts +3 -3
  362. package/src/template/implementations/service.template.ts +56 -80
  363. package/src/template/implementations/view_enums_buttonset.template.ts +2 -2
  364. package/src/template/implementations/view_enums_dropdown.template.ts +4 -4
  365. package/src/template/implementations/view_enums_select.template.ts +3 -3
  366. package/src/template/implementations/view_form.template.ts +34 -75
  367. package/src/template/implementations/view_id_all_select.template.ts +2 -2
  368. package/src/template/implementations/view_id_async_select.template.ts +9 -23
  369. package/src/template/implementations/view_list.template.ts +54 -95
  370. package/src/template/implementations/view_list_columns.template.ts +4 -10
  371. package/src/template/implementations/view_search_input.template.ts +2 -2
  372. package/src/template/index.ts +4 -2
  373. package/src/template/template-manager.ts +166 -0
  374. package/src/template/template-types.ts +16 -0
  375. package/src/template/template.ts +29 -10
  376. package/src/template/zod-converter.ts +407 -101
  377. package/src/testing/_relation-graph.ts +18 -11
  378. package/src/testing/fixture-manager.ts +468 -362
  379. package/src/types/types.ts +516 -248
  380. package/src/typings/knex.d.ts +7 -9
  381. package/src/utils/async-utils.ts +8 -12
  382. package/src/utils/console-util.ts +1 -1
  383. package/src/utils/controller.ts +3 -0
  384. package/src/utils/esm-utils.ts +8 -18
  385. package/src/utils/formatter.ts +109 -0
  386. package/src/utils/fs-utils.ts +1 -1
  387. package/src/utils/lodash-able.ts +1 -4
  388. package/src/utils/object-utils.ts +217 -0
  389. package/src/utils/path-utils.ts +3 -6
  390. package/src/utils/process-utils.ts +1 -1
  391. package/src/utils/sql-parser.ts +23 -5
  392. package/src/utils/type-utils.ts +83 -0
  393. package/src/utils/utils.ts +58 -9
  394. package/src/utils/zod-error.ts +3 -3
  395. package/dist/bin/cli-wrapper.d.ts +0 -3
  396. package/dist/bin/cli-wrapper.d.ts.map +0 -1
  397. package/dist/bin/cli-wrapper.js +0 -72
  398. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +0 -2
  399. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +0 -1
  400. package/dist/database/knex-plugins/knex-on-duplicate-update.js +0 -39
  401. package/dist/entity/entity-utils.d.ts +0 -61
  402. package/dist/entity/entity-utils.d.ts.map +0 -1
  403. package/dist/entity/entity-utils.js +0 -210
  404. package/src/bin/cli-wrapper.ts +0 -82
  405. package/src/database/knex-plugins/knex-on-duplicate-update.ts +0 -45
  406. package/src/entity/entity-utils.ts +0 -291
@@ -11,7 +11,7 @@ import { isEnumProp, isRelationProp } from "../types/types.js";
11
11
  return "검색";
12
12
  } else {
13
13
  const enumProp = EntityManager.get(entityId).props.find((prop)=>`${entityId}${inflection.camelize(prop.name)}` === enumId);
14
- if (enumProp && enumProp.desc) {
14
+ if (enumProp?.desc) {
15
15
  return enumProp.desc;
16
16
  }
17
17
  return enumId;
@@ -31,7 +31,7 @@ import { isEnumProp, isRelationProp } from "../types/types.js";
31
31
  title: prop.desc ?? prop.id
32
32
  };
33
33
  } else {
34
- const idCandidate = inflection.camelize(inflection.underscore(entityId) + "_" + inflection.underscore(colName), false);
34
+ const idCandidate = inflection.camelize(`${inflection.underscore(entityId)}_${inflection.underscore(colName)}`, false);
35
35
  try {
36
36
  const targetEntityNames = EntityManager.getNamesFromId(entityId);
37
37
  return {
@@ -61,4 +61,4 @@ import { isEnumProp, isRelationProp } from "../types/types.js";
61
61
  }
62
62
  }
63
63
 
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS9oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW51bVByb3AsIGlzUmVsYXRpb25Qcm9wLCBSZWxhdGlvblByb3AgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuLyoqXG4gKiBFbnVt7J2YIO2RnOyLnOyaqSDrnbzrsqjsnYQg6rCA7KC47Ji164uI64ukLlxuICogT3JkZXJCeSwgU2VhcmNoRmllbGQg65OxIO2KueyImO2VnCDqsr3smrDsmYAg7J2867CYIEVudW3snYQg6rWs67aE7ZWY7JesIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExhYmVsKGVudGl0eUlkOiBzdHJpbmcsIGVudW1JZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGVudW1JZC5lbmRzV2l0aChcIk9yZGVyQnlcIikpIHtcbiAgICByZXR1cm4gXCLsoJXroKxcIjtcbiAgfSBlbHNlIGlmIChlbnVtSWQuZW5kc1dpdGgoXCJTZWFyY2hGaWVsZFwiKSkge1xuICAgIHJldHVybiBcIuqygOyDiVwiO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVudW1Qcm9wID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpLnByb3BzLmZpbmQoXG4gICAgICAocHJvcCkgPT4gYCR7ZW50aXR5SWR9JHtpbmZsZWN0aW9uLmNhbWVsaXplKHByb3AubmFtZSl9YCA9PT0gZW51bUlkXG4gICAgKTtcbiAgICBpZiAoZW51bVByb3AgJiYgZW51bVByb3AuZGVzYykge1xuICAgICAgcmV0dXJuIGVudW1Qcm9wLmRlc2M7XG4gICAgfVxuICAgIHJldHVybiBlbnVtSWQ7XG4gIH1cbn1cblxuLyoqXG4gKiDsu6zrn7wg7J2066aE7Jy866Gc67aA7YSwIEVudW0g7KCV67O066W8IOy2lOy2nO2VqeuLiOuLpC5cbiAqIEVudGl0eeydmCBwcm9wIOykkSBlbnVtIO2DgOyeheyduCDqsoPsnYQg7LC+7JWEIOq0gOugqCDsoJXrs7Trpbwg67CY7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShcbiAgZW50aXR5SWQ6IHN0cmluZyxcbiAgY29sTmFtZTogc3RyaW5nXG4pOiB7XG4gIGlkOiBzdHJpbmc7XG4gIHRhcmdldEVudGl0eU5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZDtcbiAgdGFyZ2V0RW50aXR5SWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbn0ge1xuICBjb25zdCBiYXNlRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICBjb25zdCBwcm9wID0gYmFzZUVudGl0eS5wcm9wcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IGNvbE5hbWUpO1xuICBpZiAocHJvcCAmJiBpc0VudW1Qcm9wKHByb3ApKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBwcm9wLmlkLFxuICAgICAgdGFyZ2V0RW50aXR5SWQ6IGVudGl0eUlkLFxuICAgICAgdGFyZ2V0RW50aXR5TmFtZXM6IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpLFxuICAgICAgdGl0bGU6IHByb3AuZGVzYyA/PyBwcm9wLmlkLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgaWRDYW5kaWRhdGUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKFxuICAgICAgaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eUlkKSArIFwiX1wiICsgaW5mbGVjdGlvbi51bmRlcnNjb3JlKGNvbE5hbWUpLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGlkQ2FuZGlkYXRlLFxuICAgICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICAgIHRhcmdldEVudGl0eU5hbWVzOiB0YXJnZXRFbnRpdHlOYW1lcyxcbiAgICAgICAgdGl0bGU6IGlkQ2FuZGlkYXRlLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHt9XG4gICAgdGhyb3cgbmV3IEVycm9yKGDssL7snYQg7IiYIOyXhuuKlCBFbnVtUHJvcCAke2NvbE5hbWV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiDsu6zrn7wg7J2066aE7Jy866Gc67aA7YSwIFJlbGF0aW9uIHByb3Ag7KCV67O066W8IOqwgOyguOyYteuLiOuLpC5cbiAqIOq0gOqzhO2YlSBwcm9w7J20IOyVhOuLjCDqsr3smrAg7JeQ65+s66W8IOuwnOyDneyLnO2CteuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKFxuICBlbnRpdHlJZDogc3RyaW5nLFxuICBjb2xOYW1lOiBzdHJpbmdcbik6IFJlbGF0aW9uUHJvcCB7XG4gIGNvbnN0IGJhc2VFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGNvbnN0IHJlbFByb3AgPSBiYXNlRW50aXR5LnByb3BzLmZpbmQoKHByb3ApID0+IHByb3AubmFtZSA9PT0gY29sTmFtZSk7XG4gIGlmIChpc1JlbGF0aW9uUHJvcChyZWxQcm9wKSkge1xuICAgIGNvbnN0IHJlbEVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHJlbFByb3Aud2l0aCk7XG4gICAgaWYgKHJlbEVudGl0eS5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IHBhcmVudCBlbnRpdGllcyBjYW4gYmUgdXNlZCBhcyByZWxhdGlvbiBwcm9wc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbFByb3A7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDssL7snYQg7IiYIOyXhuuKlCBSZWxhdGlvbiAke2NvbE5hbWV9YCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJpbmZsZWN0aW9uIiwiRW50aXR5TWFuYWdlciIsImlzRW51bVByb3AiLCJpc1JlbGF0aW9uUHJvcCIsImdldExhYmVsIiwiZW50aXR5SWQiLCJlbnVtSWQiLCJlbmRzV2l0aCIsImVudW1Qcm9wIiwiZ2V0IiwicHJvcHMiLCJmaW5kIiwicHJvcCIsImNhbWVsaXplIiwibmFtZSIsImRlc2MiLCJnZXRFbnVtSW5mb0Zyb21Db2xOYW1lIiwiY29sTmFtZSIsImJhc2VFbnRpdHkiLCJwIiwiaWQiLCJ0YXJnZXRFbnRpdHlJZCIsInRhcmdldEVudGl0eU5hbWVzIiwiZ2V0TmFtZXNGcm9tSWQiLCJ0aXRsZSIsImlkQ2FuZGlkYXRlIiwidW5kZXJzY29yZSIsIkVycm9yIiwiZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUiLCJyZWxQcm9wIiwicmVsRW50aXR5Iiwid2l0aCIsInBhcmVudElkIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxnQkFBZ0IsYUFBYTtBQUNwQyxTQUFTQyxhQUFhLFFBQTJCLDhCQUEyQjtBQUM1RSxTQUFTQyxVQUFVLEVBQUVDLGNBQWMsUUFBc0Isb0JBQWlCO0FBRTFFOzs7Q0FHQyxHQUNELE9BQU8sU0FBU0MsU0FBU0MsUUFBZ0IsRUFBRUMsTUFBYztJQUN2RCxJQUFJQSxPQUFPQyxRQUFRLENBQUMsWUFBWTtRQUM5QixPQUFPO0lBQ1QsT0FBTyxJQUFJRCxPQUFPQyxRQUFRLENBQUMsZ0JBQWdCO1FBQ3pDLE9BQU87SUFDVCxPQUFPO1FBQ0wsTUFBTUMsV0FBV1AsY0FBY1EsR0FBRyxDQUFDSixVQUFVSyxLQUFLLENBQUNDLElBQUksQ0FDckQsQ0FBQ0MsT0FBUyxHQUFHUCxXQUFXTCxXQUFXYSxRQUFRLENBQUNELEtBQUtFLElBQUksR0FBRyxLQUFLUjtRQUUvRCxJQUFJRSxZQUFZQSxTQUFTTyxJQUFJLEVBQUU7WUFDN0IsT0FBT1AsU0FBU08sSUFBSTtRQUN0QjtRQUNBLE9BQU9UO0lBQ1Q7QUFDRjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBU1UsdUJBQ2RYLFFBQWdCLEVBQ2hCWSxPQUFlO0lBT2YsTUFBTUMsYUFBYWpCLGNBQWNRLEdBQUcsQ0FBQ0o7SUFDckMsTUFBTU8sT0FBT00sV0FBV1IsS0FBSyxDQUFDQyxJQUFJLENBQUMsQ0FBQ1EsSUFBTUEsRUFBRUwsSUFBSSxLQUFLRztJQUNyRCxJQUFJTCxRQUFRVixXQUFXVSxPQUFPO1FBQzVCLE9BQU87WUFDTFEsSUFBSVIsS0FBS1EsRUFBRTtZQUNYQyxnQkFBZ0JoQjtZQUNoQmlCLG1CQUFtQnJCLGNBQWNzQixjQUFjLENBQUNsQjtZQUNoRG1CLE9BQU9aLEtBQUtHLElBQUksSUFBSUgsS0FBS1EsRUFBRTtRQUM3QjtJQUNGLE9BQU87UUFDTCxNQUFNSyxjQUFjekIsV0FBV2EsUUFBUSxDQUNyQ2IsV0FBVzBCLFVBQVUsQ0FBQ3JCLFlBQVksTUFBTUwsV0FBVzBCLFVBQVUsQ0FBQ1QsVUFDOUQ7UUFFRixJQUFJO1lBQ0YsTUFBTUssb0JBQW9CckIsY0FBY3NCLGNBQWMsQ0FBQ2xCO1lBQ3ZELE9BQU87Z0JBQ0xlLElBQUlLO2dCQUNKSixnQkFBZ0JoQjtnQkFDaEJpQixtQkFBbUJBO2dCQUNuQkUsT0FBT0M7WUFDVDtRQUNGLEVBQUUsT0FBTSxDQUFDO1FBQ1QsTUFBTSxJQUFJRSxNQUFNLENBQUMsaUJBQWlCLEVBQUVWLFNBQVM7SUFDL0M7QUFDRjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBU1csMkJBQ2R2QixRQUFnQixFQUNoQlksT0FBZTtJQUVmLE1BQU1DLGFBQWFqQixjQUFjUSxHQUFHLENBQUNKO0lBQ3JDLE1BQU13QixVQUFVWCxXQUFXUixLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDQyxPQUFTQSxLQUFLRSxJQUFJLEtBQUtHO0lBQzlELElBQUlkLGVBQWUwQixVQUFVO1FBQzNCLE1BQU1DLFlBQVk3QixjQUFjUSxHQUFHLENBQUNvQixRQUFRRSxJQUFJO1FBQ2hELElBQUlELFVBQVVFLFFBQVEsS0FBS0MsV0FBVztZQUNwQyxNQUFNLElBQUlOLE1BQU07UUFDbEI7UUFDQSxPQUFPRTtJQUNULE9BQU87UUFDTCxNQUFNLElBQUlGLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRVYsU0FBUztJQUMvQztBQUNGIn0=
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS9oZWxwZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgaXNFbnVtUHJvcCwgaXNSZWxhdGlvblByb3AsIHR5cGUgUmVsYXRpb25Qcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5cbi8qKlxuICogRW51beydmCDtkZzsi5zsmqkg652867Ko7J2EIOqwgOyguOyYteuLiOuLpC5cbiAqIE9yZGVyQnksIFNlYXJjaEZpZWxkIOuTsSDtirnsiJjtlZwg6rK97Jqw7JmAIOydvOuwmCBFbnVt7J2EIOq1rOu2hO2VmOyXrCDsspjrpqztlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYWJlbChlbnRpdHlJZDogc3RyaW5nLCBlbnVtSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChlbnVtSWQuZW5kc1dpdGgoXCJPcmRlckJ5XCIpKSB7XG4gICAgcmV0dXJuIFwi7KCV66CsXCI7XG4gIH0gZWxzZSBpZiAoZW51bUlkLmVuZHNXaXRoKFwiU2VhcmNoRmllbGRcIikpIHtcbiAgICByZXR1cm4gXCLqsoDsg4lcIjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlbnVtUHJvcCA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKS5wcm9wcy5maW5kKFxuICAgICAgKHByb3ApID0+IGAke2VudGl0eUlkfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wLm5hbWUpfWAgPT09IGVudW1JZCxcbiAgICApO1xuICAgIGlmIChlbnVtUHJvcD8uZGVzYykge1xuICAgICAgcmV0dXJuIGVudW1Qcm9wLmRlc2M7XG4gICAgfVxuICAgIHJldHVybiBlbnVtSWQ7XG4gIH1cbn1cblxuLyoqXG4gKiDsu6zrn7wg7J2066aE7Jy866Gc67aA7YSwIEVudW0g7KCV67O066W8IOy2lOy2nO2VqeuLiOuLpC5cbiAqIEVudGl0eeydmCBwcm9wIOykkSBlbnVtIO2DgOyeheyduCDqsoPsnYQg7LC+7JWEIOq0gOugqCDsoJXrs7Trpbwg67CY7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShcbiAgZW50aXR5SWQ6IHN0cmluZyxcbiAgY29sTmFtZTogc3RyaW5nLFxuKToge1xuICBpZDogc3RyaW5nO1xuICB0YXJnZXRFbnRpdHlOYW1lczogRW50aXR5TmFtZXNSZWNvcmQ7XG4gIHRhcmdldEVudGl0eUlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59IHtcbiAgY29uc3QgYmFzZUVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3QgcHJvcCA9IGJhc2VFbnRpdHkucHJvcHMuZmluZCgocCkgPT4gcC5uYW1lID09PSBjb2xOYW1lKTtcbiAgaWYgKHByb3AgJiYgaXNFbnVtUHJvcChwcm9wKSkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcHJvcC5pZCxcbiAgICAgIHRhcmdldEVudGl0eUlkOiBlbnRpdHlJZCxcbiAgICAgIHRhcmdldEVudGl0eU5hbWVzOiBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKSxcbiAgICAgIHRpdGxlOiBwcm9wLmRlc2MgPz8gcHJvcC5pZCxcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGlkQ2FuZGlkYXRlID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShcbiAgICAgIGAke2luZmxlY3Rpb24udW5kZXJzY29yZShlbnRpdHlJZCl9XyR7aW5mbGVjdGlvbi51bmRlcnNjb3JlKGNvbE5hbWUpfWAsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGlkQ2FuZGlkYXRlLFxuICAgICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICAgIHRhcmdldEVudGl0eU5hbWVzOiB0YXJnZXRFbnRpdHlOYW1lcyxcbiAgICAgICAgdGl0bGU6IGlkQ2FuZGlkYXRlLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHt9XG4gICAgdGhyb3cgbmV3IEVycm9yKGDssL7snYQg7IiYIOyXhuuKlCBFbnVtUHJvcCAke2NvbE5hbWV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiDsu6zrn7wg7J2066aE7Jy866Gc67aA7YSwIFJlbGF0aW9uIHByb3Ag7KCV67O066W8IOqwgOyguOyYteuLiOuLpC5cbiAqIOq0gOqzhO2YlSBwcm9w7J20IOyVhOuLjCDqsr3smrAg7JeQ65+s66W8IOuwnOyDneyLnO2CteuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkOiBzdHJpbmcsIGNvbE5hbWU6IHN0cmluZyk6IFJlbGF0aW9uUHJvcCB7XG4gIGNvbnN0IGJhc2VFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGNvbnN0IHJlbFByb3AgPSBiYXNlRW50aXR5LnByb3BzLmZpbmQoKHByb3ApID0+IHByb3AubmFtZSA9PT0gY29sTmFtZSk7XG4gIGlmIChpc1JlbGF0aW9uUHJvcChyZWxQcm9wKSkge1xuICAgIGNvbnN0IHJlbEVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHJlbFByb3Aud2l0aCk7XG4gICAgaWYgKHJlbEVudGl0eS5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IHBhcmVudCBlbnRpdGllcyBjYW4gYmUgdXNlZCBhcyByZWxhdGlvbiBwcm9wc1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbFByb3A7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDssL7snYQg7IiYIOyXhuuKlCBSZWxhdGlvbiAke2NvbE5hbWV9YCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJpbmZsZWN0aW9uIiwiRW50aXR5TWFuYWdlciIsImlzRW51bVByb3AiLCJpc1JlbGF0aW9uUHJvcCIsImdldExhYmVsIiwiZW50aXR5SWQiLCJlbnVtSWQiLCJlbmRzV2l0aCIsImVudW1Qcm9wIiwiZ2V0IiwicHJvcHMiLCJmaW5kIiwicHJvcCIsImNhbWVsaXplIiwibmFtZSIsImRlc2MiLCJnZXRFbnVtSW5mb0Zyb21Db2xOYW1lIiwiY29sTmFtZSIsImJhc2VFbnRpdHkiLCJwIiwiaWQiLCJ0YXJnZXRFbnRpdHlJZCIsInRhcmdldEVudGl0eU5hbWVzIiwiZ2V0TmFtZXNGcm9tSWQiLCJ0aXRsZSIsImlkQ2FuZGlkYXRlIiwidW5kZXJzY29yZSIsIkVycm9yIiwiZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUiLCJyZWxQcm9wIiwicmVsRW50aXR5Iiwid2l0aCIsInBhcmVudElkIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxnQkFBZ0IsYUFBYTtBQUNwQyxTQUFTQyxhQUFhLFFBQWdDLDhCQUEyQjtBQUNqRixTQUFTQyxVQUFVLEVBQUVDLGNBQWMsUUFBMkIsb0JBQWlCO0FBRS9FOzs7Q0FHQyxHQUNELE9BQU8sU0FBU0MsU0FBU0MsUUFBZ0IsRUFBRUMsTUFBYztJQUN2RCxJQUFJQSxPQUFPQyxRQUFRLENBQUMsWUFBWTtRQUM5QixPQUFPO0lBQ1QsT0FBTyxJQUFJRCxPQUFPQyxRQUFRLENBQUMsZ0JBQWdCO1FBQ3pDLE9BQU87SUFDVCxPQUFPO1FBQ0wsTUFBTUMsV0FBV1AsY0FBY1EsR0FBRyxDQUFDSixVQUFVSyxLQUFLLENBQUNDLElBQUksQ0FDckQsQ0FBQ0MsT0FBUyxHQUFHUCxXQUFXTCxXQUFXYSxRQUFRLENBQUNELEtBQUtFLElBQUksR0FBRyxLQUFLUjtRQUUvRCxJQUFJRSxVQUFVTyxNQUFNO1lBQ2xCLE9BQU9QLFNBQVNPLElBQUk7UUFDdEI7UUFDQSxPQUFPVDtJQUNUO0FBQ0Y7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVNVLHVCQUNkWCxRQUFnQixFQUNoQlksT0FBZTtJQU9mLE1BQU1DLGFBQWFqQixjQUFjUSxHQUFHLENBQUNKO0lBQ3JDLE1BQU1PLE9BQU9NLFdBQVdSLEtBQUssQ0FBQ0MsSUFBSSxDQUFDLENBQUNRLElBQU1BLEVBQUVMLElBQUksS0FBS0c7SUFDckQsSUFBSUwsUUFBUVYsV0FBV1UsT0FBTztRQUM1QixPQUFPO1lBQ0xRLElBQUlSLEtBQUtRLEVBQUU7WUFDWEMsZ0JBQWdCaEI7WUFDaEJpQixtQkFBbUJyQixjQUFjc0IsY0FBYyxDQUFDbEI7WUFDaERtQixPQUFPWixLQUFLRyxJQUFJLElBQUlILEtBQUtRLEVBQUU7UUFDN0I7SUFDRixPQUFPO1FBQ0wsTUFBTUssY0FBY3pCLFdBQVdhLFFBQVEsQ0FDckMsR0FBR2IsV0FBVzBCLFVBQVUsQ0FBQ3JCLFVBQVUsQ0FBQyxFQUFFTCxXQUFXMEIsVUFBVSxDQUFDVCxVQUFVLEVBQ3RFO1FBRUYsSUFBSTtZQUNGLE1BQU1LLG9CQUFvQnJCLGNBQWNzQixjQUFjLENBQUNsQjtZQUN2RCxPQUFPO2dCQUNMZSxJQUFJSztnQkFDSkosZ0JBQWdCaEI7Z0JBQ2hCaUIsbUJBQW1CQTtnQkFDbkJFLE9BQU9DO1lBQ1Q7UUFDRixFQUFFLE9BQU0sQ0FBQztRQUNULE1BQU0sSUFBSUUsTUFBTSxDQUFDLGlCQUFpQixFQUFFVixTQUFTO0lBQy9DO0FBQ0Y7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVNXLDJCQUEyQnZCLFFBQWdCLEVBQUVZLE9BQWU7SUFDMUUsTUFBTUMsYUFBYWpCLGNBQWNRLEdBQUcsQ0FBQ0o7SUFDckMsTUFBTXdCLFVBQVVYLFdBQVdSLEtBQUssQ0FBQ0MsSUFBSSxDQUFDLENBQUNDLE9BQVNBLEtBQUtFLElBQUksS0FBS0c7SUFDOUQsSUFBSWQsZUFBZTBCLFVBQVU7UUFDM0IsTUFBTUMsWUFBWTdCLGNBQWNRLEdBQUcsQ0FBQ29CLFFBQVFFLElBQUk7UUFDaEQsSUFBSUQsVUFBVUUsUUFBUSxLQUFLQyxXQUFXO1lBQ3BDLE1BQU0sSUFBSU4sTUFBTTtRQUNsQjtRQUNBLE9BQU9FO0lBQ1QsT0FBTztRQUNMLE1BQU0sSUFBSUYsTUFBTSxDQUFDLGlCQUFpQixFQUFFVixTQUFTO0lBQy9DO0FBQ0YifQ==
@@ -1,5 +1,5 @@
1
- import { TemplateOptions } from "../../types/types";
2
- import { EntityNamesRecord } from "../../entity/entity-manager";
1
+ import { type EntityNamesRecord } from "../../entity/entity-manager";
2
+ import type { TemplateOptions } from "../../types/types";
3
3
  import { Template } from "../template";
4
4
  export declare class Template__entity extends Template {
5
5
  constructor();
@@ -1 +1 @@
1
- {"version":3,"file":"entity.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/entity.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAiB,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,qBAAa,gBAAiB,SAAQ,QAAQ;;IAK5C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE,iBAAiB;;;;IAS1E,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;;;;;;CAoE1C"}
1
+ {"version":3,"file":"entity.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/entity.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,gBAAiB,SAAQ,QAAQ;;IAK5C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,CAAC,EAAE,iBAAiB;;;;IAS1E,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC;;;;;;CAoE1C"}
@@ -1,6 +1,6 @@
1
+ import { Sonamu } from "../../api/index.js";
1
2
  import { EntityManager } from "../../entity/entity-manager.js";
2
3
  import { Template } from "../template.js";
3
- import { Sonamu } from "../../api/index.js";
4
4
  export class Template__entity extends Template {
5
5
  constructor(){
6
6
  super("entity");
@@ -31,12 +31,11 @@ export class Template__entity extends Template {
31
31
  id: entityId,
32
32
  title: title ?? entityId,
33
33
  parentId,
34
- table: table ?? names.fsPlural.replace(/\-/g, "_"),
34
+ table: table ?? names.fsPlural.replace(/-/g, "_"),
35
35
  props: options.props?.length ? options.props : [
36
36
  {
37
37
  name: "id",
38
38
  type: "integer",
39
- unsigned: true,
40
39
  desc: "ID"
41
40
  },
42
41
  ...parent ? [
@@ -52,7 +51,7 @@ export class Template__entity extends Template {
52
51
  ] : [],
53
52
  {
54
53
  name: "created_at",
55
- type: "timestamp",
54
+ type: "date",
56
55
  desc: "등록일시",
57
56
  dbDefault: "CURRENT_TIMESTAMP"
58
57
  }
@@ -84,4 +83,4 @@ export class Template__entity extends Template {
84
83
  }
85
84
  }
86
85
 
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50aXR5LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2VudGl0eSBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJlbnRpdHlcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCwgcGFyZW50TmFtZXM/OiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcblxuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGAkeyhwYXJlbnROYW1lcyA/PyBuYW1lcykuZnN9LyR7bmFtZXMuZnN9LmVudGl0eS5qc29uYCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tcImVudGl0eVwiXSkge1xuICAgIGNvbnN0IHsgZW50aXR5SWQsIHRpdGxlLCBwYXJlbnRJZCwgdGFibGUgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIGNvbnN0IHBhcmVudCA9ICgoKSA9PiB7XG4gICAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lczogRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChwYXJlbnRJZCksXG4gICAgICAgICAgZW50aXR5OiBFbnRpdHlNYW5hZ2VyLmdldChwYXJlbnRJZCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcywgcGFyZW50Py5uYW1lcyA/PyBuYW1lcyksXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGlkOiBlbnRpdHlJZCxcbiAgICAgICAgdGl0bGU6IHRpdGxlID8/IGVudGl0eUlkLFxuICAgICAgICBwYXJlbnRJZCxcbiAgICAgICAgdGFibGU6IHRhYmxlID8/IG5hbWVzLmZzUGx1cmFsLnJlcGxhY2UoL1xcLS9nLCBcIl9cIiksXG4gICAgICAgIHByb3BzOiBvcHRpb25zLnByb3BzPy5sZW5ndGhcbiAgICAgICAgICA/IG9wdGlvbnMucHJvcHNcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiLCB1bnNpZ25lZDogdHJ1ZSwgZGVzYzogXCJJRFwiIH0sXG4gICAgICAgICAgICAgIC4uLihwYXJlbnRcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicmVsYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwYXJlbnQubmFtZXMuY2FtZWwsXG4gICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25UeXBlOiBcIkJlbG9uZ3NUb09uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpdGg6IHBhcmVudElkLFxuICAgICAgICAgICAgICAgICAgICAgIG9uVXBkYXRlOiBcIkNBU0NBREVcIixcbiAgICAgICAgICAgICAgICAgICAgICBvbkRlbGV0ZTogXCJDQVNDQURFXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZGVzYzogcGFyZW50LmVudGl0eS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgICAgICAgZGVzYzogXCLrk7HroZ3snbzsi5xcIixcbiAgICAgICAgICAgICAgICBkYkRlZmF1bHQ6IFwiQ1VSUkVOVF9USU1FU1RBTVBcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIGluZGV4ZXM6IFsuLi4ob3B0aW9ucy5pbmRleGVzID8/IFtdKV0sXG4gICAgICAgIHN1YnNldHM6IG9wdGlvbnMuc3Vic2V0cyA/PyB7XG4gICAgICAgICAgLi4uKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBBOiBbXCJpZFwiLCBcImNyZWF0ZWRfYXRcIl0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgICBlbnVtczogb3B0aW9ucy5lbnVtcyA/PyB7XG4gICAgICAgICAgLi4uKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1PcmRlckJ5YF06IHtcbiAgICAgICAgICAgICAgICAgIFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZGBdOiB7IGlkOiBcIklEXCIgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9KS50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsiRW50aXR5TWFuYWdlciIsIlRlbXBsYXRlIiwiU29uYW11IiwiVGVtcGxhdGVfX2VudGl0eSIsImdldFRhcmdldEFuZFBhdGgiLCJuYW1lcyIsInBhcmVudE5hbWVzIiwiZGlyIiwiY29uZmlnIiwiYXBpIiwidGFyZ2V0IiwicGF0aCIsImZzIiwicmVuZGVyIiwib3B0aW9ucyIsImVudGl0eUlkIiwidGl0bGUiLCJwYXJlbnRJZCIsInRhYmxlIiwiZ2V0TmFtZXNGcm9tSWQiLCJwYXJlbnQiLCJlbnRpdHkiLCJnZXQiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImlkIiwiZnNQbHVyYWwiLCJyZXBsYWNlIiwicHJvcHMiLCJsZW5ndGgiLCJuYW1lIiwidHlwZSIsInVuc2lnbmVkIiwiZGVzYyIsImNhbWVsIiwicmVsYXRpb25UeXBlIiwid2l0aCIsIm9uVXBkYXRlIiwib25EZWxldGUiLCJkYkRlZmF1bHQiLCJpbmRleGVzIiwic3Vic2V0cyIsIkEiLCJlbnVtcyIsImNhcGl0YWwiLCJ0cmltIiwiaW1wb3J0S2V5cyJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EsYUFBYSxRQUEyQixpQ0FBOEI7QUFDL0UsU0FBU0MsUUFBUSxRQUFRLGlCQUFjO0FBQ3ZDLFNBQVNDLE1BQU0sUUFBUSxxQkFBWTtBQUVuQyxPQUFPLE1BQU1DLHlCQUF5QkY7SUFDcEMsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFHLGlCQUFpQkMsS0FBd0IsRUFBRUMsV0FBK0IsRUFBRTtRQUMxRSxNQUFNLEVBQUVDLEdBQUcsRUFBRSxHQUFHTCxPQUFPTSxNQUFNLENBQUNDLEdBQUc7UUFFakMsT0FBTztZQUNMQyxRQUFRLEdBQUdILElBQUksZ0JBQWdCLENBQUM7WUFDaENJLE1BQU0sR0FBRyxBQUFDTCxDQUFBQSxlQUFlRCxLQUFJLEVBQUdPLEVBQUUsQ0FBQyxDQUFDLEVBQUVQLE1BQU1PLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDOUQ7SUFDRjtJQUVBQyxPQUFPQyxPQUFrQyxFQUFFO1FBQ3pDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxFQUFFLEdBQUdKO1FBQzdDLE1BQU1ULFFBQVFMLGNBQWNtQixjQUFjLENBQUNKO1FBRTNDLE1BQU1LLFNBQVMsQUFBQyxDQUFBO1lBQ2QsSUFBSUgsVUFBVTtnQkFDWixPQUFPO29CQUNMWixPQUFPTCxjQUFjbUIsY0FBYyxDQUFDRjtvQkFDcENJLFFBQVFyQixjQUFjc0IsR0FBRyxDQUFDTDtnQkFDNUI7WUFDRixPQUFPO2dCQUNMLE9BQU87WUFDVDtRQUNGLENBQUE7UUFFQSxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUNiLGdCQUFnQixDQUFDQyxPQUFPZSxRQUFRZixTQUFTQSxNQUFNO1lBQ3ZEa0IsTUFBTUMsS0FBS0MsU0FBUyxDQUFDO2dCQUNuQkMsSUFBSVg7Z0JBQ0pDLE9BQU9BLFNBQVNEO2dCQUNoQkU7Z0JBQ0FDLE9BQU9BLFNBQVNiLE1BQU1zQixRQUFRLENBQUNDLE9BQU8sQ0FBQyxPQUFPO2dCQUM5Q0MsT0FBT2YsUUFBUWUsS0FBSyxFQUFFQyxTQUNsQmhCLFFBQVFlLEtBQUssR0FDYjtvQkFDRTt3QkFBRUUsTUFBTTt3QkFBTUMsTUFBTTt3QkFBV0MsVUFBVTt3QkFBTUMsTUFBTTtvQkFBSzt1QkFDdERkLFNBQ0E7d0JBQ0U7NEJBQ0VZLE1BQU07NEJBQ05ELE1BQU1YLE9BQU9mLEtBQUssQ0FBQzhCLEtBQUs7NEJBQ3hCQyxjQUFjOzRCQUNkQyxNQUFNcEI7NEJBQ05xQixVQUFVOzRCQUNWQyxVQUFVOzRCQUNWTCxNQUFNZCxPQUFPQyxNQUFNLENBQUNMLEtBQUs7d0JBQzNCO3FCQUNELEdBQ0QsRUFBRTtvQkFDTjt3QkFDRWUsTUFBTTt3QkFDTkMsTUFBTTt3QkFDTkUsTUFBTTt3QkFDTk0sV0FBVztvQkFDYjtpQkFDRDtnQkFDTEMsU0FBUzt1QkFBSzNCLFFBQVEyQixPQUFPLElBQUksRUFBRTtpQkFBRTtnQkFDckNDLFNBQVM1QixRQUFRNEIsT0FBTyxJQUFJO29CQUMxQixHQUFJekIsV0FDQSxDQUFDLElBQ0Q7d0JBQ0UwQixHQUFHOzRCQUFDOzRCQUFNO3lCQUFhO29CQUN6QixDQUFDO2dCQUNQO2dCQUNBQyxPQUFPOUIsUUFBUThCLEtBQUssSUFBSTtvQkFDdEIsR0FBSTNCLFdBQ0EsQ0FBQyxJQUNEO3dCQUNFLENBQUMsR0FBR1osTUFBTXdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFOzRCQUMzQixXQUFXO3dCQUNiO3dCQUNBLENBQUMsR0FBR3hDLE1BQU13QyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTs0QkFBRW5CLElBQUk7d0JBQUs7b0JBQzlDLENBQUM7Z0JBQ1A7WUFDRixHQUFHb0IsSUFBSTtZQUNQQyxZQUFZLEVBQUU7UUFDaEI7SUFDRjtBQUNGIn0=
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50aXR5LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19lbnRpdHkgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiZW50aXR5XCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQsIHBhcmVudE5hbWVzPzogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICBjb25zdCB7IGRpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgJHsocGFyZW50TmFtZXMgPz8gbmFtZXMpLmZzfS8ke25hbWVzLmZzfS5lbnRpdHkuanNvbmAsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcihvcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRpdHlcIl0pIHtcbiAgICBjb25zdCB7IGVudGl0eUlkLCB0aXRsZSwgcGFyZW50SWQsIHRhYmxlIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG5cbiAgICBjb25zdCBwYXJlbnQgPSAoKCkgPT4ge1xuICAgICAgaWYgKHBhcmVudElkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZXM6IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQocGFyZW50SWQpLFxuICAgICAgICAgIGVudGl0eTogRW50aXR5TWFuYWdlci5nZXQocGFyZW50SWQpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMsIHBhcmVudD8ubmFtZXMgPz8gbmFtZXMpLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBpZDogZW50aXR5SWQsXG4gICAgICAgIHRpdGxlOiB0aXRsZSA/PyBlbnRpdHlJZCxcbiAgICAgICAgcGFyZW50SWQsXG4gICAgICAgIHRhYmxlOiB0YWJsZSA/PyBuYW1lcy5mc1BsdXJhbC5yZXBsYWNlKC8tL2csIFwiX1wiKSxcbiAgICAgICAgcHJvcHM6IG9wdGlvbnMucHJvcHM/Lmxlbmd0aFxuICAgICAgICAgID8gb3B0aW9ucy5wcm9wc1xuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICB7IG5hbWU6IFwiaWRcIiwgdHlwZTogXCJpbnRlZ2VyXCIsIGRlc2M6IFwiSURcIiB9LFxuICAgICAgICAgICAgICAuLi4ocGFyZW50XG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInJlbGF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGFyZW50Lm5hbWVzLmNhbWVsLFxuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVHlwZTogXCJCZWxvbmdzVG9PbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICB3aXRoOiBwYXJlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICBvblVwZGF0ZTogXCJDQVNDQURFXCIsXG4gICAgICAgICAgICAgICAgICAgICAgb25EZWxldGU6IFwiQ0FTQ0FERVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IHBhcmVudC5lbnRpdHkudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNyZWF0ZWRfYXRcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICBkZXNjOiBcIuuTseuhneydvOyLnFwiLFxuICAgICAgICAgICAgICAgIGRiRGVmYXVsdDogXCJDVVJSRU5UX1RJTUVTVEFNUFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgaW5kZXhlczogWy4uLihvcHRpb25zLmluZGV4ZXMgPz8gW10pXSxcbiAgICAgICAgc3Vic2V0czogb3B0aW9ucy5zdWJzZXRzID8/IHtcbiAgICAgICAgICAuLi4ocGFyZW50SWRcbiAgICAgICAgICAgID8ge31cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIEE6IFtcImlkXCIsIFwiY3JlYXRlZF9hdFwiXSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICAgIGVudW1zOiBvcHRpb25zLmVudW1zID8/IHtcbiAgICAgICAgICAuLi4ocGFyZW50SWRcbiAgICAgICAgICAgID8ge31cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIFtgJHtuYW1lcy5jYXBpdGFsfU9yZGVyQnlgXToge1xuICAgICAgICAgICAgICAgICAgXCJpZC1kZXNjXCI6IFwiSUTstZzsi6DsiJxcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtgJHtuYW1lcy5jYXBpdGFsfVNlYXJjaEZpZWxkYF06IHsgaWQ6IFwiSURcIiB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0pLnRyaW0oKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJTb25hbXUiLCJFbnRpdHlNYW5hZ2VyIiwiVGVtcGxhdGUiLCJUZW1wbGF0ZV9fZW50aXR5IiwiZ2V0VGFyZ2V0QW5kUGF0aCIsIm5hbWVzIiwicGFyZW50TmFtZXMiLCJkaXIiLCJjb25maWciLCJhcGkiLCJ0YXJnZXQiLCJwYXRoIiwiZnMiLCJyZW5kZXIiLCJvcHRpb25zIiwiZW50aXR5SWQiLCJ0aXRsZSIsInBhcmVudElkIiwidGFibGUiLCJnZXROYW1lc0Zyb21JZCIsInBhcmVudCIsImVudGl0eSIsImdldCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwiaWQiLCJmc1BsdXJhbCIsInJlcGxhY2UiLCJwcm9wcyIsImxlbmd0aCIsIm5hbWUiLCJ0eXBlIiwiZGVzYyIsImNhbWVsIiwicmVsYXRpb25UeXBlIiwid2l0aCIsIm9uVXBkYXRlIiwib25EZWxldGUiLCJkYkRlZmF1bHQiLCJpbmRleGVzIiwic3Vic2V0cyIsIkEiLCJlbnVtcyIsImNhcGl0YWwiLCJ0cmltIiwiaW1wb3J0S2V5cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBTSxRQUFRLHFCQUFZO0FBQ25DLFNBQVNDLGFBQWEsUUFBZ0MsaUNBQThCO0FBRXBGLFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUV2QyxPQUFPLE1BQU1DLHlCQUF5QkQ7SUFDcEMsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFFLGlCQUFpQkMsS0FBd0IsRUFBRUMsV0FBK0IsRUFBRTtRQUMxRSxNQUFNLEVBQUVDLEdBQUcsRUFBRSxHQUFHUCxPQUFPUSxNQUFNLENBQUNDLEdBQUc7UUFFakMsT0FBTztZQUNMQyxRQUFRLEdBQUdILElBQUksZ0JBQWdCLENBQUM7WUFDaENJLE1BQU0sR0FBRyxBQUFDTCxDQUFBQSxlQUFlRCxLQUFJLEVBQUdPLEVBQUUsQ0FBQyxDQUFDLEVBQUVQLE1BQU1PLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDOUQ7SUFDRjtJQUVBQyxPQUFPQyxPQUFrQyxFQUFFO1FBQ3pDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxFQUFFLEdBQUdKO1FBQzdDLE1BQU1ULFFBQVFKLGNBQWNrQixjQUFjLENBQUNKO1FBRTNDLE1BQU1LLFNBQVMsQUFBQyxDQUFBO1lBQ2QsSUFBSUgsVUFBVTtnQkFDWixPQUFPO29CQUNMWixPQUFPSixjQUFja0IsY0FBYyxDQUFDRjtvQkFDcENJLFFBQVFwQixjQUFjcUIsR0FBRyxDQUFDTDtnQkFDNUI7WUFDRixPQUFPO2dCQUNMLE9BQU87WUFDVDtRQUNGLENBQUE7UUFFQSxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUNiLGdCQUFnQixDQUFDQyxPQUFPZSxRQUFRZixTQUFTQSxNQUFNO1lBQ3ZEa0IsTUFBTUMsS0FBS0MsU0FBUyxDQUFDO2dCQUNuQkMsSUFBSVg7Z0JBQ0pDLE9BQU9BLFNBQVNEO2dCQUNoQkU7Z0JBQ0FDLE9BQU9BLFNBQVNiLE1BQU1zQixRQUFRLENBQUNDLE9BQU8sQ0FBQyxNQUFNO2dCQUM3Q0MsT0FBT2YsUUFBUWUsS0FBSyxFQUFFQyxTQUNsQmhCLFFBQVFlLEtBQUssR0FDYjtvQkFDRTt3QkFBRUUsTUFBTTt3QkFBTUMsTUFBTTt3QkFBV0MsTUFBTTtvQkFBSzt1QkFDdENiLFNBQ0E7d0JBQ0U7NEJBQ0VZLE1BQU07NEJBQ05ELE1BQU1YLE9BQU9mLEtBQUssQ0FBQzZCLEtBQUs7NEJBQ3hCQyxjQUFjOzRCQUNkQyxNQUFNbkI7NEJBQ05vQixVQUFVOzRCQUNWQyxVQUFVOzRCQUNWTCxNQUFNYixPQUFPQyxNQUFNLENBQUNMLEtBQUs7d0JBQzNCO3FCQUNELEdBQ0QsRUFBRTtvQkFDTjt3QkFDRWUsTUFBTTt3QkFDTkMsTUFBTTt3QkFDTkMsTUFBTTt3QkFDTk0sV0FBVztvQkFDYjtpQkFDRDtnQkFDTEMsU0FBUzt1QkFBSzFCLFFBQVEwQixPQUFPLElBQUksRUFBRTtpQkFBRTtnQkFDckNDLFNBQVMzQixRQUFRMkIsT0FBTyxJQUFJO29CQUMxQixHQUFJeEIsV0FDQSxDQUFDLElBQ0Q7d0JBQ0V5QixHQUFHOzRCQUFDOzRCQUFNO3lCQUFhO29CQUN6QixDQUFDO2dCQUNQO2dCQUNBQyxPQUFPN0IsUUFBUTZCLEtBQUssSUFBSTtvQkFDdEIsR0FBSTFCLFdBQ0EsQ0FBQyxJQUNEO3dCQUNFLENBQUMsR0FBR1osTUFBTXVDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFOzRCQUMzQixXQUFXO3dCQUNiO3dCQUNBLENBQUMsR0FBR3ZDLE1BQU11QyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTs0QkFBRWxCLElBQUk7d0JBQUs7b0JBQzlDLENBQUM7Z0JBQ1A7WUFDRixHQUFHbUIsSUFBSTtZQUNQQyxZQUFZLEVBQUU7UUFDaEI7SUFDRjtBQUNGIn0=
@@ -1,5 +1,4 @@
1
- import { TemplateOptions } from "../../types/types";
2
- import { Entity } from "../../entity/entity";
1
+ import type { Entity } from "../../entity/entity";
3
2
  import { Template } from "../template";
4
3
  export type SourceCode = {
5
4
  label: string;
@@ -12,7 +11,7 @@ export declare class Template__generated extends Template {
12
11
  target: string;
13
12
  path: string;
14
13
  };
15
- render({}: TemplateOptions["generated"]): {
14
+ render(): {
16
15
  body: string;
17
16
  importKeys: string[];
18
17
  customHeaders: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"generated.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AACF,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB;;;;IAShB,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC;;;;;;;IAyGvC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAsBrD,uBAAuB,CACrB,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAAM,EAAO,GACxB,UAAU;IAsCb,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAiD9D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CAmDvD"}
1
+ {"version":3,"file":"generated.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated.template.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAKlD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AACF,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB;;;;IAOhB,MAAM;;;;;;;IAmGN,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAqBrD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,GAAG,UAAU;IAsD9E,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAiD9D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CA8CvD"}
@@ -1,9 +1,12 @@
1
- import * as _ from "lodash-es";
1
+ import assert from "assert";
2
+ import { unique } from "radashi";
3
+ import { Sonamu } from "../../api/index.js";
2
4
  import { EntityManager } from "../../entity/entity-manager.js";
3
- import { propNodeToZodTypeDef, zodTypeToZodCode } from "../../api/code-converters.js";
4
- import { Template } from "../template.js";
5
+ import { Naite } from "../../naite/naite.js";
6
+ import { isVirtualProp } from "../../types/types.js";
5
7
  import { nonNullable } from "../../utils/utils.js";
6
- import { Sonamu } from "../../api/index.js";
8
+ import { Template } from "../template.js";
9
+ import { propNodeToZodTypeDef, zodTypeToZodCode } from "../zod-converter.js";
7
10
  export class Template__generated extends Template {
8
11
  constructor(){
9
12
  super("generated");
@@ -15,18 +18,19 @@ export class Template__generated extends Template {
15
18
  path: `sonamu.generated.ts`
16
19
  };
17
20
  }
18
- render({}) {
21
+ render() {
19
22
  const entityIds = EntityManager.getAllIds();
20
23
  const entities = entityIds.map((id)=>EntityManager.get(id));
21
24
  // 전체 SourceCode 생성
22
- const sourceCodes = entities.map((entity)=>{
25
+ const sourceCodes = entities.flatMap((entity)=>{
23
26
  return [
24
27
  this.getEnumsSourceCode(entity),
25
28
  this.getBaseSchemaSourceCode(entity),
26
29
  this.getBaseListParamsSourceCode(entity),
27
30
  this.getSubsetSourceCode(entity)
28
31
  ].filter(nonNullable);
29
- }).flat();
32
+ });
33
+ Naite.t("Template__generated:sourceCodes", sourceCodes);
30
34
  // Sort
31
35
  const LABEL_KEY_ORDER = [
32
36
  "Enums",
@@ -59,7 +63,7 @@ export class Template__generated extends Template {
59
63
  ...ts.lines,
60
64
  ""
61
65
  ],
62
- importKeys: _.uniq([
66
+ importKeys: unique([
63
67
  ...result.importKeys,
64
68
  ...ts.importKeys
65
69
  ].sort())
@@ -69,22 +73,23 @@ export class Template__generated extends Template {
69
73
  importKeys: []
70
74
  });
71
75
  // .types.ts의 타입을 참조하는 경우 순환참조(상호참조)가 발생하므로 타입을 가져와 인라인 처리
72
- const allTypeKeys = entities.map((entity)=>Object.keys(entity.types)).flat();
76
+ const allTypeKeys = entities.flatMap((entity)=>Object.keys(entity.types));
73
77
  const cdImportKeys = sourceCode.importKeys.filter((importKey)=>allTypeKeys.includes(importKey));
74
78
  if (cdImportKeys.length > 0) {
75
- const customScalarLines = cdImportKeys.map((importKey)=>{
79
+ const customScalarLines = cdImportKeys.flatMap((importKey)=>{
76
80
  const entity = entities.find((entity)=>entity.types[importKey]);
77
81
  if (!entity) {
78
82
  throw new Error(`ZodType not found ${importKey}`);
79
83
  }
80
84
  const zodType = entity.types[importKey];
85
+ assert(zodType);
81
86
  return [
82
87
  `// CustomScalar: ${importKey}`,
83
88
  `const ${importKey} = ${zodTypeToZodCode(zodType)};`,
84
89
  `type ${importKey} = z.infer<typeof ${importKey}>`,
85
90
  ""
86
91
  ];
87
- }).flat();
92
+ });
88
93
  sourceCode.lines = [
89
94
  ...customScalarLines,
90
95
  ...sourceCode.lines
@@ -92,6 +97,7 @@ export class Template__generated extends Template {
92
97
  sourceCode.importKeys = sourceCode.importKeys.filter((importKey)=>!cdImportKeys.includes(importKey));
93
98
  }
94
99
  const body = sourceCode.lines.join("\n");
100
+ Naite.t("Template__generated:body", body);
95
101
  // import
96
102
  const sonamuImports = [
97
103
  "zArrayable",
@@ -104,6 +110,9 @@ export class Template__generated extends Template {
104
110
  body,
105
111
  importKeys: sourceCode.importKeys,
106
112
  customHeaders: [
113
+ "/** biome-ignore-all lint: generated는 무시 */",
114
+ "/** biome-ignore-all assist: generated는 무시 */",
115
+ "",
107
116
  `import { z } from 'zod';`,
108
117
  `import { ${sonamuImports.join(",")} } from "sonamu";`
109
118
  ]
@@ -116,11 +125,11 @@ export class Template__generated extends Template {
116
125
  return {
117
126
  label: `Enums: ${entity.id}`,
118
127
  lines: [
119
- ...Object.entries(entity.enumLabels).filter(([_, enumLabel])=>Object.keys(enumLabel).length > 0).map(([enumId, enumLabel])=>[
128
+ ...Object.entries(entity.enumLabels).filter(([_, enumLabel])=>Object.keys(enumLabel).length > 0).flatMap(([enumId, enumLabel])=>[
120
129
  `export const ${enumId} = z.enum([${Object.keys(enumLabel).map((el)=>`"${el}"`)}]).describe("${enumId}");`,
121
- `export type ${enumId} = z.infer<typeof ${enumId}>`,
122
- `export const ${enumId}Label = ${JSON.stringify(enumLabel)}`
123
- ]).flat()
130
+ `export type ${enumId} = z.infer<typeof ${enumId}>;`,
131
+ `export const ${enumId}Label = ${JSON.stringify(enumLabel)};`
132
+ ])
124
133
  ],
125
134
  importKeys: []
126
135
  };
@@ -136,12 +145,20 @@ export class Template__generated extends Template {
136
145
  };
137
146
  })
138
147
  };
139
- const schemaBody = propNodeToZodTypeDef(propNode, importKeys);
148
+ const schemaBody = (()=>{
149
+ const result = propNodeToZodTypeDef(propNode, importKeys);
150
+ if (result.endsWith(",")) {
151
+ return result.slice(0, -1);
152
+ }
153
+ return result;
154
+ })();
140
155
  // fulltext index에 포함된 컬럼들 추출
141
- const fulltextColumns = _.uniq(entity.indexes.filter((index)=>index.type === "fulltext").flatMap((index)=>index.columns));
156
+ const fulltextColumns = unique(entity.indexes.filter((index)=>index.type === "fulltext").flatMap((index)=>index.columns));
157
+ // virtual props
158
+ const virtualProps = entity.props.filter((prop)=>isVirtualProp(prop)).map((prop)=>prop.name);
142
159
  const lines = [
143
- `export const ${schemaName} = ${schemaBody}`,
144
- `export type ${schemaName} = z.infer<typeof ${schemaName}>` + (fulltextColumns.length > 0 ? ` & { readonly __fulltext__: readonly [${fulltextColumns.map((col)=>`"${col}"`).join(", ")}] }` : "")
160
+ `export const ${schemaName} = ${schemaBody};`,
161
+ `export type ${schemaName} = z.infer<typeof ${schemaName}>` + (fulltextColumns.length > 0 ? ` & { readonly __fulltext__: readonly [${fulltextColumns.map((col)=>`"${col}"`).join(", ")}] }` : "") + (virtualProps.length > 0 ? ` & { readonly __virtual__: readonly [${virtualProps.map((prop)=>`"${prop}"`).join(", ")}] }` : "") + ";"
145
162
  ];
146
163
  return {
147
164
  label: `BaseSchema: ${entity.id}`,
@@ -180,7 +197,7 @@ z.object({
180
197
  `.trim();
181
198
  const lines = [
182
199
  `export const ${schemaName} = ${schemaBody}`,
183
- `export type ${schemaName} = z.infer<typeof ${schemaName}>`
200
+ `export type ${schemaName} = z.infer<typeof ${schemaName}>;`
184
201
  ];
185
202
  return {
186
203
  label: `BaseListParams: ${entity.id}`,
@@ -189,7 +206,7 @@ z.object({
189
206
  };
190
207
  }
191
208
  getSubsetSourceCode(entity) {
192
- if (Object.keys(entity.subsets).length == 0) {
209
+ if (Object.keys(entity.subsets).length === 0) {
193
210
  return null;
194
211
  } else if (entity.parentId !== undefined) {
195
212
  return null;
@@ -197,7 +214,7 @@ z.object({
197
214
  const subsetKeys = Object.keys(entity.subsets);
198
215
  const importKeys = [];
199
216
  const lines = [
200
- ...subsetKeys.map((subsetKey)=>{
217
+ ...subsetKeys.flatMap((subsetKey)=>{
201
218
  // 서브셋에서 FieldExpr[] 가져옴
202
219
  const fieldExprs = entity.subsets[subsetKey];
203
220
  // FieldExpr[]로 EntityPropNode[] 가져옴
@@ -210,23 +227,23 @@ z.object({
210
227
  // EntityPropNode[]로 ZodTypeDef(string)을 가져옴
211
228
  const body = propNodeToZodTypeDef(propNode, importKeys);
212
229
  return [
213
- `export const ${schemaName} = ${body}`,
214
- `export type ${schemaName} = z.infer<typeof ${schemaName}>`
230
+ `export const ${schemaName} = ${body.replace(/,$/, "")};`,
231
+ `export type ${schemaName} = z.infer<typeof ${schemaName}>;`
215
232
  ];
216
- }).flat(),
233
+ }),
217
234
  `export type ${entity.names.module}SubsetMapping = {`,
218
235
  ...subsetKeys.map((subsetKey)=>` ${subsetKey}: ${entity.names.module}Subset${subsetKey};`),
219
- "}",
236
+ "};",
220
237
  `export const ${entity.names.module}SubsetKey = z.enum([${subsetKeys.map((k)=>`"${k}"`).join(",")}]);`,
221
- `export type ${entity.names.module}SubsetKey = z.infer<typeof ${entity.names.module}SubsetKey>`,
238
+ `export type ${entity.names.module}SubsetKey = z.infer<typeof ${entity.names.module}SubsetKey>;`,
222
239
  ""
223
240
  ];
224
241
  return {
225
242
  label: `Subsets: ${entity.id}`,
226
243
  lines,
227
- importKeys: _.uniq(importKeys)
244
+ importKeys: unique(importKeys)
228
245
  };
229
246
  }
230
247
  }
231
248
 
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eVByb3BOb2RlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBwcm9wTm9kZVRvWm9kVHlwZURlZiwgem9kVHlwZVRvWm9kQ29kZSB9IGZyb20gXCIuLi8uLi9hcGkvY29kZS1jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcblxuZXhwb3J0IHR5cGUgU291cmNlQ29kZSA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGluZXM6IHN0cmluZ1tdO1xuICBpbXBvcnRLZXlzOiBzdHJpbmdbXTtcbn07XG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJnZW5lcmF0ZWRcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcblxuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGBzb25hbXUuZ2VuZXJhdGVkLnRzYCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJnZW5lcmF0ZWRcIl0pIHtcbiAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgIGNvbnN0IGVudGl0aWVzID0gZW50aXR5SWRzLm1hcCgoaWQpID0+IEVudGl0eU1hbmFnZXIuZ2V0KGlkKSk7XG5cbiAgICAvLyDsoITssrQgU291cmNlQ29kZSDsg53shLFcbiAgICBjb25zdCBzb3VyY2VDb2RlcyA9IGVudGl0aWVzXG4gICAgICAubWFwKChlbnRpdHkpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB0aGlzLmdldEVudW1zU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICAgIHRoaXMuZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgICB0aGlzLmdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICAgIHRoaXMuZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICBdLmZpbHRlcihub25OdWxsYWJsZSk7XG4gICAgICB9KVxuICAgICAgLmZsYXQoKTtcblxuICAgIC8vIFNvcnRcbiAgICBjb25zdCBMQUJFTF9LRVlfT1JERVIgPSBbXG4gICAgICBcIkVudW1zXCIsXG4gICAgICBcIkJhc2VTY2hlbWFcIixcbiAgICAgIFwiQmFzZUxpc3RQYXJhbXNcIixcbiAgICAgIFwiU3Vic2V0c1wiLFxuICAgICAgXCJTdWJzZXRRdWVyaWVzXCIsXG4gICAgXTtcbiAgICBzb3VyY2VDb2Rlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBbYUtleV0gPSBhLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IFtiS2V5XSA9IGIubGFiZWwuc3BsaXQoXCI6XCIpO1xuICAgICAgY29uc3QgYUluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYUtleSk7XG4gICAgICBjb25zdCBiSW5kZXggPSBMQUJFTF9LRVlfT1JERVIuaW5kZXhPZihiS2V5KTtcbiAgICAgIGlmIChhSW5kZXggPiBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKGFJbmRleCA8IGJJbmRleCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBzb3VyY2VDb2Rlcy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCB0cykgPT4ge1xuICAgICAgICBpZiAodHMgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZXM6IFsuLi5yZXN1bHQhLmxpbmVzLCBgLy8gJHt0cy5sYWJlbH1gLCAuLi50cy5saW5lcywgXCJcIl0sXG4gICAgICAgICAgaW1wb3J0S2V5czogXy51bmlxKFsuLi5yZXN1bHQhLmltcG9ydEtleXMsIC4uLnRzLmltcG9ydEtleXNdLnNvcnQoKSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj5cbiAgICApO1xuXG4gICAgLy8gLnR5cGVzLnRz7J2YIO2DgOyeheydhCDssLjsobDtlZjripQg6rK97JqwIOyInO2ZmOywuOyhsCjsg4HtmLjssLjsobAp6rCAIOuwnOyDne2VmOuvgOuhnCDtg4DsnoXsnYQg6rCA7KC47JmAIOyduOudvOyduCDsspjrpqxcbiAgICBjb25zdCBhbGxUeXBlS2V5cyA9IGVudGl0aWVzXG4gICAgICAubWFwKChlbnRpdHkpID0+IE9iamVjdC5rZXlzKGVudGl0eS50eXBlcykpXG4gICAgICAuZmxhdCgpO1xuICAgIGNvbnN0IGNkSW1wb3J0S2V5cyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGltcG9ydEtleSkgPT5cbiAgICAgIGFsbFR5cGVLZXlzLmluY2x1ZGVzKGltcG9ydEtleSlcbiAgICApO1xuICAgIGlmIChjZEltcG9ydEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VzdG9tU2NhbGFyTGluZXMgPSBjZEltcG9ydEtleXNcbiAgICAgICAgLm1hcCgoaW1wb3J0S2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gZW50aXRpZXMuZmluZCgoZW50aXR5KSA9PiBlbnRpdHkudHlwZXNbaW1wb3J0S2V5XSk7XG4gICAgICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWm9kVHlwZSBub3QgZm91bmQgJHtpbXBvcnRLZXl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHpvZFR5cGUgPSBlbnRpdHkudHlwZXNbaW1wb3J0S2V5XSE7XG5cbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgYC8vIEN1c3RvbVNjYWxhcjogJHtpbXBvcnRLZXl9YCxcbiAgICAgICAgICAgIGBjb25zdCAke2ltcG9ydEtleX0gPSAke3pvZFR5cGVUb1pvZENvZGUoem9kVHlwZSl9O2AsXG4gICAgICAgICAgICBgdHlwZSAke2ltcG9ydEtleX0gPSB6LmluZmVyPHR5cGVvZiAke2ltcG9ydEtleX0+YCxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgXTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZsYXQoKTtcbiAgICAgIHNvdXJjZUNvZGUubGluZXMgPSBbLi4uY3VzdG9tU2NhbGFyTGluZXMsIC4uLnNvdXJjZUNvZGUubGluZXNdO1xuICAgICAgc291cmNlQ29kZS5pbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcihcbiAgICAgICAgKGltcG9ydEtleSkgPT4gIWNkSW1wb3J0S2V5cy5pbmNsdWRlcyhpbXBvcnRLZXkpXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSBzb3VyY2VDb2RlLmxpbmVzLmpvaW4oXCJcXG5cIik7XG5cbiAgICAvLyBpbXBvcnRcbiAgICBjb25zdCBzb25hbXVJbXBvcnRzID0gW1xuICAgICAgXCJ6QXJyYXlhYmxlXCIsXG4gICAgICBcIlNRTERhdGVUaW1lU3RyaW5nXCIsXG4gICAgICBcIlN1YnNldFF1ZXJ5XCIsXG4gICAgICBcIlNvbmFtdVF1ZXJ5TW9kZVwiLFxuICAgIF0uZmlsdGVyKChtb2QpID0+IGJvZHkuaW5jbHVkZXMobW9kKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5LFxuICAgICAgaW1wb3J0S2V5czogc291cmNlQ29kZS5pbXBvcnRLZXlzLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1xuICAgICAgICBgaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7YCxcbiAgICAgICAgYGltcG9ydCB7ICR7c29uYW11SW1wb3J0cy5qb2luKFwiLFwiKX0gfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEVudW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEVudW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXM6IFtcbiAgICAgICAgLi4uT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpXG4gICAgICAgICAgLmZpbHRlcigoW18sIGVudW1MYWJlbF0pID0+IE9iamVjdC5rZXlzKGVudW1MYWJlbCkubGVuZ3RoID4gMClcbiAgICAgICAgICAubWFwKChbZW51bUlkLCBlbnVtTGFiZWxdKSA9PiBbXG4gICAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7ZW51bUlkfSA9IHouZW51bShbJHtPYmplY3Qua2V5cyhlbnVtTGFiZWwpLm1hcChcbiAgICAgICAgICAgICAgKGVsKSA9PiBgXCIke2VsfVwiYFxuICAgICAgICAgICAgKX1dKS5kZXNjcmliZShcIiR7ZW51bUlkfVwiKTtgLFxuICAgICAgICAgICAgYGV4cG9ydCB0eXBlICR7ZW51bUlkfSA9IHouaW5mZXI8dHlwZW9mICR7ZW51bUlkfT5gLFxuICAgICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH1MYWJlbCA9ICR7SlNPTi5zdHJpbmdpZnkoZW51bUxhYmVsKX1gLFxuICAgICAgICAgIF0pXG4gICAgICAgICAgLmZsYXQoKSxcbiAgICAgIF0sXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoXG4gICAgZW50aXR5OiBFbnRpdHksXG4gICAgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXVxuICApOiBTb3VyY2VDb2RlIHtcbiAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1CYXNlU2NoZW1hYDtcbiAgICBjb25zdCBwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuOiBlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZVR5cGU6IFwicGxhaW5cIixcbiAgICAgICAgICBwcm9wLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cyk7XG5cbiAgICAvLyBmdWxsdGV4dCBpbmRleOyXkCDtj6ztlajrkJwg7Lus65+865OkIOy2lOy2nFxuICAgIGNvbnN0IGZ1bGx0ZXh0Q29sdW1ucyA9IF8udW5pcShcbiAgICAgIGVudGl0eS5pbmRleGVzXG4gICAgICAgIC5maWx0ZXIoKGluZGV4KSA9PiBpbmRleC50eXBlID09PSBcImZ1bGx0ZXh0XCIpXG4gICAgICAgIC5mbGF0TWFwKChpbmRleCkgPT4gaW5kZXguY29sdW1ucylcbiAgICApO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke3NjaGVtYUJvZHl9YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT5gICtcbiAgICAgICAgKGZ1bGx0ZXh0Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBgICYgeyByZWFkb25seSBfX2Z1bGx0ZXh0X186IHJlYWRvbmx5IFske2Z1bGx0ZXh0Q29sdW1uc1xuICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dIH1gXG4gICAgICAgICAgOiBcIlwiKSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZVNjaGVtYTogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIC8vIFByb3Ag7JeG64qUIE1E7J24IOqyveyasCDsg53shLEg7KCc7Jm4XG4gICAgaWYgKGVudGl0eS5wcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VMaXN0UGFyYW1zYDtcblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcC50b0ZpbHRlciA9PT0gdHJ1ZSk7XG5cbiAgICBjb25zdCBwcm9wTm9kZXM6IEVudGl0eVByb3BOb2RlW10gPSBmaWx0ZXJQcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIgYXMgY29uc3QsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlckJvZHkgPSBwcm9wTm9kZXNcbiAgICAgIC5tYXAoKHByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cykpXG4gICAgICAuam9pbihcIlxcblwiKTtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSBgXG56Lm9iamVjdCh7XG4gIG51bTogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICBwYWdlOiB6Lm51bWJlcigpLmludCgpLm1pbigxKSxcbiAgc2VhcmNoOiAke2VudGl0eS5pZH1TZWFyY2hGaWVsZCxcbiAga2V5d29yZDogei5zdHJpbmcoKSxcbiAgb3JkZXJCeTogJHtlbnRpdHkuaWR9T3JkZXJCeSxcbiAgcXVlcnlNb2RlOiBTb25hbXVRdWVyeU1vZGUsXG4gIGlkOiB6QXJyYXlhYmxlKHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKSksJHtmaWx0ZXJCb2R5fVxufSkucGFydGlhbCgpO1xuYC50cmltKCk7XG5cbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIGBleHBvcnQgY29uc3QgJHtzY2hlbWFOYW1lfSA9ICR7c2NoZW1hQm9keX1gLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PmAsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEJhc2VMaXN0UGFyYW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgaW1wb3J0S2V5cyxcbiAgICAgIGxpbmVzLFxuICAgIH07XG4gIH1cblxuICBnZXRTdWJzZXRTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGlmIChPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cykubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNldEtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cyk7XG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgICAuLi5zdWJzZXRLZXlzXG4gICAgICAgIC5tYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAgIC8vIOyEnOu4jOyFi+yXkOyEnCBGaWVsZEV4cHJbXSDqsIDsoLjsmLRcbiAgICAgICAgICBjb25zdCBmaWVsZEV4cHJzID0gZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcblxuICAgICAgICAgIC8vIEZpZWxkRXhwcltd66GcIEVudGl0eVByb3BOb2RlW10g6rCA7KC47Ji0XG4gICAgICAgICAgY29uc3QgcHJvcE5vZGVzID0gZW50aXR5LmZpZWxkRXhwcnNUb1Byb3BOb2RlcyhmaWVsZEV4cHJzKTtcbiAgICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXQke3N1YnNldEtleX1gO1xuICAgICAgICAgIGNvbnN0IHByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSA9IHtcbiAgICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IHByb3BOb2RlcyxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gRW50aXR5UHJvcE5vZGVbXeuhnCBab2RUeXBlRGVmKHN0cmluZynsnYQg6rCA7KC47Ji0XG4gICAgICAgICAgY29uc3QgYm9keSA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcblxuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke2JvZHl9YCxcbiAgICAgICAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT5gLFxuICAgICAgICAgIF07XG4gICAgICAgIH0pXG4gICAgICAgIC5mbGF0KCksXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldE1hcHBpbmcgPSB7YCxcbiAgICAgIC4uLnN1YnNldEtleXMubWFwKFxuICAgICAgICAoc3Vic2V0S2V5KSA9PlxuICAgICAgICAgIGAgICR7c3Vic2V0S2V5fTogJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldCR7c3Vic2V0S2V5fTtgXG4gICAgICApLFxuICAgICAgXCJ9XCIsXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXkgPSB6LmVudW0oWyR7c3Vic2V0S2V5c1xuICAgICAgICAubWFwKChrKSA9PiBgXCIke2t9XCJgKVxuICAgICAgICAuam9pbihcIixcIil9XSk7YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5pbmZlcjx0eXBlb2YgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleT5gLFxuICAgICAgXCJcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgU3Vic2V0czogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGxpbmVzLFxuICAgICAgaW1wb3J0S2V5czogXy51bmlxKGltcG9ydEtleXMpLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfIiwiRW50aXR5TWFuYWdlciIsInByb3BOb2RlVG9ab2RUeXBlRGVmIiwiem9kVHlwZVRvWm9kQ29kZSIsIlRlbXBsYXRlIiwibm9uTnVsbGFibGUiLCJTb25hbXUiLCJUZW1wbGF0ZV9fZ2VuZXJhdGVkIiwiZ2V0VGFyZ2V0QW5kUGF0aCIsImRpciIsImNvbmZpZyIsImFwaSIsInRhcmdldCIsInBhdGgiLCJyZW5kZXIiLCJlbnRpdHlJZHMiLCJnZXRBbGxJZHMiLCJlbnRpdGllcyIsIm1hcCIsImlkIiwiZ2V0Iiwic291cmNlQ29kZXMiLCJlbnRpdHkiLCJnZXRFbnVtc1NvdXJjZUNvZGUiLCJnZXRCYXNlU2NoZW1hU291cmNlQ29kZSIsImdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZSIsImdldFN1YnNldFNvdXJjZUNvZGUiLCJmaWx0ZXIiLCJmbGF0IiwiTEFCRUxfS0VZX09SREVSIiwic29ydCIsImEiLCJiIiwiYUtleSIsImxhYmVsIiwic3BsaXQiLCJiS2V5IiwiYUluZGV4IiwiaW5kZXhPZiIsImJJbmRleCIsInNvdXJjZUNvZGUiLCJyZWR1Y2UiLCJyZXN1bHQiLCJ0cyIsImxpbmVzIiwiaW1wb3J0S2V5cyIsInVuaXEiLCJhbGxUeXBlS2V5cyIsIk9iamVjdCIsImtleXMiLCJ0eXBlcyIsImNkSW1wb3J0S2V5cyIsImltcG9ydEtleSIsImluY2x1ZGVzIiwibGVuZ3RoIiwiY3VzdG9tU2NhbGFyTGluZXMiLCJmaW5kIiwiRXJyb3IiLCJ6b2RUeXBlIiwiYm9keSIsImpvaW4iLCJzb25hbXVJbXBvcnRzIiwibW9kIiwiY3VzdG9tSGVhZGVycyIsImVudW1MYWJlbHMiLCJlbnRyaWVzIiwiZW51bUxhYmVsIiwiZW51bUlkIiwiZWwiLCJKU09OIiwic3RyaW5naWZ5Iiwic2NoZW1hTmFtZSIsIm5hbWVzIiwibW9kdWxlIiwicHJvcE5vZGUiLCJub2RlVHlwZSIsImNoaWxkcmVuIiwicHJvcHMiLCJwcm9wIiwic2NoZW1hQm9keSIsImZ1bGx0ZXh0Q29sdW1ucyIsImluZGV4ZXMiLCJpbmRleCIsInR5cGUiLCJmbGF0TWFwIiwiY29sdW1ucyIsImNvbCIsInBhcmVudElkIiwidW5kZWZpbmVkIiwiZmlsdGVyUHJvcHMiLCJ0b0ZpbHRlciIsInByb3BOb2RlcyIsImZpbHRlckJvZHkiLCJ0cmltIiwic3Vic2V0cyIsInN1YnNldEtleXMiLCJzdWJzZXRLZXkiLCJmaWVsZEV4cHJzIiwiZmllbGRFeHByc1RvUHJvcE5vZGVzIiwiayJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWUEsT0FBTyxZQUFZO0FBRS9CLFNBQVNDLGFBQWEsUUFBUSxpQ0FBOEI7QUFHNUQsU0FBU0Msb0JBQW9CLEVBQUVDLGdCQUFnQixRQUFRLCtCQUE0QjtBQUNuRixTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFDdkMsU0FBU0MsV0FBVyxRQUFRLHVCQUFvQjtBQUNoRCxTQUFTQyxNQUFNLFFBQVEscUJBQVk7QUFPbkMsT0FBTyxNQUFNQyw0QkFBNEJIO0lBQ3ZDLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBSSxtQkFBbUI7UUFDakIsTUFBTSxFQUFFQyxHQUFHLEVBQUUsR0FBR0gsT0FBT0ksTUFBTSxDQUFDQyxHQUFHO1FBRWpDLE9BQU87WUFDTEMsUUFBUSxHQUFHSCxJQUFJLGdCQUFnQixDQUFDO1lBQ2hDSSxNQUFNLENBQUMsbUJBQW1CLENBQUM7UUFDN0I7SUFDRjtJQUVBQyxPQUFPLEVBQWdDLEVBQUU7UUFDdkMsTUFBTUMsWUFBWWQsY0FBY2UsU0FBUztRQUN6QyxNQUFNQyxXQUFXRixVQUFVRyxHQUFHLENBQUMsQ0FBQ0MsS0FBT2xCLGNBQWNtQixHQUFHLENBQUNEO1FBRXpELG1CQUFtQjtRQUNuQixNQUFNRSxjQUFjSixTQUNqQkMsR0FBRyxDQUFDLENBQUNJO1lBQ0os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
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi8uLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlQcm9wTm9kZSwgaXNWaXJ0dWFsUHJvcCB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBwcm9wTm9kZVRvWm9kVHlwZURlZiwgem9kVHlwZVRvWm9kQ29kZSB9IGZyb20gXCIuLi96b2QtY29udmVydGVyXCI7XG5cbmV4cG9ydCB0eXBlIFNvdXJjZUNvZGUgPSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxpbmVzOiBzdHJpbmdbXTtcbiAgaW1wb3J0S2V5czogc3RyaW5nW107XG59O1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX19nZW5lcmF0ZWQgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiZ2VuZXJhdGVkXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aCgpIHtcbiAgICBjb25zdCB7IGRpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYHNvbmFtdS5nZW5lcmF0ZWQudHNgLFxuICAgIH07XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgY29uc3QgZW50aXRpZXMgPSBlbnRpdHlJZHMubWFwKChpZCkgPT4gRW50aXR5TWFuYWdlci5nZXQoaWQpKTtcblxuICAgIC8vIOyghOyytCBTb3VyY2VDb2RlIOyDneyEsVxuICAgIGNvbnN0IHNvdXJjZUNvZGVzID0gZW50aXRpZXMuZmxhdE1hcCgoZW50aXR5KSA9PiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLmdldEVudW1zU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICB0aGlzLmdldEJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgXS5maWx0ZXIobm9uTnVsbGFibGUpO1xuICAgIH0pO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOnNvdXJjZUNvZGVzXCIsIHNvdXJjZUNvZGVzKTtcblxuICAgIC8vIFNvcnRcbiAgICBjb25zdCBMQUJFTF9LRVlfT1JERVIgPSBbXCJFbnVtc1wiLCBcIkJhc2VTY2hlbWFcIiwgXCJCYXNlTGlzdFBhcmFtc1wiLCBcIlN1YnNldHNcIiwgXCJTdWJzZXRRdWVyaWVzXCJdO1xuICAgIHNvdXJjZUNvZGVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IFthS2V5XSA9IGEubGFiZWwuc3BsaXQoXCI6XCIpO1xuICAgICAgY29uc3QgW2JLZXldID0gYi5sYWJlbC5zcGxpdChcIjpcIik7XG4gICAgICBjb25zdCBhSW5kZXggPSBMQUJFTF9LRVlfT1JERVIuaW5kZXhPZihhS2V5KTtcbiAgICAgIGNvbnN0IGJJbmRleCA9IExBQkVMX0tFWV9PUkRFUi5pbmRleE9mKGJLZXkpO1xuICAgICAgaWYgKGFJbmRleCA+IGJJbmRleCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSBpZiAoYUluZGV4IDwgYkluZGV4KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgc291cmNlQ29kZSA9IHNvdXJjZUNvZGVzLnJlZHVjZShcbiAgICAgIChyZXN1bHQsIHRzKSA9PiB7XG4gICAgICAgIGlmICh0cyA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lczogWy4uLnJlc3VsdC5saW5lcywgYC8vICR7dHMubGFiZWx9YCwgLi4udHMubGluZXMsIFwiXCJdLFxuICAgICAgICAgIGltcG9ydEtleXM6IHVuaXF1ZShbLi4ucmVzdWx0LmltcG9ydEtleXMsIC4uLnRzLmltcG9ydEtleXNdLnNvcnQoKSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj4sXG4gICAgKTtcblxuICAgIC8vIC50eXBlcy50c+ydmCDtg4DsnoXsnYQg7LC47KGw7ZWY64qUIOqyveyasCDsiJztmZjssLjsobAo7IOB7Zi47LC47KGwKeqwgCDrsJzsg53tlZjrr4DroZwg7YOA7J6F7J2EIOqwgOyguOyZgCDsnbjrnbzsnbgg7LKY66asXG4gICAgY29uc3QgYWxsVHlwZUtleXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IE9iamVjdC5rZXlzKGVudGl0eS50eXBlcykpO1xuICAgIGNvbnN0IGNkSW1wb3J0S2V5cyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGltcG9ydEtleSkgPT5cbiAgICAgIGFsbFR5cGVLZXlzLmluY2x1ZGVzKGltcG9ydEtleSksXG4gICAgKTtcbiAgICBpZiAoY2RJbXBvcnRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1c3RvbVNjYWxhckxpbmVzID0gY2RJbXBvcnRLZXlzLmZsYXRNYXAoKGltcG9ydEtleSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllcy5maW5kKChlbnRpdHkpID0+IGVudGl0eS50eXBlc1tpbXBvcnRLZXldKTtcbiAgICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFpvZFR5cGUgbm90IGZvdW5kICR7aW1wb3J0S2V5fWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHpvZFR5cGUgPSBlbnRpdHkudHlwZXNbaW1wb3J0S2V5XTtcbiAgICAgICAgYXNzZXJ0KHpvZFR5cGUpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYC8vIEN1c3RvbVNjYWxhcjogJHtpbXBvcnRLZXl9YCxcbiAgICAgICAgICBgY29uc3QgJHtpbXBvcnRLZXl9ID0gJHt6b2RUeXBlVG9ab2RDb2RlKHpvZFR5cGUpfTtgLFxuICAgICAgICAgIGB0eXBlICR7aW1wb3J0S2V5fSA9IHouaW5mZXI8dHlwZW9mICR7aW1wb3J0S2V5fT5gLFxuICAgICAgICAgIFwiXCIsXG4gICAgICAgIF07XG4gICAgICB9KTtcbiAgICAgIHNvdXJjZUNvZGUubGluZXMgPSBbLi4uY3VzdG9tU2NhbGFyTGluZXMsIC4uLnNvdXJjZUNvZGUubGluZXNdO1xuICAgICAgc291cmNlQ29kZS5pbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcihcbiAgICAgICAgKGltcG9ydEtleSkgPT4gIWNkSW1wb3J0S2V5cy5pbmNsdWRlcyhpbXBvcnRLZXkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gc291cmNlQ29kZS5saW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOmJvZHlcIiwgYm9keSk7XG5cbiAgICAvLyBpbXBvcnRcbiAgICBjb25zdCBzb25hbXVJbXBvcnRzID0gW1xuICAgICAgXCJ6QXJyYXlhYmxlXCIsXG4gICAgICBcIlNRTERhdGVUaW1lU3RyaW5nXCIsXG4gICAgICBcIlN1YnNldFF1ZXJ5XCIsXG4gICAgICBcIlNvbmFtdVF1ZXJ5TW9kZVwiLFxuICAgIF0uZmlsdGVyKChtb2QpID0+IGJvZHkuaW5jbHVkZXMobW9kKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5LFxuICAgICAgaW1wb3J0S2V5czogc291cmNlQ29kZS5pbXBvcnRLZXlzLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1xuICAgICAgICBcIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQ6IGdlbmVyYXRlZOuKlCDrrLTsi5wgKi9cIixcbiAgICAgICAgXCIvKiogYmlvbWUtaWdub3JlLWFsbCBhc3Npc3Q6IGdlbmVyYXRlZOuKlCDrrLTsi5wgKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgYGltcG9ydCB7IHogfSBmcm9tICd6b2QnO2AsXG4gICAgICAgIGBpbXBvcnQgeyAke3NvbmFtdUltcG9ydHMuam9pbihcIixcIil9IH0gZnJvbSBcInNvbmFtdVwiO2AsXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBnZXRFbnVtc1NvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHkpOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGVudGl0eS5lbnVtTGFiZWxzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBFbnVtczogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgIC4uLk9iamVjdC5lbnRyaWVzKGVudGl0eS5lbnVtTGFiZWxzKVxuICAgICAgICAgIC5maWx0ZXIoKFtfLCBlbnVtTGFiZWxdKSA9PiBPYmplY3Qua2V5cyhlbnVtTGFiZWwpLmxlbmd0aCA+IDApXG4gICAgICAgICAgLmZsYXRNYXAoKFtlbnVtSWQsIGVudW1MYWJlbF0pID0+IFtcbiAgICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnVtSWR9ID0gei5lbnVtKFske09iamVjdC5rZXlzKGVudW1MYWJlbCkubWFwKFxuICAgICAgICAgICAgICAoZWwpID0+IGBcIiR7ZWx9XCJgLFxuICAgICAgICAgICAgKX1dKS5kZXNjcmliZShcIiR7ZW51bUlkfVwiKTtgLFxuICAgICAgICAgICAgYGV4cG9ydCB0eXBlICR7ZW51bUlkfSA9IHouaW5mZXI8dHlwZW9mICR7ZW51bUlkfT47YCxcbiAgICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnVtSWR9TGFiZWwgPSAke0pTT04uc3RyaW5naWZ5KGVudW1MYWJlbCl9O2AsXG4gICAgICAgICAgXSksXG4gICAgICBdLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxuXG4gIGdldEJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5LCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdKTogU291cmNlQ29kZSB7XG4gICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9QmFzZVNjaGVtYWA7XG4gICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbjogZW50aXR5LnByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIsXG4gICAgICAgICAgcHJvcCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWFCb2R5ID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcbiAgICAgIGlmIChyZXN1bHQuZW5kc1dpdGgoXCIsXCIpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pKCk7XG5cbiAgICAvLyBmdWxsdGV4dCBpbmRleOyXkCDtj6ztlajrkJwg7Lus65+865OkIOy2lOy2nFxuICAgIGNvbnN0IGZ1bGx0ZXh0Q29sdW1ucyA9IHVuaXF1ZShcbiAgICAgIGVudGl0eS5pbmRleGVzLmZpbHRlcigoaW5kZXgpID0+IGluZGV4LnR5cGUgPT09IFwiZnVsbHRleHRcIikuZmxhdE1hcCgoaW5kZXgpID0+IGluZGV4LmNvbHVtbnMpLFxuICAgICk7XG5cbiAgICAvLyB2aXJ0dWFsIHByb3BzXG4gICAgY29uc3QgdmlydHVhbFByb3BzID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBpc1ZpcnR1YWxQcm9wKHByb3ApKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PmAgK1xuICAgICAgICAoZnVsbHRleHRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IGAgJiB7IHJlYWRvbmx5IF9fZnVsbHRleHRfXzogcmVhZG9ubHkgWyR7ZnVsbHRleHRDb2x1bW5zXG4gICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0gfWBcbiAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgKHZpcnR1YWxQcm9wcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBgICYgeyByZWFkb25seSBfX3ZpcnR1YWxfXzogcmVhZG9ubHkgWyR7dmlydHVhbFByb3BzXG4gICAgICAgICAgICAgIC5tYXAoKHByb3ApID0+IGBcIiR7cHJvcH1cImApXG4gICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSB9YFxuICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICBcIjtcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZVNjaGVtYTogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIC8vIFByb3Ag7JeG64qUIE1E7J24IOqyveyasCDsg53shLEg7KCc7Jm4XG4gICAgaWYgKGVudGl0eS5wcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VMaXN0UGFyYW1zYDtcblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcC50b0ZpbHRlciA9PT0gdHJ1ZSk7XG5cbiAgICBjb25zdCBwcm9wTm9kZXM6IEVudGl0eVByb3BOb2RlW10gPSBmaWx0ZXJQcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIgYXMgY29uc3QsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlckJvZHkgPSBwcm9wTm9kZXNcbiAgICAgIC5tYXAoKHByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cykpXG4gICAgICAuam9pbihcIlxcblwiKTtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSBgXG56Lm9iamVjdCh7XG4gIG51bTogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICBwYWdlOiB6Lm51bWJlcigpLmludCgpLm1pbigxKSxcbiAgc2VhcmNoOiAke2VudGl0eS5pZH1TZWFyY2hGaWVsZCxcbiAga2V5d29yZDogei5zdHJpbmcoKSxcbiAgb3JkZXJCeTogJHtlbnRpdHkuaWR9T3JkZXJCeSxcbiAgcXVlcnlNb2RlOiBTb25hbXVRdWVyeU1vZGUsXG4gIGlkOiB6QXJyYXlhYmxlKHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKSksJHtmaWx0ZXJCb2R5fVxufSkucGFydGlhbCgpO1xuYC50cmltKCk7XG5cbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIGBleHBvcnQgY29uc3QgJHtzY2hlbWFOYW1lfSA9ICR7c2NoZW1hQm9keX1gLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PjtgLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBCYXNlTGlzdFBhcmFtczogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChlbnRpdHkucGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKTtcbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC4uLnN1YnNldEtleXMuZmxhdE1hcCgoc3Vic2V0S2V5KSA9PiB7XG4gICAgICAgIC8vIOyEnOu4jOyFi+yXkOyEnCBGaWVsZEV4cHJbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgZmllbGRFeHBycyA9IGVudGl0eS5zdWJzZXRzW3N1YnNldEtleV07XG5cbiAgICAgICAgLy8gRmllbGRFeHByW13roZwgRW50aXR5UHJvcE5vZGVbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgcHJvcE5vZGVzID0gZW50aXR5LmZpZWxkRXhwcnNUb1Byb3BOb2RlcyhmaWVsZEV4cHJzKTtcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9YDtcbiAgICAgICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIGNoaWxkcmVuOiBwcm9wTm9kZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRW50aXR5UHJvcE5vZGVbXeuhnCBab2RUeXBlRGVmKHN0cmluZynsnYQg6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IGJvZHkgPSBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cyk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke2JvZHkucmVwbGFjZSgvLCQvLCBcIlwiKX07YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+O2AsXG4gICAgICAgIF07XG4gICAgICB9KSxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0TWFwcGluZyA9IHtgLFxuICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4gYCAgJHtzdWJzZXRLZXl9OiAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9O2ApLFxuICAgICAgXCJ9O1wiLFxuICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5lbnVtKFske3N1YnNldEtleXNcbiAgICAgICAgLm1hcCgoaykgPT4gYFwiJHtrfVwiYClcbiAgICAgICAgLmpvaW4oXCIsXCIpfV0pO2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXk+O2AsXG4gICAgICBcIlwiLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBTdWJzZXRzOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXMsXG4gICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoaW1wb3J0S2V5cyksXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFzc2VydCIsInVuaXF1ZSIsIlNvbmFtdSIsIkVudGl0eU1hbmFnZXIiLCJOYWl0ZSIsImlzVmlydHVhbFByb3AiLCJub25OdWxsYWJsZSIsIlRlbXBsYXRlIiwicHJvcE5vZGVUb1pvZFR5cGVEZWYiLCJ6b2RUeXBlVG9ab2RDb2RlIiwiVGVtcGxhdGVfX2dlbmVyYXRlZCIsImdldFRhcmdldEFuZFBhdGgiLCJkaXIiLCJjb25maWciLCJhcGkiLCJ0YXJnZXQiLCJwYXRoIiwicmVuZGVyIiwiZW50aXR5SWRzIiwiZ2V0QWxsSWRzIiwiZW50aXRpZXMiLCJtYXAiLCJpZCIsImdldCIsInNvdXJjZUNvZGVzIiwiZmxhdE1hcCIsImVudGl0eSIsImdldEVudW1zU291cmNlQ29kZSIsImdldEJhc2VTY2hlbWFTb3VyY2VDb2RlIiwiZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlIiwiZ2V0U3Vic2V0U291cmNlQ29kZSIsImZpbHRlciIsInQiLCJMQUJFTF9LRVlfT1JERVIiLCJzb3J0IiwiYSIsImIiLCJhS2V5IiwibGFiZWwiLCJzcGxpdCIsImJLZXkiLCJhSW5kZXgiLCJpbmRleE9mIiwiYkluZGV4Iiwic291cmNlQ29kZSIsInJlZHVjZSIsInJlc3VsdCIsInRzIiwibGluZXMiLCJpbXBvcnRLZXlzIiwiYWxsVHlwZUtleXMiLCJPYmplY3QiLCJrZXlzIiwidHlwZXMiLCJjZEltcG9ydEtleXMiLCJpbXBvcnRLZXkiLCJpbmNsdWRlcyIsImxlbmd0aCIsImN1c3RvbVNjYWxhckxpbmVzIiwiZmluZCIsIkVycm9yIiwiem9kVHlwZSIsImJvZHkiLCJqb2luIiwic29uYW11SW1wb3J0cyIsIm1vZCIsImN1c3RvbUhlYWRlcnMiLCJlbnVtTGFiZWxzIiwiZW50cmllcyIsIl8iLCJlbnVtTGFiZWwiLCJlbnVtSWQiLCJlbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzY2hlbWFOYW1lIiwibmFtZXMiLCJtb2R1bGUiLCJwcm9wTm9kZSIsIm5vZGVUeXBlIiwiY2hpbGRyZW4iLCJwcm9wcyIsInByb3AiLCJzY2hlbWFCb2R5IiwiZW5kc1dpdGgiLCJzbGljZSIsImZ1bGx0ZXh0Q29sdW1ucyIsImluZGV4ZXMiLCJpbmRleCIsInR5cGUiLCJjb2x1bW5zIiwidmlydHVhbFByb3BzIiwibmFtZSIsImNvbCIsInBhcmVudElkIiwidW5kZWZpbmVkIiwiZmlsdGVyUHJvcHMiLCJ0b0ZpbHRlciIsInByb3BOb2RlcyIsImZpbHRlckJvZHkiLCJ0cmltIiwic3Vic2V0cyIsInN1YnNldEtleXMiLCJzdWJz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
@@ -1,6 +1,5 @@
1
1
  import { z } from "zod";
2
- import { TemplateOptions } from "../../types/types";
3
- import { ExtendedApi } from "../../api/decorators";
2
+ import type { ExtendedApi } from "../../api/decorators";
4
3
  import { Template } from "../template";
5
4
  export declare class Template__generated_http extends Template {
6
5
  constructor();
@@ -8,7 +7,7 @@ export declare class Template__generated_http extends Template {
8
7
  target: string;
9
8
  path: string;
10
9
  };
11
- render({}: TemplateOptions["generated_http"]): Promise<{
10
+ render(): Promise<{
12
11
  body: string;
13
12
  importKeys: never[];
14
13
  target: string;
@@ -1 +1 @@
1
- {"version":3,"file":"generated_http.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated_http.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvC,qBAAa,wBAAyB,SAAQ,QAAQ;;IAKpD,gBAAgB;;;;IASV,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,gBAAgB,CAAC;;;;;;IAwDlD,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAoFvE,gBAAgB,CACd,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;KAAE,GACnD;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;CAc9B"}
1
+ {"version":3,"file":"generated_http.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated_http.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,wBAAyB,SAAQ,QAAQ;;IAKpD,gBAAgB;;;;IASV,MAAM;;;;;;IA8CZ,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAgEvE,gBAAgB,CACd,GAAG,EAAE,WAAW,EAEhB,UAAU,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;KAAE,GACnD;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE;CAY9B"}
@@ -1,9 +1,8 @@
1
1
  import qs from "qs";
2
2
  import { z } from "zod";
3
3
  import { getZodObjectFromApi } from "../../api/code-converters.js";
4
- import { Template } from "../template.js";
5
- import prettier from "prettier";
6
4
  import { Sonamu } from "../../api/sonamu.js";
5
+ import { Template } from "../template.js";
7
6
  export class Template__generated_http extends Template {
8
7
  constructor(){
9
8
  super("generated_http");
@@ -15,7 +14,7 @@ export class Template__generated_http extends Template {
15
14
  path: `sonamu.generated.http`
16
15
  };
17
16
  }
18
- async render({}) {
17
+ async render() {
19
18
  const { syncer: { types, apis }, config: { api: { route: { prefix } } } } = Sonamu;
20
19
  const lines = await Promise.all(apis.map(async (api)=>{
21
20
  const reqObject = this.resolveApiParams(api, types);
@@ -34,9 +33,7 @@ export class Template__generated_http extends Template {
34
33
  querystring: [],
35
34
  body: [
36
35
  "",
37
- await prettier.format(JSON.stringify(reqObject), {
38
- parser: "json"
39
- })
36
+ JSON.stringify(reqObject, null, 2)
40
37
  ]
41
38
  };
42
39
  }
@@ -91,13 +88,15 @@ export class Template__generated_http extends Template {
91
88
  } else if (zodType instanceof z.ZodUnknown) {
92
89
  return "unknown";
93
90
  } else if (zodType instanceof z.ZodTuple) {
94
- return zodType.def.items.map((item)=>this.zodTypeToReqDefault(item, name));
91
+ /** biome-ignore lint/suspicious/noExplicitAny: ZodTuple 타입 사용 */ return zodType.def.items.map((item)=>this.zodTypeToReqDefault(item, name));
95
92
  } else if (zodType instanceof z.ZodDate) {
96
93
  return "2000-01-01";
97
94
  } else if (zodType instanceof z.ZodLiteral) {
98
95
  return zodType.value;
99
96
  } else if (zodType instanceof z.ZodRecord || zodType instanceof z.ZodMap) {
97
+ // biome-ignore lint/suspicious/noExplicitAny: ZodRecord 타입 사용
100
98
  const kvDef = zodType.def;
99
+ // biome-ignore lint/suspicious/noExplicitAny: ZodIntersection 타입 사용
101
100
  const key = this.zodTypeToReqDefault(kvDef.keyType, name);
102
101
  const value = this.zodTypeToReqDefault(kvDef.valueType, name);
103
102
  return {
@@ -116,7 +115,8 @@ export class Template__generated_http extends Template {
116
115
  return `unknown-${zodType.type}`;
117
116
  }
118
117
  }
119
- resolveApiParams(api, references) {
118
+ resolveApiParams(api, // biome-ignore lint/suspicious/noExplicitAny: ZodObject 타입 사용
119
+ references) {
120
120
  const reqType = getZodObjectFromApi(api, references);
121
121
  try {
122
122
  const def = this.zodTypeToReqDefault(reqType, "unknownName");
@@ -128,4 +128,4 @@ export class Template__generated_http extends Template {
128
128
  }
129
129
  }
130
130
 
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkX2h0dHAudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHFzIGZyb20gXCJxc1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0Wm9kT2JqZWN0RnJvbUFwaSB9IGZyb20gXCIuLi8uLi9hcGkvY29kZS1jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBFeHRlbmRlZEFwaSB9IGZyb20gXCIuLi8uLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCBwcmV0dGllciBmcm9tIFwicHJldHRpZXJcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGkvc29uYW11XCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fZ2VuZXJhdGVkX2h0dHAgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiZ2VuZXJhdGVkX2h0dHBcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcblxuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGBzb25hbXUuZ2VuZXJhdGVkLmh0dHBgLFxuICAgIH07XG4gIH1cblxuICBhc3luYyByZW5kZXIoe306IFRlbXBsYXRlT3B0aW9uc1tcImdlbmVyYXRlZF9odHRwXCJdKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3luY2VyOiB7IHR5cGVzLCBhcGlzIH0sXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgYXBpOiB7XG4gICAgICAgICAgcm91dGU6IHsgcHJlZml4IH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0gPSBTb25hbXU7XG5cbiAgICBjb25zdCBsaW5lcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgYXBpcy5tYXAoYXN5bmMgKGFwaSkgPT4ge1xuICAgICAgICBjb25zdCByZXFPYmplY3QgPSB0aGlzLnJlc29sdmVBcGlQYXJhbXMoYXBpLCB0eXBlcyk7XG5cbiAgICAgICAgY29uc3QgZGF0YUxpbmVzID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoKGFwaS5vcHRpb25zLmh0dHBNZXRob2QgPz8gXCJHRVRcIikgPT09IFwiR0VUXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHF1ZXJ5c3RyaW5nOiBbXG4gICAgICAgICAgICAgICAgcXNcbiAgICAgICAgICAgICAgICAgIC5zdHJpbmdpZnkocmVxT2JqZWN0LCB7IGVuY29kZTogZmFsc2UgfSlcbiAgICAgICAgICAgICAgICAgIC5zcGxpdChcIiZcIilcbiAgICAgICAgICAgICAgICAgIC5qb2luKFwiXFxuXFx0JlwiKSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBxdWVyeXN0cmluZzogW10sXG4gICAgICAgICAgICAgIGJvZHk6IFtcbiAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgICAgIGF3YWl0IHByZXR0aWVyLmZvcm1hdChKU09OLnN0cmluZ2lmeShyZXFPYmplY3QpLCB7XG4gICAgICAgICAgICAgICAgICBwYXJzZXI6IFwianNvblwiLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBbXG4gICAgICAgICAgICBgJHthcGkub3B0aW9ucy5odHRwTWV0aG9kID8/IFwiR0VUXCJ9IHt7YmFzZVVybH19JHtwcmVmaXh9JHthcGkucGF0aH1gLFxuICAgICAgICAgICAgLi4uZGF0YUxpbmVzLnF1ZXJ5c3RyaW5nLFxuICAgICAgICAgIF0uam9pbihcIlxcblxcdD9cIiksXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHthcGkub3B0aW9ucy5jb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIn1gLFxuICAgICAgICAgIC4uLmRhdGFMaW5lcy5ib2R5LFxuICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5OiBsaW5lcy5qb2luKFwiXFxuXFxuIyMjXFxuXFxuXCIpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxuXG4gIHpvZFR5cGVUb1JlcURlZmF1bHQoem9kVHlwZTogei5ab2RUeXBlPHVua25vd24+LCBuYW1lOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3Qua2V5cyh6b2RUeXBlLnNoYXBlKS5tYXAoKGtleSkgPT4gW1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoem9kVHlwZS5zaGFwZVtrZXldLCBrZXkpLFxuICAgICAgICBdKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoXG4gICAgICAgICAgKHpvZFR5cGUgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU+KS5lbGVtZW50LFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgKSxcbiAgICAgIF07XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcpIHtcbiAgICAgIGlmIChuYW1lLmVuZHNXaXRoKFwiX2F0XCIpIHx8IG5hbWUuZW5kc1dpdGgoXCJfZGF0ZVwiKSB8fCBuYW1lID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiMjAwMC0wMS0wMVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcikge1xuICAgICAgaWYgKG5hbWUgPT09IFwibnVtXCIpIHtcbiAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW5WYWx1ZSA9IHpvZFR5cGUubWluVmFsdWUgPz8gMDtcbiAgICAgIHJldHVybiBtaW5WYWx1ZSA+IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSID8gbWluVmFsdWUgOiAwO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQm9vbGVhbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgICAgcmV0dXJuIHpvZFR5cGUub3B0aW9uc1swXTtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsKSB7XG4gICAgICByZXR1cm4gdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KFxuICAgICAgICAoem9kVHlwZSBhcyB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUsXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdWxsYWJsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuem9kVHlwZVRvUmVxRGVmYXVsdChcbiAgICAgICAgKHpvZFR5cGUgYXMgei5ab2RVbmlvbjx6LlpvZFR5cGVbXT4pLmRlZi5vcHRpb25zWzBdLFxuICAgICAgICBuYW1lXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5rbm93bikge1xuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVHVwbGUpIHtcbiAgICAgIHJldHVybiB6b2RUeXBlLmRlZi5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT5cbiAgICAgICAgdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KGl0ZW0sIG5hbWUpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSkge1xuICAgICAgcmV0dXJuIFwiMjAwMC0wMS0wMVwiO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIHpvZFR5cGUudmFsdWU7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RSZWNvcmQgfHwgem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTWFwKSB7XG4gICAgICBjb25zdCBrdkRlZiA9IChcbiAgICAgICAgem9kVHlwZSBhcyB6LlpvZFJlY29yZDxhbnksIHouWm9kVHlwZT4gfCB6LlpvZE1hcDx6LlpvZFR5cGUsIHouWm9kVHlwZT5cbiAgICAgICkuZGVmO1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KGt2RGVmLmtleVR5cGUsIG5hbWUpIGFzIGFueTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KGt2RGVmLnZhbHVlVHlwZSwgbmFtZSk7XG4gICAgICByZXR1cm4geyBba2V5XTogdmFsdWUgfTtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFNldCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KFxuICAgICAgICAgICh6b2RUeXBlIGFzIHouWm9kU2V0PHouWm9kVHlwZT4pLmRlZi52YWx1ZVR5cGUsXG4gICAgICAgICAgbmFtZVxuICAgICAgICApLFxuICAgICAgXTtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEludGVyc2VjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuem9kVHlwZVRvUmVxRGVmYXVsdChcbiAgICAgICAgKHpvZFR5cGUgYXMgei5ab2RJbnRlcnNlY3Rpb248ei5ab2RUeXBlLCB6LlpvZFR5cGU+KS5kZWYucmlnaHQsXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2REZWZhdWx0KSB7XG4gICAgICByZXR1cm4gdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KFxuICAgICAgICAoem9kVHlwZSBhcyB6LlpvZERlZmF1bHQ8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSxcbiAgICAgICAgbmFtZVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29uc29sZS5sb2coem9kVHlwZSk7XG4gICAgICByZXR1cm4gYHVua25vd24tJHt6b2RUeXBlLnR5cGV9YDtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlQXBpUGFyYW1zKFxuICAgIGFwaTogRXh0ZW5kZWRBcGksXG4gICAgcmVmZXJlbmNlczogeyBbdHlwZU5hbWU6IHN0cmluZ106IHouWm9kT2JqZWN0PGFueT4gfVxuICApOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSB7XG4gICAgY29uc3QgcmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGkoYXBpLCByZWZlcmVuY2VzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVmID0gdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KHJlcVR5cGUsIFwidW5rbm93bk5hbWVcIikgYXMge1xuICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBkZWY7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCB6b2QgdHlwZSBkZXRlY3RlZCBvbiAke2FwaS5tb2RlbE5hbWV9OiR7YXBpLm1ldGhvZE5hbWV9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJxcyIsInoiLCJnZXRab2RPYmplY3RGcm9tQXBpIiwiVGVtcGxhdGUiLCJwcmV0dGllciIsIlNvbmFtdSIsIlRlbXBsYXRlX19nZW5lcmF0ZWRfaHR0cCIsImdldFRhcmdldEFuZFBhdGgiLCJkaXIiLCJjb25maWciLCJhcGkiLCJ0YXJnZXQiLCJwYXRoIiwicmVuZGVyIiwic3luY2VyIiwidHlwZXMiLCJhcGlzIiwicm91dGUiLCJwcmVmaXgiLCJsaW5lcyIsIlByb21pc2UiLCJhbGwiLCJtYXAiLCJyZXFPYmplY3QiLCJyZXNvbHZlQXBpUGFyYW1zIiwiZGF0YUxpbmVzIiwib3B0aW9ucyIsImh0dHBNZXRob2QiLCJxdWVyeXN0cmluZyIsInN0cmluZ2lmeSIsImVuY29kZSIsInNwbGl0Iiwiam9pbiIsImJvZHkiLCJmb3JtYXQiLCJKU09OIiwicGFyc2VyIiwiY29udGVudFR5cGUiLCJpbXBvcnRLZXlzIiwiem9kVHlwZVRvUmVxRGVmYXVsdCIsInpvZFR5cGUiLCJuYW1lIiwiWm9kT2JqZWN0IiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJrZXlzIiwic2hhcGUiLCJrZXkiLCJab2RBcnJheSIsImVsZW1lbnQiLCJab2RTdHJpbmciLCJlbmRzV2l0aCIsInRvVXBwZXJDYXNlIiwiWm9kTnVtYmVyIiwibWluVmFsdWUiLCJOdW1iZXIiLCJNSU5fU0FGRV9JTlRFR0VSIiwiWm9kQm9vbGVhbiIsIlpvZEVudW0iLCJab2RPcHRpb25hbCIsImRlZiIsImlubmVyVHlwZSIsIlpvZE51bGxhYmxlIiwiWm9kVW5pb24iLCJab2RVbmtub3duIiwiWm9kVHVwbGUiLCJpdGVtcyIsIml0ZW0iLCJab2REYXRlIiwiWm9kTGl0ZXJhbCIsInZhbHVlIiwiWm9kUmVjb3JkIiwiWm9kTWFwIiwia3ZEZWYiLCJrZXlUeXBlIiwidmFsdWVUeXBlIiwiWm9kU2V0IiwiWm9kSW50ZXJzZWN0aW9uIiwicmlnaHQiLCJab2REZWZhdWx0IiwidHlwZSIsInJlZmVyZW5jZXMiLCJyZXFUeXBlIiwiZXJyb3IiLCJjb25zb2xlIiwiRXJyb3IiLCJtb2RlbE5hbWUiLCJtZXRob2ROYW1lIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxRQUFRLEtBQUs7QUFDcEIsU0FBU0MsQ0FBQyxRQUFRLE1BQU07QUFFeEIsU0FBU0MsbUJBQW1CLFFBQVEsK0JBQTRCO0FBRWhFLFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUN2QyxPQUFPQyxjQUFjLFdBQVc7QUFDaEMsU0FBU0MsTUFBTSxRQUFRLHNCQUFtQjtBQUUxQyxPQUFPLE1BQU1DLGlDQUFpQ0g7SUFDNUMsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFJLG1CQUFtQjtRQUNqQixNQUFNLEVBQUVDLEdBQUcsRUFBRSxHQUFHSCxPQUFPSSxNQUFNLENBQUNDLEdBQUc7UUFFakMsT0FBTztZQUNMQyxRQUFRLEdBQUdILElBQUksZ0JBQWdCLENBQUM7WUFDaENJLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztRQUMvQjtJQUNGO0lBRUEsTUFBTUMsT0FBTyxFQUFxQyxFQUFFO1FBQ2xELE1BQU0sRUFDSkMsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRSxFQUN2QlAsUUFBUSxFQUNOQyxLQUFLLEVBQ0hPLE9BQU8sRUFBRUMsTUFBTSxFQUFFLEVB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
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkX2h0dHAudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHFzIGZyb20gXCJxc1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IGdldFpvZE9iamVjdEZyb21BcGkgfSBmcm9tIFwiLi4vLi4vYXBpL2NvZGUtY29udmVydGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlbmRlZEFwaSB9IGZyb20gXCIuLi8uLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fZ2VuZXJhdGVkX2h0dHAgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiZ2VuZXJhdGVkX2h0dHBcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcblxuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGBzb25hbXUuZ2VuZXJhdGVkLmh0dHBgLFxuICAgIH07XG4gIH1cblxuICBhc3luYyByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3luY2VyOiB7IHR5cGVzLCBhcGlzIH0sXG4gICAgICBjb25maWc6IHtcbiAgICAgICAgYXBpOiB7XG4gICAgICAgICAgcm91dGU6IHsgcHJlZml4IH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0gPSBTb25hbXU7XG5cbiAgICBjb25zdCBsaW5lcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgYXBpcy5tYXAoYXN5bmMgKGFwaSkgPT4ge1xuICAgICAgICBjb25zdCByZXFPYmplY3QgPSB0aGlzLnJlc29sdmVBcGlQYXJhbXMoYXBpLCB0eXBlcyk7XG5cbiAgICAgICAgY29uc3QgZGF0YUxpbmVzID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBpZiAoKGFwaS5vcHRpb25zLmh0dHBNZXRob2QgPz8gXCJHRVRcIikgPT09IFwiR0VUXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHF1ZXJ5c3RyaW5nOiBbcXMuc3RyaW5naWZ5KHJlcU9iamVjdCwgeyBlbmNvZGU6IGZhbHNlIH0pLnNwbGl0KFwiJlwiKS5qb2luKFwiXFxuXFx0JlwiKV0sXG4gICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgcXVlcnlzdHJpbmc6IFtdLFxuICAgICAgICAgICAgICBib2R5OiBbXCJcIiwgSlNPTi5zdHJpbmdpZnkocmVxT2JqZWN0LCBudWxsLCAyKV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIFtcbiAgICAgICAgICAgIGAke2FwaS5vcHRpb25zLmh0dHBNZXRob2QgPz8gXCJHRVRcIn0ge3tiYXNlVXJsfX0ke3ByZWZpeH0ke2FwaS5wYXRofWAsXG4gICAgICAgICAgICAuLi5kYXRhTGluZXMucXVlcnlzdHJpbmcsXG4gICAgICAgICAgXS5qb2luKFwiXFxuXFx0P1wiKSxcbiAgICAgICAgICBgQ29udGVudC1UeXBlOiAke2FwaS5vcHRpb25zLmNvbnRlbnRUeXBlID8/IFwiYXBwbGljYXRpb24vanNvblwifWAsXG4gICAgICAgICAgLi4uZGF0YUxpbmVzLmJvZHksXG4gICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5OiBsaW5lcy5qb2luKFwiXFxuXFxuIyMjXFxuXFxuXCIpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxuXG4gIHpvZFR5cGVUb1JlcURlZmF1bHQoem9kVHlwZTogei5ab2RUeXBlPHVua25vd24+LCBuYW1lOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3Qua2V5cyh6b2RUeXBlLnNoYXBlKS5tYXAoKGtleSkgPT4gW1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoem9kVHlwZS5zaGFwZVtrZXldLCBrZXkpLFxuICAgICAgICBdKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RBcnJheSkge1xuICAgICAgcmV0dXJuIFt0aGlzLnpvZFR5cGVUb1JlcURlZmF1bHQoKHpvZFR5cGUgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU+KS5lbGVtZW50LCBuYW1lKV07XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcpIHtcbiAgICAgIGlmIChuYW1lLmVuZHNXaXRoKFwiX2F0XCIpIHx8IG5hbWUuZW5kc1dpdGgoXCJfZGF0ZVwiKSB8fCBuYW1lID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiMjAwMC0wMS0wMVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcikge1xuICAgICAgaWYgKG5hbWUgPT09IFwibnVtXCIpIHtcbiAgICAgICAgcmV0dXJuIDI0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW5WYWx1ZSA9IHpvZFR5cGUubWluVmFsdWUgPz8gMDtcbiAgICAgIHJldHVybiBtaW5WYWx1ZSA+IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSID8gbWluVmFsdWUgOiAwO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQm9vbGVhbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgICAgcmV0dXJuIHpvZFR5cGUub3B0aW9uc1swXTtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9wdGlvbmFsKSB7XG4gICAgICByZXR1cm4gdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KCh6b2RUeXBlIGFzIHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdWxsYWJsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuem9kVHlwZVRvUmVxRGVmYXVsdCgoem9kVHlwZSBhcyB6LlpvZFVuaW9uPHouWm9kVHlwZVtdPikuZGVmLm9wdGlvbnNbMF0sIG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5rbm93bikge1xuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVHVwbGUpIHtcbiAgICAgIC8qKiBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IFpvZFR1cGxlIO2DgOyehSDsgqzsmqkgKi9cbiAgICAgIHJldHVybiB6b2RUeXBlLmRlZi5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KGl0ZW0sIG5hbWUpKTtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZERhdGUpIHtcbiAgICAgIHJldHVybiBcIjIwMDAtMDEtMDFcIjtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZExpdGVyYWwpIHtcbiAgICAgIHJldHVybiB6b2RUeXBlLnZhbHVlO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kUmVjb3JkIHx8IHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE1hcCkge1xuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBab2RSZWNvcmQg7YOA7J6FIOyCrOyaqVxuICAgICAgY29uc3Qga3ZEZWYgPSAoem9kVHlwZSBhcyB6LlpvZFJlY29yZDxhbnksIHouWm9kVHlwZT4gfCB6LlpvZE1hcDx6LlpvZFR5cGUsIHouWm9kVHlwZT4pLmRlZjtcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogWm9kSW50ZXJzZWN0aW9uIO2DgOyehSDsgqzsmqlcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuem9kVHlwZVRvUmVxRGVmYXVsdChrdkRlZi5rZXlUeXBlLCBuYW1lKSBhcyBhbnk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuem9kVHlwZVRvUmVxRGVmYXVsdChrdkRlZi52YWx1ZVR5cGUsIG5hbWUpO1xuICAgICAgcmV0dXJuIHsgW2tleV06IHZhbHVlIH07XG4gICAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTZXQpIHtcbiAgICAgIHJldHVybiBbdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KCh6b2RUeXBlIGFzIHouWm9kU2V0PHouWm9kVHlwZT4pLmRlZi52YWx1ZVR5cGUsIG5hbWUpXTtcbiAgICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEludGVyc2VjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuem9kVHlwZVRvUmVxRGVmYXVsdChcbiAgICAgICAgKHpvZFR5cGUgYXMgei5ab2RJbnRlcnNlY3Rpb248ei5ab2RUeXBlLCB6LlpvZFR5cGU+KS5kZWYucmlnaHQsXG4gICAgICAgIG5hbWUsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGVmYXVsdCkge1xuICAgICAgcmV0dXJuIHRoaXMuem9kVHlwZVRvUmVxRGVmYXVsdCgoem9kVHlwZSBhcyB6LlpvZERlZmF1bHQ8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSwgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHpvZFR5cGUpO1xuICAgICAgcmV0dXJuIGB1bmtub3duLSR7em9kVHlwZS50eXBlfWA7XG4gICAgfVxuICB9XG5cbiAgcmVzb2x2ZUFwaVBhcmFtcyhcbiAgICBhcGk6IEV4dGVuZGVkQXBpLFxuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogWm9kT2JqZWN0IO2DgOyehSDsgqzsmqlcbiAgICByZWZlcmVuY2VzOiB7IFt0eXBlTmFtZTogc3RyaW5nXTogei5ab2RPYmplY3Q8YW55PiB9LFxuICApOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSB7XG4gICAgY29uc3QgcmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGkoYXBpLCByZWZlcmVuY2VzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVmID0gdGhpcy56b2RUeXBlVG9SZXFEZWZhdWx0KHJlcVR5cGUsIFwidW5rbm93bk5hbWVcIikgYXMge1xuICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgfTtcbiAgICAgIHJldHVybiBkZWY7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHpvZCB0eXBlIGRldGVjdGVkIG9uICR7YXBpLm1vZGVsTmFtZX06JHthcGkubWV0aG9kTmFtZX1gKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJxcyIsInoiLCJnZXRab2RPYmplY3RGcm9tQXBpIiwiU29uYW11IiwiVGVtcGxhdGUiLCJUZW1wbGF0ZV9fZ2VuZXJhdGVkX2h0dHAiLCJnZXRUYXJnZXRBbmRQYXRoIiwiZGlyIiwiY29uZmlnIiwiYXBpIiwidGFyZ2V0IiwicGF0aCIsInJlbmRlciIsInN5bmNlciIsInR5cGVzIiwiYXBpcyIsInJvdXRlIiwicHJlZml4IiwibGluZXMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwicmVxT2JqZWN0IiwicmVzb2x2ZUFwaVBhcmFtcyIsImRhdGFMaW5lcyIsIm9wdGlvbnMiLCJodHRwTWV0aG9kIiwicXVlcnlzdHJpbmciLCJzdHJpbmdpZnkiLCJlbmNvZGUiLCJzcGxpdCIsImpvaW4iLCJib2R5IiwiSlNPTiIsImNvbnRlbnRUeXBlIiwiaW1wb3J0S2V5cyIsInpvZFR5cGVUb1JlcURlZmF1bHQiLCJ6b2RUeXBlIiwibmFtZSIsIlpvZE9iamVjdCIsIk9iamVjdCIsImZyb21FbnRyaWVzIiwia2V5cyIsInNoYXBlIiwia2V5IiwiWm9kQXJyYXkiLCJlbGVtZW50IiwiWm9kU3RyaW5nIiwiZW5kc1dpdGgiLCJ0b1VwcGVyQ2FzZSIsIlpvZE51bWJlciIsIm1pblZhbHVlIiwiTnVtYmVyIiwiTUlOX1NBRkVfSU5URUdFUiIsIlpvZEJvb2xlYW4iLCJab2RFbnVtIiwiWm9kT3B0aW9uYWwiLCJkZWYiLCJpbm5lclR5cGUiLCJab2ROdWxsYWJsZSIsIlpvZFVuaW9uIiwiWm9kVW5rbm93biIsIlpvZFR1cGxlIiwiaXRlbXMiLCJpdGVtIiwiWm9kRGF0ZSIsIlpvZExpdGVyYWwiLCJ2YWx1ZSIsIlpvZFJlY29yZCIsIlpvZE1hcCIsImt2RGVmIiwia2V5VHlwZSIsInZhbHVlVHlwZSIsIlpvZFNldCIsIlpvZEludGVyc2VjdGlvbiIsInJpZ2h0IiwiWm9kRGVmYXVsdCIsInR5cGUiLCJyZWZlcmVuY2VzIiwicmVxVHlwZSIsImVycm9yIiwiY29uc29sZSIsIkVycm9yIiwibW9kZWxOYW1lIiwibWV0aG9kTmFtZSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsUUFBUSxLQUFLO0FBQ3BCLFNBQVNDLENBQUMsUUFBUSxNQUFNO0FBQ3hCLFNBQVNDLG1CQUFtQixRQUFRLCtCQUE0QjtBQUVoRSxTQUFTQyxNQUFNLFFBQVEsc0JBQW1CO0FBQzFDLFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUV2QyxPQUFPLE1BQU1DLGlDQUFpQ0Q7SUFDNUMsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFFLG1CQUFtQjtRQUNqQixNQUFNLEVBQUVDLEdBQUcsRUFBRSxHQUFHSixPQUFPSyxNQUFNLENBQUNDLEdBQUc7UUFFakMsT0FBTztZQUNMQyxRQUFRLEdBQUdILElBQUksZ0JBQWdCLENBQUM7WUFDaENJLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztRQUMvQjtJQUNGO0lBRUEsTUFBTUMsU0FBUztRQUNiLE1BQU0sRUFDSkMsUUFBUSxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRSxFQUN2QlAsUUFBUSxFQUNOQyxLQUFLLEVBQ0hPLE9BQU8sRUFBRUMsTUFBTSxFQUFFLEVBQ2xCLEVBQ0YsRUFDRixHQUFHZDtRQUVKLE1BQU1lLFFBQVEsTUFBTUMsUUFBUUMsR0FBRyxDQUM3QkwsS0FBS00sR0FBRyxDQUFDLE9BQU9aO1lBQ2QsTUFBTWEsWUFBWSxJQUFJLENBQUNDLGdCQUFnQixDQUFDZCxLQUFLSztZQUU3QyxNQUFNVSxZQUFZLE1BQU0sQUFBQyxDQUFBO2dCQUN2QixJQUFJLEFBQUNmLENBQUFBLElBQUlnQixPQUFPLENBQUNDLFVBQVUsSUFBSSxLQUFJLE1BQU8sT0FBTztvQkFDL0MsT0FBTzt3QkFDTEMsYUFBYTs0QkFBQzNCLEdBQUc0QixTQUFTLENBQUNOLFdBQVc7Z0NBQUVPLFFBQVE7NEJBQU0sR0FBR0MsS0FBSyxDQUFDLEtBQUtDLElB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
@@ -1,14 +1,13 @@
1
- import { TemplateOptions } from "../../types/types";
1
+ import type { Entity } from "../../entity/entity";
2
2
  import { Template } from "../template";
3
- import { SourceCode } from "./generated.template";
4
- import { Entity } from "../../entity/entity";
3
+ import type { SourceCode } from "./generated.template";
5
4
  export declare class Template__generated_sso extends Template {
6
5
  constructor();
7
6
  getTargetAndPath(): {
8
7
  target: string;
9
8
  path: string;
10
9
  };
11
- render({}: TemplateOptions["generated_sso"]): {
10
+ render(): {
12
11
  body: string;
13
12
  importKeys: string[];
14
13
  customHeaders: string[];