@budibase/server 2.1.38 → 2.1.40-alpha.0

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 (788) hide show
  1. package/__mocks__/aws-sdk.ts +14 -0
  2. package/__mocks__/node-fetch.ts +5 -1
  3. package/builder/assets/{index.534f6c29.css → index.144dddb2.css} +2 -2
  4. package/builder/assets/{index.28915bf9.js → index.93f18258.js} +308 -308
  5. package/builder/index.html +2 -2
  6. package/coverage/clover.xml +10747 -3757
  7. package/coverage/coverage-final.json +266 -118
  8. package/coverage/lcov-report/index.html +679 -184
  9. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +190 -0
  10. package/coverage/lcov-report/{api/controllers/apikeys.js.html → src/api/controllers/apikeys.ts.html} +26 -26
  11. package/coverage/lcov-report/src/api/controllers/application.ts.html +2038 -0
  12. package/coverage/lcov-report/src/api/controllers/auth.ts.html +301 -0
  13. package/coverage/lcov-report/{api/controllers/automation.js.html → src/api/controllers/automation.ts.html} +75 -75
  14. package/coverage/lcov-report/src/api/controllers/backup.ts.html +148 -0
  15. package/coverage/lcov-report/{api/controllers/cloud.js.html → src/api/controllers/cloud.ts.html} +47 -47
  16. package/coverage/lcov-report/src/api/controllers/component.ts.html +259 -0
  17. package/coverage/lcov-report/{api/controllers/datasource.js.html → src/api/controllers/datasource.ts.html} +246 -87
  18. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +259 -0
  19. package/coverage/lcov-report/{utilities/rowProcessor → src/api/controllers/deploy}/index.html +40 -40
  20. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +730 -0
  21. package/coverage/lcov-report/{api/controllers/dev.js.html → src/api/controllers/dev.ts.html} +53 -71
  22. package/coverage/lcov-report/src/api/controllers/index.html +431 -0
  23. package/coverage/lcov-report/{api/controllers/integration.js.html → src/api/controllers/integration.ts.html} +19 -22
  24. package/coverage/lcov-report/{api/controllers/layout.js.html → src/api/controllers/layout.ts.html} +26 -26
  25. package/coverage/lcov-report/{api/controllers/metadata.js.html → src/api/controllers/metadata.ts.html} +26 -23
  26. package/coverage/lcov-report/{api/controllers/migrations.js.html → src/api/controllers/migrations.ts.html} +18 -15
  27. package/coverage/lcov-report/{api/controllers/permission.js.html → src/api/controllers/permission.ts.html} +80 -71
  28. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +130 -0
  29. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +310 -0
  30. package/coverage/lcov-report/src/api/controllers/plugin/index.html +206 -0
  31. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +484 -0
  32. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +253 -0
  33. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +97 -0
  34. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +121 -0
  35. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +136 -0
  36. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +334 -0
  37. package/coverage/lcov-report/src/api/controllers/public/index.html +191 -0
  38. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +181 -0
  39. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +191 -0
  40. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +124 -0
  41. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +202 -0
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +178 -0
  43. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +163 -0
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +181 -0
  45. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +145 -0
  46. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +328 -0
  47. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +253 -0
  48. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +268 -0
  49. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +220 -0
  50. package/coverage/lcov-report/src/api/controllers/query/import/index.html +116 -0
  51. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +373 -0
  52. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +131 -0
  53. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +379 -0
  54. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +157 -0
  55. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +403 -0
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +146 -0
  57. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +586 -0
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +712 -0
  59. package/coverage/lcov-report/src/api/controllers/query/index.html +131 -0
  60. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +976 -0
  61. package/coverage/lcov-report/{api/controllers/query/validation.js.html → src/api/controllers/query/validation.ts.html} +17 -17
  62. package/coverage/lcov-report/{api/controllers/role.js.html → src/api/controllers/role.ts.html} +44 -56
  63. package/coverage/lcov-report/{api/controllers/routing.js.html → src/api/controllers/routing.ts.html} +65 -56
  64. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +2260 -0
  65. package/coverage/lcov-report/{api/controllers/row/external.js.html → src/api/controllers/row/external.ts.html} +145 -94
  66. package/coverage/lcov-report/{api → src/api}/controllers/row/index.html +82 -52
  67. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +541 -0
  68. package/coverage/lcov-report/{api/controllers/row/internal.js.html → src/api/controllers/row/internal.ts.html} +137 -95
  69. package/coverage/lcov-report/{api/controllers/row/internalSearch.js.html → src/api/controllers/row/internalSearch.ts.html} +182 -110
  70. package/coverage/lcov-report/{api/controllers/row/staticFormula.js.html → src/api/controllers/row/staticFormula.ts.html} +66 -51
  71. package/coverage/lcov-report/{api/controllers/row/utils.js.html → src/api/controllers/row/utils.ts.html} +77 -47
  72. package/coverage/lcov-report/src/api/controllers/screen.ts.html +463 -0
  73. package/coverage/lcov-report/{api/controllers/script.js.html → src/api/controllers/script.ts.html} +17 -14
  74. package/coverage/lcov-report/src/api/controllers/static/index.html +116 -0
  75. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +694 -0
  76. package/coverage/lcov-report/{api/controllers/table/bulkFormula.js.html → src/api/controllers/table/bulkFormula.ts.html} +96 -54
  77. package/coverage/lcov-report/{api/controllers/table/external.js.html → src/api/controllers/table/external.ts.html} +196 -103
  78. package/coverage/lcov-report/src/api/controllers/table/index.html +176 -0
  79. package/coverage/lcov-report/{api/controllers/table/index.js.html → src/api/controllers/table/index.ts.html} +46 -37
  80. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +661 -0
  81. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +1255 -0
  82. package/coverage/lcov-report/{api/controllers/templates.js.html → src/api/controllers/templates.ts.html} +34 -25
  83. package/coverage/lcov-report/{api/controllers/user.js.html → src/api/controllers/user.ts.html} +79 -85
  84. package/coverage/lcov-report/{api/controllers/view/exporters.js.html → src/api/controllers/view/exporters.ts.html} +20 -14
  85. package/coverage/lcov-report/{api → src/api}/controllers/view/index.html +36 -36
  86. package/coverage/lcov-report/{api/controllers/view/index.js.html → src/api/controllers/view/index.ts.html} +75 -48
  87. package/coverage/lcov-report/{api/controllers/view/utils.js.html → src/api/controllers/view/utils.ts.html} +61 -43
  88. package/coverage/lcov-report/{api/controllers/view/viewBuilder.js.html → src/api/controllers/view/viewBuilder.ts.html} +74 -32
  89. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +379 -0
  90. package/coverage/lcov-report/{api → src/api}/index.html +23 -23
  91. package/coverage/lcov-report/{api/index.js.html → src/api/index.ts.html} +35 -56
  92. package/coverage/lcov-report/{api/routes/analytics.js.html → src/api/routes/analytics.ts.html} +14 -14
  93. package/coverage/lcov-report/{api/routes/integration.js.html → src/api/routes/apikeys.ts.html} +18 -18
  94. package/coverage/lcov-report/{constants/screens.js.html → src/api/routes/application.ts.html} +63 -63
  95. package/coverage/lcov-report/src/api/routes/auth.ts.html +109 -0
  96. package/coverage/lcov-report/{api/routes/automation.js.html → src/api/routes/automation.ts.html} +48 -42
  97. package/coverage/lcov-report/{api/routes/cloud.js.html → src/api/routes/backup.ts.html} +21 -21
  98. package/coverage/lcov-report/{api/routes/deploy.js.html → src/api/routes/cloud.ts.html} +25 -22
  99. package/coverage/lcov-report/{api/routes/component.js.html → src/api/routes/component.ts.html} +17 -17
  100. package/coverage/lcov-report/src/api/routes/datasource.ts.html +265 -0
  101. package/coverage/lcov-report/src/api/routes/deploy.ts.html +148 -0
  102. package/coverage/lcov-report/src/api/routes/dev.ts.html +199 -0
  103. package/coverage/lcov-report/{api → src/api}/routes/index.html +167 -47
  104. package/coverage/lcov-report/src/api/routes/index.ts.html +289 -0
  105. package/coverage/lcov-report/src/api/routes/integration.ts.html +133 -0
  106. package/coverage/lcov-report/{api/routes/layout.js.html → src/api/routes/layout.ts.html} +18 -18
  107. package/coverage/lcov-report/{api/routes/metadata.js.html → src/api/routes/metadata.ts.html} +24 -24
  108. package/coverage/lcov-report/src/api/routes/migrations.ts.html +127 -0
  109. package/coverage/lcov-report/{api/routes/permission.js.html → src/api/routes/permission.ts.html} +48 -24
  110. package/coverage/lcov-report/src/api/routes/plugin.ts.html +151 -0
  111. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +541 -0
  112. package/coverage/lcov-report/src/api/routes/public/index.html +191 -0
  113. package/coverage/lcov-report/src/api/routes/public/index.ts.html +493 -0
  114. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +116 -0
  115. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +328 -0
  116. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +313 -0
  117. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +598 -0
  118. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +586 -0
  119. package/coverage/lcov-report/src/api/routes/public/users.ts.html +511 -0
  120. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +238 -0
  121. package/coverage/lcov-report/src/api/routes/public/utils/index.html +116 -0
  122. package/coverage/lcov-report/{api/routes/query.js.html → src/api/routes/query.ts.html} +33 -42
  123. package/coverage/lcov-report/{utilities/routing/index.js.html → src/api/routes/role.ts.html} +39 -42
  124. package/coverage/lcov-report/{api/routes/routing.js.html → src/api/routes/routing.ts.html} +17 -17
  125. package/coverage/lcov-report/src/api/routes/row.ts.html +883 -0
  126. package/coverage/lcov-report/{api/routes/screen.js.html → src/api/routes/screen.ts.html} +36 -21
  127. package/coverage/lcov-report/{api/routes/script.js.html → src/api/routes/script.ts.html} +17 -17
  128. package/coverage/lcov-report/src/api/routes/static.ts.html +280 -0
  129. package/coverage/lcov-report/{api/routes/table.js.html → src/api/routes/table.ts.html} +24 -33
  130. package/coverage/lcov-report/{api/routes/templates.js.html → src/api/routes/templates.ts.html} +18 -18
  131. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +550 -0
  132. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +131 -0
  133. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +367 -0
  134. package/coverage/lcov-report/{api/routes/user.js.html → src/api/routes/user.ts.html} +29 -35
  135. package/coverage/lcov-report/{api → src/api}/routes/utils/index.html +15 -15
  136. package/coverage/lcov-report/{api/routes/utils/validators.js.html → src/api/routes/utils/validators.ts.html} +46 -58
  137. package/coverage/lcov-report/{api/routes/view.js.html → src/api/routes/view.ts.html} +40 -31
  138. package/coverage/lcov-report/src/api/routes/webhook.ts.html +166 -0
  139. package/coverage/lcov-report/src/app.ts.html +406 -0
  140. package/coverage/lcov-report/{automations/actions.js.html → src/automations/actions.ts.html} +50 -41
  141. package/coverage/lcov-report/{automations/automationUtils.js.html → src/automations/automationUtils.ts.html} +30 -27
  142. package/coverage/lcov-report/{automations/bullboard.js.html → src/automations/bullboard.ts.html} +30 -33
  143. package/coverage/lcov-report/{automations → src/automations}/index.html +63 -48
  144. package/coverage/lcov-report/{api/routes/dev.js.html → src/automations/index.ts.html} +42 -42
  145. package/coverage/lcov-report/src/automations/logging/index.html +116 -0
  146. package/coverage/lcov-report/{events/utils.js.html → src/automations/logging/index.ts.html} +70 -70
  147. package/coverage/lcov-report/{automations/steps/bash.js.html → src/automations/steps/bash.ts.html} +40 -25
  148. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +382 -0
  149. package/coverage/lcov-report/{automations/steps/delay.js.html → src/automations/steps/delay.ts.html} +32 -17
  150. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +349 -0
  151. package/coverage/lcov-report/{automations/steps/discord.js.html → src/automations/steps/discord.ts.html} +38 -23
  152. package/coverage/lcov-report/{automations/steps/executeQuery.js.html → src/automations/steps/executeQuery.ts.html} +41 -26
  153. package/coverage/lcov-report/{automations/steps/executeScript.js.html → src/automations/steps/executeScript.ts.html} +54 -24
  154. package/coverage/lcov-report/{automations/steps/filter.js.html → src/automations/steps/filter.ts.html} +36 -27
  155. package/coverage/lcov-report/src/automations/steps/index.html +371 -0
  156. package/coverage/lcov-report/{automations/steps/integromat.js.html → src/automations/steps/integromat.ts.html} +35 -20
  157. package/coverage/lcov-report/{automations/steps/loop.js.html → src/automations/steps/loop.ts.html} +21 -15
  158. package/coverage/lcov-report/{automations/steps/outgoingWebhook.js.html → src/automations/steps/outgoingWebhook.ts.html} +48 -33
  159. package/coverage/lcov-report/{automations/steps/queryRows.js.html → src/automations/steps/queryRows.ts.html} +94 -58
  160. package/coverage/lcov-report/{automations/steps/sendSmtpEmail.js.html → src/automations/steps/sendSmtpEmail.ts.html} +37 -22
  161. package/coverage/lcov-report/{automations/steps/serverLog.js.html → src/automations/steps/serverLog.ts.html} +38 -20
  162. package/coverage/lcov-report/{automations/steps/slack.js.html → src/automations/steps/slack.ts.html} +35 -20
  163. package/coverage/lcov-report/{automations/steps/updateRow.js.html → src/automations/steps/updateRow.ts.html} +36 -21
  164. package/coverage/lcov-report/{automations/steps/utils.js.html → src/automations/steps/utils.ts.html} +44 -26
  165. package/coverage/lcov-report/{automations/steps/zapier.js.html → src/automations/steps/zapier.ts.html} +38 -20
  166. package/coverage/lcov-report/src/automations/tests/utilities/index.html +116 -0
  167. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +265 -0
  168. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +196 -0
  169. package/coverage/lcov-report/{automations/triggerInfo/cron.js.html → src/automations/triggerInfo/cron.ts.html} +30 -15
  170. package/coverage/lcov-report/{automations → src/automations}/triggerInfo/index.html +31 -31
  171. package/coverage/lcov-report/{automations/triggerInfo/index.js.html → src/automations/triggerInfo/index.ts.html} +17 -17
  172. package/coverage/lcov-report/{automations/triggerInfo/rowDeleted.js.html → src/automations/triggerInfo/rowDeleted.ts.html} +30 -15
  173. package/coverage/lcov-report/{automations/triggerInfo/rowSaved.js.html → src/automations/triggerInfo/rowSaved.ts.html} +30 -15
  174. package/coverage/lcov-report/{automations/triggerInfo/rowUpdated.js.html → src/automations/triggerInfo/rowUpdated.ts.html} +30 -15
  175. package/coverage/lcov-report/{automations/triggerInfo/webhook.js.html → src/automations/triggerInfo/webhook.ts.html} +30 -15
  176. package/coverage/lcov-report/{automations/triggers.js.html → src/automations/triggers.ts.html} +59 -47
  177. package/coverage/lcov-report/src/automations/utils.ts.html +886 -0
  178. package/coverage/lcov-report/{constants → src/constants}/index.html +26 -26
  179. package/coverage/lcov-report/{constants/index.js.html → src/constants/index.ts.html} +173 -185
  180. package/coverage/lcov-report/{constants/layouts.js.html → src/constants/layouts.ts.html} +16 -34
  181. package/coverage/lcov-report/{api/routes/datasource.js.html → src/constants/screens.ts.html} +56 -65
  182. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +2032 -0
  183. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +541 -0
  184. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +427 -0
  185. package/coverage/lcov-report/src/db/defaultData/index.html +176 -0
  186. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +403 -0
  187. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +559 -0
  188. package/coverage/lcov-report/src/db/dynamoClient.ts.html +526 -0
  189. package/coverage/lcov-report/{db/inMemoryView.js.html → src/db/inMemoryView.ts.html} +44 -26
  190. package/coverage/lcov-report/{db → src/db}/index.html +48 -33
  191. package/coverage/lcov-report/src/db/index.ts.html +133 -0
  192. package/coverage/lcov-report/{db/linkedRows/LinkController.js.html → src/db/linkedRows/LinkController.ts.html} +92 -155
  193. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +265 -0
  194. package/coverage/lcov-report/src/db/linkedRows/index.html +161 -0
  195. package/coverage/lcov-report/{db/linkedRows/index.js.html → src/db/linkedRows/index.ts.html} +83 -68
  196. package/coverage/lcov-report/{db/linkedRows/linkUtils.js.html → src/db/linkedRows/linkUtils.ts.html} +73 -46
  197. package/coverage/lcov-report/{db/newid.js.html → src/db/newid.ts.html} +11 -11
  198. package/coverage/lcov-report/{db/utils.js.html → src/db/utils.ts.html} +105 -153
  199. package/coverage/lcov-report/{automations/triggerInfo/app.js.html → src/definitions/automations.ts.html} +42 -42
  200. package/coverage/lcov-report/src/definitions/datasource.ts.html +235 -0
  201. package/coverage/lcov-report/src/definitions/index.html +131 -0
  202. package/coverage/lcov-report/src/environment.ts.html +457 -0
  203. package/coverage/lcov-report/{events/AutomationEmitter.js.html → src/events/AutomationEmitter.ts.html} +36 -21
  204. package/coverage/lcov-report/{events/index.js.html → src/events/BudibaseEmitter.ts.html} +23 -26
  205. package/coverage/lcov-report/{events → src/events}/index.html +48 -33
  206. package/coverage/lcov-report/src/events/index.ts.html +100 -0
  207. package/coverage/lcov-report/src/events/utils.ts.html +319 -0
  208. package/coverage/lcov-report/src/index.html +191 -0
  209. package/coverage/lcov-report/{db/index.js.html → src/index.ts.html} +35 -35
  210. package/coverage/lcov-report/{utilities/queue/inMemoryQueue.js.html → src/integrations/airtable.ts.html} +213 -135
  211. package/coverage/lcov-report/src/integrations/arangodb.ts.html +415 -0
  212. package/coverage/lcov-report/src/integrations/base/index.html +161 -0
  213. package/coverage/lcov-report/src/integrations/base/query.ts.html +133 -0
  214. package/coverage/lcov-report/src/integrations/base/sql.ts.html +1951 -0
  215. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +691 -0
  216. package/coverage/lcov-report/src/integrations/base/utils.ts.html +121 -0
  217. package/coverage/lcov-report/src/integrations/couchdb.ts.html +406 -0
  218. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +745 -0
  219. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +634 -0
  220. package/coverage/lcov-report/src/integrations/firebase.ts.html +646 -0
  221. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +1315 -0
  222. package/coverage/lcov-report/src/integrations/index.html +371 -0
  223. package/coverage/lcov-report/src/integrations/index.ts.html +445 -0
  224. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +1006 -0
  225. package/coverage/lcov-report/src/integrations/mongodb.ts.html +1867 -0
  226. package/coverage/lcov-report/src/integrations/mysql.ts.html +964 -0
  227. package/coverage/lcov-report/src/integrations/oracle.ts.html +1474 -0
  228. package/coverage/lcov-report/src/integrations/postgres.ts.html +1069 -0
  229. package/coverage/lcov-report/src/integrations/queries/index.html +116 -0
  230. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +463 -0
  231. package/coverage/lcov-report/src/integrations/redis.ts.html +550 -0
  232. package/coverage/lcov-report/src/integrations/rest.ts.html +1381 -0
  233. package/coverage/lcov-report/src/integrations/s3.ts.html +862 -0
  234. package/coverage/lcov-report/src/integrations/snowflake.ts.html +376 -0
  235. package/coverage/lcov-report/{integrations → src/integrations}/tests/TestConfiguration.js.html +10 -10
  236. package/coverage/lcov-report/{integrations → src/integrations}/tests/index.html +10 -10
  237. package/coverage/lcov-report/src/integrations/utils.ts.html +1018 -0
  238. package/coverage/lcov-report/{middleware/appInfo.js.html → src/middleware/appInfo.ts.html} +31 -28
  239. package/coverage/lcov-report/src/middleware/authorized.ts.html +460 -0
  240. package/coverage/lcov-report/{middleware/builder.js.html → src/middleware/builder.ts.html} +43 -37
  241. package/coverage/lcov-report/{middleware/currentapp.js.html → src/middleware/currentapp.ts.html} +77 -68
  242. package/coverage/lcov-report/{middleware → src/middleware}/index.html +78 -63
  243. package/coverage/lcov-report/{middleware/joi-validator.js.html → src/middleware/joi-validator.ts.html} +25 -22
  244. package/coverage/lcov-report/{middleware/publicApi.js.html → src/middleware/publicApi.ts.html} +24 -24
  245. package/coverage/lcov-report/{middleware/resourceId.js.html → src/middleware/resourceId.ts.html} +40 -25
  246. package/coverage/lcov-report/{api/routes/apikeys.js.html → src/middleware/selfhost.ts.html} +27 -27
  247. package/coverage/lcov-report/{middleware/utils.js.html → src/middleware/utils.ts.html} +19 -13
  248. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +187 -0
  249. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +163 -0
  250. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +151 -0
  251. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +206 -0
  252. package/coverage/lcov-report/{automations/index.js.html → src/migrations/functions/backfill/app/layouts.ts.html} +53 -53
  253. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +226 -0
  254. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +151 -0
  255. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +151 -0
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +166 -0
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +532 -0
  258. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +283 -0
  259. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +146 -0
  260. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +265 -0
  261. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +232 -0
  262. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +724 -0
  263. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +161 -0
  264. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +106 -0
  265. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +235 -0
  266. package/coverage/lcov-report/src/migrations/functions/index.html +146 -0
  267. package/coverage/lcov-report/{api/routes/role.js.html → src/migrations/functions/syncQuotas.ts.html} +32 -32
  268. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +161 -0
  269. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +94 -0
  270. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +127 -0
  271. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +115 -0
  272. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +169 -0
  273. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +124 -0
  274. package/coverage/lcov-report/{utilities/queue → src/migrations}/index.html +23 -23
  275. package/coverage/lcov-report/src/migrations/index.ts.html +403 -0
  276. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +205 -0
  277. package/coverage/lcov-report/src/migrations/tests/index.html +131 -0
  278. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +283 -0
  279. package/coverage/lcov-report/src/sdk/app/automations/index.html +131 -0
  280. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +100 -0
  281. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +214 -0
  282. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +91 -0
  283. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +604 -0
  284. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +682 -0
  285. package/coverage/lcov-report/src/sdk/app/backups/index.html +176 -0
  286. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +112 -0
  287. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +292 -0
  288. package/coverage/lcov-report/src/sdk/app/tables/index.html +116 -0
  289. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +265 -0
  290. package/coverage/lcov-report/{utilities/routing → src/sdk}/index.html +10 -10
  291. package/coverage/lcov-report/{api/routes/migrations.js.html → src/sdk/index.ts.html} +24 -21
  292. package/coverage/lcov-report/src/startup.ts.html +499 -0
  293. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +1966 -0
  294. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +127 -0
  295. package/coverage/lcov-report/src/tests/utilities/index.html +161 -0
  296. package/coverage/lcov-report/{middleware/selfhost.js.html → src/tests/utilities/index.ts.html} +33 -30
  297. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +667 -0
  298. package/coverage/lcov-report/src/threads/automation.ts.html +1594 -0
  299. package/coverage/lcov-report/src/threads/index.html +161 -0
  300. package/coverage/lcov-report/src/threads/index.ts.html +418 -0
  301. package/coverage/lcov-report/src/threads/query.ts.html +961 -0
  302. package/coverage/lcov-report/src/threads/utils.ts.html +373 -0
  303. package/coverage/lcov-report/{utilities/budibaseDir.js.html → src/utilities/budibaseDir.ts.html} +12 -12
  304. package/coverage/lcov-report/{utilities/centralPath.js.html → src/utilities/centralPath.ts.html} +13 -13
  305. package/coverage/lcov-report/{utilities/csvParser.js.html → src/utilities/csvParser.ts.html} +104 -56
  306. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +547 -0
  307. package/coverage/lcov-report/{api/controllers/table → src/utilities/fileSystem}/index.html +43 -43
  308. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +1117 -0
  309. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +142 -0
  310. package/coverage/lcov-report/{utilities/global.js.html → src/utilities/global.ts.html} +107 -74
  311. package/coverage/lcov-report/{utilities → src/utilities}/index.html +92 -77
  312. package/coverage/lcov-report/{utilities/index.js.html → src/utilities/index.ts.html} +78 -54
  313. package/coverage/lcov-report/{utilities/plugins.js.html → src/utilities/plugins.ts.html} +22 -19
  314. package/coverage/lcov-report/src/utilities/redis.ts.html +343 -0
  315. package/coverage/lcov-report/{api/controllers/query → src/utilities/routing}/index.html +8 -8
  316. package/coverage/lcov-report/src/utilities/routing/index.ts.html +181 -0
  317. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +146 -0
  318. package/coverage/lcov-report/{utilities/rowProcessor/index.js.html → src/utilities/rowProcessor/index.ts.html} +115 -346
  319. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +373 -0
  320. package/coverage/lcov-report/{utilities/rowProcessor/utils.js.html → src/utilities/rowProcessor/utils.ts.html} +50 -38
  321. package/coverage/lcov-report/{utilities/scriptRunner.js.html → src/utilities/scriptRunner.ts.html} +28 -16
  322. package/coverage/lcov-report/{utilities/security.js.html → src/utilities/security.ts.html} +56 -74
  323. package/coverage/lcov-report/{utilities/statusCodes.js.html → src/utilities/statusCodes.ts.html} +11 -11
  324. package/coverage/lcov-report/{utilities → src/utilities}/usageQuota/index.html +28 -28
  325. package/coverage/lcov-report/{utilities/usageQuota/rows.js.html → src/utilities/usageQuota/rows.ts.html} +34 -46
  326. package/coverage/lcov-report/{utilities/usageQuota/usageQuoteReset.js.html → src/utilities/usageQuota/usageQuoteReset.ts.html} +13 -13
  327. package/coverage/lcov-report/{utilities/users.js.html → src/utilities/users.ts.html} +29 -35
  328. package/coverage/lcov-report/{utilities/workerRequests.js.html → src/utilities/workerRequests.ts.html} +129 -114
  329. package/coverage/lcov-report/src/watch.ts.html +196 -0
  330. package/coverage/lcov-report/src/websocket.ts.html +163 -0
  331. package/coverage/lcov.info +19514 -6962
  332. package/dist/api/controllers/apikeys.js +12 -9
  333. package/dist/api/controllers/application.js +48 -45
  334. package/dist/api/controllers/automation.js +122 -82
  335. package/dist/api/controllers/cloud.js +84 -71
  336. package/dist/api/controllers/component.js +4 -2
  337. package/dist/api/controllers/datasource.js +144 -92
  338. package/dist/api/controllers/deploy/Deployment.js +10 -6
  339. package/dist/api/controllers/deploy/index.js +13 -16
  340. package/dist/api/controllers/dev.js +96 -81
  341. package/dist/api/controllers/integration.js +11 -8
  342. package/dist/api/controllers/layout.js +18 -15
  343. package/dist/api/controllers/metadata.js +51 -37
  344. package/dist/api/controllers/migrations.js +19 -11
  345. package/dist/api/controllers/permission.js +52 -43
  346. package/dist/api/controllers/plugin/index.js +6 -7
  347. package/dist/api/controllers/plugin/utils.js +2 -1
  348. package/dist/api/controllers/public/applications.js +17 -9
  349. package/dist/api/controllers/public/tables.js +29 -9
  350. package/dist/api/controllers/public/utils.js +2 -2
  351. package/dist/api/controllers/query/import/index.js +1 -2
  352. package/dist/api/controllers/query/index.js +10 -13
  353. package/dist/api/controllers/query/validation.js +41 -33
  354. package/dist/api/controllers/role.js +29 -27
  355. package/dist/api/controllers/routing.js +71 -58
  356. package/dist/api/controllers/row/ExternalRequest.js +538 -542
  357. package/dist/api/controllers/row/external.js +258 -190
  358. package/dist/api/controllers/row/index.js +43 -14
  359. package/dist/api/controllers/row/internal.js +354 -295
  360. package/dist/api/controllers/row/internalSearch.js +95 -80
  361. package/dist/api/controllers/row/staticFormula.js +125 -112
  362. package/dist/api/controllers/row/utils.js +122 -84
  363. package/dist/api/controllers/screen.js +81 -66
  364. package/dist/api/controllers/script.js +13 -6
  365. package/dist/api/controllers/static/index.js +11 -14
  366. package/dist/api/controllers/table/bulkFormula.js +47 -35
  367. package/dist/api/controllers/table/external.js +89 -53
  368. package/dist/api/controllers/table/index.js +64 -31
  369. package/dist/api/controllers/table/internal.js +5 -6
  370. package/dist/api/controllers/table/utils.js +39 -35
  371. package/dist/api/controllers/templates.js +17 -10
  372. package/dist/api/controllers/user.js +82 -70
  373. package/dist/api/controllers/view/exporters.js +8 -4
  374. package/dist/api/controllers/view/index.js +201 -153
  375. package/dist/api/controllers/view/utils.js +151 -121
  376. package/dist/api/controllers/view/viewBuilder.js +4 -16
  377. package/dist/api/controllers/webhook.js +25 -2
  378. package/dist/api/index.js +38 -34
  379. package/dist/api/routes/analytics.js +29 -3
  380. package/dist/api/routes/apikeys.js +33 -7
  381. package/dist/api/routes/application.js +8 -9
  382. package/dist/api/routes/auth.js +1 -2
  383. package/dist/api/routes/automation.js +46 -20
  384. package/dist/api/routes/backup.js +3 -4
  385. package/dist/api/routes/cloud.js +32 -6
  386. package/dist/api/routes/component.js +32 -6
  387. package/dist/api/routes/datasource.js +39 -13
  388. package/dist/api/routes/deploy.js +34 -8
  389. package/dist/api/routes/dev.js +36 -10
  390. package/dist/api/routes/integration.js +33 -7
  391. package/dist/api/routes/layout.js +33 -7
  392. package/dist/api/routes/metadata.js +36 -10
  393. package/dist/api/routes/migrations.js +32 -6
  394. package/dist/api/routes/permission.js +38 -12
  395. package/dist/api/routes/plugin.js +5 -5
  396. package/dist/api/routes/public/index.js +11 -11
  397. package/dist/api/routes/query.js +42 -15
  398. package/dist/api/routes/role.js +36 -10
  399. package/dist/api/routes/routing.js +32 -6
  400. package/dist/api/routes/row.js +12 -11
  401. package/dist/api/routes/screen.js +35 -9
  402. package/dist/api/routes/script.js +32 -6
  403. package/dist/api/routes/static.js +9 -9
  404. package/dist/api/routes/table.js +40 -13
  405. package/dist/api/routes/templates.js +33 -7
  406. package/dist/api/routes/tests/utilities/TestFunctions.js +6 -8
  407. package/dist/api/routes/tests/utilities/index.js +69 -32
  408. package/dist/api/routes/user.js +40 -13
  409. package/dist/api/routes/utils/validators.js +142 -126
  410. package/dist/api/routes/view.js +38 -12
  411. package/dist/api/routes/webhook.js +1 -2
  412. package/dist/app.js +22 -22
  413. package/dist/automations/actions.js +53 -24
  414. package/dist/automations/automationUtils.js +31 -19
  415. package/dist/automations/bullboard.js +59 -29
  416. package/dist/automations/index.js +23 -18
  417. package/dist/automations/steps/bash.js +40 -10
  418. package/dist/automations/steps/createRow.js +2 -1
  419. package/dist/automations/steps/delay.js +9 -5
  420. package/dist/automations/steps/deleteRow.js +2 -1
  421. package/dist/automations/steps/discord.js +14 -7
  422. package/dist/automations/steps/executeQuery.js +34 -7
  423. package/dist/automations/steps/executeScript.js +34 -7
  424. package/dist/automations/steps/filter.js +20 -18
  425. package/dist/automations/steps/integromat.js +14 -7
  426. package/dist/automations/steps/loop.js +4 -1
  427. package/dist/automations/steps/outgoingWebhook.js +45 -14
  428. package/dist/automations/steps/queryRows.js +71 -38
  429. package/dist/automations/steps/sendSmtpEmail.js +33 -6
  430. package/dist/automations/steps/serverLog.js +12 -8
  431. package/dist/automations/steps/slack.js +14 -7
  432. package/dist/automations/steps/updateRow.js +34 -7
  433. package/dist/automations/steps/utils.js +22 -16
  434. package/dist/automations/steps/zapier.js +15 -7
  435. package/dist/automations/tests/utilities/index.js +62 -38
  436. package/dist/automations/triggerInfo/app.js +4 -1
  437. package/dist/automations/triggerInfo/cron.js +4 -1
  438. package/dist/automations/triggerInfo/index.js +31 -6
  439. package/dist/automations/triggerInfo/rowDeleted.js +4 -1
  440. package/dist/automations/triggerInfo/rowSaved.js +4 -1
  441. package/dist/automations/triggerInfo/rowUpdated.js +4 -1
  442. package/dist/automations/triggerInfo/webhook.js +4 -1
  443. package/dist/automations/triggers.js +90 -57
  444. package/dist/automations/utils.js +9 -8
  445. package/dist/constants/index.js +118 -104
  446. package/dist/constants/layouts.js +7 -10
  447. package/dist/constants/screens.js +49 -44
  448. package/dist/db/defaultData/datasource_bb_default.js +571 -0
  449. package/dist/db/defaultData/employeeImport.js +155 -0
  450. package/dist/db/defaultData/expensesImport.js +117 -0
  451. package/dist/db/defaultData/inventoryImport.js +109 -0
  452. package/dist/db/defaultData/jobsImport.js +152 -0
  453. package/dist/db/dynamoClient.js +20 -20
  454. package/dist/db/inMemoryView.js +47 -38
  455. package/dist/db/index.js +7 -4
  456. package/dist/db/linkedRows/LinkController.js +51 -70
  457. package/dist/db/linkedRows/LinkDocument.js +32 -0
  458. package/dist/db/linkedRows/index.js +93 -81
  459. package/dist/db/linkedRows/linkUtils.js +42 -32
  460. package/dist/db/utils.js +146 -119
  461. package/dist/db/views/staticViews.js +91 -74
  462. package/dist/environment.js +9 -6
  463. package/dist/events/AutomationEmitter.js +13 -10
  464. package/dist/events/BudibaseEmitter.js +24 -0
  465. package/dist/events/index.js +5 -23
  466. package/dist/events/utils.js +18 -10
  467. package/dist/integrations/elasticsearch.js +26 -2
  468. package/dist/integrations/googlesheets.js +5 -6
  469. package/dist/integrations/index.js +15 -6
  470. package/dist/integrations/mysql.js +3 -1
  471. package/dist/integrations/s3.js +157 -1
  472. package/dist/middleware/appInfo.js +14 -9
  473. package/dist/middleware/authorized.js +22 -21
  474. package/dist/middleware/builder.js +41 -40
  475. package/dist/middleware/currentapp.js +39 -37
  476. package/dist/middleware/joi-validator.js +17 -10
  477. package/dist/middleware/publicApi.js +5 -6
  478. package/dist/middleware/resourceId.js +16 -9
  479. package/dist/middleware/selfhost.js +5 -4
  480. package/dist/middleware/utils.js +5 -2
  481. package/dist/migrations/functions/appUrls.js +2 -2
  482. package/dist/migrations/functions/backfill/global.js +1 -1
  483. package/dist/migrations/functions/usageQuotas/syncApps.js +3 -4
  484. package/dist/migrations/functions/usageQuotas/syncRows.js +3 -4
  485. package/dist/migrations/functions/userEmailViewCasing.js +3 -3
  486. package/dist/package.json +10 -44
  487. package/dist/sdk/app/backups/exports.js +1 -2
  488. package/dist/sdk/app/backups/imports.js +2 -3
  489. package/dist/sdk/app/tables/index.js +5 -5
  490. package/dist/startup.js +10 -10
  491. package/dist/tests/utilities/TestConfiguration.js +111 -87
  492. package/dist/tests/utilities/controllers.js +38 -15
  493. package/dist/tests/utilities/structures.js +72 -53
  494. package/dist/threads/automation.js +49 -27
  495. package/dist/threads/query.js +17 -19
  496. package/dist/threads/utils.js +33 -8
  497. package/dist/tsconfig.build.tsbuildinfo +1 -1
  498. package/dist/utilities/budibaseDir.js +4 -2
  499. package/dist/utilities/centralPath.js +14 -7
  500. package/dist/utilities/csvParser.js +27 -21
  501. package/dist/utilities/fileSystem/clientLibrary.js +87 -73
  502. package/dist/utilities/fileSystem/index.js +202 -175
  503. package/dist/utilities/fileSystem/processor.js +8 -3
  504. package/dist/utilities/global.js +87 -66
  505. package/dist/utilities/index.js +102 -75
  506. package/dist/utilities/plugins.js +15 -9
  507. package/dist/utilities/redis.js +100 -65
  508. package/dist/utilities/routing/index.js +27 -23
  509. package/dist/utilities/rowProcessor/index.js +133 -191
  510. package/dist/utilities/rowProcessor/map.js +99 -0
  511. package/dist/utilities/rowProcessor/utils.js +35 -26
  512. package/dist/utilities/scriptRunner.js +8 -5
  513. package/dist/utilities/security.js +39 -35
  514. package/dist/utilities/usageQuota/rows.js +56 -49
  515. package/dist/utilities/users.js +31 -28
  516. package/dist/utilities/workerRequests.js +115 -82
  517. package/dist/watch.js +1 -2
  518. package/jest.config.ts +33 -0
  519. package/package.json +11 -45
  520. package/scripts/exportAppTemplate.js +2 -2
  521. package/scripts/localdomain.js +34 -6
  522. package/src/api/controllers/{apikeys.js → apikeys.ts} +10 -10
  523. package/src/api/controllers/application.ts +56 -42
  524. package/src/api/controllers/auth.ts +4 -3
  525. package/src/api/controllers/{automation.js → automation.ts} +48 -48
  526. package/src/api/controllers/{cloud.js → cloud.ts} +24 -24
  527. package/src/api/controllers/component.ts +2 -1
  528. package/src/api/controllers/{datasource.js → datasource.ts} +100 -47
  529. package/src/api/controllers/deploy/{Deployment.js → Deployment.ts} +13 -10
  530. package/src/api/controllers/deploy/index.ts +13 -25
  531. package/src/api/controllers/{dev.js → dev.ts} +31 -37
  532. package/src/api/controllers/integration.ts +13 -0
  533. package/src/api/controllers/{layout.js → layout.ts} +8 -8
  534. package/src/api/controllers/{metadata.js → metadata.ts} +11 -10
  535. package/src/api/controllers/migrations.ts +14 -0
  536. package/src/api/controllers/{permission.js → permission.ts} +49 -46
  537. package/src/api/controllers/plugin/index.ts +4 -5
  538. package/src/api/controllers/plugin/utils.ts +3 -5
  539. package/src/api/controllers/public/applications.ts +15 -9
  540. package/src/api/controllers/public/rows.ts +1 -1
  541. package/src/api/controllers/public/tables.ts +2 -2
  542. package/src/api/controllers/public/utils.ts +2 -2
  543. package/src/api/controllers/query/import/index.ts +2 -3
  544. package/src/api/controllers/query/index.ts +11 -14
  545. package/src/api/controllers/query/{validation.js → validation.ts} +7 -7
  546. package/src/api/controllers/{role.js → role.ts} +21 -25
  547. package/src/api/controllers/{routing.js → routing.ts} +37 -34
  548. package/src/api/controllers/row/ExternalRequest.ts +602 -624
  549. package/src/api/controllers/row/{external.js → external.ts} +79 -62
  550. package/src/api/controllers/row/index.ts +19 -11
  551. package/src/api/controllers/row/{internal.js → internal.ts} +87 -73
  552. package/src/api/controllers/row/{internalSearch.js → internalSearch.ts} +92 -68
  553. package/src/api/controllers/row/{staticFormula.js → staticFormula.ts} +30 -25
  554. package/src/api/controllers/row/{utils.js → utils.ts} +32 -22
  555. package/src/api/controllers/screen.ts +10 -6
  556. package/src/api/controllers/script.ts +12 -0
  557. package/src/api/controllers/static/index.ts +14 -16
  558. package/src/api/controllers/table/{bulkFormula.js → bulkFormula.ts} +39 -25
  559. package/src/api/controllers/table/{external.js → external.ts} +86 -55
  560. package/src/api/controllers/table/{index.js → index.ts} +21 -18
  561. package/src/api/controllers/table/internal.ts +5 -6
  562. package/src/api/controllers/table/utils.ts +26 -21
  563. package/src/api/controllers/{templates.js → templates.ts} +10 -7
  564. package/src/api/controllers/{user.js → user.ts} +47 -49
  565. package/src/api/controllers/view/{exporters.js → exporters.ts} +5 -3
  566. package/src/api/controllers/view/{index.js → index.ts} +36 -27
  567. package/src/api/controllers/view/{utils.js → utils.ts} +26 -20
  568. package/src/api/controllers/view/{viewBuilder.js → viewBuilder.ts} +25 -11
  569. package/src/api/controllers/webhook.ts +1 -1
  570. package/src/api/{index.js → index.ts} +15 -22
  571. package/src/api/routes/analytics.ts +9 -0
  572. package/src/api/routes/apikeys.ts +12 -0
  573. package/src/api/routes/application.ts +17 -9
  574. package/src/api/routes/auth.ts +2 -2
  575. package/src/api/routes/automation.ts +87 -0
  576. package/src/api/routes/backup.ts +8 -4
  577. package/src/api/routes/cloud.ts +18 -0
  578. package/src/api/routes/component.ts +14 -0
  579. package/src/api/routes/datasource.ts +60 -0
  580. package/src/api/routes/deploy.ts +21 -0
  581. package/src/api/routes/dev.ts +38 -0
  582. package/src/api/routes/integration.ts +16 -0
  583. package/src/api/routes/layout.ts +16 -0
  584. package/src/api/routes/{metadata.js → metadata.ts} +13 -13
  585. package/src/api/routes/migrations.ts +14 -0
  586. package/src/api/routes/permission.ts +41 -0
  587. package/src/api/routes/plugin.ts +14 -6
  588. package/src/api/routes/public/index.ts +11 -14
  589. package/src/api/routes/public/tests/compare.spec.js +1 -1
  590. package/src/api/routes/{query.js → query.ts} +19 -22
  591. package/src/api/routes/role.ts +24 -0
  592. package/src/api/routes/routing.ts +14 -0
  593. package/src/api/routes/row.ts +13 -15
  594. package/src/api/routes/screen.ts +23 -0
  595. package/src/api/routes/script.ts +10 -0
  596. package/src/api/routes/static.ts +7 -10
  597. package/src/api/routes/{table.js → table.ts} +10 -13
  598. package/src/api/routes/templates.ts +16 -0
  599. package/src/api/routes/tests/analytics.spec.js +1 -1
  600. package/src/api/routes/tests/backup.spec.js +9 -1
  601. package/src/api/routes/tests/deployment.spec.ts +1 -1
  602. package/src/api/routes/tests/permissions.spec.js +2 -1
  603. package/src/api/routes/tests/query.spec.js +15 -10
  604. package/src/api/routes/tests/role.spec.js +7 -9
  605. package/src/api/routes/tests/routing.spec.js +2 -1
  606. package/src/api/routes/tests/row.spec.js +3 -4
  607. package/src/api/routes/tests/static.spec.js +2 -2
  608. package/src/api/routes/tests/table.spec.js +40 -36
  609. package/src/api/routes/tests/user.spec.js +2 -1
  610. package/src/api/routes/tests/utilities/TestFunctions.ts +6 -8
  611. package/src/api/routes/tests/utilities/{index.js → index.ts} +12 -12
  612. package/src/api/routes/user.ts +51 -0
  613. package/src/api/routes/utils/{validators.js → validators.ts} +33 -37
  614. package/src/api/routes/view.ts +34 -0
  615. package/src/api/routes/webhook.ts +2 -2
  616. package/src/app.ts +15 -14
  617. package/src/automations/{actions.js → actions.ts} +26 -23
  618. package/src/automations/{automationUtils.js → automationUtils.ts} +13 -12
  619. package/src/automations/bullboard.ts +38 -0
  620. package/src/automations/index.ts +26 -0
  621. package/src/automations/steps/{bash.js → bash.ts} +13 -8
  622. package/src/automations/steps/createRow.ts +8 -3
  623. package/src/automations/steps/{delay.js → delay.ts} +9 -4
  624. package/src/automations/steps/deleteRow.ts +8 -3
  625. package/src/automations/steps/{discord.js → discord.ts} +10 -5
  626. package/src/automations/steps/{executeQuery.js → executeQuery.ts} +12 -7
  627. package/src/automations/steps/{executeScript.js → executeScript.ts} +17 -7
  628. package/src/automations/steps/{filter.js → filter.ts} +12 -9
  629. package/src/automations/steps/{integromat.js → integromat.ts} +10 -5
  630. package/src/automations/steps/{loop.js → loop.ts} +4 -2
  631. package/src/automations/steps/{outgoingWebhook.js → outgoingWebhook.ts} +18 -13
  632. package/src/automations/steps/{queryRows.js → queryRows.ts} +48 -36
  633. package/src/automations/steps/{sendSmtpEmail.js → sendSmtpEmail.ts} +10 -5
  634. package/src/automations/steps/{serverLog.js → serverLog.ts} +9 -3
  635. package/src/automations/steps/{slack.js → slack.ts} +10 -5
  636. package/src/automations/steps/{updateRow.js → updateRow.ts} +12 -7
  637. package/src/automations/steps/{utils.js → utils.ts} +10 -4
  638. package/src/automations/steps/{zapier.js → zapier.ts} +11 -5
  639. package/src/automations/tests/updateRow.spec.js +0 -1
  640. package/src/automations/tests/utilities/index.ts +60 -0
  641. package/src/automations/triggerInfo/{app.js → app.ts} +7 -2
  642. package/src/automations/triggerInfo/{cron.js → cron.ts} +7 -2
  643. package/src/automations/triggerInfo/index.ts +15 -0
  644. package/src/automations/triggerInfo/{rowDeleted.js → rowDeleted.ts} +7 -2
  645. package/src/automations/triggerInfo/{rowSaved.js → rowSaved.ts} +7 -2
  646. package/src/automations/triggerInfo/{rowUpdated.js → rowUpdated.ts} +7 -2
  647. package/src/automations/triggerInfo/{webhook.js → webhook.ts} +7 -2
  648. package/src/automations/{triggers.js → triggers.ts} +30 -26
  649. package/src/automations/utils.ts +9 -12
  650. package/src/constants/index.ts +204 -0
  651. package/src/constants/{layouts.js → layouts.ts} +3 -9
  652. package/src/constants/screens.ts +48 -0
  653. package/src/db/defaultData/datasource_bb_default.ts +649 -0
  654. package/src/db/defaultData/employeeImport.ts +152 -0
  655. package/src/db/defaultData/expensesImport.ts +114 -0
  656. package/src/db/defaultData/inventoryImport.ts +106 -0
  657. package/src/db/defaultData/jobsImport.ts +158 -0
  658. package/src/db/{dynamoClient.js → dynamoClient.ts} +39 -19
  659. package/src/db/{inMemoryView.js → inMemoryView.ts} +15 -9
  660. package/src/db/index.ts +16 -0
  661. package/src/db/linkedRows/{LinkController.js → LinkController.ts} +64 -85
  662. package/src/db/linkedRows/LinkDocument.ts +60 -0
  663. package/src/db/linkedRows/{index.js → index.ts} +43 -38
  664. package/src/db/linkedRows/{linkUtils.js → linkUtils.ts} +33 -24
  665. package/src/db/{newid.js → newid.ts} +1 -1
  666. package/src/db/tests/linkController.spec.js +73 -57
  667. package/src/db/tests/linkTests.spec.js +17 -14
  668. package/src/db/{utils.js → utils.ts} +77 -93
  669. package/src/db/views/{staticViews.js → staticViews.ts} +20 -13
  670. package/src/{environment.js → environment.ts} +11 -7
  671. package/src/events/{AutomationEmitter.js → AutomationEmitter.ts} +12 -7
  672. package/src/events/{index.js → BudibaseEmitter.ts} +7 -8
  673. package/src/events/index.ts +5 -0
  674. package/src/events/utils.ts +78 -0
  675. package/src/integrations/base/sql.ts +1 -1
  676. package/src/integrations/base/sqlTable.ts +1 -1
  677. package/src/integrations/elasticsearch.ts +32 -2
  678. package/src/integrations/googlesheets.ts +5 -7
  679. package/src/integrations/index.ts +45 -41
  680. package/src/integrations/mysql.ts +5 -1
  681. package/src/integrations/s3.ts +179 -3
  682. package/src/integrations/tests/mysql.spec.ts +57 -0
  683. package/src/integrations/tests/s3.spec.ts +85 -1
  684. package/src/integrations/utils.ts +6 -2
  685. package/src/middleware/appInfo.ts +20 -0
  686. package/src/middleware/authorized.ts +21 -28
  687. package/src/middleware/{builder.js → builder.ts} +17 -15
  688. package/src/middleware/{currentapp.js → currentapp.ts} +42 -39
  689. package/src/middleware/{joi-validator.js → joi-validator.ts} +9 -8
  690. package/src/middleware/publicApi.ts +21 -0
  691. package/src/middleware/{resourceId.js → resourceId.ts} +16 -11
  692. package/src/middleware/{selfhost.js → selfhost.ts} +4 -2
  693. package/src/middleware/tests/authorized.spec.js +5 -6
  694. package/src/middleware/tests/currentapp.spec.js +118 -63
  695. package/src/middleware/{utils.js → utils.ts} +3 -1
  696. package/src/migrations/functions/appUrls.ts +2 -2
  697. package/src/migrations/functions/backfill/app/tables.ts +2 -5
  698. package/src/migrations/functions/backfill/global.ts +1 -1
  699. package/src/migrations/functions/tests/appUrls.spec.js +4 -4
  700. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +14 -9
  701. package/src/migrations/functions/usageQuotas/syncApps.ts +3 -4
  702. package/src/migrations/functions/usageQuotas/syncRows.ts +4 -5
  703. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +7 -7
  704. package/src/migrations/functions/userEmailViewCasing.ts +3 -3
  705. package/src/migrations/tests/index.spec.ts +1 -1
  706. package/src/sdk/app/backups/exports.ts +5 -3
  707. package/src/sdk/app/backups/imports.ts +7 -14
  708. package/src/sdk/app/backups/statistics.ts +9 -18
  709. package/src/sdk/app/tables/index.ts +7 -8
  710. package/src/startup.ts +5 -5
  711. package/{scripts/jestSetup.js → src/tests/jestSetup.ts} +11 -2
  712. package/src/tests/utilities/{TestConfiguration.js → TestConfiguration.ts} +111 -78
  713. package/src/tests/utilities/controllers.ts +14 -0
  714. package/src/tests/utilities/{index.js → index.ts} +2 -2
  715. package/src/tests/utilities/{structures.js → structures.ts} +41 -36
  716. package/src/threads/automation.ts +18 -19
  717. package/src/threads/query.ts +11 -16
  718. package/src/threads/utils.ts +4 -5
  719. package/src/utilities/budibaseDir.ts +3 -0
  720. package/src/utilities/{centralPath.js → centralPath.ts} +3 -3
  721. package/src/utilities/{csvParser.js → csvParser.ts} +42 -26
  722. package/src/utilities/fileSystem/{clientLibrary.js → clientLibrary.ts} +20 -20
  723. package/src/utilities/fileSystem/{index.js → index.ts} +55 -63
  724. package/src/utilities/fileSystem/{processor.js → processor.ts} +3 -5
  725. package/src/utilities/global.ts +138 -0
  726. package/src/utilities/{index.js → index.ts} +40 -32
  727. package/src/utilities/{plugins.js → plugins.ts} +5 -4
  728. package/src/utilities/{redis.js → redis.ts} +21 -20
  729. package/src/utilities/routing/index.ts +32 -0
  730. package/src/utilities/rowProcessor/{index.js → index.ts} +67 -144
  731. package/src/utilities/rowProcessor/map.ts +96 -0
  732. package/src/utilities/rowProcessor/{utils.js → utils.ts} +19 -15
  733. package/src/utilities/{scriptRunner.js → scriptRunner.ts} +8 -4
  734. package/src/utilities/security.ts +65 -0
  735. package/src/utilities/{statusCodes.js → statusCodes.ts} +1 -1
  736. package/src/utilities/usageQuota/{rows.js → rows.ts} +14 -18
  737. package/src/utilities/usageQuota/{usageQuoteReset.js → usageQuoteReset.ts} +1 -1
  738. package/src/utilities/{users.js → users.ts} +11 -13
  739. package/src/utilities/{workerRequests.js → workerRequests.ts} +43 -38
  740. package/src/watch.ts +2 -3
  741. package/tsconfig.build.json +1 -2
  742. package/tsconfig.json +3 -1
  743. package/coverage/lcov-report/api/controllers/index.html +0 -326
  744. package/coverage/lcov-report/automations/steps/index.html +0 -341
  745. package/coverage/lcov-report/db/linkedRows/index.html +0 -146
  746. package/dist/integrations/tests/TestConfiguration.js +0 -1
  747. package/dist/utilities/fileSystem/utilities.js +0 -22
  748. package/dist/utilities/queue/inMemoryQueue.js +0 -126
  749. package/src/api/controllers/integration.js +0 -14
  750. package/src/api/controllers/migrations.js +0 -13
  751. package/src/api/controllers/script.js +0 -11
  752. package/src/api/routes/analytics.js +0 -9
  753. package/src/api/routes/apikeys.js +0 -12
  754. package/src/api/routes/automation.js +0 -85
  755. package/src/api/routes/cloud.js +0 -14
  756. package/src/api/routes/component.js +0 -14
  757. package/src/api/routes/datasource.js +0 -51
  758. package/src/api/routes/deploy.js +0 -17
  759. package/src/api/routes/dev.js +0 -26
  760. package/src/api/routes/integration.js +0 -12
  761. package/src/api/routes/layout.js +0 -16
  762. package/src/api/routes/migrations.js +0 -14
  763. package/src/api/routes/permission.js +0 -33
  764. package/src/api/routes/role.js +0 -15
  765. package/src/api/routes/routing.js +0 -14
  766. package/src/api/routes/screen.js +0 -18
  767. package/src/api/routes/script.js +0 -10
  768. package/src/api/routes/templates.js +0 -16
  769. package/src/api/routes/user.js +0 -53
  770. package/src/api/routes/view.js +0 -31
  771. package/src/automations/bullboard.js +0 -39
  772. package/src/automations/index.js +0 -29
  773. package/src/automations/tests/utilities/index.js +0 -51
  774. package/src/automations/triggerInfo/index.js +0 -15
  775. package/src/constants/index.js +0 -208
  776. package/src/constants/screens.js +0 -46
  777. package/src/db/index.js +0 -16
  778. package/src/events/utils.js +0 -38
  779. package/src/middleware/appInfo.js +0 -19
  780. package/src/middleware/publicApi.js +0 -21
  781. package/src/module.d.ts +0 -14
  782. package/src/tests/utilities/controllers.js +0 -16
  783. package/src/utilities/budibaseDir.js +0 -3
  784. package/src/utilities/fileSystem/utilities.js +0 -36
  785. package/src/utilities/global.js +0 -127
  786. package/src/utilities/queue/inMemoryQueue.js +0 -122
  787. package/src/utilities/routing/index.js +0 -25
  788. package/src/utilities/security.js +0 -71
@@ -0,0 +1,961 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/threads/query.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/threads</a> query.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">79.85% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>107/134</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">50.98% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>26/51</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">78.57% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>11/14</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">80% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>104/130</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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span>
359
+ <span class="cline-any cline-yes">2x</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
361
+ <span class="cline-any cline-yes">2x</span>
362
+ <span class="cline-any cline-yes">2x</span>
363
+ <span class="cline-any cline-yes">2x</span>
364
+ <span class="cline-any cline-yes">2x</span>
365
+ <span class="cline-any cline-yes">2x</span>
366
+ <span class="cline-any cline-yes">2x</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-yes">2x</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-neutral">&nbsp;</span>
371
+ <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-yes">2x</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
380
+ <span class="cline-any cline-neutral">&nbsp;</span>
381
+ <span class="cline-any cline-neutral">&nbsp;</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-neutral">&nbsp;</span>
386
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
390
+ <span class="cline-any cline-neutral">&nbsp;</span>
391
+ <span class="cline-any cline-yes">20x</span>
392
+ <span class="cline-any cline-yes">20x</span>
393
+ <span class="cline-any cline-yes">20x</span>
394
+ <span class="cline-any cline-yes">20x</span>
395
+ <span class="cline-any cline-yes">20x</span>
396
+ <span class="cline-any cline-yes">20x</span>
397
+ <span class="cline-any cline-yes">20x</span>
398
+ <span class="cline-any cline-yes">20x</span>
399
+ <span class="cline-any cline-yes">20x</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-yes">20x</span>
402
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-yes">20x</span>
406
+ <span class="cline-any cline-yes">20x</span>
407
+ <span class="cline-any cline-yes">20x</span>
408
+ <span class="cline-any cline-yes">20x</span>
409
+ <span class="cline-any cline-neutral">&nbsp;</span>
410
+ <span class="cline-any cline-neutral">&nbsp;</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-yes">21x</span>
413
+ <span class="cline-any cline-yes">21x</span>
414
+ <span class="cline-any cline-yes">21x</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-yes">21x</span>
417
+ <span class="cline-any cline-yes">21x</span>
418
+ <span class="cline-any cline-no">&nbsp;</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-yes">21x</span>
422
+ <span class="cline-any cline-no">&nbsp;</span>
423
+ <span class="cline-any cline-neutral">&nbsp;</span>
424
+ <span class="cline-any cline-no">&nbsp;</span>
425
+ <span class="cline-any cline-neutral">&nbsp;</span>
426
+ <span class="cline-any cline-neutral">&nbsp;</span>
427
+ <span class="cline-any cline-neutral">&nbsp;</span>
428
+ <span class="cline-any cline-yes">21x</span>
429
+ <span class="cline-any cline-neutral">&nbsp;</span>
430
+ <span class="cline-any cline-neutral">&nbsp;</span>
431
+ <span class="cline-any cline-yes">21x</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-yes">21x</span>
436
+ <span class="cline-any cline-yes">21x</span>
437
+ <span class="cline-any cline-neutral">&nbsp;</span>
438
+ <span class="cline-any cline-neutral">&nbsp;</span>
439
+ <span class="cline-any cline-yes">21x</span>
440
+ <span class="cline-any cline-yes">1x</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-yes">21x</span>
449
+ <span class="cline-any cline-yes">2x</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-yes">19x</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-neutral">&nbsp;</span>
455
+ <span class="cline-any cline-yes">21x</span>
456
+ <span class="cline-any cline-no">&nbsp;</span>
457
+ <span class="cline-any cline-neutral">&nbsp;</span>
458
+ <span class="cline-any cline-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-yes">21x</span>
460
+ <span class="cline-any cline-yes">21x</span>
461
+ <span class="cline-any cline-yes">21x</span>
462
+ <span class="cline-any cline-yes">21x</span>
463
+ <span class="cline-any cline-yes">21x</span>
464
+ <span class="cline-any cline-yes">21x</span>
465
+ <span class="cline-any cline-yes">19x</span>
466
+ <span class="cline-any cline-yes">19x</span>
467
+ <span class="cline-any cline-yes">19x</span>
468
+ <span class="cline-any cline-yes">19x</span>
469
+ <span class="cline-any cline-neutral">&nbsp;</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span>
471
+ <span class="cline-any cline-neutral">&nbsp;</span>
472
+ <span class="cline-any cline-yes">21x</span>
473
+ <span class="cline-any cline-no">&nbsp;</span>
474
+ <span class="cline-any cline-neutral">&nbsp;</span>
475
+ <span class="cline-any cline-neutral">&nbsp;</span>
476
+ <span class="cline-any cline-neutral">&nbsp;</span>
477
+ <span class="cline-any cline-no">&nbsp;</span>
478
+ <span class="cline-any cline-neutral">&nbsp;</span>
479
+ <span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-neutral">&nbsp;</span>
481
+ <span class="cline-any cline-yes">21x</span>
482
+ <span class="cline-any cline-yes">1x</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-neutral">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-no">&nbsp;</span>
488
+ <span class="cline-any cline-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-no">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-yes">1x</span>
492
+ <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-yes">1x</span>
495
+ <span class="cline-any cline-yes">1x</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-yes">20x</span>
500
+ <span class="cline-any cline-no">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-yes">20x</span>
505
+ <span class="cline-any cline-yes">18x</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-yes">20x</span>
510
+ <span class="cline-any cline-no">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-yes">20x</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-yes">20x</span>
517
+ <span class="cline-any cline-no">&nbsp;</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-neutral">&nbsp;</span>
520
+ <span class="cline-any cline-yes">20x</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-yes">5x</span>
525
+ <span class="cline-any cline-yes">5x</span>
526
+ <span class="cline-any cline-yes">5x</span>
527
+ <span class="cline-any cline-yes">5x</span>
528
+ <span class="cline-any cline-neutral">&nbsp;</span>
529
+ <span class="cline-any cline-neutral">&nbsp;</span>
530
+ <span class="cline-any cline-neutral">&nbsp;</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-neutral">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-no">&nbsp;</span>
543
+ <span class="cline-any cline-no">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-no">&nbsp;</span>
546
+ <span class="cline-any cline-no">&nbsp;</span>
547
+ <span class="cline-any cline-neutral">&nbsp;</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-no">&nbsp;</span>
550
+ <span class="cline-any cline-neutral">&nbsp;</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-neutral">&nbsp;</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-neutral">&nbsp;</span>
557
+ <span class="cline-any cline-no">&nbsp;</span>
558
+ <span class="cline-any cline-no">&nbsp;</span>
559
+ <span class="cline-any cline-no">&nbsp;</span>
560
+ <span class="cline-any cline-no">&nbsp;</span>
561
+ <span class="cline-any cline-neutral">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-neutral">&nbsp;</span>
564
+ <span class="cline-any cline-no">&nbsp;</span>
565
+ <span class="cline-any cline-no">&nbsp;</span>
566
+ <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-neutral">&nbsp;</span>
569
+ <span class="cline-any cline-neutral">&nbsp;</span>
570
+ <span class="cline-any cline-no">&nbsp;</span>
571
+ <span class="cline-any cline-neutral">&nbsp;</span>
572
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
+ <span class="cline-any cline-neutral">&nbsp;</span>
574
+ <span class="cline-any cline-yes">6x</span>
575
+ <span class="cline-any cline-yes">6x</span>
576
+ <span class="cline-any cline-yes">6x</span>
577
+ <span class="cline-any cline-yes">6x</span>
578
+ <span class="cline-any cline-yes">6x</span>
579
+ <span class="cline-any cline-yes">5x</span>
580
+ <span class="cline-any cline-neutral">&nbsp;</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
+ <span class="cline-any cline-yes">5x</span>
584
+ <span class="cline-any cline-yes">5x</span>
585
+ <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-yes">1x</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-yes">6x</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-yes">21x</span>
593
+ <span class="cline-any cline-yes">21x</span>
594
+ <span class="cline-any cline-no">&nbsp;</span>
595
+ <span class="cline-any cline-neutral">&nbsp;</span>
596
+ <span class="cline-any cline-yes">21x</span>
597
+ <span class="cline-any cline-yes">21x</span>
598
+ <span class="cline-any cline-yes">21x</span>
599
+ <span class="cline-any cline-yes">2x</span>
600
+ <span class="cline-any cline-yes">2x</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-yes">21x</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-yes">16x</span>
606
+ <span class="cline-any cline-yes">16x</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-yes">6x</span>
609
+ <span class="cline-any cline-no">&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-yes">6x</span>
613
+ <span class="cline-any cline-yes">6x</span>
614
+ <span class="cline-any cline-neutral">&nbsp;</span>
615
+ <span class="cline-any cline-yes">16x</span>
616
+ <span class="cline-any cline-yes">6x</span>
617
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
+ <span class="cline-any cline-yes">16x</span>
619
+ <span class="cline-any cline-yes">16x</span>
620
+ <span class="cline-any cline-yes">6x</span>
621
+ <span class="cline-any cline-yes">6x</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-neutral">&nbsp;</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-yes">6x</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-yes">21x</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-yes">2x</span>
640
+ <span class="cline-any cline-yes">15x</span>
641
+ <span class="cline-any cline-yes">15x</span>
642
+ <span class="cline-any cline-yes">15x</span>
643
+ <span class="cline-any cline-yes">15x</span>
644
+ <span class="cline-any cline-yes">15x</span>
645
+ <span class="cline-any cline-neutral">&nbsp;</span>
646
+ <span class="cline-any cline-no">&nbsp;</span>
647
+ <span class="cline-any cline-neutral">&nbsp;</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></td><td class="text"><pre class="prettyprint lang-js">import { default as threadUtils } from "./utils"
651
+ threadUtils.threadSetup()
652
+ import { WorkerCallback, QueryEvent, QueryVariable } from "./definitions"
653
+ import ScriptRunner from "../utilities/scriptRunner"
654
+ import { getIntegration } from "../integrations"
655
+ import { processStringSync } from "@budibase/string-templates"
656
+ import { context, cache, auth } from "@budibase/backend-core"
657
+ import { getGlobalIDFromUserMetadataID } from "../db/utils"
658
+ import { cloneDeep } from "lodash/fp"
659
+ &nbsp;
660
+ const { isSQL } = require("../integrations/utils")
661
+ const {
662
+ enrichQueryFields,
663
+ interpolateSQL,
664
+ } = require("../integrations/queries/sql")
665
+ &nbsp;
666
+ class QueryRunner {
667
+ datasource: any
668
+ queryVerb: string
669
+ queryId: string
670
+ fields: any
671
+ parameters: any
672
+ pagination: any
673
+ transformer: any
674
+ cachedVariables: any[]
675
+ ctx: any
676
+ queryResponse: any
677
+ noRecursiveQuery: boolean
678
+ hasRerun: boolean
679
+ hasRefreshedOAuth: boolean
680
+ hasDynamicVariables: boolean
681
+ &nbsp;
682
+ constructor(input: QueryEvent, flags = { noRecursiveQuery: false }) {
683
+ this.datasource = input.datasource
684
+ this.queryVerb = input.queryVerb
685
+ this.fields = input.fields
686
+ this.parameters = input.parameters
687
+ this.pagination = input.pagination
688
+ this.transformer = input.transformer
689
+ this.queryId = input.queryId
690
+ this.noRecursiveQuery = flags.noRecursiveQuery
691
+ this.cachedVariables = []
692
+ // Additional context items for enrichment
693
+ this.ctx = input.ctx
694
+ // allows the response from a query to be stored throughout this
695
+ // execution so that if it needs to be re-used for another variable
696
+ // it can be
697
+ this.queryResponse = {}
698
+ this.hasRerun = false
699
+ this.hasRefreshedOAuth = false
700
+ this.hasDynamicVariables = false
701
+ }
702
+ &nbsp;
703
+ async execute(): Promise&lt;any&gt; {
704
+ let { datasource, fields, queryVerb, transformer } = this
705
+ let datasourceClone = cloneDeep(datasource)
706
+ let fieldsClone = cloneDeep(fields)
707
+ &nbsp;
708
+ const Integration = await getIntegration(datasourceClone.source)
709
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!Integration) {
710
+ <span class="cstat-no" title="statement not covered" > throw "Integration type does not exist."</span>
711
+ }
712
+ &nbsp;
713
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (datasourceClone.config.authConfigs) {
714
+ <span class="cstat-no" title="statement not covered" > datasourceClone.config.authConfigs =</span>
715
+ datasourceClone.config.authConfigs.map(<span class="fstat-no" title="function not covered" >(c</span>onfig: any) =&gt; {
716
+ <span class="cstat-no" title="statement not covered" > return enrichQueryFields(config, this.ctx)</span>
717
+ })
718
+ }
719
+ &nbsp;
720
+ const integration = new Integration(datasourceClone.config)
721
+ &nbsp;
722
+ // pre-query, make sure datasource variables are added to parameters
723
+ const parameters = await this.addDatasourceVariables()
724
+ &nbsp;
725
+ // Enrich the parameters with the addition context items.
726
+ // 'user' is now a reserved variable key in mapping parameters
727
+ const enrichedParameters = enrichQueryFields(parameters, this.ctx)
728
+ const enrichedContext = { ...enrichedParameters, ...this.ctx }
729
+ &nbsp;
730
+ // Parse global headers
731
+ if (datasourceClone.config.defaultHeaders) {
732
+ datasourceClone.config.defaultHeaders = enrichQueryFields(
733
+ datasourceClone.config.defaultHeaders,
734
+ enrichedContext
735
+ )
736
+ }
737
+ &nbsp;
738
+ let query
739
+ // handle SQL injections by interpolating the variables
740
+ if (isSQL(datasourceClone)) {
741
+ query = interpolateSQL(fieldsClone, enrichedParameters, integration)
742
+ } else {
743
+ query = enrichQueryFields(fieldsClone, enrichedContext)
744
+ }
745
+ &nbsp;
746
+ // Add pagination values for REST queries
747
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (this.pagination) {
748
+ <span class="cstat-no" title="statement not covered" > query.paginationValues = this.pagination</span>
749
+ }
750
+ &nbsp;
751
+ let output = threadUtils.formatResponse(await integration[queryVerb](query))
752
+ let rows = output,
753
+ info = undefined,
754
+ extra = undefined,
755
+ pagination = undefined
756
+ if (threadUtils.hasExtraData(output)) {
757
+ rows = output.data
758
+ info = output.info
759
+ extra = output.extra
760
+ pagination = output.pagination
761
+ }
762
+ &nbsp;
763
+ // transform as required
764
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (transformer) {
765
+ const runner = <span class="cstat-no" title="statement not covered" >new ScriptRunner(transformer, {</span>
766
+ data: rows,
767
+ params: enrichedParameters,
768
+ })
769
+ <span class="cstat-no" title="statement not covered" > rows = runner.execute()</span>
770
+ }
771
+ &nbsp;
772
+ // if the request fails we retry once, invalidating the cached value
773
+ if (info &amp;&amp; info.code &gt;= 400 &amp;&amp; !this.hasRerun) {
774
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (
775
+ this.ctx.user<span class="branch-0 cbranch-no" title="branch not covered" >?.p</span>rovider &amp;&amp;
776
+ <span class="branch-1 cbranch-no" title="branch not covered" > info.code === 401 </span>&amp;&amp;
777
+ <span class="branch-2 cbranch-no" title="branch not covered" > !this.hasRefreshedOAuth</span>
778
+ ) {
779
+ <span class="cstat-no" title="statement not covered" > await this.refreshOAuth2(this.ctx)</span>
780
+ // Attempt to refresh the access token from the provider
781
+ <span class="cstat-no" title="statement not covered" > this.hasRefreshedOAuth = true</span>
782
+ } else {
783
+ this.hasRerun = true
784
+ }
785
+ &nbsp;
786
+ await threadUtils.invalidateDynamicVariables(this.cachedVariables)
787
+ return this.execute()
788
+ }
789
+ &nbsp;
790
+ // check for undefined response
791
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!rows) {
792
+ <span class="cstat-no" title="statement not covered" > rows = []</span>
793
+ }
794
+ &nbsp;
795
+ // needs to an array for next step
796
+ if (!Array.isArray(rows)) {
797
+ rows = [rows]
798
+ }
799
+ &nbsp;
800
+ // map into JSON if just raw primitive here
801
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (rows.find((row: any) =&gt; typeof row !== "object")) {
802
+ <span class="cstat-no" title="statement not covered" > rows = rows.map(<span class="fstat-no" title="function not covered" >(v</span>alue: any) =&gt; (<span class="cstat-no" title="statement not covered" >{ value })</span>)</span>
803
+ }
804
+ &nbsp;
805
+ // get all the potential fields in the schema
806
+ let keys = rows.flatMap(Object.keys)
807
+ &nbsp;
808
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (integration.end) {
809
+ <span class="cstat-no" title="statement not covered" > integration.end()</span>
810
+ }
811
+ &nbsp;
812
+ return { rows, keys, info, extra, pagination }
813
+ }
814
+ &nbsp;
815
+ async runAnotherQuery(queryId: string, parameters: any) {
816
+ const db = context.getAppDB()
817
+ const query = await db.get(queryId)
818
+ const datasource = await db.get(query.datasourceId)
819
+ return new QueryRunner(
820
+ {
821
+ datasource,
822
+ queryVerb: query.queryVerb,
823
+ fields: query.fields,
824
+ parameters,
825
+ transformer: query.transformer,
826
+ queryId,
827
+ ctx: this.ctx,
828
+ },
829
+ { noRecursiveQuery: true }
830
+ ).execute()
831
+ }
832
+ &nbsp;
833
+ async <span class="fstat-no" title="function not covered" >refreshOAuth2(</span>ctx: any) {
834
+ const { oauth2, providerType, _id } = <span class="cstat-no" title="statement not covered" >ctx.user</span>
835
+ const { configId } = <span class="cstat-no" title="statement not covered" >ctx.auth</span>
836
+ &nbsp;
837
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!providerType || !oauth2?.refreshToken) {</span>
838
+ <span class="cstat-no" title="statement not covered" > throw new Error("No refresh token found for authenticated user")</span>
839
+ }
840
+ &nbsp;
841
+ const resp: any = <span class="cstat-no" title="statement not covered" >await auth.refreshOAuthToken(</span>
842
+ oauth2.refreshToken,
843
+ providerType,
844
+ configId
845
+ )
846
+ &nbsp;
847
+ // Refresh session flow. Should be in same location as refreshOAuthToken
848
+ // There are several other properties available in 'resp'
849
+ <span class="cstat-no" title="statement not covered" > if (!resp.err) {</span>
850
+ const globalUserId = <span class="cstat-no" title="statement not covered" >getGlobalIDFromUserMetadataID(_id)</span>
851
+ <span class="cstat-no" title="statement not covered" > await auth.updateUserOAuth(globalUserId, resp)</span>
852
+ <span class="cstat-no" title="statement not covered" > this.ctx.user = await cache.user.getUser(globalUserId)</span>
853
+ } else {
854
+ // In this event the user may have oAuth issues that
855
+ // could require re-authenticating with their provider.
856
+ let errorMessage = <span class="cstat-no" title="statement not covered" >resp.err.data ? resp.err.data : resp.err.toString()</span>
857
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
858
+ "OAuth2 access token could not be refreshed: " + errorMessage
859
+ )
860
+ }
861
+ &nbsp;
862
+ <span class="cstat-no" title="statement not covered" > return resp</span>
863
+ }
864
+ &nbsp;
865
+ async getDynamicVariable(variable: QueryVariable) {
866
+ let { parameters } = this
867
+ const queryId = variable.queryId,
868
+ name = variable.name
869
+ let value = await threadUtils.checkCacheForDynamicVariable(queryId, name)
870
+ if (!value) {
871
+ value = this.queryResponse[queryId]
872
+ ? <span class="branch-0 cbranch-no" title="branch not covered" >this.queryResponse[queryId]</span>
873
+ : await this.runAnotherQuery(queryId, parameters)
874
+ // store incase this query is to be called again
875
+ this.queryResponse[queryId] = value
876
+ await threadUtils.storeDynamicVariable(queryId, name, value)
877
+ } else {
878
+ this.cachedVariables.push({ queryId, name })
879
+ }
880
+ return value
881
+ }
882
+ &nbsp;
883
+ async addDatasourceVariables() {
884
+ let { datasource, parameters, fields } = this
885
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!datasource || !datasource.config) {
886
+ <span class="cstat-no" title="statement not covered" > return parameters</span>
887
+ }
888
+ const staticVars = datasource.config.staticVariables || {}
889
+ const dynamicVars = datasource.config.dynamicVariables || []
890
+ for (let [key, value] of Object.entries(staticVars)) {
891
+ if (!parameters[key]) {
892
+ parameters[key] = value
893
+ }
894
+ }
895
+ if (!this.noRecursiveQuery) {
896
+ // need to see if this uses any variables
897
+ const stringFields = JSON.stringify(fields)
898
+ const foundVars = dynamicVars.filter((variable: QueryVariable) =&gt; {
899
+ // don't allow a query to use its own dynamic variable (loop)
900
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (variable.queryId === this.queryId) {
901
+ <span class="cstat-no" title="statement not covered" > return false</span>
902
+ }
903
+ // look for {{ variable }} but allow spaces between handlebars
904
+ const regex = new RegExp(`{{[ ]*${variable.name}[ ]*}}`)
905
+ return regex.test(stringFields)
906
+ })
907
+ const dynamics = foundVars.map((dynVar: QueryVariable) =&gt;
908
+ this.getDynamicVariable(dynVar)
909
+ )
910
+ const responses = await Promise.all(dynamics)
911
+ for (let i = 0; i &lt; foundVars.length; i++) {
912
+ const variable = foundVars[i]
913
+ parameters[variable.name] = processStringSync(
914
+ variable.value,
915
+ {
916
+ data: responses[i].rows,
917
+ info: responses[i].extra,
918
+ },
919
+ {
920
+ escapeNewlines: true,
921
+ }
922
+ )
923
+ // make sure its known that this uses dynamic variables in case it fails
924
+ this.hasDynamicVariables = true
925
+ }
926
+ }
927
+ return parameters
928
+ }
929
+ }
930
+ &nbsp;
931
+ export function execute(input: QueryEvent, callback: WorkerCallback) {
932
+ context.doInAppContext(input.appId!, async () =&gt; {
933
+ const Runner = new QueryRunner(input)
934
+ try {
935
+ const response = await Runner.execute()
936
+ callback(null, response)
937
+ } catch (err) {
938
+ <span class="cstat-no" title="statement not covered" > callback(err)</span>
939
+ }
940
+ })
941
+ }
942
+ &nbsp;</pre></td></tr></table></pre>
943
+
944
+ <div class='push'></div><!-- for sticky footer -->
945
+ </div><!-- /wrapper -->
946
+ <div class='footer quiet pad2 space-top1 center small'>
947
+ Code coverage generated by
948
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
949
+ at Tue Nov 29 2022 11:32:32 GMT+0000 (Coordinated Universal Time)
950
+ </div>
951
+ <script src="../../prettify.js"></script>
952
+ <script>
953
+ window.onload = function () {
954
+ prettyPrint();
955
+ };
956
+ </script>
957
+ <script src="../../sorter.js"></script>
958
+ <script src="../../block-navigation.js"></script>
959
+ </body>
960
+ </html>
961
+