velocious 1.0.563 → 1.0.565

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 (219) hide show
  1. package/README.md +3 -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/database/drivers/sqlite/web-persistence.js +2 -5
  9. package/build/database/pool/async-tracked-multi-connection.js +65 -15
  10. package/build/database/pool/base.js +23 -7
  11. package/build/database/query/index.js +21 -22
  12. package/build/database/query/model-class-query.js +5 -6
  13. package/build/database/record/acts-as-list.js +37 -10
  14. package/build/database/record/attachments/normalize-input.js +9 -10
  15. package/build/database/record/attachments/store.js +2 -2
  16. package/build/database/record/auditing.js +7 -8
  17. package/build/database/record/index.js +4 -5
  18. package/build/environment-handlers/node/cli/commands/generate/base-models.js +4 -12
  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 +4 -5
  28. package/build/http-server/client-delivery-queue.js +7 -8
  29. package/build/http-server/websocket-event-log-store.js +4 -6
  30. package/build/plugins/sqljs-wasm-route.js +3 -5
  31. package/build/src/background-jobs/cron-expression.d.ts +0 -12
  32. package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
  33. package/build/src/background-jobs/cron-expression.js +13 -13
  34. package/build/src/background-jobs/main.d.ts.map +1 -1
  35. package/build/src/background-jobs/main.js +7 -7
  36. package/build/src/background-jobs/runner-graceful-shutdown.d.ts +0 -6
  37. package/build/src/background-jobs/runner-graceful-shutdown.d.ts.map +1 -1
  38. package/build/src/background-jobs/runner-graceful-shutdown.js +3 -3
  39. package/build/src/background-jobs/scheduler.d.ts +0 -3
  40. package/build/src/background-jobs/scheduler.d.ts.map +1 -1
  41. package/build/src/background-jobs/scheduler.js +4 -4
  42. package/build/src/background-jobs/worker.d.ts +0 -8
  43. package/build/src/background-jobs/worker.d.ts.map +1 -1
  44. package/build/src/background-jobs/worker.js +9 -9
  45. package/build/src/beacon/client.d.ts +0 -4
  46. package/build/src/beacon/client.d.ts.map +1 -1
  47. package/build/src/beacon/client.js +4 -4
  48. package/build/src/database/drivers/sqlite/web-persistence.d.ts +0 -14
  49. package/build/src/database/drivers/sqlite/web-persistence.d.ts.map +1 -1
  50. package/build/src/database/drivers/sqlite/web-persistence.js +3 -3
  51. package/build/src/database/pool/async-tracked-multi-connection.d.ts +29 -1
  52. package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
  53. package/build/src/database/pool/async-tracked-multi-connection.js +57 -15
  54. package/build/src/database/pool/base.d.ts +53 -4
  55. package/build/src/database/pool/base.d.ts.map +1 -1
  56. package/build/src/database/pool/base.js +23 -6
  57. package/build/src/database/query/index.d.ts +18 -39
  58. package/build/src/database/query/index.d.ts.map +1 -1
  59. package/build/src/database/query/index.js +22 -22
  60. package/build/src/database/query/model-class-query.d.ts +0 -5
  61. package/build/src/database/query/model-class-query.d.ts.map +1 -1
  62. package/build/src/database/query/model-class-query.js +6 -6
  63. package/build/src/database/record/acts-as-list.d.ts.map +1 -1
  64. package/build/src/database/record/acts-as-list.js +34 -12
  65. package/build/src/database/record/attachments/normalize-input.d.ts +0 -9
  66. package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
  67. package/build/src/database/record/attachments/normalize-input.js +10 -10
  68. package/build/src/database/record/attachments/store.d.ts.map +1 -1
  69. package/build/src/database/record/attachments/store.js +2 -2
  70. package/build/src/database/record/auditing.d.ts +17 -24
  71. package/build/src/database/record/auditing.d.ts.map +1 -1
  72. package/build/src/database/record/auditing.js +8 -8
  73. package/build/src/database/record/index.d.ts +4 -4
  74. package/build/src/database/record/index.d.ts.map +1 -1
  75. package/build/src/database/record/index.js +5 -5
  76. package/build/src/environment-handlers/node/cli/commands/generate/base-models.d.ts.map +1 -1
  77. package/build/src/environment-handlers/node/cli/commands/generate/base-models.js +5 -13
  78. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +0 -39
  79. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
  80. package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +2 -2
  81. package/build/src/frontend-model-controller.d.ts +1 -1
  82. package/build/src/frontend-model-controller.d.ts.map +1 -1
  83. package/build/src/frontend-model-controller.js +50 -50
  84. package/build/src/frontend-models/base.d.ts.map +1 -1
  85. package/build/src/frontend-models/base.js +18 -18
  86. package/build/src/frontend-models/outgoing-event-buffer.d.ts.map +1 -1
  87. package/build/src/frontend-models/outgoing-event-buffer.js +3 -3
  88. package/build/src/frontend-models/query.d.ts +56 -37
  89. package/build/src/frontend-models/query.d.ts.map +1 -1
  90. package/build/src/frontend-models/query.js +39 -39
  91. package/build/src/frontend-models/resource-definition.d.ts +0 -7
  92. package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
  93. package/build/src/frontend-models/resource-definition.js +8 -8
  94. package/build/src/frontend-models/transport-serialization.d.ts +0 -10
  95. package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
  96. package/build/src/frontend-models/transport-serialization.js +11 -11
  97. package/build/src/frontend-models/websocket-channel.d.ts +0 -12
  98. package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
  99. package/build/src/frontend-models/websocket-channel.js +13 -13
  100. package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
  101. package/build/src/http-server/client/websocket-session.js +5 -5
  102. package/build/src/http-server/client-delivery-queue.d.ts +7 -7
  103. package/build/src/http-server/client-delivery-queue.d.ts.map +1 -1
  104. package/build/src/http-server/client-delivery-queue.js +8 -8
  105. package/build/src/http-server/websocket-event-log-store.d.ts +0 -14
  106. package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
  107. package/build/src/http-server/websocket-event-log-store.js +5 -5
  108. package/build/src/plugins/sqljs-wasm-route.d.ts.map +1 -1
  109. package/build/src/plugins/sqljs-wasm-route.js +4 -4
  110. package/build/src/sync/conflict-strategy.d.ts +0 -15
  111. package/build/src/sync/conflict-strategy.d.ts.map +1 -1
  112. package/build/src/sync/conflict-strategy.js +3 -3
  113. package/build/src/sync/device-identity.d.ts +0 -45
  114. package/build/src/sync/device-identity.d.ts.map +1 -1
  115. package/build/src/sync/device-identity.js +4 -4
  116. package/build/src/sync/local-mutation-log.d.ts +0 -41
  117. package/build/src/sync/local-mutation-log.d.ts.map +1 -1
  118. package/build/src/sync/local-mutation-log.js +9 -9
  119. package/build/src/sync/offline-grant.d.ts +0 -26
  120. package/build/src/sync/offline-grant.d.ts.map +1 -1
  121. package/build/src/sync/offline-grant.js +4 -4
  122. package/build/src/sync/peer-mutation-bundle.d.ts +0 -14
  123. package/build/src/sync/peer-mutation-bundle.d.ts.map +1 -1
  124. package/build/src/sync/peer-mutation-bundle.js +3 -3
  125. package/build/src/sync/server-change-feed.d.ts.map +1 -1
  126. package/build/src/sync/server-change-feed.js +33 -33
  127. package/build/src/sync/sync-api-client.d.ts +0 -9
  128. package/build/src/sync/sync-api-client.d.ts.map +1 -1
  129. package/build/src/sync/sync-api-client.js +2 -2
  130. package/build/src/sync/sync-envelope-replay-service.d.ts +38 -21
  131. package/build/src/sync/sync-envelope-replay-service.d.ts.map +1 -1
  132. package/build/src/sync/sync-envelope-replay-service.js +18 -18
  133. package/build/src/sync/sync-resource-base.d.ts +0 -7
  134. package/build/src/sync/sync-resource-base.d.ts.map +1 -1
  135. package/build/src/sync/sync-resource-base.js +2 -2
  136. package/build/src/sync/sync-scope-store.d.ts +0 -9
  137. package/build/src/sync/sync-scope-store.d.ts.map +1 -1
  138. package/build/src/sync/sync-scope-store.js +10 -10
  139. package/build/src/testing/test-filter-parser.d.ts +0 -10
  140. package/build/src/testing/test-filter-parser.d.ts.map +1 -1
  141. package/build/src/testing/test-filter-parser.js +11 -11
  142. package/build/src/testing/test-runner.d.ts +25 -91
  143. package/build/src/testing/test-runner.d.ts.map +1 -1
  144. package/build/src/testing/test-runner.js +113 -98
  145. package/build/src/testing/test.d.ts +8 -0
  146. package/build/src/testing/test.d.ts.map +1 -1
  147. package/build/src/testing/test.js +9 -9
  148. package/build/src/utils/backtrace-cleaner.d.ts.map +1 -1
  149. package/build/src/utils/backtrace-cleaner.js +9 -9
  150. package/build/src/utils/model-scope.d.ts +0 -8
  151. package/build/src/utils/model-scope.d.ts.map +1 -1
  152. package/build/src/utils/model-scope.js +3 -3
  153. package/build/src/utils/ransack.d.ts +52 -19
  154. package/build/src/utils/ransack.d.ts.map +1 -1
  155. package/build/src/utils/ransack.js +26 -26
  156. package/build/sync/conflict-strategy.js +3 -6
  157. package/build/sync/device-identity.js +4 -9
  158. package/build/sync/local-mutation-log.js +9 -14
  159. package/build/sync/offline-grant.js +4 -7
  160. package/build/sync/peer-mutation-bundle.js +2 -4
  161. package/build/sync/server-change-feed.js +32 -34
  162. package/build/sync/sync-api-client.js +1 -2
  163. package/build/sync/sync-envelope-replay-service.js +17 -19
  164. package/build/sync/sync-resource-base.js +1 -2
  165. package/build/sync/sync-scope-store.js +9 -10
  166. package/build/testing/test-filter-parser.js +10 -11
  167. package/build/testing/test-runner.js +116 -108
  168. package/build/testing/test.js +8 -9
  169. package/build/utils/backtrace-cleaner.js +8 -9
  170. package/build/utils/model-scope.js +3 -4
  171. package/build/utils/ransack.js +27 -34
  172. package/package.json +2 -1
  173. package/scripts/eslint-rules/typedefs-first.js +67 -0
  174. package/scripts/prewarm-chromedriver.js +26 -0
  175. package/src/background-jobs/cron-expression.js +12 -13
  176. package/src/background-jobs/main.js +6 -6
  177. package/src/background-jobs/runner-graceful-shutdown.js +2 -3
  178. package/src/background-jobs/scheduler.js +3 -3
  179. package/src/background-jobs/worker.js +8 -9
  180. package/src/beacon/client.js +3 -4
  181. package/src/database/drivers/sqlite/web-persistence.js +2 -5
  182. package/src/database/pool/async-tracked-multi-connection.js +65 -15
  183. package/src/database/pool/base.js +23 -7
  184. package/src/database/query/index.js +21 -22
  185. package/src/database/query/model-class-query.js +5 -6
  186. package/src/database/record/acts-as-list.js +37 -10
  187. package/src/database/record/attachments/normalize-input.js +9 -10
  188. package/src/database/record/attachments/store.js +2 -2
  189. package/src/database/record/auditing.js +7 -8
  190. package/src/database/record/index.js +4 -5
  191. package/src/environment-handlers/node/cli/commands/generate/base-models.js +4 -12
  192. package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +1 -2
  193. package/src/frontend-model-controller.js +49 -56
  194. package/src/frontend-models/base.js +17 -19
  195. package/src/frontend-models/outgoing-event-buffer.js +3 -4
  196. package/src/frontend-models/query.js +40 -44
  197. package/src/frontend-models/resource-definition.js +7 -8
  198. package/src/frontend-models/transport-serialization.js +10 -12
  199. package/src/frontend-models/websocket-channel.js +12 -13
  200. package/src/http-server/client/websocket-session.js +4 -5
  201. package/src/http-server/client-delivery-queue.js +7 -8
  202. package/src/http-server/websocket-event-log-store.js +4 -6
  203. package/src/plugins/sqljs-wasm-route.js +3 -5
  204. package/src/sync/conflict-strategy.js +3 -6
  205. package/src/sync/device-identity.js +4 -9
  206. package/src/sync/local-mutation-log.js +9 -14
  207. package/src/sync/offline-grant.js +4 -7
  208. package/src/sync/peer-mutation-bundle.js +2 -4
  209. package/src/sync/server-change-feed.js +32 -34
  210. package/src/sync/sync-api-client.js +1 -2
  211. package/src/sync/sync-envelope-replay-service.js +17 -19
  212. package/src/sync/sync-resource-base.js +1 -2
  213. package/src/sync/sync-scope-store.js +9 -10
  214. package/src/testing/test-filter-parser.js +10 -11
  215. package/src/testing/test-runner.js +116 -108
  216. package/src/testing/test.js +8 -9
  217. package/src/utils/backtrace-cleaner.js +8 -9
  218. package/src/utils/model-scope.js +3 -4
  219. package/src/utils/ransack.js +27 -34
@@ -99,6 +99,14 @@ import { objectContaining } from "./expect-utils.js";
99
99
  * @type {VelociousTestConfig} */
100
100
  export const testConfig: VelociousTestConfig;
101
101
  export const testEvents: import("eventemitter3").EventEmitter<string | symbol, any>;
102
+ /**
103
+ * VelociousTestConfig type.
104
+ * @typedef {object} VelociousTestConfig
105
+ * @property {"failure" | "live"} consoleOutput - Console output mode.
106
+ * @property {string[]} excludeTags - Tags excluded by default.
107
+ * @property {number} defaultTimeoutSeconds - Default timeout in seconds.
108
+ * @property {number} failedConsoleOutputMaxLines - Maximum failed console lines to print inline.
109
+ */
102
110
  /**
103
111
  * Tests.
104
112
  * @type {import("./test-runner.js").TestsArgument} */
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/testing/test.js"],"names":[],"mappings":";;;;;;;mBAsWc,SAAS,GAAG,MAAM;;;;iBAClB,MAAM,EAAE;;;;2BACR,MAAM;;;;iCACN,MAAM;;AAxKpB;;;;GAIG;AACH,mCAHW,OAAO,kBAAkB,EAAE,0BAA0B,GACnD,IAAI,CAMhB;AApBD;;;;GAIG;AACH,oCAHW,OAAO,kBAAkB,EAAE,2BAA2B,GACpD,IAAI,CAMhB;AApBD;;;;GAIG;AACH,oCAHW,OAAO,kBAAkB,EAAE,0BAA0B,GACnD,IAAI,CAMhB;AApBD;;;;GAIG;AACH,qCAHW,OAAO,kBAAkB,EAAE,2BAA2B,GACpD,IAAI,CAMhB;AA3DD;;;;;;;;GAQG;AACH,oHANG;IAAkC,aAAa;IACd,WAAW;IACtB,qBAAqB;IACrB,2BAA2B;CACjD,GAAU,IAAI,CAsBhB;AAkED;;;;;;GAMG;AACH,sCALW,MAAM,QACN,MAAM,GAAC,CAAC,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SACnC,SAAS,GAAC,CAAC,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CA8CzB;AAED;;;;GAIG;AACH,4BAHW,OAAC,GACC,MAAM,CAIlB;;;;;AA8CD;;;;;;GAMG;AACH,iCALW,MAAM,QACN,MAAM,GAAC,CAAC,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SACnC,SAAS,GAAC,CAAC,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GACpC,IAAI,CAwBhB;AAtED;;;;;;GAMG;AACH,gCALW,MAAM,QACN,MAAM,GAAC,CAAC,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SACnC,SAAS,GAAC,CAAC,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GACpC,IAAI,CAkChB;gCA9S+C,mBAAmB;iCAAnB,mBAAmB;AA6FnE;;iCAEiC;AACjC,yBADU,mBAAmB,CAM5B;AAvED,oFAAqC;AA5BrC;;sDAEsD;AACtD,oBADU,OAAO,kBAAkB,EAAE,aAAa,CAwBjD;yBA7BwB,qBAAqB;mBAD3B,aAAa"}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/testing/test.js"],"names":[],"mappings":";;;;;;;mBAYc,SAAS,GAAG,MAAM;;;;iBAClB,MAAM,EAAE;;;;2BACR,MAAM;;;;iCACN,MAAM;;AA0LpB;;;;GAIG;AACH,mCAHW,OAAO,kBAAkB,EAAE,0BAA0B,GACnD,IAAI,CAMhB;AApBD;;;;GAIG;AACH,oCAHW,OAAO,kBAAkB,EAAE,2BAA2B,GACpD,IAAI,CAMhB;AApBD;;;;GAIG;AACH,oCAHW,OAAO,kBAAkB,EAAE,0BAA0B,GACnD,IAAI,CAMhB;AApBD;;;;GAIG;AACH,qCAHW,OAAO,kBAAkB,EAAE,2BAA2B,GACpD,IAAI,CAMhB;AA3DD;;;;;;;;GAQG;AACH,oHANG;IAAkC,aAAa;IACd,WAAW;IACtB,qBAAqB;IACrB,2BAA2B;CACjD,GAAU,IAAI,CAsBhB;AAiED;;;;;;GAMG;AACH,sCALW,MAAM,QACN,MAAM,GAAC,CAAC,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SACnC,SAAS,GAAC,CAAC,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC,CA8CzB;AAED;;;;GAIG;AACH,4BAHW,OAAC,GACC,MAAM,CAIlB;;;;;AA8CD;;;;;;GAMG;AACH,iCALW,MAAM,QACN,MAAM,GAAC,CAAC,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SACnC,SAAS,GAAC,CAAC,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GACpC,IAAI,CAwBhB;AAtED;;;;;;GAMG;AACH,gCALW,MAAM,QACN,MAAM,GAAC,CAAC,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SACnC,SAAS,GAAC,CAAC,MAAM,CAAC,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GACpC,IAAI,CAkChB;gCArT+C,mBAAmB;iCAAnB,mBAAmB;AAqGnE;;iCAEiC;AACjC,yBADU,mBAAmB,CAM5B;AAvED,oFAAqC;AApCrC;;;;;;;GAOG;AACH;;sDAEsD;AACtD,oBADU,OAAO,kBAAkB,EAAE,aAAa,CAwBjD;yBArCwB,qBAAqB;mBAD3B,aAAa"}
@@ -5,6 +5,14 @@ import EventEmitter from "../utils/event-emitter.js";
5
5
  import Expect from "./expect.js";
6
6
  import waitForEvent from "./wait-for-event.js";
7
7
  import { arrayContaining, objectContaining } from "./expect-utils.js";
8
+ /**
9
+ * VelociousTestConfig type.
10
+ * @typedef {object} VelociousTestConfig
11
+ * @property {"failure" | "live"} consoleOutput - Console output mode.
12
+ * @property {string[]} excludeTags - Tags excluded by default.
13
+ * @property {number} defaultTimeoutSeconds - Default timeout in seconds.
14
+ * @property {number} failedConsoleOutputMaxLines - Maximum failed console lines to print inline.
15
+ */
8
16
  /**
9
17
  * Tests.
10
18
  * @type {import("./test-runner.js").TestsArgument} */
@@ -308,12 +316,4 @@ globalThis.fit = fit;
308
316
  globalThis.testEvents = testEvents;
309
317
  globalThis.configureTests = configureTests;
310
318
  export { afterAll, afterEach, beforeAll, beforeEach, configureTests, describe, expect, fit, it, arrayContaining, objectContaining, testConfig, testEvents, tests, waitForEvent };
311
- /**
312
- * VelociousTestConfig type.
313
- * @typedef {object} VelociousTestConfig
314
- * @property {"failure" | "live"} consoleOutput - Console output mode.
315
- * @property {string[]} excludeTags - Tags excluded by default.
316
- * @property {number} defaultTimeoutSeconds - Default timeout in seconds.
317
- * @property {number} failedConsoleOutputMaxLines - Maximum failed console lines to print inline.
318
- */
319
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL3Rlc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sS0FBSyxDQUFBO0FBQ2pDLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBQ3BELE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxPQUFPLFlBQVksTUFBTSxxQkFBcUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFFbkU7O3NEQUVzRDtBQUN0RCxNQUFNLEtBQUssR0FBRztJQUNaOztnRkFFNEU7SUFDNUUsV0FBVyxFQUFFLEVBQUU7SUFDZjs7K0VBRTJFO0lBQzNFLFNBQVMsRUFBRSxFQUFFO0lBQ2IsSUFBSSxFQUFFLEVBQUU7SUFFUjs7K0VBRTJFO0lBQzNFLFVBQVUsRUFBRSxFQUFFO0lBQ2Q7O2dGQUU0RTtJQUM1RSxZQUFZLEVBQUUsRUFBRTtJQUNoQixRQUFRLEVBQUUsU0FBUztJQUNuQixJQUFJLEVBQUUsU0FBUztJQUNmLElBQUksRUFBRSxFQUFFO0lBQ1IsS0FBSyxFQUFFLEVBQUU7Q0FDVixDQUFBO0FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtBQUVyQyxJQUFJLFdBQVcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBRXpCOzs7R0FHRztBQUNILFNBQVMsZUFBZTtJQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFBO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxF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TyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUMsQ0FBQTtBQUM5Szs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSBcInVybFwiXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCIuLi91dGlscy9ldmVudC1lbWl0dGVyLmpzXCJcbmltcG9ydCBFeHBlY3QgZnJvbSBcIi4vZXhwZWN0LmpzXCJcbmltcG9ydCB3YWl0Rm9yRXZlbnQgZnJvbSBcIi4vd2FpdC1mb3ItZXZlbnQuanNcIlxuaW1wb3J0IHthcnJheUNvbnRhaW5pbmcsIG9iamVjdENvbnRhaW5pbmd9IGZyb20gXCIuL2V4cGVjdC11dGlscy5qc1wiXG5cbi8qKlxuICogVGVzdHMuXG4gKiBAdHlwZSB7aW1wb3J0KFwiLi90ZXN0LXJ1bm5lci5qc1wiKS5UZXN0c0FyZ3VtZW50fSAqL1xuY29uc3QgdGVzdHMgPSB7XG4gIC8qKlxuICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkFmdGVyQmVmb3JlRWFjaENhbGxiYWNrT2JqZWN0VHlwZVtdfSAqL1xuICBhZnRlckVhY2hlczogW10sXG4gIC8qKlxuICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkJlZm9yZUFmdGVyQWxsQ2FsbGJhY2tPYmplY3RUeXBlW119ICovXG4gIGFmdGVyQWxsczogW10sXG4gIGFyZ3M6IHt9LFxuXG4gIC8qKlxuICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkJlZm9yZUFmdGVyQWxsQ2FsbGJhY2tPYmplY3RUeXBlW119ICovXG4gIGJlZm9yZUFsbHM6IFtdLFxuICAvKipcbiAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgKiBAdHlwZSB7aW1wb3J0KFwiLi90ZXN0LXJ1bm5lci5qc1wiKS5BZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGVbXX0gKi9cbiAgYmVmb3JlRWFjaGVzOiBbXSxcbiAgZmlsZVBhdGg6IHVuZGVmaW5lZCxcbiAgbGluZTogdW5kZWZpbmVkLFxuICBzdWJzOiB7fSxcbiAgdGVzdHM6IHt9XG59XG5cbmNvbnN0IHRlc3RFdmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxubGV0IGN1cnJlbnRQYXRoID0gW3Rlc3RzXVxuXG4vKipcbiAqIFJ1bnMgY2FwdHVyZSBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt7ZmlsZVBhdGg/OiBzdHJpbmcsIGxpbmU/OiBudW1iZXJ9fSAtIExvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBjYXB0dXJlTG9jYXRpb24oKSB7XG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKClcbiAgY29uc3Qgc3RhY2sgPSB0eXBlb2YgZXJyb3Iuc3RhY2sgPT09IFwic3RyaW5nXCIgPyBlcnJvci5zdGFjay5zcGxpdChcIlxcblwiKSA6IFtdXG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIHN0YWNrKSB7XG4gICAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbSgpXG5cbiAgICBpZiAoIXRyaW1tZWQuaW5jbHVkZXMoXCJhdFwiKSkgY29udGludWVcbiAgICBpZiAodHJpbW1lZC5pbmNsdWRlcyhcIi9zcmMvdGVzdGluZy90ZXN0LmpzXCIpKSBjb250aW51ZVxuXG4gICAgY29uc3QgbWF0Y2ggPSB0cmltbWVkLm1hdGNoKC8oPzpcXCh8XFxzKShmaWxlOlxcL1xcLy4qP3xcXC8uKj8pOihcXGQrKTooXFxkKylcXCk/JC8pXG5cbiAgICBpZiAoIW1hdGNoKSBjb250aW51ZVxuXG4gICAgY29uc3QgcmF3UGF0aCA9IG1hdGNoWzFdXG4gICAgY29uc3QgbGluZU51bWJlciA9IE51bWJlcihtYXRjaFsyXSlcbiAgICBjb25zdCBmaWxlUGF0aCA9IHJhd1BhdGguc3RhcnRzV2l0aChcImZpbGU6Ly9cIilcbiAgICAgID8gZmlsZVVSTFRvUGF0aChyYXdQYXRoKVxuICAgICAgOiByYXdQYXRoXG5cbiAgICByZXR1cm4ge1xuICAgICAgZmlsZVBhdGg6IHBhdGgucmVzb2x2ZShmaWxlUGF0aCksXG4gICAgICBsaW5lOiBOdW1iZXIuaXNGaW5pdGUobGluZU51bWJlcikgPyBsaW5lTnVtYmVyIDogdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHt9XG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgdGFncy5cbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmcgfCB1bmRlZmluZWR9IHRhZ3MgLSBUYWdzLlxuICogQHJldHVybnMge3N0cmluZ1tdfSAtIE5vcm1hbGl6ZWQgdGFncy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVGFncyh0YWdzKSB7XG4gIGlmICghdGFncykgcmV0dXJuIFtdXG5cbiAgY29uc3QgdmFsdWVzID0gW11cbiAgY29uc3QgcmF3VGFncyA9IEFycmF5LmlzQXJyYXkodGFncykgPyB0YWdzIDogW3RhZ3NdXG5cbiAgZm9yIChjb25zdCByYXdUYWcgb2YgcmF3VGFncykge1xuICAgIGlmIChyYXdUYWcgPT09IHVuZGVmaW5lZCB8fCByYXdUYWcgPT09IG51bGwpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBwYXJ0cyA9IFN0cmluZyhyYXdUYWcpLnNwbGl0KFwiLFwiKVxuXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gcGFydC50cmltKClcblxuICAgICAgaWYgKHRyaW1tZWQpIHZhbHVlcy5wdXNoKHRyaW1tZWQpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldCh2YWx1ZXMpKVxufVxuXG4vKipcbiAqIFRlc3QgY29uZmlnLlxuICogQHR5cGUge1ZlbG9jaW91c1Rlc3RDb25maWd9ICovXG5jb25zdCB0ZXN0Q29uZmlnID0ge1xuICBjb25zb2xlT3V0cHV0OiBcImZhaWx1cmVcIixcbiAgZmFpbGVkQ29uc29sZU91dHB1dE1heExpbmVzOiAyMDAsXG4gIGV4Y2x1ZGVUYWdzOiBbXSxcbiAgZGVmYXVsdFRpbWVvdXRTZWNvbmRzOiA2MFxufVxuXG4vKipcbiAqIFJ1bnMgY29uZmlndXJlIHRlc3RzLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtcImZhaWx1cmVcIiB8IFwibGl2ZVwifSBbYXJncy5jb25zb2xlT3V0cHV0XSAtIENvbnNvbGUgb3V0cHV0IG1vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBbYXJncy5leGNsdWRlVGFnc10gLSBUYWdzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MuZGVmYXVsdFRpbWVvdXRTZWNvbmRzXSAtIERlZmF1bHQgdGltZW91dCBpbiBzZWNvbmRzLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmZhaWxlZENvbnNvbGVPdXRwdXRNYXhMaW5lc10gLSBNYXhpbXVtIGZhaWxlZCBjb25zb2xlIGxpbmVzIHRvIHByaW50IGlubGluZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBjb25maWd1cmVUZXN0cyh7Y29uc29sZU91dHB1dCwgZXhjbHVkZVRhZ3MsIGRlZmF1bHRUaW1lb3V0U2Vjb25kcywgZmFpbGVkQ29uc29sZU91dHB1dE1heExpbmVzfSA9IHt9KSB7XG4gIGlmIChleGNsdWRlVGFncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGVzdENvbmZpZy5leGNsdWRlVGFncyA9IG5vcm1hbGl6ZVRhZ3MoZXhjbHVkZVRhZ3MpXG4gIH1cblxuICBpZiAoY29uc29sZU91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNvbnNvbGVPdXRwdXQgIT09IFwiZmFpbHVyZVwiICYmIGNvbnNvbGVPdXRwdXQgIT09IFwibGl2ZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29uc29sZU91dHB1dCBjb25maWc6ICR7Y29uc29sZU91dHB1dH1gKVxuICAgIH1cblxuICAgIHRlc3RDb25maWcuY29uc29sZU91dHB1dCA9IGNvbnNvbGVPdXRwdXRcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGVmYXVsdFRpbWVvdXRTZWNvbmRzID09PSBcIm51bWJlclwiKSB7XG4gICAgdGVzdENvbmZpZy5kZWZhdWx0VGltZW91dFNlY29uZHMgPSBkZWZhdWx0VGltZW91dFNlY29uZHNcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmFpbGVkQ29uc29sZU91dHB1dE1heExpbmVzID09PSBcIm51bWJlclwiKSB7XG4gICAgdGVzdENvbmZpZy5mYWlsZWRDb25zb2xlT3V0cHV0TWF4TGluZXMgPSBmYWlsZWRDb25zb2xlT3V0cHV0TWF4TGluZXNcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgbWVyZ2UgdGVzdCBhcmdzLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gYmFzZUFyZ3MgLSBCYXNlIGFyZ3MuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBleHRyYUFyZ3MgLSBFeHRyYSBhcmdzLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsID8+fSAtIE1lcmdlZCBhcmdzLlxuICovXG5mdW5jdGlvbiBtZXJnZVRlc3RBcmdzKGJhc2VBcmdzLCBleHRyYUFyZ3MpIHtcbiAgY29uc3QgbWVyZ2VkID0gT2JqZWN0LmFzc2lnbih7fSwgYmFzZUFyZ3MsIGV4dHJhQXJncylcbiAgY29uc3QgbWVyZ2VkVGFncyA9IFsuLi5ub3JtYWxpemVUYWdzKGJhc2VBcmdzPy50YWdzKSwgLi4ubm9ybWFsaXplVGFncyhleHRyYUFyZ3M/LnRhZ3MpXVxuXG4gIGlmIChtZXJnZWRUYWdzLmxlbmd0aCA+IDApIHtcbiAgICBtZXJnZWQudGFncyA9IEFycmF5LmZyb20obmV3IFNldChtZXJnZWRUYWdzKSlcbiAgfSBlbHNlIGlmIChcInRhZ3NcIiBpbiBtZXJnZWQpIHtcbiAgICBkZWxldGUgbWVyZ2VkLnRhZ3NcbiAgfVxuXG4gIHJldHVybiBtZXJnZWRcbn1cblxuLyoqXG4gKiBSdW5zIGJlZm9yZSBlYWNoLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkFmdGVyQmVmb3JlRWFjaENhbGxiYWNrVHlwZX0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmVmb3JlRWFjaChjYWxsYmFjaykge1xuICBjb25zdCBjdXJyZW50VGVzdCA9IGN1cnJlbnRQYXRoW2N1cnJlbnRQYXRoLmxlbmd0aCAtIDFdXG5cbiAgY3VycmVudFRlc3QuYmVmb3JlRWFjaGVzLnB1c2goe2NhbGxiYWNrfSlcbn1cblxuLyoqXG4gKiBSdW5zIGJlZm9yZSBhbGwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuQmVmb3JlQWZ0ZXJBbGxDYWxsYmFja1R5cGV9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJlZm9yZUFsbChjYWxsYmFjaykge1xuICBjb25zdCBjdXJyZW50VGVzdCA9IGN1cnJlbnRQYXRoW2N1cnJlbnRQYXRoLmxlbmd0aCAtIDFdXG5cbiAgY3VycmVudFRlc3QuYmVmb3JlQWxscy5wdXNoKHtjYWxsYmFja30pXG59XG5cbi8qKlxuICogUnVucyBhZnRlciBlYWNoLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkFmdGVyQmVmb3JlRWFjaENhbGxiYWNrVHlwZX0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYWZ0ZXJFYWNoKGNhbGxiYWNrKSB7XG4gIGNvbnN0IGN1cnJlbnRUZXN0ID0gY3VycmVudFBhdGhbY3VycmVudFBhdGgubGVuZ3RoIC0gMV1cblxuICBjdXJyZW50VGVzdC5hZnRlckVhY2hlcy5wdXNoKHtjYWxsYmFja30pXG59XG5cbi8qKlxuICogUnVucyBhZnRlciBhbGwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuQmVmb3JlQWZ0ZXJBbGxDYWxsYmFja1R5cGV9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGFmdGVyQWxsKGNhbGxiYWNrKSB7XG4gIGNvbnN0IGN1cnJlbnRUZXN0ID0gY3VycmVudFBhdGhbY3VycmVudFBhdGgubGVuZ3RoIC0gMV1cblxuICBjdXJyZW50VGVzdC5hZnRlckFsbHMucHVzaCh7Y2FsbGJhY2t9KVxufVxuXG5cbi8qKlxuICogUnVucyBkZXNjcmliZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvbiAtIERlc2NyaXB0aW9uLlxuICogQHBhcmFtIHtvYmplY3R8KCgpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pKX0gYXJnMSAtIEFyZzEuXG4gKiBAcGFyYW0ge3VuZGVmaW5lZHwoKCkgPT4gKHZvaWR8UHJvbWlzZTx2b2lkPikpfSBbYXJnMl0gLSBBcmcyLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGVzY3JpYmUoZGVzY3JpcHRpb24sIGFyZzEsIGFyZzIpIHtcbiAgLyoqXG4gICAqIERlZmluZXMgdGVzdEFyZ3MuXG4gICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi9cbiAgbGV0IHRlc3RBcmdzLCB0ZXN0RnVuY3Rpb25cblxuICBpZiAodHlwZW9mIGFyZzIgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGVzdEZ1bmN0aW9uID0gYXJnMlxuICAgIHRlc3RBcmdzID0gYXJnMVxuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcxID09IFwiZnVuY3Rpb25cIikge1xuICAgIHRlc3RGdW5jdGlvbiA9IGFyZzFcbiAgICB0ZXN0QXJncyA9IHt9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgZGVzY3JpYmU6ICR7YXJnMX0sICR7YXJnMn1gKVxuICB9XG5cbiAgY29uc3QgY3VycmVudFRlc3QgPSBjdXJyZW50UGF0aFtjdXJyZW50UGF0aC5sZW5ndGggLSAxXVxuICBjb25zdCBuZXdUZXN0QXJncyA9IG1lcmdlVGVzdEFyZ3MoY3VycmVudFRlc3QuYXJncywgdGVzdEFyZ3MpXG5cbiAgaWYgKGRlc2NyaXB0aW9uIGluIGN1cnJlbnRUZXN0LnN1YnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSB0ZXN0IGRlc2NyaXB0aW9uOiAke2Rlc2NyaXB0aW9ufWApXG4gIH1cblxuICBjb25zdCBsb2NhdGlvbiA9IGNhcHR1cmVMb2NhdGlvbigpXG4gIGNvbnN0IG5ld1Rlc3REYXRhID0ge1xuICAgIGFmdGVyRWFjaGVzOiBbXSxcbiAgICBhZnRlckFsbHM6IFtdLFxuICAgIGFyZ3M6IG5ld1Rlc3RBcmdzLFxuICAgIGJlZm9yZUFsbHM6IFtdLFxuICAgIGJlZm9yZUVhY2hlczogW10sXG4gICAgZmlsZVBhdGg6IGxvY2F0aW9uLmZpbGVQYXRoLFxuICAgIGxpbmU6IGxvY2F0aW9uLmxpbmUsXG4gICAgc3Viczoge30sXG4gICAgdGVzdHM6IHt9XG4gIH1cblxuICBjdXJyZW50VGVzdC5zdWJzW2Rlc2NyaXB0aW9uXSA9IG5ld1Rlc3REYXRhXG4gIGN1cnJlbnRQYXRoLnB1c2gobmV3VGVzdERhdGEpXG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB0ZXN0RnVuY3Rpb24oKVxuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQYXRoLnBvcCgpXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGV4cGVjdC5cbiAqIEBwYXJhbSB7P30gYXJnIC0gQXJnLlxuICogQHJldHVybnMge0V4cGVjdH0gLSBUaGUgZXhwZWN0LlxuICovXG5mdW5jdGlvbiBleHBlY3QoYXJnKSB7XG4gIHJldHVybiBuZXcgRXhwZWN0KGFyZylcbn1cblxuZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcgPSBvYmplY3RDb250YWluaW5nXG5leHBlY3QuYXJyYXlDb250YWluaW5nID0gYXJyYXlDb250YWluaW5nXG5cbi8qKlxuICogUnVucyBpdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvbiAtIERlc2NyaXB0aW9uLlxuICogQHBhcmFtIHtvYmplY3R8KCgpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pKX0gYXJnMSAtIEFyZzEuXG4gKiBAcGFyYW0ge3VuZGVmaW5lZHwoKCkgPT4gKHZvaWR8UHJvbWlzZTx2b2lkPikpfSBbYXJnMl0gLSBBcmcyLlxuICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICovXG5mdW5jdGlvbiBpdChkZXNjcmlwdGlvbiwgYXJnMSwgYXJnMikge1xuICBjb25zdCBjdXJyZW50VGVzdCA9IGN1cnJlbnRQYXRoW2N1cnJlbnRQYXRoLmxlbmd0aCAtIDFdXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRlc3RBcmdzLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovXG4gIGxldCB0ZXN0QXJnc1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRlc3RGdW5jdGlvbi5cbiAgICogQHR5cGUgeygpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pfSAqL1xuICBsZXQgdGVzdEZ1bmN0aW9uXG5cbiAgaWYgKHR5cGVvZiBhcmcxID09IFwiZnVuY3Rpb25cIikge1xuICAgIHRlc3RGdW5jdGlvbiA9IC8qKiBAdHlwZSB7KCkgPT4gKHZvaWR8UHJvbWlzZTx2b2lkPil9ICovIChhcmcxKVxuICAgIHRlc3RBcmdzID0ge31cbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0ZXN0RnVuY3Rpb24gPSAvKiogQHR5cGUgeygpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pfSAqLyAoYXJnMilcbiAgICB0ZXN0QXJncyA9IGFyZzFcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIGZvciBpdDogJHtkZXNjcmlwdGlvbn0sICR7YXJnMX1gKVxuICB9XG5cbiAgY29uc3QgbmV3VGVzdEFyZ3MgPSBtZXJnZVRlc3RBcmdzKGN1cnJlbnRUZXN0LmFyZ3MsIHRlc3RBcmdzKVxuXG4gIGNvbnN0IGxvY2F0aW9uID0gY2FwdHVyZUxvY2F0aW9uKClcblxuICBjdXJyZW50VGVzdC50ZXN0c1tkZXNjcmlwdGlvbl0gPSB7XG4gICAgYXJnczogbmV3VGVzdEFyZ3MsXG4gICAgZnVuY3Rpb246IHRlc3RGdW5jdGlvbixcbiAgICBmaWxlUGF0aDogbG9jYXRpb24uZmlsZVBhdGgsXG4gICAgbGluZTogbG9jYXRpb24ubGluZVxuICB9XG59XG5cbi8qKlxuICogUnVucyBmaXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gLSBEZXNjcmlwdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fCgoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KSl9IGFyZzEgLSBBcmcxLlxuICogQHBhcmFtIHt1bmRlZmluZWR8KCgpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pKX0gW2FyZzJdIC0gQXJnMi5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZml0KGRlc2NyaXB0aW9uLCBhcmcxLCBhcmcyKSB7XG4gIC8qKlxuICAgKiBEZWZpbmVzIHRlc3RBcmdzLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovXG4gIGxldCB0ZXN0QXJnc1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRlc3RGdW5jdGlvbi5cbiAgICogQHR5cGUgeygpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pfSAqL1xuICBsZXQgdGVzdEZ1bmN0aW9uXG5cbiAgaWYgKHR5cGVvZiBhcmcxID09IFwiZnVuY3Rpb25cIikge1xuICAgIHRlc3RGdW5jdGlvbiA9IC8qKiBAdHlwZSB7KCkgPT4gKHZvaWR8UHJvbWlzZTx2b2lkPil9ICovIChhcmcxKVxuICAgIHRlc3RBcmdzID0ge2ZvY3VzOiB0cnVlfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBhcmcyID09IFwiZnVuY3Rpb25cIikge1xuICAgIHRlc3RGdW5jdGlvbiA9IC8qKiBAdHlwZSB7KCkgPT4gKHZvaWR8UHJvbWlzZTx2b2lkPil9ICovIChhcmcyKVxuICAgIHRlc3RBcmdzID0gT2JqZWN0LmFzc2lnbih7Zm9jdXM6IHRydWV9LCBhcmcxKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgZm9yIGl0OiAke2Rlc2NyaXB0aW9ufSwgJHthcmcxfWApXG4gIH1cblxuICByZXR1cm4gaXQoZGVzY3JpcHRpb24sIHRlc3RBcmdzLCB0ZXN0RnVuY3Rpb24pXG59XG5cbi8vIE1ha2UgdGhlIG1ldGhvZHMgZ2xvYmFsIHNvIHRoZXkgY2FuIGJlIHVzZWQgaW4gdGVzdCBmaWxlc1xuZ2xvYmFsVGhpcy5hZnRlckVhY2ggPSBhZnRlckVhY2hcbmdsb2JhbFRoaXMuYWZ0ZXJBbGwgPSBhZnRlckFsbFxuZ2xvYmFsVGhpcy5iZWZvcmVFYWNoID0gYmVmb3JlRWFjaFxuZ2xvYmFsVGhpcy5iZWZvcmVBbGwgPSBiZWZvcmVBbGxcbmdsb2JhbFRoaXMuZGVzY3JpYmUgPSBkZXNjcmliZVxuZ2xvYmFsVGhpcy5leHBlY3QgPSBleHBlY3Rcbmdsb2JhbFRoaXMuaXQgPSBpdFxuZ2xvYmFsVGhpcy5maXQgPSBmaXRcbmdsb2JhbFRoaXMudGVzdEV2ZW50cyA9IHRlc3RFdmVudHNcbmdsb2JhbFRoaXMuY29uZmlndXJlVGVzdHMgPSBjb25maWd1cmVUZXN0c1xuXG5leHBvcnQge2FmdGVyQWxsLCBhZnRlckVhY2gsIGJlZm9yZUFsbCwgYmVmb3JlRWFjaCwgY29uZmlndXJlVGVzdHMsIGRlc2NyaWJlLCBleHBlY3QsIGZpdCwgaXQsIGFycmF5Q29udGFpbmluZywgb2JqZWN0Q29udGFpbmluZywgdGVzdENvbmZpZywgdGVzdEV2ZW50cywgdGVzdHMsIHdhaXRGb3JFdmVudH1cbi8qKlxuICogVmVsb2Npb3VzVGVzdENvbmZpZyB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gVmVsb2Npb3VzVGVzdENvbmZpZ1xuICogQHByb3BlcnR5IHtcImZhaWx1cmVcIiB8IFwibGl2ZVwifSBjb25zb2xlT3V0cHV0IC0gQ29uc29sZSBvdXRwdXQgbW9kZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IGV4Y2x1ZGVUYWdzIC0gVGFncyBleGNsdWRlZCBieSBkZWZhdWx0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRlZmF1bHRUaW1lb3V0U2Vjb25kcyAtIERlZmF1bHQgdGltZW91dCBpbiBzZWNvbmRzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGZhaWxlZENvbnNvbGVPdXRwdXRNYXhMaW5lcyAtIE1heGltdW0gZmFpbGVkIGNvbnNvbGUgbGluZXMgdG8gcHJpbnQgaW5saW5lLlxuICovXG4iXX0=
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZXN0aW5nL3Rlc3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQTtBQUN2QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sS0FBSyxDQUFBO0FBQ2pDLE9BQU8sWUFBWSxNQUFNLDJCQUEyQixDQUFBO0FBQ3BELE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQTtBQUNoQyxPQUFPLFlBQVksTUFBTSxxQkFBcUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFFbkU7Ozs7Ozs7R0FPRztBQUNIOztzREFFc0Q7QUFDdEQsTUFBTSxLQUFLLEdBQUc7SUFDWjs7Z0ZBRTRFO0lBQzVFLFdBQVcsRUFBRSxFQUFFO0lBQ2Y7OytFQUUyRTtJQUMzRSxTQUFTLEVBQUUsRUFBRTtJQUNiLElBQUksRUFBRSxFQUFFO0lBRVI7OytFQUUyRTtJQUMzRSxVQUFVLEVBQUUsRUFBRTtJQUNkOztnRkFFNEU7SUFDNUUsWUFBWSxFQUFFLEVBQUU7SUFDaEIsUUFBUSxFQUFFLFNBQVM7SUFDbkIsSUFBSSxFQUFFLFNBQVM7SUFDZixJQUFJLEVBQUUsRUFBRTtJQUNSLEtBQUssRUFBRSxFQUFFO0NBQ1YsQ0FBQTtBQUVELE1BQU0sVUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7QUFFckMsSUFBSSxXQUFXLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUV6Qjs7O0dBR0c7QUFDSCxTQUFTLGVBQWU7SUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQTtJQUN6QixNQUFNLEtBQUssR0FBRyxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMs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YyxDQUFBO0FBRTFDLE9BQU8sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuaW1wb3J0IHtmaWxlVVJMVG9QYXRofSBmcm9tIFwidXJsXCJcbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcIi4uL3V0aWxzL2V2ZW50LWVtaXR0ZXIuanNcIlxuaW1wb3J0IEV4cGVjdCBmcm9tIFwiLi9leHBlY3QuanNcIlxuaW1wb3J0IHdhaXRGb3JFdmVudCBmcm9tIFwiLi93YWl0LWZvci1ldmVudC5qc1wiXG5pbXBvcnQge2FycmF5Q29udGFpbmluZywgb2JqZWN0Q29udGFpbmluZ30gZnJvbSBcIi4vZXhwZWN0LXV0aWxzLmpzXCJcblxuLyoqXG4gKiBWZWxvY2lvdXNUZXN0Q29uZmlnIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBWZWxvY2lvdXNUZXN0Q29uZmlnXG4gKiBAcHJvcGVydHkge1wiZmFpbHVyZVwiIHwgXCJsaXZlXCJ9IGNvbnNvbGVPdXRwdXQgLSBDb25zb2xlIG91dHB1dCBtb2RlLlxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gZXhjbHVkZVRhZ3MgLSBUYWdzIGV4Y2x1ZGVkIGJ5IGRlZmF1bHQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGVmYXVsdFRpbWVvdXRTZWNvbmRzIC0gRGVmYXVsdCB0aW1lb3V0IGluIHNlY29uZHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZmFpbGVkQ29uc29sZU91dHB1dE1heExpbmVzIC0gTWF4aW11bSBmYWlsZWQgY29uc29sZSBsaW5lcyB0byBwcmludCBpbmxpbmUuXG4gKi9cbi8qKlxuICogVGVzdHMuXG4gKiBAdHlwZSB7aW1wb3J0KFwiLi90ZXN0LXJ1bm5lci5qc1wiKS5UZXN0c0FyZ3VtZW50fSAqL1xuY29uc3QgdGVzdHMgPSB7XG4gIC8qKlxuICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkFmdGVyQmVmb3JlRWFjaENhbGxiYWNrT2JqZWN0VHlwZVtdfSAqL1xuICBhZnRlckVhY2hlczogW10sXG4gIC8qKlxuICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkJlZm9yZUFmdGVyQWxsQ2FsbGJhY2tPYmplY3RUeXBlW119ICovXG4gIGFmdGVyQWxsczogW10sXG4gIGFyZ3M6IHt9LFxuXG4gIC8qKlxuICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAqIEB0eXBlIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkJlZm9yZUFmdGVyQWxsQ2FsbGJhY2tPYmplY3RUeXBlW119ICovXG4gIGJlZm9yZUFsbHM6IFtdLFxuICAvKipcbiAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgKiBAdHlwZSB7aW1wb3J0KFwiLi90ZXN0LXJ1bm5lci5qc1wiKS5BZnRlckJlZm9yZUVhY2hDYWxsYmFja09iamVjdFR5cGVbXX0gKi9cbiAgYmVmb3JlRWFjaGVzOiBbXSxcbiAgZmlsZVBhdGg6IHVuZGVmaW5lZCxcbiAgbGluZTogdW5kZWZpbmVkLFxuICBzdWJzOiB7fSxcbiAgdGVzdHM6IHt9XG59XG5cbmNvbnN0IHRlc3RFdmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxubGV0IGN1cnJlbnRQYXRoID0gW3Rlc3RzXVxuXG4vKipcbiAqIFJ1bnMgY2FwdHVyZSBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt7ZmlsZVBhdGg/OiBzdHJpbmcsIGxpbmU/OiBudW1iZXJ9fSAtIExvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBjYXB0dXJlTG9jYXRpb24oKSB7XG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKClcbiAgY29uc3Qgc3RhY2sgPSB0eXBlb2YgZXJyb3Iuc3RhY2sgPT09IFwic3RyaW5nXCIgPyBlcnJvci5zdGFjay5zcGxpdChcIlxcblwiKSA6IFtdXG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIHN0YWNrKSB7XG4gICAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbSgpXG5cbiAgICBpZiAoIXRyaW1tZWQuaW5jbHVkZXMoXCJhdFwiKSkgY29udGludWVcbiAgICBpZiAodHJpbW1lZC5pbmNsdWRlcyhcIi9zcmMvdGVzdGluZy90ZXN0LmpzXCIpKSBjb250aW51ZVxuXG4gICAgY29uc3QgbWF0Y2ggPSB0cmltbWVkLm1hdGNoKC8oPzpcXCh8XFxzKShmaWxlOlxcL1xcLy4qP3xcXC8uKj8pOihcXGQrKTooXFxkKylcXCk/JC8pXG5cbiAgICBpZiAoIW1hdGNoKSBjb250aW51ZVxuXG4gICAgY29uc3QgcmF3UGF0aCA9IG1hdGNoWzFdXG4gICAgY29uc3QgbGluZU51bWJlciA9IE51bWJlcihtYXRjaFsyXSlcbiAgICBjb25zdCBmaWxlUGF0aCA9IHJhd1BhdGguc3RhcnRzV2l0aChcImZpbGU6Ly9cIilcbiAgICAgID8gZmlsZVVSTFRvUGF0aChyYXdQYXRoKVxuICAgICAgOiByYXdQYXRoXG5cbiAgICByZXR1cm4ge1xuICAgICAgZmlsZVBhdGg6IHBhdGgucmVzb2x2ZShmaWxlUGF0aCksXG4gICAgICBsaW5lOiBOdW1iZXIuaXNGaW5pdGUobGluZU51bWJlcikgPyBsaW5lTnVtYmVyIDogdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHt9XG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgdGFncy5cbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmcgfCB1bmRlZmluZWR9IHRhZ3MgLSBUYWdzLlxuICogQHJldHVybnMge3N0cmluZ1tdfSAtIE5vcm1hbGl6ZWQgdGFncy5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVGFncyh0YWdzKSB7XG4gIGlmICghdGFncykgcmV0dXJuIFtdXG5cbiAgY29uc3QgdmFsdWVzID0gW11cbiAgY29uc3QgcmF3VGFncyA9IEFycmF5LmlzQXJyYXkodGFncykgPyB0YWdzIDogW3RhZ3NdXG5cbiAgZm9yIChjb25zdCByYXdUYWcgb2YgcmF3VGFncykge1xuICAgIGlmIChyYXdUYWcgPT09IHVuZGVmaW5lZCB8fCByYXdUYWcgPT09IG51bGwpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBwYXJ0cyA9IFN0cmluZyhyYXdUYWcpLnNwbGl0KFwiLFwiKVxuXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gcGFydC50cmltKClcblxuICAgICAgaWYgKHRyaW1tZWQpIHZhbHVlcy5wdXNoKHRyaW1tZWQpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldCh2YWx1ZXMpKVxufVxuXG4vKipcbiAqIFRlc3QgY29uZmlnLlxuICogQHR5cGUge1ZlbG9jaW91c1Rlc3RDb25maWd9ICovXG5jb25zdCB0ZXN0Q29uZmlnID0ge1xuICBjb25zb2xlT3V0cHV0OiBcImZhaWx1cmVcIixcbiAgZmFpbGVkQ29uc29sZU91dHB1dE1heExpbmVzOiAyMDAsXG4gIGV4Y2x1ZGVUYWdzOiBbXSxcbiAgZGVmYXVsdFRpbWVvdXRTZWNvbmRzOiA2MFxufVxuXG4vKipcbiAqIFJ1bnMgY29uZmlndXJlIHRlc3RzLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zLlxuICogQHBhcmFtIHtcImZhaWx1cmVcIiB8IFwibGl2ZVwifSBbYXJncy5jb25zb2xlT3V0cHV0XSAtIENvbnNvbGUgb3V0cHV0IG1vZGUuXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBbYXJncy5leGNsdWRlVGFnc10gLSBUYWdzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MuZGVmYXVsdFRpbWVvdXRTZWNvbmRzXSAtIERlZmF1bHQgdGltZW91dCBpbiBzZWNvbmRzLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmZhaWxlZENvbnNvbGVPdXRwdXRNYXhMaW5lc10gLSBNYXhpbXVtIGZhaWxlZCBjb25zb2xlIGxpbmVzIHRvIHByaW50IGlubGluZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBjb25maWd1cmVUZXN0cyh7Y29uc29sZU91dHB1dCwgZXhjbHVkZVRhZ3MsIGRlZmF1bHRUaW1lb3V0U2Vjb25kcywgZmFpbGVkQ29uc29sZU91dHB1dE1heExpbmVzfSA9IHt9KSB7XG4gIGlmIChleGNsdWRlVGFncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGVzdENvbmZpZy5leGNsdWRlVGFncyA9IG5vcm1hbGl6ZVRhZ3MoZXhjbHVkZVRhZ3MpXG4gIH1cblxuICBpZiAoY29uc29sZU91dHB1dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNvbnNvbGVPdXRwdXQgIT09IFwiZmFpbHVyZVwiICYmIGNvbnNvbGVPdXRwdXQgIT09IFwibGl2ZVwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29uc29sZU91dHB1dCBjb25maWc6ICR7Y29uc29sZU91dHB1dH1gKVxuICAgIH1cblxuICAgIHRlc3RDb25maWcuY29uc29sZU91dHB1dCA9IGNvbnNvbGVPdXRwdXRcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGVmYXVsdFRpbWVvdXRTZWNvbmRzID09PSBcIm51bWJlclwiKSB7XG4gICAgdGVzdENvbmZpZy5kZWZhdWx0VGltZW91dFNlY29uZHMgPSBkZWZhdWx0VGltZW91dFNlY29uZHNcbiAgfVxuXG4gIGlmICh0eXBlb2YgZmFpbGVkQ29uc29sZU91dHB1dE1heExpbmVzID09PSBcIm51bWJlclwiKSB7XG4gICAgdGVzdENvbmZpZy5mYWlsZWRDb25zb2xlT3V0cHV0TWF4TGluZXMgPSBmYWlsZWRDb25zb2xlT3V0cHV0TWF4TGluZXNcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgbWVyZ2UgdGVzdCBhcmdzLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gYmFzZUFyZ3MgLSBCYXNlIGFyZ3MuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBleHRyYUFyZ3MgLSBFeHRyYSBhcmdzLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsID8+fSAtIE1lcmdlZCBhcmdzLlxuICovXG5mdW5jdGlvbiBtZXJnZVRlc3RBcmdzKGJhc2VBcmdzLCBleHRyYUFyZ3MpIHtcbiAgY29uc3QgbWVyZ2VkID0gT2JqZWN0LmFzc2lnbih7fSwgYmFzZUFyZ3MsIGV4dHJhQXJncylcbiAgY29uc3QgbWVyZ2VkVGFncyA9IFsuLi5ub3JtYWxpemVUYWdzKGJhc2VBcmdzPy50YWdzKSwgLi4ubm9ybWFsaXplVGFncyhleHRyYUFyZ3M/LnRhZ3MpXVxuXG4gIGlmIChtZXJnZWRUYWdzLmxlbmd0aCA+IDApIHtcbiAgICBtZXJnZWQudGFncyA9IEFycmF5LmZyb20obmV3IFNldChtZXJnZWRUYWdzKSlcbiAgfSBlbHNlIGlmIChcInRhZ3NcIiBpbiBtZXJnZWQpIHtcbiAgICBkZWxldGUgbWVyZ2VkLnRhZ3NcbiAgfVxuXG4gIHJldHVybiBtZXJnZWRcbn1cblxuLyoqXG4gKiBSdW5zIGJlZm9yZSBlYWNoLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkFmdGVyQmVmb3JlRWFjaENhbGxiYWNrVHlwZX0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmVmb3JlRWFjaChjYWxsYmFjaykge1xuICBjb25zdCBjdXJyZW50VGVzdCA9IGN1cnJlbnRQYXRoW2N1cnJlbnRQYXRoLmxlbmd0aCAtIDFdXG5cbiAgY3VycmVudFRlc3QuYmVmb3JlRWFjaGVzLnB1c2goe2NhbGxiYWNrfSlcbn1cblxuLyoqXG4gKiBSdW5zIGJlZm9yZSBhbGwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuQmVmb3JlQWZ0ZXJBbGxDYWxsYmFja1R5cGV9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJlZm9yZUFsbChjYWxsYmFjaykge1xuICBjb25zdCBjdXJyZW50VGVzdCA9IGN1cnJlbnRQYXRoW2N1cnJlbnRQYXRoLmxlbmd0aCAtIDFdXG5cbiAgY3VycmVudFRlc3QuYmVmb3JlQWxscy5wdXNoKHtjYWxsYmFja30pXG59XG5cbi8qKlxuICogUnVucyBhZnRlciBlYWNoLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3Rlc3QtcnVubmVyLmpzXCIpLkFmdGVyQmVmb3JlRWFjaENhbGxiYWNrVHlwZX0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYWZ0ZXJFYWNoKGNhbGxiYWNrKSB7XG4gIGNvbnN0IGN1cnJlbnRUZXN0ID0gY3VycmVudFBhdGhbY3VycmVudFBhdGgubGVuZ3RoIC0gMV1cblxuICBjdXJyZW50VGVzdC5hZnRlckVhY2hlcy5wdXNoKHtjYWxsYmFja30pXG59XG5cbi8qKlxuICogUnVucyBhZnRlciBhbGwuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vdGVzdC1ydW5uZXIuanNcIikuQmVmb3JlQWZ0ZXJBbGxDYWxsYmFja1R5cGV9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGFmdGVyQWxsKGNhbGxiYWNrKSB7XG4gIGNvbnN0IGN1cnJlbnRUZXN0ID0gY3VycmVudFBhdGhbY3VycmVudFBhdGgubGVuZ3RoIC0gMV1cblxuICBjdXJyZW50VGVzdC5hZnRlckFsbHMucHVzaCh7Y2FsbGJhY2t9KVxufVxuXG4vKipcbiAqIFJ1bnMgZGVzY3JpYmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gLSBEZXNjcmlwdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fCgoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KSl9IGFyZzEgLSBBcmcxLlxuICogQHBhcmFtIHt1bmRlZmluZWR8KCgpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pKX0gW2FyZzJdIC0gQXJnMi5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlc2NyaWJlKGRlc2NyaXB0aW9uLCBhcmcxLCBhcmcyKSB7XG4gIC8qKlxuICAgKiBEZWZpbmVzIHRlc3RBcmdzLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovXG4gIGxldCB0ZXN0QXJncywgdGVzdEZ1bmN0aW9uXG5cbiAgaWYgKHR5cGVvZiBhcmcyID09IFwiZnVuY3Rpb25cIikge1xuICAgIHRlc3RGdW5jdGlvbiA9IGFyZzJcbiAgICB0ZXN0QXJncyA9IGFyZzFcbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0ZXN0RnVuY3Rpb24gPSBhcmcxXG4gICAgdGVzdEFyZ3MgPSB7fVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhcmd1bWVudHMgZm9yIGRlc2NyaWJlOiAke2FyZzF9LCAke2FyZzJ9YClcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRUZXN0ID0gY3VycmVudFBhdGhbY3VycmVudFBhdGgubGVuZ3RoIC0gMV1cbiAgY29uc3QgbmV3VGVzdEFyZ3MgPSBtZXJnZVRlc3RBcmdzKGN1cnJlbnRUZXN0LmFyZ3MsIHRlc3RBcmdzKVxuXG4gIGlmIChkZXNjcmlwdGlvbiBpbiBjdXJyZW50VGVzdC5zdWJzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgdGVzdCBkZXNjcmlwdGlvbjogJHtkZXNjcmlwdGlvbn1gKVxuICB9XG5cbiAgY29uc3QgbG9jYXRpb24gPSBjYXB0dXJlTG9jYXRpb24oKVxuICBjb25zdCBuZXdUZXN0RGF0YSA9IHtcbiAgICBhZnRlckVhY2hlczogW10sXG4gICAgYWZ0ZXJBbGxzOiBbXSxcbiAgICBhcmdzOiBuZXdUZXN0QXJncyxcbiAgICBiZWZvcmVBbGxzOiBbXSxcbiAgICBiZWZvcmVFYWNoZXM6IFtdLFxuICAgIGZpbGVQYXRoOiBsb2NhdGlvbi5maWxlUGF0aCxcbiAgICBsaW5lOiBsb2NhdGlvbi5saW5lLFxuICAgIHN1YnM6IHt9LFxuICAgIHRlc3RzOiB7fVxuICB9XG5cbiAgY3VycmVudFRlc3Quc3Vic1tkZXNjcmlwdGlvbl0gPSBuZXdUZXN0RGF0YVxuICBjdXJyZW50UGF0aC5wdXNoKG5ld1Rlc3REYXRhKVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgdGVzdEZ1bmN0aW9uKClcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UGF0aC5wb3AoKVxuICB9XG59XG5cbi8qKlxuICogUnVucyBleHBlY3QuXG4gKiBAcGFyYW0gez99IGFyZyAtIEFyZy5cbiAqIEByZXR1cm5zIHtFeHBlY3R9IC0gVGhlIGV4cGVjdC5cbiAqL1xuZnVuY3Rpb24gZXhwZWN0KGFyZykge1xuICByZXR1cm4gbmV3IEV4cGVjdChhcmcpXG59XG5cbmV4cGVjdC5vYmplY3RDb250YWluaW5nID0gb2JqZWN0Q29udGFpbmluZ1xuZXhwZWN0LmFycmF5Q29udGFpbmluZyA9IGFycmF5Q29udGFpbmluZ1xuXG4vKipcbiAqIFJ1bnMgaXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb24gLSBEZXNjcmlwdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fCgoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KSl9IGFyZzEgLSBBcmcxLlxuICogQHBhcmFtIHt1bmRlZmluZWR8KCgpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pKX0gW2FyZzJdIC0gQXJnMi5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaXQoZGVzY3JpcHRpb24sIGFyZzEsIGFyZzIpIHtcbiAgY29uc3QgY3VycmVudFRlc3QgPSBjdXJyZW50UGF0aFtjdXJyZW50UGF0aC5sZW5ndGggLSAxXVxuICAvKipcbiAgICogRGVmaW5lcyB0ZXN0QXJncy5cbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICBsZXQgdGVzdEFyZ3NcblxuICAvKipcbiAgICogRGVmaW5lcyB0ZXN0RnVuY3Rpb24uXG4gICAqIEB0eXBlIHsoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gKi9cbiAgbGV0IHRlc3RGdW5jdGlvblxuXG4gIGlmICh0eXBlb2YgYXJnMSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0ZXN0RnVuY3Rpb24gPSAvKiogQHR5cGUgeygpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pfSAqLyAoYXJnMSlcbiAgICB0ZXN0QXJncyA9IHt9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGFyZzIgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGVzdEZ1bmN0aW9uID0gLyoqIEB0eXBlIHsoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gKi8gKGFyZzIpXG4gICAgdGVzdEFyZ3MgPSBhcmcxXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgaXQ6ICR7ZGVzY3JpcHRpb259LCAke2FyZzF9YClcbiAgfVxuXG4gIGNvbnN0IG5ld1Rlc3RBcmdzID0gbWVyZ2VUZXN0QXJncyhjdXJyZW50VGVzdC5hcmdzLCB0ZXN0QXJncylcblxuICBjb25zdCBsb2NhdGlvbiA9IGNhcHR1cmVMb2NhdGlvbigpXG5cbiAgY3VycmVudFRlc3QudGVzdHNbZGVzY3JpcHRpb25dID0ge1xuICAgIGFyZ3M6IG5ld1Rlc3RBcmdzLFxuICAgIGZ1bmN0aW9uOiB0ZXN0RnVuY3Rpb24sXG4gICAgZmlsZVBhdGg6IGxvY2F0aW9uLmZpbGVQYXRoLFxuICAgIGxpbmU6IGxvY2F0aW9uLmxpbmVcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgZml0LlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc2NyaXB0aW9uIC0gRGVzY3JpcHRpb24uXG4gKiBAcGFyYW0ge29iamVjdHwoKCkgPT4gKHZvaWR8UHJvbWlzZTx2b2lkPikpfSBhcmcxIC0gQXJnMS5cbiAqIEBwYXJhbSB7dW5kZWZpbmVkfCgoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KSl9IFthcmcyXSAtIEFyZzIuXG4gKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGZpdChkZXNjcmlwdGlvbiwgYXJnMSwgYXJnMikge1xuICAvKipcbiAgICogRGVmaW5lcyB0ZXN0QXJncy5cbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqL1xuICBsZXQgdGVzdEFyZ3NcblxuICAvKipcbiAgICogRGVmaW5lcyB0ZXN0RnVuY3Rpb24uXG4gICAqIEB0eXBlIHsoKSA9PiAodm9pZHxQcm9taXNlPHZvaWQ+KX0gKi9cbiAgbGV0IHRlc3RGdW5jdGlvblxuXG4gIGlmICh0eXBlb2YgYXJnMSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0ZXN0RnVuY3Rpb24gPSAvKiogQHR5cGUgeygpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pfSAqLyAoYXJnMSlcbiAgICB0ZXN0QXJncyA9IHtmb2N1czogdHJ1ZX1cbiAgfSBlbHNlIGlmICh0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0ZXN0RnVuY3Rpb24gPSAvKiogQHR5cGUgeygpID0+ICh2b2lkfFByb21pc2U8dm9pZD4pfSAqLyAoYXJnMilcbiAgICB0ZXN0QXJncyA9IE9iamVjdC5hc3NpZ24oe2ZvY3VzOiB0cnVlfSwgYXJnMSlcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYXJndW1lbnRzIGZvciBpdDogJHtkZXNjcmlwdGlvbn0sICR7YXJnMX1gKVxuICB9XG5cbiAgcmV0dXJuIGl0KGRlc2NyaXB0aW9uLCB0ZXN0QXJncywgdGVzdEZ1bmN0aW9uKVxufVxuXG4vLyBNYWtlIHRoZSBtZXRob2RzIGdsb2JhbCBzbyB0aGV5IGNhbiBiZSB1c2VkIGluIHRlc3QgZmlsZXNcbmdsb2JhbFRoaXMuYWZ0ZXJFYWNoID0gYWZ0ZXJFYWNoXG5nbG9iYWxUaGlzLmFmdGVyQWxsID0gYWZ0ZXJBbGxcbmdsb2JhbFRoaXMuYmVmb3JlRWFjaCA9IGJlZm9yZUVhY2hcbmdsb2JhbFRoaXMuYmVmb3JlQWxsID0gYmVmb3JlQWxsXG5nbG9iYWxUaGlzLmRlc2NyaWJlID0gZGVzY3JpYmVcbmdsb2JhbFRoaXMuZXhwZWN0ID0gZXhwZWN0XG5nbG9iYWxUaGlzLml0ID0gaXRcbmdsb2JhbFRoaXMuZml0ID0gZml0XG5nbG9iYWxUaGlzLnRlc3RFdmVudHMgPSB0ZXN0RXZlbnRzXG5nbG9iYWxUaGlzLmNvbmZpZ3VyZVRlc3RzID0gY29uZmlndXJlVGVzdHNcblxuZXhwb3J0IHthZnRlckFsbCwgYWZ0ZXJFYWNoLCBiZWZvcmVBbGwsIGJlZm9yZUVhY2gsIGNvbmZpZ3VyZVRlc3RzLCBkZXNjcmliZSwgZXhwZWN0LCBmaXQsIGl0LCBhcnJheUNvbnRhaW5pbmcsIG9iamVjdENvbnRhaW5pbmcsIHRlc3RDb25maWcsIHRlc3RFdmVudHMsIHRlc3RzLCB3YWl0Rm9yRXZlbnR9XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"backtrace-cleaner.d.ts","sourceRoot":"","sources":["../../../src/utils/backtrace-cleaner.js"],"names":[],"mappings":"AA0GA;IAME;;;;;;;OAOG;IACH,8BANW,KAAK,SAEb;QAAkC,wBAAwB,GAAlD,MAAM,GAAG,SAAS;QACH,kBAAkB;KACzC,GAAU,MAAM,GAAG,SAAS,CAI9B;IAED;;;;;;;OAOG;IACH,uCANW,KAAK,QAEb;QAAqB,oBAAoB,EAAjC,MAAM;QACoB,wBAAwB,GAAlD,MAAM,GAAG,SAAS;KAC1B,GAAU,MAAM,GAAG,SAAS,CAI9B;IAED;;;;;OAKG;IACH,mBAJW,KAAK,iCAEb;QAAkC,wBAAwB,GAAlD,MAAM,GAAG,SAAS;KAC5B,EAIA;IAtCD;;oCAEgC;IAChC,0BADU,MAAM,GAAG,SAAS,CACQ;IAiClC,aAAkB;IAIpB;;;;;OAKG;IACH,yCAHG;QAAuB,kBAAkB;KACzC,GAAU,MAAM,GAAG,SAAS,CAe9B;IAED;;;OAGG;IACH,wBAFa,MAAM,EAAE,GAAG,SAAS,CAMhC;IAED;;;;;OAKG;IACH,mDAHG;QAAqB,oBAAoB,EAAjC,MAAM;KACd,GAAU,MAAM,GAAG,SAAS,CAe9B;IAED;;;;OAIG;IACH,wBAHW,MAAM,GAAG,SAAS,GAChB,OAAO,CAcnB;IAED;;;;OAIG;IACH,6CAHW,MAAM,GACJ,gBAAgB,GAAG,SAAS,CAkBxC;IAED;;;;OAIG;IACH,iCAHW,MAAM,GACJ,OAAO,CAMnB;IAED;;;;OAIG;IACH,2BAHW,MAAM,GACJ,OAAO,CASnB;CACF;;;;;;;;gBA3Pa,MAAM,GAAG,SAAS;;;;gBAClB,MAAM;;;;gBACN,MAAM;;;;kBACN,MAAM,GAAG,SAAS"}
1
+ {"version":3,"file":"backtrace-cleaner.d.ts","sourceRoot":"","sources":["../../../src/utils/backtrace-cleaner.js"],"names":[],"mappings":"AAyGA;IAME;;;;;;;OAOG;IACH,8BANW,KAAK,SAEb;QAAkC,wBAAwB,GAAlD,MAAM,GAAG,SAAS;QACH,kBAAkB;KACzC,GAAU,MAAM,GAAG,SAAS,CAI9B;IAED;;;;;;;OAOG;IACH,uCANW,KAAK,QAEb;QAAqB,oBAAoB,EAAjC,MAAM;QACoB,wBAAwB,GAAlD,MAAM,GAAG,SAAS;KAC1B,GAAU,MAAM,GAAG,SAAS,CAI9B;IAED;;;;;OAKG;IACH,mBAJW,KAAK,iCAEb;QAAkC,wBAAwB,GAAlD,MAAM,GAAG,SAAS;KAC5B,EAIA;IAtCD;;oCAEgC;IAChC,0BADU,MAAM,GAAG,SAAS,CACQ;IAiClC,aAAkB;IAIpB;;;;;OAKG;IACH,yCAHG;QAAuB,kBAAkB;KACzC,GAAU,MAAM,GAAG,SAAS,CAe9B;IAED;;;OAGG;IACH,wBAFa,MAAM,EAAE,GAAG,SAAS,CAMhC;IAED;;;;;OAKG;IACH,mDAHG;QAAqB,oBAAoB,EAAjC,MAAM;KACd,GAAU,MAAM,GAAG,SAAS,CAe9B;IAED;;;;OAIG;IACH,wBAHW,MAAM,GAAG,SAAS,GAChB,OAAO,CAcnB;IAED;;;;OAIG;IACH,6CAHW,MAAM,GACJ,gBAAgB,GAAG,SAAS,CAkBxC;IAED;;;;OAIG;IACH,iCAHW,MAAM,GACJ,OAAO,CAMnB;IAED;;;;OAIG;IACH,2BAHW,MAAM,GACJ,OAAO,CASnB;CACF;;;;;;;;gBArQa,MAAM,GAAG,SAAS;;;;gBAClB,MAAM;;;;gBACN,MAAM;;;;kBACN,MAAM,GAAG,SAAS"}
@@ -1,3 +1,11 @@
1
+ /**
2
+ * ParsedStackFrame type.
3
+ * @typedef {object} ParsedStackFrame
4
+ * @property {string | undefined} methodName - Method/function name from the stack frame.
5
+ * @property {string} sourcePath - File or URL path from the stack frame.
6
+ * @property {number} lineNumber - Source line number.
7
+ * @property {number | undefined} columnNumber - Source column number.
8
+ */
1
9
  // @ts-check
2
10
  /**
3
11
  * Runs escape reg exp.
@@ -7,14 +15,6 @@
7
15
  function escapeRegExp(value) {
8
16
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
9
17
  }
10
- /**
11
- * ParsedStackFrame type.
12
- * @typedef {object} ParsedStackFrame
13
- * @property {string | undefined} methodName - Method/function name from the stack frame.
14
- * @property {string} sourcePath - File or URL path from the stack frame.
15
- * @property {number} lineNumber - Source line number.
16
- * @property {number | undefined} columnNumber - Source column number.
17
- */
18
18
  /**
19
19
  * Runs normalize path.
20
20
  * @param {string | undefined} value - Path or file URL.
@@ -235,4 +235,4 @@ export default class BacktraceCleaner {
235
235
  return true;
236
236
  }
237
237
  }
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3RyYWNlLWNsZWFuZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvYmFja3RyYWNlLWNsZWFuZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7O0dBSUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxLQUFLO0lBQ3pCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUNyRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUVIOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxLQUFLO0lBQzFCLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUE7SUFFNUIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFBO0lBRXRCLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQztZQUNILFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUE7UUFDM0MsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLDhDQUE4QztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsMENBQTBDO0lBQzVDLENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxLQUFLO0lBQy9CLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUV2QyxJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU8sU0FBUyxDQUFBO0lBRWpDLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMs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eHAuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBWYWx1ZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIEVzY2FwZWQgdmFsdWUgZm9yIGEgUmVnRXhwIHBhdHRlcm4uXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFwiXFxcXCQmXCIpXG59XG5cbi8qKlxuICogUGFyc2VkU3RhY2tGcmFtZSB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gUGFyc2VkU3RhY2tGcmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCB1bmRlZmluZWR9IG1ldGhvZE5hbWUgLSBNZXRob2QvZnVuY3Rpb24gbmFtZSBmcm9tIHRoZSBzdGFjayBmcmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzb3VyY2VQYXRoIC0gRmlsZSBvciBVUkwgcGF0aCBmcm9tIHRoZSBzdGFjayBmcmFtZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsaW5lTnVtYmVyIC0gU291cmNlIGxpbmUgbnVtYmVyLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCB1bmRlZmluZWR9IGNvbHVtbk51bWJlciAtIFNvdXJjZSBjb2x1bW4gbnVtYmVyLlxuICovXG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSB2YWx1ZSAtIFBhdGggb3IgZmlsZSBVUkwuXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIE5vcm1hbGl6ZWQgcGF0aC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplUGF0aCh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgbGV0IG5vcm1hbGl6ZWQgPSB2YWx1ZVxuXG4gIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpKSB7XG4gICAgdHJ5IHtcbiAgICAgIG5vcm1hbGl6ZWQgPSBuZXcgVVJMKG5vcm1hbGl6ZWQpLnBhdGhuYW1lXG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBLZWVwIG9yaWdpbmFsIHZhbHVlIHdoZW4gVVJMIHBhcnNpbmcgZmFpbHMuXG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBub3JtYWxpemVkID0gZGVjb2RlVVJJQ29tcG9uZW50KG5vcm1hbGl6ZWQpXG4gIH0gY2F0Y2gge1xuICAgIC8vIEtlZXAgZW5jb2RlZCB2YWx1ZSB3aGVuIGRlY29kaW5nIGZhaWxzLlxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWQucmVwbGFjZSgvXFxcXC9nLCBcIi9cIilcbn1cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gdmFsdWUgLSBEaXJlY3RvcnkgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gTm9ybWFsaXplZCBkaXJlY3RvcnkgcGF0aCBlbmRpbmcgd2l0aCBzbGFzaC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0b3J5KHZhbHVlKSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRoKHZhbHVlKVxuXG4gIGlmICghbm9ybWFsaXplZCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIHJldHVybiBub3JtYWxpemVkLmVuZHNXaXRoKFwiL1wiKSA/IG5vcm1hbGl6ZWQgOiBgJHtub3JtYWxpemVkfS9gXG59XG5cbi8qKlxuICogUnVucyBwYXJzZSBzdGFjayBmcmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBsaW5lIC0gU3RhY2sgbGluZS5cbiAqIEByZXR1cm5zIHtQYXJzZWRTdGFja0ZyYW1lIHwgdW5kZWZpbmVkfSAtIFBhcnNlZCBmcmFtZSB3aGVuIHBvc3NpYmxlLlxuICovXG5mdW5jdGlvbiBwYXJzZVN0YWNrRnJhbWUobGluZSkge1xuICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKClcblxuICBpZiAoIXRyaW1tZWQuc3RhcnRzV2l0aChcImF0IFwiKSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IGZyYW1lID0gdHJpbW1lZC5zbGljZSgzKVxuICBjb25zdCBmcmFtZVdpdGhNZXRob2RNYXRjaCA9IGZyYW1lLm1hdGNoKC9eKC4qPykgXFwoKC4qKVxcKSQvKVxuICBjb25zdCBtZXRob2ROYW1lID0gZnJhbWVXaXRoTWV0aG9kTWF0Y2ggPyBmcmFtZVdpdGhNZXRob2RNYXRjaFsxXSA6IHVuZGVmaW5lZFxuICBjb25zdCBsb2NhdGlvbiA9IGZyYW1lV2l0aE1ldGhvZE1hdGNoID8gZnJhbWVXaXRoTWV0aG9kTWF0Y2hbMl0gOiBmcmFtZVxuICBjb25zdCBsb2NhdGlvbk1hdGNoID0gbG9jYXRpb24ubWF0Y2goL14oLiopOihcXGQrKTooXFxkKykkLykgfHwgbG9jYXRpb24ubWF0Y2goL14oLiopOihcXGQrKSQvKVxuXG4gIGlmICghbG9jYXRpb25NYXRjaCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IHNvdXJjZVBhdGggPSBub3JtYWxpemVQYXRoKGxvY2F0aW9uTWF0Y2hbMV0pXG4gIGNvbnN0IGxpbmVOdW1iZXIgPSBOdW1iZXIobG9jYXRpb25NYXRjaFsyXSlcbiAgY29uc3QgY29sdW1uTnVtYmVyID0gbG9jYXRpb25NYXRjaFszXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTnVtYmVyKGxvY2F0aW9uTWF0Y2hbM10pXG5cbiAgaWYgKCFzb3VyY2VQYXRoIHx8ICFOdW1iZXIuaXNGaW5pdGUobGluZU51bWJlcikpIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4ge1xuICAgIGNvbHVtbk51bWJlcjogTnVtYmVyLmlzRmluaXRlKGNvbHVtbk51bWJlcikgPyBjb2x1bW5OdW1iZXIgOiB1bmRlZmluZWQsXG4gICAgbGluZU51bWJlcixcbiAgICBtZXRob2ROYW1lLFxuICAgIHNvdXJjZVBhdGhcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgcmVsYXRpdmUgYXBwbGljYXRpb24gcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VQYXRoIC0gU291cmNlIHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwbGljYXRpb25EaXJlY3RvcnkgLSBBcHBsaWNhdGlvbiBkaXJlY3RvcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFBhdGggcmVsYXRpdmUgdG8gdGhlIGFwcGxpY2F0aW9uIGRpcmVjdG9yeSB3aGVuIHBvc3NpYmxlLlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZUFwcGxpY2F0aW9uUGF0aChzb3VyY2VQYXRoLCBhcHBsaWNhdGlvbkRpcmVjdG9yeSkge1xuICBpZiAoc291cmNlUGF0aC5zdGFydHNXaXRoKGFwcGxpY2F0aW9uRGlyZWN0b3J5KSkge1xuICAgIHJldHVybiBzb3VyY2VQYXRoLnNsaWNlKGFwcGxpY2F0aW9uRGlyZWN0b3J5Lmxlbmd0aClcbiAgfVxuXG4gIHJldHVybiBzb3VyY2VQYXRoXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhY2t0cmFjZUNsZWFuZXIge1xuICAvKipcbiAgICogRnJhbWV3b3JrIHNvdXJjZSBkaXJlY3RvcnkuXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gIGZyYW1ld29ya1NvdXJjZURpcmVjdG9yeSA9IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBjbGVhbmVkIHN0YWNrLlxuICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciAtIEVycm9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBbYXJncy5mcmFtZXdvcmtTb3VyY2VEaXJlY3RvcnldIC0gRGlyZWN0b3J5IGZvciBWZWxvY2lvdXMgaW50ZXJuYWxzIHRvIHNraXAuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuaW5jbHVkZUVycm9ySGVhZGVyXSAtIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgYEVycm9yOiAuLi5gIGhlYWRlciBsaW5lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBjbGVhbmVkIHN0YWNrLlxuICAgKi9cbiAgc3RhdGljIGdldENsZWFuZWRTdGFjayhlcnJvciwgYXJncykge1xuICAgIHJldHVybiBuZXcgQmFja3RyYWNlQ2xlYW5lcihlcnJvciwgYXJncykuZ2V0Q2xlYW5lZFN0YWNrKGFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgYXBwbGljYXRpb24gc291cmNlIGxpbmUuXG4gICAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIC0gRXJyb3IgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmFwcGxpY2F0aW9uRGlyZWN0b3J5IC0gQXBwbGljYXRpb24gZGlyZWN0b3J5LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gW2FyZ3MuZnJhbWV3b3JrU291cmNlRGlyZWN0b3J5XSAtIERpcmVjdG9yeSBmb3IgVmVsb2Npb3VzIGludGVybmFscyB0byBza2lwLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFNvdXJjZSBsaW5lIGZvciB0aGUgZmlyc3QgYXBwbGljYXRpb24gZnJhbWUuXG4gICAqL1xuICBzdGF0aWMgZ2V0QXBwbGljYXRpb25Tb3VyY2VMaW5lKGVycm9yLCBhcmdzKSB7XG4gICAgcmV0dXJuIG5ldyBCYWNrdHJhY2VDbGVhbmVyKGVycm9yLCBhcmdzKS5nZXRBcHBsaWNhdGlvblNvdXJjZUxpbmUoYXJncylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciAtIEVycm9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBbYXJncy5mcmFtZXdvcmtTb3VyY2VEaXJlY3RvcnldIC0gRGlyZWN0b3J5IGZvciBWZWxvY2lvdXMgaW50ZXJuYWxzIHRvIHNraXAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlcnJvciwge2ZyYW1ld29ya1NvdXJjZURpcmVjdG9yeX0gPSB7fSkge1xuICAgIHRoaXMuZXJyb3IgPSBlcnJvclxuICAgIHRoaXMuZnJhbWV3b3JrU291cmNlRGlyZWN0b3J5ID0gbm9ybWFsaXplRGlyZWN0b3J5KGZyYW1ld29ya1NvdXJjZURpcmVjdG9yeSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBjbGVhbmVkIHN0YWNrLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuaW5jbHVkZUVycm9ySGVhZGVyXSAtIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgYEVycm9yOiAuLi5gIGhlYWRlciBsaW5lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIFRoZSBjbGVhbmVkIHN0YWNrLlxuICAgKi9cbiAgZ2V0Q2xlYW5lZFN0YWNrKHtpbmNsdWRlRXJyb3JIZWFkZXIgPSB0cnVlfSA9IHt9KSB7XG4gICAgY29uc3QgYmFja3RyYWNlID0gdGhpcy5nZXRDbGVhbmVkU3RhY2tMaW5lcygpXG5cbiAgICBpZiAoIWJhY2t0cmFjZSB8fCBiYWNrdHJhY2UubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBpZiAoaW5jbHVkZUVycm9ySGVhZGVyKSByZXR1cm4gYmFja3RyYWNlLmpvaW4oXCJcXG5cIilcblxuICAgIGNvbnN0IGZpcnN0TGluZSA9IGJhY2t0cmFjZVswXVxuICAgIGNvbnN0IHJlbWFpbmluZ0xpbmVzID0gdGhpcy5pc0Vycm9ySGVhZGVyTGluZShmaXJzdExpbmUpID8gYmFja3RyYWNlLnNsaWNlKDEpIDogYmFja3RyYWNlXG5cbiAgICBpZiAocmVtYWluaW5nTGluZXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gcmVtYWluaW5nTGluZXMuam9pbihcIlxcblwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGNsZWFuZWQgc3RhY2sgbGluZXMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXSB8IHVuZGVmaW5lZH0gLSBGaWx0ZXJlZCBzdGFjayBsaW5lcy5cbiAgICovXG4gIGdldENsZWFuZWRTdGFja0xpbmVzKCkge1xuICAgIGNvbnN0IGJhY2t0cmFjZSA9IHRoaXMuZXJyb3I/LnN0YWNrPy5zcGxpdChcIlxcblwiKVxuXG4gICAgcmV0dXJuIGJhY2t0cmFjZT8uZmlsdGVyKChsaW5lKSA9PiB0aGlzLl9zaG91bGRLZWVwU3RhY2tMaW5lKGxpbmUpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGFwcGxpY2F0aW9uIHNvdXJjZSBsaW5lLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5hcHBsaWNhdGlvbkRpcmVjdG9yeSAtIEFwcGxpY2F0aW9uIGRpcmVjdG9yeS5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBTb3VyY2UgbGluZSBmb3IgdGhlIGZpcnN0IGFwcGxpY2F0aW9uIGZyYW1lLlxuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25Tb3VyY2VMaW5lKHthcHBsaWNhdGlvbkRpcmVjdG9yeX0pIHtcbiAgICBjb25zdCBub3JtYWxpemVkQXBwbGljYXRpb25EaXJlY3RvcnkgPSBub3JtYWxpemVEaXJlY3RvcnkoYXBwbGljYXRpb25EaXJlY3RvcnkpXG5cbiAgICBpZiAoIW5vcm1hbGl6ZWRBcHBsaWNhdGlvbkRpcmVjdG9yeSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgZnJhbWUgPSB0aGlzLl9maXJzdEFwcGxpY2F0aW9uRnJhbWUobm9ybWFsaXplZEFwcGxpY2F0aW9uRGlyZWN0b3J5KVxuXG4gICAgaWYgKCFmcmFtZSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmVBcHBsaWNhdGlvblBhdGgoZnJhbWUuc291cmNlUGF0aCwgbm9ybWFsaXplZEFwcGxpY2F0aW9uRGlyZWN0b3J5KVxuICAgIGNvbnN0IG1ldGhvZFN1ZmZpeCA9IGZyYW1lLm1ldGhvZE5hbWUgPyBgOmluICR7ZnJhbWUubWV0aG9kTmFtZS5yZXBsYWNlKC9eYXN5bmMgLywgXCJcIil9YCA6IFwiXCJcblxuICAgIHJldHVybiBgJHtyZWxhdGl2ZVBhdGh9OiR7ZnJhbWUubGluZU51bWJlcn0ke21ldGhvZFN1ZmZpeH1gXG4gIH1cblxuICAvKipcbiAgICogUnVucyBpcyBlcnJvciBoZWFkZXIgbGluZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IGxpbmUgLSBCYWNrdHJhY2UgbGluZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gVHJ1ZSB3aGVuIHRoZSBsaW5lIGlzIGFuIGVycm9yIGhlYWRlci5cbiAgICovXG4gIGlzRXJyb3JIZWFkZXJMaW5lKGxpbmUpIHtcbiAgICBpZiAoIWxpbmUpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3QgdHJpbW1lZExpbmUgPSBsaW5lLnRyaW0oKVxuXG4gICAgaWYgKCF0cmltbWVkTGluZSkgcmV0dXJuIGZhbHNlXG5cbiAgICBpZiAodHJpbW1lZExpbmUuc3RhcnRzV2l0aChcIkVycm9yOlwiKSkgcmV0dXJuIHRydWVcblxuICAgIGNvbnN0IGVycm9yTmFtZVBhdHRlcm4gPSBuZXcgUmVnRXhwKGBeJHtlc2NhcGVSZWdFeHAodGhpcy5lcnJvci5uYW1lKX0oPzpcXFxccypcXFxcW1teXFxcXF1dK1xcXFxdKT86YClcblxuICAgIHJldHVybiBlcnJvck5hbWVQYXR0ZXJuLnRlc3QodHJpbW1lZExpbmUpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBmaXJzdCBhcHBsaWNhdGlvbiBmcmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGxpY2F0aW9uRGlyZWN0b3J5IC0gTm9ybWFsaXplZCBhcHBsaWNhdGlvbiBkaXJlY3RvcnkuXG4gICAqIEByZXR1cm5zIHtQYXJzZWRTdGFja0ZyYW1lIHwgdW5kZWZpbmVkfSAtIEZpcnN0IGFwcC1vd25lZCBmcmFtZS5cbiAgICovXG4gIF9maXJzdEFwcGxpY2F0aW9uRnJhbWUoYXBwbGljYXRpb25EaXJlY3RvcnkpIHtcbiAgICBjb25zdCBiYWNrdHJhY2UgPSB0aGlzLmdldENsZWFuZWRTdGFja0xpbmVzKClcblxuICAgIGlmICghYmFja3RyYWNlKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmFja3RyYWNlKSB7XG4gICAgICBjb25zdCBmcmFtZSA9IHBhcnNlU3RhY2tGcmFtZShsaW5lKVxuXG4gICAgICBpZiAoIWZyYW1lKSBjb250aW51ZVxuICAgICAgaWYgKCFmcmFtZS5zb3VyY2VQYXRoLnN0YXJ0c1dpdGgoYXBwbGljYXRpb25EaXJlY3RvcnkpKSBjb250aW51ZVxuICAgICAgaWYgKHRoaXMuX2ZyYW1ld29ya1NvdXJjZVBhdGgoZnJhbWUuc291cmNlUGF0aCkpIGNvbnRpbnVlXG5cbiAgICAgIHJldHVybiBmcmFtZVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGZyYW1ld29yayBzb3VyY2UgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVBhdGggLSBTb3VyY2UgcGF0aC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0aGUgcGF0aCBiZWxvbmdzIHRvIFZlbG9jaW91cyBpbnRlcm5hbHMuXG4gICAqL1xuICBfZnJhbWV3b3JrU291cmNlUGF0aChzb3VyY2VQYXRoKSB7XG4gICAgaWYgKCF0aGlzLmZyYW1ld29ya1NvdXJjZURpcmVjdG9yeSkgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gc291cmNlUGF0aC5zdGFydHNXaXRoKHRoaXMuZnJhbWV3b3JrU291cmNlRGlyZWN0b3J5KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2hvdWxkIGtlZXAgc3RhY2sgbGluZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGxpbmUgLSBTdGFjayBsaW5lLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRvIGtlZXAgdGhlIHN0YWNrIGxpbmUuXG4gICAqL1xuICBfc2hvdWxkS2VlcFN0YWNrTGluZShsaW5lKSB7XG4gICAgaWYgKGxpbmUuaW5jbHVkZXMoXCJub2RlX21vZHVsZXNcIikpIHJldHVybiBmYWxzZVxuICAgIGlmIChsaW5lLmluY2x1ZGVzKFwiKG5vZGU6aW50ZXJuYWwvXCIpKSByZXR1cm4gZmFsc2VcbiAgICBpZiAobGluZS5pbmNsdWRlcyhcIihub2RlOmludGVybmFsL3Byb2Nlc3MvXCIpKSByZXR1cm4gZmFsc2VcbiAgICBpZiAobGluZS50cmltKCkuc3RhcnRzV2l0aChcImF0IG5vZGU6aW50ZXJuYWwvXCIpKSByZXR1cm4gZmFsc2VcblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cbiJdfQ==
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3RyYWNlLWNsZWFuZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvYmFja3RyYWNlLWNsZWFuZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILFlBQVk7QUFFWjs7OztHQUlHO0FBQ0gsU0FBUyxZQUFZLENBQUMsS0FBSztJQUN6QixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDckQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxLQUFLO0lBQzFCLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUE7SUFFNUIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFBO0lBRXRCLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQztZQUNILFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUE7UUFDM0MsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLDhDQUE4QztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsMENBQTBDO0lBQzVDLENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ3ZDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxLQUFLO0lBQy9CLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUV2QyxJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU8sU0FBUyxDQUFBO0lBRWpDLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMs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ZWYge29iamVjdH0gUGFyc2VkU3RhY2tGcmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmcgfCB1bmRlZmluZWR9IG1ldGhvZE5hbWUgLSBNZXRob2QvZnVuY3Rpb24gbmFtZSBmcm9tIHRoZSBzdGFjayBmcmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzb3VyY2VQYXRoIC0gRmlsZSBvciBVUkwgcGF0aCBmcm9tIHRoZSBzdGFjayBmcmFtZS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsaW5lTnVtYmVyIC0gU291cmNlIGxpbmUgbnVtYmVyLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCB1bmRlZmluZWR9IGNvbHVtbk51bWJlciAtIFNvdXJjZSBjb2x1bW4gbnVtYmVyLlxuICovXG4vLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBSdW5zIGVzY2FwZSByZWcgZXhwLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gVmFsdWUgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gLSBFc2NhcGVkIHZhbHVlIGZvciBhIFJlZ0V4cCBwYXR0ZXJuLlxuICovXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKVxufVxuXG4vKipcbiAqIFJ1bnMgbm9ybWFsaXplIHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gdmFsdWUgLSBQYXRoIG9yIGZpbGUgVVJMLlxuICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBOb3JtYWxpemVkIHBhdGguXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGxldCBub3JtYWxpemVkID0gdmFsdWVcblxuICBpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKFwiZmlsZTovL1wiKSkge1xuICAgIHRyeSB7XG4gICAgICBub3JtYWxpemVkID0gbmV3IFVSTChub3JtYWxpemVkKS5wYXRobmFtZVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gS2VlcCBvcmlnaW5hbCB2YWx1ZSB3aGVuIFVSTCBwYXJzaW5nIGZhaWxzLlxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgbm9ybWFsaXplZCA9IGRlY29kZVVSSUNvbXBvbmVudChub3JtYWxpemVkKVxuICB9IGNhdGNoIHtcbiAgICAvLyBLZWVwIGVuY29kZWQgdmFsdWUgd2hlbiBkZWNvZGluZyBmYWlscy5cbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVkLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpXG59XG5cbi8qKlxuICogUnVucyBub3JtYWxpemUgZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IHZhbHVlIC0gRGlyZWN0b3J5IHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSAtIE5vcm1hbGl6ZWQgZGlyZWN0b3J5IHBhdGggZW5kaW5nIHdpdGggc2xhc2guXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdG9yeSh2YWx1ZSkge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUGF0aCh2YWx1ZSlcblxuICBpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4gbm9ybWFsaXplZC5lbmRzV2l0aChcIi9cIikgPyBub3JtYWxpemVkIDogYCR7bm9ybWFsaXplZH0vYFxufVxuXG4vKipcbiAqIFJ1bnMgcGFyc2Ugc3RhY2sgZnJhbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGluZSAtIFN0YWNrIGxpbmUuXG4gKiBAcmV0dXJucyB7UGFyc2VkU3RhY2tGcmFtZSB8IHVuZGVmaW5lZH0gLSBQYXJzZWQgZnJhbWUgd2hlbiBwb3NzaWJsZS5cbiAqL1xuZnVuY3Rpb24gcGFyc2VTdGFja0ZyYW1lKGxpbmUpIHtcbiAgY29uc3QgdHJpbW1lZCA9IGxpbmUudHJpbSgpXG5cbiAgaWYgKCF0cmltbWVkLnN0YXJ0c1dpdGgoXCJhdCBcIikpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCBmcmFtZSA9IHRyaW1tZWQuc2xpY2UoMylcbiAgY29uc3QgZnJhbWVXaXRoTWV0aG9kTWF0Y2ggPSBmcmFtZS5tYXRjaCgvXiguKj8pIFxcKCguKilcXCkkLylcbiAgY29uc3QgbWV0aG9kTmFtZSA9IGZyYW1lV2l0aE1ldGhvZE1hdGNoID8gZnJhbWVXaXRoTWV0aG9kTWF0Y2hbMV0gOiB1bmRlZmluZWRcbiAgY29uc3QgbG9jYXRpb24gPSBmcmFtZVdpdGhNZXRob2RNYXRjaCA/IGZyYW1lV2l0aE1ldGhvZE1hdGNoWzJdIDogZnJhbWVcbiAgY29uc3QgbG9jYXRpb25NYXRjaCA9IGxvY2F0aW9uLm1hdGNoKC9eKC4qKTooXFxkKyk6KFxcZCspJC8pIHx8IGxvY2F0aW9uLm1hdGNoKC9eKC4qKTooXFxkKykkLylcblxuICBpZiAoIWxvY2F0aW9uTWF0Y2gpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCBzb3VyY2VQYXRoID0gbm9ybWFsaXplUGF0aChsb2NhdGlvbk1hdGNoWzFdKVxuICBjb25zdCBsaW5lTnVtYmVyID0gTnVtYmVyKGxvY2F0aW9uTWF0Y2hbMl0pXG4gIGNvbnN0IGNvbHVtbk51bWJlciA9IGxvY2F0aW9uTWF0Y2hbM10gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IE51bWJlcihsb2NhdGlvbk1hdGNoWzNdKVxuXG4gIGlmICghc291cmNlUGF0aCB8fCAhTnVtYmVyLmlzRmluaXRlKGxpbmVOdW1iZXIpKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICBjb2x1bW5OdW1iZXI6IE51bWJlci5pc0Zpbml0ZShjb2x1bW5OdW1iZXIpID8gY29sdW1uTnVtYmVyIDogdW5kZWZpbmVkLFxuICAgIGxpbmVOdW1iZXIsXG4gICAgbWV0aG9kTmFtZSxcbiAgICBzb3VyY2VQYXRoXG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIHJlbGF0aXZlIGFwcGxpY2F0aW9uIHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlUGF0aCAtIFNvdXJjZSBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IGFwcGxpY2F0aW9uRGlyZWN0b3J5IC0gQXBwbGljYXRpb24gZGlyZWN0b3J5LlxuICogQHJldHVybnMge3N0cmluZ30gLSBQYXRoIHJlbGF0aXZlIHRvIHRoZSBhcHBsaWNhdGlvbiBkaXJlY3Rvcnkgd2hlbiBwb3NzaWJsZS5cbiAqL1xuZnVuY3Rpb24gcmVsYXRpdmVBcHBsaWNhdGlvblBhdGgoc291cmNlUGF0aCwgYXBwbGljYXRpb25EaXJlY3RvcnkpIHtcbiAgaWYgKHNvdXJjZVBhdGguc3RhcnRzV2l0aChhcHBsaWNhdGlvbkRpcmVjdG9yeSkpIHtcbiAgICByZXR1cm4gc291cmNlUGF0aC5zbGljZShhcHBsaWNhdGlvbkRpcmVjdG9yeS5sZW5ndGgpXG4gIH1cblxuICByZXR1cm4gc291cmNlUGF0aFxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCYWNrdHJhY2VDbGVhbmVyIHtcbiAgLyoqXG4gICAqIEZyYW1ld29yayBzb3VyY2UgZGlyZWN0b3J5LlxuICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICBmcmFtZXdvcmtTb3VyY2VEaXJlY3RvcnkgPSB1bmRlZmluZWRcblxuICAvKipcbiAgICogUnVucyBnZXQgY2xlYW5lZCBzdGFjay5cbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBFcnJvciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gW2FyZ3MuZnJhbWV3b3JrU291cmNlRGlyZWN0b3J5XSAtIERpcmVjdG9yeSBmb3IgVmVsb2Npb3VzIGludGVybmFscyB0byBza2lwLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluY2x1ZGVFcnJvckhlYWRlcl0gLSBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGBFcnJvcjogLi4uYCBoZWFkZXIgbGluZS5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgY2xlYW5lZCBzdGFjay5cbiAgICovXG4gIHN0YXRpYyBnZXRDbGVhbmVkU3RhY2soZXJyb3IsIGFyZ3MpIHtcbiAgICByZXR1cm4gbmV3IEJhY2t0cmFjZUNsZWFuZXIoZXJyb3IsIGFyZ3MpLmdldENsZWFuZWRTdGFjayhhcmdzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGFwcGxpY2F0aW9uIHNvdXJjZSBsaW5lLlxuICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciAtIEVycm9yIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5hcHBsaWNhdGlvbkRpcmVjdG9yeSAtIEFwcGxpY2F0aW9uIGRpcmVjdG9yeS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IFthcmdzLmZyYW1ld29ya1NvdXJjZURpcmVjdG9yeV0gLSBEaXJlY3RvcnkgZm9yIFZlbG9jaW91cyBpbnRlcm5hbHMgdG8gc2tpcC5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBTb3VyY2UgbGluZSBmb3IgdGhlIGZpcnN0IGFwcGxpY2F0aW9uIGZyYW1lLlxuICAgKi9cbiAgc3RhdGljIGdldEFwcGxpY2F0aW9uU291cmNlTGluZShlcnJvciwgYXJncykge1xuICAgIHJldHVybiBuZXcgQmFja3RyYWNlQ2xlYW5lcihlcnJvciwgYXJncykuZ2V0QXBwbGljYXRpb25Tb3VyY2VMaW5lKGFyZ3MpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBFcnJvciBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gW2FyZ3MuZnJhbWV3b3JrU291cmNlRGlyZWN0b3J5XSAtIERpcmVjdG9yeSBmb3IgVmVsb2Npb3VzIGludGVybmFscyB0byBza2lwLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZXJyb3IsIHtmcmFtZXdvcmtTb3VyY2VEaXJlY3Rvcnl9ID0ge30pIHtcbiAgICB0aGlzLmVycm9yID0gZXJyb3JcbiAgICB0aGlzLmZyYW1ld29ya1NvdXJjZURpcmVjdG9yeSA9IG5vcm1hbGl6ZURpcmVjdG9yeShmcmFtZXdvcmtTb3VyY2VEaXJlY3RvcnkpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgY2xlYW5lZCBzdGFjay5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluY2x1ZGVFcnJvckhlYWRlcl0gLSBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGBFcnJvcjogLi4uYCBoZWFkZXIgbGluZS5cbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gLSBUaGUgY2xlYW5lZCBzdGFjay5cbiAgICovXG4gIGdldENsZWFuZWRTdGFjayh7aW5jbHVkZUVycm9ySGVhZGVyID0gdHJ1ZX0gPSB7fSkge1xuICAgIGNvbnN0IGJhY2t0cmFjZSA9IHRoaXMuZ2V0Q2xlYW5lZFN0YWNrTGluZXMoKVxuXG4gICAgaWYgKCFiYWNrdHJhY2UgfHwgYmFja3RyYWNlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgaWYgKGluY2x1ZGVFcnJvckhlYWRlcikgcmV0dXJuIGJhY2t0cmFjZS5qb2luKFwiXFxuXCIpXG5cbiAgICBjb25zdCBmaXJzdExpbmUgPSBiYWNrdHJhY2VbMF1cbiAgICBjb25zdCByZW1haW5pbmdMaW5lcyA9IHRoaXMuaXNFcnJvckhlYWRlckxpbmUoZmlyc3RMaW5lKSA/IGJhY2t0cmFjZS5zbGljZSgxKSA6IGJhY2t0cmFjZVxuXG4gICAgaWYgKHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgcmV0dXJuIHJlbWFpbmluZ0xpbmVzLmpvaW4oXCJcXG5cIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBjbGVhbmVkIHN0YWNrIGxpbmVzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW10gfCB1bmRlZmluZWR9IC0gRmlsdGVyZWQgc3RhY2sgbGluZXMuXG4gICAqL1xuICBnZXRDbGVhbmVkU3RhY2tMaW5lcygpIHtcbiAgICBjb25zdCBiYWNrdHJhY2UgPSB0aGlzLmVycm9yPy5zdGFjaz8uc3BsaXQoXCJcXG5cIilcblxuICAgIHJldHVybiBiYWNrdHJhY2U/LmZpbHRlcigobGluZSkgPT4gdGhpcy5fc2hvdWxkS2VlcFN0YWNrTGluZShsaW5lKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBhcHBsaWNhdGlvbiBzb3VyY2UgbGluZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuYXBwbGljYXRpb25EaXJlY3RvcnkgLSBBcHBsaWNhdGlvbiBkaXJlY3RvcnkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gU291cmNlIGxpbmUgZm9yIHRoZSBmaXJzdCBhcHBsaWNhdGlvbiBmcmFtZS5cbiAgICovXG4gIGdldEFwcGxpY2F0aW9uU291cmNlTGluZSh7YXBwbGljYXRpb25EaXJlY3Rvcnl9KSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEFwcGxpY2F0aW9uRGlyZWN0b3J5ID0gbm9ybWFsaXplRGlyZWN0b3J5KGFwcGxpY2F0aW9uRGlyZWN0b3J5KVxuXG4gICAgaWYgKCFub3JtYWxpemVkQXBwbGljYXRpb25EaXJlY3RvcnkpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGZyYW1lID0gdGhpcy5fZmlyc3RBcHBsaWNhdGlvbkZyYW1lKG5vcm1hbGl6ZWRBcHBsaWNhdGlvbkRpcmVjdG9yeSlcblxuICAgIGlmICghZnJhbWUpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlQXBwbGljYXRpb25QYXRoKGZyYW1lLnNvdXJjZVBhdGgsIG5vcm1hbGl6ZWRBcHBsaWNhdGlvbkRpcmVjdG9yeSlcbiAgICBjb25zdCBtZXRob2RTdWZmaXggPSBmcmFtZS5tZXRob2ROYW1lID8gYDppbiAke2ZyYW1lLm1ldGhvZE5hbWUucmVwbGFjZSgvXmFzeW5jIC8sIFwiXCIpfWAgOiBcIlwiXG5cbiAgICByZXR1cm4gYCR7cmVsYXRpdmVQYXRofToke2ZyYW1lLmxpbmVOdW1iZXJ9JHttZXRob2RTdWZmaXh9YFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgaXMgZXJyb3IgaGVhZGVyIGxpbmUuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBsaW5lIC0gQmFja3RyYWNlIGxpbmUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFRydWUgd2hlbiB0aGUgbGluZSBpcyBhbiBlcnJvciBoZWFkZXIuXG4gICAqL1xuICBpc0Vycm9ySGVhZGVyTGluZShsaW5lKSB7XG4gICAgaWYgKCFsaW5lKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKClcblxuICAgIGlmICghdHJpbW1lZExpbmUpIHJldHVybiBmYWxzZVxuXG4gICAgaWYgKHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoXCJFcnJvcjpcIikpIHJldHVybiB0cnVlXG5cbiAgICBjb25zdCBlcnJvck5hbWVQYXR0ZXJuID0gbmV3IFJlZ0V4cChgXiR7ZXNjYXBlUmVnRXhwKHRoaXMuZXJyb3IubmFtZSl9KD86XFxcXHMqXFxcXFtbXlxcXFxdXStcXFxcXSk/OmApXG5cbiAgICByZXR1cm4gZXJyb3JOYW1lUGF0dGVybi50ZXN0KHRyaW1tZWRMaW5lKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZmlyc3QgYXBwbGljYXRpb24gZnJhbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBsaWNhdGlvbkRpcmVjdG9yeSAtIE5vcm1hbGl6ZWQgYXBwbGljYXRpb24gZGlyZWN0b3J5LlxuICAgKiBAcmV0dXJucyB7UGFyc2VkU3RhY2tGcmFtZSB8IHVuZGVmaW5lZH0gLSBGaXJzdCBhcHAtb3duZWQgZnJhbWUuXG4gICAqL1xuICBfZmlyc3RBcHBsaWNhdGlvbkZyYW1lKGFwcGxpY2F0aW9uRGlyZWN0b3J5KSB7XG4gICAgY29uc3QgYmFja3RyYWNlID0gdGhpcy5nZXRDbGVhbmVkU3RhY2tMaW5lcygpXG5cbiAgICBpZiAoIWJhY2t0cmFjZSkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGJhY2t0cmFjZSkge1xuICAgICAgY29uc3QgZnJhbWUgPSBwYXJzZVN0YWNrRnJhbWUobGluZSlcblxuICAgICAgaWYgKCFmcmFtZSkgY29udGludWVcbiAgICAgIGlmICghZnJhbWUuc291cmNlUGF0aC5zdGFydHNXaXRoKGFwcGxpY2F0aW9uRGlyZWN0b3J5KSkgY29udGludWVcbiAgICAgIGlmICh0aGlzLl9mcmFtZXdvcmtTb3VyY2VQYXRoKGZyYW1lLnNvdXJjZVBhdGgpKSBjb250aW51ZVxuXG4gICAgICByZXR1cm4gZnJhbWVcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogUnVucyBmcmFtZXdvcmsgc291cmNlIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VQYXRoIC0gU291cmNlIHBhdGguXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIFdoZXRoZXIgdGhlIHBhdGggYmVsb25ncyB0byBWZWxvY2lvdXMgaW50ZXJuYWxzLlxuICAgKi9cbiAgX2ZyYW1ld29ya1NvdXJjZVBhdGgoc291cmNlUGF0aCkge1xuICAgIGlmICghdGhpcy5mcmFtZXdvcmtTb3VyY2VEaXJlY3RvcnkpIHJldHVybiBmYWxzZVxuXG4gICAgcmV0dXJuIHNvdXJjZVBhdGguc3RhcnRzV2l0aCh0aGlzLmZyYW1ld29ya1NvdXJjZURpcmVjdG9yeSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNob3VsZCBrZWVwIHN0YWNrIGxpbmUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsaW5lIC0gU3RhY2sgbGluZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciB0byBrZWVwIHRoZSBzdGFjayBsaW5lLlxuICAgKi9cbiAgX3Nob3VsZEtlZXBTdGFja0xpbmUobGluZSkge1xuICAgIGlmIChsaW5lLmluY2x1ZGVzKFwibm9kZV9tb2R1bGVzXCIpKSByZXR1cm4gZmFsc2VcbiAgICBpZiAobGluZS5pbmNsdWRlcyhcIihub2RlOmludGVybmFsL1wiKSkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGxpbmUuaW5jbHVkZXMoXCIobm9kZTppbnRlcm5hbC9wcm9jZXNzL1wiKSkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoXCJhdCBub2RlOmludGVybmFsL1wiKSkgcmV0dXJuIGZhbHNlXG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG4iXX0=
@@ -1,11 +1,3 @@
1
- /**
2
- * ModelScopeDescriptor type.
3
- * @typedef {object} ModelScopeDescriptor
4
- * @property {true} [velociousModelScopeDescriptor] - Internal marker.
5
- * @property {(...args: Array<?>) => ?} callback - Scope callback.
6
- * @property {typeof import("../database/record/index.js").default | import("../frontend-models/base.js").FrontendModelClass} modelClass - Owning model class.
7
- * @property {Array<?>} scopeArgs - Scope arguments.
8
- */
9
1
  /**
10
2
  * Runs the defineModelScope helper.
11
3
  * @param {object} args - Definition arguments.
@@ -1 +1 @@
1
- {"version":3,"file":"model-scope.d.ts","sourceRoot":"","sources":["../../../src/utils/model-scope.js"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH;;;;;;;GAOG;AACH,uEALG;IAAuC,QAAQ,EAAvC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC;IAC6F,UAAU,EAA/H,cAAc,6BAA6B,EAAE,OAAO,GAAG,OAAO,4BAA4B,EAAE,kBAAkB;IAChG,UAAU,EAAxB,MAAM,OAAC;CACf,GAAU,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC,CAAC,GAAG;IAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,oBAAoB,CAAA;CAAC,CAyB7F;AAED;;;;GAIG;AACH,8CAHW,OAAC,GACC,KAAK,IAAI,oBAAoB,CAIzC;;;;;;;;;;;;cA7Ca,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC;;;;gBACxB,cAAc,6BAA6B,EAAE,OAAO,GAAG,OAAO,4BAA4B,EAAE,kBAAkB;;;;eAC9G,KAAK,CAAC,OAAC,CAAC"}
1
+ {"version":3,"file":"model-scope.d.ts","sourceRoot":"","sources":["../../../src/utils/model-scope.js"],"names":[],"mappings":"AAYA;;;;;;;GAOG;AACH,uEALG;IAAuC,QAAQ,EAAvC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC;IAC6F,UAAU,EAA/H,cAAc,6BAA6B,EAAE,OAAO,GAAG,OAAO,4BAA4B,EAAE,kBAAkB;IAChG,UAAU,EAAxB,MAAM,OAAC;CACf,GAAU,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC,CAAC,GAAG;IAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,oBAAoB,CAAA;CAAC,CAyB7F;AAED;;;;GAIG;AACH,8CAHW,OAAC,GACC,KAAK,IAAI,oBAAoB,CAIzC;;;;;;;;;;;;cAhDa,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAC,CAAC,KAAK,OAAC;;;;gBACxB,cAAc,6BAA6B,EAAE,OAAO,GAAG,OAAO,4BAA4B,EAAE,kBAAkB;;;;eAC9G,KAAK,CAAC,OAAC,CAAC"}
@@ -1,5 +1,3 @@
1
- // @ts-check
2
- const MODEL_SCOPE_DESCRIPTOR_MARKER = "velociousModelScopeDescriptor";
3
1
  /**
4
2
  * ModelScopeDescriptor type.
5
3
  * @typedef {object} ModelScopeDescriptor
@@ -8,6 +6,8 @@ const MODEL_SCOPE_DESCRIPTOR_MARKER = "velociousModelScopeDescriptor";
8
6
  * @property {typeof import("../database/record/index.js").default | import("../frontend-models/base.js").FrontendModelClass} modelClass - Owning model class.
9
7
  * @property {Array<?>} scopeArgs - Scope arguments.
10
8
  */
9
+ // @ts-check
10
+ const MODEL_SCOPE_DESCRIPTOR_MARKER = "velociousModelScopeDescriptor";
11
11
  /**
12
12
  * Runs the defineModelScope helper.
13
13
  * @param {object} args - Definition arguments.
@@ -46,4 +46,4 @@ export function defineModelScope({ callback, modelClass, startQuery }) {
46
46
  export function isModelScopeDescriptor(value) {
47
47
  return Boolean(value && typeof value === "object" && /** @type {Record<string, ?>} */ (value)[MODEL_SCOPE_DESCRIPTOR_MARKER] === true);
48
48
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvbW9kZWwtc2NvcGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE1BQU0sNkJBQTZCLEdBQUcsK0JBQStCLENBQUE7QUFFckU7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQztJQUNqRTs7OztPQUlHO0lBQ0gsU0FBUyxZQUFZLENBQUMsR0FBRyxTQUFTO1FBQ2hDLE9BQU8sVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsNkJBQTZCLENBQUMsRUFBRSxJQUFJO1FBQ3JDLFFBQVE7UUFDUixVQUFVO1FBQ1YsU0FBUztLQUNWLENBQUMsQ0FBQTtJQUVGLE9BQU8sWUFBWSxDQUFBO0FBQ3JCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEtBQUs7SUFDMUMsT0FBTyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxnQ0FBZ0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLDZCQUE2QixDQUFDLEtBQUssSUFBSSxDQUFDLENBQUE7QUFDeEksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5jb25zdCBNT0RFTF9TQ09QRV9ERVNDUklQVE9SX01BUktFUiA9IFwidmVsb2Npb3VzTW9kZWxTY29wZURlc2NyaXB0b3JcIlxuXG4vKipcbiAqIE1vZGVsU2NvcGVEZXNjcmlwdG9yIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBNb2RlbFNjb3BlRGVzY3JpcHRvclxuICogQHByb3BlcnR5IHt0cnVlfSBbdmVsb2Npb3VzTW9kZWxTY29wZURlc2NyaXB0b3JdIC0gSW50ZXJuYWwgbWFya2VyLlxuICogQHByb3BlcnR5IHsoLi4uYXJnczogQXJyYXk8Pz4pID0+ID99IGNhbGxiYWNrIC0gU2NvcGUgY2FsbGJhY2suXG4gKiBAcHJvcGVydHkge3R5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxDbGFzc30gbW9kZWxDbGFzcyAtIE93bmluZyBtb2RlbCBjbGFzcy5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8Pz59IHNjb3BlQXJncyAtIFNjb3BlIGFyZ3VtZW50cy5cbiAqL1xuXG4vKipcbiAqIFJ1bnMgdGhlIGRlZmluZU1vZGVsU2NvcGUgaGVscGVyLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBEZWZpbml0aW9uIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7KC4uLmFyZ3M6IEFycmF5PD8+KSA9PiA/fSBhcmdzLmNhbGxiYWNrIC0gU2NvcGUgY2FsbGJhY2suXG4gKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9kYXRhYmFzZS9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4uL2Zyb250ZW5kLW1vZGVscy9iYXNlLmpzXCIpLkZyb250ZW5kTW9kZWxDbGFzc30gYXJncy5tb2RlbENsYXNzIC0gT3duaW5nIG1vZGVsIGNsYXNzLlxuICogQHBhcmFtIHsoKSA9PiA/fSBhcmdzLnN0YXJ0UXVlcnkgLSBGYWN0b3J5IHRoYXQgcmV0dXJucyBhIGZyZXNoIHF1ZXJ5IGZvciB0aGUgb3duaW5nIG1vZGVsIGNsYXNzLlxuICogQHJldHVybnMgeygoLi4uYXJnczogQXJyYXk8Pz4pID0+ID8pICYge3Njb3BlOiAoLi4uYXJnczogQXJyYXk8Pz4pID0+IE1vZGVsU2NvcGVEZXNjcmlwdG9yfX0gLSBTY29wZSBoZWxwZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVNb2RlbFNjb3BlKHtjYWxsYmFjaywgbW9kZWxDbGFzcywgc3RhcnRRdWVyeX0pIHtcbiAgLyoqXG4gICAqIFJ1bnMgZGVmaW5lZCBzY29wZS5cbiAgICogQHBhcmFtIHsuLi4/fSBzY29wZUFyZ3MgLSBTY29wZSBhcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHs/fSAtIFNjb3BlZCByb290IHF1ZXJ5LlxuICAgKi9cbiAgZnVuY3Rpb24gZGVmaW5lZFNjb3BlKC4uLnNjb3BlQXJncykge1xuICAgIHJldHVybiBzdGFydFF1ZXJ5KCkuc2NvcGUoZGVmaW5lZFNjb3BlLnNjb3BlKC4uLnNjb3BlQXJncykpXG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgcmV1c2FibGUgc2NvcGUgZGVzY3JpcHRvci5cbiAgICogQHBhcmFtIHsuLi4/fSBzY29wZUFyZ3MgLSBTY29wZSBhcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHtNb2RlbFNjb3BlRGVzY3JpcHRvcn0gLSBSZXVzYWJsZSBzY29wZSBkZXNjcmlwdG9yLlxuICAgKi9cbiAgZGVmaW5lZFNjb3BlLnNjb3BlID0gKC4uLnNjb3BlQXJncykgPT4gKHtcbiAgICBbTU9ERUxfU0NPUEVfREVTQ1JJUFRPUl9NQVJLRVJdOiB0cnVlLFxuICAgIGNhbGxiYWNrLFxuICAgIG1vZGVsQ2xhc3MsXG4gICAgc2NvcGVBcmdzXG4gIH0pXG5cbiAgcmV0dXJuIGRlZmluZWRTY29wZVxufVxuXG4vKipcbiAqIFJ1bnMgdGhlIGlzTW9kZWxTY29wZURlc2NyaXB0b3IgaGVscGVyLlxuICogQHBhcmFtIHs/fSB2YWx1ZSAtIENhbmRpZGF0ZSBkZXNjcmlwdG9yLlxuICogQHJldHVybnMge3ZhbHVlIGlzIE1vZGVsU2NvcGVEZXNjcmlwdG9yfSAtIFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgc2NvcGUgZGVzY3JpcHRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTW9kZWxTY29wZURlc2NyaXB0b3IodmFsdWUpIHtcbiAgcmV0dXJuIEJvb2xlYW4odmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgPz59ICovICh2YWx1ZSlbTU9ERUxfU0NPUEVfREVTQ1JJUFRPUl9NQVJLRVJdID09PSB0cnVlKVxufVxuIl19
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvbW9kZWwtc2NvcGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILFlBQVk7QUFFWixNQUFNLDZCQUE2QixHQUFHLCtCQUErQixDQUFBO0FBRXJFOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQztJQUNqRTs7OztPQUlHO0lBQ0gsU0FBUyxZQUFZLENBQUMsR0FBRyxTQUFTO1FBQ2hDLE9BQU8sVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsNkJBQTZCLENBQUMsRUFBRSxJQUFJO1FBQ3JDLFFBQVE7UUFDUixVQUFVO1FBQ1YsU0FBUztLQUNWLENBQUMsQ0FBQTtJQUVGLE9BQU8sWUFBWSxDQUFBO0FBQ3JCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEtBQUs7SUFDMUMsT0FBTyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxnQ0FBZ0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLDZCQUE2QixDQUFDLEtBQUssSUFBSSxDQUFDLENBQUE7QUFDeEksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kZWxTY29wZURlc2NyaXB0b3IgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IE1vZGVsU2NvcGVEZXNjcmlwdG9yXG4gKiBAcHJvcGVydHkge3RydWV9IFt2ZWxvY2lvdXNNb2RlbFNjb3BlRGVzY3JpcHRvcl0gLSBJbnRlcm5hbCBtYXJrZXIuXG4gKiBAcHJvcGVydHkgeyguLi5hcmdzOiBBcnJheTw/PikgPT4gP30gY2FsbGJhY2sgLSBTY29wZSBjYWxsYmFjay5cbiAqIEBwcm9wZXJ0eSB7dHlwZW9mIGltcG9ydChcIi4uL2RhdGFiYXNlL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi4vZnJvbnRlbmQtbW9kZWxzL2Jhc2UuanNcIikuRnJvbnRlbmRNb2RlbENsYXNzfSBtb2RlbENsYXNzIC0gT3duaW5nIG1vZGVsIGNsYXNzLlxuICogQHByb3BlcnR5IHtBcnJheTw/Pn0gc2NvcGVBcmdzIC0gU2NvcGUgYXJndW1lbnRzLlxuICovXG4vLyBAdHMtY2hlY2tcblxuY29uc3QgTU9ERUxfU0NPUEVfREVTQ1JJUFRPUl9NQVJLRVIgPSBcInZlbG9jaW91c01vZGVsU2NvcGVEZXNjcmlwdG9yXCJcblxuLyoqXG4gKiBSdW5zIHRoZSBkZWZpbmVNb2RlbFNjb3BlIGhlbHBlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gRGVmaW5pdGlvbiBhcmd1bWVudHMuXG4gKiBAcGFyYW0geyguLi5hcmdzOiBBcnJheTw/PikgPT4gP30gYXJncy5jYWxsYmFjayAtIFNjb3BlIGNhbGxiYWNrLlxuICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vZGF0YWJhc2UvcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHQgfCBpbXBvcnQoXCIuLi9mcm9udGVuZC1tb2RlbHMvYmFzZS5qc1wiKS5Gcm9udGVuZE1vZGVsQ2xhc3N9IGFyZ3MubW9kZWxDbGFzcyAtIE93bmluZyBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7KCkgPT4gP30gYXJncy5zdGFydFF1ZXJ5IC0gRmFjdG9yeSB0aGF0IHJldHVybnMgYSBmcmVzaCBxdWVyeSBmb3IgdGhlIG93bmluZyBtb2RlbCBjbGFzcy5cbiAqIEByZXR1cm5zIHsoKC4uLmFyZ3M6IEFycmF5PD8+KSA9PiA/KSAmIHtzY29wZTogKC4uLmFyZ3M6IEFycmF5PD8+KSA9PiBNb2RlbFNjb3BlRGVzY3JpcHRvcn19IC0gU2NvcGUgaGVscGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lTW9kZWxTY29wZSh7Y2FsbGJhY2ssIG1vZGVsQ2xhc3MsIHN0YXJ0UXVlcnl9KSB7XG4gIC8qKlxuICAgKiBSdW5zIGRlZmluZWQgc2NvcGUuXG4gICAqIEBwYXJhbSB7Li4uP30gc2NvcGVBcmdzIC0gU2NvcGUgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyB7P30gLSBTY29wZWQgcm9vdCBxdWVyeS5cbiAgICovXG4gIGZ1bmN0aW9uIGRlZmluZWRTY29wZSguLi5zY29wZUFyZ3MpIHtcbiAgICByZXR1cm4gc3RhcnRRdWVyeSgpLnNjb3BlKGRlZmluZWRTY29wZS5zY29wZSguLi5zY29wZUFyZ3MpKVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIHJldXNhYmxlIHNjb3BlIGRlc2NyaXB0b3IuXG4gICAqIEBwYXJhbSB7Li4uP30gc2NvcGVBcmdzIC0gU2NvcGUgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyB7TW9kZWxTY29wZURlc2NyaXB0b3J9IC0gUmV1c2FibGUgc2NvcGUgZGVzY3JpcHRvci5cbiAgICovXG4gIGRlZmluZWRTY29wZS5zY29wZSA9ICguLi5zY29wZUFyZ3MpID0+ICh7XG4gICAgW01PREVMX1NDT1BFX0RFU0NSSVBUT1JfTUFSS0VSXTogdHJ1ZSxcbiAgICBjYWxsYmFjayxcbiAgICBtb2RlbENsYXNzLFxuICAgIHNjb3BlQXJnc1xuICB9KVxuXG4gIHJldHVybiBkZWZpbmVkU2NvcGVcbn1cblxuLyoqXG4gKiBSdW5zIHRoZSBpc01vZGVsU2NvcGVEZXNjcmlwdG9yIGhlbHBlci5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBDYW5kaWRhdGUgZGVzY3JpcHRvci5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBNb2RlbFNjb3BlRGVzY3JpcHRvcn0gLSBXaGV0aGVyIHRoZSB2YWx1ZSBpcyBhIHNjb3BlIGRlc2NyaXB0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01vZGVsU2NvcGVEZXNjcmlwdG9yKHZhbHVlKSB7XG4gIHJldHVybiBCb29sZWFuKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqLyAodmFsdWUpW01PREVMX1NDT1BFX0RFU0NSSVBUT1JfTUFSS0VSXSA9PT0gdHJ1ZSlcbn1cbiJdfQ==
@@ -12,12 +12,6 @@ export function normalizeRansackParams(modelClass: RansackModelClass, params: Re
12
12
  * @returns {RansackGroup} - Normalized group.
13
13
  */
14
14
  export function normalizeRansackGroup(modelClass: RansackModelClass, params: Record<string, unknown>): RansackGroup;
15
- /**
16
- * RansackSort type.
17
- * @typedef {object} RansackSort
18
- * @property {string} attribute - Resolved attribute name.
19
- * @property {"asc" | "desc"} direction - Sort direction.
20
- */
21
15
  /**
22
16
  * Parses a ransack `s` sort string against model attributes.
23
17
  * @param {RansackModelClass} modelClass - Model class for attribute lookup.
@@ -25,6 +19,45 @@ export function normalizeRansackGroup(modelClass: RansackModelClass, params: Rec
25
19
  * @returns {RansackSort[]} - Parsed sort definitions.
26
20
  */
27
21
  export function parseRansackSort(modelClass: RansackModelClass, sortString: string): RansackSort[];
22
+ /**
23
+ * RansackPredicate type.
24
+ * @typedef {"cont" | "end" | "eq" | "gt" | "gteq" | "in" | "lt" | "lteq" | "not_eq" | "not_in" | "null" | "start"} RansackPredicate
25
+ */
26
+ /**
27
+ * RansackCombinator type.
28
+ * @typedef {"and" | "or"} RansackCombinator
29
+ */
30
+ /**
31
+ * RansackModelClass type.
32
+ * @typedef {typeof import("../database/record/index.js").default | import("../frontend-models/base.js").FrontendModelClass} RansackModelClass
33
+ */
34
+ /**
35
+ * RansackAttribute type.
36
+ * @typedef {object} RansackAttribute
37
+ * @property {string} attributeName - Resolved attribute name.
38
+ * @property {string[]} path - Resolved relationship path.
39
+ */
40
+ /**
41
+ * RansackCondition type.
42
+ * @typedef {object} RansackCondition
43
+ * @property {RansackAttribute[]} attributes - Resolved attributes to test.
44
+ * @property {RansackCombinator} combinator - How multiple attributes are combined.
45
+ * @property {RansackPredicate} predicate - Parsed Ransack predicate.
46
+ * @property {?} value - Normalized value.
47
+ */
48
+ /**
49
+ * RansackGroup type.
50
+ * @typedef {object} RansackGroup
51
+ * @property {RansackCombinator} combinator - How entries inside this group are combined.
52
+ * @property {RansackCondition[]} conditions - Conditions in this group.
53
+ * @property {RansackGroup[]} groupings - Nested groups.
54
+ */
55
+ /**
56
+ * RansackSort type.
57
+ * @typedef {object} RansackSort
58
+ * @property {string} attribute - Resolved attribute name.
59
+ * @property {"asc" | "desc"} direction - Sort direction.
60
+ */
28
61
  /** Error raised when a Ransack descriptor is malformed. */
29
62
  export class RansackQueryError extends Error {
30
63
  /**
@@ -33,19 +66,6 @@ export class RansackQueryError extends Error {
33
66
  */
34
67
  constructor(message: string);
35
68
  }
36
- /**
37
- * RansackSort type.
38
- */
39
- export type RansackSort = {
40
- /**
41
- * - Resolved attribute name.
42
- */
43
- attribute: string;
44
- /**
45
- * - Sort direction.
46
- */
47
- direction: "asc" | "desc";
48
- };
49
69
  /**
50
70
  * RansackPredicate type.
51
71
  */
@@ -109,4 +129,17 @@ export type RansackGroup = {
109
129
  */
110
130
  groupings: RansackGroup[];
111
131
  };
132
+ /**
133
+ * RansackSort type.
134
+ */
135
+ export type RansackSort = {
136
+ /**
137
+ * - Resolved attribute name.
138
+ */
139
+ attribute: string;
140
+ /**
141
+ * - Sort direction.
142
+ */
143
+ direction: "asc" | "desc";
144
+ };
112
145
  //# sourceMappingURL=ransack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ransack.d.ts","sourceRoot":"","sources":["../../../src/utils/ransack.js"],"names":[],"mappings":"AAkFA;;;;;GAKG;AACH,mDAJW,iBAAiB,UACjB,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GACf,gBAAgB,EAAE,CAI9B;AAED;;;;;GAKG;AACH,kDAJW,iBAAiB,UACjB,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GACf,YAAY,CAoCxB;AAiqBD;;;;;GAKG;AAEH;;;;;GAKG;AACH,6CAJW,iBAAiB,cACjB,MAAM,GACJ,WAAW,EAAE,CA6BzB;AAv0BD,2DAA2D;AAC3D;IACE;;;OAGG;IACH,qBAFW,MAAM,EAMhB;CACF;;;;;;;;eAuxBa,MAAM;;;;eACN,KAAK,GAAG,MAAM;;;;;+BA3wBf,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO;;;;gCAKrG,KAAK,GAAG,IAAI;;;;gCAKZ,cAAc,6BAA6B,EAAE,OAAO,GAAG,OAAO,4BAA4B,EAAE,kBAAkB;;;;;;;;mBAM7G,MAAM;;;;UACN,MAAM,EAAE;;;;;;;;;gBAMR,gBAAgB,EAAE;;;;gBAClB,iBAAiB;;;;eACjB,gBAAgB;;;;WAChB,OAAC;;;;;;;;;gBAMD,iBAAiB;;;;gBACjB,gBAAgB,EAAE;;;;eAClB,YAAY,EAAE"}
1
+ {"version":3,"file":"ransack.d.ts","sourceRoot":"","sources":["../../../src/utils/ransack.js"],"names":[],"mappings":"AAkFA;;;;;GAKG;AACH,mDAJW,iBAAiB,UACjB,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GACf,gBAAgB,EAAE,CAI9B;AAED;;;;;GAKG;AACH,kDAJW,iBAAiB,UACjB,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,GACf,YAAY,CAoCxB;AAiqBD;;;;;GAKG;AACH,6CAJW,iBAAiB,cACjB,MAAM,GACJ,WAAW,EAAE,CA6BzB;AAh0BD;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;;;GAKG;AACH;;;;;;;GAOG;AACH;;;;;;GAMG;AACH;;;;;GAKG;AACH,2DAA2D;AAC3D;IACE;;;OAGG;IACH,qBAFW,MAAM,EAMhB;CACF;;;;+BAhDY,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO;;;;gCAIrG,KAAK,GAAG,IAAI;;;;gCAIZ,cAAc,6BAA6B,EAAE,OAAO,GAAG,OAAO,4BAA4B,EAAE,kBAAkB;;;;;;;;mBAK7G,MAAM;;;;UACN,MAAM,EAAE;;;;;;;;;gBAKR,gBAAgB,EAAE;;;;gBAClB,iBAAiB;;;;eACjB,gBAAgB;;;;WAChB,OAAC;;;;;;;;;gBAKD,iBAAiB;;;;gBACjB,gBAAgB,EAAE;;;;eAClB,YAAY,EAAE;;;;;;;;;eAKd,MAAM;;;;eACN,KAAK,GAAG,MAAM"}