@budibase/server 2.3.16 → 2.3.17-alpha.1

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 (455) hide show
  1. package/__mocks__/aws-sdk.ts +1 -1
  2. package/builder/assets/{index.6a3954cc.js → index.2492f6c7.js} +364 -364
  3. package/builder/assets/{index.4488f38d.css → index.7e76c039.css} +1 -1
  4. package/builder/index.html +2 -2
  5. package/dist/api/controllers/query/index.js +2 -0
  6. package/dist/api/controllers/row/ExternalRequest.js +4 -2
  7. package/dist/api/controllers/row/external.js +12 -1
  8. package/dist/api/controllers/table/external.js +8 -8
  9. package/dist/app.js +7 -1
  10. package/dist/constants/index.js +4 -24
  11. package/dist/db/defaultData/datasource_bb_default.js +6 -5
  12. package/dist/db/linkedRows/LinkController.js +9 -8
  13. package/dist/ddApm.js +11 -0
  14. package/dist/elasticApm.js +14 -0
  15. package/dist/integrations/base/sql.js +10 -3
  16. package/dist/package.json +9 -6
  17. package/dist/sdk/app/backups/exports.js +8 -2
  18. package/dist/sdk/app/datasources/datasources.js +3 -0
  19. package/dist/tsconfig.build.tsbuildinfo +1 -1
  20. package/dist/utilities/retry.js +30 -0
  21. package/jest-testcontainers-config.js +8 -0
  22. package/jest.config.ts +28 -11
  23. package/package.json +10 -7
  24. package/scripts/load/create-many-apps.js +24 -0
  25. package/scripts/load/create-many-rows.js +30 -0
  26. package/scripts/load/utils.js +66 -0
  27. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  28. package/src/api/controllers/query/index.ts +2 -0
  29. package/src/api/controllers/row/ExternalRequest.ts +6 -2
  30. package/src/api/controllers/row/external.ts +13 -1
  31. package/src/api/controllers/table/external.ts +3 -2
  32. package/src/api/routes/public/applications.ts +0 -1
  33. package/src/api/routes/public/tests/compare.spec.js +1 -1
  34. package/src/api/routes/public/tests/users.spec.js +1 -1
  35. package/src/api/routes/public/tests/utils.ts +25 -8
  36. package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +1 -1
  37. package/src/api/routes/tests/analytics.spec.js +4 -1
  38. package/src/api/routes/tests/apikeys.spec.js +1 -1
  39. package/src/api/routes/tests/application.spec.ts +20 -6
  40. package/src/api/routes/tests/auth.spec.js +2 -2
  41. package/src/api/routes/tests/automation.spec.js +6 -2
  42. package/src/api/routes/tests/backup.spec.ts +4 -13
  43. package/src/api/routes/tests/{cloud.spec.ts → cloud.seq.spec.ts} +11 -15
  44. package/src/api/routes/tests/component.spec.js +1 -1
  45. package/src/api/routes/tests/datasource.spec.ts +20 -3
  46. package/src/api/routes/tests/dev.spec.js +1 -1
  47. package/src/api/routes/tests/environmentVariables.spec.ts +144 -0
  48. package/src/api/routes/tests/integration.spec.js +1 -1
  49. package/src/api/routes/tests/layout.spec.js +1 -1
  50. package/src/api/routes/tests/metadata.spec.js +1 -1
  51. package/src/api/routes/tests/misc.spec.js +1 -1
  52. package/src/api/routes/tests/permissions.spec.js +4 -1
  53. package/src/api/routes/tests/{query.spec.js → query.seq.spec.js} +22 -1
  54. package/src/api/routes/tests/role.spec.js +6 -1
  55. package/src/api/routes/tests/routing.spec.js +1 -1
  56. package/src/api/routes/tests/row.spec.js +11 -3
  57. package/src/api/routes/tests/screen.spec.js +1 -1
  58. package/src/api/routes/tests/static.spec.js +2 -1
  59. package/src/api/routes/tests/table.spec.js +1 -1
  60. package/src/api/routes/tests/templates.spec.js +1 -1
  61. package/src/api/routes/tests/user.spec.js +12 -12
  62. package/src/api/routes/tests/utilities/TestFunctions.ts +25 -2
  63. package/src/api/routes/tests/utilities/index.ts +5 -3
  64. package/src/api/routes/tests/view.spec.js +4 -1
  65. package/src/api/routes/tests/webhook.spec.js +11 -2
  66. package/src/app.ts +10 -1
  67. package/src/automations/tests/automation.spec.js +4 -4
  68. package/src/automations/tests/bash.spec.js +1 -1
  69. package/src/automations/tests/discord.spec.js +1 -1
  70. package/src/automations/tests/executeQuery.spec.js +2 -3
  71. package/src/automations/tests/executeScript.spec.js +1 -1
  72. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  73. package/src/automations/tests/sendSmtpEmail.spec.js +1 -1
  74. package/src/automations/tests/serverLog.spec.js +1 -1
  75. package/src/automations/tests/updateRow.spec.js +1 -1
  76. package/src/automations/tests/zapier.spec.js +1 -1
  77. package/src/constants/index.ts +1 -23
  78. package/src/db/defaultData/datasource_bb_default.ts +6 -10
  79. package/src/db/linkedRows/LinkController.ts +2 -1
  80. package/src/db/tests/linkController.spec.js +4 -1
  81. package/src/db/tests/linkTests.spec.js +1 -1
  82. package/src/ddApm.ts +7 -0
  83. package/src/elasticApm.ts +10 -0
  84. package/src/integration-test/postgres.spec.ts +752 -0
  85. package/src/integrations/base/sql.ts +15 -5
  86. package/src/integrations/oracle.ts +1 -1
  87. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  88. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  89. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
  90. package/src/migrations/tests/index.spec.ts +13 -20
  91. package/src/sdk/app/backups/exports.ts +8 -2
  92. package/src/sdk/app/datasources/datasources.ts +3 -0
  93. package/src/tests/jestEnv.ts +2 -6
  94. package/src/tests/jestSetup.ts +8 -7
  95. package/src/tests/utilities/TestConfiguration.ts +126 -50
  96. package/src/tests/utilities/structures.ts +16 -2
  97. package/src/utilities/retry.ts +18 -0
  98. package/tsconfig.build.json +1 -0
  99. package/coverage/clover.xml +0 -11755
  100. package/coverage/coverage-final.json +0 -284
  101. package/coverage/lcov-report/base.css +0 -224
  102. package/coverage/lcov-report/block-navigation.js +0 -87
  103. package/coverage/lcov-report/favicon.png +0 -0
  104. package/coverage/lcov-report/index.html +0 -1031
  105. package/coverage/lcov-report/prettify.css +0 -1
  106. package/coverage/lcov-report/prettify.js +0 -2
  107. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  108. package/coverage/lcov-report/sorter.js +0 -196
  109. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +0 -190
  110. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +0 -247
  111. package/coverage/lcov-report/src/api/controllers/application.ts.html +0 -1987
  112. package/coverage/lcov-report/src/api/controllers/auth.ts.html +0 -301
  113. package/coverage/lcov-report/src/api/controllers/automation.ts.html +0 -940
  114. package/coverage/lcov-report/src/api/controllers/backup.ts.html +0 -148
  115. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +0 -442
  116. package/coverage/lcov-report/src/api/controllers/component.ts.html +0 -259
  117. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +0 -1135
  118. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +0 -262
  119. package/coverage/lcov-report/src/api/controllers/deploy/index.html +0 -131
  120. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +0 -694
  121. package/coverage/lcov-report/src/api/controllers/dev.ts.html +0 -472
  122. package/coverage/lcov-report/src/api/controllers/index.html +0 -431
  123. package/coverage/lcov-report/src/api/controllers/integration.ts.html +0 -124
  124. package/coverage/lcov-report/src/api/controllers/layout.ts.html +0 -226
  125. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +0 -211
  126. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +0 -127
  127. package/coverage/lcov-report/src/api/controllers/permission.ts.html +0 -619
  128. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +0 -130
  129. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +0 -310
  130. package/coverage/lcov-report/src/api/controllers/plugin/index.html +0 -206
  131. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +0 -499
  132. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +0 -253
  133. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +0 -97
  134. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +0 -121
  135. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +0 -136
  136. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +0 -385
  137. package/coverage/lcov-report/src/api/controllers/public/index.html +0 -191
  138. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +0 -181
  139. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +0 -191
  140. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +0 -124
  141. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +0 -202
  142. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +0 -178
  143. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +0 -163
  144. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +0 -181
  145. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +0 -145
  146. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +0 -328
  147. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +0 -253
  148. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +0 -325
  149. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +0 -220
  150. package/coverage/lcov-report/src/api/controllers/query/import/index.html +0 -116
  151. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +0 -373
  152. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +0 -131
  153. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +0 -379
  154. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +0 -157
  155. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +0 -403
  156. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +0 -146
  157. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +0 -586
  158. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +0 -712
  159. package/coverage/lcov-report/src/api/controllers/query/index.html +0 -131
  160. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +0 -1000
  161. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +0 -235
  162. package/coverage/lcov-report/src/api/controllers/role.ts.html +0 -397
  163. package/coverage/lcov-report/src/api/controllers/routing.ts.html +0 -370
  164. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +0 -2305
  165. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +0 -931
  166. package/coverage/lcov-report/src/api/controllers/row/index.html +0 -206
  167. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +0 -541
  168. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +0 -1609
  169. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +0 -1678
  170. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +0 -577
  171. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +0 -556
  172. package/coverage/lcov-report/src/api/controllers/screen.ts.html +0 -463
  173. package/coverage/lcov-report/src/api/controllers/script.ts.html +0 -121
  174. package/coverage/lcov-report/src/api/controllers/static/index.html +0 -116
  175. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +0 -679
  176. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +0 -649
  177. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +0 -1153
  178. package/coverage/lcov-report/src/api/controllers/table/index.html +0 -176
  179. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +0 -514
  180. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +0 -658
  181. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +0 -1273
  182. package/coverage/lcov-report/src/api/controllers/templates.ts.html +0 -214
  183. package/coverage/lcov-report/src/api/controllers/user.ts.html +0 -634
  184. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +0 -214
  185. package/coverage/lcov-report/src/api/controllers/view/index.html +0 -161
  186. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +0 -661
  187. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +0 -580
  188. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +0 -694
  189. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +0 -385
  190. package/coverage/lcov-report/src/api/index.html +0 -116
  191. package/coverage/lcov-report/src/api/index.ts.html +0 -352
  192. package/coverage/lcov-report/src/api/routes/analytics.ts.html +0 -112
  193. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +0 -121
  194. package/coverage/lcov-report/src/api/routes/application.ts.html +0 -256
  195. package/coverage/lcov-report/src/api/routes/auth.ts.html +0 -109
  196. package/coverage/lcov-report/src/api/routes/automation.ts.html +0 -346
  197. package/coverage/lcov-report/src/api/routes/backup.ts.html +0 -127
  198. package/coverage/lcov-report/src/api/routes/cloud.ts.html +0 -139
  199. package/coverage/lcov-report/src/api/routes/component.ts.html +0 -127
  200. package/coverage/lcov-report/src/api/routes/datasource.ts.html +0 -265
  201. package/coverage/lcov-report/src/api/routes/deploy.ts.html +0 -145
  202. package/coverage/lcov-report/src/api/routes/dev.ts.html +0 -199
  203. package/coverage/lcov-report/src/api/routes/index.html +0 -551
  204. package/coverage/lcov-report/src/api/routes/index.ts.html +0 -298
  205. package/coverage/lcov-report/src/api/routes/integration.ts.html +0 -133
  206. package/coverage/lcov-report/src/api/routes/layout.ts.html +0 -133
  207. package/coverage/lcov-report/src/api/routes/metadata.ts.html +0 -199
  208. package/coverage/lcov-report/src/api/routes/migrations.ts.html +0 -127
  209. package/coverage/lcov-report/src/api/routes/permission.ts.html +0 -208
  210. package/coverage/lcov-report/src/api/routes/plugin.ts.html +0 -151
  211. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +0 -673
  212. package/coverage/lcov-report/src/api/routes/public/index.html +0 -191
  213. package/coverage/lcov-report/src/api/routes/public/index.ts.html +0 -493
  214. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +0 -116
  215. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +0 -340
  216. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +0 -313
  217. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +0 -598
  218. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +0 -586
  219. package/coverage/lcov-report/src/api/routes/public/tests/index.html +0 -116
  220. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +0 -169
  221. package/coverage/lcov-report/src/api/routes/public/users.ts.html +0 -511
  222. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +0 -238
  223. package/coverage/lcov-report/src/api/routes/public/utils/index.html +0 -116
  224. package/coverage/lcov-report/src/api/routes/query.ts.html +0 -268
  225. package/coverage/lcov-report/src/api/routes/role.ts.html +0 -157
  226. package/coverage/lcov-report/src/api/routes/routing.ts.html +0 -127
  227. package/coverage/lcov-report/src/api/routes/row.ts.html +0 -883
  228. package/coverage/lcov-report/src/api/routes/screen.ts.html +0 -154
  229. package/coverage/lcov-report/src/api/routes/script.ts.html +0 -115
  230. package/coverage/lcov-report/src/api/routes/static.ts.html +0 -280
  231. package/coverage/lcov-report/src/api/routes/table.ts.html +0 -595
  232. package/coverage/lcov-report/src/api/routes/templates.ts.html +0 -133
  233. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +0 -550
  234. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +0 -131
  235. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +0 -367
  236. package/coverage/lcov-report/src/api/routes/user.ts.html +0 -238
  237. package/coverage/lcov-report/src/api/routes/utils/index.html +0 -116
  238. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +0 -805
  239. package/coverage/lcov-report/src/api/routes/view.ts.html +0 -187
  240. package/coverage/lcov-report/src/api/routes/webhook.ts.html +0 -166
  241. package/coverage/lcov-report/src/app.ts.html +0 -424
  242. package/coverage/lcov-report/src/automations/actions.ts.html +0 -316
  243. package/coverage/lcov-report/src/automations/automationUtils.ts.html +0 -562
  244. package/coverage/lcov-report/src/automations/bullboard.ts.html +0 -199
  245. package/coverage/lcov-report/src/automations/index.html +0 -191
  246. package/coverage/lcov-report/src/automations/index.ts.html +0 -163
  247. package/coverage/lcov-report/src/automations/logging/index.html +0 -116
  248. package/coverage/lcov-report/src/automations/logging/index.ts.html +0 -199
  249. package/coverage/lcov-report/src/automations/steps/bash.ts.html +0 -319
  250. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +0 -382
  251. package/coverage/lcov-report/src/automations/steps/delay.ts.html +0 -217
  252. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +0 -349
  253. package/coverage/lcov-report/src/automations/steps/discord.ts.html +0 -349
  254. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +0 -370
  255. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +0 -325
  256. package/coverage/lcov-report/src/automations/steps/filter.ts.html +0 -394
  257. package/coverage/lcov-report/src/automations/steps/index.html +0 -371
  258. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +0 -361
  259. package/coverage/lcov-report/src/automations/steps/loop.ts.html +0 -241
  260. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +0 -499
  261. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +0 -664
  262. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +0 -355
  263. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +0 -256
  264. package/coverage/lcov-report/src/automations/steps/slack.ts.html +0 -292
  265. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +0 -439
  266. package/coverage/lcov-report/src/automations/steps/utils.ts.html +0 -223
  267. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +0 -355
  268. package/coverage/lcov-report/src/automations/tests/utilities/index.html +0 -116
  269. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +0 -265
  270. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +0 -196
  271. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +0 -193
  272. package/coverage/lcov-report/src/automations/triggerInfo/index.html +0 -206
  273. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +0 -130
  274. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +0 -196
  275. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +0 -220
  276. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +0 -220
  277. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +0 -208
  278. package/coverage/lcov-report/src/automations/triggers.ts.html +0 -553
  279. package/coverage/lcov-report/src/automations/utils.ts.html +0 -886
  280. package/coverage/lcov-report/src/constants/index.html +0 -146
  281. package/coverage/lcov-report/src/constants/index.ts.html +0 -697
  282. package/coverage/lcov-report/src/constants/layouts.ts.html +0 -526
  283. package/coverage/lcov-report/src/constants/screens.ts.html +0 -229
  284. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +0 -2059
  285. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +0 -541
  286. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +0 -427
  287. package/coverage/lcov-report/src/db/defaultData/index.html +0 -176
  288. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +0 -403
  289. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +0 -559
  290. package/coverage/lcov-report/src/db/dynamoClient.ts.html +0 -526
  291. package/coverage/lcov-report/src/db/inMemoryView.ts.html +0 -250
  292. package/coverage/lcov-report/src/db/index.html +0 -176
  293. package/coverage/lcov-report/src/db/index.ts.html +0 -133
  294. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +0 -1417
  295. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +0 -265
  296. package/coverage/lcov-report/src/db/linkedRows/index.html +0 -161
  297. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +0 -736
  298. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +0 -460
  299. package/coverage/lcov-report/src/db/newid.ts.html +0 -100
  300. package/coverage/lcov-report/src/db/utils.ts.html +0 -913
  301. package/coverage/lcov-report/src/definitions/automations.ts.html +0 -184
  302. package/coverage/lcov-report/src/definitions/index.html +0 -116
  303. package/coverage/lcov-report/src/environment.ts.html +0 -472
  304. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +0 -259
  305. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +0 -172
  306. package/coverage/lcov-report/src/events/index.html +0 -161
  307. package/coverage/lcov-report/src/events/index.ts.html +0 -100
  308. package/coverage/lcov-report/src/events/utils.ts.html +0 -319
  309. package/coverage/lcov-report/src/index.html +0 -191
  310. package/coverage/lcov-report/src/index.ts.html +0 -133
  311. package/coverage/lcov-report/src/integrations/airtable.ts.html +0 -529
  312. package/coverage/lcov-report/src/integrations/arangodb.ts.html +0 -415
  313. package/coverage/lcov-report/src/integrations/base/index.html +0 -161
  314. package/coverage/lcov-report/src/integrations/base/query.ts.html +0 -139
  315. package/coverage/lcov-report/src/integrations/base/sql.ts.html +0 -2017
  316. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +0 -691
  317. package/coverage/lcov-report/src/integrations/base/utils.ts.html +0 -121
  318. package/coverage/lcov-report/src/integrations/couchdb.ts.html +0 -484
  319. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +0 -745
  320. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +0 -646
  321. package/coverage/lcov-report/src/integrations/firebase.ts.html +0 -646
  322. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +0 -1315
  323. package/coverage/lcov-report/src/integrations/index.html +0 -371
  324. package/coverage/lcov-report/src/integrations/index.ts.html +0 -460
  325. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +0 -1012
  326. package/coverage/lcov-report/src/integrations/mongodb.ts.html +0 -1999
  327. package/coverage/lcov-report/src/integrations/mysql.ts.html +0 -979
  328. package/coverage/lcov-report/src/integrations/oracle.ts.html +0 -1387
  329. package/coverage/lcov-report/src/integrations/postgres.ts.html +0 -1087
  330. package/coverage/lcov-report/src/integrations/queries/index.html +0 -116
  331. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +0 -328
  332. package/coverage/lcov-report/src/integrations/redis.ts.html +0 -550
  333. package/coverage/lcov-report/src/integrations/rest.ts.html +0 -1372
  334. package/coverage/lcov-report/src/integrations/s3.ts.html +0 -862
  335. package/coverage/lcov-report/src/integrations/snowflake.ts.html +0 -376
  336. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +0 -85
  337. package/coverage/lcov-report/src/integrations/tests/index.html +0 -116
  338. package/coverage/lcov-report/src/integrations/utils.ts.html +0 -1036
  339. package/coverage/lcov-report/src/middleware/appInfo.ts.html +0 -145
  340. package/coverage/lcov-report/src/middleware/authorized.ts.html +0 -472
  341. package/coverage/lcov-report/src/middleware/builder.ts.html +0 -361
  342. package/coverage/lcov-report/src/middleware/currentapp.ts.html +0 -508
  343. package/coverage/lcov-report/src/middleware/index.html +0 -236
  344. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +0 -205
  345. package/coverage/lcov-report/src/middleware/publicApi.ts.html +0 -148
  346. package/coverage/lcov-report/src/middleware/resourceId.ts.html +0 -283
  347. package/coverage/lcov-report/src/middleware/selfhost.ts.html +0 -121
  348. package/coverage/lcov-report/src/middleware/utils.ts.html +0 -112
  349. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +0 -166
  350. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +0 -163
  351. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +0 -151
  352. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +0 -206
  353. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +0 -172
  354. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +0 -226
  355. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +0 -151
  356. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +0 -151
  357. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +0 -166
  358. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +0 -532
  359. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +0 -286
  360. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +0 -146
  361. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +0 -265
  362. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +0 -232
  363. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +0 -724
  364. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +0 -161
  365. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +0 -106
  366. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +0 -235
  367. package/coverage/lcov-report/src/migrations/functions/index.html +0 -161
  368. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +0 -130
  369. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +0 -520
  370. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +0 -161
  371. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +0 -94
  372. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +0 -127
  373. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +0 -115
  374. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +0 -169
  375. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +0 -124
  376. package/coverage/lcov-report/src/migrations/index.html +0 -116
  377. package/coverage/lcov-report/src/migrations/index.ts.html +0 -430
  378. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +0 -205
  379. package/coverage/lcov-report/src/migrations/tests/index.html +0 -131
  380. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +0 -283
  381. package/coverage/lcov-report/src/sdk/app/applications/index.html +0 -146
  382. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +0 -106
  383. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +0 -268
  384. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +0 -136
  385. package/coverage/lcov-report/src/sdk/app/automations/index.html +0 -131
  386. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +0 -100
  387. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +0 -214
  388. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +0 -91
  389. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +0 -604
  390. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +0 -640
  391. package/coverage/lcov-report/src/sdk/app/backups/index.html +0 -176
  392. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +0 -112
  393. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +0 -292
  394. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +0 -562
  395. package/coverage/lcov-report/src/sdk/app/datasources/index.html +0 -131
  396. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +0 -100
  397. package/coverage/lcov-report/src/sdk/app/queries/index.html +0 -131
  398. package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +0 -100
  399. package/coverage/lcov-report/src/sdk/app/queries/queries.ts.html +0 -235
  400. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +0 -265
  401. package/coverage/lcov-report/src/sdk/app/rows/index.html +0 -146
  402. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +0 -106
  403. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +0 -139
  404. package/coverage/lcov-report/src/sdk/app/tables/index.html +0 -116
  405. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +0 -274
  406. package/coverage/lcov-report/src/sdk/index.html +0 -116
  407. package/coverage/lcov-report/src/sdk/index.ts.html +0 -151
  408. package/coverage/lcov-report/src/sdk/users/index.html +0 -131
  409. package/coverage/lcov-report/src/sdk/users/index.ts.html +0 -100
  410. package/coverage/lcov-report/src/sdk/users/utils.ts.html +0 -277
  411. package/coverage/lcov-report/src/sdk/utils/index.html +0 -116
  412. package/coverage/lcov-report/src/sdk/utils/index.ts.html +0 -133
  413. package/coverage/lcov-report/src/startup.ts.html +0 -484
  414. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +0 -2032
  415. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +0 -127
  416. package/coverage/lcov-report/src/tests/utilities/index.html +0 -161
  417. package/coverage/lcov-report/src/tests/utilities/index.ts.html +0 -118
  418. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +0 -856
  419. package/coverage/lcov-report/src/threads/automation.ts.html +0 -1555
  420. package/coverage/lcov-report/src/threads/index.html +0 -161
  421. package/coverage/lcov-report/src/threads/index.ts.html +0 -418
  422. package/coverage/lcov-report/src/threads/query.ts.html +0 -1000
  423. package/coverage/lcov-report/src/threads/utils.ts.html +0 -373
  424. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +0 -94
  425. package/coverage/lcov-report/src/utilities/centralPath.ts.html +0 -151
  426. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +0 -343
  427. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +0 -547
  428. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +0 -601
  429. package/coverage/lcov-report/src/utilities/fileSystem/index.html +0 -206
  430. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +0 -100
  431. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +0 -277
  432. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +0 -142
  433. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +0 -193
  434. package/coverage/lcov-report/src/utilities/global.ts.html +0 -499
  435. package/coverage/lcov-report/src/utilities/index.html +0 -251
  436. package/coverage/lcov-report/src/utilities/index.ts.html +0 -487
  437. package/coverage/lcov-report/src/utilities/redis.ts.html +0 -343
  438. package/coverage/lcov-report/src/utilities/routing/index.html +0 -116
  439. package/coverage/lcov-report/src/utilities/routing/index.ts.html +0 -181
  440. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +0 -146
  441. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +0 -922
  442. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +0 -373
  443. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +0 -373
  444. package/coverage/lcov-report/src/utilities/schema.ts.html +0 -508
  445. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +0 -169
  446. package/coverage/lcov-report/src/utilities/security.ts.html +0 -280
  447. package/coverage/lcov-report/src/utilities/usageQuota/index.html +0 -131
  448. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +0 -325
  449. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +0 -139
  450. package/coverage/lcov-report/src/utilities/users.ts.html +0 -232
  451. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +0 -646
  452. package/coverage/lcov-report/src/watch.ts.html +0 -196
  453. package/coverage/lcov-report/src/websocket.ts.html +0 -163
  454. package/coverage/lcov.info +0 -21750
  455. package/dist/api/routes/public/tests/utils.js +0 -33
@@ -1,1678 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/api/controllers/row/internalSearch.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../../../prettify.css" />
9
- <link rel="stylesheet" href="../../../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../../../index.html">All files</a> / <a href="index.html">src/api/controllers/row</a> internalSearch.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">78.77% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>167/212</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">77.41% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>72/93</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">68.18% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>30/44</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">78.26% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>162/207</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line medium'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a>
507
- <a name='L442'></a><a href='#L442'>442</a>
508
- <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a>
510
- <a name='L445'></a><a href='#L445'>445</a>
511
- <a name='L446'></a><a href='#L446'>446</a>
512
- <a name='L447'></a><a href='#L447'>447</a>
513
- <a name='L448'></a><a href='#L448'>448</a>
514
- <a name='L449'></a><a href='#L449'>449</a>
515
- <a name='L450'></a><a href='#L450'>450</a>
516
- <a name='L451'></a><a href='#L451'>451</a>
517
- <a name='L452'></a><a href='#L452'>452</a>
518
- <a name='L453'></a><a href='#L453'>453</a>
519
- <a name='L454'></a><a href='#L454'>454</a>
520
- <a name='L455'></a><a href='#L455'>455</a>
521
- <a name='L456'></a><a href='#L456'>456</a>
522
- <a name='L457'></a><a href='#L457'>457</a>
523
- <a name='L458'></a><a href='#L458'>458</a>
524
- <a name='L459'></a><a href='#L459'>459</a>
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>
569
- <a name='L504'></a><a href='#L504'>504</a>
570
- <a name='L505'></a><a href='#L505'>505</a>
571
- <a name='L506'></a><a href='#L506'>506</a>
572
- <a name='L507'></a><a href='#L507'>507</a>
573
- <a name='L508'></a><a href='#L508'>508</a>
574
- <a name='L509'></a><a href='#L509'>509</a>
575
- <a name='L510'></a><a href='#L510'>510</a>
576
- <a name='L511'></a><a href='#L511'>511</a>
577
- <a name='L512'></a><a href='#L512'>512</a>
578
- <a name='L513'></a><a href='#L513'>513</a>
579
- <a name='L514'></a><a href='#L514'>514</a>
580
- <a name='L515'></a><a href='#L515'>515</a>
581
- <a name='L516'></a><a href='#L516'>516</a>
582
- <a name='L517'></a><a href='#L517'>517</a>
583
- <a name='L518'></a><a href='#L518'>518</a>
584
- <a name='L519'></a><a href='#L519'>519</a>
585
- <a name='L520'></a><a href='#L520'>520</a>
586
- <a name='L521'></a><a href='#L521'>521</a>
587
- <a name='L522'></a><a href='#L522'>522</a>
588
- <a name='L523'></a><a href='#L523'>523</a>
589
- <a name='L524'></a><a href='#L524'>524</a>
590
- <a name='L525'></a><a href='#L525'>525</a>
591
- <a name='L526'></a><a href='#L526'>526</a>
592
- <a name='L527'></a><a href='#L527'>527</a>
593
- <a name='L528'></a><a href='#L528'>528</a>
594
- <a name='L529'></a><a href='#L529'>529</a>
595
- <a name='L530'></a><a href='#L530'>530</a>
596
- <a name='L531'></a><a href='#L531'>531</a>
597
- <a name='L532'></a><a href='#L532'>532</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">56x</span>
598
- <span class="cline-any cline-yes">56x</span>
599
- <span class="cline-any cline-yes">56x</span>
600
- <span class="cline-any cline-yes">56x</span>
601
- <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-neutral">&nbsp;</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-neutral">&nbsp;</span>
614
- <span class="cline-any cline-neutral">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-neutral">&nbsp;</span>
618
- <span class="cline-any cline-no">&nbsp;</span>
619
- <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-neutral">&nbsp;</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-neutral">&nbsp;</span>
624
- <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-yes">19x</span>
630
- <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-neutral">&nbsp;</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-yes">19x</span>
645
- <span class="cline-any cline-yes">19x</span>
646
- <span class="cline-any cline-yes">19x</span>
647
- <span class="cline-any cline-yes">19x</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-neutral">&nbsp;</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-yes">19x</span>
652
- <span class="cline-any cline-yes">17x</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-yes">19x</span>
655
- <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-yes">35x</span>
659
- <span class="cline-any cline-yes">35x</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-yes">35x</span>
664
- <span class="cline-any cline-yes">35x</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-yes">35x</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-yes">19x</span>
671
- <span class="cline-any cline-yes">1x</span>
672
- <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-yes">19x</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-yes">19x</span>
678
- <span class="cline-any cline-yes">18x</span>
679
- <span class="cline-any cline-neutral">&nbsp;</span>
680
- <span class="cline-any cline-yes">19x</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-yes">19x</span>
685
- <span class="cline-any cline-yes">18x</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-yes">19x</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-yes">35x</span>
692
- <span class="cline-any cline-yes">17x</span>
693
- <span class="cline-any cline-neutral">&nbsp;</span>
694
- <span class="cline-any cline-yes">35x</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-no">&nbsp;</span>
699
- <span class="cline-any cline-no">&nbsp;</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-no">&nbsp;</span>
704
- <span class="cline-any cline-no">&nbsp;</span>
705
- <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-no">&nbsp;</span>
709
- <span class="cline-any cline-no">&nbsp;</span>
710
- <span class="cline-any cline-neutral">&nbsp;</span>
711
- <span class="cline-any cline-neutral">&nbsp;</span>
712
- <span class="cline-any cline-neutral">&nbsp;</span>
713
- <span class="cline-any cline-no">&nbsp;</span>
714
- <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-neutral">&nbsp;</span>
717
- <span class="cline-any cline-no">&nbsp;</span>
718
- <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-no">&nbsp;</span>
722
- <span class="cline-any cline-no">&nbsp;</span>
723
- <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-neutral">&nbsp;</span>
726
- <span class="cline-any cline-no">&nbsp;</span>
727
- <span class="cline-any cline-no">&nbsp;</span>
728
- <span class="cline-any cline-neutral">&nbsp;</span>
729
- <span class="cline-any cline-neutral">&nbsp;</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-no">&nbsp;</span>
732
- <span class="cline-any cline-no">&nbsp;</span>
733
- <span class="cline-any cline-neutral">&nbsp;</span>
734
- <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-no">&nbsp;</span>
737
- <span class="cline-any cline-no">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-neutral">&nbsp;</span>
741
- <span class="cline-any cline-no">&nbsp;</span>
742
- <span class="cline-any cline-no">&nbsp;</span>
743
- <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-no">&nbsp;</span>
747
- <span class="cline-any cline-no">&nbsp;</span>
748
- <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-neutral">&nbsp;</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-no">&nbsp;</span>
752
- <span class="cline-any cline-no">&nbsp;</span>
753
- <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-neutral">&nbsp;</span>
756
- <span class="cline-any cline-no">&nbsp;</span>
757
- <span class="cline-any cline-no">&nbsp;</span>
758
- <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-neutral">&nbsp;</span>
760
- <span class="cline-any cline-neutral">&nbsp;</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
767
- <span class="cline-any cline-neutral">&nbsp;</span>
768
- <span class="cline-any cline-yes">160x</span>
769
- <span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-yes">160x</span>
771
- <span class="cline-any cline-neutral">&nbsp;</span>
772
- <span class="cline-any cline-yes">160x</span>
773
- <span class="cline-any cline-yes">67x</span>
774
- <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-neutral">&nbsp;</span>
776
- <span class="cline-any cline-yes">160x</span>
777
- <span class="cline-any cline-yes">150x</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-yes">160x</span>
782
- <span class="cline-any cline-yes">14x</span>
783
- <span class="cline-any cline-yes">146x</span>
784
- <span class="cline-any cline-yes">48x</span>
785
- <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-yes">160x</span>
787
- <span class="cline-any cline-neutral">&nbsp;</span>
788
- <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-yes">35x</span>
791
- <span class="cline-any cline-yes">35x</span>
792
- <span class="cline-any cline-yes">35x</span>
793
- <span class="cline-any cline-yes">35x</span>
794
- <span class="cline-any cline-neutral">&nbsp;</span>
795
- <span class="cline-any cline-yes">35x</span>
796
- <span class="cline-any cline-yes">35x</span>
797
- <span class="cline-any cline-yes">35x</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-yes">35x</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-yes">51x</span>
803
- <span class="cline-any cline-no">&nbsp;</span>
804
- <span class="cline-any cline-neutral">&nbsp;</span>
805
- <span class="cline-any cline-yes">51x</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-yes">35x</span>
809
- <span class="cline-any cline-yes">8x</span>
810
- <span class="cline-any cline-no">&nbsp;</span>
811
- <span class="cline-any cline-neutral">&nbsp;</span>
812
- <span class="cline-any cline-yes">8x</span>
813
- <span class="cline-any cline-yes">2x</span>
814
- <span class="cline-any cline-neutral">&nbsp;</span>
815
- <span class="cline-any cline-yes">6x</span>
816
- <span class="cline-any cline-yes">6x</span>
817
- <span class="cline-any cline-yes">12x</span>
818
- <span class="cline-any cline-neutral">&nbsp;</span>
819
- <span class="cline-any cline-neutral">&nbsp;</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-yes">6x</span>
822
- <span class="cline-any cline-neutral">&nbsp;</span>
823
- <span class="cline-any cline-neutral">&nbsp;</span>
824
- <span class="cline-any cline-yes">35x</span>
825
- <span class="cline-any cline-neutral">&nbsp;</span>
826
- <span class="cline-any cline-yes">2x</span>
827
- <span class="cline-any cline-yes">2x</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-neutral">&nbsp;</span>
830
- <span class="cline-any cline-yes">35x</span>
831
- <span class="cline-any cline-yes">2x</span>
832
- <span class="cline-any cline-neutral">&nbsp;</span>
833
- <span class="cline-any cline-neutral">&nbsp;</span>
834
- <span class="cline-any cline-yes">35x</span>
835
- <span class="cline-any cline-yes">2x</span>
836
- <span class="cline-any cline-no">&nbsp;</span>
837
- <span class="cline-any cline-no">&nbsp;</span>
838
- <span class="cline-any cline-neutral">&nbsp;</span>
839
- <span class="cline-any cline-no">&nbsp;</span>
840
- <span class="cline-any cline-neutral">&nbsp;</span>
841
- <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-yes">2x</span>
843
- <span class="cline-any cline-yes">2x</span>
844
- <span class="cline-any cline-yes">2x</span>
845
- <span class="cline-any cline-neutral">&nbsp;</span>
846
- <span class="cline-any cline-neutral">&nbsp;</span>
847
- <span class="cline-any cline-neutral">&nbsp;</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-yes">2x</span>
850
- <span class="cline-any cline-neutral">&nbsp;</span>
851
- <span class="cline-any cline-neutral">&nbsp;</span>
852
- <span class="cline-any cline-neutral">&nbsp;</span>
853
- <span class="cline-any cline-yes">420x</span>
854
- <span class="cline-any cline-neutral">&nbsp;</span>
855
- <span class="cline-any cline-yes">75x</span>
856
- <span class="cline-any cline-yes">75x</span>
857
- <span class="cline-any cline-neutral">&nbsp;</span>
858
- <span class="cline-any cline-neutral">&nbsp;</span>
859
- <span class="cline-any cline-yes">75x</span>
860
- <span class="cline-any cline-yes">75x</span>
861
- <span class="cline-any cline-no">&nbsp;</span>
862
- <span class="cline-any cline-neutral">&nbsp;</span>
863
- <span class="cline-any cline-yes">75x</span>
864
- <span class="cline-any cline-yes">71x</span>
865
- <span class="cline-any cline-neutral">&nbsp;</span>
866
- <span class="cline-any cline-yes">75x</span>
867
- <span class="cline-any cline-neutral">&nbsp;</span>
868
- <span class="cline-any cline-neutral">&nbsp;</span>
869
- <span class="cline-any cline-neutral">&nbsp;</span>
870
- <span class="cline-any cline-neutral">&nbsp;</span>
871
- <span class="cline-any cline-yes">35x</span>
872
- <span class="cline-any cline-yes">35x</span>
873
- <span class="cline-any cline-yes">2x</span>
874
- <span class="cline-any cline-no">&nbsp;</span>
875
- <span class="cline-any cline-neutral">&nbsp;</span>
876
- <span class="cline-any cline-yes">2x</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-neutral">&nbsp;</span>
879
- <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-neutral">&nbsp;</span>
881
- <span class="cline-any cline-yes">2x</span>
882
- <span class="cline-any cline-neutral">&nbsp;</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-yes">35x</span>
885
- <span class="cline-any cline-yes">35x</span>
886
- <span class="cline-any cline-yes">2x</span>
887
- <span class="cline-any cline-no">&nbsp;</span>
888
- <span class="cline-any cline-neutral">&nbsp;</span>
889
- <span class="cline-any cline-yes">2x</span>
890
- <span class="cline-any cline-no">&nbsp;</span>
891
- <span class="cline-any cline-neutral">&nbsp;</span>
892
- <span class="cline-any cline-yes">2x</span>
893
- <span class="cline-any cline-no">&nbsp;</span>
894
- <span class="cline-any cline-neutral">&nbsp;</span>
895
- <span class="cline-any cline-yes">2x</span>
896
- <span class="cline-any cline-yes">2x</span>
897
- <span class="cline-any cline-yes">2x</span>
898
- <span class="cline-any cline-neutral">&nbsp;</span>
899
- <span class="cline-any cline-neutral">&nbsp;</span>
900
- <span class="cline-any cline-yes">35x</span>
901
- <span class="cline-any cline-yes">35x</span>
902
- <span class="cline-any cline-no">&nbsp;</span>
903
- <span class="cline-any cline-no">&nbsp;</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-no">&nbsp;</span>
906
- <span class="cline-any cline-neutral">&nbsp;</span>
907
- <span class="cline-any cline-neutral">&nbsp;</span>
908
- <span class="cline-any cline-neutral">&nbsp;</span>
909
- <span class="cline-any cline-neutral">&nbsp;</span>
910
- <span class="cline-any cline-no">&nbsp;</span>
911
- <span class="cline-any cline-neutral">&nbsp;</span>
912
- <span class="cline-any cline-neutral">&nbsp;</span>
913
- <span class="cline-any cline-yes">35x</span>
914
- <span class="cline-any cline-yes">35x</span>
915
- <span class="cline-any cline-neutral">&nbsp;</span>
916
- <span class="cline-any cline-yes">35x</span>
917
- <span class="cline-any cline-yes">35x</span>
918
- <span class="cline-any cline-yes">6x</span>
919
- <span class="cline-any cline-no">&nbsp;</span>
920
- <span class="cline-any cline-neutral">&nbsp;</span>
921
- <span class="cline-any cline-yes">6x</span>
922
- <span class="cline-any cline-neutral">&nbsp;</span>
923
- <span class="cline-any cline-neutral">&nbsp;</span>
924
- <span class="cline-any cline-yes">35x</span>
925
- <span class="cline-any cline-yes">35x</span>
926
- <span class="cline-any cline-neutral">&nbsp;</span>
927
- <span class="cline-any cline-yes">35x</span>
928
- <span class="cline-any cline-yes">35x</span>
929
- <span class="cline-any cline-neutral">&nbsp;</span>
930
- <span class="cline-any cline-yes">35x</span>
931
- <span class="cline-any cline-yes">35x</span>
932
- <span class="cline-any cline-neutral">&nbsp;</span>
933
- <span class="cline-any cline-yes">35x</span>
934
- <span class="cline-any cline-yes">35x</span>
935
- <span class="cline-any cline-neutral">&nbsp;</span>
936
- <span class="cline-any cline-yes">35x</span>
937
- <span class="cline-any cline-yes">35x</span>
938
- <span class="cline-any cline-neutral">&nbsp;</span>
939
- <span class="cline-any cline-yes">35x</span>
940
- <span class="cline-any cline-yes">35x</span>
941
- <span class="cline-any cline-neutral">&nbsp;</span>
942
- <span class="cline-any cline-neutral">&nbsp;</span>
943
- <span class="cline-any cline-yes">35x</span>
944
- <span class="cline-any cline-yes">35x</span>
945
- <span class="cline-any cline-yes">35x</span>
946
- <span class="cline-any cline-yes">35x</span>
947
- <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-yes">35x</span>
949
- <span class="cline-any cline-neutral">&nbsp;</span>
950
- <span class="cline-any cline-neutral">&nbsp;</span>
951
- <span class="cline-any cline-neutral">&nbsp;</span>
952
- <span class="cline-any cline-yes">35x</span>
953
- <span class="cline-any cline-neutral">&nbsp;</span>
954
- <span class="cline-any cline-neutral">&nbsp;</span>
955
- <span class="cline-any cline-neutral">&nbsp;</span>
956
- <span class="cline-any cline-neutral">&nbsp;</span>
957
- <span class="cline-any cline-yes">35x</span>
958
- <span class="cline-any cline-yes">17x</span>
959
- <span class="cline-any cline-neutral">&nbsp;</span>
960
- <span class="cline-any cline-yes">35x</span>
961
- <span class="cline-any cline-yes">2x</span>
962
- <span class="cline-any cline-yes">2x</span>
963
- <span class="cline-any cline-yes">2x</span>
964
- <span class="cline-any cline-neutral">&nbsp;</span>
965
- <span class="cline-any cline-yes">35x</span>
966
- <span class="cline-any cline-neutral">&nbsp;</span>
967
- <span class="cline-any cline-neutral">&nbsp;</span>
968
- <span class="cline-any cline-neutral">&nbsp;</span>
969
- <span class="cline-any cline-yes">35x</span>
970
- <span class="cline-any cline-yes">35x</span>
971
- <span class="cline-any cline-yes">35x</span>
972
- <span class="cline-any cline-yes">35x</span>
973
- <span class="cline-any cline-yes">35x</span>
974
- <span class="cline-any cline-neutral">&nbsp;</span>
975
- <span class="cline-any cline-neutral">&nbsp;</span>
976
- <span class="cline-any cline-neutral">&nbsp;</span>
977
- <span class="cline-any cline-neutral">&nbsp;</span>
978
- <span class="cline-any cline-neutral">&nbsp;</span>
979
- <span class="cline-any cline-neutral">&nbsp;</span>
980
- <span class="cline-any cline-neutral">&nbsp;</span>
981
- <span class="cline-any cline-neutral">&nbsp;</span>
982
- <span class="cline-any cline-neutral">&nbsp;</span>
983
- <span class="cline-any cline-neutral">&nbsp;</span>
984
- <span class="cline-any cline-yes">56x</span>
985
- <span class="cline-any cline-yes">35x</span>
986
- <span class="cline-any cline-neutral">&nbsp;</span>
987
- <span class="cline-any cline-neutral">&nbsp;</span>
988
- <span class="cline-any cline-neutral">&nbsp;</span>
989
- <span class="cline-any cline-neutral">&nbsp;</span>
990
- <span class="cline-any cline-neutral">&nbsp;</span>
991
- <span class="cline-any cline-neutral">&nbsp;</span>
992
- <span class="cline-any cline-yes">35x</span>
993
- <span class="cline-any cline-neutral">&nbsp;</span>
994
- <span class="cline-any cline-yes">35x</span>
995
- <span class="cline-any cline-neutral">&nbsp;</span>
996
- <span class="cline-any cline-neutral">&nbsp;</span>
997
- <span class="cline-any cline-yes">35x</span>
998
- <span class="cline-any cline-yes">35x</span>
999
- <span class="cline-any cline-neutral">&nbsp;</span>
1000
- <span class="cline-any cline-yes">35x</span>
1001
- <span class="cline-any cline-yes">35x</span>
1002
- <span class="cline-any cline-neutral">&nbsp;</span>
1003
- <span class="cline-any cline-yes">35x</span>
1004
- <span class="cline-any cline-neutral">&nbsp;</span>
1005
- <span class="cline-any cline-neutral">&nbsp;</span>
1006
- <span class="cline-any cline-neutral">&nbsp;</span>
1007
- <span class="cline-any cline-neutral">&nbsp;</span>
1008
- <span class="cline-any cline-neutral">&nbsp;</span>
1009
- <span class="cline-any cline-neutral">&nbsp;</span>
1010
- <span class="cline-any cline-neutral">&nbsp;</span>
1011
- <span class="cline-any cline-neutral">&nbsp;</span>
1012
- <span class="cline-any cline-neutral">&nbsp;</span>
1013
- <span class="cline-any cline-neutral">&nbsp;</span>
1014
- <span class="cline-any cline-neutral">&nbsp;</span>
1015
- <span class="cline-any cline-neutral">&nbsp;</span>
1016
- <span class="cline-any cline-neutral">&nbsp;</span>
1017
- <span class="cline-any cline-neutral">&nbsp;</span>
1018
- <span class="cline-any cline-neutral">&nbsp;</span>
1019
- <span class="cline-any cline-neutral">&nbsp;</span>
1020
- <span class="cline-any cline-neutral">&nbsp;</span>
1021
- <span class="cline-any cline-neutral">&nbsp;</span>
1022
- <span class="cline-any cline-neutral">&nbsp;</span>
1023
- <span class="cline-any cline-yes">3x</span>
1024
- <span class="cline-any cline-yes">3x</span>
1025
- <span class="cline-any cline-yes">3x</span>
1026
- <span class="cline-any cline-no">&nbsp;</span>
1027
- <span class="cline-any cline-neutral">&nbsp;</span>
1028
- <span class="cline-any cline-yes">3x</span>
1029
- <span class="cline-any cline-yes">3x</span>
1030
- <span class="cline-any cline-no">&nbsp;</span>
1031
- <span class="cline-any cline-neutral">&nbsp;</span>
1032
- <span class="cline-any cline-yes">3x</span>
1033
- <span class="cline-any cline-neutral">&nbsp;</span>
1034
- <span class="cline-any cline-neutral">&nbsp;</span>
1035
- <span class="cline-any cline-neutral">&nbsp;</span>
1036
- <span class="cline-any cline-neutral">&nbsp;</span>
1037
- <span class="cline-any cline-neutral">&nbsp;</span>
1038
- <span class="cline-any cline-neutral">&nbsp;</span>
1039
- <span class="cline-any cline-neutral">&nbsp;</span>
1040
- <span class="cline-any cline-neutral">&nbsp;</span>
1041
- <span class="cline-any cline-yes">3x</span>
1042
- <span class="cline-any cline-no">&nbsp;</span>
1043
- <span class="cline-any cline-neutral">&nbsp;</span>
1044
- <span class="cline-any cline-yes">3x</span>
1045
- <span class="cline-any cline-yes">3x</span>
1046
- <span class="cline-any cline-neutral">&nbsp;</span>
1047
- <span class="cline-any cline-no">&nbsp;</span>
1048
- <span class="cline-any cline-neutral">&nbsp;</span>
1049
- <span class="cline-any cline-neutral">&nbsp;</span>
1050
- <span class="cline-any cline-neutral">&nbsp;</span>
1051
- <span class="cline-any cline-neutral">&nbsp;</span>
1052
- <span class="cline-any cline-no">&nbsp;</span>
1053
- <span class="cline-any cline-neutral">&nbsp;</span>
1054
- <span class="cline-any cline-neutral">&nbsp;</span>
1055
- <span class="cline-any cline-neutral">&nbsp;</span>
1056
- <span class="cline-any cline-neutral">&nbsp;</span>
1057
- <span class="cline-any cline-neutral">&nbsp;</span>
1058
- <span class="cline-any cline-neutral">&nbsp;</span>
1059
- <span class="cline-any cline-neutral">&nbsp;</span>
1060
- <span class="cline-any cline-neutral">&nbsp;</span>
1061
- <span class="cline-any cline-neutral">&nbsp;</span>
1062
- <span class="cline-any cline-neutral">&nbsp;</span>
1063
- <span class="cline-any cline-neutral">&nbsp;</span>
1064
- <span class="cline-any cline-neutral">&nbsp;</span>
1065
- <span class="cline-any cline-neutral">&nbsp;</span>
1066
- <span class="cline-any cline-neutral">&nbsp;</span>
1067
- <span class="cline-any cline-neutral">&nbsp;</span>
1068
- <span class="cline-any cline-neutral">&nbsp;</span>
1069
- <span class="cline-any cline-neutral">&nbsp;</span>
1070
- <span class="cline-any cline-yes">16x</span>
1071
- <span class="cline-any cline-neutral">&nbsp;</span>
1072
- <span class="cline-any cline-neutral">&nbsp;</span>
1073
- <span class="cline-any cline-neutral">&nbsp;</span>
1074
- <span class="cline-any cline-yes">16x</span>
1075
- <span class="cline-any cline-yes">16x</span>
1076
- <span class="cline-any cline-yes">15x</span>
1077
- <span class="cline-any cline-neutral">&nbsp;</span>
1078
- <span class="cline-any cline-yes">16x</span>
1079
- <span class="cline-any cline-yes">16x</span>
1080
- <span class="cline-any cline-neutral">&nbsp;</span>
1081
- <span class="cline-any cline-neutral">&nbsp;</span>
1082
- <span class="cline-any cline-neutral">&nbsp;</span>
1083
- <span class="cline-any cline-neutral">&nbsp;</span>
1084
- <span class="cline-any cline-neutral">&nbsp;</span>
1085
- <span class="cline-any cline-yes">16x</span>
1086
- <span class="cline-any cline-neutral">&nbsp;</span>
1087
- <span class="cline-any cline-neutral">&nbsp;</span>
1088
- <span class="cline-any cline-neutral">&nbsp;</span>
1089
- <span class="cline-any cline-neutral">&nbsp;</span>
1090
- <span class="cline-any cline-neutral">&nbsp;</span>
1091
- <span class="cline-any cline-neutral">&nbsp;</span>
1092
- <span class="cline-any cline-yes">16x</span>
1093
- <span class="cline-any cline-neutral">&nbsp;</span>
1094
- <span class="cline-any cline-neutral">&nbsp;</span>
1095
- <span class="cline-any cline-neutral">&nbsp;</span>
1096
- <span class="cline-any cline-neutral">&nbsp;</span>
1097
- <span class="cline-any cline-neutral">&nbsp;</span>
1098
- <span class="cline-any cline-yes">16x</span>
1099
- <span class="cline-any cline-neutral">&nbsp;</span>
1100
- <span class="cline-any cline-neutral">&nbsp;</span>
1101
- <span class="cline-any cline-neutral">&nbsp;</span>
1102
- <span class="cline-any cline-neutral">&nbsp;</span>
1103
- <span class="cline-any cline-neutral">&nbsp;</span>
1104
- <span class="cline-any cline-neutral">&nbsp;</span>
1105
- <span class="cline-any cline-neutral">&nbsp;</span>
1106
- <span class="cline-any cline-neutral">&nbsp;</span>
1107
- <span class="cline-any cline-neutral">&nbsp;</span>
1108
- <span class="cline-any cline-neutral">&nbsp;</span>
1109
- <span class="cline-any cline-neutral">&nbsp;</span>
1110
- <span class="cline-any cline-neutral">&nbsp;</span>
1111
- <span class="cline-any cline-neutral">&nbsp;</span>
1112
- <span class="cline-any cline-neutral">&nbsp;</span>
1113
- <span class="cline-any cline-neutral">&nbsp;</span>
1114
- <span class="cline-any cline-neutral">&nbsp;</span>
1115
- <span class="cline-any cline-neutral">&nbsp;</span>
1116
- <span class="cline-any cline-neutral">&nbsp;</span>
1117
- <span class="cline-any cline-neutral">&nbsp;</span>
1118
- <span class="cline-any cline-neutral">&nbsp;</span>
1119
- <span class="cline-any cline-yes">3x</span>
1120
- <span class="cline-any cline-yes">3x</span>
1121
- <span class="cline-any cline-yes">3x</span>
1122
- <span class="cline-any cline-yes">3x</span>
1123
- <span class="cline-any cline-neutral">&nbsp;</span>
1124
- <span class="cline-any cline-yes">3x</span>
1125
- <span class="cline-any cline-yes">3x</span>
1126
- <span class="cline-any cline-yes">3x</span>
1127
- <span class="cline-any cline-neutral">&nbsp;</span>
1128
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { SearchIndexes } from "../../../db/utils"
1129
- import { removeKeyNumbering } from "./utils"
1130
- import fetch from "node-fetch"
1131
- import { db as dbCore, context } from "@budibase/backend-core"
1132
- import { SearchFilters, Row } from "@budibase/types"
1133
- &nbsp;
1134
- type SearchParams = {
1135
- tableId: string
1136
- sort?: string
1137
- sortOrder?: string
1138
- sortType?: string
1139
- limit?: number
1140
- bookmark?: string
1141
- version?: string
1142
- rows?: Row[]
1143
- }
1144
- &nbsp;
1145
- /**
1146
- * Class to build lucene query URLs.
1147
- * Optionally takes a base lucene query object.
1148
- */
1149
- export class <span class="cstat-no" title="statement not covered" >QueryBuilder<span class="fstat-no" title="function not covered" > </span>{</span>
1150
- query: SearchFilters
1151
- limit: number
1152
- sort?: string
1153
- bookmark?: string
1154
- sortOrder: string
1155
- sortType: string
1156
- includeDocs: boolean
1157
- version?: string
1158
- &nbsp;
1159
- constructor(base?: SearchFilters) {
1160
- this.query = {
1161
- allOr: false,
1162
- string: {},
1163
- fuzzy: {},
1164
- range: {},
1165
- equal: {},
1166
- notEqual: {},
1167
- empty: {},
1168
- notEmpty: {},
1169
- oneOf: {},
1170
- contains: {},
1171
- notContains: {},
1172
- containsAny: {},
1173
- ...base,
1174
- }
1175
- this.limit = 50
1176
- this.sortOrder = "ascending"
1177
- this.sortType = "string"
1178
- this.includeDocs = true
1179
- }
1180
- &nbsp;
1181
- setVersion(version?: string) {
1182
- if (version != null) {
1183
- this.version = version
1184
- }
1185
- return this
1186
- }
1187
- &nbsp;
1188
- setTable(tableId: string) {
1189
- this.query.equal!.tableId = tableId
1190
- return this
1191
- }
1192
- &nbsp;
1193
- setLimit(limit?: number) {
1194
- if (limit != null) {
1195
- this.limit = limit
1196
- }
1197
- return this
1198
- }
1199
- &nbsp;
1200
- setSort(sort?: string) {
1201
- if (sort != null) {
1202
- this.sort = sort
1203
- }
1204
- return this
1205
- }
1206
- &nbsp;
1207
- setSortOrder(sortOrder?: string) {
1208
- if (sortOrder != null) {
1209
- this.sortOrder = sortOrder
1210
- }
1211
- return this
1212
- }
1213
- &nbsp;
1214
- setSortType(sortType?: string) {
1215
- if (sortType != null) {
1216
- this.sortType = sortType
1217
- }
1218
- return this
1219
- }
1220
- &nbsp;
1221
- setBookmark(bookmark?: string) {
1222
- if (bookmark != null) {
1223
- this.bookmark = bookmark
1224
- }
1225
- return this
1226
- }
1227
- &nbsp;
1228
- <span class="fstat-no" title="function not covered" > excludeDocs() {</span>
1229
- <span class="cstat-no" title="statement not covered" > this.includeDocs = false</span>
1230
- <span class="cstat-no" title="statement not covered" > return this</span>
1231
- }
1232
- &nbsp;
1233
- <span class="fstat-no" title="function not covered" > addString(k</span>ey: string, partial: string) {
1234
- <span class="cstat-no" title="statement not covered" > this.query.string![key] = partial</span>
1235
- <span class="cstat-no" title="statement not covered" > return this</span>
1236
- }
1237
- &nbsp;
1238
- <span class="fstat-no" title="function not covered" > addFuzzy(k</span>ey: string, fuzzy: string) {
1239
- <span class="cstat-no" title="statement not covered" > this.query.fuzzy![key] = fuzzy</span>
1240
- <span class="cstat-no" title="statement not covered" > return this</span>
1241
- }
1242
- &nbsp;
1243
- <span class="fstat-no" title="function not covered" > addRange(k</span>ey: string, low: string | number, high: string | number) {
1244
- <span class="cstat-no" title="statement not covered" > this.query.range![key] = {</span>
1245
- low,
1246
- high,
1247
- }
1248
- <span class="cstat-no" title="statement not covered" > return this</span>
1249
- }
1250
- &nbsp;
1251
- <span class="fstat-no" title="function not covered" > addEqual(k</span>ey: string, value: any) {
1252
- <span class="cstat-no" title="statement not covered" > this.query.equal![key] = value</span>
1253
- <span class="cstat-no" title="statement not covered" > return this</span>
1254
- }
1255
- &nbsp;
1256
- <span class="fstat-no" title="function not covered" > addNotEqual(k</span>ey: string, value: any) {
1257
- <span class="cstat-no" title="statement not covered" > this.query.notEqual![key] = value</span>
1258
- <span class="cstat-no" title="statement not covered" > return this</span>
1259
- }
1260
- &nbsp;
1261
- <span class="fstat-no" title="function not covered" > addEmpty(k</span>ey: string, value: any) {
1262
- <span class="cstat-no" title="statement not covered" > this.query.empty![key] = value</span>
1263
- <span class="cstat-no" title="statement not covered" > return this</span>
1264
- }
1265
- &nbsp;
1266
- <span class="fstat-no" title="function not covered" > addNotEmpty(k</span>ey: string, value: any) {
1267
- <span class="cstat-no" title="statement not covered" > this.query.notEmpty![key] = value</span>
1268
- <span class="cstat-no" title="statement not covered" > return this</span>
1269
- }
1270
- &nbsp;
1271
- <span class="fstat-no" title="function not covered" > addOneOf(k</span>ey: string, value: any) {
1272
- <span class="cstat-no" title="statement not covered" > this.query.oneOf![key] = value</span>
1273
- <span class="cstat-no" title="statement not covered" > return this</span>
1274
- }
1275
- &nbsp;
1276
- <span class="fstat-no" title="function not covered" > addContains(k</span>ey: string, value: any) {
1277
- <span class="cstat-no" title="statement not covered" > this.query.contains![key] = value</span>
1278
- <span class="cstat-no" title="statement not covered" > return this</span>
1279
- }
1280
- &nbsp;
1281
- <span class="fstat-no" title="function not covered" > addNotContains(k</span>ey: string, value: any) {
1282
- <span class="cstat-no" title="statement not covered" > this.query.notContains![key] = value</span>
1283
- <span class="cstat-no" title="statement not covered" > return this</span>
1284
- }
1285
- &nbsp;
1286
- <span class="fstat-no" title="function not covered" > addContainsAny(k</span>ey: string, value: any) {
1287
- <span class="cstat-no" title="statement not covered" > this.query.containsAny![key] = value</span>
1288
- <span class="cstat-no" title="statement not covered" > return this</span>
1289
- }
1290
- &nbsp;
1291
- /**
1292
- * Preprocesses a value before going into a lucene search.
1293
- * Transforms strings to lowercase and wraps strings and bools in quotes.
1294
- * @param value The value to process
1295
- * @param options The preprocess options
1296
- * @returns {string|*}
1297
- */
1298
- preprocess(value: any, { escape, lowercase, wrap, type }: any = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
1299
- const hasVersion = !!this.version
1300
- // Determine if type needs wrapped
1301
- const originalType = typeof value
1302
- // Convert to lowercase
1303
- if (value &amp;&amp; lowercase) {
1304
- value = value.toLowerCase ? value.toLowerCase() : value
1305
- }
1306
- // Escape characters
1307
- if (escape &amp;&amp; originalType === "string") {
1308
- value = `${value}`.replace(/[ #+\-&amp;|!(){}\]^"~*?:\\]/g, "\\$&amp;")
1309
- }
1310
- &nbsp;
1311
- // Wrap in quotes
1312
- if (originalType === "string" &amp;&amp; !isNaN(value) &amp;&amp; !type) {
1313
- value = `"${value}"`
1314
- } else if (hasVersion &amp;&amp; wrap) {
1315
- value = originalType === "number" ? value : `"${value}"`
1316
- }
1317
- return value
1318
- }
1319
- &nbsp;
1320
- buildSearchQuery() {
1321
- const builder = this
1322
- let allOr = this.query &amp;&amp; this.query.allOr
1323
- let query = allOr ? "" : "*:*"
1324
- const allPreProcessingOpts = { escape: true, lowercase: true, wrap: true }
1325
- let tableId
1326
- if (this.query.equal!.tableId) {
1327
- tableId = this.query.equal!.tableId
1328
- delete this.query.equal!.tableId
1329
- }
1330
- &nbsp;
1331
- const equal = (key: string, value: any) =&gt; {
1332
- // 0 evaluates to false, which means we would return all rows if we don't check it
1333
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!value &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >value !== 0) {</span>
1334
- <span class="cstat-no" title="statement not covered" > return null</span>
1335
- }
1336
- return `${key}:${builder.preprocess(value, allPreProcessingOpts)}`
1337
- }
1338
- &nbsp;
1339
- const contains = (key: string, value: any, mode = "AND") =&gt; {
1340
- <span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(value) &amp;&amp; value.length === 0) {
1341
- <span class="cstat-no" title="statement not covered" > return null</span>
1342
- }
1343
- if (!Array.isArray(value)) {
1344
- return `${key}:${value}`
1345
- }
1346
- let statement = `${builder.preprocess(value[0], { escape: true })}`
1347
- for (let i = 1; i &lt; value.length; i++) {
1348
- statement += ` ${mode} ${builder.preprocess(value[i], {
1349
- escape: true,
1350
- })}`
1351
- }
1352
- return `${key}:(${statement})`
1353
- }
1354
- &nbsp;
1355
- const notContains = (key: string, value: any) =&gt; {
1356
- // @ts-ignore
1357
- const allPrefix = allOr === "" ? <span class="branch-0 cbranch-no" title="branch not covered" >"*:* AND" : "</span>"
1358
- return allPrefix + "NOT " + contains(key, value)
1359
- }
1360
- &nbsp;
1361
- const containsAny = (key: string, value: any) =&gt; {
1362
- return contains(key, value, "OR")
1363
- }
1364
- &nbsp;
1365
- const oneOf = (key: string, value: any) =&gt; {
1366
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(value)) {
1367
- <span class="cstat-no" title="statement not covered" > if (typeof value === "string") {</span>
1368
- <span class="cstat-no" title="statement not covered" > value = value.split(",")</span>
1369
- } else {
1370
- <span class="cstat-no" title="statement not covered" > return ""</span>
1371
- }
1372
- }
1373
- let orStatement = `${builder.preprocess(value[0], allPreProcessingOpts)}`
1374
- for (let i = 1; i &lt; value.length; i++) {
1375
- orStatement += ` OR ${builder.preprocess(
1376
- value[i],
1377
- allPreProcessingOpts
1378
- )}`
1379
- }
1380
- return `${key}:(${orStatement})`
1381
- }
1382
- &nbsp;
1383
- function build(structure: any, queryFn: any) {
1384
- for (let [key, value] of Object.entries(structure)) {
1385
- // check for new format - remove numbering if needed
1386
- key = removeKeyNumbering(key)
1387
- key = builder.preprocess(key.replace(/ /g, "_"), {
1388
- escape: true,
1389
- })
1390
- const expression = queryFn(key, value)
1391
- <span class="missing-if-branch" title="if path not taken" >I</span>if (expression == null) {
1392
- <span class="cstat-no" title="statement not covered" > continue</span>
1393
- }
1394
- if (query.length &gt; 0) {
1395
- query += ` ${allOr ? "OR" : "AND"} `
1396
- }
1397
- query += expression
1398
- }
1399
- }
1400
- &nbsp;
1401
- // Construct the actual lucene search query string from JSON structure
1402
- if (this.query.string) {
1403
- build(this.query.string, (key: string, value: any) =&gt; {
1404
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!value) {
1405
- <span class="cstat-no" title="statement not covered" > return null</span>
1406
- }
1407
- value = builder.preprocess(value, {
1408
- escape: true,
1409
- lowercase: true,
1410
- type: "string",
1411
- })
1412
- return `${key}:${value}*`
1413
- })
1414
- }
1415
- if (this.query.range) {
1416
- build(this.query.range, (key: string, value: any) =&gt; {
1417
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!value) {
1418
- <span class="cstat-no" title="statement not covered" > return null</span>
1419
- }
1420
- <span class="missing-if-branch" title="if path not taken" >I</span>if (value.low == null || value.low === "") {
1421
- <span class="cstat-no" title="statement not covered" > return null</span>
1422
- }
1423
- <span class="missing-if-branch" title="if path not taken" >I</span>if (value.high == null || value.high === "") {
1424
- <span class="cstat-no" title="statement not covered" > return null</span>
1425
- }
1426
- const low = builder.preprocess(value.low, allPreProcessingOpts)
1427
- const high = builder.preprocess(value.high, allPreProcessingOpts)
1428
- return `${key}:[${low} TO ${high}]`
1429
- })
1430
- }
1431
- if (this.query.fuzzy) {
1432
- build(this.query.fuzzy, <span class="fstat-no" title="function not covered" >(k</span>ey: string, value: any) =&gt; {
1433
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!value) {</span>
1434
- <span class="cstat-no" title="statement not covered" > return null</span>
1435
- }
1436
- <span class="cstat-no" title="statement not covered" > value = builder.preprocess(value, {</span>
1437
- escape: true,
1438
- lowercase: true,
1439
- type: "fuzzy",
1440
- })
1441
- <span class="cstat-no" title="statement not covered" > return `${key}:${value}~`</span>
1442
- })
1443
- }
1444
- if (this.query.equal) {
1445
- build(this.query.equal, equal)
1446
- }
1447
- if (this.query.notEqual) {
1448
- build(this.query.notEqual, (key: string, value: any) =&gt; {
1449
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!value) {
1450
- <span class="cstat-no" title="statement not covered" > return null</span>
1451
- }
1452
- return `!${key}:${builder.preprocess(value, allPreProcessingOpts)}`
1453
- })
1454
- }
1455
- if (this.query.empty) {
1456
- build(this.query.empty, (key: string) =&gt; `!${key}:["" TO *]`)
1457
- }
1458
- if (this.query.notEmpty) {
1459
- build(this.query.notEmpty, (key: string) =&gt; `${key}:["" TO *]`)
1460
- }
1461
- if (this.query.oneOf) {
1462
- build(this.query.oneOf, oneOf)
1463
- }
1464
- if (this.query.contains) {
1465
- build(this.query.contains, contains)
1466
- }
1467
- if (this.query.notContains) {
1468
- build(this.query.notContains, notContains)
1469
- }
1470
- if (this.query.containsAny) {
1471
- build(this.query.containsAny, containsAny)
1472
- }
1473
- // make sure table ID is always added as an AND
1474
- if (tableId) {
1475
- query = `(${query})`
1476
- allOr = false
1477
- build({ tableId }, equal)
1478
- }
1479
- return query
1480
- }
1481
- &nbsp;
1482
- buildSearchBody() {
1483
- let body: any = {
1484
- q: this.buildSearchQuery(),
1485
- limit: Math.min(this.limit, 200),
1486
- include_docs: this.includeDocs,
1487
- }
1488
- if (this.bookmark) {
1489
- body.bookmark = this.bookmark
1490
- }
1491
- if (this.sort) {
1492
- const order = this.sortOrder === "descending" ? <span class="branch-0 cbranch-no" title="branch not covered" >"-" : "</span>"
1493
- const type = `&lt;${this.sortType}&gt;`
1494
- body.sort = `${order}${this.sort.replace(/ /g, "_")}${type}`
1495
- }
1496
- return body
1497
- }
1498
- &nbsp;
1499
- async run() {
1500
- const appId = context.getAppId()
1501
- const { url, cookie } = dbCore.getCouchInfo()
1502
- const fullPath = `${url}/${appId}/_design/database/_search/${SearchIndexes.ROWS}`
1503
- const body = this.buildSearchBody()
1504
- return await runQuery(fullPath, body, cookie)
1505
- }
1506
- }
1507
- &nbsp;
1508
- /**
1509
- * Executes a lucene search query.
1510
- * @param url The query URL
1511
- * @param body The request body defining search criteria
1512
- * @param cookie The auth cookie for CouchDB
1513
- * @returns {Promise&lt;{rows: []}&gt;}
1514
- */
1515
- const runQuery = async (url: string, body: any, cookie: string) =&gt; {
1516
- const response = await fetch(url, {
1517
- body: JSON.stringify(body),
1518
- method: "POST",
1519
- headers: {
1520
- Authorization: cookie,
1521
- },
1522
- })
1523
- const json = await response.json()
1524
- &nbsp;
1525
- let output: any = {
1526
- rows: [],
1527
- }
1528
- if (json.rows != null &amp;&amp; json.rows.length &gt; 0) {
1529
- output.rows = json.rows.map((row: any) =&gt; row.doc)
1530
- }
1531
- if (json.bookmark) {
1532
- output.bookmark = json.bookmark
1533
- }
1534
- return output
1535
- }
1536
- &nbsp;
1537
- /**
1538
- * Gets round the fixed limit of 200 results from a query by fetching as many
1539
- * pages as required and concatenating the results. This recursively operates
1540
- * until enough results have been found.
1541
- * @param query {object} The JSON query structure
1542
- * @param params {object} The search params including:
1543
- * tableId {string} The table ID to search
1544
- * sort {string} The sort column
1545
- * sortOrder {string} The sort order ("ascending" or "descending")
1546
- * sortType {string} Whether to treat sortable values as strings or
1547
- * numbers. ("string" or "number")
1548
- * limit {number} The number of results to fetch
1549
- * bookmark {string|null} Current bookmark in the recursive search
1550
- * rows {array|null} Current results in the recursive search
1551
- * @returns {Promise&lt;*[]|*&gt;}
1552
- */
1553
- async function recursiveSearch(query: any, params: any): Promise&lt;any&gt; {
1554
- const bookmark = params.bookmark
1555
- const rows = params.rows || []
1556
- <span class="missing-if-branch" title="if path not taken" >I</span>if (rows.length &gt;= params.limit) {
1557
- <span class="cstat-no" title="statement not covered" > return rows</span>
1558
- }
1559
- let pageSize = 200
1560
- <span class="missing-if-branch" title="if path not taken" >I</span>if (rows.length &gt; params.limit - 200) {
1561
- <span class="cstat-no" title="statement not covered" > pageSize = params.limit - rows.length</span>
1562
- }
1563
- const page = await new QueryBuilder(query)
1564
- .setVersion(params.version)
1565
- .setTable(params.tableId)
1566
- .setBookmark(bookmark)
1567
- .setLimit(pageSize)
1568
- .setSort(params.sort)
1569
- .setSortOrder(params.sortOrder)
1570
- .setSortType(params.sortType)
1571
- .run()
1572
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!page.rows.length) {
1573
- <span class="cstat-no" title="statement not covered" > return rows</span>
1574
- }
1575
- if (page.rows.length &lt; 200) {
1576
- return [...rows, ...page.rows]
1577
- }
1578
- const newParams = <span class="cstat-no" title="statement not covered" >{</span>
1579
- ...params,
1580
- bookmark: page.bookmark,
1581
- rows: [...rows, ...page.rows],
1582
- }
1583
- <span class="cstat-no" title="statement not covered" > return await recursiveSearch(query, newParams)</span>
1584
- }
1585
- &nbsp;
1586
- /**
1587
- * Performs a paginated search. A bookmark will be returned to allow the next
1588
- * page to be fetched. There is a max limit off 200 results per page in a
1589
- * paginated search.
1590
- * @param query {object} The JSON query structure
1591
- * @param params {object} The search params including:
1592
- * tableId {string} The table ID to search
1593
- * sort {string} The sort column
1594
- * sortOrder {string} The sort order ("ascending" or "descending")
1595
- * sortType {string} Whether to treat sortable values as strings or
1596
- * numbers. ("string" or "number")
1597
- * limit {number} The desired page size
1598
- * bookmark {string} The bookmark to resume from
1599
- * @returns {Promise&lt;{hasNextPage: boolean, rows: *[]}&gt;}
1600
- */
1601
- export async function paginatedSearch(
1602
- query: SearchFilters,
1603
- params: SearchParams
1604
- ) {
1605
- let limit = params.limit
1606
- if (limit == null || isNaN(limit) || limit &lt; 0) {
1607
- limit = 50
1608
- }
1609
- limit = Math.min(limit, 200)
1610
- const search = new QueryBuilder(query)
1611
- .setVersion(params.version)
1612
- .setTable(params.tableId)
1613
- .setSort(params.sort)
1614
- .setSortOrder(params.sortOrder)
1615
- .setSortType(params.sortType)
1616
- const searchResults = await search
1617
- .setBookmark(params.bookmark)
1618
- .setLimit(limit)
1619
- .run()
1620
- &nbsp;
1621
- // Try fetching 1 row in the next page to see if another page of results
1622
- // exists or not
1623
- const nextResults = await search
1624
- .setTable(params.tableId)
1625
- .setBookmark(searchResults.bookmark)
1626
- .setLimit(1)
1627
- .run()
1628
- &nbsp;
1629
- return {
1630
- ...searchResults,
1631
- hasNextPage: nextResults.rows &amp;&amp; nextResults.rows.length &gt; 0,
1632
- }
1633
- }
1634
- &nbsp;
1635
- /**
1636
- * Performs a full search, fetching multiple pages if required to return the
1637
- * desired amount of results. There is a limit of 1000 results to avoid
1638
- * heavy performance hits, and to avoid client components breaking from
1639
- * handling too much data.
1640
- * @param query {object} The JSON query structure
1641
- * @param params {object} The search params including:
1642
- * tableId {string} The table ID to search
1643
- * sort {string} The sort column
1644
- * sortOrder {string} The sort order ("ascending" or "descending")
1645
- * sortType {string} Whether to treat sortable values as strings or
1646
- * numbers. ("string" or "number")
1647
- * limit {number} The desired number of results
1648
- * @returns {Promise&lt;{rows: *}&gt;}
1649
- */
1650
- export async function fullSearch(query: SearchFilters, params: SearchParams) {
1651
- let limit = params.limit
1652
- if (limit == null || <span class="branch-1 cbranch-no" title="branch not covered" >isNaN(limit) || <span class="branch-2 cbranch-no" title="branch not covered" >l</span>imit &lt; 0) {</span>
1653
- limit = 1000
1654
- }
1655
- params.limit = Math.min(limit, 1000)
1656
- const rows = await recursiveSearch(query, params)
1657
- return { rows }
1658
- }
1659
- &nbsp;</pre></td></tr></table></pre>
1660
-
1661
- <div class='push'></div><!-- for sticky footer -->
1662
- </div><!-- /wrapper -->
1663
- <div class='footer quiet pad2 space-top1 center small'>
1664
- Code coverage generated by
1665
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1666
- at Wed Feb 15 2023 15:07:51 GMT+0000 (Coordinated Universal Time)
1667
- </div>
1668
- <script src="../../../../prettify.js"></script>
1669
- <script>
1670
- window.onload = function () {
1671
- prettyPrint();
1672
- };
1673
- </script>
1674
- <script src="../../../../sorter.js"></script>
1675
- <script src="../../../../block-navigation.js"></script>
1676
- </body>
1677
- </html>
1678
-