sonamu 0.10.11 → 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 (519) 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 +133 -29
  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 +13 -7
  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 +61 -36
  142. package/dist/migration/migrator.d.ts.map +1 -1
  143. package/dist/migration/migrator.js +276 -167
  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/migration/types.d.ts +54 -0
  149. package/dist/migration/types.d.ts.map +1 -1
  150. package/dist/naite/naite-reporter.js +2 -2
  151. package/dist/naite/naite.d.ts +74 -15
  152. package/dist/naite/naite.d.ts.map +1 -1
  153. package/dist/naite/naite.js +5 -19
  154. package/dist/runtime-type.d.ts +6 -0
  155. package/dist/runtime-type.d.ts.map +1 -0
  156. package/dist/runtime-type.js +26 -0
  157. package/dist/ssr/hmr-opt-out.d.ts +26 -0
  158. package/dist/ssr/hmr-opt-out.d.ts.map +1 -0
  159. package/dist/ssr/hmr-opt-out.js +59 -0
  160. package/dist/ssr/renderer.d.ts.map +1 -1
  161. package/dist/ssr/renderer.js +4 -1
  162. package/dist/storage/base-file.js +14 -14
  163. package/dist/storage/buffered-file.d.ts +2 -2
  164. package/dist/storage/buffered-file.d.ts.map +1 -1
  165. package/dist/storage/buffered-file.js +12 -12
  166. package/dist/storage/s3-driver.d.ts.map +1 -1
  167. package/dist/storage/s3-driver.js +1 -1
  168. package/dist/storage/uploaded-file.d.ts +2 -2
  169. package/dist/storage/uploaded-file.d.ts.map +1 -1
  170. package/dist/storage/uploaded-file.js +8 -8
  171. package/dist/stream/sse.js +11 -11
  172. package/dist/stream/ws-core.d.ts +1 -1
  173. package/dist/stream/ws-core.d.ts.map +1 -1
  174. package/dist/stream/ws-delivery.d.ts +1 -1
  175. package/dist/stream/ws-delivery.d.ts.map +1 -1
  176. package/dist/stream/ws-delivery.js +6 -4
  177. package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
  178. package/dist/stream/ws-local-connection-store.js +4 -2
  179. package/dist/stream/ws-presence-store.js +1 -1
  180. package/dist/stream/ws-registry.d.ts +4 -4
  181. package/dist/stream/ws-registry.d.ts.map +1 -1
  182. package/dist/stream/ws-registry.js +4 -2
  183. package/dist/stream/ws-telemetry.d.ts +16 -12
  184. package/dist/stream/ws-telemetry.d.ts.map +1 -1
  185. package/dist/stream/ws-telemetry.js +22 -18
  186. package/dist/stream/ws.d.ts +18 -12
  187. package/dist/stream/ws.d.ts.map +1 -1
  188. package/dist/stream/ws.js +26 -22
  189. package/dist/syncer/api-parser.js +1 -1
  190. package/dist/syncer/checksum.d.ts.map +1 -1
  191. package/dist/syncer/checksum.js +7 -8
  192. package/dist/syncer/code-generator.d.ts.map +1 -1
  193. package/dist/syncer/code-generator.js +13 -14
  194. package/dist/syncer/entity-operations.d.ts.map +1 -1
  195. package/dist/syncer/entity-operations.js +5 -6
  196. package/dist/syncer/file-copy.d.ts +5 -0
  197. package/dist/syncer/file-copy.d.ts.map +1 -0
  198. package/dist/syncer/file-copy.js +36 -0
  199. package/dist/syncer/file-patterns.d.ts +1 -0
  200. package/dist/syncer/file-patterns.d.ts.map +1 -1
  201. package/dist/syncer/file-patterns.js +5 -2
  202. package/dist/syncer/file-tracking.d.ts.map +1 -1
  203. package/dist/syncer/file-tracking.js +5 -4
  204. package/dist/syncer/filesystem-dependencies.d.ts +15 -0
  205. package/dist/syncer/filesystem-dependencies.d.ts.map +1 -0
  206. package/dist/syncer/filesystem-dependencies.js +53 -0
  207. package/dist/syncer/module-loader.d.ts +1 -1
  208. package/dist/syncer/module-loader.d.ts.map +1 -1
  209. package/dist/syncer/module-loader.js +6 -4
  210. package/dist/syncer/syncer-actions.d.ts +4 -0
  211. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  212. package/dist/syncer/syncer-actions.js +34 -17
  213. package/dist/syncer/syncer.d.ts +17 -6
  214. package/dist/syncer/syncer.d.ts.map +1 -1
  215. package/dist/syncer/syncer.js +71 -29
  216. package/dist/syncer/watcher.d.ts.map +1 -1
  217. package/dist/syncer/watcher.js +3 -3
  218. package/dist/tasks/decorator.d.ts +6 -6
  219. package/dist/tasks/decorator.d.ts.map +1 -1
  220. package/dist/tasks/decorator.js +4 -4
  221. package/dist/tasks/step-wrapper.d.ts +6 -4
  222. package/dist/tasks/step-wrapper.d.ts.map +1 -1
  223. package/dist/tasks/step-wrapper.js +5 -5
  224. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  225. package/dist/tasks/workflow-manager.js +13 -7
  226. package/dist/template/entity-converter.d.ts +1 -1
  227. package/dist/template/entity-converter.d.ts.map +1 -1
  228. package/dist/template/entity-converter.js +2 -2
  229. package/dist/template/helpers.d.ts +8 -6
  230. package/dist/template/helpers.d.ts.map +1 -1
  231. package/dist/template/helpers.js +1 -1
  232. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  233. package/dist/template/implementations/generated.template.js +4 -4
  234. package/dist/template/implementations/generated_http.template.d.ts +7 -4
  235. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  236. package/dist/template/implementations/generated_http.template.js +21 -21
  237. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  238. package/dist/template/implementations/generated_sso.template.js +6 -3
  239. package/dist/template/implementations/http_validators.template.d.ts +18 -0
  240. package/dist/template/implementations/http_validators.template.d.ts.map +1 -0
  241. package/dist/template/implementations/http_validators.template.js +127 -0
  242. package/dist/template/implementations/model.template.d.ts.map +1 -1
  243. package/dist/template/implementations/model.template.js +1 -1
  244. package/dist/template/implementations/queries.template.js +1 -1
  245. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  246. package/dist/template/implementations/sd.template.js +79 -39
  247. package/dist/template/implementations/services.template.d.ts.map +1 -1
  248. package/dist/template/implementations/services.template.js +6 -4
  249. package/dist/template/implementations/view_form.template.d.ts +6 -1
  250. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  251. package/dist/template/implementations/view_form.template.js +23 -15
  252. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  253. package/dist/template/implementations/view_list.template.js +11 -6
  254. package/dist/template/template-manager.d.ts.map +1 -1
  255. package/dist/template/template-manager.js +9 -7
  256. package/dist/template/template-types.d.ts +12 -5
  257. package/dist/template/template-types.d.ts.map +1 -1
  258. package/dist/template/template-types.js +1 -1
  259. package/dist/template/template.d.ts +2 -2
  260. package/dist/template/template.d.ts.map +1 -1
  261. package/dist/template/template.js +6 -4
  262. package/dist/template/zod-converter.d.ts +0 -19
  263. package/dist/template/zod-converter.d.ts.map +1 -1
  264. package/dist/template/zod-converter.js +100 -84
  265. package/dist/testing/_relation-graph.d.ts.map +1 -1
  266. package/dist/testing/_relation-graph.js +2 -1
  267. package/dist/testing/bootstrap.d.ts.map +1 -1
  268. package/dist/testing/bootstrap.js +9 -6
  269. package/dist/testing/data-explorer.d.ts +32 -7
  270. package/dist/testing/data-explorer.d.ts.map +1 -1
  271. package/dist/testing/data-explorer.js +77 -31
  272. package/dist/testing/dev-test-routes.d.ts +8 -1
  273. package/dist/testing/dev-test-routes.d.ts.map +1 -1
  274. package/dist/testing/dev-test-routes.js +125 -108
  275. package/dist/testing/dev-vitest-manager.d.ts +54 -8
  276. package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
  277. package/dist/testing/dev-vitest-manager.js +24 -9
  278. package/dist/testing/faker-mappings.d.ts +412 -1
  279. package/dist/testing/faker-mappings.d.ts.map +1 -1
  280. package/dist/testing/faker-mappings.js +1 -1
  281. package/dist/testing/filesystem.d.ts +2 -0
  282. package/dist/testing/filesystem.d.ts.map +1 -0
  283. package/dist/testing/filesystem.js +7 -0
  284. package/dist/testing/fixture-generator.d.ts +25 -8
  285. package/dist/testing/fixture-generator.d.ts.map +1 -1
  286. package/dist/testing/fixture-generator.js +132 -73
  287. package/dist/testing/fixture-loader.d.ts +3 -1
  288. package/dist/testing/fixture-loader.d.ts.map +1 -1
  289. package/dist/testing/fixture-loader.js +1 -20
  290. package/dist/testing/fixture-manager.d.ts +8 -7
  291. package/dist/testing/fixture-manager.d.ts.map +1 -1
  292. package/dist/testing/fixture-manager.js +91 -59
  293. package/dist/testing/global-setup.d.ts.map +1 -1
  294. package/dist/testing/global-setup.js +5 -2
  295. package/dist/testing/index.d.ts +2 -0
  296. package/dist/testing/index.d.ts.map +1 -1
  297. package/dist/testing/index.js +6 -3
  298. package/dist/types/types.d.ts +101 -99
  299. package/dist/types/types.d.ts.map +1 -1
  300. package/dist/types/types.js +234 -225
  301. package/dist/ui/ai-api.d.ts.map +1 -1
  302. package/dist/ui/ai-api.js +1 -1
  303. package/dist/ui/ai-client.d.ts.map +1 -1
  304. package/dist/ui/ai-client.js +28 -18
  305. package/dist/ui/api.d.ts.map +1 -1
  306. package/dist/ui/api.js +146 -210
  307. package/dist/ui/async-route.d.ts +3 -0
  308. package/dist/ui/async-route.d.ts.map +1 -0
  309. package/dist/ui/async-route.js +12 -0
  310. package/dist/ui/cdd-service.d.ts +9 -7
  311. package/dist/ui/cdd-service.d.ts.map +1 -1
  312. package/dist/ui/cdd-service.js +7 -5
  313. package/dist/ui/migrations-api.d.ts +3 -0
  314. package/dist/ui/migrations-api.d.ts.map +1 -0
  315. package/dist/ui/migrations-api.js +215 -0
  316. package/dist/ui-web/assets/index-D3QNH-Dv.css +1 -0
  317. package/dist/ui-web/assets/index-DV1AAq6W.js +178 -0
  318. package/dist/ui-web/index.html +2 -2
  319. package/dist/utils/formatter.d.ts.map +1 -1
  320. package/dist/utils/formatter.js +7 -5
  321. package/dist/utils/fs-utils.d.ts +3 -3
  322. package/dist/utils/fs-utils.d.ts.map +1 -1
  323. package/dist/utils/fs-utils.js +6 -6
  324. package/dist/utils/model.d.ts +3 -5
  325. package/dist/utils/model.d.ts.map +1 -1
  326. package/dist/utils/model.js +1 -1
  327. package/dist/utils/object-utils.d.ts +1 -1
  328. package/dist/utils/object-utils.d.ts.map +1 -1
  329. package/dist/utils/object-utils.js +17 -16
  330. package/dist/utils/process-utils.d.ts.map +1 -1
  331. package/dist/utils/process-utils.js +4 -2
  332. package/dist/utils/runtime-value.d.ts +13 -0
  333. package/dist/utils/runtime-value.d.ts.map +1 -0
  334. package/dist/utils/runtime-value.js +40 -0
  335. package/dist/utils/sql-parser.d.ts +8 -1
  336. package/dist/utils/sql-parser.d.ts.map +1 -1
  337. package/dist/utils/sql-parser.js +6 -3
  338. package/dist/utils/type-utils.d.ts.map +1 -1
  339. package/dist/utils/type-utils.js +10 -8
  340. package/dist/utils/utils.d.ts +2 -2
  341. package/dist/utils/utils.d.ts.map +1 -1
  342. package/dist/utils/utils.js +11 -8
  343. package/dist/utils/zod-error.d.ts.map +1 -1
  344. package/dist/utils/zod-error.js +7 -4
  345. package/dist/vector/chunking.d.ts.map +1 -1
  346. package/dist/vector/chunking.js +1 -1
  347. package/dist/vector/embedding.d.ts.map +1 -1
  348. package/dist/vector/embedding.js +1 -1
  349. package/dist/vector/types.d.ts +3 -2
  350. package/dist/vector/types.d.ts.map +1 -1
  351. package/package.json +11 -7
  352. package/src/ai/agents/agent.ts +5 -5
  353. package/src/ai/agents/types.ts +1 -1
  354. package/src/ai/providers/rtzr/__tests__/model.test.ts +2 -2
  355. package/src/ai/providers/rtzr/error.ts +5 -3
  356. package/src/ai/providers/rtzr/model.ts +3 -2
  357. package/src/ai/providers/rtzr/options.ts +10 -5
  358. package/src/ai/providers/rtzr/provider.ts +10 -10
  359. package/src/ai/providers/rtzr/utils.ts +3 -1
  360. package/src/api/__tests__/config.test.ts +11 -21
  361. package/src/api/__tests__/sonamu.http-validator.test.ts +512 -0
  362. package/src/api/__tests__/sonamu.websocket.test.ts +51 -41
  363. package/src/api/__tests__/zod-compiler-policy.test.ts +95 -0
  364. package/src/api/caster.ts +6 -8
  365. package/src/api/code-converters.ts +136 -36
  366. package/src/api/config.ts +62 -4
  367. package/src/api/context.ts +3 -3
  368. package/src/api/decorators.ts +28 -17
  369. package/src/api/http-validator.ts +149 -0
  370. package/src/api/sonamu.ts +459 -152
  371. package/src/api/websocket-helpers.ts +24 -17
  372. package/src/auth/audit-log/builders.ts +3 -2
  373. package/src/auth/audit-log/client-ip.ts +4 -2
  374. package/src/auth/audit-log/events.ts +15 -1
  375. package/src/auth/audit-log/plugin.ts +129 -200
  376. package/src/auth/audit-log-ingestor.ts +19 -15
  377. package/src/auth/auth-generator.ts +10 -5
  378. package/src/auth/better-auth-request.ts +4 -3
  379. package/src/auth/knex-adapter.ts +8 -2
  380. package/src/auth/plugins/entity-definitions/index.ts +6 -5
  381. package/src/bin/__tests__/http-validator-benchmark.test.ts +94 -0
  382. package/src/bin/__tests__/test-command.test.ts +9 -15
  383. package/src/bin/__tests__/ts-loader-register.test.ts +15 -17
  384. package/src/bin/__tests__/zod-compiler-build.test.ts +307 -0
  385. package/src/bin/build-config.ts +167 -0
  386. package/src/bin/cli.ts +155 -38
  387. package/src/bin/compiler-policy.ts +35 -0
  388. package/src/bin/fixture.ts +14 -3
  389. package/src/bin/test-command.ts +74 -29
  390. package/src/bin/ts-loader-registration.ts +22 -4
  391. package/src/cache/decorator.ts +10 -3
  392. package/src/compress/compress.ts +17 -4
  393. package/src/cone/cone-generator.ts +34 -6
  394. package/src/database/__tests__/db.test.ts +1 -0
  395. package/src/database/__tests__/puri.test.ts +16 -15
  396. package/src/database/__tests__/transaction-scope.test.ts +5 -0
  397. package/src/database/_batch_update.ts +1 -0
  398. package/src/database/base-model.ts +81 -50
  399. package/src/database/base-model.types.ts +6 -6
  400. package/src/database/db.ts +29 -19
  401. package/src/database/knex.ts +30 -17
  402. package/src/database/puri-subset.test-d.ts +17 -0
  403. package/src/database/puri.ts +181 -143
  404. package/src/database/puri.types.test-d.ts +31 -1
  405. package/src/database/puri.types.ts +23 -21
  406. package/src/database/upsert-builder.ts +75 -53
  407. package/src/dict/sd.ts +15 -5
  408. package/src/dict/sonamu-dictionary.ts +6 -6
  409. package/src/dict/utils.ts +9 -1
  410. package/src/entity/entity-manager.ts +26 -9
  411. package/src/entity/entity-template-cone.ts +5 -10
  412. package/src/entity/entity.ts +50 -34
  413. package/src/env.ts +7 -3
  414. package/src/exceptions/error-handler.ts +17 -2
  415. package/src/exceptions/so-exceptions.ts +26 -20
  416. package/src/filter/utils.ts +21 -11
  417. package/src/index.ts +3 -0
  418. package/src/logger/configure.ts +26 -18
  419. package/src/migration/__tests__/migrator.test.ts +50 -57
  420. package/src/migration/code-generation.ts +132 -104
  421. package/src/migration/index-where-predicate.ts +51 -24
  422. package/src/migration/migration-set.ts +11 -5
  423. package/src/migration/migrator.ts +392 -244
  424. package/src/migration/postgresql-schema-reader.ts +52 -47
  425. package/src/migration/slack-confirm.ts +17 -15
  426. package/src/migration/types.ts +57 -0
  427. package/src/naite/naite-reporter.ts +1 -1
  428. package/src/naite/naite.ts +97 -24
  429. package/src/runtime-type.ts +34 -0
  430. package/src/ssr/hmr-opt-out.ts +78 -0
  431. package/src/ssr/renderer.ts +6 -0
  432. package/src/storage/base-file.ts +13 -13
  433. package/src/storage/buffered-file.ts +11 -11
  434. package/src/storage/s3-driver.ts +4 -1
  435. package/src/storage/uploaded-file.ts +8 -8
  436. package/src/stream/__tests__/ws-contracts.test.ts +4 -2
  437. package/src/stream/__tests__/ws-telemetry.test.ts +1 -1
  438. package/src/stream/__tests__/ws.test.ts +30 -6
  439. package/src/stream/sse.ts +12 -11
  440. package/src/stream/ws-core.ts +1 -1
  441. package/src/stream/ws-delivery.ts +16 -7
  442. package/src/stream/ws-local-connection-store.ts +2 -3
  443. package/src/stream/ws-presence-store.ts +6 -1
  444. package/src/stream/ws-registry.ts +16 -7
  445. package/src/stream/ws-telemetry.ts +66 -43
  446. package/src/stream/ws.ts +73 -39
  447. package/src/syncer/__tests__/api-parser.websocket-type-ref.test.ts +3 -2
  448. package/src/syncer/__tests__/http-validator-registry.test.ts +137 -0
  449. package/src/syncer/api-parser.ts +67 -27
  450. package/src/syncer/checksum.ts +17 -11
  451. package/src/syncer/code-generator.ts +25 -17
  452. package/src/syncer/entity-operations.ts +3 -5
  453. package/src/syncer/file-copy.ts +46 -0
  454. package/src/syncer/file-patterns.ts +11 -8
  455. package/src/syncer/file-tracking.ts +3 -4
  456. package/src/syncer/filesystem-dependencies.ts +73 -0
  457. package/src/syncer/module-loader.ts +8 -4
  458. package/src/syncer/syncer-actions.ts +56 -18
  459. package/src/syncer/syncer.ts +116 -43
  460. package/src/syncer/watcher.ts +8 -4
  461. package/src/tasks/decorator.ts +20 -12
  462. package/src/tasks/step-wrapper.ts +19 -9
  463. package/src/tasks/workflow-manager.ts +15 -9
  464. package/src/template/__tests__/http_validators.template.test.ts +160 -0
  465. package/src/template/__tests__/services.template.mutation.test.ts +24 -23
  466. package/src/template/__tests__/services.template.websocket.test.ts +21 -25
  467. package/src/template/entity-converter.ts +5 -2
  468. package/src/template/helpers.ts +8 -9
  469. package/src/template/implementations/generated.template.ts +5 -4
  470. package/src/template/implementations/generated_http.template.ts +61 -15
  471. package/src/template/implementations/generated_sso.template.ts +15 -4
  472. package/src/template/implementations/http_validators.template.ts +175 -0
  473. package/src/template/implementations/model.template.ts +3 -1
  474. package/src/template/implementations/sd.template.ts +81 -41
  475. package/src/template/implementations/services.template.ts +2 -2
  476. package/src/template/implementations/view_form.template.ts +56 -39
  477. package/src/template/implementations/view_list.template.ts +31 -23
  478. package/src/template/template-manager.ts +15 -13
  479. package/src/template/template-types.ts +13 -5
  480. package/src/template/template.ts +4 -3
  481. package/src/template/zod-converter.ts +206 -91
  482. package/src/testing/__tests__/dev-test-routes.test.ts +85 -25
  483. package/src/testing/__tests__/dev-vitest-manager.test.ts +15 -15
  484. package/src/testing/_relation-graph.ts +4 -1
  485. package/src/testing/bootstrap.ts +12 -5
  486. package/src/testing/data-explorer.ts +102 -53
  487. package/src/testing/dev-test-routes.ts +87 -50
  488. package/src/testing/dev-vitest-manager.ts +88 -32
  489. package/src/testing/faker-mappings.ts +2 -2
  490. package/src/testing/filesystem.ts +1 -0
  491. package/src/testing/fixture-generator.ts +191 -131
  492. package/src/testing/fixture-loader.ts +5 -1
  493. package/src/testing/fixture-manager.ts +129 -90
  494. package/src/testing/global-setup.ts +7 -3
  495. package/src/testing/index.ts +5 -0
  496. package/src/types/__tests__/entity-json-schema-search-text.test.ts +9 -3
  497. package/src/types/types.ts +184 -158
  498. package/src/ui/ai-api.ts +9 -7
  499. package/src/ui/ai-client.ts +61 -56
  500. package/src/ui/api.ts +726 -770
  501. package/src/ui/async-route.ts +4 -0
  502. package/src/ui/cdd-service.ts +35 -12
  503. package/src/ui/migrations-api.ts +381 -0
  504. package/src/utils/formatter.ts +7 -3
  505. package/src/utils/fs-utils.ts +5 -5
  506. package/src/utils/model.ts +4 -5
  507. package/src/utils/object-utils.ts +32 -22
  508. package/src/utils/process-utils.ts +4 -1
  509. package/src/utils/runtime-value.ts +43 -0
  510. package/src/utils/sql-parser.ts +13 -6
  511. package/src/utils/type-utils.ts +9 -7
  512. package/src/utils/utils.ts +19 -21
  513. package/src/utils/zod-error.ts +4 -2
  514. package/src/vector/chunking.ts +6 -1
  515. package/src/vector/embedding.ts +2 -1
  516. package/src/vector/types.ts +4 -2
  517. package/tsdown.api.config.ts +5 -2
  518. package/dist/ui-web/assets/index-CJf8uJYf.js +0 -176
  519. package/dist/ui-web/assets/index-GMMIVGja.css +0 -1
@@ -1,12 +1,12 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
- import { stat } from "fs/promises";
2
+ import { init_filesystem_dependencies, syncerFilesystem } from "./filesystem-dependencies.js";
3
3
  //#region src/syncer/file-tracking.ts
4
4
  /**
5
5
  * 우리가 디스크에 write한 path를 등록합니다. write 직후 호출하세요.
6
6
  * 디스크에서 mtime을 직접 읽어 정확한 값으로 등록합니다.
7
7
  */
8
8
  async function trackWritten(filePath) {
9
- const fileStat = await stat(filePath);
9
+ const fileStat = await syncerFilesystem.stat(filePath);
10
10
  fileWrittenAt.set(filePath, fileStat.mtimeMs);
11
11
  }
12
12
  /**
@@ -16,14 +16,15 @@ async function trackWritten(filePath) {
16
16
  async function isLastChangedByMe(filePath) {
17
17
  const registered = fileWrittenAt.get(filePath);
18
18
  if (registered === void 0) return false;
19
- return (await stat(filePath)).mtimeMs <= registered;
19
+ return (await syncerFilesystem.stat(filePath)).mtimeMs <= registered;
20
20
  }
21
21
  var fileWrittenAt;
22
22
  var init_file_tracking = __esmMin((() => {
23
+ init_filesystem_dependencies();
23
24
  fileWrittenAt = /* @__PURE__ */ new Map();
24
25
  }));
25
26
  //#endregion
26
27
  init_file_tracking();
27
28
  export { fileWrittenAt, init_file_tracking, isLastChangedByMe, trackWritten };
28
29
 
29
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10cmFja2luZy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtdHJhY2tpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RhdCB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuXG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbmV4cG9ydCBjb25zdCBmaWxlV3JpdHRlbkF0ID0gbmV3IE1hcDxBYnNvbHV0ZVBhdGgsIG51bWJlcj4oKTtcblxuLyoqXG4gKiDsmrDrpqzqsIAg65SU7Iqk7YGs7JeQIHdyaXRl7ZWcIHBhdGjrpbwg65Ox66Gd7ZWp64uI64ukLiB3cml0ZSDsp4Htm4Qg7Zi47Lac7ZWY7IS47JqULlxuICog65SU7Iqk7YGs7JeQ7IScIG10aW1l7J2EIOyngeygkSDsnb3slrQg7KCV7ZmV7ZWcIOqwkuycvOuhnCDrk7HroZ3tlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFja1dyaXR0ZW4oZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICBmaWxlV3JpdHRlbkF0LnNldChmaWxlUGF0aCwgZmlsZVN0YXQubXRpbWVNcyk7XG59XG5cbi8qKlxuICog7KO87Ja07KeEIHBhdGjqsIAg6rCA7J6lIOy1nOq3vCDsmrDrpqwgd3JpdGUg7J207ZuE66GcIOyZuOu2gOyXkOyEnCDsiJjsoJXrkJwg7KCBIOyXhuuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gKiB0cnVl66m0IFwi64K06rCAIOyTtCDqt7jrjIDroZwg64Ko7JWE7J6I7J2MXCIsIGZhbHNl66m0IFwi7Jm467aA7JeQ7IScIOyImOygleuQkOqxsOuCmCDsmrDrpqzqsIAg7JO0IOyggSDsl4bsnYxcIi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzTGFzdENoYW5nZWRCeU1lKGZpbGVQYXRoOiBBYnNvbHV0ZVBhdGgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVnaXN0ZXJlZCA9IGZpbGVXcml0dGVuQXQuZ2V0KGZpbGVQYXRoKTtcbiAgaWYgKHJlZ2lzdGVyZWQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN0YXQoZmlsZVBhdGgpO1xuICByZXR1cm4gZmlsZVN0YXQubXRpbWVNcyA8PSByZWdpc3RlcmVkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBVUEsZUFBc0IsYUFBYSxVQUF1QztDQUN4RSxNQUFNLFdBQVcsTUFBTSxLQUFLLFFBQVE7Q0FDcEMsY0FBYyxJQUFJLFVBQVUsU0FBUyxPQUFPO0FBQzlDOzs7OztBQU1BLGVBQXNCLGtCQUFrQixVQUEwQztDQUNoRixNQUFNLGFBQWEsY0FBYyxJQUFJLFFBQVE7Q0FDN0MsSUFBSSxlQUFlLFFBQ2pCLE9BQU87Q0FHVCxRQUFPLE1BRGdCLEtBQUssUUFBUSxFQUM3QixDQUFTLFdBQVc7QUFDN0I7OztDQXRCYSxnQ0FBZ0IsSUFBSSxJQUEwQiJ9
30
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS10cmFja2luZy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtdHJhY2tpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgc3luY2VyRmlsZXN5c3RlbSB9IGZyb20gXCIuL2ZpbGVzeXN0ZW0tZGVwZW5kZW5jaWVzXCI7XG5cbmV4cG9ydCBjb25zdCBmaWxlV3JpdHRlbkF0ID0gbmV3IE1hcDxBYnNvbHV0ZVBhdGgsIG51bWJlcj4oKTtcblxuLyoqXG4gKiDsmrDrpqzqsIAg65SU7Iqk7YGs7JeQIHdyaXRl7ZWcIHBhdGjrpbwg65Ox66Gd7ZWp64uI64ukLiB3cml0ZSDsp4Htm4Qg7Zi47Lac7ZWY7IS47JqULlxuICog65SU7Iqk7YGs7JeQ7IScIG10aW1l7J2EIOyngeygkSDsnb3slrQg7KCV7ZmV7ZWcIOqwkuycvOuhnCDrk7HroZ3tlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFja1dyaXR0ZW4oZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlU3RhdCA9IGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0uc3RhdChmaWxlUGF0aCk7XG4gIGZpbGVXcml0dGVuQXQuc2V0KGZpbGVQYXRoLCBmaWxlU3RhdC5tdGltZU1zKTtcbn1cblxuLyoqXG4gKiDso7zslrTsp4QgcGF0aOqwgCDqsIDsnqUg7LWc6re8IOyasOumrCB3cml0ZSDsnbTtm4TroZwg7Jm467aA7JeQ7IScIOyImOygleuQnCDsoIEg7JeG64qU7KeAIO2ZleyduO2VqeuLiOuLpC5cbiAqIHRydWXrqbQgXCLrgrTqsIAg7JO0IOq3uOuMgOuhnCDrgqjslYTsnojsnYxcIiwgZmFsc2XrqbQgXCLsmbjrtoDsl5DshJwg7IiY7KCV65CQ6rGw64KYIOyasOumrOqwgCDsk7Qg7KCBIOyXhuydjFwiLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNMYXN0Q2hhbmdlZEJ5TWUoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCByZWdpc3RlcmVkID0gZmlsZVdyaXR0ZW5BdC5nZXQoZmlsZVBhdGgpO1xuICBpZiAocmVnaXN0ZXJlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGZpbGVTdGF0ID0gYXdhaXQgc3luY2VyRmlsZXN5c3RlbS5zdGF0KGZpbGVQYXRoKTtcbiAgcmV0dXJuIGZpbGVTdGF0Lm10aW1lTXMgPD0gcmVnaXN0ZXJlZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVNBLGVBQXNCLGFBQWEsVUFBdUM7Q0FDeEUsTUFBTSxXQUFXLE1BQU0saUJBQWlCLEtBQUssUUFBUTtDQUNyRCxjQUFjLElBQUksVUFBVSxTQUFTLE9BQU87QUFDOUM7Ozs7O0FBTUEsZUFBc0Isa0JBQWtCLFVBQTBDO0NBQ2hGLE1BQU0sYUFBYSxjQUFjLElBQUksUUFBUTtDQUM3QyxJQUFJLGVBQWUsUUFDakIsT0FBTztDQUdULFFBQU8sTUFEZ0IsaUJBQWlCLEtBQUssUUFBUSxFQUM5QyxDQUFTLFdBQVc7QUFDN0I7Ozs4QkF4QjREO0NBRS9DLGdDQUFnQixJQUFJLElBQTBCIn0=
@@ -0,0 +1,15 @@
1
+ import { type MakeDirectoryOptions, type PathLike, type RmOptions, type Stats } from "node:fs";
2
+ export type SyncerFilesystemDependencies = {
3
+ access(path: PathLike, mode?: number): Promise<void>;
4
+ mkdir(path: PathLike, options?: MakeDirectoryOptions): Promise<string | undefined>;
5
+ readFile(path: PathLike, encoding: BufferEncoding): Promise<string>;
6
+ rm(path: PathLike, options?: RmOptions): Promise<void>;
7
+ stat(path: PathLike): Promise<Stats>;
8
+ unlink(path: PathLike): Promise<void>;
9
+ writeFile(path: PathLike, data: string | NodeJS.ArrayBufferView, encoding?: BufferEncoding): Promise<void>;
10
+ };
11
+ export declare const syncerFilesystem: SyncerFilesystemDependencies;
12
+ export declare function syncerFileExists(path: PathLike): Promise<boolean>;
13
+ /** 테스트와 임베딩 환경에서 Syncer의 파일시스템 경계를 교체합니다. */
14
+ export declare function configureSyncerFilesystem(dependencies: Partial<SyncerFilesystemDependencies>): () => void;
15
+ //# sourceMappingURL=filesystem-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-dependencies.d.ts","sourceRoot":"","sources":["../../src/syncer/filesystem-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,KAAK,EACX,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACnF,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,SAAS,CACP,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,eAAe,EACrC,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB,CAAC;AAYF,eAAO,MAAM,gBAAgB,EAAE,4BAA8C,CAAC;AAE9E,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvE;AAED,6CAA6C;AAC7C,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,OAAO,CAAC,4BAA4B,CAAC,GAClD,MAAM,IAAI,CAyBZ"}
@@ -0,0 +1,53 @@
1
+ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
+ import { access, mkdir, readFile, rm, stat, unlink, writeFile } from "node:fs/promises";
3
+ import { constants } from "node:fs";
4
+ //#region src/syncer/filesystem-dependencies.ts
5
+ async function syncerFileExists(path) {
6
+ try {
7
+ await syncerFilesystem.access(path, constants.F_OK);
8
+ return true;
9
+ } catch {
10
+ return false;
11
+ }
12
+ }
13
+ /** 테스트와 임베딩 환경에서 Syncer의 파일시스템 경계를 교체합니다. */
14
+ function configureSyncerFilesystem(dependencies) {
15
+ const restorers = [];
16
+ const override = (key) => {
17
+ if (!(key in dependencies)) return;
18
+ const previousDependency = syncerFilesystem[key];
19
+ Object.assign(syncerFilesystem, { [key]: dependencies[key] });
20
+ restorers.push(() => Object.assign(syncerFilesystem, { [key]: previousDependency }));
21
+ };
22
+ override("access");
23
+ override("mkdir");
24
+ override("readFile");
25
+ override("rm");
26
+ override("stat");
27
+ override("unlink");
28
+ override("writeFile");
29
+ let configured = true;
30
+ return () => {
31
+ if (!configured) return;
32
+ configured = false;
33
+ for (const restore of restorers) restore();
34
+ };
35
+ }
36
+ var defaults, syncerFilesystem;
37
+ var init_filesystem_dependencies = __esmMin((() => {
38
+ defaults = {
39
+ access: (path, mode) => access(path, mode),
40
+ mkdir: (path, options) => mkdir(path, options),
41
+ readFile: (path, encoding) => readFile(path, encoding),
42
+ rm: (path, options) => rm(path, options),
43
+ stat: (path) => stat(path),
44
+ unlink: (path) => unlink(path),
45
+ writeFile: (path, data, encoding) => writeFile(path, data, encoding)
46
+ };
47
+ syncerFilesystem = { ...defaults };
48
+ }));
49
+ //#endregion
50
+ init_filesystem_dependencies();
51
+ export { configureSyncerFilesystem, init_filesystem_dependencies, syncerFileExists, syncerFilesystem };
52
+
53
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9maWxlc3lzdGVtLWRlcGVuZGVuY2llcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBjb25zdGFudHMsXG4gIHR5cGUgTWFrZURpcmVjdG9yeU9wdGlvbnMsXG4gIHR5cGUgUGF0aExpa2UsXG4gIHR5cGUgUm1PcHRpb25zLFxuICB0eXBlIFN0YXRzLFxufSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgYWNjZXNzLCBta2RpciwgcmVhZEZpbGUsIHJtLCBzdGF0LCB1bmxpbmssIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5cbmV4cG9ydCB0eXBlIFN5bmNlckZpbGVzeXN0ZW1EZXBlbmRlbmNpZXMgPSB7XG4gIGFjY2VzcyhwYXRoOiBQYXRoTGlrZSwgbW9kZT86IG51bWJlcik6IFByb21pc2U8dm9pZD47XG4gIG1rZGlyKHBhdGg6IFBhdGhMaWtlLCBvcHRpb25zPzogTWFrZURpcmVjdG9yeU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIHJlYWRGaWxlKHBhdGg6IFBhdGhMaWtlLCBlbmNvZGluZzogQnVmZmVyRW5jb2RpbmcpOiBQcm9taXNlPHN0cmluZz47XG4gIHJtKHBhdGg6IFBhdGhMaWtlLCBvcHRpb25zPzogUm1PcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgc3RhdChwYXRoOiBQYXRoTGlrZSk6IFByb21pc2U8U3RhdHM+O1xuICB1bmxpbmsocGF0aDogUGF0aExpa2UpOiBQcm9taXNlPHZvaWQ+O1xuICB3cml0ZUZpbGUoXG4gICAgcGF0aDogUGF0aExpa2UsXG4gICAgZGF0YTogc3RyaW5nIHwgTm9kZUpTLkFycmF5QnVmZmVyVmlldyxcbiAgICBlbmNvZGluZz86IEJ1ZmZlckVuY29kaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuY29uc3QgZGVmYXVsdHM6IFN5bmNlckZpbGVzeXN0ZW1EZXBlbmRlbmNpZXMgPSB7XG4gIGFjY2VzczogKHBhdGgsIG1vZGUpID0+IGFjY2VzcyhwYXRoLCBtb2RlKSxcbiAgbWtkaXI6IChwYXRoLCBvcHRpb25zKSA9PiBta2RpcihwYXRoLCBvcHRpb25zKSxcbiAgcmVhZEZpbGU6IChwYXRoLCBlbmNvZGluZykgPT4gcmVhZEZpbGUocGF0aCwgZW5jb2RpbmcpLFxuICBybTogKHBhdGgsIG9wdGlvbnMpID0+IHJtKHBhdGgsIG9wdGlvbnMpLFxuICBzdGF0OiAocGF0aCkgPT4gc3RhdChwYXRoKSxcbiAgdW5saW5rOiAocGF0aCkgPT4gdW5saW5rKHBhdGgpLFxuICB3cml0ZUZpbGU6IChwYXRoLCBkYXRhLCBlbmNvZGluZykgPT4gd3JpdGVGaWxlKHBhdGgsIGRhdGEsIGVuY29kaW5nKSxcbn07XG5cbmV4cG9ydCBjb25zdCBzeW5jZXJGaWxlc3lzdGVtOiBTeW5jZXJGaWxlc3lzdGVtRGVwZW5kZW5jaWVzID0geyAuLi5kZWZhdWx0cyB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY2VyRmlsZUV4aXN0cyhwYXRoOiBQYXRoTGlrZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0uYWNjZXNzKHBhdGgsIGNvbnN0YW50cy5GX09LKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKiDthYzsiqTtirjsmYAg7J6E67Kg65SpIO2ZmOqyveyXkOyEnCBTeW5jZXLsnZgg7YyM7J287Iuc7Iqk7YWcIOqyveqzhOulvCDqtZDssrTtlanri4jri6QuICovXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlU3luY2VyRmlsZXN5c3RlbShcbiAgZGVwZW5kZW5jaWVzOiBQYXJ0aWFsPFN5bmNlckZpbGVzeXN0ZW1EZXBlbmRlbmNpZXM+LFxuKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IHJlc3RvcmVyczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcbiAgY29uc3Qgb3ZlcnJpZGUgPSA8S2V5IGV4dGVuZHMga2V5b2YgU3luY2VyRmlsZXN5c3RlbURlcGVuZGVuY2llcz4oa2V5OiBLZXkpOiB2b2lkID0+IHtcbiAgICBpZiAoIShrZXkgaW4gZGVwZW5kZW5jaWVzKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJldmlvdXNEZXBlbmRlbmN5ID0gc3luY2VyRmlsZXN5c3RlbVtrZXldO1xuICAgIE9iamVjdC5hc3NpZ24oc3luY2VyRmlsZXN5c3RlbSwgeyBba2V5XTogZGVwZW5kZW5jaWVzW2tleV0gfSk7XG4gICAgcmVzdG9yZXJzLnB1c2goKCkgPT4gT2JqZWN0LmFzc2lnbihzeW5jZXJGaWxlc3lzdGVtLCB7IFtrZXldOiBwcmV2aW91c0RlcGVuZGVuY3kgfSkpO1xuICB9O1xuXG4gIG92ZXJyaWRlKFwiYWNjZXNzXCIpO1xuICBvdmVycmlkZShcIm1rZGlyXCIpO1xuICBvdmVycmlkZShcInJlYWRGaWxlXCIpO1xuICBvdmVycmlkZShcInJtXCIpO1xuICBvdmVycmlkZShcInN0YXRcIik7XG4gIG92ZXJyaWRlKFwidW5saW5rXCIpO1xuICBvdmVycmlkZShcIndyaXRlRmlsZVwiKTtcblxuICBsZXQgY29uZmlndXJlZCA9IHRydWU7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKCFjb25maWd1cmVkKSByZXR1cm47XG4gICAgY29uZmlndXJlZCA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCByZXN0b3JlIG9mIHJlc3RvcmVycykgcmVzdG9yZSgpO1xuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBbUNBLGVBQXNCLGlCQUFpQixNQUFrQztDQUN2RSxJQUFJO0VBQ0YsTUFBTSxpQkFBaUIsT0FBTyxNQUFNLFVBQVUsSUFBSTtFQUNsRCxPQUFPO0NBQ1QsUUFBUTtFQUNOLE9BQU87Q0FDVDtBQUNGOztBQUdBLFNBQWdCLDBCQUNkLGNBQ1k7Q0FDWixNQUFNLFlBQStCLENBQUM7Q0FDdEMsTUFBTSxZQUE0RCxRQUFtQjtFQUNuRixJQUFJLEVBQUUsT0FBTyxlQUFlO0VBRTVCLE1BQU0scUJBQXFCLGlCQUFpQjtFQUM1QyxPQUFPLE9BQU8sa0JBQWtCLEdBQUcsTUFBTSxhQUFhLEtBQUssQ0FBQztFQUM1RCxVQUFVLFdBQVcsT0FBTyxPQUFPLGtCQUFrQixHQUFHLE1BQU0sbUJBQW1CLENBQUMsQ0FBQztDQUNyRjtDQUVBLFNBQVMsUUFBUTtDQUNqQixTQUFTLE9BQU87Q0FDaEIsU0FBUyxVQUFVO0NBQ25CLFNBQVMsSUFBSTtDQUNiLFNBQVMsTUFBTTtDQUNmLFNBQVMsUUFBUTtDQUNqQixTQUFTLFdBQVc7Q0FFcEIsSUFBSSxhQUFhO0NBQ2pCLGFBQWE7RUFDWCxJQUFJLENBQUMsWUFBWTtFQUNqQixhQUFhO0VBRWIsS0FBSyxNQUFNLFdBQVcsV0FBVyxRQUFRO0NBQzNDO0FBQ0Y7OztDQWpETSxXQUF5QztFQUM3QyxTQUFTLE1BQU0sU0FBUyxPQUFPLE1BQU0sSUFBSTtFQUN6QyxRQUFRLE1BQU0sWUFBWSxNQUFNLE1BQU0sT0FBTztFQUM3QyxXQUFXLE1BQU0sYUFBYSxTQUFTLE1BQU0sUUFBUTtFQUNyRCxLQUFLLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTztFQUN2QyxPQUFPLFNBQVMsS0FBSyxJQUFJO0VBQ3pCLFNBQVMsU0FBUyxPQUFPLElBQUk7RUFDN0IsWUFBWSxNQUFNLE1BQU0sYUFBYSxVQUFVLE1BQU0sTUFBTSxRQUFRO0NBQ3JFO0NBRWEsbUJBQWlELEVBQUUsR0FBRyxTQUFTIn0=
@@ -27,5 +27,5 @@ export declare function loadTypes(): Promise<LoadedTypes>;
27
27
  /**
28
28
  * *.workflow.ts 파일들에서 Workflow 메타데이터를 로드합니다.
29
29
  */
30
- export declare function loadWorkflows(): Promise<Map<string, WorkflowMetadata[]>>;
30
+ export declare function loadWorkflows(): Promise<Map<string, WorkflowMetadata<unknown, unknown, unknown>[]>>;
31
31
  //# sourceMappingURL=module-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../src/syncer/module-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAO3D,MAAM,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC;AAEvC,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,cAAc,CAAC;CACtD,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CA+BpD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAmBxD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,CAoBtD;AAED;;GAEG;AACH,wBAAsB,aAAa,6CA6BlC"}
1
+ {"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../src/syncer/module-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAQ3D,MAAM,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC;AAEvC,MAAM,MAAM,WAAW,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,YAAY,GAAG;IACzB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,cAAc,CAAC;CACtD,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAkCpD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAmBxD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,CAoBtD;AAED;;GAEG;AACH,wBAAsB,aAAa,wEA6BlC"}
@@ -1,10 +1,11 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
+ import { init_runtime_value, isFunctionValue, isObjectValue } from "../utils/runtime-value.js";
2
3
  import { globAsync, init_async_utils } from "../utils/async-utils.js";
3
4
  import { Sonamu, init_sonamu } from "../api/sonamu.js";
4
5
  import { importMembers, init_esm_utils } from "../utils/esm-utils.js";
5
6
  import { init_path_utils, runtimePath } from "../utils/path-utils.js";
6
7
  import { init_api_parser, readApisFromFile } from "./api-parser.js";
7
- import { z as z$1 } from "zod";
8
+ import { z } from "zod";
8
9
  import path from "path";
9
10
  //#region src/syncer/module-loader.ts
10
11
  /**
@@ -43,7 +44,7 @@ async function loadTypes() {
43
44
  const types = {};
44
45
  for (const filePath of typePaths) {
45
46
  const importedMembers = await importMembers(filePath);
46
- for (const { name, value } of importedMembers) if (value instanceof z$1.ZodType) types[name] = value;
47
+ for (const { name, value } of importedMembers) if (value instanceof z.ZodType) types[name] = value;
47
48
  }
48
49
  return types;
49
50
  }
@@ -56,7 +57,7 @@ async function loadWorkflows() {
56
57
  for (const filePath of workflowPaths) {
57
58
  const importedMembers = await importMembers(filePath);
58
59
  workflows.set(filePath, importedMembers.filter(({ value }) => {
59
- return typeof value === "object" && value !== null && "type" in value && value.type === "workflow" && "fn" in value && typeof value.fn === "function";
60
+ return isObjectValue(value) && value !== null && "type" in value && value.type === "workflow" && "fn" in value && isFunctionValue(value.fn);
60
61
  }).map(({ value }) => {
61
62
  return value;
62
63
  }));
@@ -68,10 +69,11 @@ var init_module_loader = __esmMin((() => {
68
69
  init_async_utils();
69
70
  init_esm_utils();
70
71
  init_path_utils();
72
+ init_runtime_value();
71
73
  init_api_parser();
72
74
  }));
73
75
  //#endregion
74
76
  init_module_loader();
75
77
  export { init_module_loader, loadApis, loadModels, loadTypes, loadWorkflows };
76
78
 
77
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWxvYWRlci5qcyIsIm5hbWVzIjpbInoiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL21vZHVsZS1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBCYXNlRnJhbWVDbGFzcyB9IGZyb20gXCIuLi9hcGkvYmFzZS1mcmFtZVwiO1xuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZEFwaSB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQmFzZU1vZGVsQ2xhc3MgfSBmcm9tIFwiLi4vZGF0YWJhc2UvYmFzZS1tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSBcIi4uL3Rhc2tzL2RlY29yYXRvclwiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgcnVudGltZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgcmVhZEFwaXNGcm9tRmlsZSB9IGZyb20gXCIuL2FwaS1wYXJzZXJcIjtcblxuZXhwb3J0IHR5cGUgTG9hZGVkQXBpcyA9IEV4dGVuZGVkQXBpW107XG5cbmV4cG9ydCB0eXBlIExvYWRlZFR5cGVzID0geyBbdHlwZU5hbWU6IHN0cmluZ106IHouWm9kVHlwZSB9O1xuXG5leHBvcnQgdHlwZSBMb2FkZWRNb2RlbHMgPSB7XG4gIFttb2RlbE5hbWU6IHN0cmluZ106IEJhc2VNb2RlbENsYXNzIHwgQmFzZUZyYW1lQ2xhc3M7XG59O1xuXG4vKipcbiAqICoubW9kZWwudHPsmYAgKi5mcmFtZS50cyDtjIzsnbzrk6Tsl5DshJwgQVBJIOuplOyGjOuTnOulvCDtjIzsi7HtlZjsl6wg66Gc65Oc7ZWp64uI64ukLlxuICogcmVnaXN0ZXJlZEFwaXPsl5AgQVBJ6rCAIOuTseuhneuQmOyWtCDsnojslrTslbwg7ZWY6riwIOuVjOusuOyXkCwgKi5tb2RlbC50cyDtjIzsnbzrk6TsnYQg66i87KCAIGltcG9ydO2VtOyVvCDtlanri4jri6QuXG4gKiDrlLDrnbzshJwgbG9hZE1vZGVscygp66W8IOuovOyggCDtmLjstpztlbTslbwg7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEFwaXMoKTogUHJvbWlzZTxMb2FkZWRBcGlzPiB7XG4gIC8vIOyWmOuKlCDtirnsnbTtlZjqsozrj4Qg7ZmY6rK97JeQIOuUsOudvCAudHPrgpggLmpz66W8IGltcG9ydO2VmOuKlCDqsr3smrDqsIAg7JWE64uI6rOgLFxuICAvLyDtg4DsnoXsnbQg7IK07JWE7J6I64qUIC50cyDshozsiqQg7L2U65Oc66eM7J2EIOydveyWtOyVvCDtlanri4jri6QuXG4gIC8vIOydtOqyg+ydgCBkZXbshJzrsoQoaG90IHJlbG9hZCnqsIAg7JWE64uMIHByb2R1Y3Rpb24g7ZmY6rK97JeQ7ISc64+EIOuPmeydvO2VqeuLiOuLpC5cbiAgLy8g66qo642465Ok7J2YIC50cyDtjIzsnbzsnbQg7J6I7Ja07JW8IOydtOulvCDsnb3slrTshJwg65287Jqw7Yq466W8IOuTseuhne2VoCDsiJgg7J6I7Ja07JqUIVxuICBjb25zdCBtb2RlbFBhdGhzUGF0dGVybiA9IHBhdGguam9pbihcbiAgICBTb25hbXUuYXBpUm9vdFBhdGgsXG4gICAgXCJzcmMvYXBwbGljYXRpb24vKiovKi57bW9kZWwsZnJhbWV9LnRzXCIsIC8vICEhIHJ1bnRpbWVQYXRoIOyViCDslIAg7KO87J2YICEhXG4gICk7XG4gIGNvbnN0IG1vZGVsUGF0aHMgPSAoYXdhaXQgZ2xvYkFzeW5jKG1vZGVsUGF0aHNQYXR0ZXJuKSkgYXMgQWJzb2x1dGVQYXRoW107XG5cbiAgY29uc3QgYXBpczogTG9hZGVkQXBpcyA9IFtdO1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIG1vZGVsUGF0aHMpIHtcbiAgICBjb25zdCBwYXJzZWRBcGlzID0gYXdhaXQgcmVhZEFwaXNGcm9tRmlsZShmaWxlUGF0aCk7XG4gICAgYXBpcy5wdXNoKC4uLnBhcnNlZEFwaXMpO1xuICB9XG4gIC8vIGNvbnNvbGUubG9nKFxuICAvLyAgIGNoYWxrLmdyYXkoYFtMb2FkaW5nXSBMb2FkZWQgQVBJcyBmcm9tIFwiKi5tb2RlbC50c1wiIGZpbGVzOiAke2NvdW50fSBmaWxlcy5gKVxuICAvLyApO1xuXG4gIGZvciAoY29uc3QgYXBpIG9mIGFwaXMpIHtcbiAgICBpZiAoYXBpLnBhdGggPT09IFwiXCIpIHtcbiAgICAgIC8vIGFwaeydmCDqsr3roZwocGF0aCnqsIAgXCLthYUg67mE7Ja07J6I7J2MXCLsnbgg7IOB7YOc7J6F64uI64ukLlxuICAgICAgLy8g7J2064qUIEBhcGnsmYAg7ZWo6ruYIOyCrOyaqe2VtOyVvCDtlZjripQg642w7L2U66CI7J207YSw6rCAIEBhcGkg7JeG7J20IOu2meydgCDsg4HtmansnoXri4jri6QuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBUEkgJHthcGkubW9kZWxOYW1lfS4ke2FwaS5tZXRob2ROYW1lfSBoYXMgbm8gcGF0aC4gUGxlYXNlIGF0dGFjaCBAYXBpIGRlY29yYXRvciB0byB0aGUgbWV0aG9kLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcGlzO1xufVxuXG4vKipcbiAqICoubW9kZWwudHPsmYAgKi5mcmFtZS50cyDtjIzsnbzrk6Tsl5DshJwgTW9kZWwvRnJhbWUg7YG0656Y7IqkIOyduOyKpO2EtOyKpOulvCDroZzrk5ztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTW9kZWxzKCk6IFByb21pc2U8TG9hZGVkTW9kZWxzPiB7XG4gIGNvbnN0IG1vZGVsUGF0aHNQYXR0ZXJuID0gcGF0aC5qb2luKFxuICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnttb2RlbCxmcmFtZX0udHNcIiksXG4gICk7XG4gIGNvbnN0IG1vZGVsUGF0aHMgPSBhd2FpdCBnbG9iQXN5bmMobW9kZWxQYXRoc1BhdHRlcm4pO1xuXG4gIGNvbnN0IG1vZGVsczogTG9hZGVkTW9kZWxzID0ge307XG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgbW9kZWxQYXRocykge1xuICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8QmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcz4oZmlsZVBhdGgpO1xuXG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICBpZiAobmFtZS5lbmRzV2l0aChcIk1vZGVsXCIpIHx8IG5hbWUuZW5kc1dpdGgoXCJGcmFtZVwiKSkge1xuICAgICAgICBtb2RlbHNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW9kZWxzO1xufVxuXG4vKipcbiAqICoudHlwZXMudHPsmYAgKi5nZW5lcmF0ZWQudHMg7YyM7J2865Ok7JeQ7IScIFpvZCDsiqTtgqTrp4jrpbwg66Gc65Oc7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFR5cGVzKCk6IFByb21pc2U8TG9hZGVkVHlwZXM+IHtcbiAgY29uc3QgdHlwZVBhdGhzUGF0dGVybnMgPSBbXG4gICAgcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi50eXBlcy50c1wiKSksXG4gICAgcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi5nZW5lcmF0ZWQudHNcIikpLFxuICBdO1xuICBjb25zdCB0eXBlUGF0aHMgPSAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodHlwZVBhdGhzUGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBnbG9iQXN5bmMocGF0dGVybikpKVxuICApLmZsYXQoKTtcblxuICBjb25zdCB0eXBlczogTG9hZGVkVHlwZXMgPSB7fTtcbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB0eXBlUGF0aHMpIHtcbiAgICBjb25zdCBpbXBvcnRlZE1lbWJlcnMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzPHouWm9kVHlwZT4oZmlsZVBhdGgpO1xuICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIGltcG9ydGVkTWVtYmVycykge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2Ygei5ab2RUeXBlKSB7XG4gICAgICAgIHR5cGVzW25hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG4vKipcbiAqICoud29ya2Zsb3cudHMg7YyM7J2865Ok7JeQ7IScIFdvcmtmbG93IOuplO2DgOuNsOydtO2EsOulvCDroZzrk5ztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkV29ya2Zsb3dzKCkge1xuICBjb25zdCB3b3JrZmxvd1BhdGhzUGF0dGVybiA9IHBhdGguam9pbihcbiAgICBTb25hbXUuYXBpUm9vdFBhdGgsXG4gICAgcnVudGltZVBhdGgoXCJzcmMvYXBwbGljYXRpb24vKiovKi53b3JrZmxvdy50c1wiKSxcbiAgKTtcbiAgY29uc3Qgd29ya2Zsb3dQYXRocyA9IGF3YWl0IGdsb2JBc3luYyh3b3JrZmxvd1BhdGhzUGF0dGVybik7XG4gIGNvbnN0IHdvcmtmbG93czogTWFwPHN0cmluZywgV29ya2Zsb3dNZXRhZGF0YVtdPiA9IG5ldyBNYXAoKTtcbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiB3b3JrZmxvd1BhdGhzKSB7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVycyhmaWxlUGF0aCk7XG4gICAgd29ya2Zsb3dzLnNldChcbiAgICAgIGZpbGVQYXRoLFxuICAgICAgaW1wb3J0ZWRNZW1iZXJzXG4gICAgICAgIC5maWx0ZXIoKHsgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgICAgICBcInR5cGVcIiBpbiB2YWx1ZSAmJlxuICAgICAgICAgICAgdmFsdWUudHlwZSA9PT0gXCJ3b3JrZmxvd1wiICYmXG4gICAgICAgICAgICBcImZuXCIgaW4gdmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS5mbiA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlIGFzIFdvcmtmbG93TWV0YWRhdGE7XG4gICAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gd29ya2Zsb3dzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQTRCQSxlQUFzQixXQUFnQztDQVNwRCxNQUFNLGFBQWMsTUFBTSxVQUpBLEtBQUssS0FDN0IsT0FBTyxhQUNQLHVDQUVrQyxDQUFpQjtDQUVyRCxNQUFNLE9BQW1CLENBQUM7Q0FDMUIsS0FBSyxNQUFNLFlBQVksWUFBWTtFQUNqQyxNQUFNLGFBQWEsTUFBTSxpQkFBaUIsUUFBUTtFQUNsRCxLQUFLLEtBQUssR0FBRyxVQUFVO0NBQ3pCO0NBS0EsS0FBSyxNQUFNLE9BQU8sTUFDaEIsSUFBSSxJQUFJLFNBQVMsSUFHZixNQUFNLElBQUksTUFDUixPQUFPLElBQUksVUFBVSxHQUFHLElBQUksV0FBVywwREFDekM7Q0FJSixPQUFPO0FBQ1Q7Ozs7QUFLQSxlQUFzQixhQUFvQztDQUt4RCxNQUFNLGFBQWEsTUFBTSxVQUpDLEtBQUssS0FDN0IsT0FBTyxhQUNQLFlBQVksdUNBQXVDLENBRWxCLENBQWlCO0NBRXBELE1BQU0sU0FBdUIsQ0FBQztDQUM5QixLQUFLLE1BQU0sWUFBWSxZQUFZO0VBQ2pDLE1BQU0sa0JBQWtCLE1BQU0sY0FBK0MsUUFBUTtFQUVyRixLQUFLLE1BQU0sRUFBRSxNQUFNLFdBQVcsaUJBQzVCLElBQUksS0FBSyxTQUFTLE9BQU8sS0FBSyxLQUFLLFNBQVMsT0FBTyxHQUNqRCxPQUFPLFFBQVE7Q0FHckI7Q0FFQSxPQUFPO0FBQ1Q7Ozs7QUFLQSxlQUFzQixZQUFrQztDQUN0RCxNQUFNLG9CQUFvQixDQUN4QixLQUFLLEtBQUssT0FBTyxhQUFhLFlBQVksK0JBQStCLENBQUMsR0FDMUUsS0FBSyxLQUFLLE9BQU8sYUFBYSxZQUFZLG1DQUFtQyxDQUFDLENBQ2hGO0NBQ0EsTUFBTSxhQUNKLE1BQU0sUUFBUSxJQUFJLGtCQUFrQixLQUFLLFlBQVksVUFBVSxPQUFPLENBQUMsQ0FBQyxFQUFBLENBQ3hFLEtBQUs7Q0FFUCxNQUFNLFFBQXFCLENBQUM7Q0FDNUIsS0FBSyxNQUFNLFlBQVksV0FBVztFQUNoQyxNQUFNLGtCQUFrQixNQUFNLGNBQXlCLFFBQVE7RUFDL0QsS0FBSyxNQUFNLEVBQUUsTUFBTSxXQUFXLGlCQUM1QixJQUFJLGlCQUFpQkEsSUFBRSxTQUNyQixNQUFNLFFBQVE7Q0FHcEI7Q0FFQSxPQUFPO0FBQ1Q7Ozs7QUFLQSxlQUFzQixnQkFBZ0I7Q0FLcEMsTUFBTSxnQkFBZ0IsTUFBTSxVQUpDLEtBQUssS0FDaEMsT0FBTyxhQUNQLFlBQVksa0NBQWtDLENBRVYsQ0FBb0I7Q0FDMUQsTUFBTSw0QkFBNkMsSUFBSSxJQUFJO0NBQzNELEtBQUssTUFBTSxZQUFZLGVBQWU7RUFDcEMsTUFBTSxrQkFBa0IsTUFBTSxjQUFjLFFBQVE7RUFDcEQsVUFBVSxJQUNSLFVBQ0EsZ0JBQ0csUUFBUSxFQUFFLFlBQVk7R0FDckIsT0FDRSxPQUFPLFVBQVUsWUFDakIsVUFBVSxRQUNWLFVBQVUsU0FDVixNQUFNLFNBQVMsY0FDZixRQUFRLFNBQ1IsT0FBTyxNQUFNLE9BQU87RUFFeEIsQ0FBQyxDQUFDLENBQ0QsS0FBSyxFQUFFLFlBQVk7R0FDbEIsT0FBTztFQUNULENBQUMsQ0FDTDtDQUNGO0NBRUEsT0FBTztBQUNUOzthQXhJc0M7a0JBR1U7Z0JBQ0U7aUJBQ0Q7aUJBRUYifQ==
79
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWxvYWRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL21vZHVsZS1sb2FkZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBCYXNlRnJhbWVDbGFzcyB9IGZyb20gXCIuLi9hcGkvYmFzZS1mcmFtZVwiO1xuaW1wb3J0IHsgdHlwZSBFeHRlbmRlZEFwaSB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQmFzZU1vZGVsQ2xhc3MgfSBmcm9tIFwiLi4vZGF0YWJhc2UvYmFzZS1tb2RlbFwiO1xuaW1wb3J0IHsgdHlwZSBXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSBcIi4uL3Rhc2tzL2RlY29yYXRvclwiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgcnVudGltZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgdHlwZSBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvblZhbHVlLCBpc09iamVjdFZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcbmltcG9ydCB7IHJlYWRBcGlzRnJvbUZpbGUgfSBmcm9tIFwiLi9hcGktcGFyc2VyXCI7XG5cbmV4cG9ydCB0eXBlIExvYWRlZEFwaXMgPSBFeHRlbmRlZEFwaVtdO1xuXG5leHBvcnQgdHlwZSBMb2FkZWRUeXBlcyA9IHsgW3R5cGVOYW1lOiBzdHJpbmddOiB6LlpvZFR5cGUgfTtcblxuZXhwb3J0IHR5cGUgTG9hZGVkTW9kZWxzID0ge1xuICBbbW9kZWxOYW1lOiBzdHJpbmddOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzO1xufTtcblxuLyoqXG4gKiAqLm1vZGVsLnRz7JmAICouZnJhbWUudHMg7YyM7J2865Ok7JeQ7IScIEFQSSDrqZTshozrk5zrpbwg7YyM7Iux7ZWY7JesIOuhnOuTnO2VqeuLiOuLpC5cbiAqIHJlZ2lzdGVyZWRBcGlz7JeQIEFQSeqwgCDrk7HroZ3rkJjslrQg7J6I7Ja07JW8IO2VmOq4sCDrlYzrrLjsl5AsICoubW9kZWwudHMg7YyM7J2865Ok7J2EIOuovOyggCBpbXBvcnTtlbTslbwg7ZWp64uI64ukLlxuICog65Sw65287IScIGxvYWRNb2RlbHMoKeulvCDrqLzsoIAg7Zi47Lac7ZW07JW8IO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRBcGlzKCk6IFByb21pc2U8TG9hZGVkQXBpcz4ge1xuICAvLyDslpjripQg7Yq57J207ZWY6rKM64+EIO2ZmOqyveyXkCDrlLDrnbwgLnRz64KYIC5qc+ulvCBpbXBvcnTtlZjripQg6rK97Jqw6rCAIOyVhOuLiOqzoCxcbiAgLy8g7YOA7J6F7J20IOyCtOyVhOyeiOuKlCAudHMg7IaM7IqkIOy9lOuTnOunjOydhCDsnb3slrTslbwg7ZWp64uI64ukLlxuICAvLyDsnbTqsoPsnYAgZGV27ISc67KEKGhvdCByZWxvYWQp6rCAIOyVhOuLjCBwcm9kdWN0aW9uIO2ZmOqyveyXkOyEnOuPhCDrj5nsnbztlanri4jri6QuXG4gIC8vIOuqqOuNuOuTpOydmCAudHMg7YyM7J287J20IOyeiOyWtOyVvCDsnbTrpbwg7J297Ja07IScIOudvOyasO2KuOulvCDrk7HroZ3tlaAg7IiYIOyeiOyWtOyalCFcbiAgY29uc3QgbW9kZWxQYXRoc1BhdHRlcm4gPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIFwic3JjL2FwcGxpY2F0aW9uLyoqLyoue21vZGVsLGZyYW1lfS50c1wiLCAvLyAhISBydW50aW1lUGF0aCDslYgg7JSAIOyjvOydmCAhIVxuICApO1xuICBjb25zdCBtb2RlbFBhdGhzID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIChhd2FpdCBnbG9iQXN5bmMoXG4gICAgICBtb2RlbFBhdGhzUGF0dGVybixcbiAgICApKSBhcyBBYnNvbHV0ZVBhdGhbXTtcblxuICBjb25zdCBhcGlzOiBMb2FkZWRBcGlzID0gW107XG4gIGZvciAoY29uc3QgZmlsZVBhdGggb2YgbW9kZWxQYXRocykge1xuICAgIGNvbnN0IHBhcnNlZEFwaXMgPSBhd2FpdCByZWFkQXBpc0Zyb21GaWxlKGZpbGVQYXRoKTtcbiAgICBhcGlzLnB1c2goLi4ucGFyc2VkQXBpcyk7XG4gIH1cbiAgLy8gY29uc29sZS5sb2coXG4gIC8vICAgY2hhbGsuZ3JheShgW0xvYWRpbmddIExvYWRlZCBBUElzIGZyb20gXCIqLm1vZGVsLnRzXCIgZmlsZXM6ICR7Y291bnR9IGZpbGVzLmApXG4gIC8vICk7XG5cbiAgZm9yIChjb25zdCBhcGkgb2YgYXBpcykge1xuICAgIGlmIChhcGkucGF0aCA9PT0gXCJcIikge1xuICAgICAgLy8gYXBp7J2YIOqyveuhnChwYXRoKeqwgCBcIu2FhSDruYTslrTsnojsnYxcIuyduCDsg4Htg5zsnoXri4jri6QuXG4gICAgICAvLyDsnbTripQgQGFwaeyZgCDtlajqu5gg7IKs7Jqp7ZW07JW8IO2VmOuKlCDrjbDsvZTroIjsnbTthLDqsIAgQGFwaSDsl4bsnbQg67aZ7J2AIOyDge2ZqeyeheuLiOuLpC5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFQSSAke2FwaS5tb2RlbE5hbWV9LiR7YXBpLm1ldGhvZE5hbWV9IGhhcyBubyBwYXRoLiBQbGVhc2UgYXR0YWNoIEBhcGkgZGVjb3JhdG9yIHRvIHRoZSBtZXRob2QuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFwaXM7XG59XG5cbi8qKlxuICogKi5tb2RlbC50c+yZgCAqLmZyYW1lLnRzIO2MjOydvOuTpOyXkOyEnCBNb2RlbC9GcmFtZSDtgbTrnpjsiqQg7J247Iqk7YS07Iqk66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNb2RlbHMoKTogUHJvbWlzZTxMb2FkZWRNb2RlbHM+IHtcbiAgY29uc3QgbW9kZWxQYXRoc1BhdHRlcm4gPSBwYXRoLmpvaW4oXG4gICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgIHJ1bnRpbWVQYXRoKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoue21vZGVsLGZyYW1lfS50c1wiKSxcbiAgKTtcbiAgY29uc3QgbW9kZWxQYXRocyA9IGF3YWl0IGdsb2JBc3luYyhtb2RlbFBhdGhzUGF0dGVybik7XG5cbiAgY29uc3QgbW9kZWxzOiBMb2FkZWRNb2RlbHMgPSB7fTtcbiAgZm9yIChjb25zdCBmaWxlUGF0aCBvZiBtb2RlbFBhdGhzKSB7XG4gICAgY29uc3QgaW1wb3J0ZWRNZW1iZXJzID0gYXdhaXQgaW1wb3J0TWVtYmVyczxCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzPihmaWxlUGF0aCk7XG5cbiAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiBpbXBvcnRlZE1lbWJlcnMpIHtcbiAgICAgIGlmIChuYW1lLmVuZHNXaXRoKFwiTW9kZWxcIikgfHwgbmFtZS5lbmRzV2l0aChcIkZyYW1lXCIpKSB7XG4gICAgICAgIG1vZGVsc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb2RlbHM7XG59XG5cbi8qKlxuICogKi50eXBlcy50c+yZgCAqLmdlbmVyYXRlZC50cyDtjIzsnbzrk6Tsl5DshJwgWm9kIOyKpO2CpOuniOulvCDroZzrk5ztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkVHlwZXMoKTogUHJvbWlzZTxMb2FkZWRUeXBlcz4ge1xuICBjb25zdCB0eXBlUGF0aHNQYXR0ZXJucyA9IFtcbiAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLnR5cGVzLnRzXCIpKSxcbiAgICBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmdlbmVyYXRlZC50c1wiKSksXG4gIF07XG4gIGNvbnN0IHR5cGVQYXRocyA9IChcbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0eXBlUGF0aHNQYXR0ZXJucy5tYXAoKHBhdHRlcm4pID0+IGdsb2JBc3luYyhwYXR0ZXJuKSkpXG4gICkuZmxhdCgpO1xuXG4gIGNvbnN0IHR5cGVzOiBMb2FkZWRUeXBlcyA9IHt9O1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHR5cGVQYXRocykge1xuICAgIGNvbnN0IGltcG9ydGVkTWVtYmVycyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8ei5ab2RUeXBlPihmaWxlUGF0aCk7XG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaW1wb3J0ZWRNZW1iZXJzKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiB6LlpvZFR5cGUpIHtcbiAgICAgICAgdHlwZXNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHlwZXM7XG59XG5cbi8qKlxuICogKi53b3JrZmxvdy50cyDtjIzsnbzrk6Tsl5DshJwgV29ya2Zsb3cg66mU7YOA642w7J207YSw66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRXb3JrZmxvd3MoKSB7XG4gIGNvbnN0IHdvcmtmbG93UGF0aHNQYXR0ZXJuID0gcGF0aC5qb2luKFxuICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICBydW50aW1lUGF0aChcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICApO1xuICBjb25zdCB3b3JrZmxvd1BhdGhzID0gYXdhaXQgZ2xvYkFzeW5jKHdvcmtmbG93UGF0aHNQYXR0ZXJuKTtcbiAgY29uc3Qgd29ya2Zsb3dzOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+ID0gbmV3IE1hcCgpO1xuICBmb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHdvcmtmbG93UGF0aHMpIHtcbiAgICBjb25zdCBpbXBvcnRlZE1lbWJlcnMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzKGZpbGVQYXRoKTtcbiAgICB3b3JrZmxvd3Muc2V0KFxuICAgICAgZmlsZVBhdGgsXG4gICAgICBpbXBvcnRlZE1lbWJlcnNcbiAgICAgICAgLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzT2JqZWN0VmFsdWUodmFsdWUpICYmXG4gICAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgXCJ0eXBlXCIgaW4gdmFsdWUgJiZcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgPT09IFwid29ya2Zsb3dcIiAmJlxuICAgICAgICAgICAgXCJmblwiIGluIHZhbHVlICYmXG4gICAgICAgICAgICBpc0Z1bmN0aW9uVmFsdWUodmFsdWUuZm4pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIC8qIFNBRkVUWTogVHlwZVNjcmlwdCBBU1Qg7YyM7Iux6rO8IOuPmeq4sO2ZlCDsnoXroKUg6rOE7JW97J20IOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gdmFsdWUgYXMgV29ya2Zsb3dNZXRhZGF0YTtcbiAgICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrZmxvd3M7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQTZCQSxlQUFzQixXQUFnQztDQVNwRCxNQUFNLGFBQ3dELE1BQU0sVUFMMUMsS0FBSyxLQUM3QixPQUFPLGFBQ1AsdUNBSUUsQ0FDRjtDQUVGLE1BQU0sT0FBbUIsQ0FBQztDQUMxQixLQUFLLE1BQU0sWUFBWSxZQUFZO0VBQ2pDLE1BQU0sYUFBYSxNQUFNLGlCQUFpQixRQUFRO0VBQ2xELEtBQUssS0FBSyxHQUFHLFVBQVU7Q0FDekI7Q0FLQSxLQUFLLE1BQU0sT0FBTyxNQUNoQixJQUFJLElBQUksU0FBUyxJQUdmLE1BQU0sSUFBSSxNQUNSLE9BQU8sSUFBSSxVQUFVLEdBQUcsSUFBSSxXQUFXLDBEQUN6QztDQUlKLE9BQU87QUFDVDs7OztBQUtBLGVBQXNCLGFBQW9DO0NBS3hELE1BQU0sYUFBYSxNQUFNLFVBSkMsS0FBSyxLQUM3QixPQUFPLGFBQ1AsWUFBWSx1Q0FBdUMsQ0FFbEIsQ0FBaUI7Q0FFcEQsTUFBTSxTQUF1QixDQUFDO0NBQzlCLEtBQUssTUFBTSxZQUFZLFlBQVk7RUFDakMsTUFBTSxrQkFBa0IsTUFBTSxjQUErQyxRQUFRO0VBRXJGLEtBQUssTUFBTSxFQUFFLE1BQU0sV0FBVyxpQkFDNUIsSUFBSSxLQUFLLFNBQVMsT0FBTyxLQUFLLEtBQUssU0FBUyxPQUFPLEdBQ2pELE9BQU8sUUFBUTtDQUdyQjtDQUVBLE9BQU87QUFDVDs7OztBQUtBLGVBQXNCLFlBQWtDO0NBQ3RELE1BQU0sb0JBQW9CLENBQ3hCLEtBQUssS0FBSyxPQUFPLGFBQWEsWUFBWSwrQkFBK0IsQ0FBQyxHQUMxRSxLQUFLLEtBQUssT0FBTyxhQUFhLFlBQVksbUNBQW1DLENBQUMsQ0FDaEY7Q0FDQSxNQUFNLGFBQ0osTUFBTSxRQUFRLElBQUksa0JBQWtCLEtBQUssWUFBWSxVQUFVLE9BQU8sQ0FBQyxDQUFDLEVBQUEsQ0FDeEUsS0FBSztDQUVQLE1BQU0sUUFBcUIsQ0FBQztDQUM1QixLQUFLLE1BQU0sWUFBWSxXQUFXO0VBQ2hDLE1BQU0sa0JBQWtCLE1BQU0sY0FBeUIsUUFBUTtFQUMvRCxLQUFLLE1BQU0sRUFBRSxNQUFNLFdBQVcsaUJBQzVCLElBQUksaUJBQWlCLEVBQUUsU0FDckIsTUFBTSxRQUFRO0NBR3BCO0NBRUEsT0FBTztBQUNUOzs7O0FBS0EsZUFBc0IsZ0JBQWdCO0NBS3BDLE1BQU0sZ0JBQWdCLE1BQU0sVUFKQyxLQUFLLEtBQ2hDLE9BQU8sYUFDUCxZQUFZLGtDQUFrQyxDQUVWLENBQW9CO0NBQzFELE1BQU0sNEJBQTZDLElBQUksSUFBSTtDQUMzRCxLQUFLLE1BQU0sWUFBWSxlQUFlO0VBQ3BDLE1BQU0sa0JBQWtCLE1BQU0sY0FBYyxRQUFRO0VBQ3BELFVBQVUsSUFDUixVQUNBLGdCQUNHLFFBQVEsRUFBRSxZQUFZO0dBQ3JCLE9BQ0UsY0FBYyxLQUFLLEtBQ25CLFVBQVUsUUFDVixVQUFVLFNBQ1YsTUFBTSxTQUFTLGNBQ2YsUUFBUSxTQUNSLGdCQUFnQixNQUFNLEVBQUU7RUFFNUIsQ0FBQyxDQUFDLENBQ0QsS0FBSyxFQUFFLFlBQVk7R0FDbEIsT0FBa0U7RUFDcEUsQ0FBQyxDQUNMO0NBQ0Y7Q0FFQSxPQUFPO0FBQ1Q7O2FBNUlzQztrQkFHVTtnQkFDRTtpQkFDRDtvQkFFc0I7aUJBQ3hCIn0=
@@ -24,6 +24,10 @@ export declare function actionGenerateSchemas(): Promise<AbsolutePath[]>;
24
24
  * @returns 생성된 파일 경로.
25
25
  */
26
26
  export declare function actionGenerateHttps(): Promise<AbsolutePath>;
27
+ /**
28
+ * 최종 REST caster를 담는 API 전용 validator registry를 재생성합니다.
29
+ */
30
+ export declare function actionGenerateHttpValidators(): Promise<AbsolutePath>;
27
31
  /**
28
32
  * queries.generated.ts 재생성합니다.
29
33
  * @returns 생성된 파일 경로 배열.
@@ -1 +1 @@
1
- {"version":3,"file":"syncer-actions.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer-actions.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxD,wBAAsB,gBAAgB,kBAWrC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE;IACX,WAAW,EAAE,iBAAiB,CAAC;CAChC,EAAE,GACF,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAE1F;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAOrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAQjE;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAExE;AAED;;;;;;GAMG;AACH,wBAAsB,uCAAuC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAWvF;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkCzF;AAED;;;;;GAKG;AACH,wBAAsB,oCAAoC,IAAI,OAAO,CAAC,IAAI,CAAC,CA+D1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBhE"}
1
+ {"version":3,"file":"syncer-actions.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer-actions.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAKlE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,wBAAsB,gBAAgB,kBAcrC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE;IACX,WAAW,EAAE,iBAAiB,CAAC;CAChC,EAAE,GACF,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAE1F;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAOrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAQjE;AAED;;GAEG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,YAAY,CAAC,CAmB1E;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAExE;AAED;;;;;;GAMG;AACH,wBAAsB,uCAAuC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAWvF;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoCzF;AAED;;;;;GAKG;AACH,wBAAsB,oCAAoC,IAAI,OAAO,CAAC,IAAI,CAAC,CAiE1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBhE"}
@@ -1,23 +1,24 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
+ import { init_runtime_value, isObjectValue } from "../utils/runtime-value.js";
2
3
  import { AlreadyProcessedException, init_so_exceptions } from "../exceptions/so-exceptions.js";
3
4
  import { init_controller, isTest } from "../utils/controller.js";
4
5
  import { formatCode, init_formatter } from "../utils/formatter.js";
5
- import { copyFileWithReplaceCoreToShared, exists, init_fs_utils } from "../utils/fs-utils.js";
6
6
  import { Sonamu, init_sonamu } from "../api/sonamu.js";
7
7
  import { Naite, init_naite } from "../naite/naite.js";
8
+ import { init_filesystem_dependencies, syncerFileExists, syncerFilesystem } from "./filesystem-dependencies.js";
8
9
  import { init_file_tracking, trackWritten } from "./file-tracking.js";
9
10
  import { generateTemplate, init_code_generator } from "./code-generator.js";
11
+ import { copyFileWithReplaceCoreToShared, init_file_copy } from "./file-copy.js";
10
12
  import assert from "assert";
11
13
  import path, { dirname } from "path";
12
14
  import chalk from "chalk";
13
- import { mkdir, readFile, writeFile } from "fs/promises";
14
15
  //#region src/syncer/syncer-actions.ts
15
16
  async function actionSyncConfig() {
16
17
  const { host, port } = Sonamu.config.server.listen ?? {};
17
18
  const content = `API_HOST=${host ?? "localhost"}\nAPI_PORT=${port ?? 3e3}`;
18
19
  Naite.t("actionSyncConfig", { content });
19
- await Promise.all([...Sonamu.config.sync.targets.map(async (target) => {
20
- await writeFile(path.join(Sonamu.appRootPath, target, ".sonamu.env"), content);
20
+ await Promise.all([...Sonamu.config.sync.targets.map((target) => {
21
+ return syncerFilesystem.writeFile(path.join(Sonamu.appRootPath, target, ".sonamu.env"), content);
21
22
  }), generateTemplate("generated_sso", {}, { overwrite: true })]);
22
23
  }
23
24
  /**
@@ -53,6 +54,20 @@ async function actionGenerateHttps() {
53
54
  return res;
54
55
  }
55
56
  /**
57
+ * 최종 REST caster를 담는 API 전용 validator registry를 재생성합니다.
58
+ */
59
+ async function actionGenerateHttpValidators() {
60
+ const registryPath = path.join(Sonamu.apiRootPath, "src/application/sonamu.validators.generated.ts");
61
+ const policy = Sonamu.config.validation?.zodCompiler;
62
+ if (!(isObjectValue(policy) && policy !== null && policy.api === "aot")) {
63
+ if (await syncerFileExists(registryPath)) await syncerFilesystem.unlink(registryPath);
64
+ return registryPath;
65
+ }
66
+ const [generatedPath] = await generateTemplate("http_validators", {}, { overwrite: true });
67
+ assert(generatedPath);
68
+ return generatedPath;
69
+ }
70
+ /**
56
71
  * queries.generated.ts 재생성합니다.
57
72
  * @returns 생성된 파일 경로 배열.
58
73
  */
@@ -88,7 +103,7 @@ async function actionSyncFilesToTargets(tsPaths) {
88
103
  return (await Promise.all(targets.map(async (target) => Promise.all(tsPaths.map(async (realSrc) => {
89
104
  const dst = realSrc.replace(`/${apiDir}/`, `/${target}/`).replace("/application/", "/services/");
90
105
  const dir = dirname(dst);
91
- if (!await exists(dir)) await mkdir(dir, { recursive: true });
106
+ if (!await syncerFileExists(dir)) await syncerFilesystem.mkdir(dir, { recursive: true });
92
107
  await copyFileWithReplaceCoreToShared(realSrc, dst, [
93
108
  "/**",
94
109
  " * @generated",
@@ -109,24 +124,24 @@ async function actionSyncFilesToTargets(tsPaths) {
109
124
  async function actionCopySharedToTargetsIfNotExists() {
110
125
  const { targets } = Sonamu.config.sync;
111
126
  const dictUtilsPath = path.join(import.meta.dirname.replace("/dist/", "/src/"), "../dict/utils.ts");
112
- const dictUtilsCode = await exists(dictUtilsPath) ? await readFile(dictUtilsPath, "utf-8") : "";
127
+ const dictUtilsCode = await syncerFileExists(dictUtilsPath) ? await syncerFilesystem.readFile(dictUtilsPath, "utf-8") : "";
113
128
  const convertMap = {
114
129
  baseUrl: Sonamu.config.server.baseUrl ?? `http://${Sonamu.config.server.listen?.host ?? "localhost"}:${Sonamu.config.server.listen?.port ?? 3e3}`,
115
130
  dictUtils: dictUtilsCode
116
131
  };
117
132
  for (const target of targets) {
118
133
  const srcPath = path.join(import.meta.dirname.replace("/dist/", "/src/"), `../shared/${target}.shared.ts.txt`);
119
- if (!await exists(srcPath)) continue;
120
- if (!await exists(path.join(Sonamu.appRootPath, target))) throw new Error(`Tried to copy sonamu.shared.ts to target '${target}' but the target directory does not exist. Please check your project directory structure.`);
121
- const fullText = await readFile(srcPath, "utf-8");
134
+ if (!await syncerFileExists(srcPath)) continue;
135
+ if (!await syncerFileExists(path.join(Sonamu.appRootPath, target))) throw new Error(`Tried to copy sonamu.shared.ts to target '${target}' but the target directory does not exist. Please check your project directory structure.`);
136
+ const fullText = await syncerFilesystem.readFile(srcPath, "utf-8");
122
137
  const convertedText = Object.entries(convertMap).reduce((acc, [key, value]) => acc.replace(`$[[${key}]]`, value), fullText);
123
138
  const destPath = path.join(Sonamu.appRootPath, target, "src/services/sonamu.shared.ts");
124
- if (!await exists(path.dirname(destPath))) {
125
- await mkdir(path.dirname(destPath), { recursive: true });
139
+ if (!await syncerFileExists(path.dirname(destPath))) {
140
+ await syncerFilesystem.mkdir(path.dirname(destPath), { recursive: true });
126
141
  console.warn(`Created directory '${path.dirname(destPath)}' because it did not exist.`);
127
142
  }
128
- if (await exists(destPath)) continue;
129
- await writeFile(destPath, await formatCode(convertedText, destPath));
143
+ if (await syncerFileExists(destPath)) continue;
144
+ await syncerFilesystem.writeFile(destPath, await formatCode(convertedText, destPath));
130
145
  !isTest() && console.log(chalk.bold("Copied: ") + chalk.blue(path.relative(Sonamu.appRootPath, destPath)));
131
146
  }
132
147
  }
@@ -156,7 +171,7 @@ async function actionSyncSonamuDictionary() {
156
171
  */
157
172
  async function syncLocaleFiles(target, apiI18nDir, locales) {
158
173
  const targetI18nDir = path.join(Sonamu.appRootPath, target, "src/i18n");
159
- await mkdir(targetI18nDir, { recursive: true });
174
+ await syncerFilesystem.mkdir(targetI18nDir, { recursive: true });
160
175
  for (const locale of locales) {
161
176
  const sourceFile = path.join(apiI18nDir, `${locale}.ts`);
162
177
  const targetFile = path.join(targetI18nDir, `${locale}.ts`);
@@ -176,12 +191,14 @@ var init_syncer_actions = __esmMin((() => {
176
191
  init_naite();
177
192
  init_controller();
178
193
  init_formatter();
179
- init_fs_utils();
194
+ init_runtime_value();
180
195
  init_code_generator();
196
+ init_file_copy();
181
197
  init_file_tracking();
198
+ init_filesystem_dependencies();
182
199
  }));
183
200
  //#endregion
184
201
  init_syncer_actions();
185
- export { actionCopySharedToTargetsIfNotExists, actionGenerateHttps, actionGenerateInitialTypes, actionGenerateSchemas, actionGenerateServices, actionGenerateSsrEntryServerIfNotExists, actionGenerateSsrQueries, actionSyncConfig, actionSyncFilesToTargets, actionSyncSonamuDictionary, init_syncer_actions };
202
+ export { actionCopySharedToTargetsIfNotExists, actionGenerateHttpValidators, actionGenerateHttps, actionGenerateInitialTypes, actionGenerateSchemas, actionGenerateServices, actionGenerateSsrEntryServerIfNotExists, actionGenerateSsrQueries, actionSyncConfig, actionSyncFilesToTargets, actionSyncSonamuDictionary, init_syncer_actions };
186
203
 
187
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLWFjdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9zeW5jZXItYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IG1rZGlyLCByZWFkRmlsZSwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCwgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVGVtcGxhdGUgfSBmcm9tIFwiLi9jb2RlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgdHJhY2tXcml0dGVuIH0gZnJvbSBcIi4vZmlsZS10cmFja2luZ1wiO1xuXG4vLyB3ZWIvLnNvbmFtdS5lbnYg7JeQIO2YhOyerCDshKTsoJXqsJIg7KCA7J6lXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY0NvbmZpZygpIHtcbiAgY29uc3QgeyBob3N0LCBwb3J0IH0gPSBTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4gPz8ge307XG4gIGNvbnN0IGNvbnRlbnQgPSBgQVBJX0hPU1Q9JHtob3N0ID8/IFwibG9jYWxob3N0XCJ9XFxuQVBJX1BPUlQ9JHtwb3J0ID8/IDMwMDB9YDtcblxuICBOYWl0ZS50KFwiYWN0aW9uU3luY0NvbmZpZ1wiLCB7IGNvbnRlbnQgfSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAuLi5Tb25hbXUuY29uZmlnLnN5bmMudGFyZ2V0cy5tYXAoYXN5bmMgKHRhcmdldCkgPT4ge1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgXCIuc29uYW11LmVudlwiKSwgY29udGVudCk7XG4gICAgfSksXG4gICAgZ2VuZXJhdGVUZW1wbGF0ZShcImdlbmVyYXRlZF9zc29cIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pLFxuICBdKTtcbn1cblxuLyoqXG4gKiBzZXJ2aWNlcy5nZW5lcmF0ZWQudHPrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHBhcmFtIHBhcmFtc0FycmF5XG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzKFxuICBwYXJhbXNBcnJheToge1xuICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlOYW1lc1JlY29yZDtcbiAgfVtdLFxuKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBOYWl0ZS50KFwiYWN0aW9uR2VuZXJhdGVTZXJ2aWNlc1wiLCBwYXJhbXNBcnJheSk7XG5cbiAgLy8gc2VydmljZXMuZ2VuZXJhdGVkLnRzIO2Gte2VqSDtjIzsnbwg7IOd7ISxXG4gIGNvbnN0IHNlcnZpY2VzRmlsZSA9IGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXG4gICAgXCJzZXJ2aWNlc1wiLFxuICAgIHt9LFxuICAgIHtcbiAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIHJldHVybiBbLi4uc2VydmljZXNGaWxlXTtcbn1cblxuLyoqXG4gKiBFbnRpdHnsl5Ag65S466awIOy0iOq4sCB0eXBlcy50c+ulvCDrp4zrk6TslrTspI3ri4jri6QuXG4gKiBAcGFyYW0gZW50aXR5SWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSW5pdGlhbFR5cGVzKGVudGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIHJldHVybiBnZW5lcmF0ZVRlbXBsYXRlKFwiaW5pdF90eXBlc1wiLCB7IGVudGl0eUlkIH0pO1xufVxuXG4vKipcbiAqIHNvbmFtdS5nZW5lcmF0ZWQudHPsmYAgc29uYW11LmdlbmVyYXRlZC5zc28udHPrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTY2hlbWFzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkX3Nzb1wiLCB7fSwgeyBvdmVyd3JpdGU6IHRydWUgfSksXG4gICAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KSxcbiAgICBdKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzb25hbXUuZ2VuZXJhdGVkLmh0dHDrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZUh0dHBzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoPiB7XG4gIGNvbnN0IFtyZXNdID0gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcbiAgICBcImdlbmVyYXRlZF9odHRwXCIsXG4gICAgeyBlbnRpdHlJZDogXCJkdW1teVwiIH0sXG4gICAgeyBvdmVyd3JpdGU6IHRydWUgfSxcbiAgKTtcbiAgYXNzZXJ0KHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICogcXVlcmllcy5nZW5lcmF0ZWQudHMg7J6s7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTc3JRdWVyaWVzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIGdlbmVyYXRlVGVtcGxhdGUoXCJxdWVyaWVzXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBlbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeOulvCDsg53shLHtlanri4jri6QuXG4gKiDri6Trpbgg7JWh7IWY65Ok6rO8IOuLrOumrCwg7J2066+4IO2MjOydvOydtCDsnojsnLzrqbQg6re464OlIOuGlOuRoeuLiOuLpC4g6re4656Y7IScIO2VqOyImCDsnbTrpoQg64Gd7JeQIOyNqOuGqOyWtOyalCDjhY5cbiAqIOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5zrnbwg66ek67KIIG92ZXJ3cml0ZeuKlCBtdGltZeunjCDqsLHsi6DtlZjripQg7J2Y66+4IOyXhuuKlCDrj5nsnpEuXG4gKiDthZztlIzrpr8g7J6Q7LK06rCAIOuzgOqyveuQnCDqsr3smrAoU29uYW11IOyXheq3uOugiOydtOuTnCnsl5DripQg7IKs7Jqp7J6Q6rCAIO2MjOydvOydhCDsgq3soJztlZwg65KkIHN5bmProZwg7J6s7IOd7ISxLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0ICjsnbTrr7gg7J6I7Jy866m0IOu5iCDrsLDsl7QpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTc3JFbnRyeVNlcnZlcklmTm90RXhpc3RzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImVudHJ5X3NlcnZlclwiLCB7fSwgeyBvdmVyd3JpdGU6IGZhbHNlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZ2VuZXJhdGVUZW1wbGF0ZeydgCBvdmVyd3JpdGU6IGZhbHNl7JeQ7IScIO2MjOydvOydtCDsnbTrr7gg7J6I7Jy866m0IOyYiOyZuOulvCDrjZjsp5Hri4jri6QuXG4gICAgLy8gSWZOb3RFeGlzdHMg7J2Y66+47IOBIFwi6re464OlIOuGlOuRlOuLpFwi6rCAIOygleyDgeydtOuvgOuhnCDruYgg67Cw7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIOyjvOyWtOynhCAudHMg7YyM7J2865OkKGFwaeyXkCDsnojri6Tqs6Ag6rCA7KCVKeydhCDrqqjrk6Ag7YOA6rKfIOuUlOugie2GoOumrOydmCBzZXJ2aWNlc+yXkCDqsJbri6Qg65Gh64uI64ukLlxuICog7J2065WMIOuCtOu2gOydmCBzb25hbXUgaW1wb3J064qUIHNvbmFtdS5zaGFyZWQudHMgaW1wb3J066GcIOy5mO2ZmOuQmOqzoCxcbiAqIOqyveuhnOydmCAvYXBwbGljYXRpb24v7J2AIC9zZXJ2aWNlcy/roZwg7LmY7ZmY65Cp64uI64ukLlxuICpcbiAqIEBwYXJhbSB0c1BhdGhzIOuzteyCrO2VoCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnFxuICogQHJldHVybnMg6rCBIO2DgOqyn+yXkCDrs7XsgqzrkJwg7YyM7J2865Ok7J2YIOygiOuMgCDqsr3roZwg67Cw7Je0IChmbGF0KS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyh0c1BhdGhzOiBBYnNvbHV0ZVBhdGhbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gIGNvbnN0IHsgZGlyOiBhcGlEaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gIHJldHVybiAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0YXJnZXRzLm1hcChhc3luYyAodGFyZ2V0KSA9PlxuICAgICAgICBQcm9taXNlLmFsbChcbiAgICAgICAgICB0c1BhdGhzLm1hcChhc3luYyAocmVhbFNyYykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHN0ID0gcmVhbFNyY1xuICAgICAgICAgICAgICAucmVwbGFjZShgLyR7YXBpRGlyfS9gLCBgLyR7dGFyZ2V0fS9gKVxuICAgICAgICAgICAgICAucmVwbGFjZShcIi9hcHBsaWNhdGlvbi9cIiwgXCIvc2VydmljZXMvXCIpO1xuICAgICAgICAgICAgY29uc3QgZGlyID0gZGlybmFtZShkc3QpO1xuICAgICAgICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKGRpcikpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IG1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzeW5jSGVhZGVyID0gW1xuICAgICAgICAgICAgICBcIi8qKlwiLFxuICAgICAgICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgICAgICAgXCIgKiBBUEnsl5DshJwg64+Z6riw7ZmU65CcIO2MjOydvOyeheuLiOuLpC4g7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgICAgICAgIFwiICovXCIsXG4gICAgICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgICAgICAgICBhd2FpdCBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkKHJlYWxTcmMsIGRzdCwgc3luY0hlYWRlcik7XG4gICAgICAgICAgICBhd2FpdCB0cmFja1dyaXR0ZW4oZHN0IGFzIEFic29sdXRlUGF0aCk7XG4gICAgICAgICAgICAhaXNUZXN0KCkgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuYmx1ZShkc3QucmVwbGFjZShgJHtTb25hbXUuYXBwUm9vdFBhdGh9L2AsIFwiXCIpKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBkc3Q7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICogc2hhcmVkIO2FnO2UjOumv+ycvOuhnOu2gO2EsCBzb25hbXUuc2hhcmVkLnRzIO2MjOydvOydhCDrp4zrk6TslrTshJwg66qo65OgIO2DgOqynyDrlJTroInthqDrpqzsl5Ag6rCW64ukIOuRoeuLiOuLpC5cbiAqIO2MjOydvOydhCDrp4zrk5zripQg6rO87KCV7JeQ7IScIOyXrOufrCDsuZjtmZgg6rCA6rO17J20IOydvOyWtOuCqeuLiOuLpC5cbiAqXG4gKiDri6Trpbgg7JWh7IWY65Ok6rO8IOuLrOumrCwg7J2066+4IO2MjOydvOydtCDsnojsnLzrqbQg6re464OlIOuGlOuRoeuLiOuLpC4g6re4656Y7IScIO2VqOyImCDsnbTrpoQg64Gd7JeQIOyNqOuGqOyWtOyalCDjhY5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkNvcHlTaGFyZWRUb1RhcmdldHNJZk5vdEV4aXN0cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG5cbiAgLy8gcGx1cmFsLnRzIOuCtOyaqeydhCDsnb3slrTshJwgc2hhcmVkIO2MjOydvOyXkCDsgr3snoXtlanri4jri6QuXG4gIGNvbnN0IGRpY3RVdGlsc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgXCIuLi9kaWN0L3V0aWxzLnRzXCIsXG4gICk7XG4gIGNvbnN0IGRpY3RVdGlsc0NvZGUgPSAoYXdhaXQgZXhpc3RzKGRpY3RVdGlsc1BhdGgpKSA/IGF3YWl0IHJlYWRGaWxlKGRpY3RVdGlsc1BhdGgsIFwidXRmLThcIikgOiBcIlwiO1xuXG4gIC8vIO2KueyglSDrs4DsiJgg7LmY7ZmY7J2EIOychO2VtOyEnCDsgqzsmqntlanri4jri6QuXG4gIGNvbnN0IGNvbnZlcnRNYXAgPSB7XG4gICAgYmFzZVVybDpcbiAgICAgIFNvbmFtdS5jb25maWcuc2VydmVyLmJhc2VVcmwgPz9cbiAgICAgIGBodHRwOi8vJHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIn06JHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMH1gLFxuICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgIC8vIOq3uOufsOuNsCBkaXN0IOyGjSDruYzrk5zrkJwg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnbQg7ZWE7JqU7ZWcIOqyg+ydtCDslYTri4jqs6AsIHNyY+yXkOunjCDsnojripQg7YWN7Iqk7Yq4IO2MjOydvOydtCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8g65Sw65287IScIC9zcmMv7JeQ7IScIOywvuyKteuLiOuLpC5cbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgICBgLi4vc2hhcmVkLyR7dGFyZ2V0fS5zaGFyZWQudHMudHh0YCxcbiAgICApO1xuICAgIGlmICghKGF3YWl0IGV4aXN0cyhzcmNQYXRoKSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBleGlzdHMocGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0KSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUcmllZCB0byBjb3B5IHNvbmFtdS5zaGFyZWQudHMgdG8gdGFyZ2V0ICcke3RhcmdldH0nIGJ1dCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIGNoZWNrIHlvdXIgcHJvamVjdCBkaXJlY3Rvcnkgc3RydWN0dXJlLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxUZXh0ID0gYXdhaXQgcmVhZEZpbGUoc3JjUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICBjb25zdCBjb252ZXJ0ZWRUZXh0ID0gT2JqZWN0LmVudHJpZXMoY29udmVydE1hcCkucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiBhY2MucmVwbGFjZShgJFtbJHtrZXl9XV1gLCB2YWx1ZSksXG4gICAgICBmdWxsVGV4dCxcbiAgICApO1xuXG4gICAgLy8g7J206rG0IO2UhOuhnOygne2KuOyXkCAudHMg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnYQg7IOd7ISx7ZWY64qUIOqyg+ydtOuvgOuhnCBzcmPsnZggLnRzIOqyveuhnOuhnCDqsJHri4jri6QuXG4gICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIFwic3JjL3NlcnZpY2VzL3NvbmFtdS5zaGFyZWQudHNcIik7XG5cbiAgICAvLyDsoJXrp5Ag7Zi57Iuc64KY7KeA66eMIHRhcmdldCDrlJTroInthqDrpqzripQg7J6I7Ja064+EIHNyYy9zZXJ2aWNlcyDrlJTroInthqDrpqzripQg7JeG7J2EIOyImCDsnojsnLzrr4DroZwg66+466asIOyDneyEse2VtOykjeuLiOuLpC5cbiAgICBpZiAoIShhd2FpdCBleGlzdHMocGF0aC5kaXJuYW1lKGRlc3RQYXRoKSkpKSB7XG4gICAgICBhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUoZGVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUud2FybihgQ3JlYXRlZCBkaXJlY3RvcnkgJyR7cGF0aC5kaXJuYW1lKGRlc3RQYXRoKX0nIGJlY2F1c2UgaXQgZGlkIG5vdCBleGlzdC5gKTtcbiAgICB9XG5cbiAgICAvLyDtjIzsnbzsnbQg7J2066+4IOyhtOyerO2VmOuptCDqsbTrhIjrnIHri4jri6QuXG4gICAgLy8gc29uYW11LnNoYXJlZC50c+uKlCDtlITroZzsoJ3tirjsl5DshJwg7J6Q7Jyg66Gt6rKMIOy7pOyKpO2EsOuniOydtOynle2VoCDsiJgg7J6I7Ja07JW8IO2VmOuvgOuhnCxcbiAgICAvLyDstZzstIggMe2ajOunjCDsg53shLHtlZjqs6Ag7J207ZuE7JeQ64qUIOuNruyWtOyTsOyngCDslYrsirXri4jri6QuXG4gICAgLy8g7YWc7ZSM66a/IOuCtOyaqSgkW1tkaWN0VXRpbHNdXSDrk7Ep7J20IOuzgOqyveuQmOyXiOydhCDrlYwg67CY7JiB7J20IO2VhOyalO2VmOuptCxcbiAgICAvLyDtlbTri7kg7YyM7J287J2EIOyCreygnO2VnCDrkqQgYHBucG0gc29uYW11IHN5bmNg66GcIOyerOyDneyEse2VmOuptCDrkKnri4jri6QuXG4gICAgaWYgKGF3YWl0IGV4aXN0cyhkZXN0UGF0aCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGF3YWl0IHdyaXRlRmlsZShkZXN0UGF0aCwgYXdhaXQgZm9ybWF0Q29kZShjb252ZXJ0ZWRUZXh0LCBkZXN0UGF0aCkpO1xuICAgICFpc1Rlc3QoKSAmJlxuICAgICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuYmx1ZShwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcHBSb290UGF0aCwgZGVzdFBhdGgpKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTb25hbXUgRGljdGlvbmFyeShTRCnrpbwg66qo65OgIO2DgOqynyhhcGkgKyB3ZWIvYXBwIOuTsSnsl5Ag64+Z6riw7ZmU7ZWp64uI64ukLlxuICpcbiAqIOqwgSDtg4Dqsp/sl5Ag64yA7ZW0OlxuICogLSB0YXJnZXTsnbQgYXBp6rCAIOyVhOuLiOuptCDsgqzsmqnsnpAg7J6R7ISxIGxvY2FsZSDtjIzsnbwoa28udHMvZW4udHMvLi4uKeydhCBhcGkg4oaSIHRhcmdldOycvOuhnCDrs7XsgqxcbiAqIC0gc2Qg7YWc7ZSM66a/7J2EIOugjOuNlOunge2VtOyEnCBzZC5nZW5lcmF0ZWQudHMg7IOd7ISxIChvdmVyd3JpdGUpXG4gKlxuICog7ZWcIO2DgOqyn+yXkOyEnCDsi6TtjKjtlbTrj4Qg64uk66W4IO2DgOqyn+ydgCDqs4Tsho0g7KeE7ZaJ7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY1NvbmFtdURpY3Rpb25hcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgdGFyZ2V0cyB9ID0gU29uYW11LmNvbmZpZy5zeW5jO1xuICBjb25zdCBpMThuQ29uZmlnID0gU29uYW11LmNvbmZpZy5pMThuO1xuXG4gIGNvbnN0IHRhcmdldExpc3QgPSBbXCJhcGlcIiwgLi4udGFyZ2V0c10gYXMgKFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIilbXTtcblxuICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldExpc3QpIHtcbiAgICB0cnkge1xuICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICBpZiAodGFyZ2V0ICE9PSBcImFwaVwiKSB7XG4gICAgICAgIGF3YWl0IHN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJzZFwiLCB7IHRhcmdldCB9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgU0QgdGVtcGxhdGUgZm9yICR7dGFyZ2V0fTpgLCBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luY0xvY2FsZUZpbGVzKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgYXBpSTE4bkRpcjogc3RyaW5nLFxuICBsb2NhbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0YXJnZXRJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9pMThuXCIpO1xuXG4gIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gIGF3YWl0IG1rZGlyKHRhcmdldEkxOG5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gcGF0aC5qb2luKGFwaUkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcbiAgICBjb25zdCB0YXJnZXRGaWxlID0gcGF0aC5qb2luKHRhcmdldEkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcblxuICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICBcIi8qKlwiLFxuICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgIFwiICovXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSwgc3luY0hlYWRlcik7XG4gICAgYXdhaXQgdHJhY2tXcml0dGVuKHRhcmdldEZpbGUgYXMgQWJzb2x1dGVQYXRoKTtcbiAgICAhaXNUZXN0KCkgJiZcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmN5YW4oYCR7dGFyZ2V0fS9zcmMvaTE4bi8ke2xvY2FsZX0udHNgKSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFrQkEsZUFBc0IsbUJBQW1CO0NBQ3ZDLE1BQU0sRUFBRSxNQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU8sVUFBVSxDQUFDO0NBQ3ZELE1BQU0sVUFBVSxZQUFZLFFBQVEsWUFBWSxhQUFhLFFBQVE7Q0FFckUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsQ0FBQztDQUN2QyxNQUFNLFFBQVEsSUFBSSxDQUNoQixHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLFdBQVc7RUFDbEQsTUFBTSxVQUFVLEtBQUssS0FBSyxPQUFPLGFBQWEsUUFBUSxhQUFhLEdBQUcsT0FBTztDQUMvRSxDQUFDLEdBQ0QsaUJBQWlCLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxXQUFXLEtBQUssQ0FBQyxDQUMzRCxDQUFDO0FBQ0g7Ozs7OztBQU9BLGVBQXNCLHVCQUNwQixhQUd5QjtDQUN6QixNQUFNLEVBQUUsMEJBQTBCLFdBQVc7Q0FXN0MsT0FBTyxDQUFDLEdBQUcsTUFSZ0Is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
204
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLWFjdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9zeW5jZXItYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBwYXRoLCB7IGRpcm5hbWUgfSBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IE5haXRlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi91dGlscy9mb3JtYXR0ZXJcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGlzT2JqZWN0VmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVUZW1wbGF0ZSB9IGZyb20gXCIuL2NvZGUtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkIH0gZnJvbSBcIi4vZmlsZS1jb3B5XCI7XG5pbXBvcnQgeyB0cmFja1dyaXR0ZW4gfSBmcm9tIFwiLi9maWxlLXRyYWNraW5nXCI7XG5pbXBvcnQgeyBzeW5jZXJGaWxlRXhpc3RzLCBzeW5jZXJGaWxlc3lzdGVtIH0gZnJvbSBcIi4vZmlsZXN5c3RlbS1kZXBlbmRlbmNpZXNcIjtcblxuLy8gd2ViLy5zb25hbXUuZW52IOyXkCDtmITsnqwg7ISk7KCV6rCSIOyggOyepVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNDb25maWcoKSB7XG4gIGNvbnN0IHsgaG9zdCwgcG9ydCB9ID0gU29uYW11LmNvbmZpZy5zZXJ2ZXIubGlzdGVuID8/IHt9O1xuICBjb25zdCBjb250ZW50ID0gYEFQSV9IT1NUPSR7aG9zdCA/PyBcImxvY2FsaG9zdFwifVxcbkFQSV9QT1JUPSR7cG9ydCA/PyAzMDAwfWA7XG5cbiAgTmFpdGUudChcImFjdGlvblN5bmNDb25maWdcIiwgeyBjb250ZW50IH0pO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLi4uU29uYW11LmNvbmZpZy5zeW5jLnRhcmdldHMubWFwKCh0YXJnZXQpID0+IHtcbiAgICAgIHJldHVybiBzeW5jZXJGaWxlc3lzdGVtLndyaXRlRmlsZShcbiAgICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcIi5zb25hbXUuZW52XCIpLFxuICAgICAgICBjb250ZW50LFxuICAgICAgKTtcbiAgICB9KSxcbiAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkX3Nzb1wiLCB7fSwgeyBvdmVyd3JpdGU6IHRydWUgfSksXG4gIF0pO1xufVxuXG4vKipcbiAqIHNlcnZpY2VzLmdlbmVyYXRlZC50c+ulvCDsg53shLHtlanri4jri6QuXG4gKiBAcGFyYW0gcGFyYW1zQXJyYXlcbiAqIEByZXR1cm5zIOyDneyEseuQnCDtjIzsnbwg6rK966GcIOuwsOyXtC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlU2VydmljZXMoXG4gIHBhcmFtc0FycmF5OiB7XG4gICAgbmFtZXNSZWNvcmQ6IEVudGl0eU5hbWVzUmVjb3JkO1xuICB9W10sXG4pOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIE5haXRlLnQoXCJhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzXCIsIHBhcmFtc0FycmF5KTtcblxuICAvLyBzZXJ2aWNlcy5nZW5lcmF0ZWQudHMg7Ya17ZWpIO2MjOydvCDsg53shLFcbiAgY29uc3Qgc2VydmljZXNGaWxlID0gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcbiAgICBcInNlcnZpY2VzXCIsXG4gICAge30sXG4gICAge1xuICAgICAgb3ZlcndyaXRlOiB0cnVlLFxuICAgIH0sXG4gICk7XG5cbiAgcmV0dXJuIFsuLi5zZXJ2aWNlc0ZpbGVdO1xufVxuXG4vKipcbiAqIEVudGl0eeyXkCDrlLjrprAg7LSI6riwIHR5cGVzLnRz66W8IOunjOuTpOyWtOykjeuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHlJZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVJbml0aWFsVHlwZXMoZW50aXR5SWQ6IHN0cmluZyk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIGdlbmVyYXRlVGVtcGxhdGUoXCJpbml0X3R5cGVzXCIsIHsgZW50aXR5SWQgfSk7XG59XG5cbi8qKlxuICogc29uYW11LmdlbmVyYXRlZC50c+yZgCBzb25hbXUuZ2VuZXJhdGVkLnNzby50c+ulvCDsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNjaGVtYXMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICByZXR1cm4gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGdlbmVyYXRlVGVtcGxhdGUoXCJnZW5lcmF0ZWRfc3NvXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KSxcbiAgICAgIGdlbmVyYXRlVGVtcGxhdGUoXCJnZW5lcmF0ZWRcIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pLFxuICAgIF0pXG4gICkuZmxhdCgpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5nZW5lcmF0ZWQuaHR0cOulvCDsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSHR0cHMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgW3Jlc10gPSBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFxuICAgIFwiZ2VuZXJhdGVkX2h0dHBcIixcbiAgICB7IGVudGl0eUlkOiBcImR1bW15XCIgfSxcbiAgICB7IG92ZXJ3cml0ZTogdHJ1ZSB9LFxuICApO1xuICBhc3NlcnQocmVzKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiDstZzsooUgUkVTVCBjYXN0ZXLrpbwg64u064qUIEFQSSDsoITsmqkgdmFsaWRhdG9yIHJlZ2lzdHJ566W8IOyerOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSHR0cFZhbGlkYXRvcnMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgcmVnaXN0cnlQYXRoID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHBhdGguam9pbihcbiAgICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgIFwic3JjL2FwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC50c1wiLFxuICAgICkgYXMgQWJzb2x1dGVQYXRoO1xuICBjb25zdCBwb2xpY3kgPSBTb25hbXUuY29uZmlnLnZhbGlkYXRpb24/LnpvZENvbXBpbGVyO1xuICBjb25zdCBpc0FvdCA9IGlzT2JqZWN0VmFsdWUocG9saWN5KSAmJiBwb2xpY3kgIT09IG51bGwgJiYgcG9saWN5LmFwaSA9PT0gXCJhb3RcIjtcbiAgaWYgKCFpc0FvdCkge1xuICAgIC8vIG9wdC1vdXQvSklUIOyghO2ZmCDrkqQgQU9UIGNvbXBpbGUgaW1wb3J06rCAIOyVoO2UjOumrOy8gOydtOyFmOyXkCDrgqjsp4Ag7JWK64+E66GdIOyCsOy2nOusvOuPhCDtlajqu5gg7KCV66as7ZWp64uI64ukLlxuICAgIGlmIChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKHJlZ2lzdHJ5UGF0aCkpIHtcbiAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0udW5saW5rKHJlZ2lzdHJ5UGF0aCk7XG4gICAgfVxuICAgIHJldHVybiByZWdpc3RyeVBhdGg7XG4gIH1cblxuICBjb25zdCBbZ2VuZXJhdGVkUGF0aF0gPSBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiaHR0cF92YWxpZGF0b3JzXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgYXNzZXJ0KGdlbmVyYXRlZFBhdGgpO1xuICByZXR1cm4gZ2VuZXJhdGVkUGF0aDtcbn1cblxuLyoqXG4gKiBxdWVyaWVzLmdlbmVyYXRlZC50cyDsnqzsg53shLHtlanri4jri6QuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNzclF1ZXJpZXMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICByZXR1cm4gZ2VuZXJhdGVUZW1wbGF0ZShcInF1ZXJpZXNcIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN466W8IOyDneyEse2VqeuLiOuLpC5cbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICog7J6F66ClIOydmOyhtCDsl4bripQg7KCV7KCBIOy9lOuTnOudvCDrp6Trsoggb3ZlcndyaXRl64qUIG10aW1l66eMIOqwseyLoO2VmOuKlCDsnZjrr7gg7JeG64qUIOuPmeyekS5cbiAqIO2FnO2UjOumvyDsnpDssrTqsIAg67OA6rK965CcIOqyveyasChTb25hbXUg7JeF6re466CI7J2065OcKeyXkOuKlCDsgqzsmqnsnpDqsIAg7YyM7J287J2EIOyCreygnO2VnCDrkqQgc3luY+uhnCDsnqzsg53shLEuXG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QgKOydtOuvuCDsnojsnLzrqbQg67mIIOuwsOyXtCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNzckVudHJ5U2VydmVySWZOb3RFeGlzdHMoKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKFwiZW50cnlfc2VydmVyXCIsIHt9LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBnZW5lcmF0ZVRlbXBsYXRl7J2AIG92ZXJ3cml0ZTogZmFsc2Xsl5DshJwg7YyM7J287J20IOydtOuvuCDsnojsnLzrqbQg7JiI7Jm466W8IOuNmOynkeuLiOuLpC5cbiAgICAvLyBJZk5vdEV4aXN0cyDsnZjrr7jsg4EgXCLqt7jrg6Ug64aU65GU64ukXCLqsIAg7KCV7IOB7J2066+A66GcIOu5iCDrsLDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICAgIGlmIChlIGluc3RhbmNlb2YgQWxyZWFkeVByb2Nlc3NlZEV4Y2VwdGlvbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbi8qKlxuICog7KO87Ja07KeEIC50cyDtjIzsnbzrk6QoYXBp7JeQIOyeiOuLpOqzoCDqsIDsoJUp7J2EIOuqqOuToCDtg4Dqsp8g65SU66CJ7Yag66as7J2YIHNlcnZpY2Vz7JeQIOqwluuLpCDrkaHri4jri6QuXG4gKiDsnbTrlYwg64K067aA7J2YIHNvbmFtdSBpbXBvcnTripQgc29uYW11LnNoYXJlZC50cyBpbXBvcnTroZwg7LmY7ZmY65CY6rOgLFxuICog6rK966Gc7J2YIC9hcHBsaWNhdGlvbi/snYAgL3NlcnZpY2VzL+uhnCDsuZjtmZjrkKnri4jri6QuXG4gKlxuICogQHBhcmFtIHRzUGF0aHMg67O17IKs7ZWgIO2MjOydvOuTpOydmCDsoIjrjIAg6rK966GcXG4gKiBAcmV0dXJucyDqsIEg7YOA6rKf7JeQIOuzteyCrOuQnCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnCDrsLDsl7QgKGZsYXQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY0ZpbGVzVG9UYXJnZXRzKHRzUGF0aHM6IEFic29sdXRlUGF0aFtdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgeyBkaXI6IGFwaURpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRhcmdldHMubWFwKGFzeW5jICh0YXJnZXQpID0+XG4gICAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICAgIHRzUGF0aHMubWFwKGFzeW5jIChyZWFsU3JjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkc3QgPSByZWFsU3JjXG4gICAgICAgICAgICAgIC5yZXBsYWNlKGAvJHthcGlEaXJ9L2AsIGAvJHt0YXJnZXR9L2ApXG4gICAgICAgICAgICAgIC5yZXBsYWNlKFwiL2FwcGxpY2F0aW9uL1wiLCBcIi9zZXJ2aWNlcy9cIik7XG4gICAgICAgICAgICBjb25zdCBkaXIgPSBkaXJuYW1lKGRzdCk7XG4gICAgICAgICAgICBpZiAoIShhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRpcikpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICAgICAgICAgIFwiLyoqXCIsXG4gICAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgICAgXCIgKi9cIixcbiAgICAgICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICAgICAgICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQocmVhbFNyYywgZHN0LCBzeW5jSGVhZGVyKTtcbiAgICAgICAgICAgIGF3YWl0IHRyYWNrV3JpdHRlbihcbiAgICAgICAgICAgICAgLyogU0FGRVRZOiBUeXBlU2NyaXB0IEFTVCDtjIzsi7Hqs7wg64+Z6riw7ZmUIOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyBkc3QgYXMgQWJzb2x1dGVQYXRoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICFpc1Rlc3QoKSAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5ibHVlKGRzdC5yZXBsYWNlKGAke1NvbmFtdS5hcHBSb290UGF0aH0vYCwgXCJcIikpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGRzdDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzaGFyZWQg7YWc7ZSM66a/7Jy866Gc67aA7YSwIHNvbmFtdS5zaGFyZWQudHMg7YyM7J287J2EIOunjOuTpOyWtOyEnCDrqqjrk6Ag7YOA6rKfIOuUlOugie2GoOumrOyXkCDqsJbri6Qg65Gh64uI64ukLlxuICog7YyM7J287J2EIOunjOuTnOuKlCDqs7zsoJXsl5DshJwg7Jes65+sIOy5mO2ZmCDqsIDqs7XsnbQg7J287Ja064Kp64uI64ukLlxuICpcbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uQ29weVNoYXJlZFRvVGFyZ2V0c0lmTm90RXhpc3RzKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcblxuICAvLyBwbHVyYWwudHMg64K07Jqp7J2EIOydveyWtOyEnCBzaGFyZWQg7YyM7J287JeQIOyCveyehe2VqeuLiOuLpC5cbiAgY29uc3QgZGljdFV0aWxzUGF0aCA9IHBhdGguam9pbihcbiAgICBpbXBvcnQubWV0YS5kaXJuYW1lLnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKSxcbiAgICBcIi4uL2RpY3QvdXRpbHMudHNcIixcbiAgKTtcbiAgY29uc3QgZGljdFV0aWxzQ29kZSA9IChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRpY3RVdGlsc1BhdGgpKVxuICAgID8gYXdhaXQgc3luY2VyRmlsZXN5c3RlbS5yZWFkRmlsZShkaWN0VXRpbHNQYXRoLCBcInV0Zi04XCIpXG4gICAgOiBcIlwiO1xuXG4gIC8vIO2KueyglSDrs4DsiJgg7LmY7ZmY7J2EIOychO2VtOyEnCDsgqzsmqntlanri4jri6QuXG4gIGNvbnN0IGNvbnZlcnRNYXAgPSB7XG4gICAgYmFzZVVybDpcbiAgICAgIFNvbmFtdS5jb25maWcuc2VydmVyLmJhc2VVcmwgPz9cbiAgICAgIGBodHRwOi8vJHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIn06JHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMH1gLFxuICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgIC8vIOq3uOufsOuNsCBkaXN0IOyGjSDruYzrk5zrkJwg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnbQg7ZWE7JqU7ZWcIOqyg+ydtCDslYTri4jqs6AsIHNyY+yXkOunjCDsnojripQg7YWN7Iqk7Yq4IO2MjOydvOydtCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8g65Sw65287IScIC9zcmMv7JeQ7IScIOywvuyKteuLiOuLpC5cbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgICBgLi4vc2hhcmVkLyR7dGFyZ2V0fS5zaGFyZWQudHMudHh0YCxcbiAgICApO1xuICAgIGlmICghKGF3YWl0IHN5bmNlckZpbGVFeGlzdHMoc3JjUGF0aCkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQpKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGNvcHkgc29uYW11LnNoYXJlZC50cyB0byB0YXJnZXQgJyR7dGFyZ2V0fScgYnV0IHRoZSB0YXJnZXQgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgY2hlY2sgeW91ciBwcm9qZWN0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFRleHQgPSBhd2FpdCBzeW5jZXJGaWxlc3lzdGVtLnJlYWRGaWxlKHNyY1BhdGgsIFwidXRmLThcIik7XG4gICAgY29uc3QgY29udmVydGVkVGV4dCA9IE9iamVjdC5lbnRyaWVzKGNvbnZlcnRNYXApLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4gYWNjLnJlcGxhY2UoYCRbWyR7a2V5fV1dYCwgdmFsdWUpLFxuICAgICAgZnVsbFRleHQsXG4gICAgKTtcblxuICAgIC8vIOydtOqxtCDtlITroZzsoJ3tirjsl5AgLnRzIOyGjOyKpCDsvZTrk5wg7YyM7J287J2EIOyDneyEse2VmOuKlCDqsoPsnbTrr4DroZwgc3Jj7J2YIC50cyDqsr3roZzroZwg6rCR64uI64ukLlxuICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkLnRzXCIpO1xuXG4gICAgLy8g7KCV66eQIO2YueyLnOuCmOyngOunjCB0YXJnZXQg65SU66CJ7Yag66as64qUIOyeiOyWtOuPhCBzcmMvc2VydmljZXMg65SU66CJ7Yag66as64qUIOyXhuydhCDsiJgg7J6I7Jy866+A66GcIOuvuOumrCDsg53shLHtlbTspI3ri4jri6QuXG4gICAgaWYgKCEoYXdhaXQgc3luY2VyRmlsZUV4aXN0cyhwYXRoLmRpcm5hbWUoZGVzdFBhdGgpKSkpIHtcbiAgICAgIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIocGF0aC5kaXJuYW1lKGRlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBjb25zb2xlLndhcm4oYENyZWF0ZWQgZGlyZWN0b3J5ICcke3BhdGguZGlybmFtZShkZXN0UGF0aCl9JyBiZWNhdXNlIGl0IGRpZCBub3QgZXhpc3QuYCk7XG4gICAgfVxuXG4gICAgLy8g7YyM7J287J20IOydtOuvuCDsobTsnqztlZjrqbQg6rG064SI65yB64uI64ukLlxuICAgIC8vIHNvbmFtdS5zaGFyZWQudHPripQg7ZSE66Gc7KCd7Yq47JeQ7IScIOyekOycoOuhreqyjCDsu6TsiqTthLDrp4jsnbTsp5XtlaAg7IiYIOyeiOyWtOyVvCDtlZjrr4DroZwsXG4gICAgLy8g7LWc7LSIIDHtmozrp4wg7IOd7ISx7ZWY6rOgIOydtO2bhOyXkOuKlCDrja7slrTsk7Dsp4Ag7JWK7Iq164uI64ukLlxuICAgIC8vIO2FnO2UjOumvyDrgrTsmqkoJFtbZGljdFV0aWxzXV0g65OxKeydtCDrs4Dqsr3rkJjsl4jsnYQg65WMIOuwmOyYgeydtCDtlYTsmpTtlZjrqbQsXG4gICAgLy8g7ZW064u5IO2MjOydvOydhCDsgq3soJztlZwg65KkIGBwbnBtIHNvbmFtdSBzeW5jYOuhnCDsnqzsg53shLHtlZjrqbQg65Cp64uI64ukLlxuICAgIGlmIChhd2FpdCBzeW5jZXJGaWxlRXhpc3RzKGRlc3RQYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYXdhaXQgc3luY2VyRmlsZXN5c3RlbS53cml0ZUZpbGUoZGVzdFBhdGgsIGF3YWl0IGZvcm1hdENvZGUoY29udmVydGVkVGV4dCwgZGVzdFBhdGgpKTtcbiAgICAhaXNUZXN0KCkgJiZcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmJsdWUocGF0aC5yZWxhdGl2ZShTb25hbXUuYXBwUm9vdFBhdGgsIGRlc3RQYXRoKSkpO1xuICB9XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkoU0Qp66W8IOuqqOuToCDtg4Dqsp8oYXBpICsgd2ViL2FwcCDrk7Ep7JeQIOuPmeq4sO2ZlO2VqeuLiOuLpC5cbiAqXG4gKiDqsIEg7YOA6rKf7JeQIOuMgO2VtDpcbiAqIC0gdGFyZ2V07J20IGFwaeqwgCDslYTri4jrqbQg7IKs7Jqp7J6QIOyekeyEsSBsb2NhbGUg7YyM7J28KGtvLnRzL2VuLnRzLy4uLinsnYQgYXBpIOKGkiB0YXJnZXTsnLzroZwg67O17IKsXG4gKiAtIHNkIO2FnO2UjOumv+ydhCDroIzrjZTrp4HtlbTshJwgc2QuZ2VuZXJhdGVkLnRzIOyDneyEsSAob3ZlcndyaXRlKVxuICpcbiAqIO2VnCDtg4Dqsp/sl5DshJwg7Iuk7Yyo7ZW064+EIOuLpOuluCDtg4Dqsp/snYAg6rOE7IaNIOynhO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNTb25hbXVEaWN0aW9uYXJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcbiAgY29uc3QgaTE4bkNvbmZpZyA9IFNvbmFtdS5jb25maWcuaTE4bjtcblxuICBjb25zdCB0YXJnZXRMaXN0ID1cbiAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIFtcbiAgICAgIFwiYXBpXCIsXG4gICAgICAuLi50YXJnZXRzLFxuICAgIF0gYXMgKFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIilbXTtcblxuICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldExpc3QpIHtcbiAgICB0cnkge1xuICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICBpZiAodGFyZ2V0ICE9PSBcImFwaVwiKSB7XG4gICAgICAgIGF3YWl0IHN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJzZFwiLCB7IHRhcmdldCB9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgU0QgdGVtcGxhdGUgZm9yICR7dGFyZ2V0fTpgLCBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luY0xvY2FsZUZpbGVzKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgYXBpSTE4bkRpcjogc3RyaW5nLFxuICBsb2NhbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0YXJnZXRJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9pMThuXCIpO1xuXG4gIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gIGF3YWl0IHN5bmNlckZpbGVzeXN0ZW0ubWtkaXIodGFyZ2V0STE4bkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBwYXRoLmpvaW4oYXBpSTE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuICAgIGNvbnN0IHRhcmdldEZpbGUgPSBwYXRoLmpvaW4odGFyZ2V0STE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuXG4gICAgY29uc3Qgc3luY0hlYWRlciA9IFtcbiAgICAgIFwiLyoqXCIsXG4gICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgIFwiICogQVBJ7JeQ7IScIOuPmeq4sO2ZlOuQnCDtjIzsnbzsnoXri4jri6QuIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgXCIgKi9cIixcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgYXdhaXQgY29weUZpbGVXaXRoUmVwbGFjZUNvcmVUb1NoYXJlZChzb3VyY2VGaWxlLCB0YXJnZXRGaWxlLCBzeW5jSGVhZGVyKTtcbiAgICBhd2FpdCB0cmFja1dyaXR0ZW4oXG4gICAgICAvKiBTQUZFVFk6IFR5cGVTY3JpcHQgQVNUIO2MjOyLseqzvCDrj5nquLDtmZQg7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIHRhcmdldEZpbGUgYXMgQWJzb2x1dGVQYXRoLFxuICAgICk7XG4gICAgIWlzVGVzdCgpICYmXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5jeWFuKGAke3RhcmdldH0vc3JjL2kxOG4vJHtsb2NhbGV9LnRzYCkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxlQUFzQixtQkFBbUI7Q0FDdkMsTUFBTSxFQUFFLE1BQU0sU0FBUyxPQUFPLE9BQU8sT0FBTyxVQUFVLENBQUM7Q0FDdkQsTUFBTSxVQUFVLFlBQVksUUFBUSxZQUFZLGFBQWEsUUFBUTtDQUVyRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxDQUFDO0NBQ3ZDLE1BQU0sUUFBUSxJQUFJLENBQ2hCLEdBQUcsT0FBTyxPQUFPLEtBQUssUUFBUSxLQUFLLFdBQVc7RUFDNUMsT0FBTyxpQkFBaUIsVUFDdEIsS0FBSyxLQUFLLE9BQU8sYUFBYSxRQUFRLGFBQWEsR0FDbkQsT0FDRjtDQUNGLENBQUMsR0FDRCxpQkFBaUIsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFdBQVcsS0FBSyxDQUFDLENBQzNELENBQUM7QUFDSDs7Ozs7O0FBT0EsZUFBc0IsdUJBQ3BCLGFBR3lCO0NBQ3pCLE1BQU0sRUFBRSwwQkFBMEIsV0FBVztDQVc3QyxPQUFPLENBQUMsR0FBRyxNQVJnQixpQkFDekIsWUFDQSxDQUFDLEdBQ0QsRUFDRSxXQUFXLEtBQ2IsQ0FDRixDQUV1QjtBQUN6Qjs7Ozs7QUFNQSxlQUFzQiwyQkFBMkIsVUFBMkM7Q0FDMUYsT0FBTyxpQkFBaUIsY0FBYyxFQUFFLFNBQVMsQ0FBQztBQUNwRDs7Ozs7QUFN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
@@ -6,23 +6,34 @@ import { type GenerateOptions, type PathAndCode } from "../types/types";
6
6
  import { TemplateKey } from "../types/types";
7
7
  import { type TemplateOptions } from "../types/types";
8
8
  import { type AbsolutePath } from "../utils/path-utils";
9
+ import { findChangedFilesUsingChecksums, renewChecksums } from "./checksum";
9
10
  import { type FileType } from "./file-patterns";
10
11
  import { type LoadedApis, type LoadedModels, type LoadedTypes } from "./module-loader";
11
- type DiffGroups = {
12
- [key in FileType]: AbsolutePath[];
13
- };
12
+ import * as SyncerActions from "./syncer-actions";
13
+ type DiffGroupKey = FileType | "unknown";
14
+ type DiffGroups = Partial<Record<DiffGroupKey, AbsolutePath[]>>;
15
+ export interface SyncerDependencies {
16
+ actionCopySharedToTargetsIfNotExists: typeof SyncerActions.actionCopySharedToTargetsIfNotExists;
17
+ actionGenerateHttpValidators: typeof SyncerActions.actionGenerateHttpValidators;
18
+ actionGenerateSsrEntryServerIfNotExists: typeof SyncerActions.actionGenerateSsrEntryServerIfNotExists;
19
+ findChangedFilesUsingChecksums: typeof findChangedFilesUsingChecksums;
20
+ renewChecksums: typeof renewChecksums;
21
+ }
14
22
  export declare class Syncer {
23
+ private readonly dependencies;
15
24
  apis: LoadedApis;
16
25
  types: LoadedTypes;
17
26
  models: LoadedModels;
18
27
  workflows: Map<string, WorkflowMetadata[]>;
19
28
  eventEmitter: EventEmitter;
29
+ constructor(dependencies?: SyncerDependencies);
20
30
  /**
21
31
  * 체크섬이 변경된 부분에 대해 싱크를 진행합니다.
22
32
  * dev 서버가 처음 떴을 때, sonamu sync 할 때 실행됩니다. 이후에는 hmrAndSync 경로를 타요.
23
33
  * @returns
24
34
  */
25
35
  sync(): Promise<void>;
36
+ private reconcileHttpValidatorRegistry;
26
37
  /**
27
38
  * 강제 풀-싱크: lock을 무시하고 처음부터 다시 싱크합니다.
28
39
  *
@@ -64,13 +75,13 @@ export declare class Syncer {
64
75
  doSyncActions(diffFilePaths: AbsolutePath[]): Promise<{
65
76
  diffTypes: FileType[];
66
77
  }>;
67
- calculateDiffGroups(diffFiles: AbsolutePath[]): DiffGroups;
78
+ calculateDiffGroups(diffFiles: AbsolutePath[]): Partial<Record<DiffGroupKey, `/${string}`[]>>;
68
79
  private changeMatcher;
69
80
  handleTruthSourceChanges(diffGroups: DiffGroups): Promise<void>;
70
81
  handleImplementationChanges(diffGroups: DiffGroups): Promise<void>;
71
82
  handleAuxiliarySymbolChanges(diffGroups: DiffGroups): Promise<void>;
72
- handleConfigChanges(_: DiffGroups): Promise<void>;
73
- handleSonamuDictionaryRelatedChanges(_: DiffGroups): Promise<void>;
83
+ handleConfigChanges(): Promise<void>;
84
+ handleSonamuDictionaryRelatedChanges(): Promise<void>;
74
85
  handleDrifts(drifts: AbsolutePath[]): Promise<void>;
75
86
  /**
76
87
  * 주어진 엔티티와 템플릿 키에 대해, 생성된 코드가 존재하는지 확인합니다.
@@ -1 +1 @@
1
- {"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer.ts"],"names":[],"mappings":"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"}