sonamu 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +227 -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 +386 -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 +55 -30
  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 +261 -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 +459 -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
@@ -102,4 +102,4 @@ export function ${names.capital}IdAsyncSelect<T extends ${names.capital}SubsetKe
102
102
  }
103
103
  }
104
104
 
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hc3luY19zZWxlY3QudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19pZF9hc3luY19zZWxlY3QgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwidmlld19pZF9hc3luY19zZWxlY3RcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyYy9jb21wb25lbnRzXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc30vJHtuYW1lcy5jYXBpdGFsfUlkQXN5bmNTZWxlY3QudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHsgZW50aXR5SWQsIHRleHRGaWVsZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2lkX2FzeW5jX3NlbGVjdFwiXSkge1xuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG5cbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgaWYgKCF0ZXh0RmllbGQpIHtcbiAgICAgIGNvbnN0IHBpY2tlZFByb3AgPSBlbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT5cbiAgICAgICAgW1wibmFtZVwiLCBcInRpdGxlXCJdLmluY2x1ZGVzKHByb3AubmFtZSlcbiAgICAgICk7XG4gICAgICBpZiAocGlja2VkUHJvcCkge1xuICAgICAgICB0ZXh0RmllbGQgPSBwaWNrZWRQcm9wLm5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVQcm9wID0gZW50aXR5LnByb3BzLmZpbmQoXG4gICAgICAgICAgKHByb3ApID0+IHByb3AudHlwZSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICApO1xuICAgICAgICBpZiAoY2FuZGlkYXRlUHJvcCkge1xuICAgICAgICAgIHRleHRGaWVsZCA9IGNhbmRpZGF0ZVByb3AubmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInRleHRGaWVsZCDssL7snYQg7IiYIOyXhuydjFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93blByb3BzLCBEcm9wZG93bkl0ZW1Qcm9wcywgRHJvcGRvd25PblNlYXJjaENoYW5nZURhdGEsIERyb3Bkb3duIH0gZnJvbSBcInNlbWFudGljLXVpLXJlYWN0XCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U3Vic2V0S2V5LCAke1xuICAgICAgICBuYW1lcy5jYXBpdGFsXG4gICAgICB9U3Vic2V0TWFwcGluZyB9IGZyb20gXCJzcmMvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UgfSBmcm9tIFwic3JjL3NlcnZpY2VzLyR7bmFtZXMuZnN9LyR7XG4gICAgICAgIG5hbWVzLmZzXG4gICAgICB9LnNlcnZpY2VcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1MaXN0UGFyYW1zIH0gZnJvbSBcInNyYy9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke1xuICAgICAgICBuYW1lcy5mc1xuICAgICAgfS50eXBlc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsfUlkQXN5bmNTZWxlY3Q8VCBleHRlbmRzICR7XG4gICAgICAgIG5hbWVzLmNhcGl0YWxcbiAgICAgIH1TdWJzZXRLZXk+KFxuICB7IHN1YnNldCwgYmFzZUxpc3RQYXJhbXMsIHRleHRGaWVsZCwgdmFsdWVGaWVsZCwgLi4ucHJvcHMgfTogRHJvcGRvd25Qcm9wcyAmIHtcbiAgICBzdWJzZXQ6IFQ7XG4gICAgYmFzZUxpc3RQYXJhbXM/OiAke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtcztcbiAgICB0ZXh0RmllbGQke3RleHRGaWVsZCA/IFwiP1wiIDogXCJcIn06IGtleW9mICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRNYXBwaW5nW1RdO1xuICAgIHZhbHVlRmllbGQ/OiBrZXlvZiAke25hbWVzLmNhcGl0YWx9U3Vic2V0TWFwcGluZ1tUXTtcbiAgfSxcbikge1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSB1c2VTdGF0ZTxEcm9wZG93bkl0ZW1Qcm9wc1tdPihbXSk7XG4gIGNvbnN0IFtsaXN0UGFyYW1zLCBzZXRMaXN0UGFyYW1zXSA9IHVzZVN0YXRlPCR7bmFtZXMuY2FwaXRhbH1MaXN0UGFyYW1zPihcbiAgICBiYXNlTGlzdFBhcmFtcyA/PyB7fSxcbiAgKTtcblxuICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSAke25hbWVzLmNhcGl0YWx9U2VydmljZS51c2Uke1xuICAgIG5hbWVzLmNhcGl0YWxQbHVyYWxcbiAgfShzdWJzZXQsIGxpc3RQYXJhbXMpO1xuICBjb25zdCB7IHJvd3M6ICR7bmFtZXMuY2FtZWxQbHVyYWx9LCB0b3RhbCB9ID0gZGF0YSA/PyB7fTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldE9wdGlvbnMoXG4gICAgICAoJHtuYW1lcy5jYW1lbFBsdXJhbH0gPz8gW10pLm1hcCgoJHtuYW1lcy5jYW1lbH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXk6ICR7bmFtZXMuY2FtZWx9LmlkLFxuICAgICAgICAgIHZhbHVlOiAke25hbWVzLmNhbWVsfVt2YWx1ZUZpZWxkID8/ICdpZCddIGFzIHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgICB0ZXh0OiBTdHJpbmcoJHtuYW1lcy5jYW1lbH1bdGV4dEZpZWxkJHtcbiAgICAgICAgICAgIHRleHRGaWVsZCA/IGAgPz8gJyR7dGV4dEZpZWxkfSdgIDogXCJcIlxuICAgICAgICAgIH1dKSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH0sIFske25hbWVzLmNhbWVsUGx1cmFsfV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TGlzdFBhcmFtcyh7XG4gICAgICAuLi5saXN0UGFyYW1zLFxuICAgICAgLi4uYmFzZUxpc3RQYXJhbXMsXG4gICAgfSk7XG4gIH0sIFtiYXNlTGlzdFBhcmFtc10pO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaENoYW5nZSA9IChcbiAgICBlOiBTeW50aGV0aWNFdmVudDxIVE1MRWxlbWVudCwgRXZlbnQ+LFxuICAgIGRhdGE6IERyb3Bkb3duT25TZWFyY2hDaGFuZ2VEYXRhLFxuICApID0+IHtcbiAgICBzZXRMaXN0UGFyYW1zKHtcbiAgICAgIC4uLmxpc3RQYXJhbXMsXG4gICAgICBrZXl3b3JkOiBkYXRhLnNlYXJjaFF1ZXJ5LFxuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPERyb3Bkb3duXG4gICAgICBwbGFjZWhvbGRlcj1cIiR7ZW50aXR5LnRpdGxlID8/IG5hbWVzLmNvbnN0YW50fVwiXG4gICAgICBzZWxlY3Rpb25cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBvblNlYXJjaENoYW5nZT17aGFuZGxlU2VhcmNoQ2hhbmdlfVxuICAgICAgZGlzYWJsZWQ9eyEke25hbWVzLmNhbWVsUGx1cmFsfX1cbiAgICAgIGxvYWRpbmc9eyEke25hbWVzLmNhbWVsUGx1cmFsfX1cbiAgICAgIHNlbGVjdE9uQmx1cj17ZmFsc2V9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkVudGl0eU1hbmFnZXIiLCJUZW1wbGF0ZSIsIlRlbXBsYXRlX192aWV3X2lkX2FzeW5jX3NlbGVjdCIsImdldFRhcmdldEFuZFBhdGgiLCJuYW1lcyIsInRhcmdldCIsInBhdGgiLCJmcyIsImNhcGl0YWwiLCJyZW5kZXIiLCJlbnRpdHlJZCIsInRleHRGaWVsZCIsImdldE5hbWVzRnJvbUlkIiwiZW50aXR5IiwiZ2V0IiwicGlja2VkUHJvcCIsInByb3BzIiwiZmluZCIsInByb3AiLCJpbmNsdWRlcyIsIm5hbWUiLCJjYW5kaWRhdGVQcm9wIiwidHlwZSIsImNvbnNvbGUiLCJsb2ciLCJib2R5IiwiY2FwaXRhbFBsdXJhbCIsImNhbWVsUGx1cmFsIiwiY2FtZWwiLCJ0aXRsZSIsImNvbnN0YW50IiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLGFBQWEsUUFBMkIsaUNBQThCO0FBQy9FLFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUV2QyxPQUFPLE1BQU1DLHVDQUF1Q0Q7SUFDbEQsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFFLGlCQUFpQkMsS0FBd0IsRUFBRTtRQUN6QyxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMsTUFBTSxHQUFHRixNQUFNRyxFQUFFLENBQUMsQ0FBQyxFQUFFSCxNQUFNSSxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDdkQ7SUFDRjtJQUVBQyxPQUFPLEVBQUVDLFFBQVEsRUFBRUMsU0FBUyxFQUEyQyxFQUFFO1FBQ3ZFLE1BQU1QLFFBQVFKLGNBQWNZLGNBQWMsQ0FBQ0Y7UUFFM0MsTUFBTUcsU0FBU2IsY0FBY2MsR0FBRyxDQUFDSjtRQUNqQyxJQUFJLENBQUNDLFdBQVc7WUFDZCxNQUFNSSxhQUFhRixPQUFPRyxLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDQyxPQUNwQztvQkFBQztvQkFBUTtpQkFBUSxDQUFDQyxRQUFRLENBQUNELEtBQUtFLElBQUk7WUFFdEMsSUFBSUwsWUFBWTtnQkFDZEosWUFBWUksV0FBV0ssSUFBSTtZQUM3QixPQUFPO2dCQUNMLE1BQU1DLGdCQUFnQlIsT0FBT0csS0FBSyxDQUFDQyxJQUFJLENBQ3JDLENBQUNDLE9BQVNBLEtBQUtJLElBQUksS0FBSztnQkFFMUIsSUFBSUQsZUFBZTtvQkFDakJWLFlBQVlVLGNBQWNELElBQUk7Z0JBQ2hDLE9BQU87b0JBQ0xHLFFBQVFDLEdBQUcsQ0FBQztnQkFDZDtZQUNGO1FBQ0Y7UUFFQSxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUNyQixnQkFBZ0IsQ0FBQ0MsTUFBTTtZQUMvQnFCLE1BQU0sQ0FBQzs7O1NBR0osRUFBRXJCLE1BQU1JLE9BQU8sQ0FBQyxXQUFXLEVBQzVCSixNQUFNSSxPQUFPLENBQ2Q7U0FDRSxFQUFFSixNQUFNSSxPQUFPLENBQUMsNkJBQTZCLEVBQUVKLE1BQU1HLEVBQUUsQ0FBQyxDQUFDLEVBQzFESCxNQUFNRyxFQUFFLENBQ1Q7U0FDRSxFQUFFSCxNQUFNSSxPQUFPLENBQUMsZ0NBQWdDLEVBQUVKLE1BQU1HLEVBQUUsQ0FBQyxDQUFDLEVBQzdESCxNQUFNRyxFQUFFLENBQ1Q7O2dCQUVTLEVBQUVILE1BQU1JLE9BQU8sQ0FBQyx3QkFBd0IsRUFDaERKLE1BQU1JLE9BQU8sQ0FDZDs7O3FCQUdjLEVBQUVKLE1BQU1JLE9BQU8sQ0FBQzthQUN4QixFQUFFRyxZQUFZLE1BQU0sR0FBRyxRQUFRLEVBQUVQLE1BQU1JLE9BQU8sQ0FBQzt1QkFDckMsRUFBRUosTUFBTUksT0FBTyxDQUFDOzs7OytDQUlRLEVBQUVKLE1BQU1JLE9BQU8sQ0FBQzs7OzswQkFJckMsRUFBRUosTUFBTUksT0FBTyxDQUFDLFdBQVcsRUFDakRKLE1BQU1zQixhQUFhLENBQ3BCO2dCQUNhLEVBQUV0QixNQUFNdUIsV0FBVyxDQUFDOzs7O09BSTdCLEVBQUV2QixNQUFNdUIsV0FBVyxDQUFDLGFBQWEsRUFBRXZCLE1BQU13QixLQUFLLENBQUM7O2VBRXZDLEVBQUV4QixNQUFNd0IsS0FBSyxDQUFDO2lCQUNaLEVBQUV4QixNQUFNd0IsS0FBSyxDQUFDO3VCQUNSLEVBQUV4QixNQUFNd0IsS0FBSyxDQUFDLFVBQVUsRUFDbkNqQixZQUFZLENBQUMsS0FBSyxFQUFFQSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQ3BDOzs7O01BSUwsRUFBRVAsTUFBTXVCLFdBQVcsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQXFCUCxFQUFFZCxPQUFPZ0IsS0FBSyxJQUFJekIsTUFBTTBCLFFBQVEsQ0FBQzs7OztpQkFJbkMsRUFBRTFCLE1BQU11QixXQUFXLENBQUM7Z0JBQ3JCLEVBQUV2QixNQUFNdUIsV0FBVyxDQUFDOzs7Ozs7TUFNOUIsQ0FBQyxDQUFDSSxJQUFJO1lBQ05DLFlBQVksRUFBRTtRQUNoQjtJQUNGO0FBQ0YifQ==
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hc3luY19zZWxlY3QudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfaWRfYXN5bmNfc2VsZWN0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvY29tcG9uZW50c1wiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnN9LyR7bmFtZXMuY2FwaXRhbH1JZEFzeW5jU2VsZWN0LnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7IGVudGl0eUlkLCB0ZXh0RmllbGQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19pZF9hc3luY19zZWxlY3RcIl0pIHtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgIGlmICghdGV4dEZpZWxkKSB7XG4gICAgICBjb25zdCBwaWNrZWRQcm9wID0gZW50aXR5LnByb3BzLmZpbmQoKHByb3ApID0+IFtcIm5hbWVcIiwgXCJ0aXRsZVwiXS5pbmNsdWRlcyhwcm9wLm5hbWUpKTtcbiAgICAgIGlmIChwaWNrZWRQcm9wKSB7XG4gICAgICAgIHRleHRGaWVsZCA9IHBpY2tlZFByb3AubmFtZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVByb3AgPSBlbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC50eXBlID09PSBcInN0cmluZ1wiKTtcbiAgICAgICAgaWYgKGNhbmRpZGF0ZVByb3ApIHtcbiAgICAgICAgICB0ZXh0RmllbGQgPSBjYW5kaWRhdGVQcm9wLm5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJ0ZXh0RmllbGQg7LC+7J2EIOyImCDsl4bsnYxcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRHJvcGRvd25Qcm9wcywgRHJvcGRvd25JdGVtUHJvcHMsIERyb3Bkb3duT25TZWFyY2hDaGFuZ2VEYXRhLCBEcm9wZG93biB9IGZyb20gXCJzZW1hbnRpYy11aS1yZWFjdFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVN1YnNldEtleSwgJHtcbiAgICAgICAgbmFtZXMuY2FwaXRhbFxuICAgICAgfVN1YnNldE1hcHBpbmcgfSBmcm9tIFwic3JjL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlIH0gZnJvbSBcInNyYy9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtcyB9IGZyb20gXCJzcmMvc2VydmljZXMvJHtuYW1lcy5mc30vJHtuYW1lcy5mc30udHlwZXNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbH1JZEFzeW5jU2VsZWN0PFQgZXh0ZW5kcyAke25hbWVzLmNhcGl0YWx9U3Vic2V0S2V5PihcbiAgeyBzdWJzZXQsIGJhc2VMaXN0UGFyYW1zLCB0ZXh0RmllbGQsIHZhbHVlRmllbGQsIC4uLnByb3BzIH06IERyb3Bkb3duUHJvcHMgJiB7XG4gICAgc3Vic2V0OiBUO1xuICAgIGJhc2VMaXN0UGFyYW1zPzogJHtuYW1lcy5jYXBpdGFsfUxpc3RQYXJhbXM7XG4gICAgdGV4dEZpZWxkJHt0ZXh0RmllbGQgPyBcIj9cIiA6IFwiXCJ9OiBrZXlvZiAke25hbWVzLmNhcGl0YWx9U3Vic2V0TWFwcGluZ1tUXTtcbiAgICB2YWx1ZUZpZWxkPzoga2V5b2YgJHtuYW1lcy5jYXBpdGFsfVN1YnNldE1hcHBpbmdbVF07XG4gIH0sXG4pIHtcbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gdXNlU3RhdGU8RHJvcGRvd25JdGVtUHJvcHNbXT4oW10pO1xuICBjb25zdCBbbGlzdFBhcmFtcywgc2V0TGlzdFBhcmFtc10gPSB1c2VTdGF0ZTwke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtcz4oXG4gICAgYmFzZUxpc3RQYXJhbXMgPz8ge30sXG4gICk7XG5cbiAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UudXNlJHtuYW1lcy5jYXBpdGFsUGx1cmFsfShzdWJzZXQsIGxpc3RQYXJhbXMpO1xuICBjb25zdCB7IHJvd3M6ICR7bmFtZXMuY2FtZWxQbHVyYWx9LCB0b3RhbCB9ID0gZGF0YSA/PyB7fTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldE9wdGlvbnMoXG4gICAgICAoJHtuYW1lcy5jYW1lbFBsdXJhbH0gPz8gW10pLm1hcCgoJHtuYW1lcy5jYW1lbH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXk6ICR7bmFtZXMuY2FtZWx9LmlkLFxuICAgICAgICAgIHZhbHVlOiAke25hbWVzLmNhbWVsfVt2YWx1ZUZpZWxkID8/ICdpZCddIGFzIHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgICB0ZXh0OiBTdHJpbmcoJHtuYW1lcy5jYW1lbH1bdGV4dEZpZWxkJHt0ZXh0RmllbGQgPyBgID8/ICcke3RleHRGaWVsZH0nYCA6IFwiXCJ9XSksXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuICB9LCBbJHtuYW1lcy5jYW1lbFBsdXJhbH1dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldExpc3RQYXJhbXMoe1xuICAgICAgLi4ubGlzdFBhcmFtcyxcbiAgICAgIC4uLmJhc2VMaXN0UGFyYW1zLFxuICAgIH0pO1xuICB9LCBbYmFzZUxpc3RQYXJhbXNdKTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hDaGFuZ2UgPSAoXG4gICAgZTogU3ludGhldGljRXZlbnQ8SFRNTEVsZW1lbnQsIEV2ZW50PixcbiAgICBkYXRhOiBEcm9wZG93bk9uU2VhcmNoQ2hhbmdlRGF0YSxcbiAgKSA9PiB7XG4gICAgc2V0TGlzdFBhcmFtcyh7XG4gICAgICAuLi5saXN0UGFyYW1zLFxuICAgICAga2V5d29yZDogZGF0YS5zZWFyY2hRdWVyeSxcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxEcm9wZG93blxuICAgICAgcGxhY2Vob2xkZXI9XCIke2VudGl0eS50aXRsZSA/PyBuYW1lcy5jb25zdGFudH1cIlxuICAgICAgc2VsZWN0aW9uXG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgb25TZWFyY2hDaGFuZ2U9e2hhbmRsZVNlYXJjaENoYW5nZX1cbiAgICAgIGRpc2FibGVkPXshJHtuYW1lcy5jYW1lbFBsdXJhbH19XG4gICAgICBsb2FkaW5nPXshJHtuYW1lcy5jYW1lbFBsdXJhbH19XG4gICAgICBzZWxlY3RPbkJsdXI9e2ZhbHNlfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gICk7XG59XG4gICAgICBgLnRyaW0oKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJFbnRpdHlNYW5hZ2VyIiwiVGVtcGxhdGUiLCJUZW1wbGF0ZV9fdmlld19pZF9hc3luY19zZWxlY3QiLCJnZXRUYXJnZXRBbmRQYXRoIiwibmFtZXMiLCJ0YXJnZXQiLCJwYXRoIiwiZnMiLCJjYXBpdGFsIiwicmVuZGVyIiwiZW50aXR5SWQiLCJ0ZXh0RmllbGQiLCJnZXROYW1lc0Zyb21JZCIsImVudGl0eSIsImdldCIsInBpY2tlZFByb3AiLCJwcm9wcyIsImZpbmQiLCJwcm9wIiwiaW5jbHVkZXMiLCJuYW1lIiwiY2FuZGlkYXRlUHJvcCIsInR5cGUiLCJjb25zb2xlIiwibG9nIiwiYm9keSIsImNhcGl0YWxQbHVyYWwiLCJjYW1lbFBsdXJhbCIsImNhbWVsIiwidGl0bGUiLCJjb25zdGFudCIsInRyaW0iLCJpbXBvcnRLZXlzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxhQUFhLFFBQWdDLGlDQUE4QjtBQUVwRixTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFFdkMsT0FBTyxNQUFNQyx1Q0FBdUNEO0lBQ2xELGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBRSxpQkFBaUJDLEtBQXdCLEVBQUU7UUFDekMsT0FBTztZQUNMQyxRQUFRO1lBQ1JDLE1BQU0sR0FBR0YsTUFBTUcsRUFBRSxDQUFDLENBQUMsRUFBRUgsTUFBTUksT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQ3ZEO0lBQ0Y7SUFFQUMsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsRUFBMkMsRUFBRTtRQUN2RSxNQUFNUCxRQUFRSixjQUFjWSxjQUFjLENBQUNGO1FBRTNDLE1BQU1HLFNBQVNiLGNBQWNjLEdBQUcsQ0FBQ0o7UUFDakMsSUFBSSxDQUFDQyxXQUFXO1lBQ2QsTUFBTUksYUFBYUYsT0FBT0csS0FBSyxDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsT0FBUztvQkFBQztvQkFBUTtpQkFBUSxDQUFDQyxRQUFRLENBQUNELEtBQUtFLElBQUk7WUFDbkYsSUFBSUwsWUFBWTtnQkFDZEosWUFBWUksV0FBV0ssSUFBSTtZQUM3QixPQUFPO2dCQUNMLE1BQU1DLGdCQUFnQlIsT0FBT0csS0FBSyxDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsT0FBU0EsS0FBS0ksSUFBSSxLQUFLO2dCQUNoRSxJQUFJRCxlQUFlO29CQUNqQlYsWUFBWVUsY0FBY0QsSUFBSTtnQkFDaEMsT0FBTztvQkFDTEcsUUFBUUMsR0FBRyxDQUFDO2dCQUNkO1lBQ0Y7UUFDRjtRQUVBLE9BQU87WUFDTCxHQUFHLElBQUksQ0FBQ3JCLGdCQUFnQixDQUFDQyxNQUFNO1lBQy9CcUIsTUFBTSxDQUFDOzs7U0FHSixFQUFFckIsTUFBTUksT0FBTyxDQUFDLFdBQVcsRUFDNUJKLE1BQU1JLE9BQU8sQ0FDZDtTQUNFLEVBQUVKLE1BQU1JLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRUosTUFBTUcsRUFBRSxDQUFDLENBQUMsRUFBRUgsTUFBTUcsRUFBRSxDQUFDO1NBQ3BFLEVBQUVILE1BQU1JLE9BQU8sQ0FBQyxnQ0FBZ0MsRUFBRUosTUFBTUcsRUFBRSxDQUFDLENBQUMsRUFBRUgsTUFBTUcsRUFBRSxDQUFDOztnQkFFaEUsRUFBRUgsTUFBTUksT0FBTyxDQUFDLHdCQUF3QixFQUFFSixNQUFNSSxPQUFPLENBQUM7OztxQkFHbkQsRUFBRUosTUFBTUksT0FBTyxDQUFDO2FBQ3hCLEVBQUVHLFlBQVksTUFBTSxHQUFHLFFBQVEsRUFBRVAsTUFBTUksT0FBTyxDQUFDO3VCQUNyQyxFQUFFSixNQUFNSSxPQUFPLENBQUM7Ozs7K0NBSVEsRUFBRUosTUFBTUksT0FBTyxDQUFDOzs7OzBCQUlyQyxFQUFFSixNQUFNSSxPQUFPLENBQUMsV0FBVyxFQUFFSixNQUFNc0IsYUFBYSxDQUFDO2dCQUMzRCxFQUFFdEIsTUFBTXVCLFdBQVcsQ0FBQzs7OztPQUk3QixFQUFFdkIsTUFBTXVCLFdBQVcsQ0FBQyxhQUFhLEVBQUV2QixNQUFNd0IsS0FBSyxDQUFDOztlQUV2QyxFQUFFeEIsTUFBTXdCLEtBQUssQ0FBQztpQkFDWixFQUFFeEIsTUFBTXdCLEtBQUssQ0FBQzt1QkFDUixFQUFFeEIsTUFBTXdCLEtBQUssQ0FBQyxVQUFVLEVBQUVqQixZQUFZLENBQUMsS0FBSyxFQUFFQSxVQUFVLENBQUMsQ0FBQyxHQUFHLEdBQUc7Ozs7TUFJakYsRUFBRVAsTUFBTXVCLFdBQVcsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21CQXFCUCxFQUFFZCxPQUFPZ0IsS0FBSyxJQUFJekIsTUFBTTBCLFFBQVEsQ0FBQzs7OztpQkFJbkMsRUFBRTFCLE1BQU11QixXQUFXLENBQUM7Z0JBQ3JCLEVBQUV2QixNQUFNdUIsV0FBVyxDQUFDOzs7Ozs7TUFNOUIsQ0FBQyxDQUFDSSxJQUFJO1lBQ05DLFlBQVksRUFBRTtRQUNoQjtJQUNGO0FBQ0YifQ==
@@ -1,5 +1,5 @@
1
- import { RenderingNode, TemplateKey, TemplateOptions } from "../../types/types";
2
- import { EntityNamesRecord } from "../../entity/entity-manager";
1
+ import { type EntityNamesRecord } from "../../entity/entity-manager";
2
+ import type { RenderingNode, TemplateKey, TemplateOptions } from "../../types/types";
3
3
  import { Template } from "../template";
4
4
  export declare class Template__view_list extends Template {
5
5
  constructor();
@@ -1 +1 @@
1
- {"version":3,"file":"view_list.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_list.template.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAiB,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAG/E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvC,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,UAAU,GAAE,OAAc,EAC1B,SAAS,GAAE,MAAW;IAOxB,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,EACxB,SAAS,GAAE,MAAc,EACzB,WAAW,GAAE,OAAe,GAC3B,MAAM;IAiET,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,GACvB,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAyBpB,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB;IAuC1B,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB;IAyC3E,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG;QACpC,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB;IAkBK,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC;;;;;;;;;;CA0UxD"}
1
+ {"version":3,"file":"view_list.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_list.template.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIrF,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,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAc,EAAE,SAAS,GAAE,MAAW;IAMpF,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,EACxB,SAAS,GAAE,MAAc,EACzB,WAAW,GAAE,OAAe,GAC3B,MAAM;IAyDT,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,GACvB,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAwBpB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB;IAiCjF,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB;IAkC3E,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG;QACpC,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB;IAgBK,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC;;;;;;;;;;CAgUxD"}
@@ -1,11 +1,12 @@
1
+ import assert from "assert";
1
2
  import inflection from "inflection";
2
- import * as _ from "lodash-es";
3
+ import { flat, unique } from "radashi";
3
4
  import { z } from "zod";
4
5
  import { EntityManager } from "../../entity/entity-manager.js";
5
- import { getRelationPropFromColName, getEnumInfoFromColName } from "../helpers.js";
6
- import { Template } from "../template.js";
7
- import { zodTypeToRenderingNode, getZodTypeById } from "../zod-converter.js";
8
6
  import { getColumnsNode } from "../entity-converter.js";
7
+ import { getEnumInfoFromColName, getRelationPropFromColName } from "../helpers.js";
8
+ import { Template } from "../template.js";
9
+ import { getZodTypeById, zodTypeToRenderingNode } from "../zod-converter.js";
9
10
  export class Template__view_list extends Template {
10
11
  constructor(){
11
12
  super("view_list");
@@ -27,8 +28,10 @@ export class Template__view_list extends Template {
27
28
  case "number-id":
28
29
  return `<>{${colName}}</>`;
29
30
  case "number-fk_id":
30
- const relPropFk = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
31
- return `<>${relPropFk.with}#{${colName}}</>`;
31
+ {
32
+ const relPropFk = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
33
+ return `<>${relPropFk.with}#{${colName}}</>`;
34
+ }
32
35
  case "string-image":
33
36
  return `<>{${col.nullable ? `${colName} && ` : ""}<img src={${colName}} />}</>`;
34
37
  case "datetime":
@@ -46,8 +49,10 @@ export class Template__view_list extends Template {
46
49
  case "boolean":
47
50
  return `<>{${colName} ? <Label color='green' circular>O</Label> : <Label color='grey' circular>X</Label> }</>`;
48
51
  case "enums":
49
- const { id: enumId } = getEnumInfoFromColName(entityId, col.name);
50
- return `<>{${col.nullable ? `${colName} && ` : ""}${enumId}Label[${colName}]}</>`;
52
+ {
53
+ const { id: enumId } = getEnumInfoFromColName(entityId, col.name);
54
+ return `<>{${col.nullable ? `${colName} && ` : ""}${enumId}Label[${colName}]}</>`;
55
+ }
51
56
  case "array-images":
52
57
  return `<>{ ${colName}.map(r => ${col.nullable ? `r && ` : ""}<img src={r} />) }</>`;
53
58
  case "number-plain":
@@ -55,11 +60,13 @@ export class Template__view_list extends Template {
55
60
  case "object":
56
61
  return `<>{/* object ${colName} */}</>`;
57
62
  case "object-pick":
58
- const pickedChild = col.children.find((child)=>child.name === col.config?.picked);
59
- if (!pickedChild) {
60
- throw new Error(`object-pick 선택 실패 (오브젝트: ${col.name})`);
63
+ {
64
+ const pickedChild = col.children?.find((child)=>child.name === col.config?.picked);
65
+ if (!pickedChild) {
66
+ throw new Error(`object-pick 선택 실패 (오브젝트: ${col.name})`);
67
+ }
68
+ return this.renderColumn(entityId, pickedChild, names, `${colName}${col.nullable ? "?" : ""}`);
61
69
  }
62
- return this.renderColumn(entityId, pickedChild, names, `${colName}${col.nullable ? "?" : ""}`);
63
70
  case "array":
64
71
  return `<>{ /* array ${colName} */ }</>`;
65
72
  default:
@@ -75,18 +82,19 @@ export class Template__view_list extends Template {
75
82
  } else if (col.renderType === "object") {
76
83
  try {
77
84
  const relProp = getRelationPropFromColName(entityId, col.name);
78
- const result = col.children.map((child)=>{
85
+ const result = col.children?.map((child)=>{
79
86
  entityId = relProp.with;
80
87
  names = EntityManager.getNamesFromId(relProp.with);
81
88
  return this.renderColumnImport(entityId, child, names);
82
89
  });
83
- return _.flattenDeep(result);
90
+ return flat(result ?? []);
84
91
  } catch {
85
92
  return [
86
93
  null
87
94
  ];
88
95
  }
89
96
  } else if (col.renderType === "array") {
97
+ assert(col.element);
90
98
  return this.renderColumnImport(entityId, col.element, names);
91
99
  }
92
100
  return [
@@ -188,11 +196,11 @@ export class Template__view_list extends Template {
188
196
  "number-id"
189
197
  ].includes(col.renderType) || col.name.endsWith("_id")))// orderBy가 가장 뒤로 오게 순서 조정
190
198
  .sort((a)=>{
191
- return a.name == "orderBy" ? 1 : -1;
199
+ return a.name === "orderBy" ? 1 : -1;
192
200
  });
193
201
  // 필터 컬럼을 프리 템플릿으로 설정
194
202
  const preTemplates = [];
195
- for (let col of filterColumns){
203
+ for (const col of filterColumns){
196
204
  let key;
197
205
  let targetEntityId = entityId;
198
206
  let enumId;
@@ -229,10 +237,12 @@ export class Template__view_list extends Template {
229
237
  });
230
238
  }
231
239
  // 리스트 컬럼
232
- const columnImports = _.uniq(columnsNode.children.map((col)=>{
240
+ assert(columnsNode.children);
241
+ const columnImports = unique(columnsNode.children.flatMap((col)=>{
233
242
  return this.renderColumnImport(entityId, col, names);
234
- }).flat().filter((col)=>col !== null)).join("\n");
243
+ }).filter((col)=>col !== null)).join("\n");
235
244
  // SearchInput
245
+ assert(preTemplates);
236
246
  preTemplates.push({
237
247
  key: "view_search_input",
238
248
  options: {
@@ -462,4 +472,4 @@ export default function ${names.capital}List({}: ${names.capital}ListProps) {
462
472
  }
463
473
  }
464
474
 
465
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19saXN0LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBSZW5kZXJpbmdOb2RlLCBUZW1wbGF0ZUtleSwgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lLCBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lIH0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB7IFJlbmRlcmVkVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlLCBnZXRab2RUeXBlQnlJZCB9IGZyb20gXCIuLi96b2QtY29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRDb2x1bW5zTm9kZSB9IGZyb20gXCIuLi9lbnRpdHktY29udmVydGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19saXN0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfbGlzdFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCJ3ZWIvc3JjL3BhZ2VzL2FkbWluXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc1BsdXJhbH0vaW5kZXgudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgd3JhcFRjKFxuICAgIGJvZHk6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBjb2xsYXBzaW5nOiBib29sZWFuID0gdHJ1ZSxcbiAgICBjbGFzc05hbWU6IHN0cmluZyA9IFwiXCJcbiAgKSB7XG4gICAgcmV0dXJuIGA8VGFibGUuQ2VsbCBrZXk9XCIke2tleX1cIiR7Y29sbGFwc2luZyA/IFwiIGNvbGxhcHNpbmdcIiA6IFwiXCJ9JHtcbiAgICAgIGNsYXNzTmFtZSA/IGAgY2xhc3NOYW1lPXtcXGAke2NsYXNzTmFtZX1cXGB9YCA6IFwiXCJcbiAgICB9PiR7Ym9keX08L1RhYmxlLkNlbGw+YDtcbiAgfVxuXG4gIHJlbmRlckNvbHVtbihcbiAgICBlbnRpdHlJZDogc3RyaW5nLFxuICAgIGNvbDogUmVuZGVyaW5nTm9kZSxcbiAgICBuYW1lczogRW50aXR5TmFtZXNSZWNvcmQsXG4gICAgcGFyZW50T2JqOiBzdHJpbmcgPSBcInJvd1wiLFxuICAgIHdpdGhvdXROYW1lOiBib29sZWFuID0gZmFsc2VcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb2xOYW1lID0gd2l0aG91dE5hbWUgPyBgJHtwYXJlbnRPYmp9YCA6IGAke3BhcmVudE9ian0uJHtjb2wubmFtZX1gO1xuXG4gICAgc3dpdGNoIChjb2wucmVuZGVyVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZy1wbGFpblwiOlxuICAgICAgY2FzZSBcInN0cmluZy1kYXRlXCI6XG4gICAgICBjYXNlIFwibnVtYmVyLWlkXCI6XG4gICAgICAgIHJldHVybiBgPD57JHtjb2xOYW1lfX08Lz5gO1xuICAgICAgY2FzZSBcIm51bWJlci1ma19pZFwiOlxuICAgICAgICBjb25zdCByZWxQcm9wRmsgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShcbiAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBgPD4ke3JlbFByb3BGay53aXRofSN7JHtjb2xOYW1lfX08Lz5gO1xuICAgICAgY2FzZSBcInN0cmluZy1pbWFnZVwiOlxuICAgICAgICByZXR1cm4gYDw+eyR7XG4gICAgICAgICAgY29sLm51bGxhYmxlID8gYCR7Y29sTmFtZX0gJiYgYCA6IFwiXCJcbiAgICAgICAgfTxpbWcgc3JjPXske2NvbE5hbWV9fSAvPn08Lz5gO1xuICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICAgIGlmIChjb2wubnVsbGFibGUpIHtcbiAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzTmFtZT1cInRleHQtdGlueVwiPnske2NvbE5hbWV9ID09PSBudWxsID8gJy0nIDogZm9ybWF0RGF0ZVRpbWUoJHtjb2xOYW1lfSl9PC9zcGFuPmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXRpbnlcIj57Zm9ybWF0RGF0ZVRpbWUoJHtjb2xOYW1lfSl9PC9zcGFuPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJzdHJpbmctZGF0ZXRpbWVcIjpcbiAgICAgICAgaWYgKGNvbC5udWxsYWJsZSkge1xuICAgICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC10aW55XCI+eyR7Y29sTmFtZX0gPT09IG51bGwgPyAnLScgOiBkYXRlRigke2NvbE5hbWV9KX08L3NwYW4+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzTmFtZT1cInRleHQtdGlueVwiPntkYXRlRigke2NvbE5hbWV9KX08L3NwYW4+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgcmV0dXJuIGA8Pnske2NvbE5hbWV9ID8gPExhYmVsIGNvbG9yPSdncmVlbicgY2lyY3VsYXI+TzwvTGFiZWw+IDogPExhYmVsIGNvbG9yPSdncmV5JyBjaXJjdWxhcj5YPC9MYWJlbD4gfTwvPmA7XG4gICAgICBjYXNlIFwiZW51bXNcIjpcbiAgICAgICAgY29uc3QgeyBpZDogZW51bUlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgIHJldHVybiBgPD57JHtcbiAgICAgICAgICBjb2wubnVsbGFibGUgPyBgJHtjb2xOYW1lfSAmJiBgIDogXCJcIlxuICAgICAgICB9JHtlbnVtSWR9TGFiZWxbJHtjb2xOYW1lfV19PC8+YDtcbiAgICAgIGNhc2UgXCJhcnJheS1pbWFnZXNcIjpcbiAgICAgICAgcmV0dXJuIGA8PnsgJHtjb2xOYW1lfS5tYXAociA9PiAke1xuICAgICAgICAgIGNvbC5udWxsYWJsZSA/IGByICYmIGAgOiBcIlwiXG4gICAgICAgIH08aW1nIHNyYz17cn0gLz4pIH08Lz5gO1xuICAgICAgY2FzZSBcIm51bWJlci1wbGFpblwiOlxuICAgICAgICByZXR1cm4gYDw+eyR7Y29sLm51bGxhYmxlID8gYCR7Y29sTmFtZX0gJiYgYCA6IFwiXCJ9bnVtRigke2NvbE5hbWV9KX08Lz5gO1xuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICByZXR1cm4gYDw+ey8qIG9iamVjdCAke2NvbE5hbWV9ICovfTwvPmA7XG4gICAgICBjYXNlIFwib2JqZWN0LXBpY2tcIjpcbiAgICAgICAgY29uc3QgcGlja2VkQ2hpbGQgPSBjb2wuY2hpbGRyZW4hLmZpbmQoXG4gICAgICAgICAgKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09PSBjb2wuY29uZmlnPy5waWNrZWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFwaWNrZWRDaGlsZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgb2JqZWN0LXBpY2sg7ISg7YOdIOyLpO2MqCAo7Jik67iM7KCd7Yq4OiAke2NvbC5uYW1lfSlgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDb2x1bW4oXG4gICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgcGlja2VkQ2hpbGQsXG4gICAgICAgICAgbmFtZXMsXG4gICAgICAgICAgYCR7Y29sTmFtZX0ke2NvbC5udWxsYWJsZSA/IFwiP1wiIDogXCJcIn1gXG4gICAgICAgICk7XG4gICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgcmV0dXJuIGA8PnsgLyogYXJyYXkgJHtjb2xOYW1lfSAqLyB9PC8+YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihg66CM642UIOu2iOqwgCDsu6zrn7wgJHtjb2wucmVuZGVyVHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJDb2x1bW5JbXBvcnQoXG4gICAgZW50aXR5SWQ6IHN0cmluZyxcbiAgICBjb2w6IFJlbmRlcmluZ05vZGUsXG4gICAgbmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkXG4gICk6IChzdHJpbmcgfCBudWxsKVtdIHtcbiAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikge1xuICAgICAgY29uc3QgeyBpZDogZW51bUlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKG5hbWVzLmNhcGl0YWwsIGNvbC5uYW1lKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGBpbXBvcnQgeyAke2VudW1JZH1MYWJlbCB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkJztgLFxuICAgICAgXTtcbiAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29sLmNoaWxkcmVuIS5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgZW50aXR5SWQgPSByZWxQcm9wLndpdGg7XG4gICAgICAgICAgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkLCBjaGlsZCwgbmFtZXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIF8uZmxhdHRlbkRlZXAocmVzdWx0KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gW251bGxdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkLCBjb2wuZWxlbWVudCEsIG5hbWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW251bGxdO1xuICB9XG5cbiAgcmVuZGVyRmlsdGVySW1wb3J0KFxuICAgIGVudGl0eUlkOiBzdHJpbmcsXG4gICAgY29sOiBSZW5kZXJpbmdOb2RlLFxuICAgIG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZFxuICApIHtcbiAgICBpZiAoY29sLm5hbWUgPT09IFwic2VhcmNoXCIpIHtcbiAgICAgIHJldHVybiBgaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNlYXJjaElucHV0IH0gZnJvbSBcInNyYy9jb21wb25lbnRzLyR7bmFtZXMuZnN9LyR7bmFtZXMuY2FwaXRhbH1TZWFyY2hJbnB1dFwiO2A7XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICBpZiAoY29sLm5hbWUgPT09IFwib3JkZXJCeVwiKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudElkID0gYCR7bmFtZXMuY2FwaXRhbH0ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICAgICAgY29sLm5hbWVcbiAgICAgICAgKX1TZWxlY3RgO1xuICAgICAgICByZXR1cm4gYGltcG9ydCB7ICR7Y29tcG9uZW50SWR9IH0gZnJvbSBcInNyYy9jb21wb25lbnRzLyR7bmFtZXMuZnN9LyR7Y29tcG9uZW50SWR9XCI7YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBpZCwgdGFyZ2V0RW50aXR5TmFtZXM6IHRhcmdldE1ETmFtZXMgfSA9XG4gICAgICAgICAgICBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50SWQgPSBgJHtpZH1TZWxlY3RgO1xuICAgICAgICAgIHJldHVybiBgaW1wb3J0IHsgJHtjb21wb25lbnRJZH0gfSBmcm9tIFwic3JjL2NvbXBvbmVudHMvJHt0YXJnZXRNRE5hbWVzLmZzfS8ke2NvbXBvbmVudElkfVwiO2A7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKFxuICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIilcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudElkID0gYCR7cmVsUHJvcC53aXRofUlkQXN5bmNTZWxlY3RgO1xuICAgICAgICByZXR1cm4gYGltcG9ydCB7ICR7Y29tcG9uZW50SWR9IH0gZnJvbSBcInNyYy9jb21wb25lbnRzLyR7dGFyZ2V0TmFtZXMuZnN9LyR7Y29tcG9uZW50SWR9XCI7YDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBg66CM642UIOu2iOqwgOuKpe2VnCDtlYTthLAg7J6E7Y+s7Yq4ICR7Y29sLm5hbWV9ICR7Y29sLnJlbmRlclR5cGV9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJGaWx0ZXIoZW50aXR5SWQ6IHN0cmluZywgY29sOiBSZW5kZXJpbmdOb2RlLCBuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICBpZiAoY29sLm5hbWUgPT09IFwic2VhcmNoXCIpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGNvbnN0IGlzQ2xlYXJhYmxlID0gY29sLm9wdGlvbmFsID09PSB0cnVlICYmIGNvbC5uYW1lICE9PSBcIm9yZGVyQnlcIjtcbiAgICBsZXQgY29tcG9uZW50SWQ6IHN0cmluZztcbiAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikge1xuICAgICAgaWYgKGNvbC5uYW1lID09PSBcIm9yZGVyQnlcIikge1xuICAgICAgICBjb21wb25lbnRJZCA9IGAke25hbWVzLmNhcGl0YWx9JHtpbmZsZWN0aW9uLmNhbWVsaXplKGNvbC5uYW1lKX1TZWxlY3RgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgY29tcG9uZW50SWQgPSBgJHtpZH1TZWxlY3RgO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGA8JHtjb21wb25lbnRJZH0gey4uLnJlZ2lzdGVyKCcke2NvbC5uYW1lfScpfSAke1xuICAgICAgICBpc0NsZWFyYWJsZSA/IFwiY2xlYXJhYmxlXCIgOiBcIlwiXG4gICAgICB9IC8+YDtcbiAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1ma19pZFwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoXG4gICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKVxuICAgICAgICApO1xuICAgICAgICBjb21wb25lbnRJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgcmV0dXJuIGA8JHtjb21wb25lbnRJZH0gey4uLnJlZ2lzdGVyKCcke2NvbC5uYW1lfScpfSAke1xuICAgICAgICAgIGlzQ2xlYXJhYmxlID8gXCJjbGVhcmFibGVcIiA6IFwiXCJcbiAgICAgICAgfSBzdWJzZXQ9XCJBXCIgLz5gO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGDroIzrjZQg67aI6rCA64ql7ZWcIO2VhO2EsCDsnoTtj6ztirggJHtjb2wubmFtZX0gJHtjb2wucmVuZGVyVHlwZX1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldERlZmF1bHQoY29sdW1uczogUmVuZGVyaW5nTm9kZVtdKToge1xuICAgIG9yZGVyQnk6IHN0cmluZztcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgfSB7XG4gICAgY29uc3QgZGVmID0ge1xuICAgICAgb3JkZXJCeTogXCJpZC1kZXNjXCIsXG4gICAgICBzZWFyY2g6IFwidGl0bGVcIixcbiAgICB9O1xuICAgIGNvbnN0IG9yZGVyQnlab2RUeXBlID0gY29sdW1ucy5maW5kKFxuICAgICAgKGNvbCkgPT4gY29sLm5hbWUgPT09IFwib3JkZXJCeVwiXG4gICAgKT8uem9kVHlwZTtcbiAgICBpZiAob3JkZXJCeVpvZFR5cGUgJiYgb3JkZXJCeVpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICAgIGRlZi5vcmRlckJ5ID0gb3JkZXJCeVpvZFR5cGUub3B0aW9uc1swXS50b1N0cmluZygpO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hab2RUeXBlID0gY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5uYW1lID09PSBcInNlYXJjaFwiKT8uem9kVHlwZTtcbiAgICBpZiAoc2VhcmNoWm9kVHlwZSAmJiBzZWFyY2hab2RUeXBlIGluc3RhbmNlb2Ygei5ab2RFbnVtKSB7XG4gICAgICBkZWYuc2VhcmNoID0gc2VhcmNoWm9kVHlwZS5vcHRpb25zWzBdLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBkZWY7XG4gIH1cblxuICBhc3luYyByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2xpc3RcIl0pIHtcbiAgICBjb25zdCBjb2x1bW5zTm9kZSA9IGF3YWl0IGdldENvbHVtbnNOb2RlKGVudGl0eUlkLCBcIkFcIik7XG4gICAgY29uc3QgbGlzdFBhcmFtc1pvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChgJHtlbnRpdHlJZH1MaXN0UGFyYW1zYCk7XG4gICAgY29uc3QgbGlzdFBhcmFtc05vZGUgPSB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGxpc3RQYXJhbXNab2RUeXBlKTtcblxuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgLy8g7Iuk7KCcIOumrOyKpO2KuCDsu6zrn7xcbiAgICBjb25zdCBjb2x1bW5zID0gKGNvbHVtbnNOb2RlLmNoaWxkcmVuIGFzIFJlbmRlcmluZ05vZGVbXSlcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLm5hbWUgIT09IFwiaWRcIilcbiAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wQ2FuZGlkYXRlID0gZW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gY29sLm5hbWUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGNvbC5uYW1lLFxuICAgICAgICAgIGxhYmVsOiBwcm9wQ2FuZGlkYXRlPy5kZXNjID8/IGNvbC5sYWJlbCxcbiAgICAgICAgICB0YzogYChyb3cpID0+ICR7dGhpcy5yZW5kZXJDb2x1bW4oZW50aXR5SWQsIGNvbCwgbmFtZXMpfWAsXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgIC8vIO2VhO2EsCDsu6zrn7xcbiAgICBjb25zdCBmaWx0ZXJDb2x1bW5zID0gKGxpc3RQYXJhbXNOb2RlLmNoaWxkcmVuIGFzIFJlbmRlcmluZ05vZGVbXSlcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChjb2wpID0+XG4gICAgICAgICAgY29sLm5hbWUgIT09IFwiaWRcIiAmJlxuICAgICAgICAgIGNvbC5uYW1lICE9PSBcInF1ZXJ5TW9kZVwiICYmXG4gICAgICAgICAgKFtcImVudW1zXCIsIFwibnVtYmVyLWlkXCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSB8fFxuICAgICAgICAgICAgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRcIikpXG4gICAgICApXG4gICAgICAvLyBvcmRlckJ56rCAIOqwgOyepSDrkqTroZwg7Jik6rKMIOyInOyEnCDsobDsoJVcbiAgICAgIC5zb3J0KChhKSA9PiB7XG4gICAgICAgIHJldHVybiBhLm5hbWUgPT0gXCJvcmRlckJ5XCIgPyAxIDogLTE7XG4gICAgICB9KTtcblxuICAgIC8vIO2VhO2EsCDsu6zrn7zsnYQg7ZSE66asIO2FnO2UjOumv+ycvOuhnCDshKTsoJVcbiAgICBjb25zdCBwcmVUZW1wbGF0ZXM6IFJlbmRlcmVkVGVtcGxhdGVbXCJwcmVUZW1wbGF0ZXNcIl0gPSBbXTtcbiAgICBmb3IgKGxldCBjb2wgb2YgZmlsdGVyQ29sdW1ucykge1xuICAgICAgbGV0IGtleTogVGVtcGxhdGVLZXk7XG4gICAgICBsZXQgdGFyZ2V0RW50aXR5SWQgPSBlbnRpdHlJZDtcbiAgICAgIGxldCBlbnVtSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgaWYgKGNvbC5uYW1lID09PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICAga2V5ID0gXCJ2aWV3X2VudW1zX2Ryb3Bkb3duXCI7XG4gICAgICAgICAgZW51bUlkID0gYCR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZGA7XG4gICAgICAgICAgdGFyZ2V0RW50aXR5SWQgPSBuYW1lcy5jYXBpdGFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IFwidmlld19lbnVtc19zZWxlY3RcIjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyB0YXJnZXRFbnRpdHlOYW1lcywgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoXG4gICAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgICBjb2wubmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRhcmdldEVudGl0eUlkID0gdGFyZ2V0RW50aXR5TmFtZXMuY2FwaXRhbDtcbiAgICAgICAgICAgIGVudW1JZCA9IGlkO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXkgPSBcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKFxuICAgICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgICBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0YXJnZXRFbnRpdHlJZCA9IHJlbFByb3Aud2l0aDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHJlVGVtcGxhdGVzLnB1c2goe1xuICAgICAgICBrZXksXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBlbnRpdHlJZDogdGFyZ2V0RW50aXR5SWQsXG4gICAgICAgICAgZW51bUlkLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8g66as7Iqk7Yq4IOy7rOufvFxuICAgIGNvbnN0IGNvbHVtbkltcG9ydHMgPSBfLnVuaXEoXG4gICAgICBjb2x1bW5zTm9kZVxuICAgICAgICAuY2hpbGRyZW4hLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkLCBjb2wsIG5hbWVzKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZsYXQoKVxuICAgICAgICAuZmlsdGVyKChjb2wpID0+IGNvbCAhPT0gbnVsbClcbiAgICApLmpvaW4oXCJcXG5cIik7XG5cbiAgICAvLyBTZWFyY2hJbnB1dFxuICAgIHByZVRlbXBsYXRlcyEucHVzaCh7XG4gICAgICBrZXk6IFwidmlld19zZWFyY2hfaW5wdXRcIixcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgZW50aXR5SWQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8g65SU7Y+07Yq4IO2MjOudvOuvuO2EsFxuICAgIGNvbnN0IGRlZiA9IHRoaXMuZ2V0RGVmYXVsdChmaWx0ZXJDb2x1bW5zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7XG4gIEJyZWFkY3J1bWIsXG4gIENoZWNrYm94LFxuICBQYWdpbmF0aW9uLFxuICBTZWdtZW50LFxuICBUYWJsZSxcbiAgVGFibGVSb3csXG4gIE1lc3NhZ2UsXG4gIFRyYW5zaXRpb24sXG4gIEJ1dHRvbixcbiAgTGFiZWwsXG59IGZyb20gJ3NlbWFudGljLXVpLXJlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tIFwibHV4b25cIjtcbmltcG9ydCB7IERlbEJ1dHRvbiwgRWRpdEJ1dHRvbiwgQXBwQnJlYWRjcnVtYnMsIEFkZEJ1dHRvbiwgdXNlU2VsZWN0aW9uLCB1c2VMaXN0UGFyYW1zLCBTb25hbXVDb2wsIG51bUYsIGZvcm1hdERhdGUsIGZvcm1hdERhdGVUaW1lIH0gZnJvbSAnQHNvbmFtdS1raXQvcmVhY3Qtc3VpJztcblxuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVN1YnNldEEgfSBmcm9tIFwic3JjL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlIH0gZnJvbSAnc3JjL3NlcnZpY2VzLyR7bmFtZXMuZnN9LyR7XG4gICAgICAgIG5hbWVzLmZzXG4gICAgICB9LnNlcnZpY2UnO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfUxpc3RQYXJhbXMgfSBmcm9tICdzcmMvc2VydmljZXMvJHtuYW1lcy5mc30vJHtcbiAgICAgICAgbmFtZXMuZnNcbiAgICAgIH0udHlwZXMnO1xuJHtjb2x1bW5JbXBvcnRzfVxuJHtmaWx0ZXJDb2x1bW5zXG4gIC5tYXAoKGNvbCkgPT4ge1xuICAgIHJldHVybiB0aGlzLnJlbmRlckZpbHRlckltcG9ydChlbnRpdHlJZCwgY29sLCBuYW1lcyk7XG4gIH0pXG4gIC5qb2luKFwiXFxuXCIpfVxuXG50eXBlICR7bmFtZXMuY2FwaXRhbH1MaXN0UHJvcHMgPSB7fTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbH1MaXN0KHt9OiAke25hbWVzLmNhcGl0YWx9TGlzdFByb3BzKSB7XG4gIC8vIOumrOyKpO2KuCDtlYTthLBcbiAgY29uc3QgeyBsaXN0UGFyYW1zLCByZWdpc3RlciB9ID0gdXNlTGlzdFBhcmFtcygke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtcywge1xuICAgIG51bTogMTIsXG4gICAgcGFnZTogMSxcbiAgICBvcmRlckJ5OiAnJHtkZWYub3JkZXJCeX0nLFxuICAgIHNlYXJjaDogJyR7ZGVmLnNlYXJjaH0nLFxuICB9KTtcblxuICAvLyDrpqzsiqTtirgg7L+866asXG4gIGNvbnN0IHsgZGF0YSwgbXV0YXRlLCBlcnJvciwgaXNMb2FkaW5nIH0gPSAke25hbWVzLmNhcGl0YWx9U2VydmljZS51c2Uke1xuICAgIG5hbWVzLmNhcGl0YWxQbHVyYWxcbiAgfSgnQScsIGxpc3RQYXJhbXMpO1xuICBjb25zdCB7IHJvd3MsIHRvdGFsIH0gPSBkYXRhID8/IHt9O1xuXG4gIC8vIOyCreygnFxuICBjb25zdCBjb25maXJtRGVsID0gKGlkczogbnVtYmVyW10pID0+IHtcbiAgICBjb25zdCBhbnN3ZXIgPSBjb25maXJtKCfsgq3soJztlZjsi5zqsqDsirXri4jquYw/Jyk7XG4gICAgaWYgKCFhbnN3ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAke25hbWVzLmNhcGl0YWx9U2VydmljZS5kZWwoaWRzKS50aGVuKCgpID0+IHtcbiAgICAgIG11dGF0ZSgpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8vIOydvOq0hCDsgq3soJxcbiAgY29uc3QgY29uZmlybURlbFNlbGVjdGVkID0gKCkgPT4ge1xuICAgIGNvbnN0IGFuc3dlciA9IGNvbmZpcm0oXFxgXFwke3NlbGVjdGVkS2V5cy5sZW5ndGh96rG07J2EIOydvOq0hCDsgq3soJztlZjsi5zqsqDsirXri4jquYw/XFxgKTtcbiAgICBpZiAoIWFuc3dlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLmRlbChzZWxlY3RlZEtleXMpLnRoZW4oKCkgPT4ge1xuICAgICAgbXV0YXRlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8g7ZiE7J6sIOqyveuhnOyZgCDtg4DsnbTti4BcbiAgY29uc3QgUEFHRSA9IHtcbiAgICByb3V0ZTogJy9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfScsXG4gICAgdGl0bGU6ICcke2VudGl0eS50aXRsZSA/PyBuYW1lcy5jYXBpdGFsfScsXG4gIH07XG5cbiAgLy8g7ISg7YOdXG4gIGNvbnN0IHtcbiAgICBnZXRTZWxlY3RlZCxcbiAgICBpc0FsbFNlbGVjdGVkLFxuICAgIHNlbGVjdGVkS2V5cyxcbiAgICB0b2dnbGUsXG4gICAgc2VsZWN0QWxsLFxuICAgIGRlc2VsZWN0QWxsLFxuICAgIGhhbmRsZUNoZWNrYm94Q2xpY2ssXG4gIH0gPSB1c2VTZWxlY3Rpb24oKHJvd3MgPz8gW10pLm1hcCgocm93KSA9PiByb3cuaWQpKTtcblxuICAvLyDsu6zrn7xcbiAgY29uc3QgY29sdW1uczpTb25hbXVDb2w8JHtuYW1lcy5jYXBpdGFsfVN1YnNldEE+W10gPSBbJHtjb2x1bW5zXG4gICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBgeyBsYWJlbDogXCIke2NvbC5sYWJlbH1cIixgLFxuICAgICAgICBgdGM6ICR7Y29sLnRjfSwgYCxcbiAgICAgICAgYGNvbGxhcHNpbmc6ICR7W1wiVGl0bGVcIiwgXCJOYW1lXCJdLmluY2x1ZGVzKGNvbC5sYWJlbCkgPT09IGZhbHNlfSwgfWAsXG4gICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgfSlcbiAgICAuam9pbihcIixcXG5cIil9XTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwibGlzdCAke25hbWVzLmZzUGx1cmFsfS1pbmRleFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0b3AtbmF2XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGVhZGVyLXJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGVhZGVyXCI+e1BBR0UudGl0bGV9PC9kaXY+XG4gICAgICAgICAgPEFwcEJyZWFkY3J1bWJzPlxuICAgICAgICAgICAgPEJyZWFkY3J1bWIuU2VjdGlvbiBhY3RpdmU+e1BBR0UudGl0bGV9PC9CcmVhZGNydW1iLlNlY3Rpb24+XG4gICAgICAgICAgPC9BcHBCcmVhZGNydW1icz5cbiAgICAgICAgICA8JHtuYW1lcy5jYXBpdGFsfVNlYXJjaElucHV0XG4gICAgICAgICAgICBpbnB1dD17cmVnaXN0ZXIoJ2tleXdvcmQnKX1cbiAgICAgICAgICAgIGRyb3Bkb3duPXtyZWdpc3Rlcignc2VhcmNoJyl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmlsdGVycy1yb3dcIj5cbiAgICAgICAgICAke2ZpbHRlckNvbHVtbnNcbiAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJGaWx0ZXIoZW50aXR5SWQsIGNvbCwgbmFtZXMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiJm5ic3A7XFxuXCIpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8U2VnbWVudCBiYXNpYyBwYWRkZWQgY2xhc3NOYW1lPVwiY29udGVudHMtc2VnbWVudFwiIGxvYWRpbmc9e2lzTG9hZGluZ30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYnV0dG9ucy1yb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lcygnY291bnQnLCB7IGhpZGRlbjogaXNMb2FkaW5nIH0pfT5cbiAgICAgICAgICAgIHt0b3RhbH0g6rG0XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidXR0b25zXCI+XG4gICAgICAgICAgICA8QWRkQnV0dG9uIGN1cnJlbnRSb3V0ZT17UEFHRS5yb3V0ZX0gaWNvbj1cIndyaXRlXCIgbGFiZWw9XCLstpTqsIBcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8VGFibGVcbiAgICAgICAgICBjZWxsZWRcbiAgICAgICAgICBjb21wYWN0XG4gICAgICAgICAgc2VsZWN0YWJsZVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyh7IGhpZGRlbjogdG90YWwgPT09IHVuZGVmaW5lZCB8fCB0b3RhbCA9PT0gMCB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxUYWJsZS5IZWFkZXI+XG4gICAgICAgICAgICA8VGFibGVSb3c+XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsIGNvbGxhcHNpbmc+XG4gICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIklEXCJcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzQWxsU2VsZWN0ZWR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aXNBbGxTZWxlY3RlZCA/IGRlc2VsZWN0QWxsIDogc2VsZWN0QWxsfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8qIEhlYWRlciAqL1xuICAgICAgICAgICAgICAgIGNvbHVtbnMubWFwKChjb2wsIGluZGV4KSA9PiBjb2wudGggPz8gPFRhYmxlLkhlYWRlckNlbGwga2V5PXtpbmRleH0gY29sbGFwc2luZz17Y29sLmNvbGxhcHNpbmd9PnsgY29sLmxhYmVsIH08L1RhYmxlLkhlYWRlckNlbGw+KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxUYWJsZS5IZWFkZXJDZWxsPuq0gOumrDwvVGFibGUuSGVhZGVyQ2VsbD5cbiAgICAgICAgICAgIDwvVGFibGVSb3c+XG4gICAgICAgICAgPC9UYWJsZS5IZWFkZXI+XG4gICAgICAgICAgPFRhYmxlLkJvZHk+XG4gICAgICAgICAgICB7cm93cyAmJlxuICAgICAgICAgICAgICByb3dzLm1hcCgocm93LCByb3dJbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxUYWJsZS5Sb3cga2V5PXtyb3cuaWR9PlxuICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtyb3cuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Z2V0U2VsZWN0ZWQocm93LmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KCkgPT4gdG9nZ2xlKHJvdy5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDaGVja2JveENsaWNrKGUsIHJvd0luZGV4KVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLyogQm9keSAqL1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLm1hcCgoY29sLCBjb2xJbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIGtleT17Y29sSW5kZXh9IGNvbGxhcHNpbmc9e2NvbC5jb2xsYXBzaW5nfSBjbGFzc05hbWU9e2NvbC5jbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbC50Yyhyb3csIHJvd0luZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbCBjb2xsYXBzaW5nPlxuICAgICAgICAgICAgICAgICAgICA8RWRpdEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGFzPXtMaW5rfVxuICAgICAgICAgICAgICAgICAgICAgIHRvPXtcXGBcXCR7UEFHRS5yb3V0ZX0vZm9ybT9pZD1cXCR7cm93LmlkfVxcYH1cbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZT17eyBmcm9tOiBQQUdFLnJvdXRlIH19XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxEZWxCdXR0b24gb25DbGljaz17KCkgPT4gY29uZmlybURlbChbcm93LmlkXSl9IC8+XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlLkNlbGw+XG4gICAgICAgICAgICAgICAgPC9UYWJsZS5Sb3c+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvVGFibGUuQm9keT5cbiAgICAgICAgPC9UYWJsZT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcygncGFnaW5hdGlvbi1yb3cnLCB7XG4gICAgICAgICAgICBoaWRkZW46ICh0b3RhbCA/PyAwKSA9PT0gMCxcbiAgICAgICAgICB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxQYWdpbmF0aW9uXG4gICAgICAgICAgICB0b3RhbFBhZ2VzPXtNYXRoLmNlaWwoKHRvdGFsID8/IDApIC8gKGxpc3RQYXJhbXMubnVtID8/IDI0KSl9XG4gICAgICAgICAgICB7Li4ucmVnaXN0ZXIoJ3BhZ2UnKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU2VnbWVudD5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaXhlZC1tZW51XCI+XG4gICAgICAgIDxUcmFuc2l0aW9uXG4gICAgICAgICAgdmlzaWJsZT17c2VsZWN0ZWRLZXlzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgYW5pbWF0aW9uPVwic2xpZGUgbGVmdFwiXG4gICAgICAgICAgZHVyYXRpb249ezUwMH1cbiAgICAgICAgPlxuICAgICAgICAgIDxNZXNzYWdlIHNpemU9XCJzbWFsbFwiIGNvbG9yPVwidmlvbGV0XCIgY2xhc3NOYW1lPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInB4LTRcIj57c2VsZWN0ZWRLZXlzLmxlbmd0aH3qsJwg7ISg7YOd65CoPC9zcGFuPlxuICAgICAgICAgICAgPEJ1dHRvbiBzaXplPVwidGlueVwiIGNvbG9yPVwidmlvbGV0XCIgb25DbGljaz17KCkgPT4gZGVzZWxlY3RBbGwoKX0+XG4gICAgICAgICAgICAgIOyEoO2DnSDtlbTsoJxcbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgPEJ1dHRvbiBzaXplPVwidGlueVwiIGNvbG9yPVwicmVkXCIgb25DbGljaz17Y29uZmlybURlbFNlbGVjdGVkfT5cbiAgICAgICAgICAgICAg7J286rSEIOyCreygnFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9NZXNzYWdlPlxuICAgICAgICA8L1RyYW5zaXRpb24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICBwcmVUZW1wbGF0ZXMsXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImluZmxlY3Rpb24iLCJfIiwieiIsIkVudGl0eU1hbmFnZXIiLCJnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZSIsImdldEVudW1JbmZvRnJvbUNvbE5hbWUiLCJUZW1wbGF0ZSIsInpvZFR5cGVUb1JlbmRlcmluZ05vZGUiLCJnZXRab2RUeXBlQnlJZCIsImdldENvbHVtbnNOb2RlIiwiVGVtcGxhdGVfX3ZpZXdfbGlzdCIsImdldFRhcmdldEFuZFBhdGgiLCJuYW1lcyIsInRhcmdldCIsInBhdGgiLCJmc1BsdXJhbCIsIndyYXBUYyIsImJvZHkiLCJrZXkiLCJjb2xsYXBzaW5nIiwiY2xhc3NOYW1lIiwicmVuZGVyQ29sdW1uIiwiZW50aXR5SWQiLCJjb2wiLCJwYXJlbnRPYmoiLCJ3aXRob3V0TmFtZSIsImNvbE5hbWUiLCJuYW1lIiwicmVuZGVyVHlwZSIsInJlbFByb3BGayIsInJlcGxhY2UiLCJ3aXRoIiwibnVsbGFibGUiLCJpZCIsImVudW1JZCIsInBpY2tlZENoaWxkIiwiY2hpbGRyZW4iLCJmaW5kIiwiY2hpbGQiLCJjb25maWciLCJwaWNrZWQiLCJFcnJvciIsInJlbmRlckNvbHVtbkltcG9ydCIsImNhcGl0YWwiLCJyZWxQcm9wIiwicmVzdWx0IiwibWFwIiwiZ2V0TmFtZXNGcm9tSWQiLCJmbGF0dGVuRGVlcCIsImVsZW1lbnQiLCJyZW5kZXJGaWx0ZXJJbXBvcnQiLCJmcyIsImNvbXBvbmVudElkIiwiY2FtZWxpemUiLCJ0YXJnZXRFbnRpdHlOYW1lcyIsInRhcmdldE1ETmFtZXMiLCJ0YXJnZXROYW1lcyIsInJlbmRlckZpbHRlciIsImlzQ2xlYXJhYmxlIiwib3B0aW9uYWwiLCJnZXREZWZhdWx0IiwiY29sdW1ucyIsImRlZiIsIm9yZGVyQnkiLCJzZWFyY2giLCJvcmRlckJ5Wm9kVHlwZSIsInpvZFR5cGUiLCJab2RFbnVtIiwib3B0aW9ucyIsInRvU3RyaW5nIiwic2VhcmNoWm9kVHlwZSIsInJlbmRlciIsImNvbHVtbnNOb2RlIiwibGlzdFBhcmFtc1pvZFR5cGUiLCJsaXN0UGFyYW1zTm9kZSIsImVudGl0eSIsImdldCIsImZpbHRlciIsInByb3BDYW5kaWRhdGUiLCJwcm9wcyIsInAiLCJsYWJlbCIsImRlc2MiLCJ0YyIsImZpbHRlckNvbHVtbnMiLCJpbmNsdWRlcyIsImVuZHNXaXRoIiwic29ydCIsImEiLCJwcmVUZW1wbGF0ZXMiLCJ0YXJnZXRFbnRpdHlJZCIsInB1c2giLCJjb2x1bW5JbXBvcnRzIiwidW5pcSIsImZsYXQiLCJqb2luIiwiY2FwaXRhbFBsdXJhbCIsInRpdGxlIiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLGdCQUFnQixhQUFhO0FBQ3BDLFlBQVlDLE9BQU8sWUFBWTtBQUMvQixTQUFTQyxDQUFDLFFBQVEsTUFBTTtBQUV4QixTQUFTQyxhQUFhLFFBQTJCLGlDQUE4QjtBQUMvRSxTQUFTQywwQkFBMEIsRUFBRUMsc0JBQXNCLFFBQVEsZ0JBQWE7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
475
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19saXN0LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB7IGZsYXQsIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyaW5nTm9kZSwgVGVtcGxhdGVLZXksIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0Q29sdW1uc05vZGUgfSBmcm9tIFwiLi4vZW50aXR5LWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSwgZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUgfSBmcm9tIFwiLi4vaGVscGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJlZFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgZ2V0Wm9kVHlwZUJ5SWQsIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUgfSBmcm9tIFwiLi4vem9kLWNvbnZlcnRlclwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfbGlzdCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJ2aWV3X2xpc3RcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyYy9wYWdlcy9hZG1pblwiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnNQbHVyYWx9L2luZGV4LnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIHdyYXBUYyhib2R5OiBzdHJpbmcsIGtleTogc3RyaW5nLCBjb2xsYXBzaW5nOiBib29sZWFuID0gdHJ1ZSwgY2xhc3NOYW1lOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgcmV0dXJuIGA8VGFibGUuQ2VsbCBrZXk9XCIke2tleX1cIiR7Y29sbGFwc2luZyA/IFwiIGNvbGxhcHNpbmdcIiA6IFwiXCJ9JHtcbiAgICAgIGNsYXNzTmFtZSA/IGAgY2xhc3NOYW1lPXtcXGAke2NsYXNzTmFtZX1cXGB9YCA6IFwiXCJcbiAgICB9PiR7Ym9keX08L1RhYmxlLkNlbGw+YDtcbiAgfVxuXG4gIHJlbmRlckNvbHVtbihcbiAgICBlbnRpdHlJZDogc3RyaW5nLFxuICAgIGNvbDogUmVuZGVyaW5nTm9kZSxcbiAgICBuYW1lczogRW50aXR5TmFtZXNSZWNvcmQsXG4gICAgcGFyZW50T2JqOiBzdHJpbmcgPSBcInJvd1wiLFxuICAgIHdpdGhvdXROYW1lOiBib29sZWFuID0gZmFsc2UsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgY29sTmFtZSA9IHdpdGhvdXROYW1lID8gYCR7cGFyZW50T2JqfWAgOiBgJHtwYXJlbnRPYmp9LiR7Y29sLm5hbWV9YDtcblxuICAgIHN3aXRjaCAoY29sLnJlbmRlclR5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmctcGxhaW5cIjpcbiAgICAgIGNhc2UgXCJzdHJpbmctZGF0ZVwiOlxuICAgICAgY2FzZSBcIm51bWJlci1pZFwiOlxuICAgICAgICByZXR1cm4gYDw+eyR7Y29sTmFtZX19PC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItZmtfaWRcIjoge1xuICAgICAgICBjb25zdCByZWxQcm9wRmsgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgIHJldHVybiBgPD4ke3JlbFByb3BGay53aXRofSN7JHtjb2xOYW1lfX08Lz5gO1xuICAgICAgfVxuICAgICAgY2FzZSBcInN0cmluZy1pbWFnZVwiOlxuICAgICAgICByZXR1cm4gYDw+eyR7Y29sLm51bGxhYmxlID8gYCR7Y29sTmFtZX0gJiYgYCA6IFwiXCJ9PGltZyBzcmM9eyR7Y29sTmFtZX19IC8+fTwvPmA7XG4gICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcbiAgICAgICAgaWYgKGNvbC5udWxsYWJsZSkge1xuICAgICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC10aW55XCI+eyR7Y29sTmFtZX0gPT09IG51bGwgPyAnLScgOiBmb3JtYXREYXRlVGltZSgke2NvbE5hbWV9KX08L3NwYW4+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzTmFtZT1cInRleHQtdGlueVwiPntmb3JtYXREYXRlVGltZSgke2NvbE5hbWV9KX08L3NwYW4+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcInN0cmluZy1kYXRldGltZVwiOlxuICAgICAgICBpZiAoY29sLm51bGxhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXRpbnlcIj57JHtjb2xOYW1lfSA9PT0gbnVsbCA/ICctJyA6IGRhdGVGKCR7Y29sTmFtZX0pfTwvc3Bhbj5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC10aW55XCI+e2RhdGVGKCR7Y29sTmFtZX0pfTwvc3Bhbj5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gYDw+eyR7Y29sTmFtZX0gPyA8TGFiZWwgY29sb3I9J2dyZWVuJyBjaXJjdWxhcj5PPC9MYWJlbD4gOiA8TGFiZWwgY29sb3I9J2dyZXknIGNpcmN1bGFyPlg8L0xhYmVsPiB9PC8+YDtcbiAgICAgIGNhc2UgXCJlbnVtc1wiOiB7XG4gICAgICAgIGNvbnN0IHsgaWQ6IGVudW1JZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICByZXR1cm4gYDw+eyR7Y29sLm51bGxhYmxlID8gYCR7Y29sTmFtZX0gJiYgYCA6IFwiXCJ9JHtlbnVtSWR9TGFiZWxbJHtjb2xOYW1lfV19PC8+YDtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJhcnJheS1pbWFnZXNcIjpcbiAgICAgICAgcmV0dXJuIGA8PnsgJHtjb2xOYW1lfS5tYXAociA9PiAke2NvbC5udWxsYWJsZSA/IGByICYmIGAgOiBcIlwifTxpbWcgc3JjPXtyfSAvPikgfTwvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLXBsYWluXCI6XG4gICAgICAgIHJldHVybiBgPD57JHtjb2wubnVsbGFibGUgPyBgJHtjb2xOYW1lfSAmJiBgIDogXCJcIn1udW1GKCR7Y29sTmFtZX0pfTwvPmA7XG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIHJldHVybiBgPD57Lyogb2JqZWN0ICR7Y29sTmFtZX0gKi99PC8+YDtcbiAgICAgIGNhc2UgXCJvYmplY3QtcGlja1wiOiB7XG4gICAgICAgIGNvbnN0IHBpY2tlZENoaWxkID0gY29sLmNoaWxkcmVuPy5maW5kKChjaGlsZCkgPT4gY2hpbGQubmFtZSA9PT0gY29sLmNvbmZpZz8ucGlja2VkKTtcbiAgICAgICAgaWYgKCFwaWNrZWRDaGlsZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgb2JqZWN0LXBpY2sg7ISg7YOdIOyLpO2MqCAo7Jik67iM7KCd7Yq4OiAke2NvbC5uYW1lfSlgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDb2x1bW4oXG4gICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgcGlja2VkQ2hpbGQsXG4gICAgICAgICAgbmFtZXMsXG4gICAgICAgICAgYCR7Y29sTmFtZX0ke2NvbC5udWxsYWJsZSA/IFwiP1wiIDogXCJcIn1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgIHJldHVybiBgPD57IC8qIGFycmF5ICR7Y29sTmFtZX0gKi8gfTwvPmA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOugjOuNlCDrtojqsIAg7Lus65+8ICR7Y29sLnJlbmRlclR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyQ29sdW1uSW1wb3J0KFxuICAgIGVudGl0eUlkOiBzdHJpbmcsXG4gICAgY29sOiBSZW5kZXJpbmdOb2RlLFxuICAgIG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCxcbiAgKTogKHN0cmluZyB8IG51bGwpW10ge1xuICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICBjb25zdCB7IGlkOiBlbnVtSWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUobmFtZXMuY2FwaXRhbCwgY29sLm5hbWUpO1xuICAgICAgcmV0dXJuIFtgaW1wb3J0IHsgJHtlbnVtSWR9TGFiZWwgfSBmcm9tICdzcmMvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZCc7YF07XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbC5jaGlsZHJlbj8ubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICAgIGVudGl0eUlkID0gcmVsUHJvcC53aXRoO1xuICAgICAgICAgIG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChyZWxQcm9wLndpdGgpO1xuICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNvbHVtbkltcG9ydChlbnRpdHlJZCwgY2hpbGQsIG5hbWVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmbGF0KHJlc3VsdCA/PyBbXSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFtudWxsXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIpIHtcbiAgICAgIGFzc2VydChjb2wuZWxlbWVudCk7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJDb2x1bW5JbXBvcnQoZW50aXR5SWQsIGNvbC5lbGVtZW50LCBuYW1lcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtudWxsXTtcbiAgfVxuXG4gIHJlbmRlckZpbHRlckltcG9ydChlbnRpdHlJZDogc3RyaW5nLCBjb2w6IFJlbmRlcmluZ05vZGUsIG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIGlmIChjb2wubmFtZSA9PT0gXCJzZWFyY2hcIikge1xuICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2VhcmNoSW5wdXQgfSBmcm9tIFwic3JjL2NvbXBvbmVudHMvJHtuYW1lcy5mc30vJHtuYW1lcy5jYXBpdGFsfVNlYXJjaElucHV0XCI7YDtcbiAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGlmIChjb2wubmFtZSA9PT0gXCJvcmRlckJ5XCIpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50SWQgPSBgJHtuYW1lcy5jYXBpdGFsfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShjb2wubmFtZSl9U2VsZWN0YDtcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJzcmMvY29tcG9uZW50cy8ke25hbWVzLmZzfS8ke2NvbXBvbmVudElkfVwiO2A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgaWQsIHRhcmdldEVudGl0eU5hbWVzOiB0YXJnZXRNRE5hbWVzIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKFxuICAgICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgICBjb2wubmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudElkID0gYCR7aWR9U2VsZWN0YDtcbiAgICAgICAgICByZXR1cm4gYGltcG9ydCB7ICR7Y29tcG9uZW50SWR9IH0gZnJvbSBcInNyYy9jb21wb25lbnRzLyR7dGFyZ2V0TUROYW1lcy5mc30vJHtjb21wb25lbnRJZH1cIjtgO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChyZWxQcm9wLndpdGgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJzcmMvY29tcG9uZW50cy8ke3RhcmdldE5hbWVzLmZzfS8ke2NvbXBvbmVudElkfVwiO2A7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg66CM642UIOu2iOqwgOuKpe2VnCDtlYTthLAg7J6E7Y+s7Yq4ICR7Y29sLm5hbWV9ICR7Y29sLnJlbmRlclR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyRmlsdGVyKGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSwgbmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgaWYgKGNvbC5uYW1lID09PSBcInNlYXJjaFwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0NsZWFyYWJsZSA9IGNvbC5vcHRpb25hbCA9PT0gdHJ1ZSAmJiBjb2wubmFtZSAhPT0gXCJvcmRlckJ5XCI7XG4gICAgbGV0IGNvbXBvbmVudElkOiBzdHJpbmc7XG4gICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGlmIChjb2wubmFtZSA9PT0gXCJvcmRlckJ5XCIpIHtcbiAgICAgICAgY29tcG9uZW50SWQgPSBgJHtuYW1lcy5jYXBpdGFsfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShjb2wubmFtZSl9U2VsZWN0YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgIGNvbXBvbmVudElkID0gYCR7aWR9U2VsZWN0YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBgPCR7Y29tcG9uZW50SWR9IHsuLi5yZWdpc3RlcignJHtjb2wubmFtZX0nKX0gJHtpc0NsZWFyYWJsZSA/IFwiY2xlYXJhYmxlXCIgOiBcIlwifSAvPmA7XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgY29tcG9uZW50SWQgPSBgJHtyZWxQcm9wLndpdGh9SWRBc3luY1NlbGVjdGA7XG4gICAgICAgIHJldHVybiBgPCR7Y29tcG9uZW50SWR9IHsuLi5yZWdpc3RlcignJHtjb2wubmFtZX0nKX0gJHtcbiAgICAgICAgICBpc0NsZWFyYWJsZSA/IFwiY2xlYXJhYmxlXCIgOiBcIlwiXG4gICAgICAgIH0gc3Vic2V0PVwiQVwiIC8+YDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDroIzrjZQg67aI6rCA64ql7ZWcIO2VhO2EsCDsnoTtj6ztirggJHtjb2wubmFtZX0gJHtjb2wucmVuZGVyVHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICBnZXREZWZhdWx0KGNvbHVtbnM6IFJlbmRlcmluZ05vZGVbXSk6IHtcbiAgICBvcmRlckJ5OiBzdHJpbmc7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gIH0ge1xuICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgIG9yZGVyQnk6IFwiaWQtZGVzY1wiLFxuICAgICAgc2VhcmNoOiBcInRpdGxlXCIsXG4gICAgfTtcbiAgICBjb25zdCBvcmRlckJ5Wm9kVHlwZSA9IGNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJvcmRlckJ5XCIpPy56b2RUeXBlO1xuICAgIGlmIChvcmRlckJ5Wm9kVHlwZSAmJiBvcmRlckJ5Wm9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgICAgZGVmLm9yZGVyQnkgPSBvcmRlckJ5Wm9kVHlwZS5vcHRpb25zWzBdLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFpvZFR5cGUgPSBjb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLm5hbWUgPT09IFwic2VhcmNoXCIpPy56b2RUeXBlO1xuICAgIGlmIChzZWFyY2hab2RUeXBlICYmIHNlYXJjaFpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICAgIGRlZi5zZWFyY2ggPSBzZWFyY2hab2RUeXBlLm9wdGlvbnNbMF0udG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZjtcbiAgfVxuXG4gIGFzeW5jIHJlbmRlcih7IGVudGl0eUlkIH06IFRlbXBsYXRlT3B0aW9uc1tcInZpZXdfbGlzdFwiXSkge1xuICAgIGNvbnN0IGNvbHVtbnNOb2RlID0gYXdhaXQgZ2V0Q29sdW1uc05vZGUoZW50aXR5SWQsIFwiQVwiKTtcbiAgICBjb25zdCBsaXN0UGFyYW1zWm9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKGAke2VudGl0eUlkfUxpc3RQYXJhbXNgKTtcbiAgICBjb25zdCBsaXN0UGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUobGlzdFBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICAvLyDsi6TsoJwg66as7Iqk7Yq4IOy7rOufvFxuICAgIGNvbnN0IGNvbHVtbnMgPSAoY29sdW1uc05vZGUuY2hpbGRyZW4gYXMgUmVuZGVyaW5nTm9kZVtdKVxuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wubmFtZSAhPT0gXCJpZFwiKVxuICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BDYW5kaWRhdGUgPSBlbnRpdHkucHJvcHMuZmluZCgocCkgPT4gcC5uYW1lID09PSBjb2wubmFtZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogY29sLm5hbWUsXG4gICAgICAgICAgbGFiZWw6IHByb3BDYW5kaWRhdGU/LmRlc2MgPz8gY29sLmxhYmVsLFxuICAgICAgICAgIHRjOiBgKHJvdykgPT4gJHt0aGlzLnJlbmRlckNvbHVtbihlbnRpdHlJZCwgY29sLCBuYW1lcyl9YCxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgLy8g7ZWE7YSwIOy7rOufvFxuICAgIGNvbnN0IGZpbHRlckNvbHVtbnMgPSAobGlzdFBhcmFtc05vZGUuY2hpbGRyZW4gYXMgUmVuZGVyaW5nTm9kZVtdKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGNvbCkgPT5cbiAgICAgICAgICBjb2wubmFtZSAhPT0gXCJpZFwiICYmXG4gICAgICAgICAgY29sLm5hbWUgIT09IFwicXVlcnlNb2RlXCIgJiZcbiAgICAgICAgICAoW1wiZW51bXNcIiwgXCJudW1iZXItaWRcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpIHx8IGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkXCIpKSxcbiAgICAgIClcbiAgICAgIC8vIG9yZGVyQnnqsIAg6rCA7J6lIOuSpOuhnCDsmKTqsowg7Iic7IScIOyhsOyglVxuICAgICAgLnNvcnQoKGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGEubmFtZSA9PT0gXCJvcmRlckJ5XCIgPyAxIDogLTE7XG4gICAgICB9KTtcblxuICAgIC8vIO2VhO2EsCDsu6zrn7zsnYQg7ZSE66asIO2FnO2UjOumv+ycvOuhnCDshKTsoJVcbiAgICBjb25zdCBwcmVUZW1wbGF0ZXM6IFJlbmRlcmVkVGVtcGxhdGVbXCJwcmVUZW1wbGF0ZXNcIl0gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmaWx0ZXJDb2x1bW5zKSB7XG4gICAgICBsZXQga2V5OiBUZW1wbGF0ZUtleTtcbiAgICAgIGxldCB0YXJnZXRFbnRpdHlJZCA9IGVudGl0eUlkO1xuICAgICAgbGV0IGVudW1JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikge1xuICAgICAgICBpZiAoY29sLm5hbWUgPT09IFwic2VhcmNoXCIpIHtcbiAgICAgICAgICBrZXkgPSBcInZpZXdfZW51bXNfZHJvcGRvd25cIjtcbiAgICAgICAgICBlbnVtSWQgPSBgJHtuYW1lcy5jYXBpdGFsfVNlYXJjaEZpZWxkYDtcbiAgICAgICAgICB0YXJnZXRFbnRpdHlJZCA9IG5hbWVzLmNhcGl0YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2V5ID0gXCJ2aWV3X2VudW1zX3NlbGVjdFwiO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IHRhcmdldEVudGl0eU5hbWVzLCBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgdGFyZ2V0RW50aXR5SWQgPSB0YXJnZXRFbnRpdHlOYW1lcy5jYXBpdGFsO1xuICAgICAgICAgICAgZW51bUlkID0gaWQ7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleSA9IFwidmlld19pZF9hc3luY19zZWxlY3RcIjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgIHRhcmdldEVudGl0eUlkID0gcmVsUHJvcC53aXRoO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcmVUZW1wbGF0ZXMucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGVudGl0eUlkOiB0YXJnZXRFbnRpdHlJZCxcbiAgICAgICAgICBlbnVtSWQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyDrpqzsiqTtirgg7Lus65+8XG4gICAgYXNzZXJ0KGNvbHVtbnNOb2RlLmNoaWxkcmVuKTtcbiAgICBjb25zdCBjb2x1bW5JbXBvcnRzID0gdW5pcXVlKFxuICAgICAgY29sdW1uc05vZGUuY2hpbGRyZW5cbiAgICAgICAgLmZsYXRNYXAoKGNvbCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNvbHVtbkltcG9ydChlbnRpdHlJZCwgY29sLCBuYW1lcyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sICE9PSBudWxsKSxcbiAgICApLmpvaW4oXCJcXG5cIik7XG5cbiAgICAvLyBTZWFyY2hJbnB1dFxuICAgIGFzc2VydChwcmVUZW1wbGF0ZXMpO1xuICAgIHByZVRlbXBsYXRlcy5wdXNoKHtcbiAgICAgIGtleTogXCJ2aWV3X3NlYXJjaF9pbnB1dFwiLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBlbnRpdHlJZCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyDrlJTtj7Ttirgg7YyM652866+47YSwXG4gICAgY29uc3QgZGVmID0gdGhpcy5nZXREZWZhdWx0KGZpbHRlckNvbHVtbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcyksXG4gICAgICBib2R5OiBgXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IHtcbiAgQnJlYWRjcnVtYixcbiAgQ2hlY2tib3gsXG4gIFBhZ2luYXRpb24sXG4gIFNlZ21lbnQsXG4gIFRhYmxlLFxuICBUYWJsZVJvdyxcbiAgTWVzc2FnZSxcbiAgVHJhbnNpdGlvbixcbiAgQnV0dG9uLFxuICBMYWJlbCxcbn0gZnJvbSAnc2VtYW50aWMtdWktcmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgRGVsQnV0dG9uLCBFZGl0QnV0dG9uLCBBcHBCcmVhZGNydW1icywgQWRkQnV0dG9uLCB1c2VTZWxlY3Rpb24sIHVzZUxpc3RQYXJhbXMsIFNvbmFtdUNvbCwgbnVtRiwgZm9ybWF0RGF0ZSwgZm9ybWF0RGF0ZVRpbWUgfSBmcm9tICdAc29uYW11LWtpdC9yZWFjdC1zdWknO1xuXG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U3Vic2V0QSB9IGZyb20gXCJzcmMvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UgfSBmcm9tICdzcmMvc2VydmljZXMvJHtuYW1lcy5mc30vJHtuYW1lcy5mc30uc2VydmljZSc7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtcyB9IGZyb20gJ3NyYy9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS50eXBlcyc7XG4ke2NvbHVtbkltcG9ydHN9XG4ke2ZpbHRlckNvbHVtbnNcbiAgLm1hcCgoY29sKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyRmlsdGVySW1wb3J0KGVudGl0eUlkLCBjb2wsIG5hbWVzKTtcbiAgfSlcbiAgLmpvaW4oXCJcXG5cIil9XG5cbnR5cGUgJHtuYW1lcy5jYXBpdGFsfUxpc3RQcm9wcyA9IHt9O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsfUxpc3Qoe306ICR7bmFtZXMuY2FwaXRhbH1MaXN0UHJvcHMpIHtcbiAgLy8g66as7Iqk7Yq4IO2VhO2EsFxuICBjb25zdCB7IGxpc3RQYXJhbXMsIHJlZ2lzdGVyIH0gPSB1c2VMaXN0UGFyYW1zKCR7bmFtZXMuY2FwaXRhbH1MaXN0UGFyYW1zLCB7XG4gICAgbnVtOiAxMixcbiAgICBwYWdlOiAxLFxuICAgIG9yZGVyQnk6ICcke2RlZi5vcmRlckJ5fScsXG4gICAgc2VhcmNoOiAnJHtkZWYuc2VhcmNofScsXG4gIH0pO1xuXG4gIC8vIOumrOyKpO2KuCDsv7zrpqxcbiAgY29uc3QgeyBkYXRhLCBtdXRhdGUsIGVycm9yLCBpc0xvYWRpbmcgfSA9ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLnVzZSR7XG4gICAgbmFtZXMuY2FwaXRhbFBsdXJhbFxuICB9KCdBJywgbGlzdFBhcmFtcyk7XG4gIGNvbnN0IHsgcm93cywgdG90YWwgfSA9IGRhdGEgPz8ge307XG5cbiAgLy8g7IKt7KCcXG4gIGNvbnN0IGNvbmZpcm1EZWwgPSAoaWRzOiBudW1iZXJbXSkgPT4ge1xuICAgIGNvbnN0IGFuc3dlciA9IGNvbmZpcm0oJ+yCreygnO2VmOyLnOqyoOyKteuLiOq5jD8nKTtcbiAgICBpZiAoIWFuc3dlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLmRlbChpZHMpLnRoZW4oKCkgPT4ge1xuICAgICAgbXV0YXRlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgLy8g7J286rSEIOyCreygnFxuICBjb25zdCBjb25maXJtRGVsU2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgY29uc3QgYW5zd2VyID0gY29uZmlybShcXGBcXCR7c2VsZWN0ZWRLZXlzLmxlbmd0aH3qsbTsnYQg7J286rSEIOyCreygnO2VmOyLnOqyoOyKteuLiOq5jD9cXGApO1xuICAgIGlmICghYW5zd2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UuZGVsKHNlbGVjdGVkS2V5cykudGhlbigoKSA9PiB7XG4gICAgICBtdXRhdGUoKTtcbiAgICB9KTtcbiAgfTtcblxuICAvLyDtmITsnqwg6rK966Gc7JmAIO2DgOydtO2LgFxuICBjb25zdCBQQUdFID0ge1xuICAgIHJvdXRlOiAnL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9JyxcbiAgICB0aXRsZTogJyR7ZW50aXR5LnRpdGxlID8/IG5hbWVzLmNhcGl0YWx9JyxcbiAgfTtcblxuICAvLyDshKDtg51cbiAgY29uc3Qge1xuICAgIGdldFNlbGVjdGVkLFxuICAgIGlzQWxsU2VsZWN0ZWQsXG4gICAgc2VsZWN0ZWRLZXlzLFxuICAgIHRvZ2dsZSxcbiAgICBzZWxlY3RBbGwsXG4gICAgZGVzZWxlY3RBbGwsXG4gICAgaGFuZGxlQ2hlY2tib3hDbGljayxcbiAgfSA9IHVzZVNlbGVjdGlvbigocm93cyA/PyBbXSkubWFwKChyb3cpID0+IHJvdy5pZCkpO1xuXG4gIC8vIOy7rOufvFxuICBjb25zdCBjb2x1bW5zOlNvbmFtdUNvbDwke25hbWVzLmNhcGl0YWx9U3Vic2V0QT5bXSA9IFske2NvbHVtbnNcbiAgICAubWFwKChjb2wpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGB7IGxhYmVsOiBcIiR7Y29sLmxhYmVsfVwiLGAsXG4gICAgICAgIGB0YzogJHtjb2wudGN9LCBgLFxuICAgICAgICBgY29sbGFwc2luZzogJHtbXCJUaXRsZVwiLCBcIk5hbWVcIl0uaW5jbHVkZXMoY29sLmxhYmVsKSA9PT0gZmFsc2V9LCB9YCxcbiAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9KVxuICAgIC5qb2luKFwiLFxcblwiKX1dO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJsaXN0ICR7bmFtZXMuZnNQbHVyYWx9LWluZGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRvcC1uYXZcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoZWFkZXItcm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoZWFkZXJcIj57UEFHRS50aXRsZX08L2Rpdj5cbiAgICAgICAgICA8QXBwQnJlYWRjcnVtYnM+XG4gICAgICAgICAgICA8QnJlYWRjcnVtYi5TZWN0aW9uIGFjdGl2ZT57UEFHRS50aXRsZX08L0JyZWFkY3J1bWIuU2VjdGlvbj5cbiAgICAgICAgICA8L0FwcEJyZWFkY3J1bWJzPlxuICAgICAgICAgIDwke25hbWVzLmNhcGl0YWx9U2VhcmNoSW5wdXRcbiAgICAgICAgICAgIGlucHV0PXtyZWdpc3Rlcigna2V5d29yZCcpfVxuICAgICAgICAgICAgZHJvcGRvd249e3JlZ2lzdGVyKCdzZWFyY2gnKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXJzLXJvd1wiPlxuICAgICAgICAgICR7ZmlsdGVyQ29sdW1uc1xuICAgICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckZpbHRlcihlbnRpdHlJZCwgY29sLCBuYW1lcyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCImbmJzcDtcXG5cIil9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxTZWdtZW50IGJhc2ljIHBhZGRlZCBjbGFzc05hbWU9XCJjb250ZW50cy1zZWdtZW50XCIgbG9hZGluZz17aXNMb2FkaW5nfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJidXR0b25zLXJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVzKCdjb3VudCcsIHsgaGlkZGVuOiBpc0xvYWRpbmcgfSl9PlxuICAgICAgICAgICAge3RvdGFsfSDqsbRcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDxBZGRCdXR0b24gY3VycmVudFJvdXRlPXtQQUdFLnJvdXRlfSBpY29uPVwid3JpdGVcIiBsYWJlbD1cIuy2lOqwgFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxUYWJsZVxuICAgICAgICAgIGNlbGxlZFxuICAgICAgICAgIGNvbXBhY3RcbiAgICAgICAgICBzZWxlY3RhYmxlXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKHsgaGlkZGVuOiB0b3RhbCA9PT0gdW5kZWZpbmVkIHx8IHRvdGFsID09PSAwIH0pfVxuICAgICAgICA+XG4gICAgICAgICAgPFRhYmxlLkhlYWRlcj5cbiAgICAgICAgICAgIDxUYWJsZVJvdz5cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGwgY29sbGFwc2luZz5cbiAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgIGxhYmVsPVwiSURcIlxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aXNBbGxTZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtpc0FsbFNlbGVjdGVkID8gZGVzZWxlY3RBbGwgOiBzZWxlY3RBbGx9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLyogSGVhZGVyICovXG4gICAgICAgICAgICAgICAgY29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IGNvbC50aCA/PyA8VGFibGUuSGVhZGVyQ2VsbCBrZXk9e2luZGV4fSBjb2xsYXBzaW5nPXtjb2wuY29sbGFwc2luZ30+eyBjb2wubGFiZWwgfTwvVGFibGUuSGVhZGVyQ2VsbD4pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPFRhYmxlLkhlYWRlckNlbGw+6rSA66asPC9UYWJsZS5IZWFkZXJDZWxsPlxuICAgICAgICAgICAgPC9UYWJsZVJvdz5cbiAgICAgICAgICA8L1RhYmxlLkhlYWRlcj5cbiAgICAgICAgICA8VGFibGUuQm9keT5cbiAgICAgICAgICAgIHtyb3dzICYmXG4gICAgICAgICAgICAgIHJvd3MubWFwKChyb3csIHJvd0luZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgPFRhYmxlLlJvdyBrZXk9e3Jvdy5pZH0+XG4gICAgICAgICAgICAgICAgICA8VGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e3Jvdy5pZH1cbiAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtnZXRTZWxlY3RlZChyb3cuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiB0b2dnbGUocm93LmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNoZWNrYm94Q2xpY2soZSwgcm93SW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9UYWJsZS5DZWxsPlxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAvKiBCb2R5ICovXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnMubWFwKChjb2wsIGNvbEluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlLkNlbGwga2V5PXtjb2xJbmRleH0gY29sbGFwc2luZz17Y29sLmNvbGxhcHNpbmd9IGNsYXNzTmFtZT17Y29sLmNsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sLnRjKHJvdywgcm93SW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDxUYWJsZS5DZWxsIGNvbGxhcHNpbmc+XG4gICAgICAgICAgICAgICAgICAgIDxFZGl0QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgYXM9e0xpbmt9XG4gICAgICAgICAgICAgICAgICAgICAgdG89e1xcYFxcJHtQQUdFLnJvdXRlfS9mb3JtP2lkPVxcJHtyb3cuaWR9XFxgfVxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlPXt7IGZyb206IFBBR0Uucm91dGUgfX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPERlbEJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBjb25maXJtRGVsKFtyb3cuaWRdKX0gLz5cbiAgICAgICAgICAgICAgICAgIDwvVGFibGUuQ2VsbD5cbiAgICAgICAgICAgICAgICA8L1RhYmxlLlJvdz5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9UYWJsZS5Cb2R5PlxuICAgICAgICA8L1RhYmxlPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKCdwYWdpbmF0aW9uLXJvdycsIHtcbiAgICAgICAgICAgIGhpZGRlbjogKHRvdGFsID8/IDApID09PSAwLFxuICAgICAgICAgIH0pfVxuICAgICAgICA+XG4gICAgICAgICAgPFBhZ2luYXRpb25cbiAgICAgICAgICAgIHRvdGFsUGFnZXM9e01hdGguY2VpbCgodG90YWwgPz8gMCkgLyAobGlzdFBhcmFtcy5udW0gPz8gMjQpKX1cbiAgICAgICAgICAgIHsuLi5yZWdpc3RlcigncGFnZScpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9TZWdtZW50PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpeGVkLW1lbnVcIj5cbiAgICAgICAgPFRyYW5zaXRpb25cbiAgICAgICAgICB2aXNpYmxlPXtzZWxlY3RlZEtleXMubGVuZ3RoID4gMH1cbiAgICAgICAgICBhbmltYXRpb249XCJzbGlkZSBsZWZ0XCJcbiAgICAgICAgICBkdXJhdGlvbj17NTAwfVxuICAgICAgICA+XG4gICAgICAgICAgPE1lc3NhZ2Ugc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJ2aW9sZXRcIiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicHgtNFwiPntzZWxlY3RlZEtleXMubGVuZ3RofeqwnCDshKDtg53rkKg8L3NwYW4+XG4gICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJ0aW55XCIgY29sb3I9XCJ2aW9sZXRcIiBvbkNsaWNrPXsoKSA9PiBkZXNlbGVjdEFsbCgpfT5cbiAgICAgICAgICAgICAg7ISg7YOdIO2VtOygnFxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJ0aW55XCIgY29sb3I9XCJyZWRcIiBvbkNsaWNrPXtjb25maXJtRGVsU2VsZWN0ZWR9PlxuICAgICAgICAgICAgICDsnbzqtIQg7IKt7KCcXG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L01lc3NhZ2U+XG4gICAgICAgIDwvVHJhbnNpdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIHByZVRlbXBsYXRlcyxcbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiaW5mbGVjdGlvbiIsImZsYXQiLCJ1bmlxdWUiLCJ6IiwiRW50aXR5TWFuYWdlciIsImdldENvbHVtbnNOb2RlIiwiZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSIsImdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lIiwiVGVtcGxhdGUiLCJnZXRab2RUeXBlQnlJZCIsInpvZFR5cGVUb1JlbmRlcmluZ05vZGUiLCJUZW1wbGF0ZV9fdmlld19saXN0IiwiZ2V0VGFyZ2V0QW5kUGF0aCIsIm5hbWVzIiwidGFyZ2V0IiwicGF0aCIsImZzUGx1cmFsIiwid3JhcFRjIiwiYm9keSIsImtleSIsImNvbGxhcHNpbmciLCJjbGFzc05hbWUiLCJyZW5kZXJDb2x1bW4iLCJlbnRpdHlJZCIsImNvbCIsInBhcmVudE9iaiIsIndpdGhvdXROYW1lIiwiY29sTmFtZSIsIm5hbWUiLCJyZW5kZXJUeXBlIiwicmVsUHJvcEZrIiwicmVwbGFjZSIsIndpdGgiLCJudWxsYWJsZSIsImlkIiwiZW51bUlkIiwicGlja2VkQ2hpbGQiLCJjaGlsZHJlbiIsImZpbmQiLCJjaGlsZCIsImNvbmZpZyIsInBpY2tlZCIsIkVycm9yIiwicmVuZGVyQ29sdW1uSW1wb3J0IiwiY2FwaXRhbCIsInJlbFByb3AiLCJyZXN1bHQiLCJtYXAiLCJnZXROYW1lc0Zyb21JZCIsImVsZW1lbnQiLCJyZW5kZXJGaWx0ZXJJbXBvcnQiLCJmcyIsImNvbXBvbmVudElkIiwiY2FtZWxpemUiLCJ0YXJnZXRFbnRpdHlOYW1lcyIsInRhcmdldE1ETmFtZXMiLCJ0YXJnZXROYW1lcyIsInJlbmRlckZpbHRlciIsImlzQ2xlYXJhYmxlIiwib3B0aW9uYWwiLCJnZXREZWZhdWx0IiwiY29sdW1ucyIsImRlZiIsIm9yZGVyQnkiLCJzZWFyY2giLCJvcmRlckJ5Wm9kVHlwZSIsInpvZFR5cGUiLCJab2RFbnVtIiwib3B0aW9ucyIsInRvU3RyaW5nIiwic2VhcmNoWm9kVHlwZSIsInJlbmRlciIsImNvbHVtbnNOb2RlIiwibGlzdFBhcmFtc1pvZFR5cGUiLCJsaXN0UGFyYW1zTm9kZSIsImVudGl0eSIsImdldCIsImZpbHRlciIsInByb3BDYW5kaWRhdGUiLCJwcm9wcyIsInAiLCJsYWJlbCIsImRlc2MiLCJ0YyIsImZpbHRlckNvbHVtbnMiLCJpbmNsdWRlcyIsImVuZHNXaXRoIiwic29ydCIsImEiLCJwcmVUZW1wbGF0ZXMiLCJ0YXJnZXRFbnRpdHlJZCIsInB1c2giLCJjb2x1bW5JbXBvcnRzIiwiZmxhdE1hcCIsImpvaW4iLCJjYXBpdGFsUGx1cmFsIiwidGl0bGUiLCJ0cmltIiwiaW1wb3J0S2V5cyJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLE9BQU9DLGdCQUFnQixhQUFhO0FBQ3BDLFNBQVNDLElBQUksRUFBRUMsTUFBTSxRQUFRLFVBQVU7QUFDdkMsU0FBU0MsQ0FBQyxRQUFRLE1BQU07QUFDeEIsU0FBU0MsYUFBYSxRQUFnQyxpQ0FBOEI7QUFFcEYsU0FBU0MsY0FBYyxRQUFRLHlCQUFzQjtBQUNyRCxTQUFTQyxzQkFBc0IsRUFBRUMsMEJBQTBCLFFBQVEsZ0JBQWE7QUFFaEYsU0FBU0MsUUFBUSxRQUFRLGlCQUFjO0FBQ3ZDLFNBQVNDLGNBQWMsRUFBRUMsc0JBQXNCLFFBQVEsc0JBQW1CO0FBRTFFLE9BQU8sTUFBTUMsNEJBQTRCSDtJQUN2QyxhQUFjO1FBQ1osS0FBSyxDQUFDO0lBQ1I7SUFFQUksaUJBQWlCQyxLQUF3QixFQUFFO1FBQ3pDLE9BQU87WUFDTEMsUUFBUTtZQUNSQyxNQUFNLEdBQUdGLE1BQU1HLFFBQVEsQ0FBQyxVQUFV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
@@ -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__view_list_columns extends Template {
5
5
  constructor();
@@ -7,7 +7,7 @@ export declare class Template__view_list_columns extends Template {
7
7
  target: string;
8
8
  path: string;
9
9
  };
10
- render({ entityId, columns, columnImports, }: TemplateOptions["view_list_columns"]): {
10
+ render({ entityId, columns, columnImports }: TemplateOptions["view_list_columns"]): {
11
11
  body: string;
12
12
  importKeys: never[];
13
13
  target: string;
@@ -1 +1 @@
1
- {"version":3,"file":"view_list_columns.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_list_columns.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;AAEvC,qBAAa,2BAA4B,SAAQ,QAAQ;;IAKvD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAQzC,MAAM,CAAC,EACL,QAAQ,EACR,OAAO,EACP,aAAa,GACd,EAAE,eAAe,CAAC,mBAAmB,CAAC;;;;;;CAqCxC"}
1
+ {"version":3,"file":"view_list_columns.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_list_columns.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,2BAA4B,SAAQ,QAAQ;;IAKvD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAQzC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,eAAe,CAAC,mBAAmB,CAAC;;;;;;CAmClF"}
@@ -46,4 +46,4 @@ export default columns;
46
46
  }
47
47
  }
48
48
 
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19saXN0X2NvbHVtbnMudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19saXN0X2NvbHVtbnMgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwidmlld19saXN0X2NvbHVtbnNcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyYy9wYWdlcy9hZG1pblwiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnNQbHVyYWx9L19jb2x1bW5zLnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIC8vIOy7rOufvFxuICByZW5kZXIoe1xuICAgIGVudGl0eUlkLFxuICAgIGNvbHVtbnMsXG4gICAgY29sdW1uSW1wb3J0cyxcbiAgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19saXN0X2NvbHVtbnNcIl0pIHtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcyksXG4gICAgICBib2R5OiBgXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgU2VnbWVudCxcbiAgVGFibGUsXG4gIFRhYmxlUm93LFxuICBCdXR0b24sXG4gIExhYmVsLFxufSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgVEZDb2x1bW4gfSBmcm9tIFwic3JjL3R5cGVmcmFtZS9pc28tdHlwZXNcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRBIH0gZnJvbSBcInNyYy9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke1xuICAgICAgICBuYW1lcy5mc1xuICAgICAgfS5nZW5lcmF0ZWRcIjtcbiR7Y29sdW1uSW1wb3J0c31cblxuY29uc3QgY29sdW1uczogeyBba2V5IGluIEV4Y2x1ZGU8a2V5b2YgJHtcbiAgICAgICAgbmFtZXMuY2FwaXRhbFxuICAgICAgfVN1YnNldEEsICdpZCc+XTogVEZDb2x1bW48JHtuYW1lcy5jYXBpdGFsfVN1YnNldEE+IH0gPSB7JHtjb2x1bW5zXG4gICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBgJHtjb2wubmFtZX06IHsgbGFiZWw6IFwiJHtjb2wubGFiZWx9XCIsYCxcbiAgICAgICAgICAgIGB0YzogJHtjb2wudGN9LCBgLFxuICAgICAgICAgICAgYGNvbGxhcHNpbmc6ICR7W1wiVGl0bGVcIiwgXCJOYW1lXCJdLmluY2x1ZGVzKGNvbC5sYWJlbCkgPT09IGZhbHNlfSwgfWAsXG4gICAgICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIixcXG5cIil9fTtcbmV4cG9ydCBkZWZhdWx0IGNvbHVtbnM7XG4gICAgICBgLnRyaW0oKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJFbnRpdHlNYW5hZ2VyIiwiVGVtcGxhdGUiLCJUZW1wbGF0ZV9fdmlld19saXN0X2NvbHVtbnMiLCJnZXRUYXJnZXRBbmRQYXRoIiwibmFtZXMiLCJ0YXJnZXQiLCJwYXRoIiwiZnNQbHVyYWwiLCJyZW5kZXIiLCJlbnRpdHlJZCIsImNvbHVtbnMiLCJjb2x1bW5JbXBvcnRzIiwiZ2V0TmFtZXNGcm9tSWQiLCJib2R5IiwiY2FwaXRhbCIsImZzIiwibWFwIiwiY29sIiwibmFtZSIsImxhYmVsIiwidGMiLCJpbmNsdWRlcyIsImpvaW4iLCJ0cmltIiwiaW1wb3J0S2V5cyJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EsYUFBYSxRQUEyQixpQ0FBOEI7QUFDL0UsU0FBU0MsUUFBUSxRQUFRLGlCQUFjO0FBRXZDLE9BQU8sTUFBTUMsb0NBQW9DRDtJQUMvQyxhQUFjO1FBQ1osS0FBSyxDQUFDO0lBQ1I7SUFFQUUsaUJBQWlCQyxLQUF3QixFQUFFO1FBQ3pDLE9BQU87WUFDTEMsUUFBUTtZQUNSQyxNQUFNLEdBQUdGLE1BQU1HLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDeEM7SUFDRjtJQUVBLEtBQUs7SUFDTEMsT0FBTyxFQUNMQyxRQUFRLEVBQ1JDLE9BQU8sRUFDUEMsYUFBYSxFQUN3QixFQUFFO1FBQ3ZDLE1BQU1QLFFBQVFKLGNBQWNZLGNBQWMsQ0FBQ0g7UUFFM0MsT0FBTztZQUNMLEdBQUcsSUFBSSxDQUFDTixnQkFBZ0IsQ0FBQ0MsTUFBTTtZQUMvQlMsTUFBTSxDQUFDOzs7Ozs7Ozs7OztTQVdKLEVBQUVULE1BQU1VLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRVYsTUFBTVcsRUFBRSxDQUFDLENBQUMsRUFDMURYLE1BQU1XLEVBQUUsQ0FDVDtBQUNQLEVBQUVKLGNBQWM7O3VDQUV1QixFQUMvQlAsTUFBTVUsT0FBTyxDQUNkLDBCQUEwQixFQUFFVixNQUFNVSxPQUFPLENBQUMsY0FBYyxFQUFFSixRQUN4RE0sR0FBRyxDQUFDLENBQUNDO2dCQUNKLE9BQU87b0JBQ0wsR0FBR0EsSUFBSUMsSUFBSSxDQUFDLFlBQVksRUFBRUQsSUFBSUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDdkMsQ0FBQyxJQUFJLEVBQUVGLElBQUlHLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ2pCLENBQUMsWUFBWSxFQUFFO3dCQUFDO3dCQUFTO3FCQUFPLENBQUNDLFFBQVEsQ0FBQ0osSUFBSUUsS0FBSyxNQUFNLE1BQU0sR0FBRyxDQUFDO2lCQUNwRSxDQUFDRyxJQUFJLENBQUM7WUFDVCxHQUNDQSxJQUFJLENBQUMsT0FBTzs7TUFFZixDQUFDLENBQUNDLElBQUk7WUFDTkMsWUFBWSxFQUFFO1FBQ2hCO0lBQ0Y7QUFDRiJ9
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19saXN0X2NvbHVtbnMudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfbGlzdF9jb2x1bW5zIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfbGlzdF9jb2x1bW5zXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvcGFnZXMvYWRtaW5cIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzUGx1cmFsfS9fY29sdW1ucy50c3hgLFxuICAgIH07XG4gIH1cblxuICAvLyDsu6zrn7xcbiAgcmVuZGVyKHsgZW50aXR5SWQsIGNvbHVtbnMsIGNvbHVtbkltcG9ydHMgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19saXN0X2NvbHVtbnNcIl0pIHtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcyksXG4gICAgICBib2R5OiBgXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtcbiAgU2VnbWVudCxcbiAgVGFibGUsXG4gIFRhYmxlUm93LFxuICBCdXR0b24sXG4gIExhYmVsLFxufSBmcm9tICdzZW1hbnRpYy11aS1yZWFjdCc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xuaW1wb3J0IHsgVEZDb2x1bW4gfSBmcm9tIFwic3JjL3R5cGVmcmFtZS9pc28tdHlwZXNcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRBIH0gZnJvbSBcInNyYy9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS5nZW5lcmF0ZWRcIjtcbiR7Y29sdW1uSW1wb3J0c31cblxuY29uc3QgY29sdW1uczogeyBba2V5IGluIEV4Y2x1ZGU8a2V5b2YgJHtcbiAgICAgICAgbmFtZXMuY2FwaXRhbFxuICAgICAgfVN1YnNldEEsICdpZCc+XTogVEZDb2x1bW48JHtuYW1lcy5jYXBpdGFsfVN1YnNldEE+IH0gPSB7JHtjb2x1bW5zXG4gICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBgJHtjb2wubmFtZX06IHsgbGFiZWw6IFwiJHtjb2wubGFiZWx9XCIsYCxcbiAgICAgICAgICAgIGB0YzogJHtjb2wudGN9LCBgLFxuICAgICAgICAgICAgYGNvbGxhcHNpbmc6ICR7W1wiVGl0bGVcIiwgXCJOYW1lXCJdLmluY2x1ZGVzKGNvbC5sYWJlbCkgPT09IGZhbHNlfSwgfWAsXG4gICAgICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIixcXG5cIil9fTtcbmV4cG9ydCBkZWZhdWx0IGNvbHVtbnM7XG4gICAgICBgLnRyaW0oKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJFbnRpdHlNYW5hZ2VyIiwiVGVtcGxhdGUiLCJUZW1wbGF0ZV9fdmlld19saXN0X2NvbHVtbnMiLCJnZXRUYXJnZXRBbmRQYXRoIiwibmFtZXMiLCJ0YXJnZXQiLCJwYXRoIiwiZnNQbHVyYWwiLCJyZW5kZXIiLCJlbnRpdHlJZCIsImNvbHVtbnMiLCJjb2x1bW5JbXBvcnRzIiwiZ2V0TmFtZXNGcm9tSWQiLCJib2R5IiwiY2FwaXRhbCIsImZzIiwibWFwIiwiY29sIiwibmFtZSIsImxhYmVsIiwidGMiLCJpbmNsdWRlcyIsImpvaW4iLCJ0cmltIiwiaW1wb3J0S2V5cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsYUFBYSxRQUFnQyxpQ0FBOEI7QUFFcEYsU0FBU0MsUUFBUSxRQUFRLGlCQUFjO0FBRXZDLE9BQU8sTUFBTUMsb0NBQW9DRDtJQUMvQyxhQUFjO1FBQ1osS0FBSyxDQUFDO0lBQ1I7SUFFQUUsaUJBQWlCQyxLQUF3QixFQUFFO1FBQ3pDLE9BQU87WUFDTEMsUUFBUTtZQUNSQyxNQUFNLEdBQUdGLE1BQU1HLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDeEM7SUFDRjtJQUVBLEtBQUs7SUFDTEMsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsYUFBYSxFQUF3QyxFQUFFO1FBQ2pGLE1BQU1QLFFBQVFKLGNBQWNZLGNBQWMsQ0FBQ0g7UUFFM0MsT0FBTztZQUNMLEdBQUcsSUFBSSxDQUFDTixnQkFBZ0IsQ0FBQ0MsTUFBTTtZQUMvQlMsTUFBTSxDQUFDOzs7Ozs7Ozs7OztTQVdKLEVBQUVULE1BQU1VLE9BQU8sQ0FBQyw2QkFBNkIsRUFBRVYsTUFBTVcsRUFBRSxDQUFDLENBQUMsRUFBRVgsTUFBTVcsRUFBRSxDQUFDO0FBQzdFLEVBQUVKLGNBQWM7O3VDQUV1QixFQUMvQlAsTUFBTVUsT0FBTyxDQUNkLDBCQUEwQixFQUFFVixNQUFNVSxPQUFPLENBQUMsY0FBYyxFQUFFSixRQUN4RE0sR0FBRyxDQUFDLENBQUNDO2dCQUNKLE9BQU87b0JBQ0wsR0FBR0EsSUFBSUMsSUFBSSxDQUFDLFlBQVksRUFBRUQsSUFBSUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDdkMsQ0FBQyxJQUFJLEVBQUVGLElBQUlHLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQ2pCLENBQUMsWUFBWSxFQUFFO3dCQUFDO3dCQUFTO3FCQUFPLENBQUNDLFFBQVEsQ0FBQ0osSUFBSUUsS0FBSyxNQUFNLE1BQU0sR0FBRyxDQUFDO2lCQUNwRSxDQUFDRyxJQUFJLENBQUM7WUFDVCxHQUNDQSxJQUFJLENBQUMsT0FBTzs7TUFFZixDQUFDLENBQUNDLElBQUk7WUFDTkMsWUFBWSxFQUFFO1FBQ2hCO0lBQ0Y7QUFDRiJ9
@@ -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__view_search_input extends Template {
5
5
  constructor();
@@ -1 +1 @@
1
- {"version":3,"file":"view_search_input.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_search_input.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;AAEvC,qBAAa,2BAA4B,SAAQ,QAAQ;;IAKvD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,mBAAmB,CAAC;;;;;;CAkD1D"}
1
+ {"version":3,"file":"view_search_input.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_search_input.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,2BAA4B,SAAQ,QAAQ;;IAKvD,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,mBAAmB,CAAC;;;;;;CAkD1D"}
@@ -61,4 +61,4 @@ export function ${names.capital}SearchInput({
61
61
  }
62
62
  }
63
63
 
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19zZWFyY2hfaW5wdXQudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19zZWFyY2hfaW5wdXQgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwidmlld19zZWFyY2hfaW5wdXRcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyYy9jb21wb25lbnRzXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc30vJHtuYW1lcy5jYXBpdGFsfVNlYXJjaElucHV0LnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7IGVudGl0eUlkIH06IFRlbXBsYXRlT3B0aW9uc1tcInZpZXdfc2VhcmNoX2lucHV0XCJdKSB7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IERyb3Bkb3duUHJvcHMsIElucHV0LCBJbnB1dFByb3BzIH0gZnJvbSBcInNlbWFudGljLXVpLXJlYWN0XCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2VhcmNoRmllbGREcm9wZG93biB9IGZyb20gXCJzcmMvY29tcG9uZW50cy8ke25hbWVzLmZzfS8ke25hbWVzLmNhcGl0YWx9U2VhcmNoRmllbGREcm9wZG93blwiO1xuXG5leHBvcnQgZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsfVNlYXJjaElucHV0KHtcbiAgaW5wdXQ6IHsgdmFsdWU6IGlucHV0VmFsdWUsIG9uQ2hhbmdlOiBpbnB1dE9uQ2hhbmdlLCAuLi5pbnB1dFByb3BzIH0sXG4gIGRyb3Bkb3duOiBkcm9wZG93blByb3BzLFxufToge1xuICBpbnB1dDogSW5wdXRQcm9wcztcbiAgZHJvcGRvd246IERyb3Bkb3duUHJvcHM7XG59KSB7XG4gIGNvbnN0IFtrZXl3b3JkLCBzZXRLZXl3b3JkXSA9IHVzZVN0YXRlPHN0cmluZz4oaW5wdXRWYWx1ZSA/PyAnJyk7XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiB7IGtleTogc3RyaW5nIH0pID0+IHtcbiAgICBpZiAoaW5wdXRPbkNoYW5nZSAmJiBlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgaW5wdXRPbkNoYW5nZShlIGFzIGFueSwge1xuICAgICAgICB2YWx1ZToga2V5d29yZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxJbnB1dFxuICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwi6rKA7IOJLi4uXCJcbiAgICAgIHN0eWxlPXt7IG1hcmdpbjogMCB9fVxuICAgICAgbGFiZWw9ezwke25hbWVzLmNhcGl0YWx9U2VhcmNoRmllbGREcm9wZG93biB7Li4uZHJvcGRvd25Qcm9wc30gLz59XG4gICAgICBsYWJlbFBvc2l0aW9uPVwibGVmdFwiXG4gICAgICBhY3Rpb249e3tcbiAgICAgICAgaWNvbjogJ3NlYXJjaCcsXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUtleURvd24oeyBrZXk6ICdFbnRlcicgfSksXG4gICAgICB9fVxuICAgICAgey4uLmlucHV0UHJvcHN9XG4gICAgICB2YWx1ZT17a2V5d29yZH1cbiAgICAgIG9uQ2hhbmdlPXsoZSwgeyB2YWx1ZSB9KSA9PiBzZXRLZXl3b3JkKHZhbHVlKX1cbiAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAvPlxuICApO1xufVxuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsiRW50aXR5TWFuYWdlciIsIlRlbXBsYXRlIiwiVGVtcGxhdGVfX3ZpZXdfc2VhcmNoX2lucHV0IiwiZ2V0VGFyZ2V0QW5kUGF0aCIsIm5hbWVzIiwidGFyZ2V0IiwicGF0aCIsImZzIiwiY2FwaXRhbCIsInJlbmRlciIsImVudGl0eUlkIiwiZ2V0TmFtZXNGcm9tSWQiLCJib2R5IiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUNBLFNBQVNBLGFBQWEsUUFBMkIsaUNBQThCO0FBQy9FLFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUV2QyxPQUFPLE1BQU1DLG9DQUFvQ0Q7SUFDL0MsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFFLGlCQUFpQkMsS0FBd0IsRUFBRTtRQUN6QyxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMsTUFBTSxHQUFHRixNQUFNRyxFQUFFLENBQUMsQ0FBQyxFQUFFSCxNQUFNSSxPQUFPLENBQUMsZUFBZSxDQUFDO1FBQ3JEO0lBQ0Y7SUFFQUMsT0FBTyxFQUFFQyxRQUFRLEVBQXdDLEVBQUU7UUFDekQsTUFBTU4sUUFBUUosY0FBY1csY0FBYyxDQUFDRDtRQUUzQyxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUNQLGdCQUFnQixDQUFDQyxNQUFNO1lBQy9CUSxNQUFNLENBQUM7Ozs7U0FJSixFQUFFUixNQUFNSSxPQUFPLENBQUMsMkNBQTJDLEVBQUVKLE1BQU1HLEVBQUUsQ0FBQyxDQUFDLEVBQUVILE1BQU1JLE9BQU8sQ0FBQzs7Z0JBRWhGLEVBQUVKLE1BQU1JLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztjQXNCbEIsRUFBRUosTUFBTUksT0FBTyxDQUFDOzs7Ozs7Ozs7Ozs7O01BYXhCLENBQUMsQ0FBQ0ssSUFBSTtZQUNOQyxZQUFZLEVBQUU7UUFDaEI7SUFDRjtBQUNGIn0=
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19zZWFyY2hfaW5wdXQudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfc2VhcmNoX2lucHV0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfc2VhcmNoX2lucHV0XCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvY29tcG9uZW50c1wiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnN9LyR7bmFtZXMuY2FwaXRhbH1TZWFyY2hJbnB1dC50c3hgLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X3NlYXJjaF9pbnB1dFwiXSkge1xuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93blByb3BzLCBJbnB1dCwgSW5wdXRQcm9wcyB9IGZyb20gXCJzZW1hbnRpYy11aS1yZWFjdFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNlYXJjaEZpZWxkRHJvcGRvd24gfSBmcm9tIFwic3JjL2NvbXBvbmVudHMvJHtuYW1lcy5mc30vJHtuYW1lcy5jYXBpdGFsfVNlYXJjaEZpZWxkRHJvcGRvd25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbH1TZWFyY2hJbnB1dCh7XG4gIGlucHV0OiB7IHZhbHVlOiBpbnB1dFZhbHVlLCBvbkNoYW5nZTogaW5wdXRPbkNoYW5nZSwgLi4uaW5wdXRQcm9wcyB9LFxuICBkcm9wZG93bjogZHJvcGRvd25Qcm9wcyxcbn06IHtcbiAgaW5wdXQ6IElucHV0UHJvcHM7XG4gIGRyb3Bkb3duOiBEcm9wZG93blByb3BzO1xufSkge1xuICBjb25zdCBba2V5d29yZCwgc2V0S2V5d29yZF0gPSB1c2VTdGF0ZTxzdHJpbmc+KGlucHV0VmFsdWUgPz8gJycpO1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogeyBrZXk6IHN0cmluZyB9KSA9PiB7XG4gICAgaWYgKGlucHV0T25DaGFuZ2UgJiYgZS5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGlucHV0T25DaGFuZ2UoZSBhcyBhbnksIHtcbiAgICAgICAgdmFsdWU6IGtleXdvcmQsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8SW5wdXRcbiAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICBwbGFjZWhvbGRlcj1cIuqygOyDiS4uLlwiXG4gICAgICBzdHlsZT17eyBtYXJnaW46IDAgfX1cbiAgICAgIGxhYmVsPXs8JHtuYW1lcy5jYXBpdGFsfVNlYXJjaEZpZWxkRHJvcGRvd24gey4uLmRyb3Bkb3duUHJvcHN9IC8+fVxuICAgICAgbGFiZWxQb3NpdGlvbj1cImxlZnRcIlxuICAgICAgYWN0aW9uPXt7XG4gICAgICAgIGljb246ICdzZWFyY2gnLFxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBoYW5kbGVLZXlEb3duKHsga2V5OiAnRW50ZXInIH0pLFxuICAgICAgfX1cbiAgICAgIHsuLi5pbnB1dFByb3BzfVxuICAgICAgdmFsdWU9e2tleXdvcmR9XG4gICAgICBvbkNoYW5nZT17KGUsIHsgdmFsdWUgfSkgPT4gc2V0S2V5d29yZCh2YWx1ZSl9XG4gICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgLz5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkVudGl0eU1hbmFnZXIiLCJUZW1wbGF0ZSIsIlRlbXBsYXRlX192aWV3X3NlYXJjaF9pbnB1dCIsImdldFRhcmdldEFuZFBhdGgiLCJuYW1lcyIsInRhcmdldCIsInBhdGgiLCJmcyIsImNhcGl0YWwiLCJyZW5kZXIiLCJlbnRpdHlJZCIsImdldE5hbWVzRnJvbUlkIiwiYm9keSIsInRyaW0iLCJpbXBvcnRLZXlzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxhQUFhLFFBQWdDLGlDQUE4QjtBQUVwRixTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFFdkMsT0FBTyxNQUFNQyxvQ0FBb0NEO0lBQy9DLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBRSxpQkFBaUJDLEtBQXdCLEVBQUU7UUFDekMsT0FBTztZQUNMQyxRQUFRO1lBQ1JDLE1BQU0sR0FBR0YsTUFBTUcsRUFBRSxDQUFDLENBQUMsRUFBRUgsTUFBTUksT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUNyRDtJQUNGO0lBRUFDLE9BQU8sRUFBRUMsUUFBUSxFQUF3QyxFQUFFO1FBQ3pELE1BQU1OLFFBQVFKLGNBQWNXLGNBQWMsQ0FBQ0Q7UUFFM0MsT0FBTztZQUNMLEdBQUcsSUFBSSxDQUFDUCxnQkFBZ0IsQ0FBQ0MsTUFBTTtZQUMvQlEsTUFBTSxDQUFDOzs7O1NBSUosRUFBRVIsTUFBTUksT0FBTyxDQUFDLDJDQUEyQyxFQUFFSixNQUFNRyxFQUFFLENBQUMsQ0FBQyxFQUFFSCxNQUFNSSxPQUFPLENBQUM7O2dCQUVoRixFQUFFSixNQUFNSSxPQUFPLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Y0FzQmxCLEVBQUVKLE1BQU1JLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7OztNQWF4QixDQUFDLENBQUNLLElBQUk7WUFDTkMsWUFBWSxFQUFFO1FBQ2hCO0lBQ0Y7QUFDRiJ9
@@ -1,5 +1,7 @@
1
- export * from "./template";
2
- export * from "./helpers";
3
1
  export * from "./entity-converter";
2
+ export * from "./helpers";
3
+ export * from "./template";
4
+ export * from "./template-manager";
5
+ export * from "./template-types";
4
6
  export * from "./zod-converter";
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/template/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/template/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
@@ -1,6 +1,8 @@
1
- export * from "./template.js";
2
- export * from "./helpers.js";
3
1
  export * from "./entity-converter.js";
2
+ export * from "./helpers.js";
3
+ export * from "./template.js";
4
+ export * from "./template-manager.js";
5
+ export * from "./template-types.js";
4
6
  export * from "./zod-converter.js";
5
7
 
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi90ZW1wbGF0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaGVscGVyc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW50aXR5LWNvbnZlcnRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vem9kLWNvbnZlcnRlclwiO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWE7QUFDM0IsY0FBYyxlQUFZO0FBQzFCLGNBQWMsd0JBQXFCO0FBQ25DLGNBQWMscUJBQWtCIn0=
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9lbnRpdHktY29udmVydGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9oZWxwZXJzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZW1wbGF0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGVtcGxhdGUtbWFuYWdlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGVtcGxhdGUtdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3pvZC1jb252ZXJ0ZXJcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUFxQjtBQUNuQyxjQUFjLGVBQVk7QUFDMUIsY0FBYyxnQkFBYTtBQUMzQixjQUFjLHdCQUFxQjtBQUNuQyxjQUFjLHNCQUFtQjtBQUNqQyxjQUFjLHFCQUFrQiJ9
@@ -0,0 +1,56 @@
1
+ import type { TemplateKey } from "../types/types";
2
+ import { Template } from "./template";
3
+ declare class TemplateManagerClass {
4
+ private templates;
5
+ isAutoloaded: boolean;
6
+ /**
7
+ * 빌트인 템플릿 로드 (implementations/*.template.js)
8
+ */
9
+ autoload(): Promise<void>;
10
+ /**
11
+ * 템플릿 다시 로드
12
+ */
13
+ reload(): Promise<void>;
14
+ /**
15
+ * 프로젝트 디렉토리에서 커스텀 템플릿 로드
16
+ */
17
+ loadFromDirectory(dir: string): Promise<number>;
18
+ private isTemplateClass;
19
+ /**
20
+ * 템플릿 등록
21
+ */
22
+ register(template: Template): void;
23
+ /**
24
+ * 여러 템플릿 등록
25
+ */
26
+ registerAll(templates: Template[]): void;
27
+ /**
28
+ * 템플릿 조회
29
+ * 빌트인 : 자동완성 지원
30
+ * 커스텀 : 임의 문자열 지원
31
+ */
32
+ get(key: TemplateKey | (string & {})): Template;
33
+ /**
34
+ * 템플릿 존재 여부
35
+ */
36
+ exists(key: string): boolean;
37
+ /**
38
+ * 모든 템플릿 키 목록
39
+ */
40
+ getAllKeys(): string[];
41
+ /**
42
+ * 등록된 템플릿 개수
43
+ */
44
+ get size(): number;
45
+ /**
46
+ * 모든 상태 초기화 (테스트용)
47
+ */
48
+ reset(): void;
49
+ /**
50
+ * 격리된 인스턴스 생성 (테스트용)
51
+ */
52
+ static createInstance(): TemplateManagerClass;
53
+ }
54
+ export declare const TemplateManager: TemplateManagerClass;
55
+ export { TemplateManagerClass };
56
+ //# sourceMappingURL=template-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-manager.d.ts","sourceRoot":"","sources":["../../src/template/template-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,cAAM,oBAAoB;IACxB,OAAO,CAAC,SAAS,CAAkD;IACnE,YAAY,EAAE,OAAO,CAAS;IAM9B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B/B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7B;;OAEG;IACG,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBrD,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAMlC;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;IAUxC;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,QAAQ;IAQ/C;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAMD;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,MAAM,CAAC,cAAc,IAAI,oBAAoB;CAG9C;AAED,eAAO,MAAM,eAAe,sBAA6B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,CAAC"}