@cartanova/qgrid-cli 2.10.9 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/bundle/dist/_virtual/_rolldown/runtime.js +1 -10
  2. package/bundle/dist/application/monit/log-buffer.js +12 -6
  3. package/bundle/dist/application/monit/monit.frame.js +11 -3
  4. package/bundle/dist/application/monit/monit.types.js +1 -1
  5. package/bundle/dist/application/qgrid/conv-routing.js +9 -6
  6. package/bundle/dist/application/qgrid/expired-token-reminder.js +2 -2
  7. package/bundle/dist/application/qgrid/oauth.js +31 -4
  8. package/bundle/dist/application/qgrid/qgrid-image-generation.js +1 -1
  9. package/bundle/dist/application/qgrid/qgrid-response-format.js +22 -20
  10. package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +43 -34
  11. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +128 -93
  12. package/bundle/dist/application/qgrid/qgrid.frame.js +930 -49
  13. package/bundle/dist/application/qgrid/qgrid.types.js +212 -5
  14. package/bundle/dist/application/qgrid/schema-prompt.js +75 -48
  15. package/bundle/dist/application/qgrid/slack-user-map.js +1 -1
  16. package/bundle/dist/application/qgrid/token-death.js +1 -1
  17. package/bundle/dist/application/qgrid/token-subscriber.js +83 -30
  18. package/bundle/dist/application/qgrid/token-trigger-setup.js +1 -1
  19. package/bundle/dist/application/qgrid/token-window-keepalive.js +8 -6
  20. package/bundle/dist/application/qgrid/tool-emulation-schema.js +13 -13
  21. package/bundle/dist/application/qgrid/tool-emulation.js +19 -15
  22. package/bundle/dist/application/request-log/json-schema-type-text.js +29 -12
  23. package/bundle/dist/application/request-log/request-log.model.js +83 -69
  24. package/bundle/dist/application/request-log/request-log.types.js +8 -2
  25. package/bundle/dist/application/request-log/zod-code-format.js +1 -1
  26. package/bundle/dist/application/request-log-step/request-log-step.model.js +1 -1
  27. package/bundle/dist/application/request-log-step/request-log-step.types.js +1 -1
  28. package/bundle/dist/application/setting/setting.constant.js +1 -1
  29. package/bundle/dist/application/setting/setting.model.js +2 -2
  30. package/bundle/dist/application/setting/setting.store.js +2 -2
  31. package/bundle/dist/application/setting/setting.types.js +1 -1
  32. package/bundle/dist/application/sonamu.generated.js +40 -16
  33. package/bundle/dist/application/sonamu.generated.sso.js +2 -1
  34. package/bundle/dist/application/token/token.model.js +26 -9
  35. package/bundle/dist/application/token/token.types.js +20 -3
  36. package/bundle/dist/i18n/en.js +15 -1
  37. package/bundle/dist/i18n/ko.js +15 -1
  38. package/bundle/dist/i18n/sd.generated.js +2 -1
  39. package/bundle/dist/migrations/20260807133553_manual__backfill_request_log_cost.js +8 -6
  40. package/bundle/dist/migrations/20261018215031_alter_request_logs_add1_alter1.js +15 -0
  41. package/bundle/dist/server-bootstrap.js +4 -2
  42. package/bundle/dist/server-error-handler.js +1 -1
  43. package/bundle/dist/sonamu.config.js +37 -8
  44. package/bundle/dist/startup-migrations.js +17 -7
  45. package/bundle/dist/testing/global.js +1 -1
  46. package/bundle/dist/testing/schema-bench.js +0 -0
  47. package/bundle/dist/testing/test-database-name.js +1 -1
  48. package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +1 -1
  49. package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +11 -5
  50. package/bundle/dist/utils/providers/anthropic/anthropic-quota.js +4 -4
  51. package/bundle/dist/utils/providers/anthropic/anthropic-thinking.js +1 -1
  52. package/bundle/dist/utils/providers/anthropic/claude-session.js +20 -19
  53. package/bundle/dist/utils/providers/anthropic/fence-strip.js +1 -1
  54. package/bundle/dist/utils/providers/anthropic/stream-json-adapter.js +49 -23
  55. package/bundle/dist/utils/providers/common/credentials.js +5 -1
  56. package/bundle/dist/utils/providers/common/effort.js +3 -3
  57. package/bundle/dist/utils/providers/common/model-cost.js +69 -14
  58. package/bundle/dist/utils/providers/common/provider-types.js +29 -1
  59. package/bundle/dist/utils/providers/common/schema-validation.js +78 -40
  60. package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +1 -1
  61. package/bundle/dist/utils/providers/common/strictifier.js +62 -43
  62. package/bundle/dist/utils/providers/common/thinking.js +3 -2
  63. package/bundle/dist/utils/providers/common/ttft.js +1 -1
  64. package/bundle/dist/utils/providers/grok/grok-backend-protocol.js +427 -0
  65. package/bundle/dist/utils/providers/grok/grok-constants.js +55 -0
  66. package/bundle/dist/utils/providers/grok/grok-direct-client.js +196 -0
  67. package/bundle/dist/utils/providers/grok/grok-dispatcher.js +1313 -0
  68. package/bundle/dist/utils/providers/grok/grok-headers.js +118 -0
  69. package/bundle/dist/utils/providers/grok/grok-media-client.js +420 -0
  70. package/bundle/dist/utils/providers/grok/grok-models.js +114 -0
  71. package/bundle/dist/utils/providers/grok/grok-oauth.js +455 -0
  72. package/bundle/dist/utils/providers/grok/grok-quota.js +119 -0
  73. package/bundle/dist/utils/providers/grok/grok-refresh.js +192 -0
  74. package/bundle/dist/utils/providers/grok/grok-types.js +186 -0
  75. package/bundle/dist/utils/providers/grok/grok-voice-client.js +199 -0
  76. package/bundle/dist/utils/providers/grok/index.js +11 -0
  77. package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +111 -83
  78. package/bundle/dist/utils/providers/openai/openai-callback-relay.js +3 -2
  79. package/bundle/dist/utils/providers/openai/openai-constants.js +1 -1
  80. package/bundle/dist/utils/providers/openai/openai-direct-client.js +23 -7
  81. package/bundle/dist/utils/providers/openai/openai-dispatcher.js +143 -106
  82. package/bundle/dist/utils/providers/openai/openai-image-generation.js +48 -33
  83. package/bundle/dist/utils/providers/openai/openai-oauth.js +28 -13
  84. package/bundle/dist/utils/providers/openai/openai-quota.js +38 -27
  85. package/bundle/dist/utils/providers/openai/openai-refresh.js +17 -9
  86. package/bundle/dist/utils/providers/openai/openai-sse.js +1 -1
  87. package/bundle/dist/utils/providers/openai/openai-transport-config.js +1 -1
  88. package/bundle/dist/utils/quiet-hours.js +1 -1
  89. package/bundle/dist/utils/slack-notify.js +14 -8
  90. package/bundle/dist/utils/subset-loaders.js +4 -5
  91. package/bundle/src/application/monit/log-buffer.ts +23 -9
  92. package/bundle/src/application/monit/monit.frame.ts +22 -5
  93. package/bundle/src/application/monit/monit.types.ts +6 -0
  94. package/bundle/src/application/qgrid/conv-routing.test.ts +76 -4
  95. package/bundle/src/application/qgrid/conv-routing.ts +35 -9
  96. package/bundle/src/application/qgrid/expired-token-reminder.ts +9 -1
  97. package/bundle/src/application/qgrid/oauth.ts +51 -15
  98. package/bundle/src/application/qgrid/qgrid-image-generation.ts +9 -0
  99. package/bundle/src/application/qgrid/qgrid-response-format.ts +50 -25
  100. package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +33 -0
  101. package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +87 -40
  102. package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +97 -0
  103. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +274 -126
  104. package/bundle/src/application/qgrid/qgrid.frame.test.ts +1013 -3
  105. package/bundle/src/application/qgrid/qgrid.frame.ts +1415 -60
  106. package/bundle/src/application/qgrid/qgrid.types.ts +335 -0
  107. package/bundle/src/application/qgrid/schema-prompt.ts +105 -41
  108. package/bundle/src/application/qgrid/slack-user-map.ts +5 -0
  109. package/bundle/src/application/qgrid/token-death.ts +4 -0
  110. package/bundle/src/application/qgrid/token-subscriber.test.ts +21 -19
  111. package/bundle/src/application/qgrid/token-subscriber.ts +186 -53
  112. package/bundle/src/application/qgrid/token-trigger-setup.ts +2 -0
  113. package/bundle/src/application/qgrid/token-window-keepalive.ts +49 -6
  114. package/bundle/src/application/qgrid/tool-emulation-schema.ts +33 -29
  115. package/bundle/src/application/qgrid/tool-emulation.ts +52 -27
  116. package/bundle/src/application/request-log/json-schema-type-text.test.ts +5 -5
  117. package/bundle/src/application/request-log/json-schema-type-text.ts +81 -26
  118. package/bundle/src/application/request-log/request-log.entity.json +8 -0
  119. package/bundle/src/application/request-log/request-log.model.test.ts +111 -4
  120. package/bundle/src/application/request-log/request-log.model.ts +279 -145
  121. package/bundle/src/application/request-log/request-log.types.ts +17 -0
  122. package/bundle/src/application/request-log/zod-code-format.ts +11 -0
  123. package/bundle/src/application/request-log-step/request-log-step.model.ts +1 -0
  124. package/bundle/src/application/request-log-step/request-log-step.types.ts +2 -0
  125. package/bundle/src/application/setting/setting.constant.ts +9 -0
  126. package/bundle/src/application/setting/setting.model.ts +12 -2
  127. package/bundle/src/application/setting/setting.store.ts +5 -1
  128. package/bundle/src/application/setting/setting.types.ts +8 -0
  129. package/bundle/src/application/sonamu.generated.http +135 -0
  130. package/bundle/src/application/sonamu.generated.sso.ts +3 -0
  131. package/bundle/src/application/sonamu.generated.ts +29 -0
  132. package/bundle/src/application/token/token.identity.test.ts +20 -0
  133. package/bundle/src/application/token/token.model.ts +66 -7
  134. package/bundle/src/application/token/token.types.ts +24 -1
  135. package/bundle/src/i18n/en.ts +19 -0
  136. package/bundle/src/i18n/ko.ts +21 -0
  137. package/bundle/src/i18n/sd.generated.ts +24 -2
  138. package/bundle/src/migrations/20260807133553_manual__backfill_request_log_cost.ts +16 -8
  139. package/bundle/src/migrations/20261018215031_alter_request_logs_add1_alter1.ts +15 -0
  140. package/bundle/src/server-bootstrap.ts +4 -2
  141. package/bundle/src/server-error-handler.ts +1 -0
  142. package/bundle/src/sonamu.config.ts +69 -7
  143. package/bundle/src/startup-migrations.ts +27 -9
  144. package/bundle/src/testing/global.ts +20 -0
  145. package/bundle/src/testing/schema-bench.ts +105 -30
  146. package/bundle/src/testing/test-database-name.ts +2 -0
  147. package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +8 -0
  148. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +41 -6
  149. package/bundle/src/utils/providers/anthropic/anthropic-quota.ts +7 -3
  150. package/bundle/src/utils/providers/anthropic/anthropic-thinking.ts +6 -0
  151. package/bundle/src/utils/providers/anthropic/claude-session.ts +58 -24
  152. package/bundle/src/utils/providers/anthropic/fence-strip.ts +11 -0
  153. package/bundle/src/utils/providers/anthropic/stream-json-adapter.ts +110 -45
  154. package/bundle/src/utils/providers/common/credentials.ts +8 -0
  155. package/bundle/src/utils/providers/common/effort.ts +9 -2
  156. package/bundle/src/utils/providers/common/model-cost.test.ts +48 -1
  157. package/bundle/src/utils/providers/common/model-cost.ts +259 -158
  158. package/bundle/src/utils/providers/common/provider-dispatcher.ts +98 -2
  159. package/bundle/src/utils/providers/common/provider-types.ts +46 -3
  160. package/bundle/src/utils/providers/common/schema-validation.test.ts +5 -1
  161. package/bundle/src/utils/providers/common/schema-validation.ts +124 -56
  162. package/bundle/src/utils/providers/common/smooth-weighted-round-robin.ts +4 -0
  163. package/bundle/src/utils/providers/common/strictifier.ts +185 -59
  164. package/bundle/src/utils/providers/common/thinking.ts +2 -2
  165. package/bundle/src/utils/providers/common/ttft.ts +4 -2
  166. package/bundle/src/utils/providers/grok/__fixtures__/golden-responses-1.0.60.json +164 -0
  167. package/bundle/src/utils/providers/grok/grok-backend-protocol.test.ts +325 -0
  168. package/bundle/src/utils/providers/grok/grok-backend-protocol.ts +721 -0
  169. package/bundle/src/utils/providers/grok/grok-constants.ts +105 -0
  170. package/bundle/src/utils/providers/grok/grok-direct-client.test.ts +179 -0
  171. package/bundle/src/utils/providers/grok/grok-direct-client.ts +313 -0
  172. package/bundle/src/utils/providers/grok/grok-dispatcher.test.ts +1395 -0
  173. package/bundle/src/utils/providers/grok/grok-dispatcher.ts +2105 -0
  174. package/bundle/src/utils/providers/grok/grok-headers.test.ts +149 -0
  175. package/bundle/src/utils/providers/grok/grok-headers.ts +199 -0
  176. package/bundle/src/utils/providers/grok/grok-media-client.test.ts +446 -0
  177. package/bundle/src/utils/providers/grok/grok-media-client.ts +703 -0
  178. package/bundle/src/utils/providers/grok/grok-models.test.ts +96 -0
  179. package/bundle/src/utils/providers/grok/grok-models.ts +161 -0
  180. package/bundle/src/utils/providers/grok/grok-oauth.test.ts +406 -0
  181. package/bundle/src/utils/providers/grok/grok-oauth.ts +771 -0
  182. package/bundle/src/utils/providers/grok/grok-quota.test.ts +142 -0
  183. package/bundle/src/utils/providers/grok/grok-quota.ts +198 -0
  184. package/bundle/src/utils/providers/grok/grok-refresh.test.ts +239 -0
  185. package/bundle/src/utils/providers/grok/grok-refresh.ts +325 -0
  186. package/bundle/src/utils/providers/grok/grok-types.test.ts +252 -0
  187. package/bundle/src/utils/providers/grok/grok-types.ts +374 -0
  188. package/bundle/src/utils/providers/grok/grok-voice-client.test.ts +321 -0
  189. package/bundle/src/utils/providers/grok/grok-voice-client.ts +284 -0
  190. package/bundle/src/utils/providers/grok/index.ts +20 -0
  191. package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +221 -137
  192. package/bundle/src/utils/providers/openai/openai-callback-relay.ts +12 -1
  193. package/bundle/src/utils/providers/openai/openai-constants.ts +2 -0
  194. package/bundle/src/utils/providers/openai/openai-direct-client.ts +111 -21
  195. package/bundle/src/utils/providers/openai/openai-dispatcher.ts +322 -169
  196. package/bundle/src/utils/providers/openai/openai-image-generation.ts +116 -36
  197. package/bundle/src/utils/providers/openai/openai-oauth.ts +48 -20
  198. package/bundle/src/utils/providers/openai/openai-quota.ts +77 -46
  199. package/bundle/src/utils/providers/openai/openai-refresh.ts +42 -18
  200. package/bundle/src/utils/providers/openai/openai-sse.ts +27 -3
  201. package/bundle/src/utils/providers/openai/openai-transport-config.ts +2 -0
  202. package/bundle/src/utils/quiet-hours.ts +12 -1
  203. package/bundle/src/utils/slack-notify.ts +44 -13
  204. package/bundle/src/utils/subset-loaders.ts +7 -7
  205. package/bundle/web-dist/client/assets/clsx-5XM_pHvN.js +1 -0
  206. package/bundle/web-dist/client/assets/index-BA7uQ-6c.js +31 -0
  207. package/bundle/web-dist/client/assets/index-Be2qCZmI.css +1 -0
  208. package/bundle/web-dist/client/assets/logs-C47OJGEI.js +1 -0
  209. package/bundle/web-dist/client/assets/monit-BS9no0dU.js +4 -0
  210. package/bundle/web-dist/client/assets/plus-sdACTfH0.js +1 -0
  211. package/bundle/web-dist/client/assets/refresh-cw-CY8o_1cT.js +1 -0
  212. package/bundle/web-dist/client/assets/request-model-BRtFuZvj.js +1 -0
  213. package/bundle/web-dist/client/assets/routes-kqgkUxE8.js +5 -0
  214. package/bundle/web-dist/client/assets/{services.generated-BsieU37H.js → services.generated-CefiDXEv.js} +5 -5
  215. package/bundle/web-dist/client/assets/settings-DNDvFGSw.js +1 -0
  216. package/bundle/web-dist/client/assets/show-u8Np69q3.js +2 -0
  217. package/bundle/web-dist/client/assets/tokens-QvP410NW.js +1 -0
  218. package/bundle/web-dist/client/assets/total-cost-MnfKU8IN.js +1 -0
  219. package/bundle/web-dist/client/assets/use-oauth-login-flow-Bzdh28Ws.js +1 -0
  220. package/bundle/web-dist/client/assets/use-update-token-mutation-CfJKaxmR.js +1 -0
  221. package/bundle/web-dist/client/assets/vendor-react-CUFFrVN9.js +244 -0
  222. package/bundle/web-dist/client/assets/vendor-tanstack-Bf_jag9G.js +1 -0
  223. package/bundle/web-dist/client/index.html +6 -6
  224. package/bundle/web-dist/server/assets/clsx-D_N5PN_2.js +16 -0
  225. package/bundle/web-dist/server/assets/{lazyRouteComponent-Dtd0NR4r.js → lazyRouteComponent-D8iTIHyn.js} +129 -2
  226. package/bundle/web-dist/server/assets/logs-B3OTd9hy.js +825 -0
  227. package/bundle/web-dist/server/assets/{monit-DvzribSE.js → monit-B2hqorPe.js} +385 -126
  228. package/bundle/web-dist/server/assets/plus-DwG7h9kq.js +28 -0
  229. package/bundle/web-dist/server/assets/{react-dom-B4a6-uuR.js → react-dom-BIYQzBqG.js} +2 -129
  230. package/bundle/web-dist/server/assets/refresh-cw-mMBkwOq0.js +44 -0
  231. package/bundle/web-dist/server/assets/{request-model-CbqfnQOJ.js → request-model-I6OdODSH.js} +15 -6
  232. package/bundle/web-dist/server/assets/{routes-BAPWTizT.js → routes-B95YlUv2.js} +760 -213
  233. package/bundle/web-dist/server/assets/{services.generated-CEbGjsI0.js → services.generated-DQATJ6qf.js} +12821 -12194
  234. package/bundle/web-dist/server/assets/settings-C3gbGk0m.js +830 -0
  235. package/bundle/web-dist/server/assets/{show-CxVZTAdv.js → show-Bxaj3rhH.js} +1355 -419
  236. package/bundle/web-dist/server/assets/tokens-CZjH3cB7.js +1038 -0
  237. package/bundle/web-dist/server/assets/total-cost-fTE9Xy82.js +18 -0
  238. package/bundle/web-dist/server/assets/use-oauth-login-flow-CKDHgc3U.js +2379 -0
  239. package/bundle/web-dist/server/assets/{use-update-token-mutation-CfYmk_4_.js → use-update-token-mutation-BEbgOzaa.js} +1 -1
  240. package/bundle/web-dist/server/entry-server.generated.js +4303 -22810
  241. package/dist/cli.js +9 -9
  242. package/package.json +4 -11
  243. package/postinstall.mjs +12 -0
  244. package/skills/qgrid/SKILL.md +1 -0
  245. package/skills/qgrid/references/cli-env-and-server-boot.md +4 -1
  246. package/skills/qgrid/references/decision-rationale.md +24 -1
  247. package/skills/qgrid/references/grok-runtime.md +89 -0
  248. package/skills/qgrid/references/provider-runtime-differences.md +30 -29
  249. package/skills/qgrid/references/repo-map.md +10 -0
  250. package/skills/qgrid/references/request-log-run-lifecycle.md +1 -1
  251. package/skills/qgrid/references/sonamu-api-web-flow.md +1 -1
  252. package/skills/qgrid/references/token-auth-quota-lifecycle.md +56 -3
  253. package/bundle/dist/node_modules/.pnpm/@jridgewell_sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +0 -406
  254. package/bundle/dist/node_modules/.pnpm/@vitest_expect@4.1.10/node_modules/@vitest/expect/dist/index.js +0 -1507
  255. package/bundle/dist/node_modules/.pnpm/@vitest_pretty-format@4.1.10/node_modules/@vitest/pretty-format/dist/index.js +0 -887
  256. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/chunk-artifact.js +0 -2756
  257. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/index.js +0 -8
  258. package/bundle/dist/node_modules/.pnpm/@vitest_runner@4.1.10/node_modules/@vitest/runner/dist/utils.js +0 -8
  259. package/bundle/dist/node_modules/.pnpm/@vitest_snapshot@4.1.10/node_modules/@vitest/snapshot/dist/index.js +0 -922
  260. package/bundle/dist/node_modules/.pnpm/@vitest_spy@4.1.10/node_modules/@vitest/spy/dist/index.js +0 -386
  261. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +0 -121
  262. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/constants.js +0 -51
  263. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/diff.js +0 -1317
  264. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/display.js +0 -561
  265. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/error.js +0 -40
  266. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/helpers.js +0 -272
  267. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/offset.js +0 -27
  268. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/serialize.js +0 -77
  269. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/source-map.js +0 -381
  270. package/bundle/dist/node_modules/.pnpm/@vitest_utils@4.1.10/node_modules/@vitest/utils/dist/timers.js +0 -51
  271. package/bundle/dist/node_modules/.pnpm/chai@6.2.2/node_modules/chai/index.js +0 -2986
  272. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js +0 -10
  273. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js +0 -109
  274. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js +0 -10
  275. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js +0 -10
  276. package/bundle/dist/node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js +0 -10
  277. package/bundle/dist/node_modules/.pnpm/magic-string@0.30.21/node_modules/magic-string/dist/magic-string.es.js +0 -1126
  278. package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/index.js +0 -21
  279. package/bundle/dist/node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +0 -432
  280. package/bundle/dist/node_modules/.pnpm/tinybench@2.9.0/node_modules/tinybench/dist/index.js +0 -517
  281. package/bundle/dist/node_modules/.pnpm/tinyrainbow@3.1.0/node_modules/tinyrainbow/dist/index.js +0 -101
  282. package/bundle/dist/node_modules/.pnpm/vite@8.0.3_@emnapi_core@1.11.2_@emnapi_runtime@1.11.2_@types_node@25.0.7_esbuild@0.27.4_5b35fc1fb85d2af4d105e0d74f940f50/node_modules/vite/dist/node/module-runner.js +0 -1265
  283. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +0 -9
  284. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/benchmark.CX_oY03V.js +0 -41
  285. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/evaluatedModules.Dg1zASAC.js +0 -19
  286. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.Chj8NDwU.js +0 -202
  287. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/index.DdgEv5B1.js +0 -46
  288. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +0 -119
  289. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/test.DNmyFkvJ.js +0 -3044
  290. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +0 -59
  291. package/bundle/dist/node_modules/.pnpm/vitest@4.1.10_@opentelemetry_api@1.9.0_@types_node@25.0.7_@vitest_coverage-v8@4.1.10_vi_a1977b93af7bb69308bcb1dbab39b618/node_modules/vitest/dist/index.js +0 -28
  292. package/bundle/dist/testing/setup-mocks.js +0 -16
  293. package/bundle/src/testing/setup-mocks.ts +0 -44
  294. package/bundle/web-dist/client/assets/index-Bw2s88Ot.css +0 -1
  295. package/bundle/web-dist/client/assets/index-CrXKu_J8.js +0 -106
  296. package/bundle/web-dist/client/assets/logs-B2SmWJXA.js +0 -1
  297. package/bundle/web-dist/client/assets/monit-D-JwXXoA.js +0 -1
  298. package/bundle/web-dist/client/assets/plus-B62CuqT8.js +0 -1
  299. package/bundle/web-dist/client/assets/refresh-cw-NNcU0Cmq.js +0 -1
  300. package/bundle/web-dist/client/assets/request-model-CojtinqK.js +0 -1
  301. package/bundle/web-dist/client/assets/routes-C5r4gTvY.js +0 -5
  302. package/bundle/web-dist/client/assets/settings-D3tDSAck.js +0 -1
  303. package/bundle/web-dist/client/assets/show-Cah_kUKC.js +0 -2
  304. package/bundle/web-dist/client/assets/tokens-DU2Iyxxd.js +0 -1
  305. package/bundle/web-dist/client/assets/use-oauth-login-flow-D0UaR9_e.js +0 -1
  306. package/bundle/web-dist/client/assets/use-update-token-mutation-DAq0F8p-.js +0 -1
  307. package/bundle/web-dist/client/assets/vendor-react-DH4kUfK2.js +0 -9
  308. package/bundle/web-dist/client/assets/vendor-tanstack-DJRQAbrY.js +0 -1
  309. package/bundle/web-dist/server/assets/logs-l91avYif.js +0 -509
  310. package/bundle/web-dist/server/assets/plus-KZrECewT.js +0 -19
  311. package/bundle/web-dist/server/assets/refresh-cw-BND93JrF.js +0 -23
  312. package/bundle/web-dist/server/assets/settings-BZR5HSAL.js +0 -461
  313. package/bundle/web-dist/server/assets/tokens-D1hb4eKk.js +0 -448
  314. package/bundle/web-dist/server/assets/use-oauth-login-flow-Cvdy0zF8.js +0 -178
  315. package/dist/cli.d.ts +0 -10
  316. /package/bundle/web-dist/client/assets/{cost-DH2jZbrw.js → cost-DB3HbU7T.js} +0 -0
  317. /package/bundle/web-dist/client/assets/{preload-helper-ca-nBW7U.js → preload-helper-DWTEM3RW.js} +0 -0
  318. /package/bundle/web-dist/server/assets/{cost-eEHeTRT5.js → cost-BC9yzyA9.js} +0 -0
@@ -1,386 +0,0 @@
1
- //#region ../../node_modules/.pnpm/@vitest+spy@4.1.10/node_modules/@vitest/spy/dist/index.js
2
- function isMockFunction(fn) {
3
- return typeof fn === "function" && "_isMockFunction" in fn && fn._isMockFunction === true;
4
- }
5
- const MOCK_RESTORE = /* @__PURE__ */ new Set();
6
- const REGISTERED_MOCKS = /* @__PURE__ */ new Set();
7
- const MOCK_CONFIGS = /* @__PURE__ */ new WeakMap();
8
- function createMockInstance(options = {}) {
9
- const { originalImplementation, restore, mockImplementation, resetToMockImplementation, resetToMockName } = options;
10
- if (restore) MOCK_RESTORE.add(restore);
11
- const config = getDefaultConfig(originalImplementation);
12
- const state = getDefaultState();
13
- const mock = createMock({
14
- config,
15
- state,
16
- ...options
17
- });
18
- const mockLength = (mockImplementation || originalImplementation)?.length ?? 0;
19
- Object.defineProperty(mock, "length", {
20
- writable: true,
21
- enumerable: false,
22
- value: mockLength,
23
- configurable: true
24
- });
25
- if (resetToMockName) config.mockName = mock.name || "vi.fn()";
26
- MOCK_CONFIGS.set(mock, config);
27
- REGISTERED_MOCKS.add(mock);
28
- mock._isMockFunction = true;
29
- mock.getMockImplementation = () => {
30
- return config.onceMockImplementations[0] || config.mockImplementation;
31
- };
32
- Object.defineProperty(mock, "mock", {
33
- configurable: false,
34
- enumerable: true,
35
- writable: false,
36
- value: state
37
- });
38
- mock.mockImplementation = function mockImplementation(implementation) {
39
- config.mockImplementation = implementation;
40
- return mock;
41
- };
42
- mock.mockImplementationOnce = function mockImplementationOnce(implementation) {
43
- config.onceMockImplementations.push(implementation);
44
- return mock;
45
- };
46
- mock.withImplementation = function withImplementation(implementation, callback) {
47
- const previousImplementation = config.mockImplementation;
48
- const previousOnceImplementations = config.onceMockImplementations;
49
- const reset = () => {
50
- config.mockImplementation = previousImplementation;
51
- config.onceMockImplementations = previousOnceImplementations;
52
- };
53
- config.mockImplementation = implementation;
54
- config.onceMockImplementations = [];
55
- const returnValue = callback();
56
- if (typeof returnValue === "object" && typeof returnValue?.then === "function") return returnValue.then(() => {
57
- reset();
58
- return mock;
59
- });
60
- else reset();
61
- return mock;
62
- };
63
- mock.mockReturnThis = function mockReturnThis() {
64
- return mock.mockImplementation(function() {
65
- return this;
66
- });
67
- };
68
- mock.mockReturnValue = function mockReturnValue(value) {
69
- return mock.mockImplementation(function() {
70
- if (new.target) throwConstructorError("mockReturnValue");
71
- return value;
72
- });
73
- };
74
- mock.mockReturnValueOnce = function mockReturnValueOnce(value) {
75
- return mock.mockImplementationOnce(function() {
76
- if (new.target) throwConstructorError("mockReturnValueOnce");
77
- return value;
78
- });
79
- };
80
- mock.mockThrow = function mockThrow(value) {
81
- return mock.mockImplementation(function() {
82
- throw value;
83
- });
84
- };
85
- mock.mockThrowOnce = function mockThrowOnce(value) {
86
- return mock.mockImplementationOnce(function() {
87
- throw value;
88
- });
89
- };
90
- mock.mockResolvedValue = function mockResolvedValue(value) {
91
- return mock.mockImplementation(function() {
92
- if (new.target) throwConstructorError("mockResolvedValue");
93
- return Promise.resolve(value);
94
- });
95
- };
96
- mock.mockResolvedValueOnce = function mockResolvedValueOnce(value) {
97
- return mock.mockImplementationOnce(function() {
98
- if (new.target) throwConstructorError("mockResolvedValueOnce");
99
- return Promise.resolve(value);
100
- });
101
- };
102
- mock.mockRejectedValue = function mockRejectedValue(value) {
103
- return mock.mockImplementation(function() {
104
- if (new.target) throwConstructorError("mockRejectedValue");
105
- return Promise.reject(value);
106
- });
107
- };
108
- mock.mockRejectedValueOnce = function mockRejectedValueOnce(value) {
109
- return mock.mockImplementationOnce(function() {
110
- if (new.target) throwConstructorError("mockRejectedValueOnce");
111
- return Promise.reject(value);
112
- });
113
- };
114
- mock.mockClear = function mockClear() {
115
- state.calls = [];
116
- state.contexts = [];
117
- state.instances = [];
118
- state.invocationCallOrder = [];
119
- state.results = [];
120
- state.settledResults = [];
121
- return mock;
122
- };
123
- mock.mockReset = function mockReset() {
124
- mock.mockClear();
125
- config.mockImplementation = resetToMockImplementation ? mockImplementation : void 0;
126
- config.mockName = resetToMockName ? mock.name || "vi.fn()" : "vi.fn()";
127
- config.onceMockImplementations = [];
128
- return mock;
129
- };
130
- mock.mockRestore = function mockRestore() {
131
- mock.mockReset();
132
- return restore?.();
133
- };
134
- mock.mockName = function mockName(name) {
135
- if (typeof name === "string") config.mockName = name;
136
- return mock;
137
- };
138
- mock.getMockName = function getMockName() {
139
- return config.mockName || "vi.fn()";
140
- };
141
- if (Symbol.dispose) mock[Symbol.dispose] = () => mock.mockRestore();
142
- if (mockImplementation) mock.mockImplementation(mockImplementation);
143
- return mock;
144
- }
145
- function fn(originalImplementation) {
146
- if (originalImplementation != null && isMockFunction(originalImplementation)) return originalImplementation;
147
- return createMockInstance({
148
- mockImplementation: originalImplementation,
149
- resetToMockImplementation: true
150
- });
151
- }
152
- function spyOn(object, key, accessor) {
153
- assert(object != null, "The vi.spyOn() function could not find an object to spy upon. The first argument must be defined.");
154
- assert(typeof object === "object" || typeof object === "function", "Vitest cannot spy on a primitive value.");
155
- const [originalDescriptorObject, originalDescriptor] = getDescriptor(object, key) || [];
156
- assert(originalDescriptor || key in object, `The property "${String(key)}" is not defined on the ${typeof object}.`);
157
- let accessType = accessor || "value";
158
- let ssr = false;
159
- if (accessType === "value" && originalDescriptor && originalDescriptor.value == null && originalDescriptor.get) {
160
- accessType = "get";
161
- ssr = true;
162
- }
163
- let original;
164
- if (originalDescriptor) {
165
- original = originalDescriptor[accessType];
166
- if (original == null && accessType === "value") original = object[key];
167
- } else if (accessType !== "value") original = () => object[key];
168
- else original = object[key];
169
- const originalImplementation = ssr && original ? original() : original;
170
- const originalType = typeof originalImplementation;
171
- assert(originalType === "function" || accessType !== "value" && original == null, `vi.spyOn() can only spy on a function. Received ${originalType}.`);
172
- if (isMockFunction(originalImplementation)) return originalImplementation;
173
- const reassign = (cb) => {
174
- const { value, ...desc } = originalDescriptor || {
175
- configurable: true,
176
- writable: true
177
- };
178
- if (accessType !== "value") delete desc.writable;
179
- desc[accessType] = cb;
180
- Object.defineProperty(object, key, desc);
181
- };
182
- const restore = () => {
183
- if (originalDescriptorObject !== object) Reflect.deleteProperty(object, key);
184
- else if (originalDescriptor && !original) Object.defineProperty(object, key, originalDescriptor);
185
- else reassign(original);
186
- };
187
- const mock = createMockInstance({
188
- restore,
189
- originalImplementation,
190
- resetToMockName: true
191
- });
192
- try {
193
- reassign(ssr ? () => mock : mock);
194
- } catch (error) {
195
- if (error instanceof TypeError && Symbol.toStringTag && object[Symbol.toStringTag] === "Module" && (error.message.includes("Cannot redefine property") || error.message.includes("Cannot replace module namespace") || error.message.includes("can't redefine non-configurable property"))) throw new TypeError(`Cannot spy on export "${String(key)}". Module namespace is not configurable in ESM. See: https://vitest.dev/guide/browser/#limitations`, { cause: error });
196
- throw error;
197
- }
198
- return mock;
199
- }
200
- function getDescriptor(obj, method) {
201
- const objDescriptor = Object.getOwnPropertyDescriptor(obj, method);
202
- if (objDescriptor) return [obj, objDescriptor];
203
- let currentProto = Object.getPrototypeOf(obj);
204
- while (currentProto !== null) {
205
- const descriptor = Object.getOwnPropertyDescriptor(currentProto, method);
206
- if (descriptor) return [currentProto, descriptor];
207
- currentProto = Object.getPrototypeOf(currentProto);
208
- }
209
- }
210
- function assert(condition, message) {
211
- if (!condition) throw new Error(message);
212
- }
213
- let invocationCallCounter = 1;
214
- function createMock({ state, config, name: mockName, prototypeState, prototypeConfig, keepMembersImplementation, mockImplementation, prototypeMembers = [] }) {
215
- const original = config.mockOriginal;
216
- const pseudoOriginal = mockImplementation;
217
- const name = mockName || original?.name || "Mock";
218
- const namedObject = { [name]: (function(...args) {
219
- registerCalls(args, state, prototypeState);
220
- registerInvocationOrder(invocationCallCounter++, state, prototypeState);
221
- const result = {
222
- type: "incomplete",
223
- value: void 0
224
- };
225
- const settledResult = {
226
- type: "incomplete",
227
- value: void 0
228
- };
229
- registerResult(result, state, prototypeState);
230
- registerSettledResult(settledResult, state, prototypeState);
231
- const context = new.target ? void 0 : this;
232
- const [instanceIndex, instancePrototypeIndex] = registerInstance(context, state, prototypeState);
233
- const [contextIndex, contextPrototypeIndex] = registerContext(context, state, prototypeState);
234
- const implementation = config.onceMockImplementations.shift() || config.mockImplementation || prototypeConfig?.onceMockImplementations.shift() || prototypeConfig?.mockImplementation || original || function() {};
235
- let returnValue;
236
- let thrownValue;
237
- let didThrow = false;
238
- try {
239
- if (new.target) {
240
- returnValue = Reflect.construct(implementation, args, new.target);
241
- for (const prop of prototypeMembers) {
242
- const prototypeMock = returnValue[prop];
243
- if (prototypeMock !== mock.prototype[prop]) continue;
244
- const isMock = isMockFunction(prototypeMock);
245
- const prototypeState = isMock ? prototypeMock.mock : void 0;
246
- const prototypeConfig = isMock ? MOCK_CONFIGS.get(prototypeMock) : void 0;
247
- returnValue[prop] = createMockInstance({
248
- originalImplementation: keepMembersImplementation ? prototypeConfig?.mockOriginal : void 0,
249
- prototypeState,
250
- prototypeConfig,
251
- keepMembersImplementation
252
- });
253
- }
254
- } else returnValue = implementation.apply(this, args);
255
- } catch (error) {
256
- thrownValue = error;
257
- didThrow = true;
258
- if (error instanceof TypeError && error.message.includes("is not a constructor")) console.warn(`[vitest] The ${namedObject[name].getMockName()} mock did not use 'function' or 'class' in its implementation, see https://vitest.dev/api/vi#vi-spyon for examples.`);
259
- throw error;
260
- } finally {
261
- if (didThrow) {
262
- result.type = "throw";
263
- result.value = thrownValue;
264
- settledResult.type = "rejected";
265
- settledResult.value = thrownValue;
266
- } else {
267
- result.type = "return";
268
- result.value = returnValue;
269
- if (new.target) {
270
- state.contexts[contextIndex - 1] = returnValue;
271
- state.instances[instanceIndex - 1] = returnValue;
272
- if (contextPrototypeIndex != null && prototypeState) prototypeState.contexts[contextPrototypeIndex - 1] = returnValue;
273
- if (instancePrototypeIndex != null && prototypeState) prototypeState.instances[instancePrototypeIndex - 1] = returnValue;
274
- }
275
- if (returnValue instanceof Promise) returnValue.then((settledValue) => {
276
- settledResult.type = "fulfilled";
277
- settledResult.value = settledValue;
278
- }, (rejectedValue) => {
279
- settledResult.type = "rejected";
280
- settledResult.value = rejectedValue;
281
- });
282
- else {
283
- settledResult.type = "fulfilled";
284
- settledResult.value = returnValue;
285
- }
286
- }
287
- }
288
- return returnValue;
289
- }) };
290
- const mock = namedObject[name];
291
- const copyPropertiesFrom = original || pseudoOriginal;
292
- if (copyPropertiesFrom) copyOriginalStaticProperties(mock, copyPropertiesFrom);
293
- return mock;
294
- }
295
- function registerCalls(args, state, prototypeState) {
296
- state.calls.push(args);
297
- prototypeState?.calls.push(args);
298
- }
299
- function registerInvocationOrder(order, state, prototypeState) {
300
- state.invocationCallOrder.push(order);
301
- prototypeState?.invocationCallOrder.push(order);
302
- }
303
- function registerResult(result, state, prototypeState) {
304
- state.results.push(result);
305
- prototypeState?.results.push(result);
306
- }
307
- function registerSettledResult(result, state, prototypeState) {
308
- state.settledResults.push(result);
309
- prototypeState?.settledResults.push(result);
310
- }
311
- function registerInstance(instance, state, prototypeState) {
312
- return [state.instances.push(instance), prototypeState?.instances.push(instance)];
313
- }
314
- function registerContext(context, state, prototypeState) {
315
- return [state.contexts.push(context), prototypeState?.contexts.push(context)];
316
- }
317
- function copyOriginalStaticProperties(mock, original) {
318
- const { properties, descriptors } = getAllProperties(original);
319
- for (const key of properties) {
320
- const descriptor = descriptors[key];
321
- if (getDescriptor(mock, key)) continue;
322
- Object.defineProperty(mock, key, descriptor);
323
- }
324
- }
325
- const ignoreProperties = /* @__PURE__ */ new Set([
326
- "length",
327
- "name",
328
- "prototype",
329
- Symbol.for("nodejs.util.promisify.custom")
330
- ]);
331
- function getAllProperties(original) {
332
- const properties = /* @__PURE__ */ new Set();
333
- const descriptors = {};
334
- while (original && original !== Object.prototype && original !== Function.prototype) {
335
- const ownProperties = [...Object.getOwnPropertyNames(original), ...Object.getOwnPropertySymbols(original)];
336
- for (const prop of ownProperties) {
337
- if (descriptors[prop] || ignoreProperties.has(prop)) continue;
338
- properties.add(prop);
339
- descriptors[prop] = Object.getOwnPropertyDescriptor(original, prop);
340
- }
341
- original = Object.getPrototypeOf(original);
342
- }
343
- return {
344
- properties,
345
- descriptors
346
- };
347
- }
348
- function getDefaultConfig(original) {
349
- return {
350
- mockImplementation: void 0,
351
- mockOriginal: original,
352
- mockName: "vi.fn()",
353
- onceMockImplementations: []
354
- };
355
- }
356
- function getDefaultState() {
357
- const state = {
358
- calls: [],
359
- contexts: [],
360
- instances: [],
361
- invocationCallOrder: [],
362
- settledResults: [],
363
- results: [],
364
- get lastCall() {
365
- return state.calls.at(-1);
366
- }
367
- };
368
- return state;
369
- }
370
- function restoreAllMocks() {
371
- for (const restore of MOCK_RESTORE) restore();
372
- MOCK_RESTORE.clear();
373
- }
374
- function clearAllMocks() {
375
- REGISTERED_MOCKS.forEach((mock) => mock.mockClear());
376
- }
377
- function resetAllMocks() {
378
- REGISTERED_MOCKS.forEach((mock) => mock.mockReset());
379
- }
380
- function throwConstructorError(shorthand) {
381
- throw new TypeError(`Cannot use \`${shorthand}\` when called with \`new\`. Use \`mockImplementation\` with a \`class\` keyword instead. See https://vitest.dev/api/mock#class-support for more information.`);
382
- }
383
- //#endregion
384
- export { clearAllMocks, createMockInstance, fn, isMockFunction, resetAllMocks, restoreAllMocks, spyOn };
385
-
386
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B2aXRlc3Qrc3B5QDQuMS4xMC9ub2RlX21vZHVsZXMvQHZpdGVzdC9zcHkvZGlzdC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBpc01vY2tGdW5jdGlvbihmbikge1xuXHRyZXR1cm4gdHlwZW9mIGZuID09PSBcImZ1bmN0aW9uXCIgJiYgXCJfaXNNb2NrRnVuY3Rpb25cIiBpbiBmbiAmJiBmbi5faXNNb2NrRnVuY3Rpb24gPT09IHRydWU7XG59XG5jb25zdCBNT0NLX1JFU1RPUkUgPSBuZXcgU2V0KCk7XG4vLyBKZXN0IGtlZXBzIHRoZSBzdGF0ZSBpbiBhIHNlcGFyYXRlIFdlYWtNYXAgd2hpY2ggaXMgZ29vZCBmb3IgbWVtb3J5LFxuLy8gYnV0IGl0IG1ha2VzIHRoZSBzdGF0ZSBzbG93ZXIgdG8gYWNjZXNzIGFuZCByZXR1cm4gZGlmZmVyZW50IHZhbHVlc1xuLy8gaWYgeW91IHN0b3JlZCBpdCBiZWZvcmUgY2FsbGluZyBgbW9ja0NsZWFyYCB3aGVyZSBpdCB3aWxsIGJlIHJlY3JlYXRlZFxuY29uc3QgUkVHSVNURVJFRF9NT0NLUyA9IG5ldyBTZXQoKTtcbmNvbnN0IE1PQ0tfQ09ORklHUyA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBjcmVhdGVNb2NrSW5zdGFuY2Uob3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHsgb3JpZ2luYWxJbXBsZW1lbnRhdGlvbiwgcmVzdG9yZSwgbW9ja0ltcGxlbWVudGF0aW9uLCByZXNldFRvTW9ja0ltcGxlbWVudGF0aW9uLCByZXNldFRvTW9ja05hbWUgfSA9IG9wdGlvbnM7XG5cdGlmIChyZXN0b3JlKSB7XG5cdFx0TU9DS19SRVNUT1JFLmFkZChyZXN0b3JlKTtcblx0fVxuXHRjb25zdCBjb25maWcgPSBnZXREZWZhdWx0Q29uZmlnKG9yaWdpbmFsSW1wbGVtZW50YXRpb24pO1xuXHRjb25zdCBzdGF0ZSA9IGdldERlZmF1bHRTdGF0ZSgpO1xuXHRjb25zdCBtb2NrID0gY3JlYXRlTW9jayh7XG5cdFx0Y29uZmlnLFxuXHRcdHN0YXRlLFxuXHRcdC4uLm9wdGlvbnNcblx0fSk7XG5cdGNvbnN0IG1vY2tMZW5ndGggPSAobW9ja0ltcGxlbWVudGF0aW9uIHx8IG9yaWdpbmFsSW1wbGVtZW50YXRpb24pPy5sZW5ndGggPz8gMDtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vY2ssIFwibGVuZ3RoXCIsIHtcblx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR2YWx1ZTogbW9ja0xlbmd0aCxcblx0XHRjb25maWd1cmFibGU6IHRydWVcblx0fSk7XG5cdC8vIGluaGVyaXQgdGhlIGRlZmF1bHQgbmFtZSBzbyBpdCBhcHBlYXJzIGluIHNuYXBzaG90cyBhbmQgbG9nc1xuXHQvLyB0aGlzIGlzIHVzZWQgYnkgYHZpLnNweU9uKClgIGZvciBiZXR0ZXIgZGVidWdnaW5nLlxuXHQvLyB3aGVuIGB2aS5mbigpYCBpcyBjYWxsZWQsIHdlIGp1c3QgdXNlIHRoZSBkZWZhdWx0IHN0cmluZ1xuXHRpZiAocmVzZXRUb01vY2tOYW1lKSB7XG5cdFx0Y29uZmlnLm1vY2tOYW1lID0gbW9jay5uYW1lIHx8IFwidmkuZm4oKVwiO1xuXHR9XG5cdE1PQ0tfQ09ORklHUy5zZXQobW9jaywgY29uZmlnKTtcblx0UkVHSVNURVJFRF9NT0NLUy5hZGQobW9jayk7XG5cdG1vY2suX2lzTW9ja0Z1bmN0aW9uID0gdHJ1ZTtcblx0bW9jay5nZXRNb2NrSW1wbGVtZW50YXRpb24gPSAoKSA9PiB7XG5cdFx0Ly8gSmVzdCBvbmx5IHJldHVybnMgYGNvbmZpZy5tb2NrSW1wbGVtZW50YXRpb25gIGhlcmUsXG5cdFx0Ly8gYnV0IHdlIHRoaW5rIGl0IG1ha2VzIHNlbnNlIHRvIHJldHVybiB3aGF0IHRoZSBuZXh0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkXG5cdFx0cmV0dXJuIGNvbmZpZy5vbmNlTW9ja0ltcGxlbWVudGF0aW9uc1swXSB8fCBjb25maWcubW9ja0ltcGxlbWVudGF0aW9uO1xuXHR9O1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9jaywgXCJtb2NrXCIsIHtcblx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0d3JpdGFibGU6IGZhbHNlLFxuXHRcdHZhbHVlOiBzdGF0ZVxuXHR9KTtcblx0bW9jay5tb2NrSW1wbGVtZW50YXRpb24gPSBmdW5jdGlvbiBtb2NrSW1wbGVtZW50YXRpb24oaW1wbGVtZW50YXRpb24pIHtcblx0XHRjb25maWcubW9ja0ltcGxlbWVudGF0aW9uID0gaW1wbGVtZW50YXRpb247XG5cdFx0cmV0dXJuIG1vY2s7XG5cdH07XG5cdG1vY2subW9ja0ltcGxlbWVudGF0aW9uT25jZSA9IGZ1bmN0aW9uIG1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoaW1wbGVtZW50YXRpb24pIHtcblx0XHRjb25maWcub25jZU1vY2tJbXBsZW1lbnRhdGlvbnMucHVzaChpbXBsZW1lbnRhdGlvbik7XG5cdFx0cmV0dXJuIG1vY2s7XG5cdH07XG5cdG1vY2sud2l0aEltcGxlbWVudGF0aW9uID0gZnVuY3Rpb24gd2l0aEltcGxlbWVudGF0aW9uKGltcGxlbWVudGF0aW9uLCBjYWxsYmFjaykge1xuXHRcdGNvbnN0IHByZXZpb3VzSW1wbGVtZW50YXRpb24gPSBjb25maWcubW9ja0ltcGxlbWVudGF0aW9uO1xuXHRcdGNvbnN0IHByZXZpb3VzT25jZUltcGxlbWVudGF0aW9ucyA9IGNvbmZpZy5vbmNlTW9ja0ltcGxlbWVudGF0aW9ucztcblx0XHRjb25zdCByZXNldCA9ICgpID0+IHtcblx0XHRcdGNvbmZpZy5tb2NrSW1wbGVtZW50YXRpb24gPSBwcmV2aW91c0ltcGxlbWVudGF0aW9uO1xuXHRcdFx0Y29uZmlnLm9uY2VNb2NrSW1wbGVtZW50YXRpb25zID0gcHJldmlvdXNPbmNlSW1wbGVtZW50YXRpb25zO1xuXHRcdH07XG5cdFx0Y29uZmlnLm1vY2tJbXBsZW1lbnRhdGlvbiA9IGltcGxlbWVudGF0aW9uO1xuXHRcdGNvbmZpZy5vbmNlTW9ja0ltcGxlbWVudGF0aW9ucyA9IFtdO1xuXHRcdGNvbnN0IHJldHVyblZhbHVlID0gY2FsbGJhY2soKTtcblx0XHRpZiAodHlwZW9mIHJldHVyblZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZXR1cm5WYWx1ZT8udGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRyZXR1cm4gcmV0dXJuVmFsdWUudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJlc2V0KCk7XG5cdFx0XHRcdHJldHVybiBtb2NrO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc2V0KCk7XG5cdFx0fVxuXHRcdHJldHVybiBtb2NrO1xuXHR9O1xuXHRtb2NrLm1vY2tSZXR1cm5UaGlzID0gZnVuY3Rpb24gbW9ja1JldHVyblRoaXMoKSB7XG5cdFx0cmV0dXJuIG1vY2subW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSk7XG5cdH07XG5cdG1vY2subW9ja1JldHVyblZhbHVlID0gZnVuY3Rpb24gbW9ja1JldHVyblZhbHVlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIG1vY2subW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKG5ldy50YXJnZXQpIHtcblx0XHRcdFx0dGhyb3dDb25zdHJ1Y3RvckVycm9yKFwibW9ja1JldHVyblZhbHVlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0pO1xuXHR9O1xuXHRtb2NrLm1vY2tSZXR1cm5WYWx1ZU9uY2UgPSBmdW5jdGlvbiBtb2NrUmV0dXJuVmFsdWVPbmNlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIG1vY2subW9ja0ltcGxlbWVudGF0aW9uT25jZShmdW5jdGlvbigpIHtcblx0XHRcdGlmIChuZXcudGFyZ2V0KSB7XG5cdFx0XHRcdHRocm93Q29uc3RydWN0b3JFcnJvcihcIm1vY2tSZXR1cm5WYWx1ZU9uY2VcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSk7XG5cdH07XG5cdG1vY2subW9ja1Rocm93ID0gZnVuY3Rpb24gbW9ja1Rocm93KHZhbHVlKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdHJldHVybiBtb2NrLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbigpIHtcblx0XHRcdHRocm93IHZhbHVlO1xuXHRcdH0pO1xuXHR9O1xuXHRtb2NrLm1vY2tUaHJvd09uY2UgPSBmdW5jdGlvbiBtb2NrVGhyb3dPbmNlKHZhbHVlKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1hcnJvdy1jYWxsYmFja1xuXHRcdHJldHVybiBtb2NrLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoZnVuY3Rpb24oKSB7XG5cdFx0XHR0aHJvdyB2YWx1ZTtcblx0XHR9KTtcblx0fTtcblx0bW9jay5tb2NrUmVzb2x2ZWRWYWx1ZSA9IGZ1bmN0aW9uIG1vY2tSZXNvbHZlZFZhbHVlKHZhbHVlKSB7XG5cdFx0cmV0dXJuIG1vY2subW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKG5ldy50YXJnZXQpIHtcblx0XHRcdFx0dGhyb3dDb25zdHJ1Y3RvckVycm9yKFwibW9ja1Jlc29sdmVkVmFsdWVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0XHR9KTtcblx0fTtcblx0bW9jay5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UgPSBmdW5jdGlvbiBtb2NrUmVzb2x2ZWRWYWx1ZU9uY2UodmFsdWUpIHtcblx0XHRyZXR1cm4gbW9jay5tb2NrSW1wbGVtZW50YXRpb25PbmNlKGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKG5ldy50YXJnZXQpIHtcblx0XHRcdFx0dGhyb3dDb25zdHJ1Y3RvckVycm9yKFwibW9ja1Jlc29sdmVkVmFsdWVPbmNlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdFx0fSk7XG5cdH07XG5cdG1vY2subW9ja1JlamVjdGVkVmFsdWUgPSBmdW5jdGlvbiBtb2NrUmVqZWN0ZWRWYWx1ZSh2YWx1ZSkge1xuXHRcdHJldHVybiBtb2NrLm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbigpIHtcblx0XHRcdGlmIChuZXcudGFyZ2V0KSB7XG5cdFx0XHRcdHRocm93Q29uc3RydWN0b3JFcnJvcihcIm1vY2tSZWplY3RlZFZhbHVlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0XHR9KTtcblx0fTtcblx0bW9jay5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UgPSBmdW5jdGlvbiBtb2NrUmVqZWN0ZWRWYWx1ZU9uY2UodmFsdWUpIHtcblx0XHRyZXR1cm4gbW9jay5tb2NrSW1wbGVtZW50YXRpb25PbmNlKGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKG5ldy50YXJnZXQpIHtcblx0XHRcdFx0dGhyb3dDb25zdHJ1Y3RvckVycm9yKFwibW9ja1JlamVjdGVkVmFsdWVPbmNlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0XHR9KTtcblx0fTtcblx0bW9jay5tb2NrQ2xlYXIgPSBmdW5jdGlvbiBtb2NrQ2xlYXIoKSB7XG5cdFx0c3RhdGUuY2FsbHMgPSBbXTtcblx0XHRzdGF0ZS5jb250ZXh0cyA9IFtdO1xuXHRcdHN0YXRlLmluc3RhbmNlcyA9IFtdO1xuXHRcdHN0YXRlLmludm9jYXRpb25DYWxsT3JkZXIgPSBbXTtcblx0XHRzdGF0ZS5yZXN1bHRzID0gW107XG5cdFx0c3RhdGUuc2V0dGxlZFJlc3VsdHMgPSBbXTtcblx0XHRyZXR1cm4gbW9jaztcblx0fTtcblx0bW9jay5tb2NrUmVzZXQgPSBmdW5jdGlvbiBtb2NrUmVzZXQoKSB7XG5cdFx0bW9jay5tb2NrQ2xlYXIoKTtcblx0XHRjb25maWcubW9ja0ltcGxlbWVudGF0aW9uID0gcmVzZXRUb01vY2tJbXBsZW1lbnRhdGlvbiA/IG1vY2tJbXBsZW1lbnRhdGlvbiA6IHVuZGVmaW5lZDtcblx0XHRjb25maWcubW9ja05hbWUgPSByZXNldFRvTW9ja05hbWUgPyBtb2NrLm5hbWUgfHwgXCJ2aS5mbigpXCIgOiBcInZpLmZuKClcIjtcblx0XHRjb25maWcub25jZU1vY2tJbXBsZW1lbnRhdGlvbnMgPSBbXTtcblx0XHRyZXR1cm4gbW9jaztcblx0fTtcblx0bW9jay5tb2NrUmVzdG9yZSA9IGZ1bmN0aW9uIG1vY2tSZXN0b3JlKCkge1xuXHRcdG1vY2subW9ja1Jlc2V0KCk7XG5cdFx0cmV0dXJuIHJlc3RvcmU/LigpO1xuXHR9O1xuXHRtb2NrLm1vY2tOYW1lID0gZnVuY3Rpb24gbW9ja05hbWUobmFtZSkge1xuXHRcdGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0Y29uZmlnLm1vY2tOYW1lID0gbmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIG1vY2s7XG5cdH07XG5cdG1vY2suZ2V0TW9ja05hbWUgPSBmdW5jdGlvbiBnZXRNb2NrTmFtZSgpIHtcblx0XHRyZXR1cm4gY29uZmlnLm1vY2tOYW1lIHx8IFwidmkuZm4oKVwiO1xuXHR9O1xuXHRpZiAoU3ltYm9sLmRpc3Bvc2UpIHtcblx0XHRtb2NrW1N5bWJvbC5kaXNwb3NlXSA9ICgpID0+IG1vY2subW9ja1Jlc3RvcmUoKTtcblx0fVxuXHRpZiAobW9ja0ltcGxlbWVudGF0aW9uKSB7XG5cdFx0bW9jay5tb2NrSW1wbGVtZW50YXRpb24obW9ja0ltcGxlbWVudGF0aW9uKTtcblx0fVxuXHRyZXR1cm4gbW9jaztcbn1cbmZ1bmN0aW9uIGZuKG9yaWdpbmFsSW1wbGVtZW50YXRpb24pIHtcblx0Ly8gaWYgdGhlIGZ1bmN0aW9uIGlzIGFscmVhZHkgYSBtb2NrLCBqdXN0IHJldHVybiB0aGUgc2FtZSBmdW5jdGlvbixcblx0Ly8gc2ltaWxhcmx5IHRvIGhvdyB2aS5zcHlPbigpIHdvcmtzXG5cdGlmIChvcmlnaW5hbEltcGxlbWVudGF0aW9uICE9IG51bGwgJiYgaXNNb2NrRnVuY3Rpb24ob3JpZ2luYWxJbXBsZW1lbnRhdGlvbikpIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxJbXBsZW1lbnRhdGlvbjtcblx0fVxuXHRyZXR1cm4gY3JlYXRlTW9ja0luc3RhbmNlKHtcblx0XHRtb2NrSW1wbGVtZW50YXRpb246IG9yaWdpbmFsSW1wbGVtZW50YXRpb24sXG5cdFx0cmVzZXRUb01vY2tJbXBsZW1lbnRhdGlvbjogdHJ1ZVxuXHR9KTtcbn1cbmZ1bmN0aW9uIHNweU9uKG9iamVjdCwga2V5LCBhY2Nlc3Nvcikge1xuXHRhc3NlcnQob2JqZWN0ICE9IG51bGwsIFwiVGhlIHZpLnNweU9uKCkgZnVuY3Rpb24gY291bGQgbm90IGZpbmQgYW4gb2JqZWN0IHRvIHNweSB1cG9uLiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBkZWZpbmVkLlwiKTtcblx0YXNzZXJ0KHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iamVjdCA9PT0gXCJmdW5jdGlvblwiLCBcIlZpdGVzdCBjYW5ub3Qgc3B5IG9uIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcblx0Y29uc3QgW29yaWdpbmFsRGVzY3JpcHRvck9iamVjdCwgb3JpZ2luYWxEZXNjcmlwdG9yXSA9IGdldERlc2NyaXB0b3Iob2JqZWN0LCBrZXkpIHx8IFtdO1xuXHRhc3NlcnQob3JpZ2luYWxEZXNjcmlwdG9yIHx8IGtleSBpbiBvYmplY3QsIGBUaGUgcHJvcGVydHkgXCIke1N0cmluZyhrZXkpfVwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSAke3R5cGVvZiBvYmplY3R9LmApO1xuXHRsZXQgYWNjZXNzVHlwZSA9IGFjY2Vzc29yIHx8IFwidmFsdWVcIjtcblx0bGV0IHNzciA9IGZhbHNlO1xuXHQvLyB2aXRlIHNzciBzdXBwb3J0IC0gYWN0dWFsIGZ1bmN0aW9uIGlzIHN0b3JlZCBpbnNpZGUgYSBnZXR0ZXJcblx0aWYgKGFjY2Vzc1R5cGUgPT09IFwidmFsdWVcIiAmJiBvcmlnaW5hbERlc2NyaXB0b3IgJiYgb3JpZ2luYWxEZXNjcmlwdG9yLnZhbHVlID09IG51bGwgJiYgb3JpZ2luYWxEZXNjcmlwdG9yLmdldCkge1xuXHRcdGFjY2Vzc1R5cGUgPSBcImdldFwiO1xuXHRcdHNzciA9IHRydWU7XG5cdH1cblx0bGV0IG9yaWdpbmFsO1xuXHRpZiAob3JpZ2luYWxEZXNjcmlwdG9yKSB7XG5cdFx0b3JpZ2luYWwgPSBvcmlnaW5hbERlc2NyaXB0b3JbYWNjZXNzVHlwZV07XG5cdFx0Ly8gd2VpcmQgUHJveHkgZWRnZSBjYXNlIHdoZXJlIGRlc2NyaXB0b3IncyB2YWx1ZSBpcyB1bmRlZmluZWQsXG5cdFx0Ly8gYnV0IHRoZXJlJ3Mgc3RpbGwgYSB2YWx1ZSBvbiB0aGUgb2JqZWN0IHdoZW4gY2FsbGVkXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3ZpdGVzdC1kZXYvdml0ZXN0L2lzc3Vlcy85NDM5XG5cdFx0aWYgKG9yaWdpbmFsID09IG51bGwgJiYgYWNjZXNzVHlwZSA9PT0gXCJ2YWx1ZVwiKSB7XG5cdFx0XHRvcmlnaW5hbCA9IG9iamVjdFtrZXldO1xuXHRcdH1cblx0fSBlbHNlIGlmIChhY2Nlc3NUeXBlICE9PSBcInZhbHVlXCIpIHtcblx0XHRvcmlnaW5hbCA9ICgpID0+IG9iamVjdFtrZXldO1xuXHR9IGVsc2Uge1xuXHRcdG9yaWdpbmFsID0gb2JqZWN0W2tleV07XG5cdH1cblx0Y29uc3Qgb3JpZ2luYWxJbXBsZW1lbnRhdGlvbiA9IHNzciAmJiBvcmlnaW5hbCA/IG9yaWdpbmFsKCkgOiBvcmlnaW5hbDtcblx0Y29uc3Qgb3JpZ2luYWxUeXBlID0gdHlwZW9mIG9yaWdpbmFsSW1wbGVtZW50YXRpb247XG5cdGFzc2VydChcblx0XHQvLyBhbGxvdyBvbmx5IGZ1bmN0aW9uc1xuXHRcdG9yaWdpbmFsVHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8IGFjY2Vzc1R5cGUgIT09IFwidmFsdWVcIiAmJiBvcmlnaW5hbCA9PSBudWxsLFxuXHRcdGB2aS5zcHlPbigpIGNhbiBvbmx5IHNweSBvbiBhIGZ1bmN0aW9uLiBSZWNlaXZlZCAke29yaWdpbmFsVHlwZX0uYFxuXHQpO1xuXHRpZiAoaXNNb2NrRnVuY3Rpb24ob3JpZ2luYWxJbXBsZW1lbnRhdGlvbikpIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxJbXBsZW1lbnRhdGlvbjtcblx0fVxuXHRjb25zdCByZWFzc2lnbiA9IChjYikgPT4ge1xuXHRcdGNvbnN0IHsgdmFsdWUsIC4uLmRlc2MgfSA9IG9yaWdpbmFsRGVzY3JpcHRvciB8fCB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH07XG5cdFx0aWYgKGFjY2Vzc1R5cGUgIT09IFwidmFsdWVcIikge1xuXHRcdFx0ZGVsZXRlIGRlc2Mud3JpdGFibGU7XG5cdFx0fVxuXHRcdGRlc2NbYWNjZXNzVHlwZV0gPSBjYjtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIGRlc2MpO1xuXHR9O1xuXHRjb25zdCByZXN0b3JlID0gKCkgPT4ge1xuXHRcdC8vIGlmIG1ldGhvZCBpcyBkZWZpbmVkIG9uIHRoZSBwcm90b3R5cGUsIHdlIGNhbiBqdXN0IHJlbW92ZSBpdCBmcm9tXG5cdFx0Ly8gdGhlIGN1cnJlbnQgb2JqZWN0IGluc3RlYWQgb2YgcmVkZWZpbmluZyBhIGNvcHkgb2YgaXRcblx0XHRpZiAob3JpZ2luYWxEZXNjcmlwdG9yT2JqZWN0ICE9PSBvYmplY3QpIHtcblx0XHRcdFJlZmxlY3QuZGVsZXRlUHJvcGVydHkob2JqZWN0LCBrZXkpO1xuXHRcdH0gZWxzZSBpZiAob3JpZ2luYWxEZXNjcmlwdG9yICYmICFvcmlnaW5hbCkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCBvcmlnaW5hbERlc2NyaXB0b3IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWFzc2lnbihvcmlnaW5hbCk7XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBtb2NrID0gY3JlYXRlTW9ja0luc3RhbmNlKHtcblx0XHRyZXN0b3JlLFxuXHRcdG9yaWdpbmFsSW1wbGVtZW50YXRpb24sXG5cdFx0cmVzZXRUb01vY2tOYW1lOiB0cnVlXG5cdH0pO1xuXHR0cnkge1xuXHRcdHJlYXNzaWduKHNzciA/ICgpID0+IG1vY2sgOiBtb2NrKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRpZiAoZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgU3ltYm9sLnRvU3RyaW5nVGFnICYmIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSBcIk1vZHVsZVwiICYmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiQ2Fubm90IHJlZGVmaW5lIHByb3BlcnR5XCIpIHx8IGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJDYW5ub3QgcmVwbGFjZSBtb2R1bGUgbmFtZXNwYWNlXCIpIHx8IGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoXCJjYW4ndCByZWRlZmluZSBub24tY29uZmlndXJhYmxlIHByb3BlcnR5XCIpKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgQ2Fubm90IHNweSBvbiBleHBvcnQgXCIke1N0cmluZyhrZXkpfVwiLiBNb2R1bGUgbmFtZXNwYWNlIGlzIG5vdCBjb25maWd1cmFibGUgaW4gRVNNLiBTZWU6IGh0dHBzOi8vdml0ZXN0LmRldi9ndWlkZS9icm93c2VyLyNsaW1pdGF0aW9uc2AsIHsgY2F1c2U6IGVycm9yIH0pO1xuXHRcdH1cblx0XHR0aHJvdyBlcnJvcjtcblx0fVxuXHRyZXR1cm4gbW9jaztcbn1cbmZ1bmN0aW9uIGdldERlc2NyaXB0b3Iob2JqLCBtZXRob2QpIHtcblx0Y29uc3Qgb2JqRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBtZXRob2QpO1xuXHRpZiAob2JqRGVzY3JpcHRvcikge1xuXHRcdHJldHVybiBbb2JqLCBvYmpEZXNjcmlwdG9yXTtcblx0fVxuXHRsZXQgY3VycmVudFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaik7XG5cdHdoaWxlIChjdXJyZW50UHJvdG8gIT09IG51bGwpIHtcblx0XHRjb25zdCBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdXJyZW50UHJvdG8sIG1ldGhvZCk7XG5cdFx0aWYgKGRlc2NyaXB0b3IpIHtcblx0XHRcdHJldHVybiBbY3VycmVudFByb3RvLCBkZXNjcmlwdG9yXTtcblx0XHR9XG5cdFx0Y3VycmVudFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnJlbnRQcm90byk7XG5cdH1cbn1cbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHtcblx0aWYgKCFjb25kaXRpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG5cdH1cbn1cbmxldCBpbnZvY2F0aW9uQ2FsbENvdW50ZXIgPSAxO1xuZnVuY3Rpb24gY3JlYXRlTW9jayh7IHN0YXRlLCBjb25maWcsIG5hbWU6IG1vY2tOYW1lLCBwcm90b3R5cGVTdGF0ZSwgcHJvdG90eXBlQ29uZmlnLCBrZWVwTWVtYmVyc0ltcGxlbWVudGF0aW9uLCBtb2NrSW1wbGVtZW50YXRpb24sIHByb3RvdHlwZU1lbWJlcnMgPSBbXSB9KSB7XG5cdGNvbnN0IG9yaWdpbmFsID0gY29uZmlnLm1vY2tPcmlnaW5hbDtcblx0Y29uc3QgcHNldWRvT3JpZ2luYWwgPSBtb2NrSW1wbGVtZW50YXRpb247XG5cdGNvbnN0IG5hbWUgPSBtb2NrTmFtZSB8fCBvcmlnaW5hbD8ubmFtZSB8fCBcIk1vY2tcIjtcblx0Y29uc3QgbmFtZWRPYmplY3QgPSB7IFtuYW1lXTogKGZ1bmN0aW9uKC4uLmFyZ3MpIHtcblx0XHRyZWdpc3RlckNhbGxzKGFyZ3MsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSk7XG5cdFx0cmVnaXN0ZXJJbnZvY2F0aW9uT3JkZXIoaW52b2NhdGlvbkNhbGxDb3VudGVyKyssIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSk7XG5cdFx0Y29uc3QgcmVzdWx0ID0ge1xuXHRcdFx0dHlwZTogXCJpbmNvbXBsZXRlXCIsXG5cdFx0XHR2YWx1ZTogdW5kZWZpbmVkXG5cdFx0fTtcblx0XHRjb25zdCBzZXR0bGVkUmVzdWx0ID0ge1xuXHRcdFx0dHlwZTogXCJpbmNvbXBsZXRlXCIsXG5cdFx0XHR2YWx1ZTogdW5kZWZpbmVkXG5cdFx0fTtcblx0XHRyZWdpc3RlclJlc3VsdChyZXN1bHQsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSk7XG5cdFx0cmVnaXN0ZXJTZXR0bGVkUmVzdWx0KHNldHRsZWRSZXN1bHQsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSk7XG5cdFx0Y29uc3QgY29udGV4dCA9IG5ldy50YXJnZXQgPyB1bmRlZmluZWQgOiB0aGlzO1xuXHRcdGNvbnN0IFtpbnN0YW5jZUluZGV4LCBpbnN0YW5jZVByb3RvdHlwZUluZGV4XSA9IHJlZ2lzdGVySW5zdGFuY2UoY29udGV4dCwgc3RhdGUsIHByb3RvdHlwZVN0YXRlKTtcblx0XHRjb25zdCBbY29udGV4dEluZGV4LCBjb250ZXh0UHJvdG90eXBlSW5kZXhdID0gcmVnaXN0ZXJDb250ZXh0KGNvbnRleHQsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSk7XG5cdFx0Y29uc3QgaW1wbGVtZW50YXRpb24gPSBjb25maWcub25jZU1vY2tJbXBsZW1lbnRhdGlvbnMuc2hpZnQoKSB8fCBjb25maWcubW9ja0ltcGxlbWVudGF0aW9uIHx8IHByb3RvdHlwZUNvbmZpZz8ub25jZU1vY2tJbXBsZW1lbnRhdGlvbnMuc2hpZnQoKSB8fCBwcm90b3R5cGVDb25maWc/Lm1vY2tJbXBsZW1lbnRhdGlvbiB8fCBvcmlnaW5hbCB8fCBmdW5jdGlvbigpIHt9O1xuXHRcdGxldCByZXR1cm5WYWx1ZTtcblx0XHRsZXQgdGhyb3duVmFsdWU7XG5cdFx0bGV0IGRpZFRocm93ID0gZmFsc2U7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChuZXcudGFyZ2V0KSB7XG5cdFx0XHRcdHJldHVyblZhbHVlID0gUmVmbGVjdC5jb25zdHJ1Y3QoaW1wbGVtZW50YXRpb24sIGFyZ3MsIG5ldy50YXJnZXQpO1xuXHRcdFx0XHQvLyBqZXN0IGNhbGxzIHRoaXMgYmVmb3JlIHRoZSBpbXBsZW1lbnRhdGlvbiwgYnV0IHdlIGhhdmUgdG8gcmVzb2x2ZSB0aGlzIF9hZnRlcl9cblx0XHRcdFx0Ly8gYmVjYXVzZSB3ZSBjYW5ub3QgZG8gaXQgYmVmb3JlIHRoZSBgUmVmbGVjdC5jb25zdHJ1Y3RgIGNhbGxlZCB0aGUgY3VzdG9tIGltcGxlbWVudGF0aW9uLlxuXHRcdFx0XHQvLyBmb3J0dW5hdGVseSwgdGhlIGNvbnN0cnVjdG9yIGlzIGFsd2F5cyBhbiBlbXB0eSBmdW5jdGlvbiBiZWNhdXNlIGBwcm90b3R5cGVNZXRob2RzYFxuXHRcdFx0XHQvLyBhcmUgb25seSB1c2VkIGJ5IHRoZSBhdXRvbW9ja2VyLCBzbyB0aGlzIGRvZXNuJ3QgbWF0dGVyXG5cdFx0XHRcdGZvciAoY29uc3QgcHJvcCBvZiBwcm90b3R5cGVNZW1iZXJzKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvdG90eXBlTW9jayA9IHJldHVyblZhbHVlW3Byb3BdO1xuXHRcdFx0XHRcdC8vIHRoZSBtZXRob2Qgd2FzIG92ZXJyaWRkZW4gYmVjYXVzZSBvZiBpbmhlcml0YW5jZSwgaWdub3JlIGl0XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHRzL25vLXVzZS1iZWZvcmUtZGVmaW5lXG5cdFx0XHRcdFx0aWYgKHByb3RvdHlwZU1vY2sgIT09IG1vY2sucHJvdG90eXBlW3Byb3BdKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgaXNNb2NrID0gaXNNb2NrRnVuY3Rpb24ocHJvdG90eXBlTW9jayk7XG5cdFx0XHRcdFx0Y29uc3QgcHJvdG90eXBlU3RhdGUgPSBpc01vY2sgPyBwcm90b3R5cGVNb2NrLm1vY2sgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0Y29uc3QgcHJvdG90eXBlQ29uZmlnID0gaXNNb2NrID8gTU9DS19DT05GSUdTLmdldChwcm90b3R5cGVNb2NrKSA6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRyZXR1cm5WYWx1ZVtwcm9wXSA9IGNyZWF0ZU1vY2tJbnN0YW5jZSh7XG5cdFx0XHRcdFx0XHRvcmlnaW5hbEltcGxlbWVudGF0aW9uOiBrZWVwTWVtYmVyc0ltcGxlbWVudGF0aW9uID8gcHJvdG90eXBlQ29uZmlnPy5tb2NrT3JpZ2luYWwgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRwcm90b3R5cGVTdGF0ZSxcblx0XHRcdFx0XHRcdHByb3RvdHlwZUNvbmZpZyxcblx0XHRcdFx0XHRcdGtlZXBNZW1iZXJzSW1wbGVtZW50YXRpb25cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuVmFsdWUgPSBpbXBsZW1lbnRhdGlvbi5hcHBseSh0aGlzLCBhcmdzKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0dGhyb3duVmFsdWUgPSBlcnJvcjtcblx0XHRcdGRpZFRocm93ID0gdHJ1ZTtcblx0XHRcdGlmIChlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJiBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKFwiaXMgbm90IGEgY29uc3RydWN0b3JcIikpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKGBbdml0ZXN0XSBUaGUgJHtuYW1lZE9iamVjdFtuYW1lXS5nZXRNb2NrTmFtZSgpfSBtb2NrIGRpZCBub3QgdXNlICdmdW5jdGlvbicgb3IgJ2NsYXNzJyBpbiBpdHMgaW1wbGVtZW50YXRpb24sIHNlZSBodHRwczovL3ZpdGVzdC5kZXYvYXBpL3ZpI3ZpLXNweW9uIGZvciBleGFtcGxlcy5gKTtcblx0XHRcdH1cblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoZGlkVGhyb3cpIHtcblx0XHRcdFx0cmVzdWx0LnR5cGUgPSBcInRocm93XCI7XG5cdFx0XHRcdHJlc3VsdC52YWx1ZSA9IHRocm93blZhbHVlO1xuXHRcdFx0XHRzZXR0bGVkUmVzdWx0LnR5cGUgPSBcInJlamVjdGVkXCI7XG5cdFx0XHRcdHNldHRsZWRSZXN1bHQudmFsdWUgPSB0aHJvd25WYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdC50eXBlID0gXCJyZXR1cm5cIjtcblx0XHRcdFx0cmVzdWx0LnZhbHVlID0gcmV0dXJuVmFsdWU7XG5cdFx0XHRcdGlmIChuZXcudGFyZ2V0KSB7XG5cdFx0XHRcdFx0c3RhdGUuY29udGV4dHNbY29udGV4dEluZGV4IC0gMV0gPSByZXR1cm5WYWx1ZTtcblx0XHRcdFx0XHRzdGF0ZS5pbnN0YW5jZXNbaW5zdGFuY2VJbmRleCAtIDFdID0gcmV0dXJuVmFsdWU7XG5cdFx0XHRcdFx0aWYgKGNvbnRleHRQcm90b3R5cGVJbmRleCAhPSBudWxsICYmIHByb3RvdHlwZVN0YXRlKSB7XG5cdFx0XHRcdFx0XHRwcm90b3R5cGVTdGF0ZS5jb250ZXh0c1tjb250ZXh0UHJvdG90eXBlSW5kZXggLSAxXSA9IHJldHVyblZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoaW5zdGFuY2VQcm90b3R5cGVJbmRleCAhPSBudWxsICYmIHByb3RvdHlwZVN0YXRlKSB7XG5cdFx0XHRcdFx0XHRwcm90b3R5cGVTdGF0ZS5pbnN0YW5jZXNbaW5zdGFuY2VQcm90b3R5cGVJbmRleCAtIDFdID0gcmV0dXJuVmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChyZXR1cm5WYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0XHRyZXR1cm5WYWx1ZS50aGVuKChzZXR0bGVkVmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHNldHRsZWRSZXN1bHQudHlwZSA9IFwiZnVsZmlsbGVkXCI7XG5cdFx0XHRcdFx0XHRzZXR0bGVkUmVzdWx0LnZhbHVlID0gc2V0dGxlZFZhbHVlO1xuXHRcdFx0XHRcdH0sIChyZWplY3RlZFZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRzZXR0bGVkUmVzdWx0LnR5cGUgPSBcInJlamVjdGVkXCI7XG5cdFx0XHRcdFx0XHRzZXR0bGVkUmVzdWx0LnZhbHVlID0gcmVqZWN0ZWRWYWx1ZTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzZXR0bGVkUmVzdWx0LnR5cGUgPSBcImZ1bGZpbGxlZFwiO1xuXHRcdFx0XHRcdHNldHRsZWRSZXN1bHQudmFsdWUgPSByZXR1cm5WYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdH0pIH07XG5cdGNvbnN0IG1vY2sgPSBuYW1lZE9iamVjdFtuYW1lXTtcblx0Y29uc3QgY29weVByb3BlcnRpZXNGcm9tID0gb3JpZ2luYWwgfHwgcHNldWRvT3JpZ2luYWw7XG5cdGlmIChjb3B5UHJvcGVydGllc0Zyb20pIHtcblx0XHRjb3B5T3JpZ2luYWxTdGF0aWNQcm9wZXJ0aWVzKG1vY2ssIGNvcHlQcm9wZXJ0aWVzRnJvbSk7XG5cdH1cblx0cmV0dXJuIG1vY2s7XG59XG5mdW5jdGlvbiByZWdpc3RlckNhbGxzKGFyZ3MsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSkge1xuXHRzdGF0ZS5jYWxscy5wdXNoKGFyZ3MpO1xuXHRwcm90b3R5cGVTdGF0ZT8uY2FsbHMucHVzaChhcmdzKTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVySW52b2NhdGlvbk9yZGVyKG9yZGVyLCBzdGF0ZSwgcHJvdG90eXBlU3RhdGUpIHtcblx0c3RhdGUuaW52b2NhdGlvbkNhbGxPcmRlci5wdXNoKG9yZGVyKTtcblx0cHJvdG90eXBlU3RhdGU/Lmludm9jYXRpb25DYWxsT3JkZXIucHVzaChvcmRlcik7XG59XG5mdW5jdGlvbiByZWdpc3RlclJlc3VsdChyZXN1bHQsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSkge1xuXHRzdGF0ZS5yZXN1bHRzLnB1c2gocmVzdWx0KTtcblx0cHJvdG90eXBlU3RhdGU/LnJlc3VsdHMucHVzaChyZXN1bHQpO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJTZXR0bGVkUmVzdWx0KHJlc3VsdCwgc3RhdGUsIHByb3RvdHlwZVN0YXRlKSB7XG5cdHN0YXRlLnNldHRsZWRSZXN1bHRzLnB1c2gocmVzdWx0KTtcblx0cHJvdG90eXBlU3RhdGU/LnNldHRsZWRSZXN1bHRzLnB1c2gocmVzdWx0KTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVySW5zdGFuY2UoaW5zdGFuY2UsIHN0YXRlLCBwcm90b3R5cGVTdGF0ZSkge1xuXHRjb25zdCBpbnN0YW5jZUluZGV4ID0gc3RhdGUuaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuXHRjb25zdCBpbnN0YW5jZVByb3RvdHlwZUluZGV4ID0gcHJvdG90eXBlU3RhdGU/Lmluc3RhbmNlcy5wdXNoKGluc3RhbmNlKTtcblx0cmV0dXJuIFtpbnN0YW5jZUluZGV4LCBpbnN0YW5jZVByb3RvdHlwZUluZGV4XTtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyQ29udGV4dChjb250ZXh0LCBzdGF0ZSwgcHJvdG90eXBlU3RhdGUpIHtcblx0Y29uc3QgY29udGV4dEluZGV4ID0gc3RhdGUuY29udGV4dHMucHVzaChjb250ZXh0KTtcblx0Y29uc3QgY29udGV4dFByb3RvdHlwZUluZGV4ID0gcHJvdG90eXBlU3RhdGU/LmNvbnRleHRzLnB1c2goY29udGV4dCk7XG5cdHJldHVybiBbY29udGV4dEluZGV4LCBjb250ZXh0UHJvdG90eXBlSW5kZXhdO1xufVxuZnVuY3Rpb24gY29weU9yaWdpbmFsU3RhdGljUHJvcGVydGllcyhtb2NrLCBvcmlnaW5hbCkge1xuXHRjb25zdCB7IHByb3BlcnRpZXMsIGRlc2NyaXB0b3JzIH0gPSBnZXRBbGxQcm9wZXJ0aWVzKG9yaWdpbmFsKTtcblx0Zm9yIChjb25zdCBrZXkgb2YgcHJvcGVydGllcykge1xuXHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yc1trZXldO1xuXHRcdGNvbnN0IG1vY2tEZXNjcmlwdG9yID0gZ2V0RGVzY3JpcHRvcihtb2NrLCBrZXkpO1xuXHRcdGlmIChtb2NrRGVzY3JpcHRvcikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2NrLCBrZXksIGRlc2NyaXB0b3IpO1xuXHR9XG59XG5jb25zdCBpZ25vcmVQcm9wZXJ0aWVzID0gbmV3IFNldChbXG5cdFwibGVuZ3RoXCIsXG5cdFwibmFtZVwiLFxuXHRcInByb3RvdHlwZVwiLFxuXHRTeW1ib2wuZm9yKFwibm9kZWpzLnV0aWwucHJvbWlzaWZ5LmN1c3RvbVwiKVxuXSk7XG5mdW5jdGlvbiBnZXRBbGxQcm9wZXJ0aWVzKG9yaWdpbmFsKSB7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBuZXcgU2V0KCk7XG5cdGNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cdHdoaWxlIChvcmlnaW5hbCAmJiBvcmlnaW5hbCAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBvcmlnaW5hbCAhPT0gRnVuY3Rpb24ucHJvdG90eXBlKSB7XG5cdFx0Y29uc3Qgb3duUHJvcGVydGllcyA9IFsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvcmlnaW5hbCksIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob3JpZ2luYWwpXTtcblx0XHRmb3IgKGNvbnN0IHByb3Agb2Ygb3duUHJvcGVydGllcykge1xuXHRcdFx0aWYgKGRlc2NyaXB0b3JzW3Byb3BdIHx8IGlnbm9yZVByb3BlcnRpZXMuaGFzKHByb3ApKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0cHJvcGVydGllcy5hZGQocHJvcCk7XG5cdFx0XHRkZXNjcmlwdG9yc1twcm9wXSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob3JpZ2luYWwsIHByb3ApO1xuXHRcdH1cblx0XHRvcmlnaW5hbCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvcmlnaW5hbCk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRwcm9wZXJ0aWVzLFxuXHRcdGRlc2NyaXB0b3JzXG5cdH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0Q29uZmlnKG9yaWdpbmFsKSB7XG5cdHJldHVybiB7XG5cdFx0bW9ja0ltcGxlbWVudGF0aW9uOiB1bmRlZmluZWQsXG5cdFx0bW9ja09yaWdpbmFsOiBvcmlnaW5hbCxcblx0XHRtb2NrTmFtZTogXCJ2aS5mbigpXCIsXG5cdFx0b25jZU1vY2tJbXBsZW1lbnRhdGlvbnM6IFtdXG5cdH07XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0U3RhdGUoKSB7XG5cdGNvbnN0IHN0YXRlID0ge1xuXHRcdGNhbGxzOiBbXSxcblx0XHRjb250ZXh0czogW10sXG5cdFx0aW5zdGFuY2VzOiBbXSxcblx0XHRpbnZvY2F0aW9uQ2FsbE9yZGVyOiBbXSxcblx0XHRzZXR0bGVkUmVzdWx0czogW10sXG5cdFx0cmVzdWx0czogW10sXG5cdFx0Z2V0IGxhc3RDYWxsKCkge1xuXHRcdFx0cmV0dXJuIHN0YXRlLmNhbGxzLmF0KC0xKTtcblx0XHR9XG5cdH07XG5cdHJldHVybiBzdGF0ZTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVBbGxNb2NrcygpIHtcblx0Zm9yIChjb25zdCByZXN0b3JlIG9mIE1PQ0tfUkVTVE9SRSkge1xuXHRcdHJlc3RvcmUoKTtcblx0fVxuXHRNT0NLX1JFU1RPUkUuY2xlYXIoKTtcbn1cbmZ1bmN0aW9uIGNsZWFyQWxsTW9ja3MoKSB7XG5cdFJFR0lTVEVSRURfTU9DS1MuZm9yRWFjaCgobW9jaykgPT4gbW9jay5tb2NrQ2xlYXIoKSk7XG59XG5mdW5jdGlvbiByZXNldEFsbE1vY2tzKCkge1xuXHRSRUdJU1RFUkVEX01PQ0tTLmZvckVhY2goKG1vY2spID0+IG1vY2subW9ja1Jlc2V0KCkpO1xufVxuZnVuY3Rpb24gdGhyb3dDb25zdHJ1Y3RvckVycm9yKHNob3J0aGFuZCkge1xuXHR0aHJvdyBuZXcgVHlwZUVycm9yKGBDYW5ub3QgdXNlIFxcYCR7c2hvcnRoYW5kfVxcYCB3aGVuIGNhbGxlZCB3aXRoIFxcYG5ld1xcYC4gVXNlIFxcYG1vY2tJbXBsZW1lbnRhdGlvblxcYCB3aXRoIGEgXFxgY2xhc3NcXGAga2V5d29yZCBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly92aXRlc3QuZGV2L2FwaS9tb2NrI2NsYXNzLXN1cHBvcnQgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCk7XG59XG5cbmV4cG9ydCB7IGNsZWFyQWxsTW9ja3MsIGNyZWF0ZU1vY2tJbnN0YW5jZSwgZm4sIGlzTW9ja0Z1bmN0aW9uLCByZXNldEFsbE1vY2tzLCByZXN0b3JlQWxsTW9ja3MsIHNweU9uIH07XG4iXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzBdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVMsZUFBZSxJQUFJO0NBQzNCLE9BQU8sT0FBTyxPQUFPLGNBQWMscUJBQXFCLE1BQU0sR0FBRyxvQkFBb0I7QUFDdEY7QUFDQSxNQUFNLCtCQUFlLElBQUksSUFBSTtBQUk3QixNQUFNLG1DQUFtQixJQUFJLElBQUk7QUFDakMsTUFBTSwrQkFBZSxJQUFJLFFBQVE7QUFDakMsU0FBUyxtQkFBbUIsVUFBVSxDQUFDLEdBQUc7Q0FDekMsTUFBTSxFQUFFLHdCQUF3QixTQUFTLG9CQUFvQiwyQkFBMkIsb0JBQW9CO0NBQzVHLElBQUksU0FDSCxhQUFhLElBQUksT0FBTztDQUV6QixNQUFNLFNBQVMsaUJBQWlCLHNCQUFzQjtDQUN0RCxNQUFNLFFBQVEsZ0JBQWdCO0NBQzlCLE1BQU0sT0FBTyxXQUFXO0VBQ3ZCO0VBQ0E7RUFDQSxHQUFHO0NBQ0osQ0FBQztDQUNELE1BQU0sY0FBYyxzQkFBc0IsdUJBQUEsRUFBeUIsVUFBVTtDQUM3RSxPQUFPLGVBQWUsTUFBTSxVQUFVO0VBQ3JDLFVBQVU7RUFDVixZQUFZO0VBQ1osT0FBTztFQUNQLGNBQWM7Q0FDZixDQUFDO0NBSUQsSUFBSSxpQkFDSCxPQUFPLFdBQVcsS0FBSyxRQUFRO0NBRWhDLGFBQWEsSUFBSSxNQUFNLE1BQU07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
@@ -1,121 +0,0 @@
1
- //#region ../../node_modules/.pnpm/@vitest+utils@4.1.10/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js
2
- const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
3
- function normalizeWindowsPath(input = "") {
4
- if (!input) return input;
5
- return input.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());
6
- }
7
- const _UNC_REGEX = /^[/\\]{2}/;
8
- const _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/;
9
- const _DRIVE_LETTER_RE = /^[A-Za-z]:$/;
10
- const normalize = function(path) {
11
- if (path.length === 0) return ".";
12
- path = normalizeWindowsPath(path);
13
- const isUNCPath = path.match(_UNC_REGEX);
14
- const isPathAbsolute = isAbsolute(path);
15
- const trailingSeparator = path[path.length - 1] === "/";
16
- path = normalizeString(path, !isPathAbsolute);
17
- if (path.length === 0) {
18
- if (isPathAbsolute) return "/";
19
- return trailingSeparator ? "./" : ".";
20
- }
21
- if (trailingSeparator) path += "/";
22
- if (_DRIVE_LETTER_RE.test(path)) path += "/";
23
- if (isUNCPath) {
24
- if (!isPathAbsolute) return `//./${path}`;
25
- return `//${path}`;
26
- }
27
- return isPathAbsolute && !isAbsolute(path) ? `/${path}` : path;
28
- };
29
- const join = function(...segments) {
30
- let path = "";
31
- for (const seg of segments) {
32
- if (!seg) continue;
33
- if (path.length > 0) {
34
- const pathTrailing = path[path.length - 1] === "/";
35
- const segLeading = seg[0] === "/";
36
- if (pathTrailing && segLeading) path += seg.slice(1);
37
- else path += pathTrailing || segLeading ? seg : `/${seg}`;
38
- } else path += seg;
39
- }
40
- return normalize(path);
41
- };
42
- function cwd() {
43
- if (typeof process !== "undefined" && typeof process.cwd === "function") return process.cwd().replace(/\\/g, "/");
44
- return "/";
45
- }
46
- const resolve = function(...arguments_) {
47
- arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));
48
- let resolvedPath = "";
49
- let resolvedAbsolute = false;
50
- for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {
51
- const path = index >= 0 ? arguments_[index] : cwd();
52
- if (!path || path.length === 0) continue;
53
- resolvedPath = `${path}/${resolvedPath}`;
54
- resolvedAbsolute = isAbsolute(path);
55
- }
56
- resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);
57
- if (resolvedAbsolute && !isAbsolute(resolvedPath)) return `/${resolvedPath}`;
58
- return resolvedPath.length > 0 ? resolvedPath : ".";
59
- };
60
- function normalizeString(path, allowAboveRoot) {
61
- let res = "";
62
- let lastSegmentLength = 0;
63
- let lastSlash = -1;
64
- let dots = 0;
65
- let char = null;
66
- for (let index = 0; index <= path.length; ++index) {
67
- if (index < path.length) char = path[index];
68
- else if (char === "/") break;
69
- else char = "/";
70
- if (char === "/") {
71
- if (lastSlash === index - 1 || dots === 1);
72
- else if (dots === 2) {
73
- if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
74
- if (res.length > 2) {
75
- const lastSlashIndex = res.lastIndexOf("/");
76
- if (lastSlashIndex === -1) {
77
- res = "";
78
- lastSegmentLength = 0;
79
- } else {
80
- res = res.slice(0, lastSlashIndex);
81
- lastSegmentLength = res.length - 1 - res.lastIndexOf("/");
82
- }
83
- lastSlash = index;
84
- dots = 0;
85
- continue;
86
- } else if (res.length > 0) {
87
- res = "";
88
- lastSegmentLength = 0;
89
- lastSlash = index;
90
- dots = 0;
91
- continue;
92
- }
93
- }
94
- if (allowAboveRoot) {
95
- res += res.length > 0 ? "/.." : "..";
96
- lastSegmentLength = 2;
97
- }
98
- } else {
99
- if (res.length > 0) res += `/${path.slice(lastSlash + 1, index)}`;
100
- else res = path.slice(lastSlash + 1, index);
101
- lastSegmentLength = index - lastSlash - 1;
102
- }
103
- lastSlash = index;
104
- dots = 0;
105
- } else if (char === "." && dots !== -1) ++dots;
106
- else dots = -1;
107
- }
108
- return res;
109
- }
110
- const isAbsolute = function(p) {
111
- return _IS_ABSOLUTE_RE.test(p);
112
- };
113
- const dirname = function(p) {
114
- const segments = normalizeWindowsPath(p).replace(/\/$/, "").split("/").slice(0, -1);
115
- if (segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0])) segments[0] += "/";
116
- return segments.join("/") || (isAbsolute(p) ? "/" : ".");
117
- };
118
- //#endregion
119
- export { dirname as d, join as j, resolve as r };
120
-
121
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2h1bmstcGF0aGUuTS1lVGh0TlouanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0B2aXRlc3QrdXRpbHNANC4xLjEwL25vZGVfbW9kdWxlcy9Adml0ZXN0L3V0aWxzL2Rpc3QvY2h1bmstcGF0aGUuTS1lVGh0TlouanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgX0RSSVZFX0xFVFRFUl9TVEFSVF9SRSA9IC9eW0EtWmEtel06XFwvLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZVdpbmRvd3NQYXRoKGlucHV0ID0gXCJcIikge1xuICBpZiAoIWlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKS5yZXBsYWNlKF9EUklWRV9MRVRURVJfU1RBUlRfUkUsIChyKSA9PiByLnRvVXBwZXJDYXNlKCkpO1xufVxuXG5jb25zdCBfVU5DX1JFR0VYID0gL15bL1xcXFxdezJ9LztcbmNvbnN0IF9JU19BQlNPTFVURV9SRSA9IC9eWy9cXFxcXSg/IVsvXFxcXF0pfF5bL1xcXFxdezJ9KD8hXFwuKXxeW0EtWmEtel06Wy9cXFxcXS87XG5jb25zdCBfRFJJVkVfTEVUVEVSX1JFID0gL15bQS1aYS16XTokLztcbmNvbnN0IG5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiLlwiO1xuICB9XG4gIHBhdGggPSBub3JtYWxpemVXaW5kb3dzUGF0aChwYXRoKTtcbiAgY29uc3QgaXNVTkNQYXRoID0gcGF0aC5tYXRjaChfVU5DX1JFR0VYKTtcbiAgY29uc3QgaXNQYXRoQWJzb2x1dGUgPSBpc0Fic29sdXRlKHBhdGgpO1xuICBjb25zdCB0cmFpbGluZ1NlcGFyYXRvciA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXSA9PT0gXCIvXCI7XG4gIHBhdGggPSBub3JtYWxpemVTdHJpbmcocGF0aCwgIWlzUGF0aEFic29sdXRlKTtcbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGlzUGF0aEFic29sdXRlKSB7XG4gICAgICByZXR1cm4gXCIvXCI7XG4gICAgfVxuICAgIHJldHVybiB0cmFpbGluZ1NlcGFyYXRvciA/IFwiLi9cIiA6IFwiLlwiO1xuICB9XG4gIGlmICh0cmFpbGluZ1NlcGFyYXRvcikge1xuICAgIHBhdGggKz0gXCIvXCI7XG4gIH1cbiAgaWYgKF9EUklWRV9MRVRURVJfUkUudGVzdChwYXRoKSkge1xuICAgIHBhdGggKz0gXCIvXCI7XG4gIH1cbiAgaWYgKGlzVU5DUGF0aCkge1xuICAgIGlmICghaXNQYXRoQWJzb2x1dGUpIHtcbiAgICAgIHJldHVybiBgLy8uLyR7cGF0aH1gO1xuICAgIH1cbiAgICByZXR1cm4gYC8vJHtwYXRofWA7XG4gIH1cbiAgcmV0dXJuIGlzUGF0aEFic29sdXRlICYmICFpc0Fic29sdXRlKHBhdGgpID8gYC8ke3BhdGh9YCA6IHBhdGg7XG59O1xuY29uc3Qgam9pbiA9IGZ1bmN0aW9uKC4uLnNlZ21lbnRzKSB7XG4gIGxldCBwYXRoID0gXCJcIjtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudHMpIHtcbiAgICBpZiAoIXNlZykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChwYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhdGhUcmFpbGluZyA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXSA9PT0gXCIvXCI7XG4gICAgICBjb25zdCBzZWdMZWFkaW5nID0gc2VnWzBdID09PSBcIi9cIjtcbiAgICAgIGNvbnN0IGJvdGggPSBwYXRoVHJhaWxpbmcgJiYgc2VnTGVhZGluZztcbiAgICAgIGlmIChib3RoKSB7XG4gICAgICAgIHBhdGggKz0gc2VnLnNsaWNlKDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0aCArPSBwYXRoVHJhaWxpbmcgfHwgc2VnTGVhZGluZyA/IHNlZyA6IGAvJHtzZWd9YDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aCArPSBzZWc7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemUocGF0aCk7XG59O1xuZnVuY3Rpb24gY3dkKCkge1xuICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHByb2Nlc3MuY3dkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKTtcbiAgfVxuICByZXR1cm4gXCIvXCI7XG59XG5jb25zdCByZXNvbHZlID0gZnVuY3Rpb24oLi4uYXJndW1lbnRzXykge1xuICBhcmd1bWVudHNfID0gYXJndW1lbnRzXy5tYXAoKGFyZ3VtZW50KSA9PiBub3JtYWxpemVXaW5kb3dzUGF0aChhcmd1bWVudCkpO1xuICBsZXQgcmVzb2x2ZWRQYXRoID0gXCJcIjtcbiAgbGV0IHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTtcbiAgZm9yIChsZXQgaW5kZXggPSBhcmd1bWVudHNfLmxlbmd0aCAtIDE7IGluZGV4ID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpbmRleC0tKSB7XG4gICAgY29uc3QgcGF0aCA9IGluZGV4ID49IDAgPyBhcmd1bWVudHNfW2luZGV4XSA6IGN3ZCgpO1xuICAgIGlmICghcGF0aCB8fCBwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJlc29sdmVkUGF0aCA9IGAke3BhdGh9LyR7cmVzb2x2ZWRQYXRofWA7XG4gICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IGlzQWJzb2x1dGUocGF0aCk7XG4gIH1cbiAgcmVzb2x2ZWRQYXRoID0gbm9ybWFsaXplU3RyaW5nKHJlc29sdmVkUGF0aCwgIXJlc29sdmVkQWJzb2x1dGUpO1xuICBpZiAocmVzb2x2ZWRBYnNvbHV0ZSAmJiAhaXNBYnNvbHV0ZShyZXNvbHZlZFBhdGgpKSB7XG4gICAgcmV0dXJuIGAvJHtyZXNvbHZlZFBhdGh9YDtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWRQYXRoLmxlbmd0aCA+IDAgPyByZXNvbHZlZFBhdGggOiBcIi5cIjtcbn07XG5mdW5jdGlvbiBub3JtYWxpemVTdHJpbmcocGF0aCwgYWxsb3dBYm92ZVJvb3QpIHtcbiAgbGV0IHJlcyA9IFwiXCI7XG4gIGxldCBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gIGxldCBsYXN0U2xhc2ggPSAtMTtcbiAgbGV0IGRvdHMgPSAwO1xuICBsZXQgY2hhciA9IG51bGw7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPD0gcGF0aC5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPCBwYXRoLmxlbmd0aCkge1xuICAgICAgY2hhciA9IHBhdGhbaW5kZXhdO1xuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gXCIvXCIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFyID0gXCIvXCI7XG4gICAgfVxuICAgIGlmIChjaGFyID09PSBcIi9cIikge1xuICAgICAgaWYgKGxhc3RTbGFzaCA9PT0gaW5kZXggLSAxIHx8IGRvdHMgPT09IDEpIDsgZWxzZSBpZiAoZG90cyA9PT0gMikge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzW3Jlcy5sZW5ndGggLSAxXSAhPT0gXCIuXCIgfHwgcmVzW3Jlcy5sZW5ndGggLSAyXSAhPT0gXCIuXCIpIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTbGFzaEluZGV4ID0gcmVzLmxhc3RJbmRleE9mKFwiL1wiKTtcbiAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgcmVzID0gXCJcIjtcbiAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzID0gcmVzLnNsaWNlKDAsIGxhc3RTbGFzaEluZGV4KTtcbiAgICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSByZXMubGVuZ3RoIC0gMSAtIHJlcy5sYXN0SW5kZXhPZihcIi9cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0U2xhc2ggPSBpbmRleDtcbiAgICAgICAgICAgIGRvdHMgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVzID0gXCJcIjtcbiAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGxhc3RTbGFzaCA9IGluZGV4O1xuICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbG93QWJvdmVSb290KSB7XG4gICAgICAgICAgcmVzICs9IHJlcy5sZW5ndGggPiAwID8gXCIvLi5cIiA6IFwiLi5cIjtcbiAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlcyArPSBgLyR7cGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpbmRleCl9YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXMgPSBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IGluZGV4IC0gbGFzdFNsYXNoIC0gMTtcbiAgICAgIH1cbiAgICAgIGxhc3RTbGFzaCA9IGluZGV4O1xuICAgICAgZG90cyA9IDA7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSBcIi5cIiAmJiBkb3RzICE9PSAtMSkge1xuICAgICAgKytkb3RzO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb3RzID0gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5jb25zdCBpc0Fic29sdXRlID0gZnVuY3Rpb24ocCkge1xuICByZXR1cm4gX0lTX0FCU09MVVRFX1JFLnRlc3QocCk7XG59O1xuY29uc3QgZGlybmFtZSA9IGZ1bmN0aW9uKHApIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBub3JtYWxpemVXaW5kb3dzUGF0aChwKS5yZXBsYWNlKC9cXC8kLywgXCJcIikuc3BsaXQoXCIvXCIpLnNsaWNlKDAsIC0xKTtcbiAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMSAmJiBfRFJJVkVfTEVUVEVSX1JFLnRlc3Qoc2VnbWVudHNbMF0pKSB7XG4gICAgc2VnbWVudHNbMF0gKz0gXCIvXCI7XG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRzLmpvaW4oXCIvXCIpIHx8IChpc0Fic29sdXRlKHApID8gXCIvXCIgOiBcIi5cIik7XG59O1xuXG5leHBvcnQgeyBkaXJuYW1lIGFzIGQsIGpvaW4gYXMgaiwgcmVzb2x2ZSBhcyByIH07XG4iXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzBdLCJtYXBwaW5ncyI6IjtBQUFBLE1BQU0seUJBQXlCO0FBQy9CLFNBQVMscUJBQXFCLFFBQVEsSUFBSTtDQUN4QyxJQUFJLENBQUMsT0FDSCxPQUFPO0NBRVQsT0FBTyxNQUFNLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQyxRQUFRLHlCQUF5QixNQUFNLEVBQUUsWUFBWSxDQUFDO0FBQ3pGO0FBRUEsTUFBTSxhQUFhO0FBQ25CLE1BQU0sa0JBQWtCO0FBQ3hCLE1BQU0sbUJBQW1CO0FBQ3pCLE1BQU0sWUFBWSxTQUFTLE1BQU07Q0FDL0IsSUFBSSxLQUFLLFdBQVcsR0FDbEIsT0FBTztDQUVULE9BQU8scUJBQXFCLElBQUk7Q0FDaEMsTUFBTSxZQUFZLEtBQUssTUFBTSxVQUFVO0NBQ3ZDLE1BQU0saUJBQWlCLFdBQVcsSUFBSTtDQUN0QyxNQUFNLG9CQUFvQixLQUFLLEtB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
@@ -1,51 +0,0 @@
1
- //#region ../../node_modules/.pnpm/@vitest+utils@4.1.10/node_modules/@vitest/utils/dist/constants.js
2
- const KNOWN_ASSET_TYPES = [
3
- "apng",
4
- "bmp",
5
- "png",
6
- "jpe?g",
7
- "jfif",
8
- "pjpeg",
9
- "pjp",
10
- "gif",
11
- "svg",
12
- "ico",
13
- "webp",
14
- "avif",
15
- "mp4",
16
- "webm",
17
- "ogg",
18
- "mp3",
19
- "wav",
20
- "flac",
21
- "aac",
22
- "woff2?",
23
- "eot",
24
- "ttf",
25
- "otf",
26
- "webmanifest",
27
- "pdf",
28
- "txt"
29
- ];
30
- const KNOWN_ASSET_RE = new RegExp(`\\.(${KNOWN_ASSET_TYPES.join("|")})$`);
31
- const CSS_LANGS_RE = /\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:$|\?)/;
32
- /**
33
- * Prefix for resolved Ids that are not valid browser import specifiers
34
- */
35
- const VALID_ID_PREFIX = `/@id/`;
36
- /**
37
- * Plugins that use 'virtual modules' (e.g. for helper functions), prefix the
38
- * module ID with `\0`, a convention from the rollup ecosystem.
39
- * This prevents other plugins from trying to process the id (like node resolution),
40
- * and core features like sourcemaps can use this info to differentiate between
41
- * virtual modules and regular files.
42
- * `\0` is not a permitted char in import URLs so we have to replace them during
43
- * import analysis. The id will be decoded back before entering the plugins pipeline.
44
- * These encoded virtual ids are also prefixed by the VALID_ID_PREFIX, so virtual
45
- * modules in the browser end up encoded as `/@id/__x00__{id}`
46
- */
47
- const NULL_BYTE_PLACEHOLDER = `__x00__`;
48
- //#endregion
49
- export { CSS_LANGS_RE, KNOWN_ASSET_RE, KNOWN_ASSET_TYPES, NULL_BYTE_PLACEHOLDER, VALID_ID_PREFIX };
50
-
51
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Adml0ZXN0K3V0aWxzQDQuMS4xMC9ub2RlX21vZHVsZXMvQHZpdGVzdC91dGlscy9kaXN0L2NvbnN0YW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPOiB0aGlzIGlzIGFsbCBjb3B5IHBhc3RlZCBmcm9tIFZpdGUgLSBjYW4gdGhleSBleHBvc2UgYSBtb2R1bGUgdGhhdCBleHBvcnRzIG9ubHkgY29uc3RhbnRzP1xuY29uc3QgS05PV05fQVNTRVRfVFlQRVMgPSBbXG5cdFwiYXBuZ1wiLFxuXHRcImJtcFwiLFxuXHRcInBuZ1wiLFxuXHRcImpwZT9nXCIsXG5cdFwiamZpZlwiLFxuXHRcInBqcGVnXCIsXG5cdFwicGpwXCIsXG5cdFwiZ2lmXCIsXG5cdFwic3ZnXCIsXG5cdFwiaWNvXCIsXG5cdFwid2VicFwiLFxuXHRcImF2aWZcIixcblx0XCJtcDRcIixcblx0XCJ3ZWJtXCIsXG5cdFwib2dnXCIsXG5cdFwibXAzXCIsXG5cdFwid2F2XCIsXG5cdFwiZmxhY1wiLFxuXHRcImFhY1wiLFxuXHRcIndvZmYyP1wiLFxuXHRcImVvdFwiLFxuXHRcInR0ZlwiLFxuXHRcIm90ZlwiLFxuXHRcIndlYm1hbmlmZXN0XCIsXG5cdFwicGRmXCIsXG5cdFwidHh0XCJcbl07XG5jb25zdCBLTk9XTl9BU1NFVF9SRSA9IG5ldyBSZWdFeHAoYFxcXFwuKCR7S05PV05fQVNTRVRfVFlQRVMuam9pbihcInxcIil9KSRgKTtcbmNvbnN0IENTU19MQU5HU19SRSA9IC9cXC4oY3NzfGxlc3N8c2Fzc3xzY3NzfHN0eWx8c3R5bHVzfHBjc3N8cG9zdGNzc3xzc3MpKD86JHxcXD8pLztcbi8qKlxuKiBQcmVmaXggZm9yIHJlc29sdmVkIElkcyB0aGF0IGFyZSBub3QgdmFsaWQgYnJvd3NlciBpbXBvcnQgc3BlY2lmaWVyc1xuKi9cbmNvbnN0IFZBTElEX0lEX1BSRUZJWCA9IGAvQGlkL2A7XG4vKipcbiogUGx1Z2lucyB0aGF0IHVzZSAndmlydHVhbCBtb2R1bGVzJyAoZS5nLiBmb3IgaGVscGVyIGZ1bmN0aW9ucyksIHByZWZpeCB0aGVcbiogbW9kdWxlIElEIHdpdGggYFxcMGAsIGEgY29udmVudGlvbiBmcm9tIHRoZSByb2xsdXAgZWNvc3lzdGVtLlxuKiBUaGlzIHByZXZlbnRzIG90aGVyIHBsdWdpbnMgZnJvbSB0cnlpbmcgdG8gcHJvY2VzcyB0aGUgaWQgKGxpa2Ugbm9kZSByZXNvbHV0aW9uKSxcbiogYW5kIGNvcmUgZmVhdHVyZXMgbGlrZSBzb3VyY2VtYXBzIGNhbiB1c2UgdGhpcyBpbmZvIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlblxuKiB2aXJ0dWFsIG1vZHVsZXMgYW5kIHJlZ3VsYXIgZmlsZXMuXG4qIGBcXDBgIGlzIG5vdCBhIHBlcm1pdHRlZCBjaGFyIGluIGltcG9ydCBVUkxzIHNvIHdlIGhhdmUgdG8gcmVwbGFjZSB0aGVtIGR1cmluZ1xuKiBpbXBvcnQgYW5hbHlzaXMuIFRoZSBpZCB3aWxsIGJlIGRlY29kZWQgYmFjayBiZWZvcmUgZW50ZXJpbmcgdGhlIHBsdWdpbnMgcGlwZWxpbmUuXG4qIFRoZXNlIGVuY29kZWQgdmlydHVhbCBpZHMgYXJlIGFsc28gcHJlZml4ZWQgYnkgdGhlIFZBTElEX0lEX1BSRUZJWCwgc28gdmlydHVhbFxuKiBtb2R1bGVzIGluIHRoZSBicm93c2VyIGVuZCB1cCBlbmNvZGVkIGFzIGAvQGlkL19feDAwX197aWR9YFxuKi9cbmNvbnN0IE5VTExfQllURV9QTEFDRUhPTERFUiA9IGBfX3gwMF9fYDtcblxuZXhwb3J0IHsgQ1NTX0xBTkdTX1JFLCBLTk9XTl9BU1NFVF9SRSwgS05PV05fQVNTRVRfVFlQRVMsIE5VTExfQllURV9QTEFDRUhPTERFUiwgVkFMSURfSURfUFJFRklYIH07XG4iXSwieF9nb29nbGVfaWdub3JlTGlzdCI6WzBdLCJtYXBwaW5ncyI6IjtBQUNBLE1BQU0sb0JBQW9CO0NBQ3pCO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7QUFDRDtBQUNBLE1BQU0saUJBQWlCLElBQUksT0FBTyxPQUFPLGtCQUFrQixLQUFLLEdBQUcsRUFBRSxHQUFHO0FBQ3hFLE1BQU0sZUFBZTs7OztBQUlyQixNQUFNLGtCQUFrQjs7Ozs7Ozs7Ozs7O0FBWXhCLE1BQU0sd0JBQXdCIn0=