velocious 1.0.562 → 1.0.564

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 (245) hide show
  1. package/README.md +5 -1
  2. package/build/background-jobs/cron-expression.js +12 -13
  3. package/build/background-jobs/main.js +6 -6
  4. package/build/background-jobs/runner-graceful-shutdown.js +2 -3
  5. package/build/background-jobs/scheduler.js +3 -3
  6. package/build/background-jobs/worker.js +8 -9
  7. package/build/beacon/client.js +3 -4
  8. package/build/configuration-types.js +1 -0
  9. package/build/configuration.js +44 -3
  10. package/build/database/drivers/sqlite/web-persistence.js +2 -5
  11. package/build/database/pool/async-tracked-multi-connection.js +65 -15
  12. package/build/database/pool/base.js +23 -7
  13. package/build/database/query/index.js +21 -22
  14. package/build/database/query/model-class-query.js +5 -6
  15. package/build/database/record/attachments/normalize-input.js +9 -10
  16. package/build/database/record/attachments/store.js +2 -2
  17. package/build/database/record/auditing.js +7 -8
  18. package/build/database/record/index.js +4 -5
  19. package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +1 -2
  20. package/build/frontend-model-controller.js +49 -56
  21. package/build/frontend-models/base.js +17 -19
  22. package/build/frontend-models/outgoing-event-buffer.js +3 -4
  23. package/build/frontend-models/query.js +40 -44
  24. package/build/frontend-models/resource-definition.js +7 -8
  25. package/build/frontend-models/transport-serialization.js +10 -12
  26. package/build/frontend-models/websocket-channel.js +12 -13
  27. package/build/http-server/client/websocket-session.js +7 -8
  28. package/build/http-server/client-delivery-queue.js +167 -0
  29. package/build/http-server/server-client.js +9 -0
  30. package/build/http-server/websocket-event-log-store.js +4 -6
  31. package/build/http-server/websocket-events-host.js +42 -12
  32. package/build/http-server/worker-handler/in-process.js +53 -14
  33. package/build/http-server/worker-handler/index.js +88 -18
  34. package/build/http-server/worker-handler/worker-thread.js +2 -2
  35. package/build/plugins/sqljs-wasm-route.js +3 -5
  36. package/build/src/background-jobs/cron-expression.d.ts +0 -12
  37. package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
  38. package/build/src/background-jobs/cron-expression.js +13 -13
  39. package/build/src/background-jobs/main.d.ts.map +1 -1
  40. package/build/src/background-jobs/main.js +7 -7
  41. package/build/src/background-jobs/runner-graceful-shutdown.d.ts +0 -6
  42. package/build/src/background-jobs/runner-graceful-shutdown.d.ts.map +1 -1
  43. package/build/src/background-jobs/runner-graceful-shutdown.js +3 -3
  44. package/build/src/background-jobs/scheduler.d.ts +0 -3
  45. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  46. package/build/src/background-jobs/scheduler.js +4 -4
  47. package/build/src/background-jobs/worker.d.ts +0 -8
  48. package/build/src/background-jobs/worker.d.ts.map +1 -1
  49. package/build/src/background-jobs/worker.js +9 -9
  50. package/build/src/beacon/client.d.ts +0 -4
  51. package/build/src/beacon/client.d.ts.map +1 -1
  52. package/build/src/beacon/client.js +4 -4
  53. package/build/src/configuration-types.d.ts +8 -0
  54. package/build/src/configuration-types.d.ts.map +1 -1
  55. package/build/src/configuration-types.js +2 -1
  56. package/build/src/configuration.d.ts +34 -1
  57. package/build/src/configuration.d.ts.map +1 -1
  58. package/build/src/configuration.js +40 -4
  59. package/build/src/database/drivers/sqlite/web-persistence.d.ts +0 -14
  60. package/build/src/database/drivers/sqlite/web-persistence.d.ts.map +1 -1
  61. package/build/src/database/drivers/sqlite/web-persistence.js +3 -3
  62. package/build/src/database/pool/async-tracked-multi-connection.d.ts +29 -1
  63. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  64. package/build/src/database/pool/async-tracked-multi-connection.js +57 -15
  65. package/build/src/database/pool/base.d.ts +53 -4
  66. package/build/src/database/pool/base.d.ts.map +1 -1
  67. package/build/src/database/pool/base.js +23 -6
  68. package/build/src/database/query/index.d.ts +18 -39
  69. package/build/src/database/query/index.d.ts.map +1 -1
  70. package/build/src/database/query/index.js +22 -22
  71. package/build/src/database/query/model-class-query.d.ts +0 -5
  72. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  73. package/build/src/database/query/model-class-query.js +6 -6
  74. package/build/src/database/record/attachments/normalize-input.d.ts +0 -9
  75. package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
  76. package/build/src/database/record/attachments/normalize-input.js +10 -10
  77. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  78. package/build/src/database/record/attachments/store.js +2 -2
  79. package/build/src/database/record/auditing.d.ts +17 -24
  80. package/build/src/database/record/auditing.d.ts.map +1 -1
  81. package/build/src/database/record/auditing.js +8 -8
  82. package/build/src/database/record/index.d.ts +4 -4
  83. package/build/src/database/record/index.d.ts.map +1 -1
  84. package/build/src/database/record/index.js +5 -5
  85. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +0 -39
  86. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  87. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +2 -2
  88. package/build/src/frontend-model-controller.d.ts +1 -1
  89. package/build/src/frontend-model-controller.d.ts.map +1 -1
  90. package/build/src/frontend-model-controller.js +50 -50
  91. package/build/src/frontend-models/base.d.ts.map +1 -1
  92. package/build/src/frontend-models/base.js +18 -18
  93. package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
  94. package/build/src/frontend-models/outgoing-event-buffer.js +3 -3
  95. package/build/src/frontend-models/query.d.ts +56 -37
  96. package/build/src/frontend-models/query.d.ts.map +1 -1
  97. package/build/src/frontend-models/query.js +39 -39
  98. package/build/src/frontend-models/resource-definition.d.ts +0 -7
  99. package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
  100. package/build/src/frontend-models/resource-definition.js +8 -8
  101. package/build/src/frontend-models/transport-serialization.d.ts +0 -10
  102. package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
  103. package/build/src/frontend-models/transport-serialization.js +11 -11
  104. package/build/src/frontend-models/websocket-channel.d.ts +0 -12
  105. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  106. package/build/src/frontend-models/websocket-channel.js +13 -13
  107. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  108. package/build/src/http-server/client/websocket-session.js +8 -8
  109. package/build/src/http-server/client-delivery-queue.d.ts +121 -0
  110. package/build/src/http-server/client-delivery-queue.d.ts.map +1 -0
  111. package/build/src/http-server/client-delivery-queue.js +152 -0
  112. package/build/src/http-server/server-client.d.ts +6 -0
  113. package/build/src/http-server/server-client.d.ts.map +1 -1
  114. package/build/src/http-server/server-client.js +10 -1
  115. package/build/src/http-server/websocket-event-log-store.d.ts +0 -14
  116. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
  117. package/build/src/http-server/websocket-event-log-store.js +5 -5
  118. package/build/src/http-server/websocket-events-host.d.ts +15 -4
  119. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  120. package/build/src/http-server/websocket-events-host.js +39 -13
  121. package/build/src/http-server/worker-handler/in-process.d.ts +19 -1
  122. package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
  123. package/build/src/http-server/worker-handler/in-process.js +50 -14
  124. package/build/src/http-server/worker-handler/index.d.ts +36 -4
  125. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  126. package/build/src/http-server/worker-handler/index.js +82 -18
  127. package/build/src/http-server/worker-handler/worker-thread.js +3 -3
  128. package/build/src/plugins/sqljs-wasm-route.d.ts.map +1 -1
  129. package/build/src/plugins/sqljs-wasm-route.js +4 -4
  130. package/build/src/sync/conflict-strategy.d.ts +0 -15
  131. package/build/src/sync/conflict-strategy.d.ts.map +1 -1
  132. package/build/src/sync/conflict-strategy.js +3 -3
  133. package/build/src/sync/device-identity.d.ts +0 -45
  134. package/build/src/sync/device-identity.d.ts.map +1 -1
  135. package/build/src/sync/device-identity.js +4 -4
  136. package/build/src/sync/local-mutation-log.d.ts +0 -41
  137. package/build/src/sync/local-mutation-log.d.ts.map +1 -1
  138. package/build/src/sync/local-mutation-log.js +9 -9
  139. package/build/src/sync/offline-grant.d.ts +0 -26
  140. package/build/src/sync/offline-grant.d.ts.map +1 -1
  141. package/build/src/sync/offline-grant.js +4 -4
  142. package/build/src/sync/peer-mutation-bundle.d.ts +0 -14
  143. package/build/src/sync/peer-mutation-bundle.d.ts.map +1 -1
  144. package/build/src/sync/peer-mutation-bundle.js +3 -3
  145. package/build/src/sync/server-change-feed.d.ts.map +1 -1
  146. package/build/src/sync/server-change-feed.js +33 -33
  147. package/build/src/sync/sync-api-client.d.ts +0 -9
  148. package/build/src/sync/sync-api-client.d.ts.map +1 -1
  149. package/build/src/sync/sync-api-client.js +2 -2
  150. package/build/src/sync/sync-envelope-replay-service.d.ts +38 -21
  151. package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
  152. package/build/src/sync/sync-envelope-replay-service.js +18 -18
  153. package/build/src/sync/sync-resource-base.d.ts +0 -7
  154. package/build/src/sync/sync-resource-base.d.ts.map +1 -1
  155. package/build/src/sync/sync-resource-base.js +2 -2
  156. package/build/src/sync/sync-scope-store.d.ts +0 -9
  157. package/build/src/sync/sync-scope-store.d.ts.map +1 -1
  158. package/build/src/sync/sync-scope-store.js +10 -10
  159. package/build/src/testing/test-filter-parser.d.ts +0 -10
  160. package/build/src/testing/test-filter-parser.d.ts.map +1 -1
  161. package/build/src/testing/test-filter-parser.js +11 -11
  162. package/build/src/testing/test-runner.d.ts +25 -91
  163. package/build/src/testing/test-runner.d.ts.map +1 -1
  164. package/build/src/testing/test-runner.js +113 -98
  165. package/build/src/testing/test.d.ts +8 -0
  166. package/build/src/testing/test.d.ts.map +1 -1
  167. package/build/src/testing/test.js +9 -9
  168. package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
  169. package/build/src/utils/backtrace-cleaner.js +9 -9
  170. package/build/src/utils/model-scope.d.ts +0 -8
  171. package/build/src/utils/model-scope.d.ts.map +1 -1
  172. package/build/src/utils/model-scope.js +3 -3
  173. package/build/src/utils/ransack.d.ts +52 -19
  174. package/build/src/utils/ransack.d.ts.map +1 -1
  175. package/build/src/utils/ransack.js +26 -26
  176. package/build/sync/conflict-strategy.js +3 -6
  177. package/build/sync/device-identity.js +4 -9
  178. package/build/sync/local-mutation-log.js +9 -14
  179. package/build/sync/offline-grant.js +4 -7
  180. package/build/sync/peer-mutation-bundle.js +2 -4
  181. package/build/sync/server-change-feed.js +32 -34
  182. package/build/sync/sync-api-client.js +1 -2
  183. package/build/sync/sync-envelope-replay-service.js +17 -19
  184. package/build/sync/sync-resource-base.js +1 -2
  185. package/build/sync/sync-scope-store.js +9 -10
  186. package/build/testing/test-filter-parser.js +10 -11
  187. package/build/testing/test-runner.js +116 -108
  188. package/build/testing/test.js +8 -9
  189. package/build/tsconfig.tsbuildinfo +1 -1
  190. package/build/utils/backtrace-cleaner.js +8 -9
  191. package/build/utils/model-scope.js +3 -4
  192. package/build/utils/ransack.js +27 -34
  193. package/package.json +3 -1
  194. package/scripts/eslint-rules/typedefs-first.js +67 -0
  195. package/scripts/prewarm-chromedriver.js +26 -0
  196. package/src/background-jobs/cron-expression.js +12 -13
  197. package/src/background-jobs/main.js +6 -6
  198. package/src/background-jobs/runner-graceful-shutdown.js +2 -3
  199. package/src/background-jobs/scheduler.js +3 -3
  200. package/src/background-jobs/worker.js +8 -9
  201. package/src/beacon/client.js +3 -4
  202. package/src/configuration-types.js +1 -0
  203. package/src/configuration.js +44 -3
  204. package/src/database/drivers/sqlite/web-persistence.js +2 -5
  205. package/src/database/pool/async-tracked-multi-connection.js +65 -15
  206. package/src/database/pool/base.js +23 -7
  207. package/src/database/query/index.js +21 -22
  208. package/src/database/query/model-class-query.js +5 -6
  209. package/src/database/record/attachments/normalize-input.js +9 -10
  210. package/src/database/record/attachments/store.js +2 -2
  211. package/src/database/record/auditing.js +7 -8
  212. package/src/database/record/index.js +4 -5
  213. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +1 -2
  214. package/src/frontend-model-controller.js +49 -56
  215. package/src/frontend-models/base.js +17 -19
  216. package/src/frontend-models/outgoing-event-buffer.js +3 -4
  217. package/src/frontend-models/query.js +40 -44
  218. package/src/frontend-models/resource-definition.js +7 -8
  219. package/src/frontend-models/transport-serialization.js +10 -12
  220. package/src/frontend-models/websocket-channel.js +12 -13
  221. package/src/http-server/client/websocket-session.js +7 -8
  222. package/src/http-server/client-delivery-queue.js +167 -0
  223. package/src/http-server/server-client.js +9 -0
  224. package/src/http-server/websocket-event-log-store.js +4 -6
  225. package/src/http-server/websocket-events-host.js +42 -12
  226. package/src/http-server/worker-handler/in-process.js +53 -14
  227. package/src/http-server/worker-handler/index.js +88 -18
  228. package/src/http-server/worker-handler/worker-thread.js +2 -2
  229. package/src/plugins/sqljs-wasm-route.js +3 -5
  230. package/src/sync/conflict-strategy.js +3 -6
  231. package/src/sync/device-identity.js +4 -9
  232. package/src/sync/local-mutation-log.js +9 -14
  233. package/src/sync/offline-grant.js +4 -7
  234. package/src/sync/peer-mutation-bundle.js +2 -4
  235. package/src/sync/server-change-feed.js +32 -34
  236. package/src/sync/sync-api-client.js +1 -2
  237. package/src/sync/sync-envelope-replay-service.js +17 -19
  238. package/src/sync/sync-resource-base.js +1 -2
  239. package/src/sync/sync-scope-store.js +9 -10
  240. package/src/testing/test-filter-parser.js +10 -11
  241. package/src/testing/test-runner.js +116 -108
  242. package/src/testing/test.js +8 -9
  243. package/src/utils/backtrace-cleaner.js +8 -9
  244. package/src/utils/model-scope.js +3 -4
  245. package/src/utils/ransack.js +27 -34
@@ -3,6 +3,15 @@ import TableData from "../database/table-data/index.js";
3
3
  import UUID from "pure-uuid";
4
4
  import { scopeKey } from "./query-scope.js";
5
5
  import stableJsonStringify from "./stable-json.js";
6
+ /**
7
+ * @typedef {object} SyncScopeRow
8
+ * @property {Record<string, ?>} conditions - Scope attribute conditions.
9
+ * @property {string | null} cursorPayload - Persisted cursor JSON payload.
10
+ * @property {string} id - Scope row id.
11
+ * @property {string | null} resourceType - Scope resource/model name, or null for the all-types (user) scope.
12
+ * @property {string} scopeDigest - Fixed-size deterministic digest of the canonical scope key.
13
+ * @property {string} state - Scope state ("active" or "removed").
14
+ */
6
15
  const TABLE_NAME = "velocious_sync_scopes";
7
16
  const SCOPE_DIGEST_PREFIX = "velocious-sync-scope:";
8
17
  /**
@@ -14,15 +23,6 @@ const SCOPE_DIGEST_PREFIX = "velocious-sync-scope:";
14
23
  function scopeDigestForScope(scope) {
15
24
  return new UUID(5, "ns:URL", `${SCOPE_DIGEST_PREFIX}${scopeKey(scope)}`).format();
16
25
  }
17
- /**
18
- * @typedef {object} SyncScopeRow
19
- * @property {Record<string, ?>} conditions - Scope attribute conditions.
20
- * @property {string | null} cursorPayload - Persisted cursor JSON payload.
21
- * @property {string} id - Scope row id.
22
- * @property {string | null} resourceType - Scope resource/model name, or null for the all-types (user) scope.
23
- * @property {string} scopeDigest - Fixed-size deterministic digest of the canonical scope key.
24
- * @property {string} state - Scope state ("active" or "removed").
25
- */
26
26
  /**
27
27
  * Framework-owned local persistence for declared sync scopes and their cursors.
28
28
  *
@@ -281,4 +281,4 @@ export default class SyncScopeStore {
281
281
  };
282
282
  }
283
283
  }
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1zY29wZS1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zeW5jL3N5bmMtc2NvcGUtc3RvcmUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLGlDQUFpQyxDQUFBO0FBQ3ZELE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUU1QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxtQkFBbUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRCxNQUFNLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQTtBQUMxQyxNQUFNLG1CQUFtQixHQUFHLHVCQUF1QixDQUFBO0FBRW5EOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxLQUFLO0lBQ2hDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUE7QUFDbkYsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBRUg7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxjQUFjO0lBQ2pDOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxrQkFBa0IsR0FBRyxTQUFTLEVBQUM7UUFDekQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFBO1FBQzVDLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7UUFDckIsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMs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QUMsRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFDLENBQUM7YUFDN0IsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNSLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFFYixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDMUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxrQkFBa0IsQ0FBQyxHQUFHO1FBQ3BCLE9BQU87WUFDTCxVQUFVLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUN0RixhQUFhLEVBQUUsR0FBRyxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDekcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLFlBQVksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztZQUNqRixXQUFXLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7WUFDckMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1NBQ3pCLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vZGF0YWJhc2UvdGFibGUtZGF0YS9pbmRleC5qc1wiXG5pbXBvcnQgVVVJRCBmcm9tIFwicHVyZS11dWlkXCJcblxuaW1wb3J0IHtzY29wZUtleX0gZnJvbSBcIi4vcXVlcnktc2NvcGUuanNcIlxuaW1wb3J0IHN0YWJsZUpzb25TdHJpbmdpZnkgZnJvbSBcIi4vc3RhYmxlLWpzb24uanNcIlxuXG5jb25zdCBUQUJMRV9OQU1FID0gXCJ2ZWxvY2lvdXNfc3luY19zY29wZXNcIlxuY29uc3QgU0NPUEVfRElHRVNUX1BSRUZJWCA9IFwidmVsb2Npb3VzLXN5bmMtc2NvcGU6XCJcblxuLyoqXG4gKiBEaWdlc3RzIGEgc2VyaWFsaXplZCBzY29wZSBpbnRvIGEgZml4ZWQtc2l6ZSBkZXRlcm1pbmlzdGljIGtleSwgc28gc2NvcGVcbiAqIGlkZW50aXRpZXMgd2l0aCBsb25nIGNvbmRpdGlvbiB2YWx1ZXMgZml0IGFuIGluZGV4ZWQgc3RyaW5nIGNvbHVtbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zeW5jLWNsaWVudC10eXBlcy5qc1wiKS5TZXJpYWxpemVkU3luY1Njb3BlfSBzY29wZSAtIFNlcmlhbGl6ZWQgc3luYyBzY29wZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IERldGVybWluaXN0aWMgVVVJRHY1IGRpZ2VzdCBvZiB0aGUgY2Fub25pY2FsIHNjb3BlIGtleS5cbiAqL1xuZnVuY3Rpb24gc2NvcGVEaWdlc3RGb3JTY29wZShzY29wZSkge1xuICByZXR1cm4gbmV3IFVVSUQoNSwgXCJuczpVUkxcIiwgYCR7U0NPUEVfRElHRVNUX1BSRUZJWH0ke3Njb3BlS2V5KHNjb3BlKX1gKS5mb3JtYXQoKVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN5bmNTY29wZVJvd1xuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCA/Pn0gY29uZGl0aW9ucyAtIFNjb3BlIGF0dHJpYnV0ZSBjb25kaXRpb25zLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBjdXJzb3JQYXlsb2FkIC0gUGVyc2lzdGVkIGN1cnNvciBKU09OIHBheWxvYWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBTY29wZSByb3cgaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IHJlc291cmNlVHlwZSAtIFNjb3BlIHJlc291cmNlL21vZGVsIG5hbWUsIG9yIG51bGwgZm9yIHRoZSBhbGwtdHlwZXMgKHVzZXIpIHNjb3BlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNjb3BlRGlnZXN0IC0gRml4ZWQtc2l6ZSBkZXRlcm1pbmlzdGljIGRpZ2VzdCBvZiB0aGUgY2Fub25pY2FsIHNjb3BlIGtleS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGF0ZSAtIFNjb3BlIHN0YXRlIChcImFjdGl2ZVwiIG9yIFwicmVtb3ZlZFwiKS5cbiAqL1xuXG4vKipcbiAqIEZyYW1ld29yay1vd25lZCBsb2NhbCBwZXJzaXN0ZW5jZSBmb3IgZGVjbGFyZWQgc3luYyBzY29wZXMgYW5kIHRoZWlyIGN1cnNvcnMuXG4gKlxuICogQmFja2VkIGJ5IGFuIGF1dG8tY3JlYXRlZCBgdmVsb2Npb3VzX3N5bmNfc2NvcGVzYCB0YWJsZSBvbiB0aGUgY29uZmlndXJlZFxuICogZGF0YWJhc2UsIHdpdGggYSBwcm9jZXNzLWxvY2FsIG1lbW9yeSBmYWxsYmFjayB3aGVuIG5vIGRhdGFiYXNlIGlzXG4gKiBjb25maWd1cmVkIChtaXJyb3JpbmcgdGhlIHNlcnZlciBjaGFuZ2UtZmVlZCBzdG9yZSkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN5bmNTY29wZVN0b3JlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzeW5jIHNjb3BlIHN0b3JlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIG93bmluZyB0aGUgZGF0YWJhc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5kYXRhYmFzZUlkZW50aWZpZXJdIC0gRGF0YWJhc2UgaWRlbnRpZmllci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBkYXRhYmFzZUlkZW50aWZpZXIgPSBcImRlZmF1bHRcIn0pIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5kYXRhYmFzZUlkZW50aWZpZXIgPSBkYXRhYmFzZUlkZW50aWZpZXJcbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIFN5bmNTY29wZVJvdz59ICovXG4gICAgdGhpcy5fbWVtb3J5U2NvcGVzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5faXNSZWFkeSA9IGZhbHNlXG4gICAgLyoqIEB0eXBlIHtQcm9taXNlPHZvaWQ+IHwgbnVsbH0gKi9cbiAgICB0aGlzLl9yZWFkeVByb21pc2UgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgYmFja2luZyB0YWJsZSBleGlzdHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBSZXNvbHZlcyB3aGVuIHJlYWR5LlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlUmVhZHkoKSB7XG4gICAgaWYgKHRoaXMuX2lzUmVhZHkpIHJldHVyblxuXG4gICAgaWYgKHRoaXMuX3VzZXNNZW1vcnlTdG9yYWdlKCkpIHtcbiAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmVhZHlQcm9taXNlKSByZXR1cm4gYXdhaXQgdGhpcy5fcmVhZHlQcm9taXNlXG5cbiAgICB0aGlzLl9yZWFkeVByb21pc2UgPSB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLl9lbnN1cmVTY29wZXNUYWJsZShkYilcbiAgICAgIHRoaXMuX2lzUmVhZHkgPSB0cnVlXG4gICAgfSlcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9yZWFkeVByb21pc2VcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKCF0aGlzLl9pc1JlYWR5KSB0aGlzLl9yZWFkeVByb21pc2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIG9yIGNyZWF0ZXMgdGhlIHNjb3BlIHJvdyBmb3IgYSBzZXJpYWxpemVkIHNjb3BlLCByZWFjdGl2YXRpbmcgcmVtb3ZlZCBzY29wZXMuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zeW5jLWNsaWVudC10eXBlcy5qc1wiKS5TZXJpYWxpemVkU3luY1Njb3BlfSBzY29wZSAtIFNlcmlhbGl6ZWQgc3luYyBzY29wZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8U3luY1Njb3BlUm93Pn0gUGVyc2lzdGVkIHNjb3BlIHJvdy5cbiAgICovXG4gIGFzeW5jIGZpbmRPckNyZWF0ZVNjb3BlKHNjb3BlKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZWFkeSgpXG5cbiAgICBjb25zdCBkaWdlc3QgPSBzY29wZURpZ2VzdEZvclNjb3BlKHNjb3BlKVxuXG4gICAgaWYgKHRoaXMuX3VzZXNNZW1vcnlTdG9yYWdlKCkpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nU2NvcGUgPSB0aGlzLl9tZW1vcnlTY29wZXMuZ2V0KGRpZ2VzdClcblxuICAgICAgaWYgKGV4aXN0aW5nU2NvcGUpIHtcbiAgICAgICAgaWYgKGV4aXN0aW5nU2NvcGUuc3RhdGUgIT09IFwiYWN0aXZlXCIpIGV4aXN0aW5nU2NvcGUuc3RhdGUgPSBcImFjdGl2ZVwiXG5cbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nU2NvcGVcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3U2NvcGUgPSB7XG4gICAgICAgIGNvbmRpdGlvbnM6IHNjb3BlLmNvbmRpdGlvbnMsXG4gICAgICAgIGN1cnNvclBheWxvYWQ6IG51bGwsXG4gICAgICAgIGlkOiBuZXcgVVVJRCg0KS5mb3JtYXQoKSxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiBzY29wZS5yZXNvdXJjZVR5cGUgPz8gbnVsbCxcbiAgICAgICAgc2NvcGVEaWdlc3Q6IGRpZ2VzdCxcbiAgICAgICAgc3RhdGU6IFwiYWN0aXZlXCJcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbWVtb3J5U2NvcGVzLnNldChkaWdlc3QsIG5ld1Njb3BlKVxuXG4gICAgICByZXR1cm4gbmV3U2NvcGVcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmdSb3cgPSBhd2FpdCB0aGlzLl9yb3dCeVNjb3BlRGlnZXN0KGRiLCBkaWdlc3QpXG5cbiAgICAgIGlmIChleGlzdGluZ1Jvdykge1xuICAgICAgICBpZiAoZXhpc3RpbmdSb3cuc3RhdGUgIT09IFwiYWN0aXZlXCIpIHtcbiAgICAgICAgICBhd2FpdCBkYi51cGRhdGUoe2NvbmRpdGlvbnM6IHtpZDogZXhpc3RpbmdSb3cuaWR9LCBkYXRhOiB7c3RhdGU6IFwiYWN0aXZlXCIsIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKCl9LCB0YWJsZU5hbWU6IFRBQkxFX05BTUV9KVxuICAgICAgICAgIGV4aXN0aW5nUm93LnN0YXRlID0gXCJhY3RpdmVcIlxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nUm93XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGRiLmluc2VydCh7XG4gICAgICAgIHRhYmxlTmFtZTogVEFCTEVfTkFNRSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNvbmRpdGlvbnNfanNvbjogc3RhYmxlSnNvblN0cmluZ2lmeShzY29wZS5jb25kaXRpb25zKSxcbiAgICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIGN1cnNvcl9qc29uOiBudWxsLFxuICAgICAgICAgIGlkOiBuZXcgVVVJRCg0KS5mb3JtYXQoKSxcbiAgICAgICAgICAvLyBUaGUgYWxsLXR5cGVzICh1c2VyKSBzY29wZSBoYXMgbm8gcmVzb3VyY2UgdHlwZTsgdGhlIGNvbHVtbiBpcyBub24tbnVsbCwgc28gaXRcbiAgICAgICAgICAvLyBzdG9yZXMgYXMgYW4gZW1wdHkgc3RyaW5nIGFuZCBub3JtYWxpemVzIGJhY2sgdG8gbnVsbCBvbiByZWFkLlxuICAgICAgICAgIHJlc291cmNlX3R5cGU6IHNjb3BlLnJlc291cmNlVHlwZSA/PyBcIlwiLFxuICAgICAgICAgIHNjb3BlX2RpZ2VzdDogZGlnZXN0LFxuICAgICAgICAgIHN0YXRlOiBcImFjdGl2ZVwiLFxuICAgICAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKClcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgY29uc3QgY3JlYXRlZFJvdyA9IGF3YWl0IHRoaXMuX3Jvd0J5U2NvcGVEaWdlc3QoZGIsIGRpZ2VzdClcblxuICAgICAgaWYgKCFjcmVhdGVkUm93KSB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGVyc2lzdCBzeW5jIHNjb3BlXCIpXG5cbiAgICAgIHJldHVybiBjcmVhdGVkUm93XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBhY3RpdmUgc2NvcGUgcm93cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8U3luY1Njb3BlUm93W10+fSBBY3RpdmUgc2NvcGUgcm93cy5cbiAgICovXG4gIGFzeW5jIGFjdGl2ZVNjb3BlcygpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlYWR5KClcblxuICAgIGlmICh0aGlzLl91c2VzTWVtb3J5U3RvcmFnZSgpKSB7XG4gICAgICByZXR1cm4gWy4uLnRoaXMuX21lbW9yeVNjb3Blcy52YWx1ZXMoKV0uZmlsdGVyKChzY29wZSkgPT4gc2NvcGUuc3RhdGUgPT09IFwiYWN0aXZlXCIpXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGNvbnN0IHJvd3MgPSAvKiogQHR5cGUge0FycmF5PFJlY29yZDxzdHJpbmcsID8+Pn0gKi8gKGF3YWl0IGRiXG4gICAgICAgIC5uZXdRdWVyeSgpXG4gICAgICAgIC5mcm9tKFRBQkxFX05BTUUpXG4gICAgICAgIC53aGVyZSh7c3RhdGU6IFwiYWN0aXZlXCJ9KVxuICAgICAgICAub3JkZXIoXCJjcmVhdGVkX2F0IEFTQ1wiKVxuICAgICAgICAucmVzdWx0cygpKVxuXG4gICAgICByZXR1cm4gcm93cy5tYXAoKHJvdykgPT4gdGhpcy5fbm9ybWFsaXplU2NvcGVSb3cocm93KSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBwZXJzaXN0ZWQgY3Vyc29yIHBheWxvYWQgZm9yIGEgc2NvcGUgcm93LlxuICAgKiBAcGFyYW0ge1N5bmNTY29wZVJvd30gc2NvcGVSb3cgLSBTY29wZSByb3cuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZyB8IG51bGw+fSBDdXJzb3IgSlNPTiBwYXlsb2FkLlxuICAgKi9cbiAgYXN5bmMgbG9hZEN1cnNvcihzY29wZVJvdykge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgaWYgKHRoaXMuX3VzZXNNZW1vcnlTdG9yYWdlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tZW1vcnlTY29wZXMuZ2V0KHNjb3BlUm93LnNjb3BlRGlnZXN0KT8uY3Vyc29yUGF5bG9hZCA/PyBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGNvbnN0IHJvdyA9IGF3YWl0IHRoaXMuX3Jvd0J5U2NvcGVEaWdlc3QoZGIsIHNjb3BlUm93LnNjb3BlRGlnZXN0KVxuXG4gICAgICByZXR1cm4gcm93ID8gcm93LmN1cnNvclBheWxvYWQgOiBudWxsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0cyB0aGUgYWNrbm93bGVkZ2VkIGN1cnNvciBmb3IgYSBzY29wZSByb3cuXG4gICAqIEBwYXJhbSB7U3luY1Njb3BlUm93fSBzY29wZVJvdyAtIFNjb3BlIHJvdy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3N5bmMtYXBpLWNsaWVudC10eXBlcy5qc1wiKS5TeW5jQ3Vyc29yfSBjdXJzb3IgLSBBY2tub3dsZWRnZWQgY3Vyc29yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIHNhdmVDdXJzb3Ioc2NvcGVSb3csIGN1cnNvcikge1xuICAgIGlmICghY3Vyc29yKSByZXR1cm5cblxuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgY29uc3QgY3Vyc29yUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KGN1cnNvcilcblxuICAgIGlmICh0aGlzLl91c2VzTWVtb3J5U3RvcmFnZSgpKSB7XG4gICAgICBjb25zdCBtZW1vcnlTY29wZSA9IHRoaXMuX21lbW9yeVNjb3Blcy5nZXQoc2NvcGVSb3cuc2NvcGVEaWdlc3QpXG5cbiAgICAgIGlmICghbWVtb3J5U2NvcGUpIHRocm93IG5ldyBFcnJvcihgTm8gc3luYyBzY29wZSBmb3VuZCBmb3I6ICR7c2NvcGVSb3cuc2NvcGVEaWdlc3R9YClcblxuICAgICAgbWVtb3J5U2NvcGUuY3Vyc29yUGF5bG9hZCA9IGN1cnNvclBheWxvYWRcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGF3YWl0IGRiLnVwZGF0ZSh7XG4gICAgICAgIGNvbmRpdGlvbnM6IHtzY29wZV9kaWdlc3Q6IHNjb3BlUm93LnNjb3BlRGlnZXN0fSxcbiAgICAgICAgZGF0YToge2N1cnNvcl9qc29uOiBjdXJzb3JQYXlsb2FkLCB1cGRhdGVkX2F0OiBuZXcgRGF0ZSgpfSxcbiAgICAgICAgdGFibGVOYW1lOiBUQUJMRV9OQU1FXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIHNjb3BlIHJvdyBmb3IgYSBzZXJpYWxpemVkIHNjb3BlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vc3luYy1jbGllbnQtdHlwZXMuanNcIikuU2VyaWFsaXplZFN5bmNTY29wZX0gc2NvcGUgLSBTZXJpYWxpemVkIHN5bmMgc2NvcGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgZGVhY3RpdmF0ZShzY29wZSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgY29uc3QgZGlnZXN0ID0gc2NvcGVEaWdlc3RGb3JTY29wZShzY29wZSlcblxuICAgIGlmICh0aGlzLl91c2VzTWVtb3J5U3RvcmFnZSgpKSB7XG4gICAgICBjb25zdCBtZW1vcnlTY29wZSA9IHRoaXMuX21lbW9yeVNjb3Blcy5nZXQoZGlnZXN0KVxuXG4gICAgICBpZiAobWVtb3J5U2NvcGUpIG1lbW9yeVNjb3BlLnN0YXRlID0gXCJyZW1vdmVkXCJcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT4ge1xuICAgICAgYXdhaXQgZGIudXBkYXRlKHtjb25kaXRpb25zOiB7c2NvcGVfZGlnZXN0OiBkaWdlc3R9LCBkYXRhOiB7c3RhdGU6IFwicmVtb3ZlZFwiLCB1cGRhdGVkX2F0OiBuZXcgRGF0ZSgpfSwgdGFibGVOYW1lOiBUQUJMRV9OQU1FfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHN0b3JlIHJ1bnMgd2l0aG91dCBhIGNvbmZpZ3VyZWQgZGF0YWJhc2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIG1lbW9yeSBzdG9yYWdlIGlzIHVzZWQuXG4gICAqL1xuICBfdXNlc01lbW9yeVN0b3JhZ2UoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAhdGhpcy5jb25maWd1cmF0aW9uLmdldERhdGFiYXNlQ29uZmlndXJhdGlvbigpW3RoaXMuZGF0YWJhc2VJZGVudGlmaWVyXVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIGNhbGxiYWNrIHdpdGggYSBkYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgKiBAdGVtcGxhdGUgUmVzdWx0XG4gICAqIEBwYXJhbSB7KGRiOiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCkgPT4gUHJvbWlzZTxSZXN1bHQ+fSBjYWxsYmFjayAtIERhdGFiYXNlIGNhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZXN1bHQ+fSBDYWxsYmFjayByZXN1bHQuXG4gICAqL1xuICBhc3luYyBfd2l0aERiKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbi5lbnN1cmVDb25uZWN0aW9ucyh7ZGF0YWJhc2VJZGVudGlmaWVyczogW3RoaXMuZGF0YWJhc2VJZGVudGlmaWVyXSwgbmFtZTogXCJTeW5jIHNjb3BlIHN0b3JlXCJ9LCBhc3luYyAoZGJzKSA9PiB7XG4gICAgICBjb25zdCBkYiA9IGRic1t0aGlzLmRhdGFiYXNlSWRlbnRpZmllcl1cblxuICAgICAgaWYgKCFkYikgdGhyb3cgbmV3IEVycm9yKGBObyBkYXRhYmFzZSBjb25uZWN0aW9uIGF2YWlsYWJsZSBmb3IgaWRlbnRpZmllcjogJHt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcn1gKVxuXG4gICAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soZGIpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoZSBzY29wZXMgdGFibGUgZXhpc3RzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgX2Vuc3VyZVNjb3Blc1RhYmxlKGRiKSB7XG4gICAgaWYgKGF3YWl0IGRiLnRhYmxlRXhpc3RzKFRBQkxFX05BTUUpKSByZXR1cm5cblxuICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlRGF0YShUQUJMRV9OQU1FLCB7aWZOb3RFeGlzdHM6IHRydWV9KVxuXG4gICAgdGFibGUuc3RyaW5nKFwiaWRcIiwge251bGw6IGZhbHNlLCBwcmltYXJ5S2V5OiB0cnVlfSlcbiAgICB0YWJsZS5zdHJpbmcoXCJzY29wZV9kaWdlc3RcIiwge2luZGV4OiB0cnVlLCBudWxsOiBmYWxzZX0pXG4gICAgdGFibGUuc3RyaW5nKFwicmVzb3VyY2VfdHlwZVwiLCB7aW5kZXg6IHRydWUsIG51bGw6IGZhbHNlfSlcbiAgICB0YWJsZS50ZXh0KFwiY29uZGl0aW9uc19qc29uXCIsIHtudWxsOiBmYWxzZX0pXG4gICAgdGFibGUudGV4dChcImN1cnNvcl9qc29uXCIsIHtudWxsOiB0cnVlfSlcbiAgICB0YWJsZS5zdHJpbmcoXCJzdGF0ZVwiLCB7aW5kZXg6IHRydWUsIG51bGw6IGZhbHNlfSlcbiAgICB0YWJsZS5kYXRldGltZShcImNyZWF0ZWRfYXRcIiwge251bGw6IGZhbHNlfSlcbiAgICB0YWJsZS5kYXRldGltZShcInVwZGF0ZWRfYXRcIiwge251bGw6IGZhbHNlfSlcblxuICAgIGF3YWl0IGRiLmNyZWF0ZVRhYmxlKHRhYmxlKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgc2NvcGUgcm93IGJ5IGl0cyBkaWdlc3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGRiIC0gRGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpZ2VzdCAtIEZpeGVkLXNpemUgc2NvcGUgZGlnZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTeW5jU2NvcGVSb3cgfCBudWxsPn0gU2NvcGUgcm93IG9yIG51bGwuXG4gICAqL1xuICBhc3luYyBfcm93QnlTY29wZURpZ2VzdChkYiwgZGlnZXN0KSB7XG4gICAgY29uc3Qgcm93cyA9IC8qKiBAdHlwZSB7QXJyYXk8UmVjb3JkPHN0cmluZywgPz4+fSAqLyAoYXdhaXQgZGJcbiAgICAgIC5uZXdRdWVyeSgpXG4gICAgICAuZnJvbShUQUJMRV9OQU1FKVxuICAgICAgLndoZXJlKHtzY29wZV9kaWdlc3Q6IGRpZ2VzdH0pXG4gICAgICAubGltaXQoMSlcbiAgICAgIC5yZXN1bHRzKCkpXG5cbiAgICByZXR1cm4gcm93c1swXSA/IHRoaXMuX25vcm1hbGl6ZVNjb3BlUm93KHJvd3NbMF0pIDogbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIE5vcm1hbGl6ZXMgYSByYXcgc2NvcGUgdGFibGUgcm93LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSByb3cgLSBSYXcgdGFibGUgcm93LlxuICAgKiBAcmV0dXJucyB7U3luY1Njb3BlUm93fSBOb3JtYWxpemVkIHNjb3BlIHJvdy5cbiAgICovXG4gIF9ub3JtYWxpemVTY29wZVJvdyhyb3cpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29uZGl0aW9uczogLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi8gKEpTT04ucGFyc2UoU3RyaW5nKHJvdy5jb25kaXRpb25zX2pzb24pKSksXG4gICAgICBjdXJzb3JQYXlsb2FkOiByb3cuY3Vyc29yX2pzb24gPT09IG51bGwgfHwgcm93LmN1cnNvcl9qc29uID09PSB1bmRlZmluZWQgPyBudWxsIDogU3RyaW5nKHJvdy5jdXJzb3JfanNvbiksXG4gICAgICBpZDogU3RyaW5nKHJvdy5pZCksXG4gICAgICByZXNvdXJjZVR5cGU6IFN0cmluZyhyb3cucmVzb3VyY2VfdHlwZSkgPT09IFwiXCIgPyBudWxsIDogU3RyaW5nKHJvdy5yZXNvdXJjZV90eXBlKSxcbiAgICAgIHNjb3BlRGlnZXN0OiBTdHJpbmcocm93LnNjb3BlX2RpZ2VzdCksXG4gICAgICBzdGF0ZTogU3RyaW5nKHJvdy5zdGF0ZSlcbiAgICB9XG4gIH1cbn1cbiJdfQ==
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1zY29wZS1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zeW5jL3N5bmMtc2NvcGUtc3RvcmUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLGlDQUFpQyxDQUFBO0FBQ3ZELE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUU1QixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxtQkFBbUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUVsRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxHQUFHLHVCQUF1QixDQUFBO0FBQzFDLE1BQU0sbUJBQW1CLEdBQUcsdUJBQXVCLENBQUE7QUFFbkQ7Ozs7O0dBS0c7QUFDSCxTQUFTLG1CQUFtQixDQUFDLEtBQUs7SUFDaEMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsbUJBQW1CLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtBQUNuRixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxjQUFjO0lBQ2pDOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxrQkFBa0IsR0FBRyxTQUFTLEVBQUM7UUFDekQsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFBO1FBQzVDLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7UUFDckIsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFBO0lBQzNCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMs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QUMsRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFDLENBQUM7YUFDN0IsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUNSLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFFYixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDMUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxrQkFBa0IsQ0FBQyxHQUFHO1FBQ3BCLE9BQU87WUFDTCxVQUFVLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUN0RixhQUFhLEVBQUUsR0FBRyxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDekcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLFlBQVksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztZQUNqRixXQUFXLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7WUFDckMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1NBQ3pCLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IFRhYmxlRGF0YSBmcm9tIFwiLi4vZGF0YWJhc2UvdGFibGUtZGF0YS9pbmRleC5qc1wiXG5pbXBvcnQgVVVJRCBmcm9tIFwicHVyZS11dWlkXCJcblxuaW1wb3J0IHtzY29wZUtleX0gZnJvbSBcIi4vcXVlcnktc2NvcGUuanNcIlxuaW1wb3J0IHN0YWJsZUpzb25TdHJpbmdpZnkgZnJvbSBcIi4vc3RhYmxlLWpzb24uanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN5bmNTY29wZVJvd1xuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCA/Pn0gY29uZGl0aW9ucyAtIFNjb3BlIGF0dHJpYnV0ZSBjb25kaXRpb25zLlxuICogQHByb3BlcnR5IHtzdHJpbmcgfCBudWxsfSBjdXJzb3JQYXlsb2FkIC0gUGVyc2lzdGVkIGN1cnNvciBKU09OIHBheWxvYWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBTY29wZSByb3cgaWQuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGx9IHJlc291cmNlVHlwZSAtIFNjb3BlIHJlc291cmNlL21vZGVsIG5hbWUsIG9yIG51bGwgZm9yIHRoZSBhbGwtdHlwZXMgKHVzZXIpIHNjb3BlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNjb3BlRGlnZXN0IC0gRml4ZWQtc2l6ZSBkZXRlcm1pbmlzdGljIGRpZ2VzdCBvZiB0aGUgY2Fub25pY2FsIHNjb3BlIGtleS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzdGF0ZSAtIFNjb3BlIHN0YXRlIChcImFjdGl2ZVwiIG9yIFwicmVtb3ZlZFwiKS5cbiAqL1xuY29uc3QgVEFCTEVfTkFNRSA9IFwidmVsb2Npb3VzX3N5bmNfc2NvcGVzXCJcbmNvbnN0IFNDT1BFX0RJR0VTVF9QUkVGSVggPSBcInZlbG9jaW91cy1zeW5jLXNjb3BlOlwiXG5cbi8qKlxuICogRGlnZXN0cyBhIHNlcmlhbGl6ZWQgc2NvcGUgaW50byBhIGZpeGVkLXNpemUgZGV0ZXJtaW5pc3RpYyBrZXksIHNvIHNjb3BlXG4gKiBpZGVudGl0aWVzIHdpdGggbG9uZyBjb25kaXRpb24gdmFsdWVzIGZpdCBhbiBpbmRleGVkIHN0cmluZyBjb2x1bW4uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3luYy1jbGllbnQtdHlwZXMuanNcIikuU2VyaWFsaXplZFN5bmNTY29wZX0gc2NvcGUgLSBTZXJpYWxpemVkIHN5bmMgc2NvcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBEZXRlcm1pbmlzdGljIFVVSUR2NSBkaWdlc3Qgb2YgdGhlIGNhbm9uaWNhbCBzY29wZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHNjb3BlRGlnZXN0Rm9yU2NvcGUoc2NvcGUpIHtcbiAgcmV0dXJuIG5ldyBVVUlEKDUsIFwibnM6VVJMXCIsIGAke1NDT1BFX0RJR0VTVF9QUkVGSVh9JHtzY29wZUtleShzY29wZSl9YCkuZm9ybWF0KClcbn1cblxuLyoqXG4gKiBGcmFtZXdvcmstb3duZWQgbG9jYWwgcGVyc2lzdGVuY2UgZm9yIGRlY2xhcmVkIHN5bmMgc2NvcGVzIGFuZCB0aGVpciBjdXJzb3JzLlxuICpcbiAqIEJhY2tlZCBieSBhbiBhdXRvLWNyZWF0ZWQgYHZlbG9jaW91c19zeW5jX3Njb3Blc2AgdGFibGUgb24gdGhlIGNvbmZpZ3VyZWRcbiAqIGRhdGFiYXNlLCB3aXRoIGEgcHJvY2Vzcy1sb2NhbCBtZW1vcnkgZmFsbGJhY2sgd2hlbiBubyBkYXRhYmFzZSBpc1xuICogY29uZmlndXJlZCAobWlycm9yaW5nIHRoZSBzZXJ2ZXIgY2hhbmdlLWZlZWQgc3RvcmUpLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTeW5jU2NvcGVTdG9yZSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc3luYyBzY29wZSBzdG9yZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBvd25pbmcgdGhlIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuZGF0YWJhc2VJZGVudGlmaWVyXSAtIERhdGFiYXNlIGlkZW50aWZpZXIuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgZGF0YWJhc2VJZGVudGlmaWVyID0gXCJkZWZhdWx0XCJ9KSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblxuICAgIHRoaXMuZGF0YWJhc2VJZGVudGlmaWVyID0gZGF0YWJhc2VJZGVudGlmaWVyXG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBTeW5jU2NvcGVSb3c+fSAqL1xuICAgIHRoaXMuX21lbW9yeVNjb3BlcyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuX2lzUmVhZHkgPSBmYWxzZVxuICAgIC8qKiBAdHlwZSB7UHJvbWlzZTx2b2lkPiB8IG51bGx9ICovXG4gICAgdGhpcy5fcmVhZHlQcm9taXNlID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlIGJhY2tpbmcgdGFibGUgZXhpc3RzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gUmVzb2x2ZXMgd2hlbiByZWFkeS5cbiAgICovXG4gIGFzeW5jIGVuc3VyZVJlYWR5KCkge1xuICAgIGlmICh0aGlzLl9pc1JlYWR5KSByZXR1cm5cblxuICAgIGlmICh0aGlzLl91c2VzTWVtb3J5U3RvcmFnZSgpKSB7XG4gICAgICB0aGlzLl9pc1JlYWR5ID0gdHJ1ZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3JlYWR5UHJvbWlzZSkgcmV0dXJuIGF3YWl0IHRoaXMuX3JlYWR5UHJvbWlzZVxuXG4gICAgdGhpcy5fcmVhZHlQcm9taXNlID0gdGhpcy5fd2l0aERiKGFzeW5jIChkYikgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5fZW5zdXJlU2NvcGVzVGFibGUoZGIpXG4gICAgICB0aGlzLl9pc1JlYWR5ID0gdHJ1ZVxuICAgIH0pXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcmVhZHlQcm9taXNlXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICghdGhpcy5faXNSZWFkeSkgdGhpcy5fcmVhZHlQcm9taXNlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBvciBjcmVhdGVzIHRoZSBzY29wZSByb3cgZm9yIGEgc2VyaWFsaXplZCBzY29wZSwgcmVhY3RpdmF0aW5nIHJlbW92ZWQgc2NvcGVzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vc3luYy1jbGllbnQtdHlwZXMuanNcIikuU2VyaWFsaXplZFN5bmNTY29wZX0gc2NvcGUgLSBTZXJpYWxpemVkIHN5bmMgc2NvcGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFN5bmNTY29wZVJvdz59IFBlcnNpc3RlZCBzY29wZSByb3cuXG4gICAqL1xuICBhc3luYyBmaW5kT3JDcmVhdGVTY29wZShzY29wZSkge1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlUmVhZHkoKVxuXG4gICAgY29uc3QgZGlnZXN0ID0gc2NvcGVEaWdlc3RGb3JTY29wZShzY29wZSlcblxuICAgIGlmICh0aGlzLl91c2VzTWVtb3J5U3RvcmFnZSgpKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1Njb3BlID0gdGhpcy5fbWVtb3J5U2NvcGVzLmdldChkaWdlc3QpXG5cbiAgICAgIGlmIChleGlzdGluZ1Njb3BlKSB7XG4gICAgICAgIGlmIChleGlzdGluZ1Njb3BlLnN0YXRlICE9PSBcImFjdGl2ZVwiKSBleGlzdGluZ1Njb3BlLnN0YXRlID0gXCJhY3RpdmVcIlxuXG4gICAgICAgIHJldHVybiBleGlzdGluZ1Njb3BlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1Njb3BlID0ge1xuICAgICAgICBjb25kaXRpb25zOiBzY29wZS5jb25kaXRpb25zLFxuICAgICAgICBjdXJzb3JQYXlsb2FkOiBudWxsLFxuICAgICAgICBpZDogbmV3IFVVSUQoNCkuZm9ybWF0KCksXG4gICAgICAgIHJlc291cmNlVHlwZTogc2NvcGUucmVzb3VyY2VUeXBlID8/IG51bGwsXG4gICAgICAgIHNjb3BlRGlnZXN0OiBkaWdlc3QsXG4gICAgICAgIHN0YXRlOiBcImFjdGl2ZVwiXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX21lbW9yeVNjb3Blcy5zZXQoZGlnZXN0LCBuZXdTY29wZSlcblxuICAgICAgcmV0dXJuIG5ld1Njb3BlXG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nUm93ID0gYXdhaXQgdGhpcy5fcm93QnlTY29wZURpZ2VzdChkYiwgZGlnZXN0KVxuXG4gICAgICBpZiAoZXhpc3RpbmdSb3cpIHtcbiAgICAgICAgaWYgKGV4aXN0aW5nUm93LnN0YXRlICE9PSBcImFjdGl2ZVwiKSB7XG4gICAgICAgICAgYXdhaXQgZGIudXBkYXRlKHtjb25kaXRpb25zOiB7aWQ6IGV4aXN0aW5nUm93LmlkfSwgZGF0YToge3N0YXRlOiBcImFjdGl2ZVwiLCB1cGRhdGVkX2F0OiBuZXcgRGF0ZSgpfSwgdGFibGVOYW1lOiBUQUJMRV9OQU1FfSlcbiAgICAgICAgICBleGlzdGluZ1Jvdy5zdGF0ZSA9IFwiYWN0aXZlXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleGlzdGluZ1Jvd1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBkYi5pbnNlcnQoe1xuICAgICAgICB0YWJsZU5hbWU6IFRBQkxFX05BTUUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjb25kaXRpb25zX2pzb246IHN0YWJsZUpzb25TdHJpbmdpZnkoc2NvcGUuY29uZGl0aW9ucyksXG4gICAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBjdXJzb3JfanNvbjogbnVsbCxcbiAgICAgICAgICBpZDogbmV3IFVVSUQoNCkuZm9ybWF0KCksXG4gICAgICAgICAgLy8gVGhlIGFsbC10eXBlcyAodXNlcikgc2NvcGUgaGFzIG5vIHJlc291cmNlIHR5cGU7IHRoZSBjb2x1bW4gaXMgbm9uLW51bGwsIHNvIGl0XG4gICAgICAgICAgLy8gc3RvcmVzIGFzIGFuIGVtcHR5IHN0cmluZyBhbmQgbm9ybWFsaXplcyBiYWNrIHRvIG51bGwgb24gcmVhZC5cbiAgICAgICAgICByZXNvdXJjZV90eXBlOiBzY29wZS5yZXNvdXJjZVR5cGUgPz8gXCJcIixcbiAgICAgICAgICBzY29wZV9kaWdlc3Q6IGRpZ2VzdCxcbiAgICAgICAgICBzdGF0ZTogXCJhY3RpdmVcIixcbiAgICAgICAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGNyZWF0ZWRSb3cgPSBhd2FpdCB0aGlzLl9yb3dCeVNjb3BlRGlnZXN0KGRiLCBkaWdlc3QpXG5cbiAgICAgIGlmICghY3JlYXRlZFJvdykgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHBlcnNpc3Qgc3luYyBzY29wZVwiKVxuXG4gICAgICByZXR1cm4gY3JlYXRlZFJvd1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgYWN0aXZlIHNjb3BlIHJvd3MuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFN5bmNTY29wZVJvd1tdPn0gQWN0aXZlIHNjb3BlIHJvd3MuXG4gICAqL1xuICBhc3luYyBhY3RpdmVTY29wZXMoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZWFkeSgpXG5cbiAgICBpZiAodGhpcy5fdXNlc01lbW9yeVN0b3JhZ2UoKSkge1xuICAgICAgcmV0dXJuIFsuLi50aGlzLl9tZW1vcnlTY29wZXMudmFsdWVzKCldLmZpbHRlcigoc2NvcGUpID0+IHNjb3BlLnN0YXRlID09PSBcImFjdGl2ZVwiKVxuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICBjb25zdCByb3dzID0gLyoqIEB0eXBlIHtBcnJheTxSZWNvcmQ8c3RyaW5nLCA/Pj59ICovIChhd2FpdCBkYlxuICAgICAgICAubmV3UXVlcnkoKVxuICAgICAgICAuZnJvbShUQUJMRV9OQU1FKVxuICAgICAgICAud2hlcmUoe3N0YXRlOiBcImFjdGl2ZVwifSlcbiAgICAgICAgLm9yZGVyKFwiY3JlYXRlZF9hdCBBU0NcIilcbiAgICAgICAgLnJlc3VsdHMoKSlcblxuICAgICAgcmV0dXJuIHJvd3MubWFwKChyb3cpID0+IHRoaXMuX25vcm1hbGl6ZVNjb3BlUm93KHJvdykpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgcGVyc2lzdGVkIGN1cnNvciBwYXlsb2FkIGZvciBhIHNjb3BlIHJvdy5cbiAgICogQHBhcmFtIHtTeW5jU2NvcGVSb3d9IHNjb3BlUm93IC0gU2NvcGUgcm93LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmcgfCBudWxsPn0gQ3Vyc29yIEpTT04gcGF5bG9hZC5cbiAgICovXG4gIGFzeW5jIGxvYWRDdXJzb3Ioc2NvcGVSb3cpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlYWR5KClcblxuICAgIGlmICh0aGlzLl91c2VzTWVtb3J5U3RvcmFnZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbWVtb3J5U2NvcGVzLmdldChzY29wZVJvdy5zY29wZURpZ2VzdCk/LmN1cnNvclBheWxvYWQgPz8gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLl9yb3dCeVNjb3BlRGlnZXN0KGRiLCBzY29wZVJvdy5zY29wZURpZ2VzdClcblxuICAgICAgcmV0dXJuIHJvdyA/IHJvdy5jdXJzb3JQYXlsb2FkIDogbnVsbFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdHMgdGhlIGFja25vd2xlZGdlZCBjdXJzb3IgZm9yIGEgc2NvcGUgcm93LlxuICAgKiBAcGFyYW0ge1N5bmNTY29wZVJvd30gc2NvcGVSb3cgLSBTY29wZSByb3cuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zeW5jLWFwaS1jbGllbnQtdHlwZXMuanNcIikuU3luY0N1cnNvcn0gY3Vyc29yIC0gQWNrbm93bGVkZ2VkIGN1cnNvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBzYXZlQ3Vyc29yKHNjb3BlUm93LCBjdXJzb3IpIHtcbiAgICBpZiAoIWN1cnNvcikgcmV0dXJuXG5cbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlYWR5KClcblxuICAgIGNvbnN0IGN1cnNvclBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShjdXJzb3IpXG5cbiAgICBpZiAodGhpcy5fdXNlc01lbW9yeVN0b3JhZ2UoKSkge1xuICAgICAgY29uc3QgbWVtb3J5U2NvcGUgPSB0aGlzLl9tZW1vcnlTY29wZXMuZ2V0KHNjb3BlUm93LnNjb3BlRGlnZXN0KVxuXG4gICAgICBpZiAoIW1lbW9yeVNjb3BlKSB0aHJvdyBuZXcgRXJyb3IoYE5vIHN5bmMgc2NvcGUgZm91bmQgZm9yOiAke3Njb3BlUm93LnNjb3BlRGlnZXN0fWApXG5cbiAgICAgIG1lbW9yeVNjb3BlLmN1cnNvclBheWxvYWQgPSBjdXJzb3JQYXlsb2FkXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLl93aXRoRGIoYXN5bmMgKGRiKSA9PiB7XG4gICAgICBhd2FpdCBkYi51cGRhdGUoe1xuICAgICAgICBjb25kaXRpb25zOiB7c2NvcGVfZGlnZXN0OiBzY29wZVJvdy5zY29wZURpZ2VzdH0sXG4gICAgICAgIGRhdGE6IHtjdXJzb3JfanNvbjogY3Vyc29yUGF5bG9hZCwgdXBkYXRlZF9hdDogbmV3IERhdGUoKX0sXG4gICAgICAgIHRhYmxlTmFtZTogVEFCTEVfTkFNRVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSBzY29wZSByb3cgZm9yIGEgc2VyaWFsaXplZCBzY29wZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3N5bmMtY2xpZW50LXR5cGVzLmpzXCIpLlNlcmlhbGl6ZWRTeW5jU2NvcGV9IHNjb3BlIC0gU2VyaWFsaXplZCBzeW5jIHNjb3BlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGRlYWN0aXZhdGUoc2NvcGUpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlYWR5KClcblxuICAgIGNvbnN0IGRpZ2VzdCA9IHNjb3BlRGlnZXN0Rm9yU2NvcGUoc2NvcGUpXG5cbiAgICBpZiAodGhpcy5fdXNlc01lbW9yeVN0b3JhZ2UoKSkge1xuICAgICAgY29uc3QgbWVtb3J5U2NvcGUgPSB0aGlzLl9tZW1vcnlTY29wZXMuZ2V0KGRpZ2VzdClcblxuICAgICAgaWYgKG1lbW9yeVNjb3BlKSBtZW1vcnlTY29wZS5zdGF0ZSA9IFwicmVtb3ZlZFwiXG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuX3dpdGhEYihhc3luYyAoZGIpID0+IHtcbiAgICAgIGF3YWl0IGRiLnVwZGF0ZSh7Y29uZGl0aW9uczoge3Njb3BlX2RpZ2VzdDogZGlnZXN0fSwgZGF0YToge3N0YXRlOiBcInJlbW92ZWRcIiwgdXBkYXRlZF9hdDogbmV3IERhdGUoKX0sIHRhYmxlTmFtZTogVEFCTEVfTkFNRX0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzdG9yZSBydW5zIHdpdGhvdXQgYSBjb25maWd1cmVkIGRhdGFiYXNlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBtZW1vcnkgc3RvcmFnZSBpcyB1c2VkLlxuICAgKi9cbiAgX3VzZXNNZW1vcnlTdG9yYWdlKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gIXRoaXMuY29uZmlndXJhdGlvbi5nZXREYXRhYmFzZUNvbmZpZ3VyYXRpb24oKVt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcl1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBjYWxsYmFjayB3aXRoIGEgZGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHRlbXBsYXRlIFJlc3VsdFxuICAgKiBAcGFyYW0geyhkYjogaW1wb3J0KFwiLi4vZGF0YWJhc2UvZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQpID0+IFByb21pc2U8UmVzdWx0Pn0gY2FsbGJhY2sgLSBEYXRhYmFzZSBjYWxsYmFjay5cbiAgICogQHJldHVybnMge1Byb21pc2U8UmVzdWx0Pn0gQ2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgX3dpdGhEYihjYWxsYmFjaykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb24uZW5zdXJlQ29ubmVjdGlvbnMoe2RhdGFiYXNlSWRlbnRpZmllcnM6IFt0aGlzLmRhdGFiYXNlSWRlbnRpZmllcl0sIG5hbWU6IFwiU3luYyBzY29wZSBzdG9yZVwifSwgYXN5bmMgKGRicykgPT4ge1xuICAgICAgY29uc3QgZGIgPSBkYnNbdGhpcy5kYXRhYmFzZUlkZW50aWZpZXJdXG5cbiAgICAgIGlmICghZGIpIHRocm93IG5ldyBFcnJvcihgTm8gZGF0YWJhc2UgY29ubmVjdGlvbiBhdmFpbGFibGUgZm9yIGlkZW50aWZpZXI6ICR7dGhpcy5kYXRhYmFzZUlkZW50aWZpZXJ9YClcblxuICAgICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKGRiKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgc2NvcGVzIHRhYmxlIGV4aXN0cy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kYXRhYmFzZS9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gZGIgLSBEYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIF9lbnN1cmVTY29wZXNUYWJsZShkYikge1xuICAgIGlmIChhd2FpdCBkYi50YWJsZUV4aXN0cyhUQUJMRV9OQU1FKSkgcmV0dXJuXG5cbiAgICBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZURhdGEoVEFCTEVfTkFNRSwge2lmTm90RXhpc3RzOiB0cnVlfSlcblxuICAgIHRhYmxlLnN0cmluZyhcImlkXCIsIHtudWxsOiBmYWxzZSwgcHJpbWFyeUtleTogdHJ1ZX0pXG4gICAgdGFibGUuc3RyaW5nKFwic2NvcGVfZGlnZXN0XCIsIHtpbmRleDogdHJ1ZSwgbnVsbDogZmFsc2V9KVxuICAgIHRhYmxlLnN0cmluZyhcInJlc291cmNlX3R5cGVcIiwge2luZGV4OiB0cnVlLCBudWxsOiBmYWxzZX0pXG4gICAgdGFibGUudGV4dChcImNvbmRpdGlvbnNfanNvblwiLCB7bnVsbDogZmFsc2V9KVxuICAgIHRhYmxlLnRleHQoXCJjdXJzb3JfanNvblwiLCB7bnVsbDogdHJ1ZX0pXG4gICAgdGFibGUuc3RyaW5nKFwic3RhdGVcIiwge2luZGV4OiB0cnVlLCBudWxsOiBmYWxzZX0pXG4gICAgdGFibGUuZGF0ZXRpbWUoXCJjcmVhdGVkX2F0XCIsIHtudWxsOiBmYWxzZX0pXG4gICAgdGFibGUuZGF0ZXRpbWUoXCJ1cGRhdGVkX2F0XCIsIHtudWxsOiBmYWxzZX0pXG5cbiAgICBhd2FpdCBkYi5jcmVhdGVUYWJsZSh0YWJsZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBhIHNjb3BlIHJvdyBieSBpdHMgZGlnZXN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RhdGFiYXNlL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBkYiAtIERhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaWdlc3QgLSBGaXhlZC1zaXplIHNjb3BlIGRpZ2VzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8U3luY1Njb3BlUm93IHwgbnVsbD59IFNjb3BlIHJvdyBvciBudWxsLlxuICAgKi9cbiAgYXN5bmMgX3Jvd0J5U2NvcGVEaWdlc3QoZGIsIGRpZ2VzdCkge1xuICAgIGNvbnN0IHJvd3MgPSAvKiogQHR5cGUge0FycmF5PFJlY29yZDxzdHJpbmcsID8+Pn0gKi8gKGF3YWl0IGRiXG4gICAgICAubmV3UXVlcnkoKVxuICAgICAgLmZyb20oVEFCTEVfTkFNRSlcbiAgICAgIC53aGVyZSh7c2NvcGVfZGlnZXN0OiBkaWdlc3R9KVxuICAgICAgLmxpbWl0KDEpXG4gICAgICAucmVzdWx0cygpKVxuXG4gICAgcmV0dXJuIHJvd3NbMF0gPyB0aGlzLl9ub3JtYWxpemVTY29wZVJvdyhyb3dzWzBdKSA6IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgcmF3IHNjb3BlIHRhYmxlIHJvdy5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gcm93IC0gUmF3IHRhYmxlIHJvdy5cbiAgICogQHJldHVybnMge1N5bmNTY29wZVJvd30gTm9ybWFsaXplZCBzY29wZSByb3cuXG4gICAqL1xuICBfbm9ybWFsaXplU2NvcGVSb3cocm93KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmRpdGlvbnM6IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovIChKU09OLnBhcnNlKFN0cmluZyhyb3cuY29uZGl0aW9uc19qc29uKSkpLFxuICAgICAgY3Vyc29yUGF5bG9hZDogcm93LmN1cnNvcl9qc29uID09PSBudWxsIHx8IHJvdy5jdXJzb3JfanNvbiA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IFN0cmluZyhyb3cuY3Vyc29yX2pzb24pLFxuICAgICAgaWQ6IFN0cmluZyhyb3cuaWQpLFxuICAgICAgcmVzb3VyY2VUeXBlOiBTdHJpbmcocm93LnJlc291cmNlX3R5cGUpID09PSBcIlwiID8gbnVsbCA6IFN0cmluZyhyb3cucmVzb3VyY2VfdHlwZSksXG4gICAgICBzY29wZURpZ2VzdDogU3RyaW5nKHJvdy5zY29wZV9kaWdlc3QpLFxuICAgICAgc3RhdGU6IFN0cmluZyhyb3cuc3RhdGUpXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -4,16 +4,6 @@
4
4
  * @returns {RegExp[]} - Normalized patterns.
5
5
  */
6
6
  export function normalizeExamplePatterns(patterns: string[]): RegExp[];
7
- /**
8
- * ParseFiltersResult type.
9
- * @typedef {object} ParseFiltersResult
10
- * @property {string[]} includeTags - Tags to include.
11
- * @property {string[]} excludeTags - Tags to exclude.
12
- * @property {string[]} examplePatterns - Example name patterns.
13
- * @property {string[]} filteredProcessArgs - Remaining process args with filter flags removed.
14
- * @property {number | undefined} groups - Total number of groups for test splitting.
15
- * @property {number | undefined} groupNumber - Which group to run (1-indexed).
16
- */
17
7
  /**
18
8
  * Runs the parseFilters helper.
19
9
  * @param {string[]} processArgs - Process args.
@@ -1 +1 @@
1
- {"version":3,"file":"test-filter-parser.d.ts","sourceRoot":"","sources":["../../../src/testing/test-filter-parser.js"],"names":[],"mappings":"AA+BA;;;;GAIG;AACH,mDAHW,MAAM,EAAE,GACN,MAAM,EAAE,CAgBpB;AAED;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,0CAHW,MAAM,EAAE,GACN,kBAAkB,CAmI9B;;;;;;;;iBA9Ia,MAAM,EAAE;;;;iBACR,MAAM,EAAE;;;;qBACR,MAAM,EAAE;;;;yBACR,MAAM,EAAE;;;;YACR,MAAM,GAAG,SAAS;;;;iBAClB,MAAM,GAAG,SAAS"}
1
+ {"version":3,"file":"test-filter-parser.d.ts","sourceRoot":"","sources":["../../../src/testing/test-filter-parser.js"],"names":[],"mappings":"AAyCA;;;;GAIG;AACH,mDAHW,MAAM,EAAE,GACN,MAAM,EAAE,CAgBpB;AAED;;;;GAIG;AACH,0CAHW,MAAM,EAAE,GACN,kBAAkB,CAmI9B;;;;;;;;iBAjMa,MAAM,EAAE;;;;iBACR,MAAM,EAAE;;;;qBACR,MAAM,EAAE;;;;yBACR,MAAM,EAAE;;;;YACR,MAAM,GAAG,SAAS;;;;iBAClB,MAAM,GAAG,SAAS"}
@@ -1,3 +1,13 @@
1
+ /**
2
+ * ParseFiltersResult type.
3
+ * @typedef {object} ParseFiltersResult
4
+ * @property {string[]} includeTags - Tags to include.
5
+ * @property {string[]} excludeTags - Tags to exclude.
6
+ * @property {string[]} examplePatterns - Example name patterns.
7
+ * @property {string[]} filteredProcessArgs - Remaining process args with filter flags removed.
8
+ * @property {number | undefined} groups - Total number of groups for test splitting.
9
+ * @property {number | undefined} groupNumber - Which group to run (1-indexed).
10
+ */
1
11
  // @ts-check
2
12
  const INCLUDE_TAG_FLAGS = new Set(["--tag", "--include-tag", "-t"]);
3
13
  const EXCLUDE_TAG_FLAGS = new Set(["--exclude-tag", "--skip-tag", "-x"]);
@@ -43,16 +53,6 @@ export function normalizeExamplePatterns(patterns) {
43
53
  }
44
54
  return normalized;
45
55
  }
46
- /**
47
- * ParseFiltersResult type.
48
- * @typedef {object} ParseFiltersResult
49
- * @property {string[]} includeTags - Tags to include.
50
- * @property {string[]} excludeTags - Tags to exclude.
51
- * @property {string[]} examplePatterns - Example name patterns.
52
- * @property {string[]} filteredProcessArgs - Remaining process args with filter flags removed.
53
- * @property {number | undefined} groups - Total number of groups for test splitting.
54
- * @property {number | undefined} groupNumber - Which group to run (1-indexed).
55
- */
56
56
  /**
57
57
  * Runs the parseFilters helper.
58
58
  * @param {string[]} processArgs - Process args.
@@ -164,4 +164,4 @@ export function parseFilters(processArgs) {
164
164
  groupNumber
165
165
  };
166
166
  }
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1maWx0ZXItcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rlc3RpbmcvdGVzdC1maWx0ZXItcGFyc2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQ25FLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDeEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDNUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0FBQzFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7QUFFdEQ7Ozs7R0FJRztBQUNILFNBQVMsU0FBUyxDQUFDLEtBQUs7SUFDdEIsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEVBQUUsQ0FBQTtJQUVyQixPQUFPLEtBQUs7U0FDVCxLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDeEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ3BCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxZQUFZLENBQUMsS0FBSztJQUN6QixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDckQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsUUFB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QztnQkFDRCxTQUFRO1lBQ1YsQ0FBQztZQUVELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtnQkFDL0QsU0FBUTtZQUNWLENBQUM7UUFDSCxDQUFDO1FBRUQsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxPQUFPO1FBQ0wsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixNQUFNO1FBQ04sV0FBVztLQUNaLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmNvbnN0IElOQ0xVREVfVEFHX0ZMQUdTID0gbmV3IFNldChbXCItLXRhZ1wiLCBcIi0taW5jbHVkZS10YWdcIiwgXCItdFwiXSlcbmNvbnN0IEVYQ0xVREVfVEFHX0ZMQUdTID0gbmV3IFNldChbXCItLWV4Y2x1ZGUtdGFnXCIsIFwiLS1za2lwLXRhZ1wiLCBcIi14XCJdKVxuY29uc3QgRVhBTVBMRV9GTEFHUyA9IG5ldyBTZXQoW1wiLS1leGFtcGxlXCIsIFwiLS1uYW1lXCIsIFwiLWVcIl0pXG5jb25zdCBHUk9VUFNfRkxBR1MgPSBuZXcgU2V0KFtcIi0tZ3JvdXBzXCJdKVxuY29uc3QgR1JPVVBfTlVNQkVSX0ZMQUdTID0gbmV3IFNldChbXCItLWdyb3VwLW51bWJlclwiXSlcblxuLyoqXG4gKiBSdW5zIHNwbGl0IHRhZ3MuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gdmFsdWUgLSBUYWcgYXJndW1lbnQgdmFsdWUuXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IC0gVGFncyBsaXN0LlxuICovXG5mdW5jdGlvbiBzcGxpdFRhZ3ModmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIFtdXG5cbiAgcmV0dXJuIHZhbHVlXG4gICAgLnNwbGl0KFwiLFwiKVxuICAgIC5tYXAoKHRhZykgPT4gdGFnLnRyaW0oKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG59XG5cbi8qKlxuICogUnVucyBlc2NhcGUgcmVnIGV4cC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSAtIFZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ30gLSBFc2NhcGVkIHZhbHVlIGZvciByZWdleC5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIilcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBub3JtYWxpemVFeGFtcGxlUGF0dGVybnMgaGVscGVyLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0dGVybnMgLSBQYXR0ZXJucy5cbiAqIEByZXR1cm5zIHtSZWdFeHBbXX0gLSBOb3JtYWxpemVkIHBhdHRlcm5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRXhhbXBsZVBhdHRlcm5zKHBhdHRlcm5zKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBbXVxuXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgIGNvbnN0IHJlZ2V4TWF0Y2ggPSBwYXR0ZXJuLm1hdGNoKC9eXFwvKC4rKVxcLyhbZ2ltc3V5XSopJC8pXG5cbiAgICBpZiAocmVnZXhNYXRjaCkge1xuICAgICAgbm9ybWFsaXplZC5wdXNoKG5ldyBSZWdFeHAocmVnZXhNYXRjaFsxXSwgcmVnZXhNYXRjaFsyXSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vcm1hbGl6ZWQucHVzaChuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4cChwYXR0ZXJuKSkpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuLyoqXG4gKiBQYXJzZUZpbHRlcnNSZXN1bHQgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBhcnNlRmlsdGVyc1Jlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gaW5jbHVkZVRhZ3MgLSBUYWdzIHRvIGluY2x1ZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBleGNsdWRlVGFncyAtIFRhZ3MgdG8gZXhjbHVkZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGV4YW1wbGVQYXR0ZXJucyAtIEV4YW1wbGUgbmFtZSBwYXR0ZXJucy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGZpbHRlcmVkUHJvY2Vzc0FyZ3MgLSBSZW1haW5pbmcgcHJvY2VzcyBhcmdzIHdpdGggZmlsdGVyIGZsYWdzIHJlbW92ZWQuXG4gKiBAcHJvcGVydHkge251bWJlciB8IHVuZGVmaW5lZH0gZ3JvdXBzIC0gVG90YWwgbnVtYmVyIG9mIGdyb3VwcyBmb3IgdGVzdCBzcGxpdHRpbmcuXG4gKiBAcHJvcGVydHkge251bWJlciB8IHVuZGVmaW5lZH0gZ3JvdXBOdW1iZXIgLSBXaGljaCBncm91cCB0byBydW4gKDEtaW5kZXhlZCkuXG4gKi9cblxuLyoqXG4gKiBSdW5zIHRoZSBwYXJzZUZpbHRlcnMgaGVscGVyLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvY2Vzc0FyZ3MgLSBQcm9jZXNzIGFyZ3MuXG4gKiBAcmV0dXJucyB7UGFyc2VGaWx0ZXJzUmVzdWx0fSAtIFBhcnNlZCB0YWdzLCBncm91cCBvcHRpb25zLCBhbmQgcHJvY2VzcyBhcmdzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWx0ZXJzKHByb2Nlc3NBcmdzKSB7XG4gIGNvbnN0IGluY2x1ZGVUYWdzID0gW11cbiAgY29uc3QgZXhjbHVkZVRhZ3MgPSBbXVxuICBjb25zdCBmaWx0ZXJlZFByb2Nlc3NBcmdzID0gcHJvY2Vzc0FyZ3MubGVuZ3RoID4gMCA/IFtwcm9jZXNzQXJnc1swXV0gOiBbXVxuICBjb25zdCBleGFtcGxlUGF0dGVybnMgPSBbXVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGdyb3Vwcy5cbiAgICogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGdyb3Vwc1xuICAvKipcbiAgICogRGVmaW5lcyBncm91cE51bWJlci5cbiAgICogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IGdyb3VwTnVtYmVyXG5cbiAgbGV0IGluUmVzdEFyZ3MgPSBmYWxzZVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgcHJvY2Vzc0FyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBwcm9jZXNzQXJnc1tpXVxuXG4gICAgaWYgKGFyZyA9PT0gXCItLVwiKSB7XG4gICAgICBpblJlc3RBcmdzID0gdHJ1ZVxuICAgICAgZmlsdGVyZWRQcm9jZXNzQXJncy5wdXNoKGFyZylcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKCFpblJlc3RBcmdzKSB7XG4gICAgICBpZiAoSU5DTFVERV9UQUdfRkxBR1MuaGFzKGFyZykpIHtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gcHJvY2Vzc0FyZ3NbaSArIDFdXG5cbiAgICAgICAgaWYgKG5leHRWYWx1ZSAmJiAhbmV4dFZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgaW5jbHVkZVRhZ3MucHVzaCguLi5zcGxpdFRhZ3MobmV4dFZhbHVlKSlcbiAgICAgICAgICBpKytcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoRVhDTFVERV9UQUdfRkxBR1MuaGFzKGFyZykpIHtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gcHJvY2Vzc0FyZ3NbaSArIDFdXG5cbiAgICAgICAgaWYgKG5leHRWYWx1ZSAmJiAhbmV4dFZhbHVlLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgICAgZXhjbHVkZVRhZ3MucHVzaCguLi5zcGxpdFRhZ3MobmV4dFZhbHVlKSlcbiAgICAgICAgICBpKytcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItLXRhZz1cIikpIHtcbiAgICAgICAgaW5jbHVkZVRhZ3MucHVzaCguLi5zcGxpdFRhZ3MoYXJnLnNsaWNlKFwiLS10YWc9XCIubGVuZ3RoKSkpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0taW5jbHVkZS10YWc9XCIpKSB7XG4gICAgICAgIGluY2x1ZGVUYWdzLnB1c2goLi4uc3BsaXRUYWdzKGFyZy5zbGljZShcIi0taW5jbHVkZS10YWc9XCIubGVuZ3RoKSkpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tZXhjbHVkZS10YWc9XCIpKSB7XG4gICAgICAgIGV4Y2x1ZGVUYWdzLnB1c2goLi4uc3BsaXRUYWdzKGFyZy5zbGljZShcIi0tZXhjbHVkZS10YWc9XCIubGVuZ3RoKSkpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tc2tpcC10YWc9XCIpKSB7XG4gICAgICAgIGV4Y2x1ZGVUYWdzLnB1c2goLi4uc3BsaXRUYWdzKGFyZy5zbGljZShcIi0tc2tpcC10YWc9XCIubGVuZ3RoKSkpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChFWEFNUExFX0ZMQUdTLmhhcyhhcmcpKSB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IHByb2Nlc3NBcmdzW2kgKyAxXVxuXG4gICAgICAgIGlmIChuZXh0VmFsdWUgJiYgIW5leHRWYWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgIGV4YW1wbGVQYXR0ZXJucy5wdXNoKG5leHRWYWx1ZSlcbiAgICAgICAgICBpKytcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItLWV4YW1wbGU9XCIpKSB7XG4gICAgICAgIGV4YW1wbGVQYXR0ZXJucy5wdXNoKGFyZy5zbGljZShcIi0tZXhhbXBsZT1cIi5sZW5ndGgpKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItLW5hbWU9XCIpKSB7XG4gICAgICAgIGV4YW1wbGVQYXR0ZXJucy5wdXNoKGFyZy5zbGljZShcIi0tbmFtZT1cIi5sZW5ndGgpKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoR1JPVVBTX0ZMQUdTLmhhcyhhcmcpKSB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IHByb2Nlc3NBcmdzW2kgKyAxXVxuXG4gICAgICAgIGlmIChuZXh0VmFsdWUgJiYgIW5leHRWYWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgIGdyb3VwcyA9IHBhcnNlSW50KG5leHRWYWx1ZSwgMTApXG4gICAgICAgICAgaSsrXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGFyZy5zdGFydHNXaXRoKFwiLS1ncm91cHM9XCIpKSB7XG4gICAgICAgIGdyb3VwcyA9IHBhcnNlSW50KGFyZy5zbGljZShcIi0tZ3JvdXBzPVwiLmxlbmd0aCksIDEwKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoR1JPVVBfTlVNQkVSX0ZMQUdTLmhhcyhhcmcpKSB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IHByb2Nlc3NBcmdzW2kgKyAxXVxuXG4gICAgICAgIGlmIChuZXh0VmFsdWUgJiYgIW5leHRWYWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgIGdyb3VwTnVtYmVyID0gcGFyc2VJbnQobmV4dFZhbHVlLCAxMClcbiAgICAgICAgICBpKytcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItLWdyb3VwLW51bWJlcj1cIikpIHtcbiAgICAgICAgZ3JvdXBOdW1iZXIgPSBwYXJzZUludChhcmcuc2xpY2UoXCItLWdyb3VwLW51bWJlcj1cIi5sZW5ndGgpLCAxMClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWx0ZXJlZFByb2Nlc3NBcmdzLnB1c2goYXJnKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpbmNsdWRlVGFnczogQXJyYXkuZnJvbShuZXcgU2V0KGluY2x1ZGVUYWdzKSksXG4gICAgZXhjbHVkZVRhZ3M6IEFycmF5LmZyb20obmV3IFNldChleGNsdWRlVGFncykpLFxuICAgIGV4YW1wbGVQYXR0ZXJucyxcbiAgICBmaWx0ZXJlZFByb2Nlc3NBcmdzLFxuICAgIGdyb3VwcyxcbiAgICBncm91cE51bWJlclxuICB9XG59XG4iXX0=
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1maWx0ZXItcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rlc3RpbmcvdGVzdC1maWx0ZXItcGFyc2VyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUNILFlBQVk7QUFFWixNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQ25FLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDeEUsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDNUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0FBQzFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUE7QUFFdEQ7Ozs7R0FJRztBQUNILFNBQVMsU0FBUyxDQUFDLEtBQUs7SUFDdEIsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEVBQUUsQ0FBQTtJQUVyQixPQUFPLEtBQUs7U0FDVCxLQUFLLENBQUMsR0FBRyxDQUFDO1NBQ1YsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDeEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0FBQ3BCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxZQUFZLENBQUMsS0FBSztJQUN6QixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDckQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVB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QztnQkFDRCxTQUFRO1lBQ1YsQ0FBQztZQUVELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtnQkFDL0QsU0FBUTtZQUNWLENBQUM7UUFDSCxDQUFDO1FBRUQsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxPQUFPO1FBQ0wsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixNQUFNO1FBQ04sV0FBVztLQUNaLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXJzZUZpbHRlcnNSZXN1bHQgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IFBhcnNlRmlsdGVyc1Jlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gaW5jbHVkZVRhZ3MgLSBUYWdzIHRvIGluY2x1ZGUuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBleGNsdWRlVGFncyAtIFRhZ3MgdG8gZXhjbHVkZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGV4YW1wbGVQYXR0ZXJucyAtIEV4YW1wbGUgbmFtZSBwYXR0ZXJucy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGZpbHRlcmVkUHJvY2Vzc0FyZ3MgLSBSZW1haW5pbmcgcHJvY2VzcyBhcmdzIHdpdGggZmlsdGVyIGZsYWdzIHJlbW92ZWQuXG4gKiBAcHJvcGVydHkge251bWJlciB8IHVuZGVmaW5lZH0gZ3JvdXBzIC0gVG90YWwgbnVtYmVyIG9mIGdyb3VwcyBmb3IgdGVzdCBzcGxpdHRpbmcuXG4gKiBAcHJvcGVydHkge251bWJlciB8IHVuZGVmaW5lZH0gZ3JvdXBOdW1iZXIgLSBXaGljaCBncm91cCB0byBydW4gKDEtaW5kZXhlZCkuXG4gKi9cbi8vIEB0cy1jaGVja1xuXG5jb25zdCBJTkNMVURFX1RBR19GTEFHUyA9IG5ldyBTZXQoW1wiLS10YWdcIiwgXCItLWluY2x1ZGUtdGFnXCIsIFwiLXRcIl0pXG5jb25zdCBFWENMVURFX1RBR19GTEFHUyA9IG5ldyBTZXQoW1wiLS1leGNsdWRlLXRhZ1wiLCBcIi0tc2tpcC10YWdcIiwgXCIteFwiXSlcbmNvbnN0IEVYQU1QTEVfRkxBR1MgPSBuZXcgU2V0KFtcIi0tZXhhbXBsZVwiLCBcIi0tbmFtZVwiLCBcIi1lXCJdKVxuY29uc3QgR1JPVVBTX0ZMQUdTID0gbmV3IFNldChbXCItLWdyb3Vwc1wiXSlcbmNvbnN0IEdST1VQX05VTUJFUl9GTEFHUyA9IG5ldyBTZXQoW1wiLS1ncm91cC1udW1iZXJcIl0pXG5cbi8qKlxuICogUnVucyBzcGxpdCB0YWdzLlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHZhbHVlIC0gVGFnIGFyZ3VtZW50IHZhbHVlLlxuICogQHJldHVybnMge3N0cmluZ1tdfSAtIFRhZ3MgbGlzdC5cbiAqL1xuZnVuY3Rpb24gc3BsaXRUYWdzKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBbXVxuXG4gIHJldHVybiB2YWx1ZVxuICAgIC5zcGxpdChcIixcIilcbiAgICAubWFwKCh0YWcpID0+IHRhZy50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxufVxuXG4vKipcbiAqIFJ1bnMgZXNjYXBlIHJlZyBleHAuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBWYWx1ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRXNjYXBlZCB2YWx1ZSBmb3IgcmVnZXguXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpXG59XG5cbi8qKlxuICogUnVucyB0aGUgbm9ybWFsaXplRXhhbXBsZVBhdHRlcm5zIGhlbHBlci5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdHRlcm5zIC0gUGF0dGVybnMuXG4gKiBAcmV0dXJucyB7UmVnRXhwW119IC0gTm9ybWFsaXplZCBwYXR0ZXJucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUV4YW1wbGVQYXR0ZXJucyhwYXR0ZXJucykge1xuICBjb25zdCBub3JtYWxpemVkID0gW11cblxuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICBjb25zdCByZWdleE1hdGNoID0gcGF0dGVybi5tYXRjaCgvXlxcLyguKylcXC8oW2dpbXN1eV0qKSQvKVxuXG4gICAgaWYgKHJlZ2V4TWF0Y2gpIHtcbiAgICAgIG5vcm1hbGl6ZWQucHVzaChuZXcgUmVnRXhwKHJlZ2V4TWF0Y2hbMV0sIHJlZ2V4TWF0Y2hbMl0pKVxuICAgIH0gZWxzZSB7XG4gICAgICBub3JtYWxpemVkLnB1c2gobmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAocGF0dGVybikpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbi8qKlxuICogUnVucyB0aGUgcGFyc2VGaWx0ZXJzIGhlbHBlci5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb2Nlc3NBcmdzIC0gUHJvY2VzcyBhcmdzLlxuICogQHJldHVybnMge1BhcnNlRmlsdGVyc1Jlc3VsdH0gLSBQYXJzZWQgdGFncywgZ3JvdXAgb3B0aW9ucywgYW5kIHByb2Nlc3MgYXJncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmlsdGVycyhwcm9jZXNzQXJncykge1xuICBjb25zdCBpbmNsdWRlVGFncyA9IFtdXG4gIGNvbnN0IGV4Y2x1ZGVUYWdzID0gW11cbiAgY29uc3QgZmlsdGVyZWRQcm9jZXNzQXJncyA9IHByb2Nlc3NBcmdzLmxlbmd0aCA+IDAgPyBbcHJvY2Vzc0FyZ3NbMF1dIDogW11cbiAgY29uc3QgZXhhbXBsZVBhdHRlcm5zID0gW11cblxuICAvKipcbiAgICogRGVmaW5lcyBncm91cHMuXG4gICAqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGxldCBncm91cHNcbiAgLyoqXG4gICAqIERlZmluZXMgZ3JvdXBOdW1iZXIuXG4gICAqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGxldCBncm91cE51bWJlclxuXG4gIGxldCBpblJlc3RBcmdzID0gZmFsc2VcblxuICBmb3IgKGxldCBpID0gMTsgaSA8IHByb2Nlc3NBcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJnID0gcHJvY2Vzc0FyZ3NbaV1cblxuICAgIGlmIChhcmcgPT09IFwiLS1cIikge1xuICAgICAgaW5SZXN0QXJncyA9IHRydWVcbiAgICAgIGZpbHRlcmVkUHJvY2Vzc0FyZ3MucHVzaChhcmcpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmICghaW5SZXN0QXJncykge1xuICAgICAgaWYgKElOQ0xVREVfVEFHX0ZMQUdTLmhhcyhhcmcpKSB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IHByb2Nlc3NBcmdzW2kgKyAxXVxuXG4gICAgICAgIGlmIChuZXh0VmFsdWUgJiYgIW5leHRWYWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgIGluY2x1ZGVUYWdzLnB1c2goLi4uc3BsaXRUYWdzKG5leHRWYWx1ZSkpXG4gICAgICAgICAgaSsrXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKEVYQ0xVREVfVEFHX0ZMQUdTLmhhcyhhcmcpKSB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IHByb2Nlc3NBcmdzW2kgKyAxXVxuXG4gICAgICAgIGlmIChuZXh0VmFsdWUgJiYgIW5leHRWYWx1ZS5zdGFydHNXaXRoKFwiLVwiKSkge1xuICAgICAgICAgIGV4Y2x1ZGVUYWdzLnB1c2goLi4uc3BsaXRUYWdzKG5leHRWYWx1ZSkpXG4gICAgICAgICAgaSsrXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGFyZy5zdGFydHNXaXRoKFwiLS10YWc9XCIpKSB7XG4gICAgICAgIGluY2x1ZGVUYWdzLnB1c2goLi4uc3BsaXRUYWdzKGFyZy5zbGljZShcIi0tdGFnPVwiLmxlbmd0aCkpKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItLWluY2x1ZGUtdGFnPVwiKSkge1xuICAgICAgICBpbmNsdWRlVGFncy5wdXNoKC4uLnNwbGl0VGFncyhhcmcuc2xpY2UoXCItLWluY2x1ZGUtdGFnPVwiLmxlbmd0aCkpKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItLWV4Y2x1ZGUtdGFnPVwiKSkge1xuICAgICAgICBleGNsdWRlVGFncy5wdXNoKC4uLnNwbGl0VGFncyhhcmcuc2xpY2UoXCItLWV4Y2x1ZGUtdGFnPVwiLmxlbmd0aCkpKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYXJnLnN0YXJ0c1dpdGgoXCItLXNraXAtdGFnPVwiKSkge1xuICAgICAgICBleGNsdWRlVGFncy5wdXNoKC4uLnNwbGl0VGFncyhhcmcuc2xpY2UoXCItLXNraXAtdGFnPVwiLmxlbmd0aCkpKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoRVhBTVBMRV9GTEFHUy5oYXMoYXJnKSkge1xuICAgICAgICBjb25zdCBuZXh0VmFsdWUgPSBwcm9jZXNzQXJnc1tpICsgMV1cblxuICAgICAgICBpZiAobmV4dFZhbHVlICYmICFuZXh0VmFsdWUuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICBleGFtcGxlUGF0dGVybnMucHVzaChuZXh0VmFsdWUpXG4gICAgICAgICAgaSsrXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGFyZy5zdGFydHNXaXRoKFwiLS1leGFtcGxlPVwiKSkge1xuICAgICAgICBleGFtcGxlUGF0dGVybnMucHVzaChhcmcuc2xpY2UoXCItLWV4YW1wbGU9XCIubGVuZ3RoKSlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGFyZy5zdGFydHNXaXRoKFwiLS1uYW1lPVwiKSkge1xuICAgICAgICBleGFtcGxlUGF0dGVybnMucHVzaChhcmcuc2xpY2UoXCItLW5hbWU9XCIubGVuZ3RoKSlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKEdST1VQU19GTEFHUy5oYXMoYXJnKSkge1xuICAgICAgICBjb25zdCBuZXh0VmFsdWUgPSBwcm9jZXNzQXJnc1tpICsgMV1cblxuICAgICAgICBpZiAobmV4dFZhbHVlICYmICFuZXh0VmFsdWUuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICBncm91cHMgPSBwYXJzZUludChuZXh0VmFsdWUsIDEwKVxuICAgICAgICAgIGkrK1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChhcmcuc3RhcnRzV2l0aChcIi0tZ3JvdXBzPVwiKSkge1xuICAgICAgICBncm91cHMgPSBwYXJzZUludChhcmcuc2xpY2UoXCItLWdyb3Vwcz1cIi5sZW5ndGgpLCAxMClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKEdST1VQX05VTUJFUl9GTEFHUy5oYXMoYXJnKSkge1xuICAgICAgICBjb25zdCBuZXh0VmFsdWUgPSBwcm9jZXNzQXJnc1tpICsgMV1cblxuICAgICAgICBpZiAobmV4dFZhbHVlICYmICFuZXh0VmFsdWUuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICBncm91cE51bWJlciA9IHBhcnNlSW50KG5leHRWYWx1ZSwgMTApXG4gICAgICAgICAgaSsrXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKGFyZy5zdGFydHNXaXRoKFwiLS1ncm91cC1udW1iZXI9XCIpKSB7XG4gICAgICAgIGdyb3VwTnVtYmVyID0gcGFyc2VJbnQoYXJnLnNsaWNlKFwiLS1ncm91cC1udW1iZXI9XCIubGVuZ3RoKSwgMTApXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmlsdGVyZWRQcm9jZXNzQXJncy5wdXNoKGFyZylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5jbHVkZVRhZ3M6IEFycmF5LmZyb20obmV3IFNldChpbmNsdWRlVGFncykpLFxuICAgIGV4Y2x1ZGVUYWdzOiBBcnJheS5mcm9tKG5ldyBTZXQoZXhjbHVkZVRhZ3MpKSxcbiAgICBleGFtcGxlUGF0dGVybnMsXG4gICAgZmlsdGVyZWRQcm9jZXNzQXJncyxcbiAgICBncm91cHMsXG4gICAgZ3JvdXBOdW1iZXJcbiAgfVxufVxuIl19
@@ -1,75 +1,3 @@
1
- /**
2
- * TestArgs type.
3
- * @typedef {object} TestArgs
4
- * @property {Application} [application] - Application instance for integration tests.
5
- * @property {RequestClient} [client] - HTTP client for request tests.
6
- * @property {object} [databaseCleaning] - Database cleanup options for tests.
7
- * @property {boolean} [databaseCleaning.transaction] - Use transactions to rollback between tests.
8
- * @property {boolean} [databaseCleaning.truncate] - Truncate tables between tests.
9
- * @property {boolean} [databaseCleaning.truncateBefore] - Truncate tables before each test, in addition to the default cleanup.
10
- * @property {boolean} [focus] - Whether this test is focused.
11
- * @property {() => (void|Promise<void>)} [function] - Test callback function.
12
- * @property {number} [retry] - Number of retries when a test fails.
13
- * @property {string[] | string} [tags] - Tags for filtering.
14
- * @property {number} [timeoutSeconds] - Timeout in seconds for the test.
15
- * @property {string} [type] - Test type identifier.
16
- */
17
- /**
18
- * TestData type.
19
- * @typedef {object} TestData
20
- * @property {TestArgs} args - Arguments passed to the test.
21
- * @property {string} [filePath] - Source file path.
22
- * @property {number} [line] - Source line number.
23
- * @property {function(TestArgs) : (void|Promise<void>)} function - Test callback to execute.
24
- */
25
- /**
26
- * FailedTestDetail type.
27
- * @typedef {object} FailedTestDetail
28
- * @property {string} fullDescription - Full test description.
29
- * @property {string} [filePath] - Source file path.
30
- * @property {number} [line] - Source line number.
31
- * @property {?} error - Failure error.
32
- * @property {string} [consoleOutput] - Captured console output while test ran.
33
- * @property {string} [consoleLogPath] - Saved console log path.
34
- */
35
- /**
36
- * ActiveAfterAllScopeEntry type.
37
- * @typedef {object} ActiveAfterAllScopeEntry
38
- * @property {TestsArgument} tests - Scope test tree.
39
- * @property {boolean} afterAllsRun - Whether cleanup hooks have run.
40
- */
41
- /**
42
- * Defines this typedef.
43
- * @typedef {function({configuration: import("../configuration.js").default, testArgs: TestArgs, testData: TestData}) : (void|Promise<void>)} AfterBeforeEachCallbackType
44
- */
45
- /**
46
- * AfterBeforeEachCallbackObjectType type.
47
- * @typedef {object} AfterBeforeEachCallbackObjectType
48
- * @property {AfterBeforeEachCallbackType} callback - Hook callback to execute.
49
- */
50
- /**
51
- * Defines this typedef.
52
- * @typedef {function({configuration: import("../configuration.js").default}) : (void|Promise<void>)} BeforeAfterAllCallbackType
53
- */
54
- /**
55
- * BeforeAfterAllCallbackObjectType type.
56
- * @typedef {object} BeforeAfterAllCallbackObjectType
57
- * @property {BeforeAfterAllCallbackType} callback - Hook callback to execute.
58
- */
59
- /**
60
- * TestsArgument type.
61
- * @typedef {object} TestsArgument
62
- * @property {Record<string, TestData>} args - Arguments keyed by test description.
63
- * @property {boolean} [anyTestsFocussed] - Whether any tests in the tree are focused.
64
- * @property {AfterBeforeEachCallbackObjectType[]} afterEaches - After-each hooks for this scope.
65
- * @property {BeforeAfterAllCallbackObjectType[]} afterAlls - After-all hooks for this scope.
66
- * @property {BeforeAfterAllCallbackObjectType[]} beforeAlls - Before-all hooks for this scope.
67
- * @property {AfterBeforeEachCallbackObjectType[]} beforeEaches - Before-each hooks for this scope.
68
- * @property {string} [filePath] - Source file path.
69
- * @property {number} [line] - Source line number.
70
- * @property {Record<string, TestData>} tests - A unique identifier for the node.
71
- * @property {Record<string, TestsArgument>} subs - Optional child nodes. Each item is another `Node`, allowing recursion.
72
- */
73
1
  export default class TestRunner {
74
2
  /**
75
3
  * Runs constructor.
@@ -239,21 +167,27 @@ export default class TestRunner {
239
167
  application(): Promise<Application>;
240
168
  _application: Application | undefined;
241
169
  /**
242
- * Pins each per-test connection as its pool's in-process test shared connection so
243
- * HTTP request handlers dispatched during the test (which run in the main thread but
244
- * in a fresh async context without the connection pin) resolve to the SAME connection
245
- * and therefore the same open transaction — as the test body. Pools that predate the
246
- * shared-connection hook are skipped. Pair with {@link clearTestSharedConnections} in a
247
- * finally.
248
- * @returns {void}
170
+ * Registers each non-tenant per-test connection as a dynamic candidate for in-process
171
+ * request sharing. The pool evaluates transaction state when each request is dispatched,
172
+ * so a transaction started or ended during a hook callback takes effect immediately.
173
+ * Inactive and tenant-only connections remain independently pooled. Pair with
174
+ * {@link clearTestSharedConnections} in a finally.
175
+ * @returns {{pool: import("../database/pool/base.js").default, registration: import("../database/pool/base.js").TestSharedConnectionRegistration}[]} - Lifecycle-owned registrations.
249
176
  */
250
- activateTestSharedConnections(): void;
177
+ activateTestSharedConnections(): {
178
+ pool: import("../database/pool/base.js").default;
179
+ registration: import("../database/pool/base.js").TestSharedConnectionRegistration;
180
+ }[];
251
181
  /**
252
182
  * Clears the in-process test shared connection on every configured pool. Idempotent and
253
183
  * safe to call when none was set.
184
+ * @param {{pool: import("../database/pool/base.js").default, registration: import("../database/pool/base.js").TestSharedConnectionRegistration}[]} [registrations] - Lifecycle-owned registrations to clear conditionally.
254
185
  * @returns {void}
255
186
  */
256
- clearTestSharedConnections(): void;
187
+ clearTestSharedConnections(registrations?: {
188
+ pool: import("../database/pool/base.js").default;
189
+ registration: import("../database/pool/base.js").TestSharedConnectionRegistration;
190
+ }[]): void;
257
191
  /**
258
192
  * Runs request client.
259
193
  * @returns {Promise<RequestClient>} - Resolves with the request client.
@@ -462,13 +396,9 @@ export default class TestRunner {
462
396
  }): () => string;
463
397
  }
464
398
  /**
465
- * Marks the error thrown by {@link runWithTimeout} so the caller can tell a
466
- * lifecycle timeout (the promise is still running detached) apart from an
467
- * ordinary test failure (the promise already settled).
399
+ * ConsoleMethodName type.
468
400
  */
469
- export type TestTimeoutError = Error & {
470
- velociousTestTimeout?: true;
471
- };
401
+ export type ConsoleMethodName = "log" | "info" | "warn" | "error" | "debug";
472
402
  /**
473
403
  * AttemptConsoleOutput type.
474
404
  */
@@ -482,10 +412,6 @@ export type AttemptConsoleOutput = {
482
412
  */
483
413
  output: string;
484
414
  };
485
- /**
486
- * ConsoleMethodName type.
487
- */
488
- export type ConsoleMethodName = "log" | "info" | "warn" | "error" | "debug";
489
415
  /**
490
416
  * TestArgs type.
491
417
  */
@@ -680,6 +606,14 @@ export type TestsArgument = {
680
606
  */
681
607
  subs: Record<string, TestsArgument>;
682
608
  };
609
+ /**
610
+ * Marks the error thrown by {@link runWithTimeout} so the caller can tell a
611
+ * lifecycle timeout (the promise is still running detached) apart from an
612
+ * ordinary test failure (the promise already settled).
613
+ */
614
+ export type TestTimeoutError = Error & {
615
+ velociousTestTimeout?: true;
616
+ };
683
617
  import Application from "../../src/application.js";
684
618
  import RequestClient from "./request-client.js";
685
619
  //# sourceMappingURL=test-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../src/testing/test-runner.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../../src/testing/test-runner.js"],"names":[],"mappings":"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"}