@budibase/server 1.2.44-alpha.0 → 1.2.46

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 (205) hide show
  1. package/__mocks__/mongodb.ts +0 -4
  2. package/__mocks__/node-fetch.ts +1 -8
  3. package/builder/assets/index.08dd0c5e.css +6 -0
  4. package/builder/assets/index.f6823431.js +975 -0
  5. package/builder/assets/{vendor.67dbd8fa.js → vendor.6bcafa60.js} +1 -1
  6. package/builder/index.html +3 -3
  7. package/coverage/clover.xml +714 -727
  8. package/coverage/coverage-final.json +27 -27
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +1 -1
  18. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/index.html +35 -35
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +88 -46
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +191 -317
  31. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +15 -15
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +30 -39
  33. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +41 -41
  36. package/coverage/lcov-report/api/controllers/table/external.js.html +2 -2
  37. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +17 -17
  39. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/user.js.html +19 -19
  41. package/coverage/lcov-report/api/controllers/view/exporters.js.html +2 -2
  42. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  47. package/coverage/lcov-report/api/index.html +1 -1
  48. package/coverage/lcov-report/api/index.js.html +5 -5
  49. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/index.html +1 -1
  60. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  74. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  77. package/coverage/lcov-report/automations/actions.js.html +1 -1
  78. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  79. package/coverage/lcov-report/automations/bullboard.js.html +13 -7
  80. package/coverage/lcov-report/automations/index.html +12 -12
  81. package/coverage/lcov-report/automations/index.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/index.html +1 -1
  89. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  108. package/coverage/lcov-report/constants/index.html +1 -1
  109. package/coverage/lcov-report/constants/index.js.html +30 -30
  110. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  111. package/coverage/lcov-report/constants/screens.js.html +1 -1
  112. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  113. package/coverage/lcov-report/db/index.html +1 -1
  114. package/coverage/lcov-report/db/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +11 -11
  116. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  117. package/coverage/lcov-report/db/linkedRows/index.js.html +19 -19
  118. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +7 -7
  119. package/coverage/lcov-report/db/newid.js.html +4 -4
  120. package/coverage/lcov-report/db/utils.js.html +71 -71
  121. package/coverage/lcov-report/events/AutomationEmitter.js.html +5 -5
  122. package/coverage/lcov-report/events/index.html +1 -1
  123. package/coverage/lcov-report/events/index.js.html +1 -1
  124. package/coverage/lcov-report/events/utils.js.html +1 -1
  125. package/coverage/lcov-report/index.html +25 -25
  126. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  127. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  128. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  129. package/coverage/lcov-report/middleware/builder.js.html +12 -12
  130. package/coverage/lcov-report/middleware/currentapp.js.html +33 -33
  131. package/coverage/lcov-report/middleware/index.html +1 -1
  132. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  133. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  134. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  135. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  136. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  137. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  138. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  139. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  140. package/coverage/lcov-report/utilities/global.js.html +31 -31
  141. package/coverage/lcov-report/utilities/index.html +1 -1
  142. package/coverage/lcov-report/utilities/index.js.html +23 -23
  143. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
  144. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  145. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  146. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  147. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  148. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +39 -39
  149. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +10 -10
  150. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  151. package/coverage/lcov-report/utilities/security.js.html +1 -1
  152. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  153. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  154. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  156. package/coverage/lcov-report/utilities/users.js.html +7 -7
  157. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  158. package/coverage/lcov.info +1168 -1194
  159. package/dist/api/controllers/row/internal.js +15 -1
  160. package/dist/api/controllers/row/internalSearch.js +4 -39
  161. package/dist/api/controllers/row/utils.js +1 -3
  162. package/dist/api/controllers/static/index.js +2 -8
  163. package/dist/api/controllers/table/external.js +1 -1
  164. package/dist/api/routes/static.js +0 -2
  165. package/dist/automations/bullboard.js +2 -0
  166. package/dist/automations/listeners.js +102 -0
  167. package/dist/automations/logging/index.js +0 -3
  168. package/dist/automations/utils.js +6 -2
  169. package/dist/integrations/base/sql.js +30 -62
  170. package/dist/integrations/base/utils.js +27 -13
  171. package/dist/integrations/microsoftSqlServer.js +2 -5
  172. package/dist/integrations/mongodb.js +8 -35
  173. package/dist/integrations/mysql.js +2 -2
  174. package/dist/integrations/postgres.js +2 -5
  175. package/dist/package.json +7 -7
  176. package/dist/threads/automation.js +27 -11
  177. package/dist/tsconfig.build.tsbuildinfo +1 -1
  178. package/dist/utilities/fileSystem/index.js +1 -2
  179. package/package.json +8 -8
  180. package/src/api/controllers/row/internal.js +15 -1
  181. package/src/api/controllers/row/internalSearch.js +3 -45
  182. package/src/api/controllers/row/utils.js +1 -4
  183. package/src/api/controllers/static/index.ts +1 -5
  184. package/src/api/controllers/table/external.js +1 -1
  185. package/src/api/routes/static.ts +0 -11
  186. package/src/api/routes/tests/row.spec.js +149 -67
  187. package/src/automations/bullboard.js +2 -0
  188. package/src/automations/listeners.ts +78 -0
  189. package/src/automations/logging/index.ts +0 -3
  190. package/src/automations/utils.ts +7 -6
  191. package/src/integrations/base/sql.ts +30 -67
  192. package/src/integrations/base/utils.ts +18 -9
  193. package/src/integrations/microsoftSqlServer.ts +2 -3
  194. package/src/integrations/mongodb.ts +8 -35
  195. package/src/integrations/mysql.ts +1 -1
  196. package/src/integrations/postgres.ts +1 -2
  197. package/src/integrations/tests/mongo.spec.js +0 -218
  198. package/src/integrations/tests/sql.spec.js +11 -101
  199. package/src/threads/automation.ts +35 -16
  200. package/src/utilities/fileSystem/index.js +0 -2
  201. package/builder/assets/index.6b1c808b.css +0 -6
  202. package/builder/assets/index.7e1eb5c8.js +0 -977
  203. package/dist/integrations/base/query.js +0 -27
  204. package/src/api/routes/tests/internalSearch.spec.js +0 -176
  205. package/src/integrations/base/query.ts +0 -16
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">79.14% </span>
26
+ <span class="strong">59.25% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>167/211</span>
28
+ <span class='fraction'>112/189</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">68.75% </span>
33
+ <span class="strong">39.49% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>88/128</span>
35
+ <span class='fraction'>47/119</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">68.29% </span>
40
+ <span class="strong">48.64% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>28/41</span>
42
+ <span class='fraction'>18/37</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">78.64% </span>
47
+ <span class="strong">60% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>162/206</span>
49
+ <span class='fraction'>111/185</span>
50
50
  </div>
51
51
 
52
52
 
@@ -523,53 +523,10 @@
523
523
  <a name='L458'></a><a href='#L458'>458</a>
524
524
  <a name='L459'></a><a href='#L459'>459</a>
525
525
  <a name='L460'></a><a href='#L460'>460</a>
526
- <a name='L461'></a><a href='#L461'>461</a>
527
- <a name='L462'></a><a href='#L462'>462</a>
528
- <a name='L463'></a><a href='#L463'>463</a>
529
- <a name='L464'></a><a href='#L464'>464</a>
530
- <a name='L465'></a><a href='#L465'>465</a>
531
- <a name='L466'></a><a href='#L466'>466</a>
532
- <a name='L467'></a><a href='#L467'>467</a>
533
- <a name='L468'></a><a href='#L468'>468</a>
534
- <a name='L469'></a><a href='#L469'>469</a>
535
- <a name='L470'></a><a href='#L470'>470</a>
536
- <a name='L471'></a><a href='#L471'>471</a>
537
- <a name='L472'></a><a href='#L472'>472</a>
538
- <a name='L473'></a><a href='#L473'>473</a>
539
- <a name='L474'></a><a href='#L474'>474</a>
540
- <a name='L475'></a><a href='#L475'>475</a>
541
- <a name='L476'></a><a href='#L476'>476</a>
542
- <a name='L477'></a><a href='#L477'>477</a>
543
- <a name='L478'></a><a href='#L478'>478</a>
544
- <a name='L479'></a><a href='#L479'>479</a>
545
- <a name='L480'></a><a href='#L480'>480</a>
546
- <a name='L481'></a><a href='#L481'>481</a>
547
- <a name='L482'></a><a href='#L482'>482</a>
548
- <a name='L483'></a><a href='#L483'>483</a>
549
- <a name='L484'></a><a href='#L484'>484</a>
550
- <a name='L485'></a><a href='#L485'>485</a>
551
- <a name='L486'></a><a href='#L486'>486</a>
552
- <a name='L487'></a><a href='#L487'>487</a>
553
- <a name='L488'></a><a href='#L488'>488</a>
554
- <a name='L489'></a><a href='#L489'>489</a>
555
- <a name='L490'></a><a href='#L490'>490</a>
556
- <a name='L491'></a><a href='#L491'>491</a>
557
- <a name='L492'></a><a href='#L492'>492</a>
558
- <a name='L493'></a><a href='#L493'>493</a>
559
- <a name='L494'></a><a href='#L494'>494</a>
560
- <a name='L495'></a><a href='#L495'>495</a>
561
- <a name='L496'></a><a href='#L496'>496</a>
562
- <a name='L497'></a><a href='#L497'>497</a>
563
- <a name='L498'></a><a href='#L498'>498</a>
564
- <a name='L499'></a><a href='#L499'>499</a>
565
- <a name='L500'></a><a href='#L500'>500</a>
566
- <a name='L501'></a><a href='#L501'>501</a>
567
- <a name='L502'></a><a href='#L502'>502</a>
568
- <a name='L503'></a><a href='#L503'>503</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">45x</span>
569
- <span class="cline-any cline-yes">45x</span>
570
- <span class="cline-any cline-yes">45x</span>
571
- <span class="cline-any cline-yes">45x</span>
572
- <span class="cline-any cline-yes">45x</span>
526
+ <a name='L461'></a><a href='#L461'>461</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">44x</span>
527
+ <span class="cline-any cline-yes">44x</span>
528
+ <span class="cline-any cline-yes">44x</span>
529
+ <span class="cline-any cline-yes">44x</span>
573
530
  <span class="cline-any cline-neutral">&nbsp;</span>
574
531
  <span class="cline-any cline-neutral">&nbsp;</span>
575
532
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -577,12 +534,7 @@
577
534
  <span class="cline-any cline-neutral">&nbsp;</span>
578
535
  <span class="cline-any cline-neutral">&nbsp;</span>
579
536
  <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-yes">16x</span>
581
- <span class="cline-any cline-neutral">&nbsp;</span>
582
- <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-yes">1x</span>
586
538
  <span class="cline-any cline-neutral">&nbsp;</span>
587
539
  <span class="cline-any cline-neutral">&nbsp;</span>
588
540
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -592,59 +544,57 @@
592
544
  <span class="cline-any cline-neutral">&nbsp;</span>
593
545
  <span class="cline-any cline-neutral">&nbsp;</span>
594
546
  <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-yes">16x</span>
596
- <span class="cline-any cline-yes">16x</span>
597
- <span class="cline-any cline-yes">16x</span>
598
- <span class="cline-any cline-yes">16x</span>
599
- <span class="cline-any cline-yes">16x</span>
600
547
  <span class="cline-any cline-neutral">&nbsp;</span>
601
548
  <span class="cline-any cline-neutral">&nbsp;</span>
602
549
  <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-yes">16x</span>
604
- <span class="cline-any cline-yes">16x</span>
550
+ <span class="cline-any cline-yes">1x</span>
551
+ <span class="cline-any cline-yes">1x</span>
552
+ <span class="cline-any cline-yes">1x</span>
553
+ <span class="cline-any cline-yes">1x</span>
554
+ <span class="cline-any cline-yes">1x</span>
605
555
  <span class="cline-any cline-neutral">&nbsp;</span>
606
556
  <span class="cline-any cline-neutral">&nbsp;</span>
607
557
  <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-yes">31x</span>
609
- <span class="cline-any cline-yes">31x</span>
558
+ <span class="cline-any cline-yes">1x</span>
559
+ <span class="cline-any cline-yes">1x</span>
610
560
  <span class="cline-any cline-neutral">&nbsp;</span>
611
561
  <span class="cline-any cline-neutral">&nbsp;</span>
612
562
  <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-yes">31x</span>
614
- <span class="cline-any cline-yes">31x</span>
563
+ <span class="cline-any cline-yes">1x</span>
564
+ <span class="cline-any cline-yes">1x</span>
615
565
  <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-yes">31x</span>
617
566
  <span class="cline-any cline-neutral">&nbsp;</span>
618
567
  <span class="cline-any cline-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-yes">1x</span>
569
+ <span class="cline-any cline-yes">1x</span>
619
570
  <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-yes">16x</span>
621
571
  <span class="cline-any cline-yes">1x</span>
622
572
  <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-yes">16x</span>
624
573
  <span class="cline-any cline-neutral">&nbsp;</span>
625
574
  <span class="cline-any cline-neutral">&nbsp;</span>
575
+ <span class="cline-any cline-yes">1x</span>
576
+ <span class="cline-any cline-no">&nbsp;</span>
626
577
  <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-yes">16x</span>
628
- <span class="cline-any cline-yes">15x</span>
578
+ <span class="cline-any cline-yes">1x</span>
629
579
  <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-yes">16x</span>
631
580
  <span class="cline-any cline-neutral">&nbsp;</span>
632
581
  <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-yes">1x</span>
583
+ <span class="cline-any cline-no">&nbsp;</span>
633
584
  <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-yes">16x</span>
635
- <span class="cline-any cline-yes">15x</span>
585
+ <span class="cline-any cline-yes">1x</span>
636
586
  <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-yes">16x</span>
638
587
  <span class="cline-any cline-neutral">&nbsp;</span>
639
588
  <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-yes">1x</span>
590
+ <span class="cline-any cline-no">&nbsp;</span>
640
591
  <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-yes">31x</span>
642
- <span class="cline-any cline-yes">31x</span>
592
+ <span class="cline-any cline-yes">1x</span>
643
593
  <span class="cline-any cline-neutral">&nbsp;</span>
644
594
  <span class="cline-any cline-neutral">&nbsp;</span>
645
595
  <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-no">&nbsp;</span>
647
- <span class="cline-any cline-no">&nbsp;</span>
596
+ <span class="cline-any cline-yes">1x</span>
597
+ <span class="cline-any cline-yes">1x</span>
648
598
  <span class="cline-any cline-neutral">&nbsp;</span>
649
599
  <span class="cline-any cline-neutral">&nbsp;</span>
650
600
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -659,20 +609,15 @@
659
609
  <span class="cline-any cline-neutral">&nbsp;</span>
660
610
  <span class="cline-any cline-neutral">&nbsp;</span>
661
611
  <span class="cline-any cline-no">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
612
  <span class="cline-any cline-no">&nbsp;</span>
666
613
  <span class="cline-any cline-neutral">&nbsp;</span>
667
614
  <span class="cline-any cline-neutral">&nbsp;</span>
668
615
  <span class="cline-any cline-neutral">&nbsp;</span>
669
616
  <span class="cline-any cline-no">&nbsp;</span>
670
- <span class="cline-any cline-no">&nbsp;</span>
671
617
  <span class="cline-any cline-neutral">&nbsp;</span>
672
618
  <span class="cline-any cline-neutral">&nbsp;</span>
673
619
  <span class="cline-any cline-neutral">&nbsp;</span>
674
620
  <span class="cline-any cline-no">&nbsp;</span>
675
- <span class="cline-any cline-no">&nbsp;</span>
676
621
  <span class="cline-any cline-neutral">&nbsp;</span>
677
622
  <span class="cline-any cline-neutral">&nbsp;</span>
678
623
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -713,211 +658,182 @@
713
658
  <span class="cline-any cline-neutral">&nbsp;</span>
714
659
  <span class="cline-any cline-neutral">&nbsp;</span>
715
660
  <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-yes">148x</span>
661
+ <span class="cline-any cline-yes">2x</span>
717
662
  <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-yes">148x</span>
663
+ <span class="cline-any cline-yes">2x</span>
719
664
  <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-yes">148x</span>
721
- <span class="cline-any cline-yes">61x</span>
665
+ <span class="cline-any cline-yes">2x</span>
666
+ <span class="cline-any cline-yes">1x</span>
722
667
  <span class="cline-any cline-neutral">&nbsp;</span>
723
668
  <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-yes">148x</span>
725
- <span class="cline-any cline-yes">138x</span>
669
+ <span class="cline-any cline-yes">2x</span>
670
+ <span class="cline-any cline-yes">2x</span>
726
671
  <span class="cline-any cline-neutral">&nbsp;</span>
727
672
  <span class="cline-any cline-neutral">&nbsp;</span>
728
- <span class="cline-any cline-yes">148x</span>
729
- <span class="cline-any cline-yes">58x</span>
673
+ <span class="cline-any cline-yes">2x</span>
674
+ <span class="cline-any cline-no">&nbsp;</span>
730
675
  <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-yes">148x</span>
676
+ <span class="cline-any cline-yes">2x</span>
732
677
  <span class="cline-any cline-neutral">&nbsp;</span>
733
678
  <span class="cline-any cline-neutral">&nbsp;</span>
734
679
  <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-yes">31x</span>
736
- <span class="cline-any cline-yes">31x</span>
737
- <span class="cline-any cline-yes">31x</span>
738
- <span class="cline-any cline-yes">31x</span>
680
+ <span class="cline-any cline-yes">1x</span>
681
+ <span class="cline-any cline-yes">1x</span>
682
+ <span class="cline-any cline-yes">1x</span>
683
+ <span class="cline-any cline-yes">1x</span>
739
684
  <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-yes">31x</span>
741
- <span class="cline-any cline-yes">31x</span>
742
- <span class="cline-any cline-yes">31x</span>
685
+ <span class="cline-any cline-yes">1x</span>
686
+ <span class="cline-any cline-yes">1x</span>
687
+ <span class="cline-any cline-yes">1x</span>
743
688
  <span class="cline-any cline-neutral">&nbsp;</span>
744
689
  <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-yes">31x</span>
690
+ <span class="cline-any cline-yes">1x</span>
746
691
  <span class="cline-any cline-neutral">&nbsp;</span>
747
- <span class="cline-any cline-yes">45x</span>
692
+ <span class="cline-any cline-yes">1x</span>
748
693
  <span class="cline-any cline-no">&nbsp;</span>
749
694
  <span class="cline-any cline-neutral">&nbsp;</span>
750
- <span class="cline-any cline-yes">45x</span>
695
+ <span class="cline-any cline-yes">1x</span>
751
696
  <span class="cline-any cline-neutral">&nbsp;</span>
752
697
  <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-yes">31x</span>
754
- <span class="cline-any cline-yes">8x</span>
698
+ <span class="cline-any cline-yes">1x</span>
699
+ <span class="cline-any cline-no">&nbsp;</span>
755
700
  <span class="cline-any cline-no">&nbsp;</span>
756
701
  <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-yes">8x</span>
758
- <span class="cline-any cline-yes">2x</span>
759
- <span class="cline-any cline-neutral">&nbsp;</span>
760
- <span class="cline-any cline-yes">6x</span>
761
- <span class="cline-any cline-yes">6x</span>
762
- <span class="cline-any cline-yes">12x</span>
763
- <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-neutral">&nbsp;</span>
766
- <span class="cline-any cline-yes">6x</span>
767
- <span class="cline-any cline-neutral">&nbsp;</span>
768
- <span class="cline-any cline-neutral">&nbsp;</span>
769
- <span class="cline-any cline-yes">31x</span>
770
- <span class="cline-any cline-yes">2x</span>
771
- <span class="cline-any cline-yes">2x</span>
772
- <span class="cline-any cline-neutral">&nbsp;</span>
773
- <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-yes">31x</span>
775
- <span class="cline-any cline-yes">2x</span>
702
+ <span class="cline-any cline-no">&nbsp;</span>
776
703
  <span class="cline-any cline-neutral">&nbsp;</span>
777
704
  <span class="cline-any cline-neutral">&nbsp;</span>
778
- <span class="cline-any cline-yes">31x</span>
779
- <span class="cline-any cline-yes">2x</span>
705
+ <span class="cline-any cline-yes">1x</span>
780
706
  <span class="cline-any cline-no">&nbsp;</span>
781
707
  <span class="cline-any cline-no">&nbsp;</span>
782
- <span class="cline-any cline-neutral">&nbsp;</span>
783
708
  <span class="cline-any cline-no">&nbsp;</span>
784
709
  <span class="cline-any cline-neutral">&nbsp;</span>
710
+ <span class="cline-any cline-no">&nbsp;</span>
785
711
  <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-yes">2x</span>
787
- <span class="cline-any cline-yes">2x</span>
788
- <span class="cline-any cline-yes">2x</span>
789
712
  <span class="cline-any cline-neutral">&nbsp;</span>
713
+ <span class="cline-any cline-no">&nbsp;</span>
714
+ <span class="cline-any cline-no">&nbsp;</span>
715
+ <span class="cline-any cline-no">&nbsp;</span>
790
716
  <span class="cline-any cline-neutral">&nbsp;</span>
791
717
  <span class="cline-any cline-neutral">&nbsp;</span>
792
718
  <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-yes">2x</span>
794
719
  <span class="cline-any cline-neutral">&nbsp;</span>
720
+ <span class="cline-any cline-no">&nbsp;</span>
795
721
  <span class="cline-any cline-neutral">&nbsp;</span>
796
722
  <span class="cline-any cline-neutral">&nbsp;</span>
797
- <span class="cline-any cline-yes">372x</span>
798
723
  <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-yes">69x</span>
800
- <span class="cline-any cline-yes">69x</span>
724
+ <span class="cline-any cline-yes">10x</span>
725
+ <span class="cline-any cline-yes">1x</span>
801
726
  <span class="cline-any cline-neutral">&nbsp;</span>
802
727
  <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-yes">69x</span>
804
- <span class="cline-any cline-yes">69x</span>
728
+ <span class="cline-any cline-yes">1x</span>
729
+ <span class="cline-any cline-yes">1x</span>
805
730
  <span class="cline-any cline-no">&nbsp;</span>
806
731
  <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-yes">69x</span>
808
- <span class="cline-any cline-yes">65x</span>
732
+ <span class="cline-any cline-yes">1x</span>
733
+ <span class="cline-any cline-yes">1x</span>
809
734
  <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-yes">69x</span>
735
+ <span class="cline-any cline-yes">1x</span>
811
736
  <span class="cline-any cline-neutral">&nbsp;</span>
812
737
  <span class="cline-any cline-neutral">&nbsp;</span>
813
738
  <span class="cline-any cline-neutral">&nbsp;</span>
814
739
  <span class="cline-any cline-neutral">&nbsp;</span>
815
- <span class="cline-any cline-yes">31x</span>
816
- <span class="cline-any cline-yes">31x</span>
817
- <span class="cline-any cline-yes">2x</span>
740
+ <span class="cline-any cline-yes">1x</span>
741
+ <span class="cline-any cline-yes">1x</span>
742
+ <span class="cline-any cline-no">&nbsp;</span>
818
743
  <span class="cline-any cline-no">&nbsp;</span>
819
744
  <span class="cline-any cline-neutral">&nbsp;</span>
820
- <span class="cline-any cline-yes">2x</span>
745
+ <span class="cline-any cline-no">&nbsp;</span>
821
746
  <span class="cline-any cline-neutral">&nbsp;</span>
822
747
  <span class="cline-any cline-neutral">&nbsp;</span>
823
748
  <span class="cline-any cline-neutral">&nbsp;</span>
824
- <span class="cline-any cline-yes">2x</span>
749
+ <span class="cline-any cline-no">&nbsp;</span>
825
750
  <span class="cline-any cline-neutral">&nbsp;</span>
826
751
  <span class="cline-any cline-neutral">&nbsp;</span>
827
- <span class="cline-any cline-yes">31x</span>
828
- <span class="cline-any cline-yes">31x</span>
829
- <span class="cline-any cline-yes">2x</span>
752
+ <span class="cline-any cline-yes">1x</span>
753
+ <span class="cline-any cline-yes">1x</span>
830
754
  <span class="cline-any cline-no">&nbsp;</span>
831
- <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-yes">2x</span>
833
755
  <span class="cline-any cline-no">&nbsp;</span>
834
756
  <span class="cline-any cline-neutral">&nbsp;</span>
835
- <span class="cline-any cline-yes">2x</span>
757
+ <span class="cline-any cline-no">&nbsp;</span>
836
758
  <span class="cline-any cline-no">&nbsp;</span>
837
759
  <span class="cline-any cline-neutral">&nbsp;</span>
838
- <span class="cline-any cline-yes">2x</span>
839
- <span class="cline-any cline-yes">2x</span>
840
- <span class="cline-any cline-yes">2x</span>
841
- <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-neutral">&nbsp;</span>
843
- <span class="cline-any cline-yes">31x</span>
844
- <span class="cline-any cline-yes">31x</span>
845
760
  <span class="cline-any cline-no">&nbsp;</span>
846
761
  <span class="cline-any cline-no">&nbsp;</span>
847
762
  <span class="cline-any cline-neutral">&nbsp;</span>
848
763
  <span class="cline-any cline-no">&nbsp;</span>
764
+ <span class="cline-any cline-no">&nbsp;</span>
765
+ <span class="cline-any cline-no">&nbsp;</span>
849
766
  <span class="cline-any cline-neutral">&nbsp;</span>
850
767
  <span class="cline-any cline-neutral">&nbsp;</span>
768
+ <span class="cline-any cline-yes">1x</span>
769
+ <span class="cline-any cline-yes">1x</span>
770
+ <span class="cline-any cline-no">&nbsp;</span>
771
+ <span class="cline-any cline-no">&nbsp;</span>
851
772
  <span class="cline-any cline-neutral">&nbsp;</span>
852
773
  <span class="cline-any cline-no">&nbsp;</span>
853
774
  <span class="cline-any cline-neutral">&nbsp;</span>
854
775
  <span class="cline-any cline-neutral">&nbsp;</span>
855
- <span class="cline-any cline-yes">31x</span>
856
- <span class="cline-any cline-yes">31x</span>
857
776
  <span class="cline-any cline-neutral">&nbsp;</span>
858
- <span class="cline-any cline-yes">31x</span>
859
- <span class="cline-any cline-yes">31x</span>
860
- <span class="cline-any cline-yes">6x</span>
861
777
  <span class="cline-any cline-no">&nbsp;</span>
862
778
  <span class="cline-any cline-neutral">&nbsp;</span>
863
- <span class="cline-any cline-yes">6x</span>
864
- <span class="cline-any cline-neutral">&nbsp;</span>
865
779
  <span class="cline-any cline-neutral">&nbsp;</span>
866
- <span class="cline-any cline-yes">31x</span>
867
- <span class="cline-any cline-yes">31x</span>
780
+ <span class="cline-any cline-yes">1x</span>
781
+ <span class="cline-any cline-yes">1x</span>
868
782
  <span class="cline-any cline-neutral">&nbsp;</span>
869
- <span class="cline-any cline-yes">31x</span>
870
- <span class="cline-any cline-yes">31x</span>
783
+ <span class="cline-any cline-yes">1x</span>
784
+ <span class="cline-any cline-yes">1x</span>
785
+ <span class="cline-any cline-no">&nbsp;</span>
786
+ <span class="cline-any cline-no">&nbsp;</span>
871
787
  <span class="cline-any cline-neutral">&nbsp;</span>
872
- <span class="cline-any cline-yes">31x</span>
873
- <span class="cline-any cline-yes">31x</span>
788
+ <span class="cline-any cline-no">&nbsp;</span>
874
789
  <span class="cline-any cline-neutral">&nbsp;</span>
875
- <span class="cline-any cline-yes">31x</span>
876
- <span class="cline-any cline-yes">31x</span>
877
790
  <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-yes">31x</span>
879
- <span class="cline-any cline-yes">31x</span>
791
+ <span class="cline-any cline-yes">1x</span>
792
+ <span class="cline-any cline-yes">1x</span>
880
793
  <span class="cline-any cline-neutral">&nbsp;</span>
881
- <span class="cline-any cline-yes">31x</span>
882
- <span class="cline-any cline-yes">31x</span>
794
+ <span class="cline-any cline-yes">1x</span>
795
+ <span class="cline-any cline-yes">1x</span>
883
796
  <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-yes">1x</span>
798
+ <span class="cline-any cline-yes">1x</span>
884
799
  <span class="cline-any cline-neutral">&nbsp;</span>
885
- <span class="cline-any cline-yes">31x</span>
886
- <span class="cline-any cline-yes">31x</span>
887
- <span class="cline-any cline-yes">31x</span>
888
- <span class="cline-any cline-yes">31x</span>
800
+ <span class="cline-any cline-yes">1x</span>
801
+ <span class="cline-any cline-yes">1x</span>
889
802
  <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-yes">31x</span>
891
803
  <span class="cline-any cline-neutral">&nbsp;</span>
804
+ <span class="cline-any cline-yes">1x</span>
805
+ <span class="cline-any cline-yes">1x</span>
806
+ <span class="cline-any cline-yes">1x</span>
807
+ <span class="cline-any cline-yes">1x</span>
892
808
  <span class="cline-any cline-neutral">&nbsp;</span>
809
+ <span class="cline-any cline-yes">1x</span>
893
810
  <span class="cline-any cline-neutral">&nbsp;</span>
894
- <span class="cline-any cline-yes">31x</span>
895
811
  <span class="cline-any cline-neutral">&nbsp;</span>
896
812
  <span class="cline-any cline-neutral">&nbsp;</span>
813
+ <span class="cline-any cline-yes">1x</span>
897
814
  <span class="cline-any cline-neutral">&nbsp;</span>
898
815
  <span class="cline-any cline-neutral">&nbsp;</span>
899
- <span class="cline-any cline-yes">31x</span>
900
- <span class="cline-any cline-yes">16x</span>
901
816
  <span class="cline-any cline-neutral">&nbsp;</span>
902
- <span class="cline-any cline-yes">31x</span>
903
- <span class="cline-any cline-yes">2x</span>
904
- <span class="cline-any cline-yes">2x</span>
905
- <span class="cline-any cline-yes">2x</span>
906
817
  <span class="cline-any cline-neutral">&nbsp;</span>
907
- <span class="cline-any cline-yes">31x</span>
818
+ <span class="cline-any cline-yes">1x</span>
819
+ <span class="cline-any cline-no">&nbsp;</span>
908
820
  <span class="cline-any cline-neutral">&nbsp;</span>
821
+ <span class="cline-any cline-yes">1x</span>
822
+ <span class="cline-any cline-no">&nbsp;</span>
823
+ <span class="cline-any cline-no">&nbsp;</span>
824
+ <span class="cline-any cline-no">&nbsp;</span>
909
825
  <span class="cline-any cline-neutral">&nbsp;</span>
826
+ <span class="cline-any cline-yes">1x</span>
910
827
  <span class="cline-any cline-neutral">&nbsp;</span>
911
- <span class="cline-any cline-yes">31x</span>
912
- <span class="cline-any cline-yes">31x</span>
913
- <span class="cline-any cline-yes">31x</span>
914
- <span class="cline-any cline-yes">31x</span>
915
- <span class="cline-any cline-yes">31x</span>
916
828
  <span class="cline-any cline-neutral">&nbsp;</span>
917
829
  <span class="cline-any cline-neutral">&nbsp;</span>
830
+ <span class="cline-any cline-yes">1x</span>
831
+ <span class="cline-any cline-yes">1x</span>
832
+ <span class="cline-any cline-yes">1x</span>
833
+ <span class="cline-any cline-yes">1x</span>
834
+ <span class="cline-any cline-yes">1x</span>
918
835
  <span class="cline-any cline-neutral">&nbsp;</span>
919
836
  <span class="cline-any cline-neutral">&nbsp;</span>
920
- <span class="cline-any cline-yes">45x</span>
921
837
  <span class="cline-any cline-neutral">&nbsp;</span>
922
838
  <span class="cline-any cline-neutral">&nbsp;</span>
923
839
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -926,26 +842,26 @@
926
842
  <span class="cline-any cline-neutral">&nbsp;</span>
927
843
  <span class="cline-any cline-neutral">&nbsp;</span>
928
844
  <span class="cline-any cline-neutral">&nbsp;</span>
929
- <span class="cline-any cline-yes">45x</span>
930
- <span class="cline-any cline-yes">31x</span>
845
+ <span class="cline-any cline-yes">44x</span>
846
+ <span class="cline-any cline-yes">1x</span>
931
847
  <span class="cline-any cline-neutral">&nbsp;</span>
932
848
  <span class="cline-any cline-neutral">&nbsp;</span>
933
849
  <span class="cline-any cline-neutral">&nbsp;</span>
934
850
  <span class="cline-any cline-neutral">&nbsp;</span>
935
851
  <span class="cline-any cline-neutral">&nbsp;</span>
936
852
  <span class="cline-any cline-neutral">&nbsp;</span>
937
- <span class="cline-any cline-yes">31x</span>
853
+ <span class="cline-any cline-yes">1x</span>
938
854
  <span class="cline-any cline-neutral">&nbsp;</span>
939
- <span class="cline-any cline-yes">31x</span>
855
+ <span class="cline-any cline-yes">1x</span>
940
856
  <span class="cline-any cline-neutral">&nbsp;</span>
941
857
  <span class="cline-any cline-neutral">&nbsp;</span>
942
- <span class="cline-any cline-yes">31x</span>
943
- <span class="cline-any cline-yes">31x</span>
858
+ <span class="cline-any cline-yes">1x</span>
859
+ <span class="cline-any cline-yes">1x</span>
944
860
  <span class="cline-any cline-neutral">&nbsp;</span>
945
- <span class="cline-any cline-yes">31x</span>
946
- <span class="cline-any cline-yes">31x</span>
861
+ <span class="cline-any cline-yes">1x</span>
862
+ <span class="cline-any cline-yes">1x</span>
947
863
  <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-yes">31x</span>
864
+ <span class="cline-any cline-yes">1x</span>
949
865
  <span class="cline-any cline-neutral">&nbsp;</span>
950
866
  <span class="cline-any cline-neutral">&nbsp;</span>
951
867
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -964,7 +880,7 @@
964
880
  <span class="cline-any cline-neutral">&nbsp;</span>
965
881
  <span class="cline-any cline-neutral">&nbsp;</span>
966
882
  <span class="cline-any cline-neutral">&nbsp;</span>
967
- <span class="cline-any cline-yes">45x</span>
883
+ <span class="cline-any cline-yes">44x</span>
968
884
  <span class="cline-any cline-yes">1x</span>
969
885
  <span class="cline-any cline-yes">1x</span>
970
886
  <span class="cline-any cline-yes">1x</span>
@@ -1012,32 +928,32 @@
1012
928
  <span class="cline-any cline-neutral">&nbsp;</span>
1013
929
  <span class="cline-any cline-neutral">&nbsp;</span>
1014
930
  <span class="cline-any cline-neutral">&nbsp;</span>
1015
- <span class="cline-any cline-yes">45x</span>
1016
- <span class="cline-any cline-yes">15x</span>
1017
- <span class="cline-any cline-yes">15x</span>
1018
- <span class="cline-any cline-yes">14x</span>
931
+ <span class="cline-any cline-yes">44x</span>
932
+ <span class="cline-any cline-no">&nbsp;</span>
933
+ <span class="cline-any cline-no">&nbsp;</span>
934
+ <span class="cline-any cline-no">&nbsp;</span>
1019
935
  <span class="cline-any cline-neutral">&nbsp;</span>
1020
- <span class="cline-any cline-yes">15x</span>
1021
- <span class="cline-any cline-yes">15x</span>
936
+ <span class="cline-any cline-no">&nbsp;</span>
937
+ <span class="cline-any cline-no">&nbsp;</span>
1022
938
  <span class="cline-any cline-neutral">&nbsp;</span>
1023
939
  <span class="cline-any cline-neutral">&nbsp;</span>
1024
940
  <span class="cline-any cline-neutral">&nbsp;</span>
1025
941
  <span class="cline-any cline-neutral">&nbsp;</span>
1026
942
  <span class="cline-any cline-neutral">&nbsp;</span>
1027
- <span class="cline-any cline-yes">15x</span>
943
+ <span class="cline-any cline-no">&nbsp;</span>
1028
944
  <span class="cline-any cline-neutral">&nbsp;</span>
1029
945
  <span class="cline-any cline-neutral">&nbsp;</span>
1030
946
  <span class="cline-any cline-neutral">&nbsp;</span>
1031
947
  <span class="cline-any cline-neutral">&nbsp;</span>
1032
948
  <span class="cline-any cline-neutral">&nbsp;</span>
1033
949
  <span class="cline-any cline-neutral">&nbsp;</span>
1034
- <span class="cline-any cline-yes">15x</span>
950
+ <span class="cline-any cline-no">&nbsp;</span>
1035
951
  <span class="cline-any cline-neutral">&nbsp;</span>
1036
952
  <span class="cline-any cline-neutral">&nbsp;</span>
1037
953
  <span class="cline-any cline-neutral">&nbsp;</span>
1038
954
  <span class="cline-any cline-neutral">&nbsp;</span>
1039
955
  <span class="cline-any cline-neutral">&nbsp;</span>
1040
- <span class="cline-any cline-yes">15x</span>
956
+ <span class="cline-any cline-no">&nbsp;</span>
1041
957
  <span class="cline-any cline-neutral">&nbsp;</span>
1042
958
  <span class="cline-any cline-neutral">&nbsp;</span>
1043
959
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1058,7 +974,7 @@
1058
974
  <span class="cline-any cline-neutral">&nbsp;</span>
1059
975
  <span class="cline-any cline-neutral">&nbsp;</span>
1060
976
  <span class="cline-any cline-neutral">&nbsp;</span>
1061
- <span class="cline-any cline-yes">45x</span>
977
+ <span class="cline-any cline-yes">44x</span>
1062
978
  <span class="cline-any cline-yes">1x</span>
1063
979
  <span class="cline-any cline-yes">1x</span>
1064
980
  <span class="cline-any cline-yes">1x</span>
@@ -1068,7 +984,6 @@
1068
984
  <span class="cline-any cline-yes">1x</span>
1069
985
  <span class="cline-any cline-neutral">&nbsp;</span>
1070
986
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const { SearchIndexes } = require("../../../db/utils")
1071
- const { removeKeyNumbering } = require("./utils")
1072
987
  const fetch = require("node-fetch")
1073
988
  const { getCouchInfo } = require("@budibase/backend-core/db")
1074
989
  const { getAppId } = require("@budibase/backend-core/context")
@@ -1090,8 +1005,6 @@ class QueryBuilder {
1090
1005
  notEmpty: {},
1091
1006
  oneOf: {},
1092
1007
  contains: {},
1093
- notContains: {},
1094
- containsAny: {},
1095
1008
  ...base,
1096
1009
  }
1097
1010
  this.limit = 50
@@ -1119,22 +1032,22 @@ class QueryBuilder {
1119
1032
  }
1120
1033
  &nbsp;
1121
1034
  setSort(sort) {
1122
- if (sort != null) {
1123
- this.sort = sort
1035
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (sort != null) {
1036
+ <span class="cstat-no" title="statement not covered" > this.sort = sort</span>
1124
1037
  }
1125
1038
  return this
1126
1039
  }
1127
1040
  &nbsp;
1128
1041
  setSortOrder(sortOrder) {
1129
- if (sortOrder != null) {
1130
- this.sortOrder = sortOrder
1042
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (sortOrder != null) {
1043
+ <span class="cstat-no" title="statement not covered" > this.sortOrder = sortOrder</span>
1131
1044
  }
1132
1045
  return this
1133
1046
  }
1134
1047
  &nbsp;
1135
1048
  setSortType(sortType) {
1136
- if (sortType != null) {
1137
- this.sortType = sortType
1049
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (sortType != null) {
1050
+ <span class="cstat-no" title="statement not covered" > this.sortType = sortType</span>
1138
1051
  }
1139
1052
  return this
1140
1053
  }
@@ -1194,16 +1107,6 @@ class QueryBuilder {
1194
1107
  &nbsp;
1195
1108
  <span class="fstat-no" title="function not covered" > ad</span>dContains(key, value) {
1196
1109
  <span class="cstat-no" title="statement not covered" > this.query.contains[key] = value</span>
1197
- <span class="cstat-no" title="statement not covered" > return this</span>
1198
- }
1199
- &nbsp;
1200
- <span class="fstat-no" title="function not covered" > ad</span>dNotContains(key, value) {
1201
- <span class="cstat-no" title="statement not covered" > this.query.notContains[key] = value</span>
1202
- <span class="cstat-no" title="statement not covered" > return this</span>
1203
- }
1204
- &nbsp;
1205
- <span class="fstat-no" title="function not covered" > ad</span>dContainsAny(key, value) {
1206
- <span class="cstat-no" title="statement not covered" > this.query.containsAny[key] = value</span>
1207
1110
  <span class="cstat-no" title="statement not covered" > return this</span>
1208
1111
  }
1209
1112
  &nbsp;
@@ -1220,15 +1123,15 @@ class QueryBuilder {
1220
1123
  const originalType = typeof value
1221
1124
  // Convert to lowercase
1222
1125
  if (value &amp;&amp; lowercase) {
1223
- value = value.toLowerCase ? value.toLowerCase() : value
1126
+ value = value.toLowerCase ? value.toLowerCase() : <span class="branch-1 cbranch-no" title="branch not covered" >value</span>
1224
1127
  }
1225
1128
  // Escape characters
1226
- if (escape &amp;&amp; originalType === "string") {
1129
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (escape &amp;&amp; originalType === "string") {
1227
1130
  value = `${value}`.replace(/[ #+\-&amp;|!(){}\]^"~*?:\\]/g, "\\$&amp;")
1228
1131
  }
1229
1132
  // Wrap in quotes
1230
- if (hasVersion &amp;&amp; wrap) {
1231
- value = originalType === "number" ? value : `"${value}"`
1133
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (hasVersion &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >wrap)</span> {
1134
+ <span class="cstat-no" title="statement not covered" > value = originalType === "number" ? value : `"${value}"`</span>
1232
1135
  }
1233
1136
  return value
1234
1137
  }
@@ -1236,7 +1139,7 @@ class QueryBuilder {
1236
1139
  buildSearchQuery() {
1237
1140
  const builder = this
1238
1141
  let allOr = this.query &amp;&amp; this.query.allOr
1239
- let query = allOr ? "" : "*:*"
1142
+ let query = allOr ? <span class="branch-0 cbranch-no" title="branch not covered" >"" </span>: "*:*"
1240
1143
  const allPreProcessingOpts = { escape: true, lowercase: true, wrap: true }
1241
1144
  let tableId
1242
1145
  <span class="missing-if-branch" title="else path not taken" >E</span>if (this.query.equal.tableId) {
@@ -1252,53 +1155,33 @@ class QueryBuilder {
1252
1155
  return `${key}:${builder.preprocess(value, allPreProcessingOpts)}`
1253
1156
  }
1254
1157
  &nbsp;
1255
- const contains = (key, value, mode = "AND") =&gt; {
1256
- <span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(value) &amp;&amp; value.length === 0) {
1158
+ const contains = <span class="fstat-no" title="function not covered" >(k</span>ey, value) =&gt; {
1159
+ <span class="cstat-no" title="statement not covered" > if (!value &amp;&amp; value !== 0) {</span>
1257
1160
  <span class="cstat-no" title="statement not covered" > return null</span>
1258
1161
  }
1259
- if (!Array.isArray(value)) {
1260
- return `${key}:${value}`
1261
- }
1262
- let statement = `${builder.preprocess(value[0], { escape: true })}`
1263
- for (let i = 1; i &lt; value.length; i++) {
1264
- statement += ` ${mode} ${builder.preprocess(value[i], {
1265
- escape: true,
1266
- })}`
1267
- }
1268
- return `${key}:(${statement})`
1162
+ <span class="cstat-no" title="statement not covered" > return `${key}:${builder.preprocess(value, { escape: true })}`</span>
1269
1163
  }
1270
1164
  &nbsp;
1271
- const notContains = (key, value) =&gt; {
1272
- const allPrefix = allOr === "" ? <span class="branch-0 cbranch-no" title="branch not covered" >"*:* AND" </span>: ""
1273
- return allPrefix + "NOT " + contains(key, value)
1274
- }
1275
- &nbsp;
1276
- const containsAny = (key, value) =&gt; {
1277
- return contains(key, value, "OR")
1278
- }
1279
- &nbsp;
1280
- const oneOf = (key, value) =&gt; {
1281
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(value)) {
1165
+ const oneOf = <span class="fstat-no" title="function not covered" >(k</span>ey, value) =&gt; {
1166
+ <span class="cstat-no" title="statement not covered" > if (!Array.isArray(value)) {</span>
1282
1167
  <span class="cstat-no" title="statement not covered" > if (typeof value === "string") {</span>
1283
1168
  <span class="cstat-no" title="statement not covered" > value = value.split(",")</span>
1284
1169
  } else {
1285
1170
  <span class="cstat-no" title="statement not covered" > return ""</span>
1286
1171
  }
1287
1172
  }
1288
- let orStatement = `${builder.preprocess(value[0], allPreProcessingOpts)}`
1289
- for (let i = 1; i &lt; value.length; i++) {
1290
- orStatement += ` OR ${builder.preprocess(
1173
+ let orStatement = <span class="cstat-no" title="statement not covered" >`${builder.preprocess(value[0], allPreProcessingOpts)}`</span>
1174
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >1;</span> i &lt; value.length; i++) {</span>
1175
+ <span class="cstat-no" title="statement not covered" > orStatement += ` OR ${builder.preprocess(</span>
1291
1176
  value[i],
1292
1177
  allPreProcessingOpts
1293
1178
  )}`
1294
1179
  }
1295
- return `${key}:(${orStatement})`
1180
+ <span class="cstat-no" title="statement not covered" > return `${key}:(${orStatement})`</span>
1296
1181
  }
1297
1182
  &nbsp;
1298
1183
  function build(structure, queryFn) {
1299
1184
  for (let [key, value] of Object.entries(structure)) {
1300
- // check for new format - remove numbering if needed
1301
- key = removeKeyNumbering(key)
1302
1185
  key = builder.preprocess(key.replace(/ /g, "_"), {
1303
1186
  escape: true,
1304
1187
  })
@@ -1306,8 +1189,8 @@ class QueryBuilder {
1306
1189
  <span class="missing-if-branch" title="if path not taken" >I</span>if (expression == null) {
1307
1190
  <span class="cstat-no" title="statement not covered" > continue</span>
1308
1191
  }
1309
- if (query.length &gt; 0) {
1310
- query += ` ${allOr ? "OR" : "AND"} `
1192
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (query.length &gt; 0) {
1193
+ query += ` ${allOr ? <span class="branch-0 cbranch-no" title="branch not covered" >"OR" </span>: "AND"} `
1311
1194
  }
1312
1195
  query += expression
1313
1196
  }
@@ -1315,31 +1198,31 @@ class QueryBuilder {
1315
1198
  &nbsp;
1316
1199
  // Construct the actual lucene search query string from JSON structure
1317
1200
  <span class="missing-if-branch" title="else path not taken" >E</span>if (this.query.string) {
1318
- build(this.query.string, (key, value) =&gt; {
1319
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!value) {
1201
+ build(this.query.string, <span class="fstat-no" title="function not covered" >(k</span>ey, value) =&gt; {
1202
+ <span class="cstat-no" title="statement not covered" > if (!value) {</span>
1320
1203
  <span class="cstat-no" title="statement not covered" > return null</span>
1321
1204
  }
1322
- value = builder.preprocess(value, {
1205
+ <span class="cstat-no" title="statement not covered" > value = builder.preprocess(value, {</span>
1323
1206
  escape: true,
1324
1207
  lowercase: true,
1325
1208
  })
1326
- return `${key}:${value}*`
1209
+ <span class="cstat-no" title="statement not covered" > return `${key}:${value}*`</span>
1327
1210
  })
1328
1211
  }
1329
1212
  <span class="missing-if-branch" title="else path not taken" >E</span>if (this.query.range) {
1330
- build(this.query.range, (key, value) =&gt; {
1331
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!value) {
1213
+ build(this.query.range, <span class="fstat-no" title="function not covered" >(k</span>ey, value) =&gt; {
1214
+ <span class="cstat-no" title="statement not covered" > if (!value) {</span>
1332
1215
  <span class="cstat-no" title="statement not covered" > return null</span>
1333
1216
  }
1334
- <span class="missing-if-branch" title="if path not taken" >I</span>if (value.low == null || value.low === "") {
1217
+ <span class="cstat-no" title="statement not covered" > if (value.low == null || value.low === "") {</span>
1335
1218
  <span class="cstat-no" title="statement not covered" > return null</span>
1336
1219
  }
1337
- <span class="missing-if-branch" title="if path not taken" >I</span>if (value.high == null || value.high === "") {
1220
+ <span class="cstat-no" title="statement not covered" > if (value.high == null || value.high === "") {</span>
1338
1221
  <span class="cstat-no" title="statement not covered" > return null</span>
1339
1222
  }
1340
- const low = builder.preprocess(value.low, allPreProcessingOpts)
1341
- const high = builder.preprocess(value.high, allPreProcessingOpts)
1342
- return `${key}:[${low} TO ${high}]`
1223
+ const low = <span class="cstat-no" title="statement not covered" >builder.preprocess(value.low, allPreProcessingOpts)</span>
1224
+ const high = <span class="cstat-no" title="statement not covered" >builder.preprocess(value.high, allPreProcessingOpts)</span>
1225
+ <span class="cstat-no" title="statement not covered" > return `${key}:[${low} TO ${high}]`</span>
1343
1226
  })
1344
1227
  }
1345
1228
  <span class="missing-if-branch" title="else path not taken" >E</span>if (this.query.fuzzy) {
@@ -1358,18 +1241,18 @@ class QueryBuilder {
1358
1241
  build(this.query.equal, equal)
1359
1242
  }
1360
1243
  <span class="missing-if-branch" title="else path not taken" >E</span>if (this.query.notEqual) {
1361
- build(this.query.notEqual, (key, value) =&gt; {
1362
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!value) {
1244
+ build(this.query.notEqual, <span class="fstat-no" title="function not covered" >(k</span>ey, value) =&gt; {
1245
+ <span class="cstat-no" title="statement not covered" > if (!value) {</span>
1363
1246
  <span class="cstat-no" title="statement not covered" > return null</span>
1364
1247
  }
1365
- return `!${key}:${builder.preprocess(value, allPreProcessingOpts)}`
1248
+ <span class="cstat-no" title="statement not covered" > return `!${key}:${builder.preprocess(value, allPreProcessingOpts)}`</span>
1366
1249
  })
1367
1250
  }
1368
1251
  <span class="missing-if-branch" title="else path not taken" >E</span>if (this.query.empty) {
1369
- build(this.query.empty, key =&gt; `!${key}:["" TO *]`)
1252
+ build(this.query.empty, <span class="fstat-no" title="function not covered" >ke</span>y =&gt; <span class="cstat-no" title="statement not covered" >`!${key}:["" TO *]`)</span>
1370
1253
  }
1371
1254
  <span class="missing-if-branch" title="else path not taken" >E</span>if (this.query.notEmpty) {
1372
- build(this.query.notEmpty, key =&gt; `${key}:["" TO *]`)
1255
+ build(this.query.notEmpty, <span class="fstat-no" title="function not covered" >ke</span>y =&gt; <span class="cstat-no" title="statement not covered" >`${key}:["" TO *]`)</span>
1373
1256
  }
1374
1257
  <span class="missing-if-branch" title="else path not taken" >E</span>if (this.query.oneOf) {
1375
1258
  build(this.query.oneOf, oneOf)
@@ -1377,12 +1260,6 @@ class QueryBuilder {
1377
1260
  <span class="missing-if-branch" title="else path not taken" >E</span>if (this.query.contains) {
1378
1261
  build(this.query.contains, contains)
1379
1262
  }
1380
- <span class="missing-if-branch" title="else path not taken" >E</span>if (this.query.notContains) {
1381
- build(this.query.notContains, notContains)
1382
- }
1383
- <span class="missing-if-branch" title="else path not taken" >E</span>if (this.query.containsAny) {
1384
- build(this.query.containsAny, containsAny)
1385
- }
1386
1263
  // make sure table ID is always added as an AND
1387
1264
  <span class="missing-if-branch" title="else path not taken" >E</span>if (tableId) {
1388
1265
  query = `(${query})`
@@ -1398,13 +1275,13 @@ class QueryBuilder {
1398
1275
  limit: Math.min(this.limit, 200),
1399
1276
  include_docs: this.includeDocs,
1400
1277
  }
1401
- if (this.bookmark) {
1402
- body.bookmark = this.bookmark
1278
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.bookmark) {
1279
+ <span class="cstat-no" title="statement not covered" > body.bookmark = this.bookmark</span>
1403
1280
  }
1404
- if (this.sort) {
1405
- const order = this.sortOrder === "descending" ? <span class="branch-0 cbranch-no" title="branch not covered" >"-" </span>: ""
1406
- const type = `&lt;${this.sortType}&gt;`
1407
- body.sort = `${order}${this.sort.replace(/ /g, "_")}${type}`
1281
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.sort) {
1282
+ const order = <span class="cstat-no" title="statement not covered" >this.sortOrder === "descending" ? "-" : ""</span>
1283
+ const type = <span class="cstat-no" title="statement not covered" >`&lt;${this.sortType}&gt;`</span>
1284
+ <span class="cstat-no" title="statement not covered" > body.sort = `${order}${this.sort.replace(/ /g, "_")}${type}`</span>
1408
1285
  }
1409
1286
  return body
1410
1287
  }
@@ -1418,9 +1295,6 @@ class QueryBuilder {
1418
1295
  }
1419
1296
  }
1420
1297
  &nbsp;
1421
- // exported for unit testing
1422
- exports.QueryBuilder = QueryBuilder
1423
- &nbsp;
1424
1298
  /**
1425
1299
  * Executes a lucene search query.
1426
1300
  * @param url The query URL
@@ -1514,32 +1388,32 @@ const recursiveSearch = async (query, params) =&gt; {
1514
1388
  * bookmark {string} The bookmark to resume from
1515
1389
  * @returns {Promise&lt;{hasNextPage: boolean, rows: *[]}&gt;}
1516
1390
  */
1517
- exports.paginatedSearch = async (query, params) =&gt; {
1518
- let limit = params.limit
1519
- if (limit == null || isNaN(limit) || limit &lt; 0) {
1520
- limit = 50
1391
+ exports.paginatedSearch = <span class="fstat-no" title="function not covered" >as</span>ync (query, params) =&gt; {
1392
+ let limit = <span class="cstat-no" title="statement not covered" >params.limit</span>
1393
+ <span class="cstat-no" title="statement not covered" > if (limit == null || isNaN(limit) || limit &lt; 0) {</span>
1394
+ <span class="cstat-no" title="statement not covered" > limit = 50</span>
1521
1395
  }
1522
- limit = Math.min(limit, 200)
1523
- const search = new QueryBuilder(query)
1396
+ <span class="cstat-no" title="statement not covered" > limit = Math.min(limit, 200)</span>
1397
+ const search = <span class="cstat-no" title="statement not covered" >new QueryBuilder(query)</span>
1524
1398
  .setVersion(params.version)
1525
1399
  .setTable(params.tableId)
1526
1400
  .setSort(params.sort)
1527
1401
  .setSortOrder(params.sortOrder)
1528
1402
  .setSortType(params.sortType)
1529
- const searchResults = await search
1403
+ const searchResults = <span class="cstat-no" title="statement not covered" >await search</span>
1530
1404
  .setBookmark(params.bookmark)
1531
1405
  .setLimit(limit)
1532
1406
  .run()
1533
1407
  &nbsp;
1534
1408
  // Try fetching 1 row in the next page to see if another page of results
1535
1409
  // exists or not
1536
- const nextResults = await search
1410
+ const nextResults = <span class="cstat-no" title="statement not covered" >await search</span>
1537
1411
  .setTable(params.tableId)
1538
1412
  .setBookmark(searchResults.bookmark)
1539
1413
  .setLimit(1)
1540
1414
  .run()
1541
1415
  &nbsp;
1542
- return {
1416
+ <span class="cstat-no" title="statement not covered" > return {</span>
1543
1417
  ...searchResults,
1544
1418
  hasNextPage: nextResults.rows &amp;&amp; nextResults.rows.length &gt; 0,
1545
1419
  }
@@ -1576,7 +1450,7 @@ exports.fullSearch = async (query, params) =&gt; {
1576
1450
  <div class='footer quiet pad2 space-top1 center small'>
1577
1451
  Code coverage generated by
1578
1452
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1579
- at Fri Aug 19 2022 15:13:13 GMT+0000 (Coordinated Universal Time)
1453
+ at Sat Aug 20 2022 08:35:08 GMT+0000 (Coordinated Universal Time)
1580
1454
  </div>
1581
1455
  <script src="../../../prettify.js"></script>
1582
1456
  <script>