sonamu 0.10.12 → 0.10.13

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 (513) hide show
  1. package/dist/ai/agents/agent.d.ts +1 -1
  2. package/dist/ai/agents/agent.d.ts.map +1 -1
  3. package/dist/ai/agents/agent.js +5 -6
  4. package/dist/ai/agents/types.d.ts +1 -1
  5. package/dist/ai/agents/types.d.ts.map +1 -1
  6. package/dist/ai/providers/rtzr/api.js +18 -18
  7. package/dist/ai/providers/rtzr/error.d.ts.map +1 -1
  8. package/dist/ai/providers/rtzr/error.js +17 -15
  9. package/dist/ai/providers/rtzr/model.d.ts.map +1 -1
  10. package/dist/ai/providers/rtzr/model.js +3 -2
  11. package/dist/ai/providers/rtzr/options.d.ts.map +1 -1
  12. package/dist/ai/providers/rtzr/options.js +16 -16
  13. package/dist/ai/providers/rtzr/provider.d.ts.map +1 -1
  14. package/dist/ai/providers/rtzr/provider.js +9 -9
  15. package/dist/ai/providers/rtzr/utils.d.ts.map +1 -1
  16. package/dist/ai/providers/rtzr/utils.js +1 -1
  17. package/dist/api/caster.d.ts.map +1 -1
  18. package/dist/api/caster.js +17 -17
  19. package/dist/api/code-converters.d.ts +4 -2
  20. package/dist/api/code-converters.d.ts.map +1 -1
  21. package/dist/api/code-converters.js +100 -19
  22. package/dist/api/config.d.ts +16 -1
  23. package/dist/api/config.d.ts.map +1 -1
  24. package/dist/api/config.js +28 -21
  25. package/dist/api/context.d.ts +2 -2
  26. package/dist/api/context.d.ts.map +1 -1
  27. package/dist/api/context.js +1 -1
  28. package/dist/api/decorators.d.ts.map +1 -1
  29. package/dist/api/decorators.js +18 -11
  30. package/dist/api/http-validator.d.ts +36 -0
  31. package/dist/api/http-validator.d.ts.map +1 -0
  32. package/dist/api/http-validator.js +72 -0
  33. package/dist/api/index.js +6 -4
  34. package/dist/api/sonamu.d.ts +59 -20
  35. package/dist/api/sonamu.d.ts.map +1 -1
  36. package/dist/api/sonamu.js +250 -106
  37. package/dist/api/websocket-helpers.d.ts +7 -5
  38. package/dist/api/websocket-helpers.d.ts.map +1 -1
  39. package/dist/api/websocket-helpers.js +6 -6
  40. package/dist/auth/audit-log/builders.d.ts.map +1 -1
  41. package/dist/auth/audit-log/builders.js +1 -1
  42. package/dist/auth/audit-log/client-ip.d.ts +1 -1
  43. package/dist/auth/audit-log/client-ip.d.ts.map +1 -1
  44. package/dist/auth/audit-log/client-ip.js +4 -2
  45. package/dist/auth/audit-log/events.d.ts +5 -1
  46. package/dist/auth/audit-log/events.d.ts.map +1 -1
  47. package/dist/auth/audit-log/events.js +1 -1
  48. package/dist/auth/audit-log/plugin.d.ts +0 -8
  49. package/dist/auth/audit-log/plugin.d.ts.map +1 -1
  50. package/dist/auth/audit-log/plugin.js +48 -52
  51. package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
  52. package/dist/auth/audit-log-ingestor.js +16 -12
  53. package/dist/auth/auth-generator.d.ts.map +1 -1
  54. package/dist/auth/auth-generator.js +1 -1
  55. package/dist/auth/better-auth-request.d.ts.map +1 -1
  56. package/dist/auth/better-auth-request.js +6 -5
  57. package/dist/auth/knex-adapter.js +1 -1
  58. package/dist/auth/plugins/entity-definitions/index.d.ts +13 -1
  59. package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
  60. package/dist/auth/plugins/entity-definitions/index.js +1 -1
  61. package/dist/auth/plugins/wrappers/admin.d.ts +1 -1
  62. package/dist/bin/build-config.d.ts +25 -0
  63. package/dist/bin/build-config.d.ts.map +1 -1
  64. package/dist/bin/build-config.js +105 -2
  65. package/dist/bin/cli.js +131 -27
  66. package/dist/bin/compiler-policy.d.ts +3 -0
  67. package/dist/bin/compiler-policy.d.ts.map +1 -0
  68. package/dist/bin/compiler-policy.js +24 -0
  69. package/dist/bin/fixture.d.ts.map +1 -1
  70. package/dist/bin/fixture.js +5 -3
  71. package/dist/bin/test-command.d.ts +22 -1
  72. package/dist/bin/test-command.d.ts.map +1 -1
  73. package/dist/bin/test-command.js +18 -10
  74. package/dist/bin/ts-loader-registration.d.ts +7 -1
  75. package/dist/bin/ts-loader-registration.d.ts.map +1 -1
  76. package/dist/bin/ts-loader-registration.js +13 -4
  77. package/dist/cache/decorator.d.ts.map +1 -1
  78. package/dist/cache/decorator.js +11 -4
  79. package/dist/compress/compress.d.ts.map +1 -1
  80. package/dist/compress/compress.js +1 -1
  81. package/dist/cone/cone-generator.d.ts +14 -1
  82. package/dist/cone/cone-generator.d.ts.map +1 -1
  83. package/dist/cone/cone-generator.js +13 -9
  84. package/dist/database/_batch_update.js +1 -1
  85. package/dist/database/base-model.d.ts +22 -10
  86. package/dist/database/base-model.d.ts.map +1 -1
  87. package/dist/database/base-model.js +26 -16
  88. package/dist/database/base-model.types.d.ts +15 -3
  89. package/dist/database/base-model.types.d.ts.map +1 -1
  90. package/dist/database/db.d.ts +12 -2
  91. package/dist/database/db.d.ts.map +1 -1
  92. package/dist/database/db.js +10 -7
  93. package/dist/database/knex.d.ts.map +1 -1
  94. package/dist/database/knex.js +17 -14
  95. package/dist/database/puri.d.ts +11 -9
  96. package/dist/database/puri.d.ts.map +1 -1
  97. package/dist/database/puri.js +93 -79
  98. package/dist/database/puri.types.d.ts +21 -21
  99. package/dist/database/puri.types.d.ts.map +1 -1
  100. package/dist/database/puri.types.js +1 -1
  101. package/dist/database/upsert-builder.d.ts +12 -10
  102. package/dist/database/upsert-builder.d.ts.map +1 -1
  103. package/dist/database/upsert-builder.js +20 -12
  104. package/dist/dict/sd.d.ts.map +1 -1
  105. package/dist/dict/sd.js +1 -1
  106. package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
  107. package/dist/dict/sonamu-dictionary.js +1 -1
  108. package/dist/dict/utils.d.ts.map +1 -1
  109. package/dist/dict/utils.js +7 -2
  110. package/dist/entity/entity-manager.d.ts +13 -4
  111. package/dist/entity/entity-manager.d.ts.map +1 -1
  112. package/dist/entity/entity-manager.js +19 -11
  113. package/dist/entity/entity-template-cone.d.ts +73 -5
  114. package/dist/entity/entity-template-cone.d.ts.map +1 -1
  115. package/dist/entity/entity-template-cone.js +4 -2
  116. package/dist/entity/entity.d.ts +6 -2
  117. package/dist/entity/entity.d.ts.map +1 -1
  118. package/dist/entity/entity.js +30 -28
  119. package/dist/env.d.ts +3 -1
  120. package/dist/env.d.ts.map +1 -1
  121. package/dist/env.js +1 -1
  122. package/dist/exceptions/error-handler.d.ts.map +1 -1
  123. package/dist/exceptions/error-handler.js +7 -2
  124. package/dist/exceptions/so-exceptions.d.ts +24 -20
  125. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  126. package/dist/exceptions/so-exceptions.js +4 -2
  127. package/dist/filter/utils.d.ts +7 -2
  128. package/dist/filter/utils.d.ts.map +1 -1
  129. package/dist/filter/utils.js +8 -6
  130. package/dist/index.d.ts +3 -0
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +12 -6
  133. package/dist/logger/configure.d.ts.map +1 -1
  134. package/dist/logger/configure.js +10 -10
  135. package/dist/migration/code-generation.d.ts.map +1 -1
  136. package/dist/migration/code-generation.js +50 -46
  137. package/dist/migration/index-where-predicate.d.ts.map +1 -1
  138. package/dist/migration/index-where-predicate.js +22 -8
  139. package/dist/migration/migration-set.d.ts.map +1 -1
  140. package/dist/migration/migration-set.js +1 -1
  141. package/dist/migration/migrator.d.ts +3 -2
  142. package/dist/migration/migrator.d.ts.map +1 -1
  143. package/dist/migration/migrator.js +27 -21
  144. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  145. package/dist/migration/postgresql-schema-reader.js +51 -36
  146. package/dist/migration/slack-confirm.d.ts.map +1 -1
  147. package/dist/migration/slack-confirm.js +1 -1
  148. package/dist/naite/naite-reporter.js +2 -2
  149. package/dist/naite/naite.d.ts +74 -15
  150. package/dist/naite/naite.d.ts.map +1 -1
  151. package/dist/naite/naite.js +5 -19
  152. package/dist/runtime-type.d.ts +6 -0
  153. package/dist/runtime-type.d.ts.map +1 -0
  154. package/dist/runtime-type.js +26 -0
  155. package/dist/ssr/hmr-opt-out.d.ts +26 -0
  156. package/dist/ssr/hmr-opt-out.d.ts.map +1 -0
  157. package/dist/ssr/hmr-opt-out.js +59 -0
  158. package/dist/ssr/renderer.d.ts.map +1 -1
  159. package/dist/ssr/renderer.js +4 -1
  160. package/dist/storage/base-file.js +14 -14
  161. package/dist/storage/buffered-file.d.ts +2 -2
  162. package/dist/storage/buffered-file.d.ts.map +1 -1
  163. package/dist/storage/buffered-file.js +12 -12
  164. package/dist/storage/s3-driver.d.ts.map +1 -1
  165. package/dist/storage/s3-driver.js +1 -1
  166. package/dist/storage/uploaded-file.d.ts +2 -2
  167. package/dist/storage/uploaded-file.d.ts.map +1 -1
  168. package/dist/storage/uploaded-file.js +8 -8
  169. package/dist/stream/sse.js +11 -11
  170. package/dist/stream/ws-core.d.ts +1 -1
  171. package/dist/stream/ws-core.d.ts.map +1 -1
  172. package/dist/stream/ws-delivery.d.ts +1 -1
  173. package/dist/stream/ws-delivery.d.ts.map +1 -1
  174. package/dist/stream/ws-delivery.js +6 -4
  175. package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
  176. package/dist/stream/ws-local-connection-store.js +4 -2
  177. package/dist/stream/ws-presence-store.js +1 -1
  178. package/dist/stream/ws-registry.d.ts +4 -4
  179. package/dist/stream/ws-registry.d.ts.map +1 -1
  180. package/dist/stream/ws-registry.js +4 -2
  181. package/dist/stream/ws-telemetry.d.ts +16 -12
  182. package/dist/stream/ws-telemetry.d.ts.map +1 -1
  183. package/dist/stream/ws-telemetry.js +22 -18
  184. package/dist/stream/ws.d.ts +18 -12
  185. package/dist/stream/ws.d.ts.map +1 -1
  186. package/dist/stream/ws.js +26 -22
  187. package/dist/syncer/api-parser.js +1 -1
  188. package/dist/syncer/checksum.d.ts.map +1 -1
  189. package/dist/syncer/checksum.js +7 -8
  190. package/dist/syncer/code-generator.d.ts.map +1 -1
  191. package/dist/syncer/code-generator.js +13 -14
  192. package/dist/syncer/entity-operations.d.ts.map +1 -1
  193. package/dist/syncer/entity-operations.js +5 -6
  194. package/dist/syncer/file-copy.d.ts +5 -0
  195. package/dist/syncer/file-copy.d.ts.map +1 -0
  196. package/dist/syncer/file-copy.js +36 -0
  197. package/dist/syncer/file-patterns.d.ts +1 -0
  198. package/dist/syncer/file-patterns.d.ts.map +1 -1
  199. package/dist/syncer/file-patterns.js +5 -2
  200. package/dist/syncer/file-tracking.d.ts.map +1 -1
  201. package/dist/syncer/file-tracking.js +5 -4
  202. package/dist/syncer/filesystem-dependencies.d.ts +15 -0
  203. package/dist/syncer/filesystem-dependencies.d.ts.map +1 -0
  204. package/dist/syncer/filesystem-dependencies.js +53 -0
  205. package/dist/syncer/module-loader.d.ts +1 -1
  206. package/dist/syncer/module-loader.d.ts.map +1 -1
  207. package/dist/syncer/module-loader.js +6 -4
  208. package/dist/syncer/syncer-actions.d.ts +4 -0
  209. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  210. package/dist/syncer/syncer-actions.js +34 -17
  211. package/dist/syncer/syncer.d.ts +17 -6
  212. package/dist/syncer/syncer.d.ts.map +1 -1
  213. package/dist/syncer/syncer.js +71 -29
  214. package/dist/syncer/watcher.d.ts.map +1 -1
  215. package/dist/syncer/watcher.js +3 -3
  216. package/dist/tasks/decorator.d.ts +6 -6
  217. package/dist/tasks/decorator.d.ts.map +1 -1
  218. package/dist/tasks/decorator.js +4 -4
  219. package/dist/tasks/step-wrapper.d.ts +6 -4
  220. package/dist/tasks/step-wrapper.d.ts.map +1 -1
  221. package/dist/tasks/step-wrapper.js +5 -5
  222. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  223. package/dist/tasks/workflow-manager.js +13 -7
  224. package/dist/template/entity-converter.d.ts +1 -1
  225. package/dist/template/entity-converter.d.ts.map +1 -1
  226. package/dist/template/entity-converter.js +2 -2
  227. package/dist/template/helpers.d.ts +8 -6
  228. package/dist/template/helpers.d.ts.map +1 -1
  229. package/dist/template/helpers.js +1 -1
  230. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  231. package/dist/template/implementations/generated.template.js +4 -4
  232. package/dist/template/implementations/generated_http.template.d.ts +7 -4
  233. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  234. package/dist/template/implementations/generated_http.template.js +21 -21
  235. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  236. package/dist/template/implementations/generated_sso.template.js +6 -3
  237. package/dist/template/implementations/http_validators.template.d.ts +18 -0
  238. package/dist/template/implementations/http_validators.template.d.ts.map +1 -0
  239. package/dist/template/implementations/http_validators.template.js +127 -0
  240. package/dist/template/implementations/model.template.d.ts.map +1 -1
  241. package/dist/template/implementations/model.template.js +1 -1
  242. package/dist/template/implementations/queries.template.js +1 -1
  243. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  244. package/dist/template/implementations/sd.template.js +79 -39
  245. package/dist/template/implementations/services.template.d.ts.map +1 -1
  246. package/dist/template/implementations/services.template.js +6 -4
  247. package/dist/template/implementations/view_form.template.d.ts +6 -1
  248. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  249. package/dist/template/implementations/view_form.template.js +23 -15
  250. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  251. package/dist/template/implementations/view_list.template.js +11 -6
  252. package/dist/template/template-manager.d.ts.map +1 -1
  253. package/dist/template/template-manager.js +9 -7
  254. package/dist/template/template-types.d.ts +12 -5
  255. package/dist/template/template-types.d.ts.map +1 -1
  256. package/dist/template/template-types.js +1 -1
  257. package/dist/template/template.d.ts +2 -2
  258. package/dist/template/template.d.ts.map +1 -1
  259. package/dist/template/template.js +6 -4
  260. package/dist/template/zod-converter.d.ts +0 -19
  261. package/dist/template/zod-converter.d.ts.map +1 -1
  262. package/dist/template/zod-converter.js +100 -84
  263. package/dist/testing/_relation-graph.d.ts.map +1 -1
  264. package/dist/testing/_relation-graph.js +2 -1
  265. package/dist/testing/bootstrap.d.ts.map +1 -1
  266. package/dist/testing/bootstrap.js +9 -6
  267. package/dist/testing/data-explorer.d.ts +32 -7
  268. package/dist/testing/data-explorer.d.ts.map +1 -1
  269. package/dist/testing/data-explorer.js +77 -31
  270. package/dist/testing/dev-test-routes.d.ts +8 -1
  271. package/dist/testing/dev-test-routes.d.ts.map +1 -1
  272. package/dist/testing/dev-test-routes.js +125 -108
  273. package/dist/testing/dev-vitest-manager.d.ts +54 -8
  274. package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
  275. package/dist/testing/dev-vitest-manager.js +24 -9
  276. package/dist/testing/faker-mappings.d.ts +412 -1
  277. package/dist/testing/faker-mappings.d.ts.map +1 -1
  278. package/dist/testing/faker-mappings.js +1 -1
  279. package/dist/testing/filesystem.d.ts +2 -0
  280. package/dist/testing/filesystem.d.ts.map +1 -0
  281. package/dist/testing/filesystem.js +7 -0
  282. package/dist/testing/fixture-generator.d.ts +25 -8
  283. package/dist/testing/fixture-generator.d.ts.map +1 -1
  284. package/dist/testing/fixture-generator.js +132 -73
  285. package/dist/testing/fixture-loader.d.ts +3 -1
  286. package/dist/testing/fixture-loader.d.ts.map +1 -1
  287. package/dist/testing/fixture-loader.js +1 -20
  288. package/dist/testing/fixture-manager.d.ts +8 -7
  289. package/dist/testing/fixture-manager.d.ts.map +1 -1
  290. package/dist/testing/fixture-manager.js +91 -59
  291. package/dist/testing/global-setup.d.ts.map +1 -1
  292. package/dist/testing/global-setup.js +5 -2
  293. package/dist/testing/index.d.ts +2 -0
  294. package/dist/testing/index.d.ts.map +1 -1
  295. package/dist/testing/index.js +6 -3
  296. package/dist/types/types.d.ts +101 -99
  297. package/dist/types/types.d.ts.map +1 -1
  298. package/dist/types/types.js +234 -225
  299. package/dist/ui/ai-api.d.ts.map +1 -1
  300. package/dist/ui/ai-api.js +1 -1
  301. package/dist/ui/ai-client.d.ts.map +1 -1
  302. package/dist/ui/ai-client.js +28 -18
  303. package/dist/ui/api.d.ts.map +1 -1
  304. package/dist/ui/api.js +135 -128
  305. package/dist/ui/async-route.d.ts +3 -0
  306. package/dist/ui/async-route.d.ts.map +1 -0
  307. package/dist/ui/async-route.js +12 -0
  308. package/dist/ui/cdd-service.d.ts +9 -7
  309. package/dist/ui/cdd-service.d.ts.map +1 -1
  310. package/dist/ui/cdd-service.js +7 -5
  311. package/dist/ui/migrations-api.d.ts.map +1 -1
  312. package/dist/ui/migrations-api.js +17 -15
  313. package/dist/ui-web/assets/index-DV1AAq6W.js +178 -0
  314. package/dist/ui-web/index.html +1 -1
  315. package/dist/utils/formatter.d.ts.map +1 -1
  316. package/dist/utils/formatter.js +7 -5
  317. package/dist/utils/fs-utils.d.ts +3 -3
  318. package/dist/utils/fs-utils.d.ts.map +1 -1
  319. package/dist/utils/fs-utils.js +6 -6
  320. package/dist/utils/model.d.ts +3 -5
  321. package/dist/utils/model.d.ts.map +1 -1
  322. package/dist/utils/model.js +1 -1
  323. package/dist/utils/object-utils.d.ts +1 -1
  324. package/dist/utils/object-utils.d.ts.map +1 -1
  325. package/dist/utils/object-utils.js +17 -16
  326. package/dist/utils/process-utils.d.ts.map +1 -1
  327. package/dist/utils/process-utils.js +4 -2
  328. package/dist/utils/runtime-value.d.ts +13 -0
  329. package/dist/utils/runtime-value.d.ts.map +1 -0
  330. package/dist/utils/runtime-value.js +40 -0
  331. package/dist/utils/sql-parser.d.ts +8 -1
  332. package/dist/utils/sql-parser.d.ts.map +1 -1
  333. package/dist/utils/sql-parser.js +6 -3
  334. package/dist/utils/type-utils.d.ts.map +1 -1
  335. package/dist/utils/type-utils.js +10 -8
  336. package/dist/utils/utils.d.ts +2 -2
  337. package/dist/utils/utils.d.ts.map +1 -1
  338. package/dist/utils/utils.js +11 -8
  339. package/dist/utils/zod-error.d.ts.map +1 -1
  340. package/dist/utils/zod-error.js +7 -4
  341. package/dist/vector/chunking.d.ts.map +1 -1
  342. package/dist/vector/chunking.js +1 -1
  343. package/dist/vector/embedding.d.ts.map +1 -1
  344. package/dist/vector/embedding.js +1 -1
  345. package/dist/vector/types.d.ts +3 -2
  346. package/dist/vector/types.d.ts.map +1 -1
  347. package/package.json +5 -3
  348. package/src/ai/agents/agent.ts +5 -5
  349. package/src/ai/agents/types.ts +1 -1
  350. package/src/ai/providers/rtzr/__tests__/model.test.ts +2 -2
  351. package/src/ai/providers/rtzr/error.ts +5 -3
  352. package/src/ai/providers/rtzr/model.ts +3 -2
  353. package/src/ai/providers/rtzr/options.ts +10 -5
  354. package/src/ai/providers/rtzr/provider.ts +10 -10
  355. package/src/ai/providers/rtzr/utils.ts +3 -1
  356. package/src/api/__tests__/config.test.ts +11 -21
  357. package/src/api/__tests__/sonamu.http-validator.test.ts +512 -0
  358. package/src/api/__tests__/sonamu.websocket.test.ts +51 -41
  359. package/src/api/__tests__/zod-compiler-policy.test.ts +95 -0
  360. package/src/api/caster.ts +6 -8
  361. package/src/api/code-converters.ts +136 -36
  362. package/src/api/config.ts +62 -4
  363. package/src/api/context.ts +3 -3
  364. package/src/api/decorators.ts +28 -17
  365. package/src/api/http-validator.ts +149 -0
  366. package/src/api/sonamu.ts +459 -152
  367. package/src/api/websocket-helpers.ts +24 -17
  368. package/src/auth/audit-log/builders.ts +3 -2
  369. package/src/auth/audit-log/client-ip.ts +4 -2
  370. package/src/auth/audit-log/events.ts +15 -1
  371. package/src/auth/audit-log/plugin.ts +129 -200
  372. package/src/auth/audit-log-ingestor.ts +19 -15
  373. package/src/auth/auth-generator.ts +10 -5
  374. package/src/auth/better-auth-request.ts +4 -3
  375. package/src/auth/knex-adapter.ts +8 -2
  376. package/src/auth/plugins/entity-definitions/index.ts +6 -5
  377. package/src/bin/__tests__/http-validator-benchmark.test.ts +94 -0
  378. package/src/bin/__tests__/test-command.test.ts +9 -15
  379. package/src/bin/__tests__/ts-loader-register.test.ts +15 -17
  380. package/src/bin/__tests__/zod-compiler-build.test.ts +307 -0
  381. package/src/bin/build-config.ts +167 -0
  382. package/src/bin/cli.ts +153 -36
  383. package/src/bin/compiler-policy.ts +35 -0
  384. package/src/bin/fixture.ts +14 -3
  385. package/src/bin/test-command.ts +74 -29
  386. package/src/bin/ts-loader-registration.ts +22 -4
  387. package/src/cache/decorator.ts +10 -3
  388. package/src/compress/compress.ts +17 -4
  389. package/src/cone/cone-generator.ts +34 -6
  390. package/src/database/__tests__/db.test.ts +1 -0
  391. package/src/database/__tests__/puri.test.ts +16 -15
  392. package/src/database/__tests__/transaction-scope.test.ts +5 -0
  393. package/src/database/_batch_update.ts +1 -0
  394. package/src/database/base-model.ts +81 -50
  395. package/src/database/base-model.types.ts +6 -6
  396. package/src/database/db.ts +29 -19
  397. package/src/database/knex.ts +30 -17
  398. package/src/database/puri-subset.test-d.ts +17 -0
  399. package/src/database/puri.ts +181 -143
  400. package/src/database/puri.types.test-d.ts +31 -1
  401. package/src/database/puri.types.ts +23 -21
  402. package/src/database/upsert-builder.ts +75 -53
  403. package/src/dict/sd.ts +15 -5
  404. package/src/dict/sonamu-dictionary.ts +6 -6
  405. package/src/dict/utils.ts +9 -1
  406. package/src/entity/entity-manager.ts +26 -9
  407. package/src/entity/entity-template-cone.ts +5 -10
  408. package/src/entity/entity.ts +50 -34
  409. package/src/env.ts +7 -3
  410. package/src/exceptions/error-handler.ts +17 -2
  411. package/src/exceptions/so-exceptions.ts +26 -20
  412. package/src/filter/utils.ts +21 -11
  413. package/src/index.ts +3 -0
  414. package/src/logger/configure.ts +26 -18
  415. package/src/migration/__tests__/migrator.test.ts +50 -57
  416. package/src/migration/code-generation.ts +132 -104
  417. package/src/migration/index-where-predicate.ts +51 -24
  418. package/src/migration/migration-set.ts +11 -5
  419. package/src/migration/migrator.ts +68 -41
  420. package/src/migration/postgresql-schema-reader.ts +52 -47
  421. package/src/migration/slack-confirm.ts +17 -15
  422. package/src/naite/naite-reporter.ts +1 -1
  423. package/src/naite/naite.ts +97 -24
  424. package/src/runtime-type.ts +34 -0
  425. package/src/ssr/hmr-opt-out.ts +78 -0
  426. package/src/ssr/renderer.ts +6 -0
  427. package/src/storage/base-file.ts +13 -13
  428. package/src/storage/buffered-file.ts +11 -11
  429. package/src/storage/s3-driver.ts +4 -1
  430. package/src/storage/uploaded-file.ts +8 -8
  431. package/src/stream/__tests__/ws-contracts.test.ts +4 -2
  432. package/src/stream/__tests__/ws-telemetry.test.ts +1 -1
  433. package/src/stream/__tests__/ws.test.ts +30 -6
  434. package/src/stream/sse.ts +12 -11
  435. package/src/stream/ws-core.ts +1 -1
  436. package/src/stream/ws-delivery.ts +16 -7
  437. package/src/stream/ws-local-connection-store.ts +2 -3
  438. package/src/stream/ws-presence-store.ts +6 -1
  439. package/src/stream/ws-registry.ts +16 -7
  440. package/src/stream/ws-telemetry.ts +66 -43
  441. package/src/stream/ws.ts +73 -39
  442. package/src/syncer/__tests__/api-parser.websocket-type-ref.test.ts +3 -2
  443. package/src/syncer/__tests__/http-validator-registry.test.ts +137 -0
  444. package/src/syncer/api-parser.ts +67 -27
  445. package/src/syncer/checksum.ts +17 -11
  446. package/src/syncer/code-generator.ts +25 -17
  447. package/src/syncer/entity-operations.ts +3 -5
  448. package/src/syncer/file-copy.ts +46 -0
  449. package/src/syncer/file-patterns.ts +11 -8
  450. package/src/syncer/file-tracking.ts +3 -4
  451. package/src/syncer/filesystem-dependencies.ts +73 -0
  452. package/src/syncer/module-loader.ts +8 -4
  453. package/src/syncer/syncer-actions.ts +56 -18
  454. package/src/syncer/syncer.ts +116 -43
  455. package/src/syncer/watcher.ts +8 -4
  456. package/src/tasks/decorator.ts +20 -12
  457. package/src/tasks/step-wrapper.ts +19 -9
  458. package/src/tasks/workflow-manager.ts +15 -9
  459. package/src/template/__tests__/http_validators.template.test.ts +160 -0
  460. package/src/template/__tests__/services.template.mutation.test.ts +24 -23
  461. package/src/template/__tests__/services.template.websocket.test.ts +21 -25
  462. package/src/template/entity-converter.ts +5 -2
  463. package/src/template/helpers.ts +8 -9
  464. package/src/template/implementations/generated.template.ts +5 -4
  465. package/src/template/implementations/generated_http.template.ts +61 -15
  466. package/src/template/implementations/generated_sso.template.ts +15 -4
  467. package/src/template/implementations/http_validators.template.ts +175 -0
  468. package/src/template/implementations/model.template.ts +3 -1
  469. package/src/template/implementations/sd.template.ts +81 -41
  470. package/src/template/implementations/services.template.ts +2 -2
  471. package/src/template/implementations/view_form.template.ts +56 -39
  472. package/src/template/implementations/view_list.template.ts +31 -23
  473. package/src/template/template-manager.ts +15 -13
  474. package/src/template/template-types.ts +13 -5
  475. package/src/template/template.ts +4 -3
  476. package/src/template/zod-converter.ts +206 -91
  477. package/src/testing/__tests__/dev-test-routes.test.ts +85 -25
  478. package/src/testing/__tests__/dev-vitest-manager.test.ts +15 -15
  479. package/src/testing/_relation-graph.ts +4 -1
  480. package/src/testing/bootstrap.ts +12 -5
  481. package/src/testing/data-explorer.ts +102 -53
  482. package/src/testing/dev-test-routes.ts +87 -50
  483. package/src/testing/dev-vitest-manager.ts +88 -32
  484. package/src/testing/faker-mappings.ts +2 -2
  485. package/src/testing/filesystem.ts +1 -0
  486. package/src/testing/fixture-generator.ts +191 -131
  487. package/src/testing/fixture-loader.ts +5 -1
  488. package/src/testing/fixture-manager.ts +129 -90
  489. package/src/testing/global-setup.ts +7 -3
  490. package/src/testing/index.ts +5 -0
  491. package/src/types/__tests__/entity-json-schema-search-text.test.ts +9 -3
  492. package/src/types/types.ts +184 -158
  493. package/src/ui/ai-api.ts +9 -7
  494. package/src/ui/ai-client.ts +61 -56
  495. package/src/ui/api.ts +727 -616
  496. package/src/ui/async-route.ts +4 -0
  497. package/src/ui/cdd-service.ts +35 -12
  498. package/src/ui/migrations-api.ts +63 -51
  499. package/src/utils/formatter.ts +7 -3
  500. package/src/utils/fs-utils.ts +5 -5
  501. package/src/utils/model.ts +4 -5
  502. package/src/utils/object-utils.ts +32 -22
  503. package/src/utils/process-utils.ts +4 -1
  504. package/src/utils/runtime-value.ts +43 -0
  505. package/src/utils/sql-parser.ts +13 -6
  506. package/src/utils/type-utils.ts +9 -7
  507. package/src/utils/utils.ts +19 -21
  508. package/src/utils/zod-error.ts +4 -2
  509. package/src/vector/chunking.ts +6 -1
  510. package/src/vector/embedding.ts +2 -1
  511. package/src/vector/types.ts +4 -2
  512. package/tsdown.api.config.ts +5 -2
  513. package/dist/ui-web/assets/index-C0m1pk6K.js +0 -177
@@ -236,4 +236,4 @@ var init_api_parser = __esmMin((() => {
236
236
  init_api_parser();
237
237
  export { init_api_parser, readApisFromFile };
238
238
 
239
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXBhcnNlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2FwaS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuXG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmltcG9ydCB7IHJlZ2lzdGVyZWRBcGlzIH0gZnJvbSBcIi4uL2FwaS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4uL2FwaS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyB0eXBlIFJlc29sdmVkV2ViU29ja2V0RGVjb3JhdG9yT3B0aW9ucyB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVNZXRob2ROYW1lIH0gZnJvbSBcIi4uL2FwaS92YWxpZGF0b3JcIjtcbmltcG9ydCB7IHR5cGUgQXBpUGFyYW0sIHR5cGUgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbnR5cGUgV2ViU29ja2V0VHlwZVJlZnMgPSBQaWNrPFxuICBSZXNvbHZlZFdlYlNvY2tldERlY29yYXRvck9wdGlvbnMsXG4gIFwib3V0RXZlbnRzVHlwZVJlZlwiIHwgXCJpbkV2ZW50c1R5cGVSZWZcIlxuPjtcbnR5cGUgUGFyc2VkTWV0aG9kID0ge1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICB0eXBlUGFyYW1ldGVyczogQXBpUGFyYW1UeXBlLlR5cGVQYXJhbVtdO1xuICBwYXJhbWV0ZXJzOiBBcGlQYXJhbVtdO1xuICByZXR1cm5UeXBlOiBBcGlQYXJhbVR5cGU7XG4gIHdlYnNvY2tldFR5cGVSZWZzOiBXZWJTb2NrZXRUeXBlUmVmcztcbn07XG5cbi8qKlxuICogVHlwZVNjcmlwdCDtjIzsnbzsnYQg7YyM7Iux7ZWY7JesIEFQSSDrqZTshozrk5wg7KCV67O066W8IOy2lOy2nO2VqeuLiOuLpC5cbiAqIEBhcGkg642w7L2U66CI7J207YSw6rCAIOu2meydgCDrqZTshozrk5zrk6TsnZgg7YOA7J6FIOygleuztOulvCDrtoTshJ3tlanri4jri6QuXG4gKiBAcGFyYW0gZmlsZVBhdGggLSDtjIzsi7HtlaAgVHlwZVNjcmlwdCDtjIzsnbzsnZgg7KCI64yAIOqyveuhnFxuICogQHJldHVybnMgQVBJIOuplOyGjOuTnCDsoJXrs7Qg67Cw7Je0ICjtg4DsnoUg7YyM652866+47YSwLCDtjIzrnbzrr7jthLAsIOumrO2EtCDtg4DsnoUg65OxKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEFwaXNGcm9tRmlsZShmaWxlUGF0aDogQWJzb2x1dGVQYXRoKTogUHJvbWlzZTxFeHRlbmRlZEFwaVtdPiB7XG4gIGlmICghZmlsZVBhdGguZW5kc1dpdGgoXCIudHNcIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtmaWxlUGF0aH0gZG9lcyBub3Qgc2VlbSB0byBiZSBhIFR5cGVTY3JpcHQgZmlsZS4gUGxlYXNlIGNoZWNrIHRoZSBmaWxlIHBhdGguIFdlIG9ubHkgc3VwcG9ydCBwYXJzaW5nIFR5cGVTY3JpcHQgZmlsZXMuYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc291cmNlRmlsZSA9IHRzLmNyZWF0ZVNvdXJjZUZpbGUoXG4gICAgZmlsZVBhdGgsXG4gICAgKGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoKSkudG9TdHJpbmcoKSxcbiAgICB0cy5TY3JpcHRUYXJnZXQuTGF0ZXN0LFxuICApO1xuXG4gIGNvbnN0IG1ldGhvZHM6IFBhcnNlZE1ldGhvZFtdID0gW107XG4gIGxldCBtb2RlbE5hbWU6IHN0cmluZyA9IFwiVW5rbm93bk1vZGVsXCI7XG4gIGxldCBtZXRob2ROYW1lOiBzdHJpbmcgPSBcInVua25vd25NZXRob2RcIjtcbiAgY29uc3QgdmlzaXRvciA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgaWYgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgaWYgKG5vZGUubmFtZSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtb2RlbE5hbWUgPSBub2RlLm5hbWUuZXNjYXBlZFRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9DbGFzcyQvLCBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtZXRob2ROYW1lID0gbm9kZS5uYW1lLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCk7XG4gICAgICAgIHZhbGlkYXRlTWV0aG9kTmFtZShtZXRob2ROYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXSA9IChub2RlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoXG4gICAgICAgICh0eXBlUGFyYW0pID0+IHtcbiAgICAgICAgICBjb25zdCB0cCA9IHR5cGVQYXJhbTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0OiBcInR5cGUtcGFyYW1cIixcbiAgICAgICAgICAgIGlkOiB0cC5uYW1lLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBjb25zdHJhaW50OiB0cC5jb25zdHJhaW50ID8gcmVzb2x2ZVR5cGVOb2RlKHRwLmNvbnN0cmFpbnQpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgY29uc3QgcGFyYW1ldGVyczogQXBpUGFyYW1bXSA9IG5vZGUucGFyYW1ldGVycy5tYXAoKHBhcmFtRGVjLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZhdWx0RGVmID0gcHJpbnROb2RlKHBhcmFtRGVjLmluaXRpYWxpemVyLCBzb3VyY2VGaWxlKTtcblxuICAgICAgICAvLyDquLDrs7jqsJLsnbQg7J6I64qUIOqyveyasCBwYXJhbURlYy50eXBl6rCAIHVuZGVmaW5lZOuhnCDrgpjsmLRcblxuICAgICAgICByZXR1cm4gcmVzb2x2ZVBhcmFtRGVjKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHBhcmFtRGVjLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiBwYXJhbURlYy50eXBlIGFzIHRzLlR5cGVOb2RlLFxuICAgICAgICAgICAgb3B0aW9uYWw6IHBhcmFtRGVjLnF1ZXN0aW9uVG9rZW4gIT09IHVuZGVmaW5lZCB8fCBwYXJhbURlYy5pbml0aWFsaXplciAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGVmYXVsdERlZixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBpZiAobm9kZS50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDrpqzthLQg7YOA7J6F7J20IOq4sOyerOuQmOyngCDslYrsnYAg66mU7IaM65OcICR7bW9kZWxOYW1lfS4ke21ldGhvZE5hbWV9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXR1cm5UeXBlID0gcmVzb2x2ZVR5cGVOb2RlKG5vZGUudHlwZSk7XG4gICAgICBjb25zdCB3ZWJzb2NrZXRUeXBlUmVmcyA9IHJlYWRXZWJTb2NrZXRUeXBlUmVmcyhub2RlKTtcblxuICAgICAgbWV0aG9kcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICB0eXBlUGFyYW1ldGVycyxcbiAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgcmV0dXJuVHlwZSxcbiAgICAgICAgd2Vic29ja2V0VHlwZVJlZnMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0b3IpO1xuICB9O1xuICB2aXNpdG9yKHNvdXJjZUZpbGUpO1xuXG4gIGlmIChtZXRob2RzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIO2YhOyerCDtjIzsnbzsnZgg65Ox66Gd65CcIEFQSSDtlYTthLBcbiAgY29uc3QgY3VycmVudE1vZGVsQXBpcyA9IHJlZ2lzdGVyZWRBcGlzLmZpbHRlcigoYXBpKSA9PiB7XG4gICAgcmV0dXJuIG1ldGhvZHMuZmluZChcbiAgICAgIChtZXRob2QpID0+IG1ldGhvZC5tb2RlbE5hbWUgPT09IGFwaS5tb2RlbE5hbWUgJiYgbWV0aG9kLm1ldGhvZE5hbWUgPT09IGFwaS5tZXRob2ROYW1lLFxuICAgICk7XG4gIH0pO1xuICBpZiAoY3VycmVudE1vZGVsQXBpcy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBjb25zdCBwID0gcGF0aC5qb2luKHRtcGRpcigpLCBcInNvbmFtdS1zeW5jZXItZXJyb3IuanNvblwiKTtcbiAgICAvLyB3cml0ZUZpbGVTeW5jKHAsIEpTT04uc3RyaW5naWZ5KHJlZ2lzdGVyZWRBcGlzLCBudWxsLCAyKSk7XG4gICAgLy8gZXhlY1N5bmMoYG9wZW4gJHtwfWApO1xuICAgIC8vIHRocm93IG5ldyBFcnJvcihg7ZiE7J6sIO2MjOydvOyXkCDsgqzsoIQg65Ox66Gd65CcIEFQSeqwgCDsl4bsirXri4jri6QuICR7ZmlsZVBhdGh9YCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8g65Ox66Gd65CcIEFQSeyXkCDtmITsnqwg66mU7IaM65OcIO2DgOyehSDsoJXrs7Qg7ZmV7J6lXG4gIGNvbnN0IGV4dGVuZGVkQXBpcyA9IGN1cnJlbnRNb2RlbEFwaXMubWFwKChhcGkpID0+IHtcbiAgICBjb25zdCBmb3VuZE1ldGhvZCA9IG1ldGhvZHMuZmluZChcbiAgICAgIChtZXRob2QpID0+IG1ldGhvZC5tb2RlbE5hbWUgPT09IGFwaS5tb2RlbE5hbWUgJiYgbWV0aG9kLm1ldGhvZE5hbWUgPT09IGFwaS5tZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKCFmb3VuZE1ldGhvZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBUEkgJHthcGkubW9kZWxOYW1lfS4ke2FwaS5tZXRob2ROYW1lfSBub3QgZm91bmQgaW4gJHtmaWxlUGF0aH1gKTtcbiAgICB9XG4gICAgY29uc3Qgd2Vic29ja2V0T3B0aW9ucyA9IGFwaS53ZWJzb2NrZXRPcHRpb25zXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5hcGkud2Vic29ja2V0T3B0aW9ucyxcbiAgICAgICAgICAuLi5mb3VuZE1ldGhvZC53ZWJzb2NrZXRUeXBlUmVmcyxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXBpLFxuICAgICAgd2Vic29ja2V0T3B0aW9ucyxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzOiBmb3VuZE1ldGhvZD8udHlwZVBhcmFtZXRlcnMsXG4gICAgICBwYXJhbWV0ZXJzOiBmb3VuZE1ldGhvZD8ucGFyYW1ldGVycyxcbiAgICAgIHJldHVyblR5cGU6IGZvdW5kTWV0aG9kPy5yZXR1cm5UeXBlLFxuICAgIH07XG4gIH0pO1xuICByZXR1cm4gZXh0ZW5kZWRBcGlzO1xufVxuXG5mdW5jdGlvbiByZWFkV2ViU29ja2V0VHlwZVJlZnMobm9kZTogdHMuTWV0aG9kRGVjbGFyYXRpb24pOiBXZWJTb2NrZXRUeXBlUmVmcyB7XG4gIGNvbnN0IG9wdGlvbnNMaXRlcmFsID0gZ2V0RGVjb3JhdG9yT3B0aW9uc09iamVjdExpdGVyYWwobm9kZSwgXCJ3ZWJzb2NrZXRcIik7XG4gIGlmICghb3B0aW9uc0xpdGVyYWwpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCByZWZzOiBXZWJTb2NrZXRUeXBlUmVmcyA9IHt9O1xuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIG9wdGlvbnNMaXRlcmFsLnByb3BlcnRpZXMpIHtcbiAgICBpZiAoIXRzLmlzUHJvcGVydHlBc3NpZ25tZW50KHByb3BlcnR5KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydHlOYW1lID0gZ2V0UHJvcGVydHlOYW1lVGV4dChwcm9wZXJ0eS5uYW1lKTtcbiAgICBpZiAocHJvcGVydHlOYW1lICE9PSBcIm91dEV2ZW50c1wiICYmIHByb3BlcnR5TmFtZSAhPT0gXCJpbkV2ZW50c1wiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlUmVmID0gcmVzb2x2ZURlY29yYXRvclR5cGVSZWYocHJvcGVydHkuaW5pdGlhbGl6ZXIpO1xuICAgIGlmICghdHlwZVJlZikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5TmFtZSA9PT0gXCJvdXRFdmVudHNcIikge1xuICAgICAgcmVmcy5vdXRFdmVudHNUeXBlUmVmID0gdHlwZVJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVmcy5pbkV2ZW50c1R5cGVSZWYgPSB0eXBlUmVmO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZWZzO1xufVxuXG5mdW5jdGlvbiBnZXREZWNvcmF0b3JPcHRpb25zT2JqZWN0TGl0ZXJhbChcbiAgbm9kZTogdHMuTWV0aG9kRGVjbGFyYXRpb24sXG4gIGRlY29yYXRvck5hbWU6IHN0cmluZyxcbik6IHRzLk9iamVjdExpdGVyYWxFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBtb2RpZmllciBvZiBub2RlLm1vZGlmaWVycyA/PyBbXSkge1xuICAgIGlmICghdHMuaXNEZWNvcmF0b3IobW9kaWZpZXIpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBleHByZXNzaW9uID0gbW9kaWZpZXIuZXhwcmVzc2lvbjtcbiAgICBpZiAoIXRzLmlzQ2FsbEV4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghdHMuaXNJZGVudGlmaWVyKGV4cHJlc3Npb24uZXhwcmVzc2lvbikgfHwgZXhwcmVzc2lvbi5leHByZXNzaW9uLnRleHQgIT09IGRlY29yYXRvck5hbWUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IFtmaXJzdEFyZ10gPSBleHByZXNzaW9uLmFyZ3VtZW50cztcbiAgICBpZiAoZmlyc3RBcmcgJiYgdHMuaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihmaXJzdEFyZykpIHtcbiAgICAgIHJldHVybiBmaXJzdEFyZztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eU5hbWVUZXh0KG5hbWU6IHRzLlByb3BlcnR5TmFtZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh0cy5pc0lkZW50aWZpZXIobmFtZSkgfHwgdHMuaXNTdHJpbmdMaXRlcmFsKG5hbWUpIHx8IHRzLmlzTnVtZXJpY0xpdGVyYWwobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS50ZXh0O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURlY29yYXRvclR5cGVSZWYoZXhwcmVzc2lvbjogdHMuRXhwcmVzc2lvbik6IEFwaVBhcmFtVHlwZS5SZWYgfCB1bmRlZmluZWQge1xuICBpZiAodHMuaXNJZGVudGlmaWVyKGV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHQ6IFwicmVmXCIsXG4gICAgICBpZDogZXhwcmVzc2lvbi50ZXh0LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgdHMuaXNBc0V4cHJlc3Npb24oZXhwcmVzc2lvbikgfHxcbiAgICB0cy5pc1BhcmVudGhlc2l6ZWRFeHByZXNzaW9uKGV4cHJlc3Npb24pIHx8XG4gICAgdHMuaXNOb25OdWxsRXhwcmVzc2lvbihleHByZXNzaW9uKSB8fFxuICAgIHRzLmlzVHlwZUFzc2VydGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbilcbiAgKSB7XG4gICAgcmV0dXJuIHJlc29sdmVEZWNvcmF0b3JUeXBlUmVmKGV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVHlwZU5vZGUodHlwZU5vZGU6IHRzLlR5cGVOb2RlKTogQXBpUGFyYW1UeXBlIHtcbiAgc3dpdGNoICh0eXBlTm9kZT8ua2luZCkge1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BbnlLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwiYW55XCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVua25vd25LZXl3b3JkOlxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5TdHJpbmdLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLk51bWJlcktleXdvcmQ6XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQm9vbGVhbktleXdvcmQ6XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlZvaWRLZXl3b3JkOlxuICAgICAgcmV0dXJuIFwidm9pZFwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5MaXRlcmFsVHlwZToge1xuICAgICAgY29uc3QgbGl0ZXJhbCA9ICh0eXBlTm9kZSBhcyB0cy5MaXRlcmFsVHlwZU5vZGUpLmxpdGVyYWw7XG4gICAgICBpZiAodHMuaXNTdHJpbmdMaXRlcmFsKGxpdGVyYWwpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdDogXCJzdHJpbmctbGl0ZXJhbFwiLFxuICAgICAgICAgIHZhbHVlOiBsaXRlcmFsLnRleHQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHRzLmlzTnVtZXJpY0xpdGVyYWwobGl0ZXJhbCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0OiBcIm51bWVyaWMtbGl0ZXJhbFwiLFxuICAgICAgICAgIHZhbHVlOiBOdW1iZXIobGl0ZXJhbC50ZXh0KSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJudWxsXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLlVuZGVmaW5lZEtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgfSBlbHNlIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuVHJ1ZUtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gXCJ0cnVlXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobGl0ZXJhbC5raW5kID09PSB0cy5TeW50YXhLaW5kLkZhbHNlS2V5d29yZCkge1xuICAgICAgICAgIHJldHVybiBcImZhbHNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi7JWMIOyImCDsl4bripQg66as7YSw65+0XCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQXJyYXlUeXBlOiB7XG4gICAgICBjb25zdCBhcnJOb2RlID0gdHlwZU5vZGUgYXMgdHMuQXJyYXlUeXBlTm9kZTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwiYXJyYXlcIixcbiAgICAgICAgZWxlbWVudHNUeXBlOiByZXNvbHZlVHlwZU5vZGUoYXJyTm9kZS5lbGVtZW50VHlwZSksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHlwZUxpdGVyYWw6IHtcbiAgICAgIGNvbnN0IGxpdGVyYWxOb2RlID0gdHlwZU5vZGUgYXMgdHMuVHlwZUxpdGVyYWxOb2RlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcHM6IGxpdGVyYWxOb2RlLm1lbWJlcnMubWFwKChtZW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAodHMuaXNJbmRleFNpZ25hdHVyZURlY2xhcmF0aW9uKG1lbWJlcikpIHtcbiAgICAgICAgICAgIGFzc2VydChtZW1iZXIucGFyYW1ldGVyc1swXSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSByZXNvbHZlUGFyYW1EZWMoe1xuICAgICAgICAgICAgICBuYW1lOiBtZW1iZXIucGFyYW1ldGVyc1swXS5uYW1lIGFzIHRzLklkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHR5cGU6IG1lbWJlci5wYXJhbWV0ZXJzWzBdLnR5cGUgYXMgdHMuVHlwZU5vZGUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVQYXJhbURlYyh7XG4gICAgICAgICAgICAgIG5hbWU6IHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkVGV4dDogYFske3Jlcy5uYW1lfSR7cmVzLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHtyZXMudHlwZX1dYCxcbiAgICAgICAgICAgICAgfSBhcyB0cy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgICB0eXBlOiBtZW1iZXIudHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVBhcmFtRGVjKHtcbiAgICAgICAgICAgICAgbmFtZTogKG1lbWJlciBhcyB0cy5Qcm9wZXJ0eVNpZ25hdHVyZSkubmFtZSBhcyB0cy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgICB0eXBlOiAobWVtYmVyIGFzIHRzLlByb3BlcnR5U2lnbmF0dXJlKS50eXBlIGFzIHRzLlR5cGVOb2RlLFxuICAgICAgICAgICAgICBvcHRpb25hbDogKG1lbWJlciBhcyB0cy5Qcm9wZXJ0eVNpZ25hdHVyZSkucXVlc3Rpb25Ub2tlbiAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UeXBlUmVmZXJlbmNlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJyZWZcIixcbiAgICAgICAgaWQ6ICgodHlwZU5vZGUgYXMgdHMuVHlwZVJlZmVyZW5jZU5vZGUpLnR5cGVOYW1lIGFzIHRzLklkZW50aWZpZXIpLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCksXG4gICAgICAgIGFyZ3M6ICh0eXBlTm9kZSBhcyB0cy5UeXBlUmVmZXJlbmNlTm9kZSkudHlwZUFyZ3VtZW50cz8ubWFwKCh0eXBlQXJnKSA9PlxuICAgICAgICAgIHJlc29sdmVUeXBlTm9kZSh0eXBlQXJnKSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlVuaW9uVHlwZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwidW5pb25cIixcbiAgICAgICAgdHlwZXM6ICh0eXBlTm9kZSBhcyB0cy5VbmlvblR5cGVOb2RlKS50eXBlcy5tYXAoKHR5cGUpID0+IHJlc29sdmVUeXBlTm9kZSh0eXBlKSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbnRlcnNlY3Rpb25UeXBlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJpbnRlcnNlY3Rpb25cIixcbiAgICAgICAgdHlwZXM6ICh0eXBlTm9kZSBhcyB0cy5JbnRlcnNlY3Rpb25UeXBlTm9kZSkudHlwZXMubWFwKCh0eXBlKSA9PiByZXNvbHZlVHlwZU5vZGUodHlwZSkpLFxuICAgICAgfTtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuSW5kZXhlZEFjY2Vzc1R5cGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0OiBcImluZGV4ZWQtYWNjZXNzXCIsXG4gICAgICAgIG9iamVjdDogcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGUpLm9iamVjdFR5cGUpLFxuICAgICAgICBpbmRleDogcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGUpLmluZGV4VHlwZSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5UdXBsZVR5cGU6XG4gICAgICBpZiAodHMuaXNUdXBsZVR5cGVOb2RlKHR5cGVOb2RlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHQ6IFwidHVwbGUtdHlwZVwiLFxuICAgICAgICAgIGVsZW1lbnRzOiB0eXBlTm9kZS5lbGVtZW50cy5tYXAoKGVsZW0pID0+IHJlc29sdmVUeXBlTm9kZShlbGVtKSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuUGFyZW50aGVzaXplZFR5cGU6XG4gICAgICAvLyDqtITtmLjroZwg66y27J24IO2DgOyehSAo7JiIOiAoQSAmIEIpW10g7JeQ7IScIChBICYgQikpXG4gICAgICAvLyDrgrTrtoAg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCByZXNvbHZlXG4gICAgICByZXR1cm4gcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5QYXJlbnRoZXNpemVkVHlwZU5vZGUpLnR5cGUpO1xuXG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uVHlwZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgcGFyYW1ldGVyczogKHR5cGVOb2RlIGFzIHRzLkZ1bmN0aW9uVHlwZU5vZGUpLnBhcmFtZXRlcnMubWFwKChwYXJhbSkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBwYXJhbS5uYW1lLmdldFRleHQoKSxcbiAgICAgICAgICB0eXBlOiBwYXJhbS50eXBlID8gcmVzb2x2ZVR5cGVOb2RlKHBhcmFtLnR5cGUpIDogXCJ1bmtub3duXCIsXG4gICAgICAgICAgb3B0aW9uYWw6IHBhcmFtLnF1ZXN0aW9uVG9rZW4gIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICBkZWZhdWx0RGVmOiB1bmRlZmluZWQsXG4gICAgICAgIH0pKSxcbiAgICAgICAgcmV0dXJuVHlwZTogcmVzb2x2ZVR5cGVOb2RlKCh0eXBlTm9kZSBhcyB0cy5GdW5jdGlvblR5cGVOb2RlKS50eXBlKSxcbiAgICAgIH07XG4gICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHR5cGVOb2RlIHVuZGVmaW5lZGApO1xuICB9XG5cbiAgY29uc29sZS5kZWJ1Zyh0eXBlTm9kZSk7XG4gIHRocm93IG5ldyBFcnJvcihg7JWMIOyImCDsl4bripQgU3ludGF4S2luZCAke3R5cGVOb2RlLmtpbmR9YCk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVQYXJhbURlYyhcbiAgcGFyYW1EZWM6IHtcbiAgICBuYW1lOiB0cy5CaW5kaW5nTmFtZTtcbiAgICB0eXBlOiB0cy5UeXBlTm9kZTtcbiAgICBvcHRpb25hbD86IGJvb2xlYW47XG4gICAgZGVmYXVsdERlZj86IHN0cmluZztcbiAgfSxcbiAgaW5kZXg6IG51bWJlciA9IDAsXG4pOiBBcGlQYXJhbSB7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbURlYy5uYW1lIGFzIHRzLklkZW50aWZpZXI7XG4gIGNvbnN0IHR5cGUgPSByZXNvbHZlVHlwZU5vZGUocGFyYW1EZWMudHlwZSk7XG5cbiAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnNvbGUuZGVidWcoeyBuYW1lLCB0eXBlLCBwYXJhbURlYyB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogQXBpUGFyYW0gPSB7XG4gICAgbmFtZTogbmFtZS5lc2NhcGVkVGV4dCA/IG5hbWUuZXNjYXBlZFRleHQudG9TdHJpbmcoKSA6IGBub25hbWVBdCR7aW5kZXh9YCxcbiAgICB0eXBlLFxuICAgIG9wdGlvbmFsOiBwYXJhbURlYy5vcHRpb25hbCA9PT0gdHJ1ZSxcbiAgICBkZWZhdWx0RGVmOiBwYXJhbURlYz8uZGVmYXVsdERlZixcbiAgfTtcblxuICAvLyDqtazsobDrtoTtlbTtlaDri7nsnZgg6rK97JqwIO2DgOyeheydtOumhCDsgqzsmqlcbiAgaWYgKFxuICAgIHRzLmlzT2JqZWN0QmluZGluZ1BhdHRlcm4obmFtZSkgJiZcbiAgICB0cy5pc1R5cGVSZWZlcmVuY2VOb2RlKHBhcmFtRGVjLnR5cGUpICYmXG4gICAgdHMuaXNJZGVudGlmaWVyKHBhcmFtRGVjLnR5cGUudHlwZU5hbWUpXG4gICkge1xuICAgIHJlc3VsdC5uYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShwYXJhbURlYy50eXBlLnR5cGVOYW1lLnRleHQsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gcHJpbnROb2RlKG5vZGU6IHRzLk5vZGUgfCB1bmRlZmluZWQsIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHByaW50ZXIgPSB0cy5jcmVhdGVQcmludGVyKHsgbmV3TGluZTogdHMuTmV3TGluZUtpbmQuTGluZUZlZWQgfSk7XG4gIHJldHVybiBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgbm9kZSwgc291cmNlRmlsZSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBZ0NBLGVBQXNCLGlCQUFpQixVQUFnRDtDQUNyRixJQUFJLENBQUMsU0FBUyxTQUFTLEtBQUssR0FDMUIsTUFBTSxJQUFJLE1BQ1IsR0FB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
239
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXBhcnNlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2FwaS1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuXG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmltcG9ydCB7IHJlZ2lzdGVyZWRBcGlzIH0gZnJvbSBcIi4uL2FwaS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyB0eXBlIEV4dGVuZGVkQXBpIH0gZnJvbSBcIi4uL2FwaS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyB0eXBlIFJlc29sdmVkV2ViU29ja2V0RGVjb3JhdG9yT3B0aW9ucyB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVNZXRob2ROYW1lIH0gZnJvbSBcIi4uL2FwaS92YWxpZGF0b3JcIjtcbmltcG9ydCB7IHR5cGUgQXBpUGFyYW0sIHR5cGUgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbnR5cGUgV2ViU29ja2V0VHlwZVJlZnMgPSBQaWNrPFxuICBSZXNvbHZlZFdlYlNvY2tldERlY29yYXRvck9wdGlvbnMsXG4gIFwib3V0RXZlbnRzVHlwZVJlZlwiIHwgXCJpbkV2ZW50c1R5cGVSZWZcIlxuPjtcbnR5cGUgUGFyc2VkTWV0aG9kID0ge1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICB0eXBlUGFyYW1ldGVyczogQXBpUGFyYW1UeXBlLlR5cGVQYXJhbVtdO1xuICBwYXJhbWV0ZXJzOiBBcGlQYXJhbVtdO1xuICByZXR1cm5UeXBlOiBBcGlQYXJhbVR5cGU7XG4gIHdlYnNvY2tldFR5cGVSZWZzOiBXZWJTb2NrZXRUeXBlUmVmcztcbn07XG5cbi8qKlxuICogVHlwZVNjcmlwdCDtjIzsnbzsnYQg7YyM7Iux7ZWY7JesIEFQSSDrqZTshozrk5wg7KCV67O066W8IOy2lOy2nO2VqeuLiOuLpC5cbiAqIEBhcGkg642w7L2U66CI7J207YSw6rCAIOu2meydgCDrqZTshozrk5zrk6TsnZgg7YOA7J6FIOygleuztOulvCDrtoTshJ3tlanri4jri6QuXG4gKiBAcGFyYW0gZmlsZVBhdGggLSDtjIzsi7HtlaAgVHlwZVNjcmlwdCDtjIzsnbzsnZgg7KCI64yAIOqyveuhnFxuICogQHJldHVybnMgQVBJIOuplOyGjOuTnCDsoJXrs7Qg67Cw7Je0ICjtg4DsnoUg7YyM652866+47YSwLCDtjIzrnbzrr7jthLAsIOumrO2EtCDtg4DsnoUg65OxKVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEFwaXNGcm9tRmlsZShmaWxlUGF0aDogQWJzb2x1dGVQYXRoKTogUHJvbWlzZTxFeHRlbmRlZEFwaVtdPiB7XG4gIGlmICghZmlsZVBhdGguZW5kc1dpdGgoXCIudHNcIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtmaWxlUGF0aH0gZG9lcyBub3Qgc2VlbSB0byBiZSBhIFR5cGVTY3JpcHQgZmlsZS4gUGxlYXNlIGNoZWNrIHRoZSBmaWxlIHBhdGguIFdlIG9ubHkgc3VwcG9ydCBwYXJzaW5nIFR5cGVTY3JpcHQgZmlsZXMuYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc291cmNlRmlsZSA9IHRzLmNyZWF0ZVNvdXJjZUZpbGUoXG4gICAgZmlsZVBhdGgsXG4gICAgKGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoKSkudG9TdHJpbmcoKSxcbiAgICB0cy5TY3JpcHRUYXJnZXQuTGF0ZXN0LFxuICApO1xuXG4gIGNvbnN0IG1ldGhvZHM6IFBhcnNlZE1ldGhvZFtdID0gW107XG4gIGxldCBtb2RlbE5hbWU6IHN0cmluZyA9IFwiVW5rbm93bk1vZGVsXCI7XG4gIGxldCBtZXRob2ROYW1lOiBzdHJpbmcgPSBcInVua25vd25NZXRob2RcIjtcbiAgY29uc3QgdmlzaXRvciA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgaWYgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgaWYgKG5vZGUubmFtZSAmJiB0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtb2RlbE5hbWUgPSBub2RlLm5hbWUuZXNjYXBlZFRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9DbGFzcyQvLCBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgICAgICBtZXRob2ROYW1lID0gbm9kZS5uYW1lLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCk7XG4gICAgICAgIHZhbGlkYXRlTWV0aG9kTmFtZShtZXRob2ROYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXSA9IChub2RlLnR5cGVQYXJhbWV0ZXJzID8/IFtdKS5tYXAoXG4gICAgICAgICh0eXBlUGFyYW0pID0+IHtcbiAgICAgICAgICBjb25zdCB0cCA9IHR5cGVQYXJhbTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0OiBcInR5cGUtcGFyYW1cIixcbiAgICAgICAgICAgIGlkOiB0cC5uYW1lLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBjb25zdHJhaW50OiB0cC5jb25zdHJhaW50ID8gcmVzb2x2ZVR5cGVOb2RlKHRwLmNvbnN0cmFpbnQpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgY29uc3QgcGFyYW1ldGVyczogQXBpUGFyYW1bXSA9IG5vZGUucGFyYW1ldGVycy5tYXAoKHBhcmFtRGVjLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZhdWx0RGVmID0gcHJpbnROb2RlKHBhcmFtRGVjLmluaXRpYWxpemVyLCBzb3VyY2VGaWxlKTtcblxuICAgICAgICAvLyDquLDrs7jqsJLsnbQg7J6I64qUIOqyveyasCBwYXJhbURlYy50eXBl6rCAIHVuZGVmaW5lZOuhnCDrgpjsmLRcblxuICAgICAgICByZXR1cm4gcmVzb2x2ZVBhcmFtRGVjKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHBhcmFtRGVjLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhcmFtRGVjLnR5cGUgYXMgdHMuVHlwZU5vZGUsXG4gICAgICAgICAgICBvcHRpb25hbDogcGFyYW1EZWMucXVlc3Rpb25Ub2tlbiAhPT0gdW5kZWZpbmVkIHx8IHBhcmFtRGVjLmluaXRpYWxpemVyICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICBkZWZhdWx0RGVmLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGlmIChub2RlLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOumrO2EtCDtg4DsnoXsnbQg6riw7J6s65CY7KeAIOyViuydgCDrqZTshozrk5wgJHttb2RlbE5hbWV9LiR7bWV0aG9kTmFtZX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldHVyblR5cGUgPSByZXNvbHZlVHlwZU5vZGUobm9kZS50eXBlKTtcbiAgICAgIGNvbnN0IHdlYnNvY2tldFR5cGVSZWZzID0gcmVhZFdlYlNvY2tldFR5cGVSZWZzKG5vZGUpO1xuXG4gICAgICBtZXRob2RzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHR5cGVQYXJhbWV0ZXJzLFxuICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICByZXR1cm5UeXBlLFxuICAgICAgICB3ZWJzb2NrZXRUeXBlUmVmcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXRvcik7XG4gIH07XG4gIHZpc2l0b3Ioc291cmNlRmlsZSk7XG5cbiAgaWYgKG1ldGhvZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8g7ZiE7J6sIO2MjOydvOydmCDrk7HroZ3rkJwgQVBJIO2VhO2EsFxuICBjb25zdCBjdXJyZW50TW9kZWxBcGlzID0gcmVnaXN0ZXJlZEFwaXMuZmlsdGVyKChhcGkpID0+IHtcbiAgICByZXR1cm4gbWV0aG9kcy5maW5kKFxuICAgICAgKG1ldGhvZCkgPT4gbWV0aG9kLm1vZGVsTmFtZSA9PT0gYXBpLm1vZGVsTmFtZSAmJiBtZXRob2QubWV0aG9kTmFtZSA9PT0gYXBpLm1ldGhvZE5hbWUsXG4gICAgKTtcbiAgfSk7XG4gIGlmIChjdXJyZW50TW9kZWxBcGlzLmxlbmd0aCA9PT0gMCkge1xuICAgIC8vIGNvbnN0IHAgPSBwYXRoLmpvaW4odG1wZGlyKCksIFwic29uYW11LXN5bmNlci1lcnJvci5qc29uXCIpO1xuICAgIC8vIHdyaXRlRmlsZVN5bmMocCwgSlNPTi5zdHJpbmdpZnkocmVnaXN0ZXJlZEFwaXMsIG51bGwsIDIpKTtcbiAgICAvLyBleGVjU3luYyhgb3BlbiAke3B9YCk7XG4gICAgLy8gdGhyb3cgbmV3IEVycm9yKGDtmITsnqwg7YyM7J287JeQIOyCrOyghCDrk7HroZ3rkJwgQVBJ6rCAIOyXhuyKteuLiOuLpC4gJHtmaWxlUGF0aH1gKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyDrk7HroZ3rkJwgQVBJ7JeQIO2YhOyerCDrqZTshozrk5wg7YOA7J6FIOygleuztCDtmZXsnqVcbiAgY29uc3QgZXh0ZW5kZWRBcGlzID0gY3VycmVudE1vZGVsQXBpcy5tYXAoKGFwaSkgPT4ge1xuICAgIGNvbnN0IGZvdW5kTWV0aG9kID0gbWV0aG9kcy5maW5kKFxuICAgICAgKG1ldGhvZCkgPT4gbWV0aG9kLm1vZGVsTmFtZSA9PT0gYXBpLm1vZGVsTmFtZSAmJiBtZXRob2QubWV0aG9kTmFtZSA9PT0gYXBpLm1ldGhvZE5hbWUsXG4gICAgKTtcbiAgICBpZiAoIWZvdW5kTWV0aG9kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFQSSAke2FwaS5tb2RlbE5hbWV9LiR7YXBpLm1ldGhvZE5hbWV9IG5vdCBmb3VuZCBpbiAke2ZpbGVQYXRofWApO1xuICAgIH1cbiAgICBjb25zdCB3ZWJzb2NrZXRPcHRpb25zID0gYXBpLndlYnNvY2tldE9wdGlvbnNcbiAgICAgID8ge1xuICAgICAgICAgIC4uLmFwaS53ZWJzb2NrZXRPcHRpb25zLFxuICAgICAgICAgIC4uLmZvdW5kTWV0aG9kLndlYnNvY2tldFR5cGVSZWZzLFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5hcGksXG4gICAgICB3ZWJzb2NrZXRPcHRpb25zLFxuICAgICAgdHlwZVBhcmFtZXRlcnM6IGZvdW5kTWV0aG9kPy50eXBlUGFyYW1ldGVycyxcbiAgICAgIHBhcmFtZXRlcnM6IGZvdW5kTWV0aG9kPy5wYXJhbWV0ZXJzLFxuICAgICAgcmV0dXJuVHlwZTogZm91bmRNZXRob2Q/LnJldHVyblR5cGUsXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBleHRlbmRlZEFwaXM7XG59XG5cbmZ1bmN0aW9uIHJlYWRXZWJTb2NrZXRUeXBlUmVmcyhub2RlOiB0cy5NZXRob2REZWNsYXJhdGlvbik6IFdlYlNvY2tldFR5cGVSZWZzIHtcbiAgY29uc3Qgb3B0aW9uc0xpdGVyYWwgPSBnZXREZWNvcmF0b3JPcHRpb25zT2JqZWN0TGl0ZXJhbChub2RlLCBcIndlYnNvY2tldFwiKTtcbiAgaWYgKCFvcHRpb25zTGl0ZXJhbCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHJlZnM6IFdlYlNvY2tldFR5cGVSZWZzID0ge307XG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2Ygb3B0aW9uc0xpdGVyYWwucHJvcGVydGllcykge1xuICAgIGlmICghdHMuaXNQcm9wZXJ0eUFzc2lnbm1lbnQocHJvcGVydHkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBnZXRQcm9wZXJ0eU5hbWVUZXh0KHByb3BlcnR5Lm5hbWUpO1xuICAgIGlmIChwcm9wZXJ0eU5hbWUgIT09IFwib3V0RXZlbnRzXCIgJiYgcHJvcGVydHlOYW1lICE9PSBcImluRXZlbnRzXCIpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVSZWYgPSByZXNvbHZlRGVjb3JhdG9yVHlwZVJlZihwcm9wZXJ0eS5pbml0aWFsaXplcik7XG4gICAgaWYgKCF0eXBlUmVmKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHlOYW1lID09PSBcIm91dEV2ZW50c1wiKSB7XG4gICAgICByZWZzLm91dEV2ZW50c1R5cGVSZWYgPSB0eXBlUmVmO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWZzLmluRXZlbnRzVHlwZVJlZiA9IHR5cGVSZWY7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlZnM7XG59XG5cbmZ1bmN0aW9uIGdldERlY29yYXRvck9wdGlvbnNPYmplY3RMaXRlcmFsKFxuICBub2RlOiB0cy5NZXRob2REZWNsYXJhdGlvbixcbiAgZGVjb3JhdG9yTmFtZTogc3RyaW5nLFxuKTogdHMuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IG1vZGlmaWVyIG9mIG5vZGUubW9kaWZpZXJzID8/IFtdKSB7XG4gICAgaWYgKCF0cy5pc0RlY29yYXRvcihtb2RpZmllcikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBtb2RpZmllci5leHByZXNzaW9uO1xuICAgIGlmICghdHMuaXNDYWxsRXhwcmVzc2lvbihleHByZXNzaW9uKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCF0cy5pc0lkZW50aWZpZXIoZXhwcmVzc2lvbi5leHByZXNzaW9uKSB8fCBleHByZXNzaW9uLmV4cHJlc3Npb24udGV4dCAhPT0gZGVjb3JhdG9yTmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgW2ZpcnN0QXJnXSA9IGV4cHJlc3Npb24uYXJndW1lbnRzO1xuICAgIGlmIChmaXJzdEFyZyAmJiB0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKGZpcnN0QXJnKSkge1xuICAgICAgcmV0dXJuIGZpcnN0QXJnO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5TmFtZVRleHQobmFtZTogdHMuUHJvcGVydHlOYW1lKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHRzLmlzSWRlbnRpZmllcihuYW1lKSB8fCB0cy5pc1N0cmluZ0xpdGVyYWwobmFtZSkgfHwgdHMuaXNOdW1lcmljTGl0ZXJhbChuYW1lKSkge1xuICAgIHJldHVybiBuYW1lLnRleHQ7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRGVjb3JhdG9yVHlwZVJlZihleHByZXNzaW9uOiB0cy5FeHByZXNzaW9uKTogQXBpUGFyYW1UeXBlLlJlZiB8IHVuZGVmaW5lZCB7XG4gIGlmICh0cy5pc0lkZW50aWZpZXIoZXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdDogXCJyZWZcIixcbiAgICAgIGlkOiBleHByZXNzaW9uLnRleHQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChcbiAgICB0cy5pc0FzRXhwcmVzc2lvbihleHByZXNzaW9uKSB8fFxuICAgIHRzLmlzUGFyZW50aGVzaXplZEV4cHJlc3Npb24oZXhwcmVzc2lvbikgfHxcbiAgICB0cy5pc05vbk51bGxFeHByZXNzaW9uKGV4cHJlc3Npb24pIHx8XG4gICAgdHMuaXNUeXBlQXNzZXJ0aW9uRXhwcmVzc2lvbihleHByZXNzaW9uKVxuICApIHtcbiAgICByZXR1cm4gcmVzb2x2ZURlY29yYXRvclR5cGVSZWYoZXhwcmVzc2lvbi5leHByZXNzaW9uKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVUeXBlTm9kZSh0eXBlTm9kZTogdHMuVHlwZU5vZGUpOiBBcGlQYXJhbVR5cGUge1xuICBzd2l0Y2ggKHR5cGVOb2RlPy5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkFueUtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJhbnlcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVW5rbm93bktleXdvcmQ6XG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlN0cmluZ0tleXdvcmQ6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuTnVtYmVyS2V5d29yZDpcbiAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5Cb29sZWFuS2V5d29yZDpcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZDpcbiAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5OdWxsS2V5d29yZDpcbiAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVm9pZEtleXdvcmQ6XG4gICAgICByZXR1cm4gXCJ2b2lkXCI7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkxpdGVyYWxUeXBlOiB7XG4gICAgICBjb25zdCBsaXRlcmFsID1cbiAgICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgdHlwZU5vZGUgYXMgdHMuTGl0ZXJhbFR5cGVOb2RlXG4gICAgICAgICkubGl0ZXJhbDtcbiAgICAgIGlmICh0cy5pc1N0cmluZ0xpdGVyYWwobGl0ZXJhbCkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0OiBcInN0cmluZy1saXRlcmFsXCIsXG4gICAgICAgICAgdmFsdWU6IGxpdGVyYWwudGV4dCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAodHMuaXNOdW1lcmljTGl0ZXJhbChsaXRlcmFsKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHQ6IFwibnVtZXJpYy1saXRlcmFsXCIsXG4gICAgICAgICAgdmFsdWU6IE51bWJlcihsaXRlcmFsLnRleHQpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxpdGVyYWwua2luZCA9PT0gdHMuU3ludGF4S2luZC5OdWxsS2V5d29yZCkge1xuICAgICAgICAgIHJldHVybiBcIm51bGxcIjtcbiAgICAgICAgfSBlbHNlIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZCkge1xuICAgICAgICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICAgICAgICB9IGVsc2UgaWYgKGxpdGVyYWwua2luZCA9PT0gdHMuU3ludGF4S2luZC5UcnVlS2V5d29yZCkge1xuICAgICAgICAgIHJldHVybiBcInRydWVcIjtcbiAgICAgICAgfSBlbHNlIGlmIChsaXRlcmFsLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuRmFsc2VLZXl3b3JkKSB7XG4gICAgICAgICAgcmV0dXJuIFwiZmFsc2VcIjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLslYwg7IiYIOyXhuuKlCDrpqzthLDrn7RcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJheVR5cGU6IHtcbiAgICAgIGNvbnN0IGFyck5vZGUgPVxuICAgICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHR5cGVOb2RlIGFzIHRzLkFycmF5VHlwZU5vZGU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0OiBcImFycmF5XCIsXG4gICAgICAgIGVsZW1lbnRzVHlwZTogcmVzb2x2ZVR5cGVOb2RlKGFyck5vZGUuZWxlbWVudFR5cGUpLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVMaXRlcmFsOiB7XG4gICAgICBjb25zdCBsaXRlcmFsTm9kZSA9XG4gICAgICAgIC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gdHlwZU5vZGUgYXMgdHMuVHlwZUxpdGVyYWxOb2RlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJvYmplY3RcIixcbiAgICAgICAgcHJvcHM6IGxpdGVyYWxOb2RlLm1lbWJlcnMubWFwKChtZW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAodHMuaXNJbmRleFNpZ25hdHVyZURlY2xhcmF0aW9uKG1lbWJlcikpIHtcbiAgICAgICAgICAgIGFzc2VydChtZW1iZXIucGFyYW1ldGVyc1swXSk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSByZXNvbHZlUGFyYW1EZWMoe1xuICAgICAgICAgICAgICBuYW1lOiAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIG1lbWJlclxuICAgICAgICAgICAgICAgIC5wYXJhbWV0ZXJzWzBdLm5hbWUgYXMgdHMuSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgdHlwZTogLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBtZW1iZXJcbiAgICAgICAgICAgICAgICAucGFyYW1ldGVyc1swXS50eXBlIGFzIHRzLlR5cGVOb2RlLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlUGFyYW1EZWMoe1xuICAgICAgICAgICAgICBuYW1lOiAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHtcbiAgICAgICAgICAgICAgICBlc2NhcGVkVGV4dDogYFske3Jlcy5uYW1lfSR7cmVzLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHtyZXMudHlwZX1dYCxcbiAgICAgICAgICAgICAgfSBhcyB0cy5JZGVudGlmaWVyLFxuICAgICAgICAgICAgICB0eXBlOiBtZW1iZXIudHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVBhcmFtRGVjKHtcbiAgICAgICAgICAgICAgbmFtZTogLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgICAgICAgICAgICBtZW1iZXIgYXMgdHMuUHJvcGVydHlTaWduYXR1cmVcbiAgICAgICAgICAgICAgKS5uYW1lIGFzIHRzLklkZW50aWZpZXIsXG4gICAgICAgICAgICAgIHR5cGU6IC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgICAgICAgbWVtYmVyIGFzIHRzLlByb3BlcnR5U2lnbmF0dXJlXG4gICAgICAgICAgICAgICkudHlwZSBhcyB0cy5UeXBlTm9kZSxcbiAgICAgICAgICAgICAgb3B0aW9uYWw6XG4gICAgICAgICAgICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgICAgICAgICBtZW1iZXIgYXMgdHMuUHJvcGVydHlTaWduYXR1cmVcbiAgICAgICAgICAgICAgICApLnF1ZXN0aW9uVG9rZW4gIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVHlwZVJlZmVyZW5jZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwicmVmXCIsXG4gICAgICAgIGlkOiAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgICh0eXBlTm9kZSBhcyB0cy5UeXBlUmVmZXJlbmNlTm9kZSkudHlwZU5hbWUgYXMgdHMuSWRlbnRpZmllclxuICAgICAgICApLmVzY2FwZWRUZXh0LnRvU3RyaW5nKCksXG4gICAgICAgIGFyZ3M6IC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIHR5cGVOb2RlIGFzIHRzLlR5cGVSZWZlcmVuY2VOb2RlXG4gICAgICAgICkudHlwZUFyZ3VtZW50cz8ubWFwKCh0eXBlQXJnKSA9PiByZXNvbHZlVHlwZU5vZGUodHlwZUFyZykpLFxuICAgICAgfTtcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuVW5pb25UeXBlOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdDogXCJ1bmlvblwiLFxuICAgICAgICB0eXBlczogLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgdHlwZU5vZGUgYXMgdHMuVW5pb25UeXBlTm9kZVxuICAgICAgICApLnR5cGVzLm1hcCgodHlwZSkgPT4gcmVzb2x2ZVR5cGVOb2RlKHR5cGUpKSxcbiAgICAgIH07XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkludGVyc2VjdGlvblR5cGU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0OiBcImludGVyc2VjdGlvblwiLFxuICAgICAgICB0eXBlczogLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgdHlwZU5vZGUgYXMgdHMuSW50ZXJzZWN0aW9uVHlwZU5vZGVcbiAgICAgICAgKS50eXBlcy5tYXAoKHR5cGUpID0+IHJlc29sdmVUeXBlTm9kZSh0eXBlKSksXG4gICAgICB9O1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbmRleGVkQWNjZXNzVHlwZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwiaW5kZXhlZC1hY2Nlc3NcIixcbiAgICAgICAgb2JqZWN0OiByZXNvbHZlVHlwZU5vZGUoXG4gICAgICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgICB0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGVcbiAgICAgICAgICApLm9iamVjdFR5cGUsXG4gICAgICAgICksXG4gICAgICAgIGluZGV4OiByZXNvbHZlVHlwZU5vZGUoXG4gICAgICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoXG4gICAgICAgICAgICB0eXBlTm9kZSBhcyB0cy5JbmRleGVkQWNjZXNzVHlwZU5vZGVcbiAgICAgICAgICApLmluZGV4VHlwZSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR1cGxlVHlwZTpcbiAgICAgIGlmICh0cy5pc1R1cGxlVHlwZU5vZGUodHlwZU5vZGUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdDogXCJ0dXBsZS10eXBlXCIsXG4gICAgICAgICAgZWxlbWVudHM6IHR5cGVOb2RlLmVsZW1lbnRzLm1hcCgoZWxlbSkgPT4gcmVzb2x2ZVR5cGVOb2RlKGVsZW0pKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdHMuU3ludGF4S2luZC5QYXJlbnRoZXNpemVkVHlwZTpcbiAgICAgIC8vIOq0hO2YuOuhnCDrrLbsnbgg7YOA7J6FICjsmIg6IChBICYgQilbXSDsl5DshJwgKEEgJiBCKSlcbiAgICAgIC8vIOuCtOu2gCDtg4DsnoXsnYQg7J6s6reA7KCB7Jy866GcIHJlc29sdmVcbiAgICAgIHJldHVybiByZXNvbHZlVHlwZU5vZGUoXG4gICAgICAgIC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gKFxuICAgICAgICAgIHR5cGVOb2RlIGFzIHRzLlBhcmVudGhlc2l6ZWRUeXBlTm9kZVxuICAgICAgICApLnR5cGUsXG4gICAgICApO1xuXG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uVHlwZTpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHQ6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgcGFyYW1ldGVyczpcbiAgICAgICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgICAgICAgIHR5cGVOb2RlIGFzIHRzLkZ1bmN0aW9uVHlwZU5vZGVcbiAgICAgICAgICApLnBhcmFtZXRlcnMubWFwKChwYXJhbSkgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IHBhcmFtLm5hbWUuZ2V0VGV4dCgpLFxuICAgICAgICAgICAgdHlwZTogcGFyYW0udHlwZSA/IHJlc29sdmVUeXBlTm9kZShwYXJhbS50eXBlKSA6IFwidW5rbm93blwiLFxuICAgICAgICAgICAgb3B0aW9uYWw6IHBhcmFtLnF1ZXN0aW9uVG9rZW4gIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlZmF1bHREZWY6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KSksXG4gICAgICAgIHJldHVyblR5cGU6IHJlc29sdmVUeXBlTm9kZShcbiAgICAgICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChcbiAgICAgICAgICAgIHR5cGVOb2RlIGFzIHRzLkZ1bmN0aW9uVHlwZU5vZGVcbiAgICAgICAgICApLnR5cGUsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0eXBlTm9kZSB1bmRlZmluZWRgKTtcbiAgfVxuXG4gIGNvbnNvbGUuZGVidWcodHlwZU5vZGUpO1xuICB0aHJvdyBuZXcgRXJyb3IoYOyVjCDsiJgg7JeG64qUIFN5bnRheEtpbmQgJHt0eXBlTm9kZS5raW5kfWApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlUGFyYW1EZWMoXG4gIHBhcmFtRGVjOiB7XG4gICAgbmFtZTogdHMuQmluZGluZ05hbWU7XG4gICAgdHlwZTogdHMuVHlwZU5vZGU7XG4gICAgb3B0aW9uYWw/OiBib29sZWFuO1xuICAgIGRlZmF1bHREZWY/OiBzdHJpbmc7XG4gIH0sXG4gIGluZGV4OiBudW1iZXIgPSAwLFxuKTogQXBpUGFyYW0ge1xuICBjb25zdCBuYW1lID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhcmFtRGVjLm5hbWUgYXMgdHMuSWRlbnRpZmllcjtcbiAgY29uc3QgdHlwZSA9IHJlc29sdmVUeXBlTm9kZShwYXJhbURlYy50eXBlKTtcblxuICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS5kZWJ1Zyh7IG5hbWUsIHR5cGUsIHBhcmFtRGVjIH0pO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0OiBBcGlQYXJhbSA9IHtcbiAgICBuYW1lOiBuYW1lLmVzY2FwZWRUZXh0ID8gbmFtZS5lc2NhcGVkVGV4dC50b1N0cmluZygpIDogYG5vbmFtZUF0JHtpbmRleH1gLFxuICAgIHR5cGUsXG4gICAgb3B0aW9uYWw6IHBhcmFtRGVjLm9wdGlvbmFsID09PSB0cnVlLFxuICAgIGRlZmF1bHREZWY6IHBhcmFtRGVjPy5kZWZhdWx0RGVmLFxuICB9O1xuXG4gIC8vIOq1rOyhsOu2hO2VtO2VoOuLueydmCDqsr3smrAg7YOA7J6F7J2066aEIOyCrOyaqVxuICBpZiAoXG4gICAgdHMuaXNPYmplY3RCaW5kaW5nUGF0dGVybihuYW1lKSAmJlxuICAgIHRzLmlzVHlwZVJlZmVyZW5jZU5vZGUocGFyYW1EZWMudHlwZSkgJiZcbiAgICB0cy5pc0lkZW50aWZpZXIocGFyYW1EZWMudHlwZS50eXBlTmFtZSlcbiAgKSB7XG4gICAgcmVzdWx0Lm5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKHBhcmFtRGVjLnR5cGUudHlwZU5hbWUudGV4dCwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBwcmludE5vZGUobm9kZTogdHMuTm9kZSB8IHVuZGVmaW5lZCwgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIoeyBuZXdMaW5lOiB0cy5OZXdMaW5lS2luZC5MaW5lRmVlZCB9KTtcbiAgcmV0dXJuIHByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBub2RlLCBzb3VyY2VGaWxlKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFnQ0EsZUFBc0IsaUJBQWlCLFVBQWdEO0NBQ3JGLElBQUksQ0FBQyxTQUFTLFNBQVMsS0FBSyxHQUMxQixNQUFNLElBQUksTUFDUixHQUFHLFNBQVMsOEdBQ2Q7Q0FHRixNQUFNLGFBQWEsR0FBRyxpQkFDcEIsV0FDQyxNQUFNLFNBQVMsUUFBUSxFQUFBLENBQUcsU0FBUyxHQUNwQyxHQUFHLGFBQWEsTUFDbEI7Q0FFQSxNQUFNLFVBQTBCLENBQUM7Q0FDakMsSUFBSSxZQUFvQjtDQUN4QixJQUFJLGFBQXFCO0NBQ3pCLE1BQU0sV0FBVyxTQUFrQjtFQUNqQyxJQUFJLEdBQUcsbUJBQW1CLElBQUksR0FDNUI7T0FBSSxLQUFLLFFBQVEsR0FBRyxhQUFhLEtBQUssSUFBSSxHQUN4QyxZQUFZLEtBQUssS0FBSyxZQUFZLFNBQVMsQ0FBQyxDQUFDLFFBQVEsVUFBVSxFQUFFO0VBQ25FO0VBRUYsSUFBSSxHQUFHLG9CQUFvQixJQUFJLEdBQUc7R0FDaEMsSUFBSSxHQUFHLGFBQWEsS0FBSyxJQUFJLEdBQUc7SUFDOUIsYUFBYSxLQUFLLEtBQUssWUFBWSxTQUFTO0lBQzVDLG1CQUFtQixVQUFVO0dBQy9CO0dBRUEsTUFBTSxrQkFBNEMsS0FBSyxrQkFBa0IsQ0FBQyxFQUFBLENBQUcsS0FDMUUsY0FBYztJQUNiLE1BQU0sS0FBSztJQUVYLE9BQU87S0FDTCxHQUFHO0tBQ0gsSUFBSSxHQUFHLEtBQUssWUFBWSxTQUFTO0tBQ2pDLFlBQVksR0FBRyxhQUFhLGdCQUFnQixHQUFHLFVBQVUsSUFBSTtJQUMvRDtHQUNGLENBQ0Y7R0FDQSxNQUFNLGFBQXlCLEtBQUssV0FBVyxLQUFLLFVBQVUsVUFBVTtJQUN0RSxNQUFNLGFBQWEsVUFBVSxTQUFTLGFBQWEsVUFBVTtJQUk3RCxPQUFPLGdCQUNMO0tBQ0UsTUFBTSxTQUFTO0tBQ2YsTUFBaUUsU0FBUztLQUMxRSxVQUFVLFNBQVMsa0JBQWtCLFVBQWEsU0FBUyxnQkFBZ0I7S0FDM0U7SUFDRixHQUNBLEtBQ0Y7R0FDRixDQUFDO0dBQ0QsSUFBSSxLQUFLLFNBQVMsUUFDaEIsTUFBTSxJQUFJLE1BQU0sc0JBQXNCLFVBQVUsR0FBRyxZQUFZO0dBRWpFLE1BQU0sYUFBYSxnQkFBZ0IsS0FBSyxJQUFJO0dBQzVDLE1BQU0sb0JBQW9CLHNCQUFzQixJQUFJO0dBRXBELFFBQVEsS0FBSztJQUNYO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtHQUNGLENBQUM7RUFDSDtFQUNBLEdBQUcsYUFBYSxNQUFNLE9BQU87Q0FDL0I7Q0FDQSxRQUFRLFVBQVU7Q0FFbEIsSUFBSSxRQUFRLFdBQVcsR0FDckIsT0FBTyxDQUFDO0NBSVYsTUFBTSxtQkFBbUIsZUFBZSxRQUFRLFFBQVE7RUFDdEQsT0FBTyxRQUFRLE1BQ1osV0FBVyxPQUFPLGNBQWMsSUFBSSxhQUFhLE9BQU8sZUFBZSxJQUFJLFVBQzlFO0NBQ0YsQ0FBQztDQUNELElBQUksaUJBQWlCLFdBQVcsR0FLOUIsT0FBTyxDQUFDO0NBMEJWLE9BdEJxQixpQkFBaUIsS0FBSyxRQUFRO0VBQ2pELE1BQU0sY0FBYyxRQUFRLE1BQ3pCLFdBQVcsT0FBTyxjQUFjLElBQUksYUFBYSxPQUFPLGVBQWUsSUFBSSxVQUM5RTtFQUNBLElBQUksQ0FBQyxhQUNILE1BQU0sSUFBSSxNQUFNLE9BQU8sSUFBSSxVQUFVLEdBQUcsSUFBSSxXQUFXLGdCQUFnQixVQUFVO0VBRW5GLE1BQU0sbUJBQW1CLElBQUksbUJBQ3pCO0dBQ0UsR0FBRyxJQUFJO0dBQ1AsR0FBRyxZQUFZO0VBQ2pCLElBQ0E7RUFFSixPQUFPO0dBQ0wsR0FBRztHQUNIO0dBQ0EsZ0JBQWdCLGFBQWE7R0FDN0IsWUFBWSxhQUFhO0dBQ3pCLFlBQVksYUFBYTtFQUMzQjtDQUNGLENBQ087QUFDVDtBQUVBLFNBQVMsc0JBQXNCLE1BQStDO0NBQzVFLE1BQU0saUJBQWlCLGlDQUFpQyxNQUFNLFdBQVc7Q0FDekUsSUFBSSxDQUFDLGdCQUNILE9BQU8sQ0FBQztDQUdWLE1BQU0sT0FBMEIsQ0FBQztDQUNqQyxLQUFLLE1BQU0sWUFBWSxlQUFlLFlBQVk7RUFDaEQsSUFBSSxDQUFDLEdBQUcscUJBQXFCLFFBQVEsR0FDbkM7RUFHRixNQUFNLGVBQWUsb0JBQW9CLFNBQVMsSUFBSTtFQUN0RCxJQUFJLGlCQUFpQixlQUFlLGlCQUFpQixZQUNuRDtFQUdGLE1BQU0sVUFBVSx3QkFBd0IsU0FBUyxXQUFXO0VBQzVELElBQUksQ0FBQyxTQUNIO0VBR0YsSUFBSSxpQkFBaUIsYUFDbkIsS0FBSyxtQkFBbUI7T0FFeEIsS0FBSyxrQkFBa0I7Q0FFM0I7Q0FFQSxPQUFPO0FBQ1Q7QUFFQSxTQUFTLGlDQUNQLE1BQ0EsZUFDd0M7Q0FDeEMsS0FBSyxNQUFNLFlBQVksS0FBSyxhQUFhLENBQUMsR0FBRztFQUMzQyxJQUFJLENBQUMsR0FBRyxZQUFZLFFBQVEsR0FDMUI7RUFHRixNQUFNLGFBQWEsU0FBUztFQUM1QixJQUFJLENBQUMsR0FBRyxpQkFBaUIsVUFBVSxHQUNqQztFQUdGLElBQUksQ0FBQyxHQUFHLGFBQWEsV0FBVyxVQUFVLEtBQUssV0FBVyxXQUFXLFNBQVMsZUFDNUU7RUFHRixNQUFNLENBQUMsWUFBWSxXQUFXO0VBQzlCLElBQUksWUFBWSxHQUFHLDBCQUEwQixRQUFRLEdBQ25ELE9BQU87Q0FFWDtBQUdGO0FBRUEsU0FBUyxvQkFBb0IsTUFBMkM7Q0FDdEUsSUFBSSxHQUFHLGFBQWEsSUFBSSxLQUFLLEdBQUcsZ0JBQWdCLElBQUksS0FBSyxHQUFHLGlCQUFpQixJQUFJLEdBQy9FLE9BQU8sS0FBSztBQUloQjtBQUVBLFNBQVMsd0JBQXdCLFlBQXlEO0NBQ3hGLElBQUksR0FBRyxhQUFhLFVBQVUsR0FDNUIsT0FBTztFQUNMLEdBQUc7RUFDSCxJQUFJLFdBQVc7Q0FDakI7Q0FHRixJQUNFLEdBQUcsZUFBZSxVQUFVLEtBQzVCLEdBQUcsMEJBQTBCLFVBQVUsS0FDdkMsR0FBRyxvQkFBb0IsVUFBVSxLQUNqQyxHQUFHLDBCQUEwQixVQUFVLEdBRXZDLE9BQU8sd0JBQXdCLFdBQVcsVUFBVTtBQUl4RDtBQUVBLFNBQVMsZ0JBQWdCLFVBQXFDO0NBQzVELFFBQVEsVUFBVSxNQUFsQjtFQUNFLEtBQUssR0FBRyxXQUFXLFlBQ2pCLE9BQU87RUFDVCxLQUFLLEdBQUcsV0FBVyxnQkFDakIsT0FBTztFQUNULEtBQUssR0FBRyxXQUFXLGVBQ2pCLE9BQU87RUFDVCxLQUFLLEdBQUcsV0FBVyxlQUNqQixPQUFPO0VBQ1QsS0FBSyxHQUFHLFdBQVcsZ0JBQ2pCLE9BQU87RUFDVCxLQUFLLEdBQUcsV0FBVyxrQkFDakIsT0FBTztFQUNULEtBQUssR0FBRyxXQUFXLGFBQ2pCLE9BQU87RUFDVCxLQUFLLEdBQUcsV0FBVyxhQUNqQixPQUFPO0VBQ1QsS0FBSyxHQUFHLFdBQVcsYUFBYTtHQUM5QixNQUFNLFVBRUYsU0FDQTtHQUNKLElBQUksR0FBRyxnQkFBZ0IsT0FBTyxHQUM1QixPQUFPO0lBQ0wsR0FBRztJQUNILE9BQU8sUUFBUTtHQUNqQjtRQUNLLElBQUksR0FBRyxpQkFBaUIsT0FBTyxHQUNwQyxPQUFPO0lBQ0wsR0FBRztJQUNILE9BQU8sT0FBTyxRQUFRLElBQUk7R0FDNUI7UUFDSztJQUNMLElBQUksUUFBUSxTQUFTLEdBQUcsV0FBVyxhQUNqQyxPQUFPO1NBQ0YsSUFBSSxRQUFRLFNBQVMsR0FBRyxXQUFXLGtCQUN4QyxPQUFPO1NBQ0YsSUFBSSxRQUFRLFNBQVMsR0FBRyxXQUFXLGFBQ3hDLE9BQU87U0FDRixJQUFJLFFBQVEsU0FBUyxHQUFHLFdBQVcsY0FDeEMsT0FBTztJQUVULE1BQU0sSUFBSSxNQUFNLFlBQVk7R0FDOUI7RUFDRjtFQUNBLEtBQUssR0FBRyxXQUFXLFdBR2pCLE9BQU87R0FDTCxHQUFHO0dBQ0gsY0FBYyxnQkFBZ0IsU0FBUSxXQUFXO0VBQ25EO0VBRUYsS0FBSyxHQUFHLFdBQVcsYUFHakIsT0FBTztHQUNMLEdBQUc7R0FDSCxPQUFPLFNBQVksUUFBUSxLQUFLLFdBQVc7SUFDekMsSUFBSSxHQUFHLDRCQUE0QixNQUFNLEdBQUc7S0FDMUMsT0FBTyxPQUFPLFdBQVcsRUFBRTtLQUMzQixNQUFNLE1BQU0sZ0JBQWdCO01BQzFCLE1BQWlFLE9BQzlELFdBQVcsRUFBRSxDQUFDO01BQ2pCLE1BQWlFLE9BQzlELFdBQVcsRUFBRSxDQUFDO0tBQ25CLENBQUM7S0FFRCxPQUFPLGdCQUFnQjtNQUNyQixNQUFpRSxFQUMvRCxhQUFhLElBQUksSUFBSSxPQUFPLElBQUksV0FBVyxNQUFNLEdBQUcsSUFBSSxJQUFJLEtBQUssR0FDbkU7TUFDQSxNQUFNLE9BQU87S0FDZixDQUFDO0lBQ0gsT0FDRSxPQUFPLGdCQUFnQjtLQUNyQixNQUNFLE9BQ0E7S0FDRixNQUNFLE9BQ0E7S0FDRixVQUVJLE9BQ0Esa0JBQWtCO0lBQ3hCLENBQUM7R0FFTCxDQUFDO0VBQ0g7RUFFRixLQUFLLEdBQUcsV0FBVyxlQUNqQixPQUFPO0dBQ0wsR0FBRztHQUNILElBQ0csU0FBa0MsU0FDbkMsWUFBWSxTQUFTO0dBQ3ZCLE1BQ0UsU0FDQSxlQUFlLEtBQUssWUFBWSxnQkFBZ0IsT0FBTyxDQUFDO0VBQzVEO0VBQ0YsS0FBSyxHQUFHLFdBQVcsV0FDakIsT0FBTztHQUNMLEdBQUc7R0FDSCxPQUNFLFNBQ0EsTUFBTSxLQUFLLFNBQVMsZ0JBQWdCLElBQUksQ0FBQztFQUM3QztFQUNGLEtBQUssR0FBRyxXQUFXLGtCQUNqQixPQUFPO0dBQ0wsR0FBRztHQUNILE9BQ0UsU0FDQSxNQUFNLEtBQUssU0FBUyxnQkFBZ0IsSUFBSSxDQUFDO0VBQzdDO0VBQ0YsS0FBSyxHQUFHLFdBQVcsbUJBQ2pCLE9BQU87R0FDTCxHQUFHO0dBQ0gsUUFBUSxnQkFFSixTQUNBLFVBQ0o7R0FDQSxPQUFPLGdCQUVILFNBQ0EsU0FDSjtFQUNGO0VBQ0YsS0FBSyxHQUFHLFdBQVc7R0FDakIsSUFBSSxHQUFHLGdCQUFnQixRQUFRLEdBQzdCLE9BQU87SUFDTCxHQUFHO0lBQ0gsVUFBVSxTQUFTLFNBQVMsS0FBSyxTQUFTLGdCQUFnQixJQUFJLENBQUM7R0FDakU7R0FFRjtFQUNGLEtBQUssR0FBRyxXQUFXLG1CQUdqQixPQUFPLGdCQUVILFNBQ0EsSUFDSjtFQUVGLEtBQUssR0FBRyxXQUFXLGNBQ2pCLE9BQU87R0FDTCxHQUFHO0dBQ0gsWUFFSSxTQUNBLFdBQVcsS0FBSyxXQUFXO0lBQzNCLE1BQU0sTUFBTSxLQUFLLFFBQVE7SUFDekIsTUFBTSxNQUFNLE9BQU8sZ0JBQWdCLE1BQU0sSUFBSSxJQUFJO0lBQ2pELFVBQVUsTUFBTSxrQkFBa0I7SUFDbEMsWUFBWTtHQUNkLEVBQUU7R0FDSixZQUFZLGdCQUVSLFNBQ0EsSUFDSjtFQUNGO0VBQ0YsS0FBSyxRQUNILE1BQU0sSUFBSSxNQUFNLG9CQUFvQjtDQUN4QztDQUVBLFFBQVEsTUFBTSxRQUFRO0NBQ3RCLE1BQU0sSUFBSSxNQUFNLHFCQUFxQixTQUFTLE1BQU07QUFDdEQ7QUFFQSxTQUFTLGdCQUNQLFVBTUEsUUFBZ0IsR0FDTjtDQUNWLE1BQU0sT0FDdUQsU0FBUztDQUN0RSxNQUFNLE9BQU8sZ0JBQWdCLFNBQVMsSUFBSTtDQUUxQyxJQUFJLFNBQVMsUUFDWCxRQUFRLE1BQU07RUFBRTtFQUFNO0VBQU07Q0FBUyxDQUFDO0NBR3hDLE1BQU0sU0FBbUI7RUFDdkIsTUFBTSxLQUFLLGNBQWMsS0FBSyxZQUFZLFNBQVMsSUFBSSxXQUFXO0VBQ2xFO0VBQ0EsVUFBVSxTQUFTLGFBQWE7RUFDaEMsWUFBWSxVQUFVO0NBQ3hCO0NBR0EsSUFDRSxHQUFHLHVCQUF1QixJQUFJLEtBQzlCLEdBQUcsb0JBQW9CLFNBQVMsSUFBSSxLQUNwQyxHQUFHLGFBQWEsU0FBUyxLQUFLLFFBQVEsR0FFdEMsT0FBTyxPQUFPLFdBQVcsU0FBUyxTQUFTLEtBQUssU0FBUyxNQUFNLElBQUk7Q0FHckUsT0FBTztBQUNUO0FBRUEsU0FBUyxVQUFVLE1BQTJCLFlBQStDO0NBQzNGLElBQUksU0FBUyxRQUNYO0NBSUYsT0FEZ0IsR0FBRyxjQUFjLEVBQUUsU0FBUyxHQUFHLFlBQVksU0FBUyxDQUM3RCxDQUFBLENBQVEsVUFBVSxHQUFHLFNBQVMsYUFBYSxNQUFNLFVBQVU7QUFDcEU7O2lCQTlia0Q7Z0JBR0cifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../../src/syncer/checksum.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,qBAAqB,CAAC;AAS9E;;;GAGG;AACH,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAU9E;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAUpD"}
1
+ {"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../../src/syncer/checksum.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,qBAAqB,CAAC;AAU9E;;;GAGG;AACH,wBAAsB,8BAA8B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAU9E;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAUpD"}
@@ -1,13 +1,12 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { differenceWith, init_utils } from "../utils/utils.js";
3
3
  import { globAsync, init_async_utils } from "../utils/async-utils.js";
4
- import { exists, init_fs_utils } from "../utils/fs-utils.js";
5
4
  import { Sonamu, init_sonamu } from "../api/sonamu.js";
6
5
  import { GLOB_EXCLUDE, getChecksumPatternGroupInAbsolutePath, init_file_patterns } from "./file-patterns.js";
6
+ import { init_filesystem_dependencies, syncerFileExists, syncerFilesystem } from "./filesystem-dependencies.js";
7
7
  import { isEqual } from "radashi";
8
8
  import { createReadStream } from "fs";
9
9
  import path from "path";
10
- import { readFile, writeFile } from "fs/promises";
11
10
  import crypto from "crypto";
12
11
  import equal from "fast-deep-equal";
13
12
  //#region src/syncer/checksum.ts
@@ -44,9 +43,9 @@ async function getCurrentChecksums() {
44
43
  }
45
44
  async function getPreviousChecksums() {
46
45
  const checksumFilePath = getChecksumFilePath();
47
- if (!await exists(checksumFilePath)) return [];
46
+ if (!await syncerFileExists(checksumFilePath)) return [];
48
47
  try {
49
- return JSON.parse(await readFile(checksumFilePath, "utf-8")).map((r) => ({
48
+ return JSON.parse(await syncerFilesystem.readFile(checksumFilePath, "utf-8")).map((r) => ({
50
49
  path: path.join(Sonamu.appRootPath, r.path),
51
50
  checksum: r.checksum
52
51
  }));
@@ -63,8 +62,8 @@ async function saveChecksums(checksums) {
63
62
  const serialized = checksums.map((r) => ({
64
63
  path: path.relative(Sonamu.appRootPath, r.path),
65
64
  checksum: r.checksum
66
- })).sort((a, b) => a.path.localeCompare(b.path));
67
- await writeFile(checksumFilePath, JSON.stringify(serialized, null, 2), "utf-8");
65
+ })).toSorted((a, b) => a.path.localeCompare(b.path));
66
+ await syncerFilesystem.writeFile(checksumFilePath, JSON.stringify(serialized, null, 2), "utf-8");
68
67
  }
69
68
  async function getChecksumOfFile(filePath) {
70
69
  const hash = crypto.createHash("sha1");
@@ -75,12 +74,12 @@ async function getChecksumOfFile(filePath) {
75
74
  var init_checksum = __esmMin((() => {
76
75
  init_sonamu();
77
76
  init_async_utils();
78
- init_fs_utils();
79
77
  init_utils();
80
78
  init_file_patterns();
79
+ init_filesystem_dependencies();
81
80
  }));
82
81
  //#endregion
83
82
  init_checksum();
84
83
  export { findChangedFilesUsingChecksums, init_checksum, renewChecksums };
85
84
 
86
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzdW0uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9jaGVja3N1bS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIHR5cGUgUGF0aExpa2UgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCBlcXVhbCBmcm9tIFwiZmFzdC1kZWVwLWVxdWFsXCI7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcInJhZGFzaGlcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IGdsb2JBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxzL2ZzLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCwgdHlwZSBBcHBSZWxhdGl2ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgZGlmZmVyZW5jZVdpdGggfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgsIEdMT0JfRVhDTFVERSB9IGZyb20gXCIuL2ZpbGUtcGF0dGVybnNcIjtcblxudHlwZSBQYXRoQW5kQ2hlY2tzdW0gPSB7XG4gIHBhdGg6IEFic29sdXRlUGF0aDtcbiAgY2hlY2tzdW06IHN0cmluZztcbn07XG5cbi8qKlxuICog7LK07YGs7ISsIO2MjOydvOyXkCDsoIDsnqXrkJwg64K07Jqp6rO8IO2YhOyerCDsi6TsoJwg7YyM7J287J2YIOyytO2BrOyErOydhCDruYTqtZDtlZjsl6wg67OA6rK965CcIO2MjOydvOydhCDssL7sirXri4jri6QuXG4gKiBAcmV0dXJucyDrs4Dqsr3rkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuIO2UhOuhnOygne2KuCDro6jtirjrtoDthLAg7Iqs656Y7Iuc66GcIOyLnOyeke2VqeuLiOuLpC4g7JiI7IucOiBcIi9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRDaGFuZ2VkRmlsZXNVc2luZ0NoZWNrc3VtcygpOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIGNvbnN0IGNhbGN1bGF0ZWRDaGVja3N1bXMgPSBhd2FpdCBnZXRDdXJyZW50Q2hlY2tzdW1zKCk7XG4gIGNvbnN0IHNhdmVkQ2hlY2tzdW1zID0gYXdhaXQgZ2V0UHJldmlvdXNDaGVja3N1bXMoKTtcblxuICBjb25zdCBpc1NhbWUgPSBlcXVhbChjYWxjdWxhdGVkQ2hlY2tzdW1zLCBzYXZlZENoZWNrc3Vtcyk7XG4gIGlmIChpc1NhbWUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gZGlmZmVyZW5jZVdpdGgoY2FsY3VsYXRlZENoZWNrc3Vtcywgc2F2ZWRDaGVja3N1bXMsIGlzRXF1YWwpLm1hcCgocikgPT4gci5wYXRoKTtcbn1cblxuLyoqXG4gKiDssrTtgazshKzsnYQg6rCx7Iug7ZWp64uI64ukLlxuICog7ZiE7J6sIO2MjOydvOuTpOydmCDssrTtgazshKzsnYQg6rOE7IKw7ZW07IScIOq1rO2VnCDri6TsnYwsIOyytO2BrOyErCDtjIzsnbzsl5Ag7KCA7J6l65CcIOuCtOyaqeqzvCDri6TrpbTrqbQg7LK07YGs7ISsIO2MjOydvOydhCDqsLHsi6Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5ld0NoZWNrc3VtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2FsY3VsYXRlZENoZWNrc3VtcyA9IGF3YWl0IGdldEN1cnJlbnRDaGVja3N1bXMoKTtcbiAgY29uc3Qgc2F2ZWRDaGVja3N1bXMgPSBhd2FpdCBnZXRQcmV2aW91c0NoZWNrc3VtcygpO1xuXG4gIGNvbnN0IGlzU2FtZSA9IGVxdWFsKGNhbGN1bGF0ZWRDaGVja3N1bXMsIHNhdmVkQ2hlY2tzdW1zKTtcbiAgaWYgKGlzU2FtZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHNhdmVDaGVja3N1bXMoY2FsY3VsYXRlZENoZWNrc3Vtcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRDaGVja3N1bXMoKTogUHJvbWlzZTxQYXRoQW5kQ2hlY2tzdW1bXT4ge1xuICBjb25zdCBhbGxQYXRocyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgoKSkubWFwKChbX2ZpbGVUeXBlLCBwYXR0ZXJuXSkgPT4ge1xuICAgICAgICByZXR1cm4gZ2xvYkFzeW5jKHBhdHRlcm4sIHsgZXhjbHVkZTogR0xPQl9FWENMVURFIH0pO1xuICAgICAgfSksXG4gICAgKVxuICApLmZsYXQoKTtcblxuICAvLyDrj5nsnbwg7YyM7J287J20IOyXrOufrCDtjKjthLTsl5Ag66ek7LmY65CgIOyImCDsnojsnLzrr4DroZwo7JiIOiBzZC5nZW5lcmF0ZWQudHPripQgZ2VuZXJhdGVk7JmAIHNkR2VuZXJhdGVk7JeQIOuqqOuRkCDrp6TsuZgpXG4gIC8vIOykkeuztSDsoJzqsbAg7ZuEIOyViOyglSDsoJXroKwuXG4gIGNvbnN0IGZpbGVQYXRocyA9IEFycmF5LmZyb20obmV3IFNldChhbGxQYXRocykpLnRvU29ydGVkKCkgYXMgQWJzb2x1dGVQYXRoW107XG5cbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGZpbGVQYXRocy5tYXAoYXN5bmMgKGZpbGVQYXRoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgY2hlY2tzdW06IGF3YWl0IGdldENoZWNrc3VtT2ZGaWxlKGZpbGVQYXRoKSxcbiAgICAgIH07XG4gICAgfSksXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFByZXZpb3VzQ2hlY2tzdW1zKCk6IFByb21pc2U8UGF0aEFuZENoZWNrc3VtW10+IHtcbiAgY29uc3QgY2hlY2tzdW1GaWxlUGF0aCA9IGdldENoZWNrc3VtRmlsZVBhdGgoKTtcbiAgaWYgKCEoYXdhaXQgZXhpc3RzKGNoZWNrc3VtRmlsZVBhdGgpKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcHJldmlvdXNDaGVja3N1bXMgPSBKU09OLnBhcnNlKGF3YWl0IHJlYWRGaWxlKGNoZWNrc3VtRmlsZVBhdGgsIFwidXRmLThcIikpLm1hcChcbiAgICAgIChyOiB7IHBhdGg6IEFwcFJlbGF0aXZlUGF0aDsgY2hlY2tzdW06IHN0cmluZyB9KSA9PiAoe1xuICAgICAgICBwYXRoOiBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCByLnBhdGgpLCAvLyDssrTtgazshKwg7YyM7J287JeQ7IScIOydveydhCDrlYw6IGFwcFJvb3Qg7IOB64yAIOqyveuhnCDihpIg7KCI64yAIOqyveuhnFxuICAgICAgICBjaGVja3N1bTogci5jaGVja3N1bSxcbiAgICAgIH0pLFxuICAgICkgYXMgUGF0aEFuZENoZWNrc3VtW107XG4gICAgcmV0dXJuIHByZXZpb3VzQ2hlY2tzdW1zO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8g7LK07YGs7ISsIO2MjOydvOydtCDshpDsg4HrkJwg6rK97JqwIOu5iCDrsLDsl7Qg67CY7ZmYICjsoITssrQg7J6s64+Z6riw7ZmUIOycoOuPhClcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBg7LK07YGs7ISsIO2MjOydvCgke2NoZWNrc3VtRmlsZVBhdGh9KeydhCDtjIzsi7HtlZjripQg642wIOyLpO2MqO2WiOyKteuLiOuLpC4g7KCE7LK0IOyerOuPmeq4sO2ZlOulvCDsp4Ttlontlanri4jri6QuYCxcbiAgICAgIGUsXG4gICAgKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q2hlY2tzdW1GaWxlUGF0aCgpOiBBYnNvbHV0ZVBhdGgge1xuICByZXR1cm4gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzb25hbXUubG9ja1wiKSBhcyBBYnNvbHV0ZVBhdGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVDaGVja3N1bXMoY2hlY2tzdW1zOiBQYXRoQW5kQ2hlY2tzdW1bXSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjaGVja3N1bUZpbGVQYXRoID0gZ2V0Q2hlY2tzdW1GaWxlUGF0aCgpO1xuICAvLyBhcHBSb290IOyDgeuMgCDqsr3roZzroZwg7KeB66Cs7ZmUICsg7JWM7YyM67KzIOyViOyglSDsoJXroKwgKFBSIGRpZmYg6rmo64GX7ZWY6rKMIOycoOyngClcbiAgY29uc3Qgc2VyaWFsaXplZCA9IGNoZWNrc3Vtc1xuICAgIC5tYXAoKHIpID0+ICh7XG4gICAgICBwYXRoOiBwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcHBSb290UGF0aCwgci5wYXRoKSwgLy8g7LK07YGs7ISsIO2MjOydvOyXkCDsoIDsnqXtlaAg65WMOiDsoIjrjIAg6rK966GcIOKGkiBhcHBSb290IOyDgeuMgCDqsr3roZxcbiAgICAgIGNoZWNrc3VtOiByLmNoZWNrc3VtLFxuICAgIH0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLnBhdGgubG9jYWxlQ29tcGFyZShiLnBhdGgpKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGNoZWNrc3VtRmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWQsIG51bGwsIDIpLCBcInV0Zi04XCIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRDaGVja3N1bU9mRmlsZShmaWxlUGF0aDogUGF0aExpa2UpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGExXCIpO1xuICBjb25zdCBpbnB1dCA9IGNyZWF0ZVJlYWRTdHJlYW0oZmlsZVBhdGgpO1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGlucHV0KSB7XG4gICAgaGFzaC51cGRhdGUoY2h1bmspO1xuICB9XG4gIHJldHVybiBoYXNoLmRpZ2VzdChcImhleFwiKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3QkEsZUFBc0IsaUNBQTBEO0NBQzlFLE1BQU0sc0JBQXNCLE1BQU0sb0JBQW9CO0NBQ3RELE1BQU0saUJBQWlCLE1BQU0scUJBQXFCO0NBR2xELElBRGUsTUFBTSxxQkFBcUIsY0FDdEMsR0FDRixPQUFPLENBQUM7Q0FHVixPQUFPLGVBQWUscUJBQXFCLGdCQUFnQixPQUFPLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRSxJQUFJO0FBQ3ZGOzs7OztBQU1BLGVBQXNCLGlCQUFnQztDQUNwRCxNQUFNLHNCQUFzQixNQUFNLG9CQUFvQjtDQUl0RCxJQURlLE1BQU0scUJBQXFCLE1BRmIscUJBQXFCLENBRzlDLEdBQ0Y7Q0FHRixNQUFNLGNBQWMsbUJBQW1CO0FBQ3pDO0FBRUEsZUFBZSxzQkFBa0Q7Q0FDL0QsTUFBTSxZQUNKLE1BQU0sUUFBUSxJQUNaLE9BQU8sUUFBUSxzQ0FBc0MsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsYUFBYTtFQUNwRixPQUFPLFVBQVUsU0FBUyxFQUFFLFNBQVMsYUFBYSxDQUFDO0NBQ3JELENBQUMsQ0FDSCxFQUFBLENBQ0EsS0FBSztDQUlQLE1BQU0sWUFBWSxNQUFNLEtBQUssSUFBSSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztDQUV6RCxPQUFPLE1BQU0sUUFBUSxJQUNuQixVQUFVLElBQUksT0FBTyxhQUFhO0VBQ2hDLE9BQU87R0FDTCxNQUFNO0dBQ04sVUFBVSxNQUFNLGtCQUFrQixRQUFRO0VBQzVDO0NBQ0YsQ0FBQyxDQUNIO0FBQ0Y7QUFFQSxlQUFlLHVCQUFtRDtDQUNoRSxNQUFNLG1CQUFtQixvQkFBb0I7Q0FDN0MsSUFBSSxDQUFFLE1BQU0sT0FBTyxnQkFBZ0IsR0FDakMsT0FBTyxDQUFDO0NBR1YsSUFBSTtFQU9GLE9BTjBCLEtBQUssTUFBTSxNQUFNLFNBQVMsa0JBQWtCLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FDN0UsT0FBb0Q7R0FDbkQsTUFBTSxLQUFLLEtBQUssT0FBTyxhQUFhLEVBQUUsSUFBSTtHQUMxQyxVQUFVLEVBQUU7RUFDZCxFQUVLO0NBQ1QsU0FBUyxHQUFHO0VBRVYsUUFBUSxLQUNOLFVBQVUsaUJBQWlCLG9DQUMzQixDQUNGO0VBQ0EsT0FBTyxDQUFDO0NBQ1Y7QUFDRjtBQUVBLFNBQVMsc0JBQW9DO0NBQzNDLE9BQU8sS0FBSyxLQUFLLE9BQU8sYUFBYSxhQUFhO0FBQ3BEO0FBRUEsZUFBZSxjQUFjLFdBQTZDO0NBQ3hFLE1BQU0sbUJBQW1CLG9CQUFvQjtDQUU3QyxNQUFNLGFBQWEsVUFDaEIsS0FBSyxPQUFPO0VBQ1gsTUFBTSxLQUFLLFNBQVMsT0FBTyxhQUFhLEVBQUUsSUFBSTtFQUM5QyxVQUFVLEVBQUU7Q0FDZCxFQUFFLENBQUMsQ0FDRixNQUFNLEdBQUcsTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFFLElBQUksQ0FBQztDQUM5QyxNQUFNLFVBQVUsa0JBQWtCLEtBQUssVUFBVSxZQUFZLE1BQU0sQ0FBQyxHQUFHLE9BQU87QUFDaEY7QUFFQSxlQUFlLGtCQUFrQixVQUFxQztDQUNwRSxNQUFNLE9BQU8sT0FBTyxXQUFXLE1BQU07Q0FDckMsTUFBTSxRQUFRLGlCQUFpQixRQUFRO0NBQ3ZDLFdBQVcsTUFBTSxTQUFTLE9BQ3hCLEtBQUssT0FBTyxLQUFLO0NBRW5CLE9BQU8sS0FBSyxPQUFPLEtBQUs7QUFDMUI7O2FBbEhzQztrQkFDVTtlQUNOO1lBRUs7b0JBQ3NDIn0=
85
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzdW0uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9jaGVja3N1bS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIHR5cGUgUGF0aExpa2UgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCBlcXVhbCBmcm9tIFwiZmFzdC1kZWVwLWVxdWFsXCI7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcInJhZGFzaGlcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IGdsb2JBc3luYyB9IGZyb20gXCIuLi91dGlscy9hc3luYy11dGlsc1wiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGgsIHR5cGUgQXBwUmVsYXRpdmVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGRpZmZlcmVuY2VXaXRoIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cEluQWJzb2x1dGVQYXRoLCBHTE9CX0VYQ0xVREUgfSBmcm9tIFwiLi9maWxlLXBhdHRlcm5zXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxudHlwZSBQYXRoQW5kQ2hlY2tzdW0gPSB7XG4gIHBhdGg6IEFic29sdXRlUGF0aDtcbiAgY2hlY2tzdW06IHN0cmluZztcbn07XG5cbi8qKlxuICog7LK07YGs7ISsIO2MjOydvOyXkCDsoIDsnqXrkJwg64K07Jqp6rO8IO2YhOyerCDsi6TsoJwg7YyM7J287J2YIOyytO2BrOyErOydhCDruYTqtZDtlZjsl6wg67OA6rK965CcIO2MjOydvOydhCDssL7sirXri4jri6QuXG4gKiBAcmV0dXJucyDrs4Dqsr3rkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuIO2UhOuhnOygne2KuCDro6jtirjrtoDthLAg7Iqs656Y7Iuc66GcIOyLnOyeke2VqeuLiOuLpC4g7JiI7IucOiBcIi9zcmMvYXBwbGljYXRpb24vdXNlci91c2VyLm1vZGVsLnRzXCJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRDaGFuZ2VkRmlsZXNVc2luZ0NoZWNrc3VtcygpOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIGNvbnN0IGNhbGN1bGF0ZWRDaGVja3N1bXMgPSBhd2FpdCBnZXRDdXJyZW50Q2hlY2tzdW1zKCk7XG4gIGNvbnN0IHNhdmVkQ2hlY2tzdW1zID0gYXdhaXQgZ2V0UHJldmlvdXNDaGVja3N1bXMoKTtcblxuICBjb25zdCBpc1NhbWUgPSBlcXVhbChjYWxjdWxhdGVkQ2hlY2tzdW1zLCBzYXZlZENoZWNrc3Vtcyk7XG4gIGlmIChpc1NhbWUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gZGlmZmVyZW5jZVdpdGgoY2FsY3VsYXRlZENoZWNrc3Vtcywgc2F2ZWRDaGVja3N1bXMsIGlzRXF1YWwpLm1hcCgocikgPT4gci5wYXRoKTtcbn1cblxuLyoqXG4gKiDssrTtgazshKzsnYQg6rCx7Iug7ZWp64uI64ukLlxuICog7ZiE7J6sIO2MjOydvOuTpOydmCDssrTtgazshKzsnYQg6rOE7IKw7ZW07IScIOq1rO2VnCDri6TsnYwsIOyytO2BrOyErCDtjIzsnbzsl5Ag7KCA7J6l65CcIOuCtOyaqeqzvCDri6TrpbTrqbQg7LK07YGs7ISsIO2MjOydvOydhCDqsLHsi6Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5ld0NoZWNrc3VtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2FsY3VsYXRlZENoZWNrc3VtcyA9IGF3YWl0IGdldEN1cnJlbnRDaGVja3N1bXMoKTtcbiAgY29uc3Qgc2F2ZWRDaGVja3N1bXMgPSBhd2FpdCBnZXRQcmV2aW91c0NoZWNrc3VtcygpO1xuXG4gIGNvbnN0IGlzU2FtZSA9IGVxdWFsKGNhbGN1bGF0ZWRDaGVja3N1bXMsIHNhdmVkQ2hlY2tzdW1zKTtcbiAgaWYgKGlzU2FtZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHNhdmVDaGVja3N1bXMoY2FsY3VsYXRlZENoZWNrc3Vtcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEN1cnJlbnRDaGVja3N1bXMoKTogUHJvbWlzZTxQYXRoQW5kQ2hlY2tzdW1bXT4ge1xuICBjb25zdCBhbGxQYXRocyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgoKSkubWFwKChbX2ZpbGVUeXBlLCBwYXR0ZXJuXSkgPT4ge1xuICAgICAgICByZXR1cm4gZ2xvYkFzeW5jKHBhdHRlcm4sIHsgZXhjbHVkZTogR0xPQl9FWENMVURFIH0pO1xuICAgICAgfSksXG4gICAgKVxuICApLmZsYXQoKTtcblxuICAvLyDrj5nsnbwg7YyM7J287J20IOyXrOufrCDtjKjthLTsl5Ag66ek7LmY65CgIOyImCDsnojsnLzrr4DroZwo7JiIOiBzZC5nZW5lcmF0ZWQudHPripQgZ2VuZXJhdGVk7JmAIHNkR2VuZXJhdGVk7JeQIOuqqOuRkCDrp6TsuZgpXG4gIC8vIOykkeuztSDsoJzqsbAg7ZuEIOyViOyglSDsoJXroKwuXG4gIGNvbnN0IGZpbGVQYXRocyA9XG4gICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBBcnJheS5mcm9tKFxuICAgICAgbmV3IFNldChhbGxQYXRocyksXG4gICAgKS50b1NvcnRlZCgpIGFzIEFic29sdXRlUGF0aFtdO1xuXG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBmaWxlUGF0aHMubWFwKGFzeW5jIChmaWxlUGF0aCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICAgIGNoZWNrc3VtOiBhd2FpdCBnZXRDaGVja3N1bU9mRmlsZShmaWxlUGF0aCksXG4gICAgICB9O1xuICAgIH0pLFxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQcmV2aW91c0NoZWNrc3VtcygpOiBQcm9taXNlPFBhdGhBbmRDaGVja3N1bVtdPiB7XG4gIGNvbnN0IGNoZWNrc3VtRmlsZVBhdGggPSBnZXRDaGVja3N1bUZpbGVQYXRoKCk7XG4gIGlmICghKGF3YWl0IHN5bmNlckZpbGVFeGlzdHMoY2hlY2tzdW1GaWxlUGF0aCkpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwcmV2aW91c0NoZWNrc3VtcyA9XG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIEpTT04ucGFyc2UoXG4gICAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ucmVhZEZpbGUoY2hlY2tzdW1GaWxlUGF0aCwgXCJ1dGYtOFwiKSxcbiAgICAgICkubWFwKChyOiB7IHBhdGg6IEFwcFJlbGF0aXZlUGF0aDsgY2hlY2tzdW06IHN0cmluZyB9KSA9PiAoe1xuICAgICAgICBwYXRoOiBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCByLnBhdGgpLCAvLyDssrTtgazshKwg7YyM7J287JeQ7IScIOydveydhCDrlYw6IGFwcFJvb3Qg7IOB64yAIOqyveuhnCDihpIg7KCI64yAIOqyveuhnFxuICAgICAgICBjaGVja3N1bTogci5jaGVja3N1bSxcbiAgICAgIH0pKSBhcyBQYXRoQW5kQ2hlY2tzdW1bXTtcbiAgICByZXR1cm4gcHJldmlvdXNDaGVja3N1bXM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyDssrTtgazshKwg7YyM7J287J20IOyGkOyDgeuQnCDqsr3smrAg67mIIOuwsOyXtCDrsJjtmZggKOyghOyytCDsnqzrj5nquLDtmZQg7Jyg64+EKVxuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGDssrTtgazshKwg7YyM7J28KCR7Y2hlY2tzdW1GaWxlUGF0aH0p7J2EIO2MjOyLse2VmOuKlCDrjbAg7Iuk7Yyo7ZaI7Iq164uI64ukLiDsoITssrQg7J6s64+Z6riw7ZmU66W8IOynhO2Wie2VqeuLiOuLpC5gLFxuICAgICAgZSxcbiAgICApO1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDaGVja3N1bUZpbGVQYXRoKCk6IEFic29sdXRlUGF0aCB7XG4gIHJldHVybiAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhdGguam9pbihcbiAgICBTb25hbXUuYXBpUm9vdFBhdGgsXG4gICAgXCJzb25hbXUubG9ja1wiLFxuICApIGFzIEFic29sdXRlUGF0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZUNoZWNrc3VtcyhjaGVja3N1bXM6IFBhdGhBbmRDaGVja3N1bVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNoZWNrc3VtRmlsZVBhdGggPSBnZXRDaGVja3N1bUZpbGVQYXRoKCk7XG4gIC8vIGFwcFJvb3Qg7IOB64yAIOqyveuhnOuhnCDsp4HroKztmZQgKyDslYztjIzrsrMg7JWI7KCVIOygleugrCAoUFIgZGlmZiDquajrgZftlZjqsowg7Jyg7KeAKVxuICBjb25zdCBzZXJpYWxpemVkID0gY2hlY2tzdW1zXG4gICAgLm1hcCgocikgPT4gKHtcbiAgICAgIHBhdGg6IHBhdGgucmVsYXRpdmUoU29uYW11LmFwcFJvb3RQYXRoLCByLnBhdGgpLCAvLyDssrTtgazshKwg7YyM7J287JeQIOyggOyepe2VoCDrlYw6IOygiOuMgCDqsr3roZwg4oaSIGFwcFJvb3Qg7IOB64yAIOqyveuhnFxuICAgICAgY2hlY2tzdW06IHIuY2hlY2tzdW0sXG4gICAgfSkpXG4gICAgLnRvU29ydGVkKChhLCBiKSA9PiBhLnBhdGgubG9jYWxlQ29tcGFyZShiLnBhdGgpKTtcbiAgYXdhaXQgc3luY2VyRmlsZXN5c3RlbS53cml0ZUZpbGUoY2hlY2tzdW1GaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZCwgbnVsbCwgMiksIFwidXRmLThcIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENoZWNrc3VtT2ZGaWxlKGZpbGVQYXRoOiBQYXRoTGlrZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTFcIik7XG4gIGNvbnN0IGlucHV0ID0gY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgaW5wdXQpIHtcbiAgICBoYXNoLnVwZGF0ZShjaHVuayk7XG4gIH1cbiAgcmV0dXJuIGhhc2guZGlnZXN0KFwiaGV4XCIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBdUJBLGVBQXNCLGlDQUEwRDtDQUM5RSxNQUFNLHNCQUFzQixNQUFNLG9CQUFvQjtDQUN0RCxNQUFNLGlCQUFpQixNQUFNLHFCQUFxQjtDQUdsRCxJQURlLE1BQU0scUJBQXFCLGNBQ3RDLEdBQ0YsT0FBTyxDQUFDO0NBR1YsT0FBTyxlQUFlLHFCQUFxQixnQkFBZ0IsT0FBTyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUUsSUFBSTtBQUN2Rjs7Ozs7QUFNQSxlQUFzQixpQkFBZ0M7Q0FDcEQsTUFBTSxzQkFBc0IsTUFBTSxvQkFBb0I7Q0FJdEQsSUFEZSxNQUFNLHFCQUFxQixNQUZiLHFCQUFxQixDQUc5QyxHQUNGO0NBR0YsTUFBTSxjQUFjLG1CQUFtQjtBQUN6QztBQUVBLGVBQWUsc0JBQWtEO0NBQy9ELE1BQU0sWUFDSixNQUFNLFFBQVEsSUFDWixPQUFPLFFBQVEsc0NBQXNDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLGFBQWE7RUFDcEYsT0FBTyxVQUFVLFNBQVMsRUFBRSxTQUFTLGFBQWEsQ0FBQztDQUNyRCxDQUFDLENBQ0gsRUFBQSxDQUNBLEtBQUs7Q0FJUCxNQUFNLFlBQ3VELE1BQU0sS0FDL0QsSUFBSSxJQUFJLFFBQVEsQ0FDbEIsQ0FBQyxDQUFDLFNBQVM7Q0FFYixPQUFPLE1BQU0sUUFBUSxJQUNuQixVQUFVLElBQUksT0FBTyxhQUFhO0VBQ2hDLE9BQU87R0FDTCxNQUFNO0dBQ04sVUFBVSxNQUFNLGtCQUFrQixRQUFRO0VBQzVDO0NBQ0YsQ0FBQyxDQUNIO0FBQ0Y7QUFFQSxlQUFlLHVCQUFtRDtDQUNoRSxNQUFNLG1CQUFtQixvQkFBb0I7Q0FDN0MsSUFBSSxDQUFFLE1BQU0saUJBQWlCLGdCQUFnQixHQUMzQyxPQUFPLENBQUM7Q0FHVixJQUFJO0VBUUYsT0FONkQsS0FBSyxNQUM5RCxNQUFNLGlCQUFpQixTQUFTLGtCQUFrQixPQUFPLENBQzNELENBQUMsQ0FBQyxLQUFLLE9BQW9EO0dBQ3pELE1BQU0sS0FBSyxLQUFLLE9BQU8sYUFBYSxFQUFFLElBQUk7R0FDMUMsVUFBVSxFQUFFO0VBQ2QsRUFDSztDQUNULFNBQVMsR0FBRztFQUVWLFFBQVEsS0FDTixVQUFVLGlCQUFpQixvQ0FDM0IsQ0FDRjtFQUNBLE9BQU8sQ0FBQztDQUNWO0FBQ0Y7QUFFQSxTQUFTLHNCQUFvQztDQUMzQyxPQUFrRSxLQUFLLEtBQ3JFLE9BQU8sYUFDUCxhQUNGO0FBQ0Y7QUFFQSxlQUFlLGNBQWMsV0FBNkM7Q0FDeEUsTUFBTSxtQkFBbUIsb0JBQW9CO0NBRTdDLE1BQU0sYUFBYSxVQUNoQixLQUFLLE9BQU87RUFDWCxNQUFNLEtBQUssU0FBUyxPQUFPLGFBQWEsRUFBRSxJQUFJO0VBQzlDLFVBQVUsRUFBRTtDQUNkLEVBQUUsQ0FBQyxDQUNGLFVBQVUsR0FBRyxNQUFNLEVBQUUsS0FBSyxjQUFjLEVBQUUsSUFBSSxDQUFDO0NBQ2xELE1BQU0saUJBQWlCLFVBQVUsa0JBQWtCLEtBQUssVUFBVSxZQUFZLE1BQU0sQ0FBQyxHQUFHLE9BQU87QUFDakc7QUFFQSxlQUFlLGtCQUFrQixVQUFxQztDQUNwRSxNQUFNLE9BQU8sT0FBTyxXQUFXLE1BQU07Q0FDckMsTUFBTSxRQUFRLGlCQUFpQixRQUFRO0NBQ3ZDLFdBQVcsTUFBTSxTQUFTLE9BQ3hCLEtBQUssT0FBTyxLQUFLO0NBRW5CLE9BQU8sS0FBSyxPQUFPLEtBQUs7QUFDMUI7O2FBekhzQztrQkFDVTtZQUVEO29CQUNzQzs4QkFDUCJ9
@@ -1 +1 @@
1
- {"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/syncer/code-generator.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAMxB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;;;;;;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
+ {"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/syncer/code-generator.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIxD;;;;;;;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,CA4CzB;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"}
@@ -4,18 +4,17 @@ import { AlreadyProcessedException, init_so_exceptions } from "../exceptions/so-
4
4
  import { init_controller, isTest } from "../utils/controller.js";
5
5
  import { everyAsync, filterAsync, init_async_utils } from "../utils/async-utils.js";
6
6
  import { formatCode, init_formatter } from "../utils/formatter.js";
7
- import { exists, init_fs_utils } from "../utils/fs-utils.js";
8
7
  import { Sonamu, init_sonamu } from "../api/sonamu.js";
9
8
  import { EntityManager, init_entity_manager } from "../entity/entity-manager.js";
10
9
  import { Naite, init_naite } from "../naite/naite.js";
11
10
  import { TemplateManager, init_template_manager } from "../template/template-manager.js";
11
+ import { init_filesystem_dependencies, syncerFileExists, syncerFilesystem } from "./filesystem-dependencies.js";
12
12
  import { BUILT_IN_TYPES, init_zod_converter } from "../template/zod-converter.js";
13
13
  import { init_lodash_able, wrapIf } from "../utils/lodash-able.js";
14
14
  import { init_file_tracking, trackWritten } from "./file-tracking.js";
15
15
  import { unique } from "radashi";
16
16
  import path from "path";
17
17
  import chalk from "chalk";
18
- import { mkdir, writeFile } from "fs/promises";
19
18
  //#region src/syncer/code-generator.ts
20
19
  /**
21
20
  * 템플릿을 렌더링하고 파일로 생성합니다.
@@ -36,15 +35,15 @@ async function generateTemplate(key, templateOptions, _generateOptions) {
36
35
  generateOptions
37
36
  });
38
37
  const keys = [key];
39
- const pathAndCodes = (await Promise.all(keys.map(async (key) => {
40
- return await renderTemplate(key, templateOptions);
38
+ const pathAndCodes = (await Promise.all(keys.map(async (templateKey) => {
39
+ return await renderTemplate(templateKey, templateOptions);
41
40
  }))).flat();
42
41
  const filteredPathAndCodes = await (async () => {
43
42
  if (generateOptions.overwrite) return pathAndCodes;
44
43
  else return await filterAsync(pathAndCodes, async (pathAndCode) => {
45
44
  const { targets } = Sonamu.config.sync;
46
45
  const filePath = `${Sonamu.appRootPath}/${pathAndCode.path}`;
47
- return await everyAsync(targets.map((target) => filePath.replace("/:target/", `/${target}/`)), async (dstPath) => !await exists(dstPath));
46
+ return await everyAsync(targets.map((target) => filePath.replace("/:target/", `/${target}/`)), async (dstPath) => !await syncerFileExists(dstPath));
48
47
  });
49
48
  })();
50
49
  if (filteredPathAndCodes.length === 0) throw new AlreadyProcessedException(SD("sonamu.error.allFilesExist"));
@@ -65,8 +64,8 @@ async function renderTemplate(key, options) {
65
64
  const rendered = await TemplateManager.get(key).render(options);
66
65
  const resolved = await resolveRenderedTemplate(key, rendered);
67
66
  let preTemplateResolved = [];
68
- if (rendered.preTemplates) preTemplateResolved = (await Promise.all(rendered.preTemplates.map(({ key, options }) => {
69
- return renderTemplate(key, options);
67
+ if (rendered.preTemplates) preTemplateResolved = (await Promise.all(rendered.preTemplates.map(({ key: preTemplateKey, options: preTemplateOptions }) => {
68
+ return renderTemplate(preTemplateKey, preTemplateOptions);
70
69
  }))).flat();
71
70
  return [resolved, ...preTemplateResolved];
72
71
  }
@@ -103,9 +102,9 @@ async function resolveRenderedTemplate(key, result) {
103
102
  header,
104
103
  body
105
104
  });
106
- const formatted = await formatCode([header, body].join("\n\n"), `${Sonamu.appRootPath}/${filePath}`);
107
- Naite.t(`resolveRenderedTemplate:formatted:${key}`, formatted);
108
- return formatted;
105
+ const formattedCode = await formatCode([header, body].join("\n\n"), `${Sonamu.appRootPath}/${filePath}`);
106
+ Naite.t(`resolveRenderedTemplate:formatted:${key}`, formattedCode);
107
+ return formattedCode;
109
108
  }
110
109
  })();
111
110
  return {
@@ -120,8 +119,8 @@ async function writeCodeToPathEachTarget(pathAndCode) {
120
119
  const dstFilePaths = unique(targets.map((target) => filePath.replace("/:target/", `/${target}/`)));
121
120
  return await Promise.all(dstFilePaths.map(async (dstFilePath) => {
122
121
  const dir = path.dirname(dstFilePath);
123
- if (!await exists(dir)) await mkdir(dir, { recursive: true });
124
- await writeFile(dstFilePath, pathAndCode.code);
122
+ if (!await syncerFileExists(dir)) await syncerFilesystem.mkdir(dir, { recursive: true });
123
+ await syncerFilesystem.writeFile(dstFilePath, pathAndCode.code);
125
124
  await trackWritten(dstFilePath);
126
125
  !isTest() && console.log(chalk.bold("Generated: ") + chalk.blue(`${dstFilePath.replace(`${appRootPath}/`, "")}`));
127
126
  return dstFilePath;
@@ -138,12 +137,12 @@ var init_code_generator = __esmMin((() => {
138
137
  init_async_utils();
139
138
  init_controller();
140
139
  init_formatter();
141
- init_fs_utils();
142
140
  init_lodash_able();
143
141
  init_file_tracking();
142
+ init_filesystem_dependencies();
144
143
  }));
145
144
  //#endregion
146
145
  init_code_generator();
147
146
  export { generateTemplate, init_code_generator, renderTemplate };
148
147
 
149
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1nZW5lcmF0b3IuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9jb2RlLWdlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBta2Rpciwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgdHlwZSBSZW5kZXJlZFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tIFwiLi4vdGVtcGxhdGUvdGVtcGxhdGUtbWFuYWdlclwiO1xuaW1wb3J0IHsgQlVJTFRfSU5fVFlQRVMgfSBmcm9tIFwiLi4vdGVtcGxhdGUvem9kLWNvbnZlcnRlclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBHZW5lcmF0ZU9wdGlvbnMsXG4gIHR5cGUgUGF0aEFuZENvZGUsXG4gIHR5cGUgVGVtcGxhdGVLZXksXG4gIHR5cGUgVGVtcGxhdGVPcHRpb25zLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGV2ZXJ5QXN5bmMsIGZpbHRlckFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi91dGlscy9mb3JtYXR0ZXJcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgd3JhcElmIH0gZnJvbSBcIi4uL3V0aWxzL2xvZGFzaC1hYmxlXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyB0cmFja1dyaXR0ZW4gfSBmcm9tIFwiLi9maWxlLXRyYWNraW5nXCI7XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOqzoCDtjIzsnbzroZwg7IOd7ISx7ZWp64uI64ukLlxuICogb3ZlcndyaXRlIOyYteyFmOydtCBmYWxzZeyduCDqsr3smrAsIOydtOuvuCDsobTsnqztlZjripQg7YyM7J287J2AIOqxtOuEiOucgeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkICjsmIg6IFwiZW50aXR5XCIsIFwibW9kZWxcIiwgXCJzZXJ2aWNlXCIg65OxKVxuICogQHBhcmFtIHRlbXBsYXRlT3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Hsl5Ag7ZWE7JqU7ZWcIOyYteyFmFxuICogQHBhcmFtIF9nZW5lcmF0ZU9wdGlvbnMgLSDsg53shLEg7Ji17IWYIChvdmVyd3JpdGUg7Jes67aAKVxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZUtleT4oXG4gIGtleTogVCxcbiAgdGVtcGxhdGVPcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4gIF9nZW5lcmF0ZU9wdGlvbnM/OiBHZW5lcmF0ZU9wdGlvbnMsXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIGNvbnN0IGdlbmVyYXRlT3B0aW9ucyA9IHtcbiAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgIC4uLl9nZW5lcmF0ZU9wdGlvbnMsXG4gIH07XG4gIE5haXRlLnQoXCJnZW5lcmF0ZVRlbXBsYXRlXCIsIHsga2V5LCB0ZW1wbGF0ZU9wdGlvbnMsIGdlbmVyYXRlT3B0aW9ucyB9KTtcblxuICAvLyDtgqQgY2hpbGRyZW5cbiAgY29uc3Qga2V5czogVGVtcGxhdGVLZXlbXSA9IFtrZXldO1xuXG4gIC8vIO2FnO2UjOumvyDroIzrjZRcbiAgY29uc3QgcGF0aEFuZENvZGVzID0gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAga2V5cy5tYXAoYXN5bmMgKGtleSkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmVuZGVyVGVtcGxhdGUoa2V5LCB0ZW1wbGF0ZU9wdGlvbnMpO1xuICAgICAgfSksXG4gICAgKVxuICApLmZsYXQoKTtcblxuICBjb25zdCBmaWx0ZXJlZFBhdGhBbmRDb2RlczogUGF0aEFuZENvZGVbXSA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgaWYgKGdlbmVyYXRlT3B0aW9ucy5vdmVyd3JpdGUpIHtcbiAgICAgIHJldHVybiBwYXRoQW5kQ29kZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhd2FpdCBmaWx0ZXJBc3luYyhwYXRoQW5kQ29kZXMsIGFzeW5jIChwYXRoQW5kQ29kZSkgPT4ge1xuICAgICAgICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7cGF0aEFuZENvZGUucGF0aH1gO1xuICAgICAgICBjb25zdCBkc3RGaWxlUGF0aHMgPSB0YXJnZXRzLm1hcCgodGFyZ2V0KSA9PiBmaWxlUGF0aC5yZXBsYWNlKFwiLzp0YXJnZXQvXCIsIGAvJHt0YXJnZXR9L2ApKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGV2ZXJ5QXN5bmMoZHN0RmlsZVBhdGhzLCBhc3luYyAoZHN0UGF0aCkgPT4gIShhd2FpdCBleGlzdHMoZHN0UGF0aCkpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSkoKTtcblxuICBpZiAoZmlsdGVyZWRQYXRoQW5kQ29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuYWxsRmlsZXNFeGlzdFwiKSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWRQYXRoQW5kQ29kZXMubWFwKChwYXRoQW5kQ29kZSkgPT4gd3JpdGVDb2RlVG9QYXRoRWFjaFRhcmdldChwYXRoQW5kQ29kZSkpLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOyXrCBQYXRoQW5kQ29kZSDqsJ3ssrTrpbwg67CY7ZmY7ZWp64uI64ukLlxuICog7YyM7J2866GcIOyTsOyngCDslYrqs6Ag66mU66qo66as7IOB7JeQ7ISc66eMIOugjOuNlOunge2VqeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkXG4gKiBAcGFyYW0gb3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Eg7Ji17IWYXG4gKiBAcmV0dXJucyDqsr3roZzsmYAg7L2U65OcIOyMjeydmCDrsLDsl7RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICBrZXk6IFQsXG4gIG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbik6IFByb21pc2U8UGF0aEFuZENvZGVbXT4ge1xuICBOYWl0ZS50KFwicmVuZGVyVGVtcGxhdGVcIiwgeyBrZXksIG9wdGlvbnMgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0KGtleSk7XG5cbiAgY29uc3QgcmVuZGVyZWQgPSBhd2FpdCB0ZW1wbGF0ZS5yZW5kZXIob3B0aW9ucyk7XG4gIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoa2V5LCByZW5kZXJlZCk7XG5cbiAgbGV0IHByZVRlbXBsYXRlUmVzb2x2ZWQ6IFBhdGhBbmRDb2RlW10gPSBbXTtcbiAgaWYgKHJlbmRlcmVkLnByZVRlbXBsYXRlcykge1xuICAgIHByZVRlbXBsYXRlUmVzb2x2ZWQgPSAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcmVuZGVyZWQucHJlVGVtcGxhdGVzLm1hcCgoeyBrZXksIG9wdGlvbnMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZW5kZXJUZW1wbGF0ZShrZXksIG9wdGlvbnMpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICApLmZsYXQoKTtcbiAgfVxuXG4gIHJldHVybiBbcmVzb2x2ZWQsIC4uLnByZVRlbXBsYXRlUmVzb2x2ZWRdO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZShcbiAga2V5OiBUZW1wbGF0ZUtleSxcbiAgcmVzdWx0OiBSZW5kZXJlZFRlbXBsYXRlLFxuKTogUHJvbWlzZTxQYXRoQW5kQ29kZT4ge1xuICBOYWl0ZS50KGByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZSR7a2V5fWAsIHsga2V5LCByZXN1bHQgfSk7XG5cbiAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IGZpbGVQYXRoLCBib2R5LCBpbXBvcnRLZXlzLCBjdXN0b21IZWFkZXJzIH0gPSByZXN1bHQ7XG5cbiAgLy8gaW1wb3J0IO2VoCDrjIDsg4HsnZgg64yA7IOBIHBhdGgg7LaU7LacXG4gIGNvbnN0IGJ1aWx0SW5TY2hlbWFOYW1lcyA9IE9iamVjdC52YWx1ZXMoQlVJTFRfSU5fVFlQRVMpLm1hcCgoaW5mbykgPT4gaW5mby5zY2hlbWFOYW1lIGFzIHN0cmluZyk7XG4gIGNvbnN0IGltcG9ydERlZnMgPSBpbXBvcnRLZXlzXG4gICAgLy8g64K07J6lIO2DgOyehSDsiqTtgqTrp4jripQg7J2066+4IHNvbmFtdeyXkOyEnCBpbXBvcnTrkJjrr4DroZwg7KCc7Jm4XG4gICAgLmZpbHRlcigoaW1wb3J0S2V5KSA9PiAhYnVpbHRJblNjaGVtYU5hbWVzLmluY2x1ZGVzKGltcG9ydEtleSkpXG4gICAgLnJlZHVjZShcbiAgICAgIChyLCBpbXBvcnRLZXkpID0+IHtcbiAgICAgICAgbGV0IG1vZHVsZVBhdGggPSBpbXBvcnRLZXk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aChpbXBvcnRLZXkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBbcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGU6JHtrZXl9XSAke2ltcG9ydEtleX0g66qo65OIIOqyveuhnCDssL7quLAg7Iuk7YyoOiAke2Vycm9yfWAsXG4gICAgICAgICAgICB7IGNhdXNlOiBlcnJvciB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGltcG9ydFBhdGggPSBtb2R1bGVQYXRoO1xuICAgICAgICBpZiAobW9kdWxlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHwgbW9kdWxlUGF0aC5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gd3JhcElmKHBhdGgucmVsYXRpdmUocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgbW9kdWxlUGF0aCksIChwKSA9PiBbXG4gICAgICAgICAgICAhcC5zdGFydHNXaXRoKFwiLlwiKSxcbiAgICAgICAgICAgIGAuLyR7cH1gLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g6rCZ7J2AIO2MjOydvOyXkOyEnCBpbXBvcnQg7ZWY64qUIOqyveyasCBrZXlzIOuhnCDrgpjsl7Qg7LKY66asXG4gICAgICAgIGNvbnN0IGV4aXN0c09uZSA9IHIuZmluZCgoaW1wb3J0RGVmKSA9PiBpbXBvcnREZWYuZnJvbSA9PT0gaW1wb3J0UGF0aCk7XG4gICAgICAgIGlmIChleGlzdHNPbmUpIHtcbiAgICAgICAgICBleGlzdHNPbmUua2V5cyA9IHVuaXF1ZShleGlzdHNPbmUua2V5cy5jb25jYXQoaW1wb3J0S2V5KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgci5wdXNoKHtcbiAgICAgICAgICAgIGtleXM6IFtpbXBvcnRLZXldLFxuICAgICAgICAgICAgZnJvbTogaW1wb3J0UGF0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sXG4gICAgICBbXSBhcyB7XG4gICAgICAgIGtleXM6IHN0cmluZ1tdO1xuICAgICAgICBmcm9tOiBzdHJpbmc7XG4gICAgICB9W10sXG4gICAgKVxuICAgIC8vIOyFgO2UhCDssLjsobAg67Cp7KeAXG4gICAgLmZpbHRlcigoaW1wb3J0RGVmKSA9PiAhZmlsZVBhdGguZW5kc1dpdGgoYCR7aW1wb3J0RGVmLmZyb20ucmVwbGFjZShcIi4vXCIsIFwiXCIpfS50c2ApKTtcblxuICAvLyDsu6TsiqTthYAg7Zek642UIO2PrO2VqO2VmOyXrCDtl6TrjZQg7IOd7ISxXG4gIGNvbnN0IGhlYWRlciA9IFtcbiAgICAuLi4oY3VzdG9tSGVhZGVycyA/PyBbXSksXG4gICAgLi4uaW1wb3J0RGVmcy5tYXAoXG4gICAgICAoaW1wb3J0RGVmKSA9PiBgaW1wb3J0IHsgJHtpbXBvcnREZWYua2V5cy5qb2luKFwiLCBcIil9IH0gZnJvbSAnJHtpbXBvcnREZWYuZnJvbX0nYCxcbiAgICApLFxuICBdLmpvaW4oXCJcXG5cIik7XG5cbiAgY29uc3QgZm9ybWF0dGVkID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICBpZiAoa2V5ID09PSBcImdlbmVyYXRlZF9odHRwXCIpIHtcbiAgICAgIHJldHVybiBbaGVhZGVyLCBib2R5XS5qb2luKFwiXFxuXFxuXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBOYWl0ZS50KFwicmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGU6YmVmb3JlRm9ybWF0XCIsIHsga2V5LCBoZWFkZXIsIGJvZHkgfSk7XG4gICAgICBjb25zdCBmb3JtYXR0ZWQgPSBhd2FpdCBmb3JtYXRDb2RlKFxuICAgICAgICBbaGVhZGVyLCBib2R5XS5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgICBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7ZmlsZVBhdGh9YCxcbiAgICAgICk7XG4gICAgICBOYWl0ZS50KGByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpmb3JtYXR0ZWQ6JHtrZXl9YCwgZm9ybWF0dGVkKTtcbiAgICAgIHJldHVybiBmb3JtYXR0ZWQ7XG4gICAgfVxuICB9KSgpO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aDogYCR7dGFyZ2V0fS8ke2ZpbGVQYXRofWAsXG4gICAgY29kZTogZm9ybWF0dGVkLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUNvZGVUb1BhdGhFYWNoVGFyZ2V0KHBhdGhBbmRDb2RlOiBQYXRoQW5kQ29kZSk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gIGNvbnN0IHsgYXBwUm9vdFBhdGggfSA9IFNvbmFtdTtcbiAgY29uc3QgZmlsZVBhdGggPSBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7cGF0aEFuZENvZGUucGF0aH1gIGFzIEFic29sdXRlUGF0aDtcblxuICBjb25zdCBkc3RGaWxlUGF0aHMgPSB1bmlxdWUoXG4gICAgdGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4gZmlsZVBhdGgucmVwbGFjZShcIi86dGFyZ2V0L1wiLCBgLyR7dGFyZ2V0fS9gKSkgYXMgQWJzb2x1dGVQYXRoW10sXG4gICk7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBkc3RGaWxlUGF0aHMubWFwKGFzeW5jIChkc3RGaWxlUGF0aCkgPT4ge1xuICAgICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKGRzdEZpbGVQYXRoKTtcbiAgICAgIGlmICghKGF3YWl0IGV4aXN0cyhkaXIpKSkge1xuICAgICAgICBhd2FpdCBta2RpcihkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgYXdhaXQgd3JpdGVGaWxlKGRzdEZpbGVQYXRoLCBwYXRoQW5kQ29kZS5jb2RlKTtcbiAgICAgIC8vIOuwqeq4iCDsmrDrpqzqsIAg7JO0IHBhdGjrpbwg65Ox66GdIOKGkiBkZXYgd2F0Y2hlcuydmCDtm4Tsho0gY2hhbmdlIOydtOuypO2KuOqwgFxuICAgICAgLy8g7Jm467aAIOuzgOqyveycvOuhnCDsmKTsnbjrkJjsp4Ag7JWK64+E66GdIOqxsOumhCDqsIDrk5wg7J6Q66OMIOygnOqztS5cbiAgICAgIGF3YWl0IHRyYWNrV3JpdHRlbihkc3RGaWxlUGF0aCk7XG4gICAgICAhaXNUZXN0KCkgJiZcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgY2hhbGsuYm9sZChcIkdlbmVyYXRlZDogXCIpICsgY2hhbGsuYmx1ZShgJHtkc3RGaWxlUGF0aC5yZXBsYWNlKGAke2FwcFJvb3RQYXRofS9gLCBcIlwiKX1gKSxcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBkc3RGaWxlUGF0aDtcbiAgICB9KSxcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0NBLGVBQXNCLGlCQUNwQixLQUNBLGlCQUNBLGtCQUN5QjtDQUN6QixNQUFNLGtCQUFrQjtFQUN0QixXQUFXO0VBQ1gsR0FBRztDQUNMO0NBQ0EsTUFBTSxFQUFFLG9CQUFvQjtFQUFFO0VBQUs7RUFBaUI7Q0FBZ0IsQ0FBQztDQUdyRSxNQUFNLE9BQXNCLENBQUMsR0FBRztDQUdoQyxNQUFNLGdCQUNKLE1BQU0sUUFBUSxJQUNaLEtBQUssSUFBSSxPQUFPLFFBQVE7RUFDdEIsT0FBTyxNQUFNLGVBQWUsS0FBSyxlQUFlO0NBQ2xE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
148
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1nZW5lcmF0b3IuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9jb2RlLWdlbmVyYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgdHlwZSBSZW5kZXJlZFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tIFwiLi4vdGVtcGxhdGUvdGVtcGxhdGUtbWFuYWdlclwiO1xuaW1wb3J0IHsgQlVJTFRfSU5fVFlQRVMgfSBmcm9tIFwiLi4vdGVtcGxhdGUvem9kLWNvbnZlcnRlclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBHZW5lcmF0ZU9wdGlvbnMsXG4gIHR5cGUgUGF0aEFuZENvZGUsXG4gIHR5cGUgVGVtcGxhdGVLZXksXG4gIHR5cGUgVGVtcGxhdGVPcHRpb25zLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGV2ZXJ5QXN5bmMsIGZpbHRlckFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi91dGlscy9mb3JtYXR0ZXJcIjtcbmltcG9ydCB7IHdyYXBJZiB9IGZyb20gXCIuLi91dGlscy9sb2Rhc2gtYWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHJhY2tXcml0dGVuIH0gZnJvbSBcIi4vZmlsZS10cmFja2luZ1wiO1xuaW1wb3J0IHsgc3luY2VyRmlsZUV4aXN0cywgc3luY2VyRmlsZXN5c3RlbSB9IGZyb20gXCIuL2ZpbGVzeXN0ZW0tZGVwZW5kZW5jaWVzXCI7XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOqzoCDtjIzsnbzroZwg7IOd7ISx7ZWp64uI64ukLlxuICogb3ZlcndyaXRlIOyYteyFmOydtCBmYWxzZeyduCDqsr3smrAsIOydtOuvuCDsobTsnqztlZjripQg7YyM7J287J2AIOqxtOuEiOucgeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkICjsmIg6IFwiZW50aXR5XCIsIFwibW9kZWxcIiwgXCJzZXJ2aWNlXCIg65OxKVxuICogQHBhcmFtIHRlbXBsYXRlT3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Hsl5Ag7ZWE7JqU7ZWcIOyYteyFmFxuICogQHBhcmFtIF9nZW5lcmF0ZU9wdGlvbnMgLSDsg53shLEg7Ji17IWYIChvdmVyd3JpdGUg7Jes67aAKVxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVRlbXBsYXRlPFQgZXh0ZW5kcyBUZW1wbGF0ZUtleT4oXG4gIGtleTogVCxcbiAgdGVtcGxhdGVPcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4gIF9nZW5lcmF0ZU9wdGlvbnM/OiBHZW5lcmF0ZU9wdGlvbnMsXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIGNvbnN0IGdlbmVyYXRlT3B0aW9ucyA9IHtcbiAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgIC4uLl9nZW5lcmF0ZU9wdGlvbnMsXG4gIH07XG4gIE5haXRlLnQoXCJnZW5lcmF0ZVRlbXBsYXRlXCIsIHsga2V5LCB0ZW1wbGF0ZU9wdGlvbnMsIGdlbmVyYXRlT3B0aW9ucyB9KTtcblxuICAvLyDtgqQgY2hpbGRyZW5cbiAgY29uc3Qga2V5czogVGVtcGxhdGVLZXlbXSA9IFtrZXldO1xuXG4gIC8vIO2FnO2UjOumvyDroIzrjZRcbiAgY29uc3QgcGF0aEFuZENvZGVzID0gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAga2V5cy5tYXAoYXN5bmMgKHRlbXBsYXRlS2V5KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCByZW5kZXJUZW1wbGF0ZSh0ZW1wbGF0ZUtleSwgdGVtcGxhdGVPcHRpb25zKTtcbiAgICAgIH0pLFxuICAgIClcbiAgKS5mbGF0KCk7XG5cbiAgY29uc3QgZmlsdGVyZWRQYXRoQW5kQ29kZXM6IFBhdGhBbmRDb2RlW10gPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChnZW5lcmF0ZU9wdGlvbnMub3ZlcndyaXRlKSB7XG4gICAgICByZXR1cm4gcGF0aEFuZENvZGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmlsdGVyQXN5bmMocGF0aEFuZENvZGVzLCBhc3luYyAocGF0aEFuZENvZGUpID0+IHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7U29uYW11LmFwcFJvb3RQYXRofS8ke3BhdGhBbmRDb2RlLnBhdGh9YDtcbiAgICAgICAgY29uc3QgZHN0RmlsZVBhdGhzID0gdGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4gZmlsZVBhdGgucmVwbGFjZShcIi86dGFyZ2V0L1wiLCBgLyR7dGFyZ2V0fS9gKSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBldmVyeUFzeW5jKFxuICAgICAgICAgIGRzdEZpbGVQYXRocyxcbiAgICAgICAgICBhc3luYyAoZHN0UGF0aCkgPT4gIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRzdFBhdGgpKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSkoKTtcblxuICBpZiAoZmlsdGVyZWRQYXRoQW5kQ29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuYWxsRmlsZXNFeGlzdFwiKSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgZmlsdGVyZWRQYXRoQW5kQ29kZXMubWFwKChwYXRoQW5kQ29kZSkgPT4gd3JpdGVDb2RlVG9QYXRoRWFjaFRhcmdldChwYXRoQW5kQ29kZSkpLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICog7YWc7ZSM66a/7J2EIOugjOuNlOunge2VmOyXrCBQYXRoQW5kQ29kZSDqsJ3ssrTrpbwg67CY7ZmY7ZWp64uI64ukLlxuICog7YyM7J2866GcIOyTsOyngCDslYrqs6Ag66mU66qo66as7IOB7JeQ7ISc66eMIOugjOuNlOunge2VqeuLiOuLpC5cbiAqIEBwYXJhbSBrZXkgLSDthZztlIzrpr8g7YKkXG4gKiBAcGFyYW0gb3B0aW9ucyAtIO2FnO2UjOumvyDroIzrjZTrp4Eg7Ji17IWYXG4gKiBAcmV0dXJucyDqsr3roZzsmYAg7L2U65OcIOyMjeydmCDrsLDsl7RcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICBrZXk6IFQsXG4gIG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbik6IFByb21pc2U8UGF0aEFuZENvZGVbXT4ge1xuICBOYWl0ZS50KFwicmVuZGVyVGVtcGxhdGVcIiwgeyBrZXksIG9wdGlvbnMgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZU1hbmFnZXIuZ2V0KGtleSk7XG5cbiAgY29uc3QgcmVuZGVyZWQgPSBhd2FpdCB0ZW1wbGF0ZS5yZW5kZXIob3B0aW9ucyk7XG4gIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoa2V5LCByZW5kZXJlZCk7XG5cbiAgbGV0IHByZVRlbXBsYXRlUmVzb2x2ZWQ6IFBhdGhBbmRDb2RlW10gPSBbXTtcbiAgaWYgKHJlbmRlcmVkLnByZVRlbXBsYXRlcykge1xuICAgIHByZVRlbXBsYXRlUmVzb2x2ZWQgPSAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcmVuZGVyZWQucHJlVGVtcGxhdGVzLm1hcCgoeyBrZXk6IHByZVRlbXBsYXRlS2V5LCBvcHRpb25zOiBwcmVUZW1wbGF0ZU9wdGlvbnMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZW5kZXJUZW1wbGF0ZShwcmVUZW1wbGF0ZUtleSwgcHJlVGVtcGxhdGVPcHRpb25zKTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgKS5mbGF0KCk7XG4gIH1cblxuICByZXR1cm4gW3Jlc29sdmVkLCAuLi5wcmVUZW1wbGF0ZVJlc29sdmVkXTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUoXG4gIGtleTogVGVtcGxhdGVLZXksXG4gIHJlc3VsdDogUmVuZGVyZWRUZW1wbGF0ZSxcbik6IFByb21pc2U8UGF0aEFuZENvZGU+IHtcbiAgTmFpdGUudChgcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGUke2tleX1gLCB7IGtleSwgcmVzdWx0IH0pO1xuXG4gIGNvbnN0IHsgdGFyZ2V0LCBwYXRoOiBmaWxlUGF0aCwgYm9keSwgaW1wb3J0S2V5cywgY3VzdG9tSGVhZGVycyB9ID0gcmVzdWx0O1xuXG4gIC8vIGltcG9ydCDtlaAg64yA7IOB7J2YIOuMgOyDgSBwYXRoIOy2lOy2nFxuICBjb25zdCBidWlsdEluU2NoZW1hTmFtZXMgPSBPYmplY3QudmFsdWVzKEJVSUxUX0lOX1RZUEVTKS5tYXAoXG4gICAgKGluZm8pID0+XG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGluZm8uc2NoZW1hTmFtZSBhcyBzdHJpbmcsXG4gICk7XG4gIGNvbnN0IGltcG9ydERlZnMgPSBpbXBvcnRLZXlzXG4gICAgLy8g64K07J6lIO2DgOyehSDsiqTtgqTrp4jripQg7J2066+4IHNvbmFtdeyXkOyEnCBpbXBvcnTrkJjrr4DroZwg7KCc7Jm4XG4gICAgLmZpbHRlcigoaW1wb3J0S2V5KSA9PiAhYnVpbHRJblNjaGVtYU5hbWVzLmluY2x1ZGVzKGltcG9ydEtleSkpXG4gICAgLnJlZHVjZShcbiAgICAgIChyLCBpbXBvcnRLZXkpID0+IHtcbiAgICAgICAgbGV0IG1vZHVsZVBhdGggPSBpbXBvcnRLZXk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aChpbXBvcnRLZXkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBbcmVzb2x2ZVJlbmRlcmVkVGVtcGxhdGU6JHtrZXl9XSAke2ltcG9ydEtleX0g66qo65OIIOqyveuhnCDssL7quLAg7Iuk7YyoOiAke2Vycm9yfWAsXG4gICAgICAgICAgICB7IGNhdXNlOiBlcnJvciB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGltcG9ydFBhdGggPSBtb2R1bGVQYXRoO1xuICAgICAgICBpZiAobW9kdWxlUGF0aC5pbmNsdWRlcyhcIi9cIikgfHwgbW9kdWxlUGF0aC5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgICAgICBpbXBvcnRQYXRoID0gd3JhcElmKHBhdGgucmVsYXRpdmUocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSwgbW9kdWxlUGF0aCksIChwKSA9PiBbXG4gICAgICAgICAgICAhcC5zdGFydHNXaXRoKFwiLlwiKSxcbiAgICAgICAgICAgIGAuLyR7cH1gLFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g6rCZ7J2AIO2MjOydvOyXkOyEnCBpbXBvcnQg7ZWY64qUIOqyveyasCBrZXlzIOuhnCDrgpjsl7Qg7LKY66asXG4gICAgICAgIGNvbnN0IGV4aXN0c09uZSA9IHIuZmluZCgoaW1wb3J0RGVmKSA9PiBpbXBvcnREZWYuZnJvbSA9PT0gaW1wb3J0UGF0aCk7XG4gICAgICAgIGlmIChleGlzdHNPbmUpIHtcbiAgICAgICAgICBleGlzdHNPbmUua2V5cyA9IHVuaXF1ZShleGlzdHNPbmUua2V5cy5jb25jYXQoaW1wb3J0S2V5KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgci5wdXNoKHtcbiAgICAgICAgICAgIGtleXM6IFtpbXBvcnRLZXldLFxuICAgICAgICAgICAgZnJvbTogaW1wb3J0UGF0aCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH0sXG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtdIGFzIHtcbiAgICAgICAga2V5czogc3RyaW5nW107XG4gICAgICAgIGZyb206IHN0cmluZztcbiAgICAgIH1bXSxcbiAgICApXG4gICAgLy8g7IWA7ZSEIOywuOyhsCDrsKnsp4BcbiAgICAuZmlsdGVyKChpbXBvcnREZWYpID0+ICFmaWxlUGF0aC5lbmRzV2l0aChgJHtpbXBvcnREZWYuZnJvbS5yZXBsYWNlKFwiLi9cIiwgXCJcIil9LnRzYCkpO1xuXG4gIC8vIOy7pOyKpO2FgCDtl6TrjZQg7Y+s7ZWo7ZWY7JesIO2XpOuNlCDsg53shLFcbiAgY29uc3QgaGVhZGVyID0gW1xuICAgIC4uLihjdXN0b21IZWFkZXJzID8/IFtdKSxcbiAgICAuLi5pbXBvcnREZWZzLm1hcChcbiAgICAgIChpbXBvcnREZWYpID0+IGBpbXBvcnQgeyAke2ltcG9ydERlZi5rZXlzLmpvaW4oXCIsIFwiKX0gfSBmcm9tICcke2ltcG9ydERlZi5mcm9tfSdgLFxuICAgICksXG4gIF0uam9pbihcIlxcblwiKTtcblxuICBjb25zdCBmb3JtYXR0ZWQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgIGlmIChrZXkgPT09IFwiZ2VuZXJhdGVkX2h0dHBcIikge1xuICAgICAgcmV0dXJuIFtoZWFkZXIsIGJvZHldLmpvaW4oXCJcXG5cXG5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIE5haXRlLnQoXCJyZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpiZWZvcmVGb3JtYXRcIiwgeyBrZXksIGhlYWRlciwgYm9keSB9KTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZENvZGUgPSBhd2FpdCBmb3JtYXRDb2RlKFxuICAgICAgICBbaGVhZGVyLCBib2R5XS5qb2luKFwiXFxuXFxuXCIpLFxuICAgICAgICBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7ZmlsZVBhdGh9YCxcbiAgICAgICk7XG4gICAgICBOYWl0ZS50KGByZXNvbHZlUmVuZGVyZWRUZW1wbGF0ZTpmb3JtYXR0ZWQ6JHtrZXl9YCwgZm9ybWF0dGVkQ29kZSk7XG4gICAgICByZXR1cm4gZm9ybWF0dGVkQ29kZTtcbiAgICB9XG4gIH0pKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBgJHt0YXJnZXR9LyR7ZmlsZVBhdGh9YCxcbiAgICBjb2RlOiBmb3JtYXR0ZWQsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQ29kZVRvUGF0aEVhY2hUYXJnZXQocGF0aEFuZENvZGU6IFBhdGhBbmRDb2RlKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBhcHBSb290UGF0aCB9ID0gU29uYW11O1xuICBjb25zdCBmaWxlUGF0aCA9XG4gICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBgJHtTb25hbXUuYXBwUm9vdFBhdGh9LyR7cGF0aEFuZENvZGUucGF0aH1gIGFzIEFic29sdXRlUGF0aDtcblxuICBjb25zdCBkc3RGaWxlUGF0aHMgPSB1bmlxdWUoXG4gICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyB0YXJnZXRzLm1hcChcbiAgICAgICh0YXJnZXQpID0+IGZpbGVQYXRoLnJlcGxhY2UoXCIvOnRhcmdldC9cIiwgYC8ke3RhcmdldH0vYCksXG4gICAgKSBhcyBBYnNvbHV0ZVBhdGhbXSxcbiAgKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIGRzdEZpbGVQYXRocy5tYXAoYXN5bmMgKGRzdEZpbGVQYXRoKSA9PiB7XG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZHN0RmlsZVBhdGgpO1xuICAgICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhkaXIpKSkge1xuICAgICAgICBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLm1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLndyaXRlRmlsZShkc3RGaWxlUGF0aCwgcGF0aEFuZENvZGUuY29kZSk7XG4gICAgICAvLyDrsKnquIgg7Jqw66as6rCAIOyTtCBwYXRo66W8IOuTseuhnSDihpIgZGV2IHdhdGNoZXLsnZgg7ZuE7IaNIGNoYW5nZSDsnbTrsqTtirjqsIBcbiAgICAgIC8vIOyZuOu2gCDrs4Dqsr3snLzroZwg7Jik7J2465CY7KeAIOyViuuPhOuhnSDqsbDrpoQg6rCA65OcIOyekOujjCDsoJzqs7UuXG4gICAgICBhd2FpdCB0cmFja1dyaXR0ZW4oZHN0RmlsZVBhdGgpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGNoYWxrLmJvbGQoXCJHZW5lcmF0ZWQ6IFwiKSArIGNoYWxrLmJsdWUoYCR7ZHN0RmlsZVBhdGgucmVwbGFjZShgJHthcHBSb290UGF0aH0vYCwgXCJcIil9YCksXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZHN0RmlsZVBhdGg7XG4gICAgfSksXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUNBLGVBQXNCLGlCQUNwQixLQUNBLGlCQUNBLGtCQUN5QjtDQUN6QixNQUFNLGtCQUFrQjtFQUN0QixXQUFXO0VBQ1gsR0FBRztDQUNMO0NBQ0EsTUFBTSxFQUFFLG9CQUFvQjtFQUFFO0VBQUs7RUFBaUI7Q0FBZ0IsQ0FBQztDQUdyRSxNQUFNLE9BQXNCLENBQUMsR0FBRztDQUdoQyxNQUFNLGdCQUNKLE1BQU0sUUFBUSxJQUNaLEtBQUssSUFBSSxPQUFPLGdCQUFnQjtFQUM5QixPQUFPLE1BQU0sZUFBZSxhQUFhLGVBQWU7Q0FDMUQsQ0FBQyxDQUNILEVBQUEsQ0FDQSxLQUFLO0NBRVAsTUFBTSx1QkFBc0MsT0FBTyxZQUFZO0VBQzdELElBQUksZ0JBQWdCLFdBQ2xCLE9BQU87T0FFUCxPQUFPLE1BQU0sWUFBWSxjQUFjLE9BQU8sZ0JBQWdCO0dBQzVELE1BQU0sRUFBRSxZQUFZLE9BQU8sT0FBTztHQUNsQyxNQUFNLFdBQVcsR0FBRyxPQUFPLFlBQVksR0FBRyxZQUFZO0dBRXRELE9BQU8sTUFBTSxXQURRLFFBQVEsS0FBSyxXQUFXLFNBQVMsUUFBUSxhQUFhLElBQUksT0FBTyxFQUFFLENBRXRGLEdBQ0EsT0FBTyxZQUFZLENBQUUsTUFBTSxpQkFBaUIsT0FB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
@@ -1 +1 @@
1
- {"version":3,"file":"entity-operations.d.ts","sourceRoot":"","sources":["../../src/syncer/entity-operations.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,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"}
1
+ {"version":3,"file":"entity-operations.d.ts","sourceRoot":"","sources":["../../src/syncer/entity-operations.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,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"}
@@ -2,12 +2,11 @@ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { SD, init_sd } from "../dict/sd.js";
3
3
  import { BadRequestException, init_so_exceptions } from "../exceptions/so-exceptions.js";
4
4
  import { init_controller, isTest } from "../utils/controller.js";
5
- import { exists, init_fs_utils } from "../utils/fs-utils.js";
6
5
  import { Sonamu, init_sonamu } from "../api/sonamu.js";
7
6
  import { EntityManager, init_entity_manager } from "../entity/entity-manager.js";
7
+ import { init_filesystem_dependencies, syncerFileExists, syncerFilesystem } from "./filesystem-dependencies.js";
8
8
  import { generateTemplate, init_code_generator } from "./code-generator.js";
9
9
  import chalk from "chalk";
10
- import { rm } from "fs/promises";
11
10
  //#region src/syncer/entity-operations.ts
12
11
  /**
13
12
  * 새로운 엔티티를 생성합니다.
@@ -33,9 +32,9 @@ async function delEntity(entityId) {
33
32
  ...Sonamu.config.sync.targets.flatMap((target) => [`${Sonamu.appRootPath}/${target}/src/services/${entity.names.fs}`])
34
33
  ];
35
34
  })();
36
- for (const delPath of delPaths) if (await exists(delPath)) {
35
+ for (const delPath of delPaths) if (await syncerFileExists(delPath)) {
37
36
  !isTest() && console.log(chalk.red(`DELETE ${delPath}`));
38
- await rm(delPath, {
37
+ await syncerFilesystem.rm(delPath, {
39
38
  recursive: true,
40
39
  force: true
41
40
  });
@@ -49,11 +48,11 @@ var init_entity_operations = __esmMin((() => {
49
48
  init_entity_manager();
50
49
  init_so_exceptions();
51
50
  init_controller();
52
- init_fs_utils();
53
51
  init_code_generator();
52
+ init_filesystem_dependencies();
54
53
  }));
55
54
  //#endregion
56
55
  init_entity_operations();
57
56
  export { createEntity, delEntity, init_entity_operations };
58
57
 
59
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW9wZXJhdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9lbnRpdHktb3BlcmF0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBybSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi9kaWN0L3NkXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxzL2ZzLXV0aWxzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVRlbXBsYXRlIH0gZnJvbSBcIi4vY29kZS1nZW5lcmF0b3JcIjtcblxuLyoqXG4gKiDsg4jroZzsmrQg7JeU7Yuw7Yuw66W8IOyDneyEse2VqeuLiOuLpC5cbiAqIGVudGl0eUlk64qUIOuwmOuTnOyLnCBDYW1lbENhc2Ug7ZiV7Iud7J207Ja07JW8IO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUVudGl0eShcbiAgZm9ybTogT21pdDxUZW1wbGF0ZU9wdGlvbnNbXCJlbnRpdHlcIl0sIFwidGl0bGVcIj4gJiB7IHRpdGxlOiBzdHJpbmcgfSxcbikge1xuICBpZiAoIS9eW0EtWl1bYS16QS1aMC05XSokLy50ZXN0KGZvcm0uZW50aXR5SWQpKSB7XG4gICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuZW50aXR5SWRDYW1lbENhc2VcIikpO1xuICB9XG5cbiAgYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImVudGl0eVwiLCBmb3JtKTtcblxuICAvLyByZWxvYWQgZW50aXRpZXNcbiAgYXdhaXQgRW50aXR5TWFuYWdlci5yZWxvYWQoKTtcbn1cblxuLyoqXG4gKiDsl5Tti7Dti7Drpbwg7IKt7KCc7ZWp64uI64ukLlxuICogcGFyZW50SWTqsIAg7J6I64qUIOyEnOu4jCDsl5Tti7Dti7DsnZgg6rK97JqwIGVudGl0eS5qc29u66eMIOyCreygnO2VmOqzoCxcbiAqIOujqO2KuCDsl5Tti7Dti7DsnZgg6rK97JqwIOuUlOugie2GoOumrCDsoITssrTsmYAg7YOA6rKfIOuUlOugie2GoOumrOulvCDsgq3soJztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxFbnRpdHkoZW50aXR5SWQ6IHN0cmluZyk6IFByb21pc2U8eyBkZWxQYXRoczogc3RyaW5nW10gfT4ge1xuICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgY29uc3QgZGVsUGF0aHMgPSAoKCkgPT4ge1xuICAgIGlmIChlbnRpdHkucGFyZW50SWQpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGAke1NvbmFtdS5hcGlSb290UGF0aH0vc3JjL2FwcGxpY2F0aW9uLyR7ZW50aXR5Lm5hbWVzLnBhcmVudEZzfS8ke2VudGl0eS5uYW1lcy5mc30uZW50aXR5Lmpzb25gLFxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYCR7U29uYW11LmFwaVJvb3RQYXRofS9zcmMvYXBwbGljYXRpb24vJHtlbnRpdHkubmFtZXMuZnN9YCxcbiAgICAgICAgYCR7U29uYW11LmFwaVJvb3RQYXRofS9kaXN0L2FwcGxpY2F0aW9uLyR7ZW50aXR5Lm5hbWVzLmZzfWAsXG4gICAgICAgIC4uLlNvbmFtdS5jb25maWcuc3luYy50YXJnZXRzLmZsYXRNYXAoKHRhcmdldCkgPT4gW1xuICAgICAgICAgIGAke1NvbmFtdS5hcHBSb290UGF0aH0vJHt0YXJnZXR9L3NyYy9zZXJ2aWNlcy8ke2VudGl0eS5uYW1lcy5mc31gLFxuICAgICAgICBdKSxcbiAgICAgIF07XG4gICAgfVxuICB9KSgpOyAvLyBpaWZlXG5cbiAgZm9yIChjb25zdCBkZWxQYXRoIG9mIGRlbFBhdGhzKSB7XG4gICAgaWYgKGF3YWl0IGV4aXN0cyhkZWxQYXRoKSkge1xuICAgICAgIWlzVGVzdCgpICYmIGNvbnNvbGUubG9nKGNoYWxrLnJlZChgREVMRVRFICR7ZGVsUGF0aH1gKSk7XG4gICAgICBhd2FpdCBybShkZWxQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICFpc1Rlc3QoKSAmJiBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYE5PVF9FWElTVFMgJHtkZWxQYXRofWApKTtcbiAgICB9XG4gIH1cblxuICAvLyByZWxvYWQgZW50aXRpZXNcbiAgYXdhaXQgRW50aXR5TWFuYWdlci5yZWxvYWQoKTtcblxuICByZXR1cm4geyBkZWxQYXRocyB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFpQkEsZUFBc0IsYUFDcEIsTUFDQTtDQUNBLElBQUksQ0FBQyxzQkFBc0IsS0FBSyxLQUFLLFFBQVEsR0FDM0MsTUFBTSxJQUFJLG9CQUFvQixHQUFHLGdDQUFnQyxDQUFDO0NBR3BFLE1BQU0saUJBQWlCLFVBQVUsSUFBSTtDQUdyQyxNQUFNLGNBQWMsT0FBTztBQUM3Qjs7Ozs7O0FBT0EsZUFBc0IsVUFBVSxVQUFtRDtDQUNqRixNQUFNLFNBQVMsY0FBYyxJQUFJLFFBQVE7Q0FFekMsTUFBTSxrQkFBa0I7RUFDdEIsSUFBSSxPQUFPLFVBQ1QsT0FBTyxDQUNMLEdBQUcsT0FBTyxZQUFZLG1CQUFtQixPQUFPLE1BQU0sU0FBUyxHQUFHLE9BQU8sTUFBTSxHQUFHLGFBQ3BGO09BRUEsT0FBTztHQUNMLEdBQUcsT0FBTyxZQUFZLG1CQUFtQixPQUFPLE1BQU07R0FDdEQsR0FBRyxPQUFPLFlBQVksb0JBQW9CLE9BQU8sTUFBTTtHQUN2RCxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsU0FBUyxXQUFXLENBQ2hELEdBQUcsT0FBTyxZQUFZLEdBQUcsT0FBTyxnQkFBZ0IsT0FBTyxNQUFNLElBQy9ELENBQUM7RUFDSDtDQUVKLEVBQUEsQ0FBRztDQUVILEtBQUssTUFBTSxXQUFXLFVBQ3BCLElBQUksTUFBTSxPQUFPLE9BQU8sR0FBRztFQUN6QixDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLFVBQVUsU0FBUyxDQUFDO0VBQ3ZELE1BQU0sR0FBRyxTQUFTO0dBQUUsV0FBVztHQUFNLE9BQU87RUFBSyxDQUFDO0NBQ3BELE9BQ0UsQ0FBQyxPQUFPLEtBQUssUUFBUSxJQUFJLE1BQU0sT0FBTyxjQUFjLFNBQVMsQ0FBQztDQUtsRSxNQUFNLGNBQWMsT0FBTztDQUUzQixPQUFPLEVBQUUsU0FBUztBQUNwQjs7YUEvRHNDO1NBQ1A7cUJBQ3lCO29CQUNTO2lCQUVyQjtlQUNGO3FCQUNTIn0=
58
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW9wZXJhdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9lbnRpdHktb3BlcmF0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi9kaWN0L3NkXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVUZW1wbGF0ZSB9IGZyb20gXCIuL2NvZGUtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLyoqXG4gKiDsg4jroZzsmrQg7JeU7Yuw7Yuw66W8IOyDneyEse2VqeuLiOuLpC5cbiAqIGVudGl0eUlk64qUIOuwmOuTnOyLnCBDYW1lbENhc2Ug7ZiV7Iud7J207Ja07JW8IO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUVudGl0eShcbiAgZm9ybTogT21pdDxUZW1wbGF0ZU9wdGlvbnNbXCJlbnRpdHlcIl0sIFwidGl0bGVcIj4gJiB7IHRpdGxlOiBzdHJpbmcgfSxcbikge1xuICBpZiAoIS9eW0EtWl1bYS16QS1aMC05XSokLy50ZXN0KGZvcm0uZW50aXR5SWQpKSB7XG4gICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuZW50aXR5SWRDYW1lbENhc2VcIikpO1xuICB9XG5cbiAgYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImVudGl0eVwiLCBmb3JtKTtcblxuICAvLyByZWxvYWQgZW50aXRpZXNcbiAgYXdhaXQgRW50aXR5TWFuYWdlci5yZWxvYWQoKTtcbn1cblxuLyoqXG4gKiDsl5Tti7Dti7Drpbwg7IKt7KCc7ZWp64uI64ukLlxuICogcGFyZW50SWTqsIAg7J6I64qUIOyEnOu4jCDsl5Tti7Dti7DsnZgg6rK97JqwIGVudGl0eS5qc29u66eMIOyCreygnO2VmOqzoCxcbiAqIOujqO2KuCDsl5Tti7Dti7DsnZgg6rK97JqwIOuUlOugie2GoOumrCDsoITssrTsmYAg7YOA6rKfIOuUlOugie2GoOumrOulvCDsgq3soJztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxFbnRpdHkoZW50aXR5SWQ6IHN0cmluZyk6IFByb21pc2U8eyBkZWxQYXRoczogc3RyaW5nW10gfT4ge1xuICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgY29uc3QgZGVsUGF0aHMgPSAoKCkgPT4ge1xuICAgIGlmIChlbnRpdHkucGFyZW50SWQpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIGAke1NvbmFtdS5hcGlSb290UGF0aH0vc3JjL2FwcGxpY2F0aW9uLyR7ZW50aXR5Lm5hbWVzLnBhcmVudEZzfS8ke2VudGl0eS5uYW1lcy5mc30uZW50aXR5Lmpzb25gLFxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYCR7U29uYW11LmFwaVJvb3RQYXRofS9zcmMvYXBwbGljYXRpb24vJHtlbnRpdHkubmFtZXMuZnN9YCxcbiAgICAgICAgYCR7U29uYW11LmFwaVJvb3RQYXRofS9kaXN0L2FwcGxpY2F0aW9uLyR7ZW50aXR5Lm5hbWVzLmZzfWAsXG4gICAgICAgIC4uLlNvbmFtdS5jb25maWcuc3luYy50YXJnZXRzLmZsYXRNYXAoKHRhcmdldCkgPT4gW1xuICAgICAgICAgIGAke1NvbmFtdS5hcHBSb290UGF0aH0vJHt0YXJnZXR9L3NyYy9zZXJ2aWNlcy8ke2VudGl0eS5uYW1lcy5mc31gLFxuICAgICAgICBdKSxcbiAgICAgIF07XG4gICAgfVxuICB9KSgpOyAvLyBpaWZlXG5cbiAgZm9yIChjb25zdCBkZWxQYXRoIG9mIGRlbFBhdGhzKSB7XG4gICAgaWYgKGF3YWl0IHN5bmNlckZpbGVFeGlzdHMoZGVsUGF0aCkpIHtcbiAgICAgICFpc1Rlc3QoKSAmJiBjb25zb2xlLmxvZyhjaGFsay5yZWQoYERFTEVURSAke2RlbFBhdGh9YCkpO1xuICAgICAgYXdhaXQgc3luY2VyRmlsZXN5c3RlbS5ybShkZWxQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICFpc1Rlc3QoKSAmJiBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYE5PVF9FWElTVFMgJHtkZWxQYXRofWApKTtcbiAgICB9XG4gIH1cblxuICAvLyByZWxvYWQgZW50aXRpZXNcbiAgYXdhaXQgRW50aXR5TWFuYWdlci5yZWxvYWQoKTtcblxuICByZXR1cm4geyBkZWxQYXRocyB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQWVBLGVBQXNCLGFBQ3BCLE1BQ0E7Q0FDQSxJQUFJLENBQUMsc0JBQXNCLEtBQUssS0FBSyxRQUFRLEdBQzNDLE1BQU0sSUFBSSxvQkFBb0IsR0FBRyxnQ0FBZ0MsQ0FBQztDQUdwRSxNQUFNLGlCQUFpQixVQUFVLElBQUk7Q0FHckMsTUFBTSxjQUFjLE9BQU87QUFDN0I7Ozs7OztBQU9BLGVBQXNCLFVBQVUsVUFBbUQ7Q0FDakYsTUFBTSxTQUFTLGNBQWMsSUFBSSxRQUFRO0NBRXpDLE1BQU0sa0JBQWtCO0VBQ3RCLElBQUksT0FBTyxVQUNULE9BQU8sQ0FDTCxHQUFHLE9BQU8sWUFBWSxtQkFBbUIsT0FBTyxNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sR0FBRyxhQUNwRjtPQUVBLE9BQU87R0FDTCxHQUFHLE9BQU8sWUFBWSxtQkFBbUIsT0FBTyxNQUFNO0dBQ3RELEdBQUcsT0FBTyxZQUFZLG9CQUFvQixPQUFPLE1BQU07R0FDdkQsR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLFNBQVMsV0FBVyxDQUNoRCxHQUFHLE9BQU8sWUFBWSxHQUFHLE9BQU8sZ0JBQWdCLE9BQU8sTUFBTSxJQUMvRCxDQUFDO0VBQ0g7Q0FFSixFQUFBLENBQUc7Q0FFSCxLQUFLLE1BQU0sV0FBVyxVQUNwQixJQUFJLE1BQU0saUJBQWlCLE9BQU8sR0FBRztFQUNuQyxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLFVBQVUsU0FBUyxDQUFDO0VBQ3ZELE1BQU0saUJBQWlCLEdBQUcsU0FBUztHQUFFLFdBQVc7R0FBTSxPQUFPO0VBQUssQ0FBQztDQUNyRSxPQUNFLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxNQUFNLE9BQU8sY0FBYyxTQUFTLENBQUM7Q0FLbEUsTUFBTSxjQUFjLE9BQU87Q0FFM0IsT0FBTyxFQUFFLFNBQVM7QUFDcEI7O2FBL0RzQztTQUNQO3FCQUN5QjtvQkFDUztpQkFFckI7cUJBQ087OEJBQzJCIn0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Syncer 파일시스템 경계를 통해 파일을 복사하고 클라이언트용 import 경로를 변환합니다.
3
+ */
4
+ export declare function copyFileWithReplaceCoreToShared(fromPath: string, toPath: string, syncHeader?: string): Promise<boolean>;
5
+ //# sourceMappingURL=file-copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-copy.d.ts","sourceRoot":"","sources":["../../src/syncer/file-copy.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,+BAA+B,CACnD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAqBlB"}
@@ -0,0 +1,36 @@
1
+ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
+ import { formatCode, init_formatter } from "../utils/formatter.js";
3
+ import { init_filesystem_dependencies, syncerFileExists, syncerFilesystem } from "./filesystem-dependencies.js";
4
+ import path, { dirname } from "node:path";
5
+ //#region src/syncer/file-copy.ts
6
+ /**
7
+ * Syncer 파일시스템 경계를 통해 파일을 복사하고 클라이언트용 import 경로를 변환합니다.
8
+ */
9
+ async function copyFileWithReplaceCoreToShared(fromPath, toPath, syncHeader) {
10
+ if (!await syncerFileExists(fromPath)) return false;
11
+ let newFileContent = replaceCoreImport(await syncerFilesystem.readFile(fromPath, "utf-8"), toPath);
12
+ if (syncHeader) {
13
+ const generatedBlockRegex = /\/\*\*\r?\n \* @generated\r?\n[\s\S]*?\*\/\r?\n(\r?\n)*/;
14
+ newFileContent = generatedBlockRegex.test(newFileContent) ? newFileContent.replace(generatedBlockRegex, `${syncHeader}\n\n`) : `${syncHeader}\n\n${newFileContent}`;
15
+ }
16
+ if (toPath.endsWith(".ts") || toPath.endsWith(".tsx")) newFileContent = await formatCode(newFileContent, toPath);
17
+ await syncerFilesystem.writeFile(toPath, newFileContent);
18
+ return true;
19
+ }
20
+ function replaceCoreImport(source, toPath) {
21
+ const srcMatch = toPath.match(/^(.+\/src)\//);
22
+ if (!srcMatch) return source;
23
+ const servicesDir = path.join(srcMatch[1], "services");
24
+ const relativePath = path.relative(dirname(toPath), servicesDir);
25
+ const sharedPath = relativePath === "" ? "./sonamu.shared" : `${relativePath}/sonamu.shared`;
26
+ return source.replace(/from "sonamu(\/dict)?"/g, `from "${sharedPath}"`);
27
+ }
28
+ var init_file_copy = __esmMin((() => {
29
+ init_formatter();
30
+ init_filesystem_dependencies();
31
+ }));
32
+ //#endregion
33
+ init_file_copy();
34
+ export { copyFileWithReplaceCoreToShared, init_file_copy };
35
+
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1jb3B5LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvZmlsZS1jb3B5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoLCB7IGRpcm5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLyoqXG4gKiBTeW5jZXIg7YyM7J287Iuc7Iqk7YWcIOqyveqzhOulvCDthrXtlbQg7YyM7J287J2EIOuzteyCrO2VmOqzoCDtgbTrnbzsnbTslrjtirjsmqkgaW1wb3J0IOqyveuhnOulvCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkKFxuICBmcm9tUGF0aDogc3RyaW5nLFxuICB0b1BhdGg6IHN0cmluZyxcbiAgc3luY0hlYWRlcj86IHN0cmluZyxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGZyb21QYXRoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvbGRGaWxlQ29udGVudCA9IGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ucmVhZEZpbGUoZnJvbVBhdGgsIFwidXRmLThcIik7XG4gIGxldCBuZXdGaWxlQ29udGVudCA9IHJlcGxhY2VDb3JlSW1wb3J0KG9sZEZpbGVDb250ZW50LCB0b1BhdGgpO1xuXG4gIGlmIChzeW5jSGVhZGVyKSB7XG4gICAgY29uc3QgZ2VuZXJhdGVkQmxvY2tSZWdleCA9IC9cXC9cXCpcXCpcXHI/XFxuIFxcKiBAZ2VuZXJhdGVkXFxyP1xcbltcXHNcXFNdKj9cXCpcXC9cXHI/XFxuKFxccj9cXG4pKi87XG4gICAgbmV3RmlsZUNvbnRlbnQgPSBnZW5lcmF0ZWRCbG9ja1JlZ2V4LnRlc3QobmV3RmlsZUNvbnRlbnQpXG4gICAgICA/IG5ld0ZpbGVDb250ZW50LnJlcGxhY2UoZ2VuZXJhdGVkQmxvY2tSZWdleCwgYCR7c3luY0hlYWRlcn1cXG5cXG5gKVxuICAgICAgOiBgJHtzeW5jSGVhZGVyfVxcblxcbiR7bmV3RmlsZUNvbnRlbnR9YDtcbiAgfVxuXG4gIGlmICh0b1BhdGguZW5kc1dpdGgoXCIudHNcIikgfHwgdG9QYXRoLmVuZHNXaXRoKFwiLnRzeFwiKSkge1xuICAgIG5ld0ZpbGVDb250ZW50ID0gYXdhaXQgZm9ybWF0Q29kZShuZXdGaWxlQ29udGVudCwgdG9QYXRoKTtcbiAgfVxuXG4gIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ud3JpdGVGaWxlKHRvUGF0aCwgbmV3RmlsZUNvbnRlbnQpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUNvcmVJbXBvcnQoc291cmNlOiBzdHJpbmcsIHRvUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc3JjTWF0Y2ggPSB0b1BhdGgubWF0Y2goL14oLitcXC9zcmMpXFwvLyk7XG4gIGlmICghc3JjTWF0Y2gpIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgY29uc3Qgc2VydmljZXNEaXIgPSBwYXRoLmpvaW4oc3JjTWF0Y2hbMV0sIFwic2VydmljZXNcIik7XG4gIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUoZGlybmFtZSh0b1BhdGgpLCBzZXJ2aWNlc0Rpcik7XG4gIGNvbnN0IHNoYXJlZFBhdGggPSByZWxhdGl2ZVBhdGggPT09IFwiXCIgPyBcIi4vc29uYW11LnNoYXJlZFwiIDogYCR7cmVsYXRpdmVQYXRofS9zb25hbXUuc2hhcmVkYDtcbiAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKC9mcm9tIFwic29uYW11KFxcL2RpY3QpP1wiL2csIGBmcm9tIFwiJHtzaGFyZWRQYXRofVwiYCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsZUFBc0IsZ0NBQ3BCLFVBQ0EsUUFDQSxZQUNrQjtDQUNsQixJQUFJLENBQUUsTUFBTSxpQkFBaUIsUUFBUSxHQUNuQyxPQUFPO0NBSVQsSUFBSSxpQkFBaUIsa0JBQWtCLE1BRFYsaUJBQWlCLFNBQVMsVUFBVSxPQUFPLEdBQ2pCLE1BQU07Q0FFN0QsSUFBSSxZQUFZO0VBQ2QsTUFBTSxzQkFBc0I7RUFDNUIsaUJBQWlCLG9CQUFvQixLQUFLLGNBQWMsSUFDcEQsZUFBZSxRQUFRLHFCQUFxQixHQUFHLFdBQVcsS0FBSyxJQUMvRCxHQUFHLFdBQVcsTUFBTTtDQUMxQjtDQUVBLElBQUksT0FBTyxTQUFTLEtBQUssS0FBSyxPQUFPLFNBQVMsTUFBTSxHQUNsRCxpQkFBaUIsTUFBTSxXQUFXLGdCQUFnQixNQUFNO0NBRzFELE1BQU0saUJBQWlCLFVBQVUsUUFBUSxjQUFjO0NBQ3ZELE9BQU87QUFDVDtBQUVBLFNBQVMsa0JBQWtCLFFBQWdCLFFBQXdCO0NBQ2pFLE1BQU0sV0FBVyxPQUFPLE1BQU0sY0FBYztDQUM1QyxJQUFJLENBQUMsVUFDSCxPQUFPO0NBR1QsTUFBTSxjQUFjLEtBQUssS0FBSyxTQUFTLElBQUksVUFBVTtDQUNyRCxNQUFNLGVBQWUsS0FBSyxTQUFTLFFBQVEsTUFBTSxHQUFHLFdBQVc7Q0FDL0QsTUFBTSxhQUFhLGlCQUFpQixLQUFLLG9CQUFvQixHQUFHLGFBQWE7Q0FDN0UsT0FBTyxPQUFPLFFBQVEsMkJBQTJCLFNBQVMsV0FBVyxFQUFFO0FBQ3pFOztnQkEzQytDOzhCQUMrQiJ9
@@ -32,6 +32,7 @@ export declare function getChecksumPatternGroup(): {
32
32
  types: `${string}/src/${string}` | `${string}/dist/${string}`;
33
33
  workflow: `${string}/src/${string}` | `${string}/dist/${string}`;
34
34
  i18n: `${string}/src/${string}` | `${string}/dist/${string}`;
35
+ httpValidatorsGenerated: `${string}/src/${string}` | `${string}/dist/${string}`;
35
36
  generated: `${string}/src/${string}` | `${string}/dist/${string}`;
36
37
  generatedCopied: `${string}/src/${string}` | `${string}/dist/${string}`;
37
38
  httpGenerated: `${string}/src/${string}` | `${string}/dist/${string}`;
@@ -1 +1 @@
1
- {"version":3,"file":"file-patterns.d.ts","sourceRoot":"","sources":["../../src/syncer/file-patterns.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,uBAAuB;;;;;;;;;;;;;;;;;EAsCtC;AAyBD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,eAAe,GAAG,YAAY,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,YAAY,UAAsE,CAAC;AAEhG;;;;GAIG;AACH,wBAAgB,qCAAqC,IAAI,WAAW,CAAC,YAAY,CAAC,CAQjF"}
1
+ {"version":3,"file":"file-patterns.d.ts","sourceRoot":"","sources":["../../src/syncer/file-patterns.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,uBAAuB;;;;;;;;;;;;;;;;;;EAuCtC;AA2BD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,eAAe,GAAG,YAAY,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAExF;;;GAGG;AACH,eAAO,MAAM,YAAY,UAAsE,CAAC;AAEhG;;;;GAIG;AACH,wBAAgB,qCAAqC,IAAI,WAAW,CAAC,YAAY,CAAC,CAQjF"}
@@ -37,6 +37,7 @@ function getChecksumPatternGroup() {
37
37
  types: api("src/application/**/*.types.ts"),
38
38
  workflow: api("src/application/**/*.workflow.ts"),
39
39
  i18n: api("src/i18n/**/!(sd.generated).ts"),
40
+ httpValidatorsGenerated: api("src/application/**/sonamu.validators.generated.ts"),
40
41
  generated: api("src/application/**/*.generated.{ts,tsx,sso.ts}"),
41
42
  generatedCopied: targets("src/services/**/sonamu.generated.{ts,tsx}"),
42
43
  httpGenerated: api("src/application/**/*.generated.http"),
@@ -47,6 +48,9 @@ function getChecksumPatternGroup() {
47
48
  i18nCopied: targets("src/i18n/**/!(sd.generated).ts")
48
49
  };
49
50
  }
51
+ function braceJoin(dirs) {
52
+ return dirs.length === 1 ? dirs[0] : `{${dirs.join(",")}}`;
53
+ }
50
54
  /**
51
55
  * 위치 카테고리별 글롭 빌더를 만들어 반환합니다.
52
56
  * - api(rest): api 디렉토리에 한정
@@ -56,7 +60,6 @@ function getChecksumPatternGroup() {
56
60
  function globBuilders() {
57
61
  const apiDir = Sonamu.config.api.dir;
58
62
  const targetDirs = Sonamu.config.sync.targets;
59
- const braceJoin = (dirs) => dirs.length === 1 ? dirs[0] : `{${dirs.join(",")}}`;
60
63
  return {
61
64
  api: (pathFromApi) => `${apiDir}/${pathFromApi}`,
62
65
  targets: (pathFromTarget) => `${braceJoin(targetDirs)}/${pathFromTarget}`,
@@ -86,4 +89,4 @@ var init_file_patterns = __esmMin((() => {
86
89
  init_file_patterns();
87
90
  export { GLOB_EXCLUDE, getChecksumPatternGroup, getChecksumPatternGroupInAbsolutePath, init_file_patterns };
88
91
 
89
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wYXR0ZXJucy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtcGF0dGVybnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoLCB0eXBlIEFwcFJlbGF0aXZlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbi8qKlxuICogU3luY2Vy6rCAIOq0gOyLrCDqsIDsp4Dqs6Ag7KeA7Lyc67O064qUIO2MjOydvOuTpOyeheuLiOuLpC5cbiAqIOydtCDtjIzsnbzrk6Tsl5Ag67OA6rK97J20IOyDneq4sOuptCDstpTqsIDsoIHsnbgg7J6R7JeFKOydtO2VmCBcIuyLse2BrFwiIOuYkOuKlCBcIuyLse2BrCDslaHshZhcIinsnYQg7IiY7ZaJ7ZWp64uI64ukLlxuICog7J20IOyekeyXheydtOudvCDtlajsnYAg7YyM7J28IOuzteyCrCDrmJDripQg7YWc7ZSM66a/IOugjOuNlOungeydhCDthrXtlZwgY29kZSBnZW5lcmF0aW9u7J2EIOydmOuvuO2VqeuLiOuLpC5cbiAqXG4gKiDqsr3roZwg7ZiV7IudOiBhcHBSb290IOq4sOykgCDsg4HrjIAg6rK966GcICh0YXJnZXQg65SU66CJ7Yag66as66GcIOyLnOyekSwg7JiIOiBcImFwaS9zcmMvLi4uXCIsIFwid2ViL3NyYy8uLi5cIilcbiAqIOyCrOyaqTogZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgp66GcIOygiOuMgCDqsr3roZwg67OA7ZmYIO2bhCBnbG9iIOyCrOyaqVxuICpcbiAqIOuRkCDqsIDsp4Ag7J2Y66+47KCBIOyYgeyXrTpcbiAqIC0g7J6F66ClICjsgqzsmqnsnpAg7J6R7ISxKTogYXBpIOuUlOugie2GoOumrOyXkOunjCDsnITsuZguIOyCrOyaqeyekOqwgCDsp4HsoJEg7Y647KeRLlxuICogLSDstpzroKUgKHNvbmFtdSDsg53shLEv67O17IKsKTogYXBpIOuYkOuKlCB0YXJnZXQg65SU66CJ7Yag66as7JeQIHNvbmFtdeqwgCDrp4zrk6TslrTrgrTripQg7YyM7J28LlxuICpcbiAqIOy2lOyggSDrsJYg7J6Q7IKwICjrtoDtirjsiqTtirjrnqkgcGhhc2Xsl5DshJwg66ek67KIIOuztOyepSk6XG4gKiAtIHNvbmFtdS5zaGFyZWQudHM6IOyCrOyaqeyekOqwgCDsu6TsiqTthLDrp4jsnbTspojtlZjripQg7J6Q7IKwLiBJZk5vdEV4aXN0c+uhnCAx7ZqMIOyDneyEsSDtm4Qg7IaQ64yA7KeAIOyViuydjC5cbiAqIC0gZW50cnktc2VydmVyLmdlbmVyYXRlZC50c3g6IOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5wuIOunpOuyiCBvdmVyd3JpdGUgZ2VuZXJhdGUuXG4gKlxuICog7JyEIOuRmOydgCBzeW5jKCnsnZgg67aA7Yq47Iqk7Yq4656pIHBoYXNl7JeQ7IScIOuzgOqyvSDqsoDstpwg7IKs7J207YG06rO8IOustOq0gO2VmOqyjCDrs7TsnqXrkKnri4jri6QuXG4gKiDstpTsoIEg7IKs7J207YG0IOyViOyXkOyEnCDtlaAg7JWh7IWY7J20IOyXhuuKlCDsnpDsgrDsnbTrnbwg7Yyo7YS0IOq3uOujueyXkCDtj6ztlajrkJjsp4Ag7JWK7Iq164uI64ukLlxuICpcbiAqIOychOy5mCDsubTthYzqs6DrpqzripQgYXBpL3RhcmdldHMvYW55d2hlcmUg7Zes7Y2866GcIOuqheyLnOyggeycvOuhnCDtkZztmITtlanri4jri6QuXG4gKlxuICogRmlsZVR5cGXsnYAg7J20IO2VqOyImOydmCDrsJjtmZgg7YOA7J6F7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuIO2CpCDstpTqsIAg7IucIOuzhOuPhCBlbnVtL+uwsOyXtOydhFxuICog64+Z6riw7ZmU7ZWgIO2VhOyalCDsl4bsnbQg7Jes6riwIO2VnCDqtbDrjbDrp4wg7IiY7KCV7ZWY66m0IOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwKCkge1xuICAvLyDtl6ztjbwg7ZWo7IiY65OkIOunjOuTpOyWtOyEnCDqsIDsoLjsmLXri4jri6QuXG4gIGNvbnN0IHsgYXBpLCB0YXJnZXRzLCBhbnl3aGVyZSB9ID0gZ2xvYkJ1aWxkZXJzKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTb25hbXUg7J6F7J6l7JeQ7IScIHNvcnVjZeqwgCDrkJjripQg7YyM7J2865Ok7J6F64uI64ukLlxuICAgIC8vIOydtCDsuZzqtazrk6TsnbQg67OA6rK965CY66m0IOydtOuTpOuhnOu2gO2EsCDslaHshZjsnYQg7IiY7ZaJ7ZWY6rOgIO2MjOydvOydhCDsg53shLHtlanri4jri6QuXG4gICAgLy8g66qo64W466as7Y+s7JeQ7IScIOydtCBzb3VyY2Xrk6TsnYAgYXBpIO2UhOuhnOygne2KuOyXkCDtlZzsoJXrkJjrr4DroZwsIGFwaeyXkCDsnojripQg7Lmc6rWs65Ok66eMIOumrOyKpO2Mhe2VqeuLiOuLpC5cbiAgICBjb25maWc6IGFwaShcInNyYy9zb25hbXUuY29uZmlnLnRzXCIpLFxuICAgIGVudGl0eTogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZW50aXR5Lmpzb25cIiksXG4gICAgZnJhbWU6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmZyYW1lLnRzXCIpLFxuICAgIGZ1bmN0aW9uczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZnVuY3Rpb25zLnRzXCIpLFxuICAgIG1vZGVsOiBhcGkoXCJzcmMvYXBwbGljYXRpb24vKiovKi5tb2RlbC50c1wiKSxcbiAgICB0eXBlczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoudHlwZXMudHNcIiksXG4gICAgd29ya2Zsb3c6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICAgIGkxOG46IGFwaShcInNyYy9pMThuLyoqLyEoc2QuZ2VuZXJhdGVkKS50c1wiKSxcblxuICAgIC8vIFNvbmFtdeqwgCDstpzroKXtlZjripQg7IOd7ISxIO2MjOydvOuTpOyeheuLiOuLpC5cbiAgICAvLyDsnbQg7Lmc6rWs65Ok64+EIOygle2VqeyEsSDqsoDspp0g7LCo7JuQ7JeQ7IScIHNvbmFtdS5sb2Nr7JeQIOq4sOuhne2VtOyVvCDtlZjqs6AsXG4gICAgLy8g65iQ7ZWcIOuzgOqyveyLnCDqt7gg7IKs7Iuk7J2EIHN5bmNlcuqwgCDslYzquLDripQg7ZW07JW8IO2VqeuLiOuLpCjruYTroZ0g67OE64uk66W4IOyymOumrOqwgCDsl4bripQg6rK97Jqw64+EIOyeiOyngOunjCkuXG4gICAgLy9cbiAgICAvLyDsnpDsgrAg67O47ISx7JeQIOuUsOudvCDsnITsuZgg7Lm07YWM6rOg66as6rCAIOuLpOultOq4sCDrlYzrrLjsl5AsIOuzuOyEseuzhOuhnCDrtoTrpqztlbTshJwg7ZGc6riw7ZWp64uI64ukLlxuICAgIC8vIC0g7JaR7Kq9Le2VhOyalCDsnpDsgrA6IGFwaeyXkCDsoJXrs7jsnbQg66eM65Ok7Ja07KeEIOuSpCB0YXJnZXTsl5Ag67O17IKs65CoIChzb25hbXUuZ2VuZXJhdGVkLnt0cyx0c3h9KS5cbiAgICAvLyAtIGFwaSDsoITsmqkg7J6Q7IKwOiBhcGnsl5Drp4wg66eM65Ok7Ja07KeQIChzb25hbXUuZ2VuZXJhdGVkLmh0dHAsIHF1ZXJpZXMuZ2VuZXJhdGVkLnRzKS5cbiAgICAvLyAtIHRhcmdldCDsoITsmqkg7J6Q7IKwOiB0YXJnZXTsl5Drp4wg66eM65Ok7Ja07KeQIChzZXJ2aWNlcy5nZW5lcmF0ZWQudHPripQgc2VydmljZXMudGVtcGxhdGXsnZggOnRhcmdldCDrtoTrsLApLlxuICAgIC8vXG4gICAgLy8g7Jes6riw7JeQ64qUIFNvbmFtdeydmCDrqqjrk6Agc3luYyDsgrDstpzrrLzsnbQg7J6I64qUIOqyg+ydgCDslYTri5nri4jri6QuXG4gICAgLy8gc29uYW11LnNoYXJlZC50c+yZgCBlbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeOyZgCDqsJnsnYBcbiAgICAvLyBzeW5jIOy0iOuwmCAx7ZqM7ISxIOu2gO2KuOyKpO2KuOueqSDtjIzsnbzrk6TsnYAg6rSA66asIOyViCDtlZjquLAg65WM66y47JeQIOyXrOq4sOyXkCDrpqzsiqTtjIXrj4Qg7JWIIO2VqeuLiOuLpC5cbiAgICBnZW5lcmF0ZWQ6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmdlbmVyYXRlZC57dHMsdHN4LHNzby50c31cIiksXG4gICAgZ2VuZXJhdGVkQ29waWVkOiB0YXJnZXRzKFwic3JjL3NlcnZpY2VzLyoqL3NvbmFtdS5nZW5lcmF0ZWQue3RzLHRzeH1cIiksXG4gICAgaHR0cEdlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLmh0dHBcIiksXG4gICAgc2VydmljZXNHZW5lcmF0ZWQ6IHRhcmdldHMoXCJzcmMvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkLnRzXCIpLFxuICAgIHNkR2VuZXJhdGVkOiBhbnl3aGVyZShcInNyYy9pMThuLyoqL3NkLmdlbmVyYXRlZC50c1wiKSxcbiAgICB0eXBlc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLnR5cGVzLnRzXCIpLFxuICAgIGZ1bmN0aW9uc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLmZ1bmN0aW9ucy50c1wiKSxcbiAgICBpMThuQ29waWVkOiB0YXJnZXRzKFwic3JjL2kxOG4vKiovIShzZC5nZW5lcmF0ZWQpLnRzXCIpLFxuICB9IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBBcHBSZWxhdGl2ZVBhdGg+O1xufVxuXG4vKipcbiAqIOychOy5mCDsubTthYzqs6Drpqzrs4Qg6riA66GtIOu5jOuNlOulvCDrp4zrk6TslrQg67CY7ZmY7ZWp64uI64ukLlxuICogLSBhcGkocmVzdCk6IGFwaSDrlJTroInthqDrpqzsl5Ag7ZWc7KCVXG4gKiAtIHRhcmdldHMocmVzdCk6IHRhcmdldCDrlJTroInthqDrpqzrk6Tsl5Ag7ZWc7KCVICh3ZWIsIGFwcCDrk7EpXG4gKiAtIGFueXdoZXJlKHJlc3QpOiBhcGnsmYAgdGFyZ2V0IOuqqOuRkFxuICovXG5mdW5jdGlvbiBnbG9iQnVpbGRlcnMoKSB7XG4gIGNvbnN0IGFwaURpciA9IFNvbmFtdS5jb25maWcuYXBpLmRpcjtcbiAgY29uc3QgdGFyZ2V0RGlycyA9IFNvbmFtdS5jb25maWcuc3luYy50YXJnZXRzO1xuXG4gIC8vIE5vZGUg64K07J6lIGZzLmdsb2LsnZggYnJhY2UgZXhwYW5zaW9u7J2AIOuLqOydvCDrqaTrsoQge3h966W8IO2SgOyngCDslYrsnLzrr4DroZwsIOuppOuyhOqwgCAx6rCc7J28IOuVjOuKlCBhbHRlcm5hdGlvbiDsl4bsnbQg7KeB7KCRIOqysO2Vqe2VqeuLiOuLpC5cbiAgY29uc3QgYnJhY2VKb2luID0gKGRpcnM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PlxuICAgIGRpcnMubGVuZ3RoID09PSAxID8gZGlyc1swXSA6IGB7JHtkaXJzLmpvaW4oXCIsXCIpfX1gO1xuXG4gIHJldHVybiB7XG4gICAgYXBpOiAocGF0aEZyb21BcGk6IHN0cmluZykgPT4gYCR7YXBpRGlyfS8ke3BhdGhGcm9tQXBpfWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICAgIHRhcmdldHM6IChwYXRoRnJvbVRhcmdldDogc3RyaW5nKSA9PlxuICAgICAgYCR7YnJhY2VKb2luKHRhcmdldERpcnMpfS8ke3BhdGhGcm9tVGFyZ2V0fWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICAgIGFueXdoZXJlOiAocGF0aEZyb21Bbnl3aGVyZTogc3RyaW5nKSA9PlxuICAgICAgYCR7YnJhY2VKb2luKFthcGlEaXIsIC4uLnRhcmdldERpcnNdKX0vJHtwYXRoRnJvbUFueXdoZXJlfWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICB9O1xufVxuXG4vKipcbiAqIEZpbGVUeXBl7J2AIGdldENoZWNrc3VtUGF0dGVybkdyb3Vw7J2YIOuwmO2ZmCDqsJ3ssrQg7YKk7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuXG4gKiDrs4Trj4Qg67Cw7Je0L2VudW0g64+Z6riw7ZmUIOu2iO2VhOyalCDigJQg7Yyo7YS0IOq3uOujuSDtlajsiJjqsIAg7KeE7Iuk7J2YIOuLqOydvCDsm5DsspwuXG4gKi9cbmV4cG9ydCB0eXBlIEZpbGVUeXBlID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXA+O1xuZXhwb3J0IHR5cGUgR2xvYlBhdHRlcm48VCBleHRlbmRzIEFwcFJlbGF0aXZlUGF0aCB8IEFic29sdXRlUGF0aD4gPSBSZWNvcmQ8RmlsZVR5cGUsIFQ+O1xuXG4vKipcbiAqIOu5jOuTnCDsgrDstpzrrLwg65SU66CJ7Yag66as64qUIGFsdGVybmF0aW9uIOq4gOuhreydtCDsnZjrj4TsuZgg7JWK6rKMIO2cmOunkOumtCDsiJgg7J6I7Jy866+A66GcIOyViOyghOunneycvOuhnCDsoJzsmbguXG4gKiBOb2RlIOuCtOyepSBmcy5nbG9i7J2YIGV4Y2x1ZGUg7Ji17IWY6rO8IO2VqOq7mCDsgqzsmqntlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCBHTE9CX0VYQ0xVREUgPSBbXCIqKi9ub2RlX21vZHVsZXMvKipcIiwgXCIqKi9kaXN0LyoqXCIsIFwiKiovYnVpbGQvKipcIiwgXCIqKi8udHVyYm8vKipcIl07XG5cbi8qKlxuICogYXBwUm9vdCDquLDspIAg7IOB64yAIOqyveuhnCDtjKjthLTsnYQg7KCI64yAIOqyveuhnCDtjKjthLTsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICpcbiAqIEByZXR1cm5zIOygiOuMgCDqsr3roZwg6riw67CYIEdsb2Ig7Yyo7YS0IOuntVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgpOiBHbG9iUGF0dGVybjxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgZ3JvdXAgPSBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cCgpO1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGdyb3VwKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAga2V5LFxuICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdmFsdWUpLCAvLyBhcHBSb290IOyDgeuMgCDqsr3roZwg4oaSIOygiOuMgCDqsr3roZxcbiAgICBdKSxcbiAgKSBhcyBHbG9iUGF0dGVybjxBYnNvbHV0ZVBhdGg+O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLFNBQWdCLDBCQUEwQjtDQUV4QyxNQUFNLEVBQUUsS0FBSyxTQUFTLGFBQWEsYUFBYTtDQUVoRCxPQUFPO0VBSUwsUUFBUSxJQUFJLHNCQUFzQjtFQUNsQyxRQUFRLElBQUksa0NBQWtDO0VBQzlDLE9BQU8sSUFBSSwrQkFBK0I7RUFDMUMsV0FBVyxJQUFJLG1DQUFtQztFQUNsRCxPQUFPLElBQUksK0JBQStCO0VBQzFDLE9BQU8sSUFBSSwrQkFBK0I7RUFDMUMsVUFBVSxJQUFJLGtDQUFrQztFQUNoRCxNQUFNLElBQUksZ0NBQWdDO0VBYzFDLFdBQVcsSUFBSSxnREFBZ0Q7RUFDL0QsaUJBQWlCLFFBQVEsMkNBQTJDO0VBQ3BFLGVBQWUsSUFBSSxxQ0FBcUM7RUFDeEQsbUJBQW1CLFFBQVEsb0NBQW9DO0VBQy9ELGFBQWEsU0FBUyw2QkFBNkI7RUFDbkQsYUFBYSxRQUFRLDRCQUE0QjtFQUNqRCxpQkFBaUIsUUFBUSxnQ0FBZ0M7RUFDekQsWUFBWSxRQUFRLGdDQUFnQztDQUN0RDtBQUNGOzs7Ozs7O0FBUUEsU0FBUyxlQUFlO0NBQ3RCLE1BQU0sU0FBUyxPQUFPLE9BQU8sSUFBSTtDQUNqQyxNQUFNLGFBQWEsT0FBTyxPQUFPLEtBQUs7Q0FHdEMsTUFBTSxhQUFhLFNBQ2pCLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7Q0FFbkQsT0FBTztFQUNMLE1BQU0sZ0JBQXdCLEdBQUcsT0FBTyxHQUFHO0VBQzNDLFVBQVUsbUJBQ1IsR0FBRyxVQUFVLFVBQVUsRUFBRSxHQUFHO0VBQzlCLFdBQVcscUJBQ1QsR0FBRyxVQUFVLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUc7Q0FDN0M7QUFDRjs7Ozs7O0FBb0JBLFNBQWdCLHdDQUFtRTtDQUNqRixNQUFNLFFBQVEsd0JBQXdCO0NBQ3RDLE9BQU8sT0FBTyxZQUNaLE9BQU8sUUFBUSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQzFDLEtBQ0EsS0FBSyxLQUFLLE9BQU8sYUFBYSxLQUFLLENBQ3JDLENBQUMsQ0FDSDtBQUNGOzs7YUFwSHNDO0NBcUd6QixlQUFlO0VBQUM7RUFBc0I7RUFBYztFQUFlO0NBQWMifQ==
92
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wYXR0ZXJucy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtcGF0dGVybnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoLCB0eXBlIEFwcFJlbGF0aXZlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbi8qKlxuICogU3luY2Vy6rCAIOq0gOyLrCDqsIDsp4Dqs6Ag7KeA7Lyc67O064qUIO2MjOydvOuTpOyeheuLiOuLpC5cbiAqIOydtCDtjIzsnbzrk6Tsl5Ag67OA6rK97J20IOyDneq4sOuptCDstpTqsIDsoIHsnbgg7J6R7JeFKOydtO2VmCBcIuyLse2BrFwiIOuYkOuKlCBcIuyLse2BrCDslaHshZhcIinsnYQg7IiY7ZaJ7ZWp64uI64ukLlxuICog7J20IOyekeyXheydtOudvCDtlajsnYAg7YyM7J28IOuzteyCrCDrmJDripQg7YWc7ZSM66a/IOugjOuNlOungeydhCDthrXtlZwgY29kZSBnZW5lcmF0aW9u7J2EIOydmOuvuO2VqeuLiOuLpC5cbiAqXG4gKiDqsr3roZwg7ZiV7IudOiBhcHBSb290IOq4sOykgCDsg4HrjIAg6rK966GcICh0YXJnZXQg65SU66CJ7Yag66as66GcIOyLnOyekSwg7JiIOiBcImFwaS9zcmMvLi4uXCIsIFwid2ViL3NyYy8uLi5cIilcbiAqIOyCrOyaqTogZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgp66GcIOygiOuMgCDqsr3roZwg67OA7ZmYIO2bhCBnbG9iIOyCrOyaqVxuICpcbiAqIOuRkCDqsIDsp4Ag7J2Y66+47KCBIOyYgeyXrTpcbiAqIC0g7J6F66ClICjsgqzsmqnsnpAg7J6R7ISxKTogYXBpIOuUlOugie2GoOumrOyXkOunjCDsnITsuZguIOyCrOyaqeyekOqwgCDsp4HsoJEg7Y647KeRLlxuICogLSDstpzroKUgKHNvbmFtdSDsg53shLEv67O17IKsKTogYXBpIOuYkOuKlCB0YXJnZXQg65SU66CJ7Yag66as7JeQIHNvbmFtdeqwgCDrp4zrk6TslrTrgrTripQg7YyM7J28LlxuICpcbiAqIOy2lOyggSDrsJYg7J6Q7IKwICjrtoDtirjsiqTtirjrnqkgcGhhc2Xsl5DshJwg66ek67KIIOuztOyepSk6XG4gKiAtIHNvbmFtdS5zaGFyZWQudHM6IOyCrOyaqeyekOqwgCDsu6TsiqTthLDrp4jsnbTspojtlZjripQg7J6Q7IKwLiBJZk5vdEV4aXN0c+uhnCAx7ZqMIOyDneyEsSDtm4Qg7IaQ64yA7KeAIOyViuydjC5cbiAqIC0gZW50cnktc2VydmVyLmdlbmVyYXRlZC50c3g6IOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5wuIOunpOuyiCBvdmVyd3JpdGUgZ2VuZXJhdGUuXG4gKlxuICog7JyEIOuRmOydgCBzeW5jKCnsnZgg67aA7Yq47Iqk7Yq4656pIHBoYXNl7JeQ7IScIOuzgOqyvSDqsoDstpwg7IKs7J207YG06rO8IOustOq0gO2VmOqyjCDrs7TsnqXrkKnri4jri6QuXG4gKiDstpTsoIEg7IKs7J207YG0IOyViOyXkOyEnCDtlaAg7JWh7IWY7J20IOyXhuuKlCDsnpDsgrDsnbTrnbwg7Yyo7YS0IOq3uOujueyXkCDtj6ztlajrkJjsp4Ag7JWK7Iq164uI64ukLlxuICpcbiAqIOychOy5mCDsubTthYzqs6DrpqzripQgYXBpL3RhcmdldHMvYW55d2hlcmUg7Zes7Y2866GcIOuqheyLnOyggeycvOuhnCDtkZztmITtlanri4jri6QuXG4gKlxuICogRmlsZVR5cGXsnYAg7J20IO2VqOyImOydmCDrsJjtmZgg7YOA7J6F7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuIO2CpCDstpTqsIAg7IucIOuzhOuPhCBlbnVtL+uwsOyXtOydhFxuICog64+Z6riw7ZmU7ZWgIO2VhOyalCDsl4bsnbQg7Jes6riwIO2VnCDqtbDrjbDrp4wg7IiY7KCV7ZWY66m0IOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwKCkge1xuICAvLyDtl6ztjbwg7ZWo7IiY65OkIOunjOuTpOyWtOyEnCDqsIDsoLjsmLXri4jri6QuXG4gIGNvbnN0IHsgYXBpLCB0YXJnZXRzLCBhbnl3aGVyZSB9ID0gZ2xvYkJ1aWxkZXJzKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTb25hbXUg7J6F7J6l7JeQ7IScIHNvcnVjZeqwgCDrkJjripQg7YyM7J2865Ok7J6F64uI64ukLlxuICAgIC8vIOydtCDsuZzqtazrk6TsnbQg67OA6rK965CY66m0IOydtOuTpOuhnOu2gO2EsCDslaHshZjsnYQg7IiY7ZaJ7ZWY6rOgIO2MjOydvOydhCDsg53shLHtlanri4jri6QuXG4gICAgLy8g66qo64W466as7Y+s7JeQ7IScIOydtCBzb3VyY2Xrk6TsnYAgYXBpIO2UhOuhnOygne2KuOyXkCDtlZzsoJXrkJjrr4DroZwsIGFwaeyXkCDsnojripQg7Lmc6rWs65Ok66eMIOumrOyKpO2Mhe2VqeuLiOuLpC5cbiAgICBjb25maWc6IGFwaShcInNyYy9zb25hbXUuY29uZmlnLnRzXCIpLFxuICAgIGVudGl0eTogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZW50aXR5Lmpzb25cIiksXG4gICAgZnJhbWU6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmZyYW1lLnRzXCIpLFxuICAgIGZ1bmN0aW9uczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZnVuY3Rpb25zLnRzXCIpLFxuICAgIG1vZGVsOiBhcGkoXCJzcmMvYXBwbGljYXRpb24vKiovKi5tb2RlbC50c1wiKSxcbiAgICB0eXBlczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoudHlwZXMudHNcIiksXG4gICAgd29ya2Zsb3c6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICAgIGkxOG46IGFwaShcInNyYy9pMThuLyoqLyEoc2QuZ2VuZXJhdGVkKS50c1wiKSxcblxuICAgIC8vIFNvbmFtdeqwgCDstpzroKXtlZjripQg7IOd7ISxIO2MjOydvOuTpOyeheuLiOuLpC5cbiAgICAvLyDsnbQg7Lmc6rWs65Ok64+EIOygle2VqeyEsSDqsoDspp0g7LCo7JuQ7JeQ7IScIHNvbmFtdS5sb2Nr7JeQIOq4sOuhne2VtOyVvCDtlZjqs6AsXG4gICAgLy8g65iQ7ZWcIOuzgOqyveyLnCDqt7gg7IKs7Iuk7J2EIHN5bmNlcuqwgCDslYzquLDripQg7ZW07JW8IO2VqeuLiOuLpCjruYTroZ0g67OE64uk66W4IOyymOumrOqwgCDsl4bripQg6rK97Jqw64+EIOyeiOyngOunjCkuXG4gICAgLy9cbiAgICAvLyDsnpDsgrAg67O47ISx7JeQIOuUsOudvCDsnITsuZgg7Lm07YWM6rOg66as6rCAIOuLpOultOq4sCDrlYzrrLjsl5AsIOuzuOyEseuzhOuhnCDrtoTrpqztlbTshJwg7ZGc6riw7ZWp64uI64ukLlxuICAgIC8vIC0g7JaR7Kq9Le2VhOyalCDsnpDsgrA6IGFwaeyXkCDsoJXrs7jsnbQg66eM65Ok7Ja07KeEIOuSpCB0YXJnZXTsl5Ag67O17IKs65CoIChzb25hbXUuZ2VuZXJhdGVkLnt0cyx0c3h9KS5cbiAgICAvLyAtIGFwaSDsoITsmqkg7J6Q7IKwOiBhcGnsl5Drp4wg66eM65Ok7Ja07KeQIChzb25hbXUuZ2VuZXJhdGVkLmh0dHAsIHF1ZXJpZXMuZ2VuZXJhdGVkLnRzKS5cbiAgICAvLyAtIHRhcmdldCDsoITsmqkg7J6Q7IKwOiB0YXJnZXTsl5Drp4wg66eM65Ok7Ja07KeQIChzZXJ2aWNlcy5nZW5lcmF0ZWQudHPripQgc2VydmljZXMudGVtcGxhdGXsnZggOnRhcmdldCDrtoTrsLApLlxuICAgIC8vXG4gICAgLy8g7Jes6riw7JeQ64qUIFNvbmFtdeydmCDrqqjrk6Agc3luYyDsgrDstpzrrLzsnbQg7J6I64qUIOqyg+ydgCDslYTri5nri4jri6QuXG4gICAgLy8gc29uYW11LnNoYXJlZC50c+yZgCBlbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeOyZgCDqsJnsnYBcbiAgICAvLyBzeW5jIOy0iOuwmCAx7ZqM7ISxIOu2gO2KuOyKpO2KuOueqSDtjIzsnbzrk6TsnYAg6rSA66asIOyViCDtlZjquLAg65WM66y47JeQIOyXrOq4sOyXkCDrpqzsiqTtjIXrj4Qg7JWIIO2VqeuLiOuLpC5cbiAgICBodHRwVmFsaWRhdG9yc0dlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC50c1wiKSxcbiAgICBnZW5lcmF0ZWQ6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmdlbmVyYXRlZC57dHMsdHN4LHNzby50c31cIiksXG4gICAgZ2VuZXJhdGVkQ29waWVkOiB0YXJnZXRzKFwic3JjL3NlcnZpY2VzLyoqL3NvbmFtdS5nZW5lcmF0ZWQue3RzLHRzeH1cIiksXG4gICAgaHR0cEdlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLmh0dHBcIiksXG4gICAgc2VydmljZXNHZW5lcmF0ZWQ6IHRhcmdldHMoXCJzcmMvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkLnRzXCIpLFxuICAgIHNkR2VuZXJhdGVkOiBhbnl3aGVyZShcInNyYy9pMThuLyoqL3NkLmdlbmVyYXRlZC50c1wiKSxcbiAgICB0eXBlc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLnR5cGVzLnRzXCIpLFxuICAgIGZ1bmN0aW9uc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLmZ1bmN0aW9ucy50c1wiKSxcbiAgICBpMThuQ29waWVkOiB0YXJnZXRzKFwic3JjL2kxOG4vKiovIShzZC5nZW5lcmF0ZWQpLnRzXCIpLFxuICB9IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBBcHBSZWxhdGl2ZVBhdGg+O1xufVxuXG4vLyBOb2RlIOuCtOyepSBmcy5nbG9i7J2YIGJyYWNlIGV4cGFuc2lvbuydgCDri6jsnbwg66mk67KEIHt4feulvCDtkoDsp4Ag7JWK7Jy866+A66GcLCDrqaTrsoTqsIAgMeqwnOydvCDrlYzripQgYWx0ZXJuYXRpb24g7JeG7J20IOyngeygkSDqsrDtlantlanri4jri6QuXG5mdW5jdGlvbiBicmFjZUpvaW4oZGlyczogcmVhZG9ubHkgc3RyaW5nW10pIHtcbiAgcmV0dXJuIGRpcnMubGVuZ3RoID09PSAxID8gZGlyc1swXSA6IGB7JHtkaXJzLmpvaW4oXCIsXCIpfX1gO1xufVxuXG4vKipcbiAqIOychOy5mCDsubTthYzqs6Drpqzrs4Qg6riA66GtIOu5jOuNlOulvCDrp4zrk6TslrQg67CY7ZmY7ZWp64uI64ukLlxuICogLSBhcGkocmVzdCk6IGFwaSDrlJTroInthqDrpqzsl5Ag7ZWc7KCVXG4gKiAtIHRhcmdldHMocmVzdCk6IHRhcmdldCDrlJTroInthqDrpqzrk6Tsl5Ag7ZWc7KCVICh3ZWIsIGFwcCDrk7EpXG4gKiAtIGFueXdoZXJlKHJlc3QpOiBhcGnsmYAgdGFyZ2V0IOuqqOuRkFxuICovXG5mdW5jdGlvbiBnbG9iQnVpbGRlcnMoKSB7XG4gIGNvbnN0IGFwaURpciA9IFNvbmFtdS5jb25maWcuYXBpLmRpcjtcbiAgY29uc3QgdGFyZ2V0RGlycyA9IFNvbmFtdS5jb25maWcuc3luYy50YXJnZXRzO1xuXG4gIHJldHVybiB7XG4gICAgYXBpOiAocGF0aEZyb21BcGk6IHN0cmluZykgPT5cbiAgICAgIC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gYCR7YXBpRGlyfS8ke3BhdGhGcm9tQXBpfWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICAgIHRhcmdldHM6IChwYXRoRnJvbVRhcmdldDogc3RyaW5nKSA9PlxuICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBgJHticmFjZUpvaW4odGFyZ2V0RGlycyl9LyR7cGF0aEZyb21UYXJnZXR9YCBhcyBBcHBSZWxhdGl2ZVBhdGgsXG4gICAgYW55d2hlcmU6IChwYXRoRnJvbUFueXdoZXJlOiBzdHJpbmcpID0+XG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGAke2JyYWNlSm9pbihbYXBpRGlyLCAuLi50YXJnZXREaXJzXSl9LyR7cGF0aEZyb21Bbnl3aGVyZX1gIGFzIEFwcFJlbGF0aXZlUGF0aCxcbiAgfTtcbn1cblxuLyoqXG4gKiBGaWxlVHlwZeydgCBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cOydmCDrsJjtmZgg6rCd7LK0IO2CpOyXkOyEnCDsnpDrj5kg7LaU66Gg65Cp64uI64ukLlxuICog67OE64+EIOuwsOyXtC9lbnVtIOuPmeq4sO2ZlCDrtojtlYTsmpQg4oCUIO2MqO2EtCDqt7jro7kg7ZWo7IiY6rCAIOynhOyLpOydmCDri6jsnbwg7JuQ7LKcLlxuICovXG5leHBvcnQgdHlwZSBGaWxlVHlwZSA9IGtleW9mIFJldHVyblR5cGU8dHlwZW9mIGdldENoZWNrc3VtUGF0dGVybkdyb3VwPjtcbmV4cG9ydCB0eXBlIEdsb2JQYXR0ZXJuPFQgZXh0ZW5kcyBBcHBSZWxhdGl2ZVBhdGggfCBBYnNvbHV0ZVBhdGg+ID0gUmVjb3JkPEZpbGVUeXBlLCBUPjtcblxuLyoqXG4gKiDruYzrk5wg7IKw7Lac66y8IOuUlOugie2GoOumrOuKlCBhbHRlcm5hdGlvbiDquIDroa3snbQg7J2Y64+E7LmYIOyViuqyjCDtnJjrp5DrprQg7IiYIOyeiOycvOuvgOuhnCDslYjsoITrp53snLzroZwg7KCc7Jm4LlxuICogTm9kZSDrgrTsnqUgZnMuZ2xvYuydmCBleGNsdWRlIOyYteyFmOqzvCDtlajqu5gg7IKs7Jqp7ZWp64uI64ukLlxuICovXG5leHBvcnQgY29uc3QgR0xPQl9FWENMVURFID0gW1wiKiovbm9kZV9tb2R1bGVzLyoqXCIsIFwiKiovZGlzdC8qKlwiLCBcIioqL2J1aWxkLyoqXCIsIFwiKiovLnR1cmJvLyoqXCJdO1xuXG4vKipcbiAqIGFwcFJvb3Qg6riw7KSAIOyDgeuMgCDqsr3roZwg7Yyo7YS07J2EIOygiOuMgCDqsr3roZwg7Yyo7YS07Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiBAcmV0dXJucyDsoIjrjIAg6rK966GcIOq4sOuwmCBHbG9iIO2MqO2EtCDrp7VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgoKTogR2xvYlBhdHRlcm48QWJzb2x1dGVQYXRoPiB7XG4gIGNvbnN0IGdyb3VwID0gZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXAoKTtcbiAgcmV0dXJuIC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGdyb3VwKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAga2V5LFxuICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdmFsdWUpLCAvLyBhcHBSb290IOyDgeuMgCDqsr3roZwg4oaSIOygiOuMgCDqsr3roZxcbiAgICBdKSxcbiAgKSBhcyBHbG9iUGF0dGVybjxBYnNvbHV0ZVBhdGg+O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLFNBQWdCLDBCQUEwQjtDQUV4QyxNQUFNLEVBQUUsS0FBSyxTQUFTLGFBQWEsYUFBYTtDQUVoRCxPQUFPO0VBSUwsUUFBUSxJQUFJLHNCQUFzQjtFQUNsQyxRQUFRLElBQUksa0NBQWtDO0VBQzlDLE9BQU8sSUFBSSwrQkFBK0I7RUFDMUMsV0FBVyxJQUFJLG1DQUFtQztFQUNsRCxPQUFPLElBQUksK0JBQStCO0VBQzFDLE9BQU8sSUFBSSwrQkFBK0I7RUFDMUMsVUFBVSxJQUFJLGtDQUFrQztFQUNoRCxNQUFNLElBQUksZ0NBQWdDO0VBYzFDLHlCQUF5QixJQUFJLG1EQUFtRDtFQUNoRixXQUFXLElBQUksZ0RBQWdEO0VBQy9ELGlCQUFpQixRQUFRLDJDQUEyQztFQUNwRSxlQUFlLElBQUkscUNBQXFDO0VBQ3hELG1CQUFtQixRQUFRLG9DQUFvQztFQUMvRCxhQUFhLFNBQVMsNkJBQTZCO0VBQ25ELGFBQWEsUUFBUSw0QkFBNEI7RUFDakQsaUJBQWlCLFFBQVEsZ0NBQWdDO0VBQ3pELFlBQVksUUFBUSxnQ0FBZ0M7Q0FDdEQ7QUFDRjtBQUdBLFNBQVMsVUFBVSxNQUF5QjtDQUMxQyxPQUFPLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDMUQ7Ozs7Ozs7QUFRQSxTQUFTLGVBQWU7Q0FDdEIsTUFBTSxTQUFTLE9BQU8sT0FBTyxJQUFJO0NBQ2pDLE1BQU0sYUFBYSxPQUFPLE9BQU8sS0FBSztDQUV0QyxPQUFPO0VBQ0wsTUFBTSxnQkFDdUQsR0FBRyxPQUFPLEdBQUc7RUFDMUUsVUFBVSxtQkFDbUQsR0FBRyxVQUFVLFVBQVUsRUFBRSxHQUFHO0VBQ3pGLFdBQVcscUJBQ2tELEdBQUcsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHO0NBQ3hHO0FBQ0Y7Ozs7OztBQW9CQSxTQUFnQix3Q0FBbUU7Q0FDakYsTUFBTSxRQUFRLHdCQUF3QjtDQUN0QyxPQUFrRSxPQUFPLFlBQ3ZFLE9BQU8sUUFBUSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQzFDLEtBQ0EsS0FBSyxLQUFLLE9BQU8sYUFBYSxLQUFLLENBQ3JDLENBQUMsQ0FDSDtBQUNGOzs7YUF2SHNDO0NBd0d6QixlQUFlO0VBQUM7RUFBc0I7RUFBYztFQUFlO0NBQWMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"file-tracking.d.ts","sourceRoot":"","sources":["../../src/syncer/file-tracking.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,eAAO,MAAM,aAAa,2BAAkC,CAAC;AAE7D;;;GAGG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhF"}
1
+ {"version":3,"file":"file-tracking.d.ts","sourceRoot":"","sources":["../../src/syncer/file-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,eAAO,MAAM,aAAa,2BAAkC,CAAC;AAE7D;;;GAGG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhF"}