sonamu 0.5.7 → 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 (529) 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 +13 -2
  39. package/dist/api/caster.d.ts.map +1 -1
  40. package/dist/api/caster.js +71 -2
  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 +258 -2
  44. package/dist/api/config.d.ts +90 -0
  45. package/dist/api/config.d.ts.map +1 -0
  46. package/dist/api/config.js +25 -0
  47. package/dist/api/context.d.ts +4 -2
  48. package/dist/api/context.d.ts.map +1 -1
  49. package/dist/api/context.js +3 -2
  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 +235 -2
  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 +9 -2
  56. package/dist/api/sonamu.d.ts +10 -24
  57. package/dist/api/sonamu.d.ts.map +1 -1
  58. package/dist/api/sonamu.js +514 -2
  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 +6 -1
  63. package/dist/bin/build-config.d.ts.map +1 -1
  64. package/dist/bin/build-config.js +15 -2
  65. package/dist/bin/cli.js +519 -2
  66. package/dist/bin/hot-hook-register.d.ts +11 -0
  67. package/dist/bin/hot-hook-register.d.ts.map +1 -0
  68. package/dist/bin/hot-hook-register.js +21 -0
  69. package/dist/bin/loader-register.d.ts +2 -0
  70. package/dist/bin/loader-register.d.ts.map +1 -0
  71. package/dist/bin/loader-register.js +34 -0
  72. package/dist/database/_batch_update.d.ts +5 -3
  73. package/dist/database/_batch_update.d.ts.map +1 -1
  74. package/dist/database/_batch_update.js +95 -2
  75. package/dist/database/base-model.d.ts +96 -10
  76. package/dist/database/base-model.d.ts.map +1 -1
  77. package/dist/database/base-model.js +390 -2
  78. package/dist/database/base-model.types.d.ts +93 -0
  79. package/dist/database/base-model.types.d.ts.map +1 -0
  80. package/dist/database/base-model.types.js +10 -0
  81. package/dist/database/code-generator.d.ts +1 -1
  82. package/dist/database/code-generator.d.ts.map +1 -1
  83. package/dist/database/code-generator.js +54 -2
  84. package/dist/database/db.d.ts +6 -21
  85. package/dist/database/db.d.ts.map +1 -1
  86. package/dist/database/db.js +129 -2
  87. package/dist/database/puri-subset.test-d.js +81 -0
  88. package/dist/database/puri-subset.types.d.ts +123 -0
  89. package/dist/database/puri-subset.types.d.ts.map +1 -0
  90. package/dist/database/puri-subset.types.js +16 -0
  91. package/dist/database/puri-wrapper.d.ts +13 -11
  92. package/dist/database/puri-wrapper.d.ts.map +1 -1
  93. package/dist/database/puri-wrapper.js +109 -2
  94. package/dist/database/puri.d.ts +41 -23
  95. package/dist/database/puri.d.ts.map +1 -1
  96. package/dist/database/puri.js +601 -2
  97. package/dist/database/puri.types.d.ts +25 -6
  98. package/dist/database/puri.types.d.ts.map +1 -1
  99. package/dist/database/puri.types.js +6 -2
  100. package/dist/database/transaction-context.d.ts +1 -1
  101. package/dist/database/transaction-context.d.ts.map +1 -1
  102. package/dist/database/transaction-context.js +14 -2
  103. package/dist/database/upsert-builder.d.ts +9 -3
  104. package/dist/database/upsert-builder.d.ts.map +1 -1
  105. package/dist/database/upsert-builder.js +365 -2
  106. package/dist/entity/entity-manager.d.ts +167 -2
  107. package/dist/entity/entity-manager.d.ts.map +1 -1
  108. package/dist/entity/entity-manager.js +130 -2
  109. package/dist/entity/entity.d.ts +5 -3
  110. package/dist/entity/entity.d.ts.map +1 -1
  111. package/dist/entity/entity.js +750 -2
  112. package/dist/exceptions/error-handler.d.ts +1 -1
  113. package/dist/exceptions/error-handler.d.ts.map +1 -1
  114. package/dist/exceptions/error-handler.js +29 -2
  115. package/dist/exceptions/so-exceptions.d.ts +1 -1
  116. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  117. package/dist/exceptions/so-exceptions.js +85 -2
  118. package/dist/file-storage/driver.d.ts +1 -1
  119. package/dist/file-storage/driver.d.ts.map +1 -1
  120. package/dist/file-storage/driver.js +79 -2
  121. package/dist/file-storage/file-storage.js +75 -2
  122. package/dist/index.d.ts +18 -9
  123. package/dist/index.d.ts.map +1 -1
  124. package/dist/index.js +34 -2
  125. package/dist/migration/code-generation.d.ts +1 -1
  126. package/dist/migration/code-generation.d.ts.map +1 -1
  127. package/dist/migration/code-generation.js +614 -2
  128. package/dist/migration/migration-set.d.ts +2 -10
  129. package/dist/migration/migration-set.d.ts.map +1 -1
  130. package/dist/migration/migration-set.js +213 -2
  131. package/dist/migration/migrator.d.ts +24 -82
  132. package/dist/migration/migrator.d.ts.map +1 -1
  133. package/dist/migration/migrator.js +330 -2
  134. package/dist/migration/postgresql-schema-reader.d.ts +51 -0
  135. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -0
  136. package/dist/migration/postgresql-schema-reader.js +245 -0
  137. package/dist/migration/types.d.ts +6 -38
  138. package/dist/migration/types.d.ts.map +1 -1
  139. package/dist/migration/types.js +3 -2
  140. package/dist/naite/messaging-types.d.ts +43 -0
  141. package/dist/naite/messaging-types.d.ts.map +1 -0
  142. package/dist/naite/messaging-types.js +7 -0
  143. package/dist/naite/naite-reporter.d.ts +41 -0
  144. package/dist/naite/naite-reporter.d.ts.map +1 -0
  145. package/dist/naite/naite-reporter.js +102 -0
  146. package/dist/naite/naite.d.ts +95 -0
  147. package/dist/naite/naite.d.ts.map +1 -0
  148. package/dist/naite/naite.js +316 -0
  149. package/dist/stream/index.js +3 -2
  150. package/dist/stream/sse.d.ts +2 -2
  151. package/dist/stream/sse.d.ts.map +1 -1
  152. package/dist/stream/sse.js +38 -2
  153. package/dist/syncer/api-parser.d.ts +10 -0
  154. package/dist/syncer/api-parser.d.ts.map +1 -0
  155. package/dist/syncer/api-parser.js +240 -0
  156. package/dist/syncer/checksum.d.ts +21 -0
  157. package/dist/syncer/checksum.d.ts.map +1 -0
  158. package/dist/syncer/checksum.js +98 -0
  159. package/dist/syncer/code-generator.d.ts +20 -0
  160. package/dist/syncer/code-generator.d.ts.map +1 -0
  161. package/dist/syncer/code-generator.js +161 -0
  162. package/dist/syncer/entity-operations.d.ts +17 -0
  163. package/dist/syncer/entity-operations.d.ts.map +1 -0
  164. package/dist/syncer/entity-operations.js +59 -0
  165. package/dist/syncer/file-patterns.d.ts +29 -0
  166. package/dist/syncer/file-patterns.d.ts.map +1 -0
  167. package/dist/syncer/file-patterns.js +38 -0
  168. package/dist/syncer/index.d.ts +6 -0
  169. package/dist/syncer/index.d.ts.map +1 -1
  170. package/dist/syncer/index.js +9 -2
  171. package/dist/syncer/module-loader.d.ts +35 -0
  172. package/dist/syncer/module-loader.d.ts.map +1 -0
  173. package/dist/syncer/module-loader.js +87 -0
  174. package/dist/syncer/syncer.d.ts +98 -106
  175. package/dist/syncer/syncer.d.ts.map +1 -1
  176. package/dist/syncer/syncer.js +422 -2
  177. package/dist/template/entity-converter.d.ts +14 -0
  178. package/dist/template/entity-converter.d.ts.map +1 -0
  179. package/dist/template/entity-converter.js +108 -0
  180. package/dist/template/helpers.d.ts +23 -0
  181. package/dist/template/helpers.d.ts.map +1 -0
  182. package/dist/template/helpers.js +64 -0
  183. package/dist/{templates → template/implementations}/entity.template.d.ts +3 -3
  184. package/dist/template/implementations/entity.template.d.ts.map +1 -0
  185. package/dist/template/implementations/entity.template.js +86 -0
  186. package/dist/{templates → template/implementations}/generated.template.d.ts +3 -4
  187. package/dist/template/implementations/generated.template.d.ts.map +1 -0
  188. package/dist/template/implementations/generated.template.js +249 -0
  189. package/dist/{templates → template/implementations}/generated_http.template.d.ts +3 -4
  190. package/dist/template/implementations/generated_http.template.d.ts.map +1 -0
  191. package/dist/template/implementations/generated_http.template.js +131 -0
  192. package/dist/{templates → template/implementations}/generated_sso.template.d.ts +4 -5
  193. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -0
  194. package/dist/template/implementations/generated_sso.template.js +134 -0
  195. package/dist/{templates → template/implementations}/init_types.template.d.ts +3 -3
  196. package/dist/template/implementations/init_types.template.d.ts.map +1 -0
  197. package/dist/template/implementations/init_types.template.js +38 -0
  198. package/dist/template/implementations/model.template.d.ts +17 -0
  199. package/dist/template/implementations/model.template.d.ts.map +1 -0
  200. package/dist/template/implementations/model.template.js +181 -0
  201. package/dist/{templates → template/implementations}/model_test.template.d.ts +3 -3
  202. package/dist/template/implementations/model_test.template.d.ts.map +1 -0
  203. package/dist/template/implementations/model_test.template.js +35 -0
  204. package/dist/{templates → template/implementations}/service.template.d.ts +6 -6
  205. package/dist/template/implementations/service.template.d.ts.map +1 -0
  206. package/dist/template/implementations/service.template.js +201 -0
  207. package/dist/{templates → template/implementations}/view_enums_buttonset.template.d.ts +3 -3
  208. package/dist/template/implementations/view_enums_buttonset.template.d.ts.map +1 -0
  209. package/dist/template/implementations/view_enums_buttonset.template.js +31 -0
  210. package/dist/{templates → template/implementations}/view_enums_dropdown.template.d.ts +3 -4
  211. package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +1 -0
  212. package/dist/template/implementations/view_enums_dropdown.template.js +50 -0
  213. package/dist/{templates → template/implementations}/view_enums_select.template.d.ts +3 -3
  214. package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -0
  215. package/dist/template/implementations/view_enums_select.template.js +55 -0
  216. package/dist/{templates → template/implementations}/view_form.template.d.ts +5 -5
  217. package/dist/template/implementations/view_form.template.d.ts.map +1 -0
  218. package/dist/template/implementations/view_form.template.js +337 -0
  219. package/dist/{templates → template/implementations}/view_id_all_select.template.d.ts +3 -3
  220. package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -0
  221. package/dist/template/implementations/view_id_all_select.template.js +31 -0
  222. package/dist/{templates → template/implementations}/view_id_async_select.template.d.ts +3 -3
  223. package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -0
  224. package/dist/template/implementations/view_id_async_select.template.js +105 -0
  225. package/dist/{templates → template/implementations}/view_list.template.d.ts +5 -13
  226. package/dist/template/implementations/view_list.template.d.ts.map +1 -0
  227. package/dist/template/implementations/view_list.template.js +475 -0
  228. package/dist/template/implementations/view_list_columns.template.d.ts +17 -0
  229. package/dist/template/implementations/view_list_columns.template.d.ts.map +1 -0
  230. package/dist/template/implementations/view_list_columns.template.js +49 -0
  231. package/dist/{templates → template/implementations}/view_search_input.template.d.ts +3 -3
  232. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -0
  233. package/dist/template/implementations/view_search_input.template.js +64 -0
  234. package/dist/template/index.d.ts +7 -0
  235. package/dist/template/index.d.ts.map +1 -0
  236. package/dist/template/index.js +8 -0
  237. package/dist/template/template-manager.d.ts +56 -0
  238. package/dist/template/template-manager.d.ts.map +1 -0
  239. package/dist/template/template-manager.js +125 -0
  240. package/dist/template/template-types.d.ts +16 -0
  241. package/dist/template/template-types.d.ts.map +1 -0
  242. package/dist/template/template-types.js +7 -0
  243. package/dist/template/template.d.ts +49 -0
  244. package/dist/template/template.d.ts.map +1 -0
  245. package/dist/template/template.js +60 -0
  246. package/dist/template/zod-converter.d.ts +51 -0
  247. package/dist/template/zod-converter.d.ts.map +1 -0
  248. package/dist/template/zod-converter.js +449 -0
  249. package/dist/testing/_relation-graph.d.ts +1 -1
  250. package/dist/testing/_relation-graph.d.ts.map +1 -1
  251. package/dist/testing/_relation-graph.js +89 -2
  252. package/dist/testing/fixture-manager.d.ts +42 -11
  253. package/dist/testing/fixture-manager.d.ts.map +1 -1
  254. package/dist/testing/fixture-manager.js +623 -2
  255. package/dist/types/types.d.ts +747 -143
  256. package/dist/types/types.d.ts.map +1 -1
  257. package/dist/types/types.js +546 -2
  258. package/dist/typings/knex.d.js +3 -2
  259. package/dist/utils/async-utils.d.ts +7 -0
  260. package/dist/utils/async-utils.d.ts.map +1 -1
  261. package/dist/utils/async-utils.js +57 -2
  262. package/dist/utils/console-util.d.ts +2 -0
  263. package/dist/utils/console-util.d.ts.map +1 -0
  264. package/dist/utils/console-util.js +6 -0
  265. package/dist/utils/controller.d.ts +1 -0
  266. package/dist/utils/controller.d.ts.map +1 -1
  267. package/dist/utils/controller.js +29 -2
  268. package/dist/utils/esm-utils.d.ts +39 -0
  269. package/dist/utils/esm-utils.d.ts.map +1 -0
  270. package/dist/utils/esm-utils.js +49 -0
  271. package/dist/utils/formatter.d.ts +3 -0
  272. package/dist/utils/formatter.d.ts.map +1 -0
  273. package/dist/utils/formatter.js +110 -0
  274. package/dist/utils/fs-utils.d.ts +1 -1
  275. package/dist/utils/fs-utils.d.ts.map +1 -1
  276. package/dist/utils/fs-utils.js +17 -2
  277. package/dist/utils/lodash-able.d.ts.map +1 -1
  278. package/dist/utils/lodash-able.js +6 -2
  279. package/dist/utils/model.js +22 -2
  280. package/dist/utils/object-utils.d.ts +44 -0
  281. package/dist/utils/object-utils.d.ts.map +1 -0
  282. package/dist/utils/object-utils.js +191 -0
  283. package/dist/utils/path-utils.d.ts +89 -0
  284. package/dist/utils/path-utils.d.ts.map +1 -0
  285. package/dist/utils/path-utils.js +60 -0
  286. package/dist/utils/process-utils.d.ts +13 -0
  287. package/dist/utils/process-utils.d.ts.map +1 -0
  288. package/dist/utils/process-utils.js +36 -0
  289. package/dist/utils/sql-parser.d.ts +5 -1
  290. package/dist/utils/sql-parser.d.ts.map +1 -1
  291. package/dist/utils/sql-parser.js +46 -2
  292. package/dist/utils/type-utils.d.ts +23 -0
  293. package/dist/utils/type-utils.d.ts.map +1 -0
  294. package/dist/utils/type-utils.js +45 -0
  295. package/dist/utils/utils.d.ts +10 -7
  296. package/dist/utils/utils.d.ts.map +1 -1
  297. package/dist/utils/utils.js +72 -2
  298. package/dist/utils/zod-error.d.ts +1 -1
  299. package/dist/utils/zod-error.d.ts.map +1 -1
  300. package/dist/utils/zod-error.js +19 -2
  301. package/package.json +65 -27
  302. package/src/ai/agents/agent.ts +87 -0
  303. package/src/ai/agents/index.ts +2 -0
  304. package/src/ai/agents/types.ts +47 -0
  305. package/src/ai/index.ts +1 -0
  306. package/src/ai/providers/rtzr/api.ts +37 -0
  307. package/src/ai/providers/rtzr/error.ts +34 -0
  308. package/src/ai/providers/rtzr/index.ts +4 -0
  309. package/src/ai/providers/rtzr/model.ts +201 -0
  310. package/src/ai/providers/rtzr/options.ts +49 -0
  311. package/src/ai/providers/rtzr/provider.ts +91 -0
  312. package/src/ai/providers/rtzr/utils.ts +127 -0
  313. package/src/api/base-frame.ts +4 -2
  314. package/src/api/caster.ts +17 -23
  315. package/src/api/code-converters.ts +178 -535
  316. package/src/api/config.ts +125 -0
  317. package/src/api/context.ts +7 -17
  318. package/src/api/decorators.ts +176 -46
  319. package/src/api/index.ts +2 -2
  320. package/src/api/sonamu.ts +190 -167
  321. package/src/api/validator.ts +83 -0
  322. package/src/bin/build-config.ts +8 -1
  323. package/src/bin/cli.ts +258 -124
  324. package/src/bin/hot-hook-register.ts +22 -0
  325. package/src/bin/loader-register.ts +38 -0
  326. package/src/database/_batch_update.ts +46 -31
  327. package/src/database/base-model.ts +390 -182
  328. package/src/database/base-model.types.ts +155 -0
  329. package/src/database/code-generator.ts +13 -32
  330. package/src/database/db.ts +40 -96
  331. package/src/database/puri-subset.test-d.ts +471 -0
  332. package/src/database/puri-subset.types.ts +195 -0
  333. package/src/database/puri-wrapper.ts +58 -67
  334. package/src/database/puri.ts +229 -148
  335. package/src/database/puri.types.ts +76 -30
  336. package/src/database/transaction-context.ts +1 -1
  337. package/src/database/upsert-builder.ts +262 -132
  338. package/src/entity/entity-manager.ts +48 -36
  339. package/src/entity/entity.ts +330 -248
  340. package/src/exceptions/error-handler.ts +3 -3
  341. package/src/exceptions/so-exceptions.ts +11 -11
  342. package/src/file-storage/driver.ts +5 -5
  343. package/src/file-storage/file-storage.ts +2 -2
  344. package/src/index.ts +18 -10
  345. package/src/migration/code-generation.ts +185 -172
  346. package/src/migration/migration-set.ts +80 -293
  347. package/src/migration/migrator.ts +199 -571
  348. package/src/migration/mysql-schema-reader.ts.txt +272 -0
  349. package/src/migration/postgresql-schema-reader.ts +310 -0
  350. package/src/migration/types.ts +6 -39
  351. package/src/naite/messaging-types.ts +51 -0
  352. package/src/naite/naite-reporter.ts +128 -0
  353. package/src/naite/naite.ts +415 -0
  354. package/src/shared/web.shared.ts.txt +20 -24
  355. package/src/stream/sse.ts +5 -5
  356. package/src/syncer/api-parser.ts +282 -0
  357. package/src/syncer/checksum.ts +140 -0
  358. package/src/syncer/code-generator.ts +198 -0
  359. package/src/syncer/entity-operations.ts +65 -0
  360. package/src/syncer/file-patterns.ts +56 -0
  361. package/src/syncer/index.ts +6 -0
  362. package/src/syncer/module-loader.ts +128 -0
  363. package/src/syncer/syncer.ts +389 -1453
  364. package/src/template/entity-converter.ts +114 -0
  365. package/src/template/helpers.ts +81 -0
  366. package/src/{templates → template/implementations}/entity.template.ts +7 -7
  367. package/src/{templates → template/implementations}/generated.template.ts +101 -101
  368. package/src/{templates → template/implementations}/generated_http.template.ts +27 -57
  369. package/src/template/implementations/generated_sso.template.ts +151 -0
  370. package/src/{templates → template/implementations}/init_types.template.ts +5 -7
  371. package/src/{templates → template/implementations}/model.template.ts +52 -43
  372. package/src/{templates → template/implementations}/model_test.template.ts +5 -5
  373. package/src/{templates → template/implementations}/service.template.ts +66 -82
  374. package/src/{templates → template/implementations}/view_enums_buttonset.template.ts +3 -3
  375. package/src/{templates → template/implementations}/view_enums_dropdown.template.ts +4 -20
  376. package/src/{templates → template/implementations}/view_enums_select.template.ts +4 -4
  377. package/src/{templates → template/implementations}/view_form.template.ts +40 -83
  378. package/src/{templates → template/implementations}/view_id_all_select.template.ts +3 -3
  379. package/src/{templates → template/implementations}/view_id_async_select.template.ts +10 -24
  380. package/src/{templates → template/implementations}/view_list.template.ts +60 -152
  381. package/src/{templates → template/implementations}/view_list_columns.template.ts +5 -11
  382. package/src/{templates → template/implementations}/view_search_input.template.ts +3 -3
  383. package/src/template/index.ts +6 -0
  384. package/src/template/template-manager.ts +166 -0
  385. package/src/template/template-types.ts +16 -0
  386. package/src/template/template.ts +105 -0
  387. package/src/template/zod-converter.ts +525 -0
  388. package/src/testing/_relation-graph.ts +18 -11
  389. package/src/testing/fixture-manager.ts +472 -359
  390. package/src/types/types.ts +553 -308
  391. package/src/typings/knex.d.ts +7 -9
  392. package/src/utils/async-utils.ts +23 -10
  393. package/src/utils/console-util.ts +4 -0
  394. package/src/utils/controller.ts +3 -0
  395. package/src/utils/esm-utils.ts +59 -0
  396. package/src/utils/formatter.ts +109 -0
  397. package/src/utils/fs-utils.ts +1 -1
  398. package/src/utils/lodash-able.ts +1 -4
  399. package/src/utils/object-utils.ts +217 -0
  400. package/src/utils/path-utils.ts +99 -0
  401. package/src/utils/process-utils.ts +46 -0
  402. package/src/utils/sql-parser.ts +23 -5
  403. package/src/utils/type-utils.ts +83 -0
  404. package/src/utils/utils.ts +66 -43
  405. package/src/utils/zod-error.ts +3 -4
  406. package/dist/api/base-frame.js.map +0 -1
  407. package/dist/api/caster.js.map +0 -1
  408. package/dist/api/code-converters.js.map +0 -1
  409. package/dist/api/context.js.map +0 -1
  410. package/dist/api/decorators.js.map +0 -1
  411. package/dist/api/index.js.map +0 -1
  412. package/dist/api/sonamu.js.map +0 -1
  413. package/dist/bin/build-config.js.map +0 -1
  414. package/dist/bin/cli-wrapper.d.ts +0 -3
  415. package/dist/bin/cli-wrapper.d.ts.map +0 -1
  416. package/dist/bin/cli-wrapper.js +0 -3
  417. package/dist/bin/cli-wrapper.js.map +0 -1
  418. package/dist/bin/cli.js.map +0 -1
  419. package/dist/database/_batch_update.js.map +0 -1
  420. package/dist/database/base-model.js.map +0 -1
  421. package/dist/database/code-generator.js.map +0 -1
  422. package/dist/database/db.js.map +0 -1
  423. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +0 -2
  424. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +0 -1
  425. package/dist/database/knex-plugins/knex-on-duplicate-update.js +0 -2
  426. package/dist/database/knex-plugins/knex-on-duplicate-update.js.map +0 -1
  427. package/dist/database/puri-wrapper.js.map +0 -1
  428. package/dist/database/puri.js.map +0 -1
  429. package/dist/database/puri.types.js.map +0 -1
  430. package/dist/database/transaction-context.js.map +0 -1
  431. package/dist/database/upsert-builder.js.map +0 -1
  432. package/dist/entity/entity-manager.js.map +0 -1
  433. package/dist/entity/entity-utils.d.ts +0 -61
  434. package/dist/entity/entity-utils.d.ts.map +0 -1
  435. package/dist/entity/entity-utils.js +0 -2
  436. package/dist/entity/entity-utils.js.map +0 -1
  437. package/dist/entity/entity.js.map +0 -1
  438. package/dist/exceptions/error-handler.js.map +0 -1
  439. package/dist/exceptions/so-exceptions.js.map +0 -1
  440. package/dist/file-storage/driver.js.map +0 -1
  441. package/dist/file-storage/file-storage.js.map +0 -1
  442. package/dist/index.js.map +0 -1
  443. package/dist/migration/code-generation.js.map +0 -1
  444. package/dist/migration/migration-set.js.map +0 -1
  445. package/dist/migration/migrator.js.map +0 -1
  446. package/dist/migration/types.js.map +0 -1
  447. package/dist/stream/index.js.map +0 -1
  448. package/dist/stream/sse.js.map +0 -1
  449. package/dist/syncer/index.js.map +0 -1
  450. package/dist/syncer/syncer.js.map +0 -1
  451. package/dist/templates/base-template.d.ts +0 -13
  452. package/dist/templates/base-template.d.ts.map +0 -1
  453. package/dist/templates/base-template.js +0 -2
  454. package/dist/templates/base-template.js.map +0 -1
  455. package/dist/templates/entity.template.d.ts.map +0 -1
  456. package/dist/templates/entity.template.js +0 -2
  457. package/dist/templates/entity.template.js.map +0 -1
  458. package/dist/templates/generated.template.d.ts.map +0 -1
  459. package/dist/templates/generated.template.js +0 -2
  460. package/dist/templates/generated.template.js.map +0 -1
  461. package/dist/templates/generated_http.template.d.ts.map +0 -1
  462. package/dist/templates/generated_http.template.js +0 -2
  463. package/dist/templates/generated_http.template.js.map +0 -1
  464. package/dist/templates/generated_sso.template.d.ts.map +0 -1
  465. package/dist/templates/generated_sso.template.js +0 -2
  466. package/dist/templates/generated_sso.template.js.map +0 -1
  467. package/dist/templates/index.d.ts +0 -2
  468. package/dist/templates/index.d.ts.map +0 -1
  469. package/dist/templates/index.js +0 -2
  470. package/dist/templates/index.js.map +0 -1
  471. package/dist/templates/init_types.template.d.ts.map +0 -1
  472. package/dist/templates/init_types.template.js +0 -2
  473. package/dist/templates/init_types.template.js.map +0 -1
  474. package/dist/templates/model.template.d.ts +0 -17
  475. package/dist/templates/model.template.d.ts.map +0 -1
  476. package/dist/templates/model.template.js +0 -2
  477. package/dist/templates/model.template.js.map +0 -1
  478. package/dist/templates/model_test.template.d.ts.map +0 -1
  479. package/dist/templates/model_test.template.js +0 -2
  480. package/dist/templates/model_test.template.js.map +0 -1
  481. package/dist/templates/service.template.d.ts.map +0 -1
  482. package/dist/templates/service.template.js +0 -2
  483. package/dist/templates/service.template.js.map +0 -1
  484. package/dist/templates/view_enums_buttonset.template.d.ts.map +0 -1
  485. package/dist/templates/view_enums_buttonset.template.js +0 -2
  486. package/dist/templates/view_enums_buttonset.template.js.map +0 -1
  487. package/dist/templates/view_enums_dropdown.template.d.ts.map +0 -1
  488. package/dist/templates/view_enums_dropdown.template.js +0 -2
  489. package/dist/templates/view_enums_dropdown.template.js.map +0 -1
  490. package/dist/templates/view_enums_select.template.d.ts.map +0 -1
  491. package/dist/templates/view_enums_select.template.js +0 -2
  492. package/dist/templates/view_enums_select.template.js.map +0 -1
  493. package/dist/templates/view_form.template.d.ts.map +0 -1
  494. package/dist/templates/view_form.template.js +0 -2
  495. package/dist/templates/view_form.template.js.map +0 -1
  496. package/dist/templates/view_id_all_select.template.d.ts.map +0 -1
  497. package/dist/templates/view_id_all_select.template.js +0 -2
  498. package/dist/templates/view_id_all_select.template.js.map +0 -1
  499. package/dist/templates/view_id_async_select.template.d.ts.map +0 -1
  500. package/dist/templates/view_id_async_select.template.js +0 -2
  501. package/dist/templates/view_id_async_select.template.js.map +0 -1
  502. package/dist/templates/view_list.template.d.ts.map +0 -1
  503. package/dist/templates/view_list.template.js +0 -2
  504. package/dist/templates/view_list.template.js.map +0 -1
  505. package/dist/templates/view_list_columns.template.d.ts +0 -17
  506. package/dist/templates/view_list_columns.template.d.ts.map +0 -1
  507. package/dist/templates/view_list_columns.template.js +0 -2
  508. package/dist/templates/view_list_columns.template.js.map +0 -1
  509. package/dist/templates/view_search_input.template.d.ts.map +0 -1
  510. package/dist/templates/view_search_input.template.js +0 -2
  511. package/dist/templates/view_search_input.template.js.map +0 -1
  512. package/dist/testing/_relation-graph.js.map +0 -1
  513. package/dist/testing/fixture-manager.js.map +0 -1
  514. package/dist/types/types.js.map +0 -1
  515. package/dist/typings/knex.d.js.map +0 -1
  516. package/dist/utils/async-utils.js.map +0 -1
  517. package/dist/utils/controller.js.map +0 -1
  518. package/dist/utils/fs-utils.js.map +0 -1
  519. package/dist/utils/lodash-able.js.map +0 -1
  520. package/dist/utils/model.js.map +0 -1
  521. package/dist/utils/sql-parser.js.map +0 -1
  522. package/dist/utils/utils.js.map +0 -1
  523. package/dist/utils/zod-error.js.map +0 -1
  524. package/src/bin/cli-wrapper.ts +0 -75
  525. package/src/database/knex-plugins/knex-on-duplicate-update.ts +0 -45
  526. package/src/entity/entity-utils.ts +0 -291
  527. package/src/templates/base-template.ts +0 -19
  528. package/src/templates/generated_sso.template.ts +0 -138
  529. package/src/templates/index.ts +0 -1
@@ -0,0 +1,201 @@
1
+ import assert from "assert";
2
+ import inflection from "inflection";
3
+ import { diff, group, sort, unique } from "radashi";
4
+ import { apiParamToTsCode, apiParamToTsCodeAsObject, apiParamTypeToTsType, unwrapPromiseOnce } from "../../api/code-converters.js";
5
+ import { Sonamu } from "../../api/sonamu.js";
6
+ import { Naite } from "../../naite/naite.js";
7
+ import { ApiParamType } from "../../types/types.js";
8
+ import { assertDefined } from "../../utils/utils.js";
9
+ import { Template } from "../template.js";
10
+ import { zodTypeToTsTypeDef } from "../zod-converter.js";
11
+ export class Template__service extends Template {
12
+ constructor(){
13
+ super("service");
14
+ }
15
+ getTargetAndPath(names) {
16
+ return {
17
+ target: ":target/src/services",
18
+ path: `${names.fs}/${names.fs}.service.ts`
19
+ };
20
+ }
21
+ render({ namesRecord }) {
22
+ Naite.t("render", {
23
+ namesRecord
24
+ });
25
+ const { syncer: { apis } } = Sonamu;
26
+ const apisForThisModel = apis.filter((api)=>api.modelName === `${namesRecord.capital}Model`);
27
+ // 서비스 TypeSource
28
+ const { lines, importKeys } = this.getTypeSource(apisForThisModel);
29
+ // AxiosProgressEvent 있는지 확인
30
+ const hasAxiosProgressEvent = apis.find((api)=>(api.options.clients ?? []).includes("axios-multipart"));
31
+ return {
32
+ ...this.getTargetAndPath(namesRecord),
33
+ body: lines.join("\n"),
34
+ importKeys: importKeys.filter((key)=>[
35
+ "ListResult"
36
+ ].includes(key) === false),
37
+ customHeaders: [
38
+ `import { z } from 'zod';`,
39
+ `import qs from "qs";`,
40
+ `import useSWR, { type SWRResponse } from "swr";`,
41
+ `import { fetch, ListResult, SWRError, SwrOptions, handleConditional, swrPostFetcher, EventHandlers, SSEStreamOptions, useSSEStream } from '../sonamu.shared';`,
42
+ ...hasAxiosProgressEvent ? [
43
+ `import { type AxiosProgressEvent } from 'axios';`
44
+ ] : []
45
+ ]
46
+ };
47
+ }
48
+ getTypeSource(apis) {
49
+ const importKeys = [];
50
+ // 제네릭에서 선언한 타입, importKeys에서 제외 필요
51
+ let typeParamNames = [];
52
+ const groups = group(apis, (api)=>api.modelName);
53
+ const body = Object.keys(groups).map((modelName)=>{
54
+ const methods = groups[modelName];
55
+ assert(methods);
56
+ const methodCodes = methods.map((api)=>{
57
+ // 컨텍스트 제외된 파라미터 리스트
58
+ const paramsWithoutContext = api.parameters.filter((param)=>!ApiParamType.isContext(param.type) && !ApiParamType.isRefKnex(param.type) && !(param.optional === true && param.name.startsWith("_")));
59
+ // 파라미터 타입 정의
60
+ const typeParamsDef = api.typeParameters.map((typeParam)=>{
61
+ return apiParamTypeToTsType(typeParam, importKeys);
62
+ }).join(", ");
63
+ typeParamNames = typeParamNames.concat(api.typeParameters.map((typeParam)=>typeParam.id));
64
+ // 파라미터 정의
65
+ const paramsDef = apiParamToTsCode(paramsWithoutContext, importKeys);
66
+ // 파라미터 정의 (객체 형태)
67
+ const paramsDefAsObject = apiParamToTsCodeAsObject(paramsWithoutContext, importKeys);
68
+ // 리턴 타입 정의
69
+ const returnTypeDef = apiParamTypeToTsType(assertDefined(unwrapPromiseOnce(api.returnType)), importKeys);
70
+ // 페이로드 데이터 정의
71
+ const payloadDef = `{ ${paramsWithoutContext.map((param)=>param.name).join(", ")} }`;
72
+ // 기본 URL
73
+ const apiBaseUrl = `${Sonamu.config.api.route.prefix}${api.path}`;
74
+ const clients = api.options.clients ?? [];
75
+ return [
76
+ // 클라이언트별로 생성
77
+ ...sort(clients, (client)=>client === "swr" ? 0 : 1).map((client)=>{
78
+ switch(client){
79
+ case "axios":
80
+ return this.renderAxios(api, apiBaseUrl, typeParamsDef, paramsDef, returnTypeDef, payloadDef);
81
+ case "axios-multipart":
82
+ return this.renderAxiosMultipart(api, apiBaseUrl, typeParamsDef, paramsDef, returnTypeDef, paramsWithoutContext);
83
+ case "swr":
84
+ return this.renderSwr(api, apiBaseUrl, typeParamsDef, paramsDef, returnTypeDef, payloadDef);
85
+ case "window-fetch":
86
+ return this.renderWindowFetch(api, apiBaseUrl, typeParamsDef, paramsDef, payloadDef);
87
+ default:
88
+ return `// Not supported ${inflection.camelize(client, true)} yet.`;
89
+ }
90
+ }),
91
+ // 스트리밍인 경우
92
+ ...api.streamOptions ? [
93
+ this.renderStream(api, apiBaseUrl, paramsDefAsObject)
94
+ ] : []
95
+ ].join("\n");
96
+ }).join("\n\n");
97
+ return `export namespace ${modelName.replace(/Model$/, "Service").replace(/Frame$/, "Service")} {
98
+ ${methodCodes}
99
+ }`;
100
+ }).join("\n\n");
101
+ return {
102
+ lines: [
103
+ body
104
+ ],
105
+ importKeys: diff(unique(importKeys), typeParamNames)
106
+ };
107
+ }
108
+ renderAxios(api, apiBaseUrl, typeParamsDef, paramsDef, returnTypeDef, payloadDef) {
109
+ const methodNameAxios = api.options.resourceName ? `get${inflection.camelize(api.options.resourceName)}` : api.methodName;
110
+ if (api.options.httpMethod === "GET") {
111
+ return `
112
+ export async function ${methodNameAxios}${typeParamsDef}(${paramsDef}): Promise<${returnTypeDef}> {
113
+ return fetch({
114
+ method: "GET",
115
+ url: \`${apiBaseUrl}?\${qs.stringify(${payloadDef})}\`,
116
+ ${api.options.timeout ? `signal: AbortSignal.timeout(${api.options.timeout}),` : ""}
117
+ });
118
+ }
119
+ `.trim();
120
+ } else {
121
+ return `
122
+ export async function ${methodNameAxios}${typeParamsDef}(${paramsDef}): Promise<${returnTypeDef}> {
123
+ return fetch({
124
+ method: '${api.options.httpMethod}',
125
+ url: \`${apiBaseUrl}\`,
126
+ data: ${payloadDef},
127
+ ${api.options.timeout ? `signal: AbortSignal.timeout(${api.options.timeout}),` : ""}
128
+ });
129
+ }
130
+ `.trim();
131
+ }
132
+ }
133
+ renderAxiosMultipart(api, apiBaseUrl, typeParamsDef, paramsDef, returnTypeDef, paramsWithoutContext) {
134
+ const isMultiple = api.uploadOptions?.mode === "multiple";
135
+ const fileParamName = isMultiple ? "files" : "file";
136
+ const fileParamType = isMultiple ? "File[]" : "File";
137
+ const formDataDef = isMultiple ? [
138
+ `${fileParamName}.forEach(f => { formData.append("${fileParamName}", f) } ); `,
139
+ ...paramsWithoutContext.map((param)=>`formData.append('${param.name}', String(${param.name}));`)
140
+ ].join("\n") : [
141
+ `formData.append("${fileParamName}", ${fileParamName});`,
142
+ ...paramsWithoutContext.map((param)=>`formData.append('${param.name}', String(${param.name}));`)
143
+ ].join("\n");
144
+ const paramsDefComma = paramsDef !== "" ? ", " : "";
145
+ return `
146
+ export async function ${api.methodName}${typeParamsDef}(
147
+ ${paramsDef}${paramsDefComma}
148
+ ${fileParamName}: ${fileParamType},
149
+ onUploadProgress?: (pe:AxiosProgressEvent) => void
150
+ ): Promise<${returnTypeDef}> {
151
+ const formData = new FormData();
152
+ ${formDataDef}
153
+ return fetch({
154
+ method: 'POST',
155
+ url: \`${apiBaseUrl}\`,
156
+ headers: {
157
+ "Content-Type": "multipart/form-data",
158
+ },
159
+ onUploadProgress,
160
+ data: formData,
161
+ ${api.options.timeout ? `signal: AbortSignal.timeout(${api.options.timeout}),` : ""}
162
+ });
163
+ }
164
+ `.trim();
165
+ }
166
+ renderSwr(api, apiBaseUrl, typeParamsDef, paramsDef, returnTypeDef, payloadDef) {
167
+ const methodNameSwr = api.options.resourceName ? `use${inflection.camelize(api.options.resourceName)}` : `use${inflection.camelize(api.methodName)}`;
168
+ return ` export function ${inflection.camelize(methodNameSwr, true)}${typeParamsDef}(${[
169
+ paramsDef,
170
+ "swrOptions?: SwrOptions"
171
+ ].filter((p)=>p !== "").join(",")}, ): SWRResponse<${returnTypeDef}, SWRError> {
172
+ return useSWR(handleConditional([
173
+ \`${apiBaseUrl}\`,
174
+ ${payloadDef},
175
+ ], swrOptions?.conditional)${api.options.httpMethod === "POST" ? ", swrPostFetcher" : ""}${api.options.timeout ? `, { loadingTimeout: ${api.options.timeout} }` : ""});
176
+ }`;
177
+ }
178
+ renderWindowFetch(api, apiBaseUrl, typeParamsDef, paramsDef, payloadDef) {
179
+ return `
180
+ export async function ${api.methodName}${typeParamsDef}(${paramsDef}): Promise<Response> {
181
+ return window.fetch(\`${apiBaseUrl}?\${qs.stringify(${payloadDef})}\`${api.options.timeout ? `, { signal: AbortSignal.timeout(${api.options.timeout}) }` : ""});
182
+ }
183
+ `.trim();
184
+ }
185
+ renderStream(api, apiBaseUrl, paramsDefAsObject) {
186
+ if (!api.streamOptions) {
187
+ return "// streamOptions not found";
188
+ }
189
+ const methodNameStream = api.options.resourceName ? `use${inflection.camelize(api.options.resourceName)}` : `use${inflection.camelize(api.methodName)}`;
190
+ const methodNameStreamCamelized = inflection.camelize(methodNameStream, true);
191
+ const eventsTypeDef = zodTypeToTsTypeDef(api.streamOptions.events);
192
+ return ` export function ${methodNameStreamCamelized}(
193
+ params: ${paramsDefAsObject},
194
+ handlers: EventHandlers<${eventsTypeDef} & { end?: () => void }>,
195
+ options: SSEStreamOptions) {
196
+ return useSSEStream<${eventsTypeDef}>(\`${apiBaseUrl}\`, params, handlers, options);
197
+ }`;
198
+ }
199
+ }
200
+
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvc2VydmljZS50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBkaWZmLCBncm91cCwgc29ydCwgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7XG4gIGFwaVBhcmFtVG9Uc0NvZGUsXG4gIGFwaVBhcmFtVG9Uc0NvZGVBc09iamVjdCxcbiAgYXBpUGFyYW1UeXBlVG9Uc1R5cGUsXG4gIHVud3JhcFByb21pc2VPbmNlLFxufSBmcm9tIFwiLi4vLi4vYXBpL2NvZGUtY29udmVydGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlbmRlZEFwaSB9IGZyb20gXCIuLi8uLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi8uLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgYXNzZXJ0RGVmaW5lZCB9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB7IHpvZFR5cGVUb1RzVHlwZURlZiB9IGZyb20gXCIuLi96b2QtY29udmVydGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fc2VydmljZSBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJzZXJ2aWNlXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIjp0YXJnZXQvc3JjL3NlcnZpY2VzXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc30vJHtuYW1lcy5mc30uc2VydmljZS50c2AsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7IG5hbWVzUmVjb3JkIH06IFRlbXBsYXRlT3B0aW9uc1tcInNlcnZpY2VcIl0pIHtcbiAgICBOYWl0ZS50KFwicmVuZGVyXCIsIHsgbmFtZXNSZWNvcmQgfSk7XG5cbiAgICBjb25zdCB7XG4gICAgICBzeW5jZXI6IHsgYXBpcyB9LFxuICAgIH0gPSBTb25hbXU7XG5cbiAgICBjb25zdCBhcGlzRm9yVGhpc01vZGVsID0gYXBpcy5maWx0ZXIoKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gYCR7bmFtZXNSZWNvcmQuY2FwaXRhbH1Nb2RlbGApO1xuXG4gICAgLy8g7ISc67mE7IqkIFR5cGVTb3VyY2VcbiAgICBjb25zdCB7IGxpbmVzLCBpbXBvcnRLZXlzIH0gPSB0aGlzLmdldFR5cGVTb3VyY2UoYXBpc0ZvclRoaXNNb2RlbCk7XG5cbiAgICAvLyBBeGlvc1Byb2dyZXNzRXZlbnQg7J6I64qU7KeAIO2ZleyduFxuICAgIGNvbnN0IGhhc0F4aW9zUHJvZ3Jlc3NFdmVudCA9IGFwaXMuZmluZCgoYXBpKSA9PlxuICAgICAgKGFwaS5vcHRpb25zLmNsaWVudHMgPz8gW10pLmluY2x1ZGVzKFwiYXhpb3MtbXVsdGlwYXJ0XCIpLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzUmVjb3JkKSxcbiAgICAgIGJvZHk6IGxpbmVzLmpvaW4oXCJcXG5cIiksXG4gICAgICBpbXBvcnRLZXlzOiBpbXBvcnRLZXlzLmZpbHRlcigoa2V5KSA9PiBbXCJMaXN0UmVzdWx0XCJdLmluY2x1ZGVzKGtleSkgPT09IGZhbHNlKSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcbiAgICAgICAgYGltcG9ydCB7IHogfSBmcm9tICd6b2QnO2AsXG4gICAgICAgIGBpbXBvcnQgcXMgZnJvbSBcInFzXCI7YCxcbiAgICAgICAgYGltcG9ydCB1c2VTV1IsIHsgdHlwZSBTV1JSZXNwb25zZSB9IGZyb20gXCJzd3JcIjtgLFxuICAgICAgICBgaW1wb3J0IHsgZmV0Y2gsIExpc3RSZXN1bHQsIFNXUkVycm9yLCBTd3JPcHRpb25zLCBoYW5kbGVDb25kaXRpb25hbCwgc3dyUG9zdEZldGNoZXIsIEV2ZW50SGFuZGxlcnMsIFNTRVN0cmVhbU9wdGlvbnMsIHVzZVNTRVN0cmVhbSB9IGZyb20gJy4uL3NvbmFtdS5zaGFyZWQnO2AsXG4gICAgICAgIC4uLihoYXNBeGlvc1Byb2dyZXNzRXZlbnQgPyBbYGltcG9ydCB7IHR5cGUgQXhpb3NQcm9ncmVzc0V2ZW50IH0gZnJvbSAnYXhpb3MnO2BdIDogW10pLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0VHlwZVNvdXJjZShhcGlzOiBFeHRlbmRlZEFwaVtdKToge1xuICAgIGxpbmVzOiBzdHJpbmdbXTtcbiAgICBpbXBvcnRLZXlzOiBzdHJpbmdbXTtcbiAgfSB7XG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIOygnOuEpOumreyXkOyEnCDshKDslrjtlZwg7YOA7J6FLCBpbXBvcnRLZXlz7JeQ7IScIOygnOyZuCDtlYTsmpRcbiAgICBsZXQgdHlwZVBhcmFtTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdCBncm91cHMgPSBncm91cChhcGlzLCAoYXBpKSA9PiBhcGkubW9kZWxOYW1lKTtcbiAgICBjb25zdCBib2R5ID0gT2JqZWN0LmtleXMoZ3JvdXBzKVxuICAgICAgLm1hcCgobW9kZWxOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGhvZHMgPSBncm91cHNbbW9kZWxOYW1lXTtcbiAgICAgICAgYXNzZXJ0KG1ldGhvZHMpO1xuICAgICAgICBjb25zdCBtZXRob2RDb2RlcyA9IG1ldGhvZHNcbiAgICAgICAgICAubWFwKChhcGkpID0+IHtcbiAgICAgICAgICAgIC8vIOy7qO2FjeyKpO2KuCDsoJzsmbjrkJwg7YyM652866+47YSwIOumrOyKpO2KuFxuICAgICAgICAgICAgY29uc3QgcGFyYW1zV2l0aG91dENvbnRleHQgPSBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAgICAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgICAgICAgICAhQXBpUGFyYW1UeXBlLmlzQ29udGV4dChwYXJhbS50eXBlKSAmJlxuICAgICAgICAgICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICAgICAgICAgIShwYXJhbS5vcHRpb25hbCA9PT0gdHJ1ZSAmJiBwYXJhbS5uYW1lLnN0YXJ0c1dpdGgoXCJfXCIpKSwgLy8gX+uhnCDsi5zsnpHtlZjripQg7YyM652866+47YSw64qUIOygnOyZuFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8g7YyM652866+47YSwIO2DgOyehSDsoJXsnZhcbiAgICAgICAgICAgIGNvbnN0IHR5cGVQYXJhbXNEZWYgPSBhcGkudHlwZVBhcmFtZXRlcnNcbiAgICAgICAgICAgICAgLm1hcCgodHlwZVBhcmFtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaVBhcmFtVHlwZVRvVHNUeXBlKHR5cGVQYXJhbSwgaW1wb3J0S2V5cyk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKFwiLCBcIik7XG4gICAgICAgICAgICB0eXBlUGFyYW1OYW1lcyA9IHR5cGVQYXJhbU5hbWVzLmNvbmNhdChcbiAgICAgICAgICAgICAgYXBpLnR5cGVQYXJhbWV0ZXJzLm1hcCgodHlwZVBhcmFtKSA9PiB0eXBlUGFyYW0uaWQpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8g7YyM652866+47YSwIOygleydmFxuICAgICAgICAgICAgY29uc3QgcGFyYW1zRGVmID0gYXBpUGFyYW1Ub1RzQ29kZShwYXJhbXNXaXRob3V0Q29udGV4dCwgaW1wb3J0S2V5cyk7XG5cbiAgICAgICAgICAgIC8vIO2MjOudvOuvuO2EsCDsoJXsnZggKOqwneyytCDtmJXtg5wpXG4gICAgICAgICAgICBjb25zdCBwYXJhbXNEZWZBc09iamVjdCA9IGFwaVBhcmFtVG9Uc0NvZGVBc09iamVjdChwYXJhbXNXaXRob3V0Q29udGV4dCwgaW1wb3J0S2V5cyk7XG5cbiAgICAgICAgICAgIC8vIOumrO2EtCDtg4DsnoUg7KCV7J2YXG4gICAgICAgICAgICBjb25zdCByZXR1cm5UeXBlRGVmID0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICAgICAgICAgIGFzc2VydERlZmluZWQodW53cmFwUHJvbWlzZU9uY2UoYXBpLnJldHVyblR5cGUpKSxcbiAgICAgICAgICAgICAgaW1wb3J0S2V5cyxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIO2OmOydtOuhnOuTnCDrjbDsnbTthLAg7KCV7J2YXG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkRGVmID0gYHsgJHtwYXJhbXNXaXRob3V0Q29udGV4dC5tYXAoKHBhcmFtKSA9PiBwYXJhbS5uYW1lKS5qb2luKFwiLCBcIil9IH1gO1xuXG4gICAgICAgICAgICAvLyDquLDrs7ggVVJMXG4gICAgICAgICAgICBjb25zdCBhcGlCYXNlVXJsID0gYCR7U29uYW11LmNvbmZpZy5hcGkucm91dGUucHJlZml4fSR7YXBpLnBhdGh9YDtcblxuICAgICAgICAgICAgY29uc3QgY2xpZW50cyA9IGFwaS5vcHRpb25zLmNsaWVudHMgPz8gW107XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAvLyDtgbTrnbzsnbTslrjtirjrs4TroZwg7IOd7ISxXG4gICAgICAgICAgICAgIC4uLnNvcnQoY2xpZW50cywgKGNsaWVudCkgPT4gKGNsaWVudCA9PT0gXCJzd3JcIiA/IDAgOiAxKSkubWFwKChjbGllbnQpID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGNsaWVudCkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImF4aW9zXCI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckF4aW9zKFxuICAgICAgICAgICAgICAgICAgICAgIGFwaSxcbiAgICAgICAgICAgICAgICAgICAgICBhcGlCYXNlVXJsLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVQYXJhbXNEZWYsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW1zRGVmLFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGVEZWYsXG4gICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZERlZixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJheGlvcy1tdWx0aXBhcnRcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQXhpb3NNdWx0aXBhcnQoXG4gICAgICAgICAgICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgICAgICAgICAgIGFwaUJhc2VVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFtc0RlZixcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNEZWYsXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZURlZixcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNXaXRob3V0Q29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJzd3JcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyU3dyKFxuICAgICAgICAgICAgICAgICAgICAgIGFwaSxcbiAgICAgICAgICAgICAgICAgICAgICBhcGlCYXNlVXJsLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGVQYXJhbXNEZWYsXG4gICAgICAgICAgICAgICAgICAgICAgcGFyYW1zRGVmLFxuICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGVEZWYsXG4gICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZERlZixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJ3aW5kb3ctZmV0Y2hcIjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyV2luZG93RmV0Y2goXG4gICAgICAgICAgICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgICAgICAgICAgIGFwaUJhc2VVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFtc0RlZixcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNEZWYsXG4gICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZERlZixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgLy8gTm90IHN1cHBvcnRlZCAke2luZmxlY3Rpb24uY2FtZWxpemUoY2xpZW50LCB0cnVlKX0geWV0LmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLy8g7Iqk7Yq466as67CN7J24IOqyveyasFxuICAgICAgICAgICAgICAuLi4oYXBpLnN0cmVhbU9wdGlvbnMgPyBbdGhpcy5yZW5kZXJTdHJlYW0oYXBpLCBhcGlCYXNlVXJsLCBwYXJhbXNEZWZBc09iamVjdCldIDogW10pLFxuICAgICAgICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oXCJcXG5cXG5cIik7XG5cbiAgICAgICAgcmV0dXJuIGBleHBvcnQgbmFtZXNwYWNlICR7bW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiU2VydmljZVwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlNlcnZpY2VcIil9IHtcbiR7bWV0aG9kQ29kZXN9XG59YDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIlxcblxcblwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lczogW2JvZHldLFxuICAgICAgaW1wb3J0S2V5czogZGlmZih1bmlxdWUoaW1wb3J0S2V5cyksIHR5cGVQYXJhbU5hbWVzKSxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyQXhpb3MoXG4gICAgYXBpOiBFeHRlbmRlZEFwaSxcbiAgICBhcGlCYXNlVXJsOiBzdHJpbmcsXG4gICAgdHlwZVBhcmFtc0RlZjogc3RyaW5nLFxuICAgIHBhcmFtc0RlZjogc3RyaW5nLFxuICAgIHJldHVyblR5cGVEZWY6IHN0cmluZyxcbiAgICBwYXlsb2FkRGVmOiBzdHJpbmcsXG4gICkge1xuICAgIGNvbnN0IG1ldGhvZE5hbWVBeGlvcyA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgPyBgZ2V0JHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSl9YFxuICAgICAgOiBhcGkubWV0aG9kTmFtZTtcblxuICAgIGlmIChhcGkub3B0aW9ucy5odHRwTWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICByZXR1cm4gYFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICR7bWV0aG9kTmFtZUF4aW9zfSR7dHlwZVBhcmFtc0RlZn0oJHtwYXJhbXNEZWZ9KTogUHJvbWlzZTwke3JldHVyblR5cGVEZWZ9PiB7XG4gICAgcmV0dXJuIGZldGNoKHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIHVybDogXFxgJHthcGlCYXNlVXJsfT9cXCR7cXMuc3RyaW5naWZ5KCR7cGF5bG9hZERlZn0pfVxcYCxcbiAgICAgICR7YXBpLm9wdGlvbnMudGltZW91dCA/IGBzaWduYWw6IEFib3J0U2lnbmFsLnRpbWVvdXQoJHthcGkub3B0aW9ucy50aW1lb3V0fSksYCA6IFwiXCJ9XG4gICAgfSk7XG59XG4gICAgYC50cmltKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gJHttZXRob2ROYW1lQXhpb3N9JHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pOiBQcm9taXNlPCR7cmV0dXJuVHlwZURlZn0+IHtcbiAgICByZXR1cm4gZmV0Y2goe1xuICAgICAgbWV0aG9kOiAnJHthcGkub3B0aW9ucy5odHRwTWV0aG9kfScsXG4gICAgICB1cmw6IFxcYCR7YXBpQmFzZVVybH1cXGAsXG4gICAgICBkYXRhOiAke3BheWxvYWREZWZ9LFxuICAgICAgJHthcGkub3B0aW9ucy50aW1lb3V0ID8gYHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgke2FwaS5vcHRpb25zLnRpbWVvdXR9KSxgIDogXCJcIn1cbiAgICB9KTtcbn1cbiAgICAgIGAudHJpbSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlckF4aW9zTXVsdGlwYXJ0KFxuICAgIGFwaTogRXh0ZW5kZWRBcGksXG4gICAgYXBpQmFzZVVybDogc3RyaW5nLFxuICAgIHR5cGVQYXJhbXNEZWY6IHN0cmluZyxcbiAgICBwYXJhbXNEZWY6IHN0cmluZyxcbiAgICByZXR1cm5UeXBlRGVmOiBzdHJpbmcsXG4gICAgcGFyYW1zV2l0aG91dENvbnRleHQ6IEFwaVBhcmFtW10sXG4gICkge1xuICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBhcGkudXBsb2FkT3B0aW9ucz8ubW9kZSA9PT0gXCJtdWx0aXBsZVwiO1xuICAgIGNvbnN0IGZpbGVQYXJhbU5hbWUgPSBpc011bHRpcGxlID8gXCJmaWxlc1wiIDogXCJmaWxlXCI7XG4gICAgY29uc3QgZmlsZVBhcmFtVHlwZSA9IGlzTXVsdGlwbGUgPyBcIkZpbGVbXVwiIDogXCJGaWxlXCI7XG5cbiAgICBjb25zdCBmb3JtRGF0YURlZiA9IGlzTXVsdGlwbGVcbiAgICAgID8gW1xuICAgICAgICAgIGAke2ZpbGVQYXJhbU5hbWV9LmZvckVhY2goZiA9PiB7IGZvcm1EYXRhLmFwcGVuZChcIiR7ZmlsZVBhcmFtTmFtZX1cIiwgZikgfSApOyBgLFxuICAgICAgICAgIC4uLnBhcmFtc1dpdGhvdXRDb250ZXh0Lm1hcChcbiAgICAgICAgICAgIChwYXJhbSkgPT4gYGZvcm1EYXRhLmFwcGVuZCgnJHtwYXJhbS5uYW1lfScsIFN0cmluZygke3BhcmFtLm5hbWV9KSk7YCxcbiAgICAgICAgICApLFxuICAgICAgICBdLmpvaW4oXCJcXG5cIilcbiAgICAgIDogW1xuICAgICAgICAgIGBmb3JtRGF0YS5hcHBlbmQoXCIke2ZpbGVQYXJhbU5hbWV9XCIsICR7ZmlsZVBhcmFtTmFtZX0pO2AsXG4gICAgICAgICAgLi4ucGFyYW1zV2l0aG91dENvbnRleHQubWFwKFxuICAgICAgICAgICAgKHBhcmFtKSA9PiBgZm9ybURhdGEuYXBwZW5kKCcke3BhcmFtLm5hbWV9JywgU3RyaW5nKCR7cGFyYW0ubmFtZX0pKTtgLFxuICAgICAgICAgICksXG4gICAgICAgIF0uam9pbihcIlxcblwiKTtcblxuICAgIGNvbnN0IHBhcmFtc0RlZkNvbW1hID0gcGFyYW1zRGVmICE9PSBcIlwiID8gXCIsIFwiIDogXCJcIjtcbiAgICByZXR1cm4gYFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICR7YXBpLm1ldGhvZE5hbWV9JHt0eXBlUGFyYW1zRGVmfShcbiAgJHtwYXJhbXNEZWZ9JHtwYXJhbXNEZWZDb21tYX1cbiAgJHtmaWxlUGFyYW1OYW1lfTogJHtmaWxlUGFyYW1UeXBlfSxcbiAgb25VcGxvYWRQcm9ncmVzcz86IChwZTpBeGlvc1Byb2dyZXNzRXZlbnQpID0+IHZvaWRcbiAgKTogUHJvbWlzZTwke3JldHVyblR5cGVEZWZ9PiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAke2Zvcm1EYXRhRGVmfVxuICAgIHJldHVybiBmZXRjaCh7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVybDogXFxgJHthcGlCYXNlVXJsfVxcYCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsXG4gICAgICB9LFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICAgIGRhdGE6IGZvcm1EYXRhLFxuICAgICAgJHthcGkub3B0aW9ucy50aW1lb3V0ID8gYHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgke2FwaS5vcHRpb25zLnRpbWVvdXR9KSxgIDogXCJcIn1cbiAgICB9KTtcbiAgfVxuICBgLnRyaW0oKTtcbiAgfVxuXG4gIHJlbmRlclN3cihcbiAgICBhcGk6IEV4dGVuZGVkQXBpLFxuICAgIGFwaUJhc2VVcmw6IHN0cmluZyxcbiAgICB0eXBlUGFyYW1zRGVmOiBzdHJpbmcsXG4gICAgcGFyYW1zRGVmOiBzdHJpbmcsXG4gICAgcmV0dXJuVHlwZURlZjogc3RyaW5nLFxuICAgIHBheWxvYWREZWY6IHN0cmluZyxcbiAgKSB7XG4gICAgY29uc3QgbWV0aG9kTmFtZVN3ciA9IGFwaS5vcHRpb25zLnJlc291cmNlTmFtZVxuICAgICAgPyBgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5vcHRpb25zLnJlc291cmNlTmFtZSl9YFxuICAgICAgOiBgdXNlJHtpbmZsZWN0aW9uLmNhbWVsaXplKGFwaS5tZXRob2ROYW1lKX1gO1xuICAgIHJldHVybiBgICBleHBvcnQgZnVuY3Rpb24gJHtpbmZsZWN0aW9uLmNhbWVsaXplKG1ldGhvZE5hbWVTd3IsIHRydWUpfSR7dHlwZVBhcmFtc0RlZn0oJHtbXG4gICAgICBwYXJhbXNEZWYsXG4gICAgICBcInN3ck9wdGlvbnM/OiBTd3JPcHRpb25zXCIsXG4gICAgXVxuICAgICAgLmZpbHRlcigocCkgPT4gcCAhPT0gXCJcIilcbiAgICAgIC5qb2luKFwiLFwiKX0sICk6IFNXUlJlc3BvbnNlPCR7cmV0dXJuVHlwZURlZn0sIFNXUkVycm9yPiB7XG4gICAgcmV0dXJuIHVzZVNXUihoYW5kbGVDb25kaXRpb25hbChbXG4gICAgICBcXGAke2FwaUJhc2VVcmx9XFxgLFxuICAgICAgJHtwYXlsb2FkRGVmfSxcbiAgICBdLCBzd3JPcHRpb25zPy5jb25kaXRpb25hbCkke2FwaS5vcHRpb25zLmh0dHBNZXRob2QgPT09IFwiUE9TVFwiID8gXCIsIHN3clBvc3RGZXRjaGVyXCIgOiBcIlwifSR7XG4gICAgICBhcGkub3B0aW9ucy50aW1lb3V0ID8gYCwgeyBsb2FkaW5nVGltZW91dDogJHthcGkub3B0aW9ucy50aW1lb3V0fSB9YCA6IFwiXCJcbiAgICB9KTtcbiAgfWA7XG4gIH1cblxuICByZW5kZXJXaW5kb3dGZXRjaChcbiAgICBhcGk6IEV4dGVuZGVkQXBpLFxuICAgIGFwaUJhc2VVcmw6IHN0cmluZyxcbiAgICB0eXBlUGFyYW1zRGVmOiBzdHJpbmcsXG4gICAgcGFyYW1zRGVmOiBzdHJpbmcsXG4gICAgcGF5bG9hZERlZjogc3RyaW5nLFxuICApIHtcbiAgICByZXR1cm4gYFxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uICR7YXBpLm1ldGhvZE5hbWV9JHt0eXBlUGFyYW1zRGVmfSgke3BhcmFtc0RlZn0pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHdpbmRvdy5mZXRjaChcXGAke2FwaUJhc2VVcmx9P1xcJHtxcy5zdHJpbmdpZnkoJHtwYXlsb2FkRGVmfSl9XFxgJHtcbiAgICAgIGFwaS5vcHRpb25zLnRpbWVvdXQgPyBgLCB7IHNpZ25hbDogQWJvcnRTaWduYWwudGltZW91dCgke2FwaS5vcHRpb25zLnRpbWVvdXR9KSB9YCA6IFwiXCJcbiAgICB9KTtcbn1cbiAgICBgLnRyaW0oKTtcbiAgfVxuXG4gIHJlbmRlclN0cmVhbShhcGk6IEV4dGVuZGVkQXBpLCBhcGlCYXNlVXJsOiBzdHJpbmcsIHBhcmFtc0RlZkFzT2JqZWN0OiBzdHJpbmcpIHtcbiAgICBpZiAoIWFwaS5zdHJlYW1PcHRpb25zKSB7XG4gICAgICByZXR1cm4gXCIvLyBzdHJlYW1PcHRpb25zIG5vdCBmb3VuZFwiO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZE5hbWVTdHJlYW0gPSBhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWVcbiAgICAgID8gYHVzZSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkub3B0aW9ucy5yZXNvdXJjZU5hbWUpfWBcbiAgICAgIDogYHVzZSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShhcGkubWV0aG9kTmFtZSl9YDtcbiAgICBjb25zdCBtZXRob2ROYW1lU3RyZWFtQ2FtZWxpemVkID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShtZXRob2ROYW1lU3RyZWFtLCB0cnVlKTtcblxuICAgIGNvbnN0IGV2ZW50c1R5cGVEZWYgPSB6b2RUeXBlVG9Uc1R5cGVEZWYoYXBpLnN0cmVhbU9wdGlvbnMuZXZlbnRzKTtcblxuICAgIHJldHVybiBgICBleHBvcnQgZnVuY3Rpb24gJHttZXRob2ROYW1lU3RyZWFtQ2FtZWxpemVkfShcbiAgcGFyYW1zOiAke3BhcmFtc0RlZkFzT2JqZWN0fSxcbiAgaGFuZGxlcnM6IEV2ZW50SGFuZGxlcnM8JHtldmVudHNUeXBlRGVmfSAmIHsgZW5kPzogKCkgPT4gdm9pZCB9PixcbiAgb3B0aW9uczogU1NFU3RyZWFtT3B0aW9ucykge1xuICAgIHJldHVybiB1c2VTU0VTdHJlYW08JHtldmVudHNUeXBlRGVmfT4oXFxgJHthcGlCYXNlVXJsfVxcYCwgcGFyYW1zLCBoYW5kbGVycywgb3B0aW9ucyk7XG4gIH1gO1xuICB9XG59XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiaW5mbGVjdGlvbiIsImRpZmYiLCJncm91cCIsInNvcnQiLCJ1bmlxdWUiLCJhcGlQYXJhbVRvVHNDb2RlIiwiYXBpUGFyYW1Ub1RzQ29kZUFzT2JqZWN0IiwiYXBpUGFyYW1UeXBlVG9Uc1R5cGUiLCJ1bndyYXBQcm9taXNlT25jZSIsIlNvbmFtdSIsIk5haXRlIiwiQXBpUGFyYW1UeXBlIiwiYXNzZXJ0RGVmaW5lZCIsIlRlbXBsYXRlIiwiem9kVHlwZVRvVHNUeXBlRGVmIiwiVGVtcGxhdGVfX3NlcnZpY2UiLCJnZXRUYXJnZXRBbmRQYXRoIiwibmFtZXMiLCJ0YXJnZXQiLCJwYXRoIiwiZnMiLCJyZW5kZXIiLCJuYW1lc1JlY29yZCIsInQiLCJzeW5jZXIiLCJhcGlzIiwiYXBpc0ZvclRoaXNNb2RlbCIsImZpbHRlciIsImFwaSIsIm1vZGVsTmFtZSIsImNhcGl0YWwiLCJsaW5lcyIsImltcG9ydEtleXMiLCJnZXRUeXBlU291cmNlIiwiaGFzQXhpb3NQcm9ncmVzc0V2ZW50IiwiZmluZCIsIm9wdGlvbnMiLCJjbGllbnRzIiwiaW5jbHVkZXMiLCJib2R5Iiwiam9pbiIsImtleSIsImN1c3RvbUhlYWRlcnMiLCJ0eXBlUGFyYW1OYW1lcyIsImdyb3VwcyIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJtZXRob2RzIiwibWV0aG9kQ29kZXMiLCJwYXJhbXNXaXRob3V0Q29udGV4dCIsInBhcmFtZXRlcnMiLCJwYXJhbSIsImlzQ29udGV4dCIsInR5cGUiLCJpc1JlZktuZXgiLCJvcHRpb25hbCIsIm5hbWUiLCJzdGFydHNXaXRoIiwidHlwZVBhcmFtc0RlZiIsInR5cGVQYXJhbWV0ZXJzIiwidHlwZVBhcmFtIiwiY29uY2F0IiwiaWQiLCJwYXJhbXNEZWYiLCJwYXJhbXNEZWZBc09iamVjdCIsInJldHVyblR5cGVEZWYiLCJyZXR1cm5UeXBlIiwicGF5bG9hZERlZiIsImFwaUJhc2VVcmwiLCJjb25maWciLCJyb3V0ZSIsInByZWZpeCIsImNsaWVudCIsInJlbmRlckF4aW9zIiwicmVuZGVyQXhpb3NNdWx0aXBhcnQiLCJyZW5kZXJTd3IiLCJyZW5kZXJXaW5kb3dGZXRjaCIsImNhbWVsaXplIiwic3RyZWFtT3B0aW9ucyIsInJlbmRlclN0cmVhbSIsInJlcGxhY2UiLCJtZXRob2ROYW1lQXhpb3MiLCJyZXNvdXJjZU5hbWUiLCJtZXRob2ROYW1lIiwiaHR0cE1ldGhvZCIsInRpbWVvdXQiLCJ0cmltIiwiaXNNdWx0aXBsZSIsInVwbG9hZE9wdGlvbnMiLCJtb2RlIiwiZmlsZVBhcmFtTmFtZSIsImZpbGVQYXJhbVR5cGUiLCJmb3JtRGF0YURlZiIsInBhcmFtc0RlZkNvbW1hIiwibWV0aG9kTmFtZVN3ciIsInAiLCJtZXRob2ROYW1lU3RyZWFtIiwibWV0aG9kTmFtZVN0cmVhbUNhbWVsaXplZCIsImV2ZW50c1R5cGVEZWYiLCJldmVudHMiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUM1QixPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxTQUFTQyxJQUFJLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxNQUFNLFFBQVEsVUFBVTtBQUNwRCxTQUNFQyxnQkFBZ0IsRUFDaEJDLHdCQUF3QixFQUN4QkMsb0JBQW9CLEVBQ3BCQyxpQkFBaUIsUUFDWiwrQkFBNEI7QUFFbkMsU0FBU0MsTUFBTSxRQUFRLHNCQUFtQjtBQUUxQyxTQUFTQyxLQUFLLFFBQVEsdUJBQW9CO0FBRTFDLFNBQXdCQyxZQUFZLFFBQVEsdUJBQW9CO0FBQ2hFLFNBQVNDLGFBQWEsUUFBUSx1QkFBb0I7QUFDbEQsU0FBU0MsUUFBUSxRQUFRLGlCQUFjO0FBQ3ZDLFNBQVNDLGtCQUFrQixRQUFRLHNCQUFtQjtBQUV0RCxPQUFPLE1BQU1DLDBCQUEwQkY7SUFDckMsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFHLGlCQUFpQkMsS0FBd0IsRUFBRTtRQUN6QyxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMsTUFBTSxHQUFHRixNQUFNRyxFQUFFLENBQUMsQ0FBQyxFQUFFSCxNQUFNRyxFQUFFLENBQUMsV0FBVyxDQUFDO1FBQzVDO0lBQ0Y7SUFFQUMsT0FBTyxFQUFFQyxXQUFXLEVBQThCLEVBQUU7UUFDbERaLE1BQU1hLENBQUMsQ0FBQyxVQUFVO1lBQUVEO1FBQVk7UUFFaEMsTUFBTSxFQUNKRSxRQUFRLEVBQUVDLElBQUksRUFBRSxFQUNqQixHQUFHaEI7UUFFSixNQUFNaUIsbUJBQW1CRCxLQUFLRSxNQUFNLENBQUMsQ0FBQ0MsTUFBUUEsSUFBSUMsU0FBUyxLQUFLLEdBQUdQLFlBQVlRLE9BQU8sQ0FBQyxLQUFLLENBQUM7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
@@ -1,6 +1,6 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
1
+ import { type EntityNamesRecord } from "../../entity/entity-manager";
2
+ import type { TemplateOptions } from "../../types/types";
3
+ import { Template } from "../template";
4
4
  export declare class Template__view_enums_buttonset extends Template {
5
5
  constructor();
6
6
  getTargetAndPath(names: EntityNamesRecord, componentId: string): {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view_enums_buttonset.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_enums_buttonset.template.ts"],"names":[],"mappings":"AAAA,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,8BAA+B,SAAQ,QAAQ;;IAK1D,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM;;;;IAO9D,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,sBAAsB,CAAC;;;;;;CAiBrE"}
@@ -0,0 +1,31 @@
1
+ import { EntityManager } from "../../entity/entity-manager.js";
2
+ import { Template } from "../template.js";
3
+ export class Template__view_enums_buttonset extends Template {
4
+ constructor(){
5
+ super("view_enums_buttonset");
6
+ }
7
+ getTargetAndPath(names, componentId) {
8
+ return {
9
+ target: "web/src/components",
10
+ path: `${names.fs}/${componentId}ButtonSet.tsx`
11
+ };
12
+ }
13
+ render({ entityId, enumId }) {
14
+ const names = EntityManager.getNamesFromId(entityId);
15
+ return {
16
+ ...this.getTargetAndPath(names, enumId),
17
+ body: `
18
+ /*
19
+ view_enums_buttonset
20
+ ${JSON.stringify({
21
+ key: this.key,
22
+ options: entityId
23
+ })}
24
+ */
25
+ `.trim(),
26
+ importKeys: []
27
+ };
28
+ }
29
+ }
30
+
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19lbnVtc19idXR0b25zZXQudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfZW51bXNfYnV0dG9uc2V0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfZW51bXNfYnV0dG9uc2V0XCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQsIGNvbXBvbmVudElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvY29tcG9uZW50c1wiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnN9LyR7Y29tcG9uZW50SWR9QnV0dG9uU2V0LnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7IGVudGl0eUlkLCBlbnVtSWQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19lbnVtc19idXR0b25zZXRcIl0pIHtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcywgZW51bUlkKSxcbiAgICAgIGJvZHk6IGBcbi8qXG52aWV3X2VudW1zX2J1dHRvbnNldFxuJHtKU09OLnN0cmluZ2lmeSh7XG4gIGtleTogdGhpcy5rZXksXG4gIG9wdGlvbnM6IGVudGl0eUlkLFxufSl9XG4qL1xuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsiRW50aXR5TWFuYWdlciIsIlRlbXBsYXRlIiwiVGVtcGxhdGVfX3ZpZXdfZW51bXNfYnV0dG9uc2V0IiwiZ2V0VGFyZ2V0QW5kUGF0aCIsIm5hbWVzIiwiY29tcG9uZW50SWQiLCJ0YXJnZXQiLCJwYXRoIiwiZnMiLCJyZW5kZXIiLCJlbnRpdHlJZCIsImVudW1JZCIsImdldE5hbWVzRnJvbUlkIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJrZXkiLCJvcHRpb25zIiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsUUFBZ0MsaUNBQThCO0FBRXBGLFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUV2QyxPQUFPLE1BQU1DLHVDQUF1Q0Q7SUFDbEQsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFFLGlCQUFpQkMsS0FBd0IsRUFBRUMsV0FBbUIsRUFBRTtRQUM5RCxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMsTUFBTSxHQUFHSCxNQUFNSSxFQUFFLENBQUMsQ0FBQyxFQUFFSCxZQUFZLGFBQWEsQ0FBQztRQUNqRDtJQUNGO0lBRUFJLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxNQUFNLEVBQTJDLEVBQUU7UUFDcEUsTUFBTVAsUUFBUUosY0FBY1ksY0FBYyxDQUFDRjtRQUUzQyxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUNQLGdCQUFnQixDQUFDQyxPQUFPTyxPQUFPO1lBQ3ZDRSxNQUFNLENBQUM7OztBQUdiLEVBQUVDLEtBQUtDLFNBQVMsQ0FBQztnQkFDZkMsS0FBSyxJQUFJLENBQUNBLEdBQUc7Z0JBQ2JDLFNBQVNQO1lBQ1gsR0FBRzs7TUFFRyxDQUFDLENBQUNRLElBQUk7WUFDTkMsWUFBWSxFQUFFO1FBQ2hCO0lBQ0Y7QUFDRiJ9
@@ -1,6 +1,6 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
1
+ import { type EntityNamesRecord } from "../../entity/entity-manager";
2
+ import type { TemplateOptions } from "../../types/types";
3
+ import { Template } from "../template";
4
4
  export declare class Template__view_enums_dropdown extends Template {
5
5
  constructor();
6
6
  getTargetAndPath(names: EntityNamesRecord, enumId: string): {
@@ -14,5 +14,4 @@ export declare class Template__view_enums_dropdown extends Template {
14
14
  path: string;
15
15
  };
16
16
  }
17
- export declare function getLabel(entityId: string, enumId: string): string;
18
17
  //# sourceMappingURL=view_enums_dropdown.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view_enums_dropdown.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_enums_dropdown.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,6BAA8B,SAAQ,QAAQ;;IAKzD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM;;;;IAOzD,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,qBAAqB,CAAC;;;;;;CAmCpE"}
@@ -0,0 +1,50 @@
1
+ import { EntityManager } from "../../entity/entity-manager.js";
2
+ import { getLabel } from "../helpers.js";
3
+ import { Template } from "../template.js";
4
+ export class Template__view_enums_dropdown extends Template {
5
+ constructor(){
6
+ super("view_enums_dropdown");
7
+ }
8
+ getTargetAndPath(names, enumId) {
9
+ return {
10
+ target: "web/src/components",
11
+ path: `${names.fs}/${enumId}Dropdown.tsx`
12
+ };
13
+ }
14
+ render({ entityId, enumId }) {
15
+ const names = EntityManager.getNamesFromId(entityId);
16
+ const label = getLabel(entityId, enumId);
17
+ return {
18
+ ...this.getTargetAndPath(names, enumId),
19
+ body: `
20
+ import React from 'react';
21
+ import {
22
+ Dropdown,
23
+ DropdownProps,
24
+ } from 'semantic-ui-react';
25
+
26
+ import { ${enumId}Label } from 'src/services/sonamu.generated';
27
+
28
+ export function ${enumId}Dropdown(props: DropdownProps) {
29
+ const options = Object.entries(${enumId}Label).map(([key, label]) => {
30
+ return {
31
+ key,
32
+ value: key,
33
+ text: "${label}: " + label,
34
+ };
35
+ });
36
+ return (
37
+ <Dropdown
38
+ className="label"
39
+ options={options}
40
+ {...props}
41
+ />
42
+ );
43
+ }
44
+ `.trim(),
45
+ importKeys: []
46
+ };
47
+ }
48
+ }
49
+
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19lbnVtc19kcm9wZG93bi50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldExhYmVsIH0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19lbnVtc19kcm9wZG93biBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJ2aWV3X2VudW1zX2Ryb3Bkb3duXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQsIGVudW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCJ3ZWIvc3JjL2NvbXBvbmVudHNcIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzfS8ke2VudW1JZH1Ecm9wZG93bi50c3hgLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoeyBlbnRpdHlJZCwgZW51bUlkIH06IFRlbXBsYXRlT3B0aW9uc1tcInZpZXdfZW51bXNfZHJvcGRvd25cIl0pIHtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIGNvbnN0IGxhYmVsID0gZ2V0TGFiZWwoZW50aXR5SWQsIGVudW1JZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzLCBlbnVtSWQpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIERyb3Bkb3duLFxuICBEcm9wZG93blByb3BzLFxufSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5cbmltcG9ydCB7ICR7ZW51bUlkfUxhYmVsIH0gZnJvbSAnc3JjL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWQnO1xuXG5leHBvcnQgZnVuY3Rpb24gJHtlbnVtSWR9RHJvcGRvd24ocHJvcHM6IERyb3Bkb3duUHJvcHMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5lbnRyaWVzKCR7ZW51bUlkfUxhYmVsKS5tYXAoKFtrZXksIGxhYmVsXSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZToga2V5LFxuICAgICAgdGV4dDogXCIke2xhYmVsfTogXCIgKyBsYWJlbCxcbiAgICB9O1xuICB9KTtcbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25cbiAgICAgIGNsYXNzTmFtZT1cImxhYmVsXCJcbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkVudGl0eU1hbmFnZXIiLCJnZXRMYWJlbCIsIlRlbXBsYXRlIiwiVGVtcGxhdGVfX3ZpZXdfZW51bXNfZHJvcGRvd24iLCJnZXRUYXJnZXRBbmRQYXRoIiwibmFtZXMiLCJlbnVtSWQiLCJ0YXJnZXQiLCJwYXRoIiwiZnMiLCJyZW5kZXIiLCJlbnRpdHlJZCIsImdldE5hbWVzRnJvbUlkIiwibGFiZWwiLCJib2R5IiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsUUFBZ0MsaUNBQThCO0FBRXBGLFNBQVNDLFFBQVEsUUFBUSxnQkFBYTtBQUN0QyxTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFFdkMsT0FBTyxNQUFNQyxzQ0FBc0NEO0lBQ2pELGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBRSxpQkFBaUJDLEtBQXdCLEVBQUVDLE1BQWMsRUFBRTtRQUN6RCxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMsTUFBTSxHQUFHSCxNQUFNSSxFQUFFLENBQUMsQ0FBQyxFQUFFSCxPQUFPLFlBQVksQ0FBQztRQUMzQztJQUNGO0lBRUFJLE9BQU8sRUFBRUMsUUFBUSxFQUFFTCxNQUFNLEVBQTBDLEVBQUU7UUFDbkUsTUFBTUQsUUFBUUwsY0FBY1ksY0FBYyxDQUFDRDtRQUMzQyxNQUFNRSxRQUFRWixTQUFTVSxVQUFVTDtRQUVqQyxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUNGLGdCQUFnQixDQUFDQyxPQUFPQyxPQUFPO1lBQ3ZDUSxNQUFNLENBQUM7Ozs7Ozs7U0FPSixFQUFFUixPQUFPOztnQkFFRixFQUFFQSxPQUFPO2lDQUNRLEVBQUVBLE9BQU87Ozs7YUFJN0IsRUFBRU8sTUFBTTs7Ozs7Ozs7Ozs7TUFXZixDQUFDLENBQUNFLElBQUk7WUFDTkMsWUFBWSxFQUFFO1FBQ2hCO0lBQ0Y7QUFDRiJ9
@@ -1,6 +1,6 @@
1
- import { TemplateOptions } from "../types/types";
2
- import { EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
1
+ import { type EntityNamesRecord } from "../../entity/entity-manager";
2
+ import type { TemplateOptions } from "../../types/types";
3
+ import { Template } from "../template";
4
4
  export declare class Template__view_enums_select extends Template {
5
5
  constructor();
6
6
  getTargetAndPath(names: EntityNamesRecord, enumId: string): {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view_enums_select.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_enums_select.template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,2BAA4B,SAAQ,QAAQ;;IAKvD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM;;;;IAOzD,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,mBAAmB,CAAC;;;;;;CAwClE"}
@@ -0,0 +1,55 @@
1
+ import { EntityManager } from "../../entity/entity-manager.js";
2
+ import { getLabel } from "../helpers.js";
3
+ import { Template } from "../template.js";
4
+ export class Template__view_enums_select extends Template {
5
+ constructor(){
6
+ super("view_enums_select");
7
+ }
8
+ getTargetAndPath(names, enumId) {
9
+ return {
10
+ target: "web/src/components",
11
+ path: `${names.fs}/${enumId}Select.tsx`
12
+ };
13
+ }
14
+ render({ entityId, enumId }) {
15
+ const names = EntityManager.getNamesFromId(entityId);
16
+ const label = getLabel(entityId, enumId);
17
+ return {
18
+ ...this.getTargetAndPath(names, enumId),
19
+ body: `
20
+ import React from 'react';
21
+ import {
22
+ Dropdown,
23
+ DropdownProps,
24
+ } from 'semantic-ui-react';
25
+
26
+ import { ${enumId}, ${enumId}Label } from 'src/services/sonamu.generated';
27
+
28
+ export type ${enumId}SelectProps = {
29
+ placeholder?: string;
30
+ textPrefix?: string;
31
+ } & DropdownProps;
32
+ export function ${enumId}Select({placeholder, textPrefix, ...props}: ${enumId}SelectProps) {
33
+ const typeOptions = ${enumId}.options.map((key) => ({
34
+ key,
35
+ value: key,
36
+ text: (textPrefix ?? '${label}: ') + ${enumId}Label[key],
37
+ }));
38
+
39
+ return (
40
+ <Dropdown
41
+ placeholder={placeholder ?? "${label}"}
42
+ selection
43
+ options={typeOptions}
44
+ selectOnBlur={false}
45
+ {...props}
46
+ />
47
+ );
48
+ }
49
+ `.trim(),
50
+ importKeys: []
51
+ };
52
+ }
53
+ }
54
+
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19lbnVtc19zZWxlY3QudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRMYWJlbCB9IGZyb20gXCIuLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfZW51bXNfc2VsZWN0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfZW51bXNfc2VsZWN0XCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQsIGVudW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCJ3ZWIvc3JjL2NvbXBvbmVudHNcIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzfS8ke2VudW1JZH1TZWxlY3QudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHsgZW50aXR5SWQsIGVudW1JZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2VudW1zX3NlbGVjdFwiXSkge1xuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG4gICAgY29uc3QgbGFiZWwgPSBnZXRMYWJlbChlbnRpdHlJZCwgZW51bUlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMsIGVudW1JZCksXG4gICAgICBib2R5OiBgXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgRHJvcGRvd24sXG4gIERyb3Bkb3duUHJvcHMsXG59IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcblxuaW1wb3J0IHsgJHtlbnVtSWR9LCAke2VudW1JZH1MYWJlbCB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkJztcblxuZXhwb3J0IHR5cGUgJHtlbnVtSWR9U2VsZWN0UHJvcHMgPSB7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB0ZXh0UHJlZml4Pzogc3RyaW5nO1xufSAmIERyb3Bkb3duUHJvcHM7XG5leHBvcnQgZnVuY3Rpb24gJHtlbnVtSWR9U2VsZWN0KHtwbGFjZWhvbGRlciwgdGV4dFByZWZpeCwgLi4ucHJvcHN9OiAke2VudW1JZH1TZWxlY3RQcm9wcykge1xuICBjb25zdCB0eXBlT3B0aW9ucyA9ICR7ZW51bUlkfS5vcHRpb25zLm1hcCgoa2V5KSA9PiAoe1xuICAgIGtleSxcbiAgICB2YWx1ZToga2V5LFxuICAgIHRleHQ6ICh0ZXh0UHJlZml4ID8/ICcke2xhYmVsfTogJykgKyAke2VudW1JZH1MYWJlbFtrZXldLFxuICB9KSk7XG5cbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlciA/PyBcIiR7bGFiZWx9XCJ9XG4gICAgICBzZWxlY3Rpb25cbiAgICAgIG9wdGlvbnM9e3R5cGVPcHRpb25zfVxuICAgICAgc2VsZWN0T25CbHVyPXtmYWxzZX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApO1xufVxuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsiRW50aXR5TWFuYWdlciIsImdldExhYmVsIiwiVGVtcGxhdGUiLCJUZW1wbGF0ZV9fdmlld19lbnVtc19zZWxlY3QiLCJnZXRUYXJnZXRBbmRQYXRoIiwibmFtZXMiLCJlbnVtSWQiLCJ0YXJnZXQiLCJwYXRoIiwiZnMiLCJyZW5kZXIiLCJlbnRpdHlJZCIsImdldE5hbWVzRnJvbUlkIiwibGFiZWwiLCJib2R5IiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsUUFBZ0MsaUNBQThCO0FBRXBGLFNBQVNDLFFBQVEsUUFBUSxnQkFBYTtBQUN0QyxTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFFdkMsT0FBTyxNQUFNQyxvQ0FBb0NEO0lBQy9DLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBRSxpQkFBaUJDLEtBQXdCLEVBQUVDLE1BQWMsRUFBRTtRQUN6RCxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMsTUFBTSxHQUFHSCxNQUFNSSxFQUFFLENBQUMsQ0FBQyxFQUFFSCxPQUFPLFVBQVUsQ0FBQztRQUN6QztJQUNGO0lBRUFJLE9BQU8sRUFBRUMsUUFBUSxFQUFFTCxNQUFNLEVBQXdDLEVBQUU7UUFDakUsTUFBTUQsUUFBUUwsY0FBY1ksY0FBYyxDQUFDRDtRQUMzQyxNQUFNRSxRQUFRWixTQUFTVSxVQUFVTDtRQUVqQyxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUNGLGdCQUFnQixDQUFDQyxPQUFPQyxPQUFPO1lBQ3ZDUSxNQUFNLENBQUM7Ozs7Ozs7U0FPSixFQUFFUixPQUFPLEVBQUUsRUFBRUEsT0FBTzs7WUFFakIsRUFBRUEsT0FBTzs7OztnQkFJTCxFQUFFQSxPQUFPLDRDQUE0QyxFQUFFQSxPQUFPO3NCQUN4RCxFQUFFQSxPQUFPOzs7MEJBR0wsRUFBRU8sTUFBTSxPQUFPLEVBQUVQLE9BQU87Ozs7O21DQUtmLEVBQUVPLE1BQU07Ozs7Ozs7O01BUXJDLENBQUMsQ0FBQ0UsSUFBSTtZQUNOQyxZQUFZLEVBQUU7UUFDaEI7SUFDRjtBQUNGIn0=
@@ -1,6 +1,6 @@
1
- import { RenderingNode, TemplateKey, TemplateOptions } from "../types/types";
2
- import { EntityNamesRecord } from "../entity/entity-manager";
3
- import { Template } from "./base-template";
1
+ import { type EntityNamesRecord } from "../../entity/entity-manager";
2
+ import type { RenderingNode, TemplateKey, TemplateOptions } from "../../types/types";
3
+ import { Template } from "../template";
4
4
  export declare class Template__view_form extends Template {
5
5
  constructor();
6
6
  getTargetAndPath(names: EntityNamesRecord): {
@@ -12,7 +12,7 @@ export declare class Template__view_form extends Template {
12
12
  renderColumnImport(entityId: string, col: RenderingNode): string;
13
13
  renderColumn(entityId: string, col: RenderingNode, names: EntityNamesRecord, parent?: string): string;
14
14
  resolveDefaultValue(columns: RenderingNode[]): object;
15
- render({ entityId }: TemplateOptions["view_form"], saveParamsNode: RenderingNode): {
15
+ render({ entityId }: TemplateOptions["view_form"]): Promise<{
16
16
  body: string;
17
17
  importKeys: never[];
18
18
  preTemplates: {
@@ -21,6 +21,6 @@ export declare class Template__view_form extends Template {
21
21
  }[];
22
22
  target: string;
23
23
  path: string;
24
- };
24
+ }>;
25
25
  }
26
26
  //# sourceMappingURL=view_form.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view_form.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_form.template.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGrF,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAO5C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAI5C,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa;IAmBvD,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,EACxB,MAAM,GAAE,MAAW,GAClB,MAAM;IA6DT,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM;IAqC/C,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC;;;;;;;;;;CAoOxD"}