@nlabs/reaktor 0.10.2 → 0.10.6

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 (472) hide show
  1. package/coverage/block-navigation.js +1 -1
  2. package/coverage/index.html +23 -23
  3. package/coverage/sorter.js +21 -7
  4. package/lib/actions/apps.d.ts +1 -0
  5. package/lib/actions/apps.d.ts.map +1 -0
  6. package/lib/actions/apps.js +218 -17
  7. package/lib/actions/connections.d.ts +1 -0
  8. package/lib/actions/connections.d.ts.map +1 -0
  9. package/lib/actions/connections.js +61 -6
  10. package/lib/actions/content.d.ts +1 -0
  11. package/lib/actions/content.d.ts.map +1 -0
  12. package/lib/actions/content.js +232 -9
  13. package/lib/actions/conversations.d.ts +1 -0
  14. package/lib/actions/conversations.d.ts.map +1 -0
  15. package/lib/actions/conversations.js +321 -19
  16. package/lib/actions/dynamodb.d.ts +1 -0
  17. package/lib/actions/dynamodb.d.ts.map +1 -0
  18. package/lib/actions/dynamodb.js +119 -2
  19. package/lib/actions/email.d.ts +1 -0
  20. package/lib/actions/email.d.ts.map +1 -0
  21. package/lib/actions/email.js +56 -2
  22. package/lib/actions/files.d.ts +1 -0
  23. package/lib/actions/files.d.ts.map +1 -0
  24. package/lib/actions/files.js +226 -5
  25. package/lib/actions/groups.d.ts +1 -0
  26. package/lib/actions/groups.d.ts.map +1 -0
  27. package/lib/actions/groups.js +234 -19
  28. package/lib/actions/images.d.ts +1 -0
  29. package/lib/actions/images.d.ts.map +1 -0
  30. package/lib/actions/images.js +688 -31
  31. package/lib/actions/index.d.ts +2 -0
  32. package/lib/actions/index.d.ts.map +1 -0
  33. package/lib/actions/index.js +29 -2
  34. package/lib/actions/ios.d.ts +1 -0
  35. package/lib/actions/ios.d.ts.map +1 -0
  36. package/lib/actions/ios.js +228 -9
  37. package/lib/actions/locations.d.ts +1 -0
  38. package/lib/actions/locations.d.ts.map +1 -0
  39. package/lib/actions/locations.js +111 -7
  40. package/lib/actions/messages.d.ts +1 -0
  41. package/lib/actions/messages.d.ts.map +1 -0
  42. package/lib/actions/messages.js +155 -21
  43. package/lib/actions/notifications.d.ts +1 -0
  44. package/lib/actions/notifications.d.ts.map +1 -0
  45. package/lib/actions/notifications.js +37 -2
  46. package/lib/actions/payments.d.ts +1 -0
  47. package/lib/actions/payments.d.ts.map +1 -0
  48. package/lib/actions/payments.js +428 -11
  49. package/lib/actions/posts.d.ts +1 -0
  50. package/lib/actions/posts.d.ts.map +1 -0
  51. package/lib/actions/posts.js +540 -75
  52. package/lib/actions/profiles.d.ts +1 -0
  53. package/lib/actions/profiles.d.ts.map +1 -0
  54. package/lib/actions/profiles.js +58 -8
  55. package/lib/actions/reactions.d.ts +1 -0
  56. package/lib/actions/reactions.d.ts.map +1 -0
  57. package/lib/actions/reactions.js +276 -25
  58. package/lib/actions/s3.d.ts +1 -0
  59. package/lib/actions/s3.d.ts.map +1 -0
  60. package/lib/actions/s3.js +102 -2
  61. package/lib/actions/search.d.ts +1 -0
  62. package/lib/actions/search.d.ts.map +1 -0
  63. package/lib/actions/search.js +81 -5
  64. package/lib/actions/sms.d.ts +1 -0
  65. package/lib/actions/sms.d.ts.map +1 -0
  66. package/lib/actions/sms.js +52 -2
  67. package/lib/actions/statistics.d.ts +1 -0
  68. package/lib/actions/statistics.d.ts.map +1 -0
  69. package/lib/actions/statistics.js +41 -6
  70. package/lib/actions/subscriptions.d.ts +1 -0
  71. package/lib/actions/subscriptions.d.ts.map +1 -0
  72. package/lib/actions/subscriptions.js +196 -6
  73. package/lib/actions/tags.d.ts +1 -0
  74. package/lib/actions/tags.d.ts.map +1 -0
  75. package/lib/actions/tags.js +258 -19
  76. package/lib/actions/users.d.ts +1 -0
  77. package/lib/actions/users.d.ts.map +1 -0
  78. package/lib/actions/users.js +781 -66
  79. package/lib/actions/videos.d.ts +26 -0
  80. package/lib/actions/videos.d.ts.map +1 -0
  81. package/lib/actions/videos.js +423 -0
  82. package/lib/actions/websockets.d.ts +1 -0
  83. package/lib/actions/websockets.d.ts.map +1 -0
  84. package/lib/actions/websockets.js +148 -14
  85. package/lib/adapters/arangoAdapter.d.ts +1 -0
  86. package/lib/adapters/arangoAdapter.d.ts.map +1 -0
  87. package/lib/adapters/arangoAdapter.js +70 -2
  88. package/lib/adapters/contentAdapter.d.ts +1 -0
  89. package/lib/adapters/contentAdapter.d.ts.map +1 -0
  90. package/lib/adapters/contentAdapter.js +108 -2
  91. package/lib/adapters/fileAdapter.d.ts +1 -0
  92. package/lib/adapters/fileAdapter.d.ts.map +1 -0
  93. package/lib/adapters/fileAdapter.js +119 -2
  94. package/lib/adapters/imageAdapter.d.ts +1 -0
  95. package/lib/adapters/imageAdapter.d.ts.map +1 -0
  96. package/lib/adapters/imageAdapter.js +112 -2
  97. package/lib/adapters/index.d.ts +1 -0
  98. package/lib/adapters/index.d.ts.map +1 -0
  99. package/lib/adapters/index.js +11 -2
  100. package/lib/adapters/messageAdapter.d.ts +1 -0
  101. package/lib/adapters/messageAdapter.d.ts.map +1 -0
  102. package/lib/adapters/messageAdapter.js +82 -2
  103. package/lib/adapters/postAdapter.d.ts +1 -0
  104. package/lib/adapters/postAdapter.d.ts.map +1 -0
  105. package/lib/adapters/postAdapter.js +117 -2
  106. package/lib/adapters/reaktorAdapter.d.ts +1 -0
  107. package/lib/adapters/reaktorAdapter.d.ts.map +1 -0
  108. package/lib/adapters/reaktorAdapter.js +59 -2
  109. package/lib/adapters/tagAdapter.d.ts +1 -0
  110. package/lib/adapters/tagAdapter.d.ts.map +1 -0
  111. package/lib/adapters/tagAdapter.js +99 -2
  112. package/lib/adapters/userAdapter.d.ts +1 -0
  113. package/lib/adapters/userAdapter.d.ts.map +1 -0
  114. package/lib/adapters/userAdapter.js +264 -2
  115. package/lib/config.d.ts +1 -0
  116. package/lib/config.d.ts.map +1 -0
  117. package/lib/config.js +161 -2
  118. package/lib/handlers/graphqlHandler.d.ts +1 -0
  119. package/lib/handlers/graphqlHandler.d.ts.map +1 -0
  120. package/lib/handlers/graphqlHandler.js +118 -2
  121. package/lib/index.d.ts +1 -0
  122. package/lib/index.d.ts.map +1 -0
  123. package/lib/index.js +18 -2
  124. package/lib/lambdas/actions/websockets.d.ts +1 -0
  125. package/lib/lambdas/actions/websockets.d.ts.map +1 -0
  126. package/lib/lambdas/actions/websockets.js +89 -14
  127. package/lib/lambdas/authorizer.d.ts +1 -0
  128. package/lib/lambdas/authorizer.d.ts.map +1 -0
  129. package/lib/lambdas/authorizer.js +41 -2
  130. package/lib/lambdas/connection.d.ts +1 -0
  131. package/lib/lambdas/connection.d.ts.map +1 -0
  132. package/lib/lambdas/connection.js +85 -2
  133. package/lib/lambdas/utils/message.d.ts +1 -0
  134. package/lib/lambdas/utils/message.d.ts.map +1 -0
  135. package/lib/lambdas/utils/message.js +20 -2
  136. package/lib/lambdas/utils/websocket.d.ts +1 -0
  137. package/lib/lambdas/utils/websocket.d.ts.map +1 -0
  138. package/lib/lambdas/utils/websocket.js +78 -2
  139. package/lib/mocks/conversation.d.ts +1 -0
  140. package/lib/mocks/conversation.d.ts.map +1 -0
  141. package/lib/mocks/conversation.js +10 -2
  142. package/lib/mocks/file.d.ts +1 -0
  143. package/lib/mocks/file.d.ts.map +1 -0
  144. package/lib/mocks/file.js +13 -2
  145. package/lib/mocks/group.d.ts +1 -0
  146. package/lib/mocks/group.d.ts.map +1 -0
  147. package/lib/mocks/group.js +20 -2
  148. package/lib/mocks/image.d.ts +1 -0
  149. package/lib/mocks/image.d.ts.map +1 -0
  150. package/lib/mocks/image.js +17 -2
  151. package/lib/mocks/post.d.ts +1 -0
  152. package/lib/mocks/post.d.ts.map +1 -0
  153. package/lib/mocks/post.js +28 -2
  154. package/lib/mocks/tag.d.ts +1 -0
  155. package/lib/mocks/tag.d.ts.map +1 -0
  156. package/lib/mocks/tag.js +12 -2
  157. package/lib/mocks/user.d.ts +1 -0
  158. package/lib/mocks/user.d.ts.map +1 -0
  159. package/lib/mocks/user.js +61 -2
  160. package/lib/mocks/video.d.ts +4 -0
  161. package/lib/mocks/video.d.ts.map +1 -0
  162. package/lib/mocks/video.js +17 -0
  163. package/lib/mutations/content.d.ts +1 -0
  164. package/lib/mutations/content.d.ts.map +1 -0
  165. package/lib/mutations/content.js +27 -2
  166. package/lib/mutations/index.d.ts +1 -0
  167. package/lib/mutations/index.d.ts.map +1 -0
  168. package/lib/mutations/index.js +29 -2
  169. package/lib/mutations/locations.d.ts +1 -0
  170. package/lib/mutations/locations.d.ts.map +1 -0
  171. package/lib/mutations/locations.js +22 -2
  172. package/lib/mutations/messages.d.ts +1 -0
  173. package/lib/mutations/messages.d.ts.map +1 -0
  174. package/lib/mutations/messages.js +75 -2
  175. package/lib/mutations/posts.d.ts +1 -0
  176. package/lib/mutations/posts.d.ts.map +1 -0
  177. package/lib/mutations/posts.js +31 -2
  178. package/lib/mutations/profiles.d.ts +1 -0
  179. package/lib/mutations/profiles.d.ts.map +1 -0
  180. package/lib/mutations/profiles.js +78 -2
  181. package/lib/mutations/reactions.d.ts +1 -0
  182. package/lib/mutations/reactions.d.ts.map +1 -0
  183. package/lib/mutations/reactions.js +29 -2
  184. package/lib/mutations/statistics.d.ts +1 -0
  185. package/lib/mutations/statistics.d.ts.map +1 -0
  186. package/lib/mutations/statistics.js +17 -2
  187. package/lib/mutations/subscriptions.d.ts +1 -0
  188. package/lib/mutations/subscriptions.d.ts.map +1 -0
  189. package/lib/mutations/subscriptions.js +38 -2
  190. package/lib/mutations/tags.d.ts +1 -0
  191. package/lib/mutations/tags.d.ts.map +1 -0
  192. package/lib/mutations/tags.js +109 -2
  193. package/lib/mutations/users.d.ts +1 -0
  194. package/lib/mutations/users.d.ts.map +1 -0
  195. package/lib/mutations/users.js +129 -2
  196. package/lib/objectTypes/app.d.ts +1 -0
  197. package/lib/objectTypes/app.d.ts.map +1 -0
  198. package/lib/objectTypes/app.js +147 -2
  199. package/lib/objectTypes/bankAccount.d.ts +1 -0
  200. package/lib/objectTypes/bankAccount.d.ts.map +1 -0
  201. package/lib/objectTypes/bankAccount.js +54 -2
  202. package/lib/objectTypes/connection.d.ts +1 -0
  203. package/lib/objectTypes/connection.d.ts.map +1 -0
  204. package/lib/objectTypes/connection.js +26 -2
  205. package/lib/objectTypes/content.d.ts +1 -0
  206. package/lib/objectTypes/content.d.ts.map +1 -0
  207. package/lib/objectTypes/content.js +79 -2
  208. package/lib/objectTypes/conversation.d.ts +1 -0
  209. package/lib/objectTypes/conversation.d.ts.map +1 -0
  210. package/lib/objectTypes/conversation.js +53 -2
  211. package/lib/objectTypes/creditCard.d.ts +1 -0
  212. package/lib/objectTypes/creditCard.d.ts.map +1 -0
  213. package/lib/objectTypes/creditCard.js +64 -2
  214. package/lib/objectTypes/document.d.ts +1 -0
  215. package/lib/objectTypes/document.d.ts.map +1 -0
  216. package/lib/objectTypes/document.js +21 -2
  217. package/lib/objectTypes/error.d.ts +1 -0
  218. package/lib/objectTypes/error.d.ts.map +1 -0
  219. package/lib/objectTypes/error.js +24 -2
  220. package/lib/objectTypes/external.d.ts +1 -0
  221. package/lib/objectTypes/external.d.ts.map +1 -0
  222. package/lib/objectTypes/external.js +52 -2
  223. package/lib/objectTypes/file.d.ts +1 -0
  224. package/lib/objectTypes/file.d.ts.map +1 -0
  225. package/lib/objectTypes/file.js +76 -2
  226. package/lib/objectTypes/filter.d.ts +1 -0
  227. package/lib/objectTypes/filter.d.ts.map +1 -0
  228. package/lib/objectTypes/filter.js +21 -2
  229. package/lib/objectTypes/group.d.ts +1 -0
  230. package/lib/objectTypes/group.d.ts.map +1 -0
  231. package/lib/objectTypes/group.js +97 -2
  232. package/lib/objectTypes/iapSubscription.d.ts +1 -0
  233. package/lib/objectTypes/iapSubscription.d.ts.map +1 -0
  234. package/lib/objectTypes/iapSubscription.js +18 -2
  235. package/lib/objectTypes/image.d.ts +1 -0
  236. package/lib/objectTypes/image.d.ts.map +1 -0
  237. package/lib/objectTypes/image.js +105 -2
  238. package/lib/objectTypes/index.d.ts +1 -0
  239. package/lib/objectTypes/index.d.ts.map +1 -0
  240. package/lib/objectTypes/index.js +28 -2
  241. package/lib/objectTypes/location.d.ts +1 -0
  242. package/lib/objectTypes/location.d.ts.map +1 -0
  243. package/lib/objectTypes/location.js +85 -2
  244. package/lib/objectTypes/message.d.ts +1 -0
  245. package/lib/objectTypes/message.d.ts.map +1 -0
  246. package/lib/objectTypes/message.js +72 -2
  247. package/lib/objectTypes/passcode.d.ts +1 -0
  248. package/lib/objectTypes/passcode.d.ts.map +1 -0
  249. package/lib/objectTypes/passcode.js +20 -2
  250. package/lib/objectTypes/plan.d.ts +1 -0
  251. package/lib/objectTypes/plan.d.ts.map +1 -0
  252. package/lib/objectTypes/plan.js +71 -2
  253. package/lib/objectTypes/post.d.ts +1 -0
  254. package/lib/objectTypes/post.d.ts.map +1 -0
  255. package/lib/objectTypes/post.js +101 -2
  256. package/lib/objectTypes/profile.d.ts +1 -0
  257. package/lib/objectTypes/profile.d.ts.map +1 -0
  258. package/lib/objectTypes/profile.js +68 -2
  259. package/lib/objectTypes/reaction.d.ts +1 -0
  260. package/lib/objectTypes/reaction.d.ts.map +1 -0
  261. package/lib/objectTypes/reaction.js +37 -2
  262. package/lib/objectTypes/relation.d.ts +1 -0
  263. package/lib/objectTypes/relation.d.ts.map +1 -0
  264. package/lib/objectTypes/relation.js +27 -2
  265. package/lib/objectTypes/search.d.ts +1 -0
  266. package/lib/objectTypes/search.d.ts.map +1 -0
  267. package/lib/objectTypes/search.js +50 -2
  268. package/lib/objectTypes/statistics.d.ts +1 -0
  269. package/lib/objectTypes/statistics.d.ts.map +1 -0
  270. package/lib/objectTypes/statistics.js +17 -2
  271. package/lib/objectTypes/subscription.d.ts +1 -0
  272. package/lib/objectTypes/subscription.d.ts.map +1 -0
  273. package/lib/objectTypes/subscription.js +102 -2
  274. package/lib/objectTypes/tag.d.ts +1 -0
  275. package/lib/objectTypes/tag.d.ts.map +1 -0
  276. package/lib/objectTypes/tag.js +41 -2
  277. package/lib/objectTypes/user.d.ts +1 -0
  278. package/lib/objectTypes/user.d.ts.map +1 -0
  279. package/lib/objectTypes/user.js +111 -2
  280. package/lib/queries/content.d.ts +1 -0
  281. package/lib/queries/content.d.ts.map +1 -0
  282. package/lib/queries/content.js +50 -2
  283. package/lib/queries/index.d.ts +1 -0
  284. package/lib/queries/index.d.ts.map +1 -0
  285. package/lib/queries/index.js +27 -2
  286. package/lib/queries/locations.d.ts +1 -0
  287. package/lib/queries/locations.d.ts.map +1 -0
  288. package/lib/queries/locations.js +23 -2
  289. package/lib/queries/messages.d.ts +1 -0
  290. package/lib/queries/messages.d.ts.map +1 -0
  291. package/lib/queries/messages.js +35 -2
  292. package/lib/queries/posts.d.ts +1 -0
  293. package/lib/queries/posts.d.ts.map +1 -0
  294. package/lib/queries/posts.js +154 -2
  295. package/lib/queries/reactions.d.ts +1 -0
  296. package/lib/queries/reactions.d.ts.map +1 -0
  297. package/lib/queries/reactions.js +34 -2
  298. package/lib/queries/statistics.d.ts +1 -0
  299. package/lib/queries/statistics.d.ts.map +1 -0
  300. package/lib/queries/statistics.js +17 -2
  301. package/lib/queries/subscriptions.d.ts +1 -0
  302. package/lib/queries/subscriptions.d.ts.map +1 -0
  303. package/lib/queries/subscriptions.js +21 -2
  304. package/lib/queries/tags.d.ts +1 -0
  305. package/lib/queries/tags.d.ts.map +1 -0
  306. package/lib/queries/tags.js +56 -2
  307. package/lib/queries/users.d.ts +1 -0
  308. package/lib/queries/users.d.ts.map +1 -0
  309. package/lib/queries/users.js +39 -2
  310. package/lib/templates/email/layout.d.ts +1 -0
  311. package/lib/templates/email/layout.d.ts.map +1 -0
  312. package/lib/templates/email/layout.js +4 -3
  313. package/lib/templates/email/passwordForgot.d.ts +1 -0
  314. package/lib/templates/email/passwordForgot.d.ts.map +1 -0
  315. package/lib/templates/email/passwordForgot.js +4 -3
  316. package/lib/templates/email/passwordRecovery.d.ts +1 -0
  317. package/lib/templates/email/passwordRecovery.d.ts.map +1 -0
  318. package/lib/templates/email/passwordRecovery.js +4 -3
  319. package/lib/templates/email/verifyEmail.d.ts +1 -0
  320. package/lib/templates/email/verifyEmail.d.ts.map +1 -0
  321. package/lib/templates/email/verifyEmail.js +4 -3
  322. package/lib/templates/email/welcome.d.ts +1 -0
  323. package/lib/templates/email/welcome.d.ts.map +1 -0
  324. package/lib/templates/email/welcome.js +4 -3
  325. package/lib/templates/sms/passwordForgot.d.ts +1 -0
  326. package/lib/templates/sms/passwordForgot.d.ts.map +1 -0
  327. package/lib/templates/sms/passwordForgot.js +3 -2
  328. package/lib/templates/sms/passwordRecovery.d.ts +1 -0
  329. package/lib/templates/sms/passwordRecovery.d.ts.map +1 -0
  330. package/lib/templates/sms/passwordRecovery.js +3 -2
  331. package/lib/templates/sms/verifyEmail.d.ts +1 -0
  332. package/lib/templates/sms/verifyEmail.d.ts.map +1 -0
  333. package/lib/templates/sms/verifyEmail.js +3 -2
  334. package/lib/templates/sms/verifyPhone.d.ts +1 -0
  335. package/lib/templates/sms/verifyPhone.d.ts.map +1 -0
  336. package/lib/templates/sms/verifyPhone.js +3 -2
  337. package/lib/templates/sms/welcome.d.ts +1 -0
  338. package/lib/templates/sms/welcome.d.ts.map +1 -0
  339. package/lib/templates/sms/welcome.js +3 -2
  340. package/lib/types/apps.types.d.ts +1 -0
  341. package/lib/types/apps.types.d.ts.map +1 -0
  342. package/lib/types/apps.types.js +10 -2
  343. package/lib/types/arangodb.types.d.ts +2 -1
  344. package/lib/types/arangodb.types.d.ts.map +1 -0
  345. package/lib/types/arangodb.types.js +6 -1
  346. package/lib/types/auth.types.d.ts +1 -0
  347. package/lib/types/auth.types.d.ts.map +1 -0
  348. package/lib/types/auth.types.js +6 -1
  349. package/lib/types/connections.types.d.ts +1 -0
  350. package/lib/types/connections.types.d.ts.map +1 -0
  351. package/lib/types/connections.types.js +6 -1
  352. package/lib/types/content.types.d.ts +1 -0
  353. package/lib/types/content.types.d.ts.map +1 -0
  354. package/lib/types/content.types.js +6 -1
  355. package/lib/types/conversations.types.d.ts +1 -0
  356. package/lib/types/conversations.types.d.ts.map +1 -0
  357. package/lib/types/conversations.types.js +6 -1
  358. package/lib/types/email.types.d.ts +1 -0
  359. package/lib/types/email.types.d.ts.map +1 -0
  360. package/lib/types/email.types.js +6 -1
  361. package/lib/types/error.types.d.ts +1 -0
  362. package/lib/types/error.types.d.ts.map +1 -0
  363. package/lib/types/error.types.js +20 -2
  364. package/lib/types/files.types.d.ts +1 -0
  365. package/lib/types/files.types.d.ts.map +1 -0
  366. package/lib/types/files.types.js +6 -1
  367. package/lib/types/google.types.d.ts +1 -0
  368. package/lib/types/google.types.d.ts.map +1 -0
  369. package/lib/types/google.types.js +6 -1
  370. package/lib/types/groups.types.d.ts +1 -0
  371. package/lib/types/groups.types.d.ts.map +1 -0
  372. package/lib/types/groups.types.js +6 -1
  373. package/lib/types/images.types.d.ts +1 -0
  374. package/lib/types/images.types.d.ts.map +1 -0
  375. package/lib/types/images.types.js +6 -1
  376. package/lib/types/index.d.ts +2 -0
  377. package/lib/types/index.d.ts.map +1 -0
  378. package/lib/types/index.js +28 -2
  379. package/lib/types/locations.types.d.ts +1 -0
  380. package/lib/types/locations.types.d.ts.map +1 -0
  381. package/lib/types/locations.types.js +6 -1
  382. package/lib/types/messages.types.d.ts +1 -0
  383. package/lib/types/messages.types.d.ts.map +1 -0
  384. package/lib/types/messages.types.js +6 -1
  385. package/lib/types/notifications.types.d.ts +1 -0
  386. package/lib/types/notifications.types.d.ts.map +1 -0
  387. package/lib/types/notifications.types.js +6 -1
  388. package/lib/types/payments.types.d.ts +1 -0
  389. package/lib/types/payments.types.d.ts.map +1 -0
  390. package/lib/types/payments.types.js +6 -1
  391. package/lib/types/posts.types.d.ts +1 -0
  392. package/lib/types/posts.types.d.ts.map +1 -0
  393. package/lib/types/posts.types.js +6 -1
  394. package/lib/types/profiles.types.d.ts +1 -0
  395. package/lib/types/profiles.types.d.ts.map +1 -0
  396. package/lib/types/profiles.types.js +3 -1
  397. package/lib/types/statistics.types.d.ts +1 -0
  398. package/lib/types/statistics.types.d.ts.map +1 -0
  399. package/lib/types/statistics.types.js +3 -1
  400. package/lib/types/tags.types.d.ts +1 -0
  401. package/lib/types/tags.types.d.ts.map +1 -0
  402. package/lib/types/tags.types.js +6 -1
  403. package/lib/types/users.types.d.ts +1 -0
  404. package/lib/types/users.types.d.ts.map +1 -0
  405. package/lib/types/users.types.js +6 -1
  406. package/lib/types/videos.types.d.ts +47 -0
  407. package/lib/types/videos.types.d.ts.map +1 -0
  408. package/lib/types/videos.types.js +6 -0
  409. package/lib/types/websockets.types.d.ts +1 -0
  410. package/lib/types/websockets.types.d.ts.map +1 -0
  411. package/lib/types/websockets.types.js +6 -1
  412. package/lib/utils/adapterUtils.d.ts +1 -0
  413. package/lib/utils/adapterUtils.d.ts.map +1 -0
  414. package/lib/utils/adapterUtils.js +23 -2
  415. package/lib/utils/analyticsUtils.d.ts +1 -0
  416. package/lib/utils/analyticsUtils.d.ts.map +1 -0
  417. package/lib/utils/analyticsUtils.js +45 -2
  418. package/lib/utils/arangodbUtils.d.ts +1 -0
  419. package/lib/utils/arangodbUtils.d.ts.map +1 -0
  420. package/lib/utils/arangodbUtils.js +128 -5
  421. package/lib/utils/authUtils.d.ts +1 -0
  422. package/lib/utils/authUtils.d.ts.map +1 -0
  423. package/lib/utils/authUtils.js +54 -2
  424. package/lib/utils/contextUtils.d.ts +1 -0
  425. package/lib/utils/contextUtils.d.ts.map +1 -0
  426. package/lib/utils/contextUtils.js +10 -2
  427. package/lib/utils/dbI18n.d.ts +1 -0
  428. package/lib/utils/dbI18n.d.ts.map +1 -0
  429. package/lib/utils/dbI18n.example.d.ts +1 -0
  430. package/lib/utils/dbI18n.example.d.ts.map +1 -0
  431. package/lib/utils/dbI18n.example.js +92 -5
  432. package/lib/utils/dbI18n.js +28 -2
  433. package/lib/utils/googleTranslate.d.ts +1 -0
  434. package/lib/utils/googleTranslate.d.ts.map +1 -0
  435. package/lib/utils/googleTranslate.js +70 -2
  436. package/lib/utils/graphqlUtils.d.ts +1 -0
  437. package/lib/utils/graphqlUtils.d.ts.map +1 -0
  438. package/lib/utils/graphqlUtils.js +11 -2
  439. package/lib/utils/index.d.ts +1 -0
  440. package/lib/utils/index.d.ts.map +1 -0
  441. package/lib/utils/index.js +19 -2
  442. package/lib/utils/languageDetection.d.ts +1 -0
  443. package/lib/utils/languageDetection.d.ts.map +1 -0
  444. package/lib/utils/languageDetection.js +120 -2
  445. package/lib/utils/localeUtils.d.ts +1 -0
  446. package/lib/utils/localeUtils.d.ts.map +1 -0
  447. package/lib/utils/localeUtils.example.d.ts +1 -0
  448. package/lib/utils/localeUtils.example.d.ts.map +1 -0
  449. package/lib/utils/localeUtils.example.js +124 -2
  450. package/lib/utils/localeUtils.js +71 -2
  451. package/lib/utils/middlewareUtils.d.ts +1 -0
  452. package/lib/utils/middlewareUtils.d.ts.map +1 -0
  453. package/lib/utils/middlewareUtils.js +10 -2
  454. package/lib/utils/sessionUtils.d.ts +1 -0
  455. package/lib/utils/sessionUtils.d.ts.map +1 -0
  456. package/lib/utils/sessionUtils.js +26 -2
  457. package/lib/utils/stripeUtils.d.ts +2 -1
  458. package/lib/utils/stripeUtils.d.ts.map +1 -0
  459. package/lib/utils/stripeUtils.js +12 -2
  460. package/lib/utils/templateUtils.d.ts +1 -0
  461. package/lib/utils/templateUtils.d.ts.map +1 -0
  462. package/lib/utils/templateUtils.js +11 -2
  463. package/lib/utils/testUtils.d.ts +1 -0
  464. package/lib/utils/testUtils.d.ts.map +1 -0
  465. package/lib/utils/testUtils.js +292 -2
  466. package/lib/utils/translationQueue.d.ts +1 -0
  467. package/lib/utils/translationQueue.d.ts.map +1 -0
  468. package/lib/utils/translationQueue.example.d.ts +1 -0
  469. package/lib/utils/translationQueue.example.d.ts.map +1 -0
  470. package/lib/utils/translationQueue.example.js +340 -2
  471. package/lib/utils/translationQueue.js +113 -2
  472. package/package.json +47 -29
@@ -1,2 +1,292 @@
1
- import{jest as t}from"@jest/globals";const y=(e={})=>{const r={userAccess:1,userId:"user1",username:"testuser"},n=e.session||{},s={databaseName:e.databaseName??"test",...e};return delete s.session,s.session={userAccess:n.userAccess!==void 0?n.userAccess:r.userAccess,userId:n.userId!==void 0?n.userId:r.userId,username:n.username!==void 0?n.username:r.username},s},x=(e="test")=>({fieldName:e,fieldNodes:[],fragments:{},operation:{},parentType:{},path:{key:e,prev:void 0,typename:"Test"},returnType:{},rootValue:{},schema:{},variableValues:{}}),A=async(e,r)=>{const n=Object.entries(r).reduce((s,[a,c])=>(s[a]=t.fn().mockImplementation(c),s),{});await t.isolateModulesAsync(async()=>{t.unstable_mockModule(e,()=>({__esModule:!0,...n,default:n}))})},I=async(e,r)=>{const n={__esModule:!0,[r]:{getField:t.fn(()=>({resolve:t.fn()})),getFields:t.fn(()=>({}))},default:{[r]:{getField:t.fn(()=>({resolve:t.fn()})),getFields:t.fn(()=>({}))}}};await t.isolateModulesAsync(async()=>{t.unstable_mockModule(e,()=>n)})},h=(e,r,n)=>{describe(`${e} Queries`,()=>{let s;const a=y();beforeAll(()=>{s={}}),n.forEach(({name:c,actionName:l,args:o,expectedCall:u,mockReturnValue:p,errorCase:d=!1})=>{it(`should call ${l} action with correct parameters`,async()=>{const i=t.fn().mockImplementation(()=>Promise.resolve(p));s[l]=i;const m=await i(a,o);expect(i).toHaveBeenCalledWith(a,u(a,o)),expect(m).toEqual(p)}),d&&it(`should handle ${l} when no data found`,async()=>{const i=t.fn().mockImplementation(()=>Promise.resolve(null));s[l]=i;const m=await i(a,o);expect(i).toHaveBeenCalledWith(a,u(a,o)),expect(m).toBeNull()})})})},M=(e,r,n)=>{describe(`${e} Mutations`,()=>{let s;beforeAll(()=>{s={}}),n.forEach(({actionName:a,args:c,expectedCall:l,mockReturnValue:o,requiresAuth:u=!1,authUserId:p})=>{it(`should call ${a} action with correct parameters`,async()=>{const d=y();u&&p&&(d.session.userId=p);const i=t.fn().mockImplementation(()=>Promise.resolve(o));s[a]=i;const m=await i(d,c);expect(i).toHaveBeenCalledWith(d,l(d,c)),expect(m).toEqual(o)})})})},b=(e,r,n,s,a)=>{describe(`${e} Integration`,()=>{let c;beforeAll(()=>{c={}}),a.forEach(({name:l,actionName:o,args:u,expectedCall:p,successReturnValue:d,errorReturnValue:i,testErrorCase:m})=>{describe(l,()=>{it(`should return data when ${o} succeeds`,async()=>{const g=y(),f=t.fn().mockImplementation(()=>Promise.resolve(d));c[o]=f;const T=await f(g,u);expect(f).toHaveBeenCalledWith(g,p(g,u)),expect(T).toEqual(d||{})}),m&&it(`should handle ${o} when no data found`,async()=>{const g=y(),f=t.fn().mockImplementation(()=>Promise.resolve(i));c[o]=f;const T=await f(g,u);expect(f).toHaveBeenCalledWith(g,p(g,u)),expect(T).toEqual(i)})})})})},v=(e={})=>({email:"test@example.com",firstName:"Test",lastName:"User",userId:"user1",username:"testuser",...e}),R=(e={})=>({content:"Test post content",createdAt:new Date().toISOString(),postId:"post1",userId:"user1",...e}),w=(e={})=>({content:"Test message",conversationId:"conv1",createdAt:new Date().toISOString(),messageId:"msg1",userId:"user1",...e}),C=(e={})=>({createdAt:new Date().toISOString(),postId:"post1",reactionId:"react1",type:"like",userId:"user1",...e}),E=(e={})=>({description:"Test tag description",name:"test-tag",tagId:"tag1",...e}),S=async()=>{const e={__esModule:!0,useDb:t.fn(),getLimit:t.fn(),getDocId:t.fn(),sortIds:t.fn(),getGqlFields:t.fn(),default:{useDb:t.fn(),getLimit:t.fn(),getDocId:t.fn(),sortIds:t.fn(),getGqlFields:t.fn()}};await t.isolateModulesAsync(async()=>{t.unstable_mockModule("./arangodbUtils.js",()=>e)})},V=()=>{t.clearAllMocks()},q=(e,r,n)=>{describe(`${e} actions`,()=>{let s;beforeAll(async()=>{s=await import(r)}),n.forEach(({name:a,actionName:c,args:l,mockQuery:o,expectedResult:u})=>{it(`should execute ${c}`,async()=>{const p=y(),d=t.fn().mockReturnValue({query:o}),i=t.requireActual("./arangodbUtils.js");t.doMock("./arangodbUtils.js",()=>({useDb:d,...i}));const m=await s[c](p,l);expect(m).toEqual(u)})})})},O=(e,r,n)=>{describe(e,()=>{let s;beforeAll(async()=>{s=await import(r)}),n.forEach(({name:a,input:c,expectedOutput:l})=>{it(`should ${a}`,()=>{const o=s.parseTag(c);expect(o).toEqual(l)})})})},P=(e,r,n)=>{describe(e,()=>{let s;beforeAll(async()=>{s=await import(r)}),n.forEach(({name:a,input:c,expectedOutput:l})=>{it(`should ${a}`,()=>{let o;if(s.logInfo)o=s.logInfo(c);else if(s.removeEmptyKeys)o=s.removeEmptyKeys(c);else throw new Error(`No suitable function found in ${r}`);expect(o).toEqual(l)})})})};export{V as clearAllMocks,q as createActionTestSuite,O as createAdapterTestSuite,b as createIntegrationTestSuite,y as createMockContext,w as createMockMessage,R as createMockPost,C as createMockReaction,x as createMockResolveInfo,E as createMockTag,v as createMockUser,M as createMutationTestSuite,h as createQueryTestSuite,P as createUtilsTestSuite,A as mockActionsModule,I as mockObjectType,S as setupCommonMocks};
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL3Rlc3RVdGlscy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7amVzdH0gZnJvbSAnQGplc3QvZ2xvYmFscyc7XG5pbXBvcnQgdHlwZSB7R3JhcGhRTFJlc29sdmVJbmZvfSBmcm9tICdncmFwaHFsJztcblxuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5cbi8vIERlZmluZSBwcm9wZXIgdHlwZXMgZm9yIHRlc3QgdXRpbGl0aWVzXG50eXBlIE1vY2tPdmVycmlkZXMgPSBQYXJ0aWFsPFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbnR5cGUgVGVzdENvbnRleHQgPSBQYXJ0aWFsPEFwaUNvbnRleHQ+ICYge3Nlc3Npb24/OiBQYXJ0aWFsPHt1c2VySWQ6IHN0cmluZzsgdXNlcm5hbWU6IHN0cmluZzsgdXNlckFjY2VzczogbnVtYmVyfT59O1xudHlwZSBUZXN0QXJncyA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xudHlwZSBUZXN0UmV0dXJuVmFsdWUgPSB1bmtub3duO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9ja0NvbnRleHQgPSAob3ZlcnJpZGVzOiBNb2NrT3ZlcnJpZGVzID0ge30pOiBBcGlDb250ZXh0ID0+IHtcbiAgY29uc3QgZGVmYXVsdFNlc3Npb24gPSB7XG4gICAgdXNlckFjY2VzczogMSxcbiAgICB1c2VySWQ6ICd1c2VyMScsXG4gICAgdXNlcm5hbWU6ICd0ZXN0dXNlcidcbiAgfTtcbiAgY29uc3Qgb3ZlcnJpZGVTZXNzaW9uOiBQYXJ0aWFsPHR5cGVvZiBkZWZhdWx0U2Vzc2lvbj4gPSBvdmVycmlkZXMuc2Vzc2lvbiB8fCB7fTtcbiAgY29uc3QgY29udGV4dDogVGVzdENvbnRleHQgPSB7XG4gICAgZGF0YWJhc2VOYW1lOiAob3ZlcnJpZGVzLmRhdGFiYXNlTmFtZSBhcyBzdHJpbmcpID8/ICd0ZXN0JyxcbiAgICAuLi5vdmVycmlkZXNcbiAgfTtcbiAgZGVsZXRlIGNvbnRleHQuc2Vzc2lvbjtcbiAgY29udGV4dC5zZXNzaW9uID0ge1xuICAgIHVzZXJBY2Nlc3M6IG92ZXJyaWRlU2Vzc2lvbi51c2VyQWNjZXNzICE9PSB1bmRlZmluZWQgPyBvdmVycmlkZVNlc3Npb24udXNlckFjY2VzcyA6IGRlZmF1bHRTZXNzaW9uLnVzZXJBY2Nlc3MsXG4gICAgdXNlcklkOiBvdmVycmlkZVNlc3Npb24udXNlcklkICE9PSB1bmRlZmluZWQgPyBvdmVycmlkZVNlc3Npb24udXNlcklkIDogZGVmYXVsdFNlc3Npb24udXNlcklkLFxuICAgIHVzZXJuYW1lOiBvdmVycmlkZVNlc3Npb24udXNlcm5hbWUgIT09IHVuZGVmaW5lZCA/IG92ZXJyaWRlU2Vzc2lvbi51c2VybmFtZSA6IGRlZmF1bHRTZXNzaW9uLnVzZXJuYW1lXG4gIH07XG4gIHJldHVybiBjb250ZXh0IGFzIEFwaUNvbnRleHQ7XG59O1xuXG4vLyBDb21tb24gbW9jayByZXNvbHZlIGluZm8gZm9yIEdyYXBoUUwgcmVzb2x2ZXJzXG5leHBvcnQgY29uc3QgY3JlYXRlTW9ja1Jlc29sdmVJbmZvID0gKGZpZWxkTmFtZTogc3RyaW5nID0gJ3Rlc3QnKTogR3JhcGhRTFJlc29sdmVJbmZvID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuICBjb25zdCBvcGVyYXRpb24gPSB7fSBhcyBHcmFwaFFMUmVzb2x2ZUluZm9bJ29wZXJhdGlvbiddO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtdHlwZS1hc3NlcnRpb25zXG4gIGNvbnN0IHBhcmVudFR5cGUgPSB7fSBhcyBHcmFwaFFMUmVzb2x2ZUluZm9bJ3BhcmVudFR5cGUnXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuICBjb25zdCByZXR1cm5UeXBlID0ge30gYXMgR3JhcGhRTFJlc29sdmVJbmZvWydyZXR1cm5UeXBlJ107XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY29uc2lzdGVudC10eXBlLWFzc2VydGlvbnNcbiAgY29uc3Qgc2NoZW1hID0ge30gYXMgR3JhcGhRTFJlc29sdmVJbmZvWydzY2hlbWEnXTtcblxuICByZXR1cm4ge1xuICAgIGZpZWxkTmFtZSxcbiAgICBmaWVsZE5vZGVzOiBbXSxcbiAgICBmcmFnbWVudHM6IHt9LFxuICAgIG9wZXJhdGlvbixcbiAgICBwYXJlbnRUeXBlLFxuICAgIHBhdGg6IHtrZXk6IGZpZWxkTmFtZSwgcHJldjogdW5kZWZpbmVkLCB0eXBlbmFtZTogJ1Rlc3QnfSxcbiAgICByZXR1cm5UeXBlLFxuICAgIHJvb3RWYWx1ZToge30sXG4gICAgc2NoZW1hLFxuICAgIHZhcmlhYmxlVmFsdWVzOiB7fVxuICB9O1xufTtcblxuLy8gVXRpbGl0eSB0byBtb2NrIGFjdGlvbnMgbW9kdWxlXG5leHBvcnQgY29uc3QgbW9ja0FjdGlvbnNNb2R1bGUgPSBhc3luYyAobW9kdWxlUGF0aDogc3RyaW5nLCBtb2NrQWN0aW9uczogUmVjb3JkPHN0cmluZywgamVzdC5Nb2NrPikgPT4ge1xuICBjb25zdCBtb2NrcyA9IE9iamVjdC5lbnRyaWVzKG1vY2tBY3Rpb25zKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgYWNjW2tleV0gPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKHZhbHVlKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBqZXN0Lk1vY2s+KTtcblxuICBhd2FpdCBqZXN0Lmlzb2xhdGVNb2R1bGVzQXN5bmMoYXN5bmMgKCkgPT4ge1xuICAgIGplc3QudW5zdGFibGVfbW9ja01vZHVsZShtb2R1bGVQYXRoLCAoKSA9PiAoe1xuICAgICAgX19lc01vZHVsZTogdHJ1ZSxcbiAgICAgIC4uLm1vY2tzLFxuICAgICAgZGVmYXVsdDogbW9ja3NcbiAgICB9KSk7XG4gIH0pO1xufTtcblxuLy8gVXRpbGl0eSB0byBtb2NrIG9iamVjdCB0eXBlc1xuZXhwb3J0IGNvbnN0IG1vY2tPYmplY3RUeXBlID0gYXN5bmMgKG1vZHVsZVBhdGg6IHN0cmluZywgdHlwZU5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCBtb2NrID0ge1xuICAgIF9fZXNNb2R1bGU6IHRydWUsXG4gICAgW3R5cGVOYW1lXToge1xuICAgICAgZ2V0RmllbGQ6IGplc3QuZm4oKCkgPT4gKHtyZXNvbHZlOiBqZXN0LmZuKCl9KSksXG4gICAgICBnZXRGaWVsZHM6IGplc3QuZm4oKCkgPT4gKHt9KSlcbiAgICB9LFxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIFt0eXBlTmFtZV06IHtcbiAgICAgICAgZ2V0RmllbGQ6IGplc3QuZm4oKCkgPT4gKHtyZXNvbHZlOiBqZXN0LmZuKCl9KSksXG4gICAgICAgIGdldEZpZWxkczogamVzdC5mbigoKSA9PiAoe30pKVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgYXdhaXQgamVzdC5pc29sYXRlTW9kdWxlc0FzeW5jKGFzeW5jICgpID0+IHtcbiAgICBqZXN0LnVuc3RhYmxlX21vY2tNb2R1bGUobW9kdWxlUGF0aCwgKCkgPT4gbW9jayk7XG4gIH0pO1xufTtcblxuLy8gVXRpbGl0eSB0byBjcmVhdGUgYSB0ZXN0IHN1aXRlIGZvciBxdWVyeSByZXNvbHZlcnNcbmV4cG9ydCBjb25zdCBjcmVhdGVRdWVyeVRlc3RTdWl0ZSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBhY3Rpb25zUGF0aDogc3RyaW5nLFxuICB0ZXN0Q2FzZXM6IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIGFyZ3M6IFRlc3RBcmdzO1xuICAgIGV4cGVjdGVkQ2FsbDogKGNvbnRleHQ6IFRlc3RDb250ZXh0LCBhcmdzOiBUZXN0QXJncykgPT4gVGVzdEFyZ3M7XG4gICAgbW9ja1JldHVyblZhbHVlOiBUZXN0UmV0dXJuVmFsdWU7XG4gICAgZXJyb3JDYXNlPzogYm9vbGVhbjtcbiAgfT5cbikgPT4ge1xuICBkZXNjcmliZShgJHtuYW1lfSBRdWVyaWVzYCwgKCkgPT4ge1xuICAgIGxldCBhY3Rpb25zOiBhbnk7XG4gICAgY29uc3QgbW9ja0NvbnRleHQgPSBjcmVhdGVNb2NrQ29udGV4dCgpO1xuXG4gICAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICAgIGFjdGlvbnMgPSB7fTtcbiAgICB9KTtcblxuICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7bmFtZTogdGVzdE5hbWUsIGFjdGlvbk5hbWUsIGFyZ3MsIGV4cGVjdGVkQ2FsbCwgbW9ja1JldHVyblZhbHVlLCBlcnJvckNhc2UgPSBmYWxzZX0pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgY2FsbCAke2FjdGlvbk5hbWV9IGFjdGlvbiB3aXRoIGNvcnJlY3QgcGFyYW1ldGVyc2AsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbW9ja0ZuID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlc29sdmUobW9ja1JldHVyblZhbHVlKSk7XG4gICAgICAgIGFjdGlvbnNbYWN0aW9uTmFtZV0gPSBtb2NrRm47XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9ja0ZuKG1vY2tDb250ZXh0LCBhcmdzKTtcbiAgICAgICAgZXhwZWN0KG1vY2tGbikudG9IYXZlQmVlbkNhbGxlZFdpdGgobW9ja0NvbnRleHQsIGV4cGVjdGVkQ2FsbChtb2NrQ29udGV4dCwgYXJncykpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tSZXR1cm5WYWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYoZXJyb3JDYXNlKSB7XG4gICAgICAgIGl0KGBzaG91bGQgaGFuZGxlICR7YWN0aW9uTmFtZX0gd2hlbiBubyBkYXRhIGZvdW5kYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1vY2tGbiA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gUHJvbWlzZS5yZXNvbHZlKG51bGwpKTtcbiAgICAgICAgICBhY3Rpb25zW2FjdGlvbk5hbWVdID0gbW9ja0ZuO1xuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9ja0ZuKG1vY2tDb250ZXh0LCBhcmdzKTtcbiAgICAgICAgICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ29udGV4dCwgZXhwZWN0ZWRDYWxsKG1vY2tDb250ZXh0LCBhcmdzKSk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLy8gVXRpbGl0eSB0byBjcmVhdGUgYSB0ZXN0IHN1aXRlIGZvciBtdXRhdGlvbiByZXNvbHZlcnNcbmV4cG9ydCBjb25zdCBjcmVhdGVNdXRhdGlvblRlc3RTdWl0ZSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBhY3Rpb25zUGF0aDogc3RyaW5nLFxuICB0ZXN0Q2FzZXM6IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIGFyZ3M6IFRlc3RBcmdzO1xuICAgIGV4cGVjdGVkQ2FsbDogKGNvbnRleHQ6IFRlc3RDb250ZXh0LCBhcmdzOiBUZXN0QXJncykgPT4gVGVzdEFyZ3M7XG4gICAgbW9ja1JldHVyblZhbHVlOiBUZXN0UmV0dXJuVmFsdWU7XG4gICAgcmVxdWlyZXNBdXRoPzogYm9vbGVhbjtcbiAgICBhdXRoVXNlcklkPzogc3RyaW5nO1xuICB9PlxuKSA9PiB7XG4gIGRlc2NyaWJlKGAke25hbWV9IE11dGF0aW9uc2AsICgpID0+IHtcbiAgICBsZXQgYWN0aW9uczogYW55O1xuXG4gICAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICAgIGFjdGlvbnMgPSB7fTtcbiAgICB9KTtcblxuICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7XG4gICAgICBhY3Rpb25OYW1lLFxuICAgICAgYXJncyxcbiAgICAgIGV4cGVjdGVkQ2FsbCxcbiAgICAgIG1vY2tSZXR1cm5WYWx1ZSxcbiAgICAgIHJlcXVpcmVzQXV0aCA9IGZhbHNlLFxuICAgICAgYXV0aFVzZXJJZFxuICAgIH0pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgY2FsbCAke2FjdGlvbk5hbWV9IGFjdGlvbiB3aXRoIGNvcnJlY3QgcGFyYW1ldGVyc2AsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbW9ja0NvbnRleHQgPSBjcmVhdGVNb2NrQ29udGV4dCgpO1xuICAgICAgICBpZihyZXF1aXJlc0F1dGggJiYgYXV0aFVzZXJJZCkge1xuICAgICAgICAgIChtb2NrQ29udGV4dC5zZXNzaW9uIGFzIHt1c2VySWQ6IHN0cmluZ30pLnVzZXJJZCA9IGF1dGhVc2VySWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2NrRm4gPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVzb2x2ZShtb2NrUmV0dXJuVmFsdWUpKTtcbiAgICAgICAgYWN0aW9uc1thY3Rpb25OYW1lXSA9IG1vY2tGbjtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrRm4obW9ja0NvbnRleHQsIGFyZ3MpO1xuICAgICAgICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ29udGV4dCwgZXhwZWN0ZWRDYWxsKG1vY2tDb250ZXh0LCBhcmdzKSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwobW9ja1JldHVyblZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbi8vIFV0aWxpdHkgdG8gY3JlYXRlIGludGVncmF0aW9uIHRlc3Qgc3VpdGVcbmV4cG9ydCBjb25zdCBjcmVhdGVJbnRlZ3JhdGlvblRlc3RTdWl0ZSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBhY3Rpb25zUGF0aDogc3RyaW5nLFxuICBvYmplY3RUeXBlUGF0aDogc3RyaW5nLFxuICB0eXBlTmFtZTogc3RyaW5nLFxuICB0ZXN0Q2FzZXM6IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIGFyZ3M6IFRlc3RBcmdzO1xuICAgIGV4cGVjdGVkQ2FsbDogKGNvbnRleHQ6IFRlc3RDb250ZXh0LCBhcmdzOiBUZXN0QXJncykgPT4gVGVzdEFyZ3M7XG4gICAgc3VjY2Vzc1JldHVyblZhbHVlOiBUZXN0UmV0dXJuVmFsdWU7XG4gICAgZXJyb3JSZXR1cm5WYWx1ZTogVGVzdFJldHVyblZhbHVlO1xuICAgIHRlc3RFcnJvckNhc2U6IGJvb2xlYW47XG4gIH0+XG4pID0+IHtcbiAgZGVzY3JpYmUoYCR7bmFtZX0gSW50ZWdyYXRpb25gLCAoKSA9PiB7XG4gICAgbGV0IGFjdGlvbnM6IGFueTtcblxuICAgIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgICBhY3Rpb25zID0ge307XG4gICAgfSk7XG5cbiAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgoe1xuICAgICAgbmFtZTogdGVzdE5hbWUsXG4gICAgICBhY3Rpb25OYW1lLFxuICAgICAgYXJncyxcbiAgICAgIGV4cGVjdGVkQ2FsbCxcbiAgICAgIHN1Y2Nlc3NSZXR1cm5WYWx1ZSxcbiAgICAgIGVycm9yUmV0dXJuVmFsdWUsXG4gICAgICB0ZXN0RXJyb3JDYXNlXG4gICAgfSkgPT4ge1xuICAgICAgZGVzY3JpYmUodGVzdE5hbWUsICgpID0+IHtcbiAgICAgICAgaXQoYHNob3VsZCByZXR1cm4gZGF0YSB3aGVuICR7YWN0aW9uTmFtZX0gc3VjY2VlZHNgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbW9ja0NvbnRleHQgPSBjcmVhdGVNb2NrQ29udGV4dCgpO1xuICAgICAgICAgIGNvbnN0IG1vY2tGbiA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHN1Y2Nlc3NSZXR1cm5WYWx1ZSkpO1xuICAgICAgICAgIGFjdGlvbnNbYWN0aW9uTmFtZV0gPSBtb2NrRm47XG5cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrRm4obW9ja0NvbnRleHQsIGFyZ3MpO1xuXG4gICAgICAgICAgZXhwZWN0KG1vY2tGbikudG9IYXZlQmVlbkNhbGxlZFdpdGgobW9ja0NvbnRleHQsIGV4cGVjdGVkQ2FsbChtb2NrQ29udGV4dCwgYXJncykpO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoc3VjY2Vzc1JldHVyblZhbHVlIHx8IHt9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYodGVzdEVycm9yQ2FzZSkge1xuICAgICAgICAgIGl0KGBzaG91bGQgaGFuZGxlICR7YWN0aW9uTmFtZX0gd2hlbiBubyBkYXRhIGZvdW5kYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9ja0NvbnRleHQgPSBjcmVhdGVNb2NrQ29udGV4dCgpO1xuICAgICAgICAgICAgY29uc3QgbW9ja0ZuID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlc29sdmUoZXJyb3JSZXR1cm5WYWx1ZSkpO1xuICAgICAgICAgICAgYWN0aW9uc1thY3Rpb25OYW1lXSA9IG1vY2tGbjtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9ja0ZuKG1vY2tDb250ZXh0LCBhcmdzKTtcblxuICAgICAgICAgICAgZXhwZWN0KG1vY2tGbikudG9IYXZlQmVlbkNhbGxlZFdpdGgobW9ja0NvbnRleHQsIGV4cGVjdGVkQ2FsbChtb2NrQ29udGV4dCwgYXJncykpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChlcnJvclJldHVyblZhbHVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLy8gQ29tbW9uIG1vY2sgZGF0YSBnZW5lcmF0b3JzXG5leHBvcnQgY29uc3QgY3JlYXRlTW9ja1VzZXIgPSAob3ZlcnJpZGVzOiBNb2NrT3ZlcnJpZGVzID0ge30pID0+ICh7XG4gIGVtYWlsOiAndGVzdEBleGFtcGxlLmNvbScsXG4gIGZpcnN0TmFtZTogJ1Rlc3QnLFxuICBsYXN0TmFtZTogJ1VzZXInLFxuICB1c2VySWQ6ICd1c2VyMScsXG4gIHVzZXJuYW1lOiAndGVzdHVzZXInLFxuICAuLi5vdmVycmlkZXNcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9ja1Bvc3QgPSAob3ZlcnJpZGVzOiBNb2NrT3ZlcnJpZGVzID0ge30pID0+ICh7XG4gIGNvbnRlbnQ6ICdUZXN0IHBvc3QgY29udGVudCcsXG4gIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICBwb3N0SWQ6ICdwb3N0MScsXG4gIHVzZXJJZDogJ3VzZXIxJyxcbiAgLi4ub3ZlcnJpZGVzXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1vY2tNZXNzYWdlID0gKG92ZXJyaWRlczogTW9ja092ZXJyaWRlcyA9IHt9KSA9PiAoe1xuICBjb250ZW50OiAnVGVzdCBtZXNzYWdlJyxcbiAgY29udmVyc2F0aW9uSWQ6ICdjb252MScsXG4gIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICBtZXNzYWdlSWQ6ICdtc2cxJyxcbiAgdXNlcklkOiAndXNlcjEnLFxuICAuLi5vdmVycmlkZXNcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9ja1JlYWN0aW9uID0gKG92ZXJyaWRlczogTW9ja092ZXJyaWRlcyA9IHt9KSA9PiAoe1xuICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgcG9zdElkOiAncG9zdDEnLFxuICByZWFjdGlvbklkOiAncmVhY3QxJyxcbiAgdHlwZTogJ2xpa2UnLFxuICB1c2VySWQ6ICd1c2VyMScsXG4gIC4uLm92ZXJyaWRlc1xufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrVGFnID0gKG92ZXJyaWRlczogTW9ja092ZXJyaWRlcyA9IHt9KSA9PiAoe1xuICBkZXNjcmlwdGlvbjogJ1Rlc3QgdGFnIGRlc2NyaXB0aW9uJyxcbiAgbmFtZTogJ3Rlc3QtdGFnJyxcbiAgdGFnSWQ6ICd0YWcxJyxcbiAgLi4ub3ZlcnJpZGVzXG59KTtcblxuLy8gVXRpbGl0eSB0byBzZXQgdXAgY29tbW9uIG1vY2tzXG5leHBvcnQgY29uc3Qgc2V0dXBDb21tb25Nb2NrcyA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgbW9jayA9IHtcbiAgICBfX2VzTW9kdWxlOiB0cnVlLFxuICAgIHVzZURiOiBqZXN0LmZuKCksXG4gICAgZ2V0TGltaXQ6IGplc3QuZm4oKSxcbiAgICBnZXREb2NJZDogamVzdC5mbigpLFxuICAgIHNvcnRJZHM6IGplc3QuZm4oKSxcbiAgICBnZXRHcWxGaWVsZHM6IGplc3QuZm4oKSxcbiAgICBkZWZhdWx0OiB7XG4gICAgICB1c2VEYjogamVzdC5mbigpLFxuICAgICAgZ2V0TGltaXQ6IGplc3QuZm4oKSxcbiAgICAgIGdldERvY0lkOiBqZXN0LmZuKCksXG4gICAgICBzb3J0SWRzOiBqZXN0LmZuKCksXG4gICAgICBnZXRHcWxGaWVsZHM6IGplc3QuZm4oKVxuICAgIH1cbiAgfTtcbiAgYXdhaXQgamVzdC5pc29sYXRlTW9kdWxlc0FzeW5jKGFzeW5jICgpID0+IHtcbiAgICBqZXN0LnVuc3RhYmxlX21vY2tNb2R1bGUoJy4vYXJhbmdvZGJVdGlscy5qcycsICgpID0+IG1vY2spO1xuICB9KTtcbn07XG5cbi8vIFV0aWxpdHkgdG8gY2xlYXIgYWxsIG1vY2tzXG5leHBvcnQgY29uc3QgY2xlYXJBbGxNb2NrcyA9ICgpID0+IHtcbiAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG59O1xuXG4vLyBVdGlsaXR5IHRvIGNyZWF0ZSBhIHRlc3Qgc3VpdGUgZm9yIGFjdGlvbiBmdW5jdGlvbnNcbmV4cG9ydCBjb25zdCBjcmVhdGVBY3Rpb25UZXN0U3VpdGUgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgYWN0aW9uc1BhdGg6IHN0cmluZyxcbiAgdGVzdENhc2VzOiBBcnJheTx7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGFjdGlvbk5hbWU6IHN0cmluZztcbiAgICBhcmdzOiBUZXN0QXJncztcbiAgICBtb2NrUXVlcnk6IGplc3QuTW9jaztcbiAgICBleHBlY3RlZFJlc3VsdDogVGVzdFJldHVyblZhbHVlO1xuICB9PlxuKSA9PiB7XG4gIGRlc2NyaWJlKGAke25hbWV9IGFjdGlvbnNgLCAoKSA9PiB7XG4gICAgbGV0IGFjdGlvbnM6IGFueTtcblxuICAgIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgICBhY3Rpb25zID0gYXdhaXQgaW1wb3J0KGFjdGlvbnNQYXRoKTtcbiAgICB9KTtcblxuICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7bmFtZTogdGVzdE5hbWUsIGFjdGlvbk5hbWUsIGFyZ3MsIG1vY2tRdWVyeSwgZXhwZWN0ZWRSZXN1bHR9KSA9PiB7XG4gICAgICBpdChgc2hvdWxkIGV4ZWN1dGUgJHthY3Rpb25OYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbW9ja0NvbnRleHQgPSBjcmVhdGVNb2NrQ29udGV4dCgpO1xuICAgICAgICBjb25zdCBtb2NrRGIgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgICBxdWVyeTogbW9ja1F1ZXJ5XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBhY3R1YWwgPSBqZXN0LnJlcXVpcmVBY3R1YWwoJy4vYXJhbmdvZGJVdGlscy5qcycpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBqZXN0LmRvTW9jaygnLi9hcmFuZ29kYlV0aWxzLmpzJywgKCkgPT4gKHtcbiAgICAgICAgICB1c2VEYjogbW9ja0RiLFxuICAgICAgICAgIC4uLmFjdHVhbFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKGFjdGlvbnNbYWN0aW9uTmFtZV0gYXMgamVzdC5Nb2NrKShtb2NrQ29udGV4dCwgYXJncyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFkYXB0ZXJUZXN0U3VpdGUgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgYWRhcHRlclBhdGg6IHN0cmluZyxcbiAgdGVzdENhc2VzOiBhbnlbXVxuKSA9PiB7XG4gIGRlc2NyaWJlKG5hbWUsICgpID0+IHtcbiAgICBsZXQgYWRhcHRlcjogYW55O1xuXG4gICAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICAgIGFkYXB0ZXIgPSBhd2FpdCBpbXBvcnQoYWRhcHRlclBhdGgpO1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtuYW1lOiB0ZXN0TmFtZSwgaW5wdXQsIGV4cGVjdGVkT3V0cHV0fSkgPT4ge1xuICAgICAgaXQoYHNob3VsZCAke3Rlc3ROYW1lfWAsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKGFkYXB0ZXIgYXMge3BhcnNlVGFnOiAoaW5wdXQ6IFRlc3RBcmdzKSA9PiBUZXN0UmV0dXJuVmFsdWV9KS5wYXJzZVRhZyhpbnB1dCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVV0aWxzVGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIHV0aWxzUGF0aDogc3RyaW5nLFxuICB0ZXN0Q2FzZXM6IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ6IFRlc3RBcmdzO1xuICAgIGV4cGVjdGVkT3V0cHV0OiBUZXN0UmV0dXJuVmFsdWU7XG4gIH0+XG4pID0+IHtcbiAgZGVzY3JpYmUobmFtZSwgKCkgPT4ge1xuICAgIGxldCB1dGlsczogYW55O1xuXG4gICAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICAgIHV0aWxzID0gYXdhaXQgaW1wb3J0KHV0aWxzUGF0aCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgoe25hbWU6IHRlc3ROYW1lLCBpbnB1dCwgZXhwZWN0ZWRPdXRwdXR9KSA9PiB7XG4gICAgICBpdChgc2hvdWxkICR7dGVzdE5hbWV9YCwgKCkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICBpZigodXRpbHMgYXMge2xvZ0luZm8/OiAoaW5wdXQ6IFRlc3RBcmdzKSA9PiBUZXN0UmV0dXJuVmFsdWV9KS5sb2dJbmZvKSB7XG4gICAgICAgICAgcmVzdWx0ID0gKHV0aWxzIGFzIHtsb2dJbmZvOiAoaW5wdXQ6IFRlc3RBcmdzKSA9PiBUZXN0UmV0dXJuVmFsdWV9KS5sb2dJbmZvKGlucHV0KTtcbiAgICAgICAgfSBlbHNlIGlmKCh1dGlscyBhcyB7cmVtb3ZlRW1wdHlLZXlzPzogKGlucHV0OiBUZXN0QXJncykgPT4gVGVzdFJldHVyblZhbHVlfSkucmVtb3ZlRW1wdHlLZXlzKSB7XG4gICAgICAgICAgcmVzdWx0ID0gKHV0aWxzIGFzIHtyZW1vdmVFbXB0eUtleXM6IChpbnB1dDogVGVzdEFyZ3MpID0+IFRlc3RSZXR1cm5WYWx1ZX0pLnJlbW92ZUVtcHR5S2V5cyhpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdWl0YWJsZSBmdW5jdGlvbiBmb3VuZCBpbiAke3V0aWxzUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07Il0sCiAgIm1hcHBpbmdzIjogIkFBSUEsT0FBUSxRQUFBQSxNQUFXLGdCQVlaLE1BQU1DLEVBQW9CLENBQUNDLEVBQTJCLENBQUMsSUFBa0IsQ0FDOUUsTUFBTUMsRUFBaUIsQ0FDckIsV0FBWSxFQUNaLE9BQVEsUUFDUixTQUFVLFVBQ1osRUFDTUMsRUFBa0RGLEVBQVUsU0FBVyxDQUFDLEVBQ3hFRyxFQUF1QixDQUMzQixhQUFlSCxFQUFVLGNBQTJCLE9BQ3BELEdBQUdBLENBQ0wsRUFDQSxjQUFPRyxFQUFRLFFBQ2ZBLEVBQVEsUUFBVSxDQUNoQixXQUFZRCxFQUFnQixhQUFlLE9BQVlBLEVBQWdCLFdBQWFELEVBQWUsV0FDbkcsT0FBUUMsRUFBZ0IsU0FBVyxPQUFZQSxFQUFnQixPQUFTRCxFQUFlLE9BQ3ZGLFNBQVVDLEVBQWdCLFdBQWEsT0FBWUEsRUFBZ0IsU0FBV0QsRUFBZSxRQUMvRixFQUNPRSxDQUNULEVBR2FDLEVBQXdCLENBQUNDLEVBQW9CLFVBVWpELENBQ0wsVUFBQUEsRUFDQSxXQUFZLENBQUMsRUFDYixVQUFXLENBQUMsRUFDWixVQVpnQixDQUFDLEVBYWpCLFdBWGlCLENBQUMsRUFZbEIsS0FBTSxDQUFDLElBQUtBLEVBQVcsS0FBTSxPQUFXLFNBQVUsTUFBTSxFQUN4RCxXQVhpQixDQUFDLEVBWWxCLFVBQVcsQ0FBQyxFQUNaLE9BWGEsQ0FBQyxFQVlkLGVBQWdCLENBQUMsQ0FDbkIsR0FJV0MsRUFBb0IsTUFBT0MsRUFBb0JDLElBQTJDLENBQ3JHLE1BQU1DLEVBQVEsT0FBTyxRQUFRRCxDQUFXLEVBQUUsT0FBTyxDQUFDRSxFQUFLLENBQUNDLEVBQUtDLENBQUssS0FDaEVGLEVBQUlDLENBQUcsRUFBSWIsRUFBSyxHQUFHLEVBQUUsbUJBQW1CYyxDQUFLLEVBQ3RDRixHQUNOLENBQUMsQ0FBOEIsRUFFbEMsTUFBTVosRUFBSyxvQkFBb0IsU0FBWSxDQUN6Q0EsRUFBSyxv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LElBQU0sQ0FDN0IsTUFBTU8sRUFBVXVCLEVBQTZELFNBQVNDLENBQUssRUFDM0YsT0FBT3hCLENBQU0sRUFBRSxRQUFReUIsQ0FBYyxDQUN2QyxDQUFDLENBQ0gsQ0FBQyxDQUNILENBQUMsQ0FDSCxFQUVhQyxFQUF1QixDQUNsQ3RDLEVBQ0F1QyxFQUNBckMsSUFLRyxDQUNILFNBQVNGLEVBQU0sSUFBTSxDQUNuQixJQUFJd0MsRUFFSixVQUFVLFNBQVksQ0FDcEJBLEVBQVEsTUFBTSxPQUFPRCxFQUN2QixDQUFDLEVBRURyQyxFQUFVLFFBQVEsQ0FBQyxDQUFDLEtBQU1HLEVBQVUsTUFBQStCLEVBQU8sZUFBQUMsQ0FBYyxJQUFNLENBQzdELEdBQUcsVUFBVWhDLENBQVEsR0FBSSxJQUFNLENBQzdCLElBQUlPLEVBQ0osR0FBSTRCLEVBQTJELFFBQzdENUIsRUFBVTRCLEVBQTBELFFBQVFKLENBQUssVUFDeEVJLEVBQW1FLGdCQUM1RTVCLEVBQVU0QixFQUFrRSxnQkFBZ0JKLENBQUssTUFFakcsT0FBTSxJQUFJLE1BQU0saUNBQWlDRyxDQUFTLEVBQUUsRUFFOUQsT0FBTzNCLENBQU0sRUFBRSxRQUFReUIsQ0FBYyxDQUN2QyxDQUFDLENBQ0gsQ0FBQyxDQUNILENBQUMsQ0FDSCIsCiAgIm5hbWVzIjogWyJqZXN0IiwgImNyZWF0ZU1vY2tDb250ZXh0IiwgIm92ZXJyaWRlcyIsICJkZWZhdWx0U2Vzc2lvbiIsICJvdmVycmlkZVNlc3Npb24iLCAiY29udGV4dCIsICJjcmVhdGVNb2NrUmVzb2x2ZUluZm8iLCAiZmllbGROYW1lIiwgIm1vY2tBY3Rpb25zTW9kdWxlIiwgIm1vZHVsZVBhdGgiLCAibW9ja0FjdGlvbnMiLCAibW9ja3MiLCAiYWNjIiwgImtleSIsICJ2YWx1ZSIsICJtb2NrT2JqZWN0VHlwZSIsICJ0eXBlTmFtZSIsICJtb2NrIiwgImNyZWF0ZVF1ZXJ5VGVzdFN1aXRlIiwgIm5hbWUiLCAiYWN0aW9uc1BhdGgiLCAidGVzdENhc2VzIiwgImFjdGlvbnMiLCAibW9ja0NvbnRleHQiLCAidGVzdE5hbWUiLCAiYWN0aW9uTmFtZSIsICJhcmdzIiwgImV4cGVjdGVkQ2FsbCIsICJtb2NrUmV0dXJuVmFsdWUiLCAiZXJyb3JDYXNlIiwgIm1vY2tGbiIsICJyZXN1bHQiLCAiY3JlYXRlTXV0YXRpb25UZXN0U3VpdGUiLCAicmVxdWlyZXNBdXRoIiwgImF1dGhVc2VySWQiLCAiY3JlYXRlSW50ZWdyYXRpb25UZXN0U3VpdGUiLCAib2JqZWN0VHlwZVBhdGgiLCAic3VjY2Vzc1JldHVyblZhbHVlIiwgImVycm9yUmV0dXJuVmFsdWUiLCAidGVzdEVycm9yQ2FzZSIsICJjcmVhdGVNb2NrVXNlciIsICJjcmVhdGVNb2NrUG9zdCIsICJjcmVhdGVNb2NrTWVzc2FnZSIsICJjcmVhdGVNb2NrUmVhY3Rpb24iLCAiY3JlYXRlTW9ja1RhZyIsICJzZXR1cENvbW1vbk1vY2tzIiwgImNsZWFyQWxsTW9ja3MiLCAiY3JlYXRlQWN0aW9uVGVzdFN1aXRlIiwgIm1vY2tRdWVyeSIsICJleHBlY3RlZFJlc3VsdCIsICJtb2NrRGIiLCAiYWN0dWFsIiwgImNyZWF0ZUFkYXB0ZXJUZXN0U3VpdGUiLCAiYWRhcHRlclBhdGgiLCAiYWRhcHRlciIsICJpbnB1dCIsICJleHBlY3RlZE91dHB1dCIsICJjcmVhdGVVdGlsc1Rlc3RTdWl0ZSIsICJ1dGlsc1BhdGgiLCAidXRpbHMiXQp9Cg==
1
+ /**
2
+ * Copyright (c) 2025-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { jest } from '@jest/globals';
5
+ export const createMockContext = (overrides = {})=>{
6
+ const defaultSession = {
7
+ userAccess: 1,
8
+ userId: 'user1',
9
+ username: 'testuser'
10
+ };
11
+ const overrideSession = overrides.session || {};
12
+ const context = {
13
+ databaseName: overrides.databaseName ?? 'test',
14
+ ...overrides
15
+ };
16
+ delete context.session;
17
+ context.session = {
18
+ userAccess: overrideSession.userAccess !== undefined ? overrideSession.userAccess : defaultSession.userAccess,
19
+ userId: overrideSession.userId !== undefined ? overrideSession.userId : defaultSession.userId,
20
+ username: overrideSession.username !== undefined ? overrideSession.username : defaultSession.username
21
+ };
22
+ return context;
23
+ };
24
+ // Common mock resolve info for GraphQL resolvers
25
+ export const createMockResolveInfo = (fieldName = 'test')=>{
26
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
27
+ const operation = {};
28
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
29
+ const parentType = {};
30
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
31
+ const returnType = {};
32
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
33
+ const schema = {};
34
+ return {
35
+ fieldName,
36
+ fieldNodes: [],
37
+ fragments: {},
38
+ operation,
39
+ parentType,
40
+ path: {
41
+ key: fieldName,
42
+ prev: undefined,
43
+ typename: 'Test'
44
+ },
45
+ returnType,
46
+ rootValue: {},
47
+ schema,
48
+ variableValues: {}
49
+ };
50
+ };
51
+ // Utility to mock actions module
52
+ export const mockActionsModule = async (modulePath, mockActions)=>{
53
+ const mocks = Object.entries(mockActions).reduce((acc, [key, value])=>{
54
+ acc[key] = jest.fn().mockImplementation(value);
55
+ return acc;
56
+ }, {});
57
+ await jest.isolateModulesAsync(async ()=>{
58
+ jest.unstable_mockModule(modulePath, ()=>({
59
+ __esModule: true,
60
+ ...mocks,
61
+ default: mocks
62
+ }));
63
+ });
64
+ };
65
+ // Utility to mock object types
66
+ export const mockObjectType = async (modulePath, typeName)=>{
67
+ const mock = {
68
+ __esModule: true,
69
+ [typeName]: {
70
+ getField: jest.fn(()=>({
71
+ resolve: jest.fn()
72
+ })),
73
+ getFields: jest.fn(()=>({}))
74
+ },
75
+ default: {
76
+ [typeName]: {
77
+ getField: jest.fn(()=>({
78
+ resolve: jest.fn()
79
+ })),
80
+ getFields: jest.fn(()=>({}))
81
+ }
82
+ }
83
+ };
84
+ await jest.isolateModulesAsync(async ()=>{
85
+ jest.unstable_mockModule(modulePath, ()=>mock);
86
+ });
87
+ };
88
+ // Utility to create a test suite for query resolvers
89
+ export const createQueryTestSuite = (name, actionsPath, testCases)=>{
90
+ describe(`${name} Queries`, ()=>{
91
+ let actions;
92
+ const mockContext = createMockContext();
93
+ beforeAll(()=>{
94
+ actions = {};
95
+ });
96
+ testCases.forEach(({ name: testName, actionName, args, expectedCall, mockReturnValue, errorCase = false })=>{
97
+ it(`should call ${actionName} action with correct parameters`, async ()=>{
98
+ const mockFn = jest.fn().mockImplementation(()=>Promise.resolve(mockReturnValue));
99
+ actions[actionName] = mockFn;
100
+ const result = await mockFn(mockContext, args);
101
+ expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));
102
+ expect(result).toEqual(mockReturnValue);
103
+ });
104
+ if (errorCase) {
105
+ it(`should handle ${actionName} when no data found`, async ()=>{
106
+ const mockFn = jest.fn().mockImplementation(()=>Promise.resolve(null));
107
+ actions[actionName] = mockFn;
108
+ const result = await mockFn(mockContext, args);
109
+ expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));
110
+ expect(result).toBeNull();
111
+ });
112
+ }
113
+ });
114
+ });
115
+ };
116
+ // Utility to create a test suite for mutation resolvers
117
+ export const createMutationTestSuite = (name, actionsPath, testCases)=>{
118
+ describe(`${name} Mutations`, ()=>{
119
+ let actions;
120
+ beforeAll(()=>{
121
+ actions = {};
122
+ });
123
+ testCases.forEach(({ actionName, args, expectedCall, mockReturnValue, requiresAuth = false, authUserId })=>{
124
+ it(`should call ${actionName} action with correct parameters`, async ()=>{
125
+ const mockContext = createMockContext();
126
+ if (requiresAuth && authUserId) {
127
+ mockContext.session.userId = authUserId;
128
+ }
129
+ const mockFn = jest.fn().mockImplementation(()=>Promise.resolve(mockReturnValue));
130
+ actions[actionName] = mockFn;
131
+ const result = await mockFn(mockContext, args);
132
+ expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));
133
+ expect(result).toEqual(mockReturnValue);
134
+ });
135
+ });
136
+ });
137
+ };
138
+ // Utility to create integration test suite
139
+ export const createIntegrationTestSuite = (name, actionsPath, objectTypePath, typeName, testCases)=>{
140
+ describe(`${name} Integration`, ()=>{
141
+ let actions;
142
+ beforeAll(()=>{
143
+ actions = {};
144
+ });
145
+ testCases.forEach(({ name: testName, actionName, args, expectedCall, successReturnValue, errorReturnValue, testErrorCase })=>{
146
+ describe(testName, ()=>{
147
+ it(`should return data when ${actionName} succeeds`, async ()=>{
148
+ const mockContext = createMockContext();
149
+ const mockFn = jest.fn().mockImplementation(()=>Promise.resolve(successReturnValue));
150
+ actions[actionName] = mockFn;
151
+ const result = await mockFn(mockContext, args);
152
+ expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));
153
+ expect(result).toEqual(successReturnValue || {});
154
+ });
155
+ if (testErrorCase) {
156
+ it(`should handle ${actionName} when no data found`, async ()=>{
157
+ const mockContext = createMockContext();
158
+ const mockFn = jest.fn().mockImplementation(()=>Promise.resolve(errorReturnValue));
159
+ actions[actionName] = mockFn;
160
+ const result = await mockFn(mockContext, args);
161
+ expect(mockFn).toHaveBeenCalledWith(mockContext, expectedCall(mockContext, args));
162
+ expect(result).toEqual(errorReturnValue);
163
+ });
164
+ }
165
+ });
166
+ });
167
+ });
168
+ };
169
+ // Common mock data generators
170
+ export const createMockUser = (overrides = {})=>({
171
+ email: 'test@example.com',
172
+ firstName: 'Test',
173
+ lastName: 'User',
174
+ userId: 'user1',
175
+ username: 'testuser',
176
+ ...overrides
177
+ });
178
+ export const createMockPost = (overrides = {})=>({
179
+ content: 'Test post content',
180
+ createdAt: new Date().toISOString(),
181
+ postId: 'post1',
182
+ userId: 'user1',
183
+ ...overrides
184
+ });
185
+ export const createMockMessage = (overrides = {})=>({
186
+ content: 'Test message',
187
+ conversationId: 'conv1',
188
+ createdAt: new Date().toISOString(),
189
+ messageId: 'msg1',
190
+ userId: 'user1',
191
+ ...overrides
192
+ });
193
+ export const createMockReaction = (overrides = {})=>({
194
+ createdAt: new Date().toISOString(),
195
+ postId: 'post1',
196
+ reactionId: 'react1',
197
+ type: 'like',
198
+ userId: 'user1',
199
+ ...overrides
200
+ });
201
+ export const createMockTag = (overrides = {})=>({
202
+ description: 'Test tag description',
203
+ name: 'test-tag',
204
+ tagId: 'tag1',
205
+ ...overrides
206
+ });
207
+ // Utility to set up common mocks
208
+ export const setupCommonMocks = async ()=>{
209
+ const mock = {
210
+ __esModule: true,
211
+ useDb: jest.fn(),
212
+ getLimit: jest.fn(),
213
+ getDocId: jest.fn(),
214
+ sortIds: jest.fn(),
215
+ getGqlFields: jest.fn(),
216
+ default: {
217
+ useDb: jest.fn(),
218
+ getLimit: jest.fn(),
219
+ getDocId: jest.fn(),
220
+ sortIds: jest.fn(),
221
+ getGqlFields: jest.fn()
222
+ }
223
+ };
224
+ await jest.isolateModulesAsync(async ()=>{
225
+ jest.unstable_mockModule('./arangodbUtils.js', ()=>mock);
226
+ });
227
+ };
228
+ // Utility to clear all mocks
229
+ export const clearAllMocks = ()=>{
230
+ jest.clearAllMocks();
231
+ };
232
+ // Utility to create a test suite for action functions
233
+ export const createActionTestSuite = (name, actionsPath, testCases)=>{
234
+ describe(`${name} actions`, ()=>{
235
+ let actions;
236
+ beforeAll(async ()=>{
237
+ actions = await import(actionsPath);
238
+ });
239
+ testCases.forEach(({ name: testName, actionName, args, mockQuery, expectedResult })=>{
240
+ it(`should execute ${actionName}`, async ()=>{
241
+ const mockContext = createMockContext();
242
+ const mockDb = jest.fn().mockReturnValue({
243
+ query: mockQuery
244
+ });
245
+ const actual = jest.requireActual('./arangodbUtils.js');
246
+ jest.doMock('./arangodbUtils.js', ()=>({
247
+ useDb: mockDb,
248
+ ...actual
249
+ }));
250
+ const result = await actions[actionName](mockContext, args);
251
+ expect(result).toEqual(expectedResult);
252
+ });
253
+ });
254
+ });
255
+ };
256
+ export const createAdapterTestSuite = (name, adapterPath, testCases)=>{
257
+ describe(name, ()=>{
258
+ let adapter;
259
+ beforeAll(async ()=>{
260
+ adapter = await import(adapterPath);
261
+ });
262
+ testCases.forEach(({ name: testName, input, expectedOutput })=>{
263
+ it(`should ${testName}`, ()=>{
264
+ const result = adapter.parseTag(input);
265
+ expect(result).toEqual(expectedOutput);
266
+ });
267
+ });
268
+ });
269
+ };
270
+ export const createUtilsTestSuite = (name, utilsPath, testCases)=>{
271
+ describe(name, ()=>{
272
+ let utils;
273
+ beforeAll(async ()=>{
274
+ utils = await import(utilsPath);
275
+ });
276
+ testCases.forEach(({ name: testName, input, expectedOutput })=>{
277
+ it(`should ${testName}`, ()=>{
278
+ let result;
279
+ if (utils.logInfo) {
280
+ result = utils.logInfo(input);
281
+ } else if (utils.removeEmptyKeys) {
282
+ result = utils.removeEmptyKeys(input);
283
+ } else {
284
+ throw new Error(`No suitable function found in ${utilsPath}`);
285
+ }
286
+ expect(result).toEqual(expectedOutput);
287
+ });
288
+ });
289
+ });
290
+ };
291
+
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL3V0aWxzL3Rlc3RVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtqZXN0fSBmcm9tICdAamVzdC9nbG9iYWxzJztcbmltcG9ydCB0eXBlIHtHcmFwaFFMUmVzb2x2ZUluZm99IGZyb20gJ2dyYXBocWwnO1xuXG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcblxuLy8gRGVmaW5lIHByb3BlciB0eXBlcyBmb3IgdGVzdCB1dGlsaXRpZXNcbnR5cGUgTW9ja092ZXJyaWRlcyA9IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xudHlwZSBUZXN0Q29udGV4dCA9IFBhcnRpYWw8QXBpQ29udGV4dD4gJiB7c2Vzc2lvbj86IFBhcnRpYWw8e3VzZXJJZDogc3RyaW5nOyB1c2VybmFtZTogc3RyaW5nOyB1c2VyQWNjZXNzOiBudW1iZXJ9Pn07XG50eXBlIFRlc3RBcmdzID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG50eXBlIFRlc3RSZXR1cm5WYWx1ZSA9IHVua25vd247XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrQ29udGV4dCA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSk6IEFwaUNvbnRleHQgPT4ge1xuICBjb25zdCBkZWZhdWx0U2Vzc2lvbiA9IHtcbiAgICB1c2VyQWNjZXNzOiAxLFxuICAgIHVzZXJJZDogJ3VzZXIxJyxcbiAgICB1c2VybmFtZTogJ3Rlc3R1c2VyJ1xuICB9O1xuICBjb25zdCBvdmVycmlkZVNlc3Npb246IFBhcnRpYWw8dHlwZW9mIGRlZmF1bHRTZXNzaW9uPiA9IG92ZXJyaWRlcy5zZXNzaW9uIHx8IHt9O1xuICBjb25zdCBjb250ZXh0OiBUZXN0Q29udGV4dCA9IHtcbiAgICBkYXRhYmFzZU5hbWU6IChvdmVycmlkZXMuZGF0YWJhc2VOYW1lIGFzIHN0cmluZykgPz8gJ3Rlc3QnLFxuICAgIC4uLm92ZXJyaWRlc1xuICB9O1xuICBkZWxldGUgY29udGV4dC5zZXNzaW9uO1xuICBjb250ZXh0LnNlc3Npb24gPSB7XG4gICAgdXNlckFjY2Vzczogb3ZlcnJpZGVTZXNzaW9uLnVzZXJBY2Nlc3MgIT09IHVuZGVmaW5lZCA/IG92ZXJyaWRlU2Vzc2lvbi51c2VyQWNjZXNzIDogZGVmYXVsdFNlc3Npb24udXNlckFjY2VzcyxcbiAgICB1c2VySWQ6IG92ZXJyaWRlU2Vzc2lvbi51c2VySWQgIT09IHVuZGVmaW5lZCA/IG92ZXJyaWRlU2Vzc2lvbi51c2VySWQgOiBkZWZhdWx0U2Vzc2lvbi51c2VySWQsXG4gICAgdXNlcm5hbWU6IG92ZXJyaWRlU2Vzc2lvbi51c2VybmFtZSAhPT0gdW5kZWZpbmVkID8gb3ZlcnJpZGVTZXNzaW9uLnVzZXJuYW1lIDogZGVmYXVsdFNlc3Npb24udXNlcm5hbWVcbiAgfTtcbiAgcmV0dXJuIGNvbnRleHQgYXMgQXBpQ29udGV4dDtcbn07XG5cbi8vIENvbW1vbiBtb2NrIHJlc29sdmUgaW5mbyBmb3IgR3JhcGhRTCByZXNvbHZlcnNcbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrUmVzb2x2ZUluZm8gPSAoZmllbGROYW1lOiBzdHJpbmcgPSAndGVzdCcpOiBHcmFwaFFMUmVzb2x2ZUluZm8gPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtdHlwZS1hc3NlcnRpb25zXG4gIGNvbnN0IG9wZXJhdGlvbiA9IHt9IGFzIEdyYXBoUUxSZXNvbHZlSW5mb1snb3BlcmF0aW9uJ107XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY29uc2lzdGVudC10eXBlLWFzc2VydGlvbnNcbiAgY29uc3QgcGFyZW50VHlwZSA9IHt9IGFzIEdyYXBoUUxSZXNvbHZlSW5mb1sncGFyZW50VHlwZSddO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtdHlwZS1hc3NlcnRpb25zXG4gIGNvbnN0IHJldHVyblR5cGUgPSB7fSBhcyBHcmFwaFFMUmVzb2x2ZUluZm9bJ3JldHVyblR5cGUnXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuICBjb25zdCBzY2hlbWEgPSB7fSBhcyBHcmFwaFFMUmVzb2x2ZUluZm9bJ3NjaGVtYSddO1xuXG4gIHJldHVybiB7XG4gICAgZmllbGROYW1lLFxuICAgIGZpZWxkTm9kZXM6IFtdLFxuICAgIGZyYWdtZW50czoge30sXG4gICAgb3BlcmF0aW9uLFxuICAgIHBhcmVudFR5cGUsXG4gICAgcGF0aDoge2tleTogZmllbGROYW1lLCBwcmV2OiB1bmRlZmluZWQsIHR5cGVuYW1lOiAnVGVzdCd9LFxuICAgIHJldHVyblR5cGUsXG4gICAgcm9vdFZhbHVlOiB7fSxcbiAgICBzY2hlbWEsXG4gICAgdmFyaWFibGVWYWx1ZXM6IHt9XG4gIH07XG59O1xuXG4vLyBVdGlsaXR5IHRvIG1vY2sgYWN0aW9ucyBtb2R1bGVcbmV4cG9ydCBjb25zdCBtb2NrQWN0aW9uc01vZHVsZSA9IGFzeW5jIChtb2R1bGVQYXRoOiBzdHJpbmcsIG1vY2tBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBqZXN0Lk1vY2s+KSA9PiB7XG4gIGNvbnN0IG1vY2tzID0gT2JqZWN0LmVudHJpZXMobW9ja0FjdGlvbnMpLnJlZHVjZSgoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBhY2Nba2V5XSA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24odmFsdWUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIGplc3QuTW9jaz4pO1xuXG4gIGF3YWl0IGplc3QuaXNvbGF0ZU1vZHVsZXNBc3luYyhhc3luYyAoKSA9PiB7XG4gICAgamVzdC51bnN0YWJsZV9tb2NrTW9kdWxlKG1vZHVsZVBhdGgsICgpID0+ICh7XG4gICAgICBfX2VzTW9kdWxlOiB0cnVlLFxuICAgICAgLi4ubW9ja3MsXG4gICAgICBkZWZhdWx0OiBtb2Nrc1xuICAgIH0pKTtcbiAgfSk7XG59O1xuXG4vLyBVdGlsaXR5IHRvIG1vY2sgb2JqZWN0IHR5cGVzXG5leHBvcnQgY29uc3QgbW9ja09iamVjdFR5cGUgPSBhc3luYyAobW9kdWxlUGF0aDogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG1vY2sgPSB7XG4gICAgX19lc01vZHVsZTogdHJ1ZSxcbiAgICBbdHlwZU5hbWVdOiB7XG4gICAgICBnZXRGaWVsZDogamVzdC5mbigoKSA9PiAoe3Jlc29sdmU6IGplc3QuZm4oKX0pKSxcbiAgICAgIGdldEZpZWxkczogamVzdC5mbigoKSA9PiAoe30pKVxuICAgIH0sXG4gICAgZGVmYXVsdDoge1xuICAgICAgW3R5cGVOYW1lXToge1xuICAgICAgICBnZXRGaWVsZDogamVzdC5mbigoKSA9PiAoe3Jlc29sdmU6IGplc3QuZm4oKX0pKSxcbiAgICAgICAgZ2V0RmllbGRzOiBqZXN0LmZuKCgpID0+ICh7fSkpXG4gICAgICB9XG4gICAgfVxuICB9O1xuICBhd2FpdCBqZXN0Lmlzb2xhdGVNb2R1bGVzQXN5bmMoYXN5bmMgKCkgPT4ge1xuICAgIGplc3QudW5zdGFibGVfbW9ja01vZHVsZShtb2R1bGVQYXRoLCAoKSA9PiBtb2NrKTtcbiAgfSk7XG59O1xuXG4vLyBVdGlsaXR5IHRvIGNyZWF0ZSBhIHRlc3Qgc3VpdGUgZm9yIHF1ZXJ5IHJlc29sdmVyc1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVF1ZXJ5VGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFjdGlvbnNQYXRoOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgYXJnczogVGVzdEFyZ3M7XG4gICAgZXhwZWN0ZWRDYWxsOiAoY29udGV4dDogVGVzdENvbnRleHQsIGFyZ3M6IFRlc3RBcmdzKSA9PiBUZXN0QXJncztcbiAgICBtb2NrUmV0dXJuVmFsdWU6IFRlc3RSZXR1cm5WYWx1ZTtcbiAgICBlcnJvckNhc2U/OiBib29sZWFuO1xuICB9PlxuKSA9PiB7XG4gIGRlc2NyaWJlKGAke25hbWV9IFF1ZXJpZXNgLCAoKSA9PiB7XG4gICAgbGV0IGFjdGlvbnM6IGFueTtcbiAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG5cbiAgICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgICAgYWN0aW9ucyA9IHt9O1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtuYW1lOiB0ZXN0TmFtZSwgYWN0aW9uTmFtZSwgYXJncywgZXhwZWN0ZWRDYWxsLCBtb2NrUmV0dXJuVmFsdWUsIGVycm9yQ2FzZSA9IGZhbHNlfSkgPT4ge1xuICAgICAgaXQoYHNob3VsZCBjYWxsICR7YWN0aW9uTmFtZX0gYWN0aW9uIHdpdGggY29ycmVjdCBwYXJhbWV0ZXJzYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2NrRm4gPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVzb2x2ZShtb2NrUmV0dXJuVmFsdWUpKTtcbiAgICAgICAgYWN0aW9uc1thY3Rpb25OYW1lXSA9IG1vY2tGbjtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrRm4obW9ja0NvbnRleHQsIGFyZ3MpO1xuICAgICAgICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ29udGV4dCwgZXhwZWN0ZWRDYWxsKG1vY2tDb250ZXh0LCBhcmdzKSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwobW9ja1JldHVyblZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZihlcnJvckNhc2UpIHtcbiAgICAgICAgaXQoYHNob3VsZCBoYW5kbGUgJHthY3Rpb25OYW1lfSB3aGVuIG5vIGRhdGEgZm91bmRgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbW9ja0ZuID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlc29sdmUobnVsbCkpO1xuICAgICAgICAgIGFjdGlvbnNbYWN0aW9uTmFtZV0gPSBtb2NrRm47XG5cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrRm4obW9ja0NvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGV4cGVjdChtb2NrRm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1vY2tDb250ZXh0LCBleHBlY3RlZENhbGwobW9ja0NvbnRleHQsIGFyZ3MpKTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vLyBVdGlsaXR5IHRvIGNyZWF0ZSBhIHRlc3Qgc3VpdGUgZm9yIG11dGF0aW9uIHJlc29sdmVyc1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU11dGF0aW9uVGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFjdGlvbnNQYXRoOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgYXJnczogVGVzdEFyZ3M7XG4gICAgZXhwZWN0ZWRDYWxsOiAoY29udGV4dDogVGVzdENvbnRleHQsIGFyZ3M6IFRlc3RBcmdzKSA9PiBUZXN0QXJncztcbiAgICBtb2NrUmV0dXJuVmFsdWU6IFRlc3RSZXR1cm5WYWx1ZTtcbiAgICByZXF1aXJlc0F1dGg/OiBib29sZWFuO1xuICAgIGF1dGhVc2VySWQ/OiBzdHJpbmc7XG4gIH0+XG4pID0+IHtcbiAgZGVzY3JpYmUoYCR7bmFtZX0gTXV0YXRpb25zYCwgKCkgPT4ge1xuICAgIGxldCBhY3Rpb25zOiBhbnk7XG5cbiAgICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgICAgYWN0aW9ucyA9IHt9O1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtcbiAgICAgIGFjdGlvbk5hbWUsXG4gICAgICBhcmdzLFxuICAgICAgZXhwZWN0ZWRDYWxsLFxuICAgICAgbW9ja1JldHVyblZhbHVlLFxuICAgICAgcmVxdWlyZXNBdXRoID0gZmFsc2UsXG4gICAgICBhdXRoVXNlcklkXG4gICAgfSkgPT4ge1xuICAgICAgaXQoYHNob3VsZCBjYWxsICR7YWN0aW9uTmFtZX0gYWN0aW9uIHdpdGggY29ycmVjdCBwYXJhbWV0ZXJzYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG4gICAgICAgIGlmKHJlcXVpcmVzQXV0aCAmJiBhdXRoVXNlcklkKSB7XG4gICAgICAgICAgKG1vY2tDb250ZXh0LnNlc3Npb24gYXMge3VzZXJJZDogc3RyaW5nfSkudXNlcklkID0gYXV0aFVzZXJJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vY2tGbiA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gUHJvbWlzZS5yZXNvbHZlKG1vY2tSZXR1cm5WYWx1ZSkpO1xuICAgICAgICBhY3Rpb25zW2FjdGlvbk5hbWVdID0gbW9ja0ZuO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tGbihtb2NrQ29udGV4dCwgYXJncyk7XG4gICAgICAgIGV4cGVjdChtb2NrRm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1vY2tDb250ZXh0LCBleHBlY3RlZENhbGwobW9ja0NvbnRleHQsIGFyZ3MpKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChtb2NrUmV0dXJuVmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLy8gVXRpbGl0eSB0byBjcmVhdGUgaW50ZWdyYXRpb24gdGVzdCBzdWl0ZVxuZXhwb3J0IGNvbnN0IGNyZWF0ZUludGVncmF0aW9uVGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFjdGlvbnNQYXRoOiBzdHJpbmcsXG4gIG9iamVjdFR5cGVQYXRoOiBzdHJpbmcsXG4gIHR5cGVOYW1lOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgYXJnczogVGVzdEFyZ3M7XG4gICAgZXhwZWN0ZWRDYWxsOiAoY29udGV4dDogVGVzdENvbnRleHQsIGFyZ3M6IFRlc3RBcmdzKSA9PiBUZXN0QXJncztcbiAgICBzdWNjZXNzUmV0dXJuVmFsdWU6IFRlc3RSZXR1cm5WYWx1ZTtcbiAgICBlcnJvclJldHVyblZhbHVlOiBUZXN0UmV0dXJuVmFsdWU7XG4gICAgdGVzdEVycm9yQ2FzZTogYm9vbGVhbjtcbiAgfT5cbikgPT4ge1xuICBkZXNjcmliZShgJHtuYW1lfSBJbnRlZ3JhdGlvbmAsICgpID0+IHtcbiAgICBsZXQgYWN0aW9uczogYW55O1xuXG4gICAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICAgIGFjdGlvbnMgPSB7fTtcbiAgICB9KTtcblxuICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7XG4gICAgICBuYW1lOiB0ZXN0TmFtZSxcbiAgICAgIGFjdGlvbk5hbWUsXG4gICAgICBhcmdzLFxuICAgICAgZXhwZWN0ZWRDYWxsLFxuICAgICAgc3VjY2Vzc1JldHVyblZhbHVlLFxuICAgICAgZXJyb3JSZXR1cm5WYWx1ZSxcbiAgICAgIHRlc3RFcnJvckNhc2VcbiAgICB9KSA9PiB7XG4gICAgICBkZXNjcmliZSh0ZXN0TmFtZSwgKCkgPT4ge1xuICAgICAgICBpdChgc2hvdWxkIHJldHVybiBkYXRhIHdoZW4gJHthY3Rpb25OYW1lfSBzdWNjZWVkc2AsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG4gICAgICAgICAgY29uc3QgbW9ja0ZuID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlc29sdmUoc3VjY2Vzc1JldHVyblZhbHVlKSk7XG4gICAgICAgICAgYWN0aW9uc1thY3Rpb25OYW1lXSA9IG1vY2tGbjtcblxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tGbihtb2NrQ29udGV4dCwgYXJncyk7XG5cbiAgICAgICAgICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ29udGV4dCwgZXhwZWN0ZWRDYWxsKG1vY2tDb250ZXh0LCBhcmdzKSk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChzdWNjZXNzUmV0dXJuVmFsdWUgfHwge30pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZih0ZXN0RXJyb3JDYXNlKSB7XG4gICAgICAgICAgaXQoYHNob3VsZCBoYW5kbGUgJHthY3Rpb25OYW1lfSB3aGVuIG5vIGRhdGEgZm91bmRgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBtb2NrRm4gPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVzb2x2ZShlcnJvclJldHVyblZhbHVlKSk7XG4gICAgICAgICAgICBhY3Rpb25zW2FjdGlvbk5hbWVdID0gbW9ja0ZuO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrRm4obW9ja0NvbnRleHQsIGFyZ3MpO1xuXG4gICAgICAgICAgICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ29udGV4dCwgZXhwZWN0ZWRDYWxsKG1vY2tDb250ZXh0LCBhcmdzKSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGVycm9yUmV0dXJuVmFsdWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vLyBDb21tb24gbW9jayBkYXRhIGdlbmVyYXRvcnNcbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrVXNlciA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSkgPT4gKHtcbiAgZW1haWw6ICd0ZXN0QGV4YW1wbGUuY29tJyxcbiAgZmlyc3ROYW1lOiAnVGVzdCcsXG4gIGxhc3ROYW1lOiAnVXNlcicsXG4gIHVzZXJJZDogJ3VzZXIxJyxcbiAgdXNlcm5hbWU6ICd0ZXN0dXNlcicsXG4gIC4uLm92ZXJyaWRlc1xufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrUG9zdCA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSkgPT4gKHtcbiAgY29udGVudDogJ1Rlc3QgcG9zdCBjb250ZW50JyxcbiAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIHBvc3RJZDogJ3Bvc3QxJyxcbiAgdXNlcklkOiAndXNlcjEnLFxuICAuLi5vdmVycmlkZXNcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9ja01lc3NhZ2UgPSAob3ZlcnJpZGVzOiBNb2NrT3ZlcnJpZGVzID0ge30pID0+ICh7XG4gIGNvbnRlbnQ6ICdUZXN0IG1lc3NhZ2UnLFxuICBjb252ZXJzYXRpb25JZDogJ2NvbnYxJyxcbiAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIG1lc3NhZ2VJZDogJ21zZzEnLFxuICB1c2VySWQ6ICd1c2VyMScsXG4gIC4uLm92ZXJyaWRlc1xufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrUmVhY3Rpb24gPSAob3ZlcnJpZGVzOiBNb2NrT3ZlcnJpZGVzID0ge30pID0+ICh7XG4gIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICBwb3N0SWQ6ICdwb3N0MScsXG4gIHJlYWN0aW9uSWQ6ICdyZWFjdDEnLFxuICB0eXBlOiAnbGlrZScsXG4gIHVzZXJJZDogJ3VzZXIxJyxcbiAgLi4ub3ZlcnJpZGVzXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1vY2tUYWcgPSAob3ZlcnJpZGVzOiBNb2NrT3ZlcnJpZGVzID0ge30pID0+ICh7XG4gIGRlc2NyaXB0aW9uOiAnVGVzdCB0YWcgZGVzY3JpcHRpb24nLFxuICBuYW1lOiAndGVzdC10YWcnLFxuICB0YWdJZDogJ3RhZzEnLFxuICAuLi5vdmVycmlkZXNcbn0pO1xuXG4vLyBVdGlsaXR5IHRvIHNldCB1cCBjb21tb24gbW9ja3NcbmV4cG9ydCBjb25zdCBzZXR1cENvbW1vbk1vY2tzID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCBtb2NrID0ge1xuICAgIF9fZXNNb2R1bGU6IHRydWUsXG4gICAgdXNlRGI6IGplc3QuZm4oKSxcbiAgICBnZXRMaW1pdDogamVzdC5mbigpLFxuICAgIGdldERvY0lkOiBqZXN0LmZuKCksXG4gICAgc29ydElkczogamVzdC5mbigpLFxuICAgIGdldEdxbEZpZWxkczogamVzdC5mbigpLFxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHVzZURiOiBqZXN0LmZuKCksXG4gICAgICBnZXRMaW1pdDogamVzdC5mbigpLFxuICAgICAgZ2V0RG9jSWQ6IGplc3QuZm4oKSxcbiAgICAgIHNvcnRJZHM6IGplc3QuZm4oKSxcbiAgICAgIGdldEdxbEZpZWxkczogamVzdC5mbigpXG4gICAgfVxuICB9O1xuICBhd2FpdCBqZXN0Lmlzb2xhdGVNb2R1bGVzQXN5bmMoYXN5bmMgKCkgPT4ge1xuICAgIGplc3QudW5zdGFibGVfbW9ja01vZHVsZSgnLi9hcmFuZ29kYlV0aWxzLmpzJywgKCkgPT4gbW9jayk7XG4gIH0pO1xufTtcblxuLy8gVXRpbGl0eSB0byBjbGVhciBhbGwgbW9ja3NcbmV4cG9ydCBjb25zdCBjbGVhckFsbE1vY2tzID0gKCkgPT4ge1xuICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbn07XG5cbi8vIFV0aWxpdHkgdG8gY3JlYXRlIGEgdGVzdCBzdWl0ZSBmb3IgYWN0aW9uIGZ1bmN0aW9uc1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjdGlvblRlc3RTdWl0ZSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBhY3Rpb25zUGF0aDogc3RyaW5nLFxuICB0ZXN0Q2FzZXM6IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIGFyZ3M6IFRlc3RBcmdzO1xuICAgIG1vY2tRdWVyeTogamVzdC5Nb2NrO1xuICAgIGV4cGVjdGVkUmVzdWx0OiBUZXN0UmV0dXJuVmFsdWU7XG4gIH0+XG4pID0+IHtcbiAgZGVzY3JpYmUoYCR7bmFtZX0gYWN0aW9uc2AsICgpID0+IHtcbiAgICBsZXQgYWN0aW9uczogYW55O1xuXG4gICAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICAgIGFjdGlvbnMgPSBhd2FpdCBpbXBvcnQoYWN0aW9uc1BhdGgpO1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtuYW1lOiB0ZXN0TmFtZSwgYWN0aW9uTmFtZSwgYXJncywgbW9ja1F1ZXJ5LCBleHBlY3RlZFJlc3VsdH0pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgZXhlY3V0ZSAke2FjdGlvbk5hbWV9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IG1vY2tEYiA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuICAgICAgICAgIHF1ZXJ5OiBtb2NrUXVlcnlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGFjdHVhbCA9IGplc3QucmVxdWlyZUFjdHVhbCgnLi9hcmFuZ29kYlV0aWxzLmpzJykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGplc3QuZG9Nb2NrKCcuL2FyYW5nb2RiVXRpbHMuanMnLCAoKSA9PiAoe1xuICAgICAgICAgIHVzZURiOiBtb2NrRGIsXG4gICAgICAgICAgLi4uYWN0dWFsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoYWN0aW9uc1thY3Rpb25OYW1lXSBhcyBqZXN0Lk1vY2spKG1vY2tDb250ZXh0LCBhcmdzKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQWRhcHRlclRlc3RTdWl0ZSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBhZGFwdGVyUGF0aDogc3RyaW5nLFxuICB0ZXN0Q2FzZXM6IGFueVtdXG4pID0+IHtcbiAgZGVzY3JpYmUobmFtZSwgKCkgPT4ge1xuICAgIGxldCBhZGFwdGVyOiBhbnk7XG5cbiAgICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgYWRhcHRlciA9IGF3YWl0IGltcG9ydChhZGFwdGVyUGF0aCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgoe25hbWU6IHRlc3ROYW1lLCBpbnB1dCwgZXhwZWN0ZWRPdXRwdXR9KSA9PiB7XG4gICAgICBpdChgc2hvdWxkICR7dGVzdE5hbWV9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSAoYWRhcHRlciBhcyB7cGFyc2VUYWc6IChpbnB1dDogVGVzdEFyZ3MpID0+IFRlc3RSZXR1cm5WYWx1ZX0pLnBhcnNlVGFnKGlucHV0KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVXRpbHNUZXN0U3VpdGUgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgdXRpbHNQYXRoOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpbnB1dDogVGVzdEFyZ3M7XG4gICAgZXhwZWN0ZWRPdXRwdXQ6IFRlc3RSZXR1cm5WYWx1ZTtcbiAgfT5cbikgPT4ge1xuICBkZXNjcmliZShuYW1lLCAoKSA9PiB7XG4gICAgbGV0IHV0aWxzOiBhbnk7XG5cbiAgICBiZWZvcmVBbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgdXRpbHMgPSBhd2FpdCBpbXBvcnQodXRpbHNQYXRoKTtcbiAgICB9KTtcblxuICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7bmFtZTogdGVzdE5hbWUsIGlucHV0LCBleHBlY3RlZE91dHB1dH0pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgJHt0ZXN0TmFtZX1gLCAoKSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIGlmKCh1dGlscyBhcyB7bG9nSW5mbz86IChpbnB1dDogVGVzdEFyZ3MpID0+IFRlc3RSZXR1cm5WYWx1ZX0pLmxvZ0luZm8pIHtcbiAgICAgICAgICByZXN1bHQgPSAodXRpbHMgYXMge2xvZ0luZm86IChpbnB1dDogVGVzdEFyZ3MpID0+IFRlc3RSZXR1cm5WYWx1ZX0pLmxvZ0luZm8oaW5wdXQpO1xuICAgICAgICB9IGVsc2UgaWYoKHV0aWxzIGFzIHtyZW1vdmVFbXB0eUtleXM/OiAoaW5wdXQ6IFRlc3RBcmdzKSA9PiBUZXN0UmV0dXJuVmFsdWV9KS5yZW1vdmVFbXB0eUtleXMpIHtcbiAgICAgICAgICByZXN1bHQgPSAodXRpbHMgYXMge3JlbW92ZUVtcHR5S2V5czogKGlucHV0OiBUZXN0QXJncykgPT4gVGVzdFJldHVyblZhbHVlfSkucmVtb3ZlRW1wdHlLZXlzKGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHN1aXRhYmxlIGZ1bmN0aW9uIGZvdW5kIGluICR7dXRpbHNQYXRofWApO1xuICAgICAgICB9XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTsiXSwibmFtZXMiOlsiamVzdCIsImNyZWF0ZU1vY2tDb250ZXh0Iiwib3ZlcnJpZGVzIiwiZGVmYXVsdFNlc3Npb24iLCJ1c2VyQWNjZXNzIiwidXNlcklkIiwidXNlcm5hbWUiLCJvdmVycmlkZVNlc3Npb24iLCJzZXNzaW9uIiwiY29udGV4dCIsImRhdGFiYXNlTmFtZSIsInVuZGVmaW5lZCIsImNyZWF0ZU1vY2tSZXNvbHZlSW5mbyIsImZpZWxkTmFtZSIsIm9wZXJhdGlvbiIsInBhcmVudFR5cGUiLCJyZXR1cm5UeXBlIiwic2NoZW1hIiwiZmllbGROb2RlcyIsImZyYWdtZW50cyIsInBhdGgiLCJrZXkiLCJwcmV2IiwidHlwZW5hbWUiLCJyb290VmFsdWUiLCJ2YXJpYWJsZVZhbHVlcyIsIm1vY2tBY3Rpb25zTW9kdWxlIiwibW9kdWxlUGF0aCIsIm1vY2tBY3Rpb25zIiwibW9ja3MiLCJPYmplY3QiLCJlbnRyaWVzIiwicmVkdWNlIiwiYWNjIiwidmFsdWUiLCJmbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsImlzb2xhdGVNb2R1bGVzQXN5bmMiLCJ1bnN0YWJsZV9tb2NrTW9kdWxlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJtb2NrT2JqZWN0VHlwZSIsInR5cGVOYW1lIiwibW9jayIsImdldEZpZWxkIiwicmVzb2x2ZSIsImdldEZpZWxkcyIsImNyZWF0ZVF1ZXJ5VGVzdFN1aXRlIiwibmFtZSIsImFjdGlvbnNQYXRoIiwidGVzdENhc2VzIiwiZGVzY3JpYmUiLCJhY3Rpb25zIiwibW9ja0NvbnRleHQiLCJiZWZvcmVBbGwiLCJmb3JFYWNoIiwidGVzdE5hbWUiLCJhY3Rpb25OYW1lIiwiYXJncyIsImV4cGVjdGVkQ2FsbCIsIm1vY2tSZXR1cm5WYWx1ZSIsImVycm9yQ2FzZSIsIml0IiwibW9ja0ZuIiwiUHJvbWlzZSIsInJlc3VsdCIsImV4cGVjdCIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwidG9FcXVhbCIsInRvQmVOdWxsIiwiY3JlYXRlTXV0YXRpb25UZXN0U3VpdGUiLCJyZXF1aXJlc0F1dGgiLCJhdXRoVXNlcklkIiwiY3JlYXRlSW50ZWdyYXRpb25UZXN0U3VpdGUiLCJvYmplY3RUeXBlUGF0aCIsInN1Y2Nlc3NSZXR1cm5WYWx1ZSIsImVycm9yUmV0dXJuVmFsdWUiLCJ0ZXN0RXJyb3JDYXNlIiwiY3JlYXRlTW9ja1VzZXIiLCJlbWFpbCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY3JlYXRlTW9ja1Bvc3QiLCJjb250ZW50IiwiY3JlYXRlZEF0IiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwicG9zdElkIiwiY3JlYXRlTW9ja01lc3NhZ2UiLCJjb252ZXJzYXRpb25JZCIsIm1lc3NhZ2VJZCIsImNyZWF0ZU1vY2tSZWFjdGlvbiIsInJlYWN0aW9uSWQiLCJ0eXBlIiwiY3JlYXRlTW9ja1RhZyIsImRlc2NyaXB0aW9uIiwidGFnSWQiLCJzZXR1cENvbW1vbk1vY2tzIiwidXNlRGIiLCJnZXRMaW1pdCIsImdldERvY0lkIiwic29ydElkcyIsImdldEdxbEZpZWxkcyIsImNsZWFyQWxsTW9ja3MiLCJjcmVhdGVBY3Rpb25UZXN0U3VpdGUiLCJtb2NrUXVlcnkiLCJleHBlY3RlZFJlc3VsdCIsIm1vY2tEYiIsInF1ZXJ5IiwiYWN0dWFsIiwicmVxdWlyZUFjdHVhbCIsImRvTW9jayIsImNyZWF0ZUFkYXB0ZXJUZXN0U3VpdGUiLCJhZGFwdGVyUGF0aCIsImFkYXB0ZXIiLCJpbnB1dCIsImV4cGVjdGVkT3V0cHV0IiwicGFyc2VUYWciLCJjcmVhdGVVdGlsc1Rlc3RTdWl0ZSIsInV0aWxzUGF0aCIsInV0aWxzIiwibG9nSW5mbyIsInJlbW92ZUVtcHR5S2V5cyIsIkVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxJQUFJLFFBQU8sZ0JBQWdCO0FBWW5DLE9BQU8sTUFBTUMsb0JBQW9CLENBQUNDLFlBQTJCLENBQUMsQ0FBQztJ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
@@ -27,3 +27,4 @@ export declare const flush: () => Promise<void>;
27
27
  export declare const clear: () => void;
28
28
  export type { TranslationObject };
29
29
  export { translationQueue };
30
+ //# sourceMappingURL=translationQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translationQueue.d.ts","sourceRoot":"","sources":["../../src/utils/translationQueue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAiBtD,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED,cAAM,gBAAgB;IACpB,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,YAAY,CAAM;IAEpB,SAAS,CACb,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,iBAAiB,EAAE,EACjC,MAAM,GAAE,MAAa,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAmBpB,cAAc;IAiCtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,KAAK,IAAI,IAAI;IAUb,OAAO,CAAC,WAAW;YAIL,YAAY;IAuC1B,OAAO,CAAC,WAAW;CAGpB;AAED,QAAA,MAAM,gBAAgB,kBAAyB,CAAC;AAEhD,eAAO,MAAM,IAAI,GACf,SAAS,UAAU,EACnB,cAAc,iBAAiB,EAAE,EACjC,SAAS,MAAM,KACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAA8D,CAAC;AAEhG,eAAO,MAAM,KAAK,QAAO,OAAO,CAAC,IAAI,CAA6B,CAAC;AACnE,eAAO,MAAM,KAAK,QAAO,IAAgC,CAAC;AAE1D,YAAY,EAAC,iBAAiB,EAAC,CAAC;AAE9B,OAAO,EAAC,gBAAgB,EAAC,CAAC"}
@@ -31,3 +31,4 @@ export declare function getNotificationMessages(context: ApiContext, locale?: Lo
31
31
  export declare function performanceComparison(context: ApiContext): Promise<Record<string, string>>;
32
32
  export declare function getUserGreeting(context: ApiContext, userLocale?: string, username?: string): Promise<string>;
33
33
  export declare function ensureAllTranslationsProcessed(): Promise<void>;
34
+ //# sourceMappingURL=translationQueue.example.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translationQueue.example.d.ts","sourceRoot":"","sources":["../../src/utils/translationQueue.example.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,2BAA2B,CAAC;AAGtD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,GAAE,MAAa,mCA6BlF;AAGD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAa,mCA2BzG;AAGD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,UAAU,mDA0BhE;AAGD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,GAAE,MAAa,mCA2BrF;AAGD,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,GAAE,MAAa,mCAmB5F;AAGD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,MAAa,mCAuBnG;AAGD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE;IACR,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,EACD,MAAM,GAAE,MAAa;;;;;GAoCtB;AAGD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,GAAE,MAAa,mCA4BvF;AAGD,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,UAAU,mCAgB9D;AAGD,wBAAsB,eAAe,CACnC,OAAO,EAAE,UAAU,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,mBAiClB;AAGD,wBAAsB,8BAA8B,kBAInD"}