sonamu 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/.swcrc.project-default +18 -0
  2. package/bin/cli.js +24 -0
  3. package/dist/ai/agents/agent.d.ts +11 -0
  4. package/dist/ai/agents/agent.d.ts.map +1 -0
  5. package/dist/ai/agents/agent.js +65 -0
  6. package/dist/ai/agents/index.d.ts +3 -0
  7. package/dist/ai/agents/index.d.ts.map +1 -0
  8. package/dist/ai/agents/index.js +4 -0
  9. package/dist/ai/agents/types.d.ts +43 -0
  10. package/dist/ai/agents/types.d.ts.map +1 -0
  11. package/dist/ai/agents/types.js +3 -0
  12. package/dist/ai/index.d.ts +2 -0
  13. package/dist/ai/index.d.ts.map +1 -0
  14. package/dist/ai/index.js +3 -0
  15. package/dist/ai/providers/rtzr/api.d.ts +22 -0
  16. package/dist/ai/providers/rtzr/api.d.ts.map +1 -0
  17. package/dist/ai/providers/rtzr/api.js +28 -0
  18. package/dist/ai/providers/rtzr/error.d.ts +18 -0
  19. package/dist/ai/providers/rtzr/error.d.ts.map +1 -0
  20. package/dist/ai/providers/rtzr/error.js +29 -0
  21. package/dist/ai/providers/rtzr/index.d.ts +5 -0
  22. package/dist/ai/providers/rtzr/index.d.ts.map +1 -0
  23. package/dist/ai/providers/rtzr/index.js +6 -0
  24. package/dist/ai/providers/rtzr/model.d.ts +52 -0
  25. package/dist/ai/providers/rtzr/model.d.ts.map +1 -0
  26. package/dist/ai/providers/rtzr/model.js +137 -0
  27. package/dist/ai/providers/rtzr/options.d.ts +7 -0
  28. package/dist/ai/providers/rtzr/options.d.ts.map +1 -0
  29. package/dist/ai/providers/rtzr/options.js +47 -0
  30. package/dist/ai/providers/rtzr/provider.d.ts +18 -0
  31. package/dist/ai/providers/rtzr/provider.d.ts.map +1 -0
  32. package/dist/ai/providers/rtzr/provider.js +54 -0
  33. package/dist/ai/providers/rtzr/utils.d.ts +19 -0
  34. package/dist/ai/providers/rtzr/utils.d.ts.map +1 -0
  35. package/dist/ai/providers/rtzr/utils.js +88 -0
  36. package/dist/api/base-frame.d.ts +2 -2
  37. package/dist/api/base-frame.d.ts.map +1 -1
  38. package/dist/api/base-frame.js +2 -1
  39. package/dist/api/caster.d.ts.map +1 -1
  40. package/dist/api/caster.js +6 -1
  41. package/dist/api/code-converters.d.ts +58 -14
  42. package/dist/api/code-converters.d.ts.map +1 -1
  43. package/dist/api/code-converters.js +178 -409
  44. package/dist/api/config.d.ts +27 -13
  45. package/dist/api/config.d.ts.map +1 -1
  46. package/dist/api/config.js +19 -26
  47. package/dist/api/context.d.ts +4 -3
  48. package/dist/api/context.d.ts.map +1 -1
  49. package/dist/api/context.js +1 -1
  50. package/dist/api/decorators.d.ts +20 -6
  51. package/dist/api/decorators.d.ts.map +1 -1
  52. package/dist/api/decorators.js +111 -18
  53. package/dist/api/index.d.ts +2 -2
  54. package/dist/api/index.d.ts.map +1 -1
  55. package/dist/api/index.js +3 -3
  56. package/dist/api/sonamu.d.ts +7 -7
  57. package/dist/api/sonamu.d.ts.map +1 -1
  58. package/dist/api/sonamu.js +83 -51
  59. package/dist/api/validator.d.ts +6 -0
  60. package/dist/api/validator.d.ts.map +1 -0
  61. package/dist/api/validator.js +81 -0
  62. package/dist/bin/build-config.d.ts +5 -1
  63. package/dist/bin/build-config.d.ts.map +1 -1
  64. package/dist/bin/build-config.js +5 -2
  65. package/dist/bin/cli.js +165 -64
  66. package/dist/bin/loader-register.d.ts +2 -0
  67. package/dist/bin/loader-register.d.ts.map +1 -0
  68. package/dist/bin/loader-register.js +34 -0
  69. package/dist/database/_batch_update.d.ts +5 -3
  70. package/dist/database/_batch_update.d.ts.map +1 -1
  71. package/dist/database/_batch_update.js +30 -13
  72. package/dist/database/base-model.d.ts +96 -10
  73. package/dist/database/base-model.d.ts.map +1 -1
  74. package/dist/database/base-model.js +232 -89
  75. package/dist/database/base-model.types.d.ts +93 -0
  76. package/dist/database/base-model.types.d.ts.map +1 -0
  77. package/dist/database/base-model.types.js +10 -0
  78. package/dist/database/code-generator.d.ts +1 -1
  79. package/dist/database/code-generator.d.ts.map +1 -1
  80. package/dist/database/code-generator.js +11 -10
  81. package/dist/database/db.d.ts +5 -6
  82. package/dist/database/db.d.ts.map +1 -1
  83. package/dist/database/db.js +22 -25
  84. package/dist/database/puri-subset.test-d.js +81 -0
  85. package/dist/database/puri-subset.types.d.ts +123 -0
  86. package/dist/database/puri-subset.types.d.ts.map +1 -0
  87. package/dist/database/puri-subset.types.js +16 -0
  88. package/dist/database/puri-wrapper.d.ts +13 -11
  89. package/dist/database/puri-wrapper.d.ts.map +1 -1
  90. package/dist/database/puri-wrapper.js +2 -2
  91. package/dist/database/puri.d.ts +25 -14
  92. package/dist/database/puri.d.ts.map +1 -1
  93. package/dist/database/puri.js +83 -21
  94. package/dist/database/puri.types.d.ts +21 -7
  95. package/dist/database/puri.types.d.ts.map +1 -1
  96. package/dist/database/puri.types.js +4 -1
  97. package/dist/database/transaction-context.d.ts +1 -1
  98. package/dist/database/transaction-context.d.ts.map +1 -1
  99. package/dist/database/transaction-context.js +1 -1
  100. package/dist/database/upsert-builder.d.ts +9 -3
  101. package/dist/database/upsert-builder.d.ts.map +1 -1
  102. package/dist/database/upsert-builder.js +228 -78
  103. package/dist/entity/entity-manager.d.ts +165 -2
  104. package/dist/entity/entity-manager.d.ts.map +1 -1
  105. package/dist/entity/entity-manager.js +26 -10
  106. package/dist/entity/entity.d.ts +5 -3
  107. package/dist/entity/entity.d.ts.map +1 -1
  108. package/dist/entity/entity.js +153 -54
  109. package/dist/exceptions/error-handler.d.ts +1 -1
  110. package/dist/exceptions/error-handler.d.ts.map +1 -1
  111. package/dist/exceptions/error-handler.js +1 -1
  112. package/dist/exceptions/so-exceptions.d.ts +1 -1
  113. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  114. package/dist/exceptions/so-exceptions.js +1 -1
  115. package/dist/file-storage/driver.d.ts +1 -1
  116. package/dist/file-storage/driver.d.ts.map +1 -1
  117. package/dist/file-storage/driver.js +1 -1
  118. package/dist/file-storage/file-storage.js +2 -2
  119. package/dist/index.d.ts +18 -11
  120. package/dist/index.d.ts.map +1 -1
  121. package/dist/index.js +19 -13
  122. package/dist/migration/code-generation.d.ts +1 -1
  123. package/dist/migration/code-generation.d.ts.map +1 -1
  124. package/dist/migration/code-generation.js +123 -67
  125. package/dist/migration/migration-set.d.ts +2 -10
  126. package/dist/migration/migration-set.d.ts.map +1 -1
  127. package/dist/migration/migration-set.js +67 -218
  128. package/dist/migration/migrator.d.ts +24 -73
  129. package/dist/migration/migrator.d.ts.map +1 -1
  130. package/dist/migration/migrator.js +121 -301
  131. package/dist/migration/postgresql-schema-reader.d.ts +51 -0
  132. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -0
  133. package/dist/migration/postgresql-schema-reader.js +245 -0
  134. package/dist/migration/types.d.ts +6 -38
  135. package/dist/migration/types.d.ts.map +1 -1
  136. package/dist/migration/types.js +1 -1
  137. package/dist/naite/messaging-types.d.ts +43 -0
  138. package/dist/naite/messaging-types.d.ts.map +1 -0
  139. package/dist/naite/messaging-types.js +7 -0
  140. package/dist/naite/naite-reporter.d.ts +41 -0
  141. package/dist/naite/naite-reporter.d.ts.map +1 -0
  142. package/dist/naite/naite-reporter.js +102 -0
  143. package/dist/naite/naite.d.ts +91 -8
  144. package/dist/naite/naite.d.ts.map +1 -1
  145. package/dist/naite/naite.js +285 -41
  146. package/dist/stream/sse.d.ts +2 -2
  147. package/dist/stream/sse.d.ts.map +1 -1
  148. package/dist/stream/sse.js +1 -1
  149. package/dist/syncer/api-parser.d.ts +3 -13
  150. package/dist/syncer/api-parser.d.ts.map +1 -1
  151. package/dist/syncer/api-parser.js +67 -56
  152. package/dist/syncer/checksum.d.ts +2 -2
  153. package/dist/syncer/checksum.d.ts.map +1 -1
  154. package/dist/syncer/checksum.js +11 -11
  155. package/dist/syncer/code-generator.d.ts +3 -3
  156. package/dist/syncer/code-generator.d.ts.map +1 -1
  157. package/dist/syncer/code-generator.js +37 -17
  158. package/dist/syncer/entity-operations.d.ts +2 -2
  159. package/dist/syncer/entity-operations.d.ts.map +1 -1
  160. package/dist/syncer/entity-operations.js +9 -8
  161. package/dist/syncer/file-patterns.d.ts +1 -1
  162. package/dist/syncer/file-patterns.d.ts.map +1 -1
  163. package/dist/syncer/file-patterns.js +1 -1
  164. package/dist/syncer/index.d.ts +4 -4
  165. package/dist/syncer/index.d.ts.map +1 -1
  166. package/dist/syncer/index.js +5 -5
  167. package/dist/syncer/module-loader.d.ts +4 -4
  168. package/dist/syncer/module-loader.d.ts.map +1 -1
  169. package/dist/syncer/module-loader.js +17 -12
  170. package/dist/syncer/syncer.d.ts +31 -24
  171. package/dist/syncer/syncer.d.ts.map +1 -1
  172. package/dist/syncer/syncer.js +92 -45
  173. package/dist/template/entity-converter.d.ts +1 -1
  174. package/dist/template/entity-converter.d.ts.map +1 -1
  175. package/dist/template/entity-converter.js +15 -8
  176. package/dist/template/helpers.d.ts +2 -2
  177. package/dist/template/helpers.d.ts.map +1 -1
  178. package/dist/template/helpers.js +3 -3
  179. package/dist/template/implementations/entity.template.d.ts +2 -2
  180. package/dist/template/implementations/entity.template.d.ts.map +1 -1
  181. package/dist/template/implementations/entity.template.js +4 -5
  182. package/dist/template/implementations/generated.template.d.ts +2 -3
  183. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  184. package/dist/template/implementations/generated.template.js +46 -29
  185. package/dist/template/implementations/generated_http.template.d.ts +2 -3
  186. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  187. package/dist/template/implementations/generated_http.template.js +9 -9
  188. package/dist/template/implementations/generated_sso.template.d.ts +3 -4
  189. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  190. package/dist/template/implementations/generated_sso.template.js +54 -25
  191. package/dist/template/implementations/init_types.template.d.ts +2 -2
  192. package/dist/template/implementations/init_types.template.d.ts.map +1 -1
  193. package/dist/template/implementations/init_types.template.js +2 -2
  194. package/dist/template/implementations/model.template.d.ts +2 -2
  195. package/dist/template/implementations/model.template.d.ts.map +1 -1
  196. package/dist/template/implementations/model.template.js +47 -37
  197. package/dist/template/implementations/model_test.template.d.ts +2 -2
  198. package/dist/template/implementations/model_test.template.d.ts.map +1 -1
  199. package/dist/template/implementations/model_test.template.js +2 -2
  200. package/dist/template/implementations/service.template.d.ts +4 -4
  201. package/dist/template/implementations/service.template.d.ts.map +1 -1
  202. package/dist/template/implementations/service.template.js +24 -16
  203. package/dist/template/implementations/view_enums_buttonset.template.d.ts +2 -2
  204. package/dist/template/implementations/view_enums_buttonset.template.d.ts.map +1 -1
  205. package/dist/template/implementations/view_enums_buttonset.template.js +1 -1
  206. package/dist/template/implementations/view_enums_dropdown.template.d.ts +2 -2
  207. package/dist/template/implementations/view_enums_dropdown.template.d.ts.map +1 -1
  208. package/dist/template/implementations/view_enums_dropdown.template.js +2 -2
  209. package/dist/template/implementations/view_enums_select.template.d.ts +2 -2
  210. package/dist/template/implementations/view_enums_select.template.d.ts.map +1 -1
  211. package/dist/template/implementations/view_enums_select.template.js +2 -2
  212. package/dist/template/implementations/view_form.template.d.ts +2 -2
  213. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  214. package/dist/template/implementations/view_form.template.js +4 -4
  215. package/dist/template/implementations/view_id_all_select.template.d.ts +2 -2
  216. package/dist/template/implementations/view_id_all_select.template.d.ts.map +1 -1
  217. package/dist/template/implementations/view_id_all_select.template.js +1 -1
  218. package/dist/template/implementations/view_id_async_select.template.d.ts +2 -2
  219. package/dist/template/implementations/view_id_async_select.template.d.ts.map +1 -1
  220. package/dist/template/implementations/view_id_async_select.template.js +1 -1
  221. package/dist/template/implementations/view_list.template.d.ts +2 -2
  222. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  223. package/dist/template/implementations/view_list.template.js +29 -19
  224. package/dist/template/implementations/view_list_columns.template.d.ts +3 -3
  225. package/dist/template/implementations/view_list_columns.template.d.ts.map +1 -1
  226. package/dist/template/implementations/view_list_columns.template.js +1 -1
  227. package/dist/template/implementations/view_search_input.template.d.ts +2 -2
  228. package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
  229. package/dist/template/implementations/view_search_input.template.js +1 -1
  230. package/dist/template/index.d.ts +4 -2
  231. package/dist/template/index.d.ts.map +1 -1
  232. package/dist/template/index.js +5 -3
  233. package/dist/template/template-manager.d.ts +56 -0
  234. package/dist/template/template-manager.d.ts.map +1 -0
  235. package/dist/template/template-manager.js +125 -0
  236. package/dist/template/template-types.d.ts +16 -0
  237. package/dist/template/template-types.d.ts.map +1 -0
  238. package/dist/template/template-types.js +7 -0
  239. package/dist/template/template.d.ts +12 -2
  240. package/dist/template/template.d.ts.map +1 -1
  241. package/dist/template/template.js +19 -6
  242. package/dist/template/zod-converter.d.ts +40 -7
  243. package/dist/template/zod-converter.d.ts.map +1 -1
  244. package/dist/template/zod-converter.js +341 -58
  245. package/dist/testing/_relation-graph.d.ts +1 -1
  246. package/dist/testing/_relation-graph.d.ts.map +1 -1
  247. package/dist/testing/_relation-graph.js +12 -3
  248. package/dist/testing/fixture-manager.d.ts +42 -11
  249. package/dist/testing/fixture-manager.d.ts.map +1 -1
  250. package/dist/testing/fixture-manager.js +338 -236
  251. package/dist/types/types.d.ts +709 -104
  252. package/dist/types/types.d.ts.map +1 -1
  253. package/dist/types/types.js +309 -52
  254. package/dist/typings/knex.d.js +2 -2
  255. package/dist/utils/async-utils.d.ts.map +1 -1
  256. package/dist/utils/async-utils.js +3 -3
  257. package/dist/utils/console-util.js +1 -1
  258. package/dist/utils/controller.d.ts +1 -0
  259. package/dist/utils/controller.d.ts.map +1 -1
  260. package/dist/utils/controller.js +4 -1
  261. package/dist/utils/esm-utils.d.ts +0 -6
  262. package/dist/utils/esm-utils.d.ts.map +1 -1
  263. package/dist/utils/esm-utils.js +2 -9
  264. package/dist/utils/formatter.d.ts +3 -0
  265. package/dist/utils/formatter.d.ts.map +1 -0
  266. package/dist/utils/formatter.js +110 -0
  267. package/dist/utils/fs-utils.d.ts +1 -1
  268. package/dist/utils/fs-utils.d.ts.map +1 -1
  269. package/dist/utils/fs-utils.js +1 -1
  270. package/dist/utils/lodash-able.d.ts.map +1 -1
  271. package/dist/utils/lodash-able.js +1 -1
  272. package/dist/utils/object-utils.d.ts +44 -0
  273. package/dist/utils/object-utils.d.ts.map +1 -0
  274. package/dist/utils/object-utils.js +191 -0
  275. package/dist/utils/path-utils.d.ts +1 -1
  276. package/dist/utils/path-utils.d.ts.map +1 -1
  277. package/dist/utils/path-utils.js +3 -3
  278. package/dist/utils/process-utils.js +1 -1
  279. package/dist/utils/sql-parser.d.ts +5 -1
  280. package/dist/utils/sql-parser.d.ts.map +1 -1
  281. package/dist/utils/sql-parser.js +14 -3
  282. package/dist/utils/type-utils.d.ts +23 -0
  283. package/dist/utils/type-utils.d.ts.map +1 -0
  284. package/dist/utils/type-utils.js +45 -0
  285. package/dist/utils/utils.d.ts +7 -1
  286. package/dist/utils/utils.d.ts.map +1 -1
  287. package/dist/utils/utils.js +44 -5
  288. package/dist/utils/zod-error.d.ts +1 -1
  289. package/dist/utils/zod-error.d.ts.map +1 -1
  290. package/dist/utils/zod-error.js +1 -1
  291. package/package.json +54 -29
  292. package/src/ai/agents/agent.ts +87 -0
  293. package/src/ai/agents/index.ts +2 -0
  294. package/src/ai/agents/types.ts +47 -0
  295. package/src/ai/index.ts +1 -0
  296. package/src/ai/providers/rtzr/api.ts +37 -0
  297. package/src/ai/providers/rtzr/error.ts +34 -0
  298. package/src/ai/providers/rtzr/index.ts +4 -0
  299. package/src/ai/providers/rtzr/model.ts +201 -0
  300. package/src/ai/providers/rtzr/options.ts +49 -0
  301. package/src/ai/providers/rtzr/provider.ts +91 -0
  302. package/src/ai/providers/rtzr/utils.ts +127 -0
  303. package/src/api/base-frame.ts +4 -2
  304. package/src/api/caster.ts +17 -23
  305. package/src/api/code-converters.ts +176 -533
  306. package/src/api/config.ts +39 -56
  307. package/src/api/context.ts +7 -18
  308. package/src/api/decorators.ts +175 -46
  309. package/src/api/index.ts +2 -2
  310. package/src/api/sonamu.ts +133 -124
  311. package/src/api/validator.ts +83 -0
  312. package/src/bin/build-config.ts +7 -1
  313. package/src/bin/cli.ts +192 -110
  314. package/src/bin/loader-register.ts +38 -0
  315. package/src/database/_batch_update.ts +46 -31
  316. package/src/database/base-model.ts +390 -182
  317. package/src/database/base-model.types.ts +155 -0
  318. package/src/database/code-generator.ts +13 -32
  319. package/src/database/db.ts +36 -50
  320. package/src/database/puri-subset.test-d.ts +471 -0
  321. package/src/database/puri-subset.types.ts +195 -0
  322. package/src/database/puri-wrapper.ts +58 -67
  323. package/src/database/puri.ts +182 -126
  324. package/src/database/puri.types.ts +64 -31
  325. package/src/database/transaction-context.ts +1 -1
  326. package/src/database/upsert-builder.ts +262 -132
  327. package/src/entity/entity-manager.ts +36 -28
  328. package/src/entity/entity.ts +330 -249
  329. package/src/exceptions/error-handler.ts +3 -3
  330. package/src/exceptions/so-exceptions.ts +11 -11
  331. package/src/file-storage/driver.ts +5 -5
  332. package/src/file-storage/file-storage.ts +2 -2
  333. package/src/index.ts +18 -12
  334. package/src/migration/code-generation.ts +185 -172
  335. package/src/migration/migration-set.ts +80 -293
  336. package/src/migration/migrator.ts +182 -425
  337. package/src/migration/mysql-schema-reader.ts.txt +272 -0
  338. package/src/migration/postgresql-schema-reader.ts +310 -0
  339. package/src/migration/types.ts +6 -39
  340. package/src/naite/messaging-types.ts +51 -0
  341. package/src/naite/naite-reporter.ts +128 -0
  342. package/src/naite/naite.ts +378 -33
  343. package/src/shared/web.shared.ts.txt +20 -24
  344. package/src/stream/sse.ts +5 -5
  345. package/src/syncer/api-parser.ts +52 -69
  346. package/src/syncer/checksum.ts +25 -37
  347. package/src/syncer/code-generator.ts +58 -62
  348. package/src/syncer/entity-operations.ts +12 -15
  349. package/src/syncer/file-patterns.ts +2 -2
  350. package/src/syncer/index.ts +4 -4
  351. package/src/syncer/module-loader.ts +28 -25
  352. package/src/syncer/syncer.ts +155 -162
  353. package/src/template/entity-converter.ts +18 -27
  354. package/src/template/helpers.ts +8 -11
  355. package/src/template/implementations/entity.template.ts +6 -6
  356. package/src/template/implementations/generated.template.ts +99 -99
  357. package/src/template/implementations/generated_http.template.ts +21 -54
  358. package/src/template/implementations/generated_sso.template.ts +78 -65
  359. package/src/template/implementations/init_types.template.ts +4 -6
  360. package/src/template/implementations/model.template.ts +47 -38
  361. package/src/template/implementations/model_test.template.ts +3 -3
  362. package/src/template/implementations/service.template.ts +56 -80
  363. package/src/template/implementations/view_enums_buttonset.template.ts +2 -2
  364. package/src/template/implementations/view_enums_dropdown.template.ts +4 -4
  365. package/src/template/implementations/view_enums_select.template.ts +3 -3
  366. package/src/template/implementations/view_form.template.ts +34 -75
  367. package/src/template/implementations/view_id_all_select.template.ts +2 -2
  368. package/src/template/implementations/view_id_async_select.template.ts +9 -23
  369. package/src/template/implementations/view_list.template.ts +54 -95
  370. package/src/template/implementations/view_list_columns.template.ts +4 -10
  371. package/src/template/implementations/view_search_input.template.ts +2 -2
  372. package/src/template/index.ts +4 -2
  373. package/src/template/template-manager.ts +166 -0
  374. package/src/template/template-types.ts +16 -0
  375. package/src/template/template.ts +29 -10
  376. package/src/template/zod-converter.ts +407 -101
  377. package/src/testing/_relation-graph.ts +18 -11
  378. package/src/testing/fixture-manager.ts +468 -362
  379. package/src/types/types.ts +516 -248
  380. package/src/typings/knex.d.ts +7 -9
  381. package/src/utils/async-utils.ts +8 -12
  382. package/src/utils/console-util.ts +1 -1
  383. package/src/utils/controller.ts +3 -0
  384. package/src/utils/esm-utils.ts +8 -18
  385. package/src/utils/formatter.ts +109 -0
  386. package/src/utils/fs-utils.ts +1 -1
  387. package/src/utils/lodash-able.ts +1 -4
  388. package/src/utils/object-utils.ts +217 -0
  389. package/src/utils/path-utils.ts +3 -6
  390. package/src/utils/process-utils.ts +1 -1
  391. package/src/utils/sql-parser.ts +23 -5
  392. package/src/utils/type-utils.ts +83 -0
  393. package/src/utils/utils.ts +58 -9
  394. package/src/utils/zod-error.ts +3 -3
  395. package/dist/bin/cli-wrapper.d.ts +0 -3
  396. package/dist/bin/cli-wrapper.d.ts.map +0 -1
  397. package/dist/bin/cli-wrapper.js +0 -72
  398. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts +0 -2
  399. package/dist/database/knex-plugins/knex-on-duplicate-update.d.ts.map +0 -1
  400. package/dist/database/knex-plugins/knex-on-duplicate-update.js +0 -39
  401. package/dist/entity/entity-utils.d.ts +0 -61
  402. package/dist/entity/entity-utils.d.ts.map +0 -1
  403. package/dist/entity/entity-utils.js +0 -210
  404. package/src/bin/cli-wrapper.ts +0 -82
  405. package/src/database/knex-plugins/knex-on-duplicate-update.ts +0 -45
  406. package/src/entity/entity-utils.ts +0 -291
@@ -1,8 +1,9 @@
1
+ import assert from "assert";
1
2
  import { readFile } from "node:fs/promises";
3
+ import inflection from "inflection";
2
4
  import ts from "typescript";
3
5
  import { registeredApis } from "../api/decorators.js";
4
- import inflection from "inflection";
5
- import assert from "assert";
6
+ import { validateMethodName } from "../api/validator.js";
6
7
  /**
7
8
  * TypeScript 파일을 파싱하여 API 메소드 정보를 추출합니다.
8
9
  * @api 데코레이터가 붙은 메소드들의 타입 정보를 분석합니다.
@@ -25,6 +26,7 @@ import assert from "assert";
25
26
  if (ts.isMethodDeclaration(node)) {
26
27
  if (ts.isIdentifier(node.name)) {
27
28
  methodName = node.name.escapedText.toString();
29
+ validateMethodName(methodName);
28
30
  }
29
31
  const typeParameters = (node.typeParameters ?? []).map((typeParam)=>{
30
32
  const tp = typeParam;
@@ -75,11 +77,14 @@ import assert from "assert";
75
77
  // 등록된 API에 현재 메소드 타입 정보 확장
76
78
  const extendedApis = currentModelApis.map((api)=>{
77
79
  const foundMethod = methods.find((method)=>method.modelName === api.modelName && method.methodName === api.methodName);
80
+ if (!foundMethod) {
81
+ throw new Error(`API ${api.modelName}.${api.methodName} not found in ${filePath}`);
82
+ }
78
83
  return {
79
84
  ...api,
80
- typeParameters: foundMethod.typeParameters,
81
- parameters: foundMethod.parameters,
82
- returnType: foundMethod.returnType
85
+ typeParameters: foundMethod?.typeParameters,
86
+ parameters: foundMethod?.parameters,
87
+ returnType: foundMethod?.returnType
83
88
  };
84
89
  });
85
90
  return extendedApis;
@@ -103,61 +108,67 @@ function resolveTypeNode(typeNode) {
103
108
  case ts.SyntaxKind.VoidKeyword:
104
109
  return "void";
105
110
  case ts.SyntaxKind.LiteralType:
106
- const literal = typeNode.literal;
107
- if (ts.isStringLiteral(literal)) {
111
+ {
112
+ const literal = typeNode.literal;
113
+ if (ts.isStringLiteral(literal)) {
114
+ return {
115
+ t: "string-literal",
116
+ value: literal.text
117
+ };
118
+ } else if (ts.isNumericLiteral(literal)) {
119
+ return {
120
+ t: "numeric-literal",
121
+ value: Number(literal.text)
122
+ };
123
+ } else {
124
+ if (literal.kind === ts.SyntaxKind.NullKeyword) {
125
+ return "null";
126
+ } else if (literal.kind === ts.SyntaxKind.UndefinedKeyword) {
127
+ return "undefined";
128
+ } else if (literal.kind === ts.SyntaxKind.TrueKeyword) {
129
+ return "true";
130
+ } else if (literal.kind === ts.SyntaxKind.FalseKeyword) {
131
+ return "false";
132
+ }
133
+ throw new Error("알 수 없는 리터럴");
134
+ }
135
+ }
136
+ case ts.SyntaxKind.ArrayType:
137
+ {
138
+ const arrNode = typeNode;
108
139
  return {
109
- t: "string-literal",
110
- value: literal.text
140
+ t: "array",
141
+ elementsType: resolveTypeNode(arrNode.elementType)
111
142
  };
112
- } else if (ts.isNumericLiteral(literal)) {
143
+ }
144
+ case ts.SyntaxKind.TypeLiteral:
145
+ {
146
+ const literalNode = typeNode;
113
147
  return {
114
- t: "numeric-literal",
115
- value: Number(literal.text)
148
+ t: "object",
149
+ props: literalNode.members.map((member)=>{
150
+ if (ts.isIndexSignatureDeclaration(member)) {
151
+ assert(member.parameters[0]);
152
+ const res = resolveParamDec({
153
+ name: member.parameters[0].name,
154
+ type: member.parameters[0].type
155
+ });
156
+ return resolveParamDec({
157
+ name: {
158
+ escapedText: `[${res.name}${res.optional ? "?" : ""}: ${res.type}]`
159
+ },
160
+ type: member.type
161
+ });
162
+ } else {
163
+ return resolveParamDec({
164
+ name: member.name,
165
+ type: member.type,
166
+ optional: member.questionToken !== undefined
167
+ });
168
+ }
169
+ })
116
170
  };
117
- } else {
118
- if (literal.kind === ts.SyntaxKind.NullKeyword) {
119
- return "null";
120
- } else if (literal.kind === ts.SyntaxKind.UndefinedKeyword) {
121
- return "undefined";
122
- } else if (literal.kind === ts.SyntaxKind.TrueKeyword) {
123
- return "true";
124
- } else if (literal.kind === ts.SyntaxKind.FalseKeyword) {
125
- return "false";
126
- }
127
- throw new Error("알 수 없는 리터럴");
128
171
  }
129
- case ts.SyntaxKind.ArrayType:
130
- const arrNode = typeNode;
131
- return {
132
- t: "array",
133
- elementsType: resolveTypeNode(arrNode.elementType)
134
- };
135
- case ts.SyntaxKind.TypeLiteral:
136
- const literalNode = typeNode;
137
- return {
138
- t: "object",
139
- props: literalNode.members.map((member)=>{
140
- if (ts.isIndexSignatureDeclaration(member)) {
141
- assert(member.parameters[0]);
142
- const res = resolveParamDec({
143
- name: member.parameters[0].name,
144
- type: member.parameters[0].type
145
- });
146
- return resolveParamDec({
147
- name: {
148
- escapedText: `[${res.name}${res.optional ? "?" : ""}: ${res.type}]`
149
- },
150
- type: member.type
151
- });
152
- } else {
153
- return resolveParamDec({
154
- name: member.name,
155
- type: member.type,
156
- optional: member.questionToken !== undefined
157
- });
158
- }
159
- })
160
- };
161
172
  case ts.SyntaxKind.TypeReference:
162
173
  return {
163
174
  t: "ref",
@@ -226,4 +237,4 @@ function printNode(node, sourceFile) {
226
237
  return printer.printNode(ts.EmitHint.Unspecified, node, sourceFile);
227
238
  }
228
239
 
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvYXBpLXBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlQYXJhbSwgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcbmltcG9ydCB7IEV4dGVuZGVkQXBpLCByZWdpc3RlcmVkQXBpcyB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcblxuLyoqXG4gKiBUeXBlU2NyaXB0IO2MjOydvOydhCDtjIzsi7HtlZjsl6wgQVBJIOuplOyGjOuTnCDsoJXrs7Trpbwg7LaU7Lac7ZWp64uI64ukLlxuICogQGFwaSDrjbDsvZTroIjsnbTthLDqsIAg67aZ7J2AIOuplOyGjOuTnOuTpOydmCDtg4DsnoUg7KCV67O066W8IOu2hOyEne2VqeuLiOuLpC5cbiAqIEBwYXJhbSBmaWxlUGF0aCAtIO2MjOyLse2VoCBUeXBlU2NyaXB0IO2MjOydvOydmCDsoIjrjIAg6rK966GcXG4gKiBAcmV0dXJucyBBUEkg66mU7IaM65OcIOygleuztCDrsLDsl7QgKO2DgOyehSDtjIzrnbzrr7jthLAsIO2MjOudvOuvuO2EsCwg66as7YS0IO2DgOyehSDrk7EpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQXBpc0Zyb21GaWxlKGZpbGVQYXRoOiBBYnNvbHV0ZVBhdGgpIHtcbiAgaWYgKCFmaWxlUGF0aC5lbmRzV2l0aChcIi50c1wiKSkgeyBcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZmlsZVBhdGh9IGRvZXMgbm90IHNlZW0gdG8gYmUgYSBUeXBlU2NyaXB0IGZpbGUuIFBsZWFzZSBjaGVjayB0aGUgZmlsZSBwYXRoLiBXZSBvbmx5IHN1cHBvcnQgcGFyc2luZyBUeXBlU2NyaXB0IGZpbGVzLmApO1xuICB9XG4gIFxuICBjb25zdCBzb3VyY2VGaWxlID0gdHMuY3JlYXRlU291cmNlRmlsZShcbiAgICBmaWxlUGF0aCxcbiAgICAoYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgpKS50b1N0cmluZygpLFxuICAgIHRzLlNjcmlwdFRhcmdldC5MYXRlc3RcbiAgKTtcblxuICBjb25zdCBtZXRob2RzOiBPbWl0PEV4dGVuZGVkQXBpLCBcInBhdGhcIiB8IFwib3B0aW9uc1wiPltdID0gW107XG4gIGxldCBtb2RlbE5hbWU6IHN0cmluZyA9IFwiVW5rbm93bk1vZGVsXCI7XG4gIGxldCBtZXRob2ROYW1lOiBzdHJpbmcgPSBcInVua25vd25NZXRob2RcIjtcbiAgY29uc3QgdmlzaXRvciA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgaWYgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgaWYgKG5vZGUubmFtZSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtb2RlbE5hbWUgPSBub2RlLm5hbWUuZXNjYXBlZFRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9DbGFzcyQvLCBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtZXRob2ROYW1lID0gbm9kZS5uYW1lLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzOiBBcGlQYXJhbVR5cGUuVHlwZVBhcmFtW10gPSAoXG4gICAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMgPz8gW11cbiAgICAgICkubWFwKCh0eXBlUGFyYW0pID0+IHtcbiAgICAgICAgY29uc3QgdHAgPSB0eXBlUGFyYW0gYXMgdHMuVHlwZVBhcmFtZXRlckRlY2xhcmF0aW9uO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdDogXCJ0eXBlLXBhcmFtXCIsXG4gICAgICAgICAgaWQ6IHRwLm5hbWUuZXNjYXBlZFRleHQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjb25zdHJhaW50OiB0cC5jb25zdHJhaW50XG4gICAgICAgICAgICA/IHJlc29sdmVUeXBlTm9kZSh0cC5jb25zdHJhaW50KVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IEFwaVBhcmFtW10gPSBub2RlLnBhcmFtZXRlcnMubWFwKChwYXJhbURlYywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZGVmYXVsdERlZiA9IHByaW50Tm9kZShwYXJhbURlYy5pbml0aWFsaXplciwgc291cmNlRmlsZSk7XG5cbiAgICAgICAgLy8g6riw67O46rCS7J20IOyeiOuKlCDqsr3smrAgcGFyYW1EZWMudHlwZeqwgCB1bmRlZmluZWTroZwg64KY7Ji0XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBwYXJhbURlYy5uYW1lLFxuICAgICAgICAgICAgdHlwZTogcGFyYW1EZWMudHlwZSBhcyB0cy5UeXBlTm9kZSxcbiAgICAgICAgICAgIG9wdGlvbmFsOlxuICAgICAgICAgICAgICBwYXJhbURlYy5xdWVzdGlvblRva2VuICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgcGFyYW1EZWMuaW5pdGlhbGl6ZXIgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHREZWYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmRleFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBpZiAobm9kZS50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGDrpqzthLQg7YOA7J6F7J20IOq4sOyerOuQmOyngCDslYrsnYAg66mU7IaM65OcICR7bW9kZWxOYW1lfS4ke21ldGhvZE5hbWV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmV0dXJuVHlwZSA9IHJlc29sdmVUeXBlTm9kZShub2RlLnR5cGUhKTtcblxuICAgICAgbWV0aG9kcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICB0eXBlUGFyYW1ldGVycyxcbiAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgcmV0dXJuVHlwZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXRvcik7XG4gIH07XG4gIHZpc2l0b3Ioc291cmNlRmlsZSk7XG5cbiAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8g7ZiE7J6sIO2MjOydvOydmCDrk7HroZ3rkJwgQVBJIO2VhO2EsFxuICBjb25zdCBjdXJyZW50TW9kZWxBcGlzID0gcmVnaXN0ZXJlZEFwaXMuZmlsdGVyKChhcGkpID0+IHtcbiAgICByZXR1cm4gbWV0aG9kcy5maW5kKFxuICAgICAgKG1ldGhvZCkgPT5cbiAgICAgICAgbWV0aG9kLm1vZGVsTmFtZSA9PT0gYXBpLm1vZGVsTmFtZSAmJlxuICAgICAgICBtZXRob2QubWV0aG9kTmFtZSA9PT0gYXBpLm1ldGhvZE5hbWVcbiAgICApO1xuICB9KTtcbiAgaWYgKGN1cnJlbnRNb2RlbEFwaXMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gY29uc3QgcCA9IHBhdGguam9pbih0bXBkaXIoKSwgXCJzb25hbXUtc3luY2VyLWVycm9yLmpzb25cIik7XG4gICAgLy8gd3JpdGVGaWxlU3luYyhwLCBKU09OLnN0cmluZ2lmeShyZWdpc3RlcmVkQXBpcywgbnVsbCwgMikpO1xuICAgIC8vIGV4ZWNTeW5jKGBvcGVuICR7cH1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYO2YhOyerCDtjIzsnbzsl5Ag7IKs7KCEIOuTseuhneuQnCBBUEnqsIAg7JeG7Iq164uI64ukLiAke2ZpbGVQYXRofWApO1xuICB9XG5cbiAgLy8g65Ox66Gd65CcIEFQSeyXkCDtmITsnqwg66mU7IaM65OcIO2DgOyehSDsoJXrs7Qg7ZmV7J6lXG4gIGNvbnN0IGV4dGVuZGVkQXBpcyA9IGN1cnJlbnRNb2RlbEFwaXMubWFwKChhcGkpID0+IHtcbiAgICBjb25zdCBmb3VuZE1ldGhvZCA9IG1ldGhvZHMuZmluZChcbiAgICAgIChtZXRob2QpID0+XG4gICAgICAgIG1ldGhvZC5tb2RlbE5hbWUgPT09IGFwaS5tb2RlbE5hbWUgJiZcbiAgICAgICAgbWV0aG9kLm1ldGhvZE5hbWUgPT09IGFwaS5tZXRob2ROYW1lXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXBpLFxuICAgICAgdHlwZVBhcmFtZXRlcnM6IGZvdW5kTWV0aG9kIS50eXBlUGFyYW1ldGVycyxcbiAgICAgIHBhcmFtZXRlcnM6IGZvdW5kTWV0aG9kIS5wYXJhbWV0ZXJzLFxuICAgICAgcmV0dXJuVHlwZTogZm91bmRNZXRob2QhLnJldHVyblR5cGUsXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBleHRlbmRlZEFwaXM7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVUeXBlTm9kZSh0eXBlTm9kZTogdHMuVHlwZU5vZGUpOiBBcGlQYXJhbVR5cGUge1xuICBzd2l0Y2ggKHR5cGVOb2RlPy5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkFueUtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJhbnlcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVW5rbm93bktleXdvcmQ6XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlN0cmluZ0tleXdvcmQ6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVtYmVyS2V5d29yZDpcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Cb29sZWFuS2V5d29yZDpcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZDpcbiAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OdWxsS2V5d29yZDpcbiAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVm9pZEtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJ2b2lkXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkxpdGVyYWxUeXBlOlxuICAgICAgY29uc3QgbGl0ZXJhbCA9ICh0eXBlTm9kZSBhcyB0cy5MaXRlcmFsVHlwZU5vZGUpLmxpdGVyYWw7XG4gICAgICBpZiAodHMuaXNTdHJpbmdMaXRlcmFsKGxpdGVyYWwpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdDogXCJzdHJpbmctbGl0ZXJhbFwiLFxuICAgICAgICAgIHZhbHVlOiBsaXRlcmFsLnRleHQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHRzLmlzTnVtZXJpY0xpdGVyYWwobGl0ZXJhbCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0OiBcIm51bWVyaWMtbGl0ZXJhbFwiLFxuICAgICAgICAgIHZhbHVlOiBOdW1iZXIobGl0ZXJhbC50ZXh0KSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgfSBlbHNlIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuVHJ1ZUtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJ0cnVlXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLkZhbHNlS2V5d29yZCkge1xuICAgICAgICAgIHJldHVybiBcImZhbHNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi7JWMIOyImCDsl4bripQg66as7YSw65+0XCIpO1xuICAgICAgfVxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJheVR5cGU6XG4gICAgICBjb25zdCBhcnJOb2RlID0gdHlwZU5vZGUgYXMgdHMuQXJyYXlUeXBlTm9kZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwiYXJyYXlcIixcbiAgICAgICAgZWxlbWVudHNUeXBlOiByZXNvbHZlVHlwZU5vZGUoYXJyTm9kZS5lbGVtZW50VHlwZSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlTGl0ZXJhbDpcbiAgICAgIGNvbnN0IGxpdGVyYWxOb2RlID0gdHlwZU5vZGUgYXMgdHMuVHlwZUxpdGVyYWxOb2RlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcHM6IGxpdGVyYWxOb2RlLm1lbWJlcnMubWFwKChtZW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAodHMuaXNJbmRleFNpZ25hdHVyZURlY2xhcmF0aW9uKG1lbWJlcikpIHtcbiAgICAgICAgICAgIGFzc2VydChtZW1iZXIucGFyYW1ldGVyc1swXSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSByZXNvbHZlUGFyYW1EZWMoe1xuICAgICAgICAgICAgICBuYW1lOiBtZW1iZXIucGFyYW1ldGVyc1swXS5uYW1lIGFzIHRzLklkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHR5cGU6IG1lbWJlci5wYXJhbWV0ZXJzWzBdLnR5cGUgYXMgdHMuVHlwZU5vZGUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyh7XG4gICAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkVGV4dDogYFske3Jlcy5uYW1lfSR7cmVzLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHtcbiAgICAgICAgICAgICAgICAgIHJlcy50eXBlXG4gICAgICAgICAgICAgICAgfV1gLFxuICAgICAgICAgICAgICB9IGFzIHRzLklkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHR5cGU6IG1lbWJlci50eXBlIGFzIHRzLlR5cGVOb2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlUGFyYW1EZWMoe1xuICAgICAgICAgICAgICBuYW1lOiAobWVtYmVyIGFzIHRzLlByb3BlcnR5U2lnbmF0dXJlKS5uYW1lIGFzIHRzLklkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHR5cGU6IChtZW1iZXIgYXMgdHMuUHJvcGVydHlTaWduYXR1cmUpLnR5cGUgYXMgdHMuVHlwZU5vZGUsXG4gICAgICAgICAgICAgIG9wdGlvbmFsOlxuICAgICAgICAgICAgICAgIChtZW1iZXIgYXMgdHMuUHJvcGVydHlTaWduYXR1cmUpLnF1ZXN0aW9uVG9rZW4gIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlUmVmZXJlbmNlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJyZWZcIixcbiAgICAgICAgaWQ6IChcbiAgICAgICAgICAodHlwZU5vZGUgYXMgdHMuVHlwZVJlZmVyZW5jZU5vZGUpLnR5cGVOYW1lIGFzIHRzLklkZW50aWZpZXJcbiAgICAgICAgKS5lc2NhcGVkVGV4dC50b1N0cmluZygpLFxuICAgICAgICBhcmdzOiAodHlwZU5vZGUgYXMgdHMuVHlwZVJlZmVyZW5jZU5vZGUpLnR5cGVBcmd1bWVudHM/Lm1hcCgodHlwZUFyZykgPT5cbiAgICAgICAgICByZXNvbHZlVHlwZU5vZGUodHlwZUFyZylcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVuaW9uVHlwZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwidW5pb25cIixcbiAgICAgICAgdHlwZXM6ICh0eXBlTm9kZSBhcyB0cy5VbmlvblR5cGVOb2RlKS50eXBlcy5tYXAoKHR5cGUpID0+XG4gICAgICAgICAgcmVzb2x2ZVR5cGVOb2RlKHR5cGUpXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbnRlcnNlY3Rpb25UeXBlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgdHlwZXM6ICh0eXBlTm9kZSBhcyB0cy5JbnRlcnNlY3Rpb25UeXBlTm9kZSkudHlwZXMubWFwKCh0eXBlKSA9PlxuICAgICAgICAgIHJlc29sdmVUeXBlTm9kZSh0eXBlKVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW5kZXhlZEFjY2Vzc1R5cGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0OiBcImluZGV4ZWQtYWNjZXNzXCIsXG4gICAgICAgIG9iamVjdDogcmVzb2x2ZVR5cGVOb2RlKFxuICAgICAgICAgICh0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGUpLm9iamVjdFR5cGVcbiAgICAgICAgKSxcbiAgICAgICAgaW5kZXg6IHJlc29sdmVUeXBlTm9kZShcbiAgICAgICAgICAodHlwZU5vZGUgYXMgdHMuSW5kZXhlZEFjY2Vzc1R5cGVOb2RlKS5pbmRleFR5cGVcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR1cGxlVHlwZTpcbiAgICAgIGlmICh0cy5pc1R1cGxlVHlwZU5vZGUodHlwZU5vZGUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdDogXCJ0dXBsZS10eXBlXCIsXG4gICAgICAgICAgZWxlbWVudHM6IHR5cGVOb2RlLmVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gcmVzb2x2ZVR5cGVOb2RlKGVsZW0pKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0eXBlTm9kZSB1bmRlZmluZWRgKTtcbiAgfVxuXG4gIGNvbnNvbGUuZGVidWcodHlwZU5vZGUpO1xuICB0aHJvdyBuZXcgRXJyb3IoYOyVjCDsiJgg7JeG64qUIFN5bnRheEtpbmQgJHt0eXBlTm9kZS5raW5kfWApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlUGFyYW1EZWMoXG4gIHBhcmFtRGVjOiB7XG4gICAgbmFtZTogdHMuQmluZGluZ05hbWU7XG4gICAgdHlwZTogdHMuVHlwZU5vZGU7XG4gICAgb3B0aW9uYWw/OiBib29sZWFuO1xuICAgIGRlZmF1bHREZWY/OiBzdHJpbmc7XG4gIH0sXG4gIGluZGV4OiBudW1iZXIgPSAwXG4pOiBBcGlQYXJhbSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbURlYy5uYW1lIGFzIHRzLklkZW50aWZpZXI7XG4gIGNvbnN0IHR5cGUgPSByZXNvbHZlVHlwZU5vZGUocGFyYW1EZWMudHlwZSk7XG5cbiAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnNvbGUuZGVidWcoeyBuYW1lLCB0eXBlLCBwYXJhbURlYyB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogQXBpUGFyYW0gPSB7XG4gICAgbmFtZTogbmFtZS5lc2NhcGVkVGV4dCA/IG5hbWUuZXNjYXBlZFRleHQudG9TdHJpbmcoKSA6IGBub25hbWVBdCR7aW5kZXh9YCxcbiAgICB0eXBlLFxuICAgIG9wdGlvbmFsOiBwYXJhbURlYy5vcHRpb25hbCA9PT0gdHJ1ZSxcbiAgICBkZWZhdWx0RGVmOiBwYXJhbURlYz8uZGVmYXVsdERlZixcbiAgfTtcblxuICAvLyDqtazsobDrtoTtlbTtlaDri7nsnZgg6rK97JqwIO2DgOyeheydtOumhCDsgqzsmqlcbiAgaWYgKFxuICAgIHRzLmlzT2JqZWN0QmluZGluZ1BhdHRlcm4obmFtZSkgJiZcbiAgICB0cy5pc1R5cGVSZWZlcmVuY2VOb2RlKHBhcmFtRGVjLnR5cGUpICYmXG4gICAgdHMuaXNJZGVudGlmaWVyKHBhcmFtRGVjLnR5cGUudHlwZU5hbWUpXG4gICkge1xuICAgIHJlc3VsdC5uYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShwYXJhbURlYy50eXBlLnR5cGVOYW1lLnRleHQsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcHJpbnROb2RlKFxuICBub2RlOiB0cy5Ob2RlIHwgdW5kZWZpbmVkLFxuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHByaW50ZXIgPSB0cy5jcmVhdGVQcmludGVyKHsgbmV3TGluZTogdHMuTmV3TGluZUtpbmQuTGluZUZlZWQgfSk7XG4gIHJldHVybiBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgbm9kZSwgc291cmNlRmlsZSk7XG59XG4iXSwibmFtZXMiOlsicmVhZEZpbGUiLCJ0cyIsInJlZ2lzdGVyZWRBcGlzIiwiaW5mbGVjdGlvbiIsImFzc2VydCIsInJlYWRBcGlzRnJvbUZpbGUiLCJmaWxlUGF0aCIsImVuZHNXaXRoIiwiRXJyb3IiLCJzb3VyY2VGaWxlIiwiY3JlYXRlU291cmNlRmlsZSIsInRvU3RyaW5nIiwiU2NyaXB0VGFyZ2V0IiwiTGF0ZXN0IiwibWV0aG9kcyIsIm1vZGVsTmFtZSIsIm1ldGhvZE5hbWUiLCJ2aXNpdG9yIiwibm9kZSIsImlzQ2xhc3NEZWNsYXJhdGlvbiIsIm5hbWUiLCJpc0lkZW50aWZpZXIiLCJlc2NhcGVkVGV4dCIsInJlcGxhY2UiLCJpc01ldGhvZERlY2xhcmF0aW9uIiwidHlwZVBhcmFtZXRlcnMiLCJtYXAiLCJ0eXBlUGFyYW0iLCJ0cCIsInQiLCJpZCIsImNvbnN0cmFpbnQiLCJyZXNvbHZlVHlwZU5vZGUiLCJ1bmRlZmluZWQiLCJwYXJhbWV0ZXJzIiwicGFyYW1EZWMiLCJpbmRleCIsImRlZmF1bHREZWYiLCJwcmludE5vZGUiLCJpbml0aWFsaXplciIsInJlc29sdmVQYXJhbURlYyIsInR5cGUiLCJvcHRpb25hbCIsInF1ZXN0aW9uVG9rZW4iLCJyZXR1cm5UeXBlIiwicHVzaCIsImZvckVhY2hDaGlsZCIsImxlbmd0aCIsImN1cnJlbnRNb2RlbEFwaXMiLCJmaWx0ZXIiLCJhcGkiLCJmaW5kIiwibWV0aG9kIiwiZXh0ZW5kZWRBcGlzIiwiZm91bmRNZXRob2QiLCJ0eXBlTm9kZSIsImtpbmQiLCJTeW50YXhLaW5kIiwiQW55S2V5d29yZCIsIlVua25vd25LZXl3b3JkIiwiU3RyaW5nS2V5d29yZCIsIk51bWJlcktleXdvcmQiLCJCb29sZWFuS2V5d29yZCIsIlVuZGVmaW5lZEtleXdvcmQiLCJOdWxsS2V5d29yZCIsIlZvaWRLZXl3b3JkIiwiTGl0ZXJhbFR5cGUiLCJsaXRlcmFsIiwiaXNTdHJpbmdMaXRlcmFsIiwidmFsdWUiLCJ0ZXh0IiwiaXNOdW1lcmljTGl0ZXJhbCIsIk51bWJlciIsIlRydWVLZXl3b3JkIiwiRmFsc2VLZXl3b3JkIiwiQXJyYXlUeXBlIiwiYXJyTm9kZSIsImVsZW1lbnRzVHlwZSIsImVsZW1lbnRUeXBlIiwiVHlwZUxpdGVyYWwiLCJsaXRlcmFsTm9kZSIsInByb3BzIiwibWVtYmVycyIsIm1lbWJlciIsImlzSW5kZXhTaWduYXR1cmVEZWNsYXJhdGlvbiIsInJlcyIsIlR5cGVSZWZlcmVuY2UiLCJ0eXBlTmFtZSIsImFyZ3MiLCJ0eXBlQXJndW1lbnRzIiwidHlwZUFyZyIsIlVuaW9uVHlwZSIsInR5cGVzIiwiSW50ZXJzZWN0aW9uVHlwZSIsIkluZGV4ZWRBY2Nlc3NUeXBlIiwib2JqZWN0Iiwib2JqZWN0VHlwZSIsImluZGV4VHlwZSIsIlR1cGxlVHlwZSIsImlzVHVwbGVUeXBlTm9kZSIsImVsZW1lbnRzIiwiZWxlbSIsImNvbnNvbGUiLCJkZWJ1ZyIsInJlc3VsdCIsImlzT2JqZWN0QmluZGluZ1BhdHRlcm4iLCJpc1R5cGVSZWZlcmVuY2VOb2RlIiwiY2FtZWxpemUiLCJwcmludGVyIiwiY3JlYXRlUHJpbnRlciIsIm5ld0xpbmUiLCJOZXdMaW5lS2luZCIsIkxpbmVGZWVkIiwiRW1pdEhpbnQiLCJVbnNwZWNpZmllZCJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0EsUUFBUSxRQUFRLG1CQUFjO0FBRXZDLE9BQU9DLFFBQVEsYUFBYTtBQUM1QixTQUFzQkMsY0FBYyxRQUFRLHVCQUFvQjtBQUNoRSxPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxPQUFPQyxZQUFZLFNBQVM7QUFHNUI7Ozs7O0NBS0MsR0FDRCxPQUFPLGVBQWVDLGlCQUFpQkMsUUFBc0I7SUFDM0QsSUFBSSxDQUFDQSxTQUFTQyxRQUFRLENBQUMsUUFBUTtRQUM3QixNQUFNLElBQUlDLE1BQU0sR0FBR0YsU0FBUyw2R0FBNkcsQ0FBQztJQUM1STtJQUVBLE1BQU1HLGFBQWFSLEdBQUdTLGdCQUFnQixDQUNwQ0osVUFDQSxBQUFDLENBQUEsTUFBTU4sU0FBU00sU0FBUSxFQUFHSyxRQUFRLElBQ25DVixHQUFHVyxZQUFZLENBQUNDLE1BQU07SUFHeEIsTUFBTUMsVUFBbUQsRUFBRTtJQUMzRCxJQUFJQyxZQUFvQjtJQUN4QixJQUFJQyxhQUFxQjtJQUN6QixNQUFNQyxVQUFVLENBQUNDO1FBQ2YsSUFBSWpCLEdBQUdrQixrQkFBa0IsQ0FBQ0QsT0FBTztZQUMvQixJQUFJQSxL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
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvYXBpLXBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpLCByZWdpc3RlcmVkQXBpcyB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVNZXRob2ROYW1lIH0gZnJvbSBcIi4uL2FwaS92YWxpZGF0b3JcIjtcbmltcG9ydCB0eXBlIHsgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQg7YyM7J287J2EIO2MjOyLse2VmOyXrCBBUEkg66mU7IaM65OcIOygleuztOulvCDstpTstpztlanri4jri6QuXG4gKiBAYXBpIOuNsOy9lOugiOydtO2EsOqwgCDrtpnsnYAg66mU7IaM65Oc65Ok7J2YIO2DgOyehSDsoJXrs7Trpbwg67aE7ISd7ZWp64uI64ukLlxuICogQHBhcmFtIGZpbGVQYXRoIC0g7YyM7Iux7ZWgIFR5cGVTY3JpcHQg7YyM7J287J2YIOygiOuMgCDqsr3roZxcbiAqIEByZXR1cm5zIEFQSSDrqZTshozrk5wg7KCV67O0IOuwsOyXtCAo7YOA7J6FIO2MjOudvOuvuO2EsCwg7YyM652866+47YSwLCDrpqzthLQg7YOA7J6FIOuTsSlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRBcGlzRnJvbUZpbGUoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8RXh0ZW5kZWRBcGlbXT4ge1xuICBpZiAoIWZpbGVQYXRoLmVuZHNXaXRoKFwiLnRzXCIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7ZmlsZVBhdGh9IGRvZXMgbm90IHNlZW0gdG8gYmUgYSBUeXBlU2NyaXB0IGZpbGUuIFBsZWFzZSBjaGVjayB0aGUgZmlsZSBwYXRoLiBXZSBvbmx5IHN1cHBvcnQgcGFyc2luZyBUeXBlU2NyaXB0IGZpbGVzLmAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIGZpbGVQYXRoLFxuICAgIChhd2FpdCByZWFkRmlsZShmaWxlUGF0aCkpLnRvU3RyaW5nKCksXG4gICAgdHMuU2NyaXB0VGFyZ2V0LkxhdGVzdCxcbiAgKTtcblxuICBjb25zdCBtZXRob2RzOiBPbWl0PEV4dGVuZGVkQXBpLCBcInBhdGhcIiB8IFwib3B0aW9uc1wiPltdID0gW107XG4gIGxldCBtb2RlbE5hbWU6IHN0cmluZyA9IFwiVW5rbm93bk1vZGVsXCI7XG4gIGxldCBtZXRob2ROYW1lOiBzdHJpbmcgPSBcInVua25vd25NZXRob2RcIjtcbiAgY29uc3QgdmlzaXRvciA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgaWYgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgaWYgKG5vZGUubmFtZSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtb2RlbE5hbWUgPSBub2RlLm5hbWUuZXNjYXBlZFRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9DbGFzcyQvLCBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtZXRob2ROYW1lID0gbm9kZS5uYW1lLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCk7XG4gICAgICAgIHZhbGlkYXRlTWV0aG9kTmFtZShtZXRob2ROYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXSA9IChub2RlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoXG4gICAgICAgICh0eXBlUGFyYW0pID0+IHtcbiAgICAgICAgICBjb25zdCB0cCA9IHR5cGVQYXJhbSBhcyB0cy5UeXBlUGFyYW1ldGVyRGVjbGFyYXRpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdDogXCJ0eXBlLXBhcmFtXCIsXG4gICAgICAgICAgICBpZDogdHAubmFtZS5lc2NhcGVkVGV4dC50b1N0cmluZygpLFxuICAgICAgICAgICAgY29uc3RyYWludDogdHAuY29uc3RyYWludCA/IHJlc29sdmVUeXBlTm9kZSh0cC5jb25zdHJhaW50KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnM6IEFwaVBhcmFtW10gPSBub2RlLnBhcmFtZXRlcnMubWFwKChwYXJhbURlYywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZGVmYXVsdERlZiA9IHByaW50Tm9kZShwYXJhbURlYy5pbml0aWFsaXplciwgc291cmNlRmlsZSk7XG5cbiAgICAgICAgLy8g6riw67O46rCS7J20IOyeiOuKlCDqsr3smrAgcGFyYW1EZWMudHlwZeqwgCB1bmRlZmluZWTroZwg64KY7Ji0XG5cbiAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBwYXJhbURlYy5uYW1lLFxuICAgICAgICAgICAgdHlwZTogcGFyYW1EZWMudHlwZSBhcyB0cy5UeXBlTm9kZSxcbiAgICAgICAgICAgIG9wdGlvbmFsOiBwYXJhbURlYy5xdWVzdGlvblRva2VuICE9PSB1bmRlZmluZWQgfHwgcGFyYW1EZWMuaW5pdGlhbGl6ZXIgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHREZWYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmRleCxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihg66as7YS0IO2DgOyeheydtCDquLDsnqzrkJjsp4Ag7JWK7J2AIOuplOyGjOuTnCAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmV0dXJuVHlwZSA9IHJlc29sdmVUeXBlTm9kZShub2RlLnR5cGUpO1xuXG4gICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHR5cGVQYXJhbWV0ZXJzLFxuICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICByZXR1cm5UeXBlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdG9yKTtcbiAgfTtcbiAgdmlzaXRvcihzb3VyY2VGaWxlKTtcblxuICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyDtmITsnqwg7YyM7J287J2YIOuTseuhneuQnCBBUEkg7ZWE7YSwXG4gIGNvbnN0IGN1cnJlbnRNb2RlbEFwaXMgPSByZWdpc3RlcmVkQXBpcy5maWx0ZXIoKGFwaSkgPT4ge1xuICAgIHJldHVybiBtZXRob2RzLmZpbmQoXG4gICAgICAobWV0aG9kKSA9PiBtZXRob2QubW9kZWxOYW1lID09PSBhcGkubW9kZWxOYW1lICYmIG1ldGhvZC5tZXRob2ROYW1lID09PSBhcGkubWV0aG9kTmFtZSxcbiAgICApO1xuICB9KTtcbiAgaWYgKGN1cnJlbnRNb2RlbEFwaXMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gY29uc3QgcCA9IHBhdGguam9pbih0bXBkaXIoKSwgXCJzb25hbXUtc3luY2VyLWVycm9yLmpzb25cIik7XG4gICAgLy8gd3JpdGVGaWxlU3luYyhwLCBKU09OLnN0cmluZ2lmeShyZWdpc3RlcmVkQXBpcywgbnVsbCwgMikpO1xuICAgIC8vIGV4ZWNTeW5jKGBvcGVuICR7cH1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYO2YhOyerCDtjIzsnbzsl5Ag7IKs7KCEIOuTseuhneuQnCBBUEnqsIAg7JeG7Iq164uI64ukLiAke2ZpbGVQYXRofWApO1xuICB9XG5cbiAgLy8g65Ox66Gd65CcIEFQSeyXkCDtmITsnqwg66mU7IaM65OcIO2DgOyehSDsoJXrs7Qg7ZmV7J6lXG4gIGNvbnN0IGV4dGVuZGVkQXBpcyA9IGN1cnJlbnRNb2RlbEFwaXMubWFwKChhcGkpID0+IHtcbiAgICBjb25zdCBmb3VuZE1ldGhvZCA9IG1ldGhvZHMuZmluZChcbiAgICAgIChtZXRob2QpID0+IG1ldGhvZC5tb2RlbE5hbWUgPT09IGFwaS5tb2RlbE5hbWUgJiYgbWV0aG9kLm1ldGhvZE5hbWUgPT09IGFwaS5tZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKCFmb3VuZE1ldGhvZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBUEkgJHthcGkubW9kZWxOYW1lfS4ke2FwaS5tZXRob2ROYW1lfSBub3QgZm91bmQgaW4gJHtmaWxlUGF0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFwaSxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzOiBmb3VuZE1ldGhvZD8udHlwZVBhcmFtZXRlcnMsXG4gICAgICBwYXJhbWV0ZXJzOiBmb3VuZE1ldGhvZD8ucGFyYW1ldGVycyxcbiAgICAgIHJldHVyblR5cGU6IGZvdW5kTWV0aG9kPy5yZXR1cm5UeXBlLFxuICAgIH07XG4gIH0pO1xuICByZXR1cm4gZXh0ZW5kZWRBcGlzO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVHlwZU5vZGUodHlwZU5vZGU6IHRzLlR5cGVOb2RlKTogQXBpUGFyYW1UeXBlIHtcbiAgc3dpdGNoICh0eXBlTm9kZT8ua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BbnlLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwiYW55XCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVua25vd25LZXl3b3JkOlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWJlcktleXdvcmQ6XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQm9vbGVhbktleXdvcmQ6XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlZvaWRLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwidm9pZFwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5MaXRlcmFsVHlwZToge1xuICAgICAgY29uc3QgbGl0ZXJhbCA9ICh0eXBlTm9kZSBhcyB0cy5MaXRlcmFsVHlwZU5vZGUpLmxpdGVyYWw7XG4gICAgICBpZiAodHMuaXNTdHJpbmdMaXRlcmFsKGxpdGVyYWwpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdDogXCJzdHJpbmctbGl0ZXJhbFwiLFxuICAgICAgICAgIHZhbHVlOiBsaXRlcmFsLnRleHQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHRzLmlzTnVtZXJpY0xpdGVyYWwobGl0ZXJhbCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0OiBcIm51bWVyaWMtbGl0ZXJhbFwiLFxuICAgICAgICAgIHZhbHVlOiBOdW1iZXIobGl0ZXJhbC50ZXh0KSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgfSBlbHNlIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuVHJ1ZUtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJ0cnVlXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLkZhbHNlS2V5d29yZCkge1xuICAgICAgICAgIHJldHVybiBcImZhbHNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi7JWMIOyImCDsl4bripQg66as7YSw65+0XCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXJyYXlUeXBlOiB7XG4gICAgICBjb25zdCBhcnJOb2RlID0gdHlwZU5vZGUgYXMgdHMuQXJyYXlUeXBlTm9kZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwiYXJyYXlcIixcbiAgICAgICAgZWxlbWVudHNUeXBlOiByZXNvbHZlVHlwZU5vZGUoYXJyTm9kZS5lbGVtZW50VHlwZSksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHlwZUxpdGVyYWw6IHtcbiAgICAgIGNvbnN0IGxpdGVyYWxOb2RlID0gdHlwZU5vZGUgYXMgdHMuVHlwZUxpdGVyYWxOb2RlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcHM6IGxpdGVyYWxOb2RlLm1lbWJlcnMubWFwKChtZW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAodHMuaXNJbmRleFNpZ25hdHVyZURlY2xhcmF0aW9uKG1lbWJlcikpIHtcbiAgICAgICAgICAgIGFzc2VydChtZW1iZXIucGFyYW1ldGVyc1swXSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSByZXNvbHZlUGFyYW1EZWMoe1xuICAgICAgICAgICAgICBuYW1lOiBtZW1iZXIucGFyYW1ldGVyc1swXS5uYW1lIGFzIHRzLklkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHR5cGU6IG1lbWJlci5wYXJhbWV0ZXJzWzBdLnR5cGUgYXMgdHMuVHlwZU5vZGUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyh7XG4gICAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkVGV4dDogYFske3Jlcy5uYW1lfSR7cmVzLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHtyZXMudHlwZX1dYCxcbiAgICAgICAgICAgICAgfSBhcyB0cy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgICB0eXBlOiBtZW1iZXIudHlwZSBhcyB0cy5UeXBlTm9kZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVBhcmFtRGVjKHtcbiAgICAgICAgICAgICAgbmFtZTogKG1lbWJlciBhcyB0cy5Qcm9wZXJ0eVNpZ25hdHVyZSkubmFtZSBhcyB0cy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgICB0eXBlOiAobWVtYmVyIGFzIHRzLlByb3BlcnR5U2lnbmF0dXJlKS50eXBlIGFzIHRzLlR5cGVOb2RlLFxuICAgICAgICAgICAgICBvcHRpb25hbDogKG1lbWJlciBhcyB0cy5Qcm9wZXJ0eVNpZ25hdHVyZSkucXVlc3Rpb25Ub2tlbiAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlUmVmZXJlbmNlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJyZWZcIixcbiAgICAgICAgaWQ6ICgodHlwZU5vZGUgYXMgdHMuVHlwZVJlZmVyZW5jZU5vZGUpLnR5cGVOYW1lIGFzIHRzLklkZW50aWZpZXIpLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCksXG4gICAgICAgIGFyZ3M6ICh0eXBlTm9kZSBhcyB0cy5UeXBlUmVmZXJlbmNlTm9kZSkudHlwZUFyZ3VtZW50cz8ubWFwKCh0eXBlQXJnKSA9PlxuICAgICAgICAgIHJlc29sdmVUeXBlTm9kZSh0eXBlQXJnKSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVuaW9uVHlwZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwidW5pb25cIixcbiAgICAgICAgdHlwZXM6ICh0eXBlTm9kZSBhcyB0cy5VbmlvblR5cGVOb2RlKS50eXBlcy5tYXAoKHR5cGUpID0+IHJlc29sdmVUeXBlTm9kZSh0eXBlKSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbnRlcnNlY3Rpb25UeXBlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgdHlwZXM6ICh0eXBlTm9kZSBhcyB0cy5JbnRlcnNlY3Rpb25UeXBlTm9kZSkudHlwZXMubWFwKCh0eXBlKSA9PiByZXNvbHZlVHlwZU5vZGUodHlwZSkpLFxuICAgICAgfTtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW5kZXhlZEFjY2Vzc1R5cGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0OiBcImluZGV4ZWQtYWNjZXNzXCIsXG4gICAgICAgIG9iamVjdDogcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGUpLm9iamVjdFR5cGUpLFxuICAgICAgICBpbmRleDogcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGUpLmluZGV4VHlwZSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UdXBsZVR5cGU6XG4gICAgICBpZiAodHMuaXNUdXBsZVR5cGVOb2RlKHR5cGVOb2RlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHQ6IFwidHVwbGUtdHlwZVwiLFxuICAgICAgICAgIGVsZW1lbnRzOiB0eXBlTm9kZS5lbGVtZW50cy5tYXAoKGVsZW0pID0+IHJlc29sdmVUeXBlTm9kZShlbGVtKSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdHlwZU5vZGUgdW5kZWZpbmVkYCk7XG4gIH1cblxuICBjb25zb2xlLmRlYnVnKHR5cGVOb2RlKTtcbiAgdGhyb3cgbmV3IEVycm9yKGDslYwg7IiYIOyXhuuKlCBTeW50YXhLaW5kICR7dHlwZU5vZGUua2luZH1gKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVBhcmFtRGVjKFxuICBwYXJhbURlYzoge1xuICAgIG5hbWU6IHRzLkJpbmRpbmdOYW1lO1xuICAgIHR5cGU6IHRzLlR5cGVOb2RlO1xuICAgIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0RGVmPzogc3RyaW5nO1xuICB9LFxuICBpbmRleDogbnVtYmVyID0gMCxcbik6IEFwaVBhcmFtIHtcbiAgY29uc3QgbmFtZSA9IHBhcmFtRGVjLm5hbWUgYXMgdHMuSWRlbnRpZmllcjtcbiAgY29uc3QgdHlwZSA9IHJlc29sdmVUeXBlTm9kZShwYXJhbURlYy50eXBlKTtcblxuICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS5kZWJ1Zyh7IG5hbWUsIHR5cGUsIHBhcmFtRGVjIH0pO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBBcGlQYXJhbSA9IHtcbiAgICBuYW1lOiBuYW1lLmVzY2FwZWRUZXh0ID8gbmFtZS5lc2NhcGVkVGV4dC50b1N0cmluZygpIDogYG5vbmFtZUF0JHtpbmRleH1gLFxuICAgIHR5cGUsXG4gICAgb3B0aW9uYWw6IHBhcmFtRGVjLm9wdGlvbmFsID09PSB0cnVlLFxuICAgIGRlZmF1bHREZWY6IHBhcmFtRGVjPy5kZWZhdWx0RGVmLFxuICB9O1xuXG4gIC8vIOq1rOyhsOu2hO2VtO2VoOuLueydmCDqsr3smrAg7YOA7J6F7J2066aEIOyCrOyaqVxuICBpZiAoXG4gICAgdHMuaXNPYmplY3RCaW5kaW5nUGF0dGVybihuYW1lKSAmJlxuICAgIHRzLmlzVHlwZVJlZmVyZW5jZU5vZGUocGFyYW1EZWMudHlwZSkgJiZcbiAgICB0cy5pc0lkZW50aWZpZXIocGFyYW1EZWMudHlwZS50eXBlTmFtZSlcbiAgKSB7XG4gICAgcmVzdWx0Lm5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKHBhcmFtRGVjLnR5cGUudHlwZU5hbWUudGV4dCwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBwcmludE5vZGUobm9kZTogdHMuTm9kZSB8IHVuZGVmaW5lZCwgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIoeyBuZXdMaW5lOiB0cy5OZXdMaW5lS2luZC5MaW5lRmVlZCB9KTtcbiAgcmV0dXJuIHByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBub2RlLCBzb3VyY2VGaWxlKTtcbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJyZWFkRmlsZSIsImluZmxlY3Rpb24iLCJ0cyIsInJlZ2lzdGVyZWRBcGlzIiwidmFsaWRhdGVNZXRob2ROYW1lIiwicmVhZEFwaXNGcm9tRmlsZSIsImZpbGVQYXRoIiwiZW5kc1dpdGgiLCJFcnJvciIsInNvdXJjZUZpbGUiLCJjcmVhdGVTb3VyY2VGaWxlIiwidG9TdHJpbmciLCJTY3JpcHRUYXJnZXQiLCJMYXRlc3QiLCJtZXRob2RzIiwibW9kZWxOYW1lIiwibWV0aG9kTmFtZSIsInZpc2l0b3IiLCJub2RlIiwiaXNDbGFzc0RlY2xhcmF0aW9uIiwibmFtZSIsImlzSWRlbnRpZmllciIsImVzY2FwZWRUZXh0IiwicmVwbGFjZSIsImlzTWV0aG9kRGVjbGFyYXRpb24iLCJ0eXBlUGFyYW1ldGVycyIsIm1hcCIsInR5cGVQYXJhbSIsInRwIiwidCIsImlkIiwiY29uc3RyYWludCIsInJlc29sdmVUeXBlTm9kZSIsInVuZGVmaW5lZCIsInBhcmFtZXRlcnMiLCJwYXJhbURlYyIsImluZGV4IiwiZGVmYXVsdERlZiIsInByaW50Tm9kZSIsImluaXRpYWxpemVyIiwicmVzb2x2ZVBhcmFtRGVjIiwidHlwZSIsIm9wdGlvbmFsIiwicXVlc3Rpb25Ub2tlbiIsInJldHVyblR5cGUiLCJwdXNoIiwiZm9yRWFjaENoaWxkIiwibGVuZ3RoIiwiY3VycmVudE1vZGVsQXBpcyIsImZpbHRlciIsImFwaSIsImZpbmQiLCJtZXRob2QiLCJleHRlbmRlZEFwaXMiLCJmb3VuZE1ldGhvZCIsInR5cGVOb2RlIiwia2luZCIsIlN5bnRheEtpbmQiLCJBbnlLZXl3b3JkIiwiVW5rbm93bktleXdvcmQiLCJTdHJpbmdLZXl3b3JkIiwiTnVtYmVyS2V5d29yZCIsIkJvb2xlYW5LZXl3b3JkIiwiVW5kZWZpbmVkS2V5d29yZCIsIk51bGxLZXl3b3JkIiwiVm9pZEtleXdvcmQiLCJMaXRlcmFsVHlwZSIsImxpdGVyYWwiLCJpc1N0cmluZ0xpdGVyYWwiLCJ2YWx1ZSIsInRleHQiLCJpc051bWVyaWNMaXRlcmFsIiwiTnVtYmVyIiwiVHJ1ZUtleXdvcmQiLCJGYWxzZUtleXdvcmQiLCJBcnJheVR5cGUiLCJhcnJOb2RlIiwiZWxlbWVudHNUeXBlIiwiZWxlbWVudFR5cGUiLCJUeXBlTGl0ZXJhbCIsImxpdGVyYWxOb2RlIiwicHJvcHMiLCJtZW1iZXJzIiwibWVtYmVyIiwiaXNJbmRleFNpZ25hdHVyZURlY2xhcmF0aW9uIiwicmVzIiwiVHlwZVJlZmVyZW5jZSIsInR5cGVOYW1lIiwiYXJncyIsInR5cGVBcmd1bWVudHMiLCJ0eXBlQXJnIiwiVW5pb25UeXBlIiwidHlwZXMiLCJJbnRlcnNlY3Rpb25UeXBlIiwiSW5kZXhlZEFjY2Vzc1R5cGUiLCJvYmplY3QiLCJvYmplY3RUeXBlIiwiaW5kZXhUeXBlIiwiVHVwbGVUeXBlIiwiaXNUdXBsZVR5cGVOb2RlIiwiZWxlbWVudHMiLCJlbGVtIiwiY29uc29sZSIsImRlYnVnIiwicmVzdWx0IiwiaXNPYmplY3RCaW5kaW5nUGF0dGVybiIsImlzVHlwZVJlZmVyZW5jZU5vZGUiLCJjYW1lbGl6ZSIsInByaW50ZXIiLCJjcmVhdGVQcmludGVyIiwibmV3TGluZSIsIk5ld0xpbmVLaW5kIiwiTGluZUZlZWQiLCJFbWl0SGludCIsIlVuc3BlY2lmaWVkIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFDNUIsU0FBU0MsUUFBUSxRQUFRLG1CQUFjO0FBQ3ZDLE9BQU9DLGdCQUFnQixhQUFhO0FBQ3BDLE9BQU9DLFFBQVEsYUFBYTtBQUM1QixTQUEyQkMsY0FBYyxRQUFRLHVCQUFvQjtBQUNyRSxTQUFTQyxrQkFBa0IsUUFBUSxzQkFBbUI7QUFJdEQ7Ozs7O0NBS0MsR0FDRCxPQUFPLGVBQWVDLGlCQUFpQkMsUUFBc0I7SUFDM0QsSUFBSSxDQUFDQSxTQUFTQyxRQUFRLENBQUMsUUFBUTtRQUM3QixNQUFNLElBQUlDLE1BQ1IsR0FBR0YsU0FBUyw2R0FBNkcsQ0FBQztJQUU5SDtJQUVBLE1BQU1HLGFBQWFQLEdBQUdRLGdCQUFnQixDQUNwQ0osVUFDQSxBQUFDLENBQUEsTUFBTU4sU0FBU00sU0FBUSxFQUFHSyxRQUFRLElBQ25DVCxHQUFHVSxZQUFZLENBQUNDLE1BQU07SUFHeEIsTUFBTUMsVUFBbUQsRUFBRTtJQUMzRCxJQUFJQyxZQUFvQjtJQUN4QixJQUFJQyxhQUFxQjtJQUN6QixNQUFNQyxVQUFVLENBQUND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
@@ -1,5 +1,5 @@
1
- import { PathLike } from "fs";
2
- import { AbsolutePath } from "../utils/path-utils";
1
+ import { type PathLike } from "fs";
2
+ import type { AbsolutePath } from "../utils/path-utils";
3
3
  /**
4
4
  * 체크섬 파일에 저장된 내용과 현재 실제 파일의 체크섬을 비교하여 변경된 파일을 찾습니다.
5
5
  * @returns 변경된 파일 경로 배열. 프로젝트 루트부터 슬래시로 시작합니다. 예시: "/src/application/user/user.model.ts"
@@ -1 +1 @@
1
- {"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../../src/syncer/checksum.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,QAAQ,EAAE,MAAM,IAAI,CAAC;AAQhD,OAAO,EACL,YAAY,EAEb,MAAM,qBAAqB,CAAC;AAQ7B;;;GAGG;AACH,wBAAsB,8BAA8B,IAAI,OAAO,CAC7D,YAAY,EAAE,CACf,CAYA;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAUpD;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,QAAQ,GACZ,OAAO,CAAC,OAAO,CAAC,CASlB"}
1
+ {"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../../src/syncer/checksum.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,IAAI,CAAC;AAOrD,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,qBAAqB,CAAC;AASzE;;;GAGG;AACH,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAU9E;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAUpD;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CASjF"}
@@ -1,12 +1,13 @@
1
- import path from "path";
2
- import { globAsync } from "../utils/async-utils.js";
3
- import { createReadStream } from "fs";
4
- import { readFile, writeFile } from "node:fs/promises";
5
- import { exists } from "../utils/fs-utils.js";
6
1
  import crypto from "crypto";
7
2
  import equal from "fast-deep-equal";
8
- import * as _ from "lodash-es";
3
+ import { createReadStream } from "fs";
4
+ import { readFile, writeFile } from "node:fs/promises";
5
+ import path from "path";
6
+ import { isEqual } from "radashi";
9
7
  import { Sonamu } from "../api/sonamu.js";
8
+ import { globAsync } from "../utils/async-utils.js";
9
+ import { exists } from "../utils/fs-utils.js";
10
+ import { differenceWith } from "../utils/utils.js";
10
11
  import { getChecksumPatternGroupInAbsolutePath } from "./file-patterns.js";
11
12
  /**
12
13
  * 체크섬 파일에 저장된 내용과 현재 실제 파일의 체크섬을 비교하여 변경된 파일을 찾습니다.
@@ -18,8 +19,7 @@ import { getChecksumPatternGroupInAbsolutePath } from "./file-patterns.js";
18
19
  if (isSame) {
19
20
  return [];
20
21
  }
21
- const diff = _.differenceWith(calculatedChecksums, savedChecksums, _.isEqual);
22
- return diff.map((r)=>r.path);
22
+ return differenceWith(calculatedChecksums, savedChecksums, isEqual).map((r)=>r.path);
23
23
  }
24
24
  /**
25
25
  * 체크섬을 갱신합니다.
@@ -86,13 +86,13 @@ async function getChecksumOfFile(filePath) {
86
86
  const hash = crypto.createHash("sha1");
87
87
  const input = createReadStream(filePath);
88
88
  input.on("error", reject);
89
- input.on("data", function(chunk) {
89
+ input.on("data", (chunk)=>{
90
90
  hash.update(chunk);
91
91
  });
92
- input.on("close", function() {
92
+ input.on("close", ()=>{
93
93
  resolve(hash.digest("hex"));
94
94
  });
95
95
  });
96
96
  }
97
97
 
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvY2hlY2tzdW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGdsb2JBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSwgUGF0aExpa2UgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuXG5pbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCBlcXVhbCBmcm9tIFwiZmFzdC1kZWVwLWVxdWFsXCI7XG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQge1xuICBBYnNvbHV0ZVBhdGgsXG4gIEFwaVJlbGF0aXZlUGF0aCxcbn0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi9maWxlLXBhdHRlcm5zXCI7XG5cbnR5cGUgUGF0aEFuZENoZWNrc3VtID0ge1xuICBwYXRoOiBBYnNvbHV0ZVBhdGg7XG4gIGNoZWNrc3VtOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIOyytO2BrOyErCDtjIzsnbzsl5Ag7KCA7J6l65CcIOuCtOyaqeqzvCDtmITsnqwg7Iuk7KCcIO2MjOydvOydmCDssrTtgazshKzsnYQg67mE6rWQ7ZWY7JesIOuzgOqyveuQnCDtjIzsnbzsnYQg7LC+7Iq164uI64ukLlxuICogQHJldHVybnMg67OA6rK965CcIO2MjOydvCDqsr3roZwg67Cw7Je0LiDtlITroZzsoJ3tirgg66Oo7Yq467aA7YSwIOyKrOuemOyLnOuhnCDsi5zsnpHtlanri4jri6QuIOyYiOyLnDogXCIvc3JjL2FwcGxpY2F0aW9uL3VzZXIvdXNlci5tb2RlbC50c1wiXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kQ2hhbmdlZEZpbGVzVXNpbmdDaGVja3N1bXMoKTogUHJvbWlzZTxcbiAgQWJzb2x1dGVQYXRoW11cbj4ge1xuICBjb25zdCBjYWxjdWxhdGVkQ2hlY2tzdW1zID0gYXdhaXQgZ2V0Q3VycmVudENoZWNrc3VtcygpO1xuICBjb25zdCBzYXZlZENoZWNrc3VtcyA9IGF3YWl0IGdldFByZXZpb3VzQ2hlY2tzdW1zKCk7XG5cbiAgY29uc3QgaXNTYW1lID0gZXF1YWwoY2FsY3VsYXRlZENoZWNrc3Vtcywgc2F2ZWRDaGVja3N1bXMpO1xuICBpZiAoaXNTYW1lKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZGlmZiA9IF8uZGlmZmVyZW5jZVdpdGgoY2FsY3VsYXRlZENoZWNrc3Vtcywgc2F2ZWRDaGVja3N1bXMsIF8uaXNFcXVhbCk7XG5cbiAgcmV0dXJuIGRpZmYubWFwKChyKSA9PiByLnBhdGgpO1xufVxuXG4vKipcbiAqIOyytO2BrOyErOydhCDqsLHsi6Dtlanri4jri6QuXG4gKiDtmITsnqwg7YyM7J2865Ok7J2YIOyytO2BrOyErOydhCDqs4TsgrDtlbTshJwg6rWs7ZWcIOuLpOydjCwg7LK07YGs7ISsIO2MjOydvOyXkCDsoIDsnqXrkJwg64K07Jqp6rO8IOuLpOultOuptCDssrTtgazshKwg7YyM7J287J2EIOqwseyLoO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmV3Q2hlY2tzdW1zKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYWxjdWxhdGVkQ2hlY2tzdW1zID0gYXdhaXQgZ2V0Q3VycmVudENoZWNrc3VtcygpO1xuICBjb25zdCBzYXZlZENoZWNrc3VtcyA9IGF3YWl0IGdldFByZXZpb3VzQ2hlY2tzdW1zKCk7XG5cbiAgY29uc3QgaXNTYW1lID0gZXF1YWwoY2FsY3VsYXRlZENoZWNrc3Vtcywgc2F2ZWRDaGVja3N1bXMpO1xuICBpZiAoaXNTYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgc2F2ZUNoZWNrc3VtcyhjYWxjdWxhdGVkQ2hlY2tzdW1zKTtcbn1cblxuLyoqXG4gKiDrkZAg7YyM7J287J2YIOuCtOyaqeydtCDqsJnsnYDsp4Ag7LK07YGs7ISs7Jy866GcIOu5hOq1kO2VqeuLiOuLpC5cbiAqIOunjOyVvSDtjIzsnbzsnbQg65GYIOykkSDtlZjrgpjrnbzrj4Qg7JeG64uk66m0IOu5hOq1kCDrtojqsIDroZwgZmFsc2Ug67CY7ZmY7ZWp64uI64ukLlxuICogQHBhcmFtIG9uZSDtjIzsnbwg6rK966GcXG4gKiBAcGFyYW0gdHdvIO2MjOydvCDqsr3roZxcbiAqIEByZXR1cm5zIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFyZUZpbGVzU2FtZShcbiAgb25lOiBQYXRoTGlrZSxcbiAgdHdvOiBQYXRoTGlrZVxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmICghKGF3YWl0IGV4aXN0cyhvbmUpKSB8fCAhKGF3YWl0IGV4aXN0cyh0d28pKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG9uZUNoZWNrc3VtID0gYXdhaXQgZ2V0Q2hlY2tzdW1PZkZpbGUob25lKTtcbiAgY29uc3QgdHdvQ2hlY2tzdW0gPSBhd2FpdCBnZXRDaGVja3N1bU9mRmlsZSh0d28pO1xuXG4gIHJldHVybiBvbmVDaGVja3N1bSA9PT0gdHdvQ2hlY2tzdW07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRDaGVja3N1bXMoKTogUHJvbWlzZTxQYXRoQW5kQ2hlY2tzdW1bXT4ge1xuICBjb25zdCBmaWxlUGF0aHMgPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhnZXRDaGVja3N1bVBhdHRlcm5Hcm91cEluQWJzb2x1dGVQYXRoKCkpLm1hcChcbiAgICAgICAgYXN5bmMgKFtfZmlsZVR5cGUsIHBhdHRlcm5dKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGdsb2JBc3luYyhwYXR0ZXJuKSBhcyBQcm9taXNlPEFic29sdXRlUGF0aFtdPjtcbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgKVxuICAgIC5mbGF0KClcbiAgICAuc29ydCgpO1xuXG4gIGNvbnN0IGZpbGVDaGVja3N1bXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBmaWxlUGF0aHMubWFwKGFzeW5jIChmaWxlUGF0aCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgIGNoZWNrc3VtOiBhd2FpdCBnZXRDaGVja3N1bU9mRmlsZShmaWxlUGF0aCksXG4gICAgICB9O1xuICAgIH0pXG4gICk7XG5cbiAgcmV0dXJuIGZpbGVDaGVja3N1bXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFByZXZpb3VzQ2hlY2tzdW1zKCk6IFByb21pc2U8UGF0aEFuZENoZWNrc3VtW10+IHtcbiAgY29uc3QgY2hlY2tzdW1GaWxlUGF0aCA9IGdldENoZWNrc3VtRmlsZVBhdGgoKTtcbiAgaWYgKCEoYXdhaXQgZXhpc3RzKGNoZWNrc3VtRmlsZVBhdGgpKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHByZXZpb3VzQ2hlY2tzdW1zID0gSlNPTi5wYXJzZShcbiAgICBhd2FpdCByZWFkRmlsZShjaGVja3N1bUZpbGVQYXRoLCBcInV0Zi04XCIpXG4gICkubWFwKChyOiB7IHBhdGg6IEFwaVJlbGF0aXZlUGF0aDsgY2hlY2tzdW06IHN0cmluZyB9KSA9PiAoe1xuICAgIHBhdGg6IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIHIucGF0aCksIC8vIOyytO2BrOyErCDtjIzsnbzsl5DshJwg7J297J2EIOuVjDogQVBJIOyDgeuMgCDqsr3roZwg4oaSIOygiOuMgCDqsr3roZxcbiAgICBjaGVja3N1bTogci5jaGVja3N1bSxcbiAgfSkpIGFzIFBhdGhBbmRDaGVja3N1bVtdO1xuICByZXR1cm4gcHJldmlvdXNDaGVja3N1bXM7XG59XG5cbmZ1bmN0aW9uIGdldENoZWNrc3VtRmlsZVBhdGgoKTogQWJzb2x1dGVQYXRoIHtcbiAgcmV0dXJuIHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic29uYW11LmxvY2tcIikgYXMgQWJzb2x1dGVQYXRoO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlQ2hlY2tzdW1zKGNoZWNrc3VtczogUGF0aEFuZENoZWNrc3VtW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2hlY2tzdW1GaWxlUGF0aCA9IGdldENoZWNrc3VtRmlsZVBhdGgoKTtcbiAgYXdhaXQgd3JpdGVGaWxlKFxuICAgIGNoZWNrc3VtRmlsZVBhdGgsXG4gICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICBjaGVja3N1bXMubWFwKChyKSA9PiAoe1xuICAgICAgICBwYXRoOiBwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcGlSb290UGF0aCwgci5wYXRoKSwgLy8g7LK07YGs7ISsIO2MjOydvOyXkCDsoIDsnqXtlaAg65WMOiDsoIjrjIAg6rK966GcIOKGkiBBUEkg7IOB64yAIOqyveuhnFxuICAgICAgICBjaGVja3N1bTogci5jaGVja3N1bSxcbiAgICAgIH0pKSxcbiAgICAgIG51bGwsXG4gICAgICAyXG4gICAgKSxcbiAgICBcInV0Zi04XCJcbiAgKTtcbiAgY29uc29sZS5sb2coXCJjaGVja3N1bSBzYXZlZFwiLCBjaGVja3N1bUZpbGVQYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Q2hlY2tzdW1PZkZpbGUoZmlsZVBhdGg6IFBhdGhMaWtlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTFcIik7XG4gICAgY29uc3QgaW5wdXQgPSBjcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKTtcbiAgICBpbnB1dC5vbihcImVycm9yXCIsIHJlamVjdCk7XG4gICAgaW5wdXQub24oXCJkYXRhXCIsIGZ1bmN0aW9uIChjaHVuazogYW55KSB7XG4gICAgICBoYXNoLnVwZGF0ZShjaHVuayk7XG4gICAgfSk7XG4gICAgaW5wdXQub24oXCJjbG9zZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXNvbHZlKGhhc2guZGlnZXN0KFwiaGV4XCIpKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsicGF0aCIsImdsb2JBc3luYyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJyZWFkRmlsZSIsIndyaXRlRmlsZSIsImV4aXN0cyIsImNyeXB0byIsImVxdWFsIiwiXyIsIlNvbmFtdSIsImdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgiLCJmaW5kQ2hhbmdlZEZpbGVzVXNpbmdDaGVja3N1bXMiLCJjYWxjdWxhdGVkQ2hlY2tzdW1zIiwiZ2V0Q3VycmVudENoZWNrc3VtcyIsInNhdmVkQ2hlY2tzdW1zIiwiZ2V0UHJldmlvdXNDaGVja3N1bXMiLCJpc1NhbWUiLCJkaWZmIiwiZGlmZmVyZW5jZVdpdGgiLCJpc0VxdWFsIiwibWFwIiwiciIsInJlbmV3Q2hlY2tzdW1zIiwic2F2ZUNoZWNrc3VtcyIsImFyZUZpbGVzU2FtZSIsIm9uZSIsInR3byIsIm9uZUNoZWNrc3VtIiwiZ2V0Q2hlY2tzdW1PZkZpbGUiLCJ0d29DaGVja3N1bSIsImZpbGVQYXRocyIsIlByb21pc2UiLCJhbGwiLCJPYmplY3QiLCJlbnRyaWVzIiwiX2ZpbGVUeXBlIiwicGF0dGVybiIsImZsYXQiLCJzb3J0IiwiZmlsZUNoZWNrc3VtcyIsImZpbGVQYXRoIiwiY2hlY2tzdW0iLCJjaGVja3N1bUZpbGVQYXRoIiwiZ2V0Q2hlY2tzdW1GaWxlUGF0aCIsInByZXZpb3VzQ2hlY2tzdW1zIiwiSlNPTiIsInBhcnNlIiwiam9pbiIsImFwaVJvb3RQYXRoIiwiY2hlY2tzdW1zIiwic3RyaW5naWZ5IiwicmVsYXRpdmUiLCJjb25zb2xlIiwibG9nIiwicmVzb2x2ZSIsInJlamVjdCIsImhhc2giLCJjcmVhdGVIYXNoIiwiaW5wdXQiLCJvbiIsImNodW5rIiwidXBkYXRlIiwiZGlnZXN0Il0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxVQUFVLE9BQU87QUFDeEIsU0FBU0MsU0FBUyxRQUFRLDBCQUF1QjtBQUNqRCxTQUFTQyxnQkFBZ0IsUUFBa0IsS0FBSztBQUNoRCxTQUFTQyxRQUFRLEVBQUVDLFNBQVMsUUFBUSxtQkFBYztBQUNsRCxTQUFTQyxNQUFNLFFBQVEsdUJBQW9CO0FBRTNDLE9BQU9DLFlBQVksU0FBUztBQUM1QixPQUFPQyxXQUFXLGtCQUFrQjtBQUNwQyxZQUFZQyxPQUFPLFlBQVk7QUFDL0IsU0FBU0MsTUFBTSxRQUFRLG1CQUFnQjtBQUt2QyxTQUFTQyxxQ0FBcUMsUUFBUSxxQkFBa0I7QUFPeEU7OztDQUdDLEdBQ0QsT0FBTyxlQUFlQztJQUdwQixNQUFNQyxzQkFBc0IsTUFBTUM7SUFDbEMsTUFBTUMsaUJBQWlCLE1BQU1DO0lBRTdCLE1BQU1DLFNBQVNULE1BQU1LLHFCQUFxQkU7SUFDMUMsSUFBSUUsUUFBUTtRQUNWLE9BQU8sRUFBRTtJQUNYO0lBRUEsTUFBTUMsT0FBT1QsRUFBRVUsY0FBYyxDQUFDTixxQkFBcUJFLGdCQUFnQk4sRUFBRVcsT0FBTztJQUU1RSxPQUFPRixLQUFLRyxHQUFHLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRXJCLElBQUk7QUFDL0I7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLGVBQWVzQjtJQUNwQixNQUFNVixzQkFBc0IsTUFBTUM7SUFDbEMsTUFBTUMsaUJBQWlCLE1BQU1DO0lBRTdCLE1BQU1DLFNBQVNULE1BQU1LLHFCQUFxQkU7SUFDMUMsSUFBSUUsUUFBUTtRQUNWO0lBQ0Y7SUFFQSxNQUFNTyxjQUFjWDtBQUN0QjtBQUVBOzs7Ozs7Q0FNQyxHQUNELE9BQU8sZUFBZVksYUFDcEJDLEdBQWEsRUFDYkMsR0FBYTtJQUViLElBQUksQ0FBRSxNQUFNckIsT0FBT29CLFFBQVMsQ0FBRSxNQUFNcEIsT0FBT3FCLE1BQU87UUFDaEQsT0FBTztJQUNUO0lBRUEsTUFBTUMsY0FBYyxNQUFNQyxrQkFBa0JIO0lBQzVDLE1BQU1JLGNBQWMsTUFBTUQsa0JBQWtCRjtJQUU1QyxPQUFPQyxnQkFBZ0JFO0FBQ3pCO0FBRUEsZUFBZWhCO0lBQ2IsTUFBTWlCLFlBQVksQUFDaEIsQ0FBQSxNQUFNQyxRQUFRQyxHQUFHLENBQ2ZDLE9BQU9DLE9BQU8sQ0FBQ3hCLHlDQUF5Q1UsR0FBRyxDQUN6RCxPQUFPLENBQUNlLFdBQVdDLFFBQVE7UUFDekIsT0FBT25DLFVBQVVtQztJQUNuQixHQUVKLEVBRUNDLElBQUksR0FDSkMsSUFBSTtJQUVQLE1BQU1DLGdCQUFnQixNQUFNUixRQUFRQyxHQUFHLENBQ3JDRixVQUFVVixHQUFHLENBQUMsT0FBT29CO1FBQ25CLE9BQU87WUFDTHhDLE1BQU13QztZQUNOQyxVQUFVLE1BQU1iLGtCQUFrQlk7UUFDcEM7SUFDRjtJQUdGLE9BQU9EO0FBQ1Q7QUFFQSxlQUFleEI7SUFDYixNQUFNMkIsbUJBQW1CQztJQUN6QixJQUFJLENBQUUsTUFBTXRDLE9BQU9xQyxtQkFBb0I7UUFDckMsT0FBTyxFQUFFO0lBQ1g7SUFFQSxNQUFNRSxvQkFBb0JDLEtBQUtDLEtBQUssQ0FDbEMsTUFBTTNDLFNBQVN1QyxrQkFBa0IsVUFDakN0QixHQUFHLENBQUMsQ0FBQ0MsSUFBb0QsQ0FBQTtZQUN6RHJCLE1BQU1BLEtBQUsrQyxJQUFJLENBQUN0QyxPQUFPdUMsV0FBVyxFQUFFM0IsRUFBRXJCLElBQUk7WUFDMUN5QyxVQUFVcEIsRUFBRW9CLFFBQVE7UUFDdEIsQ0FBQTtJQUNBLE9BQU9HO0FBQ1Q7QUFFQSxTQUFTRDtJQUNQLE9BQU8zQyxLQUFLK0MsSUFBSSxDQUFDdEMsT0FBT3VDLFdBQVcsRUFBRTtBQUN2QztBQUVBLGVBQWV6QixjQUFjMEIsU0FBNEI7SUFDdkQsTUFBTVAsbUJBQW1CQztJQUN6QixNQUFNdkMsVUFDSnNDLGtCQUNBRyxLQUFLSyxTQUFTLENBQ1pELFVBQVU3QixHQUFHLENBQUMsQ0FBQ0MsSUFBTyxDQUFBO1lBQ3BCckIsTUFBTUEsS0FBS21ELFFBQVEsQ0FBQzFDLE9BQU91QyxXQUFXLEVBQUUzQixFQUFFckIsSUFBSTtZQUM5Q3lDLFVBQVVwQixFQUFFb0IsUUFBUTtRQUN0QixDQUFBLElBQ0EsTUFDQSxJQUVGO0lBRUZXLFFBQVFDLEdBQUcsQ0FBQyxrQkFBa0JYO0FBQ2hDO0FBRUEsZUFBZWQsa0JBQWtCWSxRQUFrQjtJQUNqRCxPQUFPLElBQUlULFFBQWdCLENBQUN1QixTQUFTQztRQUNuQyxNQUFNQyxPQUFPbEQsT0FBT21ELFVBQVUsQ0FBQztRQUMvQixNQUFNQyxRQUFReEQsaUJBQWlCc0M7UUFDL0JrQixNQUFNQyxFQUFFLENBQUMsU0FBU0o7UUFDbEJHLE1BQU1DLEVBQUUsQ0FBQyxRQUFRLFNBQVVDLEtBQVU7WUFDbkNKLEtBQUtLLE1BQU0sQ0FBQ0Q7UUFDZDtRQUNBRixNQUFNQyxFQUFFLENBQUMsU0FBUztZQUNoQkwsUUFBUUUsS0FBS00sTUFBTSxDQUFDO1FBQ3RCO0lBQ0Y7QUFDRiJ9
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvY2hlY2tzdW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyeXB0bywgeyB0eXBlIEJpbmFyeUxpa2UgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgZXF1YWwgZnJvbSBcImZhc3QtZGVlcC1lcXVhbFwiO1xuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSwgdHlwZSBQYXRoTGlrZSB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgcmVhZEZpbGUsIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IGdsb2JBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxzL2ZzLXV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEFic29sdXRlUGF0aCwgQXBpUmVsYXRpdmVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VXaXRoIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cEluQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4vZmlsZS1wYXR0ZXJuc1wiO1xuXG50eXBlIFBhdGhBbmRDaGVja3N1bSA9IHtcbiAgcGF0aDogQWJzb2x1dGVQYXRoO1xuICBjaGVja3N1bTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiDssrTtgazshKwg7YyM7J287JeQIOyggOyepeuQnCDrgrTsmqnqs7wg7ZiE7J6sIOyLpOygnCDtjIzsnbzsnZgg7LK07YGs7ISs7J2EIOu5hOq1kO2VmOyXrCDrs4Dqsr3rkJwg7YyM7J287J2EIOywvuyKteuLiOuLpC5cbiAqIEByZXR1cm5zIOuzgOqyveuQnCDtjIzsnbwg6rK966GcIOuwsOyXtC4g7ZSE66Gc7KCd7Yq4IOujqO2KuOu2gO2EsCDsiqzrnpjsi5zroZwg7Iuc7J6R7ZWp64uI64ukLiDsmIjsi5w6IFwiL3NyYy9hcHBsaWNhdGlvbi91c2VyL3VzZXIubW9kZWwudHNcIlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmluZENoYW5nZWRGaWxlc1VzaW5nQ2hlY2tzdW1zKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgY29uc3QgY2FsY3VsYXRlZENoZWNrc3VtcyA9IGF3YWl0IGdldEN1cnJlbnRDaGVja3N1bXMoKTtcbiAgY29uc3Qgc2F2ZWRDaGVja3N1bXMgPSBhd2FpdCBnZXRQcmV2aW91c0NoZWNrc3VtcygpO1xuXG4gIGNvbnN0IGlzU2FtZSA9IGVxdWFsKGNhbGN1bGF0ZWRDaGVja3N1bXMsIHNhdmVkQ2hlY2tzdW1zKTtcbiAgaWYgKGlzU2FtZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBkaWZmZXJlbmNlV2l0aChjYWxjdWxhdGVkQ2hlY2tzdW1zLCBzYXZlZENoZWNrc3VtcywgaXNFcXVhbCkubWFwKChyKSA9PiByLnBhdGgpO1xufVxuXG4vKipcbiAqIOyytO2BrOyErOydhCDqsLHsi6Dtlanri4jri6QuXG4gKiDtmITsnqwg7YyM7J2865Ok7J2YIOyytO2BrOyErOydhCDqs4TsgrDtlbTshJwg6rWs7ZWcIOuLpOydjCwg7LK07YGs7ISsIO2MjOydvOyXkCDsoIDsnqXrkJwg64K07Jqp6rO8IOuLpOultOuptCDssrTtgazshKwg7YyM7J287J2EIOqwseyLoO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmV3Q2hlY2tzdW1zKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYWxjdWxhdGVkQ2hlY2tzdW1zID0gYXdhaXQgZ2V0Q3VycmVudENoZWNrc3VtcygpO1xuICBjb25zdCBzYXZlZENoZWNrc3VtcyA9IGF3YWl0IGdldFByZXZpb3VzQ2hlY2tzdW1zKCk7XG5cbiAgY29uc3QgaXNTYW1lID0gZXF1YWwoY2FsY3VsYXRlZENoZWNrc3Vtcywgc2F2ZWRDaGVja3N1bXMpO1xuICBpZiAoaXNTYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgc2F2ZUNoZWNrc3VtcyhjYWxjdWxhdGVkQ2hlY2tzdW1zKTtcbn1cblxuLyoqXG4gKiDrkZAg7YyM7J287J2YIOuCtOyaqeydtCDqsJnsnYDsp4Ag7LK07YGs7ISs7Jy866GcIOu5hOq1kO2VqeuLiOuLpC5cbiAqIOunjOyVvSDtjIzsnbzsnbQg65GYIOykkSDtlZjrgpjrnbzrj4Qg7JeG64uk66m0IOu5hOq1kCDrtojqsIDroZwgZmFsc2Ug67CY7ZmY7ZWp64uI64ukLlxuICogQHBhcmFtIG9uZSDtjIzsnbwg6rK966GcXG4gKiBAcGFyYW0gdHdvIO2MjOydvCDqsr3roZxcbiAqIEByZXR1cm5zIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFyZUZpbGVzU2FtZShvbmU6IFBhdGhMaWtlLCB0d286IFBhdGhMaWtlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmICghKGF3YWl0IGV4aXN0cyhvbmUpKSB8fCAhKGF3YWl0IGV4aXN0cyh0d28pKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG9uZUNoZWNrc3VtID0gYXdhaXQgZ2V0Q2hlY2tzdW1PZkZpbGUob25lKTtcbiAgY29uc3QgdHdvQ2hlY2tzdW0gPSBhd2FpdCBnZXRDaGVja3N1bU9mRmlsZSh0d28pO1xuXG4gIHJldHVybiBvbmVDaGVja3N1bSA9PT0gdHdvQ2hlY2tzdW07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRDaGVja3N1bXMoKTogUHJvbWlzZTxQYXRoQW5kQ2hlY2tzdW1bXT4ge1xuICBjb25zdCBmaWxlUGF0aHMgPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhnZXRDaGVja3N1bVBhdHRlcm5Hcm91cEluQWJzb2x1dGVQYXRoKCkpLm1hcChhc3luYyAoW19maWxlVHlwZSwgcGF0dGVybl0pID0+IHtcbiAgICAgICAgcmV0dXJuIGdsb2JBc3luYyhwYXR0ZXJuKSBhcyBQcm9taXNlPEFic29sdXRlUGF0aFtdPjtcbiAgICAgIH0pLFxuICAgIClcbiAgKVxuICAgIC5mbGF0KClcbiAgICAuc29ydCgpO1xuXG4gIGNvbnN0IGZpbGVDaGVja3N1bXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBmaWxlUGF0aHMubWFwKGFzeW5jIChmaWxlUGF0aCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgIGNoZWNrc3VtOiBhd2FpdCBnZXRDaGVja3N1bU9mRmlsZShmaWxlUGF0aCksXG4gICAgICB9O1xuICAgIH0pLFxuICApO1xuXG4gIHJldHVybiBmaWxlQ2hlY2tzdW1zO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQcmV2aW91c0NoZWNrc3VtcygpOiBQcm9taXNlPFBhdGhBbmRDaGVja3N1bVtdPiB7XG4gIGNvbnN0IGNoZWNrc3VtRmlsZVBhdGggPSBnZXRDaGVja3N1bUZpbGVQYXRoKCk7XG4gIGlmICghKGF3YWl0IGV4aXN0cyhjaGVja3N1bUZpbGVQYXRoKSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBwcmV2aW91c0NoZWNrc3VtcyA9IEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUoY2hlY2tzdW1GaWxlUGF0aCwgXCJ1dGYtOFwiKSkubWFwKFxuICAgIChyOiB7IHBhdGg6IEFwaVJlbGF0aXZlUGF0aDsgY2hlY2tzdW06IHN0cmluZyB9KSA9PiAoe1xuICAgICAgcGF0aDogcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgci5wYXRoKSwgLy8g7LK07YGs7ISsIO2MjOydvOyXkOyEnCDsnb3snYQg65WMOiBBUEkg7IOB64yAIOqyveuhnCDihpIg7KCI64yAIOqyveuhnFxuICAgICAgY2hlY2tzdW06IHIuY2hlY2tzdW0sXG4gICAgfSksXG4gICkgYXMgUGF0aEFuZENoZWNrc3VtW107XG4gIHJldHVybiBwcmV2aW91c0NoZWNrc3Vtcztcbn1cblxuZnVuY3Rpb24gZ2V0Q2hlY2tzdW1GaWxlUGF0aCgpOiBBYnNvbHV0ZVBhdGgge1xuICByZXR1cm4gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzb25hbXUubG9ja1wiKSBhcyBBYnNvbHV0ZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVDaGVja3N1bXMoY2hlY2tzdW1zOiBQYXRoQW5kQ2hlY2tzdW1bXSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjaGVja3N1bUZpbGVQYXRoID0gZ2V0Q2hlY2tzdW1GaWxlUGF0aCgpO1xuICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgY2hlY2tzdW1GaWxlUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgIGNoZWNrc3Vtcy5tYXAoKHIpID0+ICh7XG4gICAgICAgIHBhdGg6IHBhdGgucmVsYXRpdmUoU29uYW11LmFwaVJvb3RQYXRoLCByLnBhdGgpLCAvLyDssrTtgazshKwg7YyM7J287JeQIOyggOyepe2VoCDrlYw6IOygiOuMgCDqsr3roZwg4oaSIEFQSSDsg4HrjIAg6rK966GcXG4gICAgICAgIGNoZWNrc3VtOiByLmNoZWNrc3VtLFxuICAgICAgfSkpLFxuICAgICAgbnVsbCxcbiAgICAgIDIsXG4gICAgKSxcbiAgICBcInV0Zi04XCIsXG4gICk7XG4gIGNvbnNvbGUubG9nKFwiY2hlY2tzdW0gc2F2ZWRcIiwgY2hlY2tzdW1GaWxlUGF0aCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENoZWNrc3VtT2ZGaWxlKGZpbGVQYXRoOiBQYXRoTGlrZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGExXCIpO1xuICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCk7XG4gICAgaW5wdXQub24oXCJlcnJvclwiLCByZWplY3QpO1xuICAgIGlucHV0Lm9uKFwiZGF0YVwiLCAoY2h1bms6IEJpbmFyeUxpa2UpID0+IHtcbiAgICAgIGhhc2gudXBkYXRlKGNodW5rKTtcbiAgICB9KTtcbiAgICBpbnB1dC5vbihcImNsb3NlXCIsICgpID0+IHtcbiAgICAgIHJlc29sdmUoaGFzaC5kaWdlc3QoXCJoZXhcIikpO1xuICAgIH0pO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJjcnlwdG8iLCJlcXVhbCIsImNyZWF0ZVJlYWRTdHJlYW0iLCJyZWFkRmlsZSIsIndyaXRlRmlsZSIsInBhdGgiLCJpc0VxdWFsIiwiU29uYW11IiwiZ2xvYkFzeW5jIiwiZXhpc3RzIiwiZGlmZmVyZW5jZVdpdGgiLCJnZXRDaGVja3N1bVBhdHRlcm5Hcm91cEluQWJzb2x1dGVQYXRoIiwiZmluZENoYW5nZWRGaWxlc1VzaW5nQ2hlY2tzdW1zIiwiY2FsY3VsYXRlZENoZWNrc3VtcyIsImdldEN1cnJlbnRDaGVja3N1bXMiLCJzYXZlZENoZWNrc3VtcyIsImdldFByZXZpb3VzQ2hlY2tzdW1zIiwiaXNTYW1lIiwibWFwIiwiciIsInJlbmV3Q2hlY2tzdW1zIiwic2F2ZUNoZWNrc3VtcyIsImFyZUZpbGVzU2FtZSIsIm9uZSIsInR3byIsIm9uZUNoZWNrc3VtIiwiZ2V0Q2hlY2tzdW1PZkZpbGUiLCJ0d29DaGVja3N1bSIsImZpbGVQYXRocyIsIlByb21pc2UiLCJhbGwiLCJPYmplY3QiLCJlbnRyaWVzIiwiX2ZpbGVUeXBlIiwicGF0dGVybiIsImZsYXQiLCJzb3J0IiwiZmlsZUNoZWNrc3VtcyIsImZpbGVQYXRoIiwiY2hlY2tzdW0iLCJjaGVja3N1bUZpbGVQYXRoIiwiZ2V0Q2hlY2tzdW1GaWxlUGF0aCIsInByZXZpb3VzQ2hlY2tzdW1zIiwiSlNPTiIsInBhcnNlIiwiam9pbiIsImFwaVJvb3RQYXRoIiwiY2hlY2tzdW1zIiwic3RyaW5naWZ5IiwicmVsYXRpdmUiLCJjb25zb2xlIiwibG9nIiwicmVzb2x2ZSIsInJlamVjdCIsImhhc2giLCJjcmVhdGVIYXNoIiwiaW5wdXQiLCJvbiIsImNodW5rIiwidXBkYXRlIiwiZGlnZXN0Il0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFpQyxTQUFTO0FBQ2pELE9BQU9DLFdBQVcsa0JBQWtCO0FBQ3BDLFNBQVNDLGdCQUFnQixRQUF1QixLQUFLO0FBQ3JELFNBQVNDLFFBQVEsRUFBRUMsU0FBUyxRQUFRLG1CQUFjO0FBQ2xELE9BQU9DLFVBQVUsT0FBTztBQUN4QixTQUFTQyxPQUFPLFFBQVEsVUFBVTtBQUNsQyxTQUFTQyxNQUFNLFFBQVEsbUJBQWdCO0FBQ3ZDLFNBQVNDLFNBQVMsUUFBUSwwQkFBdUI7QUFDakQsU0FBU0MsTUFBTSxRQUFRLHVCQUFvQjtBQUUzQyxTQUFTQyxjQUFjLFFBQVEsb0JBQWlCO0FBQ2hELFNBQVNDLHFDQUFxQyxRQUFRLHFCQUFrQjtBQU94RTs7O0NBR0MsR0FDRCxPQUFPLGVBQWVDO0lBQ3BCLE1BQU1DLHNCQUFzQixNQUFNQztJQUNsQyxNQUFNQyxpQkFBaUIsTUFBTUM7SUFFN0IsTUFBTUMsU0FBU2hCLE1BQU1ZLHFCQUFxQkU7SUFDMUMsSUFBSUUsUUFBUTtRQUNWLE9BQU8sRUFBRTtJQUNYO0lBRUEsT0FBT1AsZUFBZUcscUJBQXFCRSxnQkFBZ0JULFNBQVNZLEdBQUcsQ0FBQyxDQUFDQyxJQUFNQSxFQUFFZCxJQUFJO0FBQ3ZGO0FBRUE7OztDQUdDLEdBQ0QsT0FBTyxlQUFlZTtJQUNwQixNQUFNUCxzQkFBc0IsTUFBTUM7SUFDbEMsTUFBTUMsaUJBQWlCLE1BQU1DO0lBRTdCLE1BQU1DLFNBQVNoQixNQUFNWSxxQkFBcUJFO0lBQzFDLElBQUlFLFFBQVE7UUFDVjtJQUNGO0lBRUEsTUFBTUksY0FBY1I7QUFDdEI7QUFFQTs7Ozs7O0NBTUMsR0FDRCxPQUFPLGVBQWVTLGFBQWFDLEdBQWEsRUFBRUMsR0FBYTtJQUM3RCxJQUFJLENBQUUsTUFBTWYsT0FBT2MsUUFBUyxDQUFFLE1BQU1kLE9BQU9lLE1BQU87UUFDaEQsT0FBTztJQUNUO0lBRUEsTUFBTUMsY0FBYyxNQUFNQyxrQkFBa0JIO0lBQzVDLE1BQU1JLGNBQWMsTUFBTUQsa0JBQWtCRjtJQUU1QyxPQUFPQyxnQkFBZ0JFO0FBQ3pCO0FBRUEsZUFBZWI7SUFDYixNQUFNYyxZQUFZLEFBQ2hCLENBQUEsTUFBTUMsUUFBUUMsR0FBRyxDQUNmQyxPQUFPQyxPQUFPLENBQUNyQix5Q0FBeUNPLEdBQUcsQ0FBQyxPQUFPLENBQUNlLFdBQVdDLFFBQVE7UUFDckYsT0FBTzFCLFVBQVUwQjtJQUNuQixHQUNGLEVBRUNDLElBQUksR0FDSkMsSUFBSTtJQUVQLE1BQU1DLGdCQUFnQixNQUFNUixRQUFRQyxHQUFHLENBQ3JDRixVQUFVVixHQUFHLENBQUMsT0FBT29CO1FBQ25CLE9BQU87WUFDTGpDLE1BQU1pQztZQUNOQyxVQUFVLE1BQU1iLGtCQUFrQlk7UUFDcEM7SUFDRjtJQUdGLE9BQU9EO0FBQ1Q7QUFFQSxlQUFlckI7SUFDYixNQUFNd0IsbUJBQW1CQztJQUN6QixJQUFJLENBQUUsTUFBTWhDLE9BQU8rQixtQkFBb0I7UUFDckMsT0FBTyxFQUFFO0lBQ1g7SUFFQSxNQUFNRSxvQkFBb0JDLEtBQUtDLEtBQUssQ0FBQyxNQUFNekMsU0FBU3FDLGtCQUFrQixVQUFVdEIsR0FBRyxDQUNqRixDQUFDQyxJQUFvRCxDQUFBO1lBQ25EZCxNQUFNQSxLQUFLd0MsSUFBSSxDQUFDdEMsT0FBT3VDLFdBQVcsRUFBRTNCLEVBQUVkLElBQUk7WUFDMUNrQyxVQUFVcEIsRUFBRW9CLFFBQVE7UUFDdEIsQ0FBQTtJQUVGLE9BQU9HO0FBQ1Q7QUFFQSxTQUFTRDtJQUNQLE9BQU9wQyxLQUFLd0MsSUFBSSxDQUFDdEMsT0FBT3VDLFdBQVcsRUFBRTtBQUN2QztBQUVBLGVBQWV6QixjQUFjMEIsU0FBNEI7SUFDdkQsTUFBTVAsbUJBQW1CQztJQUN6QixNQUFNckMsVUFDSm9DLGtCQUNBRyxLQUFLSyxTQUFTLENBQ1pELFVBQVU3QixHQUFHLENBQUMsQ0FBQ0MsSUFBTyxDQUFBO1lBQ3BCZCxNQUFNQSxLQUFLNEMsUUFBUSxDQUFDMUMsT0FBT3VDLFdBQVcsRUFBRTNCLEVBQUVkLElBQUk7WUFDOUNrQyxVQUFVcEIsRUFBRW9CLFFBQVE7UUFDdEIsQ0FBQSxJQUNBLE1BQ0EsSUFFRjtJQUVGVyxRQUFRQyxHQUFHLENBQUMsa0JBQWtCWDtBQUNoQztBQUVBLGVBQWVkLGtCQUFrQlksUUFBa0I7SUFDakQsT0FBTyxJQUFJVCxRQUFnQixDQUFDdUIsU0FBU0M7UUFDbkMsTUFBTUMsT0FBT3RELE9BQU91RCxVQUFVLENBQUM7UUFDL0IsTUFBTUMsUUFBUXRELGlCQUFpQm9DO1FBQy9Ca0IsTUFBTUMsRUFBRSxDQUFDLFNBQVNKO1FBQ2xCRyxNQUFNQyxFQUFFLENBQUMsUUFBUSxDQUFDQztZQUNoQkosS0FBS0ssTUFBTSxDQUFDRDtRQUNkO1FBQ0FGLE1BQU1DLEVBQUUsQ0FBQyxTQUFTO1lBQ2hCTCxRQUFRRSxLQUFLTSxNQUFNLENBQUM7UUFDdEI7SUFDRjtBQUNGIn0=
@@ -1,5 +1,5 @@
1
- import { GenerateOptions, PathAndCode, TemplateKey, TemplateOptions } from "../types/types";
2
- import { AbsolutePath } from "../utils/path-utils";
1
+ import type { GenerateOptions, PathAndCode, TemplateKey, TemplateOptions } from "../types/types";
2
+ import type { AbsolutePath } from "../utils/path-utils";
3
3
  /**
4
4
  * 템플릿을 렌더링하고 파일로 생성합니다.
5
5
  * overwrite 옵션이 false인 경우, 이미 존재하는 파일은 건너뜁니다.
@@ -8,7 +8,7 @@ import { AbsolutePath } from "../utils/path-utils";
8
8
  * @param _generateOptions - 생성 옵션 (overwrite 여부)
9
9
  * @returns 생성된 파일 경로 배열
10
10
  */
11
- export declare function generateTemplate(key: TemplateKey, templateOptions: any, _generateOptions?: GenerateOptions): Promise<AbsolutePath[]>;
11
+ export declare function generateTemplate<T extends TemplateKey>(key: T, templateOptions: TemplateOptions[T], _generateOptions?: GenerateOptions): Promise<AbsolutePath[]>;
12
12
  /**
13
13
  * 템플릿을 렌더링하여 PathAndCode 객체를 반환합니다.
14
14
  * 파일로 쓰지 않고 메모리상에서만 렌더링합니다.
@@ -1 +1 @@
1
- {"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/syncer/code-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,eAAe,EACf,WAAW,EACX,WAAW,EACX,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAWxB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,WAAW,EAChB,eAAe,EAAE,GAAG,EACpB,gBAAgB,CAAC,EAAE,eAAe,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC,CA2CzB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,eAAe,EAClE,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,WAAW,EAAE,CAAC,CAkBxB"}
1
+ {"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/syncer/code-generator.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAMjG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,SAAS,WAAW,EAC1D,GAAG,EAAE,CAAC,EACN,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,EACnC,gBAAgB,CAAC,EAAE,eAAe,GACjC,OAAO,CAAC,YAAY,EAAE,CAAC,CAyCzB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,MAAM,eAAe,EAClE,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,WAAW,EAAE,CAAC,CAoBxB"}
@@ -1,15 +1,17 @@
1
+ import chalk from "chalk";
2
+ import { mkdir, writeFile } from "node:fs/promises";
1
3
  import path from "path";
4
+ import { unique } from "radashi";
2
5
  import { Sonamu } from "../api/sonamu.js";
6
+ import { EntityManager } from "../entity/entity-manager.js";
3
7
  import { AlreadyProcessedException } from "../exceptions/so-exceptions.js";
8
+ import { Naite } from "../naite/naite.js";
9
+ import { TemplateManager } from "../template/template-manager.js";
4
10
  import { everyAsync, filterAsync } from "../utils/async-utils.js";
11
+ import { isTest } from "../utils/controller.js";
12
+ import { formatCode } from "../utils/formatter.js";
5
13
  import { exists } from "../utils/fs-utils.js";
6
- import chalk from "chalk";
7
- import { mkdir, writeFile } from "node:fs/promises";
8
- import * as _ from "lodash-es";
9
- import { Template } from "../template/template.js";
10
- import { EntityManager } from "../entity/entity-manager.js";
11
14
  import { wrapIf } from "../utils/lodash-able.js";
12
- import prettier from "prettier";
13
15
  /**
14
16
  * 템플릿을 렌더링하고 파일로 생성합니다.
15
17
  * overwrite 옵션이 false인 경우, 이미 존재하는 파일은 건너뜁니다.
@@ -22,6 +24,11 @@ import prettier from "prettier";
22
24
  overwrite: false,
23
25
  ..._generateOptions
24
26
  };
27
+ Naite.t("generateTemplate", {
28
+ key,
29
+ templateOptions,
30
+ generateOptions
31
+ });
25
32
  // 키 children
26
33
  const keys = [
27
34
  key
@@ -54,7 +61,11 @@ import prettier from "prettier";
54
61
  * @param options - 템플릿 렌더링 옵션
55
62
  * @returns 경로와 코드 쌍의 배열
56
63
  */ export async function renderTemplate(key, options) {
57
- const template = Template.find(key);
64
+ Naite.t("renderTemplate", {
65
+ key,
66
+ options
67
+ });
68
+ const template = TemplateManager.get(key);
58
69
  const rendered = await template.render(options);
59
70
  const resolved = await resolveRenderedTemplate(key, rendered);
60
71
  let preTemplateResolved = [];
@@ -69,6 +80,10 @@ import prettier from "prettier";
69
80
  ];
70
81
  }
71
82
  async function resolveRenderedTemplate(key, result) {
83
+ Naite.t(`resolveRenderedTemplate${key}`, {
84
+ key,
85
+ result
86
+ });
72
87
  const { target, path: filePath, body, importKeys, customHeaders } = result;
73
88
  // import 할 대상의 대상 path 추출
74
89
  const importDefs = importKeys.reduce((r, importKey)=>{
@@ -77,13 +92,13 @@ async function resolveRenderedTemplate(key, result) {
77
92
  if (modulePath.includes("/") || modulePath.includes(".")) {
78
93
  importPath = wrapIf(path.relative(path.dirname(filePath), modulePath), (p)=>[
79
94
  p.startsWith(".") === false,
80
- "./" + p
95
+ `./${p}`
81
96
  ]);
82
97
  }
83
98
  // 같은 파일에서 import 하는 경우 keys 로 나열 처리
84
99
  const existsOne = r.find((importDef)=>importDef.from === importPath);
85
100
  if (existsOne) {
86
- existsOne.keys = _.uniq(existsOne.keys.concat(importKey));
101
+ existsOne.keys = unique(existsOne.keys.concat(importKey));
87
102
  } else {
88
103
  r.push({
89
104
  keys: [
@@ -94,7 +109,7 @@ async function resolveRenderedTemplate(key, result) {
94
109
  }
95
110
  return r;
96
111
  }, [])// 셀프 참조 방지
97
- .filter((importDef)=>filePath.endsWith(importDef.from.replace("./", "") + ".ts") === false);
112
+ .filter((importDef)=>filePath.endsWith(`${importDef.from.replace("./", "")}.ts`) === false);
98
113
  // 커스텀 헤더 포함하여 헤더 생성
99
114
  const header = [
100
115
  ...customHeaders ?? [],
@@ -107,16 +122,21 @@ async function resolveRenderedTemplate(key, result) {
107
122
  body
108
123
  ].join("\n\n");
109
124
  } else {
110
- return prettier.format([
125
+ Naite.t("resolveRenderedTemplate:beforeFormat", {
126
+ key,
111
127
  header,
112
128
  body
113
- ].join("\n\n"), {
114
- parser: key === "entity" ? "json" : "typescript"
115
129
  });
130
+ const formatted = formatCode([
131
+ header,
132
+ body
133
+ ].join("\n\n"), key === "entity" ? "json" : "typescript", `${Sonamu.appRootPath}/${filePath}`);
134
+ Naite.t(`resolveRenderedTemplate:formatted:${key}`, formatted);
135
+ return formatted;
116
136
  }
117
137
  })();
118
138
  return {
119
- path: target + "/" + filePath,
139
+ path: `${target}/${filePath}`,
120
140
  code: formatted
121
141
  };
122
142
  }
@@ -124,7 +144,7 @@ async function writeCodeToPathEachTarget(pathAndCode) {
124
144
  const { targets } = Sonamu.config.sync;
125
145
  const { appRootPath } = Sonamu;
126
146
  const filePath = `${Sonamu.appRootPath}/${pathAndCode.path}`;
127
- const dstFilePaths = _.uniq(targets.map((target)=>filePath.replace("/:target/", `/${target}/`)));
147
+ const dstFilePaths = unique(targets.map((target)=>filePath.replace("/:target/", `/${target}/`)));
128
148
  return await Promise.all(dstFilePaths.map(async (dstFilePath)=>{
129
149
  const dir = path.dirname(dstFilePath);
130
150
  if (!await exists(dir)) {
@@ -133,9 +153,9 @@ async function writeCodeToPathEachTarget(pathAndCode) {
133
153
  });
134
154
  }
135
155
  await writeFile(dstFilePath, pathAndCode.code);
136
- console.log(chalk.bold("Generated: ") + chalk.blue(`${dstFilePath.replace(appRootPath + "/", "")}`));
156
+ !isTest() && console.log(chalk.bold("Generated: ") + chalk.blue(`${dstFilePath.replace(`${appRootPath}/`, "")}`));
137
157
  return dstFilePath;
138
158
  }));
139
159
  }
140
160
 
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvY29kZS1nZW5lcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uIH0gZnJvbSBcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuaW1wb3J0IHtcbiAgR2VuZXJhdGVPcHRpb25zLFxuICBQYXRoQW5kQ29kZSxcbiAgVGVtcGxhdGVLZXksXG4gIFRlbXBsYXRlT3B0aW9ucyxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBldmVyeUFzeW5jLCBmaWx0ZXJBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxzL2ZzLXV0aWxzXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgKiBhcyBfIGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBSZW5kZXJlZFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgd3JhcElmIH0gZnJvbSBcIi4uL3V0aWxzL2xvZGFzaC1hYmxlXCI7XG5pbXBvcnQgcHJldHRpZXIgZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgeyBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuXG4vKipcbiAqIO2FnO2UjOumv+ydhCDroIzrjZTrp4HtlZjqs6Ag7YyM7J2866GcIOyDneyEse2VqeuLiOuLpC5cbiAqIG92ZXJ3cml0ZSDsmLXshZjsnbQgZmFsc2Xsnbgg6rK97JqwLCDsnbTrr7gg7KG07J6s7ZWY64qUIO2MjOydvOydgCDqsbTrhIjrnIHri4jri6QuXG4gKiBAcGFyYW0ga2V5IC0g7YWc7ZSM66a/IO2CpCAo7JiIOiBcImVudGl0eVwiLCBcIm1vZGVsXCIsIFwic2VydmljZVwiIOuTsSlcbiAqIEBwYXJhbSB0ZW1wbGF0ZU9wdGlvbnMgLSDthZztlIzrpr8g66CM642U66eB7JeQIO2VhOyalO2VnCDsmLXshZhcbiAqIEBwYXJhbSBfZ2VuZXJhdGVPcHRpb25zIC0g7IOd7ISxIOyYteyFmCAob3ZlcndyaXRlIOyXrOu2gClcbiAqIEByZXR1cm5zIOyDneyEseuQnCDtjIzsnbwg6rK966GcIOuwsOyXtFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVUZW1wbGF0ZShcbiAga2V5OiBUZW1wbGF0ZUtleSxcbiAgdGVtcGxhdGVPcHRpb25zOiBhbnksXG4gIF9nZW5lcmF0ZU9wdGlvbnM/OiBHZW5lcmF0ZU9wdGlvbnNcbik6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgY29uc3QgZ2VuZXJhdGVPcHRpb25zID0ge1xuICAgIG92ZXJ3cml0ZTogZmFsc2UsXG4gICAgLi4uX2dlbmVyYXRlT3B0aW9ucyxcbiAgfTtcblxuICAvLyDtgqQgY2hpbGRyZW5cbiAgY29uc3Qga2V5czogVGVtcGxhdGVLZXlbXSA9IFtrZXldO1xuXG4gIC8vIO2FnO2UjOumvyDroIzrjZRcbiAgY29uc3QgcGF0aEFuZENvZGVzID0gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAga2V5cy5tYXAoYXN5bmMgKGtleSkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVuZGVyVGVtcGxhdGUoa2V5LCB0ZW1wbGF0ZU9wdGlvbnMpO1xuICAgICAgfSlcbiAgICApXG4gICkuZmxhdCgpO1xuXG4gIGNvbnN0IGZpbHRlcmVkUGF0aEFuZENvZGVzOiBQYXRoQW5kQ29kZVtdID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoZ2VuZXJhdGVPcHRpb25zLm92ZXJ3cml0ZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHBhdGhBbmRDb2RlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGF3YWl0IGZpbHRlckFzeW5jKHBhdGhBbmRDb2RlcywgYXN5bmMgKHBhdGhBbmRDb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0cyB9ID0gU29uYW11LmNvbmZpZy5zeW5jO1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGAke1NvbmFtdS5hcHBSb290UGF0aH0vJHtwYXRoQW5kQ29kZS5wYXRofWA7XG4gICAgICAgIGNvbnN0IGRzdEZpbGVQYXRocyA9IHRhcmdldHMubWFwKCh0YXJnZXQpID0+XG4gICAgICAgICAgZmlsZVBhdGgucmVwbGFjZShcIi86dGFyZ2V0L1wiLCBgLyR7dGFyZ2V0fS9gKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gYXdhaXQgZXZlcnlBc3luYyhcbiAgICAgICAgICBkc3RGaWxlUGF0aHMsXG4gICAgICAgICAgYXN5bmMgKGRzdFBhdGgpID0+ICEoYXdhaXQgZXhpc3RzKGRzdFBhdGgpKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICB9KSgpO1xuICBcbiAgaWYgKGZpbHRlcmVkUGF0aEFuZENvZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uKFwi7J2066+4IOqyveuhnOyXkCDrqqjrk6Ag7YyM7J287J20IOyhtOyerO2VqeuLiOuLpC5cIik7XG4gIH1cblxuICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGZpbHRlcmVkUGF0aEFuZENvZGVzLm1hcCgocGF0aEFuZENvZGUpID0+IHdyaXRlQ29kZVRvUGF0aEVhY2hUYXJnZXQocGF0aEFuZENvZGUpKVxuICApKS5mbGF0KCk7XG59XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOyXrCBQYXRoQW5kQ29kZSDqsJ3ssrTrpbwg67CY7ZmY7ZWp64uI64ukLlxuICog7YyM7J2866GcIOyTsOyngCDslYrqs6Ag66mU66qo66as7IOB7JeQ7ISc66eMIOugjOuNlOunge2VqeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkXG4gKiBAcGFyYW0gb3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Eg7Ji17IWYXG4gKiBAcmV0dXJucyDqsr3roZzsmYAg7L2U65OcIOyMjeydmCDrsLDsl7RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICBrZXk6IFQsXG4gIG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXVxuKTogUHJvbWlzZTxQYXRoQW5kQ29kZVtdPiB7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZmluZChrZXkpO1xuXG4gIGNvbnN0IHJlbmRlcmVkID0gYXdhaXQgdGVtcGxhdGUucmVuZGVyKG9wdGlvbnMpO1xuICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVSZW5kZXJlZFRlbXBsYXRlKGtleSwgcmVuZGVyZWQpO1xuXG4gIGxldCBwcmVUZW1wbGF0ZVJlc29sdmVkOiBQYXRoQW5kQ29kZVtdID0gW107XG4gIGlmIChyZW5kZXJlZC5wcmVUZW1wbGF0ZXMpIHtcbiAgICBwcmVUZW1wbGF0ZVJlc29sdmVkID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHJlbmRlcmVkLnByZVRlbXBsYXRlcy5tYXAoKHsga2V5LCBvcHRpb25zIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVuZGVyVGVtcGxhdGUoa2V5LCBvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLmZsYXQoKTtcbiAgfVxuXG4gIHJldHVybiBbcmVzb2x2ZWQsIC4uLnByZVRlbXBsYXRlUmVzb2x2ZWRdO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZShcbiAga2V5OiBUZW1wbGF0ZUtleSxcbiAgcmVzdWx0OiBSZW5kZXJlZFRlbXBsYXRlXG4pOiBQcm9taXNlPFBhdGhBbmRDb2RlPiB7XG4gIGNvbnN0IHsgdGFyZ2V0LCBwYXRoOiBmaWxlUGF0aCwgYm9keSwgaW1wb3J0S2V5cywgY3VzdG9tSGVhZGVycyB9ID0gcmVzdWx0O1xuXG4gIC8vIGltcG9ydCDtlaAg64yA7IOB7J2YIOuMgOyDgSBwYXRoIOy2lOy2nFxuICBjb25zdCBpbXBvcnREZWZzID0gaW1wb3J0S2V5c1xuICAgIC5yZWR1Y2UoXG4gICAgICAociwgaW1wb3J0S2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IG1vZHVsZVBhdGggPSBFbnRpdHlNYW5hZ2VyLmdldE1vZHVsZVBhdGgoaW1wb3J0S2V5KTtcbiAgICAgICAgbGV0IGltcG9ydFBhdGggPSBtb2R1bGVQYXRoO1xuICAgICAgICBpZiAobW9kdWxlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHwgbW9kdWxlUGF0aC5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gd3JhcElmKFxuICAgICAgICAgICAgcGF0aC5yZWxhdGl2ZShwYXRoLmRpcm5hbWUoZmlsZVBhdGgpLCBtb2R1bGVQYXRoKSxcbiAgICAgICAgICAgIChwKSA9PiBbcC5zdGFydHNXaXRoKFwiLlwiKSA9PT0gZmFsc2UsIFwiLi9cIiArIHBdXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOqwmeydgCDtjIzsnbzsl5DshJwgaW1wb3J0IO2VmOuKlCDqsr3smrAga2V5cyDroZwg64KY7Je0IOyymOumrFxuICAgICAgICBjb25zdCBleGlzdHNPbmUgPSByLmZpbmQoKGltcG9ydERlZikgPT4gaW1wb3J0RGVmLmZyb20gPT09IGltcG9ydFBhdGgpO1xuICAgICAgICBpZiAoZXhpc3RzT25lKSB7XG4gICAgICAgICAgZXhpc3RzT25lLmtleXMgPSBfLnVuaXEoZXhpc3RzT25lLmtleXMuY29uY2F0KGltcG9ydEtleSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHIucHVzaCh7XG4gICAgICAgICAgICBrZXlzOiBbaW1wb3J0S2V5XSxcbiAgICAgICAgICAgIGZyb206IGltcG9ydFBhdGgsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9LFxuICAgICAgW10gYXMge1xuICAgICAgICBrZXlzOiBzdHJpbmdbXTtcbiAgICAgICAgZnJvbTogc3RyaW5nO1xuICAgICAgfVtdXG4gICAgKVxuICAgIC8vIOyFgO2UhCDssLjsobAg67Cp7KeAXG4gICAgLmZpbHRlcihcbiAgICAgIChpbXBvcnREZWYpID0+XG4gICAgICAgIGZpbGVQYXRoLmVuZHNXaXRoKGltcG9ydERlZi5mcm9tLnJlcGxhY2UoXCIuL1wiLCBcIlwiKSArIFwiLnRzXCIpID09PSBmYWxzZVxuICAgICk7XG5cbiAgLy8g7Luk7Iqk7YWAIO2XpOuNlCDtj6ztlajtlZjsl6wg7Zek642UIOyDneyEsVxuICBjb25zdCBoZWFkZXIgPSBbXG4gICAgLi4uKGN1c3RvbUhlYWRlcnMgPz8gW10pLFxuICAgIC4uLmltcG9ydERlZnMubWFwKFxuICAgICAgKGltcG9ydERlZikgPT5cbiAgICAgICAgYGltcG9ydCB7ICR7aW1wb3J0RGVmLmtleXMuam9pbihcIiwgXCIpfSB9IGZyb20gJyR7aW1wb3J0RGVmLmZyb219J2BcbiAgICApLFxuICBdLmpvaW4oXCJcXG5cIik7XG5cbiAgY29uc3QgZm9ybWF0dGVkID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoa2V5ID09PSBcImdlbmVyYXRlZF9odHRwXCIpIHtcbiAgICAgIHJldHVybiBbaGVhZGVyLCBib2R5XS5qb2luKFwiXFxuXFxuXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJldHRpZXIuZm9ybWF0KFtoZWFkZXIsIGJvZHldLmpvaW4oXCJcXG5cXG5cIiksIHtcbiAgICAgICAgcGFyc2VyOiBrZXkgPT09IFwiZW50aXR5XCIgPyBcImpzb25cIiA6IFwidHlwZXNjcmlwdFwiLFxuICAgICAgfSk7XG4gICAgfVxuICB9KSgpO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aDogdGFyZ2V0ICsgXCIvXCIgKyBmaWxlUGF0aCxcbiAgICBjb2RlOiBmb3JtYXR0ZWQsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29kZVRvUGF0aEVhY2hUYXJnZXQoXG4gIHBhdGhBbmRDb2RlOiBQYXRoQW5kQ29kZVxuKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBhcHBSb290UGF0aCB9ID0gU29uYW11O1xuICBjb25zdCBmaWxlUGF0aCA9IGAke1NvbmFtdS5hcHBSb290UGF0aH0vJHtwYXRoQW5kQ29kZS5wYXRofWAgYXMgQWJzb2x1dGVQYXRoO1xuXG4gIGNvbnN0IGRzdEZpbGVQYXRocyA9IF8udW5pcShcbiAgICB0YXJnZXRzLm1hcCgodGFyZ2V0KSA9PlxuICAgICAgZmlsZVBhdGgucmVwbGFjZShcIi86dGFyZ2V0L1wiLCBgLyR7dGFyZ2V0fS9gKVxuICAgICkgYXMgQWJzb2x1dGVQYXRoW11cbiAgKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGRzdEZpbGVQYXRocy5tYXAoYXN5bmMgKGRzdEZpbGVQYXRoKSA9PiB7XG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0RmlsZVBhdGgpO1xuICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKGRpcikpKSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZHN0RmlsZVBhdGgsIHBhdGhBbmRDb2RlLmNvZGUpO1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGNoYWxrLmJvbGQoXCJHZW5lcmF0ZWQ6IFwiKSArXG4gICAgICAgICAgY2hhbGsuYmx1ZShgJHtkc3RGaWxlUGF0aC5yZXBsYWNlKGFwcFJvb3RQYXRoICsgXCIvXCIsIFwiXCIpfWApXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRzdEZpbGVQYXRoO1xuICAgIH0pXG4gICk7XG59XG4iXSwibmFtZXMiOlsicGF0aCIsIlNvbmFtdSIsIkFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24iLCJldmVyeUFzeW5jIiwiZmlsdGVyQXN5bmMiLCJleGlzdHMiLCJjaGFsayIsIm1rZGlyIiwid3JpdGVGaWxlIiwiXyIsIlRlbXBsYXRlIiwiRW50aXR5TWFuYWdlciIsIndyYXBJZiIsInByZXR0aWVyIiwiZ2VuZXJhdGVUZW1wbGF0ZSIsImtleSIsInRlbXBsYXRlT3B0aW9ucyIsIl9nZW5lcmF0ZU9wdGlvbnMiLCJnZW5lcmF0ZU9wdGlvbnMiLCJvdmVyd3JpdGUiLCJrZXlzIiwicGF0aEFuZENvZGVzIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsInJlbmRlclRlbXBsYXRlIiwiZmxhdCIsImZpbHRlcmVkUGF0aEFuZENvZGVzIiwicGF0aEFuZENvZGUiLCJ0YXJnZXRzIiwiY29uZmlnIiwic3luYyIsImZpbGVQYXRoIiwiYXBwUm9vdFBhdGgiLCJkc3RGaWxlUGF0aHMiLCJ0YXJnZXQiLCJyZXBsYWNlIiwiZHN0UGF0aCIsImxlbmd0aCIsIndyaXRlQ29kZVRvUGF0aEVhY2hUYXJnZXQiLCJvcHRpb25zIiwidGVtcGxhdGUiLCJmaW5kIiwicmVuZGVyZWQiLCJyZW5kZXIiLCJyZXNvbHZlZCIsInJlc29sdmVSZW5kZXJlZFRlbXBsYXRlIiwicHJlVGVtcGxhdGVSZXNvbHZlZCIsInByZVRlbXBsYXRlcyIsInJlc3VsdCIsImJvZHkiLCJpbXBvcnRLZXlzIiwiY3VzdG9tSGVhZGVycyIsImltcG9ydERlZnMiLCJyZWR1Y2UiLCJyIiwiaW1wb3J0S2V5IiwibW9kdWxlUGF0aCIsImdldE1vZHVsZVBhdGgiLCJpbXBvcnRQYXRoIiwiaW5jbHVkZXMiLCJyZWxhdGl2ZSIsImRpcm5hbWUiLCJwIiwic3RhcnRzV2l0aCIsImV4aXN0c09uZSIsImltcG9ydERlZiIsImZyb20iLCJ1bmlxIiwiY29uY2F0IiwicHVzaCIsImZpbHRlciIsImVuZHNXaXRoIiwiaGVhZGVyIiwiam9pbiIsImZvcm1hdHRlZCIsImZvcm1hdCIsInBhcnNlciIsImNvZGUiLCJkc3RGaWxlUGF0aCIsImRpciIsInJlY3Vyc2l2ZSIsImNvbnNvbGUiLCJsb2ciLCJib2xkIiwiYmx1ZSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsVUFBVSxPQUFPO0FBQ3hCLFNBQVNDLE1BQU0sUUFBUSxtQkFBZ0I7QUFDdkMsU0FBU0MseUJBQXlCLFFBQVEsaUNBQThCO0FBT3hFLFNBQVNDLFVBQVUsRUFBRUMsV0FBVyxRQUFRLDBCQUF1QjtBQUMvRCxTQUFTQyxNQUFNLFFBQVEsdUJBQW9CO0FBQzNDLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixTQUFTQyxLQUFLLEVBQUVDLFNBQVMsUUFBUSxtQkFBYztBQUMvQyxZQUFZQyxPQUFPLFlBQVk7QUFDL0IsU0FBU0MsUUFBUSxRQUFRLDBCQUF1QjtBQUVoRCxTQUFTQyxhQUFhLFFBQVEsOEJBQTJCO0FBQ3pELFNBQVNDLE1BQU0sUUFBUSwwQkFBdUI7QUFDOUMsT0FBT0MsY0FBYyxXQUFXO0FBR2hDOzs7Ozs7O0NBT0MsR0FDRCxPQUFPLGVBQWVDLGlCQUNwQkMsR0FBZ0IsRUFDaEJDLGVBQW9CLEVBQ3BCQyxnQkFBa0M7SUFFbEMsTUFBTUMsa0JBQWtCO1FBQ3RCQyxXQUFXO1FBQ1gsR0FBR0YsZ0JBQWdCO0lBQ3JCO0lBRUEsYUFBYTtJQUNiLE1BQU1HLE9BQXNCO1FBQUNMO0tBQUk7SUFFakMsU0FBUztJQUNULE1BQU1NLGVBQWUsQUFDbkIsQ0FBQSxNQUFNQyxRQUFRQyxHQUFHLENBQ2ZILEtBQUtJLEdBQUcsQ0FBQyxPQUFPVDtRQUNkLE9BQU8sTUFBTVUsZUFBZVYsS0FBS0M7SUFDbkMsR0FDRixFQUNBVSxJQUFJO0lBRU4sTUFBTUMsdUJBQXNDLE1BQU0sQUFBQyxDQUFBO1FBQ2pELElBQUlULGdCQUFnQkMsU0FBUyxLQUFLLE1BQU07WUFDdEMsT0FBT0U7UUFDVCxPQUFPO1lBQ0wsT0FBTyxNQUFNakIsWUFBWWlCLGNBQWMsT0FBT087Z0JBQzVDLE1BQU0sRUFBRUMsT0FBTyxFQUFFLEdBQUc1QixPQUFPNkIsTUFBTSxDQUFDQyxJQUFJO2dCQUN0QyxNQUFNQyxXQUFXLEdBQUcvQixPQUFPZ0MsV0FBVyxDQUFDLENBQUMsRUFBRUwsWUFBWTVCLElBQUksRUFBRTtnQkFDNUQsTUFBTWtDLGVBQWVMLFFBQVFMLEdBQUcsQ0FBQyxDQUFDVyxTQUNoQ0gsU0FBU0ksT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUVELE9BQU8sQ0FBQyxDQUFDO2dCQUU3QyxPQUFPLE1BQU1oQyxXQUNYK0IsY0FDQSxPQUFPRyxVQUFZLENBQUUsTUFBTWhDLE9BQU9nQztZQUV0QztRQUNGO0lBQ0YsQ0FBQTtJQUVBLElBQUlWLHFCQUFxQlcsTUFBTSxLQUFLLEdBQUc7UUFDckMsTUFBTSxJQUFJcEMsMEJBQTBCO0lBQ3RDO0lBRUEsT0FBTyxBQUFDLENBQUEsTUFBTW9CLFFBQVFDLEdBQUcsQ0FDdkJJLHFCQUFxQkgsR0FBRyxDQUFDLENBQUNJLGNBQWdCVywwQkFBMEJYLGNBQ3RFLEVBQUdGLElBQUk7QUFDVDtBQUVBOzs7Ozs7Q0FNQyxHQUNELE9BQU8sZUFBZUQsZUFDcEJWLEdBQU0sRUFDTnlCLE9BQTJCO0lBRTNCLE1BQU1DLFdBQVcvQixTQUFTZ0MsSUFBSSxDQUFDM0I7SUFFL0IsTUFBTTRCLFdBQVcsTUFBTUYsU0FBU0csTUFBTSxDQUFDSjtJQUN2QyxNQUFNSyxXQUFXLE1BQU1DLHdCQUF3Qi9CLEtBQUs0QjtJQUVwRCxJQUFJSSxzQkFBcUMsRUFBRTtJQUMzQyxJQUFJSixTQUFTSyxZQUFZLEVBQUU7UUFDekJELHNCQUFzQixBQUNwQixDQUFBLE1BQU16QixRQUFRQyxHQUFHLENBQ2ZvQixTQUFTSyxZQUFZLENBQUN4QixHQUFHLENBQUMsQ0FBQyxFQUFFVCxHQUFHLEVBQUV5QixPQUFPLEVBQUU7WUFDekMsT0FBT2YsZUFBZVYsS0FBS3lCO1FBQzdCLEdBQ0YsRUFDQWQsSUFBSTtJQUNSO0lBRUEsT0FBTztRQUFDbUI7V0FBYUU7S0FBb0I7QUFDM0M7QUFFQSxlQUFlRCx3QkFDYi9CLEdBQWdCLEVBQ2hCa0MsTUFBd0I7SUFFeEIsTUFBTSxFQUFFZCxNQUFNLEVBQUVuQyxNQUFNZ0MsUUFBUSxFQUFFa0IsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLGFBQWEsRUFBRSxHQUFHSDtJQUVwRSwwQkFBMEI7SUFDMUIsTUFBTUksYUFBYUYsV0FDaEJHLE1BQU0sQ0FDTCxDQUFDQyxHQUFHQztRQUNGLE1BQU1DLGFBQWE5QyxjQUFjK0MsYUFBYSxDQUFDRjtRQUMvQyxJQUFJRyxhQUFhRjtRQUNqQixJQUFJQSxXQUFXRyxRQUFRLENBQUMsUUFBUUgsV0FBV0csUUFBUSxDQUFDLE1BQU07WUFDeERELGFBQWEvQyxPQUNYWixLQUFLNkQsUUFBUSxDQUFDN0QsS0FBSzhELE9BQU8sQ0FBQzlCLFdBQVd5QixhQUN0QyxDQUFDTSxJQUFNO29CQUFDQSxFQUFFQyxVQUFVLENBQUMsU0FBUztvQkFBTyxPQUFPRDtpQkFBRTtRQUVsRDtRQUVBLG9DQUFvQztRQUNwQyxNQUFNRSxZQUFZVixFQUFFYixJQUFJLENBQUMsQ0FBQ3dCLFlBQWNBLFVBQVVDLElBQUksS0FBS1I7UUFDM0QsSUFBSU0sV0FBVztZQUNiQSxVQUFVN0MsSUFBSSxHQUFHWCxFQUFFMkQsSUFBSSxDQUFDSCxVQUFVN0MsSUFBSSxDQUFDaUQsTUFBTSxDQUFDYjtRQUNoRCxPQUFPO1lBQ0xELEVBQUVlLElBQUksQ0FBQztnQkFDTGxELE1BQU07b0JBQUNvQztpQkFBVTtnQkFDakJXLE1BQU1SO1lBQ1I7UUFDRjtRQUNBLE9BQU9KO0lBQ1QsR0FDQSxFQUFFLENBS0osV0FBVztLQUNWZ0IsTUFBTSxDQUNMLENBQUNMLFlBQ0NsQyxTQUFTd0MsUUFBUSxDQUFDTixVQUFVQyxJQUFJLENBQUMvQixPQUFPLENBQUMsTUFBTSxNQUFNLFdBQVc7SUFHdEUsb0JBQW9CO0lBQ3BCLE1BQU1xQyxTQUFTO1dBQ1RyQixpQkFBaUIsRUFBRTtXQUNwQkMsV0FBVzdCLEdBQUcsQ0FDZixDQUFDMEMsWUFDQyxDQUFDLFNBQVMsRUFBRUEsVUFBVTlDLElBQUksQ0FBQ3NELElBQUksQ0FBQyxNQUFNLFNBQVMsRUFBRVIsVUFBVUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUV2RSxDQUFDTyxJQUFJLENBQUM7SUFFUCxNQUFNQyxZQUFZLE1BQU0sQUFBQyxDQUFBO1FBQ3ZCLElBQUk1RCxRQUFRLGtCQUFrQjtZQUM1QixPQUFPO2dCQUFDMEQ7Z0JBQVF2QjthQUFLLENBQUN3QixJQUFJLENBQUM7UUFDN0IsT0FBTztZQUNMLE9BQU83RCxTQUFTK0QsTUFBTSxDQUFDO2dCQUFDSDtnQkFBUXZCO2FBQUssQ0FBQ3dCLElBQUksQ0FBQyxTQUFTO2dCQUNsREcsUUFBUTlELFFBQVEsV0FBVyxTQUFTO1lBQ3RDO1FBQ0Y7SUFDRixDQUFBO0lBRUEsT0FBTztRQUNMZixNQUFNbUMsU0FBUyxNQUFNSDtRQUNyQjhDLE1BQU1IO0lBQ1I7QUFDRjtBQUVBLGVBQWVwQywwQkFDYlgsV0FBd0I7SUFFeEIsTUFBTSxFQUFFQyxPQUFPLEVBQUUsR0FBRzVCLE9BQU82QixNQUFNLENBQUNDLElBQUk7SUFDdEMsTUFBTSxFQUFFRSxXQUFXLEVBQUUsR0FBR2hDO0lBQ3hCLE1BQU0rQixXQUFXLEdBQUcvQixPQUFPZ0MsV0FBVyxDQUFDLENBQUMsRUFBRUwsWUFBWTVCLElBQUksRUFBRTtJQUU1RCxNQUFNa0MsZUFBZXpCLEVBQUUyRCxJQUFJLENBQ3pCdkMsUUFBUUwsR0FBRyxDQUFDLENBQUNXLFNBQ1hILFNBQVNJLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFRCxPQUFPLENBQUMsQ0FBQztJQUcvQyxPQUFPLE1BQU1iLFFBQVFDLEdBQUcsQ0FDdEJXLGFBQWFWLEdBQUcsQ0FBQyxPQUFPdUQ7UUFDdEIsTUFBTUMsTUFBTWhGLEtBQUs4RCxPQUFPLENBQUNpQjtRQUN6QixJQUFJLENBQUUsTUFBTTFFLE9BQU8yRSxNQUFPO1lBQ3hCLE1BQU16RSxNQUFNeUUsS0FBSztnQkFBRUMsV0FBVztZQUFLO1FBQ3JDO1FBQ0EsTUFBTXpFLFVBQVV1RSxhQUFhbkQsWUFBWWtELElBQUk7UUFDN0NJLFFBQVFDLEdBQUcsQ0FDVDdFLE1BQU04RSxJQUFJLENBQUMsaUJBQ1Q5RSxNQUFNK0UsSUFBSSxDQUFDLEdBQUdOLFlBQVkzQyxPQUFPLENBQUNILGNBQWMsS0FBSyxLQUFLO1FBRTlELE9BQU84QztJQUNUO0FBRUoifQ==
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvY29kZS1nZW5lcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXJlZFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tIFwiLi4vdGVtcGxhdGUvdGVtcGxhdGUtbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZU9wdGlvbnMsIFBhdGhBbmRDb2RlLCBUZW1wbGF0ZUtleSwgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBldmVyeUFzeW5jLCBmaWx0ZXJBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IHdyYXBJZiB9IGZyb20gXCIuLi91dGlscy9sb2Rhc2gtYWJsZVwiO1xuaW1wb3J0IHR5cGUgeyBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuXG4vKipcbiAqIO2FnO2UjOumv+ydhCDroIzrjZTrp4HtlZjqs6Ag7YyM7J2866GcIOyDneyEse2VqeuLiOuLpC5cbiAqIG92ZXJ3cml0ZSDsmLXshZjsnbQgZmFsc2Xsnbgg6rK97JqwLCDsnbTrr7gg7KG07J6s7ZWY64qUIO2MjOydvOydgCDqsbTrhIjrnIHri4jri6QuXG4gKiBAcGFyYW0ga2V5IC0g7YWc7ZSM66a/IO2CpCAo7JiIOiBcImVudGl0eVwiLCBcIm1vZGVsXCIsIFwic2VydmljZVwiIOuTsSlcbiAqIEBwYXJhbSB0ZW1wbGF0ZU9wdGlvbnMgLSDthZztlIzrpr8g66CM642U66eB7JeQIO2VhOyalO2VnCDsmLXshZhcbiAqIEBwYXJhbSBfZ2VuZXJhdGVPcHRpb25zIC0g7IOd7ISxIOyYteyFmCAob3ZlcndyaXRlIOyXrOu2gClcbiAqIEByZXR1cm5zIOyDneyEseuQnCDtjIzsnbwg6rK966GcIOuwsOyXtFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVUZW1wbGF0ZTxUIGV4dGVuZHMgVGVtcGxhdGVLZXk+KFxuICBrZXk6IFQsXG4gIHRlbXBsYXRlT3B0aW9uczogVGVtcGxhdGVPcHRpb25zW1RdLFxuICBfZ2VuZXJhdGVPcHRpb25zPzogR2VuZXJhdGVPcHRpb25zLFxuKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBjb25zdCBnZW5lcmF0ZU9wdGlvbnMgPSB7XG4gICAgb3ZlcndyaXRlOiBmYWxzZSxcbiAgICAuLi5fZ2VuZXJhdGVPcHRpb25zLFxuICB9O1xuICBOYWl0ZS50KFwiZ2VuZXJhdGVUZW1wbGF0ZVwiLCB7IGtleSwgdGVtcGxhdGVPcHRpb25zLCBnZW5lcmF0ZU9wdGlvbnMgfSk7XG5cbiAgLy8g7YKkIGNoaWxkcmVuXG4gIGNvbnN0IGtleXM6IFRlbXBsYXRlS2V5W10gPSBba2V5XTtcblxuICAvLyDthZztlIzrpr8g66CM642UXG4gIGNvbnN0IHBhdGhBbmRDb2RlcyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGtleXMubWFwKGFzeW5jIChrZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlbmRlclRlbXBsYXRlKGtleSwgdGVtcGxhdGVPcHRpb25zKTtcbiAgICAgIH0pLFxuICAgIClcbiAgKS5mbGF0KCk7XG5cbiAgY29uc3QgZmlsdGVyZWRQYXRoQW5kQ29kZXM6IFBhdGhBbmRDb2RlW10gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChnZW5lcmF0ZU9wdGlvbnMub3ZlcndyaXRlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gcGF0aEFuZENvZGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmlsdGVyQXN5bmMocGF0aEFuZENvZGVzLCBhc3luYyAocGF0aEFuZENvZGUpID0+IHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7U29uYW11LmFwcFJvb3RQYXRofS8ke3BhdGhBbmRDb2RlLnBhdGh9YDtcbiAgICAgICAgY29uc3QgZHN0RmlsZVBhdGhzID0gdGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4gZmlsZVBhdGgucmVwbGFjZShcIi86dGFyZ2V0L1wiLCBgLyR7dGFyZ2V0fS9gKSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBldmVyeUFzeW5jKGRzdEZpbGVQYXRocywgYXN5bmMgKGRzdFBhdGgpID0+ICEoYXdhaXQgZXhpc3RzKGRzdFBhdGgpKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgaWYgKGZpbHRlcmVkUGF0aEFuZENvZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBBbHJlYWR5UHJvY2Vzc2VkRXhjZXB0aW9uKFwi7J2066+4IOqyveuhnOyXkCDrqqjrk6Ag7YyM7J287J20IOyhtOyerO2VqeuLiOuLpC5cIik7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWRQYXRoQW5kQ29kZXMubWFwKChwYXRoQW5kQ29kZSkgPT4gd3JpdGVDb2RlVG9QYXRoRWFjaFRhcmdldChwYXRoQW5kQ29kZSkpLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOyXrCBQYXRoQW5kQ29kZSDqsJ3ssrTrpbwg67CY7ZmY7ZWp64uI64ukLlxuICog7YyM7J2866GcIOyTsOyngCDslYrqs6Ag66mU66qo66as7IOB7JeQ7ISc66eMIOugjOuNlOunge2VqeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkXG4gKiBAcGFyYW0gb3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Eg7Ji17IWYXG4gKiBAcmV0dXJucyDqsr3roZzsmYAg7L2U65OcIOyMjeydmCDrsLDsl7RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICBrZXk6IFQsXG4gIG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbik6IFByb21pc2U8UGF0aEFuZENvZGVbXT4ge1xuICBOYWl0ZS50KFwicmVuZGVyVGVtcGxhdGVcIiwgeyBrZXksIG9wdGlvbnMgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0KGtleSk7XG5cbiAgY29uc3QgcmVuZGVyZWQgPSBhd2FpdCB0ZW1wbGF0ZS5yZW5kZXIob3B0aW9ucyk7XG4gIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoa2V5LCByZW5kZXJlZCk7XG5cbiAgbGV0IHByZVRlbXBsYXRlUmVzb2x2ZWQ6IFBhdGhBbmRDb2RlW10gPSBbXTtcbiAgaWYgKHJlbmRlcmVkLnByZVRlbXBsYXRlcykge1xuICAgIHByZVRlbXBsYXRlUmVzb2x2ZWQgPSAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcmVuZGVyZWQucHJlVGVtcGxhdGVzLm1hcCgoeyBrZXksIG9wdGlvbnMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZW5kZXJUZW1wbGF0ZShrZXksIG9wdGlvbnMpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICApLmZsYXQoKTtcbiAgfVxuXG4gIHJldHVybiBbcmVzb2x2ZWQsIC4uLnByZVRlbXBsYXRlUmVzb2x2ZWRdO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZShcbiAga2V5OiBUZW1wbGF0ZUtleSxcbiAgcmVzdWx0OiBSZW5kZXJlZFRlbXBsYXRlLFxuKTogUHJvbWlzZTxQYXRoQW5kQ29kZT4ge1xuICBOYWl0ZS50KGByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZSR7a2V5fWAsIHsga2V5LCByZXN1bHQgfSk7XG5cbiAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IGZpbGVQYXRoLCBib2R5LCBpbXBvcnRLZXlzLCBjdXN0b21IZWFkZXJzIH0gPSByZXN1bHQ7XG5cbiAgLy8gaW1wb3J0IO2VoCDrjIDsg4HsnZgg64yA7IOBIHBhdGgg7LaU7LacXG4gIGNvbnN0IGltcG9ydERlZnMgPSBpbXBvcnRLZXlzXG4gICAgLnJlZHVjZShcbiAgICAgIChyLCBpbXBvcnRLZXkpID0+IHtcbiAgICAgICAgY29uc3QgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aChpbXBvcnRLZXkpO1xuICAgICAgICBsZXQgaW1wb3J0UGF0aCA9IG1vZHVsZVBhdGg7XG4gICAgICAgIGlmIChtb2R1bGVQYXRoLmluY2x1ZGVzKFwiL1wiKSB8fCBtb2R1bGVQYXRoLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgICAgICAgIGltcG9ydFBhdGggPSB3cmFwSWYocGF0aC5yZWxhdGl2ZShwYXRoLmRpcm5hbWUoZmlsZVBhdGgpLCBtb2R1bGVQYXRoKSwgKHApID0+IFtcbiAgICAgICAgICAgIHAuc3RhcnRzV2l0aChcIi5cIikgPT09IGZhbHNlLFxuICAgICAgICAgICAgYC4vJHtwfWAsXG4gICAgICAgICAgXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDqsJnsnYAg7YyM7J287JeQ7IScIGltcG9ydCDtlZjripQg6rK97JqwIGtleXMg66GcIOuCmOyXtCDsspjrpqxcbiAgICAgICAgY29uc3QgZXhpc3RzT25lID0gci5maW5kKChpbXBvcnREZWYpID0+IGltcG9ydERlZi5mcm9tID09PSBpbXBvcnRQYXRoKTtcbiAgICAgICAgaWYgKGV4aXN0c09uZSkge1xuICAgICAgICAgIGV4aXN0c09uZS5rZXlzID0gdW5pcXVlKGV4aXN0c09uZS5rZXlzLmNvbmNhdChpbXBvcnRLZXkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByLnB1c2goe1xuICAgICAgICAgICAga2V5czogW2ltcG9ydEtleV0sXG4gICAgICAgICAgICBmcm9tOiBpbXBvcnRQYXRoLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSxcbiAgICAgIFtdIGFzIHtcbiAgICAgICAga2V5czogc3RyaW5nW107XG4gICAgICAgIGZyb206IHN0cmluZztcbiAgICAgIH1bXSxcbiAgICApXG4gICAgLy8g7IWA7ZSEIOywuOyhsCDrsKnsp4BcbiAgICAuZmlsdGVyKChpbXBvcnREZWYpID0+IGZpbGVQYXRoLmVuZHNXaXRoKGAke2ltcG9ydERlZi5mcm9tLnJlcGxhY2UoXCIuL1wiLCBcIlwiKX0udHNgKSA9PT0gZmFsc2UpO1xuXG4gIC8vIOy7pOyKpO2FgCDtl6TrjZQg7Y+s7ZWo7ZWY7JesIO2XpOuNlCDsg53shLFcbiAgY29uc3QgaGVhZGVyID0gW1xuICAgIC4uLihjdXN0b21IZWFkZXJzID8/IFtdKSxcbiAgICAuLi5pbXBvcnREZWZzLm1hcChcbiAgICAgIChpbXBvcnREZWYpID0+IGBpbXBvcnQgeyAke2ltcG9ydERlZi5rZXlzLmpvaW4oXCIsIFwiKX0gfSBmcm9tICcke2ltcG9ydERlZi5mcm9tfSdgLFxuICAgICksXG4gIF0uam9pbihcIlxcblwiKTtcblxuICBjb25zdCBmb3JtYXR0ZWQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChrZXkgPT09IFwiZ2VuZXJhdGVkX2h0dHBcIikge1xuICAgICAgcmV0dXJuIFtoZWFkZXIsIGJvZHldLmpvaW4oXCJcXG5cXG5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIE5haXRlLnQoXCJyZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpiZWZvcmVGb3JtYXRcIiwgeyBrZXksIGhlYWRlciwgYm9keSB9KTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdENvZGUoXG4gICAgICAgIFtoZWFkZXIsIGJvZHldLmpvaW4oXCJcXG5cXG5cIiksXG4gICAgICAgIGtleSA9PT0gXCJlbnRpdHlcIiA/IFwianNvblwiIDogXCJ0eXBlc2NyaXB0XCIsXG4gICAgICAgIGAke1NvbmFtdS5hcHBSb290UGF0aH0vJHtmaWxlUGF0aH1gLFxuICAgICAgKTtcbiAgICAgIE5haXRlLnQoYHJlc29sdmVSZW5kZXJlZFRlbXBsYXRlOmZvcm1hdHRlZDoke2tleX1gLCBmb3JtYXR0ZWQpO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICB9XG4gIH0pKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBgJHt0YXJnZXR9LyR7ZmlsZVBhdGh9YCxcbiAgICBjb2RlOiBmb3JtYXR0ZWQsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29kZVRvUGF0aEVhY2hUYXJnZXQocGF0aEFuZENvZGU6IFBhdGhBbmRDb2RlKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBhcHBSb290UGF0aCB9ID0gU29uYW11O1xuICBjb25zdCBmaWxlUGF0aCA9IGAke1NvbmFtdS5hcHBSb290UGF0aH0vJHtwYXRoQW5kQ29kZS5wYXRofWAgYXMgQWJzb2x1dGVQYXRoO1xuXG4gIGNvbnN0IGRzdEZpbGVQYXRocyA9IHVuaXF1ZShcbiAgICB0YXJnZXRzLm1hcCgodGFyZ2V0KSA9PiBmaWxlUGF0aC5yZXBsYWNlKFwiLzp0YXJnZXQvXCIsIGAvJHt0YXJnZXR9L2ApKSBhcyBBYnNvbHV0ZVBhdGhbXSxcbiAgKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGRzdEZpbGVQYXRocy5tYXAoYXN5bmMgKGRzdEZpbGVQYXRoKSA9PiB7XG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0RmlsZVBhdGgpO1xuICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKGRpcikpKSB7XG4gICAgICAgIGF3YWl0IG1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBhd2FpdCB3cml0ZUZpbGUoZHN0RmlsZVBhdGgsIHBhdGhBbmRDb2RlLmNvZGUpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNoYWxrLmJvbGQoXCJHZW5lcmF0ZWQ6IFwiKSArIGNoYWxrLmJsdWUoYCR7ZHN0RmlsZVBhdGgucmVwbGFjZShgJHthcHBSb290UGF0aH0vYCwgXCJcIil9YCksXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZHN0RmlsZVBhdGg7XG4gICAgfSksXG4gICk7XG59XG4iXSwibmFtZXMiOlsiY2hhbGsiLCJta2RpciIsIndyaXRlRmlsZSIsInBhdGgiLCJ1bmlxdWUiLCJTb25hbXUiLCJFbnRpdHlNYW5hZ2VyIiwiQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbiIsIk5haXRlIiwiVGVtcGxhdGVNYW5hZ2VyIiwiZXZlcnlBc3luYyIsImZpbHRlckFzeW5jIiwiaXNUZXN0IiwiZm9ybWF0Q29kZSIsImV4aXN0cyIsIndyYXBJZiIsImdlbmVyYXRlVGVtcGxhdGUiLCJrZXkiLCJ0ZW1wbGF0ZU9wdGlvbnMiLCJfZ2VuZXJhdGVPcHRpb25zIiwiZ2VuZXJhdGVPcHRpb25zIiwib3ZlcndyaXRlIiwidCIsImtleXMiLCJwYXRoQW5kQ29kZXMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwicmVuZGVyVGVtcGxhdGUiLCJmbGF0IiwiZmlsdGVyZWRQYXRoQW5kQ29kZXMiLCJwYXRoQW5kQ29kZSIsInRhcmdldHMiLCJjb25maWciLCJzeW5jIiwiZmlsZVBhdGgiLCJhcHBSb290UGF0aCIsImRzdEZpbGVQYXRocyIsInRhcmdldCIsInJlcGxhY2UiLCJkc3RQYXRoIiwibGVuZ3RoIiwid3JpdGVDb2RlVG9QYXRoRWFjaFRhcmdldCIsIm9wdGlvbnMiLCJ0ZW1wbGF0ZSIsImdldCIsInJlbmRlcmVkIiwicmVuZGVyIiwicmVzb2x2ZWQiLCJyZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZSIsInByZVRlbXBsYXRlUmVzb2x2ZWQiLCJwcmVUZW1wbGF0ZXMiLCJyZXN1bHQiLCJib2R5IiwiaW1wb3J0S2V5cyIsImN1c3RvbUhlYWRlcnMiLCJpbXBvcnREZWZzIiwicmVkdWNlIiwiciIsImltcG9ydEtleSIsIm1vZHVsZVBhdGgiLCJnZXRNb2R1bGVQYXRoIiwiaW1wb3J0UGF0aCIsImluY2x1ZGVzIiwicmVsYXRpdmUiLCJkaXJuYW1lIiwicCIsInN0YXJ0c1dpdGgiLCJleGlzdHNPbmUiLCJmaW5kIiwiaW1wb3J0RGVmIiwiZnJvbSIsImNvbmNhdCIsInB1c2giLCJmaWx0ZXIiLCJlbmRzV2l0aCIsImhlYWRlciIsImpvaW4iLCJmb3JtYXR0ZWQiLCJjb2RlIiwiZHN0RmlsZVBhdGgiLCJkaXIiLCJyZWN1cnNpdmUiLCJjb25zb2xlIiwibG9nIiwiYm9sZCIsImJsdWUiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFdBQVcsUUFBUTtBQUMxQixTQUFTQyxLQUFLLEVBQUVDLFNBQVMsUUFBUSxtQkFBYztBQUMvQyxPQUFPQyxVQUFVLE9BQU87QUFDeEIsU0FBU0MsTUFBTSxRQUFRLFVBQVU7QUFDakMsU0FB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
@@ -1,10 +1,10 @@
1
- import { TemplateOptions } from "../types/types";
1
+ import type { TemplateOptions } from "../types/types";
2
2
  /**
3
3
  * 새로운 엔티티를 생성합니다.
4
4
  * entityId는 반드시 CamelCase 형식이어야 합니다.
5
5
  */
6
6
  export declare function createEntity(form: Omit<TemplateOptions["entity"], "title"> & {
7
- title?: string;
7
+ title: string;
8
8
  }): Promise<void>;
9
9
  /**
10
10
  * 엔티티를 삭제합니다.
@@ -1 +1 @@
1
- {"version":3,"file":"entity-operations.d.ts","sourceRoot":"","sources":["../../src/syncer/entity-operations.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKjD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,iBAUpE;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAkCjC"}
1
+ {"version":3,"file":"entity-operations.d.ts","sourceRoot":"","sources":["../../src/syncer/entity-operations.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKtD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,iBAUnE;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAgCjF"}